@brunoalz/smartgesti-site-editor 0.2.0 → 0.2.2
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/ColorInput.d.ts.map +1 -1
- package/dist/components/inputs/ColorInput.js +134 -135
- package/dist/components/inputs/ColorInput.js.map +1 -1
- package/dist/components/inputs/ImageInput.js +4 -4
- package/dist/components/inputs/ImageInput.js.map +1 -1
- package/dist/editor/BlockPalette.d.ts.map +1 -1
- package/dist/editor/LandingPageEditorV2.d.ts.map +1 -1
- package/dist/editor/LandingPageEditorV2.js +138 -119
- package/dist/editor/LandingPageEditorV2.js.map +1 -1
- package/dist/editor/PropertyEditor/BlockHeader.d.ts +12 -0
- package/dist/editor/PropertyEditor/BlockHeader.d.ts.map +1 -0
- package/dist/editor/PropertyEditor/BlockHeader.js +19 -0
- package/dist/editor/PropertyEditor/BlockHeader.js.map +1 -0
- package/dist/editor/PropertyEditor/BlockPropertyEditor.d.ts.map +1 -1
- package/dist/editor/PropertyEditor/BlockPropertyEditor.js +45 -31
- package/dist/editor/PropertyEditor/BlockPropertyEditor.js.map +1 -1
- package/dist/editor/PropertyEditor/CollapsiblePropertyGroup.d.ts +24 -0
- package/dist/editor/PropertyEditor/CollapsiblePropertyGroup.d.ts.map +1 -0
- package/dist/editor/PropertyEditor/CollapsiblePropertyGroup.js +63 -0
- package/dist/editor/PropertyEditor/CollapsiblePropertyGroup.js.map +1 -0
- package/dist/editor/PropertyEditor/PropertyGroup.js +14 -17
- package/dist/editor/PropertyEditor/PropertyGroup.js.map +1 -1
- package/dist/editor/PropertyEditor/VariationSelector.d.ts.map +1 -1
- package/dist/editor/PropertyEditor/VariationSelector.js +150 -58
- package/dist/editor/PropertyEditor/VariationSelector.js.map +1 -1
- package/dist/editor/PropertyEditor/index.js +24 -16
- package/dist/editor/PropertyEditor/index.js.map +1 -1
- package/dist/editor/PropertyEditor/inputs/ButtonGroupInput.d.ts +21 -0
- package/dist/editor/PropertyEditor/inputs/ButtonGroupInput.d.ts.map +1 -0
- package/dist/editor/PropertyEditor/inputs/ButtonGroupInput.js +46 -0
- package/dist/editor/PropertyEditor/inputs/ButtonGroupInput.js.map +1 -0
- package/dist/editor/PropertyEditor/inputs/IconGridInput.d.ts +13 -0
- package/dist/editor/PropertyEditor/inputs/IconGridInput.d.ts.map +1 -0
- package/dist/editor/PropertyEditor/inputs/IconGridInput.js +169 -0
- package/dist/editor/PropertyEditor/inputs/IconGridInput.js.map +1 -0
- package/dist/editor/PropertyEditor/inputs/ImageGridInput.d.ts +25 -0
- package/dist/editor/PropertyEditor/inputs/ImageGridInput.d.ts.map +1 -0
- package/dist/editor/PropertyEditor/inputs/ImageGridInput.js +241 -0
- package/dist/editor/PropertyEditor/inputs/ImageGridInput.js.map +1 -0
- package/dist/editor/PropertyEditor/inputs/ToggleButton.d.ts +15 -0
- package/dist/editor/PropertyEditor/inputs/ToggleButton.d.ts.map +1 -0
- package/dist/editor/PropertyEditor/inputs/ToggleButton.js +31 -0
- package/dist/editor/PropertyEditor/inputs/ToggleButton.js.map +1 -0
- package/dist/editor/PropertyEditor/inputs/TypographyInput.d.ts +11 -0
- package/dist/editor/PropertyEditor/inputs/TypographyInput.d.ts.map +1 -0
- package/dist/editor/PropertyEditor/inputs/TypographyInput.js +251 -0
- package/dist/editor/PropertyEditor/inputs/TypographyInput.js.map +1 -0
- package/dist/editor/PropertyEditor/inputs/index.d.ts +5 -0
- package/dist/editor/PropertyEditor/inputs/index.d.ts.map +1 -1
- package/dist/editor/PropertyEditor/renderPropertyInput.d.ts +10 -1
- package/dist/editor/PropertyEditor/renderPropertyInput.d.ts.map +1 -1
- package/dist/editor/PropertyEditor/renderPropertyInput.js +137 -74
- package/dist/editor/PropertyEditor/renderPropertyInput.js.map +1 -1
- package/dist/editor/components/CenterPanel.d.ts +2 -0
- package/dist/editor/components/CenterPanel.d.ts.map +1 -1
- package/dist/editor/components/CenterPanel.js +8 -8
- package/dist/editor/components/CenterPanel.js.map +1 -1
- package/dist/engine/export/exportHtml.d.ts.map +1 -1
- package/dist/engine/export/exportHtml.js +195 -73
- package/dist/engine/export/exportHtml.js.map +1 -1
- package/dist/engine/export/exporters/content/ButtonExporter.d.ts.map +1 -1
- package/dist/engine/export/exporters/content/ButtonExporter.js +59 -21
- package/dist/engine/export/exporters/content/ButtonExporter.js.map +1 -1
- package/dist/engine/export/exporters/content/LinkExporter.d.ts.map +1 -1
- package/dist/engine/export/exporters/content/LinkExporter.js +38 -5
- package/dist/engine/export/exporters/content/LinkExporter.js.map +1 -1
- package/dist/engine/export/exporters/sections/FooterExporter.d.ts.map +1 -1
- package/dist/engine/export/exporters/sections/FooterExporter.js +45 -24
- 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 +310 -35
- 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 +133 -79
- 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 +148 -218
- package/dist/engine/export/exporters/sections/NavbarExporter.js.map +1 -1
- package/dist/engine/export/styleResolver.d.ts +7 -8
- package/dist/engine/export/styleResolver.d.ts.map +1 -1
- package/dist/engine/export/styleResolver.js +174 -174
- package/dist/engine/export/styleResolver.js.map +1 -1
- package/dist/engine/index.d.ts +1 -0
- package/dist/engine/index.d.ts.map +1 -1
- package/dist/engine/index.js +42 -37
- package/dist/engine/index.js.map +1 -1
- package/dist/engine/presets/heroVariations.d.ts +23 -0
- package/dist/engine/presets/heroVariations.d.ts.map +1 -1
- package/dist/engine/presets/heroVariations.js +162 -18
- package/dist/engine/presets/heroVariations.js.map +1 -1
- package/dist/engine/presets/navbarVariations.d.ts +11 -15
- package/dist/engine/presets/navbarVariations.d.ts.map +1 -1
- package/dist/engine/presets/navbarVariations.js +145 -99
- package/dist/engine/presets/navbarVariations.js.map +1 -1
- package/dist/engine/preview/PreviewV2.d.ts.map +1 -1
- package/dist/engine/preview/PreviewV2.js +4 -3
- package/dist/engine/preview/PreviewV2.js.map +1 -1
- package/dist/engine/registry/blocks/content/button.d.ts.map +1 -1
- package/dist/engine/registry/blocks/content/button.js +52 -4
- package/dist/engine/registry/blocks/content/button.js.map +1 -1
- package/dist/engine/registry/blocks/content/link.d.ts.map +1 -1
- package/dist/engine/registry/blocks/content/link.js +34 -4
- package/dist/engine/registry/blocks/content/link.js.map +1 -1
- package/dist/engine/registry/blocks/sections/cta.d.ts.map +1 -1
- package/dist/engine/registry/blocks/sections/cta.js +65 -4
- package/dist/engine/registry/blocks/sections/cta.js.map +1 -1
- package/dist/engine/registry/blocks/sections/footer.d.ts.map +1 -1
- package/dist/engine/registry/blocks/sections/footer.js +35 -5
- package/dist/engine/registry/blocks/sections/footer.js.map +1 -1
- package/dist/engine/registry/blocks/sections/hero.d.ts +34 -0
- package/dist/engine/registry/blocks/sections/hero.d.ts.map +1 -1
- package/dist/engine/registry/blocks/sections/hero.js +326 -37
- package/dist/engine/registry/blocks/sections/hero.js.map +1 -1
- package/dist/engine/registry/blocks/sections/navbar.d.ts +30 -3
- package/dist/engine/registry/blocks/sections/navbar.d.ts.map +1 -1
- package/dist/engine/registry/blocks/sections/navbar.js +173 -85
- package/dist/engine/registry/blocks/sections/navbar.js.map +1 -1
- package/dist/engine/registry/types.d.ts +9 -1
- package/dist/engine/registry/types.d.ts.map +1 -1
- package/dist/engine/render/renderers/content/ButtonRenderer.d.ts.map +1 -1
- package/dist/engine/render/renderers/content/ButtonRenderer.js +52 -15
- package/dist/engine/render/renderers/content/ButtonRenderer.js.map +1 -1
- package/dist/engine/render/renderers/sections/HeroRenderer.d.ts.map +1 -1
- package/dist/engine/render/renderers/sections/HeroRenderer.js +549 -91
- package/dist/engine/render/renderers/sections/HeroRenderer.js.map +1 -1
- package/dist/engine/render/renderers/sections/NavbarRenderer.d.ts.map +1 -1
- package/dist/engine/render/renderers/sections/NavbarRenderer.js +108 -61
- package/dist/engine/render/renderers/sections/NavbarRenderer.js.map +1 -1
- package/dist/engine/schema/siteDocument.d.ts +138 -6
- package/dist/engine/schema/siteDocument.d.ts.map +1 -1
- package/dist/engine/schema/siteDocument.js.map +1 -1
- package/dist/engine/schema/themeTokens.js.map +1 -1
- package/dist/engine/shared/hoverEffects/buttonHover.d.ts +33 -0
- package/dist/engine/shared/hoverEffects/buttonHover.d.ts.map +1 -0
- package/dist/engine/shared/hoverEffects/buttonHover.js +280 -0
- package/dist/engine/shared/hoverEffects/buttonHover.js.map +1 -0
- package/dist/engine/shared/hoverEffects/colorUtils.d.ts +31 -0
- package/dist/engine/shared/hoverEffects/colorUtils.d.ts.map +1 -0
- package/dist/engine/shared/hoverEffects/colorUtils.js +27 -0
- package/dist/engine/shared/hoverEffects/colorUtils.js.map +1 -0
- package/dist/engine/shared/hoverEffects/cssGenerator.d.ts +30 -0
- package/dist/engine/shared/hoverEffects/cssGenerator.d.ts.map +1 -0
- package/dist/engine/shared/hoverEffects/index.d.ts +31 -0
- package/dist/engine/shared/hoverEffects/index.d.ts.map +1 -0
- package/dist/engine/shared/hoverEffects/linkHover.d.ts +9 -0
- package/dist/engine/shared/hoverEffects/linkHover.d.ts.map +1 -0
- package/dist/engine/shared/hoverEffects/linkHover.js +54 -0
- package/dist/engine/shared/hoverEffects/linkHover.js.map +1 -0
- package/dist/engine/shared/hoverEffects/types.d.ts +95 -0
- package/dist/engine/shared/hoverEffects/types.d.ts.map +1 -0
- package/dist/engine/shared/imageGrid/index.d.ts +7 -0
- package/dist/engine/shared/imageGrid/index.d.ts.map +1 -0
- package/dist/engine/shared/imageGrid/presets.d.ts +25 -0
- package/dist/engine/shared/imageGrid/presets.d.ts.map +1 -0
- package/dist/engine/shared/imageGrid/presets.js +160 -0
- package/dist/engine/shared/imageGrid/presets.js.map +1 -0
- package/dist/engine/shared/imageGrid/types.d.ts +42 -0
- package/dist/engine/shared/imageGrid/types.d.ts.map +1 -0
- package/dist/engine/shared/typography/cssGenerator.d.ts +19 -0
- package/dist/engine/shared/typography/cssGenerator.d.ts.map +1 -0
- package/dist/engine/shared/typography/cssGenerator.js +104 -0
- package/dist/engine/shared/typography/cssGenerator.js.map +1 -0
- package/dist/engine/shared/typography/defaults.d.ts +12 -0
- package/dist/engine/shared/typography/defaults.d.ts.map +1 -0
- package/dist/engine/shared/typography/defaults.js +40 -0
- package/dist/engine/shared/typography/defaults.js.map +1 -0
- package/dist/engine/shared/typography/index.d.ts +7 -0
- package/dist/engine/shared/typography/index.d.ts.map +1 -0
- package/dist/engine/shared/typography/types.d.ts +27 -0
- package/dist/engine/shared/typography/types.d.ts.map +1 -0
- package/dist/engine/shared/typography/types.js +25 -0
- package/dist/engine/shared/typography/types.js.map +1 -0
- package/dist/index.js +52 -47
- package/dist/index.js.map +1 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/chevron-up.js +6 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/chevron-up.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/plus.js +9 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/plus.js.map +1 -0
- package/dist/shared/templates/escola-premium.d.ts.map +1 -1
- package/dist/shared/templates/escola-premium.js +2 -1
- package/dist/shared/templates/escola-premium.js.map +1 -1
- package/dist/site/blocks/Navbar.d.ts.map +1 -1
- package/dist/site/blocks/Navbar.js +22 -88
- package/dist/site/blocks/Navbar.js.map +1 -1
- package/dist/styles/landing-page.css +0 -5
- package/dist/utils/blockIcons.d.ts +10 -0
- package/dist/utils/blockIcons.d.ts.map +1 -0
- package/dist/utils/blockIcons.js +53 -0
- package/dist/utils/blockIcons.js.map +1 -0
- package/package.json +1 -1
- package/dist/editor/PropertyEditor/inputs/CheckboxInput.js +0 -36
- package/dist/editor/PropertyEditor/inputs/CheckboxInput.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ColorInput.d.ts","sourceRoot":"","sources":["../../../src/components/inputs/ColorInput.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAG1C,UAAU,eAAgB,SAAQ,gBAAgB;IAChD,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;CACrB;
|
|
1
|
+
{"version":3,"file":"ColorInput.d.ts","sourceRoot":"","sources":["../../../src/components/inputs/ColorInput.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAG1C,UAAU,eAAgB,SAAQ,gBAAgB;IAChD,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;CACrB;AAiBD,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,QAAQ,EACR,OAAO,EACP,KAAK,EACL,WAAuB,EACvB,IAAe,GAChB,EAAE,eAAe,2CA4MjB"}
|
|
@@ -1,181 +1,180 @@
|
|
|
1
|
-
import { jsxs as
|
|
2
|
-
import { useState as
|
|
3
|
-
import { createPortal as
|
|
4
|
-
import { HexColorPicker as
|
|
5
|
-
import { cn as
|
|
6
|
-
|
|
7
|
-
"
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
"#
|
|
21
|
-
"
|
|
22
|
-
"#ec4899"
|
|
23
|
-
];
|
|
24
|
-
function I({
|
|
25
|
-
value: w,
|
|
26
|
-
onChange: u,
|
|
27
|
-
onClear: f,
|
|
28
|
-
label: y,
|
|
29
|
-
placeholder: v = "#ffffff",
|
|
30
|
-
size: i = "medium"
|
|
1
|
+
import { jsxs as c, jsx as n } from "react/jsx-runtime";
|
|
2
|
+
import { useState as m, useRef as b, useEffect as h } from "react";
|
|
3
|
+
import { createPortal as E } from "react-dom";
|
|
4
|
+
import { HexColorPicker as _ } from "../../node_modules/react-colorful/dist/index.js";
|
|
5
|
+
import { cn as R } from "../../utils/cn.js";
|
|
6
|
+
function C(r, o) {
|
|
7
|
+
if (!r || r === "") return o;
|
|
8
|
+
if (/^#[0-9A-Fa-f]{6}$/i.test(r)) return r;
|
|
9
|
+
if (/^#[0-9A-Fa-f]{3}$/i.test(r)) {
|
|
10
|
+
const t = r.slice(1);
|
|
11
|
+
return `#${t[0]}${t[0]}${t[1]}${t[1]}${t[2]}${t[2]}`;
|
|
12
|
+
}
|
|
13
|
+
return o;
|
|
14
|
+
}
|
|
15
|
+
function S({
|
|
16
|
+
value: r,
|
|
17
|
+
onChange: o,
|
|
18
|
+
onClear: t,
|
|
19
|
+
label: d,
|
|
20
|
+
placeholder: l = "#ffffff",
|
|
21
|
+
size: u = "medium"
|
|
31
22
|
}) {
|
|
32
|
-
const [
|
|
23
|
+
const [a, f] = m(!1), g = b(null), i = b(null), p = b(null), v = C(r, l), [N, x] = m(v);
|
|
33
24
|
h(() => {
|
|
34
|
-
const e = (
|
|
35
|
-
|
|
25
|
+
const e = C(r, l);
|
|
26
|
+
x(e);
|
|
27
|
+
}, [r, l]), h(() => {
|
|
28
|
+
const e = (w) => {
|
|
29
|
+
g.current && !g.current.contains(w.target) && i.current && !i.current.contains(w.target) && f(!1);
|
|
36
30
|
};
|
|
37
31
|
return document.addEventListener("mousedown", e), () => {
|
|
38
32
|
document.removeEventListener("mousedown", e);
|
|
39
33
|
};
|
|
40
34
|
}, []);
|
|
41
|
-
const
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
large: { width: 64, height: 40, pickerSize: 220 }
|
|
45
|
-
}[i], g = () => {
|
|
46
|
-
if (!o.current) return { top: 0, left: 0 };
|
|
47
|
-
const e = o.current.getBoundingClientRect();
|
|
35
|
+
const y = () => {
|
|
36
|
+
if (!i.current) return { top: 0, left: 0 };
|
|
37
|
+
const e = i.current.getBoundingClientRect();
|
|
48
38
|
return {
|
|
49
39
|
top: e.bottom + window.scrollY + 8,
|
|
50
|
-
left: e.left + window.scrollX
|
|
40
|
+
left: Math.max(8, e.left + window.scrollX)
|
|
51
41
|
};
|
|
52
|
-
}, [
|
|
53
|
-
|
|
54
|
-
if (!
|
|
55
|
-
const e = () =>
|
|
42
|
+
}, [k, $] = m(y());
|
|
43
|
+
h(() => {
|
|
44
|
+
if (!a) return;
|
|
45
|
+
const e = () => $(y());
|
|
56
46
|
return window.addEventListener("scroll", e, !0), window.addEventListener("resize", e), e(), () => {
|
|
57
47
|
window.removeEventListener("scroll", e, !0), window.removeEventListener("resize", e);
|
|
58
48
|
};
|
|
59
|
-
}, [
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
"
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
linear-gradient(-45deg, #ccc 25%, transparent 25%),
|
|
84
|
-
linear-gradient(45deg, transparent 75%, #ccc 75%),
|
|
85
|
-
linear-gradient(-45deg, transparent 75%, #ccc 75%)`,
|
|
86
|
-
backgroundSize: "8px 8px",
|
|
87
|
-
backgroundPosition: "0 0, 0 4px, 4px -4px, -4px 0px"
|
|
88
|
-
}
|
|
89
|
-
}
|
|
49
|
+
}, [a]);
|
|
50
|
+
const L = (e) => {
|
|
51
|
+
x(e), p.current && window.clearTimeout(p.current), p.current = window.setTimeout(() => {
|
|
52
|
+
o(e);
|
|
53
|
+
}, 50);
|
|
54
|
+
}, P = (e) => {
|
|
55
|
+
(/^#[0-9A-Fa-f]{0,6}$/.test(e) || e === "#" || e === "") && (x(e || "#"), /^#[0-9A-Fa-f]{6}$/i.test(e) && o(e));
|
|
56
|
+
}, s = N;
|
|
57
|
+
return /* @__PURE__ */ c("div", { className: "space-y-1.5", ref: i, children: [
|
|
58
|
+
d && /* @__PURE__ */ n("label", { className: "block text-xs font-medium text-gray-800 dark:text-gray-100", children: d }),
|
|
59
|
+
/* @__PURE__ */ c("div", { className: "flex items-center gap-2", children: [
|
|
60
|
+
/* @__PURE__ */ c(
|
|
61
|
+
"button",
|
|
62
|
+
{
|
|
63
|
+
type: "button",
|
|
64
|
+
onClick: () => f(!a),
|
|
65
|
+
"aria-label": d || "Selecionar cor",
|
|
66
|
+
className: R(
|
|
67
|
+
"relative cursor-pointer transition-all rounded-lg border-2 flex-shrink-0",
|
|
68
|
+
"hover:scale-[1.02] active:scale-[0.98]",
|
|
69
|
+
a ? "ring-2 ring-blue-500 ring-offset-2 dark:ring-offset-gray-900" : "border-gray-300 dark:border-gray-600",
|
|
70
|
+
u === "small" && "w-10 h-8",
|
|
71
|
+
u === "medium" && "w-12 h-9",
|
|
72
|
+
u === "large" && "w-16 h-10"
|
|
90
73
|
),
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
74
|
+
children: [
|
|
75
|
+
/* @__PURE__ */ n(
|
|
76
|
+
"div",
|
|
77
|
+
{
|
|
78
|
+
className: "absolute inset-0.5 rounded-md",
|
|
79
|
+
style: {
|
|
80
|
+
background: `linear-gradient(45deg, #ccc 25%, transparent 25%),
|
|
81
|
+
linear-gradient(-45deg, #ccc 25%, transparent 25%),
|
|
82
|
+
linear-gradient(45deg, transparent 75%, #ccc 75%),
|
|
83
|
+
linear-gradient(-45deg, transparent 75%, #ccc 75%)`,
|
|
84
|
+
backgroundSize: "8px 8px",
|
|
85
|
+
backgroundPosition: "0 0, 0 4px, 4px -4px, -4px 0px"
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
),
|
|
89
|
+
/* @__PURE__ */ n(
|
|
90
|
+
"div",
|
|
91
|
+
{
|
|
92
|
+
className: "absolute inset-0.5 rounded-md",
|
|
93
|
+
style: { backgroundColor: s }
|
|
94
|
+
}
|
|
95
|
+
)
|
|
96
|
+
]
|
|
97
|
+
}
|
|
98
|
+
),
|
|
99
|
+
/* @__PURE__ */ n("span", { className: "text-xs font-mono text-gray-600 dark:text-gray-400 uppercase", children: s }),
|
|
100
|
+
t && /* @__PURE__ */ n(
|
|
101
|
+
"button",
|
|
102
|
+
{
|
|
103
|
+
type: "button",
|
|
104
|
+
onClick: () => {
|
|
105
|
+
t(), f(!1);
|
|
106
|
+
},
|
|
107
|
+
className: "ml-auto text-xs text-gray-500 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-200 transition-colors",
|
|
108
|
+
children: "Limpar"
|
|
109
|
+
}
|
|
110
|
+
)
|
|
111
|
+
] }),
|
|
112
|
+
a && E(
|
|
113
|
+
/* @__PURE__ */ c(
|
|
103
114
|
"div",
|
|
104
115
|
{
|
|
105
|
-
ref:
|
|
106
|
-
className: "fixed
|
|
116
|
+
ref: g,
|
|
117
|
+
className: "fixed bg-white dark:bg-gray-900 rounded-xl shadow-2xl border border-gray-200 dark:border-gray-700 p-4",
|
|
107
118
|
style: {
|
|
108
|
-
top:
|
|
109
|
-
left:
|
|
119
|
+
top: k.top,
|
|
120
|
+
left: k.left,
|
|
121
|
+
zIndex: 2147483647
|
|
122
|
+
// Máximo z-index possível
|
|
110
123
|
},
|
|
111
124
|
children: [
|
|
112
|
-
/* @__PURE__ */
|
|
125
|
+
/* @__PURE__ */ n("style", { children: `
|
|
113
126
|
.react-colorful {
|
|
114
|
-
width:
|
|
115
|
-
height:
|
|
127
|
+
width: 220px !important;
|
|
128
|
+
height: 160px !important;
|
|
116
129
|
}
|
|
117
130
|
.react-colorful__saturation {
|
|
118
131
|
border-radius: 8px 8px 0 0;
|
|
119
132
|
}
|
|
120
133
|
.react-colorful__hue {
|
|
121
|
-
height:
|
|
134
|
+
height: 20px;
|
|
122
135
|
border-radius: 0 0 8px 8px;
|
|
123
136
|
}
|
|
124
137
|
.react-colorful__pointer {
|
|
125
|
-
width:
|
|
126
|
-
height:
|
|
138
|
+
width: 18px;
|
|
139
|
+
height: 18px;
|
|
127
140
|
border: 2px solid #ffffff;
|
|
128
|
-
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.
|
|
141
|
+
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);
|
|
129
142
|
}
|
|
130
143
|
` }),
|
|
131
|
-
/* @__PURE__ */
|
|
132
|
-
|
|
144
|
+
/* @__PURE__ */ n(
|
|
145
|
+
_,
|
|
133
146
|
{
|
|
134
|
-
color:
|
|
135
|
-
onChange:
|
|
136
|
-
s.current && window.clearTimeout(s.current), s.current = window.setTimeout(() => {
|
|
137
|
-
u(e);
|
|
138
|
-
}, 50);
|
|
139
|
-
}
|
|
147
|
+
color: s,
|
|
148
|
+
onChange: L
|
|
140
149
|
}
|
|
141
150
|
),
|
|
142
|
-
/* @__PURE__ */
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
/* @__PURE__ */ r("div", { className: "grid grid-cols-8 gap-1", children: z.map((e) => /* @__PURE__ */ r(
|
|
146
|
-
"button",
|
|
151
|
+
/* @__PURE__ */ c("div", { className: "mt-3 flex items-center gap-2", children: [
|
|
152
|
+
/* @__PURE__ */ n(
|
|
153
|
+
"div",
|
|
147
154
|
{
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
155
|
+
className: "w-8 h-8 rounded-lg border-2 border-gray-200 dark:border-gray-700 flex-shrink-0",
|
|
156
|
+
style: { backgroundColor: s }
|
|
157
|
+
}
|
|
158
|
+
),
|
|
159
|
+
/* @__PURE__ */ n(
|
|
160
|
+
"input",
|
|
161
|
+
{
|
|
162
|
+
type: "text",
|
|
163
|
+
value: s.toUpperCase(),
|
|
164
|
+
onChange: (e) => P(e.target.value),
|
|
165
|
+
className: "flex-1 px-2 py-1.5 text-xs font-mono bg-gray-50 dark:bg-gray-800 border border-gray-200 dark:border-gray-700 rounded-lg text-gray-700 dark:text-gray-300 focus:outline-none focus:ring-2 focus:ring-blue-500",
|
|
166
|
+
placeholder: "#000000"
|
|
167
|
+
}
|
|
168
|
+
)
|
|
159
169
|
] })
|
|
160
170
|
]
|
|
161
171
|
}
|
|
162
172
|
),
|
|
163
173
|
document.body
|
|
164
|
-
),
|
|
165
|
-
f && /* @__PURE__ */ r(
|
|
166
|
-
"button",
|
|
167
|
-
{
|
|
168
|
-
type: "button",
|
|
169
|
-
onClick: () => {
|
|
170
|
-
f(), d(!1);
|
|
171
|
-
},
|
|
172
|
-
className: "h-8 rounded-md px-3 text-xs font-medium border border-input bg-background text-gray-600 dark:text-gray-300 hover:bg-accent hover:text-accent-foreground transition-colors cursor-pointer",
|
|
173
|
-
children: "Limpar"
|
|
174
|
-
}
|
|
175
174
|
)
|
|
176
175
|
] });
|
|
177
176
|
}
|
|
178
177
|
export {
|
|
179
|
-
|
|
178
|
+
S as ColorInput
|
|
180
179
|
};
|
|
181
180
|
//# sourceMappingURL=ColorInput.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ColorInput.js","sources":["../../../src/components/inputs/ColorInput.tsx"],"sourcesContent":["import { useState, useRef, useEffect } from 'react'\nimport { createPortal } from 'react-dom'\nimport { HexColorPicker } from 'react-colorful'\nimport { ColorInputConfig } from './types'\nimport { cn } from '../../utils/cn'\n\ninterface ColorInputProps extends ColorInputConfig {\n onClear?: () => void\n}\n\nconst QUICK_COLORS = [\n '#ffffff', '#f3f4f6', '#d1d5db', '#9ca3af',\n '#6b7280', '#374151', '#1f2937', '#000000',\n '#ef4444', '#f97316', '#eab308', '#22c55e',\n '#06b6d4', '#3b82f6', '#8b5cf6', '#ec4899',\n]\n\nexport function ColorInput({\n value,\n onChange,\n onClear,\n label,\n placeholder = '#ffffff',\n size = 'medium',\n}: ColorInputProps) {\n const [isOpen, setIsOpen] = useState(false)\n const pickerRef = useRef<HTMLDivElement>(null)\n const buttonRef = useRef<HTMLButtonElement>(null)\n const debounceRef = useRef<number | null>(null)\n\n const currentColor = value || placeholder\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n pickerRef.current &&\n !pickerRef.current.contains(event.target as Node) &&\n buttonRef.current &&\n !buttonRef.current.contains(event.target as Node)\n ) {\n setIsOpen(false)\n }\n }\n\n document.addEventListener('mousedown', handleClickOutside)\n return () => {\n document.removeEventListener('mousedown', handleClickOutside)\n }\n }, [])\n\n const sizeConfig = {\n small: { width: 32, height: 24, pickerSize: 180 },\n medium: { width: 48, height: 32, pickerSize: 200 },\n large: { width: 64, height: 40, pickerSize: 220 },\n }\n\n const config = sizeConfig[size]\n\n const computePickerPosition = () => {\n if (!buttonRef.current) return { top: 0, left: 0 }\n const rect = buttonRef.current.getBoundingClientRect()\n return {\n top: rect.bottom + window.scrollY + 8,\n left: rect.left + window.scrollX,\n }\n }\n\n const [pickerPos, setPickerPos] = useState(computePickerPosition())\n\n useEffect(() => {\n if (!isOpen) return\n const update = () => setPickerPos(computePickerPosition())\n window.addEventListener('scroll', update, true)\n window.addEventListener('resize', update)\n update()\n return () => {\n window.removeEventListener('scroll', update, true)\n window.removeEventListener('resize', update)\n }\n }, [isOpen])\n\n return (\n <div className=\"relative flex items-center gap-2\">\n <button\n ref={buttonRef}\n type=\"button\"\n onClick={() => setIsOpen(!isOpen)}\n aria-label={label || 'Selecionar cor'}\n className={cn(\n 'relative cursor-pointer transition-all rounded-lg border-2',\n 'hover:scale-105 active:scale-95',\n isOpen\n ? 'ring-2 ring-blue-500 ring-offset-2'\n : 'border-gray-300 dark:border-gray-600',\n size === 'small' && 'w-8 h-6',\n size === 'medium' && 'w-12 h-8',\n size === 'large' && 'w-16 h-10'\n )}\n style={{ backgroundColor: currentColor }}\n >\n {/* Checkerboard pattern for transparency */}\n <div\n className=\"absolute inset-0.5 rounded-md\"\n style={{\n background: `linear-gradient(45deg, #ccc 25%, transparent 25%), \n linear-gradient(-45deg, #ccc 25%, transparent 25%), \n linear-gradient(45deg, transparent 75%, #ccc 75%), \n linear-gradient(-45deg, transparent 75%, #ccc 75%)`,\n backgroundSize: '8px 8px',\n backgroundPosition: '0 0, 0 4px, 4px -4px, -4px 0px',\n }}\n />\n <div\n className=\"absolute inset-0.5 rounded-md\"\n style={{ backgroundColor: currentColor }}\n />\n </button>\n\n {isOpen &&\n createPortal(\n <div\n ref={pickerRef}\n className=\"fixed z-[2147483000] bg-white dark:bg-gray-900 rounded-lg shadow-xl border border-gray-200 dark:border-gray-700 p-3\"\n style={{\n top: pickerPos.top,\n left: pickerPos.left,\n }}\n >\n <style>{`\n .react-colorful {\n width: ${config.pickerSize}px !important;\n height: ${config.pickerSize * 0.75}px !important;\n }\n .react-colorful__saturation {\n border-radius: 8px 8px 0 0;\n }\n .react-colorful__hue {\n height: 24px;\n border-radius: 0 0 8px 8px;\n }\n .react-colorful__pointer {\n width: 20px;\n height: 20px;\n border: 2px solid #ffffff;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.18);\n }\n `}</style>\n <HexColorPicker\n color={currentColor}\n onChange={(c) => {\n if (debounceRef.current) {\n window.clearTimeout(debounceRef.current)\n }\n debounceRef.current = window.setTimeout(() => {\n onChange(c)\n }, 50) as unknown as number\n }}\n />\n <div className=\"mt-2.5 px-2.5 py-1.5 bg-gray-50 dark:bg-gray-800 rounded-md border border-gray-200 dark:border-gray-700 text-center\">\n <span className=\"text-xs font-mono font-semibold text-gray-700 dark:text-gray-300\">\n {currentColor.toUpperCase()}\n </span>\n </div>\n <div className=\"mt-2.5\">\n <div className=\"text-xs font-semibold text-gray-500 dark:text-gray-400 mb-2\">\n Cores Rápidas\n </div>\n <div className=\"grid grid-cols-8 gap-1\">\n {QUICK_COLORS.map((color) => (\n <button\n key={color}\n type=\"button\"\n onClick={() => onChange(color)}\n className={cn(\n 'w-5 h-5 rounded border transition-all cursor-pointer',\n 'hover:scale-110',\n currentColor === color\n ? 'border-2 border-blue-500'\n : 'border border-gray-300 dark:border-gray-600'\n )}\n style={{ backgroundColor: color }}\n />\n ))}\n </div>\n </div>\n </div>,\n document.body\n )}\n\n {onClear && (\n <button\n type=\"button\"\n onClick={() => {\n onClear()\n setIsOpen(false)\n }}\n className=\"h-8 rounded-md px-3 text-xs font-medium border border-input bg-background text-gray-600 dark:text-gray-300 hover:bg-accent hover:text-accent-foreground transition-colors cursor-pointer\"\n >\n Limpar\n </button>\n )}\n </div>\n )\n}\n"],"names":["QUICK_COLORS","ColorInput","value","onChange","onClear","label","placeholder","size","isOpen","setIsOpen","useState","pickerRef","useRef","buttonRef","debounceRef","currentColor","useEffect","handleClickOutside","event","config","computePickerPosition","rect","pickerPos","setPickerPos","update","jsxs","cn","jsx","createPortal","HexColorPicker","c","color"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ColorInput.js","sources":["../../../src/components/inputs/ColorInput.tsx"],"sourcesContent":["import { useState, useRef, useEffect } from 'react'\nimport { createPortal } from 'react-dom'\nimport { HexColorPicker } from 'react-colorful'\nimport { ColorInputConfig } from './types'\nimport { cn } from '../../utils/cn'\n\ninterface ColorInputProps extends ColorInputConfig {\n onClear?: () => void\n}\n\n/**\n * Normaliza uma cor para garantir que é um hex válido\n */\nfunction normalizeColor(color: string | undefined, fallback: string): string {\n if (!color || color === '') return fallback\n // Se já é um hex válido, retorna\n if (/^#[0-9A-Fa-f]{6}$/i.test(color)) return color\n // Se é hex curto, expande\n if (/^#[0-9A-Fa-f]{3}$/i.test(color)) {\n const hex = color.slice(1)\n return `#${hex[0]}${hex[0]}${hex[1]}${hex[1]}${hex[2]}${hex[2]}`\n }\n return fallback\n}\n\nexport function ColorInput({\n value,\n onChange,\n onClear,\n label,\n placeholder = '#ffffff',\n size = 'medium',\n}: ColorInputProps) {\n const [isOpen, setIsOpen] = useState(false)\n const pickerRef = useRef<HTMLDivElement>(null)\n const containerRef = useRef<HTMLDivElement>(null)\n const debounceRef = useRef<number | null>(null)\n\n // Cor efetiva - sempre normalizada\n const effectiveColor = normalizeColor(value, placeholder)\n\n // Estado local para feedback visual imediato durante drag\n const [localColor, setLocalColor] = useState(effectiveColor)\n\n // Sincronizar estado local quando o value externo mudar\n useEffect(() => {\n const normalized = normalizeColor(value, placeholder)\n setLocalColor(normalized)\n }, [value, placeholder])\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n pickerRef.current &&\n !pickerRef.current.contains(event.target as Node) &&\n containerRef.current &&\n !containerRef.current.contains(event.target as Node)\n ) {\n setIsOpen(false)\n }\n }\n\n document.addEventListener('mousedown', handleClickOutside)\n return () => {\n document.removeEventListener('mousedown', handleClickOutside)\n }\n }, [])\n\n const computePickerPosition = () => {\n if (!containerRef.current) return { top: 0, left: 0 }\n const rect = containerRef.current.getBoundingClientRect()\n return {\n top: rect.bottom + window.scrollY + 8,\n left: Math.max(8, rect.left + window.scrollX),\n }\n }\n\n const [pickerPos, setPickerPos] = useState(computePickerPosition())\n\n useEffect(() => {\n if (!isOpen) return\n const update = () => setPickerPos(computePickerPosition())\n window.addEventListener('scroll', update, true)\n window.addEventListener('resize', update)\n update()\n return () => {\n window.removeEventListener('scroll', update, true)\n window.removeEventListener('resize', update)\n }\n }, [isOpen])\n\n const handleColorChange = (color: string) => {\n // Atualizar o estado local imediatamente para feedback visual\n setLocalColor(color)\n\n // Debounce para chamar o onChange\n if (debounceRef.current) {\n window.clearTimeout(debounceRef.current)\n }\n debounceRef.current = window.setTimeout(() => {\n onChange(color)\n }, 50) as unknown as number\n }\n\n const handleTextChange = (val: string) => {\n // Permitir digitação parcial\n if (/^#[0-9A-Fa-f]{0,6}$/.test(val) || val === '#' || val === '') {\n setLocalColor(val || '#')\n // Só chamar onChange quando for um hex completo\n if (/^#[0-9A-Fa-f]{6}$/i.test(val)) {\n onChange(val)\n }\n }\n }\n\n // Cor a ser exibida (usa localColor para feedback imediato)\n const displayColor = localColor\n\n return (\n <div className=\"space-y-1.5\" ref={containerRef}>\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 {/* Color swatch com hex */}\n <div className=\"flex items-center gap-2\">\n <button\n type=\"button\"\n onClick={() => setIsOpen(!isOpen)}\n aria-label={label || 'Selecionar cor'}\n className={cn(\n 'relative cursor-pointer transition-all rounded-lg border-2 flex-shrink-0',\n 'hover:scale-[1.02] active:scale-[0.98]',\n isOpen\n ? 'ring-2 ring-blue-500 ring-offset-2 dark:ring-offset-gray-900'\n : 'border-gray-300 dark:border-gray-600',\n size === 'small' && 'w-10 h-8',\n size === 'medium' && 'w-12 h-9',\n size === 'large' && 'w-16 h-10'\n )}\n >\n {/* Checkerboard pattern for transparency */}\n <div\n className=\"absolute inset-0.5 rounded-md\"\n style={{\n background: `linear-gradient(45deg, #ccc 25%, transparent 25%),\n linear-gradient(-45deg, #ccc 25%, transparent 25%),\n linear-gradient(45deg, transparent 75%, #ccc 75%),\n linear-gradient(-45deg, transparent 75%, #ccc 75%)`,\n backgroundSize: '8px 8px',\n backgroundPosition: '0 0, 0 4px, 4px -4px, -4px 0px',\n }}\n />\n <div\n className=\"absolute inset-0.5 rounded-md\"\n style={{ backgroundColor: displayColor }}\n />\n </button>\n\n {/* Hex value display */}\n <span className=\"text-xs font-mono text-gray-600 dark:text-gray-400 uppercase\">\n {displayColor}\n </span>\n\n {onClear && (\n <button\n type=\"button\"\n onClick={() => {\n onClear()\n setIsOpen(false)\n }}\n className=\"ml-auto text-xs text-gray-500 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-200 transition-colors\"\n >\n Limpar\n </button>\n )}\n </div>\n\n {/* Color picker portal - z-index muito alto para ficar acima de tudo */}\n {isOpen &&\n createPortal(\n <div\n ref={pickerRef}\n className=\"fixed bg-white dark:bg-gray-900 rounded-xl shadow-2xl border border-gray-200 dark:border-gray-700 p-4\"\n style={{\n top: pickerPos.top,\n left: pickerPos.left,\n zIndex: 2147483647, // Máximo z-index possível\n }}\n >\n <style>{`\n .react-colorful {\n width: 220px !important;\n height: 160px !important;\n }\n .react-colorful__saturation {\n border-radius: 8px 8px 0 0;\n }\n .react-colorful__hue {\n height: 20px;\n border-radius: 0 0 8px 8px;\n }\n .react-colorful__pointer {\n width: 18px;\n height: 18px;\n border: 2px solid #ffffff;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);\n }\n `}</style>\n <HexColorPicker\n color={displayColor}\n onChange={handleColorChange}\n />\n\n {/* Hex value input */}\n <div className=\"mt-3 flex items-center gap-2\">\n <div\n className=\"w-8 h-8 rounded-lg border-2 border-gray-200 dark:border-gray-700 flex-shrink-0\"\n style={{ backgroundColor: displayColor }}\n />\n <input\n type=\"text\"\n value={displayColor.toUpperCase()}\n onChange={(e) => handleTextChange(e.target.value)}\n className=\"flex-1 px-2 py-1.5 text-xs font-mono bg-gray-50 dark:bg-gray-800 border border-gray-200 dark:border-gray-700 rounded-lg text-gray-700 dark:text-gray-300 focus:outline-none focus:ring-2 focus:ring-blue-500\"\n placeholder=\"#000000\"\n />\n </div>\n </div>,\n document.body\n )}\n </div>\n )\n}\n"],"names":["normalizeColor","color","fallback","hex","ColorInput","value","onChange","onClear","label","placeholder","size","isOpen","setIsOpen","useState","pickerRef","useRef","containerRef","debounceRef","effectiveColor","localColor","setLocalColor","useEffect","normalized","handleClickOutside","event","computePickerPosition","rect","pickerPos","setPickerPos","update","handleColorChange","handleTextChange","val","displayColor","jsxs","jsx","cn","createPortal","HexColorPicker"],"mappings":";;;;;AAaA,SAASA,EAAeC,GAA2BC,GAA0B;AAC3E,MAAI,CAACD,KAASA,MAAU,GAAI,QAAOC;AAEnC,MAAI,qBAAqB,KAAKD,CAAK,EAAG,QAAOA;AAE7C,MAAI,qBAAqB,KAAKA,CAAK,GAAG;AACpC,UAAME,IAAMF,EAAM,MAAM,CAAC;AACzB,WAAO,IAAIE,EAAI,CAAC,CAAC,GAAGA,EAAI,CAAC,CAAC,GAAGA,EAAI,CAAC,CAAC,GAAGA,EAAI,CAAC,CAAC,GAAGA,EAAI,CAAC,CAAC,GAAGA,EAAI,CAAC,CAAC;AAAA,EAChE;AACA,SAAOD;AACT;AAEO,SAASE,EAAW;AAAA,EACzB,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,SAAAC;AAAA,EACA,OAAAC;AAAA,EACA,aAAAC,IAAc;AAAA,EACd,MAAAC,IAAO;AACT,GAAoB;AAClB,QAAM,CAACC,GAAQC,CAAS,IAAIC,EAAS,EAAK,GACpCC,IAAYC,EAAuB,IAAI,GACvCC,IAAeD,EAAuB,IAAI,GAC1CE,IAAcF,EAAsB,IAAI,GAGxCG,IAAiBlB,EAAeK,GAAOI,CAAW,GAGlD,CAACU,GAAYC,CAAa,IAAIP,EAASK,CAAc;AAG3D,EAAAG,EAAU,MAAM;AACd,UAAMC,IAAatB,EAAeK,GAAOI,CAAW;AACpD,IAAAW,EAAcE,CAAU;AAAA,EAC1B,GAAG,CAACjB,GAAOI,CAAW,CAAC,GAEvBY,EAAU,MAAM;AACd,UAAME,IAAqB,CAACC,MAAsB;AAChD,MACEV,EAAU,WACV,CAACA,EAAU,QAAQ,SAASU,EAAM,MAAc,KAChDR,EAAa,WACb,CAACA,EAAa,QAAQ,SAASQ,EAAM,MAAc,KAEnDZ,EAAU,EAAK;AAAA,IAEnB;AAEA,oBAAS,iBAAiB,aAAaW,CAAkB,GAClD,MAAM;AACX,eAAS,oBAAoB,aAAaA,CAAkB;AAAA,IAC9D;AAAA,EACF,GAAG,CAAA,CAAE;AAEL,QAAME,IAAwB,MAAM;AAClC,QAAI,CAACT,EAAa,QAAS,QAAO,EAAE,KAAK,GAAG,MAAM,EAAA;AAClD,UAAMU,IAAOV,EAAa,QAAQ,sBAAA;AAClC,WAAO;AAAA,MACL,KAAKU,EAAK,SAAS,OAAO,UAAU;AAAA,MACpC,MAAM,KAAK,IAAI,GAAGA,EAAK,OAAO,OAAO,OAAO;AAAA,IAAA;AAAA,EAEhD,GAEM,CAACC,GAAWC,CAAY,IAAIf,EAASY,GAAuB;AAElE,EAAAJ,EAAU,MAAM;AACd,QAAI,CAACV,EAAQ;AACb,UAAMkB,IAAS,MAAMD,EAAaH,GAAuB;AACzD,kBAAO,iBAAiB,UAAUI,GAAQ,EAAI,GAC9C,OAAO,iBAAiB,UAAUA,CAAM,GACxCA,EAAA,GACO,MAAM;AACX,aAAO,oBAAoB,UAAUA,GAAQ,EAAI,GACjD,OAAO,oBAAoB,UAAUA,CAAM;AAAA,IAC7C;AAAA,EACF,GAAG,CAAClB,CAAM,CAAC;AAEX,QAAMmB,IAAoB,CAAC7B,MAAkB;AAE3C,IAAAmB,EAAcnB,CAAK,GAGfgB,EAAY,WACd,OAAO,aAAaA,EAAY,OAAO,GAEzCA,EAAY,UAAU,OAAO,WAAW,MAAM;AAC5C,MAAAX,EAASL,CAAK;AAAA,IAChB,GAAG,EAAE;AAAA,EACP,GAEM8B,IAAmB,CAACC,MAAgB;AAExC,KAAI,sBAAsB,KAAKA,CAAG,KAAKA,MAAQ,OAAOA,MAAQ,QAC5DZ,EAAcY,KAAO,GAAG,GAEpB,qBAAqB,KAAKA,CAAG,KAC/B1B,EAAS0B,CAAG;AAAA,EAGlB,GAGMC,IAAed;AAErB,SACE,gBAAAe,EAAC,OAAA,EAAI,WAAU,eAAc,KAAKlB,GAE/B,UAAA;AAAA,IAAAR,KACC,gBAAA2B,EAAC,SAAA,EAAM,WAAU,8DACd,UAAA3B,GACH;AAAA,IAIF,gBAAA0B,EAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,MAAA,gBAAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,SAAS,MAAMtB,EAAU,CAACD,CAAM;AAAA,UAChC,cAAYH,KAAS;AAAA,UACrB,WAAW4B;AAAA,YACT;AAAA,YACA;AAAA,YACAzB,IACI,iEACA;AAAA,YACJD,MAAS,WAAW;AAAA,YACpBA,MAAS,YAAY;AAAA,YACrBA,MAAS,WAAW;AAAA,UAAA;AAAA,UAItB,UAAA;AAAA,YAAA,gBAAAyB;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAU;AAAA,gBACV,OAAO;AAAA,kBACL,YAAY;AAAA;AAAA;AAAA;AAAA,kBAIZ,gBAAgB;AAAA,kBAChB,oBAAoB;AAAA,gBAAA;AAAA,cACtB;AAAA,YAAA;AAAA,YAEF,gBAAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAU;AAAA,gBACV,OAAO,EAAE,iBAAiBF,EAAA;AAAA,cAAa;AAAA,YAAA;AAAA,UACzC;AAAA,QAAA;AAAA,MAAA;AAAA,MAIF,gBAAAE,EAAC,QAAA,EAAK,WAAU,gEACb,UAAAF,GACH;AAAA,MAEC1B,KACC,gBAAA4B;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,SAAS,MAAM;AACb,YAAA5B,EAAA,GACAK,EAAU,EAAK;AAAA,UACjB;AAAA,UACA,WAAU;AAAA,UACX,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IAED,GAEJ;AAAA,IAGCD,KACC0B;AAAA,MACE,gBAAAH;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,KAAKpB;AAAA,UACL,WAAU;AAAA,UACV,OAAO;AAAA,YACL,KAAKa,EAAU;AAAA,YACf,MAAMA,EAAU;AAAA,YAChB,QAAQ;AAAA;AAAA,UAAA;AAAA,UAGV,UAAA;AAAA,YAAA,gBAAAQ,EAAC,SAAA,EAAO,UAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAkBN;AAAA,YACF,gBAAAA;AAAA,cAACG;AAAAA,cAAA;AAAA,gBACC,OAAOL;AAAA,gBACP,UAAUH;AAAA,cAAA;AAAA,YAAA;AAAA,YAIZ,gBAAAI,EAAC,OAAA,EAAI,WAAU,gCACb,UAAA;AAAA,cAAA,gBAAAC;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,WAAU;AAAA,kBACV,OAAO,EAAE,iBAAiBF,EAAA;AAAA,gBAAa;AAAA,cAAA;AAAA,cAEzC,gBAAAE;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,MAAK;AAAA,kBACL,OAAOF,EAAa,YAAA;AAAA,kBACpB,UAAU,CAAC,MAAMF,EAAiB,EAAE,OAAO,KAAK;AAAA,kBAChD,WAAU;AAAA,kBACV,aAAY;AAAA,gBAAA;AAAA,cAAA;AAAA,YACd,EAAA,CACF;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,MAEF,SAAS;AAAA,IAAA;AAAA,EACX,GACJ;AAEJ;"}
|
|
@@ -17,8 +17,8 @@ function F({
|
|
|
17
17
|
onPendingFile: y
|
|
18
18
|
}) {
|
|
19
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 }),
|
|
20
|
+
return /* @__PURE__ */ w("div", { className: "space-y-2 flex flex-col items-center", children: [
|
|
21
|
+
f && /* @__PURE__ */ t("label", { className: "block text-xs font-medium text-gray-800 dark:text-gray-100 text-center", children: f }),
|
|
22
22
|
/* @__PURE__ */ t(
|
|
23
23
|
"input",
|
|
24
24
|
{
|
|
@@ -103,7 +103,7 @@ function F({
|
|
|
103
103
|
disabled: n,
|
|
104
104
|
className: N(
|
|
105
105
|
"rounded-lg overflow-hidden border-2 transition-all duration-200",
|
|
106
|
-
"flex items-center justify-center
|
|
106
|
+
"flex items-center justify-center",
|
|
107
107
|
"bg-gray-50 dark:bg-gray-800 hover:bg-gray-100 dark:hover:bg-gray-700",
|
|
108
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
109
|
n && "opacity-50 cursor-not-allowed",
|
|
@@ -111,7 +111,7 @@ function F({
|
|
|
111
111
|
),
|
|
112
112
|
style: {
|
|
113
113
|
height: h?.height || 120,
|
|
114
|
-
|
|
114
|
+
width: h?.width || 200
|
|
115
115
|
},
|
|
116
116
|
children: i ? /* @__PURE__ */ t(
|
|
117
117
|
"img",
|
|
@@ -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 // 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
|
+
{"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 flex flex-col items-center\">\n {/* Label */}\n {label && (\n <label className=\"block text-xs font-medium text-gray-800 dark:text-gray-100 text-center\">\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',\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 width: 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":"BlockPalette.d.ts","sourceRoot":"","sources":["../../src/editor/BlockPalette.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,SAAS,EAAmB,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"BlockPalette.d.ts","sourceRoot":"","sources":["../../src/editor/BlockPalette.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,SAAS,EAAmB,MAAM,WAAW,CAAC;AAKvD,UAAU,iBAAiB;IACzB,UAAU,EAAE,CACV,SAAS,EAAE,SAAS,EACpB,aAAa,CAAC,EAAE,MAAM,EACtB,QAAQ,CAAC,EAAE,MAAM,KACd,IAAI,CAAC;IACV,qBAAqB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACvC;AAED,wBAAgB,YAAY,CAAC,EAC3B,UAAU,EACV,qBAAqB,GACtB,EAAE,iBAAiB,2CA+LnB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LandingPageEditorV2.d.ts","sourceRoot":"","sources":["../../src/editor/LandingPageEditorV2.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,OAAO,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"LandingPageEditorV2.d.ts","sourceRoot":"","sources":["../../src/editor/LandingPageEditorV2.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,OAAO,EAAE,cAAc,EAAuB,MAAM,WAAW,CAAC;AAEhE,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,2CAiW1B"}
|