@medialane/ui 0.141.2 → 0.142.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/dist/components/fast-mint/dropzone.cjs +120 -0
  2. package/dist/components/fast-mint/dropzone.cjs.map +1 -0
  3. package/dist/components/fast-mint/dropzone.d.cts +17 -0
  4. package/dist/components/fast-mint/dropzone.d.ts +17 -0
  5. package/dist/components/fast-mint/dropzone.js +96 -0
  6. package/dist/components/fast-mint/dropzone.js.map +1 -0
  7. package/dist/components/fast-mint/fast-mint.cjs +889 -0
  8. package/dist/components/fast-mint/fast-mint.cjs.map +1 -0
  9. package/dist/components/fast-mint/fast-mint.d.cts +10 -0
  10. package/dist/components/fast-mint/fast-mint.d.ts +10 -0
  11. package/dist/components/fast-mint/fast-mint.js +875 -0
  12. package/dist/components/fast-mint/fast-mint.js.map +1 -0
  13. package/dist/components/fast-mint/success-view.cjs +113 -0
  14. package/dist/components/fast-mint/success-view.cjs.map +1 -0
  15. package/dist/components/fast-mint/success-view.d.cts +17 -0
  16. package/dist/components/fast-mint/success-view.d.ts +17 -0
  17. package/dist/components/fast-mint/success-view.js +79 -0
  18. package/dist/components/fast-mint/success-view.js.map +1 -0
  19. package/dist/data/drop-create-schema.d.cts +2 -2
  20. package/dist/data/drop-create-schema.d.ts +2 -2
  21. package/dist/index.cjs +18 -0
  22. package/dist/index.cjs.map +1 -1
  23. package/dist/index.d.cts +7 -1
  24. package/dist/index.d.ts +7 -1
  25. package/dist/index.js +16 -0
  26. package/dist/index.js.map +1 -1
  27. package/dist/types-BEsgYSTA.d.cts +36 -0
  28. package/dist/types-BEsgYSTA.d.ts +36 -0
  29. package/dist/utils/ipfs-upload.cjs +87 -0
  30. package/dist/utils/ipfs-upload.cjs.map +1 -0
  31. package/dist/utils/ipfs-upload.d.cts +13 -0
  32. package/dist/utils/ipfs-upload.d.ts +13 -0
  33. package/dist/utils/ipfs-upload.js +60 -0
  34. package/dist/utils/ipfs-upload.js.map +1 -0
  35. package/package.json +5 -3
@@ -0,0 +1,120 @@
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 dropzone_exports = {};
21
+ __export(dropzone_exports, {
22
+ Dropzone: () => Dropzone
23
+ });
24
+ module.exports = __toCommonJS(dropzone_exports);
25
+ var import_jsx_runtime = require("react/jsx-runtime");
26
+ var import_react = require("react");
27
+ var import_lucide_react = require("lucide-react");
28
+ var import_cn = require("../../utils/cn.js");
29
+ var import_button = require("../button.js");
30
+ function Dropzone({
31
+ mediaKindLock,
32
+ presentation = "inline",
33
+ hasWallet,
34
+ onRequireWallet,
35
+ onFileSelected,
36
+ connectLabel = "Sign in"
37
+ }) {
38
+ const mediaInputRef = (0, import_react.useRef)(null);
39
+ const openMediaPicker = () => {
40
+ if (!hasWallet) {
41
+ onRequireWallet();
42
+ return;
43
+ }
44
+ mediaInputRef.current?.click();
45
+ };
46
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
47
+ "section",
48
+ {
49
+ role: "button",
50
+ tabIndex: 0,
51
+ "aria-label": hasWallet ? "Upload media" : `${connectLabel} to upload media`,
52
+ onClick: openMediaPicker,
53
+ onKeyDown: (e) => {
54
+ if (e.key === "Enter" || e.key === " ") {
55
+ e.preventDefault();
56
+ openMediaPicker();
57
+ }
58
+ },
59
+ onDragOver: (e) => e.preventDefault(),
60
+ onDrop: (e) => {
61
+ e.preventDefault();
62
+ if (!hasWallet) {
63
+ onRequireWallet();
64
+ return;
65
+ }
66
+ const f = e.dataTransfer.files?.[0];
67
+ if (f) onFileSelected(f);
68
+ },
69
+ className: (0, import_cn.cn)(
70
+ "relative flex flex-col items-center justify-center gap-4 cursor-pointer transition-colors text-center rounded-3xl border-[3px] border-dashed border-brand-blue/40 hover:border-brand-blue/70 hover:bg-brand-blue/[0.04] p-6",
71
+ presentation === "dialog" ? "min-h-[16rem] sm:min-h-[18rem]" : "min-h-[20rem] sm:min-h-[24rem]"
72
+ ),
73
+ children: [
74
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-14 w-14 rounded-2xl bg-muted flex items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.ImagePlus, { className: "h-6 w-6 text-muted-foreground" }) }),
75
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "space-y-1.5 px-6", children: [
76
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("h2", { className: "text-2xl sm:text-3xl font-bold tracking-tight", children: mediaKindLock ? `Drop or upload an ${mediaKindLock}` : "Drop or upload your media" }),
77
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-base text-muted-foreground max-w-sm mx-auto", children: mediaKindLock === "image" ? "It becomes your avatar and app theme." : "Protect your creation and monetize it worldwide." })
78
+ ] }),
79
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
80
+ import_button.Button,
81
+ {
82
+ type: "button",
83
+ variant: "outline",
84
+ className: "rounded-full mt-1 bg-card",
85
+ onClick: (e) => {
86
+ e.stopPropagation();
87
+ openMediaPicker();
88
+ },
89
+ children: hasWallet ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
90
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Upload, { className: "h-3.5 w-3.5 mr-1.5" }),
91
+ "Browse files"
92
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
93
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.LogIn, { className: "h-3.5 w-3.5 mr-1.5" }),
94
+ connectLabel
95
+ ] })
96
+ }
97
+ ),
98
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-2xs text-muted-foreground/70", children: mediaKindLock === "image" ? "JPG, PNG, GIF, WebP, or SVG up to 100 MB" : "Images, audio, video, and PDFs up to 100 MB; other documents up to 20 MB" }),
99
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
100
+ "input",
101
+ {
102
+ ref: mediaInputRef,
103
+ type: "file",
104
+ accept: mediaKindLock === "image" ? "image/*" : void 0,
105
+ className: "hidden",
106
+ onChange: (e) => {
107
+ const f = e.target.files?.[0];
108
+ if (f) onFileSelected(f);
109
+ }
110
+ }
111
+ )
112
+ ]
113
+ }
114
+ );
115
+ }
116
+ // Annotate the CommonJS export names for ESM import in node:
117
+ 0 && (module.exports = {
118
+ Dropzone
119
+ });
120
+ //# sourceMappingURL=dropzone.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/fast-mint/dropzone.tsx"],"sourcesContent":["\"use client\";\n\nimport { useRef } from \"react\";\nimport { ImagePlus, Upload, LogIn } from \"lucide-react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { Button } from \"../button.js\";\nimport type { MediaKind } from \"./types.js\";\n\nexport interface DropzoneProps {\n mediaKindLock?: MediaKind;\n presentation?: \"inline\" | \"dialog\";\n hasWallet: boolean;\n onRequireWallet: () => void;\n onFileSelected: (file: File) => void;\n connectLabel?: string;\n}\n\nexport function Dropzone({\n mediaKindLock,\n presentation = \"inline\",\n hasWallet,\n onRequireWallet,\n onFileSelected,\n connectLabel = \"Sign in\",\n}: DropzoneProps) {\n const mediaInputRef = useRef<HTMLInputElement>(null);\n\n const openMediaPicker = () => {\n if (!hasWallet) { onRequireWallet(); return; }\n mediaInputRef.current?.click();\n };\n\n return (\n <section\n role=\"button\"\n tabIndex={0}\n aria-label={hasWallet ? \"Upload media\" : `${connectLabel} to upload media`}\n onClick={openMediaPicker}\n onKeyDown={(e) => { if (e.key === \"Enter\" || e.key === \" \") { e.preventDefault(); openMediaPicker(); } }}\n onDragOver={(e) => e.preventDefault()}\n onDrop={(e) => { e.preventDefault(); if (!hasWallet) { onRequireWallet(); return; } const f = e.dataTransfer.files?.[0]; if (f) onFileSelected(f); }}\n className={cn(\n \"relative flex flex-col items-center justify-center gap-4 cursor-pointer transition-colors text-center rounded-3xl border-[3px] border-dashed border-brand-blue/40 hover:border-brand-blue/70 hover:bg-brand-blue/[0.04] p-6\",\n presentation === \"dialog\" ? \"min-h-[16rem] sm:min-h-[18rem]\" : \"min-h-[20rem] sm:min-h-[24rem]\"\n )}\n >\n <div className=\"h-14 w-14 rounded-2xl bg-muted flex items-center justify-center\">\n <ImagePlus className=\"h-6 w-6 text-muted-foreground\" />\n </div>\n <div className=\"space-y-1.5 px-6\">\n <h2 className=\"text-2xl sm:text-3xl font-bold tracking-tight\">\n {mediaKindLock ? `Drop or upload an ${mediaKindLock}` : \"Drop or upload your media\"}\n </h2>\n <p className=\"text-base text-muted-foreground max-w-sm mx-auto\">\n {mediaKindLock === \"image\" ? \"It becomes your avatar and app theme.\" : \"Protect your creation and monetize it worldwide.\"}\n </p>\n </div>\n <Button\n type=\"button\"\n variant=\"outline\"\n className=\"rounded-full mt-1 bg-card\"\n onClick={(e) => { e.stopPropagation(); openMediaPicker(); }}\n >\n {hasWallet ? (\n <>\n <Upload className=\"h-3.5 w-3.5 mr-1.5\" />\n Browse files\n </>\n ) : (\n <>\n <LogIn className=\"h-3.5 w-3.5 mr-1.5\" />\n {connectLabel}\n </>\n )}\n </Button>\n <p className=\"text-2xs text-muted-foreground/70\">\n {mediaKindLock === \"image\" ? \"JPG, PNG, GIF, WebP, or SVG up to 100 MB\" : \"Images, audio, video, and PDFs up to 100 MB; other documents up to 20 MB\"}\n </p>\n <input\n ref={mediaInputRef}\n type=\"file\"\n accept={mediaKindLock === \"image\" ? \"image/*\" : undefined}\n className=\"hidden\"\n onChange={(e) => { const f = e.target.files?.[0]; if (f) onFileSelected(f); }}\n />\n </section>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AA+CQ;AA7CR,mBAAuB;AACvB,0BAAyC;AACzC,gBAAmB;AACnB,oBAAuB;AAYhB,SAAS,SAAS;AAAA,EACvB;AAAA,EACA,eAAe;AAAA,EACf;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAe;AACjB,GAAkB;AAChB,QAAM,oBAAgB,qBAAyB,IAAI;AAEnD,QAAM,kBAAkB,MAAM;AAC5B,QAAI,CAAC,WAAW;AAAE,sBAAgB;AAAG;AAAA,IAAQ;AAC7C,kBAAc,SAAS,MAAM;AAAA,EAC/B;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,UAAU;AAAA,MACV,cAAY,YAAY,iBAAiB,GAAG,YAAY;AAAA,MACxD,SAAS;AAAA,MACT,WAAW,CAAC,MAAM;AAAE,YAAI,EAAE,QAAQ,WAAW,EAAE,QAAQ,KAAK;AAAE,YAAE,eAAe;AAAG,0BAAgB;AAAA,QAAG;AAAA,MAAE;AAAA,MACvG,YAAY,CAAC,MAAM,EAAE,eAAe;AAAA,MACpC,QAAQ,CAAC,MAAM;AAAE,UAAE,eAAe;AAAG,YAAI,CAAC,WAAW;AAAE,0BAAgB;AAAG;AAAA,QAAQ;AAAE,cAAM,IAAI,EAAE,aAAa,QAAQ,CAAC;AAAG,YAAI,EAAG,gBAAe,CAAC;AAAA,MAAG;AAAA,MACnJ,eAAW;AAAA,QACT;AAAA,QACA,iBAAiB,WAAW,mCAAmC;AAAA,MACjE;AAAA,MAEA;AAAA,oDAAC,SAAI,WAAU,mEACb,sDAAC,iCAAU,WAAU,iCAAgC,GACvD;AAAA,QACA,6CAAC,SAAI,WAAU,oBACb;AAAA,sDAAC,QAAG,WAAU,iDACX,0BAAgB,qBAAqB,aAAa,KAAK,6BAC1D;AAAA,UACA,4CAAC,OAAE,WAAU,oDACV,4BAAkB,UAAU,0CAA0C,oDACzE;AAAA,WACF;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,MAAK;AAAA,YACL,SAAQ;AAAA,YACR,WAAU;AAAA,YACV,SAAS,CAAC,MAAM;AAAE,gBAAE,gBAAgB;AAAG,8BAAgB;AAAA,YAAG;AAAA,YAEzD,sBACC,4EACE;AAAA,0DAAC,8BAAO,WAAU,sBAAqB;AAAA,cAAE;AAAA,eAE3C,IAEA,4EACE;AAAA,0DAAC,6BAAM,WAAU,sBAAqB;AAAA,cACrC;AAAA,eACH;AAAA;AAAA,QAEJ;AAAA,QACA,4CAAC,OAAE,WAAU,qCACV,4BAAkB,UAAU,6CAA6C,4EAC5E;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,KAAK;AAAA,YACL,MAAK;AAAA,YACL,QAAQ,kBAAkB,UAAU,YAAY;AAAA,YAChD,WAAU;AAAA,YACV,UAAU,CAAC,MAAM;AAAE,oBAAM,IAAI,EAAE,OAAO,QAAQ,CAAC;AAAG,kBAAI,EAAG,gBAAe,CAAC;AAAA,YAAG;AAAA;AAAA,QAC9E;AAAA;AAAA;AAAA,EACF;AAEJ;","names":[]}
@@ -0,0 +1,17 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { M as MediaKind } from '../../types-BEsgYSTA.cjs';
3
+ import 'starknet';
4
+ import '@medialane/sdk';
5
+ import '@medialane/sdk/starknet';
6
+
7
+ interface DropzoneProps {
8
+ mediaKindLock?: MediaKind;
9
+ presentation?: "inline" | "dialog";
10
+ hasWallet: boolean;
11
+ onRequireWallet: () => void;
12
+ onFileSelected: (file: File) => void;
13
+ connectLabel?: string;
14
+ }
15
+ declare function Dropzone({ mediaKindLock, presentation, hasWallet, onRequireWallet, onFileSelected, connectLabel, }: DropzoneProps): react_jsx_runtime.JSX.Element;
16
+
17
+ export { Dropzone, type DropzoneProps };
@@ -0,0 +1,17 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { M as MediaKind } from '../../types-BEsgYSTA.js';
3
+ import 'starknet';
4
+ import '@medialane/sdk';
5
+ import '@medialane/sdk/starknet';
6
+
7
+ interface DropzoneProps {
8
+ mediaKindLock?: MediaKind;
9
+ presentation?: "inline" | "dialog";
10
+ hasWallet: boolean;
11
+ onRequireWallet: () => void;
12
+ onFileSelected: (file: File) => void;
13
+ connectLabel?: string;
14
+ }
15
+ declare function Dropzone({ mediaKindLock, presentation, hasWallet, onRequireWallet, onFileSelected, connectLabel, }: DropzoneProps): react_jsx_runtime.JSX.Element;
16
+
17
+ export { Dropzone, type DropzoneProps };
@@ -0,0 +1,96 @@
1
+ "use client";
2
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
3
+ import { useRef } from "react";
4
+ import { ImagePlus, Upload, LogIn } from "lucide-react";
5
+ import { cn } from "../../utils/cn.js";
6
+ import { Button } from "../button.js";
7
+ function Dropzone({
8
+ mediaKindLock,
9
+ presentation = "inline",
10
+ hasWallet,
11
+ onRequireWallet,
12
+ onFileSelected,
13
+ connectLabel = "Sign in"
14
+ }) {
15
+ const mediaInputRef = useRef(null);
16
+ const openMediaPicker = () => {
17
+ if (!hasWallet) {
18
+ onRequireWallet();
19
+ return;
20
+ }
21
+ mediaInputRef.current?.click();
22
+ };
23
+ return /* @__PURE__ */ jsxs(
24
+ "section",
25
+ {
26
+ role: "button",
27
+ tabIndex: 0,
28
+ "aria-label": hasWallet ? "Upload media" : `${connectLabel} to upload media`,
29
+ onClick: openMediaPicker,
30
+ onKeyDown: (e) => {
31
+ if (e.key === "Enter" || e.key === " ") {
32
+ e.preventDefault();
33
+ openMediaPicker();
34
+ }
35
+ },
36
+ onDragOver: (e) => e.preventDefault(),
37
+ onDrop: (e) => {
38
+ e.preventDefault();
39
+ if (!hasWallet) {
40
+ onRequireWallet();
41
+ return;
42
+ }
43
+ const f = e.dataTransfer.files?.[0];
44
+ if (f) onFileSelected(f);
45
+ },
46
+ className: cn(
47
+ "relative flex flex-col items-center justify-center gap-4 cursor-pointer transition-colors text-center rounded-3xl border-[3px] border-dashed border-brand-blue/40 hover:border-brand-blue/70 hover:bg-brand-blue/[0.04] p-6",
48
+ presentation === "dialog" ? "min-h-[16rem] sm:min-h-[18rem]" : "min-h-[20rem] sm:min-h-[24rem]"
49
+ ),
50
+ children: [
51
+ /* @__PURE__ */ jsx("div", { className: "h-14 w-14 rounded-2xl bg-muted flex items-center justify-center", children: /* @__PURE__ */ jsx(ImagePlus, { className: "h-6 w-6 text-muted-foreground" }) }),
52
+ /* @__PURE__ */ jsxs("div", { className: "space-y-1.5 px-6", children: [
53
+ /* @__PURE__ */ jsx("h2", { className: "text-2xl sm:text-3xl font-bold tracking-tight", children: mediaKindLock ? `Drop or upload an ${mediaKindLock}` : "Drop or upload your media" }),
54
+ /* @__PURE__ */ jsx("p", { className: "text-base text-muted-foreground max-w-sm mx-auto", children: mediaKindLock === "image" ? "It becomes your avatar and app theme." : "Protect your creation and monetize it worldwide." })
55
+ ] }),
56
+ /* @__PURE__ */ jsx(
57
+ Button,
58
+ {
59
+ type: "button",
60
+ variant: "outline",
61
+ className: "rounded-full mt-1 bg-card",
62
+ onClick: (e) => {
63
+ e.stopPropagation();
64
+ openMediaPicker();
65
+ },
66
+ children: hasWallet ? /* @__PURE__ */ jsxs(Fragment, { children: [
67
+ /* @__PURE__ */ jsx(Upload, { className: "h-3.5 w-3.5 mr-1.5" }),
68
+ "Browse files"
69
+ ] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
70
+ /* @__PURE__ */ jsx(LogIn, { className: "h-3.5 w-3.5 mr-1.5" }),
71
+ connectLabel
72
+ ] })
73
+ }
74
+ ),
75
+ /* @__PURE__ */ jsx("p", { className: "text-2xs text-muted-foreground/70", children: mediaKindLock === "image" ? "JPG, PNG, GIF, WebP, or SVG up to 100 MB" : "Images, audio, video, and PDFs up to 100 MB; other documents up to 20 MB" }),
76
+ /* @__PURE__ */ jsx(
77
+ "input",
78
+ {
79
+ ref: mediaInputRef,
80
+ type: "file",
81
+ accept: mediaKindLock === "image" ? "image/*" : void 0,
82
+ className: "hidden",
83
+ onChange: (e) => {
84
+ const f = e.target.files?.[0];
85
+ if (f) onFileSelected(f);
86
+ }
87
+ }
88
+ )
89
+ ]
90
+ }
91
+ );
92
+ }
93
+ export {
94
+ Dropzone
95
+ };
96
+ //# sourceMappingURL=dropzone.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/fast-mint/dropzone.tsx"],"sourcesContent":["\"use client\";\n\nimport { useRef } from \"react\";\nimport { ImagePlus, Upload, LogIn } from \"lucide-react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { Button } from \"../button.js\";\nimport type { MediaKind } from \"./types.js\";\n\nexport interface DropzoneProps {\n mediaKindLock?: MediaKind;\n presentation?: \"inline\" | \"dialog\";\n hasWallet: boolean;\n onRequireWallet: () => void;\n onFileSelected: (file: File) => void;\n connectLabel?: string;\n}\n\nexport function Dropzone({\n mediaKindLock,\n presentation = \"inline\",\n hasWallet,\n onRequireWallet,\n onFileSelected,\n connectLabel = \"Sign in\",\n}: DropzoneProps) {\n const mediaInputRef = useRef<HTMLInputElement>(null);\n\n const openMediaPicker = () => {\n if (!hasWallet) { onRequireWallet(); return; }\n mediaInputRef.current?.click();\n };\n\n return (\n <section\n role=\"button\"\n tabIndex={0}\n aria-label={hasWallet ? \"Upload media\" : `${connectLabel} to upload media`}\n onClick={openMediaPicker}\n onKeyDown={(e) => { if (e.key === \"Enter\" || e.key === \" \") { e.preventDefault(); openMediaPicker(); } }}\n onDragOver={(e) => e.preventDefault()}\n onDrop={(e) => { e.preventDefault(); if (!hasWallet) { onRequireWallet(); return; } const f = e.dataTransfer.files?.[0]; if (f) onFileSelected(f); }}\n className={cn(\n \"relative flex flex-col items-center justify-center gap-4 cursor-pointer transition-colors text-center rounded-3xl border-[3px] border-dashed border-brand-blue/40 hover:border-brand-blue/70 hover:bg-brand-blue/[0.04] p-6\",\n presentation === \"dialog\" ? \"min-h-[16rem] sm:min-h-[18rem]\" : \"min-h-[20rem] sm:min-h-[24rem]\"\n )}\n >\n <div className=\"h-14 w-14 rounded-2xl bg-muted flex items-center justify-center\">\n <ImagePlus className=\"h-6 w-6 text-muted-foreground\" />\n </div>\n <div className=\"space-y-1.5 px-6\">\n <h2 className=\"text-2xl sm:text-3xl font-bold tracking-tight\">\n {mediaKindLock ? `Drop or upload an ${mediaKindLock}` : \"Drop or upload your media\"}\n </h2>\n <p className=\"text-base text-muted-foreground max-w-sm mx-auto\">\n {mediaKindLock === \"image\" ? \"It becomes your avatar and app theme.\" : \"Protect your creation and monetize it worldwide.\"}\n </p>\n </div>\n <Button\n type=\"button\"\n variant=\"outline\"\n className=\"rounded-full mt-1 bg-card\"\n onClick={(e) => { e.stopPropagation(); openMediaPicker(); }}\n >\n {hasWallet ? (\n <>\n <Upload className=\"h-3.5 w-3.5 mr-1.5\" />\n Browse files\n </>\n ) : (\n <>\n <LogIn className=\"h-3.5 w-3.5 mr-1.5\" />\n {connectLabel}\n </>\n )}\n </Button>\n <p className=\"text-2xs text-muted-foreground/70\">\n {mediaKindLock === \"image\" ? \"JPG, PNG, GIF, WebP, or SVG up to 100 MB\" : \"Images, audio, video, and PDFs up to 100 MB; other documents up to 20 MB\"}\n </p>\n <input\n ref={mediaInputRef}\n type=\"file\"\n accept={mediaKindLock === \"image\" ? \"image/*\" : undefined}\n className=\"hidden\"\n onChange={(e) => { const f = e.target.files?.[0]; if (f) onFileSelected(f); }}\n />\n </section>\n );\n}\n"],"mappings":";AA+CQ,SAiBE,UAjBF,KAEF,YAFE;AA7CR,SAAS,cAAc;AACvB,SAAS,WAAW,QAAQ,aAAa;AACzC,SAAS,UAAU;AACnB,SAAS,cAAc;AAYhB,SAAS,SAAS;AAAA,EACvB;AAAA,EACA,eAAe;AAAA,EACf;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAe;AACjB,GAAkB;AAChB,QAAM,gBAAgB,OAAyB,IAAI;AAEnD,QAAM,kBAAkB,MAAM;AAC5B,QAAI,CAAC,WAAW;AAAE,sBAAgB;AAAG;AAAA,IAAQ;AAC7C,kBAAc,SAAS,MAAM;AAAA,EAC/B;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,UAAU;AAAA,MACV,cAAY,YAAY,iBAAiB,GAAG,YAAY;AAAA,MACxD,SAAS;AAAA,MACT,WAAW,CAAC,MAAM;AAAE,YAAI,EAAE,QAAQ,WAAW,EAAE,QAAQ,KAAK;AAAE,YAAE,eAAe;AAAG,0BAAgB;AAAA,QAAG;AAAA,MAAE;AAAA,MACvG,YAAY,CAAC,MAAM,EAAE,eAAe;AAAA,MACpC,QAAQ,CAAC,MAAM;AAAE,UAAE,eAAe;AAAG,YAAI,CAAC,WAAW;AAAE,0BAAgB;AAAG;AAAA,QAAQ;AAAE,cAAM,IAAI,EAAE,aAAa,QAAQ,CAAC;AAAG,YAAI,EAAG,gBAAe,CAAC;AAAA,MAAG;AAAA,MACnJ,WAAW;AAAA,QACT;AAAA,QACA,iBAAiB,WAAW,mCAAmC;AAAA,MACjE;AAAA,MAEA;AAAA,4BAAC,SAAI,WAAU,mEACb,8BAAC,aAAU,WAAU,iCAAgC,GACvD;AAAA,QACA,qBAAC,SAAI,WAAU,oBACb;AAAA,8BAAC,QAAG,WAAU,iDACX,0BAAgB,qBAAqB,aAAa,KAAK,6BAC1D;AAAA,UACA,oBAAC,OAAE,WAAU,oDACV,4BAAkB,UAAU,0CAA0C,oDACzE;AAAA,WACF;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,MAAK;AAAA,YACL,SAAQ;AAAA,YACR,WAAU;AAAA,YACV,SAAS,CAAC,MAAM;AAAE,gBAAE,gBAAgB;AAAG,8BAAgB;AAAA,YAAG;AAAA,YAEzD,sBACC,iCACE;AAAA,kCAAC,UAAO,WAAU,sBAAqB;AAAA,cAAE;AAAA,eAE3C,IAEA,iCACE;AAAA,kCAAC,SAAM,WAAU,sBAAqB;AAAA,cACrC;AAAA,eACH;AAAA;AAAA,QAEJ;AAAA,QACA,oBAAC,OAAE,WAAU,qCACV,4BAAkB,UAAU,6CAA6C,4EAC5E;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,KAAK;AAAA,YACL,MAAK;AAAA,YACL,QAAQ,kBAAkB,UAAU,YAAY;AAAA,YAChD,WAAU;AAAA,YACV,UAAU,CAAC,MAAM;AAAE,oBAAM,IAAI,EAAE,OAAO,QAAQ,CAAC;AAAG,kBAAI,EAAG,gBAAe,CAAC;AAAA,YAAG;AAAA;AAAA,QAC9E;AAAA;AAAA;AAAA,EACF;AAEJ;","names":[]}