@medialane/ui 0.258.0 → 0.260.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 (167) hide show
  1. package/dist/components/activities-feed.cjs +5 -1
  2. package/dist/components/activities-feed.cjs.map +1 -1
  3. package/dist/components/activities-feed.js +5 -1
  4. package/dist/components/activities-feed.js.map +1 -1
  5. package/dist/components/activity-feed-shell.cjs +3 -1
  6. package/dist/components/activity-feed-shell.cjs.map +1 -1
  7. package/dist/components/activity-feed-shell.js +3 -1
  8. package/dist/components/activity-feed-shell.js.map +1 -1
  9. package/dist/components/button.d.cts +1 -1
  10. package/dist/components/button.d.ts +1 -1
  11. package/dist/components/coins-explorer.cjs +5 -1
  12. package/dist/components/coins-explorer.cjs.map +1 -1
  13. package/dist/components/coins-explorer.js +6 -2
  14. package/dist/components/coins-explorer.js.map +1 -1
  15. package/dist/components/comments-section.cjs +7 -6
  16. package/dist/components/comments-section.cjs.map +1 -1
  17. package/dist/components/comments-section.js +7 -6
  18. package/dist/components/comments-section.js.map +1 -1
  19. package/dist/components/discover-community-section.cjs +5 -1
  20. package/dist/components/discover-community-section.cjs.map +1 -1
  21. package/dist/components/discover-community-section.js +5 -1
  22. package/dist/components/discover-community-section.js.map +1 -1
  23. package/dist/components/discover-feed-section.cjs +5 -1
  24. package/dist/components/discover-feed-section.cjs.map +1 -1
  25. package/dist/components/discover-feed-section.js +5 -1
  26. package/dist/components/discover-feed-section.js.map +1 -1
  27. package/dist/components/fast-mint/fast-mint.d.cts +2 -2
  28. package/dist/components/fast-mint/fast-mint.d.ts +2 -2
  29. package/dist/components/fast-mint/success-view.cjs +2 -2
  30. package/dist/components/fast-mint/success-view.cjs.map +1 -1
  31. package/dist/components/fast-mint/success-view.js +2 -2
  32. package/dist/components/fast-mint/success-view.js.map +1 -1
  33. package/dist/components/ip-type-page.cjs +3 -2
  34. package/dist/components/ip-type-page.cjs.map +1 -1
  35. package/dist/components/ip-type-page.js +3 -2
  36. package/dist/components/ip-type-page.js.map +1 -1
  37. package/dist/components/launchpad/coin-create.cjs +9 -7
  38. package/dist/components/launchpad/coin-create.cjs.map +1 -1
  39. package/dist/components/launchpad/coin-create.js +9 -7
  40. package/dist/components/launchpad/coin-create.js.map +1 -1
  41. package/dist/components/launchpad/collection-create-form.cjs +11 -14
  42. package/dist/components/launchpad/collection-create-form.cjs.map +1 -1
  43. package/dist/components/launchpad/collection-create-form.js +12 -15
  44. package/dist/components/launchpad/collection-create-form.js.map +1 -1
  45. package/dist/components/launchpad/collection-create-presets.cjs +8 -8
  46. package/dist/components/launchpad/collection-create-presets.cjs.map +1 -1
  47. package/dist/components/launchpad/collection-create-presets.d.cts +2 -1
  48. package/dist/components/launchpad/collection-create-presets.d.ts +2 -1
  49. package/dist/components/launchpad/collection-create-presets.js +8 -8
  50. package/dist/components/launchpad/collection-create-presets.js.map +1 -1
  51. package/dist/components/launchpad/edition-mint.cjs +9 -7
  52. package/dist/components/launchpad/edition-mint.cjs.map +1 -1
  53. package/dist/components/launchpad/edition-mint.js +9 -7
  54. package/dist/components/launchpad/edition-mint.js.map +1 -1
  55. package/dist/components/launchpad/pop-create.cjs +5 -6
  56. package/dist/components/launchpad/pop-create.cjs.map +1 -1
  57. package/dist/components/launchpad/pop-create.js +5 -6
  58. package/dist/components/launchpad/pop-create.js.map +1 -1
  59. package/dist/components/launchpad/remix-mint.cjs +9 -7
  60. package/dist/components/launchpad/remix-mint.cjs.map +1 -1
  61. package/dist/components/launchpad/remix-mint.js +9 -7
  62. package/dist/components/launchpad/remix-mint.js.map +1 -1
  63. package/dist/components/launchpad/single-edition-mint.cjs +9 -7
  64. package/dist/components/launchpad/single-edition-mint.cjs.map +1 -1
  65. package/dist/components/launchpad/single-edition-mint.js +9 -7
  66. package/dist/components/launchpad/single-edition-mint.js.map +1 -1
  67. package/dist/components/launchpad/sponsorship-create.cjs +5 -6
  68. package/dist/components/launchpad/sponsorship-create.cjs.map +1 -1
  69. package/dist/components/launchpad/sponsorship-create.js +5 -6
  70. package/dist/components/launchpad/sponsorship-create.js.map +1 -1
  71. package/dist/components/launchpad/tier-mint-form.cjs +5 -6
  72. package/dist/components/launchpad/tier-mint-form.cjs.map +1 -1
  73. package/dist/components/launchpad/tier-mint-form.js +5 -6
  74. package/dist/components/launchpad/tier-mint-form.js.map +1 -1
  75. package/dist/components/launchpad/tier-mint-presets.cjs +2 -2
  76. package/dist/components/launchpad/tier-mint-presets.cjs.map +1 -1
  77. package/dist/components/launchpad/tier-mint-presets.d.cts +2 -1
  78. package/dist/components/launchpad/tier-mint-presets.d.ts +2 -1
  79. package/dist/components/launchpad/tier-mint-presets.js +2 -2
  80. package/dist/components/launchpad/tier-mint-presets.js.map +1 -1
  81. package/dist/components/marketplace-dialog-primitives.cjs +1 -31
  82. package/dist/components/marketplace-dialog-primitives.cjs.map +1 -1
  83. package/dist/components/marketplace-dialog-primitives.d.cts +1 -12
  84. package/dist/components/marketplace-dialog-primitives.d.ts +1 -12
  85. package/dist/components/marketplace-dialog-primitives.js +2 -31
  86. package/dist/components/marketplace-dialog-primitives.js.map +1 -1
  87. package/dist/components/media-wallet/media-wallet-activity.cjs +5 -1
  88. package/dist/components/media-wallet/media-wallet-activity.cjs.map +1 -1
  89. package/dist/components/media-wallet/media-wallet-activity.js +5 -1
  90. package/dist/components/media-wallet/media-wallet-activity.js.map +1 -1
  91. package/dist/components/media-wallet/media-wallet-home.cjs +3 -2
  92. package/dist/components/media-wallet/media-wallet-home.cjs.map +1 -1
  93. package/dist/components/media-wallet/media-wallet-home.js +3 -2
  94. package/dist/components/media-wallet/media-wallet-home.js.map +1 -1
  95. package/dist/components/media-wallet/media-wallet-send.cjs +5 -2
  96. package/dist/components/media-wallet/media-wallet-send.cjs.map +1 -1
  97. package/dist/components/media-wallet/media-wallet-send.js +5 -2
  98. package/dist/components/media-wallet/media-wallet-send.js.map +1 -1
  99. package/dist/components/media-wallet/success-dialog.cjs +5 -11
  100. package/dist/components/media-wallet/success-dialog.cjs.map +1 -1
  101. package/dist/components/media-wallet/success-dialog.js +5 -11
  102. package/dist/components/media-wallet/success-dialog.js.map +1 -1
  103. package/dist/components/pop-claim-button.cjs +7 -6
  104. package/dist/components/pop-claim-button.cjs.map +1 -1
  105. package/dist/components/pop-claim-button.js +7 -6
  106. package/dist/components/pop-claim-button.js.map +1 -1
  107. package/dist/components/pop-manage-page.cjs +5 -4
  108. package/dist/components/pop-manage-page.cjs.map +1 -1
  109. package/dist/components/pop-manage-page.js +5 -4
  110. package/dist/components/pop-manage-page.js.map +1 -1
  111. package/dist/components/portfolio-sponsorships.cjs +15 -8
  112. package/dist/components/portfolio-sponsorships.cjs.map +1 -1
  113. package/dist/components/portfolio-sponsorships.js +15 -8
  114. package/dist/components/portfolio-sponsorships.js.map +1 -1
  115. package/dist/components/service-collections-page.cjs +2 -2
  116. package/dist/components/service-collections-page.cjs.map +1 -1
  117. package/dist/components/service-collections-page.d.cts +2 -2
  118. package/dist/components/service-collections-page.d.ts +2 -2
  119. package/dist/components/service-collections-page.js +2 -2
  120. package/dist/components/service-collections-page.js.map +1 -1
  121. package/dist/components/sheet.d.cts +1 -1
  122. package/dist/components/sheet.d.ts +1 -1
  123. package/dist/components/sponsorship-offer-page.cjs +9 -8
  124. package/dist/components/sponsorship-offer-page.cjs.map +1 -1
  125. package/dist/components/sponsorship-offer-page.js +9 -8
  126. package/dist/components/sponsorship-offer-page.js.map +1 -1
  127. package/dist/components/transaction-success.cjs +60 -0
  128. package/dist/components/transaction-success.cjs.map +1 -0
  129. package/dist/components/transaction-success.d.cts +20 -0
  130. package/dist/components/transaction-success.d.ts +20 -0
  131. package/dist/components/transaction-success.js +26 -0
  132. package/dist/components/transaction-success.js.map +1 -0
  133. package/dist/components/transfer-collection-ownership.cjs +6 -8
  134. package/dist/components/transfer-collection-ownership.cjs.map +1 -1
  135. package/dist/components/transfer-collection-ownership.js +6 -8
  136. package/dist/components/transfer-collection-ownership.js.map +1 -1
  137. package/dist/index.cjs +9 -8
  138. package/dist/index.cjs.map +1 -1
  139. package/dist/index.d.cts +4 -3
  140. package/dist/index.d.ts +4 -3
  141. package/dist/index.js +6 -6
  142. package/dist/index.js.map +1 -1
  143. package/dist/utils/empty-messages.cjs +62 -0
  144. package/dist/utils/empty-messages.cjs.map +1 -0
  145. package/dist/utils/empty-messages.d.cts +40 -0
  146. package/dist/utils/empty-messages.d.ts +40 -0
  147. package/dist/utils/empty-messages.js +38 -0
  148. package/dist/utils/empty-messages.js.map +1 -0
  149. package/dist/utils/success-messages.cjs +106 -0
  150. package/dist/utils/success-messages.cjs.map +1 -0
  151. package/dist/utils/success-messages.d.cts +58 -0
  152. package/dist/utils/success-messages.d.ts +58 -0
  153. package/dist/utils/success-messages.js +82 -0
  154. package/dist/utils/success-messages.js.map +1 -0
  155. package/package.json +3 -3
  156. package/dist/components/creation-success.cjs +0 -64
  157. package/dist/components/creation-success.cjs.map +0 -1
  158. package/dist/components/creation-success.d.cts +0 -20
  159. package/dist/components/creation-success.d.ts +0 -20
  160. package/dist/components/creation-success.js +0 -30
  161. package/dist/components/creation-success.js.map +0 -1
  162. package/dist/components/transaction-done.cjs +0 -46
  163. package/dist/components/transaction-done.cjs.map +0 -1
  164. package/dist/components/transaction-done.d.cts +0 -18
  165. package/dist/components/transaction-done.d.ts +0 -18
  166. package/dist/components/transaction-done.js +0 -22
  167. package/dist/components/transaction-done.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/launchpad/collection-create-presets.ts"],"sourcesContent":["import { Layers, Ticket, Users } from \"lucide-react\";\nimport type { ElementType } from \"react\";\n\nexport interface CollectionCreateAction {\n href: string;\n label: string;\n}\n\nexport interface CollectionCreatePreset {\n service: \"ip-club\" | \"ip-tickets\" | \"mip-erc1155\" | null;\n icon: ElementType;\n iconClass: string;\n buttonClass: string;\n signedOut: { title: string; description: string };\n shell: { title: string; subtitle: string };\n dialog: { title: string; workingLabel: string; firstStepLabel: string };\n success: { caption: string; fallbackName: string; reward: string; againLabel: string };\n cardFallbackSymbol: string;\n copy: {\n imageHeading: string;\n imageHelp?: string;\n nameLabel: string;\n namePlaceholder: string;\n nameHint: string;\n symbolPlaceholder: string;\n symbolHint: string;\n descriptionPlaceholder: string;\n descriptionHint?: string;\n submit: string;\n footnotes: string[];\n };\n suggestSymbol: boolean;\n registerAfterDeploy: boolean;\n actions: (found: { address: string | null; collectionHref: string | null }) => {\n primary?: CollectionCreateAction;\n secondary?: CollectionCreateAction;\n };\n}\n\nconst FREE = \"Free to publish — protocol fee is zero.\";\n\nexport const CLUB_PRESET: CollectionCreatePreset = {\n service: \"ip-club\",\n icon: Users,\n iconClass: \"text-brand-purple\",\n buttonClass: \"bg-brand-purple\",\n signedOut: { title: \"Secure your account to create a club\", description: \"Create a club, then mint membership cards for your community.\" },\n shell: { title: \"Create Club\", subtitle: \"One club — create membership tiers and mint cards to your community.\" },\n dialog: { title: \"Create club\", workingLabel: \"Creating your club…\", firstStepLabel: \"Prepare metadata\" },\n success: { caption: \"Your club is live\", fallbackName: \"Your club\", reward: \"create_club\", againLabel: \"Create another\" },\n cardFallbackSymbol: \"Club\",\n copy: {\n imageHeading: \"Club image\",\n nameLabel: \"Club name *\",\n namePlaceholder: \"My Club\",\n nameHint: \"Shown in wallets, explorers, and on every membership card.\",\n symbolPlaceholder: \"CLUB\",\n symbolHint: \"Short ticker — 2 to 10 uppercase letters.\",\n descriptionPlaceholder: \"Describe your club — what does membership unlock?\",\n submit: \"Create Club\",\n footnotes: [FREE],\n },\n suggestSymbol: false,\n registerAfterDeploy: false,\n actions: ({ collectionHref }) => ({ primary: collectionHref ? { href: collectionHref, label: \"Create memberships\" } : undefined }),\n};\n\nexport const TICKETS_PRESET: CollectionCreatePreset = {\n service: \"ip-tickets\",\n icon: Ticket,\n iconClass: \"text-teal-500\",\n buttonClass: \"bg-teal-600\",\n signedOut: { title: \"Secure your account to create tickets\", description: \"Create a tickets collection, then mint tickets to your audience.\" },\n shell: { title: \"Create Ticket Collection\", subtitle: \"One collection — create tickets and mint them to your audience.\" },\n dialog: { title: \"Create tickets collection\", workingLabel: \"Creating your collection…\", firstStepLabel: \"Prepare metadata\" },\n success: { caption: \"Your collection is live\", fallbackName: \"Your collection\", reward: \"create_ticket_collection\", againLabel: \"Create another\" },\n cardFallbackSymbol: \"Tickets\",\n copy: {\n imageHeading: \"Collection image\",\n nameLabel: \"Collection name *\",\n namePlaceholder: \"My Tickets\",\n nameHint: \"Shown in wallets, explorers, and on every ticket.\",\n symbolPlaceholder: \"TIX\",\n symbolHint: \"Short ticker — 2 to 10 uppercase letters.\",\n descriptionPlaceholder: \"Describe your tickets — what do they admit or unlock?\",\n submit: \"Create Ticket Collection\",\n footnotes: [FREE],\n },\n suggestSymbol: false,\n registerAfterDeploy: false,\n actions: ({ collectionHref }) => ({ primary: collectionHref ? { href: collectionHref, label: \"Create tickets\" } : undefined }),\n};\n\nexport const EDITIONS_PRESET: CollectionCreatePreset = {\n service: \"mip-erc1155\",\n icon: Layers,\n iconClass: \"text-brand-purple\",\n buttonClass: \"bg-brand-purple\",\n signedOut: { title: \"Secure your account to create a collection\", description: \"Create a collection where each piece can have multiple editions.\" },\n shell: { title: \"Create an Edition Collection\", subtitle: \"Create a collection where each piece can have multiple editions — free to publish, and it's yours.\" },\n dialog: { title: \"Create collection\", workingLabel: \"Creating your collection…\", firstStepLabel: \"Prepare metadata\" },\n success: { caption: \"Your collection is live\", fallbackName: \"Your collection\", reward: \"create_collection\", againLabel: \"Create another\" },\n cardFallbackSymbol: \"Editions\",\n copy: {\n imageHeading: \"Collection image\",\n imageHelp: \"This becomes the cover for your collection.\",\n nameLabel: \"Collection name *\",\n namePlaceholder: \"My Creative Works\",\n nameHint: \"The main title collectors see across the collection page, wallets, and future listings.\",\n symbolPlaceholder: \"MCW\",\n symbolHint: \"Short ticker (2–10 uppercase letters). We suggest one from the collection name.\",\n descriptionPlaceholder: \"Describe your collection and what kind of work it contains…\",\n descriptionHint: \"Use this to explain the creative direction, media type, or audience for the collection.\",\n submit: \"Publish Collection\",\n footnotes: [\n FREE,\n \"Next step: mint pieces into this collection — you set the number of copies for each piece when you mint it, and can add more copies later.\",\n ],\n },\n suggestSymbol: true,\n registerAfterDeploy: true,\n actions: ({ address, collectionHref }) => ({\n primary: address ? { href: `/launchpad/nfteditions/${address}/mint`, label: \"Mint tokens\" } : undefined,\n secondary: collectionHref ? { href: collectionHref, label: \"View collection\" } : undefined,\n }),\n};\n\nexport const SINGLE_PRESET: CollectionCreatePreset = {\n service: null,\n icon: Layers,\n iconClass: \"text-brand-blue\",\n buttonClass: \"bg-brand-blue\",\n signedOut: { title: \"Secure your account to create a collection\", description: \"Set up a collection to mint your work into.\" },\n shell: { title: \"Create a Collection\", subtitle: \"Set up a collection to mint your work into — free to publish, and it's yours.\" },\n dialog: { title: \"Create collection\", workingLabel: \"Creating your collection…\", firstStepLabel: \"Prepare metadata\" },\n success: { caption: \"Your collection is live\", fallbackName: \"Your collection\", reward: \"create_collection\", againLabel: \"Create another\" },\n cardFallbackSymbol: \"Collection\",\n copy: {\n imageHeading: \"Collection image\",\n nameLabel: \"Collection name *\",\n namePlaceholder: \"My Creative Works\",\n nameHint: \"The display name for your collection.\",\n symbolPlaceholder: \"MCW\",\n symbolHint: \"Short ticker (2–10 uppercase letters). Shown in wallets and marketplaces.\",\n descriptionPlaceholder: \"Describe your collection and what kind of work it contains…\",\n submit: \"Create collection\",\n footnotes: [FREE],\n },\n suggestSymbol: false,\n registerAfterDeploy: false,\n actions: ({ collectionHref }) => ({\n primary: { href: \"/launchpad/single-editions\", label: \"Mint an asset\" },\n secondary: collectionHref ? { href: collectionHref, label: \"View collection\" } : undefined,\n }),\n};\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../src/components/launchpad/collection-create-presets.ts"],"sourcesContent":["import { Layers, Ticket, Users } from \"lucide-react\";\nimport type { ElementType } from \"react\";\n\nexport interface CollectionCreateAction {\n href: string;\n label: string;\n}\n\nexport interface CollectionCreatePreset {\n service: \"ip-club\" | \"ip-tickets\" | \"mip-erc1155\" | null;\n icon: ElementType;\n iconClass: string;\n buttonClass: string;\n signedOut: { title: string; description: string };\n shell: { title: string; subtitle: string };\n dialog: { title: string; workingLabel: string; firstStepLabel: string };\n success: { title: string; description: string; fallbackName: string; reward: string; againLabel: string };\n cardFallbackSymbol: string;\n copy: {\n imageHeading: string;\n imageHelp?: string;\n nameLabel: string;\n namePlaceholder: string;\n nameHint: string;\n symbolPlaceholder: string;\n symbolHint: string;\n descriptionPlaceholder: string;\n descriptionHint?: string;\n submit: string;\n footnotes: string[];\n };\n suggestSymbol: boolean;\n registerAfterDeploy: boolean;\n actions: (found: { address: string | null; collectionHref: string | null }) => {\n primary?: CollectionCreateAction;\n secondary?: CollectionCreateAction;\n };\n}\n\nconst FREE = \"Free to publish — protocol fee is zero.\";\n\nexport const CLUB_PRESET: CollectionCreatePreset = {\n service: \"ip-club\",\n icon: Users,\n iconClass: \"text-brand-purple\",\n buttonClass: \"bg-brand-purple\",\n signedOut: { title: \"Secure your account to create a club\", description: \"Create a club, then mint membership cards for your community.\" },\n shell: { title: \"Create Club\", subtitle: \"One club — create membership tiers and mint cards to your community.\" },\n dialog: { title: \"Create club\", workingLabel: \"Creating your club…\", firstStepLabel: \"Prepare metadata\" },\n success: { title: \"Club created\", description: \"Each membership you create is recorded onchain under your wallet.\", fallbackName: \"Your club\", reward: \"create_club\", againLabel: \"Create another\" },\n cardFallbackSymbol: \"Club\",\n copy: {\n imageHeading: \"Club image\",\n nameLabel: \"Club name *\",\n namePlaceholder: \"My Club\",\n nameHint: \"Shown in wallets, explorers, and on every membership card.\",\n symbolPlaceholder: \"CLUB\",\n symbolHint: \"Short ticker — 2 to 10 uppercase letters.\",\n descriptionPlaceholder: \"Describe your club — what does membership unlock?\",\n submit: \"Create Club\",\n footnotes: [FREE],\n },\n suggestSymbol: false,\n registerAfterDeploy: false,\n actions: ({ collectionHref }) => ({ primary: collectionHref ? { href: collectionHref, label: \"Create memberships\" } : undefined }),\n};\n\nexport const TICKETS_PRESET: CollectionCreatePreset = {\n service: \"ip-tickets\",\n icon: Ticket,\n iconClass: \"text-teal-500\",\n buttonClass: \"bg-teal-600\",\n signedOut: { title: \"Secure your account to create tickets\", description: \"Create a tickets collection, then mint tickets to your audience.\" },\n shell: { title: \"Create Ticket Collection\", subtitle: \"One collection — create tickets and mint them to your audience.\" },\n dialog: { title: \"Create tickets collection\", workingLabel: \"Creating your collection…\", firstStepLabel: \"Prepare metadata\" },\n success: { title: \"Ticket collection created\", description: \"Each ticket you mint into it is recorded onchain under your wallet.\", fallbackName: \"Your collection\", reward: \"create_ticket_collection\", againLabel: \"Create another\" },\n cardFallbackSymbol: \"Tickets\",\n copy: {\n imageHeading: \"Collection image\",\n nameLabel: \"Collection name *\",\n namePlaceholder: \"My Tickets\",\n nameHint: \"Shown in wallets, explorers, and on every ticket.\",\n symbolPlaceholder: \"TIX\",\n symbolHint: \"Short ticker — 2 to 10 uppercase letters.\",\n descriptionPlaceholder: \"Describe your tickets — what do they admit or unlock?\",\n submit: \"Create Ticket Collection\",\n footnotes: [FREE],\n },\n suggestSymbol: false,\n registerAfterDeploy: false,\n actions: ({ collectionHref }) => ({ primary: collectionHref ? { href: collectionHref, label: \"Create tickets\" } : undefined }),\n};\n\nexport const EDITIONS_PRESET: CollectionCreatePreset = {\n service: \"mip-erc1155\",\n icon: Layers,\n iconClass: \"text-brand-purple\",\n buttonClass: \"bg-brand-purple\",\n signedOut: { title: \"Secure your account to create a collection\", description: \"Create a collection where each piece can have multiple editions.\" },\n shell: { title: \"Create an Edition Collection\", subtitle: \"Create a collection where each piece can have multiple editions — free to publish, and it's yours.\" },\n dialog: { title: \"Create collection\", workingLabel: \"Creating your collection…\", firstStepLabel: \"Prepare metadata\" },\n success: { title: \"Collection created\", description: \"Each asset you mint into it carries its own license terms.\", fallbackName: \"Your collection\", reward: \"create_collection\", againLabel: \"Create another\" },\n cardFallbackSymbol: \"Editions\",\n copy: {\n imageHeading: \"Collection image\",\n imageHelp: \"This becomes the cover for your collection.\",\n nameLabel: \"Collection name *\",\n namePlaceholder: \"My Creative Works\",\n nameHint: \"The main title collectors see across the collection page, wallets, and future listings.\",\n symbolPlaceholder: \"MCW\",\n symbolHint: \"Short ticker (2–10 uppercase letters). We suggest one from the collection name.\",\n descriptionPlaceholder: \"Describe your collection and what kind of work it contains…\",\n descriptionHint: \"Use this to explain the creative direction, media type, or audience for the collection.\",\n submit: \"Publish Collection\",\n footnotes: [\n FREE,\n \"Next step: mint pieces into this collection — you set the number of copies for each piece when you mint it, and can add more copies later.\",\n ],\n },\n suggestSymbol: true,\n registerAfterDeploy: true,\n actions: ({ address, collectionHref }) => ({\n primary: address ? { href: `/launchpad/nfteditions/${address}/mint`, label: \"Mint tokens\" } : undefined,\n secondary: collectionHref ? { href: collectionHref, label: \"View collection\" } : undefined,\n }),\n};\n\nexport const SINGLE_PRESET: CollectionCreatePreset = {\n service: null,\n icon: Layers,\n iconClass: \"text-brand-blue\",\n buttonClass: \"bg-brand-blue\",\n signedOut: { title: \"Secure your account to create a collection\", description: \"Set up a collection to mint your work into.\" },\n shell: { title: \"Create a Collection\", subtitle: \"Set up a collection to mint your work into — free to publish, and it's yours.\" },\n dialog: { title: \"Create collection\", workingLabel: \"Creating your collection…\", firstStepLabel: \"Prepare metadata\" },\n success: { title: \"Collection created\", description: \"Each asset you mint into it carries its own license terms.\", fallbackName: \"Your collection\", reward: \"create_collection\", againLabel: \"Create another\" },\n cardFallbackSymbol: \"Collection\",\n copy: {\n imageHeading: \"Collection image\",\n nameLabel: \"Collection name *\",\n namePlaceholder: \"My Creative Works\",\n nameHint: \"The display name for your collection.\",\n symbolPlaceholder: \"MCW\",\n symbolHint: \"Short ticker (2–10 uppercase letters). Shown in wallets and marketplaces.\",\n descriptionPlaceholder: \"Describe your collection and what kind of work it contains…\",\n submit: \"Create collection\",\n footnotes: [FREE],\n },\n suggestSymbol: false,\n registerAfterDeploy: false,\n actions: ({ collectionHref }) => {\n const mint = { href: \"/launchpad/single-editions\", label: \"Mint an asset\" };\n return collectionHref ? { primary: { href: collectionHref, label: \"View collection\" }, secondary: mint } : { primary: mint };\n },\n};\n"],"mappings":"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","names":[]}
@@ -23,7 +23,8 @@ interface CollectionCreatePreset {
23
23
  firstStepLabel: string;
24
24
  };
25
25
  success: {
26
- caption: string;
26
+ title: string;
27
+ description: string;
27
28
  fallbackName: string;
28
29
  reward: string;
29
30
  againLabel: string;
@@ -23,7 +23,8 @@ interface CollectionCreatePreset {
23
23
  firstStepLabel: string;
24
24
  };
25
25
  success: {
26
- caption: string;
26
+ title: string;
27
+ description: string;
27
28
  fallbackName: string;
28
29
  reward: string;
29
30
  againLabel: string;
@@ -8,7 +8,7 @@ const CLUB_PRESET = {
8
8
  signedOut: { title: "Secure your account to create a club", description: "Create a club, then mint membership cards for your community." },
9
9
  shell: { title: "Create Club", subtitle: "One club \u2014 create membership tiers and mint cards to your community." },
10
10
  dialog: { title: "Create club", workingLabel: "Creating your club\u2026", firstStepLabel: "Prepare metadata" },
11
- success: { caption: "Your club is live", fallbackName: "Your club", reward: "create_club", againLabel: "Create another" },
11
+ success: { title: "Club created", description: "Each membership you create is recorded onchain under your wallet.", fallbackName: "Your club", reward: "create_club", againLabel: "Create another" },
12
12
  cardFallbackSymbol: "Club",
13
13
  copy: {
14
14
  imageHeading: "Club image",
@@ -33,7 +33,7 @@ const TICKETS_PRESET = {
33
33
  signedOut: { title: "Secure your account to create tickets", description: "Create a tickets collection, then mint tickets to your audience." },
34
34
  shell: { title: "Create Ticket Collection", subtitle: "One collection \u2014 create tickets and mint them to your audience." },
35
35
  dialog: { title: "Create tickets collection", workingLabel: "Creating your collection\u2026", firstStepLabel: "Prepare metadata" },
36
- success: { caption: "Your collection is live", fallbackName: "Your collection", reward: "create_ticket_collection", againLabel: "Create another" },
36
+ success: { title: "Ticket collection created", description: "Each ticket you mint into it is recorded onchain under your wallet.", fallbackName: "Your collection", reward: "create_ticket_collection", againLabel: "Create another" },
37
37
  cardFallbackSymbol: "Tickets",
38
38
  copy: {
39
39
  imageHeading: "Collection image",
@@ -58,7 +58,7 @@ const EDITIONS_PRESET = {
58
58
  signedOut: { title: "Secure your account to create a collection", description: "Create a collection where each piece can have multiple editions." },
59
59
  shell: { title: "Create an Edition Collection", subtitle: "Create a collection where each piece can have multiple editions \u2014 free to publish, and it's yours." },
60
60
  dialog: { title: "Create collection", workingLabel: "Creating your collection\u2026", firstStepLabel: "Prepare metadata" },
61
- success: { caption: "Your collection is live", fallbackName: "Your collection", reward: "create_collection", againLabel: "Create another" },
61
+ success: { title: "Collection created", description: "Each asset you mint into it carries its own license terms.", fallbackName: "Your collection", reward: "create_collection", againLabel: "Create another" },
62
62
  cardFallbackSymbol: "Editions",
63
63
  copy: {
64
64
  imageHeading: "Collection image",
@@ -91,7 +91,7 @@ const SINGLE_PRESET = {
91
91
  signedOut: { title: "Secure your account to create a collection", description: "Set up a collection to mint your work into." },
92
92
  shell: { title: "Create a Collection", subtitle: "Set up a collection to mint your work into \u2014 free to publish, and it's yours." },
93
93
  dialog: { title: "Create collection", workingLabel: "Creating your collection\u2026", firstStepLabel: "Prepare metadata" },
94
- success: { caption: "Your collection is live", fallbackName: "Your collection", reward: "create_collection", againLabel: "Create another" },
94
+ success: { title: "Collection created", description: "Each asset you mint into it carries its own license terms.", fallbackName: "Your collection", reward: "create_collection", againLabel: "Create another" },
95
95
  cardFallbackSymbol: "Collection",
96
96
  copy: {
97
97
  imageHeading: "Collection image",
@@ -106,10 +106,10 @@ const SINGLE_PRESET = {
106
106
  },
107
107
  suggestSymbol: false,
108
108
  registerAfterDeploy: false,
109
- actions: ({ collectionHref }) => ({
110
- primary: { href: "/launchpad/single-editions", label: "Mint an asset" },
111
- secondary: collectionHref ? { href: collectionHref, label: "View collection" } : void 0
112
- })
109
+ actions: ({ collectionHref }) => {
110
+ const mint = { href: "/launchpad/single-editions", label: "Mint an asset" };
111
+ return collectionHref ? { primary: { href: collectionHref, label: "View collection" }, secondary: mint } : { primary: mint };
112
+ }
113
113
  };
114
114
  export {
115
115
  CLUB_PRESET,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/launchpad/collection-create-presets.ts"],"sourcesContent":["import { Layers, Ticket, Users } from \"lucide-react\";\nimport type { ElementType } from \"react\";\n\nexport interface CollectionCreateAction {\n href: string;\n label: string;\n}\n\nexport interface CollectionCreatePreset {\n service: \"ip-club\" | \"ip-tickets\" | \"mip-erc1155\" | null;\n icon: ElementType;\n iconClass: string;\n buttonClass: string;\n signedOut: { title: string; description: string };\n shell: { title: string; subtitle: string };\n dialog: { title: string; workingLabel: string; firstStepLabel: string };\n success: { caption: string; fallbackName: string; reward: string; againLabel: string };\n cardFallbackSymbol: string;\n copy: {\n imageHeading: string;\n imageHelp?: string;\n nameLabel: string;\n namePlaceholder: string;\n nameHint: string;\n symbolPlaceholder: string;\n symbolHint: string;\n descriptionPlaceholder: string;\n descriptionHint?: string;\n submit: string;\n footnotes: string[];\n };\n suggestSymbol: boolean;\n registerAfterDeploy: boolean;\n actions: (found: { address: string | null; collectionHref: string | null }) => {\n primary?: CollectionCreateAction;\n secondary?: CollectionCreateAction;\n };\n}\n\nconst FREE = \"Free to publish — protocol fee is zero.\";\n\nexport const CLUB_PRESET: CollectionCreatePreset = {\n service: \"ip-club\",\n icon: Users,\n iconClass: \"text-brand-purple\",\n buttonClass: \"bg-brand-purple\",\n signedOut: { title: \"Secure your account to create a club\", description: \"Create a club, then mint membership cards for your community.\" },\n shell: { title: \"Create Club\", subtitle: \"One club — create membership tiers and mint cards to your community.\" },\n dialog: { title: \"Create club\", workingLabel: \"Creating your club…\", firstStepLabel: \"Prepare metadata\" },\n success: { caption: \"Your club is live\", fallbackName: \"Your club\", reward: \"create_club\", againLabel: \"Create another\" },\n cardFallbackSymbol: \"Club\",\n copy: {\n imageHeading: \"Club image\",\n nameLabel: \"Club name *\",\n namePlaceholder: \"My Club\",\n nameHint: \"Shown in wallets, explorers, and on every membership card.\",\n symbolPlaceholder: \"CLUB\",\n symbolHint: \"Short ticker — 2 to 10 uppercase letters.\",\n descriptionPlaceholder: \"Describe your club — what does membership unlock?\",\n submit: \"Create Club\",\n footnotes: [FREE],\n },\n suggestSymbol: false,\n registerAfterDeploy: false,\n actions: ({ collectionHref }) => ({ primary: collectionHref ? { href: collectionHref, label: \"Create memberships\" } : undefined }),\n};\n\nexport const TICKETS_PRESET: CollectionCreatePreset = {\n service: \"ip-tickets\",\n icon: Ticket,\n iconClass: \"text-teal-500\",\n buttonClass: \"bg-teal-600\",\n signedOut: { title: \"Secure your account to create tickets\", description: \"Create a tickets collection, then mint tickets to your audience.\" },\n shell: { title: \"Create Ticket Collection\", subtitle: \"One collection — create tickets and mint them to your audience.\" },\n dialog: { title: \"Create tickets collection\", workingLabel: \"Creating your collection…\", firstStepLabel: \"Prepare metadata\" },\n success: { caption: \"Your collection is live\", fallbackName: \"Your collection\", reward: \"create_ticket_collection\", againLabel: \"Create another\" },\n cardFallbackSymbol: \"Tickets\",\n copy: {\n imageHeading: \"Collection image\",\n nameLabel: \"Collection name *\",\n namePlaceholder: \"My Tickets\",\n nameHint: \"Shown in wallets, explorers, and on every ticket.\",\n symbolPlaceholder: \"TIX\",\n symbolHint: \"Short ticker — 2 to 10 uppercase letters.\",\n descriptionPlaceholder: \"Describe your tickets — what do they admit or unlock?\",\n submit: \"Create Ticket Collection\",\n footnotes: [FREE],\n },\n suggestSymbol: false,\n registerAfterDeploy: false,\n actions: ({ collectionHref }) => ({ primary: collectionHref ? { href: collectionHref, label: \"Create tickets\" } : undefined }),\n};\n\nexport const EDITIONS_PRESET: CollectionCreatePreset = {\n service: \"mip-erc1155\",\n icon: Layers,\n iconClass: \"text-brand-purple\",\n buttonClass: \"bg-brand-purple\",\n signedOut: { title: \"Secure your account to create a collection\", description: \"Create a collection where each piece can have multiple editions.\" },\n shell: { title: \"Create an Edition Collection\", subtitle: \"Create a collection where each piece can have multiple editions — free to publish, and it's yours.\" },\n dialog: { title: \"Create collection\", workingLabel: \"Creating your collection…\", firstStepLabel: \"Prepare metadata\" },\n success: { caption: \"Your collection is live\", fallbackName: \"Your collection\", reward: \"create_collection\", againLabel: \"Create another\" },\n cardFallbackSymbol: \"Editions\",\n copy: {\n imageHeading: \"Collection image\",\n imageHelp: \"This becomes the cover for your collection.\",\n nameLabel: \"Collection name *\",\n namePlaceholder: \"My Creative Works\",\n nameHint: \"The main title collectors see across the collection page, wallets, and future listings.\",\n symbolPlaceholder: \"MCW\",\n symbolHint: \"Short ticker (2–10 uppercase letters). We suggest one from the collection name.\",\n descriptionPlaceholder: \"Describe your collection and what kind of work it contains…\",\n descriptionHint: \"Use this to explain the creative direction, media type, or audience for the collection.\",\n submit: \"Publish Collection\",\n footnotes: [\n FREE,\n \"Next step: mint pieces into this collection — you set the number of copies for each piece when you mint it, and can add more copies later.\",\n ],\n },\n suggestSymbol: true,\n registerAfterDeploy: true,\n actions: ({ address, collectionHref }) => ({\n primary: address ? { href: `/launchpad/nfteditions/${address}/mint`, label: \"Mint tokens\" } : undefined,\n secondary: collectionHref ? { href: collectionHref, label: \"View collection\" } : undefined,\n }),\n};\n\nexport const SINGLE_PRESET: CollectionCreatePreset = {\n service: null,\n icon: Layers,\n iconClass: \"text-brand-blue\",\n buttonClass: \"bg-brand-blue\",\n signedOut: { title: \"Secure your account to create a collection\", description: \"Set up a collection to mint your work into.\" },\n shell: { title: \"Create a Collection\", subtitle: \"Set up a collection to mint your work into — free to publish, and it's yours.\" },\n dialog: { title: \"Create collection\", workingLabel: \"Creating your collection…\", firstStepLabel: \"Prepare metadata\" },\n success: { caption: \"Your collection is live\", fallbackName: \"Your collection\", reward: \"create_collection\", againLabel: \"Create another\" },\n cardFallbackSymbol: \"Collection\",\n copy: {\n imageHeading: \"Collection image\",\n nameLabel: \"Collection name *\",\n namePlaceholder: \"My Creative Works\",\n nameHint: \"The display name for your collection.\",\n symbolPlaceholder: \"MCW\",\n symbolHint: \"Short ticker (2–10 uppercase letters). Shown in wallets and marketplaces.\",\n descriptionPlaceholder: \"Describe your collection and what kind of work it contains…\",\n submit: \"Create collection\",\n footnotes: [FREE],\n },\n suggestSymbol: false,\n registerAfterDeploy: false,\n actions: ({ collectionHref }) => ({\n primary: { href: \"/launchpad/single-editions\", label: \"Mint an asset\" },\n secondary: collectionHref ? { href: collectionHref, label: \"View collection\" } : undefined,\n }),\n};\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../src/components/launchpad/collection-create-presets.ts"],"sourcesContent":["import { Layers, Ticket, Users } from \"lucide-react\";\nimport type { ElementType } from \"react\";\n\nexport interface CollectionCreateAction {\n href: string;\n label: string;\n}\n\nexport interface CollectionCreatePreset {\n service: \"ip-club\" | \"ip-tickets\" | \"mip-erc1155\" | null;\n icon: ElementType;\n iconClass: string;\n buttonClass: string;\n signedOut: { title: string; description: string };\n shell: { title: string; subtitle: string };\n dialog: { title: string; workingLabel: string; firstStepLabel: string };\n success: { title: string; description: string; fallbackName: string; reward: string; againLabel: string };\n cardFallbackSymbol: string;\n copy: {\n imageHeading: string;\n imageHelp?: string;\n nameLabel: string;\n namePlaceholder: string;\n nameHint: string;\n symbolPlaceholder: string;\n symbolHint: string;\n descriptionPlaceholder: string;\n descriptionHint?: string;\n submit: string;\n footnotes: string[];\n };\n suggestSymbol: boolean;\n registerAfterDeploy: boolean;\n actions: (found: { address: string | null; collectionHref: string | null }) => {\n primary?: CollectionCreateAction;\n secondary?: CollectionCreateAction;\n };\n}\n\nconst FREE = \"Free to publish — protocol fee is zero.\";\n\nexport const CLUB_PRESET: CollectionCreatePreset = {\n service: \"ip-club\",\n icon: Users,\n iconClass: \"text-brand-purple\",\n buttonClass: \"bg-brand-purple\",\n signedOut: { title: \"Secure your account to create a club\", description: \"Create a club, then mint membership cards for your community.\" },\n shell: { title: \"Create Club\", subtitle: \"One club — create membership tiers and mint cards to your community.\" },\n dialog: { title: \"Create club\", workingLabel: \"Creating your club…\", firstStepLabel: \"Prepare metadata\" },\n success: { title: \"Club created\", description: \"Each membership you create is recorded onchain under your wallet.\", fallbackName: \"Your club\", reward: \"create_club\", againLabel: \"Create another\" },\n cardFallbackSymbol: \"Club\",\n copy: {\n imageHeading: \"Club image\",\n nameLabel: \"Club name *\",\n namePlaceholder: \"My Club\",\n nameHint: \"Shown in wallets, explorers, and on every membership card.\",\n symbolPlaceholder: \"CLUB\",\n symbolHint: \"Short ticker — 2 to 10 uppercase letters.\",\n descriptionPlaceholder: \"Describe your club — what does membership unlock?\",\n submit: \"Create Club\",\n footnotes: [FREE],\n },\n suggestSymbol: false,\n registerAfterDeploy: false,\n actions: ({ collectionHref }) => ({ primary: collectionHref ? { href: collectionHref, label: \"Create memberships\" } : undefined }),\n};\n\nexport const TICKETS_PRESET: CollectionCreatePreset = {\n service: \"ip-tickets\",\n icon: Ticket,\n iconClass: \"text-teal-500\",\n buttonClass: \"bg-teal-600\",\n signedOut: { title: \"Secure your account to create tickets\", description: \"Create a tickets collection, then mint tickets to your audience.\" },\n shell: { title: \"Create Ticket Collection\", subtitle: \"One collection — create tickets and mint them to your audience.\" },\n dialog: { title: \"Create tickets collection\", workingLabel: \"Creating your collection…\", firstStepLabel: \"Prepare metadata\" },\n success: { title: \"Ticket collection created\", description: \"Each ticket you mint into it is recorded onchain under your wallet.\", fallbackName: \"Your collection\", reward: \"create_ticket_collection\", againLabel: \"Create another\" },\n cardFallbackSymbol: \"Tickets\",\n copy: {\n imageHeading: \"Collection image\",\n nameLabel: \"Collection name *\",\n namePlaceholder: \"My Tickets\",\n nameHint: \"Shown in wallets, explorers, and on every ticket.\",\n symbolPlaceholder: \"TIX\",\n symbolHint: \"Short ticker — 2 to 10 uppercase letters.\",\n descriptionPlaceholder: \"Describe your tickets — what do they admit or unlock?\",\n submit: \"Create Ticket Collection\",\n footnotes: [FREE],\n },\n suggestSymbol: false,\n registerAfterDeploy: false,\n actions: ({ collectionHref }) => ({ primary: collectionHref ? { href: collectionHref, label: \"Create tickets\" } : undefined }),\n};\n\nexport const EDITIONS_PRESET: CollectionCreatePreset = {\n service: \"mip-erc1155\",\n icon: Layers,\n iconClass: \"text-brand-purple\",\n buttonClass: \"bg-brand-purple\",\n signedOut: { title: \"Secure your account to create a collection\", description: \"Create a collection where each piece can have multiple editions.\" },\n shell: { title: \"Create an Edition Collection\", subtitle: \"Create a collection where each piece can have multiple editions — free to publish, and it's yours.\" },\n dialog: { title: \"Create collection\", workingLabel: \"Creating your collection…\", firstStepLabel: \"Prepare metadata\" },\n success: { title: \"Collection created\", description: \"Each asset you mint into it carries its own license terms.\", fallbackName: \"Your collection\", reward: \"create_collection\", againLabel: \"Create another\" },\n cardFallbackSymbol: \"Editions\",\n copy: {\n imageHeading: \"Collection image\",\n imageHelp: \"This becomes the cover for your collection.\",\n nameLabel: \"Collection name *\",\n namePlaceholder: \"My Creative Works\",\n nameHint: \"The main title collectors see across the collection page, wallets, and future listings.\",\n symbolPlaceholder: \"MCW\",\n symbolHint: \"Short ticker (2–10 uppercase letters). We suggest one from the collection name.\",\n descriptionPlaceholder: \"Describe your collection and what kind of work it contains…\",\n descriptionHint: \"Use this to explain the creative direction, media type, or audience for the collection.\",\n submit: \"Publish Collection\",\n footnotes: [\n FREE,\n \"Next step: mint pieces into this collection — you set the number of copies for each piece when you mint it, and can add more copies later.\",\n ],\n },\n suggestSymbol: true,\n registerAfterDeploy: true,\n actions: ({ address, collectionHref }) => ({\n primary: address ? { href: `/launchpad/nfteditions/${address}/mint`, label: \"Mint tokens\" } : undefined,\n secondary: collectionHref ? { href: collectionHref, label: \"View collection\" } : undefined,\n }),\n};\n\nexport const SINGLE_PRESET: CollectionCreatePreset = {\n service: null,\n icon: Layers,\n iconClass: \"text-brand-blue\",\n buttonClass: \"bg-brand-blue\",\n signedOut: { title: \"Secure your account to create a collection\", description: \"Set up a collection to mint your work into.\" },\n shell: { title: \"Create a Collection\", subtitle: \"Set up a collection to mint your work into — free to publish, and it's yours.\" },\n dialog: { title: \"Create collection\", workingLabel: \"Creating your collection…\", firstStepLabel: \"Prepare metadata\" },\n success: { title: \"Collection created\", description: \"Each asset you mint into it carries its own license terms.\", fallbackName: \"Your collection\", reward: \"create_collection\", againLabel: \"Create another\" },\n cardFallbackSymbol: \"Collection\",\n copy: {\n imageHeading: \"Collection image\",\n nameLabel: \"Collection name *\",\n namePlaceholder: \"My Creative Works\",\n nameHint: \"The display name for your collection.\",\n symbolPlaceholder: \"MCW\",\n symbolHint: \"Short ticker (2–10 uppercase letters). Shown in wallets and marketplaces.\",\n descriptionPlaceholder: \"Describe your collection and what kind of work it contains…\",\n submit: \"Create collection\",\n footnotes: [FREE],\n },\n suggestSymbol: false,\n registerAfterDeploy: false,\n actions: ({ collectionHref }) => {\n const mint = { href: \"/launchpad/single-editions\", label: \"Mint an asset\" };\n return collectionHref ? { primary: { href: collectionHref, label: \"View collection\" }, secondary: mint } : { primary: mint };\n },\n};\n"],"mappings":"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","names":[]}
@@ -43,7 +43,7 @@ var import_link = __toESM(require("../link.js"), 1);
43
43
  var import_button = require("../button.js");
44
44
  var import_form = require("../form.js");
45
45
  var import_claim_route_shell = require("../claim-route-shell.js");
46
- var import_creation_success = require("../creation-success.js");
46
+ var import_transaction_success = require("../transaction-success.js");
47
47
  var import_medialane_collection_card = require("../medialane-collection-card.js");
48
48
  var import_transaction_dialog = require("../transaction-dialog.js");
49
49
  var import_wallet_required = require("../wallet-required.js");
@@ -221,15 +221,17 @@ function EditionMint({ contract: rawContract, aside }) {
221
221
  }
222
222
  ),
223
223
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_transaction_dialog.TransactionDialog, { tx, title: "Mint an edition", workingLabel: "Minting your edition\u2026", firstStepLabel: "Upload metadata", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
224
- import_creation_success.CreationSuccess,
224
+ import_transaction_success.TransactionSuccess,
225
225
  {
226
226
  name: form.getValues("name") || "Your token",
227
227
  image: imagePreview,
228
- caption: "Your edition is live",
229
- primary: mintedTokenId ? { href: (0, import_sdk.assetHref)("STARKNET", collectionAddress, mintedTokenId), label: "View asset" } : { href: "/portfolio/assets", label: "View portfolio" },
230
- secondary: mintedTokenId ? { href: "/portfolio/assets", label: "View portfolio" } : void 0,
231
- onAgain: handleAgain,
232
- againLabel: "Mint another",
228
+ title: "Editions minted",
229
+ description: "Each copy is recorded onchain with the license terms in its metadata.",
230
+ actions: [
231
+ ...mintedTokenId ? [{ href: (0, import_sdk.assetHref)("STARKNET", collectionAddress, mintedTokenId), label: "View asset" }] : [],
232
+ { href: "/portfolio/assets", label: "View portfolio" },
233
+ { label: "Mint another", onClick: handleAgain }
234
+ ],
233
235
  children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_reward_earned.RewardEarned, { actionType: "mint_asset" })
234
236
  }
235
237
  ) })
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/launchpad/edition-mint.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useRef, useState, type ReactNode } from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport { zodResolver } from \"@hookform/resolvers/zod\";\nimport { Sparkles } from \"lucide-react\";\nimport { assetHref, normalizeAddress, profileHref } from \"@medialane/sdk\";\nimport { mintedTokenIdFromReceipt } from \"@medialane/sdk/starknet\";\nimport Link from \"../link.js\";\nimport { Button } from \"../button.js\";\nimport { Form } from \"../form.js\";\nimport { ClaimRouteShell } from \"../claim-route-shell.js\";\nimport { CreationSuccess } from \"../creation-success.js\";\nimport { MedialaneCollectionCard } from \"../medialane-collection-card.js\";\nimport { TransactionDialog } from \"../transaction-dialog.js\";\nimport { WalletRequired } from \"../wallet-required.js\";\nimport { useMedialaneApp } from \"../medialane-app.js\";\nimport { RewardEarned } from \"../rewards/reward-earned.js\";\nimport type { MetadataField } from \"../ip-type-fields.js\";\nimport { EditionMintFields } from \"./edition-mint-fields.js\";\nimport { editionMintSchema, type EditionMintValues } from \"./edition-mint-schema.js\";\nimport { runIntentCalls } from \"../../utils/run-intent-calls.js\";\nimport { pinAssetMetadata, uploadFileToIpfs } from \"../../utils/ipfs-upload.js\";\nimport { useTransaction } from \"../../utils/use-transaction.js\";\nimport { useLaunchpadImageUpload } from \"../../utils/use-launchpad-image-upload.js\";\nimport { invalidatePortfolioCache } from \"../../utils/portfolio-cache.js\";\n\nconst DEFAULTS: EditionMintValues = {\n value: \"1\",\n recipient: \"\",\n name: \"\",\n description: \"\",\n external_url: \"\",\n ipType: \"NFT\",\n licenseType: \"CC BY-SA\",\n commercialUse: \"Yes\",\n derivatives: \"Share-Alike\",\n attribution: \"Required\",\n geographicScope: \"Worldwide\",\n aiPolicy: \"Not Allowed\",\n royalty: 0,\n};\n\nexport function EditionMint({ contract: rawContract, aside }: { contract: string; aside?: ReactNode }) {\n const app = useMedialaneApp();\n const walletAddress = app.walletAddress;\n const collectionAddress = normalizeAddress(\"STARKNET\", rawContract);\n const tx = useTransaction();\n const upload = useLaunchpadImageUpload({ successMessage: \"Image uploaded to IPFS\", failureMessage: \"Image upload failed\" });\n const { imagePreview, imageUri, imageUploading, uploadError, uploadSuccess, fileInputRef, handleImageSelect, clearImage } = upload;\n const [ownerCheck, setOwnerCheck] = useState<\"loading\" | \"ok\" | \"denied\">(\"loading\");\n const [formError, setFormError] = useState<string | null>(null);\n const [metadataResetKey, setMetadataResetKey] = useState(0);\n const [autoExternalUrl, setAutoExternalUrl] = useState(\"\");\n const metadataFieldsRef = useRef<MetadataField[]>([]);\n\n const form = useForm<EditionMintValues>({ resolver: zodResolver(editionMintSchema), defaultValues: DEFAULTS });\n\n useEffect(() => {\n if (walletAddress && !form.getValues(\"recipient\")) form.setValue(\"recipient\", walletAddress);\n }, [walletAddress, form]);\n\n useEffect(() => {\n const suggested = `https://medialane.io/collections/${collectionAddress}`;\n const current = form.getValues(\"external_url\");\n if (!current || current === autoExternalUrl) {\n form.setValue(\"external_url\", suggested, { shouldDirty: false });\n setAutoExternalUrl(suggested);\n }\n }, [autoExternalUrl, collectionAddress, form]);\n\n useEffect(() => {\n if (!walletAddress) return;\n app\n .getClient()\n .api.collections.get(collectionAddress)\n .then((data) => {\n const owner = data.owner ? normalizeAddress(\"STARKNET\", data.owner) : null;\n setOwnerCheck(owner === normalizeAddress(\"STARKNET\", walletAddress) ? \"ok\" : \"denied\");\n })\n .catch(() => setOwnerCheck(\"denied\"));\n }, [app, walletAddress, collectionAddress]);\n\n const uploadDocument = async (file: File) => {\n await app.ensureSignedIn?.();\n return (await uploadFileToIpfs(app.getClient().api, file, \"document\")).uri;\n };\n\n const handleAgain = () => {\n tx.reset();\n metadataFieldsRef.current = [];\n setMetadataResetKey((key) => key + 1);\n setAutoExternalUrl(\"\");\n clearImage();\n form.reset({ ...DEFAULTS, recipient: walletAddress ?? \"\" });\n };\n\n const onSubmit = (values: EditionMintValues) => {\n if (!imageUri) {\n setFormError(\"Upload an image before minting.\");\n return;\n }\n if (!walletAddress) return;\n setFormError(null);\n void tx.run(async (signer) => {\n await app.ensureSignedIn?.();\n const api = app.getClient().api;\n const pinned = await pinAssetMetadata(api, {\n name: values.name,\n description: values.description ?? \"\",\n imageUri,\n externalUrl: values.external_url,\n ipType: values.ipType,\n licenseType: values.licenseType,\n commercialUse: values.commercialUse,\n derivatives: values.derivatives,\n attribution: values.attribution,\n geographicScope: values.geographicScope,\n aiPolicy: values.aiPolicy,\n royalty: String(values.royalty),\n creator: walletAddress,\n templateTraits: metadataFieldsRef.current.filter((f) => f.traitType.trim() && f.value.trim()).map((f) => ({ traitType: f.traitType.trim(), value: f.value.trim() })),\n });\n await runIntentCalls(signer, () =>\n api.intents.create(\"mint\", {\n owner: walletAddress,\n recipient: values.recipient,\n collectionContract: collectionAddress,\n tokenUri: pinned.uri,\n value: values.value,\n royaltyBps: 0,\n }),\n );\n invalidatePortfolioCache(walletAddress);\n });\n };\n\n const mintedTokenId = tx.receipt ? mintedTokenIdFromReceipt(tx.receipt, collectionAddress) : null;\n\n return (\n <WalletRequired\n icon={Sparkles}\n iconClassName=\"text-brand-purple\"\n title=\"Secure your account to create\"\n description=\"Secure your account to mint tokens into a multi-editions collection.\"\n >\n {ownerCheck === \"denied\" ? (\n <div className=\"max-w-lg mx-auto px-4 pt-24 pb-8 text-center space-y-4\">\n <Sparkles className=\"h-10 w-10 text-muted-foreground mx-auto\" />\n <h1 className=\"text-2xl font-bold\">Not the owner</h1>\n <p className=\"text-muted-foreground\">Only the collection owner can mint tokens. Connect the wallet that deployed this collection.</p>\n <Button asChild variant=\"outline\">\n <Link href=\"/launchpad\">Back to Launchpad</Link>\n </Button>\n </div>\n ) : (\n <>\n <ClaimRouteShell\n icon={<Sparkles className=\"h-4 w-4 text-white\" />}\n title=\"Mint an Edition\"\n subtitle=\"Add a new piece to your collection — its details and authorship are saved permanently. Free to mint, and it's yours.\"\n headerAccessory={\n <div className=\"flex items-center gap-2 rounded-lg border border-border bg-background/60 px-3 py-2 max-w-full\">\n <span className=\"tabular-nums text-xs text-foreground/80 truncate\">Collection: {collectionAddress}</span>\n </div>\n }\n aside={\n <>\n <MedialaneCollectionCard\n image={imagePreview}\n name={form.watch(\"name\")}\n collection=\"Edition\"\n serial={Number(form.watch(\"value\")) > 1 ? `${form.watch(\"value\")} editions` : undefined}\n creator={walletAddress ? `${walletAddress.slice(0, 6)}…${walletAddress.slice(-4)}` : undefined}\n creatorHref={walletAddress ? profileHref({ address: walletAddress }) : undefined}\n />\n {aside}\n </>\n }\n >\n <Form {...form}>\n <form onSubmit={form.handleSubmit(onSubmit)} className=\"space-y-5\">\n <EditionMintFields\n form={form}\n imagePreview={imagePreview}\n imageUri={imageUri}\n imageUploading={imageUploading}\n mintDisabled={imageUploading || tx.phase !== \"idle\"}\n fileInputRef={fileInputRef}\n onImageSelect={handleImageSelect}\n onClearImage={clearImage}\n metadataResetKey={metadataResetKey}\n onMetadataFieldsChange={(fields) => { metadataFieldsRef.current = fields; }}\n uploadDocument={uploadDocument}\n />\n {uploadError && <p className=\"text-xs text-destructive mt-1\">{uploadError}</p>}\n {uploadSuccess && <p className=\"text-xs text-emerald-500 mt-1\">✓ {uploadSuccess}</p>}\n {formError && <p className=\"text-xs text-destructive mt-1\">{formError}</p>}\n </form>\n </Form>\n </ClaimRouteShell>\n\n <TransactionDialog tx={tx} title=\"Mint an edition\" workingLabel=\"Minting your edition…\" firstStepLabel=\"Upload metadata\">\n <CreationSuccess\n name={form.getValues(\"name\") || \"Your token\"}\n image={imagePreview}\n caption=\"Your edition is live\"\n primary={mintedTokenId ? { href: assetHref(\"STARKNET\", collectionAddress, mintedTokenId), label: \"View asset\" } : { href: \"/portfolio/assets\", label: \"View portfolio\" }}\n secondary={mintedTokenId ? { href: \"/portfolio/assets\", label: \"View portfolio\" } : undefined}\n onAgain={handleAgain}\n againLabel=\"Mint another\"\n >\n <RewardEarned actionType=\"mint_asset\" />\n </CreationSuccess>\n </TransactionDialog>\n </>\n )}\n </WalletRequired>\n );\n}\n"],"mappings":"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","names":["Link"]}
1
+ {"version":3,"sources":["../../../src/components/launchpad/edition-mint.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useRef, useState, type ReactNode } from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport { zodResolver } from \"@hookform/resolvers/zod\";\nimport { Sparkles } from \"lucide-react\";\nimport { assetHref, normalizeAddress, profileHref } from \"@medialane/sdk\";\nimport { mintedTokenIdFromReceipt } from \"@medialane/sdk/starknet\";\nimport Link from \"../link.js\";\nimport { Button } from \"../button.js\";\nimport { Form } from \"../form.js\";\nimport { ClaimRouteShell } from \"../claim-route-shell.js\";\nimport { TransactionSuccess } from \"../transaction-success.js\";\nimport { MedialaneCollectionCard } from \"../medialane-collection-card.js\";\nimport { TransactionDialog } from \"../transaction-dialog.js\";\nimport { WalletRequired } from \"../wallet-required.js\";\nimport { useMedialaneApp } from \"../medialane-app.js\";\nimport { RewardEarned } from \"../rewards/reward-earned.js\";\nimport type { MetadataField } from \"../ip-type-fields.js\";\nimport { EditionMintFields } from \"./edition-mint-fields.js\";\nimport { editionMintSchema, type EditionMintValues } from \"./edition-mint-schema.js\";\nimport { runIntentCalls } from \"../../utils/run-intent-calls.js\";\nimport { pinAssetMetadata, uploadFileToIpfs } from \"../../utils/ipfs-upload.js\";\nimport { useTransaction } from \"../../utils/use-transaction.js\";\nimport { useLaunchpadImageUpload } from \"../../utils/use-launchpad-image-upload.js\";\nimport { invalidatePortfolioCache } from \"../../utils/portfolio-cache.js\";\n\nconst DEFAULTS: EditionMintValues = {\n value: \"1\",\n recipient: \"\",\n name: \"\",\n description: \"\",\n external_url: \"\",\n ipType: \"NFT\",\n licenseType: \"CC BY-SA\",\n commercialUse: \"Yes\",\n derivatives: \"Share-Alike\",\n attribution: \"Required\",\n geographicScope: \"Worldwide\",\n aiPolicy: \"Not Allowed\",\n royalty: 0,\n};\n\nexport function EditionMint({ contract: rawContract, aside }: { contract: string; aside?: ReactNode }) {\n const app = useMedialaneApp();\n const walletAddress = app.walletAddress;\n const collectionAddress = normalizeAddress(\"STARKNET\", rawContract);\n const tx = useTransaction();\n const upload = useLaunchpadImageUpload({ successMessage: \"Image uploaded to IPFS\", failureMessage: \"Image upload failed\" });\n const { imagePreview, imageUri, imageUploading, uploadError, uploadSuccess, fileInputRef, handleImageSelect, clearImage } = upload;\n const [ownerCheck, setOwnerCheck] = useState<\"loading\" | \"ok\" | \"denied\">(\"loading\");\n const [formError, setFormError] = useState<string | null>(null);\n const [metadataResetKey, setMetadataResetKey] = useState(0);\n const [autoExternalUrl, setAutoExternalUrl] = useState(\"\");\n const metadataFieldsRef = useRef<MetadataField[]>([]);\n\n const form = useForm<EditionMintValues>({ resolver: zodResolver(editionMintSchema), defaultValues: DEFAULTS });\n\n useEffect(() => {\n if (walletAddress && !form.getValues(\"recipient\")) form.setValue(\"recipient\", walletAddress);\n }, [walletAddress, form]);\n\n useEffect(() => {\n const suggested = `https://medialane.io/collections/${collectionAddress}`;\n const current = form.getValues(\"external_url\");\n if (!current || current === autoExternalUrl) {\n form.setValue(\"external_url\", suggested, { shouldDirty: false });\n setAutoExternalUrl(suggested);\n }\n }, [autoExternalUrl, collectionAddress, form]);\n\n useEffect(() => {\n if (!walletAddress) return;\n app\n .getClient()\n .api.collections.get(collectionAddress)\n .then((data) => {\n const owner = data.owner ? normalizeAddress(\"STARKNET\", data.owner) : null;\n setOwnerCheck(owner === normalizeAddress(\"STARKNET\", walletAddress) ? \"ok\" : \"denied\");\n })\n .catch(() => setOwnerCheck(\"denied\"));\n }, [app, walletAddress, collectionAddress]);\n\n const uploadDocument = async (file: File) => {\n await app.ensureSignedIn?.();\n return (await uploadFileToIpfs(app.getClient().api, file, \"document\")).uri;\n };\n\n const handleAgain = () => {\n tx.reset();\n metadataFieldsRef.current = [];\n setMetadataResetKey((key) => key + 1);\n setAutoExternalUrl(\"\");\n clearImage();\n form.reset({ ...DEFAULTS, recipient: walletAddress ?? \"\" });\n };\n\n const onSubmit = (values: EditionMintValues) => {\n if (!imageUri) {\n setFormError(\"Upload an image before minting.\");\n return;\n }\n if (!walletAddress) return;\n setFormError(null);\n void tx.run(async (signer) => {\n await app.ensureSignedIn?.();\n const api = app.getClient().api;\n const pinned = await pinAssetMetadata(api, {\n name: values.name,\n description: values.description ?? \"\",\n imageUri,\n externalUrl: values.external_url,\n ipType: values.ipType,\n licenseType: values.licenseType,\n commercialUse: values.commercialUse,\n derivatives: values.derivatives,\n attribution: values.attribution,\n geographicScope: values.geographicScope,\n aiPolicy: values.aiPolicy,\n royalty: String(values.royalty),\n creator: walletAddress,\n templateTraits: metadataFieldsRef.current.filter((f) => f.traitType.trim() && f.value.trim()).map((f) => ({ traitType: f.traitType.trim(), value: f.value.trim() })),\n });\n await runIntentCalls(signer, () =>\n api.intents.create(\"mint\", {\n owner: walletAddress,\n recipient: values.recipient,\n collectionContract: collectionAddress,\n tokenUri: pinned.uri,\n value: values.value,\n royaltyBps: 0,\n }),\n );\n invalidatePortfolioCache(walletAddress);\n });\n };\n\n const mintedTokenId = tx.receipt ? mintedTokenIdFromReceipt(tx.receipt, collectionAddress) : null;\n\n return (\n <WalletRequired\n icon={Sparkles}\n iconClassName=\"text-brand-purple\"\n title=\"Secure your account to create\"\n description=\"Secure your account to mint tokens into a multi-editions collection.\"\n >\n {ownerCheck === \"denied\" ? (\n <div className=\"max-w-lg mx-auto px-4 pt-24 pb-8 text-center space-y-4\">\n <Sparkles className=\"h-10 w-10 text-muted-foreground mx-auto\" />\n <h1 className=\"text-2xl font-bold\">Not the owner</h1>\n <p className=\"text-muted-foreground\">Only the collection owner can mint tokens. Connect the wallet that deployed this collection.</p>\n <Button asChild variant=\"outline\">\n <Link href=\"/launchpad\">Back to Launchpad</Link>\n </Button>\n </div>\n ) : (\n <>\n <ClaimRouteShell\n icon={<Sparkles className=\"h-4 w-4 text-white\" />}\n title=\"Mint an Edition\"\n subtitle=\"Add a new piece to your collection — its details and authorship are saved permanently. Free to mint, and it's yours.\"\n headerAccessory={\n <div className=\"flex items-center gap-2 rounded-lg border border-border bg-background/60 px-3 py-2 max-w-full\">\n <span className=\"tabular-nums text-xs text-foreground/80 truncate\">Collection: {collectionAddress}</span>\n </div>\n }\n aside={\n <>\n <MedialaneCollectionCard\n image={imagePreview}\n name={form.watch(\"name\")}\n collection=\"Edition\"\n serial={Number(form.watch(\"value\")) > 1 ? `${form.watch(\"value\")} editions` : undefined}\n creator={walletAddress ? `${walletAddress.slice(0, 6)}…${walletAddress.slice(-4)}` : undefined}\n creatorHref={walletAddress ? profileHref({ address: walletAddress }) : undefined}\n />\n {aside}\n </>\n }\n >\n <Form {...form}>\n <form onSubmit={form.handleSubmit(onSubmit)} className=\"space-y-5\">\n <EditionMintFields\n form={form}\n imagePreview={imagePreview}\n imageUri={imageUri}\n imageUploading={imageUploading}\n mintDisabled={imageUploading || tx.phase !== \"idle\"}\n fileInputRef={fileInputRef}\n onImageSelect={handleImageSelect}\n onClearImage={clearImage}\n metadataResetKey={metadataResetKey}\n onMetadataFieldsChange={(fields) => { metadataFieldsRef.current = fields; }}\n uploadDocument={uploadDocument}\n />\n {uploadError && <p className=\"text-xs text-destructive mt-1\">{uploadError}</p>}\n {uploadSuccess && <p className=\"text-xs text-emerald-500 mt-1\">✓ {uploadSuccess}</p>}\n {formError && <p className=\"text-xs text-destructive mt-1\">{formError}</p>}\n </form>\n </Form>\n </ClaimRouteShell>\n\n <TransactionDialog tx={tx} title=\"Mint an edition\" workingLabel=\"Minting your edition…\" firstStepLabel=\"Upload metadata\">\n <TransactionSuccess\n name={form.getValues(\"name\") || \"Your token\"}\n image={imagePreview}\n title=\"Editions minted\"\n description=\"Each copy is recorded onchain with the license terms in its metadata.\"\n actions={[\n ...(mintedTokenId ? [{ href: assetHref(\"STARKNET\", collectionAddress, mintedTokenId), label: \"View asset\" }] : []),\n { href: \"/portfolio/assets\", label: \"View portfolio\" },\n { label: \"Mint another\", onClick: handleAgain },\n ]}\n >\n <RewardEarned actionType=\"mint_asset\" />\n </TransactionSuccess>\n </TransactionDialog>\n </>\n )}\n </WalletRequired>\n );\n}\n"],"mappings":"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","names":["Link"]}
@@ -10,7 +10,7 @@ import Link from "../link.js";
10
10
  import { Button } from "../button.js";
11
11
  import { Form } from "../form.js";
12
12
  import { ClaimRouteShell } from "../claim-route-shell.js";
13
- import { CreationSuccess } from "../creation-success.js";
13
+ import { TransactionSuccess } from "../transaction-success.js";
14
14
  import { MedialaneCollectionCard } from "../medialane-collection-card.js";
15
15
  import { TransactionDialog } from "../transaction-dialog.js";
16
16
  import { WalletRequired } from "../wallet-required.js";
@@ -188,15 +188,17 @@ function EditionMint({ contract: rawContract, aside }) {
188
188
  }
189
189
  ),
190
190
  /* @__PURE__ */ jsx(TransactionDialog, { tx, title: "Mint an edition", workingLabel: "Minting your edition\u2026", firstStepLabel: "Upload metadata", children: /* @__PURE__ */ jsx(
191
- CreationSuccess,
191
+ TransactionSuccess,
192
192
  {
193
193
  name: form.getValues("name") || "Your token",
194
194
  image: imagePreview,
195
- caption: "Your edition is live",
196
- primary: mintedTokenId ? { href: assetHref("STARKNET", collectionAddress, mintedTokenId), label: "View asset" } : { href: "/portfolio/assets", label: "View portfolio" },
197
- secondary: mintedTokenId ? { href: "/portfolio/assets", label: "View portfolio" } : void 0,
198
- onAgain: handleAgain,
199
- againLabel: "Mint another",
195
+ title: "Editions minted",
196
+ description: "Each copy is recorded onchain with the license terms in its metadata.",
197
+ actions: [
198
+ ...mintedTokenId ? [{ href: assetHref("STARKNET", collectionAddress, mintedTokenId), label: "View asset" }] : [],
199
+ { href: "/portfolio/assets", label: "View portfolio" },
200
+ { label: "Mint another", onClick: handleAgain }
201
+ ],
200
202
  children: /* @__PURE__ */ jsx(RewardEarned, { actionType: "mint_asset" })
201
203
  }
202
204
  ) })
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/launchpad/edition-mint.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useRef, useState, type ReactNode } from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport { zodResolver } from \"@hookform/resolvers/zod\";\nimport { Sparkles } from \"lucide-react\";\nimport { assetHref, normalizeAddress, profileHref } from \"@medialane/sdk\";\nimport { mintedTokenIdFromReceipt } from \"@medialane/sdk/starknet\";\nimport Link from \"../link.js\";\nimport { Button } from \"../button.js\";\nimport { Form } from \"../form.js\";\nimport { ClaimRouteShell } from \"../claim-route-shell.js\";\nimport { CreationSuccess } from \"../creation-success.js\";\nimport { MedialaneCollectionCard } from \"../medialane-collection-card.js\";\nimport { TransactionDialog } from \"../transaction-dialog.js\";\nimport { WalletRequired } from \"../wallet-required.js\";\nimport { useMedialaneApp } from \"../medialane-app.js\";\nimport { RewardEarned } from \"../rewards/reward-earned.js\";\nimport type { MetadataField } from \"../ip-type-fields.js\";\nimport { EditionMintFields } from \"./edition-mint-fields.js\";\nimport { editionMintSchema, type EditionMintValues } from \"./edition-mint-schema.js\";\nimport { runIntentCalls } from \"../../utils/run-intent-calls.js\";\nimport { pinAssetMetadata, uploadFileToIpfs } from \"../../utils/ipfs-upload.js\";\nimport { useTransaction } from \"../../utils/use-transaction.js\";\nimport { useLaunchpadImageUpload } from \"../../utils/use-launchpad-image-upload.js\";\nimport { invalidatePortfolioCache } from \"../../utils/portfolio-cache.js\";\n\nconst DEFAULTS: EditionMintValues = {\n value: \"1\",\n recipient: \"\",\n name: \"\",\n description: \"\",\n external_url: \"\",\n ipType: \"NFT\",\n licenseType: \"CC BY-SA\",\n commercialUse: \"Yes\",\n derivatives: \"Share-Alike\",\n attribution: \"Required\",\n geographicScope: \"Worldwide\",\n aiPolicy: \"Not Allowed\",\n royalty: 0,\n};\n\nexport function EditionMint({ contract: rawContract, aside }: { contract: string; aside?: ReactNode }) {\n const app = useMedialaneApp();\n const walletAddress = app.walletAddress;\n const collectionAddress = normalizeAddress(\"STARKNET\", rawContract);\n const tx = useTransaction();\n const upload = useLaunchpadImageUpload({ successMessage: \"Image uploaded to IPFS\", failureMessage: \"Image upload failed\" });\n const { imagePreview, imageUri, imageUploading, uploadError, uploadSuccess, fileInputRef, handleImageSelect, clearImage } = upload;\n const [ownerCheck, setOwnerCheck] = useState<\"loading\" | \"ok\" | \"denied\">(\"loading\");\n const [formError, setFormError] = useState<string | null>(null);\n const [metadataResetKey, setMetadataResetKey] = useState(0);\n const [autoExternalUrl, setAutoExternalUrl] = useState(\"\");\n const metadataFieldsRef = useRef<MetadataField[]>([]);\n\n const form = useForm<EditionMintValues>({ resolver: zodResolver(editionMintSchema), defaultValues: DEFAULTS });\n\n useEffect(() => {\n if (walletAddress && !form.getValues(\"recipient\")) form.setValue(\"recipient\", walletAddress);\n }, [walletAddress, form]);\n\n useEffect(() => {\n const suggested = `https://medialane.io/collections/${collectionAddress}`;\n const current = form.getValues(\"external_url\");\n if (!current || current === autoExternalUrl) {\n form.setValue(\"external_url\", suggested, { shouldDirty: false });\n setAutoExternalUrl(suggested);\n }\n }, [autoExternalUrl, collectionAddress, form]);\n\n useEffect(() => {\n if (!walletAddress) return;\n app\n .getClient()\n .api.collections.get(collectionAddress)\n .then((data) => {\n const owner = data.owner ? normalizeAddress(\"STARKNET\", data.owner) : null;\n setOwnerCheck(owner === normalizeAddress(\"STARKNET\", walletAddress) ? \"ok\" : \"denied\");\n })\n .catch(() => setOwnerCheck(\"denied\"));\n }, [app, walletAddress, collectionAddress]);\n\n const uploadDocument = async (file: File) => {\n await app.ensureSignedIn?.();\n return (await uploadFileToIpfs(app.getClient().api, file, \"document\")).uri;\n };\n\n const handleAgain = () => {\n tx.reset();\n metadataFieldsRef.current = [];\n setMetadataResetKey((key) => key + 1);\n setAutoExternalUrl(\"\");\n clearImage();\n form.reset({ ...DEFAULTS, recipient: walletAddress ?? \"\" });\n };\n\n const onSubmit = (values: EditionMintValues) => {\n if (!imageUri) {\n setFormError(\"Upload an image before minting.\");\n return;\n }\n if (!walletAddress) return;\n setFormError(null);\n void tx.run(async (signer) => {\n await app.ensureSignedIn?.();\n const api = app.getClient().api;\n const pinned = await pinAssetMetadata(api, {\n name: values.name,\n description: values.description ?? \"\",\n imageUri,\n externalUrl: values.external_url,\n ipType: values.ipType,\n licenseType: values.licenseType,\n commercialUse: values.commercialUse,\n derivatives: values.derivatives,\n attribution: values.attribution,\n geographicScope: values.geographicScope,\n aiPolicy: values.aiPolicy,\n royalty: String(values.royalty),\n creator: walletAddress,\n templateTraits: metadataFieldsRef.current.filter((f) => f.traitType.trim() && f.value.trim()).map((f) => ({ traitType: f.traitType.trim(), value: f.value.trim() })),\n });\n await runIntentCalls(signer, () =>\n api.intents.create(\"mint\", {\n owner: walletAddress,\n recipient: values.recipient,\n collectionContract: collectionAddress,\n tokenUri: pinned.uri,\n value: values.value,\n royaltyBps: 0,\n }),\n );\n invalidatePortfolioCache(walletAddress);\n });\n };\n\n const mintedTokenId = tx.receipt ? mintedTokenIdFromReceipt(tx.receipt, collectionAddress) : null;\n\n return (\n <WalletRequired\n icon={Sparkles}\n iconClassName=\"text-brand-purple\"\n title=\"Secure your account to create\"\n description=\"Secure your account to mint tokens into a multi-editions collection.\"\n >\n {ownerCheck === \"denied\" ? (\n <div className=\"max-w-lg mx-auto px-4 pt-24 pb-8 text-center space-y-4\">\n <Sparkles className=\"h-10 w-10 text-muted-foreground mx-auto\" />\n <h1 className=\"text-2xl font-bold\">Not the owner</h1>\n <p className=\"text-muted-foreground\">Only the collection owner can mint tokens. Connect the wallet that deployed this collection.</p>\n <Button asChild variant=\"outline\">\n <Link href=\"/launchpad\">Back to Launchpad</Link>\n </Button>\n </div>\n ) : (\n <>\n <ClaimRouteShell\n icon={<Sparkles className=\"h-4 w-4 text-white\" />}\n title=\"Mint an Edition\"\n subtitle=\"Add a new piece to your collection — its details and authorship are saved permanently. Free to mint, and it's yours.\"\n headerAccessory={\n <div className=\"flex items-center gap-2 rounded-lg border border-border bg-background/60 px-3 py-2 max-w-full\">\n <span className=\"tabular-nums text-xs text-foreground/80 truncate\">Collection: {collectionAddress}</span>\n </div>\n }\n aside={\n <>\n <MedialaneCollectionCard\n image={imagePreview}\n name={form.watch(\"name\")}\n collection=\"Edition\"\n serial={Number(form.watch(\"value\")) > 1 ? `${form.watch(\"value\")} editions` : undefined}\n creator={walletAddress ? `${walletAddress.slice(0, 6)}…${walletAddress.slice(-4)}` : undefined}\n creatorHref={walletAddress ? profileHref({ address: walletAddress }) : undefined}\n />\n {aside}\n </>\n }\n >\n <Form {...form}>\n <form onSubmit={form.handleSubmit(onSubmit)} className=\"space-y-5\">\n <EditionMintFields\n form={form}\n imagePreview={imagePreview}\n imageUri={imageUri}\n imageUploading={imageUploading}\n mintDisabled={imageUploading || tx.phase !== \"idle\"}\n fileInputRef={fileInputRef}\n onImageSelect={handleImageSelect}\n onClearImage={clearImage}\n metadataResetKey={metadataResetKey}\n onMetadataFieldsChange={(fields) => { metadataFieldsRef.current = fields; }}\n uploadDocument={uploadDocument}\n />\n {uploadError && <p className=\"text-xs text-destructive mt-1\">{uploadError}</p>}\n {uploadSuccess && <p className=\"text-xs text-emerald-500 mt-1\">✓ {uploadSuccess}</p>}\n {formError && <p className=\"text-xs text-destructive mt-1\">{formError}</p>}\n </form>\n </Form>\n </ClaimRouteShell>\n\n <TransactionDialog tx={tx} title=\"Mint an edition\" workingLabel=\"Minting your edition…\" firstStepLabel=\"Upload metadata\">\n <CreationSuccess\n name={form.getValues(\"name\") || \"Your token\"}\n image={imagePreview}\n caption=\"Your edition is live\"\n primary={mintedTokenId ? { href: assetHref(\"STARKNET\", collectionAddress, mintedTokenId), label: \"View asset\" } : { href: \"/portfolio/assets\", label: \"View portfolio\" }}\n secondary={mintedTokenId ? { href: \"/portfolio/assets\", label: \"View portfolio\" } : undefined}\n onAgain={handleAgain}\n againLabel=\"Mint another\"\n >\n <RewardEarned actionType=\"mint_asset\" />\n </CreationSuccess>\n </TransactionDialog>\n </>\n )}\n </WalletRequired>\n );\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../src/components/launchpad/edition-mint.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useRef, useState, type ReactNode } from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport { zodResolver } from \"@hookform/resolvers/zod\";\nimport { Sparkles } from \"lucide-react\";\nimport { assetHref, normalizeAddress, profileHref } from \"@medialane/sdk\";\nimport { mintedTokenIdFromReceipt } from \"@medialane/sdk/starknet\";\nimport Link from \"../link.js\";\nimport { Button } from \"../button.js\";\nimport { Form } from \"../form.js\";\nimport { ClaimRouteShell } from \"../claim-route-shell.js\";\nimport { TransactionSuccess } from \"../transaction-success.js\";\nimport { MedialaneCollectionCard } from \"../medialane-collection-card.js\";\nimport { TransactionDialog } from \"../transaction-dialog.js\";\nimport { WalletRequired } from \"../wallet-required.js\";\nimport { useMedialaneApp } from \"../medialane-app.js\";\nimport { RewardEarned } from \"../rewards/reward-earned.js\";\nimport type { MetadataField } from \"../ip-type-fields.js\";\nimport { EditionMintFields } from \"./edition-mint-fields.js\";\nimport { editionMintSchema, type EditionMintValues } from \"./edition-mint-schema.js\";\nimport { runIntentCalls } from \"../../utils/run-intent-calls.js\";\nimport { pinAssetMetadata, uploadFileToIpfs } from \"../../utils/ipfs-upload.js\";\nimport { useTransaction } from \"../../utils/use-transaction.js\";\nimport { useLaunchpadImageUpload } from \"../../utils/use-launchpad-image-upload.js\";\nimport { invalidatePortfolioCache } from \"../../utils/portfolio-cache.js\";\n\nconst DEFAULTS: EditionMintValues = {\n value: \"1\",\n recipient: \"\",\n name: \"\",\n description: \"\",\n external_url: \"\",\n ipType: \"NFT\",\n licenseType: \"CC BY-SA\",\n commercialUse: \"Yes\",\n derivatives: \"Share-Alike\",\n attribution: \"Required\",\n geographicScope: \"Worldwide\",\n aiPolicy: \"Not Allowed\",\n royalty: 0,\n};\n\nexport function EditionMint({ contract: rawContract, aside }: { contract: string; aside?: ReactNode }) {\n const app = useMedialaneApp();\n const walletAddress = app.walletAddress;\n const collectionAddress = normalizeAddress(\"STARKNET\", rawContract);\n const tx = useTransaction();\n const upload = useLaunchpadImageUpload({ successMessage: \"Image uploaded to IPFS\", failureMessage: \"Image upload failed\" });\n const { imagePreview, imageUri, imageUploading, uploadError, uploadSuccess, fileInputRef, handleImageSelect, clearImage } = upload;\n const [ownerCheck, setOwnerCheck] = useState<\"loading\" | \"ok\" | \"denied\">(\"loading\");\n const [formError, setFormError] = useState<string | null>(null);\n const [metadataResetKey, setMetadataResetKey] = useState(0);\n const [autoExternalUrl, setAutoExternalUrl] = useState(\"\");\n const metadataFieldsRef = useRef<MetadataField[]>([]);\n\n const form = useForm<EditionMintValues>({ resolver: zodResolver(editionMintSchema), defaultValues: DEFAULTS });\n\n useEffect(() => {\n if (walletAddress && !form.getValues(\"recipient\")) form.setValue(\"recipient\", walletAddress);\n }, [walletAddress, form]);\n\n useEffect(() => {\n const suggested = `https://medialane.io/collections/${collectionAddress}`;\n const current = form.getValues(\"external_url\");\n if (!current || current === autoExternalUrl) {\n form.setValue(\"external_url\", suggested, { shouldDirty: false });\n setAutoExternalUrl(suggested);\n }\n }, [autoExternalUrl, collectionAddress, form]);\n\n useEffect(() => {\n if (!walletAddress) return;\n app\n .getClient()\n .api.collections.get(collectionAddress)\n .then((data) => {\n const owner = data.owner ? normalizeAddress(\"STARKNET\", data.owner) : null;\n setOwnerCheck(owner === normalizeAddress(\"STARKNET\", walletAddress) ? \"ok\" : \"denied\");\n })\n .catch(() => setOwnerCheck(\"denied\"));\n }, [app, walletAddress, collectionAddress]);\n\n const uploadDocument = async (file: File) => {\n await app.ensureSignedIn?.();\n return (await uploadFileToIpfs(app.getClient().api, file, \"document\")).uri;\n };\n\n const handleAgain = () => {\n tx.reset();\n metadataFieldsRef.current = [];\n setMetadataResetKey((key) => key + 1);\n setAutoExternalUrl(\"\");\n clearImage();\n form.reset({ ...DEFAULTS, recipient: walletAddress ?? \"\" });\n };\n\n const onSubmit = (values: EditionMintValues) => {\n if (!imageUri) {\n setFormError(\"Upload an image before minting.\");\n return;\n }\n if (!walletAddress) return;\n setFormError(null);\n void tx.run(async (signer) => {\n await app.ensureSignedIn?.();\n const api = app.getClient().api;\n const pinned = await pinAssetMetadata(api, {\n name: values.name,\n description: values.description ?? \"\",\n imageUri,\n externalUrl: values.external_url,\n ipType: values.ipType,\n licenseType: values.licenseType,\n commercialUse: values.commercialUse,\n derivatives: values.derivatives,\n attribution: values.attribution,\n geographicScope: values.geographicScope,\n aiPolicy: values.aiPolicy,\n royalty: String(values.royalty),\n creator: walletAddress,\n templateTraits: metadataFieldsRef.current.filter((f) => f.traitType.trim() && f.value.trim()).map((f) => ({ traitType: f.traitType.trim(), value: f.value.trim() })),\n });\n await runIntentCalls(signer, () =>\n api.intents.create(\"mint\", {\n owner: walletAddress,\n recipient: values.recipient,\n collectionContract: collectionAddress,\n tokenUri: pinned.uri,\n value: values.value,\n royaltyBps: 0,\n }),\n );\n invalidatePortfolioCache(walletAddress);\n });\n };\n\n const mintedTokenId = tx.receipt ? mintedTokenIdFromReceipt(tx.receipt, collectionAddress) : null;\n\n return (\n <WalletRequired\n icon={Sparkles}\n iconClassName=\"text-brand-purple\"\n title=\"Secure your account to create\"\n description=\"Secure your account to mint tokens into a multi-editions collection.\"\n >\n {ownerCheck === \"denied\" ? (\n <div className=\"max-w-lg mx-auto px-4 pt-24 pb-8 text-center space-y-4\">\n <Sparkles className=\"h-10 w-10 text-muted-foreground mx-auto\" />\n <h1 className=\"text-2xl font-bold\">Not the owner</h1>\n <p className=\"text-muted-foreground\">Only the collection owner can mint tokens. Connect the wallet that deployed this collection.</p>\n <Button asChild variant=\"outline\">\n <Link href=\"/launchpad\">Back to Launchpad</Link>\n </Button>\n </div>\n ) : (\n <>\n <ClaimRouteShell\n icon={<Sparkles className=\"h-4 w-4 text-white\" />}\n title=\"Mint an Edition\"\n subtitle=\"Add a new piece to your collection — its details and authorship are saved permanently. Free to mint, and it's yours.\"\n headerAccessory={\n <div className=\"flex items-center gap-2 rounded-lg border border-border bg-background/60 px-3 py-2 max-w-full\">\n <span className=\"tabular-nums text-xs text-foreground/80 truncate\">Collection: {collectionAddress}</span>\n </div>\n }\n aside={\n <>\n <MedialaneCollectionCard\n image={imagePreview}\n name={form.watch(\"name\")}\n collection=\"Edition\"\n serial={Number(form.watch(\"value\")) > 1 ? `${form.watch(\"value\")} editions` : undefined}\n creator={walletAddress ? `${walletAddress.slice(0, 6)}…${walletAddress.slice(-4)}` : undefined}\n creatorHref={walletAddress ? profileHref({ address: walletAddress }) : undefined}\n />\n {aside}\n </>\n }\n >\n <Form {...form}>\n <form onSubmit={form.handleSubmit(onSubmit)} className=\"space-y-5\">\n <EditionMintFields\n form={form}\n imagePreview={imagePreview}\n imageUri={imageUri}\n imageUploading={imageUploading}\n mintDisabled={imageUploading || tx.phase !== \"idle\"}\n fileInputRef={fileInputRef}\n onImageSelect={handleImageSelect}\n onClearImage={clearImage}\n metadataResetKey={metadataResetKey}\n onMetadataFieldsChange={(fields) => { metadataFieldsRef.current = fields; }}\n uploadDocument={uploadDocument}\n />\n {uploadError && <p className=\"text-xs text-destructive mt-1\">{uploadError}</p>}\n {uploadSuccess && <p className=\"text-xs text-emerald-500 mt-1\">✓ {uploadSuccess}</p>}\n {formError && <p className=\"text-xs text-destructive mt-1\">{formError}</p>}\n </form>\n </Form>\n </ClaimRouteShell>\n\n <TransactionDialog tx={tx} title=\"Mint an edition\" workingLabel=\"Minting your edition…\" firstStepLabel=\"Upload metadata\">\n <TransactionSuccess\n name={form.getValues(\"name\") || \"Your token\"}\n image={imagePreview}\n title=\"Editions minted\"\n description=\"Each copy is recorded onchain with the license terms in its metadata.\"\n actions={[\n ...(mintedTokenId ? [{ href: assetHref(\"STARKNET\", collectionAddress, mintedTokenId), label: \"View asset\" }] : []),\n { href: \"/portfolio/assets\", label: \"View portfolio\" },\n { label: \"Mint another\", onClick: handleAgain },\n ]}\n >\n <RewardEarned actionType=\"mint_asset\" />\n </TransactionSuccess>\n </TransactionDialog>\n </>\n )}\n </WalletRequired>\n );\n}\n"],"mappings":"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","names":[]}
@@ -30,7 +30,7 @@ var import_lucide_react = require("lucide-react");
30
30
  var import_sdk = require("@medialane/sdk");
31
31
  var import_form = require("../form.js");
32
32
  var import_claim_route_shell = require("../claim-route-shell.js");
33
- var import_creation_success = require("../creation-success.js");
33
+ var import_transaction_success = require("../transaction-success.js");
34
34
  var import_medialane_collection_card = require("../medialane-collection-card.js");
35
35
  var import_transaction_dialog = require("../transaction-dialog.js");
36
36
  var import_wallet_required = require("../wallet-required.js");
@@ -123,14 +123,13 @@ function PopCreate({ aside }) {
123
123
  description: "Secure your account to deploy a credential collection onchain.",
124
124
  children: [
125
125
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_transaction_dialog.TransactionDialog, { tx, title: "Create POP event", workingLabel: "Creating your POP event\u2026", firstStepLabel: "Upload badge metadata", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
126
- import_creation_success.CreationSuccess,
126
+ import_transaction_success.TransactionSuccess,
127
127
  {
128
128
  name: eventName || "Your event",
129
129
  image: imagePreview,
130
- caption: "Your event is live",
131
- primary: { href: "/launchpad/pop", label: "Back to POP launchpad" },
132
- onAgain: handleAgain,
133
- againLabel: "Create another",
130
+ title: "Event created",
131
+ description: "Attendees can claim a proof of presence recorded onchain.",
132
+ actions: [{ href: "/launchpad/pop", label: "Back to POP launchpad" }, { label: "Create another", onClick: handleAgain }],
134
133
  children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_reward_earned.RewardEarned, { actionType: "launch_launchpad" })
135
134
  }
136
135
  ) }),
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/launchpad/pop-create.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useState, type ReactNode } from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport { zodResolver } from \"@hookform/resolvers/zod\";\nimport { Award } from \"lucide-react\";\nimport { buildCollectionMetadata, profileHref } from \"@medialane/sdk\";\nimport { Form } from \"../form.js\";\nimport { ClaimRouteShell } from \"../claim-route-shell.js\";\nimport { CreationSuccess } from \"../creation-success.js\";\nimport { MedialaneCollectionCard } from \"../medialane-collection-card.js\";\nimport { TransactionDialog } from \"../transaction-dialog.js\";\nimport { WalletRequired } from \"../wallet-required.js\";\nimport { useMedialaneApp } from \"../medialane-app.js\";\nimport { RewardEarned } from \"../rewards/reward-earned.js\";\nimport { PopCreateFields, type PopEventType } from \"./pop-create-fields.js\";\nimport { popCreateSchema, type PopCreateValues } from \"./pop-create-schema.js\";\nimport { getDefaultClaimWindow, suggestLaunchpadSymbol } from \"../../utils/launchpad-defaults.js\";\nimport { runIntentCalls } from \"../../utils/run-intent-calls.js\";\nimport { uploadJsonToIpfs } from \"../../utils/ipfs-upload.js\";\nimport { useTransaction } from \"../../utils/use-transaction.js\";\nimport { useLaunchpadImageUpload } from \"../../utils/use-launchpad-image-upload.js\";\n\nexport function PopCreate({ aside }: { aside?: ReactNode }) {\n const app = useMedialaneApp();\n const walletAddress = app.walletAddress;\n const tx = useTransaction();\n const upload = useLaunchpadImageUpload({ successMessage: \"Badge image uploaded\", failureMessage: \"Image upload failed\" });\n const { imagePreview, imageUri, imageUploading, uploadError, uploadSuccess, fileInputRef, handleImageSelect, clearImage } = upload;\n const [eventType, setEventType] = useState<PopEventType>(\"Conference\");\n const [isPublic, setIsPublic] = useState(false);\n const [autoSymbol, setAutoSymbol] = useState(\"\");\n\n const form = useForm<PopCreateValues>({\n resolver: zodResolver(popCreateSchema),\n defaultValues: { name: \"\", symbol: \"\", description: \"\", external_link: \"\", claimEndDate: \"\", claimEndTime: \"23:59\" },\n });\n const eventName = form.watch(\"name\");\n\n useEffect(() => {\n const defaults = getDefaultClaimWindow();\n if (!form.getValues(\"claimEndDate\")) {\n form.setValue(\"claimEndDate\", defaults.claimEndDate, { shouldDirty: false });\n form.setValue(\"claimEndTime\", defaults.claimEndTime, { shouldDirty: false });\n }\n }, [form]);\n\n useEffect(() => {\n const suggested = suggestLaunchpadSymbol(eventName);\n if (!suggested) return;\n const current = form.getValues(\"symbol\");\n if (!current || current === autoSymbol) {\n form.setValue(\"symbol\", suggested, { shouldDirty: false });\n setAutoSymbol(suggested);\n }\n }, [autoSymbol, eventName, form]);\n\n const handleAgain = () => {\n const defaults = getDefaultClaimWindow();\n tx.reset();\n form.reset({ name: \"\", symbol: \"\", claimEndDate: defaults.claimEndDate, claimEndTime: defaults.claimEndTime });\n clearImage();\n setEventType(\"Conference\");\n setIsPublic(false);\n setAutoSymbol(\"\");\n };\n\n const onSubmit = (values: PopCreateValues) => {\n if (!walletAddress) return;\n void tx.run(async (signer) => {\n await app.ensureSignedIn?.();\n const api = app.getClient().api;\n const baseUri = await uploadJsonToIpfs(api, {\n ...buildCollectionMetadata({\n name: values.name,\n description: values.description,\n image: imageUri,\n externalLink: values.external_link,\n owner: walletAddress,\n }),\n attributes: [\n { trait_type: \"Visibility\", value: isPublic ? \"Public\" : \"Private\" },\n { trait_type: \"Event Type\", value: eventType },\n ],\n });\n const claimEndTimestamp = Math.floor(new Date(`${values.claimEndDate}T${values.claimEndTime}:00`).getTime() / 1000);\n await runIntentCalls(signer, () =>\n api.intents.create(\"create-collection\", {\n owner: walletAddress,\n name: values.name,\n symbol: values.symbol,\n baseUri,\n service: \"pop-protocol\",\n claimEndTimestamp,\n }),\n );\n });\n };\n\n return (\n <WalletRequired\n icon={Award}\n iconClassName=\"text-green-500\"\n title=\"Secure your account to create a POP event\"\n description=\"Secure your account to deploy a credential collection onchain.\"\n >\n <TransactionDialog tx={tx} title=\"Create POP event\" workingLabel=\"Creating your POP event…\" firstStepLabel=\"Upload badge metadata\">\n <CreationSuccess\n name={eventName || \"Your event\"}\n image={imagePreview}\n caption=\"Your event is live\"\n primary={{ href: \"/launchpad/pop\", label: \"Back to POP launchpad\" }}\n onAgain={handleAgain}\n againLabel=\"Create another\"\n >\n <RewardEarned actionType=\"launch_launchpad\" />\n </CreationSuccess>\n </TransactionDialog>\n\n <ClaimRouteShell\n icon={<Award className=\"h-4 w-4 text-white\" />}\n title=\"Create a POP Event\"\n subtitle=\"Give attendees a collectible badge that proves they were part of your event — free to publish.\"\n aside={\n <>\n <MedialaneCollectionCard\n image={imagePreview}\n name={eventName}\n collection={form.watch(\"symbol\") || \"POP Event\"}\n creator={walletAddress ? `${walletAddress.slice(0, 6)}…${walletAddress.slice(-4)}` : undefined}\n creatorHref={walletAddress ? profileHref({ address: walletAddress }) : undefined}\n />\n {aside}\n </>\n }\n >\n <Form {...form}>\n <form onSubmit={form.handleSubmit(onSubmit)} className=\"space-y-5\">\n <PopCreateFields\n walletAddress={walletAddress}\n form={form}\n eventType={eventType}\n isPublic={isPublic}\n imagePreview={imagePreview}\n imageUri={imageUri}\n imageUploading={imageUploading}\n isSubmitting={tx.phase !== \"idle\"}\n fileInputRef={fileInputRef}\n onSetEventType={setEventType}\n onSetPublic={setIsPublic}\n onImageSelect={handleImageSelect}\n onClearImage={clearImage}\n />\n {uploadError && <p className=\"text-xs text-destructive mt-1\">{uploadError}</p>}\n {uploadSuccess && <p className=\"text-xs text-emerald-500 mt-1\">✓ {uploadSuccess}</p>}\n </form>\n </Form>\n </ClaimRouteShell>\n </WalletRequired>\n );\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../src/components/launchpad/pop-create.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useState, type ReactNode } from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport { zodResolver } from \"@hookform/resolvers/zod\";\nimport { Award } from \"lucide-react\";\nimport { buildCollectionMetadata, profileHref } from \"@medialane/sdk\";\nimport { Form } from \"../form.js\";\nimport { ClaimRouteShell } from \"../claim-route-shell.js\";\nimport { TransactionSuccess } from \"../transaction-success.js\";\nimport { MedialaneCollectionCard } from \"../medialane-collection-card.js\";\nimport { TransactionDialog } from \"../transaction-dialog.js\";\nimport { WalletRequired } from \"../wallet-required.js\";\nimport { useMedialaneApp } from \"../medialane-app.js\";\nimport { RewardEarned } from \"../rewards/reward-earned.js\";\nimport { PopCreateFields, type PopEventType } from \"./pop-create-fields.js\";\nimport { popCreateSchema, type PopCreateValues } from \"./pop-create-schema.js\";\nimport { getDefaultClaimWindow, suggestLaunchpadSymbol } from \"../../utils/launchpad-defaults.js\";\nimport { runIntentCalls } from \"../../utils/run-intent-calls.js\";\nimport { uploadJsonToIpfs } from \"../../utils/ipfs-upload.js\";\nimport { useTransaction } from \"../../utils/use-transaction.js\";\nimport { useLaunchpadImageUpload } from \"../../utils/use-launchpad-image-upload.js\";\n\nexport function PopCreate({ aside }: { aside?: ReactNode }) {\n const app = useMedialaneApp();\n const walletAddress = app.walletAddress;\n const tx = useTransaction();\n const upload = useLaunchpadImageUpload({ successMessage: \"Badge image uploaded\", failureMessage: \"Image upload failed\" });\n const { imagePreview, imageUri, imageUploading, uploadError, uploadSuccess, fileInputRef, handleImageSelect, clearImage } = upload;\n const [eventType, setEventType] = useState<PopEventType>(\"Conference\");\n const [isPublic, setIsPublic] = useState(false);\n const [autoSymbol, setAutoSymbol] = useState(\"\");\n\n const form = useForm<PopCreateValues>({\n resolver: zodResolver(popCreateSchema),\n defaultValues: { name: \"\", symbol: \"\", description: \"\", external_link: \"\", claimEndDate: \"\", claimEndTime: \"23:59\" },\n });\n const eventName = form.watch(\"name\");\n\n useEffect(() => {\n const defaults = getDefaultClaimWindow();\n if (!form.getValues(\"claimEndDate\")) {\n form.setValue(\"claimEndDate\", defaults.claimEndDate, { shouldDirty: false });\n form.setValue(\"claimEndTime\", defaults.claimEndTime, { shouldDirty: false });\n }\n }, [form]);\n\n useEffect(() => {\n const suggested = suggestLaunchpadSymbol(eventName);\n if (!suggested) return;\n const current = form.getValues(\"symbol\");\n if (!current || current === autoSymbol) {\n form.setValue(\"symbol\", suggested, { shouldDirty: false });\n setAutoSymbol(suggested);\n }\n }, [autoSymbol, eventName, form]);\n\n const handleAgain = () => {\n const defaults = getDefaultClaimWindow();\n tx.reset();\n form.reset({ name: \"\", symbol: \"\", claimEndDate: defaults.claimEndDate, claimEndTime: defaults.claimEndTime });\n clearImage();\n setEventType(\"Conference\");\n setIsPublic(false);\n setAutoSymbol(\"\");\n };\n\n const onSubmit = (values: PopCreateValues) => {\n if (!walletAddress) return;\n void tx.run(async (signer) => {\n await app.ensureSignedIn?.();\n const api = app.getClient().api;\n const baseUri = await uploadJsonToIpfs(api, {\n ...buildCollectionMetadata({\n name: values.name,\n description: values.description,\n image: imageUri,\n externalLink: values.external_link,\n owner: walletAddress,\n }),\n attributes: [\n { trait_type: \"Visibility\", value: isPublic ? \"Public\" : \"Private\" },\n { trait_type: \"Event Type\", value: eventType },\n ],\n });\n const claimEndTimestamp = Math.floor(new Date(`${values.claimEndDate}T${values.claimEndTime}:00`).getTime() / 1000);\n await runIntentCalls(signer, () =>\n api.intents.create(\"create-collection\", {\n owner: walletAddress,\n name: values.name,\n symbol: values.symbol,\n baseUri,\n service: \"pop-protocol\",\n claimEndTimestamp,\n }),\n );\n });\n };\n\n return (\n <WalletRequired\n icon={Award}\n iconClassName=\"text-green-500\"\n title=\"Secure your account to create a POP event\"\n description=\"Secure your account to deploy a credential collection onchain.\"\n >\n <TransactionDialog tx={tx} title=\"Create POP event\" workingLabel=\"Creating your POP event…\" firstStepLabel=\"Upload badge metadata\">\n <TransactionSuccess\n name={eventName || \"Your event\"}\n image={imagePreview}\n title=\"Event created\"\n description=\"Attendees can claim a proof of presence recorded onchain.\"\n actions={[{ href: \"/launchpad/pop\", label: \"Back to POP launchpad\" }, { label: \"Create another\", onClick: handleAgain }]}\n >\n <RewardEarned actionType=\"launch_launchpad\" />\n </TransactionSuccess>\n </TransactionDialog>\n\n <ClaimRouteShell\n icon={<Award className=\"h-4 w-4 text-white\" />}\n title=\"Create a POP Event\"\n subtitle=\"Give attendees a collectible badge that proves they were part of your event — free to publish.\"\n aside={\n <>\n <MedialaneCollectionCard\n image={imagePreview}\n name={eventName}\n collection={form.watch(\"symbol\") || \"POP Event\"}\n creator={walletAddress ? `${walletAddress.slice(0, 6)}…${walletAddress.slice(-4)}` : undefined}\n creatorHref={walletAddress ? profileHref({ address: walletAddress }) : undefined}\n />\n {aside}\n </>\n }\n >\n <Form {...form}>\n <form onSubmit={form.handleSubmit(onSubmit)} className=\"space-y-5\">\n <PopCreateFields\n walletAddress={walletAddress}\n form={form}\n eventType={eventType}\n isPublic={isPublic}\n imagePreview={imagePreview}\n imageUri={imageUri}\n imageUploading={imageUploading}\n isSubmitting={tx.phase !== \"idle\"}\n fileInputRef={fileInputRef}\n onSetEventType={setEventType}\n onSetPublic={setIsPublic}\n onImageSelect={handleImageSelect}\n onClearImage={clearImage}\n />\n {uploadError && <p className=\"text-xs text-destructive mt-1\">{uploadError}</p>}\n {uploadSuccess && <p className=\"text-xs text-emerald-500 mt-1\">✓ {uploadSuccess}</p>}\n </form>\n </Form>\n </ClaimRouteShell>\n </WalletRequired>\n );\n}\n"],"mappings":"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","names":[]}
@@ -7,7 +7,7 @@ import { Award } from "lucide-react";
7
7
  import { buildCollectionMetadata, profileHref } from "@medialane/sdk";
8
8
  import { Form } from "../form.js";
9
9
  import { ClaimRouteShell } from "../claim-route-shell.js";
10
- import { CreationSuccess } from "../creation-success.js";
10
+ import { TransactionSuccess } from "../transaction-success.js";
11
11
  import { MedialaneCollectionCard } from "../medialane-collection-card.js";
12
12
  import { TransactionDialog } from "../transaction-dialog.js";
13
13
  import { WalletRequired } from "../wallet-required.js";
@@ -100,14 +100,13 @@ function PopCreate({ aside }) {
100
100
  description: "Secure your account to deploy a credential collection onchain.",
101
101
  children: [
102
102
  /* @__PURE__ */ jsx(TransactionDialog, { tx, title: "Create POP event", workingLabel: "Creating your POP event\u2026", firstStepLabel: "Upload badge metadata", children: /* @__PURE__ */ jsx(
103
- CreationSuccess,
103
+ TransactionSuccess,
104
104
  {
105
105
  name: eventName || "Your event",
106
106
  image: imagePreview,
107
- caption: "Your event is live",
108
- primary: { href: "/launchpad/pop", label: "Back to POP launchpad" },
109
- onAgain: handleAgain,
110
- againLabel: "Create another",
107
+ title: "Event created",
108
+ description: "Attendees can claim a proof of presence recorded onchain.",
109
+ actions: [{ href: "/launchpad/pop", label: "Back to POP launchpad" }, { label: "Create another", onClick: handleAgain }],
111
110
  children: /* @__PURE__ */ jsx(RewardEarned, { actionType: "launch_launchpad" })
112
111
  }
113
112
  ) }),
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/launchpad/pop-create.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useState, type ReactNode } from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport { zodResolver } from \"@hookform/resolvers/zod\";\nimport { Award } from \"lucide-react\";\nimport { buildCollectionMetadata, profileHref } from \"@medialane/sdk\";\nimport { Form } from \"../form.js\";\nimport { ClaimRouteShell } from \"../claim-route-shell.js\";\nimport { CreationSuccess } from \"../creation-success.js\";\nimport { MedialaneCollectionCard } from \"../medialane-collection-card.js\";\nimport { TransactionDialog } from \"../transaction-dialog.js\";\nimport { WalletRequired } from \"../wallet-required.js\";\nimport { useMedialaneApp } from \"../medialane-app.js\";\nimport { RewardEarned } from \"../rewards/reward-earned.js\";\nimport { PopCreateFields, type PopEventType } from \"./pop-create-fields.js\";\nimport { popCreateSchema, type PopCreateValues } from \"./pop-create-schema.js\";\nimport { getDefaultClaimWindow, suggestLaunchpadSymbol } from \"../../utils/launchpad-defaults.js\";\nimport { runIntentCalls } from \"../../utils/run-intent-calls.js\";\nimport { uploadJsonToIpfs } from \"../../utils/ipfs-upload.js\";\nimport { useTransaction } from \"../../utils/use-transaction.js\";\nimport { useLaunchpadImageUpload } from \"../../utils/use-launchpad-image-upload.js\";\n\nexport function PopCreate({ aside }: { aside?: ReactNode }) {\n const app = useMedialaneApp();\n const walletAddress = app.walletAddress;\n const tx = useTransaction();\n const upload = useLaunchpadImageUpload({ successMessage: \"Badge image uploaded\", failureMessage: \"Image upload failed\" });\n const { imagePreview, imageUri, imageUploading, uploadError, uploadSuccess, fileInputRef, handleImageSelect, clearImage } = upload;\n const [eventType, setEventType] = useState<PopEventType>(\"Conference\");\n const [isPublic, setIsPublic] = useState(false);\n const [autoSymbol, setAutoSymbol] = useState(\"\");\n\n const form = useForm<PopCreateValues>({\n resolver: zodResolver(popCreateSchema),\n defaultValues: { name: \"\", symbol: \"\", description: \"\", external_link: \"\", claimEndDate: \"\", claimEndTime: \"23:59\" },\n });\n const eventName = form.watch(\"name\");\n\n useEffect(() => {\n const defaults = getDefaultClaimWindow();\n if (!form.getValues(\"claimEndDate\")) {\n form.setValue(\"claimEndDate\", defaults.claimEndDate, { shouldDirty: false });\n form.setValue(\"claimEndTime\", defaults.claimEndTime, { shouldDirty: false });\n }\n }, [form]);\n\n useEffect(() => {\n const suggested = suggestLaunchpadSymbol(eventName);\n if (!suggested) return;\n const current = form.getValues(\"symbol\");\n if (!current || current === autoSymbol) {\n form.setValue(\"symbol\", suggested, { shouldDirty: false });\n setAutoSymbol(suggested);\n }\n }, [autoSymbol, eventName, form]);\n\n const handleAgain = () => {\n const defaults = getDefaultClaimWindow();\n tx.reset();\n form.reset({ name: \"\", symbol: \"\", claimEndDate: defaults.claimEndDate, claimEndTime: defaults.claimEndTime });\n clearImage();\n setEventType(\"Conference\");\n setIsPublic(false);\n setAutoSymbol(\"\");\n };\n\n const onSubmit = (values: PopCreateValues) => {\n if (!walletAddress) return;\n void tx.run(async (signer) => {\n await app.ensureSignedIn?.();\n const api = app.getClient().api;\n const baseUri = await uploadJsonToIpfs(api, {\n ...buildCollectionMetadata({\n name: values.name,\n description: values.description,\n image: imageUri,\n externalLink: values.external_link,\n owner: walletAddress,\n }),\n attributes: [\n { trait_type: \"Visibility\", value: isPublic ? \"Public\" : \"Private\" },\n { trait_type: \"Event Type\", value: eventType },\n ],\n });\n const claimEndTimestamp = Math.floor(new Date(`${values.claimEndDate}T${values.claimEndTime}:00`).getTime() / 1000);\n await runIntentCalls(signer, () =>\n api.intents.create(\"create-collection\", {\n owner: walletAddress,\n name: values.name,\n symbol: values.symbol,\n baseUri,\n service: \"pop-protocol\",\n claimEndTimestamp,\n }),\n );\n });\n };\n\n return (\n <WalletRequired\n icon={Award}\n iconClassName=\"text-green-500\"\n title=\"Secure your account to create a POP event\"\n description=\"Secure your account to deploy a credential collection onchain.\"\n >\n <TransactionDialog tx={tx} title=\"Create POP event\" workingLabel=\"Creating your POP event…\" firstStepLabel=\"Upload badge metadata\">\n <CreationSuccess\n name={eventName || \"Your event\"}\n image={imagePreview}\n caption=\"Your event is live\"\n primary={{ href: \"/launchpad/pop\", label: \"Back to POP launchpad\" }}\n onAgain={handleAgain}\n againLabel=\"Create another\"\n >\n <RewardEarned actionType=\"launch_launchpad\" />\n </CreationSuccess>\n </TransactionDialog>\n\n <ClaimRouteShell\n icon={<Award className=\"h-4 w-4 text-white\" />}\n title=\"Create a POP Event\"\n subtitle=\"Give attendees a collectible badge that proves they were part of your event — free to publish.\"\n aside={\n <>\n <MedialaneCollectionCard\n image={imagePreview}\n name={eventName}\n collection={form.watch(\"symbol\") || \"POP Event\"}\n creator={walletAddress ? `${walletAddress.slice(0, 6)}…${walletAddress.slice(-4)}` : undefined}\n creatorHref={walletAddress ? profileHref({ address: walletAddress }) : undefined}\n />\n {aside}\n </>\n }\n >\n <Form {...form}>\n <form onSubmit={form.handleSubmit(onSubmit)} className=\"space-y-5\">\n <PopCreateFields\n walletAddress={walletAddress}\n form={form}\n eventType={eventType}\n isPublic={isPublic}\n imagePreview={imagePreview}\n imageUri={imageUri}\n imageUploading={imageUploading}\n isSubmitting={tx.phase !== \"idle\"}\n fileInputRef={fileInputRef}\n onSetEventType={setEventType}\n onSetPublic={setIsPublic}\n onImageSelect={handleImageSelect}\n onClearImage={clearImage}\n />\n {uploadError && <p className=\"text-xs text-destructive mt-1\">{uploadError}</p>}\n {uploadSuccess && <p className=\"text-xs text-emerald-500 mt-1\">✓ {uploadSuccess}</p>}\n </form>\n </Form>\n </ClaimRouteShell>\n </WalletRequired>\n );\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../src/components/launchpad/pop-create.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useState, type ReactNode } from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport { zodResolver } from \"@hookform/resolvers/zod\";\nimport { Award } from \"lucide-react\";\nimport { buildCollectionMetadata, profileHref } from \"@medialane/sdk\";\nimport { Form } from \"../form.js\";\nimport { ClaimRouteShell } from \"../claim-route-shell.js\";\nimport { TransactionSuccess } from \"../transaction-success.js\";\nimport { MedialaneCollectionCard } from \"../medialane-collection-card.js\";\nimport { TransactionDialog } from \"../transaction-dialog.js\";\nimport { WalletRequired } from \"../wallet-required.js\";\nimport { useMedialaneApp } from \"../medialane-app.js\";\nimport { RewardEarned } from \"../rewards/reward-earned.js\";\nimport { PopCreateFields, type PopEventType } from \"./pop-create-fields.js\";\nimport { popCreateSchema, type PopCreateValues } from \"./pop-create-schema.js\";\nimport { getDefaultClaimWindow, suggestLaunchpadSymbol } from \"../../utils/launchpad-defaults.js\";\nimport { runIntentCalls } from \"../../utils/run-intent-calls.js\";\nimport { uploadJsonToIpfs } from \"../../utils/ipfs-upload.js\";\nimport { useTransaction } from \"../../utils/use-transaction.js\";\nimport { useLaunchpadImageUpload } from \"../../utils/use-launchpad-image-upload.js\";\n\nexport function PopCreate({ aside }: { aside?: ReactNode }) {\n const app = useMedialaneApp();\n const walletAddress = app.walletAddress;\n const tx = useTransaction();\n const upload = useLaunchpadImageUpload({ successMessage: \"Badge image uploaded\", failureMessage: \"Image upload failed\" });\n const { imagePreview, imageUri, imageUploading, uploadError, uploadSuccess, fileInputRef, handleImageSelect, clearImage } = upload;\n const [eventType, setEventType] = useState<PopEventType>(\"Conference\");\n const [isPublic, setIsPublic] = useState(false);\n const [autoSymbol, setAutoSymbol] = useState(\"\");\n\n const form = useForm<PopCreateValues>({\n resolver: zodResolver(popCreateSchema),\n defaultValues: { name: \"\", symbol: \"\", description: \"\", external_link: \"\", claimEndDate: \"\", claimEndTime: \"23:59\" },\n });\n const eventName = form.watch(\"name\");\n\n useEffect(() => {\n const defaults = getDefaultClaimWindow();\n if (!form.getValues(\"claimEndDate\")) {\n form.setValue(\"claimEndDate\", defaults.claimEndDate, { shouldDirty: false });\n form.setValue(\"claimEndTime\", defaults.claimEndTime, { shouldDirty: false });\n }\n }, [form]);\n\n useEffect(() => {\n const suggested = suggestLaunchpadSymbol(eventName);\n if (!suggested) return;\n const current = form.getValues(\"symbol\");\n if (!current || current === autoSymbol) {\n form.setValue(\"symbol\", suggested, { shouldDirty: false });\n setAutoSymbol(suggested);\n }\n }, [autoSymbol, eventName, form]);\n\n const handleAgain = () => {\n const defaults = getDefaultClaimWindow();\n tx.reset();\n form.reset({ name: \"\", symbol: \"\", claimEndDate: defaults.claimEndDate, claimEndTime: defaults.claimEndTime });\n clearImage();\n setEventType(\"Conference\");\n setIsPublic(false);\n setAutoSymbol(\"\");\n };\n\n const onSubmit = (values: PopCreateValues) => {\n if (!walletAddress) return;\n void tx.run(async (signer) => {\n await app.ensureSignedIn?.();\n const api = app.getClient().api;\n const baseUri = await uploadJsonToIpfs(api, {\n ...buildCollectionMetadata({\n name: values.name,\n description: values.description,\n image: imageUri,\n externalLink: values.external_link,\n owner: walletAddress,\n }),\n attributes: [\n { trait_type: \"Visibility\", value: isPublic ? \"Public\" : \"Private\" },\n { trait_type: \"Event Type\", value: eventType },\n ],\n });\n const claimEndTimestamp = Math.floor(new Date(`${values.claimEndDate}T${values.claimEndTime}:00`).getTime() / 1000);\n await runIntentCalls(signer, () =>\n api.intents.create(\"create-collection\", {\n owner: walletAddress,\n name: values.name,\n symbol: values.symbol,\n baseUri,\n service: \"pop-protocol\",\n claimEndTimestamp,\n }),\n );\n });\n };\n\n return (\n <WalletRequired\n icon={Award}\n iconClassName=\"text-green-500\"\n title=\"Secure your account to create a POP event\"\n description=\"Secure your account to deploy a credential collection onchain.\"\n >\n <TransactionDialog tx={tx} title=\"Create POP event\" workingLabel=\"Creating your POP event…\" firstStepLabel=\"Upload badge metadata\">\n <TransactionSuccess\n name={eventName || \"Your event\"}\n image={imagePreview}\n title=\"Event created\"\n description=\"Attendees can claim a proof of presence recorded onchain.\"\n actions={[{ href: \"/launchpad/pop\", label: \"Back to POP launchpad\" }, { label: \"Create another\", onClick: handleAgain }]}\n >\n <RewardEarned actionType=\"launch_launchpad\" />\n </TransactionSuccess>\n </TransactionDialog>\n\n <ClaimRouteShell\n icon={<Award className=\"h-4 w-4 text-white\" />}\n title=\"Create a POP Event\"\n subtitle=\"Give attendees a collectible badge that proves they were part of your event — free to publish.\"\n aside={\n <>\n <MedialaneCollectionCard\n image={imagePreview}\n name={eventName}\n collection={form.watch(\"symbol\") || \"POP Event\"}\n creator={walletAddress ? `${walletAddress.slice(0, 6)}…${walletAddress.slice(-4)}` : undefined}\n creatorHref={walletAddress ? profileHref({ address: walletAddress }) : undefined}\n />\n {aside}\n </>\n }\n >\n <Form {...form}>\n <form onSubmit={form.handleSubmit(onSubmit)} className=\"space-y-5\">\n <PopCreateFields\n walletAddress={walletAddress}\n form={form}\n eventType={eventType}\n isPublic={isPublic}\n imagePreview={imagePreview}\n imageUri={imageUri}\n imageUploading={imageUploading}\n isSubmitting={tx.phase !== \"idle\"}\n fileInputRef={fileInputRef}\n onSetEventType={setEventType}\n onSetPublic={setIsPublic}\n onImageSelect={handleImageSelect}\n onClearImage={clearImage}\n />\n {uploadError && <p className=\"text-xs text-destructive mt-1\">{uploadError}</p>}\n {uploadSuccess && <p className=\"text-xs text-emerald-500 mt-1\">✓ {uploadSuccess}</p>}\n </form>\n </Form>\n </ClaimRouteShell>\n </WalletRequired>\n );\n}\n"],"mappings":"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","names":[]}