@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,43 @@
1
+ import { buildAssetMetadata } from "@medialane/sdk";
2
+ const MAX_DROP_SUPPLY = 2e3;
3
+ const MAX_DROP_METADATA_BYTES = 5 * 1024 * 1024;
4
+ function buildDropMetadataFiles(input) {
5
+ const edition = input.kind === "edition";
6
+ const count = edition ? input.supply : input.items.length;
7
+ const files = [];
8
+ for (let id = 1; id <= count; id++) {
9
+ const item = edition ? input.items[0] : input.items[id - 1];
10
+ files.push({
11
+ name: String(id),
12
+ content: buildAssetMetadata({
13
+ ...input.license,
14
+ name: edition || !item.name ? `${input.name} #${id}` : item.name,
15
+ description: item.description || input.description,
16
+ imageUri: item.imageUri,
17
+ creator: input.creator,
18
+ edition: edition ? `${id}/${count}` : null,
19
+ registrationDate: input.registrationDate
20
+ })
21
+ });
22
+ }
23
+ files.push({
24
+ name: "collection.json",
25
+ content: {
26
+ name: input.name,
27
+ description: input.description,
28
+ image: input.coverUri ?? input.items[0]?.imageUri ?? null,
29
+ drop_kind: input.kind
30
+ }
31
+ });
32
+ return files;
33
+ }
34
+ function metadataBytes(files) {
35
+ return files.reduce((n, f) => n + JSON.stringify(f.content).length, 0);
36
+ }
37
+ export {
38
+ MAX_DROP_METADATA_BYTES,
39
+ MAX_DROP_SUPPLY,
40
+ buildDropMetadataFiles,
41
+ metadataBytes
42
+ };
43
+ //# sourceMappingURL=metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/utils/drop/metadata.ts"],"sourcesContent":["import { buildAssetMetadata, type BuildAssetMetadataInput } from \"@medialane/sdk\";\n\n/** The metadata folder upload holds 2,001 files (tokens + collection.json). */\nexport const MAX_DROP_SUPPLY = 2000;\nexport const MAX_DROP_METADATA_BYTES = 5 * 1024 * 1024;\n\nexport type DropKind = \"edition\" | \"collection\";\n\nexport type DropLicense = Record<\n keyof Pick<BuildAssetMetadataInput, \"ipType\" | \"licenseType\" | \"commercialUse\" | \"derivatives\" | \"attribution\" | \"geographicScope\" | \"aiPolicy\" | \"royalty\">,\n string\n>;\n\nexport interface DropMetadataInput {\n kind: DropKind;\n name: string;\n description: string;\n creator: string;\n coverUri: string | null;\n license: DropLicense;\n registrationDate: string;\n /** Edition: the one artwork. Collection: one per token. */\n items: { name: string; description: string; imageUri: string }[];\n /** Edition copies; ignored for a collection. */\n supply: number;\n}\n\nexport interface DropMetadataFile {\n name: string;\n content: unknown;\n}\n\n/** Token files 1…N (token URI = base URI + id) and collection.json. */\nexport function buildDropMetadataFiles(input: DropMetadataInput): DropMetadataFile[] {\n const edition = input.kind === \"edition\";\n const count = edition ? input.supply : input.items.length;\n const files: DropMetadataFile[] = [];\n for (let id = 1; id <= count; id++) {\n const item = edition ? input.items[0]! : input.items[id - 1]!;\n files.push({\n name: String(id),\n content: buildAssetMetadata({\n ...input.license,\n name: edition || !item.name ? `${input.name} #${id}` : item.name,\n description: item.description || input.description,\n imageUri: item.imageUri,\n creator: input.creator,\n edition: edition ? `${id}/${count}` : null,\n registrationDate: input.registrationDate,\n }),\n });\n }\n files.push({\n name: \"collection.json\",\n content: {\n name: input.name,\n description: input.description,\n image: input.coverUri ?? input.items[0]?.imageUri ?? null,\n drop_kind: input.kind,\n },\n });\n return files;\n}\n\n/** Size as the upload route counts it. */\nexport function metadataBytes(files: DropMetadataFile[]): number {\n return files.reduce((n, f) => n + JSON.stringify(f.content).length, 0);\n}\n"],"mappings":"AAAA,SAAS,0BAAwD;AAG1D,MAAM,kBAAkB;AACxB,MAAM,0BAA0B,IAAI,OAAO;AA6B3C,SAAS,uBAAuB,OAA8C;AACnF,QAAM,UAAU,MAAM,SAAS;AAC/B,QAAM,QAAQ,UAAU,MAAM,SAAS,MAAM,MAAM;AACnD,QAAM,QAA4B,CAAC;AACnC,WAAS,KAAK,GAAG,MAAM,OAAO,MAAM;AAClC,UAAM,OAAO,UAAU,MAAM,MAAM,CAAC,IAAK,MAAM,MAAM,KAAK,CAAC;AAC3D,UAAM,KAAK;AAAA,MACT,MAAM,OAAO,EAAE;AAAA,MACf,SAAS,mBAAmB;AAAA,QAC1B,GAAG,MAAM;AAAA,QACT,MAAM,WAAW,CAAC,KAAK,OAAO,GAAG,MAAM,IAAI,KAAK,EAAE,KAAK,KAAK;AAAA,QAC5D,aAAa,KAAK,eAAe,MAAM;AAAA,QACvC,UAAU,KAAK;AAAA,QACf,SAAS,MAAM;AAAA,QACf,SAAS,UAAU,GAAG,EAAE,IAAI,KAAK,KAAK;AAAA,QACtC,kBAAkB,MAAM;AAAA,MAC1B,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AACA,QAAM,KAAK;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,MACP,MAAM,MAAM;AAAA,MACZ,aAAa,MAAM;AAAA,MACnB,OAAO,MAAM,YAAY,MAAM,MAAM,CAAC,GAAG,YAAY;AAAA,MACrD,WAAW,MAAM;AAAA,IACnB;AAAA,EACF,CAAC;AACD,SAAO;AACT;AAGO,SAAS,cAAc,OAAmC;AAC/D,SAAO,MAAM,OAAO,CAAC,GAAG,MAAM,IAAI,KAAK,UAAU,EAAE,OAAO,EAAE,QAAQ,CAAC;AACvE;","names":[]}
@@ -16,22 +16,22 @@ var __copyProps = (to, from, except, desc) => {
16
16
  return to;
17
17
  };
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var drop_status_exports = {};
20
- __export(drop_status_exports, {
21
- getDropStatus: () => getDropStatus
19
+ var preview_exports = {};
20
+ __export(preview_exports, {
21
+ previewUrl: () => previewUrl
22
22
  });
23
- module.exports = __toCommonJS(drop_status_exports);
24
- function getDropStatus(conditions, totalMinted) {
25
- if (!conditions) return "live";
26
- const now = Math.floor(Date.now() / 1e3);
27
- const max = parseInt(conditions.maxSupply, 10);
28
- if (max > 0 && totalMinted >= max) return "sold_out";
29
- if (now < conditions.startTime) return "upcoming";
30
- if (now > conditions.endTime) return "ended";
31
- return "live";
23
+ module.exports = __toCommonJS(preview_exports);
24
+ const urls = /* @__PURE__ */ new WeakMap();
25
+ function previewUrl(file) {
26
+ let url = urls.get(file);
27
+ if (!url) {
28
+ url = URL.createObjectURL(file);
29
+ urls.set(file, url);
30
+ }
31
+ return url;
32
32
  }
33
33
  // Annotate the CommonJS export names for ESM import in node:
34
34
  0 && (module.exports = {
35
- getDropStatus
35
+ previewUrl
36
36
  });
37
- //# sourceMappingURL=drop-status.cjs.map
37
+ //# sourceMappingURL=preview.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/utils/drop/preview.ts"],"sourcesContent":["const urls = new WeakMap<File, string>();\n\n/** One object URL per picked file, reused across renders. */\nexport function previewUrl(file: File): string {\n let url = urls.get(file);\n if (!url) {\n url = URL.createObjectURL(file);\n urls.set(file, url);\n }\n return url;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAAM,OAAO,oBAAI,QAAsB;AAGhC,SAAS,WAAW,MAAoB;AAC7C,MAAI,MAAM,KAAK,IAAI,IAAI;AACvB,MAAI,CAAC,KAAK;AACR,UAAM,IAAI,gBAAgB,IAAI;AAC9B,SAAK,IAAI,MAAM,GAAG;AAAA,EACpB;AACA,SAAO;AACT;","names":[]}
@@ -0,0 +1,4 @@
1
+ /** One object URL per picked file, reused across renders. */
2
+ declare function previewUrl(file: File): string;
3
+
4
+ export { previewUrl };
@@ -0,0 +1,4 @@
1
+ /** One object URL per picked file, reused across renders. */
2
+ declare function previewUrl(file: File): string;
3
+
4
+ export { previewUrl };
@@ -0,0 +1,13 @@
1
+ const urls = /* @__PURE__ */ new WeakMap();
2
+ function previewUrl(file) {
3
+ let url = urls.get(file);
4
+ if (!url) {
5
+ url = URL.createObjectURL(file);
6
+ urls.set(file, url);
7
+ }
8
+ return url;
9
+ }
10
+ export {
11
+ previewUrl
12
+ };
13
+ //# sourceMappingURL=preview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/utils/drop/preview.ts"],"sourcesContent":["const urls = new WeakMap<File, string>();\n\n/** One object URL per picked file, reused across renders. */\nexport function previewUrl(file: File): string {\n let url = urls.get(file);\n if (!url) {\n url = URL.createObjectURL(file);\n urls.set(file, url);\n }\n return url;\n}\n"],"mappings":"AAAA,MAAM,OAAO,oBAAI,QAAsB;AAGhC,SAAS,WAAW,MAAoB;AAC7C,MAAI,MAAM,KAAK,IAAI,IAAI;AACvB,MAAI,CAAC,KAAK;AACR,UAAM,IAAI,gBAAgB,IAAI;AAC9B,SAAK,IAAI,MAAM,GAAG;AAAA,EACpB;AACA,SAAO;AACT;","names":[]}
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var receipt_exports = {};
20
+ __export(receipt_exports, {
21
+ claimedTokenIds: () => claimedTokenIds
22
+ });
23
+ module.exports = __toCommonJS(receipt_exports);
24
+ var import_starknet = require("starknet");
25
+ const CLAIMED = BigInt(import_starknet.hash.getSelectorFromName("Claimed"));
26
+ const u256 = (low, high) => BigInt(low ?? "0x0") + (BigInt(high ?? "0x0") << 128n);
27
+ function claimedTokenIds(receipt, collection) {
28
+ const target = BigInt(collection);
29
+ const event = receipt.events?.find((e) => e.from_address && BigInt(e.from_address) === target && e.keys?.[0] && BigInt(e.keys[0]) === CLAIMED);
30
+ if (!event?.data) return [];
31
+ const quantity = u256(event.data[0], event.data[1]);
32
+ const first = u256(event.data[2], event.data[3]);
33
+ return Array.from({ length: Number(quantity) }, (_, i) => (first + BigInt(i)).toString());
34
+ }
35
+ // Annotate the CommonJS export names for ESM import in node:
36
+ 0 && (module.exports = {
37
+ claimedTokenIds
38
+ });
39
+ //# sourceMappingURL=receipt.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/utils/drop/receipt.ts"],"sourcesContent":["import { hash } from \"starknet\";\nimport type { ReceiptLike } from \"@medialane/sdk/starknet\";\n\nconst CLAIMED = BigInt(hash.getSelectorFromName(\"Claimed\"));\nconst u256 = (low?: string, high?: string) => BigInt(low ?? \"0x0\") + (BigInt(high ?? \"0x0\") << 128n);\n\n/** Token ids minted by a claim, read from the drop's Claimed event. */\nexport function claimedTokenIds(receipt: ReceiptLike, collection: string): string[] {\n const target = BigInt(collection);\n const event = receipt.events?.find((e) => e.from_address && BigInt(e.from_address) === target && e.keys?.[0] && BigInt(e.keys[0]) === CLAIMED);\n if (!event?.data) return [];\n const quantity = u256(event.data[0], event.data[1]);\n const first = u256(event.data[2], event.data[3]);\n return Array.from({ length: Number(quantity) }, (_, i) => (first + BigInt(i)).toString());\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAAqB;AAGrB,MAAM,UAAU,OAAO,qBAAK,oBAAoB,SAAS,CAAC;AAC1D,MAAM,OAAO,CAAC,KAAc,SAAkB,OAAO,OAAO,KAAK,KAAK,OAAO,QAAQ,KAAK,KAAK;AAGxF,SAAS,gBAAgB,SAAsB,YAA8B;AAClF,QAAM,SAAS,OAAO,UAAU;AAChC,QAAM,QAAQ,QAAQ,QAAQ,KAAK,CAAC,MAAM,EAAE,gBAAgB,OAAO,EAAE,YAAY,MAAM,UAAU,EAAE,OAAO,CAAC,KAAK,OAAO,EAAE,KAAK,CAAC,CAAC,MAAM,OAAO;AAC7I,MAAI,CAAC,OAAO,KAAM,QAAO,CAAC;AAC1B,QAAM,WAAW,KAAK,MAAM,KAAK,CAAC,GAAG,MAAM,KAAK,CAAC,CAAC;AAClD,QAAM,QAAQ,KAAK,MAAM,KAAK,CAAC,GAAG,MAAM,KAAK,CAAC,CAAC;AAC/C,SAAO,MAAM,KAAK,EAAE,QAAQ,OAAO,QAAQ,EAAE,GAAG,CAAC,GAAG,OAAO,QAAQ,OAAO,CAAC,GAAG,SAAS,CAAC;AAC1F;","names":[]}
@@ -0,0 +1,6 @@
1
+ import { ReceiptLike } from '@medialane/sdk/starknet';
2
+
3
+ /** Token ids minted by a claim, read from the drop's Claimed event. */
4
+ declare function claimedTokenIds(receipt: ReceiptLike, collection: string): string[];
5
+
6
+ export { claimedTokenIds };
@@ -0,0 +1,6 @@
1
+ import { ReceiptLike } from '@medialane/sdk/starknet';
2
+
3
+ /** Token ids minted by a claim, read from the drop's Claimed event. */
4
+ declare function claimedTokenIds(receipt: ReceiptLike, collection: string): string[];
5
+
6
+ export { claimedTokenIds };
@@ -0,0 +1,15 @@
1
+ import { hash } from "starknet";
2
+ const CLAIMED = BigInt(hash.getSelectorFromName("Claimed"));
3
+ const u256 = (low, high) => BigInt(low ?? "0x0") + (BigInt(high ?? "0x0") << 128n);
4
+ function claimedTokenIds(receipt, collection) {
5
+ const target = BigInt(collection);
6
+ const event = receipt.events?.find((e) => e.from_address && BigInt(e.from_address) === target && e.keys?.[0] && BigInt(e.keys[0]) === CLAIMED);
7
+ if (!event?.data) return [];
8
+ const quantity = u256(event.data[0], event.data[1]);
9
+ const first = u256(event.data[2], event.data[3]);
10
+ return Array.from({ length: Number(quantity) }, (_, i) => (first + BigInt(i)).toString());
11
+ }
12
+ export {
13
+ claimedTokenIds
14
+ };
15
+ //# sourceMappingURL=receipt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/utils/drop/receipt.ts"],"sourcesContent":["import { hash } from \"starknet\";\nimport type { ReceiptLike } from \"@medialane/sdk/starknet\";\n\nconst CLAIMED = BigInt(hash.getSelectorFromName(\"Claimed\"));\nconst u256 = (low?: string, high?: string) => BigInt(low ?? \"0x0\") + (BigInt(high ?? \"0x0\") << 128n);\n\n/** Token ids minted by a claim, read from the drop's Claimed event. */\nexport function claimedTokenIds(receipt: ReceiptLike, collection: string): string[] {\n const target = BigInt(collection);\n const event = receipt.events?.find((e) => e.from_address && BigInt(e.from_address) === target && e.keys?.[0] && BigInt(e.keys[0]) === CLAIMED);\n if (!event?.data) return [];\n const quantity = u256(event.data[0], event.data[1]);\n const first = u256(event.data[2], event.data[3]);\n return Array.from({ length: Number(quantity) }, (_, i) => (first + BigInt(i)).toString());\n}\n"],"mappings":"AAAA,SAAS,YAAY;AAGrB,MAAM,UAAU,OAAO,KAAK,oBAAoB,SAAS,CAAC;AAC1D,MAAM,OAAO,CAAC,KAAc,SAAkB,OAAO,OAAO,KAAK,KAAK,OAAO,QAAQ,KAAK,KAAK;AAGxF,SAAS,gBAAgB,SAAsB,YAA8B;AAClF,QAAM,SAAS,OAAO,UAAU;AAChC,QAAM,QAAQ,QAAQ,QAAQ,KAAK,CAAC,MAAM,EAAE,gBAAgB,OAAO,EAAE,YAAY,MAAM,UAAU,EAAE,OAAO,CAAC,KAAK,OAAO,EAAE,KAAK,CAAC,CAAC,MAAM,OAAO;AAC7I,MAAI,CAAC,OAAO,KAAM,QAAO,CAAC;AAC1B,QAAM,WAAW,KAAK,MAAM,KAAK,CAAC,GAAG,MAAM,KAAK,CAAC,CAAC;AAClD,QAAM,QAAQ,KAAK,MAAM,KAAK,CAAC,GAAG,MAAM,KAAK,CAAC,CAAC;AAC/C,SAAO,MAAM,KAAK,EAAE,QAAQ,OAAO,QAAQ,EAAE,GAAG,CAAC,GAAG,OAAO,QAAQ,OAAO,CAAC,GAAG,SAAS,CAAC;AAC1F;","names":[]}
@@ -0,0 +1,108 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var sale_exports = {};
20
+ __export(sale_exports, {
21
+ EMPTY_SALE: () => EMPTY_SALE,
22
+ collectorPriceLine: () => collectorPriceLine,
23
+ priceLabel: () => priceLabel,
24
+ saleToken: () => saleToken,
25
+ supplyLabel: () => supplyLabel,
26
+ toDropTerms: () => toDropTerms,
27
+ validateSale: () => validateSale
28
+ });
29
+ module.exports = __toCommonJS(sale_exports);
30
+ var import_sdk = require("@medialane/sdk");
31
+ var import_starknet = require("@medialane/sdk/starknet");
32
+ const EMPTY_SALE = {
33
+ paid: false,
34
+ price: "",
35
+ tokenSymbol: "USDC",
36
+ startNow: true,
37
+ start: "",
38
+ hasEnd: false,
39
+ end: "",
40
+ limitPerWallet: false,
41
+ perWallet: ""
42
+ };
43
+ function saleToken(symbol) {
44
+ return (0, import_sdk.getListableTokens)().find((t) => t.symbol === symbol) ?? null;
45
+ }
46
+ const toSeconds = (local) => {
47
+ if (!local) return null;
48
+ const ms = new Date(local).getTime();
49
+ return Number.isNaN(ms) ? null : Math.floor(ms / 1e3);
50
+ };
51
+ function validateSale(d, now) {
52
+ const errors = {};
53
+ if (d.paid) {
54
+ const token = saleToken(d.tokenSymbol);
55
+ const decimals = d.price.split(".")[1]?.length ?? 0;
56
+ if (!token) errors.price = "Choose a currency";
57
+ else if (!/^\d+(\.\d+)?$/.test(d.price)) errors.price = "Enter a price above 0";
58
+ else if (decimals > token.decimals) errors.price = `Use at most ${token.decimals} decimals for ${token.symbol}`;
59
+ else if (BigInt((0, import_sdk.parseAmount)(d.price, token.decimals)) === 0n) errors.price = "Enter a price above 0";
60
+ }
61
+ const start = d.startNow ? now : toSeconds(d.start);
62
+ if (!d.startNow && (start === null || start <= now)) errors.start = "Pick a start time in the future";
63
+ if (d.hasEnd) {
64
+ const end = toSeconds(d.end);
65
+ if (end === null || start !== null && end <= start) errors.end = "The sale must end after it starts";
66
+ }
67
+ if (d.limitPerWallet && !/^[1-9]\d*$/.test(d.perWallet)) errors.perWallet = "Enter 1 or more";
68
+ return errors;
69
+ }
70
+ function toDropTerms(d) {
71
+ const token = d.paid ? saleToken(d.tokenSymbol) : null;
72
+ return {
73
+ startTime: d.startNow ? 0 : toSeconds(d.start),
74
+ endTime: d.hasEnd ? toSeconds(d.end) : 0,
75
+ price: token ? (0, import_sdk.parseAmount)(d.price, token.decimals) : "0",
76
+ paymentToken: token ? token.address : "0x0",
77
+ maxPerWallet: d.limitPerWallet ? d.perWallet : "0"
78
+ };
79
+ }
80
+ function collectorPriceLine(d, cfg) {
81
+ const token = d.paid ? saleToken(d.tokenSymbol) : null;
82
+ if (!token || validateSale({ ...EMPTY_SALE, paid: true, price: d.price, tokenSymbol: d.tokenSymbol }, 0).price) return null;
83
+ const price = BigInt((0, import_sdk.parseAmount)(d.price, token.decimals));
84
+ const { fee, total } = (0, import_starknet.dropMintCost)(price, 1, cfg);
85
+ const amount = (v) => `${(0, import_sdk.formatAmount)(v.toString(), token.decimals)} ${token.symbol}`;
86
+ if (fee === 0n) return `Collectors pay ${amount(price)}.`;
87
+ return `Collectors pay ${amount(total)} (incl. ${(0, import_starknet.feeBps)("launchpad", cfg) / 100}% platform fee). You receive ${amount(price)}.`;
88
+ }
89
+ function priceLabel(price, paymentToken) {
90
+ if (BigInt(price) === 0n) return "Free";
91
+ const token = (0, import_sdk.getTokenByAddress)(paymentToken);
92
+ return token ? `${(0, import_sdk.formatAmount)(price, token.decimals)} ${token.symbol}` : "Paid";
93
+ }
94
+ const count = (v) => Number(v).toLocaleString("en-US");
95
+ function supplyLabel(minted, maxSupply) {
96
+ return maxSupply === "0" ? `${count(minted)} minted` : `${count(minted)} / ${count(maxSupply)} minted`;
97
+ }
98
+ // Annotate the CommonJS export names for ESM import in node:
99
+ 0 && (module.exports = {
100
+ EMPTY_SALE,
101
+ collectorPriceLine,
102
+ priceLabel,
103
+ saleToken,
104
+ supplyLabel,
105
+ toDropTerms,
106
+ validateSale
107
+ });
108
+ //# sourceMappingURL=sale.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/utils/drop/sale.ts"],"sourcesContent":["import { formatAmount, getListableTokens, getTokenByAddress, parseAmount, type DropTermsBody, type ResolvedFeeConfig } from \"@medialane/sdk\";\nimport { dropMintCost, feeBps } from \"@medialane/sdk/starknet\";\n\nexport interface SaleDraft {\n paid: boolean;\n /** In the token's normal units, e.g. \"5.5\". */\n price: string;\n tokenSymbol: string;\n startNow: boolean;\n /** `datetime-local` value in the creator's time zone. */\n start: string;\n hasEnd: boolean;\n end: string;\n limitPerWallet: boolean;\n perWallet: string;\n}\n\nexport const EMPTY_SALE: SaleDraft = {\n paid: false, price: \"\", tokenSymbol: \"USDC\",\n startNow: true, start: \"\", hasEnd: false, end: \"\",\n limitPerWallet: false, perWallet: \"\",\n};\n\nexport type SaleErrors = Partial<Record<\"price\" | \"start\" | \"end\" | \"perWallet\", string>>;\n\nexport function saleToken(symbol: string) {\n return getListableTokens().find((t) => t.symbol === symbol) ?? null;\n}\n\nconst toSeconds = (local: string): number | null => {\n if (!local) return null;\n const ms = new Date(local).getTime();\n return Number.isNaN(ms) ? null : Math.floor(ms / 1000);\n};\n\nexport function validateSale(d: SaleDraft, now: number): SaleErrors {\n const errors: SaleErrors = {};\n if (d.paid) {\n const token = saleToken(d.tokenSymbol);\n const decimals = d.price.split(\".\")[1]?.length ?? 0;\n if (!token) errors.price = \"Choose a currency\";\n else if (!/^\\d+(\\.\\d+)?$/.test(d.price)) errors.price = \"Enter a price above 0\";\n else if (decimals > token.decimals) errors.price = `Use at most ${token.decimals} decimals for ${token.symbol}`;\n else if (BigInt(parseAmount(d.price, token.decimals)) === 0n) errors.price = \"Enter a price above 0\";\n }\n const start = d.startNow ? now : toSeconds(d.start);\n if (!d.startNow && (start === null || start <= now)) errors.start = \"Pick a start time in the future\";\n if (d.hasEnd) {\n const end = toSeconds(d.end);\n if (end === null || (start !== null && end <= start)) errors.end = \"The sale must end after it starts\";\n }\n if (d.limitPerWallet && !/^[1-9]\\d*$/.test(d.perWallet)) errors.perWallet = \"Enter 1 or more\";\n return errors;\n}\n\n/** Terms for the create intent; call only after `validateSale` returns no errors. */\nexport function toDropTerms(d: SaleDraft): DropTermsBody {\n const token = d.paid ? saleToken(d.tokenSymbol) : null;\n return {\n startTime: d.startNow ? 0 : toSeconds(d.start)!,\n endTime: d.hasEnd ? toSeconds(d.end)! : 0,\n price: token ? parseAmount(d.price, token.decimals) : \"0\",\n paymentToken: token ? token.address : \"0x0\",\n maxPerWallet: d.limitPerWallet ? d.perWallet : \"0\",\n };\n}\n\n/** What one token costs a collector, with the platform fee; null while the price is free or unfinished. */\nexport function collectorPriceLine(d: SaleDraft, cfg: ResolvedFeeConfig): string | null {\n const token = d.paid ? saleToken(d.tokenSymbol) : null;\n if (!token || validateSale({ ...EMPTY_SALE, paid: true, price: d.price, tokenSymbol: d.tokenSymbol }, 0).price) return null;\n const price = BigInt(parseAmount(d.price, token.decimals));\n const { fee, total } = dropMintCost(price, 1, cfg);\n const amount = (v: bigint) => `${formatAmount(v.toString(), token.decimals)} ${token.symbol}`;\n if (fee === 0n) return `Collectors pay ${amount(price)}.`;\n return `Collectors pay ${amount(total)} (incl. ${feeBps(\"launchpad\", cfg) / 100}% platform fee). You receive ${amount(price)}.`;\n}\n\nexport function priceLabel(price: string, paymentToken: string): string {\n if (BigInt(price) === 0n) return \"Free\";\n const token = getTokenByAddress(paymentToken);\n return token ? `${formatAmount(price, token.decimals)} ${token.symbol}` : \"Paid\";\n}\n\nconst count = (v: string) => Number(v).toLocaleString(\"en-US\");\n\nexport function supplyLabel(minted: string, maxSupply: string): string {\n return maxSupply === \"0\" ? `${count(minted)} minted` : `${count(minted)} / ${count(maxSupply)} minted`;\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,52 @@
1
+ import { ResolvedFeeConfig, DropTermsBody } from '@medialane/sdk';
2
+
3
+ interface SaleDraft {
4
+ paid: boolean;
5
+ /** In the token's normal units, e.g. "5.5". */
6
+ price: string;
7
+ tokenSymbol: string;
8
+ startNow: boolean;
9
+ /** `datetime-local` value in the creator's time zone. */
10
+ start: string;
11
+ hasEnd: boolean;
12
+ end: string;
13
+ limitPerWallet: boolean;
14
+ perWallet: string;
15
+ }
16
+ declare const EMPTY_SALE: SaleDraft;
17
+ type SaleErrors = Partial<Record<"price" | "start" | "end" | "perWallet", string>>;
18
+ declare function saleToken(symbol: string): {
19
+ readonly symbol: "USDC";
20
+ readonly address: "0x033068f6539f8e6e6b131e6b2b814e6c34a5224bc66947c47dab9dfee93b35fb";
21
+ readonly decimals: 6;
22
+ readonly listable: true;
23
+ } | {
24
+ readonly symbol: "USDT";
25
+ readonly address: "0x068f5c6a61780768455de69077e07e89787839bf8166decfbf92b645209c0fb8";
26
+ readonly decimals: 6;
27
+ readonly listable: true;
28
+ } | {
29
+ readonly symbol: "ETH";
30
+ readonly address: "0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7";
31
+ readonly decimals: 18;
32
+ readonly listable: true;
33
+ } | {
34
+ readonly symbol: "STRK";
35
+ readonly address: "0x04718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d";
36
+ readonly decimals: 18;
37
+ readonly listable: true;
38
+ } | {
39
+ readonly symbol: "WBTC";
40
+ readonly address: "0x03fe2b97c1fd336e750087d68b9b867997fd64a2661ff3ca5a7c771641e8e7ac";
41
+ readonly decimals: 8;
42
+ readonly listable: true;
43
+ } | null;
44
+ declare function validateSale(d: SaleDraft, now: number): SaleErrors;
45
+ /** Terms for the create intent; call only after `validateSale` returns no errors. */
46
+ declare function toDropTerms(d: SaleDraft): DropTermsBody;
47
+ /** What one token costs a collector, with the platform fee; null while the price is free or unfinished. */
48
+ declare function collectorPriceLine(d: SaleDraft, cfg: ResolvedFeeConfig): string | null;
49
+ declare function priceLabel(price: string, paymentToken: string): string;
50
+ declare function supplyLabel(minted: string, maxSupply: string): string;
51
+
52
+ export { EMPTY_SALE, type SaleDraft, type SaleErrors, collectorPriceLine, priceLabel, saleToken, supplyLabel, toDropTerms, validateSale };
@@ -0,0 +1,52 @@
1
+ import { ResolvedFeeConfig, DropTermsBody } from '@medialane/sdk';
2
+
3
+ interface SaleDraft {
4
+ paid: boolean;
5
+ /** In the token's normal units, e.g. "5.5". */
6
+ price: string;
7
+ tokenSymbol: string;
8
+ startNow: boolean;
9
+ /** `datetime-local` value in the creator's time zone. */
10
+ start: string;
11
+ hasEnd: boolean;
12
+ end: string;
13
+ limitPerWallet: boolean;
14
+ perWallet: string;
15
+ }
16
+ declare const EMPTY_SALE: SaleDraft;
17
+ type SaleErrors = Partial<Record<"price" | "start" | "end" | "perWallet", string>>;
18
+ declare function saleToken(symbol: string): {
19
+ readonly symbol: "USDC";
20
+ readonly address: "0x033068f6539f8e6e6b131e6b2b814e6c34a5224bc66947c47dab9dfee93b35fb";
21
+ readonly decimals: 6;
22
+ readonly listable: true;
23
+ } | {
24
+ readonly symbol: "USDT";
25
+ readonly address: "0x068f5c6a61780768455de69077e07e89787839bf8166decfbf92b645209c0fb8";
26
+ readonly decimals: 6;
27
+ readonly listable: true;
28
+ } | {
29
+ readonly symbol: "ETH";
30
+ readonly address: "0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7";
31
+ readonly decimals: 18;
32
+ readonly listable: true;
33
+ } | {
34
+ readonly symbol: "STRK";
35
+ readonly address: "0x04718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d";
36
+ readonly decimals: 18;
37
+ readonly listable: true;
38
+ } | {
39
+ readonly symbol: "WBTC";
40
+ readonly address: "0x03fe2b97c1fd336e750087d68b9b867997fd64a2661ff3ca5a7c771641e8e7ac";
41
+ readonly decimals: 8;
42
+ readonly listable: true;
43
+ } | null;
44
+ declare function validateSale(d: SaleDraft, now: number): SaleErrors;
45
+ /** Terms for the create intent; call only after `validateSale` returns no errors. */
46
+ declare function toDropTerms(d: SaleDraft): DropTermsBody;
47
+ /** What one token costs a collector, with the platform fee; null while the price is free or unfinished. */
48
+ declare function collectorPriceLine(d: SaleDraft, cfg: ResolvedFeeConfig): string | null;
49
+ declare function priceLabel(price: string, paymentToken: string): string;
50
+ declare function supplyLabel(minted: string, maxSupply: string): string;
51
+
52
+ export { EMPTY_SALE, type SaleDraft, type SaleErrors, collectorPriceLine, priceLabel, saleToken, supplyLabel, toDropTerms, validateSale };
@@ -0,0 +1,78 @@
1
+ import { formatAmount, getListableTokens, getTokenByAddress, parseAmount } from "@medialane/sdk";
2
+ import { dropMintCost, feeBps } from "@medialane/sdk/starknet";
3
+ const EMPTY_SALE = {
4
+ paid: false,
5
+ price: "",
6
+ tokenSymbol: "USDC",
7
+ startNow: true,
8
+ start: "",
9
+ hasEnd: false,
10
+ end: "",
11
+ limitPerWallet: false,
12
+ perWallet: ""
13
+ };
14
+ function saleToken(symbol) {
15
+ return getListableTokens().find((t) => t.symbol === symbol) ?? null;
16
+ }
17
+ const toSeconds = (local) => {
18
+ if (!local) return null;
19
+ const ms = new Date(local).getTime();
20
+ return Number.isNaN(ms) ? null : Math.floor(ms / 1e3);
21
+ };
22
+ function validateSale(d, now) {
23
+ const errors = {};
24
+ if (d.paid) {
25
+ const token = saleToken(d.tokenSymbol);
26
+ const decimals = d.price.split(".")[1]?.length ?? 0;
27
+ if (!token) errors.price = "Choose a currency";
28
+ else if (!/^\d+(\.\d+)?$/.test(d.price)) errors.price = "Enter a price above 0";
29
+ else if (decimals > token.decimals) errors.price = `Use at most ${token.decimals} decimals for ${token.symbol}`;
30
+ else if (BigInt(parseAmount(d.price, token.decimals)) === 0n) errors.price = "Enter a price above 0";
31
+ }
32
+ const start = d.startNow ? now : toSeconds(d.start);
33
+ if (!d.startNow && (start === null || start <= now)) errors.start = "Pick a start time in the future";
34
+ if (d.hasEnd) {
35
+ const end = toSeconds(d.end);
36
+ if (end === null || start !== null && end <= start) errors.end = "The sale must end after it starts";
37
+ }
38
+ if (d.limitPerWallet && !/^[1-9]\d*$/.test(d.perWallet)) errors.perWallet = "Enter 1 or more";
39
+ return errors;
40
+ }
41
+ function toDropTerms(d) {
42
+ const token = d.paid ? saleToken(d.tokenSymbol) : null;
43
+ return {
44
+ startTime: d.startNow ? 0 : toSeconds(d.start),
45
+ endTime: d.hasEnd ? toSeconds(d.end) : 0,
46
+ price: token ? parseAmount(d.price, token.decimals) : "0",
47
+ paymentToken: token ? token.address : "0x0",
48
+ maxPerWallet: d.limitPerWallet ? d.perWallet : "0"
49
+ };
50
+ }
51
+ function collectorPriceLine(d, cfg) {
52
+ const token = d.paid ? saleToken(d.tokenSymbol) : null;
53
+ if (!token || validateSale({ ...EMPTY_SALE, paid: true, price: d.price, tokenSymbol: d.tokenSymbol }, 0).price) return null;
54
+ const price = BigInt(parseAmount(d.price, token.decimals));
55
+ const { fee, total } = dropMintCost(price, 1, cfg);
56
+ const amount = (v) => `${formatAmount(v.toString(), token.decimals)} ${token.symbol}`;
57
+ if (fee === 0n) return `Collectors pay ${amount(price)}.`;
58
+ return `Collectors pay ${amount(total)} (incl. ${feeBps("launchpad", cfg) / 100}% platform fee). You receive ${amount(price)}.`;
59
+ }
60
+ function priceLabel(price, paymentToken) {
61
+ if (BigInt(price) === 0n) return "Free";
62
+ const token = getTokenByAddress(paymentToken);
63
+ return token ? `${formatAmount(price, token.decimals)} ${token.symbol}` : "Paid";
64
+ }
65
+ const count = (v) => Number(v).toLocaleString("en-US");
66
+ function supplyLabel(minted, maxSupply) {
67
+ return maxSupply === "0" ? `${count(minted)} minted` : `${count(minted)} / ${count(maxSupply)} minted`;
68
+ }
69
+ export {
70
+ EMPTY_SALE,
71
+ collectorPriceLine,
72
+ priceLabel,
73
+ saleToken,
74
+ supplyLabel,
75
+ toDropTerms,
76
+ validateSale
77
+ };
78
+ //# sourceMappingURL=sale.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/utils/drop/sale.ts"],"sourcesContent":["import { formatAmount, getListableTokens, getTokenByAddress, parseAmount, type DropTermsBody, type ResolvedFeeConfig } from \"@medialane/sdk\";\nimport { dropMintCost, feeBps } from \"@medialane/sdk/starknet\";\n\nexport interface SaleDraft {\n paid: boolean;\n /** In the token's normal units, e.g. \"5.5\". */\n price: string;\n tokenSymbol: string;\n startNow: boolean;\n /** `datetime-local` value in the creator's time zone. */\n start: string;\n hasEnd: boolean;\n end: string;\n limitPerWallet: boolean;\n perWallet: string;\n}\n\nexport const EMPTY_SALE: SaleDraft = {\n paid: false, price: \"\", tokenSymbol: \"USDC\",\n startNow: true, start: \"\", hasEnd: false, end: \"\",\n limitPerWallet: false, perWallet: \"\",\n};\n\nexport type SaleErrors = Partial<Record<\"price\" | \"start\" | \"end\" | \"perWallet\", string>>;\n\nexport function saleToken(symbol: string) {\n return getListableTokens().find((t) => t.symbol === symbol) ?? null;\n}\n\nconst toSeconds = (local: string): number | null => {\n if (!local) return null;\n const ms = new Date(local).getTime();\n return Number.isNaN(ms) ? null : Math.floor(ms / 1000);\n};\n\nexport function validateSale(d: SaleDraft, now: number): SaleErrors {\n const errors: SaleErrors = {};\n if (d.paid) {\n const token = saleToken(d.tokenSymbol);\n const decimals = d.price.split(\".\")[1]?.length ?? 0;\n if (!token) errors.price = \"Choose a currency\";\n else if (!/^\\d+(\\.\\d+)?$/.test(d.price)) errors.price = \"Enter a price above 0\";\n else if (decimals > token.decimals) errors.price = `Use at most ${token.decimals} decimals for ${token.symbol}`;\n else if (BigInt(parseAmount(d.price, token.decimals)) === 0n) errors.price = \"Enter a price above 0\";\n }\n const start = d.startNow ? now : toSeconds(d.start);\n if (!d.startNow && (start === null || start <= now)) errors.start = \"Pick a start time in the future\";\n if (d.hasEnd) {\n const end = toSeconds(d.end);\n if (end === null || (start !== null && end <= start)) errors.end = \"The sale must end after it starts\";\n }\n if (d.limitPerWallet && !/^[1-9]\\d*$/.test(d.perWallet)) errors.perWallet = \"Enter 1 or more\";\n return errors;\n}\n\n/** Terms for the create intent; call only after `validateSale` returns no errors. */\nexport function toDropTerms(d: SaleDraft): DropTermsBody {\n const token = d.paid ? saleToken(d.tokenSymbol) : null;\n return {\n startTime: d.startNow ? 0 : toSeconds(d.start)!,\n endTime: d.hasEnd ? toSeconds(d.end)! : 0,\n price: token ? parseAmount(d.price, token.decimals) : \"0\",\n paymentToken: token ? token.address : \"0x0\",\n maxPerWallet: d.limitPerWallet ? d.perWallet : \"0\",\n };\n}\n\n/** What one token costs a collector, with the platform fee; null while the price is free or unfinished. */\nexport function collectorPriceLine(d: SaleDraft, cfg: ResolvedFeeConfig): string | null {\n const token = d.paid ? saleToken(d.tokenSymbol) : null;\n if (!token || validateSale({ ...EMPTY_SALE, paid: true, price: d.price, tokenSymbol: d.tokenSymbol }, 0).price) return null;\n const price = BigInt(parseAmount(d.price, token.decimals));\n const { fee, total } = dropMintCost(price, 1, cfg);\n const amount = (v: bigint) => `${formatAmount(v.toString(), token.decimals)} ${token.symbol}`;\n if (fee === 0n) return `Collectors pay ${amount(price)}.`;\n return `Collectors pay ${amount(total)} (incl. ${feeBps(\"launchpad\", cfg) / 100}% platform fee). You receive ${amount(price)}.`;\n}\n\nexport function priceLabel(price: string, paymentToken: string): string {\n if (BigInt(price) === 0n) return \"Free\";\n const token = getTokenByAddress(paymentToken);\n return token ? `${formatAmount(price, token.decimals)} ${token.symbol}` : \"Paid\";\n}\n\nconst count = (v: string) => Number(v).toLocaleString(\"en-US\");\n\nexport function supplyLabel(minted: string, maxSupply: string): string {\n return maxSupply === \"0\" ? `${count(minted)} minted` : `${count(minted)} / ${count(maxSupply)} minted`;\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __copyProps = (to, from, except, desc) => {
7
+ if (from && typeof from === "object" || typeof from === "function") {
8
+ for (let key of __getOwnPropNames(from))
9
+ if (!__hasOwnProp.call(to, key) && key !== except)
10
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
11
+ }
12
+ return to;
13
+ };
14
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
15
+ var types_exports = {};
16
+ module.exports = __toCommonJS(types_exports);
17
+ //# sourceMappingURL=types.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/utils/drop/types.ts"],"sourcesContent":["import type { ProviderInterface } from \"starknet\";\nimport type { MedialaneClient, ReceiptProvider } from \"@medialane/sdk/starknet\";\nimport type { FastMintSigner } from \"../../components/fast-mint/types.js\";\n\nexport type DropSigner = FastMintSigner;\n\n/** Receipts for confirmations, contract reads for live drop state. */\nexport type DropProvider = ReceiptProvider & Pick<ProviderInterface, \"callContract\">;\n\n/** What every drop screen takes from the app. */\nexport interface DropAppProps {\n getClient: () => MedialaneClient;\n provider: DropProvider;\n getSigner: () => Promise<DropSigner> | DropSigner;\n walletAddress: string | null;\n onRequireWallet: () => void;\n connectLabel?: string;\n}\n"],"mappings":";;;;;;;;;;;;;;AAAA;AAAA;","names":[]}
@@ -0,0 +1,20 @@
1
+ import { ProviderInterface } from 'starknet';
2
+ import { MedialaneClient, ReceiptProvider } from '@medialane/sdk/starknet';
3
+ import { FastMintSigner } from '../../components/fast-mint/types.cjs';
4
+ import 'react';
5
+ import '@medialane/sdk';
6
+
7
+ type DropSigner = FastMintSigner;
8
+ /** Receipts for confirmations, contract reads for live drop state. */
9
+ type DropProvider = ReceiptProvider & Pick<ProviderInterface, "callContract">;
10
+ /** What every drop screen takes from the app. */
11
+ interface DropAppProps {
12
+ getClient: () => MedialaneClient;
13
+ provider: DropProvider;
14
+ getSigner: () => Promise<DropSigner> | DropSigner;
15
+ walletAddress: string | null;
16
+ onRequireWallet: () => void;
17
+ connectLabel?: string;
18
+ }
19
+
20
+ export type { DropAppProps, DropProvider, DropSigner };
@@ -0,0 +1,20 @@
1
+ import { ProviderInterface } from 'starknet';
2
+ import { MedialaneClient, ReceiptProvider } from '@medialane/sdk/starknet';
3
+ import { FastMintSigner } from '../../components/fast-mint/types.js';
4
+ import 'react';
5
+ import '@medialane/sdk';
6
+
7
+ type DropSigner = FastMintSigner;
8
+ /** Receipts for confirmations, contract reads for live drop state. */
9
+ type DropProvider = ReceiptProvider & Pick<ProviderInterface, "callContract">;
10
+ /** What every drop screen takes from the app. */
11
+ interface DropAppProps {
12
+ getClient: () => MedialaneClient;
13
+ provider: DropProvider;
14
+ getSigner: () => Promise<DropSigner> | DropSigner;
15
+ walletAddress: string | null;
16
+ onRequireWallet: () => void;
17
+ connectLabel?: string;
18
+ }
19
+
20
+ export type { DropAppProps, DropProvider, DropSigner };
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}