@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.
Files changed (255) hide show
  1. package/dist/components/drop/create/artwork-section.cjs +115 -0
  2. package/dist/components/drop/create/artwork-section.cjs.map +1 -0
  3. package/dist/components/drop/create/artwork-section.d.cts +23 -0
  4. package/dist/components/drop/create/artwork-section.d.ts +23 -0
  5. package/dist/components/drop/create/artwork-section.js +79 -0
  6. package/dist/components/drop/create/artwork-section.js.map +1 -0
  7. package/dist/components/drop/create/details-section.cjs +110 -0
  8. package/dist/components/drop/create/details-section.cjs.map +1 -0
  9. package/dist/components/drop/create/details-section.d.cts +11 -0
  10. package/dist/components/drop/create/details-section.d.ts +11 -0
  11. package/dist/components/drop/create/details-section.js +86 -0
  12. package/dist/components/drop/create/details-section.js.map +1 -0
  13. package/dist/components/drop/create/drop-create.cjs +112 -0
  14. package/dist/components/drop/create/drop-create.cjs.map +1 -0
  15. package/dist/components/drop/create/drop-create.d.cts +22 -0
  16. package/dist/components/drop/create/drop-create.d.ts +22 -0
  17. package/dist/components/drop/create/drop-create.js +77 -0
  18. package/dist/components/drop/create/drop-create.js.map +1 -0
  19. package/dist/components/drop/create/exclusive-fields.cjs +45 -0
  20. package/dist/components/drop/create/exclusive-fields.cjs.map +1 -0
  21. package/dist/components/drop/create/exclusive-fields.d.cts +14 -0
  22. package/dist/components/drop/create/exclusive-fields.d.ts +14 -0
  23. package/dist/components/drop/create/exclusive-fields.js +21 -0
  24. package/dist/components/drop/create/exclusive-fields.js.map +1 -0
  25. package/dist/components/drop/create/launch-dialog.cjs +193 -0
  26. package/dist/components/drop/create/launch-dialog.cjs.map +1 -0
  27. package/dist/components/drop/create/launch-dialog.d.cts +21 -0
  28. package/dist/components/drop/create/launch-dialog.d.ts +21 -0
  29. package/dist/components/drop/create/launch-dialog.js +168 -0
  30. package/dist/components/drop/create/launch-dialog.js.map +1 -0
  31. package/dist/components/drop/create/list-section.cjs +67 -0
  32. package/dist/components/drop/create/list-section.cjs.map +1 -0
  33. package/dist/components/drop/create/list-section.d.cts +11 -0
  34. package/dist/components/drop/create/list-section.d.ts +11 -0
  35. package/dist/components/drop/create/list-section.js +43 -0
  36. package/dist/components/drop/create/list-section.js.map +1 -0
  37. package/dist/components/drop/create/sale-section.cjs +78 -0
  38. package/dist/components/drop/create/sale-section.cjs.map +1 -0
  39. package/dist/components/drop/create/sale-section.d.cts +13 -0
  40. package/dist/components/drop/create/sale-section.d.ts +13 -0
  41. package/dist/components/drop/create/sale-section.js +54 -0
  42. package/dist/components/drop/create/sale-section.js.map +1 -0
  43. package/dist/components/drop/drop-card.cjs +81 -0
  44. package/dist/components/drop/drop-card.cjs.map +1 -0
  45. package/dist/components/drop/drop-card.d.cts +18 -0
  46. package/dist/components/drop/drop-card.d.ts +18 -0
  47. package/dist/components/drop/drop-card.js +45 -0
  48. package/dist/components/drop/drop-card.js.map +1 -0
  49. package/dist/components/drop/drop-listing.cjs +79 -0
  50. package/dist/components/drop/drop-listing.cjs.map +1 -0
  51. package/dist/components/drop/drop-listing.d.cts +10 -0
  52. package/dist/components/drop/drop-listing.d.ts +10 -0
  53. package/dist/components/drop/drop-listing.js +45 -0
  54. package/dist/components/drop/drop-listing.js.map +1 -0
  55. package/dist/components/drop/drop-token-link.cjs +63 -0
  56. package/dist/components/drop/drop-token-link.cjs.map +1 -0
  57. package/dist/components/drop/drop-token-link.d.cts +9 -0
  58. package/dist/components/drop/drop-token-link.d.ts +9 -0
  59. package/dist/components/drop/drop-token-link.js +29 -0
  60. package/dist/components/drop/drop-token-link.js.map +1 -0
  61. package/dist/components/drop/my-drops.cjs +71 -0
  62. package/dist/components/drop/my-drops.cjs.map +1 -0
  63. package/dist/components/drop/my-drops.d.cts +12 -0
  64. package/dist/components/drop/my-drops.d.ts +12 -0
  65. package/dist/components/drop/my-drops.js +37 -0
  66. package/dist/components/drop/my-drops.js.map +1 -0
  67. package/dist/components/drop/page/drop-action-box.cjs +63 -0
  68. package/dist/components/drop/page/drop-action-box.cjs.map +1 -0
  69. package/dist/components/drop/page/drop-action-box.d.cts +16 -0
  70. package/dist/components/drop/page/drop-action-box.d.ts +16 -0
  71. package/dist/components/drop/page/drop-action-box.js +39 -0
  72. package/dist/components/drop/page/drop-action-box.js.map +1 -0
  73. package/dist/components/drop/page/drop-activity.cjs +42 -0
  74. package/dist/components/drop/page/drop-activity.cjs.map +1 -0
  75. package/dist/components/drop/page/drop-activity.d.cts +8 -0
  76. package/dist/components/drop/page/drop-activity.d.ts +8 -0
  77. package/dist/components/drop/page/drop-activity.js +18 -0
  78. package/dist/components/drop/page/drop-activity.js.map +1 -0
  79. package/dist/components/drop/page/drop-manage.cjs +161 -0
  80. package/dist/components/drop/page/drop-manage.cjs.map +1 -0
  81. package/dist/components/drop/page/drop-manage.d.cts +24 -0
  82. package/dist/components/drop/page/drop-manage.d.ts +24 -0
  83. package/dist/components/drop/page/drop-manage.js +137 -0
  84. package/dist/components/drop/page/drop-manage.js.map +1 -0
  85. package/dist/components/drop/page/drop-mint-dialog.cjs +97 -0
  86. package/dist/components/drop/page/drop-mint-dialog.cjs.map +1 -0
  87. package/dist/components/drop/page/drop-mint-dialog.d.cts +15 -0
  88. package/dist/components/drop/page/drop-mint-dialog.d.ts +15 -0
  89. package/dist/components/drop/page/drop-mint-dialog.js +73 -0
  90. package/dist/components/drop/page/drop-mint-dialog.js.map +1 -0
  91. package/dist/components/drop/page/drop-page.cjs +165 -0
  92. package/dist/components/drop/page/drop-page.cjs.map +1 -0
  93. package/dist/components/drop/page/drop-page.d.cts +16 -0
  94. package/dist/components/drop/page/drop-page.d.ts +16 -0
  95. package/dist/components/drop/page/drop-page.js +131 -0
  96. package/dist/components/drop/page/drop-page.js.map +1 -0
  97. package/dist/components/drop-status-display.cjs +7 -38
  98. package/dist/components/drop-status-display.cjs.map +1 -1
  99. package/dist/components/drop-status-display.d.cts +6 -7
  100. package/dist/components/drop-status-display.d.ts +6 -7
  101. package/dist/components/drop-status-display.js +7 -37
  102. package/dist/components/drop-status-display.js.map +1 -1
  103. package/dist/components/fast-mint/types.cjs.map +1 -1
  104. package/dist/components/fast-mint/types.d.cts +3 -1
  105. package/dist/components/fast-mint/types.d.ts +3 -1
  106. package/dist/components/image.d.cts +2 -0
  107. package/dist/components/image.d.ts +2 -0
  108. package/dist/index.cjs +46 -27
  109. package/dist/index.cjs.map +1 -1
  110. package/dist/index.d.cts +20 -11
  111. package/dist/index.d.ts +20 -11
  112. package/dist/index.js +31 -25
  113. package/dist/index.js.map +1 -1
  114. package/dist/utils/drop/actions.cjs +76 -0
  115. package/dist/utils/drop/actions.cjs.map +1 -0
  116. package/dist/utils/drop/actions.d.cts +46 -0
  117. package/dist/utils/drop/actions.d.ts +46 -0
  118. package/dist/utils/drop/actions.js +49 -0
  119. package/dist/utils/drop/actions.js.map +1 -0
  120. package/dist/utils/drop/allowlist.cjs +50 -0
  121. package/dist/utils/drop/allowlist.cjs.map +1 -0
  122. package/dist/utils/drop/allowlist.d.cts +10 -0
  123. package/dist/utils/drop/allowlist.d.ts +10 -0
  124. package/dist/utils/drop/allowlist.js +26 -0
  125. package/dist/utils/drop/allowlist.js.map +1 -0
  126. package/dist/utils/drop/chain.cjs +37 -0
  127. package/dist/utils/drop/chain.cjs.map +1 -0
  128. package/dist/utils/drop/chain.d.cts +5 -0
  129. package/dist/utils/drop/chain.d.ts +5 -0
  130. package/dist/utils/drop/chain.js +13 -0
  131. package/dist/utils/drop/chain.js.map +1 -0
  132. package/dist/utils/drop/claim-proof.cjs +48 -0
  133. package/dist/utils/drop/claim-proof.cjs.map +1 -0
  134. package/dist/utils/drop/claim-proof.d.cts +9 -0
  135. package/dist/utils/drop/claim-proof.d.ts +9 -0
  136. package/dist/utils/drop/claim-proof.js +24 -0
  137. package/dist/utils/drop/claim-proof.js.map +1 -0
  138. package/dist/utils/drop/draft.cjs +87 -0
  139. package/dist/utils/drop/draft.cjs.map +1 -0
  140. package/dist/utils/drop/draft.d.cts +32 -0
  141. package/dist/utils/drop/draft.d.ts +32 -0
  142. package/dist/utils/drop/draft.js +61 -0
  143. package/dist/utils/drop/draft.js.map +1 -0
  144. package/dist/utils/drop/metadata.cjs +70 -0
  145. package/dist/utils/drop/metadata.cjs.map +1 -0
  146. package/dist/utils/drop/metadata.d.cts +34 -0
  147. package/dist/utils/drop/metadata.d.ts +34 -0
  148. package/dist/utils/drop/metadata.js +43 -0
  149. package/dist/utils/drop/metadata.js.map +1 -0
  150. package/dist/utils/{drop-status.cjs → drop/preview.cjs} +14 -14
  151. package/dist/utils/drop/preview.cjs.map +1 -0
  152. package/dist/utils/drop/preview.d.cts +4 -0
  153. package/dist/utils/drop/preview.d.ts +4 -0
  154. package/dist/utils/drop/preview.js +13 -0
  155. package/dist/utils/drop/preview.js.map +1 -0
  156. package/dist/utils/drop/receipt.cjs +39 -0
  157. package/dist/utils/drop/receipt.cjs.map +1 -0
  158. package/dist/utils/drop/receipt.d.cts +6 -0
  159. package/dist/utils/drop/receipt.d.ts +6 -0
  160. package/dist/utils/drop/receipt.js +15 -0
  161. package/dist/utils/drop/receipt.js.map +1 -0
  162. package/dist/utils/drop/sale.cjs +108 -0
  163. package/dist/utils/drop/sale.cjs.map +1 -0
  164. package/dist/utils/drop/sale.d.cts +52 -0
  165. package/dist/utils/drop/sale.d.ts +52 -0
  166. package/dist/utils/drop/sale.js +78 -0
  167. package/dist/utils/drop/sale.js.map +1 -0
  168. package/dist/utils/drop/types.cjs +17 -0
  169. package/dist/utils/drop/types.cjs.map +1 -0
  170. package/dist/utils/drop/types.d.cts +20 -0
  171. package/dist/utils/drop/types.d.ts +20 -0
  172. package/dist/utils/drop/types.js +1 -0
  173. package/dist/utils/drop/types.js.map +1 -0
  174. package/dist/utils/drop/upload.cjs +48 -0
  175. package/dist/utils/drop/upload.cjs.map +1 -0
  176. package/dist/utils/drop/upload.d.cts +11 -0
  177. package/dist/utils/drop/upload.d.ts +11 -0
  178. package/dist/utils/drop/upload.js +24 -0
  179. package/dist/utils/drop/upload.js.map +1 -0
  180. package/dist/utils/drop/use-now.cjs +38 -0
  181. package/dist/utils/drop/use-now.cjs.map +1 -0
  182. package/dist/utils/drop/use-now.d.cts +4 -0
  183. package/dist/utils/drop/use-now.d.ts +4 -0
  184. package/dist/utils/drop/use-now.js +14 -0
  185. package/dist/utils/drop/use-now.js.map +1 -0
  186. package/dist/utils/drop/view.cjs +89 -0
  187. package/dist/utils/drop/view.cjs.map +1 -0
  188. package/dist/utils/drop/view.d.cts +34 -0
  189. package/dist/utils/drop/view.d.ts +34 -0
  190. package/dist/utils/drop/view.js +64 -0
  191. package/dist/utils/drop/view.js.map +1 -0
  192. package/dist/utils/launchpad-defaults.cjs +0 -22
  193. package/dist/utils/launchpad-defaults.cjs.map +1 -1
  194. package/dist/utils/launchpad-defaults.d.cts +1 -7
  195. package/dist/utils/launchpad-defaults.d.ts +1 -7
  196. package/dist/utils/launchpad-defaults.js +0 -21
  197. package/dist/utils/launchpad-defaults.js.map +1 -1
  198. package/dist/utils/use-drops.cjs +41 -45
  199. package/dist/utils/use-drops.cjs.map +1 -1
  200. package/dist/utils/use-drops.d.cts +31 -23
  201. package/dist/utils/use-drops.d.ts +31 -23
  202. package/dist/utils/use-drops.js +35 -40
  203. package/dist/utils/use-drops.js.map +1 -1
  204. package/dist/utils/wallet-failure.cjs +2 -2
  205. package/dist/utils/wallet-failure.cjs.map +1 -1
  206. package/dist/utils/wallet-failure.js +2 -2
  207. package/dist/utils/wallet-failure.js.map +1 -1
  208. package/package.json +3 -3
  209. package/dist/components/account/account.test.cjs +0 -86
  210. package/dist/components/account/account.test.cjs.map +0 -1
  211. package/dist/components/account/account.test.d.cts +0 -2
  212. package/dist/components/account/account.test.d.ts +0 -2
  213. package/dist/components/account/account.test.js +0 -85
  214. package/dist/components/account/account.test.js.map +0 -1
  215. package/dist/components/drop-create-form.cjs +0 -341
  216. package/dist/components/drop-create-form.cjs.map +0 -1
  217. package/dist/components/drop-create-form.d.cts +0 -39
  218. package/dist/components/drop-create-form.d.ts +0 -39
  219. package/dist/components/drop-create-form.js +0 -322
  220. package/dist/components/drop-create-form.js.map +0 -1
  221. package/dist/components/drop-preview-card.cjs +0 -106
  222. package/dist/components/drop-preview-card.cjs.map +0 -1
  223. package/dist/components/drop-preview-card.d.cts +0 -17
  224. package/dist/components/drop-preview-card.d.ts +0 -17
  225. package/dist/components/drop-preview-card.js +0 -82
  226. package/dist/components/drop-preview-card.js.map +0 -1
  227. package/dist/components/drop-preview-card.test.cjs +0 -84
  228. package/dist/components/drop-preview-card.test.cjs.map +0 -1
  229. package/dist/components/drop-preview-card.test.d.cts +0 -3
  230. package/dist/components/drop-preview-card.test.d.ts +0 -3
  231. package/dist/components/drop-preview-card.test.js +0 -83
  232. package/dist/components/drop-preview-card.test.js.map +0 -1
  233. package/dist/components/drop-status-display.test.cjs +0 -29
  234. package/dist/components/drop-status-display.test.cjs.map +0 -1
  235. package/dist/components/drop-status-display.test.d.cts +0 -2
  236. package/dist/components/drop-status-display.test.d.ts +0 -2
  237. package/dist/components/drop-status-display.test.js +0 -28
  238. package/dist/components/drop-status-display.test.js.map +0 -1
  239. package/dist/components/exclusive-content-section.cjs +0 -88
  240. package/dist/components/exclusive-content-section.cjs.map +0 -1
  241. package/dist/components/exclusive-content-section.d.cts +0 -10
  242. package/dist/components/exclusive-content-section.d.ts +0 -10
  243. package/dist/components/exclusive-content-section.js +0 -64
  244. package/dist/components/exclusive-content-section.js.map +0 -1
  245. package/dist/data/drop-create-schema.cjs +0 -92
  246. package/dist/data/drop-create-schema.cjs.map +0 -1
  247. package/dist/data/drop-create-schema.d.cts +0 -131
  248. package/dist/data/drop-create-schema.d.ts +0 -131
  249. package/dist/data/drop-create-schema.js +0 -58
  250. package/dist/data/drop-create-schema.js.map +0 -1
  251. package/dist/utils/drop-status.cjs.map +0 -1
  252. package/dist/utils/drop-status.d.cts +0 -12
  253. package/dist/utils/drop-status.d.ts +0 -12
  254. package/dist/utils/drop-status.js +0 -13
  255. package/dist/utils/drop-status.js.map +0 -1
@@ -0,0 +1,112 @@
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_exports = {};
31
+ __export(drop_create_exports, {
32
+ DraftSummary: () => DraftSummary,
33
+ DropCreate: () => DropCreate
34
+ });
35
+ module.exports = __toCommonJS(drop_create_exports);
36
+ var import_jsx_runtime = require("react/jsx-runtime");
37
+ var import_react = require("react");
38
+ var import_lucide_react = require("lucide-react");
39
+ var import_image = __toESM(require("../../image.js"), 1);
40
+ var import_gradient_button = require("../../gradient-button.js");
41
+ var import_collapsible_section = require("../../collapsible-section.js");
42
+ var import_artwork_section = require("./artwork-section.js");
43
+ var import_details_section = require("./details-section.js");
44
+ var import_sale_section = require("./sale-section.js");
45
+ var import_list_section = require("./list-section.js");
46
+ var import_exclusive_fields = require("./exclusive-fields.js");
47
+ var import_launch_dialog = require("./launch-dialog.js");
48
+ var import_artwork_section2 = require("./artwork-section.js");
49
+ var import_draft = require("../../../utils/drop/draft.js");
50
+ var import_sale = require("../../../utils/drop/sale.js");
51
+ var import_preview = require("../../../utils/drop/preview.js");
52
+ function DropCreate(props) {
53
+ const [draft, setDraftState] = (0, import_react.useState)(import_draft.EMPTY_DRAFT);
54
+ const [tried, setTried] = (0, import_react.useState)(false);
55
+ const [launching, setLaunching] = (0, import_react.useState)(false);
56
+ const setDraft = (patch) => setDraftState((d) => ({ ...d, ...patch }));
57
+ const errors = tried ? (0, import_draft.validateDropDraft)(draft, Math.floor(Date.now() / 1e3)) : {};
58
+ const launch = () => {
59
+ if (!props.walletAddress) return props.onRequireWallet();
60
+ setTried(true);
61
+ if (Object.keys((0, import_draft.validateDropDraft)(draft, Math.floor(Date.now() / 1e3))).length === 0) setLaunching(true);
62
+ };
63
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "grid gap-6 lg:grid-cols-[minmax(0,1fr)_320px]", children: [
64
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "space-y-5 lg:order-1 order-2", children: [
65
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_artwork_section.ArtworkSection, { draft, setDraft, errors }),
66
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_details_section.DetailsSection, { draft, setDraft, errors }),
67
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_sale_section.SaleSection, { draft, setDraft, errors, feeConfig: props.feeConfig }),
68
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_list_section.ListSection, { draft, setDraft, errors }),
69
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
70
+ import_collapsible_section.CollapsibleSection,
71
+ {
72
+ open: draft.gated.enabled,
73
+ onOpenChange: (enabled) => setDraft({ gated: { ...draft.gated, enabled } }),
74
+ icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Lock, { className: "h-4 w-4 text-primary" }),
75
+ label: "Exclusive content",
76
+ hint: "Optional \xB7 a private link only holders can open",
77
+ children: [
78
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_exclusive_fields.ExclusiveFields, { value: draft.gated, onChange: (v) => setDraft({ gated: { ...draft.gated, ...v } }) }),
79
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_artwork_section2.FieldError, { message: errors.gated })
80
+ ]
81
+ }
82
+ ),
83
+ tried && Object.keys(errors).length > 0 && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-sm font-medium text-destructive", children: "Check the highlighted fields." }),
84
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_gradient_button.GradientButton, { big: true, onClick: launch, children: props.walletAddress ? "Review and launch" : props.connectLabel ?? "Sign in to launch" }),
85
+ launching && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_launch_dialog.LaunchDialog, { open: true, onClose: () => setLaunching(false), draft, app: props })
86
+ ] }),
87
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "order-1 lg:order-2", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "lg:sticky lg:top-24", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(DraftSummary, { draft, feeConfig: props.feeConfig }) }) })
88
+ ] });
89
+ }
90
+ function DraftSummary({ draft, feeConfig }) {
91
+ const art = draft.cover ?? (draft.kind === "edition" ? draft.edition : draft.items[0]?.file ?? null);
92
+ const preview = art ? (0, import_preview.previewUrl)(art) : null;
93
+ const supply = (0, import_draft.draftSupply)(draft);
94
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "overflow-hidden rounded-2xl border border-border bg-card", children: [
95
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "relative aspect-square bg-muted", children: preview && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_image.default, { src: preview, alt: draft.name || "Drop", fill: true, unoptimized: true, className: "object-cover" }) }),
96
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "space-y-1 p-4", children: [
97
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "truncate font-semibold", children: draft.name || "Untitled drop" }),
98
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-xs text-muted-foreground", children: draft.sale.paid ? (0, import_sale.collectorPriceLine)(draft.sale, feeConfig) ?? "Set a price" : "Free" }),
99
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("p", { className: "text-xs text-muted-foreground", children: [
100
+ Number.isFinite(supply) && supply > 0 ? `${supply.toLocaleString("en-US")} ${draft.kind === "edition" ? "copies" : "items"}` : "Supply not set",
101
+ " \xB7 ",
102
+ draft.listOnly ? "List only" : "Open to everyone"
103
+ ] })
104
+ ] })
105
+ ] });
106
+ }
107
+ // Annotate the CommonJS export names for ESM import in node:
108
+ 0 && (module.exports = {
109
+ DraftSummary,
110
+ DropCreate
111
+ });
112
+ //# sourceMappingURL=drop-create.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/drop/create/drop-create.tsx"],"sourcesContent":["\"use client\";\n\nimport { useState } from \"react\";\nimport { Lock } from \"lucide-react\";\nimport type { ResolvedFeeConfig } from \"@medialane/sdk\";\nimport Image from \"../../image.js\";\nimport { GradientButton } from \"../../gradient-button.js\";\nimport { CollapsibleSection } from \"../../collapsible-section.js\";\nimport { ArtworkSection } from \"./artwork-section.js\";\nimport { DetailsSection } from \"./details-section.js\";\nimport { SaleSection } from \"./sale-section.js\";\nimport { ListSection } from \"./list-section.js\";\nimport { ExclusiveFields } from \"./exclusive-fields.js\";\nimport { LaunchDialog } from \"./launch-dialog.js\";\nimport { FieldError } from \"./artwork-section.js\";\nimport { EMPTY_DRAFT, draftSupply, validateDropDraft, type DropDraft } from \"../../../utils/drop/draft.js\";\nimport { collectorPriceLine } from \"../../../utils/drop/sale.js\";\nimport { previewUrl } from \"../../../utils/drop/preview.js\";\nimport type { DropAppProps } from \"../../../utils/drop/types.js\";\n\nexport function DropCreate(props: DropAppProps & { feeConfig: ResolvedFeeConfig }) {\n const [draft, setDraftState] = useState<DropDraft>(EMPTY_DRAFT);\n const [tried, setTried] = useState(false);\n const [launching, setLaunching] = useState(false);\n const setDraft = (patch: Partial<DropDraft>) => setDraftState((d) => ({ ...d, ...patch }));\n const errors = tried ? validateDropDraft(draft, Math.floor(Date.now() / 1000)) : {};\n\n const launch = () => {\n if (!props.walletAddress) return props.onRequireWallet();\n setTried(true);\n if (Object.keys(validateDropDraft(draft, Math.floor(Date.now() / 1000))).length === 0) setLaunching(true);\n };\n\n return (\n <div className=\"grid gap-6 lg:grid-cols-[minmax(0,1fr)_320px]\">\n <div className=\"space-y-5 lg:order-1 order-2\">\n <ArtworkSection draft={draft} setDraft={setDraft} errors={errors} />\n <DetailsSection draft={draft} setDraft={setDraft} errors={errors} />\n <SaleSection draft={draft} setDraft={setDraft} errors={errors} feeConfig={props.feeConfig} />\n <ListSection draft={draft} setDraft={setDraft} errors={errors} />\n <CollapsibleSection\n open={draft.gated.enabled}\n onOpenChange={(enabled) => setDraft({ gated: { ...draft.gated, enabled } })}\n icon={<Lock className=\"h-4 w-4 text-primary\" />}\n label=\"Exclusive content\"\n hint=\"Optional · a private link only holders can open\"\n >\n <ExclusiveFields value={draft.gated} onChange={(v) => setDraft({ gated: { ...draft.gated, ...v } })} />\n <FieldError message={errors.gated} />\n </CollapsibleSection>\n {tried && Object.keys(errors).length > 0 && <p className=\"text-sm font-medium text-destructive\">Check the highlighted fields.</p>}\n <GradientButton big onClick={launch}>\n {props.walletAddress ? \"Review and launch\" : props.connectLabel ?? \"Sign in to launch\"}\n </GradientButton>\n {launching && <LaunchDialog open onClose={() => setLaunching(false)} draft={draft} app={props} />}\n </div>\n <div className=\"order-1 lg:order-2\">\n <div className=\"lg:sticky lg:top-24\"><DraftSummary draft={draft} feeConfig={props.feeConfig} /></div>\n </div>\n </div>\n );\n}\n\n/** The drop as collectors will see it, updated as the form changes. */\nexport function DraftSummary({ draft, feeConfig }: { draft: DropDraft; feeConfig: ResolvedFeeConfig }) {\n const art = draft.cover ?? (draft.kind === \"edition\" ? draft.edition : draft.items[0]?.file ?? null);\n const preview = art ? previewUrl(art) : null;\n const supply = draftSupply(draft);\n return (\n <div className=\"overflow-hidden rounded-2xl border border-border bg-card\">\n <div className=\"relative aspect-square bg-muted\">\n {preview && <Image src={preview} alt={draft.name || \"Drop\"} fill unoptimized className=\"object-cover\" />}\n </div>\n <div className=\"space-y-1 p-4\">\n <p className=\"truncate font-semibold\">{draft.name || \"Untitled drop\"}</p>\n <p className=\"text-xs text-muted-foreground\">\n {draft.sale.paid ? collectorPriceLine(draft.sale, feeConfig) ?? \"Set a price\" : \"Free\"}\n </p>\n <p className=\"text-xs text-muted-foreground\">\n {Number.isFinite(supply) && supply > 0 ? `${supply.toLocaleString(\"en-US\")} ${draft.kind === \"edition\" ? \"copies\" : \"items\"}` : \"Supply not set\"}\n {\" · \"}{draft.listOnly ? \"List only\" : \"Open to everyone\"}\n </p>\n </div>\n </div>\n );\n}\n"],"mappings":"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","names":["import_artwork_section","Image"]}
@@ -0,0 +1,22 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { ResolvedFeeConfig } from '@medialane/sdk';
3
+ import { DropDraft } from '../../../utils/drop/draft.cjs';
4
+ import { DropAppProps } from '../../../utils/drop/types.cjs';
5
+ import '../../drop-item-list.cjs';
6
+ import '../../../utils/drop/metadata.cjs';
7
+ import '../../../utils/drop/sale.cjs';
8
+ import 'starknet';
9
+ import '@medialane/sdk/starknet';
10
+ import '../../fast-mint/types.cjs';
11
+ import 'react';
12
+
13
+ declare function DropCreate(props: DropAppProps & {
14
+ feeConfig: ResolvedFeeConfig;
15
+ }): react_jsx_runtime.JSX.Element;
16
+ /** The drop as collectors will see it, updated as the form changes. */
17
+ declare function DraftSummary({ draft, feeConfig }: {
18
+ draft: DropDraft;
19
+ feeConfig: ResolvedFeeConfig;
20
+ }): react_jsx_runtime.JSX.Element;
21
+
22
+ export { DraftSummary, DropCreate };
@@ -0,0 +1,22 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { ResolvedFeeConfig } from '@medialane/sdk';
3
+ import { DropDraft } from '../../../utils/drop/draft.js';
4
+ import { DropAppProps } from '../../../utils/drop/types.js';
5
+ import '../../drop-item-list.js';
6
+ import '../../../utils/drop/metadata.js';
7
+ import '../../../utils/drop/sale.js';
8
+ import 'starknet';
9
+ import '@medialane/sdk/starknet';
10
+ import '../../fast-mint/types.js';
11
+ import 'react';
12
+
13
+ declare function DropCreate(props: DropAppProps & {
14
+ feeConfig: ResolvedFeeConfig;
15
+ }): react_jsx_runtime.JSX.Element;
16
+ /** The drop as collectors will see it, updated as the form changes. */
17
+ declare function DraftSummary({ draft, feeConfig }: {
18
+ draft: DropDraft;
19
+ feeConfig: ResolvedFeeConfig;
20
+ }): react_jsx_runtime.JSX.Element;
21
+
22
+ export { DraftSummary, DropCreate };
@@ -0,0 +1,77 @@
1
+ "use client";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import { useState } from "react";
4
+ import { Lock } from "lucide-react";
5
+ import Image from "../../image.js";
6
+ import { GradientButton } from "../../gradient-button.js";
7
+ import { CollapsibleSection } from "../../collapsible-section.js";
8
+ import { ArtworkSection } from "./artwork-section.js";
9
+ import { DetailsSection } from "./details-section.js";
10
+ import { SaleSection } from "./sale-section.js";
11
+ import { ListSection } from "./list-section.js";
12
+ import { ExclusiveFields } from "./exclusive-fields.js";
13
+ import { LaunchDialog } from "./launch-dialog.js";
14
+ import { FieldError } from "./artwork-section.js";
15
+ import { EMPTY_DRAFT, draftSupply, validateDropDraft } from "../../../utils/drop/draft.js";
16
+ import { collectorPriceLine } from "../../../utils/drop/sale.js";
17
+ import { previewUrl } from "../../../utils/drop/preview.js";
18
+ function DropCreate(props) {
19
+ const [draft, setDraftState] = useState(EMPTY_DRAFT);
20
+ const [tried, setTried] = useState(false);
21
+ const [launching, setLaunching] = useState(false);
22
+ const setDraft = (patch) => setDraftState((d) => ({ ...d, ...patch }));
23
+ const errors = tried ? validateDropDraft(draft, Math.floor(Date.now() / 1e3)) : {};
24
+ const launch = () => {
25
+ if (!props.walletAddress) return props.onRequireWallet();
26
+ setTried(true);
27
+ if (Object.keys(validateDropDraft(draft, Math.floor(Date.now() / 1e3))).length === 0) setLaunching(true);
28
+ };
29
+ return /* @__PURE__ */ jsxs("div", { className: "grid gap-6 lg:grid-cols-[minmax(0,1fr)_320px]", children: [
30
+ /* @__PURE__ */ jsxs("div", { className: "space-y-5 lg:order-1 order-2", children: [
31
+ /* @__PURE__ */ jsx(ArtworkSection, { draft, setDraft, errors }),
32
+ /* @__PURE__ */ jsx(DetailsSection, { draft, setDraft, errors }),
33
+ /* @__PURE__ */ jsx(SaleSection, { draft, setDraft, errors, feeConfig: props.feeConfig }),
34
+ /* @__PURE__ */ jsx(ListSection, { draft, setDraft, errors }),
35
+ /* @__PURE__ */ jsxs(
36
+ CollapsibleSection,
37
+ {
38
+ open: draft.gated.enabled,
39
+ onOpenChange: (enabled) => setDraft({ gated: { ...draft.gated, enabled } }),
40
+ icon: /* @__PURE__ */ jsx(Lock, { className: "h-4 w-4 text-primary" }),
41
+ label: "Exclusive content",
42
+ hint: "Optional \xB7 a private link only holders can open",
43
+ children: [
44
+ /* @__PURE__ */ jsx(ExclusiveFields, { value: draft.gated, onChange: (v) => setDraft({ gated: { ...draft.gated, ...v } }) }),
45
+ /* @__PURE__ */ jsx(FieldError, { message: errors.gated })
46
+ ]
47
+ }
48
+ ),
49
+ tried && Object.keys(errors).length > 0 && /* @__PURE__ */ jsx("p", { className: "text-sm font-medium text-destructive", children: "Check the highlighted fields." }),
50
+ /* @__PURE__ */ jsx(GradientButton, { big: true, onClick: launch, children: props.walletAddress ? "Review and launch" : props.connectLabel ?? "Sign in to launch" }),
51
+ launching && /* @__PURE__ */ jsx(LaunchDialog, { open: true, onClose: () => setLaunching(false), draft, app: props })
52
+ ] }),
53
+ /* @__PURE__ */ jsx("div", { className: "order-1 lg:order-2", children: /* @__PURE__ */ jsx("div", { className: "lg:sticky lg:top-24", children: /* @__PURE__ */ jsx(DraftSummary, { draft, feeConfig: props.feeConfig }) }) })
54
+ ] });
55
+ }
56
+ function DraftSummary({ draft, feeConfig }) {
57
+ const art = draft.cover ?? (draft.kind === "edition" ? draft.edition : draft.items[0]?.file ?? null);
58
+ const preview = art ? previewUrl(art) : null;
59
+ const supply = draftSupply(draft);
60
+ return /* @__PURE__ */ jsxs("div", { className: "overflow-hidden rounded-2xl border border-border bg-card", children: [
61
+ /* @__PURE__ */ jsx("div", { className: "relative aspect-square bg-muted", children: preview && /* @__PURE__ */ jsx(Image, { src: preview, alt: draft.name || "Drop", fill: true, unoptimized: true, className: "object-cover" }) }),
62
+ /* @__PURE__ */ jsxs("div", { className: "space-y-1 p-4", children: [
63
+ /* @__PURE__ */ jsx("p", { className: "truncate font-semibold", children: draft.name || "Untitled drop" }),
64
+ /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground", children: draft.sale.paid ? collectorPriceLine(draft.sale, feeConfig) ?? "Set a price" : "Free" }),
65
+ /* @__PURE__ */ jsxs("p", { className: "text-xs text-muted-foreground", children: [
66
+ Number.isFinite(supply) && supply > 0 ? `${supply.toLocaleString("en-US")} ${draft.kind === "edition" ? "copies" : "items"}` : "Supply not set",
67
+ " \xB7 ",
68
+ draft.listOnly ? "List only" : "Open to everyone"
69
+ ] })
70
+ ] })
71
+ ] });
72
+ }
73
+ export {
74
+ DraftSummary,
75
+ DropCreate
76
+ };
77
+ //# sourceMappingURL=drop-create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/drop/create/drop-create.tsx"],"sourcesContent":["\"use client\";\n\nimport { useState } from \"react\";\nimport { Lock } from \"lucide-react\";\nimport type { ResolvedFeeConfig } from \"@medialane/sdk\";\nimport Image from \"../../image.js\";\nimport { GradientButton } from \"../../gradient-button.js\";\nimport { CollapsibleSection } from \"../../collapsible-section.js\";\nimport { ArtworkSection } from \"./artwork-section.js\";\nimport { DetailsSection } from \"./details-section.js\";\nimport { SaleSection } from \"./sale-section.js\";\nimport { ListSection } from \"./list-section.js\";\nimport { ExclusiveFields } from \"./exclusive-fields.js\";\nimport { LaunchDialog } from \"./launch-dialog.js\";\nimport { FieldError } from \"./artwork-section.js\";\nimport { EMPTY_DRAFT, draftSupply, validateDropDraft, type DropDraft } from \"../../../utils/drop/draft.js\";\nimport { collectorPriceLine } from \"../../../utils/drop/sale.js\";\nimport { previewUrl } from \"../../../utils/drop/preview.js\";\nimport type { DropAppProps } from \"../../../utils/drop/types.js\";\n\nexport function DropCreate(props: DropAppProps & { feeConfig: ResolvedFeeConfig }) {\n const [draft, setDraftState] = useState<DropDraft>(EMPTY_DRAFT);\n const [tried, setTried] = useState(false);\n const [launching, setLaunching] = useState(false);\n const setDraft = (patch: Partial<DropDraft>) => setDraftState((d) => ({ ...d, ...patch }));\n const errors = tried ? validateDropDraft(draft, Math.floor(Date.now() / 1000)) : {};\n\n const launch = () => {\n if (!props.walletAddress) return props.onRequireWallet();\n setTried(true);\n if (Object.keys(validateDropDraft(draft, Math.floor(Date.now() / 1000))).length === 0) setLaunching(true);\n };\n\n return (\n <div className=\"grid gap-6 lg:grid-cols-[minmax(0,1fr)_320px]\">\n <div className=\"space-y-5 lg:order-1 order-2\">\n <ArtworkSection draft={draft} setDraft={setDraft} errors={errors} />\n <DetailsSection draft={draft} setDraft={setDraft} errors={errors} />\n <SaleSection draft={draft} setDraft={setDraft} errors={errors} feeConfig={props.feeConfig} />\n <ListSection draft={draft} setDraft={setDraft} errors={errors} />\n <CollapsibleSection\n open={draft.gated.enabled}\n onOpenChange={(enabled) => setDraft({ gated: { ...draft.gated, enabled } })}\n icon={<Lock className=\"h-4 w-4 text-primary\" />}\n label=\"Exclusive content\"\n hint=\"Optional · a private link only holders can open\"\n >\n <ExclusiveFields value={draft.gated} onChange={(v) => setDraft({ gated: { ...draft.gated, ...v } })} />\n <FieldError message={errors.gated} />\n </CollapsibleSection>\n {tried && Object.keys(errors).length > 0 && <p className=\"text-sm font-medium text-destructive\">Check the highlighted fields.</p>}\n <GradientButton big onClick={launch}>\n {props.walletAddress ? \"Review and launch\" : props.connectLabel ?? \"Sign in to launch\"}\n </GradientButton>\n {launching && <LaunchDialog open onClose={() => setLaunching(false)} draft={draft} app={props} />}\n </div>\n <div className=\"order-1 lg:order-2\">\n <div className=\"lg:sticky lg:top-24\"><DraftSummary draft={draft} feeConfig={props.feeConfig} /></div>\n </div>\n </div>\n );\n}\n\n/** The drop as collectors will see it, updated as the form changes. */\nexport function DraftSummary({ draft, feeConfig }: { draft: DropDraft; feeConfig: ResolvedFeeConfig }) {\n const art = draft.cover ?? (draft.kind === \"edition\" ? draft.edition : draft.items[0]?.file ?? null);\n const preview = art ? previewUrl(art) : null;\n const supply = draftSupply(draft);\n return (\n <div className=\"overflow-hidden rounded-2xl border border-border bg-card\">\n <div className=\"relative aspect-square bg-muted\">\n {preview && <Image src={preview} alt={draft.name || \"Drop\"} fill unoptimized className=\"object-cover\" />}\n </div>\n <div className=\"space-y-1 p-4\">\n <p className=\"truncate font-semibold\">{draft.name || \"Untitled drop\"}</p>\n <p className=\"text-xs text-muted-foreground\">\n {draft.sale.paid ? collectorPriceLine(draft.sale, feeConfig) ?? \"Set a price\" : \"Free\"}\n </p>\n <p className=\"text-xs text-muted-foreground\">\n {Number.isFinite(supply) && supply > 0 ? `${supply.toLocaleString(\"en-US\")} ${draft.kind === \"edition\" ? \"copies\" : \"items\"}` : \"Supply not set\"}\n {\" · \"}{draft.listOnly ? \"List only\" : \"Open to everyone\"}\n </p>\n </div>\n </div>\n );\n}\n"],"mappings":";AAoCM,cAIA,YAJA;AAlCN,SAAS,gBAAgB;AACzB,SAAS,YAAY;AAErB,OAAO,WAAW;AAClB,SAAS,sBAAsB;AAC/B,SAAS,0BAA0B;AACnC,SAAS,sBAAsB;AAC/B,SAAS,sBAAsB;AAC/B,SAAS,mBAAmB;AAC5B,SAAS,mBAAmB;AAC5B,SAAS,uBAAuB;AAChC,SAAS,oBAAoB;AAC7B,SAAS,kBAAkB;AAC3B,SAAS,aAAa,aAAa,yBAAyC;AAC5E,SAAS,0BAA0B;AACnC,SAAS,kBAAkB;AAGpB,SAAS,WAAW,OAAwD;AACjF,QAAM,CAAC,OAAO,aAAa,IAAI,SAAoB,WAAW;AAC9D,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAS,KAAK;AACxC,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,KAAK;AAChD,QAAM,WAAW,CAAC,UAA8B,cAAc,CAAC,OAAO,EAAE,GAAG,GAAG,GAAG,MAAM,EAAE;AACzF,QAAM,SAAS,QAAQ,kBAAkB,OAAO,KAAK,MAAM,KAAK,IAAI,IAAI,GAAI,CAAC,IAAI,CAAC;AAElF,QAAM,SAAS,MAAM;AACnB,QAAI,CAAC,MAAM,cAAe,QAAO,MAAM,gBAAgB;AACvD,aAAS,IAAI;AACb,QAAI,OAAO,KAAK,kBAAkB,OAAO,KAAK,MAAM,KAAK,IAAI,IAAI,GAAI,CAAC,CAAC,EAAE,WAAW,EAAG,cAAa,IAAI;AAAA,EAC1G;AAEA,SACE,qBAAC,SAAI,WAAU,iDACf;AAAA,yBAAC,SAAI,WAAU,gCACb;AAAA,0BAAC,kBAAe,OAAc,UAAoB,QAAgB;AAAA,MAClE,oBAAC,kBAAe,OAAc,UAAoB,QAAgB;AAAA,MAClE,oBAAC,eAAY,OAAc,UAAoB,QAAgB,WAAW,MAAM,WAAW;AAAA,MAC3F,oBAAC,eAAY,OAAc,UAAoB,QAAgB;AAAA,MAC/D;AAAA,QAAC;AAAA;AAAA,UACC,MAAM,MAAM,MAAM;AAAA,UAClB,cAAc,CAAC,YAAY,SAAS,EAAE,OAAO,EAAE,GAAG,MAAM,OAAO,QAAQ,EAAE,CAAC;AAAA,UAC1E,MAAM,oBAAC,QAAK,WAAU,wBAAuB;AAAA,UAC7C,OAAM;AAAA,UACN,MAAK;AAAA,UAEL;AAAA,gCAAC,mBAAgB,OAAO,MAAM,OAAO,UAAU,CAAC,MAAM,SAAS,EAAE,OAAO,EAAE,GAAG,MAAM,OAAO,GAAG,EAAE,EAAE,CAAC,GAAG;AAAA,YACrG,oBAAC,cAAW,SAAS,OAAO,OAAO;AAAA;AAAA;AAAA,MACrC;AAAA,MACC,SAAS,OAAO,KAAK,MAAM,EAAE,SAAS,KAAK,oBAAC,OAAE,WAAU,wCAAuC,2CAA6B;AAAA,MAC7H,oBAAC,kBAAe,KAAG,MAAC,SAAS,QAC1B,gBAAM,gBAAgB,sBAAsB,MAAM,gBAAgB,qBACrE;AAAA,MACC,aAAa,oBAAC,gBAAa,MAAI,MAAC,SAAS,MAAM,aAAa,KAAK,GAAG,OAAc,KAAK,OAAO;AAAA,OACjG;AAAA,IACA,oBAAC,SAAI,WAAU,sBACb,8BAAC,SAAI,WAAU,uBAAsB,8BAAC,gBAAa,OAAc,WAAW,MAAM,WAAW,GAAE,GACjG;AAAA,KACA;AAEJ;AAGO,SAAS,aAAa,EAAE,OAAO,UAAU,GAAuD;AACrG,QAAM,MAAM,MAAM,UAAU,MAAM,SAAS,YAAY,MAAM,UAAU,MAAM,MAAM,CAAC,GAAG,QAAQ;AAC/F,QAAM,UAAU,MAAM,WAAW,GAAG,IAAI;AACxC,QAAM,SAAS,YAAY,KAAK;AAChC,SACE,qBAAC,SAAI,WAAU,4DACb;AAAA,wBAAC,SAAI,WAAU,mCACZ,qBAAW,oBAAC,SAAM,KAAK,SAAS,KAAK,MAAM,QAAQ,QAAQ,MAAI,MAAC,aAAW,MAAC,WAAU,gBAAe,GACxG;AAAA,IACA,qBAAC,SAAI,WAAU,iBACb;AAAA,0BAAC,OAAE,WAAU,0BAA0B,gBAAM,QAAQ,iBAAgB;AAAA,MACrE,oBAAC,OAAE,WAAU,iCACV,gBAAM,KAAK,OAAO,mBAAmB,MAAM,MAAM,SAAS,KAAK,gBAAgB,QAClF;AAAA,MACA,qBAAC,OAAE,WAAU,iCACV;AAAA,eAAO,SAAS,MAAM,KAAK,SAAS,IAAI,GAAG,OAAO,eAAe,OAAO,CAAC,IAAI,MAAM,SAAS,YAAY,WAAW,OAAO,KAAK;AAAA,QAC/H;AAAA,QAAO,MAAM,WAAW,cAAc;AAAA,SACzC;AAAA,OACF;AAAA,KACF;AAEJ;","names":[]}
@@ -0,0 +1,45 @@
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_fields_exports = {};
21
+ __export(exclusive_fields_exports, {
22
+ ExclusiveFields: () => ExclusiveFields
23
+ });
24
+ module.exports = __toCommonJS(exclusive_fields_exports);
25
+ var import_jsx_runtime = require("react/jsx-runtime");
26
+ var import_input = require("../../input.js");
27
+ var import_select = require("../../select.js");
28
+ var import_gated_content_types = require("../../../data/gated-content-types.js");
29
+ const TYPES = Object.keys(import_gated_content_types.GATED_CONTENT_TYPES).map((value) => ({ value, label: value.charAt(0) + value.slice(1).toLowerCase() }));
30
+ function ExclusiveFields({ value, onChange }) {
31
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "space-y-3", children: [
32
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_input.Input, { placeholder: "Title, e.g. Behind-the-scenes footage", value: value.title, maxLength: 100, onChange: (e) => onChange({ ...value, title: e.target.value }) }),
33
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_input.Input, { placeholder: "https://\u2026", value: value.url, onChange: (e) => onChange({ ...value, url: e.target.value.trim() }) }),
34
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-xs text-muted-foreground", children: "Only holders see this link. Use a private or unlisted one." }),
35
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_select.Select, { value: value.type, onValueChange: (type) => onChange({ ...value, type }), children: [
36
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_select.SelectTrigger, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_select.SelectValue, { placeholder: "Kind of content" }) }),
37
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_select.SelectContent, { children: TYPES.map((t) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_select.SelectItem, { value: t.value, children: t.label }, t.value)) })
38
+ ] })
39
+ ] });
40
+ }
41
+ // Annotate the CommonJS export names for ESM import in node:
42
+ 0 && (module.exports = {
43
+ ExclusiveFields
44
+ });
45
+ //# sourceMappingURL=exclusive-fields.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/drop/create/exclusive-fields.tsx"],"sourcesContent":["\"use client\";\n\nimport { Input } from \"../../input.js\";\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"../../select.js\";\nimport { GATED_CONTENT_TYPES } from \"../../../data/gated-content-types.js\";\n\nexport interface ExclusiveValue {\n title: string;\n url: string;\n type: string;\n}\n\nconst TYPES = Object.keys(GATED_CONTENT_TYPES).map((value) => ({ value, label: value.charAt(0) + value.slice(1).toLowerCase() }));\n\n/** Content only holders can open: a title, a private link and its kind. */\nexport function ExclusiveFields({ value, onChange }: { value: ExclusiveValue; onChange: (v: ExclusiveValue) => void }) {\n return (\n <div className=\"space-y-3\">\n <Input placeholder=\"Title, e.g. Behind-the-scenes footage\" value={value.title} maxLength={100} onChange={(e) => onChange({ ...value, title: e.target.value })} />\n <Input placeholder=\"https://…\" value={value.url} onChange={(e) => onChange({ ...value, url: e.target.value.trim() })} />\n <p className=\"text-xs text-muted-foreground\">Only holders see this link. Use a private or unlisted one.</p>\n <Select value={value.type} onValueChange={(type) => onChange({ ...value, type })}>\n <SelectTrigger><SelectValue placeholder=\"Kind of content\" /></SelectTrigger>\n <SelectContent>{TYPES.map((t) => <SelectItem key={t.value} value={t.value}>{t.label}</SelectItem>)}</SelectContent>\n </Select>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAkBM;AAhBN,mBAAsB;AACtB,oBAA8E;AAC9E,iCAAoC;AAQpC,MAAM,QAAQ,OAAO,KAAK,8CAAmB,EAAE,IAAI,CAAC,WAAW,EAAE,OAAO,OAAO,MAAM,OAAO,CAAC,IAAI,MAAM,MAAM,CAAC,EAAE,YAAY,EAAE,EAAE;AAGzH,SAAS,gBAAgB,EAAE,OAAO,SAAS,GAAqE;AACrH,SACE,6CAAC,SAAI,WAAU,aACb;AAAA,gDAAC,sBAAM,aAAY,yCAAwC,OAAO,MAAM,OAAO,WAAW,KAAK,UAAU,CAAC,MAAM,SAAS,EAAE,GAAG,OAAO,OAAO,EAAE,OAAO,MAAM,CAAC,GAAG;AAAA,IAC/J,4CAAC,sBAAM,aAAY,kBAAY,OAAO,MAAM,KAAK,UAAU,CAAC,MAAM,SAAS,EAAE,GAAG,OAAO,KAAK,EAAE,OAAO,MAAM,KAAK,EAAE,CAAC,GAAG;AAAA,IACtH,4CAAC,OAAE,WAAU,iCAAgC,wEAA0D;AAAA,IACvG,6CAAC,wBAAO,OAAO,MAAM,MAAM,eAAe,CAAC,SAAS,SAAS,EAAE,GAAG,OAAO,KAAK,CAAC,GAC7E;AAAA,kDAAC,+BAAc,sDAAC,6BAAY,aAAY,mBAAkB,GAAE;AAAA,MAC5D,4CAAC,+BAAe,gBAAM,IAAI,CAAC,MAAM,4CAAC,4BAAyB,OAAO,EAAE,OAAQ,YAAE,SAA5B,EAAE,KAAgC,CAAa,GAAE;AAAA,OACrG;AAAA,KACF;AAEJ;","names":[]}
@@ -0,0 +1,14 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+
3
+ interface ExclusiveValue {
4
+ title: string;
5
+ url: string;
6
+ type: string;
7
+ }
8
+ /** Content only holders can open: a title, a private link and its kind. */
9
+ declare function ExclusiveFields({ value, onChange }: {
10
+ value: ExclusiveValue;
11
+ onChange: (v: ExclusiveValue) => void;
12
+ }): react_jsx_runtime.JSX.Element;
13
+
14
+ export { ExclusiveFields, type ExclusiveValue };
@@ -0,0 +1,14 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+
3
+ interface ExclusiveValue {
4
+ title: string;
5
+ url: string;
6
+ type: string;
7
+ }
8
+ /** Content only holders can open: a title, a private link and its kind. */
9
+ declare function ExclusiveFields({ value, onChange }: {
10
+ value: ExclusiveValue;
11
+ onChange: (v: ExclusiveValue) => void;
12
+ }): react_jsx_runtime.JSX.Element;
13
+
14
+ export { ExclusiveFields, type ExclusiveValue };
@@ -0,0 +1,21 @@
1
+ "use client";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import { Input } from "../../input.js";
4
+ import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "../../select.js";
5
+ import { GATED_CONTENT_TYPES } from "../../../data/gated-content-types.js";
6
+ const TYPES = Object.keys(GATED_CONTENT_TYPES).map((value) => ({ value, label: value.charAt(0) + value.slice(1).toLowerCase() }));
7
+ function ExclusiveFields({ value, onChange }) {
8
+ return /* @__PURE__ */ jsxs("div", { className: "space-y-3", children: [
9
+ /* @__PURE__ */ jsx(Input, { placeholder: "Title, e.g. Behind-the-scenes footage", value: value.title, maxLength: 100, onChange: (e) => onChange({ ...value, title: e.target.value }) }),
10
+ /* @__PURE__ */ jsx(Input, { placeholder: "https://\u2026", value: value.url, onChange: (e) => onChange({ ...value, url: e.target.value.trim() }) }),
11
+ /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground", children: "Only holders see this link. Use a private or unlisted one." }),
12
+ /* @__PURE__ */ jsxs(Select, { value: value.type, onValueChange: (type) => onChange({ ...value, type }), children: [
13
+ /* @__PURE__ */ jsx(SelectTrigger, { children: /* @__PURE__ */ jsx(SelectValue, { placeholder: "Kind of content" }) }),
14
+ /* @__PURE__ */ jsx(SelectContent, { children: TYPES.map((t) => /* @__PURE__ */ jsx(SelectItem, { value: t.value, children: t.label }, t.value)) })
15
+ ] })
16
+ ] });
17
+ }
18
+ export {
19
+ ExclusiveFields
20
+ };
21
+ //# sourceMappingURL=exclusive-fields.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/drop/create/exclusive-fields.tsx"],"sourcesContent":["\"use client\";\n\nimport { Input } from \"../../input.js\";\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"../../select.js\";\nimport { GATED_CONTENT_TYPES } from \"../../../data/gated-content-types.js\";\n\nexport interface ExclusiveValue {\n title: string;\n url: string;\n type: string;\n}\n\nconst TYPES = Object.keys(GATED_CONTENT_TYPES).map((value) => ({ value, label: value.charAt(0) + value.slice(1).toLowerCase() }));\n\n/** Content only holders can open: a title, a private link and its kind. */\nexport function ExclusiveFields({ value, onChange }: { value: ExclusiveValue; onChange: (v: ExclusiveValue) => void }) {\n return (\n <div className=\"space-y-3\">\n <Input placeholder=\"Title, e.g. Behind-the-scenes footage\" value={value.title} maxLength={100} onChange={(e) => onChange({ ...value, title: e.target.value })} />\n <Input placeholder=\"https://…\" value={value.url} onChange={(e) => onChange({ ...value, url: e.target.value.trim() })} />\n <p className=\"text-xs text-muted-foreground\">Only holders see this link. Use a private or unlisted one.</p>\n <Select value={value.type} onValueChange={(type) => onChange({ ...value, type })}>\n <SelectTrigger><SelectValue placeholder=\"Kind of content\" /></SelectTrigger>\n <SelectContent>{TYPES.map((t) => <SelectItem key={t.value} value={t.value}>{t.label}</SelectItem>)}</SelectContent>\n </Select>\n </div>\n );\n}\n"],"mappings":";AAkBM,cAGA,YAHA;AAhBN,SAAS,aAAa;AACtB,SAAS,QAAQ,eAAe,YAAY,eAAe,mBAAmB;AAC9E,SAAS,2BAA2B;AAQpC,MAAM,QAAQ,OAAO,KAAK,mBAAmB,EAAE,IAAI,CAAC,WAAW,EAAE,OAAO,OAAO,MAAM,OAAO,CAAC,IAAI,MAAM,MAAM,CAAC,EAAE,YAAY,EAAE,EAAE;AAGzH,SAAS,gBAAgB,EAAE,OAAO,SAAS,GAAqE;AACrH,SACE,qBAAC,SAAI,WAAU,aACb;AAAA,wBAAC,SAAM,aAAY,yCAAwC,OAAO,MAAM,OAAO,WAAW,KAAK,UAAU,CAAC,MAAM,SAAS,EAAE,GAAG,OAAO,OAAO,EAAE,OAAO,MAAM,CAAC,GAAG;AAAA,IAC/J,oBAAC,SAAM,aAAY,kBAAY,OAAO,MAAM,KAAK,UAAU,CAAC,MAAM,SAAS,EAAE,GAAG,OAAO,KAAK,EAAE,OAAO,MAAM,KAAK,EAAE,CAAC,GAAG;AAAA,IACtH,oBAAC,OAAE,WAAU,iCAAgC,wEAA0D;AAAA,IACvG,qBAAC,UAAO,OAAO,MAAM,MAAM,eAAe,CAAC,SAAS,SAAS,EAAE,GAAG,OAAO,KAAK,CAAC,GAC7E;AAAA,0BAAC,iBAAc,8BAAC,eAAY,aAAY,mBAAkB,GAAE;AAAA,MAC5D,oBAAC,iBAAe,gBAAM,IAAI,CAAC,MAAM,oBAAC,cAAyB,OAAO,EAAE,OAAQ,YAAE,SAA5B,EAAE,KAAgC,CAAa,GAAE;AAAA,OACrG;AAAA,KACF;AAEJ;","names":[]}
@@ -0,0 +1,193 @@
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 launch_dialog_exports = {};
21
+ __export(launch_dialog_exports, {
22
+ LaunchDialog: () => LaunchDialog,
23
+ downloadCsv: () => downloadCsv
24
+ });
25
+ module.exports = __toCommonJS(launch_dialog_exports);
26
+ var import_jsx_runtime = require("react/jsx-runtime");
27
+ var import_react = require("react");
28
+ var import_lucide_react = require("lucide-react");
29
+ var import_sdk = require("@medialane/sdk");
30
+ var import_starknet = require("@medialane/sdk/starknet");
31
+ var import_action_dialog = require("../../action-dialog.js");
32
+ var import_gradient_button = require("../../gradient-button.js");
33
+ var import_button = require("../../button.js");
34
+ var import_share_button = require("../../share-button.js");
35
+ var import_describe_error = require("../../../utils/describe-error.js");
36
+ var import_ipfs_upload = require("../../../utils/ipfs-upload.js");
37
+ var import_allowlist = require("../../../utils/drop/allowlist.js");
38
+ var import_metadata = require("../../../utils/drop/metadata.js");
39
+ var import_sale = require("../../../utils/drop/sale.js");
40
+ var import_draft = require("../../../utils/drop/draft.js");
41
+ var import_upload = require("../../../utils/drop/upload.js");
42
+ var import_actions = require("../../../utils/drop/actions.js");
43
+ function LaunchDialog({ open, onClose, draft, app }) {
44
+ const [step, setStep] = (0, import_react.useState)({ kind: "review" });
45
+ const [tasks, setTasks] = (0, import_react.useState)([]);
46
+ const [baseUri, setBaseUri] = (0, import_react.useState)(null);
47
+ const client = app.getClient();
48
+ const files = draft.kind === "edition" ? draft.edition ? [draft.edition] : [] : draft.items.map((i) => i.file);
49
+ const terms = (0, import_sale.toDropTerms)(draft.sale);
50
+ const list = draft.listOnly ? (0, import_starknet.buildPopAllowlist)((0, import_allowlist.parseAllowlist)(draft.allowlist).addresses) : null;
51
+ const run = async () => {
52
+ try {
53
+ let uri = baseUri;
54
+ if (!uri) {
55
+ setStep({ kind: "uploading" });
56
+ const initial = tasks.length > 0 ? tasks : [
57
+ ...files.map((file, i) => ({ id: `art-${i}`, file, status: "pending", uri: null, error: null })),
58
+ ...draft.cover ? [{ id: "cover", file: draft.cover, status: "pending", uri: null, error: null }] : []
59
+ ];
60
+ const done = await (0, import_upload.uploadAll)(initial, async (f) => (await (0, import_ipfs_upload.uploadFileToIpfs)(client.api, f, "image")).uri, setTasks);
61
+ setTasks(done);
62
+ if (done.some((t) => t.status !== "done")) {
63
+ setStep({ kind: "error", message: "Some files didn't upload. Retry to send only those." });
64
+ return;
65
+ }
66
+ const art = done.filter((t) => t.id.startsWith("art-"));
67
+ const metadata = (0, import_metadata.buildDropMetadataFiles)({
68
+ kind: draft.kind,
69
+ name: draft.name.trim(),
70
+ description: draft.description.trim(),
71
+ creator: app.walletAddress,
72
+ coverUri: done.find((t) => t.id === "cover")?.uri ?? null,
73
+ license: draft.license,
74
+ registrationDate: (/* @__PURE__ */ new Date()).toISOString().slice(0, 10),
75
+ items: draft.kind === "edition" ? [{ name: "", description: "", imageUri: art[0].uri }] : draft.items.map((it, i) => ({ name: it.name, description: it.description, imageUri: art[i].uri })),
76
+ supply: (0, import_draft.draftSupply)(draft)
77
+ });
78
+ if ((0, import_metadata.metadataBytes)(metadata) > import_metadata.MAX_DROP_METADATA_BYTES) {
79
+ setStep({ kind: "error", message: "The descriptions are too long for this many tokens. Shorten them and try again." });
80
+ return;
81
+ }
82
+ uri = (await (0, import_ipfs_upload.uploadDirectoryToIpfs)(client.api, metadata)).baseUri;
83
+ setBaseUri(uri);
84
+ }
85
+ setStep({ kind: "launching" });
86
+ const signer = await app.getSigner();
87
+ const { collection } = await (0, import_actions.launchDrop)({ client, provider: app.provider, signer }, {
88
+ owner: app.walletAddress,
89
+ name: draft.name.trim(),
90
+ symbol: draft.symbol,
91
+ baseUri: uri,
92
+ maxSupply: (0, import_draft.draftSupply)(draft),
93
+ terms,
94
+ allowlistRoot: list?.root,
95
+ description: draft.description.trim() || void 0
96
+ });
97
+ let warning = null;
98
+ if (draft.gated.enabled) {
99
+ try {
100
+ await (0, import_actions.saveExclusiveContent)(client, collection, draft.gated);
101
+ } catch {
102
+ warning = "Your drop launched, but the exclusive content wasn't saved. You can add it from Manage.";
103
+ }
104
+ }
105
+ setStep({ kind: "done", collection, links: list ? (0, import_starknet.dropClaimLinks)(window.location.origin, collection, list) : [], warning });
106
+ } catch (err) {
107
+ setStep({ kind: "error", message: (0, import_describe_error.describeError)(err, "We couldn't launch your drop. Please try again.").message });
108
+ }
109
+ };
110
+ const close = () => {
111
+ if (step.kind === "uploading" || step.kind === "launching") return;
112
+ onClose();
113
+ };
114
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_action_dialog.ActionDialog, { open, onClose: close, children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "space-y-5 p-6", children: [
115
+ step.kind === "review" && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
116
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("h2", { className: "text-lg font-semibold", children: "Review and launch" }),
117
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "space-y-2 rounded-xl border border-border p-4 text-sm", children: [
118
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "font-semibold", children: draft.name }),
119
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-xs font-semibold uppercase tracking-widest text-muted-foreground", children: "Fixed after launch" }),
120
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Row, { label: "Price", value: (0, import_sale.priceLabel)(terms.price, terms.paymentToken) }),
121
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Row, { label: "Supply", value: `${(0, import_draft.draftSupply)(draft).toLocaleString("en-US")} ${draft.kind === "edition" ? "copies" : "items"}` }),
122
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Row, { label: "Starts", value: terms.startTime === 0 ? "At launch" : new Date(terms.startTime * 1e3).toLocaleString() }),
123
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Row, { label: "Ends", value: terms.endTime === 0 ? "No end date" : new Date(terms.endTime * 1e3).toLocaleString() }),
124
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Row, { label: "Per wallet", value: terms.maxPerWallet === "0" ? "No limit" : terms.maxPerWallet }),
125
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Row, { label: "Who can mint", value: list ? `${Object.keys(list.proofs).length} wallets on a list` : "Everyone" }),
126
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "pt-1 text-xs text-muted-foreground", children: "The artwork and these terms can't be changed after launch. You can change the list later." })
127
+ ] }),
128
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_gradient_button.GradientButton, { big: true, onClick: () => void run(), children: "Launch drop" })
129
+ ] }),
130
+ step.kind === "uploading" && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
131
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("h2", { className: "flex items-center gap-2 text-lg font-semibold", children: [
132
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Loader2, { className: "h-4 w-4 animate-spin" }),
133
+ "Uploading"
134
+ ] }),
135
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("p", { className: "text-sm text-muted-foreground", children: [
136
+ tasks.filter((t) => t.status === "done").length,
137
+ " of ",
138
+ tasks.length,
139
+ " files"
140
+ ] })
141
+ ] }),
142
+ step.kind === "launching" && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("h2", { className: "flex items-center gap-2 text-lg font-semibold", children: [
143
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Loader2, { className: "h-4 w-4 animate-spin" }),
144
+ "Launching your drop\u2026"
145
+ ] }),
146
+ step.kind === "error" && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
147
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("h2", { className: "flex items-center gap-2 text-lg font-semibold", children: [
148
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.XCircle, { className: "h-4 w-4 text-destructive" }),
149
+ "Not launched"
150
+ ] }),
151
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-sm text-muted-foreground", children: step.message }),
152
+ tasks.some((t) => t.status === "failed") && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("ul", { className: "space-y-1 text-xs text-muted-foreground", children: tasks.filter((t) => t.status === "failed").map((t) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("li", { children: [
153
+ t.file.name,
154
+ ": ",
155
+ t.error
156
+ ] }, t.id)) }),
157
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_button.Button, { onClick: () => void run(), className: "gap-1.5", children: [
158
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.RotateCcw, { className: "h-3.5 w-3.5" }),
159
+ "Try again"
160
+ ] })
161
+ ] }),
162
+ step.kind === "done" && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
163
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("h2", { className: "flex items-center gap-2 text-lg font-semibold", children: [
164
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.CheckCircle2, { className: "h-5 w-5 text-green-500" }),
165
+ "Your drop is live"
166
+ ] }),
167
+ step.warning && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-sm text-brand-orange", children: step.warning }),
168
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex flex-wrap gap-2", children: [
169
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_share_button.ShareButton, { title: draft.name, url: `${window.location.origin}${(0, import_sdk.dropHref)(step.collection)}`, variant: "outline" }),
170
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_button.Button, { asChild: true, variant: "outline", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("a", { href: (0, import_sdk.dropHref)(step.collection), children: "View drop" }) }),
171
+ step.links.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_button.Button, { variant: "outline", onClick: () => downloadCsv((0, import_starknet.popClaimLinksCsv)(step.links), "claim-links.csv"), children: "Download claim links" })
172
+ ] }),
173
+ step.links.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-xs text-muted-foreground", children: "Send each wallet its link \u2014 the link is what lets it mint." })
174
+ ] })
175
+ ] }) });
176
+ }
177
+ function Row({ label, value }) {
178
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex justify-between gap-3", children: [
179
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "text-muted-foreground", children: label }),
180
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "text-right font-medium", children: value })
181
+ ] });
182
+ }
183
+ function downloadCsv(csv, name) {
184
+ const href = URL.createObjectURL(new Blob([csv], { type: "text/csv" }));
185
+ Object.assign(document.createElement("a"), { href, download: name }).click();
186
+ URL.revokeObjectURL(href);
187
+ }
188
+ // Annotate the CommonJS export names for ESM import in node:
189
+ 0 && (module.exports = {
190
+ LaunchDialog,
191
+ downloadCsv
192
+ });
193
+ //# sourceMappingURL=launch-dialog.cjs.map