@medialane/ui 0.263.0 → 0.264.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/account/input-otp.d.cts +2 -2
- package/dist/components/account/input-otp.d.ts +2 -2
- package/dist/components/asset-access-cards.cjs +5 -8
- package/dist/components/asset-access-cards.cjs.map +1 -1
- package/dist/components/asset-access-cards.js +5 -8
- package/dist/components/asset-access-cards.js.map +1 -1
- package/dist/components/asset-overview-content.cjs +1 -1
- package/dist/components/asset-overview-content.cjs.map +1 -1
- package/dist/components/asset-overview-content.js +1 -1
- package/dist/components/asset-overview-content.js.map +1 -1
- package/dist/components/button.d.cts +2 -2
- package/dist/components/button.d.ts +2 -2
- package/dist/components/collection-card.cjs +5 -5
- package/dist/components/collection-card.cjs.map +1 -1
- package/dist/components/collection-card.js +5 -5
- package/dist/components/collection-card.js.map +1 -1
- package/dist/components/collections-page.cjs +3 -3
- package/dist/components/collections-page.cjs.map +1 -1
- package/dist/components/collections-page.js +3 -3
- package/dist/components/collections-page.js.map +1 -1
- package/dist/components/fast-mint/fast-mint.cjs +1 -1
- package/dist/components/fast-mint/fast-mint.cjs.map +1 -1
- package/dist/components/fast-mint/fast-mint.d.cts +2 -2
- package/dist/components/fast-mint/fast-mint.d.ts +2 -2
- package/dist/components/fast-mint/fast-mint.js +1 -1
- package/dist/components/fast-mint/fast-mint.js.map +1 -1
- package/dist/components/launchpad/edition-mint-schema.d.cts +2 -2
- package/dist/components/launchpad/edition-mint-schema.d.ts +2 -2
- package/dist/components/launchpad/edition-mint.cjs +1 -1
- package/dist/components/launchpad/edition-mint.cjs.map +1 -1
- package/dist/components/launchpad/edition-mint.js +1 -1
- package/dist/components/launchpad/edition-mint.js.map +1 -1
- package/dist/components/launchpad/single-edition-mint.cjs +1 -1
- package/dist/components/launchpad/single-edition-mint.cjs.map +1 -1
- package/dist/components/launchpad/single-edition-mint.js +1 -1
- package/dist/components/launchpad/single-edition-mint.js.map +1 -1
- package/dist/components/launchpad/tier-mint-form.cjs +1 -1
- package/dist/components/launchpad/tier-mint-form.cjs.map +1 -1
- package/dist/components/launchpad/tier-mint-form.js +1 -1
- package/dist/components/launchpad/tier-mint-form.js.map +1 -1
- package/dist/components/medialane-app.cjs.map +1 -1
- package/dist/components/medialane-app.d.cts +0 -1
- package/dist/components/medialane-app.d.ts +0 -1
- package/dist/components/medialane-app.js.map +1 -1
- package/dist/components/sheet.d.cts +1 -1
- package/dist/components/sheet.d.ts +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/launchpad/tier-mint-form.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 * as z from \"zod\";\nimport { AlertCircle, ChevronDown, ImagePlus, Loader2, ShieldCheck, X } from \"lucide-react\";\nimport { collectionHref, normalizeAddress, profileHref } from \"@medialane/sdk\";\nimport { acceptFor } from \"../../utils/upload-limits.js\";\nimport { FIELD_LIMITS } from \"../../utils/field-limits.js\";\nimport Image from \"../image.js\";\nimport Link from \"../link.js\";\nimport { Button } from \"../button.js\";\nimport { Input } from \"../input.js\";\nimport { Textarea } from \"../textarea.js\";\nimport { Skeleton } from \"../skeleton.js\";\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"../select.js\";\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from \"../collapsible.js\";\nimport { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage } from \"../form.js\";\nimport { ToggleGroup } from \"../create-form-primitives.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 { AI_POLICIES, DERIVATIVES_OPTIONS, LICENSE_TYPES } from \"../../data/ip.js\";\nimport { cn } from \"../../utils/cn.js\";\nimport { runIntentsCalls } from \"../../utils/run-intent-calls.js\";\nimport { pinAssetMetadata } from \"../../utils/ipfs-upload.js\";\nimport { useCollection } from \"../../utils/use-collections.js\";\nimport { useCollectionProfile } from \"../../utils/use-profiles.js\";\nimport { useTransaction } from \"../../utils/use-transaction.js\";\nimport { useLaunchpadImageUpload } from \"../../utils/use-launchpad-image-upload.js\";\nimport type { TierMintPreset } from \"./tier-mint-presets.js\";\n\nfunction dateToUnixTimestamp(dateStr: string | undefined): number | undefined {\n if (!dateStr) return undefined;\n const d = new Date(dateStr);\n if (isNaN(d.getTime())) return undefined;\n return Math.floor(d.getTime() / 1000);\n}\n\nfunction makeSchema(preset: TierMintPreset) {\n return z.object({\n name: z.string().min(1, preset.copy.nameRequired).max(FIELD_LIMITS.name),\n description: z.string().max(FIELD_LIMITS.description).optional(),\n external_url: z\n .string()\n .max(500)\n .refine((v) => !v || v.startsWith(\"http://\") || v.startsWith(\"https://\"), { message: \"Must start with http:// or https://\" })\n .optional(),\n maxSupply: z\n .string()\n .min(1, \"Supply required\")\n .regex(/^\\d+$/, \"Must be a positive integer\")\n .refine((v) => parseInt(v, 10) >= 1, \"Minimum supply is 1\"),\n royalty: z.coerce.number().min(0).max(50).default(2.5),\n licenseType: z.string().min(1),\n commercialUse: z.enum([\"Yes\", \"No\"]),\n derivatives: z.enum([\"Allowed\", \"Not Allowed\", \"Share-Alike\"]),\n attribution: z.enum([\"Required\", \"Not Required\"]),\n geographicScope: z.string(),\n aiPolicy: z.enum([\"Allowed\", \"Not Allowed\", \"Training Only\"]),\n startDate: z.string().optional(),\n endDate: z.string().optional(),\n imageUri: z.string().min(1, preset.copy.imageRequired),\n });\n}\ntype FormValues = z.infer<ReturnType<typeof makeSchema>>;\n\nexport interface TierMintFormProps {\n contract: string;\n preset: TierMintPreset;\n aside?: ReactNode;\n}\n\nexport function TierMintForm({ contract: rawContract, preset, aside }: TierMintFormProps) {\n const app = useMedialaneApp();\n const address = app.walletAddress;\n const contract = normalizeAddress(\"STARKNET\", rawContract);\n const { collection, isLoading } = useCollection(contract);\n const { profile, isLoading: profileLoading } = useCollectionProfile(preset.suggestExternalLink ? contract : undefined);\n const tx = useTransaction();\n const upload = useLaunchpadImageUpload({ successMessage: \"Image uploaded\" });\n const { imagePreview, imageUri, imageUploading, uploadError, fileInputRef, handleImageSelect, clearImage } = upload;\n const [licensingOpen, setLicensingOpen] = useState(false);\n const [advancedOpen, setAdvancedOpen] = useState(false);\n const Icon = preset.icon;\n\n const form = useForm<FormValues>({\n resolver: zodResolver(makeSchema(preset)),\n defaultValues: {\n name: \"\", imageUri: \"\", description: \"\", external_url: \"\",\n maxSupply: \"100\", royalty: 2.5, licenseType: \"CC BY-SA\", commercialUse: \"Yes\",\n derivatives: \"Share-Alike\", attribution: \"Required\", geographicScope: \"Worldwide\", aiPolicy: \"Not Allowed\",\n },\n });\n\n useEffect(() => {\n form.setValue(\"imageUri\", imageUri ?? \"\", { shouldValidate: !!imageUri });\n }, [imageUri, form]);\n\n useEffect(() => {\n if (!preset.suggestExternalLink || profileLoading) return;\n const suggested = profile?.slug ? `https://medialane.io/collection/${profile.slug}` : `https://medialane.io${collectionHref(\"STARKNET\", contract)}`;\n if (!form.getValues(\"external_url\")) form.setValue(\"external_url\", suggested);\n }, [contract, profileLoading, profile?.slug, form, preset.suggestExternalLink]);\n\n const isOwner = !!address && !!collection?.owner && normalizeAddress(\"STARKNET\", address) === normalizeAddress(\"STARKNET\", collection.owner);\n\n const handleAgain = () => {\n tx.reset();\n form.reset({ ...form.getValues(), name: \"\", description: \"\", maxSupply: \"100\" });\n clearImage();\n };\n\n const onSubmit = (values: FormValues) => {\n if (!address) return;\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: imageUri!,\n externalUrl: values.external_url,\n ipType: \"NFT\",\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: address,\n templateTraits: [\n { traitType: \"Type\", value: preset.traitType },\n { traitType: \"Token Standard\", value: \"ERC-1155\" },\n { traitType: \"Max Supply\", value: values.maxSupply },\n { traitType: \"Collection Contract\", value: contract },\n ],\n });\n const tierId = await preset.predictNextId(api, contract);\n const tierRes = await api.intents.create(\"create-tier\", {\n owner: address,\n collection: contract,\n service: preset.service,\n maxSupply: values.maxSupply,\n startTime: dateToUnixTimestamp(values.startDate),\n endTime: dateToUnixTimestamp(values.endDate),\n royaltyBps: Math.round(values.royalty * 100),\n metadataUri: pinned.uri,\n });\n const mintRes = await api.intents.create(\"mint\", {\n owner: address,\n recipient: address,\n collectionContract: contract,\n tokenId: String(tierId),\n amount: values.maxSupply,\n });\n await runIntentsCalls(signer, [tierRes, mintRes]);\n });\n };\n\n const gateProps = { icon: Icon, iconClassName: preset.iconClass, title: preset.signedOut.title, description: preset.signedOut.description };\n const inputId = `mint-${preset.service}-file-input`;\n const busy = tx.phase !== \"idle\" || imageUploading;\n\n if (isLoading) {\n return (\n <WalletRequired {...gateProps}>\n <div className=\"max-w-5xl mx-auto px-4 pt-10 pb-16 space-y-4\">\n <Skeleton className=\"h-6 w-24\" />\n <Skeleton className=\"h-32 w-full rounded-2xl\" />\n <Skeleton className=\"h-64 w-full rounded-2xl\" />\n </div>\n </WalletRequired>\n );\n }\n\n if (!collection) {\n return (\n <WalletRequired {...gateProps}>\n <div className=\"max-w-xl mx-auto px-4 pt-24 pb-8 text-center space-y-4\">\n <AlertCircle className=\"h-10 w-10 text-muted-foreground/20 mx-auto\" />\n <p className=\"text-muted-foreground\">Collection not found.</p>\n <Button asChild variant=\"outline\" size=\"sm\"><Link href={preset.back.href}>{preset.back.label}</Link></Button>\n </div>\n </WalletRequired>\n );\n }\n\n if (!isOwner) {\n return (\n <WalletRequired {...gateProps}>\n <div className=\"max-w-xl mx-auto px-4 pt-24 pb-8 text-center space-y-4\">\n <Icon className=\"h-10 w-10 text-muted-foreground/20 mx-auto\" />\n <p className=\"text-muted-foreground\">{preset.notOwner.message}</p>\n <Button asChild variant=\"outline\" size=\"sm\"><Link href={preset.notOwner.back.href}>{preset.notOwner.back.label}</Link></Button>\n </div>\n </WalletRequired>\n );\n }\n\n return (\n <WalletRequired {...gateProps}>\n <TransactionDialog tx={tx} title={preset.dialog.title} workingLabel={preset.dialog.workingLabel} firstStepLabel={preset.dialog.firstStepLabel}>\n <TransactionSuccess\n name={form.getValues(\"name\")}\n image={imagePreview}\n title={preset.success.title}\n description={preset.success.description}\n actions={[{ href: collectionHref(\"STARKNET\", contract), label: \"View collection\" }, { label: preset.success.againLabel, onClick: handleAgain }]}\n >\n <RewardEarned actionType=\"launch_launchpad\" />\n </TransactionSuccess>\n </TransactionDialog>\n\n <ClaimRouteShell\n icon={<Icon className=\"h-4 w-4 text-white\" />}\n title={preset.shell.title}\n subtitle={preset.shell.subtitle(collection.name ?? null)}\n aside={\n <>\n <MedialaneCollectionCard\n image={imagePreview}\n name={form.watch(\"name\")}\n collection={collection.symbol || preset.cardFallbackSymbol}\n creator={address ? `${address.slice(0, 6)}…${address.slice(-4)}` : undefined}\n creatorHref={address ? profileHref({ address }) : undefined}\n />\n {aside}\n </>\n }\n >\n <Form {...form}>\n <form onSubmit={form.handleSubmit(onSubmit)} className=\"space-y-5\">\n <div className=\"space-y-2\">\n <p className=\"text-sm font-medium\">{preset.copy.imageHeading} <span className=\"text-destructive\">*</span></p>\n <div className=\"flex items-center gap-4\">\n <div\n role=\"button\"\n tabIndex={0}\n onClick={() => !imageUploading && fileInputRef.current?.click()}\n onKeyDown={(e) => { if (e.key === \"Enter\") fileInputRef.current?.click(); }}\n className={cn(\"relative h-20 w-20 rounded-2xl border-2 border-dashed border-border bg-muted flex items-center justify-center overflow-hidden shrink-0 cursor-pointer transition-colors\", preset.hoverBorderClass)}\n >\n {imagePreview ? <Image src={imagePreview} alt={preset.copy.imageAlt} fill unoptimized className=\"object-cover\" /> : <ImagePlus className=\"h-6 w-6 text-muted-foreground\" />}\n {imageUploading && <div className=\"absolute inset-0 bg-background/70 flex items-center justify-center\"><Loader2 className=\"h-4 w-4 animate-spin\" /></div>}\n </div>\n <div className=\"space-y-1.5\">\n <input id={inputId} ref={fileInputRef} type=\"file\" accept={acceptFor(\"image\")} className=\"hidden\" onChange={(e) => { const f = e.target.files?.[0]; if (f) void handleImageSelect(f); }} />\n <Button type=\"button\" variant=\"outline\" size=\"sm\" disabled={imageUploading} onClick={() => fileInputRef.current?.click()}>\n {imageUploading ? <><Loader2 className=\"h-3.5 w-3.5 mr-1.5 animate-spin\" />Uploading…</> : imagePreview ? \"Change\" : \"Upload image\"}\n </Button>\n {imagePreview && (\n <button type=\"button\" onClick={clearImage} className=\"flex items-center gap-1 text-xs text-muted-foreground hover:text-destructive transition-colors\">\n <X className=\"h-3 w-3\" /> Remove\n </button>\n )}\n <p className=\"text-xs text-muted-foreground\">{imageUri ? <span className={preset.uploadedClass}>✓ Uploaded</span> : \"JPG, PNG, SVG or WebP\"}</p>\n </div>\n </div>\n </div>\n\n {(uploadError || form.formState.errors.imageUri) && (\n <p role=\"alert\" className=\"text-sm text-destructive\">{uploadError ?? form.formState.errors.imageUri?.message}</p>\n )}\n\n <FormField control={form.control} name=\"name\" render={({ field }) => (\n <FormItem>\n <FormLabel>{preset.copy.nameLabel} <span className=\"text-destructive\">*</span></FormLabel>\n <FormControl><Input placeholder={preset.copy.namePlaceholder} {...field} /></FormControl>\n <FormMessage />\n </FormItem>\n )} />\n\n <FormField control={form.control} name=\"description\" render={({ field }) => (\n <FormItem>\n <FormLabel>Description <span className=\"text-muted-foreground font-normal\">(optional)</span></FormLabel>\n <FormControl><Textarea placeholder={preset.copy.descriptionPlaceholder} rows={3} {...field} /></FormControl>\n <FormMessage />\n </FormItem>\n )} />\n\n <FormField control={form.control} name=\"external_url\" render={({ field }) => (\n <FormItem>\n <FormLabel>External link <span className=\"text-muted-foreground font-normal\">(optional)</span></FormLabel>\n <FormControl><Input placeholder=\"https://yourwebsite.com\" {...field} /></FormControl>\n <FormMessage />\n </FormItem>\n )} />\n\n <Collapsible open={licensingOpen} onOpenChange={setLicensingOpen}>\n <div className=\"sm:overflow-hidden sm:rounded-xl sm:border sm:border-border\">\n <CollapsibleTrigger asChild>\n <button type=\"button\" className=\"w-full flex items-center justify-between px-0 py-3 sm:px-5 sm:py-4 hover:bg-muted/30 transition-colors\">\n <div className=\"flex items-center gap-2\">\n <ShieldCheck className=\"h-4 w-4 text-primary\" />\n <span className=\"text-sm font-semibold\">Licensing Terms</span>\n <span className=\"text-xs text-muted-foreground font-normal\">Optional · Berne Convention</span>\n </div>\n <ChevronDown className={cn(\"h-4 w-4 text-muted-foreground transition-transform\", licensingOpen && \"rotate-180\")} />\n </button>\n </CollapsibleTrigger>\n <CollapsibleContent>\n <div className=\"px-0 pb-4 sm:px-5 sm:pb-5 space-y-4 border-t border-border/60 pt-4\">\n <FormField control={form.control} name=\"licenseType\" render={({ field }) => (\n <FormItem>\n <FormLabel>License</FormLabel>\n <Select value={field.value} onValueChange={(value) => {\n form.setValue(\"licenseType\", value);\n const def = LICENSE_TYPES.find((l) => l.value === value);\n if (def) {\n form.setValue(\"commercialUse\", def.commercialUse);\n form.setValue(\"derivatives\", def.derivatives);\n form.setValue(\"attribution\", def.attribution);\n }\n }}>\n <FormControl><SelectTrigger><SelectValue /></SelectTrigger></FormControl>\n <SelectContent>{LICENSE_TYPES.map((l) => <SelectItem key={l.value} value={l.value}>{l.label}</SelectItem>)}</SelectContent>\n </Select>\n {(() => { const def = LICENSE_TYPES.find((l) => l.value === field.value); return def ? <p className=\"text-xs text-muted-foreground mt-1\">{def.description}</p> : null; })()}\n <FormMessage />\n </FormItem>\n )} />\n <FormField control={form.control} name=\"commercialUse\" render={({ field }) => (\n <FormItem><FormLabel>Commercial Use</FormLabel><ToggleGroup value={field.value} options={[\"Yes\", \"No\"]} onChange={field.onChange} /></FormItem>\n )} />\n <FormField control={form.control} name=\"derivatives\" render={({ field }) => (\n <FormItem><FormLabel>Derivatives</FormLabel><ToggleGroup value={field.value} options={DERIVATIVES_OPTIONS} onChange={field.onChange} /></FormItem>\n )} />\n <FormField control={form.control} name=\"attribution\" render={({ field }) => (\n <FormItem><FormLabel>Attribution</FormLabel><ToggleGroup value={field.value} options={[\"Required\", \"Not Required\"]} onChange={field.onChange} /></FormItem>\n )} />\n <Collapsible open={advancedOpen} onOpenChange={setAdvancedOpen}>\n <CollapsibleTrigger asChild>\n <button type=\"button\" className=\"flex items-center gap-1.5 text-xs text-muted-foreground hover:text-foreground transition-colors\">\n <ChevronDown className={cn(\"h-3.5 w-3.5 transition-transform\", advancedOpen && \"rotate-180\")} />\n Advanced options\n </button>\n </CollapsibleTrigger>\n <CollapsibleContent className=\"space-y-4 pt-3\">\n <FormField control={form.control} name=\"geographicScope\" render={({ field }) => (\n <FormItem>\n <FormLabel>Territory</FormLabel>\n <FormControl><Input placeholder=\"Worldwide\" {...field} /></FormControl>\n </FormItem>\n )} />\n <FormField control={form.control} name=\"aiPolicy\" render={({ field }) => (\n <FormItem><FormLabel>AI & Data Mining</FormLabel><ToggleGroup value={field.value} options={AI_POLICIES} onChange={field.onChange} /></FormItem>\n )} />\n </CollapsibleContent>\n </Collapsible>\n </div>\n </CollapsibleContent>\n </div>\n </Collapsible>\n\n <div className=\"grid grid-cols-2 gap-4\">\n <FormField control={form.control} name=\"maxSupply\" render={({ field }) => (\n <FormItem>\n <FormLabel>Supply <span className=\"text-destructive\">*</span></FormLabel>\n <FormControl><Input type=\"number\" min=\"1\" placeholder=\"100\" {...field} /></FormControl>\n <FormDescription>Minted to your account.</FormDescription>\n <FormMessage />\n </FormItem>\n )} />\n <FormField control={form.control} name=\"royalty\" render={({ field }) => (\n <FormItem>\n <FormLabel>Royalty % (0–50)</FormLabel>\n <FormControl><Input type=\"number\" min={0} max={50} step={0.5} placeholder=\"2.5\" {...field} onChange={(e) => field.onChange(parseFloat(e.target.value) || 0)} /></FormControl>\n <FormDescription>On secondary sales.</FormDescription>\n <FormMessage />\n </FormItem>\n )} />\n </div>\n\n <div className=\"grid grid-cols-2 gap-4\">\n <FormField control={form.control} name=\"startDate\" render={({ field }) => (\n <FormItem>\n <FormLabel>Valid from <span className=\"text-muted-foreground font-normal\">(optional)</span></FormLabel>\n <FormControl><Input type=\"datetime-local\" {...field} /></FormControl>\n <FormDescription>You can mint and sell before it opens.</FormDescription>\n <FormMessage />\n </FormItem>\n )} />\n <FormField control={form.control} name=\"endDate\" render={({ field }) => (\n <FormItem>\n <FormLabel>Valid until <span className=\"text-muted-foreground font-normal\">(optional)</span></FormLabel>\n <FormControl><Input type=\"datetime-local\" {...field} /></FormControl>\n <FormDescription>{preset.copy.validUntilHint}</FormDescription>\n <FormMessage />\n </FormItem>\n )} />\n </div>\n\n <button\n type=\"submit\"\n disabled={busy}\n className={`w-full h-12 text-base font-semibold text-white rounded-xl flex items-center justify-center gap-2 transition-all hover:brightness-110 active:scale-[0.98] ${preset.buttonClass} ${busy ? \"opacity-40 pointer-events-none\" : \"\"}`}\n >\n <Icon className=\"h-4 w-4 mr-2\" />\n {preset.copy.submit}\n </button>\n </form>\n </Form>\n </ClaimRouteShell>\n </WalletRequired>\n );\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../src/components/launchpad/tier-mint-form.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 * as z from \"zod\";\nimport { AlertCircle, ChevronDown, ImagePlus, Loader2, ShieldCheck, X } from \"lucide-react\";\nimport { collectionHref, normalizeAddress, profileHref } from \"@medialane/sdk\";\nimport { acceptFor } from \"../../utils/upload-limits.js\";\nimport { FIELD_LIMITS } from \"../../utils/field-limits.js\";\nimport Image from \"../image.js\";\nimport Link from \"../link.js\";\nimport { Button } from \"../button.js\";\nimport { Input } from \"../input.js\";\nimport { Textarea } from \"../textarea.js\";\nimport { Skeleton } from \"../skeleton.js\";\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"../select.js\";\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from \"../collapsible.js\";\nimport { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage } from \"../form.js\";\nimport { ToggleGroup } from \"../create-form-primitives.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 { AI_POLICIES, DERIVATIVES_OPTIONS, LICENSE_TYPES } from \"../../data/ip.js\";\nimport { cn } from \"../../utils/cn.js\";\nimport { runIntentsCalls } from \"../../utils/run-intent-calls.js\";\nimport { pinAssetMetadata } from \"../../utils/ipfs-upload.js\";\nimport { useCollection } from \"../../utils/use-collections.js\";\nimport { useCollectionProfile } from \"../../utils/use-profiles.js\";\nimport { useTransaction } from \"../../utils/use-transaction.js\";\nimport { useLaunchpadImageUpload } from \"../../utils/use-launchpad-image-upload.js\";\nimport type { TierMintPreset } from \"./tier-mint-presets.js\";\n\nfunction dateToUnixTimestamp(dateStr: string | undefined): number | undefined {\n if (!dateStr) return undefined;\n const d = new Date(dateStr);\n if (isNaN(d.getTime())) return undefined;\n return Math.floor(d.getTime() / 1000);\n}\n\nfunction makeSchema(preset: TierMintPreset) {\n return z.object({\n name: z.string().min(1, preset.copy.nameRequired).max(FIELD_LIMITS.name),\n description: z.string().max(FIELD_LIMITS.description).optional(),\n external_url: z\n .string()\n .max(500)\n .refine((v) => !v || v.startsWith(\"http://\") || v.startsWith(\"https://\"), { message: \"Must start with http:// or https://\" })\n .optional(),\n maxSupply: z\n .string()\n .min(1, \"Supply required\")\n .regex(/^\\d+$/, \"Must be a positive integer\")\n .refine((v) => parseInt(v, 10) >= 1, \"Minimum supply is 1\"),\n royalty: z.coerce.number().min(0).max(50).default(2.5),\n licenseType: z.string().min(1),\n commercialUse: z.enum([\"Yes\", \"No\"]),\n derivatives: z.enum([\"Allowed\", \"Not Allowed\", \"Share-Alike\"]),\n attribution: z.enum([\"Required\", \"Not Required\"]),\n geographicScope: z.string(),\n aiPolicy: z.enum([\"Allowed\", \"Not Allowed\", \"Training Only\"]),\n startDate: z.string().optional(),\n endDate: z.string().optional(),\n imageUri: z.string().min(1, preset.copy.imageRequired),\n });\n}\ntype FormValues = z.infer<ReturnType<typeof makeSchema>>;\n\nexport interface TierMintFormProps {\n contract: string;\n preset: TierMintPreset;\n aside?: ReactNode;\n}\n\nexport function TierMintForm({ contract: rawContract, preset, aside }: TierMintFormProps) {\n const app = useMedialaneApp();\n const address = app.walletAddress;\n const contract = normalizeAddress(\"STARKNET\", rawContract);\n const { collection, isLoading } = useCollection(contract);\n const { profile, isLoading: profileLoading } = useCollectionProfile(preset.suggestExternalLink ? contract : undefined);\n const tx = useTransaction();\n const upload = useLaunchpadImageUpload({ successMessage: \"Image uploaded\" });\n const { imagePreview, imageUri, imageUploading, uploadError, fileInputRef, handleImageSelect, clearImage } = upload;\n const [licensingOpen, setLicensingOpen] = useState(false);\n const [advancedOpen, setAdvancedOpen] = useState(false);\n const Icon = preset.icon;\n\n const form = useForm<FormValues>({\n resolver: zodResolver(makeSchema(preset)),\n defaultValues: {\n name: \"\", imageUri: \"\", description: \"\", external_url: \"\",\n maxSupply: \"100\", royalty: 2.5, licenseType: \"CC BY-SA\", commercialUse: \"Yes\",\n derivatives: \"Share-Alike\", attribution: \"Required\", geographicScope: \"Worldwide\", aiPolicy: \"Allowed\",\n },\n });\n\n useEffect(() => {\n form.setValue(\"imageUri\", imageUri ?? \"\", { shouldValidate: !!imageUri });\n }, [imageUri, form]);\n\n useEffect(() => {\n if (!preset.suggestExternalLink || profileLoading) return;\n const suggested = profile?.slug ? `https://medialane.io/collection/${profile.slug}` : `https://medialane.io${collectionHref(\"STARKNET\", contract)}`;\n if (!form.getValues(\"external_url\")) form.setValue(\"external_url\", suggested);\n }, [contract, profileLoading, profile?.slug, form, preset.suggestExternalLink]);\n\n const isOwner = !!address && !!collection?.owner && normalizeAddress(\"STARKNET\", address) === normalizeAddress(\"STARKNET\", collection.owner);\n\n const handleAgain = () => {\n tx.reset();\n form.reset({ ...form.getValues(), name: \"\", description: \"\", maxSupply: \"100\" });\n clearImage();\n };\n\n const onSubmit = (values: FormValues) => {\n if (!address) return;\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: imageUri!,\n externalUrl: values.external_url,\n ipType: \"NFT\",\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: address,\n templateTraits: [\n { traitType: \"Type\", value: preset.traitType },\n { traitType: \"Token Standard\", value: \"ERC-1155\" },\n { traitType: \"Max Supply\", value: values.maxSupply },\n { traitType: \"Collection Contract\", value: contract },\n ],\n });\n const tierId = await preset.predictNextId(api, contract);\n const tierRes = await api.intents.create(\"create-tier\", {\n owner: address,\n collection: contract,\n service: preset.service,\n maxSupply: values.maxSupply,\n startTime: dateToUnixTimestamp(values.startDate),\n endTime: dateToUnixTimestamp(values.endDate),\n royaltyBps: Math.round(values.royalty * 100),\n metadataUri: pinned.uri,\n });\n const mintRes = await api.intents.create(\"mint\", {\n owner: address,\n recipient: address,\n collectionContract: contract,\n tokenId: String(tierId),\n amount: values.maxSupply,\n });\n await runIntentsCalls(signer, [tierRes, mintRes]);\n });\n };\n\n const gateProps = { icon: Icon, iconClassName: preset.iconClass, title: preset.signedOut.title, description: preset.signedOut.description };\n const inputId = `mint-${preset.service}-file-input`;\n const busy = tx.phase !== \"idle\" || imageUploading;\n\n if (isLoading) {\n return (\n <WalletRequired {...gateProps}>\n <div className=\"max-w-5xl mx-auto px-4 pt-10 pb-16 space-y-4\">\n <Skeleton className=\"h-6 w-24\" />\n <Skeleton className=\"h-32 w-full rounded-2xl\" />\n <Skeleton className=\"h-64 w-full rounded-2xl\" />\n </div>\n </WalletRequired>\n );\n }\n\n if (!collection) {\n return (\n <WalletRequired {...gateProps}>\n <div className=\"max-w-xl mx-auto px-4 pt-24 pb-8 text-center space-y-4\">\n <AlertCircle className=\"h-10 w-10 text-muted-foreground/20 mx-auto\" />\n <p className=\"text-muted-foreground\">Collection not found.</p>\n <Button asChild variant=\"outline\" size=\"sm\"><Link href={preset.back.href}>{preset.back.label}</Link></Button>\n </div>\n </WalletRequired>\n );\n }\n\n if (!isOwner) {\n return (\n <WalletRequired {...gateProps}>\n <div className=\"max-w-xl mx-auto px-4 pt-24 pb-8 text-center space-y-4\">\n <Icon className=\"h-10 w-10 text-muted-foreground/20 mx-auto\" />\n <p className=\"text-muted-foreground\">{preset.notOwner.message}</p>\n <Button asChild variant=\"outline\" size=\"sm\"><Link href={preset.notOwner.back.href}>{preset.notOwner.back.label}</Link></Button>\n </div>\n </WalletRequired>\n );\n }\n\n return (\n <WalletRequired {...gateProps}>\n <TransactionDialog tx={tx} title={preset.dialog.title} workingLabel={preset.dialog.workingLabel} firstStepLabel={preset.dialog.firstStepLabel}>\n <TransactionSuccess\n name={form.getValues(\"name\")}\n image={imagePreview}\n title={preset.success.title}\n description={preset.success.description}\n actions={[{ href: collectionHref(\"STARKNET\", contract), label: \"View collection\" }, { label: preset.success.againLabel, onClick: handleAgain }]}\n >\n <RewardEarned actionType=\"launch_launchpad\" />\n </TransactionSuccess>\n </TransactionDialog>\n\n <ClaimRouteShell\n icon={<Icon className=\"h-4 w-4 text-white\" />}\n title={preset.shell.title}\n subtitle={preset.shell.subtitle(collection.name ?? null)}\n aside={\n <>\n <MedialaneCollectionCard\n image={imagePreview}\n name={form.watch(\"name\")}\n collection={collection.symbol || preset.cardFallbackSymbol}\n creator={address ? `${address.slice(0, 6)}…${address.slice(-4)}` : undefined}\n creatorHref={address ? profileHref({ address }) : undefined}\n />\n {aside}\n </>\n }\n >\n <Form {...form}>\n <form onSubmit={form.handleSubmit(onSubmit)} className=\"space-y-5\">\n <div className=\"space-y-2\">\n <p className=\"text-sm font-medium\">{preset.copy.imageHeading} <span className=\"text-destructive\">*</span></p>\n <div className=\"flex items-center gap-4\">\n <div\n role=\"button\"\n tabIndex={0}\n onClick={() => !imageUploading && fileInputRef.current?.click()}\n onKeyDown={(e) => { if (e.key === \"Enter\") fileInputRef.current?.click(); }}\n className={cn(\"relative h-20 w-20 rounded-2xl border-2 border-dashed border-border bg-muted flex items-center justify-center overflow-hidden shrink-0 cursor-pointer transition-colors\", preset.hoverBorderClass)}\n >\n {imagePreview ? <Image src={imagePreview} alt={preset.copy.imageAlt} fill unoptimized className=\"object-cover\" /> : <ImagePlus className=\"h-6 w-6 text-muted-foreground\" />}\n {imageUploading && <div className=\"absolute inset-0 bg-background/70 flex items-center justify-center\"><Loader2 className=\"h-4 w-4 animate-spin\" /></div>}\n </div>\n <div className=\"space-y-1.5\">\n <input id={inputId} ref={fileInputRef} type=\"file\" accept={acceptFor(\"image\")} className=\"hidden\" onChange={(e) => { const f = e.target.files?.[0]; if (f) void handleImageSelect(f); }} />\n <Button type=\"button\" variant=\"outline\" size=\"sm\" disabled={imageUploading} onClick={() => fileInputRef.current?.click()}>\n {imageUploading ? <><Loader2 className=\"h-3.5 w-3.5 mr-1.5 animate-spin\" />Uploading…</> : imagePreview ? \"Change\" : \"Upload image\"}\n </Button>\n {imagePreview && (\n <button type=\"button\" onClick={clearImage} className=\"flex items-center gap-1 text-xs text-muted-foreground hover:text-destructive transition-colors\">\n <X className=\"h-3 w-3\" /> Remove\n </button>\n )}\n <p className=\"text-xs text-muted-foreground\">{imageUri ? <span className={preset.uploadedClass}>✓ Uploaded</span> : \"JPG, PNG, SVG or WebP\"}</p>\n </div>\n </div>\n </div>\n\n {(uploadError || form.formState.errors.imageUri) && (\n <p role=\"alert\" className=\"text-sm text-destructive\">{uploadError ?? form.formState.errors.imageUri?.message}</p>\n )}\n\n <FormField control={form.control} name=\"name\" render={({ field }) => (\n <FormItem>\n <FormLabel>{preset.copy.nameLabel} <span className=\"text-destructive\">*</span></FormLabel>\n <FormControl><Input placeholder={preset.copy.namePlaceholder} {...field} /></FormControl>\n <FormMessage />\n </FormItem>\n )} />\n\n <FormField control={form.control} name=\"description\" render={({ field }) => (\n <FormItem>\n <FormLabel>Description <span className=\"text-muted-foreground font-normal\">(optional)</span></FormLabel>\n <FormControl><Textarea placeholder={preset.copy.descriptionPlaceholder} rows={3} {...field} /></FormControl>\n <FormMessage />\n </FormItem>\n )} />\n\n <FormField control={form.control} name=\"external_url\" render={({ field }) => (\n <FormItem>\n <FormLabel>External link <span className=\"text-muted-foreground font-normal\">(optional)</span></FormLabel>\n <FormControl><Input placeholder=\"https://yourwebsite.com\" {...field} /></FormControl>\n <FormMessage />\n </FormItem>\n )} />\n\n <Collapsible open={licensingOpen} onOpenChange={setLicensingOpen}>\n <div className=\"sm:overflow-hidden sm:rounded-xl sm:border sm:border-border\">\n <CollapsibleTrigger asChild>\n <button type=\"button\" className=\"w-full flex items-center justify-between px-0 py-3 sm:px-5 sm:py-4 hover:bg-muted/30 transition-colors\">\n <div className=\"flex items-center gap-2\">\n <ShieldCheck className=\"h-4 w-4 text-primary\" />\n <span className=\"text-sm font-semibold\">Licensing Terms</span>\n <span className=\"text-xs text-muted-foreground font-normal\">Optional · Berne Convention</span>\n </div>\n <ChevronDown className={cn(\"h-4 w-4 text-muted-foreground transition-transform\", licensingOpen && \"rotate-180\")} />\n </button>\n </CollapsibleTrigger>\n <CollapsibleContent>\n <div className=\"px-0 pb-4 sm:px-5 sm:pb-5 space-y-4 border-t border-border/60 pt-4\">\n <FormField control={form.control} name=\"licenseType\" render={({ field }) => (\n <FormItem>\n <FormLabel>License</FormLabel>\n <Select value={field.value} onValueChange={(value) => {\n form.setValue(\"licenseType\", value);\n const def = LICENSE_TYPES.find((l) => l.value === value);\n if (def) {\n form.setValue(\"commercialUse\", def.commercialUse);\n form.setValue(\"derivatives\", def.derivatives);\n form.setValue(\"attribution\", def.attribution);\n }\n }}>\n <FormControl><SelectTrigger><SelectValue /></SelectTrigger></FormControl>\n <SelectContent>{LICENSE_TYPES.map((l) => <SelectItem key={l.value} value={l.value}>{l.label}</SelectItem>)}</SelectContent>\n </Select>\n {(() => { const def = LICENSE_TYPES.find((l) => l.value === field.value); return def ? <p className=\"text-xs text-muted-foreground mt-1\">{def.description}</p> : null; })()}\n <FormMessage />\n </FormItem>\n )} />\n <FormField control={form.control} name=\"commercialUse\" render={({ field }) => (\n <FormItem><FormLabel>Commercial Use</FormLabel><ToggleGroup value={field.value} options={[\"Yes\", \"No\"]} onChange={field.onChange} /></FormItem>\n )} />\n <FormField control={form.control} name=\"derivatives\" render={({ field }) => (\n <FormItem><FormLabel>Derivatives</FormLabel><ToggleGroup value={field.value} options={DERIVATIVES_OPTIONS} onChange={field.onChange} /></FormItem>\n )} />\n <FormField control={form.control} name=\"attribution\" render={({ field }) => (\n <FormItem><FormLabel>Attribution</FormLabel><ToggleGroup value={field.value} options={[\"Required\", \"Not Required\"]} onChange={field.onChange} /></FormItem>\n )} />\n <Collapsible open={advancedOpen} onOpenChange={setAdvancedOpen}>\n <CollapsibleTrigger asChild>\n <button type=\"button\" className=\"flex items-center gap-1.5 text-xs text-muted-foreground hover:text-foreground transition-colors\">\n <ChevronDown className={cn(\"h-3.5 w-3.5 transition-transform\", advancedOpen && \"rotate-180\")} />\n Advanced options\n </button>\n </CollapsibleTrigger>\n <CollapsibleContent className=\"space-y-4 pt-3\">\n <FormField control={form.control} name=\"geographicScope\" render={({ field }) => (\n <FormItem>\n <FormLabel>Territory</FormLabel>\n <FormControl><Input placeholder=\"Worldwide\" {...field} /></FormControl>\n </FormItem>\n )} />\n <FormField control={form.control} name=\"aiPolicy\" render={({ field }) => (\n <FormItem><FormLabel>AI & Data Mining</FormLabel><ToggleGroup value={field.value} options={AI_POLICIES} onChange={field.onChange} /></FormItem>\n )} />\n </CollapsibleContent>\n </Collapsible>\n </div>\n </CollapsibleContent>\n </div>\n </Collapsible>\n\n <div className=\"grid grid-cols-2 gap-4\">\n <FormField control={form.control} name=\"maxSupply\" render={({ field }) => (\n <FormItem>\n <FormLabel>Supply <span className=\"text-destructive\">*</span></FormLabel>\n <FormControl><Input type=\"number\" min=\"1\" placeholder=\"100\" {...field} /></FormControl>\n <FormDescription>Minted to your account.</FormDescription>\n <FormMessage />\n </FormItem>\n )} />\n <FormField control={form.control} name=\"royalty\" render={({ field }) => (\n <FormItem>\n <FormLabel>Royalty % (0–50)</FormLabel>\n <FormControl><Input type=\"number\" min={0} max={50} step={0.5} placeholder=\"2.5\" {...field} onChange={(e) => field.onChange(parseFloat(e.target.value) || 0)} /></FormControl>\n <FormDescription>On secondary sales.</FormDescription>\n <FormMessage />\n </FormItem>\n )} />\n </div>\n\n <div className=\"grid grid-cols-2 gap-4\">\n <FormField control={form.control} name=\"startDate\" render={({ field }) => (\n <FormItem>\n <FormLabel>Valid from <span className=\"text-muted-foreground font-normal\">(optional)</span></FormLabel>\n <FormControl><Input type=\"datetime-local\" {...field} /></FormControl>\n <FormDescription>You can mint and sell before it opens.</FormDescription>\n <FormMessage />\n </FormItem>\n )} />\n <FormField control={form.control} name=\"endDate\" render={({ field }) => (\n <FormItem>\n <FormLabel>Valid until <span className=\"text-muted-foreground font-normal\">(optional)</span></FormLabel>\n <FormControl><Input type=\"datetime-local\" {...field} /></FormControl>\n <FormDescription>{preset.copy.validUntilHint}</FormDescription>\n <FormMessage />\n </FormItem>\n )} />\n </div>\n\n <button\n type=\"submit\"\n disabled={busy}\n className={`w-full h-12 text-base font-semibold text-white rounded-xl flex items-center justify-center gap-2 transition-all hover:brightness-110 active:scale-[0.98] ${preset.buttonClass} ${busy ? \"opacity-40 pointer-events-none\" : \"\"}`}\n >\n <Icon className=\"h-4 w-4 mr-2\" />\n {preset.copy.submit}\n </button>\n </form>\n </Form>\n </ClaimRouteShell>\n </WalletRequired>\n );\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/medialane-app.tsx"],"sourcesContent":["\"use client\";\n\nimport { createContext, useContext, type ComponentType, type ElementType, type ReactNode } from \"react\";\nimport type { MedialaneClient } from \"@medialane/sdk/starknet\";\nimport type { FastMintSigner } from \"./fast-mint/types.js\";\nimport type { ApiToken } from \"@medialane/sdk\";\nimport type { ImageResolver } from \"../utils/ipfs.js\";\n\nexport type AssetRef = Pick<ApiToken, \"chain\" | \"contractAddress\" | \"tokenId\">;\n\nexport interface CompanionApp {\n title: string;\n description: string;\n icon: ElementType;\n origin: string;\n}\n\nexport type ReportTarget =\n | { type: \"TOKEN\"; contract: string; tokenId: string; name?: string }\n | { type: \"COLLECTION\"; contract: string; name?: string }\n | { type: \"CREATOR\"; address: string; name?: string }\n | { type: \"COMMENT\"; commentId: string };\n\nexport type ReportDialogSlot = ComponentType<{ open: boolean; onOpenChange: (open: boolean) => void; target: ReportTarget }>;\n\nexport interface MedialaneApp {\n getClient: () => MedialaneClient;\n getSigner: () => Promise<FastMintSigner> | FastMintSigner;\n walletAddress: string | null;\n walletLoading?: boolean;\n onRequireWallet: () => void;\n releaseSigner?: () => void;\n ensureSignedIn?: () => Promise<void>;\n connectLabel?: string;\n
|
|
1
|
+
{"version":3,"sources":["../../src/components/medialane-app.tsx"],"sourcesContent":["\"use client\";\n\nimport { createContext, useContext, type ComponentType, type ElementType, type ReactNode } from \"react\";\nimport type { MedialaneClient } from \"@medialane/sdk/starknet\";\nimport type { FastMintSigner } from \"./fast-mint/types.js\";\nimport type { ApiToken } from \"@medialane/sdk\";\nimport type { ImageResolver } from \"../utils/ipfs.js\";\n\nexport type AssetRef = Pick<ApiToken, \"chain\" | \"contractAddress\" | \"tokenId\">;\n\nexport interface CompanionApp {\n title: string;\n description: string;\n icon: ElementType;\n origin: string;\n}\n\nexport type ReportTarget =\n | { type: \"TOKEN\"; contract: string; tokenId: string; name?: string }\n | { type: \"COLLECTION\"; contract: string; name?: string }\n | { type: \"CREATOR\"; address: string; name?: string }\n | { type: \"COMMENT\"; commentId: string };\n\nexport type ReportDialogSlot = ComponentType<{ open: boolean; onOpenChange: (open: boolean) => void; target: ReportTarget }>;\n\nexport interface MedialaneApp {\n getClient: () => MedialaneClient;\n getSigner: () => Promise<FastMintSigner> | FastMintSigner;\n walletAddress: string | null;\n walletLoading?: boolean;\n onRequireWallet: () => void;\n releaseSigner?: () => void;\n ensureSignedIn?: () => Promise<void>;\n connectLabel?: string;\n companion?: CompanionApp;\n ReportDialog?: ReportDialogSlot;\n resolveImage?: ImageResolver;\n}\n\nexport const MedialaneAppContext = createContext<MedialaneApp | null>(null);\n\nexport function MedialaneAppProvider({ value, children }: { value: MedialaneApp; children: ReactNode }) {\n return <MedialaneAppContext.Provider value={value}>{children}</MedialaneAppContext.Provider>;\n}\n\nexport function useMedialaneApp(): MedialaneApp {\n const app = useContext(MedialaneAppContext);\n if (!app) throw new Error(\"MedialaneAppProvider missing\");\n return app;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA0CS;AAxCT,mBAAgG;AAqCzF,MAAM,0BAAsB,4BAAmC,IAAI;AAEnE,SAAS,qBAAqB,EAAE,OAAO,SAAS,GAAiD;AACtG,SAAO,4CAAC,oBAAoB,UAApB,EAA6B,OAAe,UAAS;AAC/D;AAEO,SAAS,kBAAgC;AAC9C,QAAM,UAAM,yBAAW,mBAAmB;AAC1C,MAAI,CAAC,IAAK,OAAM,IAAI,MAAM,8BAA8B;AACxD,SAAO;AACT;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/medialane-app.tsx"],"sourcesContent":["\"use client\";\n\nimport { createContext, useContext, type ComponentType, type ElementType, type ReactNode } from \"react\";\nimport type { MedialaneClient } from \"@medialane/sdk/starknet\";\nimport type { FastMintSigner } from \"./fast-mint/types.js\";\nimport type { ApiToken } from \"@medialane/sdk\";\nimport type { ImageResolver } from \"../utils/ipfs.js\";\n\nexport type AssetRef = Pick<ApiToken, \"chain\" | \"contractAddress\" | \"tokenId\">;\n\nexport interface CompanionApp {\n title: string;\n description: string;\n icon: ElementType;\n origin: string;\n}\n\nexport type ReportTarget =\n | { type: \"TOKEN\"; contract: string; tokenId: string; name?: string }\n | { type: \"COLLECTION\"; contract: string; name?: string }\n | { type: \"CREATOR\"; address: string; name?: string }\n | { type: \"COMMENT\"; commentId: string };\n\nexport type ReportDialogSlot = ComponentType<{ open: boolean; onOpenChange: (open: boolean) => void; target: ReportTarget }>;\n\nexport interface MedialaneApp {\n getClient: () => MedialaneClient;\n getSigner: () => Promise<FastMintSigner> | FastMintSigner;\n walletAddress: string | null;\n walletLoading?: boolean;\n onRequireWallet: () => void;\n releaseSigner?: () => void;\n ensureSignedIn?: () => Promise<void>;\n connectLabel?: string;\n
|
|
1
|
+
{"version":3,"sources":["../../src/components/medialane-app.tsx"],"sourcesContent":["\"use client\";\n\nimport { createContext, useContext, type ComponentType, type ElementType, type ReactNode } from \"react\";\nimport type { MedialaneClient } from \"@medialane/sdk/starknet\";\nimport type { FastMintSigner } from \"./fast-mint/types.js\";\nimport type { ApiToken } from \"@medialane/sdk\";\nimport type { ImageResolver } from \"../utils/ipfs.js\";\n\nexport type AssetRef = Pick<ApiToken, \"chain\" | \"contractAddress\" | \"tokenId\">;\n\nexport interface CompanionApp {\n title: string;\n description: string;\n icon: ElementType;\n origin: string;\n}\n\nexport type ReportTarget =\n | { type: \"TOKEN\"; contract: string; tokenId: string; name?: string }\n | { type: \"COLLECTION\"; contract: string; name?: string }\n | { type: \"CREATOR\"; address: string; name?: string }\n | { type: \"COMMENT\"; commentId: string };\n\nexport type ReportDialogSlot = ComponentType<{ open: boolean; onOpenChange: (open: boolean) => void; target: ReportTarget }>;\n\nexport interface MedialaneApp {\n getClient: () => MedialaneClient;\n getSigner: () => Promise<FastMintSigner> | FastMintSigner;\n walletAddress: string | null;\n walletLoading?: boolean;\n onRequireWallet: () => void;\n releaseSigner?: () => void;\n ensureSignedIn?: () => Promise<void>;\n connectLabel?: string;\n companion?: CompanionApp;\n ReportDialog?: ReportDialogSlot;\n resolveImage?: ImageResolver;\n}\n\nexport const MedialaneAppContext = createContext<MedialaneApp | null>(null);\n\nexport function MedialaneAppProvider({ value, children }: { value: MedialaneApp; children: ReactNode }) {\n return <MedialaneAppContext.Provider value={value}>{children}</MedialaneAppContext.Provider>;\n}\n\nexport function useMedialaneApp(): MedialaneApp {\n const app = useContext(MedialaneAppContext);\n if (!app) throw new Error(\"MedialaneAppProvider missing\");\n return app;\n}\n"],"mappings":";AA0CS;AAxCT,SAAS,eAAe,kBAAwE;AAqCzF,MAAM,sBAAsB,cAAmC,IAAI;AAEnE,SAAS,qBAAqB,EAAE,OAAO,SAAS,GAAiD;AACtG,SAAO,oBAAC,oBAAoB,UAApB,EAA6B,OAAe,UAAS;AAC/D;AAEO,SAAS,kBAAgC;AAC9C,QAAM,MAAM,WAAW,mBAAmB;AAC1C,MAAI,CAAC,IAAK,OAAM,IAAI,MAAM,8BAA8B;AACxD,SAAO;AACT;","names":[]}
|
|
@@ -10,7 +10,7 @@ declare const SheetClose: React.ForwardRefExoticComponent<SheetPrimitive.DialogC
|
|
|
10
10
|
declare const SheetPortal: React.FC<SheetPrimitive.DialogPortalProps>;
|
|
11
11
|
declare const SheetOverlay: React.ForwardRefExoticComponent<Omit<SheetPrimitive.DialogOverlayProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
12
12
|
declare const sheetVariants: (props?: ({
|
|
13
|
-
side?: "
|
|
13
|
+
side?: "bottom" | "left" | "right" | "top" | null | undefined;
|
|
14
14
|
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
15
15
|
interface SheetContentProps extends React.ComponentPropsWithoutRef<typeof SheetPrimitive.Content>, VariantProps<typeof sheetVariants> {
|
|
16
16
|
overlayClassName?: string;
|
|
@@ -10,7 +10,7 @@ declare const SheetClose: React.ForwardRefExoticComponent<SheetPrimitive.DialogC
|
|
|
10
10
|
declare const SheetPortal: React.FC<SheetPrimitive.DialogPortalProps>;
|
|
11
11
|
declare const SheetOverlay: React.ForwardRefExoticComponent<Omit<SheetPrimitive.DialogOverlayProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
12
12
|
declare const sheetVariants: (props?: ({
|
|
13
|
-
side?: "
|
|
13
|
+
side?: "bottom" | "left" | "right" | "top" | null | undefined;
|
|
14
14
|
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
15
15
|
interface SheetContentProps extends React.ComponentPropsWithoutRef<typeof SheetPrimitive.Content>, VariantProps<typeof sheetVariants> {
|
|
16
16
|
overlayClassName?: string;
|