@brunoalz/smartgesti-site-editor 1.0.0 → 1.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/editor/BlockSelector.d.ts.map +1 -1
- package/dist/editor/BlockSelector.js +60 -57
- package/dist/editor/BlockSelector.js.map +1 -1
- package/dist/editor/LandingPageEditor.d.ts.map +1 -1
- package/dist/editor/LandingPageEditor.js +145 -128
- package/dist/editor/LandingPageEditor.js.map +1 -1
- package/dist/editor/PageTabBar.d.ts +4 -1
- package/dist/editor/PageTabBar.d.ts.map +1 -1
- package/dist/editor/PageTabBar.js +179 -41
- package/dist/editor/PageTabBar.js.map +1 -1
- package/dist/editor/PropertyEditor/BlockPropertyEditor.d.ts +2 -0
- package/dist/editor/PropertyEditor/BlockPropertyEditor.d.ts.map +1 -1
- package/dist/editor/PropertyEditor/BlockPropertyEditor.js +53 -45
- package/dist/editor/PropertyEditor/BlockPropertyEditor.js.map +1 -1
- package/dist/editor/PropertyEditor/CollapsiblePropertyGroup.d.ts +2 -0
- package/dist/editor/PropertyEditor/CollapsiblePropertyGroup.d.ts.map +1 -1
- package/dist/editor/PropertyEditor/CollapsiblePropertyGroup.js +47 -33
- package/dist/editor/PropertyEditor/CollapsiblePropertyGroup.js.map +1 -1
- package/dist/editor/PropertyEditor/VariationSelector.d.ts.map +1 -1
- package/dist/editor/PropertyEditor/VariationSelector.js +10 -6
- package/dist/editor/PropertyEditor/VariationSelector.js.map +1 -1
- package/dist/editor/PropertyEditor/index.js +20 -18
- package/dist/editor/PropertyEditor/index.js.map +1 -1
- package/dist/editor/PropertyEditor/inputs/CarouselImagesInput.d.ts +16 -0
- package/dist/editor/PropertyEditor/inputs/CarouselImagesInput.d.ts.map +1 -0
- package/dist/editor/PropertyEditor/inputs/CarouselImagesInput.js +170 -0
- package/dist/editor/PropertyEditor/inputs/CarouselImagesInput.js.map +1 -0
- package/dist/editor/PropertyEditor/inputs/ImageGridInput.d.ts.map +1 -1
- package/dist/editor/PropertyEditor/inputs/ImageGridInput.js +148 -121
- package/dist/editor/PropertyEditor/inputs/ImageGridInput.js.map +1 -1
- package/dist/editor/PropertyEditor/inputs/index.d.ts +1 -0
- package/dist/editor/PropertyEditor/inputs/index.d.ts.map +1 -1
- package/dist/editor/PropertyEditor/renderPropertyInput.d.ts.map +1 -1
- package/dist/editor/PropertyEditor/renderPropertyInput.js +167 -139
- package/dist/editor/PropertyEditor/renderPropertyInput.js.map +1 -1
- package/dist/editor/components/CenterPanel.d.ts +9 -1
- package/dist/editor/components/CenterPanel.d.ts.map +1 -1
- package/dist/editor/components/CenterPanel.js +24 -14
- package/dist/editor/components/CenterPanel.js.map +1 -1
- package/dist/editor/components/RightPanel.d.ts +5 -0
- package/dist/editor/components/RightPanel.d.ts.map +1 -1
- package/dist/editor/components/RightPanel.js +18 -12
- package/dist/editor/components/RightPanel.js.map +1 -1
- package/dist/editor/components/Toolbar.d.ts +3 -0
- package/dist/editor/components/Toolbar.d.ts.map +1 -1
- package/dist/editor/components/Toolbar.js +54 -35
- package/dist/editor/components/Toolbar.js.map +1 -1
- package/dist/engine/export/exportHtml.d.ts.map +1 -1
- package/dist/engine/export/exportHtml.js +50 -50
- package/dist/engine/export/exportHtml.js.map +1 -1
- package/dist/engine/export/exporters/sections/BlogPostExporters.d.ts +6 -0
- package/dist/engine/export/exporters/sections/BlogPostExporters.d.ts.map +1 -0
- package/dist/engine/export/exporters/sections/BlogPostExporters.js +101 -0
- package/dist/engine/export/exporters/sections/BlogPostExporters.js.map +1 -0
- package/dist/engine/export/exporters/sections/FooterExporter.js +22 -22
- 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 +222 -205
- package/dist/engine/export/exporters/sections/HeroExporter.js.map +1 -1
- package/dist/engine/export/exporters/sections/MarketingExporters.js +88 -88
- package/dist/engine/export/exporters/sections/MarketingExporters.js.map +1 -1
- package/dist/engine/export/exporters/sections/NavbarExporter.js +34 -34
- package/dist/engine/export/exporters/sections/NavbarExporter.js.map +1 -1
- package/dist/engine/export/exporters/sections/index.d.ts.map +1 -1
- package/dist/engine/export/exporters/sections/index.js +29 -22
- package/dist/engine/export/exporters/sections/index.js.map +1 -1
- package/dist/engine/index.d.ts +3 -0
- package/dist/engine/index.d.ts.map +1 -1
- package/dist/engine/index.js +99 -87
- package/dist/engine/index.js.map +1 -1
- package/dist/engine/plugins/builtin/blog/index.d.ts +3 -0
- package/dist/engine/plugins/builtin/blog/index.d.ts.map +1 -0
- package/dist/engine/plugins/builtin/blog/manifest.d.ts +3 -0
- package/dist/engine/plugins/builtin/blog/manifest.d.ts.map +1 -0
- package/dist/engine/plugins/builtin/blog/manifest.js +273 -0
- package/dist/engine/plugins/builtin/blog/manifest.js.map +1 -0
- package/dist/engine/plugins/builtin/blog/mockContentProvider.d.ts +7 -0
- package/dist/engine/plugins/builtin/blog/mockContentProvider.d.ts.map +1 -0
- package/dist/engine/plugins/builtin/blog/mockContentProvider.js +135 -0
- package/dist/engine/plugins/builtin/blog/mockContentProvider.js.map +1 -0
- package/dist/engine/plugins/contentHydration.d.ts +17 -0
- package/dist/engine/plugins/contentHydration.d.ts.map +1 -0
- package/dist/engine/plugins/contentHydration.js +121 -0
- package/dist/engine/plugins/contentHydration.js.map +1 -0
- package/dist/engine/plugins/dynamicPageResolver.d.ts +25 -0
- package/dist/engine/plugins/dynamicPageResolver.d.ts.map +1 -0
- package/dist/engine/plugins/dynamicPageResolver.js +32 -0
- package/dist/engine/plugins/dynamicPageResolver.js.map +1 -0
- package/dist/engine/plugins/index.d.ts +11 -0
- package/dist/engine/plugins/index.d.ts.map +1 -0
- package/dist/engine/plugins/pluginRegistry.d.ts +37 -0
- package/dist/engine/plugins/pluginRegistry.d.ts.map +1 -0
- package/dist/engine/plugins/pluginRegistry.js +134 -0
- package/dist/engine/plugins/pluginRegistry.js.map +1 -0
- package/dist/engine/plugins/types.d.ts +180 -0
- package/dist/engine/plugins/types.d.ts.map +1 -0
- package/dist/engine/presets/heroVariations.d.ts +5 -0
- package/dist/engine/presets/heroVariations.d.ts.map +1 -1
- package/dist/engine/presets/heroVariations.js +50 -6
- package/dist/engine/presets/heroVariations.js.map +1 -1
- package/dist/engine/preview/Preview.d.ts +6 -2
- package/dist/engine/preview/Preview.d.ts.map +1 -1
- package/dist/engine/preview/Preview.js +295 -125
- package/dist/engine/preview/Preview.js.map +1 -1
- package/dist/engine/registry/blocks/sections/blogPostCard.d.ts +3 -0
- package/dist/engine/registry/blocks/sections/blogPostCard.d.ts.map +1 -0
- package/dist/engine/registry/blocks/sections/blogPostCard.js +53 -0
- package/dist/engine/registry/blocks/sections/blogPostCard.js.map +1 -0
- package/dist/engine/registry/blocks/sections/blogPostDetail.d.ts +3 -0
- package/dist/engine/registry/blocks/sections/blogPostDetail.d.ts.map +1 -0
- package/dist/engine/registry/blocks/sections/blogPostDetail.js +49 -0
- package/dist/engine/registry/blocks/sections/blogPostDetail.js.map +1 -0
- package/dist/engine/registry/blocks/sections/blogPostGrid.d.ts +3 -0
- package/dist/engine/registry/blocks/sections/blogPostGrid.d.ts.map +1 -0
- package/dist/engine/registry/blocks/sections/blogPostGrid.js +89 -0
- package/dist/engine/registry/blocks/sections/blogPostGrid.js.map +1 -0
- package/dist/engine/registry/blocks/sections/hero.d.ts.map +1 -1
- package/dist/engine/registry/blocks/sections/hero.js +67 -14
- package/dist/engine/registry/blocks/sections/hero.js.map +1 -1
- package/dist/engine/registry/blocks/sections/index.d.ts +3 -0
- package/dist/engine/registry/blocks/sections/index.d.ts.map +1 -1
- package/dist/engine/registry/blocks/sections/navbar.d.ts.map +1 -1
- package/dist/engine/registry/blocks/sections/navbar.js +2 -1
- package/dist/engine/registry/blocks/sections/navbar.js.map +1 -1
- package/dist/engine/registry/registry.d.ts.map +1 -1
- package/dist/engine/registry/registry.js +16 -12
- package/dist/engine/registry/registry.js.map +1 -1
- package/dist/engine/registry/types.d.ts +10 -6
- package/dist/engine/registry/types.d.ts.map +1 -1
- package/dist/engine/render/renderers/sections/BlogPostCardRenderer.d.ts +3 -0
- package/dist/engine/render/renderers/sections/BlogPostCardRenderer.d.ts.map +1 -0
- package/dist/engine/render/renderers/sections/BlogPostCardRenderer.js +199 -0
- package/dist/engine/render/renderers/sections/BlogPostCardRenderer.js.map +1 -0
- package/dist/engine/render/renderers/sections/BlogPostDetailRenderer.d.ts +3 -0
- package/dist/engine/render/renderers/sections/BlogPostDetailRenderer.d.ts.map +1 -0
- package/dist/engine/render/renderers/sections/BlogPostDetailRenderer.js +293 -0
- package/dist/engine/render/renderers/sections/BlogPostDetailRenderer.js.map +1 -0
- package/dist/engine/render/renderers/sections/BlogPostGridRenderer.d.ts +3 -0
- package/dist/engine/render/renderers/sections/BlogPostGridRenderer.d.ts.map +1 -0
- package/dist/engine/render/renderers/sections/BlogPostGridRenderer.js +101 -0
- package/dist/engine/render/renderers/sections/BlogPostGridRenderer.js.map +1 -0
- package/dist/engine/render/renderers/sections/CtaRenderer.d.ts.map +1 -1
- package/dist/engine/render/renderers/sections/CtaRenderer.js +33 -31
- package/dist/engine/render/renderers/sections/CtaRenderer.js.map +1 -1
- package/dist/engine/render/renderers/sections/FaqItemRenderer.d.ts.map +1 -1
- package/dist/engine/render/renderers/sections/FaqItemRenderer.js +7 -6
- package/dist/engine/render/renderers/sections/FaqItemRenderer.js.map +1 -1
- package/dist/engine/render/renderers/sections/FaqRenderer.js +7 -7
- package/dist/engine/render/renderers/sections/FaqRenderer.js.map +1 -1
- package/dist/engine/render/renderers/sections/FeatureGridRenderer.d.ts.map +1 -1
- package/dist/engine/render/renderers/sections/FeatureGridRenderer.js +19 -18
- package/dist/engine/render/renderers/sections/FeatureGridRenderer.js.map +1 -1
- package/dist/engine/render/renderers/sections/FeatureRenderer.d.ts.map +1 -1
- package/dist/engine/render/renderers/sections/FeatureRenderer.js +5 -4
- package/dist/engine/render/renderers/sections/FeatureRenderer.js.map +1 -1
- package/dist/engine/render/renderers/sections/FooterRenderer.d.ts.map +1 -1
- package/dist/engine/render/renderers/sections/FooterRenderer.js +8 -7
- package/dist/engine/render/renderers/sections/FooterRenderer.js.map +1 -1
- package/dist/engine/render/renderers/sections/HeroRenderer.d.ts.map +1 -1
- package/dist/engine/render/renderers/sections/HeroRenderer.js +295 -218
- 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 +23 -22
- package/dist/engine/render/renderers/sections/NavbarRenderer.js.map +1 -1
- package/dist/engine/render/renderers/sections/PricingCardRenderer.d.ts.map +1 -1
- package/dist/engine/render/renderers/sections/PricingCardRenderer.js +7 -6
- package/dist/engine/render/renderers/sections/PricingCardRenderer.js.map +1 -1
- package/dist/engine/render/renderers/sections/PricingRenderer.js +9 -9
- package/dist/engine/render/renderers/sections/PricingRenderer.js.map +1 -1
- package/dist/engine/render/renderers/sections/TestimonialGridRenderer.d.ts.map +1 -1
- package/dist/engine/render/renderers/sections/TestimonialGridRenderer.js +17 -16
- package/dist/engine/render/renderers/sections/TestimonialGridRenderer.js.map +1 -1
- package/dist/engine/render/renderers/sections/TestimonialRenderer.d.ts.map +1 -1
- package/dist/engine/render/renderers/sections/TestimonialRenderer.js +11 -10
- package/dist/engine/render/renderers/sections/TestimonialRenderer.js.map +1 -1
- package/dist/engine/render/renderers/sections/index.js +24 -18
- package/dist/engine/render/renderers/sections/index.js.map +1 -1
- package/dist/engine/schema/siteDocument.d.ts +104 -3
- package/dist/engine/schema/siteDocument.d.ts.map +1 -1
- package/dist/engine/schema/siteDocument.js.map +1 -1
- package/dist/engine/shared/carouselAnimation.d.ts +20 -0
- package/dist/engine/shared/carouselAnimation.d.ts.map +1 -0
- package/dist/engine/shared/carouselAnimation.js +62 -0
- package/dist/engine/shared/carouselAnimation.js.map +1 -0
- package/dist/engine/shared/imageGrid/types.d.ts +2 -0
- package/dist/engine/shared/imageGrid/types.d.ts.map +1 -1
- package/dist/engine/shared/showWhen.d.ts +44 -0
- package/dist/engine/shared/showWhen.d.ts.map +1 -0
- package/dist/engine/shared/showWhen.js +33 -0
- package/dist/engine/shared/showWhen.js.map +1 -0
- package/dist/hooks/useEditorState.d.ts +3 -0
- package/dist/hooks/useEditorState.d.ts.map +1 -1
- package/dist/hooks/useEditorState.js +106 -84
- package/dist/hooks/useEditorState.js.map +1 -1
- package/dist/index.d.ts +13 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +109 -93
- package/dist/index.js.map +1 -1
- package/dist/shared/templates/escola-blog.d.ts +3 -0
- package/dist/shared/templates/escola-blog.d.ts.map +1 -0
- package/dist/shared/templates/escola-blog.js +160 -0
- package/dist/shared/templates/escola-blog.js.map +1 -0
- package/dist/shared/templates/index.d.ts +2 -0
- package/dist/shared/templates/index.d.ts.map +1 -1
- package/dist/shared/templates/index.js +30 -12
- package/dist/shared/templates/index.js.map +1 -1
- package/dist/utils/changeDetector.d.ts +2 -1
- package/dist/utils/changeDetector.d.ts.map +1 -1
- package/dist/utils/changeDetector.js +39 -39
- package/dist/utils/changeDetector.js.map +1 -1
- package/dist/utils/sharedTemplateToEngine.d.ts +4 -5
- package/dist/utils/sharedTemplateToEngine.d.ts.map +1 -1
- package/dist/utils/sharedTemplateToEngine.js +14 -87
- package/dist/utils/sharedTemplateToEngine.js.map +1 -1
- package/dist/viewer/LandingPageViewer.d.ts +13 -6
- package/dist/viewer/LandingPageViewer.d.ts.map +1 -1
- package/dist/viewer/LandingPageViewer.js +220 -122
- package/dist/viewer/LandingPageViewer.js.map +1 -1
- package/package.json +3 -2
|
@@ -1,30 +1,30 @@
|
|
|
1
|
-
import { jsx as
|
|
2
|
-
import { useState as
|
|
3
|
-
import { TemplatePicker as
|
|
4
|
-
import { useEditorState as
|
|
5
|
-
import { useKeyboardShortcuts as
|
|
6
|
-
import { getTemplate as
|
|
7
|
-
import { sharedTemplateToEngineDocument as
|
|
8
|
-
import { findBlockInStructure as
|
|
9
|
-
import { isLightColor as
|
|
10
|
-
import { logger as
|
|
11
|
-
import { processBlockDataURLs as
|
|
12
|
-
import { Toolbar as
|
|
13
|
-
import { LeftPanel as
|
|
14
|
-
import { CenterPanel as
|
|
15
|
-
import { RightPanel as
|
|
16
|
-
import { PatchBuilder as
|
|
17
|
-
function
|
|
18
|
-
initialData:
|
|
19
|
-
defaultTemplateId:
|
|
20
|
-
onSave:
|
|
21
|
-
onPublish:
|
|
22
|
-
uploadConfig:
|
|
1
|
+
import { jsx as i, jsxs as I } from "react/jsx-runtime";
|
|
2
|
+
import { useState as h, useCallback as g, useEffect as N } from "react";
|
|
3
|
+
import { TemplatePicker as ne } from "./TemplatePicker.js";
|
|
4
|
+
import { useEditorState as ae } from "../hooks/useEditorState.js";
|
|
5
|
+
import { useKeyboardShortcuts as ce } from "../hooks/useKeyboardShortcuts.js";
|
|
6
|
+
import { getTemplate as O } from "../shared/templates/index.js";
|
|
7
|
+
import { sharedTemplateToEngineDocument as j } from "../utils/sharedTemplateToEngine.js";
|
|
8
|
+
import { findBlockInStructure as se } from "../utils/blockUtils.js";
|
|
9
|
+
import { isLightColor as A } from "../utils/colorUtils.js";
|
|
10
|
+
import { logger as y } from "../utils/logger.js";
|
|
11
|
+
import { processBlockDataURLs as ie } from "../utils/dataURLUtils.js";
|
|
12
|
+
import { Toolbar as le } from "./components/Toolbar.js";
|
|
13
|
+
import { LeftPanel as de } from "./components/LeftPanel.js";
|
|
14
|
+
import { CenterPanel as me } from "./components/CenterPanel.js";
|
|
15
|
+
import { RightPanel as fe } from "./components/RightPanel.js";
|
|
16
|
+
import { PatchBuilder as G } from "../engine/patch/PatchBuilder.js";
|
|
17
|
+
function Le({
|
|
18
|
+
initialData: F,
|
|
19
|
+
defaultTemplateId: p,
|
|
20
|
+
onSave: S,
|
|
21
|
+
onPublish: k,
|
|
22
|
+
uploadConfig: v
|
|
23
23
|
}) {
|
|
24
24
|
const {
|
|
25
|
-
document:
|
|
26
|
-
currentPageId:
|
|
27
|
-
currentPage:
|
|
25
|
+
document: o,
|
|
26
|
+
currentPageId: b,
|
|
27
|
+
currentPage: l,
|
|
28
28
|
selectedBlockId: d,
|
|
29
29
|
selectedBlock: K,
|
|
30
30
|
history: M,
|
|
@@ -32,93 +32,96 @@ function be({
|
|
|
32
32
|
addPage: W,
|
|
33
33
|
removePage: q,
|
|
34
34
|
canRemovePage: z,
|
|
35
|
-
setSelectedBlockId:
|
|
36
|
-
handleUndo:
|
|
37
|
-
handleRedo:
|
|
38
|
-
handleDeleteBlock:
|
|
39
|
-
handleUpdateBlock:
|
|
35
|
+
setSelectedBlockId: c,
|
|
36
|
+
handleUndo: x,
|
|
37
|
+
handleRedo: B,
|
|
38
|
+
handleDeleteBlock: w,
|
|
39
|
+
handleUpdateBlock: H,
|
|
40
40
|
applyChange: f,
|
|
41
|
-
resetToTemplate:
|
|
42
|
-
isPaletteSelected:
|
|
43
|
-
loadDocument:
|
|
44
|
-
|
|
41
|
+
resetToTemplate: J,
|
|
42
|
+
isPaletteSelected: C,
|
|
43
|
+
loadDocument: P,
|
|
44
|
+
activePlugins: Q,
|
|
45
|
+
activatePlugin: V,
|
|
46
|
+
deactivatePlugin: X
|
|
47
|
+
} = ae({ initialData: F }), [Y, u] = h(!1), [T, Z] = h(
|
|
45
48
|
null
|
|
46
|
-
),
|
|
49
|
+
), [D, L] = h(null), [U, _] = h(!1), E = g(
|
|
47
50
|
(e) => {
|
|
48
|
-
const
|
|
49
|
-
if (!
|
|
50
|
-
const t =
|
|
51
|
-
|
|
51
|
+
const r = O(e);
|
|
52
|
+
if (!r) return;
|
|
53
|
+
const t = j(r);
|
|
54
|
+
P(t), Z(e);
|
|
52
55
|
},
|
|
53
|
-
[
|
|
56
|
+
[P]
|
|
54
57
|
);
|
|
55
|
-
|
|
56
|
-
!
|
|
57
|
-
}, [
|
|
58
|
-
const
|
|
59
|
-
if (!(!
|
|
60
|
-
|
|
58
|
+
N(() => {
|
|
59
|
+
!o && p && E(p);
|
|
60
|
+
}, [p]);
|
|
61
|
+
const R = async () => {
|
|
62
|
+
if (!(!o || !S || !v)) {
|
|
63
|
+
u(!0);
|
|
61
64
|
try {
|
|
62
65
|
const e = await Promise.all(
|
|
63
|
-
(
|
|
66
|
+
(o.pages || []).map(async (t) => ({
|
|
64
67
|
...t,
|
|
65
68
|
structure: await Promise.all(
|
|
66
|
-
(t.structure || []).map((n) =>
|
|
69
|
+
(t.structure || []).map((n) => ie(n, v))
|
|
67
70
|
)
|
|
68
71
|
}))
|
|
69
|
-
),
|
|
70
|
-
...
|
|
72
|
+
), r = {
|
|
73
|
+
...o,
|
|
71
74
|
pages: e
|
|
72
75
|
};
|
|
73
|
-
await
|
|
76
|
+
await S(r);
|
|
74
77
|
} catch (e) {
|
|
75
|
-
throw
|
|
78
|
+
throw y.error("Error saving:", e), e;
|
|
76
79
|
} finally {
|
|
77
|
-
|
|
80
|
+
u(!1);
|
|
78
81
|
}
|
|
79
82
|
}
|
|
80
|
-
},
|
|
81
|
-
if (!(!
|
|
82
|
-
|
|
83
|
+
}, $ = async () => {
|
|
84
|
+
if (!(!o || !k)) {
|
|
85
|
+
u(!0);
|
|
83
86
|
try {
|
|
84
|
-
await
|
|
87
|
+
await k(o);
|
|
85
88
|
} catch (e) {
|
|
86
|
-
|
|
89
|
+
y.error("Error publishing:", e);
|
|
87
90
|
} finally {
|
|
88
|
-
|
|
91
|
+
u(!1);
|
|
89
92
|
}
|
|
90
93
|
}
|
|
91
|
-
},
|
|
92
|
-
(e,
|
|
93
|
-
if (!
|
|
94
|
-
const t =
|
|
94
|
+
}, ee = g(
|
|
95
|
+
(e, r) => {
|
|
96
|
+
if (!o || !l) return;
|
|
97
|
+
const t = l.id;
|
|
95
98
|
if (t)
|
|
96
99
|
try {
|
|
97
|
-
const n =
|
|
98
|
-
|
|
100
|
+
const n = G.updateBlockProps(
|
|
101
|
+
o,
|
|
99
102
|
t,
|
|
100
103
|
e,
|
|
101
|
-
|
|
104
|
+
r
|
|
102
105
|
);
|
|
103
106
|
n?.length && f(n, "Update block properties");
|
|
104
107
|
} catch (n) {
|
|
105
|
-
|
|
108
|
+
y.error("Error updating block:", n);
|
|
106
109
|
}
|
|
107
110
|
},
|
|
108
|
-
[
|
|
109
|
-
),
|
|
110
|
-
if (!
|
|
111
|
-
const
|
|
111
|
+
[o, l, f]
|
|
112
|
+
), oe = g((e) => {
|
|
113
|
+
if (!o) return;
|
|
114
|
+
const r = A(e.background ?? "#ffffff"), t = A(e.primary ?? "#3b82f6"), n = r ? "#6b7280" : "#9ca3af", s = t ? "#1f2937" : "#ffffff", a = G.updateTheme(o, {
|
|
112
115
|
colors: {
|
|
113
|
-
...
|
|
116
|
+
...o.theme.colors,
|
|
114
117
|
primary: e.primary,
|
|
115
118
|
secondary: e.secondary,
|
|
116
119
|
accent: e.accent,
|
|
117
120
|
bg: e.background,
|
|
118
|
-
surface: e.surface ||
|
|
119
|
-
text: e.text ||
|
|
121
|
+
surface: e.surface || o.theme.colors.surface,
|
|
122
|
+
text: e.text || o.theme.colors.text,
|
|
120
123
|
mutedText: n,
|
|
121
|
-
primaryText:
|
|
124
|
+
primaryText: s,
|
|
122
125
|
linkColor: e.linkColor || e.primary,
|
|
123
126
|
// Links gerais
|
|
124
127
|
menuLinkColor: e.menuLinkColor || e.primary
|
|
@@ -126,97 +129,111 @@ function be({
|
|
|
126
129
|
}
|
|
127
130
|
});
|
|
128
131
|
f(a, "Update color palette");
|
|
129
|
-
}, [
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
132
|
+
}, [o, f]), re = g((e, r) => {
|
|
133
|
+
c(e), L(r || null);
|
|
134
|
+
}, [c]);
|
|
135
|
+
return ce({
|
|
136
|
+
onUndo: x,
|
|
137
|
+
onRedo: B,
|
|
138
|
+
onSave: R,
|
|
134
139
|
onDelete: () => {
|
|
135
|
-
d &&
|
|
140
|
+
d && w(d);
|
|
136
141
|
},
|
|
137
|
-
onDeselect: () =>
|
|
138
|
-
}),
|
|
139
|
-
const e = (
|
|
140
|
-
if (
|
|
141
|
-
const t = String(
|
|
142
|
-
if (!
|
|
142
|
+
onDeselect: () => c(null)
|
|
143
|
+
}), N(() => {
|
|
144
|
+
const e = (r) => {
|
|
145
|
+
if (r.data?.type !== "editor-navigate" || !r.data.href) return;
|
|
146
|
+
const t = String(r.data.href);
|
|
147
|
+
if (!o) return;
|
|
143
148
|
const n = t.match(/^(?:\/site)?\/p\/([^#?]+)/);
|
|
144
149
|
if (n) {
|
|
145
|
-
const
|
|
150
|
+
const s = n[1], a = o.pages.find((te) => te.slug === s);
|
|
146
151
|
a && m(a.id);
|
|
147
152
|
return;
|
|
148
153
|
}
|
|
149
154
|
if (t.startsWith("#")) {
|
|
150
|
-
const
|
|
151
|
-
for (const a of
|
|
152
|
-
if (
|
|
153
|
-
m(a.id),
|
|
155
|
+
const s = t.slice(1);
|
|
156
|
+
for (const a of o.pages)
|
|
157
|
+
if (se(a.structure || [], s)) {
|
|
158
|
+
m(a.id), c(s);
|
|
154
159
|
break;
|
|
155
160
|
}
|
|
156
161
|
}
|
|
157
162
|
};
|
|
158
163
|
return window.addEventListener("message", e), () => window.removeEventListener("message", e);
|
|
159
|
-
}, [
|
|
160
|
-
/* @__PURE__ */
|
|
161
|
-
|
|
164
|
+
}, [o, m, c]), o ? /* @__PURE__ */ I("div", { className: "h-[91vh] max-h-[91vh] flex flex-col bg-background overflow-hidden", children: [
|
|
165
|
+
/* @__PURE__ */ i(
|
|
166
|
+
le,
|
|
162
167
|
{
|
|
163
168
|
history: M,
|
|
164
|
-
isSaving:
|
|
165
|
-
onUndo:
|
|
166
|
-
onRedo:
|
|
167
|
-
onSave:
|
|
168
|
-
onPublish:
|
|
169
|
-
onReset:
|
|
170
|
-
const e =
|
|
171
|
-
e &&
|
|
172
|
-
} :
|
|
169
|
+
isSaving: Y,
|
|
170
|
+
onUndo: x,
|
|
171
|
+
onRedo: B,
|
|
172
|
+
onSave: R,
|
|
173
|
+
onPublish: k ? $ : void 0,
|
|
174
|
+
onReset: T ? () => {
|
|
175
|
+
const e = O(T);
|
|
176
|
+
e && P(j(e));
|
|
177
|
+
} : J,
|
|
178
|
+
showSelectionOverlay: U,
|
|
179
|
+
onToggleSelectionOverlay: () => _((e) => !e)
|
|
173
180
|
}
|
|
174
181
|
),
|
|
175
|
-
/* @__PURE__ */
|
|
176
|
-
/* @__PURE__ */
|
|
177
|
-
|
|
182
|
+
/* @__PURE__ */ I("div", { className: "flex-1 flex overflow-hidden min-h-0 max-h-full", children: [
|
|
183
|
+
/* @__PURE__ */ i(
|
|
184
|
+
de,
|
|
178
185
|
{
|
|
179
|
-
currentPage:
|
|
186
|
+
currentPage: l,
|
|
180
187
|
selectedBlockId: d,
|
|
181
|
-
isPaletteSelected:
|
|
182
|
-
onSelectBlock:
|
|
183
|
-
|
|
188
|
+
isPaletteSelected: C,
|
|
189
|
+
onSelectBlock: (e) => {
|
|
190
|
+
c(e), L(null);
|
|
191
|
+
},
|
|
192
|
+
onDeleteBlock: w
|
|
184
193
|
}
|
|
185
194
|
),
|
|
186
|
-
/* @__PURE__ */
|
|
187
|
-
|
|
195
|
+
/* @__PURE__ */ i(
|
|
196
|
+
me,
|
|
188
197
|
{
|
|
189
|
-
document:
|
|
190
|
-
currentPageId:
|
|
191
|
-
currentPage:
|
|
198
|
+
document: o,
|
|
199
|
+
currentPageId: b,
|
|
200
|
+
currentPage: l,
|
|
192
201
|
selectedBlockId: d,
|
|
193
|
-
onBlockClick:
|
|
202
|
+
onBlockClick: re,
|
|
194
203
|
onSelectPage: m,
|
|
195
204
|
onAddPage: () => {
|
|
196
205
|
const e = prompt("Nome da página:");
|
|
197
206
|
if (!e) return;
|
|
198
|
-
const
|
|
199
|
-
W(
|
|
207
|
+
const r = e.toLowerCase().replace(/\s+/g, "-");
|
|
208
|
+
W(r, e, r);
|
|
200
209
|
},
|
|
201
210
|
onRemovePage: q,
|
|
202
211
|
canRemovePage: z,
|
|
203
|
-
onUpdateBlock:
|
|
212
|
+
onUpdateBlock: ee,
|
|
213
|
+
activePlugins: Q,
|
|
214
|
+
onActivatePlugin: V,
|
|
215
|
+
onDeactivatePlugin: X,
|
|
216
|
+
showSelectionOverlay: U,
|
|
217
|
+
focusedGroup: D
|
|
204
218
|
}
|
|
205
219
|
),
|
|
206
|
-
/* @__PURE__ */
|
|
207
|
-
|
|
220
|
+
/* @__PURE__ */ i(
|
|
221
|
+
fe,
|
|
208
222
|
{
|
|
209
|
-
isPaletteSelected:
|
|
223
|
+
isPaletteSelected: C,
|
|
210
224
|
selectedBlock: K,
|
|
211
|
-
onPaletteChange:
|
|
212
|
-
onUpdateBlock:
|
|
213
|
-
uploadConfig:
|
|
225
|
+
onPaletteChange: oe,
|
|
226
|
+
onUpdateBlock: H,
|
|
227
|
+
uploadConfig: v,
|
|
228
|
+
document: o,
|
|
229
|
+
currentPageId: b,
|
|
230
|
+
focusedGroup: D
|
|
214
231
|
}
|
|
215
232
|
)
|
|
216
233
|
] })
|
|
217
|
-
] }) : /* @__PURE__ */
|
|
234
|
+
] }) : /* @__PURE__ */ i("div", { className: "h-[91vh] max-h-[91vh] flex flex-col bg-background overflow-hidden", children: /* @__PURE__ */ i(ne, { onSelectTemplate: E }) });
|
|
218
235
|
}
|
|
219
236
|
export {
|
|
220
|
-
|
|
237
|
+
Le as LandingPageEditor
|
|
221
238
|
};
|
|
222
239
|
//# sourceMappingURL=LandingPageEditor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LandingPageEditor.js","sources":["../../src/editor/LandingPageEditor.tsx"],"sourcesContent":["/**\n * Landing Page Editor\n * Editor de landing pages usando block engine\n */\n\nimport { useState, useCallback, useEffect, lazy, Suspense } from \"react\";\nimport { TemplatePicker } from \"./TemplatePicker\";\nimport { Toolbar, LeftPanel, CenterPanel, RightPanel } from \"./components\";\nimport { useEditorState } from \"../hooks/useEditorState\";\nimport { useKeyboardShortcuts } from \"../hooks/useKeyboardShortcuts\";\nimport { LoadingSpinner } from \"./components/LoadingSpinner\";\nimport { SiteDocument, PatchBuilder, Block } from \"../engine\";\nimport { getTemplate } from \"../shared/templates\";\nimport type { TemplateId } from \"../shared/templates\";\nimport { sharedTemplateToEngineDocument } from \"../utils/sharedTemplateToEngine\";\nimport { findBlockInStructure } from \"../utils/blockUtils\";\nimport { isLightColor } from \"../utils/colorUtils\";\nimport { logger } from \"../utils/logger\";\nimport { processBlockDataURLs } from \"../utils/dataURLUtils\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface UploadConfig {\n tenantId?: string;\n schoolId?: string;\n siteId?: string | null;\n authToken?: string;\n}\n\nexport interface LandingPageEditorProps {\n initialData?: SiteDocument;\n /** ID do template a carregar quando não houver initialData (ex.: \"escola-edvi\") */\n defaultTemplateId?: TemplateId;\n onSave?: (data: SiteDocument) => Promise<void>;\n onPublish?: (data: SiteDocument) => Promise<void>;\n /** Configuração para upload seguro de imagens/vídeos */\n uploadConfig?: UploadConfig;\n}\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport function LandingPageEditor({\n initialData,\n defaultTemplateId,\n onSave,\n onPublish,\n uploadConfig,\n}: LandingPageEditorProps) {\n // Hook de estado do editor (edição por páginas; sem navegação)\n const {\n document,\n currentPageId,\n currentPage,\n selectedBlockId,\n selectedBlock,\n history,\n setCurrentPageId,\n addPage,\n removePage,\n canRemovePage,\n setSelectedBlockId,\n handleUndo,\n handleRedo,\n handleDeleteBlock,\n handleUpdateBlock,\n applyChange,\n resetToTemplate,\n isPaletteSelected,\n loadDocument,\n } = useEditorState({ initialData });\n\n // Estado local da UI\n const [isSaving, setIsSaving] = useState(false);\n const [currentTemplateId, setCurrentTemplateId] = useState<TemplateId | null>(\n null,\n );\n\n // Carregar template escolhido (converter shared → engine e carregar no editor)\n const handleSelectTemplate = useCallback(\n (templateId: TemplateId) => {\n const sharedDoc = getTemplate(templateId);\n if (!sharedDoc) return;\n const engineDoc = sharedTemplateToEngineDocument(sharedDoc);\n loadDocument(engineDoc);\n setCurrentTemplateId(templateId);\n },\n [loadDocument],\n );\n\n // Ao montar sem documento: carregar defaultTemplateId se informado\n useEffect(() => {\n if (!document && defaultTemplateId) {\n handleSelectTemplate(defaultTemplateId);\n }\n }, [defaultTemplateId]); // eslint-disable-line react-hooks/exhaustive-deps -- carregar só uma vez quando defaultTemplateId existe\n\n // Handlers de save/publish\n const handleSave = async () => {\n if (!document || !onSave || !uploadConfig) return;\n setIsSaving(true);\n try {\n // Processar o documento para fazer upload de todos os Data URLs\n const processedPages = await Promise.all(\n (document.pages || []).map(async (page) => ({\n ...page,\n structure: await Promise.all(\n (page.structure || []).map((block) => processBlockDataURLs(block, uploadConfig))\n ),\n }))\n );\n\n const processedDocument = {\n ...document,\n pages: processedPages,\n };\n\n await onSave(processedDocument);\n } catch (error) {\n logger.error(\"Error saving:\", error);\n throw error;\n } finally {\n setIsSaving(false);\n }\n };\n\n const handlePublish = async () => {\n if (!document || !onPublish) return;\n setIsSaving(true);\n try {\n await onPublish(document);\n } catch (error) {\n logger.error(\"Error publishing:\", error);\n } finally {\n setIsSaving(false);\n }\n };\n\n // Handler para atualizar um bloco específico\n const handleUpdateBlockById = useCallback(\n (blockId: string, updates: Record<string, any>) => {\n if (!document || !currentPage) return;\n const pageId = (currentPage as any).id;\n if (!pageId) return;\n\n try {\n const patch = PatchBuilder.updateBlockProps(\n document,\n pageId,\n blockId,\n updates\n );\n if (patch?.length) {\n applyChange(patch, \"Update block properties\");\n }\n } catch (error) {\n logger.error(\"Error updating block:\", error);\n }\n },\n [document, currentPage, applyChange]\n );\n\n // Handler para atualizar paleta de cores (inclui mutedText, primaryText, linkColor e menuLinkColor)\n const handlePaletteChange = useCallback((palette: any) => {\n if (!document) return;\n const bgLight = isLightColor(palette.background ?? \"#ffffff\");\n const primaryLight = isLightColor(palette.primary ?? \"#3b82f6\");\n const mutedText = bgLight ? \"#6b7280\" : \"#9ca3af\";\n const primaryText = primaryLight ? \"#1f2937\" : \"#ffffff\";\n const patch = PatchBuilder.updateTheme(document, {\n colors: {\n ...document.theme.colors,\n primary: palette.primary,\n secondary: palette.secondary,\n accent: palette.accent,\n bg: palette.background,\n surface: palette.surface || document.theme.colors.surface,\n text: palette.text || document.theme.colors.text,\n mutedText,\n primaryText,\n linkColor: palette.linkColor || palette.primary, // Links gerais\n menuLinkColor: palette.menuLinkColor || palette.primary, // Links do menu navbar\n },\n });\n applyChange(patch, \"Update color palette\");\n }, [document, applyChange]);\n\n // No editor: cliques em links no preview não navegam; trocam a página em edição\n // Keyboard shortcuts\n useKeyboardShortcuts({\n onUndo: handleUndo,\n onRedo: handleRedo,\n onSave: handleSave,\n onDelete: () => {\n if (selectedBlockId) {\n handleDeleteBlock(selectedBlockId);\n }\n },\n onDeselect: () => setSelectedBlockId(null),\n });\n\n useEffect(() => {\n const handleMessage = (event: MessageEvent) => {\n if (event.data?.type !== \"editor-navigate\" || !event.data.href) return;\n const href = String(event.data.href);\n if (!document) return;\n // Links internos: /site/p/:slug ou /p/:slug\n const match = href.match(/^(?:\\/site)?\\/p\\/([^#?]+)/);\n if (match) {\n const slug = match[1];\n const page = document.pages.find((p) => p.slug === slug);\n if (page) setCurrentPageId(page.id);\n return;\n }\n // Âncora #id: selecionar bloco com esse id e trocar para a página que o contém\n if (href.startsWith(\"#\")) {\n const id = href.slice(1);\n for (const p of document.pages) {\n if (findBlockInStructure(p.structure || [], id)) {\n setCurrentPageId(p.id);\n setSelectedBlockId(id);\n break;\n }\n }\n }\n };\n window.addEventListener(\"message\", handleMessage);\n return () => window.removeEventListener(\"message\", handleMessage);\n }, [document, setCurrentPageId, setSelectedBlockId]);\n\n // Sem documento: mostrar seletor de templates\n if (!document) {\n return (\n <div className=\"h-[91vh] max-h-[91vh] flex flex-col bg-background overflow-hidden\">\n <TemplatePicker onSelectTemplate={handleSelectTemplate} />\n </div>\n );\n }\n\n return (\n <div className=\"h-[91vh] max-h-[91vh] flex flex-col bg-background overflow-hidden\">\n {/* Toolbar */}\n <Toolbar\n history={history}\n isSaving={isSaving}\n onUndo={handleUndo}\n onRedo={handleRedo}\n onSave={handleSave}\n onPublish={onPublish ? handlePublish : undefined}\n onReset={\n currentTemplateId\n ? () => {\n // Recarregar o mesmo template\n const sharedDoc = getTemplate(currentTemplateId);\n if (sharedDoc)\n loadDocument(sharedTemplateToEngineDocument(sharedDoc));\n }\n : resetToTemplate\n }\n />\n\n {/* Main Content - 3 Columns */}\n <div className=\"flex-1 flex overflow-hidden min-h-0 max-h-full\">\n {/* Left: Block Selector + Paletas */}\n <LeftPanel\n currentPage={currentPage}\n selectedBlockId={selectedBlockId}\n isPaletteSelected={isPaletteSelected}\n onSelectBlock={setSelectedBlockId}\n onDeleteBlock={handleDeleteBlock}\n />\n\n {/* Center: Preview (apenas a página em edição) */}\n <CenterPanel\n document={document}\n currentPageId={currentPageId}\n currentPage={currentPage}\n selectedBlockId={selectedBlockId}\n onBlockClick={setSelectedBlockId}\n onSelectPage={setCurrentPageId}\n onAddPage={() => {\n const name = prompt(\"Nome da página:\");\n if (!name) return;\n const slug = name.toLowerCase().replace(/\\s+/g, \"-\");\n const id = slug;\n addPage(id, name, slug);\n }}\n onRemovePage={removePage}\n canRemovePage={canRemovePage}\n onUpdateBlock={handleUpdateBlockById}\n />\n\n {/* Right: Editor Panel */}\n <RightPanel\n isPaletteSelected={isPaletteSelected}\n selectedBlock={selectedBlock}\n onPaletteChange={handlePaletteChange}\n onUpdateBlock={handleUpdateBlock}\n uploadConfig={uploadConfig}\n />\n </div>\n </div>\n );\n}\n"],"names":["LandingPageEditor","initialData","defaultTemplateId","onSave","onPublish","uploadConfig","document","currentPageId","currentPage","selectedBlockId","selectedBlock","history","setCurrentPageId","addPage","removePage","canRemovePage","setSelectedBlockId","handleUndo","handleRedo","handleDeleteBlock","handleUpdateBlock","applyChange","resetToTemplate","isPaletteSelected","loadDocument","useEditorState","isSaving","setIsSaving","useState","currentTemplateId","setCurrentTemplateId","handleSelectTemplate","useCallback","templateId","sharedDoc","getTemplate","engineDoc","sharedTemplateToEngineDocument","useEffect","handleSave","processedPages","page","block","processBlockDataURLs","processedDocument","error","logger","handlePublish","handleUpdateBlockById","blockId","updates","pageId","patch","PatchBuilder","handlePaletteChange","palette","bgLight","isLightColor","primaryLight","mutedText","primaryText","useKeyboardShortcuts","handleMessage","event","href","match","slug","p","id","findBlockInStructure","jsxs","jsx","Toolbar","LeftPanel","CenterPanel","name","RightPanel","TemplatePicker"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"LandingPageEditor.js","sources":["../../src/editor/LandingPageEditor.tsx"],"sourcesContent":["/**\n * Landing Page Editor\n * Editor de landing pages usando block engine\n */\n\nimport { useState, useCallback, useEffect, lazy, Suspense } from \"react\";\nimport { TemplatePicker } from \"./TemplatePicker\";\nimport { Toolbar, LeftPanel, CenterPanel, RightPanel } from \"./components\";\nimport { useEditorState } from \"../hooks/useEditorState\";\nimport { useKeyboardShortcuts } from \"../hooks/useKeyboardShortcuts\";\nimport { LoadingSpinner } from \"./components/LoadingSpinner\";\nimport { SiteDocument, PatchBuilder, Block } from \"../engine\";\nimport { getTemplate } from \"../shared/templates\";\nimport type { TemplateId } from \"../shared/templates\";\nimport { sharedTemplateToEngineDocument } from \"../utils/sharedTemplateToEngine\";\nimport { findBlockInStructure } from \"../utils/blockUtils\";\nimport { isLightColor } from \"../utils/colorUtils\";\nimport { logger } from \"../utils/logger\";\nimport { processBlockDataURLs } from \"../utils/dataURLUtils\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface UploadConfig {\n tenantId?: string;\n schoolId?: string;\n siteId?: string | null;\n authToken?: string;\n}\n\nexport interface LandingPageEditorProps {\n initialData?: SiteDocument;\n /** ID do template a carregar quando não houver initialData (ex.: \"escola-edvi\") */\n defaultTemplateId?: TemplateId;\n onSave?: (data: SiteDocument) => Promise<void>;\n onPublish?: (data: SiteDocument) => Promise<void>;\n /** Configuração para upload seguro de imagens/vídeos */\n uploadConfig?: UploadConfig;\n}\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport function LandingPageEditor({\n initialData,\n defaultTemplateId,\n onSave,\n onPublish,\n uploadConfig,\n}: LandingPageEditorProps) {\n // Hook de estado do editor (edição por páginas; sem navegação)\n const {\n document,\n currentPageId,\n currentPage,\n selectedBlockId,\n selectedBlock,\n history,\n setCurrentPageId,\n addPage,\n removePage,\n canRemovePage,\n setSelectedBlockId,\n handleUndo,\n handleRedo,\n handleDeleteBlock,\n handleUpdateBlock,\n applyChange,\n resetToTemplate,\n isPaletteSelected,\n loadDocument,\n activePlugins,\n activatePlugin,\n deactivatePlugin,\n } = useEditorState({ initialData });\n\n // Estado local da UI\n const [isSaving, setIsSaving] = useState(false);\n const [currentTemplateId, setCurrentTemplateId] = useState<TemplateId | null>(\n null,\n );\n const [focusedGroup, setFocusedGroup] = useState<string | null>(null);\n const [showSelectionOverlay, setShowSelectionOverlay] = useState(false);\n\n // Carregar template escolhido (converter shared → engine e carregar no editor)\n const handleSelectTemplate = useCallback(\n (templateId: TemplateId) => {\n const sharedDoc = getTemplate(templateId);\n if (!sharedDoc) return;\n const engineDoc = sharedTemplateToEngineDocument(sharedDoc);\n loadDocument(engineDoc);\n setCurrentTemplateId(templateId);\n },\n [loadDocument],\n );\n\n // Ao montar sem documento: carregar defaultTemplateId se informado\n useEffect(() => {\n if (!document && defaultTemplateId) {\n handleSelectTemplate(defaultTemplateId);\n }\n }, [defaultTemplateId]); // eslint-disable-line react-hooks/exhaustive-deps -- carregar só uma vez quando defaultTemplateId existe\n\n // Handlers de save/publish\n const handleSave = async () => {\n if (!document || !onSave || !uploadConfig) return;\n setIsSaving(true);\n try {\n // Processar o documento para fazer upload de todos os Data URLs\n const processedPages = await Promise.all(\n (document.pages || []).map(async (page) => ({\n ...page,\n structure: await Promise.all(\n (page.structure || []).map((block) => processBlockDataURLs(block, uploadConfig))\n ),\n }))\n );\n\n const processedDocument = {\n ...document,\n pages: processedPages,\n };\n\n await onSave(processedDocument);\n } catch (error) {\n logger.error(\"Error saving:\", error);\n throw error;\n } finally {\n setIsSaving(false);\n }\n };\n\n const handlePublish = async () => {\n if (!document || !onPublish) return;\n setIsSaving(true);\n try {\n await onPublish(document);\n } catch (error) {\n logger.error(\"Error publishing:\", error);\n } finally {\n setIsSaving(false);\n }\n };\n\n // Handler para atualizar um bloco específico\n const handleUpdateBlockById = useCallback(\n (blockId: string, updates: Record<string, any>) => {\n if (!document || !currentPage) return;\n const pageId = (currentPage as any).id;\n if (!pageId) return;\n\n try {\n const patch = PatchBuilder.updateBlockProps(\n document,\n pageId,\n blockId,\n updates\n );\n if (patch?.length) {\n applyChange(patch, \"Update block properties\");\n }\n } catch (error) {\n logger.error(\"Error updating block:\", error);\n }\n },\n [document, currentPage, applyChange]\n );\n\n // Handler para atualizar paleta de cores (inclui mutedText, primaryText, linkColor e menuLinkColor)\n const handlePaletteChange = useCallback((palette: any) => {\n if (!document) return;\n const bgLight = isLightColor(palette.background ?? \"#ffffff\");\n const primaryLight = isLightColor(palette.primary ?? \"#3b82f6\");\n const mutedText = bgLight ? \"#6b7280\" : \"#9ca3af\";\n const primaryText = primaryLight ? \"#1f2937\" : \"#ffffff\";\n const patch = PatchBuilder.updateTheme(document, {\n colors: {\n ...document.theme.colors,\n primary: palette.primary,\n secondary: palette.secondary,\n accent: palette.accent,\n bg: palette.background,\n surface: palette.surface || document.theme.colors.surface,\n text: palette.text || document.theme.colors.text,\n mutedText,\n primaryText,\n linkColor: palette.linkColor || palette.primary, // Links gerais\n menuLinkColor: palette.menuLinkColor || palette.primary, // Links do menu navbar\n },\n });\n applyChange(patch, \"Update color palette\");\n }, [document, applyChange]);\n\n // Handler para clique no preview (com grupo opcional para scroll-to-group)\n const handleBlockClick = useCallback((blockId: string, group?: string) => {\n setSelectedBlockId(blockId);\n setFocusedGroup(group || null);\n }, [setSelectedBlockId]);\n\n // Limpar focusedGroup quando o bloco selecionado muda (via seleção no painel esquerdo, etc.)\n // Nota: handleBlockClick já define o focusedGroup corretamente quando vem do preview\n\n // No editor: cliques em links no preview não navegam; trocam a página em edição\n // Keyboard shortcuts\n useKeyboardShortcuts({\n onUndo: handleUndo,\n onRedo: handleRedo,\n onSave: handleSave,\n onDelete: () => {\n if (selectedBlockId) {\n handleDeleteBlock(selectedBlockId);\n }\n },\n onDeselect: () => setSelectedBlockId(null),\n });\n\n useEffect(() => {\n const handleMessage = (event: MessageEvent) => {\n if (event.data?.type !== \"editor-navigate\" || !event.data.href) return;\n const href = String(event.data.href);\n if (!document) return;\n // Links internos: /site/p/:slug ou /p/:slug\n const match = href.match(/^(?:\\/site)?\\/p\\/([^#?]+)/);\n if (match) {\n const slug = match[1];\n const page = document.pages.find((p) => p.slug === slug);\n if (page) setCurrentPageId(page.id);\n return;\n }\n // Âncora #id: selecionar bloco com esse id e trocar para a página que o contém\n if (href.startsWith(\"#\")) {\n const id = href.slice(1);\n for (const p of document.pages) {\n if (findBlockInStructure(p.structure || [], id)) {\n setCurrentPageId(p.id);\n setSelectedBlockId(id);\n break;\n }\n }\n }\n };\n window.addEventListener(\"message\", handleMessage);\n return () => window.removeEventListener(\"message\", handleMessage);\n }, [document, setCurrentPageId, setSelectedBlockId]);\n\n // Sem documento: mostrar seletor de templates\n if (!document) {\n return (\n <div className=\"h-[91vh] max-h-[91vh] flex flex-col bg-background overflow-hidden\">\n <TemplatePicker onSelectTemplate={handleSelectTemplate} />\n </div>\n );\n }\n\n return (\n <div className=\"h-[91vh] max-h-[91vh] flex flex-col bg-background overflow-hidden\">\n {/* Toolbar */}\n <Toolbar\n history={history}\n isSaving={isSaving}\n onUndo={handleUndo}\n onRedo={handleRedo}\n onSave={handleSave}\n onPublish={onPublish ? handlePublish : undefined}\n onReset={\n currentTemplateId\n ? () => {\n // Recarregar o mesmo template\n const sharedDoc = getTemplate(currentTemplateId);\n if (sharedDoc)\n loadDocument(sharedTemplateToEngineDocument(sharedDoc));\n }\n : resetToTemplate\n }\n showSelectionOverlay={showSelectionOverlay}\n onToggleSelectionOverlay={() => setShowSelectionOverlay(prev => !prev)}\n />\n\n {/* Main Content - 3 Columns */}\n <div className=\"flex-1 flex overflow-hidden min-h-0 max-h-full\">\n {/* Left: Block Selector + Paletas */}\n <LeftPanel\n currentPage={currentPage}\n selectedBlockId={selectedBlockId}\n isPaletteSelected={isPaletteSelected}\n onSelectBlock={(id) => { setSelectedBlockId(id); setFocusedGroup(null); }}\n onDeleteBlock={handleDeleteBlock}\n />\n\n {/* Center: Preview (apenas a página em edição) */}\n <CenterPanel\n document={document}\n currentPageId={currentPageId}\n currentPage={currentPage}\n selectedBlockId={selectedBlockId}\n onBlockClick={handleBlockClick}\n onSelectPage={setCurrentPageId}\n onAddPage={() => {\n const name = prompt(\"Nome da página:\");\n if (!name) return;\n const slug = name.toLowerCase().replace(/\\s+/g, \"-\");\n const id = slug;\n addPage(id, name, slug);\n }}\n onRemovePage={removePage}\n canRemovePage={canRemovePage}\n onUpdateBlock={handleUpdateBlockById}\n activePlugins={activePlugins}\n onActivatePlugin={activatePlugin}\n onDeactivatePlugin={deactivatePlugin}\n showSelectionOverlay={showSelectionOverlay}\n focusedGroup={focusedGroup}\n />\n\n {/* Right: Editor Panel */}\n <RightPanel\n isPaletteSelected={isPaletteSelected}\n selectedBlock={selectedBlock}\n onPaletteChange={handlePaletteChange}\n onUpdateBlock={handleUpdateBlock}\n uploadConfig={uploadConfig}\n document={document}\n currentPageId={currentPageId}\n focusedGroup={focusedGroup}\n />\n </div>\n </div>\n );\n}\n"],"names":["LandingPageEditor","initialData","defaultTemplateId","onSave","onPublish","uploadConfig","document","currentPageId","currentPage","selectedBlockId","selectedBlock","history","setCurrentPageId","addPage","removePage","canRemovePage","setSelectedBlockId","handleUndo","handleRedo","handleDeleteBlock","handleUpdateBlock","applyChange","resetToTemplate","isPaletteSelected","loadDocument","activePlugins","activatePlugin","deactivatePlugin","useEditorState","isSaving","setIsSaving","useState","currentTemplateId","setCurrentTemplateId","focusedGroup","setFocusedGroup","showSelectionOverlay","setShowSelectionOverlay","handleSelectTemplate","useCallback","templateId","sharedDoc","getTemplate","engineDoc","sharedTemplateToEngineDocument","useEffect","handleSave","processedPages","page","block","processBlockDataURLs","processedDocument","error","logger","handlePublish","handleUpdateBlockById","blockId","updates","pageId","patch","PatchBuilder","handlePaletteChange","palette","bgLight","isLightColor","primaryLight","mutedText","primaryText","handleBlockClick","group","useKeyboardShortcuts","handleMessage","event","href","match","slug","p","id","findBlockInStructure","jsxs","jsx","Toolbar","prev","LeftPanel","CenterPanel","name","RightPanel","TemplatePicker"],"mappings":"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"}
|
|
@@ -6,6 +6,9 @@ export interface PageTabBarProps {
|
|
|
6
6
|
onAddPage: () => void;
|
|
7
7
|
onRemovePage: (id: string) => void;
|
|
8
8
|
canRemovePage: (id: string) => boolean;
|
|
9
|
+
activePlugins: string[];
|
|
10
|
+
onActivatePlugin: (pluginId: string) => void;
|
|
11
|
+
onDeactivatePlugin: (pluginId: string) => void;
|
|
9
12
|
}
|
|
10
|
-
export declare function PageTabBar({ pages, currentPageId, onSelectPage, onAddPage, onRemovePage, canRemovePage, }: PageTabBarProps): import("react/jsx-runtime").JSX.Element;
|
|
13
|
+
export declare function PageTabBar({ pages, currentPageId, onSelectPage, onAddPage, onRemovePage, canRemovePage, activePlugins, onActivatePlugin, onDeactivatePlugin, }: PageTabBarProps): import("react/jsx-runtime").JSX.Element;
|
|
11
14
|
//# sourceMappingURL=PageTabBar.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PageTabBar.d.ts","sourceRoot":"","sources":["../../src/editor/PageTabBar.tsx"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"PageTabBar.d.ts","sourceRoot":"","sources":["../../src/editor/PageTabBar.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAGxD,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,YAAY,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,aAAa,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC;IACvC,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,gBAAgB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,kBAAkB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CAChD;AAED,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,aAAa,EACb,YAAY,EACZ,SAAS,EACT,YAAY,EACZ,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,kBAAkB,GACnB,EAAE,eAAe,2CA4RjB"}
|