@brunoalz/smartgesti-site-editor 0.1.3 → 0.2.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/inputs/ImageInput.d.ts +3 -1
- package/dist/components/inputs/ImageInput.d.ts.map +1 -1
- package/dist/components/inputs/ImageInput.js +128 -109
- package/dist/components/inputs/ImageInput.js.map +1 -1
- package/dist/editor/LandingPageEditorV2.d.ts.map +1 -1
- package/dist/editor/LandingPageEditorV2.js +180 -134
- package/dist/editor/LandingPageEditorV2.js.map +1 -1
- package/dist/editor/PropertyEditor/BlockPropertyEditor.d.ts.map +1 -1
- package/dist/editor/PropertyEditor/BlockPropertyEditor.js +37 -35
- package/dist/editor/PropertyEditor/BlockPropertyEditor.js.map +1 -1
- package/dist/editor/PropertyEditor/renderPropertyInput.d.ts.map +1 -1
- package/dist/editor/PropertyEditor/renderPropertyInput.js +12 -11
- package/dist/editor/PropertyEditor/renderPropertyInput.js.map +1 -1
- package/dist/engine/export/exportHtml.d.ts.map +1 -1
- package/dist/engine/export/exportHtml.js +234 -54
- package/dist/engine/export/exportHtml.js.map +1 -1
- package/dist/engine/export/exporters/forms/FormExporters.d.ts.map +1 -1
- package/dist/engine/export/exporters/forms/FormExporters.js +52 -39
- package/dist/engine/export/exporters/forms/FormExporters.js.map +1 -1
- package/dist/engine/export/exporters/layout/BoxExporter.d.ts.map +1 -1
- package/dist/engine/export/exporters/layout/BoxExporter.js +18 -16
- package/dist/engine/export/exporters/layout/BoxExporter.js.map +1 -1
- package/dist/engine/export/exporters/layout/ContainerExporter.d.ts.map +1 -1
- package/dist/engine/export/exporters/layout/ContainerExporter.js +17 -10
- package/dist/engine/export/exporters/layout/ContainerExporter.js.map +1 -1
- package/dist/engine/export/exporters/layout/GridExporter.d.ts.map +1 -1
- package/dist/engine/export/exporters/layout/GridExporter.js +13 -7
- package/dist/engine/export/exporters/layout/GridExporter.js.map +1 -1
- package/dist/engine/export/exporters/layout/StackExporter.d.ts.map +1 -1
- package/dist/engine/export/exporters/layout/StackExporter.js +12 -10
- package/dist/engine/export/exporters/layout/StackExporter.js.map +1 -1
- package/dist/engine/export/exporters/sections/ContentGridExporters.d.ts.map +1 -1
- package/dist/engine/export/exporters/sections/ContentGridExporters.js +101 -56
- package/dist/engine/export/exporters/sections/ContentGridExporters.js.map +1 -1
- package/dist/engine/export/exporters/sections/FooterExporter.d.ts.map +1 -1
- package/dist/engine/export/exporters/sections/FooterExporter.js +38 -21
- package/dist/engine/export/exporters/sections/FooterExporter.js.map +1 -1
- package/dist/engine/export/exporters/sections/HeroExporter.d.ts.map +1 -1
- package/dist/engine/export/exporters/sections/HeroExporter.js +37 -25
- package/dist/engine/export/exporters/sections/HeroExporter.js.map +1 -1
- package/dist/engine/export/exporters/sections/MarketingExporters.d.ts.map +1 -1
- package/dist/engine/export/exporters/sections/MarketingExporters.js +100 -87
- package/dist/engine/export/exporters/sections/MarketingExporters.js.map +1 -1
- package/dist/engine/export/exporters/sections/NavbarExporter.d.ts.map +1 -1
- package/dist/engine/export/exporters/sections/NavbarExporter.js +424 -65
- package/dist/engine/export/exporters/sections/NavbarExporter.js.map +1 -1
- package/dist/engine/export/shared/idGenerator.d.ts +51 -0
- package/dist/engine/export/shared/idGenerator.d.ts.map +1 -0
- package/dist/engine/export/shared/idGenerator.js +20 -0
- package/dist/engine/export/shared/idGenerator.js.map +1 -0
- package/dist/engine/export/shared/responsiveGridHelper.d.ts +124 -0
- package/dist/engine/export/shared/responsiveGridHelper.d.ts.map +1 -0
- package/dist/engine/export/shared/responsiveGridHelper.js +87 -0
- package/dist/engine/export/shared/responsiveGridHelper.js.map +1 -0
- package/dist/engine/export/styleResolver.d.ts.map +1 -1
- package/dist/engine/export/styleResolver.js +117 -110
- package/dist/engine/export/styleResolver.js.map +1 -1
- package/dist/engine/presets/navbarVariations.d.ts.map +1 -1
- package/dist/engine/presets/navbarVariations.js +0 -16
- package/dist/engine/presets/navbarVariations.js.map +1 -1
- package/dist/engine/registry/blocks/sections/navbar.d.ts +22 -0
- package/dist/engine/registry/blocks/sections/navbar.d.ts.map +1 -1
- package/dist/engine/registry/blocks/sections/navbar.js +69 -51
- package/dist/engine/registry/blocks/sections/navbar.js.map +1 -1
- package/dist/engine/render/renderers/sections/NavbarRenderer.d.ts.map +1 -1
- package/dist/engine/render/renderers/sections/NavbarRenderer.js +67 -46
- package/dist/engine/render/renderers/sections/NavbarRenderer.js.map +1 -1
- package/dist/engine/schema/siteDocument.d.ts +5 -1
- package/dist/engine/schema/siteDocument.d.ts.map +1 -1
- package/dist/engine/schema/siteDocument.js.map +1 -1
- package/dist/shared/templates/escola-edvi.d.ts.map +1 -1
- package/dist/shared/templates/escola-edvi.js +5 -5
- package/dist/shared/templates/escola-edvi.js.map +1 -1
- package/dist/shared/templates/escola-premium.d.ts.map +1 -1
- package/dist/shared/templates/escola-premium.js +5 -6
- package/dist/shared/templates/escola-premium.js.map +1 -1
- package/dist/shared/templates/escola-zilom.d.ts.map +1 -1
- package/dist/shared/templates/escola-zilom.js +5 -5
- package/dist/shared/templates/escola-zilom.js.map +1 -1
- package/dist/styles/landing-page.css +18 -21
- package/dist/utils/pageTemplateFactory.d.ts +1 -1
- package/dist/utils/pageTemplateFactory.d.ts.map +1 -1
- package/dist/utils/pageTemplateFactory.js +17 -24
- package/dist/utils/pageTemplateFactory.js.map +1 -1
- package/package.json +1 -1
|
@@ -13,7 +13,9 @@ interface ImageInputProps {
|
|
|
13
13
|
siteId?: string;
|
|
14
14
|
authToken?: string;
|
|
15
15
|
assetType?: 'image' | 'video' | 'icon' | 'logo';
|
|
16
|
+
deferUpload?: boolean;
|
|
17
|
+
onPendingFile?: (file: File | null) => void;
|
|
16
18
|
}
|
|
17
|
-
export declare function ImageInput({ value, onChange, label, size, showUrlInput, maxSizeMB, tenantId, schoolId, siteId, authToken, assetType, }: ImageInputProps): import("react/jsx-runtime").JSX.Element;
|
|
19
|
+
export declare function ImageInput({ value, onChange, label, size, showUrlInput, maxSizeMB, tenantId, schoolId, siteId, authToken, assetType, deferUpload, onPendingFile, }: ImageInputProps): import("react/jsx-runtime").JSX.Element;
|
|
18
20
|
export {};
|
|
19
21
|
//# sourceMappingURL=ImageInput.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ImageInput.d.ts","sourceRoot":"","sources":["../../../src/components/inputs/ImageInput.tsx"],"names":[],"mappings":"AAGA,UAAU,eAAe;IACvB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;IACxC,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,SAAS,CAAC,EAAE,MAAM,CAAA;IAElB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"ImageInput.d.ts","sourceRoot":"","sources":["../../../src/components/inputs/ImageInput.tsx"],"names":[],"mappings":"AAGA,UAAU,eAAe;IACvB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;IACxC,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,SAAS,CAAC,EAAE,MAAM,CAAA;IAElB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAA;IAE/C,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,KAAK,IAAI,CAAA;CAC5C;AAED,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,QAAQ,EACR,KAAK,EACL,IAAI,EACJ,YAAmB,EACnB,SAAa,EACb,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,SAAS,EACT,SAAmB,EACnB,WAAmB,EACnB,aAAa,GACd,EAAE,eAAe,2CA4MjB"}
|
|
@@ -1,101 +1,151 @@
|
|
|
1
|
-
import { jsxs as
|
|
2
|
-
import { useState as
|
|
3
|
-
import { cn as
|
|
4
|
-
function
|
|
1
|
+
import { jsxs as w, jsx as t } from "react/jsx-runtime";
|
|
2
|
+
import { useState as E } from "react";
|
|
3
|
+
import { cn as N } from "../../utils/cn.js";
|
|
4
|
+
function F({
|
|
5
5
|
value: i,
|
|
6
|
-
onChange:
|
|
7
|
-
label:
|
|
8
|
-
size:
|
|
9
|
-
showUrlInput:
|
|
10
|
-
maxSizeMB:
|
|
11
|
-
tenantId:
|
|
12
|
-
schoolId:
|
|
13
|
-
siteId:
|
|
14
|
-
authToken:
|
|
15
|
-
assetType:
|
|
6
|
+
onChange: d,
|
|
7
|
+
label: f,
|
|
8
|
+
size: h,
|
|
9
|
+
showUrlInput: j = !0,
|
|
10
|
+
maxSizeMB: x = 5,
|
|
11
|
+
tenantId: c,
|
|
12
|
+
schoolId: u,
|
|
13
|
+
siteId: p,
|
|
14
|
+
authToken: g,
|
|
15
|
+
assetType: b = "image",
|
|
16
|
+
deferUpload: U = !1,
|
|
17
|
+
onPendingFile: y
|
|
16
18
|
}) {
|
|
17
|
-
const [
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
}
|
|
26
|
-
if (!o.type.startsWith("image/") && !o.type.startsWith("video/")) {
|
|
27
|
-
r("Apenas imagens e vídeos são permitidos");
|
|
28
|
-
return;
|
|
29
|
-
}
|
|
30
|
-
if (!f) {
|
|
31
|
-
r("Autenticação necessária para upload");
|
|
32
|
-
return;
|
|
33
|
-
}
|
|
34
|
-
if (!d) {
|
|
35
|
-
r("Contexto do tenant é necessário");
|
|
36
|
-
return;
|
|
37
|
-
}
|
|
38
|
-
r(null), b(!0);
|
|
39
|
-
try {
|
|
40
|
-
const t = new FormData();
|
|
41
|
-
t.append("file", o);
|
|
42
|
-
const U = "http://localhost:3001", m = new URLSearchParams({ tenantId: d, assetType: x });
|
|
43
|
-
c && m.append("schoolId", c), u && m.append("siteId", u);
|
|
44
|
-
const n = await fetch(`${U}/api/site-assets/upload?${m}`, {
|
|
45
|
-
method: "POST",
|
|
46
|
-
headers: {
|
|
47
|
-
Authorization: `Bearer ${f}`
|
|
19
|
+
const [n, v] = E(!1), [k, a] = E(null);
|
|
20
|
+
return /* @__PURE__ */ w("div", { className: "space-y-2", children: [
|
|
21
|
+
f && /* @__PURE__ */ t("label", { className: "block text-xs font-medium text-gray-800 dark:text-gray-100", children: f }),
|
|
22
|
+
/* @__PURE__ */ t(
|
|
23
|
+
"input",
|
|
24
|
+
{
|
|
25
|
+
ref: (r) => {
|
|
26
|
+
r && (window.__imageInputRef = r);
|
|
48
27
|
},
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
28
|
+
type: "file",
|
|
29
|
+
accept: "image/*",
|
|
30
|
+
onChange: async (r) => {
|
|
31
|
+
console.log("[ImageInput] Upload config:", { tenantId: c, schoolId: u, siteId: p, hasAuthToken: !!g, assetType: b });
|
|
32
|
+
const o = r.target.files?.[0];
|
|
33
|
+
if (!o) return;
|
|
34
|
+
const A = x * 1024 * 1024;
|
|
35
|
+
if (o.size > A) {
|
|
36
|
+
a(`Arquivo muito grande. Máximo: ${x}MB`);
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
if (!o.type.startsWith("image/") && !o.type.startsWith("video/")) {
|
|
40
|
+
a("Apenas imagens e vídeos são permitidos");
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
if (a(null), U) {
|
|
44
|
+
try {
|
|
45
|
+
const e = new FileReader();
|
|
46
|
+
e.onload = (m) => {
|
|
47
|
+
const s = m.target?.result;
|
|
48
|
+
d(s), y && y(o);
|
|
49
|
+
}, e.onerror = () => {
|
|
50
|
+
a("Erro ao ler o arquivo");
|
|
51
|
+
}, e.readAsDataURL(o);
|
|
52
|
+
} catch (e) {
|
|
53
|
+
console.error("Erro ao criar preview:", e), a(e instanceof Error ? e.message : "Erro ao processar imagem");
|
|
54
|
+
}
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
if (!g) {
|
|
58
|
+
a("Autenticação necessária para upload");
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
if (!c) {
|
|
62
|
+
a("Contexto do tenant é necessário");
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
v(!0);
|
|
66
|
+
try {
|
|
67
|
+
const e = new FormData();
|
|
68
|
+
e.append("file", o);
|
|
69
|
+
const m = "http://localhost:3001", s = new URLSearchParams({ tenantId: c, assetType: b });
|
|
70
|
+
u && s.append("schoolId", u), p && s.append("siteId", p);
|
|
71
|
+
const l = await fetch(`${m}/api/site-assets/upload?${s}`, {
|
|
72
|
+
method: "POST",
|
|
73
|
+
headers: {
|
|
74
|
+
Authorization: `Bearer ${g}`
|
|
75
|
+
},
|
|
76
|
+
body: e
|
|
77
|
+
});
|
|
78
|
+
if (!l.ok) {
|
|
79
|
+
const R = await l.json().catch(() => ({}));
|
|
80
|
+
throw l.status === 401 ? new Error("Sessão expirada. Faça login novamente.") : new Error(R.message || "Upload falhou");
|
|
81
|
+
}
|
|
82
|
+
const C = await l.json();
|
|
83
|
+
d(C.url), a(null);
|
|
84
|
+
} catch (e) {
|
|
85
|
+
console.error("Erro no upload:", e), a(e instanceof Error ? e.message : "Erro ao fazer upload da imagem");
|
|
86
|
+
} finally {
|
|
87
|
+
v(!1);
|
|
88
|
+
}
|
|
89
|
+
},
|
|
90
|
+
disabled: n,
|
|
91
|
+
className: "hidden",
|
|
92
|
+
id: `image-input-${Math.random()}`
|
|
54
93
|
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
console.error("Erro no upload:", t), r(t instanceof Error ? t.message : "Erro ao fazer upload da imagem");
|
|
59
|
-
} finally {
|
|
60
|
-
b(!1);
|
|
61
|
-
}
|
|
62
|
-
};
|
|
63
|
-
return /* @__PURE__ */ v("div", { className: "space-y-2", children: [
|
|
64
|
-
g && /* @__PURE__ */ e("label", { className: "block text-xs font-medium text-gray-800 dark:text-gray-100", children: g }),
|
|
65
|
-
i && /* @__PURE__ */ e(
|
|
66
|
-
"div",
|
|
94
|
+
),
|
|
95
|
+
/* @__PURE__ */ t(
|
|
96
|
+
"button",
|
|
67
97
|
{
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
98
|
+
type: "button",
|
|
99
|
+
onClick: () => {
|
|
100
|
+
const r = document.querySelector('input[type="file"][accept="image/*"]');
|
|
101
|
+
r && (r.value = "", r.click());
|
|
102
|
+
},
|
|
103
|
+
disabled: n,
|
|
104
|
+
className: N(
|
|
105
|
+
"rounded-lg overflow-hidden border-2 transition-all duration-200",
|
|
106
|
+
"flex items-center justify-center w-full",
|
|
107
|
+
"bg-gray-50 dark:bg-gray-800 hover:bg-gray-100 dark:hover:bg-gray-700",
|
|
108
|
+
i ? "border-blue-400 dark:border-blue-500 hover:border-blue-500" : "border-dashed border-gray-300 dark:border-gray-600 hover:border-blue-400",
|
|
109
|
+
n && "opacity-50 cursor-not-allowed",
|
|
110
|
+
!n && "cursor-pointer"
|
|
74
111
|
),
|
|
75
112
|
style: {
|
|
76
|
-
height:
|
|
113
|
+
height: h?.height || 120,
|
|
114
|
+
maxWidth: h?.width || 200
|
|
77
115
|
},
|
|
78
|
-
children: /* @__PURE__ */
|
|
116
|
+
children: i ? /* @__PURE__ */ t(
|
|
79
117
|
"img",
|
|
80
118
|
{
|
|
81
119
|
src: i,
|
|
82
120
|
alt: "preview",
|
|
83
121
|
className: "w-full h-full object-contain",
|
|
84
|
-
onError: (
|
|
85
|
-
|
|
122
|
+
onError: (r) => {
|
|
123
|
+
r.currentTarget.style.display = "none";
|
|
86
124
|
}
|
|
87
125
|
}
|
|
88
|
-
)
|
|
126
|
+
) : /* @__PURE__ */ w("div", { className: "flex flex-col items-center justify-center gap-2 p-4 text-center", children: [
|
|
127
|
+
/* @__PURE__ */ t("svg", { className: "w-8 h-8 text-gray-400", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ t("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M12 4v16m8-8H4" }) }),
|
|
128
|
+
/* @__PURE__ */ t("span", { className: "text-xs text-gray-500 dark:text-gray-400", children: n ? "Enviando..." : "Clique para selecionar" })
|
|
129
|
+
] })
|
|
130
|
+
}
|
|
131
|
+
),
|
|
132
|
+
i && !n && /* @__PURE__ */ t(
|
|
133
|
+
"button",
|
|
134
|
+
{
|
|
135
|
+
onClick: () => d(void 0),
|
|
136
|
+
type: "button",
|
|
137
|
+
className: "text-xs text-red-600 hover:text-red-700 dark:text-red-400 dark:hover:text-red-300 text-left transition-colors font-medium",
|
|
138
|
+
children: "Remover imagem"
|
|
89
139
|
}
|
|
90
140
|
),
|
|
91
|
-
|
|
141
|
+
j && /* @__PURE__ */ t(
|
|
92
142
|
"input",
|
|
93
143
|
{
|
|
94
144
|
type: "text",
|
|
95
145
|
placeholder: "URL da imagem",
|
|
96
146
|
value: i || "",
|
|
97
|
-
onChange: (
|
|
98
|
-
className:
|
|
147
|
+
onChange: (r) => d(r.target.value || void 0),
|
|
148
|
+
className: N(
|
|
99
149
|
"flex h-11 w-full rounded-lg border-2 bg-white dark:bg-gray-800 px-4 py-2.5 text-sm transition-all duration-200",
|
|
100
150
|
"placeholder:text-gray-400 dark:placeholder:text-gray-500",
|
|
101
151
|
"focus:outline-none",
|
|
@@ -104,41 +154,10 @@ function R({
|
|
|
104
154
|
)
|
|
105
155
|
}
|
|
106
156
|
),
|
|
107
|
-
/* @__PURE__ */
|
|
108
|
-
/* @__PURE__ */ e(
|
|
109
|
-
"input",
|
|
110
|
-
{
|
|
111
|
-
type: "file",
|
|
112
|
-
accept: "image/*",
|
|
113
|
-
onChange: E,
|
|
114
|
-
disabled: l,
|
|
115
|
-
className: p(
|
|
116
|
-
"text-sm w-full",
|
|
117
|
-
"file:mr-4 file:py-2 file:px-4",
|
|
118
|
-
"file:rounded-lg file:border-0",
|
|
119
|
-
"file:text-sm file:font-medium",
|
|
120
|
-
"file:bg-blue-500 file:text-white file:hover:bg-blue-600",
|
|
121
|
-
"file:cursor-pointer file:transition-all",
|
|
122
|
-
"file:hover:scale-[1.02] file:active:scale-[0.98]",
|
|
123
|
-
l && "opacity-50 cursor-not-allowed"
|
|
124
|
-
)
|
|
125
|
-
}
|
|
126
|
-
),
|
|
127
|
-
l && /* @__PURE__ */ e("div", { className: "absolute inset-0 bg-white/80 dark:bg-gray-900/80 flex items-center justify-center rounded-lg pointer-events-none", children: /* @__PURE__ */ e("span", { className: "text-sm text-blue-600 dark:text-blue-400 font-medium", children: "Enviando..." }) })
|
|
128
|
-
] }),
|
|
129
|
-
i && !l && /* @__PURE__ */ e(
|
|
130
|
-
"button",
|
|
131
|
-
{
|
|
132
|
-
onClick: () => s(void 0),
|
|
133
|
-
type: "button",
|
|
134
|
-
className: "text-xs text-red-600 hover:text-red-700 dark:text-red-400 dark:hover:text-red-300 text-left transition-colors font-medium",
|
|
135
|
-
children: "Remover imagem"
|
|
136
|
-
}
|
|
137
|
-
),
|
|
138
|
-
y && /* @__PURE__ */ e("div", { className: "text-xs text-red-600 dark:text-red-400 bg-red-50 dark:bg-red-900/20 p-2 rounded border border-red-200 dark:border-red-800", children: y })
|
|
157
|
+
k && /* @__PURE__ */ t("div", { className: "text-xs text-red-600 dark:text-red-400 bg-red-50 dark:bg-red-900/20 p-2 rounded border border-red-200 dark:border-red-800", children: k })
|
|
139
158
|
] });
|
|
140
159
|
}
|
|
141
160
|
export {
|
|
142
|
-
|
|
161
|
+
F as ImageInput
|
|
143
162
|
};
|
|
144
163
|
//# sourceMappingURL=ImageInput.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ImageInput.js","sources":["../../../src/components/inputs/ImageInput.tsx"],"sourcesContent":["import { useState } from 'react'\nimport { cn } from '../../utils/cn'\n\ninterface ImageInputProps {\n value?: string\n onChange: (v?: string) => void\n label?: string\n size?: { width: number; height: number }\n showUrlInput?: boolean\n maxSizeMB?: number\n // Novos: Contexto para upload seguro\n tenantId?: string\n schoolId?: string\n siteId?: string\n authToken?: string\n assetType?: 'image' | 'video' | 'icon' | 'logo'\n}\n\nexport function ImageInput({\n value,\n onChange,\n label,\n size,\n showUrlInput = true,\n maxSizeMB = 5,\n tenantId,\n schoolId,\n siteId,\n authToken,\n assetType = 'image',\n}: ImageInputProps) {\n const [uploading, setUploading] = useState(false)\n const [error, setError] = useState<string | null>(null)\n\n const handleFileChange = async (e: React.ChangeEvent<HTMLInputElement>) => {\n console.log('[ImageInput] Upload config:', { tenantId, schoolId, siteId, hasAuthToken: !!authToken, assetType })\n const file = e.target.files?.[0]\n if (!file) return\n\n // Validação de tamanho\n const maxBytes = maxSizeMB * 1024 * 1024\n if (file.size > maxBytes) {\n setError(`Arquivo muito grande. Máximo: ${maxSizeMB}MB`)\n return\n }\n\n // Validação de tipo\n if (!file.type.startsWith('image/') && !file.type.startsWith('video/')) {\n setError('Apenas imagens e vídeos são permitidos')\n return\n }\n\n // Verificar se tem autenticação (novo endpoint requer)\n if (!authToken) {\n setError('Autenticação necessária para upload')\n return\n }\n\n if (!tenantId) {\n setError('Contexto do tenant é necessário')\n return\n }\n\n setError(null)\n setUploading(true)\n\n try {\n const formData = new FormData()\n formData.append('file', file)\n\n const apiUrl = (import.meta as any).env.VITE_API_URL || 'http://localhost:3001'\n\n // Construir query parameters\n const params = new URLSearchParams({ tenantId, assetType })\n if (schoolId) params.append('schoolId', schoolId)\n if (siteId) params.append('siteId', siteId)\n\n const res = await fetch(`${apiUrl}/api/site-assets/upload?${params}`, {\n method: 'POST',\n headers: {\n 'Authorization': `Bearer ${authToken}`,\n },\n body: formData,\n })\n\n if (!res.ok) {\n const errorData = await res.json().catch(() => ({}))\n if (res.status === 401) {\n throw new Error('Sessão expirada. Faça login novamente.')\n }\n throw new Error(errorData.message || 'Upload falhou')\n }\n\n const data = await res.json()\n // Usar a URL pública retornada do Supabase Storage\n onChange(data.url)\n setError(null)\n } catch (err) {\n console.error(\"Erro no upload:\", err)\n setError(err instanceof Error ? err.message : \"Erro ao fazer upload da imagem\")\n } finally {\n setUploading(false)\n }\n }\n\n return (\n <div className=\"space-y-2\">\n {/* Label */}\n {label && (\n <label className=\"block text-xs font-medium text-gray-800 dark:text-gray-100\">\n {label}\n </label>\n )}\n\n {/* Preview - Sempre visível se houver imagem */}\n {value && (\n <div\n className={cn(\n 'rounded-lg overflow-hidden border-2',\n 'border-blue-400 dark:border-blue-500',\n 'flex items-center justify-center',\n 'bg-gray-50 dark:bg-gray-800',\n 'w-full max-w-[200px]'\n )}\n style={{\n height: size?.height || 80,\n }}\n >\n <img\n src={value}\n alt=\"preview\"\n className=\"w-full h-full object-contain\"\n onError={(e) => {\n e.currentTarget.style.display = 'none'\n }}\n />\n </div>\n )}\n\n {/* Campo URL manual - CONDICIONAL */}\n {showUrlInput && (\n <input\n type=\"text\"\n placeholder=\"URL da imagem\"\n value={value || ''}\n onChange={(e) => onChange(e.target.value || undefined)}\n className={cn(\n 'flex h-11 w-full rounded-lg border-2 bg-white dark:bg-gray-800 px-4 py-2.5 text-sm transition-all duration-200',\n 'placeholder:text-gray-400 dark:placeholder:text-gray-500',\n 'focus:outline-none',\n 'border-gray-300 dark:border-gray-600 hover:border-blue-400/50 focus:border-blue-500',\n 'text-gray-900 dark:text-gray-100'\n )}\n />\n )}\n\n {/* Botão de upload */}\n <div className=\"relative\">\n <input\n type=\"file\"\n accept=\"image/*\"\n onChange={handleFileChange}\n disabled={uploading}\n className={cn(\n 'text-sm w-full',\n 'file:mr-4 file:py-2 file:px-4',\n 'file:rounded-lg file:border-0',\n 'file:text-sm file:font-medium',\n 'file:bg-blue-500 file:text-white file:hover:bg-blue-600',\n 'file:cursor-pointer file:transition-all',\n 'file:hover:scale-[1.02] file:active:scale-[0.98]',\n uploading && 'opacity-50 cursor-not-allowed'\n )}\n />\n {uploading && (\n <div className=\"absolute inset-0 bg-white/80 dark:bg-gray-900/80 flex items-center justify-center rounded-lg pointer-events-none\">\n <span className=\"text-sm text-blue-600 dark:text-blue-400 font-medium\">Enviando...</span>\n </div>\n )}\n </div>\n\n {/* Botão remover - APENAS SE HOUVER IMAGEM */}\n {value && !uploading && (\n <button\n onClick={() => onChange(undefined)}\n type=\"button\"\n className=\"text-xs text-red-600 hover:text-red-700 dark:text-red-400 dark:hover:text-red-300 text-left transition-colors font-medium\"\n >\n Remover imagem\n </button>\n )}\n\n {/* Mensagem de erro */}\n {error && (\n <div className=\"text-xs text-red-600 dark:text-red-400 bg-red-50 dark:bg-red-900/20 p-2 rounded border border-red-200 dark:border-red-800\">\n {error}\n </div>\n )}\n </div>\n )\n}\n"],"names":["ImageInput","value","onChange","label","size","showUrlInput","maxSizeMB","tenantId","schoolId","siteId","authToken","assetType","uploading","setUploading","useState","error","setError","handleFileChange","e","file","maxBytes","formData","apiUrl","params","res","errorData","data","err","jsxs","jsx","cn"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ImageInput.js","sources":["../../../src/components/inputs/ImageInput.tsx"],"sourcesContent":["import { useState } from 'react'\nimport { cn } from '../../utils/cn'\n\ninterface ImageInputProps {\n value?: string\n onChange: (v?: string) => void\n label?: string\n size?: { width: number; height: number }\n showUrlInput?: boolean\n maxSizeMB?: number\n // Novos: Contexto para upload seguro\n tenantId?: string\n schoolId?: string\n siteId?: string\n authToken?: string\n assetType?: 'image' | 'video' | 'icon' | 'logo'\n // Novo: Modo de preview (Data URL) sem upload imediato\n deferUpload?: boolean\n onPendingFile?: (file: File | null) => void\n}\n\nexport function ImageInput({\n value,\n onChange,\n label,\n size,\n showUrlInput = true,\n maxSizeMB = 5,\n tenantId,\n schoolId,\n siteId,\n authToken,\n assetType = 'image',\n deferUpload = false,\n onPendingFile,\n}: ImageInputProps) {\n const [uploading, setUploading] = useState(false)\n const [error, setError] = useState<string | null>(null)\n\n const handleFileChange = async (e: React.ChangeEvent<HTMLInputElement>) => {\n console.log('[ImageInput] Upload config:', { tenantId, schoolId, siteId, hasAuthToken: !!authToken, assetType })\n const file = e.target.files?.[0]\n if (!file) return\n\n // Validação de tamanho\n const maxBytes = maxSizeMB * 1024 * 1024\n if (file.size > maxBytes) {\n setError(`Arquivo muito grande. Máximo: ${maxSizeMB}MB`)\n return\n }\n\n // Validação de tipo\n if (!file.type.startsWith('image/') && !file.type.startsWith('video/')) {\n setError('Apenas imagens e vídeos são permitidos')\n return\n }\n\n setError(null)\n\n // MODO PREVIEW: Usar Data URL sem fazer upload imediato\n if (deferUpload) {\n try {\n const reader = new FileReader()\n reader.onload = (e) => {\n const dataUrl = e.target?.result as string\n onChange(dataUrl) // Passa Data URL para preview\n if (onPendingFile) {\n onPendingFile(file) // Notifica que há upload pendente\n }\n }\n reader.onerror = () => {\n setError('Erro ao ler o arquivo')\n }\n reader.readAsDataURL(file)\n } catch (err) {\n console.error(\"Erro ao criar preview:\", err)\n setError(err instanceof Error ? err.message : \"Erro ao processar imagem\")\n }\n return\n }\n\n // MODO NORMAL: Upload imediato (comportamento original)\n // Verificar se tem autenticação (novo endpoint requer)\n if (!authToken) {\n setError('Autenticação necessária para upload')\n return\n }\n\n if (!tenantId) {\n setError('Contexto do tenant é necessário')\n return\n }\n\n setUploading(true)\n\n try {\n const formData = new FormData()\n formData.append('file', file)\n\n const apiUrl = (import.meta as any).env.VITE_API_URL || 'http://localhost:3001'\n\n // Construir query parameters\n const params = new URLSearchParams({ tenantId, assetType })\n if (schoolId) params.append('schoolId', schoolId)\n if (siteId) params.append('siteId', siteId)\n\n const res = await fetch(`${apiUrl}/api/site-assets/upload?${params}`, {\n method: 'POST',\n headers: {\n 'Authorization': `Bearer ${authToken}`,\n },\n body: formData,\n })\n\n if (!res.ok) {\n const errorData = await res.json().catch(() => ({}))\n if (res.status === 401) {\n throw new Error('Sessão expirada. Faça login novamente.')\n }\n throw new Error(errorData.message || 'Upload falhou')\n }\n\n const data = await res.json()\n // Usar a URL pública retornada do Supabase Storage\n onChange(data.url)\n setError(null)\n } catch (err) {\n console.error(\"Erro no upload:\", err)\n setError(err instanceof Error ? err.message : \"Erro ao fazer upload da imagem\")\n } finally {\n setUploading(false)\n }\n }\n\n return (\n <div className=\"space-y-2\">\n {/* Label */}\n {label && (\n <label className=\"block text-xs font-medium text-gray-800 dark:text-gray-100\">\n {label}\n </label>\n )}\n\n {/* Input file oculto */}\n <input\n ref={(el) => {\n if (el) (window as any).__imageInputRef = el;\n }}\n type=\"file\"\n accept=\"image/*\"\n onChange={handleFileChange}\n disabled={uploading}\n className=\"hidden\"\n id={`image-input-${Math.random()}`}\n />\n\n {/* Preview clicável - Funciona como botão */}\n <button\n type=\"button\"\n onClick={() => {\n const input = document.querySelector('input[type=\"file\"][accept=\"image/*\"]') as HTMLInputElement;\n if (input) {\n input.value = ''; // Limpar valor para permitir selecionar o mesmo arquivo novamente\n input.click();\n }\n }}\n disabled={uploading}\n className={cn(\n 'rounded-lg overflow-hidden border-2 transition-all duration-200',\n 'flex items-center justify-center w-full',\n 'bg-gray-50 dark:bg-gray-800 hover:bg-gray-100 dark:hover:bg-gray-700',\n value\n ? 'border-blue-400 dark:border-blue-500 hover:border-blue-500'\n : 'border-dashed border-gray-300 dark:border-gray-600 hover:border-blue-400',\n uploading && 'opacity-50 cursor-not-allowed',\n !uploading && 'cursor-pointer'\n )}\n style={{\n height: size?.height || 120,\n maxWidth: size?.width || 200,\n }}\n >\n {value ? (\n <img\n src={value}\n alt=\"preview\"\n className=\"w-full h-full object-contain\"\n onError={(e) => {\n e.currentTarget.style.display = 'none';\n }}\n />\n ) : (\n <div className=\"flex flex-col items-center justify-center gap-2 p-4 text-center\">\n <svg className=\"w-8 h-8 text-gray-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 4v16m8-8H4\" />\n </svg>\n <span className=\"text-xs text-gray-500 dark:text-gray-400\">\n {uploading ? 'Enviando...' : 'Clique para selecionar'}\n </span>\n </div>\n )}\n </button>\n\n {/* Botão remover - APENAS SE HOUVER IMAGEM */}\n {value && !uploading && (\n <button\n onClick={() => onChange(undefined)}\n type=\"button\"\n className=\"text-xs text-red-600 hover:text-red-700 dark:text-red-400 dark:hover:text-red-300 text-left transition-colors font-medium\"\n >\n Remover imagem\n </button>\n )}\n\n {/* Campo URL manual - CONDICIONAL */}\n {showUrlInput && (\n <input\n type=\"text\"\n placeholder=\"URL da imagem\"\n value={value || ''}\n onChange={(e) => onChange(e.target.value || undefined)}\n className={cn(\n 'flex h-11 w-full rounded-lg border-2 bg-white dark:bg-gray-800 px-4 py-2.5 text-sm transition-all duration-200',\n 'placeholder:text-gray-400 dark:placeholder:text-gray-500',\n 'focus:outline-none',\n 'border-gray-300 dark:border-gray-600 hover:border-blue-400/50 focus:border-blue-500',\n 'text-gray-900 dark:text-gray-100'\n )}\n />\n )}\n\n {/* Mensagem de erro */}\n {error && (\n <div className=\"text-xs text-red-600 dark:text-red-400 bg-red-50 dark:bg-red-900/20 p-2 rounded border border-red-200 dark:border-red-800\">\n {error}\n </div>\n )}\n </div>\n )\n}\n"],"names":["ImageInput","value","onChange","label","size","showUrlInput","maxSizeMB","tenantId","schoolId","siteId","authToken","assetType","deferUpload","onPendingFile","uploading","setUploading","useState","error","setError","jsxs","jsx","el","e","file","maxBytes","reader","dataUrl","err","formData","apiUrl","params","res","errorData","data","input","cn"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LandingPageEditorV2.d.ts","sourceRoot":"","sources":["../../src/editor/LandingPageEditorV2.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,OAAO,EAAE,cAAc,EAAgB,MAAM,WAAW,CAAC;AAEzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAStD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,wBAAwB;IACvC,WAAW,CAAC,EAAE,cAAc,CAAC;IAC7B,mFAAmF;IACnF,iBAAiB,CAAC,EAAE,UAAU,CAAC;IAC/B,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,wDAAwD;IACxD,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AAMD,wBAAgB,mBAAmB,CAAC,EAClC,WAAW,EACX,iBAAiB,EACjB,MAAM,EACN,SAAS,EACT,YAAY,GACb,EAAE,wBAAwB,
|
|
1
|
+
{"version":3,"file":"LandingPageEditorV2.d.ts","sourceRoot":"","sources":["../../src/editor/LandingPageEditorV2.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,OAAO,EAAE,cAAc,EAAgB,MAAM,WAAW,CAAC;AAEzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAStD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,wBAAwB;IACvC,WAAW,CAAC,EAAE,cAAc,CAAC;IAC7B,mFAAmF;IACnF,iBAAiB,CAAC,EAAE,UAAU,CAAC;IAC/B,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,wDAAwD;IACxD,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AAMD,wBAAgB,mBAAmB,CAAC,EAClC,WAAW,EACX,iBAAiB,EACjB,MAAM,EACN,SAAS,EACT,YAAY,GACb,EAAE,wBAAwB,2CAwU1B"}
|