@medialane/ui 0.295.0 → 0.297.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/asset-page.cjs +10 -0
- package/dist/components/asset-page.cjs.map +1 -1
- package/dist/components/asset-page.js +10 -0
- package/dist/components/asset-page.js.map +1 -1
- package/dist/components/fast-mint/asset-form-parts.cjs +194 -0
- package/dist/components/fast-mint/asset-form-parts.cjs.map +1 -0
- package/dist/components/fast-mint/asset-form-parts.d.cts +33 -0
- package/dist/components/fast-mint/asset-form-parts.d.ts +33 -0
- package/dist/components/fast-mint/asset-form-parts.js +158 -0
- package/dist/components/fast-mint/asset-form-parts.js.map +1 -0
- package/dist/components/fast-mint/collection-section.cjs +211 -0
- package/dist/components/fast-mint/collection-section.cjs.map +1 -0
- package/dist/components/fast-mint/collection-section.d.cts +27 -0
- package/dist/components/fast-mint/collection-section.d.ts +27 -0
- package/dist/components/fast-mint/collection-section.js +176 -0
- package/dist/components/fast-mint/collection-section.js.map +1 -0
- package/dist/components/fast-mint/fast-mint.cjs +116 -653
- package/dist/components/fast-mint/fast-mint.cjs.map +1 -1
- package/dist/components/fast-mint/fast-mint.js +115 -661
- package/dist/components/fast-mint/fast-mint.js.map +1 -1
- package/dist/components/fast-mint/form.cjs +40 -0
- package/dist/components/fast-mint/form.cjs.map +1 -0
- package/dist/components/fast-mint/form.d.cts +15 -0
- package/dist/components/fast-mint/form.d.ts +15 -0
- package/dist/components/fast-mint/form.js +16 -0
- package/dist/components/fast-mint/form.js.map +1 -0
- package/dist/components/fast-mint/ip-type-section.cjs +76 -0
- package/dist/components/fast-mint/ip-type-section.cjs.map +1 -0
- package/dist/components/fast-mint/ip-type-section.d.cts +17 -0
- package/dist/components/fast-mint/ip-type-section.d.ts +17 -0
- package/dist/components/fast-mint/ip-type-section.js +52 -0
- package/dist/components/fast-mint/ip-type-section.js.map +1 -0
- package/dist/components/fast-mint/licensing-section.cjs +124 -0
- package/dist/components/fast-mint/licensing-section.cjs.map +1 -0
- package/dist/components/fast-mint/licensing-section.d.cts +14 -0
- package/dist/components/fast-mint/licensing-section.d.ts +14 -0
- package/dist/components/fast-mint/licensing-section.js +99 -0
- package/dist/components/fast-mint/licensing-section.js.map +1 -0
- package/dist/components/fast-mint/media-kind.cjs +48 -0
- package/dist/components/fast-mint/media-kind.cjs.map +1 -0
- package/dist/components/fast-mint/media-kind.d.cts +12 -0
- package/dist/components/fast-mint/media-kind.d.ts +12 -0
- package/dist/components/fast-mint/media-kind.js +22 -0
- package/dist/components/fast-mint/media-kind.js.map +1 -0
- package/dist/components/fast-mint/mint-asset.cjs +124 -0
- package/dist/components/fast-mint/mint-asset.cjs.map +1 -0
- package/dist/components/fast-mint/mint-asset.d.cts +41 -0
- package/dist/components/fast-mint/mint-asset.d.ts +41 -0
- package/dist/components/fast-mint/mint-asset.js +100 -0
- package/dist/components/fast-mint/mint-asset.js.map +1 -0
- package/dist/components/fast-mint/use-ipfs-upload.cjs +64 -0
- package/dist/components/fast-mint/use-ipfs-upload.cjs.map +1 -0
- package/dist/components/fast-mint/use-ipfs-upload.d.cts +9 -0
- package/dist/components/fast-mint/use-ipfs-upload.d.ts +9 -0
- package/dist/components/fast-mint/use-ipfs-upload.js +40 -0
- package/dist/components/fast-mint/use-ipfs-upload.js.map +1 -0
- package/dist/components/fast-mint/use-new-collection-draft.cjs +66 -0
- package/dist/components/fast-mint/use-new-collection-draft.cjs.map +1 -0
- package/dist/components/fast-mint/use-new-collection-draft.d.cts +13 -0
- package/dist/components/fast-mint/use-new-collection-draft.d.ts +13 -0
- package/dist/components/fast-mint/use-new-collection-draft.js +42 -0
- package/dist/components/fast-mint/use-new-collection-draft.js.map +1 -0
- package/dist/components/soulbound-card.cjs +70 -0
- package/dist/components/soulbound-card.cjs.map +1 -0
- package/dist/components/soulbound-card.d.cts +13 -0
- package/dist/components/soulbound-card.d.ts +13 -0
- package/dist/components/soulbound-card.js +35 -0
- package/dist/components/soulbound-card.js.map +1 -0
- package/dist/index.cjs +5 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
"use client";
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
20
|
+
var licensing_section_exports = {};
|
|
21
|
+
__export(licensing_section_exports, {
|
|
22
|
+
LicensingSection: () => LicensingSection,
|
|
23
|
+
ToggleGroup: () => ToggleGroup
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(licensing_section_exports);
|
|
26
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
27
|
+
var import_react = require("react");
|
|
28
|
+
var import_lucide_react = require("lucide-react");
|
|
29
|
+
var import_input = require("../input.js");
|
|
30
|
+
var import_select = require("../select.js");
|
|
31
|
+
var import_collapsible = require("../collapsible.js");
|
|
32
|
+
var import_ip = require("../../data/ip.js");
|
|
33
|
+
var import_cn = require("../../utils/cn.js");
|
|
34
|
+
function ToggleGroup({
|
|
35
|
+
value,
|
|
36
|
+
options,
|
|
37
|
+
onChange
|
|
38
|
+
}) {
|
|
39
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "flex rounded-lg border border-border overflow-hidden w-full", children: options.map((opt, i) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
40
|
+
"button",
|
|
41
|
+
{
|
|
42
|
+
type: "button",
|
|
43
|
+
onClick: () => onChange(opt),
|
|
44
|
+
className: (0, import_cn.cn)(
|
|
45
|
+
"flex-1 px-3 py-2 text-sm transition-colors",
|
|
46
|
+
i > 0 && "border-l border-border",
|
|
47
|
+
value === opt ? "bg-primary text-primary-foreground font-medium" : "bg-background hover:bg-muted text-muted-foreground"
|
|
48
|
+
),
|
|
49
|
+
children: opt
|
|
50
|
+
},
|
|
51
|
+
opt
|
|
52
|
+
)) });
|
|
53
|
+
}
|
|
54
|
+
function LicensingSection({ form }) {
|
|
55
|
+
const [open, setOpen] = (0, import_react.useState)(false);
|
|
56
|
+
const handleLicenseChange = (value) => {
|
|
57
|
+
form.setValue("licenseType", value);
|
|
58
|
+
const def = import_ip.LICENSE_TYPES.find((l) => l.value === value);
|
|
59
|
+
if (def) {
|
|
60
|
+
form.setValue("commercialUse", def.commercialUse);
|
|
61
|
+
form.setValue("derivatives", def.derivatives);
|
|
62
|
+
form.setValue("attribution", def.attribution);
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_collapsible.Collapsible, { open, onOpenChange: setOpen, children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "rounded-xl border border-border overflow-hidden", children: [
|
|
66
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_collapsible.CollapsibleTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("button", { type: "button", className: "w-full flex items-center justify-between px-4 py-3.5 hover:bg-muted/30 transition-colors", children: [
|
|
67
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { className: "flex items-center gap-2", children: [
|
|
68
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.ShieldCheck, { className: "h-4 w-4 text-primary" }),
|
|
69
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "text-sm font-semibold", children: "Licensing Terms" }),
|
|
70
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "text-xs text-muted-foreground font-normal", children: "Optional \xB7 Berne Convention" })
|
|
71
|
+
] }),
|
|
72
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.ChevronDown, { className: (0, import_cn.cn)("h-4 w-4 text-muted-foreground transition-transform", open && "rotate-180") })
|
|
73
|
+
] }) }),
|
|
74
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_collapsible.CollapsibleContent, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "px-4 pb-4 space-y-4 border-t border-border/60 pt-4", children: [
|
|
75
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "space-y-1.5", children: [
|
|
76
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("label", { className: "text-xs font-medium text-muted-foreground", children: "License" }),
|
|
77
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_select.Select, { value: form.watch("licenseType"), onValueChange: handleLicenseChange, children: [
|
|
78
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_select.SelectTrigger, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_select.SelectValue, {}) }),
|
|
79
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_select.SelectContent, { children: import_ip.LICENSE_TYPES.map((l) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_select.SelectItem, { value: l.value, children: l.label }, l.value)) })
|
|
80
|
+
] })
|
|
81
|
+
] }),
|
|
82
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "space-y-1.5", children: [
|
|
83
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("label", { className: "text-xs font-medium text-muted-foreground", children: "Commercial use" }),
|
|
84
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(ToggleGroup, { value: form.watch("commercialUse"), options: ["Yes", "No"], onChange: (v) => form.setValue("commercialUse", v) })
|
|
85
|
+
] }),
|
|
86
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "space-y-1.5", children: [
|
|
87
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("label", { className: "text-xs font-medium text-muted-foreground", children: "Derivatives" }),
|
|
88
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(ToggleGroup, { value: form.watch("derivatives"), options: import_ip.DERIVATIVES_OPTIONS, onChange: (v) => form.setValue("derivatives", v) })
|
|
89
|
+
] }),
|
|
90
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "space-y-1.5", children: [
|
|
91
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("label", { className: "text-xs font-medium text-muted-foreground", children: "Territory" }),
|
|
92
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_select.Select, { value: form.watch("geographicScope"), onValueChange: (v) => form.setValue("geographicScope", v), children: [
|
|
93
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_select.SelectTrigger, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_select.SelectValue, {}) }),
|
|
94
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_select.SelectContent, { children: import_ip.GEOGRAPHIC_SCOPES.map((s) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_select.SelectItem, { value: s, children: s }, s)) })
|
|
95
|
+
] })
|
|
96
|
+
] }),
|
|
97
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "space-y-1.5", children: [
|
|
98
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("label", { className: "text-xs font-medium text-muted-foreground", children: "AI & data mining" }),
|
|
99
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(ToggleGroup, { value: form.watch("aiPolicy"), options: import_ip.AI_POLICIES, onChange: (v) => form.setValue("aiPolicy", v) })
|
|
100
|
+
] }),
|
|
101
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "space-y-1.5", children: [
|
|
102
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("label", { className: "text-xs font-medium text-muted-foreground", children: "Royalty % (0\u201350)" }),
|
|
103
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
104
|
+
import_input.Input,
|
|
105
|
+
{
|
|
106
|
+
type: "number",
|
|
107
|
+
min: 0,
|
|
108
|
+
max: 50,
|
|
109
|
+
step: 0.5,
|
|
110
|
+
value: form.watch("royalty"),
|
|
111
|
+
onChange: (e) => form.setValue("royalty", parseFloat(e.target.value) || 0),
|
|
112
|
+
className: "max-w-[120px]"
|
|
113
|
+
}
|
|
114
|
+
)
|
|
115
|
+
] })
|
|
116
|
+
] }) })
|
|
117
|
+
] }) });
|
|
118
|
+
}
|
|
119
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
120
|
+
0 && (module.exports = {
|
|
121
|
+
LicensingSection,
|
|
122
|
+
ToggleGroup
|
|
123
|
+
});
|
|
124
|
+
//# sourceMappingURL=licensing-section.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/fast-mint/licensing-section.tsx"],"sourcesContent":["\"use client\";\n\nimport { useState } from \"react\";\nimport type { UseFormReturn } from \"react-hook-form\";\nimport { ChevronDown, ShieldCheck } from \"lucide-react\";\nimport { Input } from \"../input.js\";\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"../select.js\";\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from \"../collapsible.js\";\nimport { LICENSE_TYPES, GEOGRAPHIC_SCOPES, AI_POLICIES, DERIVATIVES_OPTIONS } from \"../../data/ip.js\";\nimport { cn } from \"../../utils/cn.js\";\nimport type { FormValues } from \"./form.js\";\n\nexport function ToggleGroup({\n value, options, onChange,\n}: { value: string; options: readonly string[]; onChange: (v: string) => void }) {\n return (\n <div className=\"flex rounded-lg border border-border overflow-hidden w-full\">\n {options.map((opt, i) => (\n <button\n key={opt}\n type=\"button\"\n onClick={() => onChange(opt)}\n className={cn(\n \"flex-1 px-3 py-2 text-sm transition-colors\",\n i > 0 && \"border-l border-border\",\n value === opt ? \"bg-primary text-primary-foreground font-medium\" : \"bg-background hover:bg-muted text-muted-foreground\"\n )}\n >\n {opt}\n </button>\n ))}\n </div>\n );\n}\n\nexport function LicensingSection({ form }: { form: UseFormReturn<FormValues> }) {\n const [open, setOpen] = useState(false);\n\n const handleLicenseChange = (value: string) => {\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\n return (\n <Collapsible open={open} onOpenChange={setOpen}>\n <div className=\"rounded-xl border border-border overflow-hidden\">\n <CollapsibleTrigger asChild>\n <button type=\"button\" className=\"w-full flex items-center justify-between px-4 py-3.5 hover:bg-muted/30 transition-colors\">\n <span 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 </span>\n <ChevronDown className={cn(\"h-4 w-4 text-muted-foreground transition-transform\", open && \"rotate-180\")} />\n </button>\n </CollapsibleTrigger>\n <CollapsibleContent>\n <div className=\"px-4 pb-4 space-y-4 border-t border-border/60 pt-4\">\n <div className=\"space-y-1.5\">\n <label className=\"text-xs font-medium text-muted-foreground\">License</label>\n <Select value={form.watch(\"licenseType\")} onValueChange={handleLicenseChange}>\n <SelectTrigger><SelectValue /></SelectTrigger>\n <SelectContent>\n {LICENSE_TYPES.map((l) => <SelectItem key={l.value} value={l.value}>{l.label}</SelectItem>)}\n </SelectContent>\n </Select>\n </div>\n <div className=\"space-y-1.5\">\n <label className=\"text-xs font-medium text-muted-foreground\">Commercial use</label>\n <ToggleGroup value={form.watch(\"commercialUse\")} options={[\"Yes\", \"No\"]} onChange={(v) => form.setValue(\"commercialUse\", v as \"Yes\" | \"No\")} />\n </div>\n <div className=\"space-y-1.5\">\n <label className=\"text-xs font-medium text-muted-foreground\">Derivatives</label>\n <ToggleGroup value={form.watch(\"derivatives\")} options={DERIVATIVES_OPTIONS} onChange={(v) => form.setValue(\"derivatives\", v as FormValues[\"derivatives\"])} />\n </div>\n <div className=\"space-y-1.5\">\n <label className=\"text-xs font-medium text-muted-foreground\">Territory</label>\n <Select value={form.watch(\"geographicScope\")} onValueChange={(v) => form.setValue(\"geographicScope\", v)}>\n <SelectTrigger><SelectValue /></SelectTrigger>\n <SelectContent>\n {GEOGRAPHIC_SCOPES.map((s) => <SelectItem key={s} value={s}>{s}</SelectItem>)}\n </SelectContent>\n </Select>\n </div>\n <div className=\"space-y-1.5\">\n <label className=\"text-xs font-medium text-muted-foreground\">AI & data mining</label>\n <ToggleGroup value={form.watch(\"aiPolicy\")} options={AI_POLICIES} onChange={(v) => form.setValue(\"aiPolicy\", v as FormValues[\"aiPolicy\"])} />\n </div>\n <div className=\"space-y-1.5\">\n <label className=\"text-xs font-medium text-muted-foreground\">Royalty % (0–50)</label>\n <Input\n type=\"number\" min={0} max={50} step={0.5}\n value={form.watch(\"royalty\")}\n onChange={(e) => form.setValue(\"royalty\", parseFloat(e.target.value) || 0)}\n className=\"max-w-[120px]\"\n />\n </div>\n </div>\n </CollapsibleContent>\n </div>\n </Collapsible>\n );\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { UseFormReturn } from 'react-hook-form';
|
|
3
|
+
import { FormValues } from './form.cjs';
|
|
4
|
+
|
|
5
|
+
declare function ToggleGroup({ value, options, onChange, }: {
|
|
6
|
+
value: string;
|
|
7
|
+
options: readonly string[];
|
|
8
|
+
onChange: (v: string) => void;
|
|
9
|
+
}): react_jsx_runtime.JSX.Element;
|
|
10
|
+
declare function LicensingSection({ form }: {
|
|
11
|
+
form: UseFormReturn<FormValues>;
|
|
12
|
+
}): react_jsx_runtime.JSX.Element;
|
|
13
|
+
|
|
14
|
+
export { LicensingSection, ToggleGroup };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { UseFormReturn } from 'react-hook-form';
|
|
3
|
+
import { FormValues } from './form.js';
|
|
4
|
+
|
|
5
|
+
declare function ToggleGroup({ value, options, onChange, }: {
|
|
6
|
+
value: string;
|
|
7
|
+
options: readonly string[];
|
|
8
|
+
onChange: (v: string) => void;
|
|
9
|
+
}): react_jsx_runtime.JSX.Element;
|
|
10
|
+
declare function LicensingSection({ form }: {
|
|
11
|
+
form: UseFormReturn<FormValues>;
|
|
12
|
+
}): react_jsx_runtime.JSX.Element;
|
|
13
|
+
|
|
14
|
+
export { LicensingSection, ToggleGroup };
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useState } from "react";
|
|
4
|
+
import { ChevronDown, ShieldCheck } from "lucide-react";
|
|
5
|
+
import { Input } from "../input.js";
|
|
6
|
+
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "../select.js";
|
|
7
|
+
import { Collapsible, CollapsibleContent, CollapsibleTrigger } from "../collapsible.js";
|
|
8
|
+
import { LICENSE_TYPES, GEOGRAPHIC_SCOPES, AI_POLICIES, DERIVATIVES_OPTIONS } from "../../data/ip.js";
|
|
9
|
+
import { cn } from "../../utils/cn.js";
|
|
10
|
+
function ToggleGroup({
|
|
11
|
+
value,
|
|
12
|
+
options,
|
|
13
|
+
onChange
|
|
14
|
+
}) {
|
|
15
|
+
return /* @__PURE__ */ jsx("div", { className: "flex rounded-lg border border-border overflow-hidden w-full", children: options.map((opt, i) => /* @__PURE__ */ jsx(
|
|
16
|
+
"button",
|
|
17
|
+
{
|
|
18
|
+
type: "button",
|
|
19
|
+
onClick: () => onChange(opt),
|
|
20
|
+
className: cn(
|
|
21
|
+
"flex-1 px-3 py-2 text-sm transition-colors",
|
|
22
|
+
i > 0 && "border-l border-border",
|
|
23
|
+
value === opt ? "bg-primary text-primary-foreground font-medium" : "bg-background hover:bg-muted text-muted-foreground"
|
|
24
|
+
),
|
|
25
|
+
children: opt
|
|
26
|
+
},
|
|
27
|
+
opt
|
|
28
|
+
)) });
|
|
29
|
+
}
|
|
30
|
+
function LicensingSection({ form }) {
|
|
31
|
+
const [open, setOpen] = useState(false);
|
|
32
|
+
const handleLicenseChange = (value) => {
|
|
33
|
+
form.setValue("licenseType", value);
|
|
34
|
+
const def = LICENSE_TYPES.find((l) => l.value === value);
|
|
35
|
+
if (def) {
|
|
36
|
+
form.setValue("commercialUse", def.commercialUse);
|
|
37
|
+
form.setValue("derivatives", def.derivatives);
|
|
38
|
+
form.setValue("attribution", def.attribution);
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
return /* @__PURE__ */ jsx(Collapsible, { open, onOpenChange: setOpen, children: /* @__PURE__ */ jsxs("div", { className: "rounded-xl border border-border overflow-hidden", children: [
|
|
42
|
+
/* @__PURE__ */ jsx(CollapsibleTrigger, { asChild: true, children: /* @__PURE__ */ jsxs("button", { type: "button", className: "w-full flex items-center justify-between px-4 py-3.5 hover:bg-muted/30 transition-colors", children: [
|
|
43
|
+
/* @__PURE__ */ jsxs("span", { className: "flex items-center gap-2", children: [
|
|
44
|
+
/* @__PURE__ */ jsx(ShieldCheck, { className: "h-4 w-4 text-primary" }),
|
|
45
|
+
/* @__PURE__ */ jsx("span", { className: "text-sm font-semibold", children: "Licensing Terms" }),
|
|
46
|
+
/* @__PURE__ */ jsx("span", { className: "text-xs text-muted-foreground font-normal", children: "Optional \xB7 Berne Convention" })
|
|
47
|
+
] }),
|
|
48
|
+
/* @__PURE__ */ jsx(ChevronDown, { className: cn("h-4 w-4 text-muted-foreground transition-transform", open && "rotate-180") })
|
|
49
|
+
] }) }),
|
|
50
|
+
/* @__PURE__ */ jsx(CollapsibleContent, { children: /* @__PURE__ */ jsxs("div", { className: "px-4 pb-4 space-y-4 border-t border-border/60 pt-4", children: [
|
|
51
|
+
/* @__PURE__ */ jsxs("div", { className: "space-y-1.5", children: [
|
|
52
|
+
/* @__PURE__ */ jsx("label", { className: "text-xs font-medium text-muted-foreground", children: "License" }),
|
|
53
|
+
/* @__PURE__ */ jsxs(Select, { value: form.watch("licenseType"), onValueChange: handleLicenseChange, children: [
|
|
54
|
+
/* @__PURE__ */ jsx(SelectTrigger, { children: /* @__PURE__ */ jsx(SelectValue, {}) }),
|
|
55
|
+
/* @__PURE__ */ jsx(SelectContent, { children: LICENSE_TYPES.map((l) => /* @__PURE__ */ jsx(SelectItem, { value: l.value, children: l.label }, l.value)) })
|
|
56
|
+
] })
|
|
57
|
+
] }),
|
|
58
|
+
/* @__PURE__ */ jsxs("div", { className: "space-y-1.5", children: [
|
|
59
|
+
/* @__PURE__ */ jsx("label", { className: "text-xs font-medium text-muted-foreground", children: "Commercial use" }),
|
|
60
|
+
/* @__PURE__ */ jsx(ToggleGroup, { value: form.watch("commercialUse"), options: ["Yes", "No"], onChange: (v) => form.setValue("commercialUse", v) })
|
|
61
|
+
] }),
|
|
62
|
+
/* @__PURE__ */ jsxs("div", { className: "space-y-1.5", children: [
|
|
63
|
+
/* @__PURE__ */ jsx("label", { className: "text-xs font-medium text-muted-foreground", children: "Derivatives" }),
|
|
64
|
+
/* @__PURE__ */ jsx(ToggleGroup, { value: form.watch("derivatives"), options: DERIVATIVES_OPTIONS, onChange: (v) => form.setValue("derivatives", v) })
|
|
65
|
+
] }),
|
|
66
|
+
/* @__PURE__ */ jsxs("div", { className: "space-y-1.5", children: [
|
|
67
|
+
/* @__PURE__ */ jsx("label", { className: "text-xs font-medium text-muted-foreground", children: "Territory" }),
|
|
68
|
+
/* @__PURE__ */ jsxs(Select, { value: form.watch("geographicScope"), onValueChange: (v) => form.setValue("geographicScope", v), children: [
|
|
69
|
+
/* @__PURE__ */ jsx(SelectTrigger, { children: /* @__PURE__ */ jsx(SelectValue, {}) }),
|
|
70
|
+
/* @__PURE__ */ jsx(SelectContent, { children: GEOGRAPHIC_SCOPES.map((s) => /* @__PURE__ */ jsx(SelectItem, { value: s, children: s }, s)) })
|
|
71
|
+
] })
|
|
72
|
+
] }),
|
|
73
|
+
/* @__PURE__ */ jsxs("div", { className: "space-y-1.5", children: [
|
|
74
|
+
/* @__PURE__ */ jsx("label", { className: "text-xs font-medium text-muted-foreground", children: "AI & data mining" }),
|
|
75
|
+
/* @__PURE__ */ jsx(ToggleGroup, { value: form.watch("aiPolicy"), options: AI_POLICIES, onChange: (v) => form.setValue("aiPolicy", v) })
|
|
76
|
+
] }),
|
|
77
|
+
/* @__PURE__ */ jsxs("div", { className: "space-y-1.5", children: [
|
|
78
|
+
/* @__PURE__ */ jsx("label", { className: "text-xs font-medium text-muted-foreground", children: "Royalty % (0\u201350)" }),
|
|
79
|
+
/* @__PURE__ */ jsx(
|
|
80
|
+
Input,
|
|
81
|
+
{
|
|
82
|
+
type: "number",
|
|
83
|
+
min: 0,
|
|
84
|
+
max: 50,
|
|
85
|
+
step: 0.5,
|
|
86
|
+
value: form.watch("royalty"),
|
|
87
|
+
onChange: (e) => form.setValue("royalty", parseFloat(e.target.value) || 0),
|
|
88
|
+
className: "max-w-[120px]"
|
|
89
|
+
}
|
|
90
|
+
)
|
|
91
|
+
] })
|
|
92
|
+
] }) })
|
|
93
|
+
] }) });
|
|
94
|
+
}
|
|
95
|
+
export {
|
|
96
|
+
LicensingSection,
|
|
97
|
+
ToggleGroup
|
|
98
|
+
};
|
|
99
|
+
//# sourceMappingURL=licensing-section.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/fast-mint/licensing-section.tsx"],"sourcesContent":["\"use client\";\n\nimport { useState } from \"react\";\nimport type { UseFormReturn } from \"react-hook-form\";\nimport { ChevronDown, ShieldCheck } from \"lucide-react\";\nimport { Input } from \"../input.js\";\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"../select.js\";\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from \"../collapsible.js\";\nimport { LICENSE_TYPES, GEOGRAPHIC_SCOPES, AI_POLICIES, DERIVATIVES_OPTIONS } from \"../../data/ip.js\";\nimport { cn } from \"../../utils/cn.js\";\nimport type { FormValues } from \"./form.js\";\n\nexport function ToggleGroup({\n value, options, onChange,\n}: { value: string; options: readonly string[]; onChange: (v: string) => void }) {\n return (\n <div className=\"flex rounded-lg border border-border overflow-hidden w-full\">\n {options.map((opt, i) => (\n <button\n key={opt}\n type=\"button\"\n onClick={() => onChange(opt)}\n className={cn(\n \"flex-1 px-3 py-2 text-sm transition-colors\",\n i > 0 && \"border-l border-border\",\n value === opt ? \"bg-primary text-primary-foreground font-medium\" : \"bg-background hover:bg-muted text-muted-foreground\"\n )}\n >\n {opt}\n </button>\n ))}\n </div>\n );\n}\n\nexport function LicensingSection({ form }: { form: UseFormReturn<FormValues> }) {\n const [open, setOpen] = useState(false);\n\n const handleLicenseChange = (value: string) => {\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\n return (\n <Collapsible open={open} onOpenChange={setOpen}>\n <div className=\"rounded-xl border border-border overflow-hidden\">\n <CollapsibleTrigger asChild>\n <button type=\"button\" className=\"w-full flex items-center justify-between px-4 py-3.5 hover:bg-muted/30 transition-colors\">\n <span 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 </span>\n <ChevronDown className={cn(\"h-4 w-4 text-muted-foreground transition-transform\", open && \"rotate-180\")} />\n </button>\n </CollapsibleTrigger>\n <CollapsibleContent>\n <div className=\"px-4 pb-4 space-y-4 border-t border-border/60 pt-4\">\n <div className=\"space-y-1.5\">\n <label className=\"text-xs font-medium text-muted-foreground\">License</label>\n <Select value={form.watch(\"licenseType\")} onValueChange={handleLicenseChange}>\n <SelectTrigger><SelectValue /></SelectTrigger>\n <SelectContent>\n {LICENSE_TYPES.map((l) => <SelectItem key={l.value} value={l.value}>{l.label}</SelectItem>)}\n </SelectContent>\n </Select>\n </div>\n <div className=\"space-y-1.5\">\n <label className=\"text-xs font-medium text-muted-foreground\">Commercial use</label>\n <ToggleGroup value={form.watch(\"commercialUse\")} options={[\"Yes\", \"No\"]} onChange={(v) => form.setValue(\"commercialUse\", v as \"Yes\" | \"No\")} />\n </div>\n <div className=\"space-y-1.5\">\n <label className=\"text-xs font-medium text-muted-foreground\">Derivatives</label>\n <ToggleGroup value={form.watch(\"derivatives\")} options={DERIVATIVES_OPTIONS} onChange={(v) => form.setValue(\"derivatives\", v as FormValues[\"derivatives\"])} />\n </div>\n <div className=\"space-y-1.5\">\n <label className=\"text-xs font-medium text-muted-foreground\">Territory</label>\n <Select value={form.watch(\"geographicScope\")} onValueChange={(v) => form.setValue(\"geographicScope\", v)}>\n <SelectTrigger><SelectValue /></SelectTrigger>\n <SelectContent>\n {GEOGRAPHIC_SCOPES.map((s) => <SelectItem key={s} value={s}>{s}</SelectItem>)}\n </SelectContent>\n </Select>\n </div>\n <div className=\"space-y-1.5\">\n <label className=\"text-xs font-medium text-muted-foreground\">AI & data mining</label>\n <ToggleGroup value={form.watch(\"aiPolicy\")} options={AI_POLICIES} onChange={(v) => form.setValue(\"aiPolicy\", v as FormValues[\"aiPolicy\"])} />\n </div>\n <div className=\"space-y-1.5\">\n <label className=\"text-xs font-medium text-muted-foreground\">Royalty % (0–50)</label>\n <Input\n type=\"number\" min={0} max={50} step={0.5}\n value={form.watch(\"royalty\")}\n onChange={(e) => form.setValue(\"royalty\", parseFloat(e.target.value) || 0)}\n className=\"max-w-[120px]\"\n />\n </div>\n </div>\n </CollapsibleContent>\n </div>\n </Collapsible>\n );\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var media_kind_exports = {};
|
|
20
|
+
__export(media_kind_exports, {
|
|
21
|
+
IP_TYPE_BY_KIND: () => IP_TYPE_BY_KIND,
|
|
22
|
+
MEDIA_ROUTE_MIME_TYPES: () => MEDIA_ROUTE_MIME_TYPES,
|
|
23
|
+
detectMediaKind: () => detectMediaKind
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(media_kind_exports);
|
|
26
|
+
var import_upload_limits = require("../../utils/upload-limits.js");
|
|
27
|
+
const MEDIA_ROUTE_MIME_TYPES = new Set(import_upload_limits.UPLOAD_LIMITS.media.mimeTypes);
|
|
28
|
+
const DOCUMENT_MIME_TYPES = new Set(import_upload_limits.UPLOAD_LIMITS.document.mimeTypes.filter((type) => type !== "application/octet-stream"));
|
|
29
|
+
function detectMediaKind(mime) {
|
|
30
|
+
if (mime.startsWith("image/")) return MEDIA_ROUTE_MIME_TYPES.has(mime) ? "image" : null;
|
|
31
|
+
if (mime.startsWith("video/")) return MEDIA_ROUTE_MIME_TYPES.has(mime) ? "video" : null;
|
|
32
|
+
if (mime.startsWith("audio/")) return MEDIA_ROUTE_MIME_TYPES.has(mime) ? "audio" : null;
|
|
33
|
+
if (DOCUMENT_MIME_TYPES.has(mime)) return "document";
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
const IP_TYPE_BY_KIND = {
|
|
37
|
+
image: "NFT",
|
|
38
|
+
audio: "Audio",
|
|
39
|
+
video: "Video",
|
|
40
|
+
document: "Documents"
|
|
41
|
+
};
|
|
42
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
43
|
+
0 && (module.exports = {
|
|
44
|
+
IP_TYPE_BY_KIND,
|
|
45
|
+
MEDIA_ROUTE_MIME_TYPES,
|
|
46
|
+
detectMediaKind
|
|
47
|
+
});
|
|
48
|
+
//# sourceMappingURL=media-kind.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/fast-mint/media-kind.ts"],"sourcesContent":["import { UPLOAD_LIMITS } from \"../../utils/upload-limits.js\";\nimport type { IPType } from \"../../data/ip.js\";\nimport type { MediaKind } from \"./types.js\";\n\nexport const MEDIA_ROUTE_MIME_TYPES = new Set(UPLOAD_LIMITS.media.mimeTypes);\nconst DOCUMENT_MIME_TYPES = new Set(UPLOAD_LIMITS.document.mimeTypes.filter((type) => type !== \"application/octet-stream\"));\n\nexport function detectMediaKind(mime: string): MediaKind | null {\n if (mime.startsWith(\"image/\")) return MEDIA_ROUTE_MIME_TYPES.has(mime) ? \"image\" : null;\n if (mime.startsWith(\"video/\")) return MEDIA_ROUTE_MIME_TYPES.has(mime) ? \"video\" : null;\n if (mime.startsWith(\"audio/\")) return MEDIA_ROUTE_MIME_TYPES.has(mime) ? \"audio\" : null;\n if (DOCUMENT_MIME_TYPES.has(mime)) return \"document\";\n return null;\n}\n\nexport const IP_TYPE_BY_KIND: Record<MediaKind, IPType> = {\n image: \"NFT\",\n audio: \"Audio\",\n video: \"Video\",\n document: \"Documents\",\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2BAA8B;AAIvB,MAAM,yBAAyB,IAAI,IAAI,mCAAc,MAAM,SAAS;AAC3E,MAAM,sBAAsB,IAAI,IAAI,mCAAc,SAAS,UAAU,OAAO,CAAC,SAAS,SAAS,0BAA0B,CAAC;AAEnH,SAAS,gBAAgB,MAAgC;AAC9D,MAAI,KAAK,WAAW,QAAQ,EAAG,QAAO,uBAAuB,IAAI,IAAI,IAAI,UAAU;AACnF,MAAI,KAAK,WAAW,QAAQ,EAAG,QAAO,uBAAuB,IAAI,IAAI,IAAI,UAAU;AACnF,MAAI,KAAK,WAAW,QAAQ,EAAG,QAAO,uBAAuB,IAAI,IAAI,IAAI,UAAU;AACnF,MAAI,oBAAoB,IAAI,IAAI,EAAG,QAAO;AAC1C,SAAO;AACT;AAEO,MAAM,kBAA6C;AAAA,EACxD,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,UAAU;AACZ;","names":[]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { IPType } from '../../data/ip.cjs';
|
|
2
|
+
import { MediaKind } from './types.cjs';
|
|
3
|
+
import 'react';
|
|
4
|
+
import 'starknet';
|
|
5
|
+
import '@medialane/sdk';
|
|
6
|
+
import '@medialane/sdk/starknet';
|
|
7
|
+
|
|
8
|
+
declare const MEDIA_ROUTE_MIME_TYPES: Set<string>;
|
|
9
|
+
declare function detectMediaKind(mime: string): MediaKind | null;
|
|
10
|
+
declare const IP_TYPE_BY_KIND: Record<MediaKind, IPType>;
|
|
11
|
+
|
|
12
|
+
export { IP_TYPE_BY_KIND, MEDIA_ROUTE_MIME_TYPES, detectMediaKind };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { IPType } from '../../data/ip.js';
|
|
2
|
+
import { MediaKind } from './types.js';
|
|
3
|
+
import 'react';
|
|
4
|
+
import 'starknet';
|
|
5
|
+
import '@medialane/sdk';
|
|
6
|
+
import '@medialane/sdk/starknet';
|
|
7
|
+
|
|
8
|
+
declare const MEDIA_ROUTE_MIME_TYPES: Set<string>;
|
|
9
|
+
declare function detectMediaKind(mime: string): MediaKind | null;
|
|
10
|
+
declare const IP_TYPE_BY_KIND: Record<MediaKind, IPType>;
|
|
11
|
+
|
|
12
|
+
export { IP_TYPE_BY_KIND, MEDIA_ROUTE_MIME_TYPES, detectMediaKind };
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { UPLOAD_LIMITS } from "../../utils/upload-limits.js";
|
|
2
|
+
const MEDIA_ROUTE_MIME_TYPES = new Set(UPLOAD_LIMITS.media.mimeTypes);
|
|
3
|
+
const DOCUMENT_MIME_TYPES = new Set(UPLOAD_LIMITS.document.mimeTypes.filter((type) => type !== "application/octet-stream"));
|
|
4
|
+
function detectMediaKind(mime) {
|
|
5
|
+
if (mime.startsWith("image/")) return MEDIA_ROUTE_MIME_TYPES.has(mime) ? "image" : null;
|
|
6
|
+
if (mime.startsWith("video/")) return MEDIA_ROUTE_MIME_TYPES.has(mime) ? "video" : null;
|
|
7
|
+
if (mime.startsWith("audio/")) return MEDIA_ROUTE_MIME_TYPES.has(mime) ? "audio" : null;
|
|
8
|
+
if (DOCUMENT_MIME_TYPES.has(mime)) return "document";
|
|
9
|
+
return null;
|
|
10
|
+
}
|
|
11
|
+
const IP_TYPE_BY_KIND = {
|
|
12
|
+
image: "NFT",
|
|
13
|
+
audio: "Audio",
|
|
14
|
+
video: "Video",
|
|
15
|
+
document: "Documents"
|
|
16
|
+
};
|
|
17
|
+
export {
|
|
18
|
+
IP_TYPE_BY_KIND,
|
|
19
|
+
MEDIA_ROUTE_MIME_TYPES,
|
|
20
|
+
detectMediaKind
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=media-kind.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/fast-mint/media-kind.ts"],"sourcesContent":["import { UPLOAD_LIMITS } from \"../../utils/upload-limits.js\";\nimport type { IPType } from \"../../data/ip.js\";\nimport type { MediaKind } from \"./types.js\";\n\nexport const MEDIA_ROUTE_MIME_TYPES = new Set(UPLOAD_LIMITS.media.mimeTypes);\nconst DOCUMENT_MIME_TYPES = new Set(UPLOAD_LIMITS.document.mimeTypes.filter((type) => type !== \"application/octet-stream\"));\n\nexport function detectMediaKind(mime: string): MediaKind | null {\n if (mime.startsWith(\"image/\")) return MEDIA_ROUTE_MIME_TYPES.has(mime) ? \"image\" : null;\n if (mime.startsWith(\"video/\")) return MEDIA_ROUTE_MIME_TYPES.has(mime) ? \"video\" : null;\n if (mime.startsWith(\"audio/\")) return MEDIA_ROUTE_MIME_TYPES.has(mime) ? \"audio\" : null;\n if (DOCUMENT_MIME_TYPES.has(mime)) return \"document\";\n return null;\n}\n\nexport const IP_TYPE_BY_KIND: Record<MediaKind, IPType> = {\n image: \"NFT\",\n audio: \"Audio\",\n video: \"Video\",\n document: \"Documents\",\n};\n"],"mappings":"AAAA,SAAS,qBAAqB;AAIvB,MAAM,yBAAyB,IAAI,IAAI,cAAc,MAAM,SAAS;AAC3E,MAAM,sBAAsB,IAAI,IAAI,cAAc,SAAS,UAAU,OAAO,CAAC,SAAS,SAAS,0BAA0B,CAAC;AAEnH,SAAS,gBAAgB,MAAgC;AAC9D,MAAI,KAAK,WAAW,QAAQ,EAAG,QAAO,uBAAuB,IAAI,IAAI,IAAI,UAAU;AACnF,MAAI,KAAK,WAAW,QAAQ,EAAG,QAAO,uBAAuB,IAAI,IAAI,IAAI,UAAU;AACnF,MAAI,KAAK,WAAW,QAAQ,EAAG,QAAO,uBAAuB,IAAI,IAAI,IAAI,UAAU;AACnF,MAAI,oBAAoB,IAAI,IAAI,EAAG,QAAO;AAC1C,SAAO;AACT;AAEO,MAAM,kBAA6C;AAAA,EACxD,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,UAAU;AACZ;","names":[]}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var mint_asset_exports = {};
|
|
20
|
+
__export(mint_asset_exports, {
|
|
21
|
+
mintAsset: () => mintAsset
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(mint_asset_exports);
|
|
24
|
+
var import_sdk = require("@medialane/sdk");
|
|
25
|
+
var import_starknet = require("@medialane/sdk/starknet");
|
|
26
|
+
var import_ipfs_upload = require("../../utils/ipfs-upload.js");
|
|
27
|
+
async function pollForNewCollection(refetchCollections, name, symbol) {
|
|
28
|
+
for (let attempt = 0; attempt < 8; attempt++) {
|
|
29
|
+
const list = await refetchCollections();
|
|
30
|
+
const match = list.find((c) => c.name === name && c.symbol === symbol);
|
|
31
|
+
if (match?.collectionId) return match;
|
|
32
|
+
await new Promise((r) => setTimeout(r, 1500));
|
|
33
|
+
}
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
async function mintAsset(input) {
|
|
37
|
+
const { client, signer, walletAddress, values, destination } = input;
|
|
38
|
+
const image = input.mediaKind === "image" ? input.mediaUri : input.featureUri;
|
|
39
|
+
const built = (0, import_sdk.buildAssetMetadata)({
|
|
40
|
+
name: values.name,
|
|
41
|
+
description: values.description || "",
|
|
42
|
+
externalUrl: values.external_url || "",
|
|
43
|
+
imageUri: image,
|
|
44
|
+
creator: walletAddress,
|
|
45
|
+
ipType: input.ipType,
|
|
46
|
+
licenseType: values.licenseType,
|
|
47
|
+
commercialUse: values.commercialUse,
|
|
48
|
+
derivatives: values.derivatives,
|
|
49
|
+
attribution: values.attribution,
|
|
50
|
+
geographicScope: values.geographicScope,
|
|
51
|
+
aiPolicy: values.aiPolicy,
|
|
52
|
+
royalty: String(values.royalty),
|
|
53
|
+
templateTraits: input.templateFields.filter(({ traitType, value }) => traitType.trim() && value.trim()).map(({ traitType, value }) => ({ traitType, value }))
|
|
54
|
+
});
|
|
55
|
+
const metadata = { ...built };
|
|
56
|
+
if (input.mediaKind !== "image") metadata.animation_url = input.mediaUri;
|
|
57
|
+
const uploadToken = await input.getUploadToken();
|
|
58
|
+
if (!uploadToken) throw new Error("Sign in first");
|
|
59
|
+
const tokenUri = await (0, import_ipfs_upload.uploadJsonToIpfs)(client.api, metadata);
|
|
60
|
+
const royaltyBps = Math.round(values.royalty * 100);
|
|
61
|
+
let contractAddress;
|
|
62
|
+
let tokenId;
|
|
63
|
+
if (input.assetType === "single") {
|
|
64
|
+
let collectionId = destination.mode === "existing" ? destination.collectionId : "";
|
|
65
|
+
contractAddress = destination.mode === "existing" ? input.singleCollections.find((c) => c.collectionId === destination.collectionId)?.contractAddress ?? null : null;
|
|
66
|
+
if (destination.mode === "new") {
|
|
67
|
+
const created = await client.api.intents.create("create-collection", {
|
|
68
|
+
owner: walletAddress,
|
|
69
|
+
name: destination.name,
|
|
70
|
+
symbol: destination.symbol,
|
|
71
|
+
description: destination.description || void 0,
|
|
72
|
+
image
|
|
73
|
+
});
|
|
74
|
+
await (0, import_starknet.executeIntent)(signer, client, created);
|
|
75
|
+
const found = await pollForNewCollection(input.refetchCollections, destination.name, destination.symbol);
|
|
76
|
+
if (!found) throw new Error("Collection created, but it's still indexing \u2014 try minting again in a moment from My Collections.");
|
|
77
|
+
collectionId = found.collectionId;
|
|
78
|
+
contractAddress = found.contractAddress ?? null;
|
|
79
|
+
}
|
|
80
|
+
const minted = await client.api.intents.create("mint", {
|
|
81
|
+
owner: walletAddress,
|
|
82
|
+
collectionId,
|
|
83
|
+
recipient: walletAddress,
|
|
84
|
+
tokenUri,
|
|
85
|
+
royaltyBps
|
|
86
|
+
});
|
|
87
|
+
const result = await (0, import_starknet.executeIntent)(signer, client, minted);
|
|
88
|
+
tokenId = contractAddress ? (0, import_starknet.mintedTokenIdFromReceipt)(result.receipt, contractAddress) : null;
|
|
89
|
+
} else {
|
|
90
|
+
let collectionContract = destination.mode === "existing" ? destination.collectionContract : "";
|
|
91
|
+
if (destination.mode === "new") {
|
|
92
|
+
const created = await client.api.intents.create("create-collection", {
|
|
93
|
+
owner: walletAddress,
|
|
94
|
+
name: destination.name,
|
|
95
|
+
symbol: destination.symbol,
|
|
96
|
+
description: destination.description || void 0,
|
|
97
|
+
image,
|
|
98
|
+
baseUri: "",
|
|
99
|
+
service: "mip-erc1155"
|
|
100
|
+
});
|
|
101
|
+
const deployResult = await (0, import_starknet.executeIntent)(signer, client, created);
|
|
102
|
+
const deployed = (0, import_starknet.deployedCollectionFromReceipt)(deployResult.receipt, "mip-erc1155");
|
|
103
|
+
if (!deployed) throw new Error("Collection deployed, but its address couldn't be read \u2014 check My Collections to mint into it.");
|
|
104
|
+
collectionContract = deployed;
|
|
105
|
+
}
|
|
106
|
+
const minted = await client.api.intents.create("mint", {
|
|
107
|
+
owner: walletAddress,
|
|
108
|
+
recipient: walletAddress,
|
|
109
|
+
collectionContract,
|
|
110
|
+
tokenUri,
|
|
111
|
+
value: input.editionCount,
|
|
112
|
+
royaltyBps
|
|
113
|
+
});
|
|
114
|
+
const result = await (0, import_starknet.executeIntent)(signer, client, minted);
|
|
115
|
+
contractAddress = collectionContract;
|
|
116
|
+
tokenId = (0, import_starknet.mintedTokenIdFromReceipt)(result.receipt, collectionContract);
|
|
117
|
+
}
|
|
118
|
+
return contractAddress && tokenId ? { contract: contractAddress, tokenId, image } : null;
|
|
119
|
+
}
|
|
120
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
121
|
+
0 && (module.exports = {
|
|
122
|
+
mintAsset
|
|
123
|
+
});
|
|
124
|
+
//# sourceMappingURL=mint-asset.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/fast-mint/mint-asset.ts"],"sourcesContent":["import { buildAssetMetadata, type ApiCollection } from \"@medialane/sdk\";\nimport { executeIntent, deployedCollectionFromReceipt, mintedTokenIdFromReceipt, type MedialaneClient } from \"@medialane/sdk/starknet\";\nimport type { IPType } from \"../../data/ip.js\";\nimport type { MetadataField } from \"../ip-type-fields.js\";\nimport { uploadJsonToIpfs } from \"../../utils/ipfs-upload.js\";\nimport type { FormValues } from \"./form.js\";\nimport type { FastMintSigner, MediaKind, MintedAsset } from \"./types.js\";\nimport type { MintAssetType } from \"./mintable-collections.js\";\n\nexport type MintDestination =\n | { mode: \"existing\"; collectionId: string; collectionContract: string }\n | { mode: \"new\"; name: string; symbol: string; description: string };\n\nexport interface MintAssetInput {\n client: MedialaneClient;\n signer: FastMintSigner;\n walletAddress: string;\n values: FormValues;\n ipType: IPType;\n templateFields: MetadataField[];\n mediaKind: MediaKind;\n mediaUri: string;\n featureUri: string | null;\n assetType: MintAssetType;\n editionCount: string;\n destination: MintDestination;\n singleCollections: ApiCollection[];\n refetchCollections: () => Promise<ApiCollection[]>;\n getUploadToken: () => Promise<string | null>;\n}\n\nasync function pollForNewCollection(\n refetchCollections: () => Promise<ApiCollection[]>,\n name: string,\n symbol: string,\n): Promise<ApiCollection | null> {\n for (let attempt = 0; attempt < 8; attempt++) {\n const list = await refetchCollections();\n const match = list.find((c) => c.name === name && c.symbol === symbol);\n if (match?.collectionId) return match;\n await new Promise((r) => setTimeout(r, 1500));\n }\n return null;\n}\n\nexport async function mintAsset(input: MintAssetInput): Promise<MintedAsset | null> {\n const { client, signer, walletAddress, values, destination } = input;\n\n const image = input.mediaKind === \"image\" ? input.mediaUri : input.featureUri!;\n const built = buildAssetMetadata({\n name: values.name,\n description: values.description || \"\",\n externalUrl: values.external_url || \"\",\n imageUri: image,\n creator: walletAddress,\n ipType: input.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 templateTraits: input.templateFields\n .filter(({ traitType, value }) => traitType.trim() && value.trim())\n .map(({ traitType, value }) => ({ traitType, value })),\n });\n const metadata: Record<string, unknown> = { ...built };\n if (input.mediaKind !== \"image\") metadata.animation_url = input.mediaUri;\n\n const uploadToken = await input.getUploadToken();\n if (!uploadToken) throw new Error(\"Sign in first\");\n const tokenUri = await uploadJsonToIpfs(client.api, metadata);\n\n const royaltyBps = Math.round(values.royalty * 100);\n let contractAddress: string | null;\n let tokenId: string | null;\n\n if (input.assetType === \"single\") {\n let collectionId = destination.mode === \"existing\" ? destination.collectionId : \"\";\n contractAddress = destination.mode === \"existing\"\n ? input.singleCollections.find((c) => c.collectionId === destination.collectionId)?.contractAddress ?? null\n : null;\n\n if (destination.mode === \"new\") {\n const created = await client.api.intents.create(\"create-collection\", {\n owner: walletAddress,\n name: destination.name,\n symbol: destination.symbol,\n description: destination.description || undefined,\n image,\n });\n await executeIntent(signer, client, created);\n\n const found = await pollForNewCollection(input.refetchCollections, destination.name, destination.symbol);\n if (!found) throw new Error(\"Collection created, but it's still indexing — try minting again in a moment from My Collections.\");\n collectionId = found.collectionId!;\n contractAddress = found.contractAddress ?? null;\n }\n\n const minted = await client.api.intents.create(\"mint\", {\n owner: walletAddress,\n collectionId,\n recipient: walletAddress,\n tokenUri,\n royaltyBps,\n });\n const result = await executeIntent(signer, client, minted);\n tokenId = contractAddress ? mintedTokenIdFromReceipt(result.receipt, contractAddress) : null;\n } else {\n let collectionContract = destination.mode === \"existing\" ? destination.collectionContract : \"\";\n\n if (destination.mode === \"new\") {\n const created = await client.api.intents.create(\"create-collection\", {\n owner: walletAddress,\n name: destination.name,\n symbol: destination.symbol,\n description: destination.description || undefined,\n image,\n baseUri: \"\",\n service: \"mip-erc1155\",\n });\n const deployResult = await executeIntent(signer, client, created);\n\n const deployed = deployedCollectionFromReceipt(deployResult.receipt, \"mip-erc1155\");\n if (!deployed) throw new Error(\"Collection deployed, but its address couldn't be read — check My Collections to mint into it.\");\n collectionContract = deployed;\n }\n\n const minted = await client.api.intents.create(\"mint\", {\n owner: walletAddress,\n recipient: walletAddress,\n collectionContract,\n tokenUri,\n value: input.editionCount,\n royaltyBps,\n });\n const result = await executeIntent(signer, client, minted);\n contractAddress = collectionContract;\n tokenId = mintedTokenIdFromReceipt(result.receipt, collectionContract);\n }\n\n return contractAddress && tokenId ? { contract: contractAddress, tokenId, image } : null;\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { ApiCollection } from '@medialane/sdk';
|
|
2
|
+
import { MedialaneClient } from '@medialane/sdk/starknet';
|
|
3
|
+
import { IPType } from '../../data/ip.cjs';
|
|
4
|
+
import { MetadataField } from '../ip-type-fields.cjs';
|
|
5
|
+
import { FormValues } from './form.cjs';
|
|
6
|
+
import { FastMintSigner, MediaKind, MintedAsset } from './types.cjs';
|
|
7
|
+
import { MintAssetType } from './mintable-collections.cjs';
|
|
8
|
+
import 'react/jsx-runtime';
|
|
9
|
+
import 'react';
|
|
10
|
+
import 'starknet';
|
|
11
|
+
|
|
12
|
+
type MintDestination = {
|
|
13
|
+
mode: "existing";
|
|
14
|
+
collectionId: string;
|
|
15
|
+
collectionContract: string;
|
|
16
|
+
} | {
|
|
17
|
+
mode: "new";
|
|
18
|
+
name: string;
|
|
19
|
+
symbol: string;
|
|
20
|
+
description: string;
|
|
21
|
+
};
|
|
22
|
+
interface MintAssetInput {
|
|
23
|
+
client: MedialaneClient;
|
|
24
|
+
signer: FastMintSigner;
|
|
25
|
+
walletAddress: string;
|
|
26
|
+
values: FormValues;
|
|
27
|
+
ipType: IPType;
|
|
28
|
+
templateFields: MetadataField[];
|
|
29
|
+
mediaKind: MediaKind;
|
|
30
|
+
mediaUri: string;
|
|
31
|
+
featureUri: string | null;
|
|
32
|
+
assetType: MintAssetType;
|
|
33
|
+
editionCount: string;
|
|
34
|
+
destination: MintDestination;
|
|
35
|
+
singleCollections: ApiCollection[];
|
|
36
|
+
refetchCollections: () => Promise<ApiCollection[]>;
|
|
37
|
+
getUploadToken: () => Promise<string | null>;
|
|
38
|
+
}
|
|
39
|
+
declare function mintAsset(input: MintAssetInput): Promise<MintedAsset | null>;
|
|
40
|
+
|
|
41
|
+
export { type MintAssetInput, type MintDestination, mintAsset };
|