@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,58 +1,58 @@
|
|
|
1
|
-
function
|
|
2
|
-
if (JSON.stringify(
|
|
1
|
+
function S(u, g) {
|
|
2
|
+
if (JSON.stringify(u) === JSON.stringify(g))
|
|
3
3
|
return { different: !1 };
|
|
4
|
-
const
|
|
5
|
-
for (const r of
|
|
4
|
+
const l = u.props, d = g.props, n = [], p = /* @__PURE__ */ new Set([...Object.keys(l || {}), ...Object.keys(d || {})]);
|
|
5
|
+
for (const r of p)
|
|
6
6
|
if (r === "children" || r === "header" || r === "content" || r === "footer") {
|
|
7
|
-
const
|
|
8
|
-
if (Array.isArray(
|
|
9
|
-
if (
|
|
10
|
-
|
|
7
|
+
const s = l[r] || [], i = d[r] || [];
|
|
8
|
+
if (Array.isArray(s) && Array.isArray(i))
|
|
9
|
+
if (s.length !== i.length)
|
|
10
|
+
n.push(r);
|
|
11
11
|
else {
|
|
12
|
-
const
|
|
13
|
-
JSON.stringify(
|
|
12
|
+
const O = s.map((o) => o?.id).filter(Boolean).sort(), y = i.map((o) => o?.id).filter(Boolean).sort();
|
|
13
|
+
JSON.stringify(O) !== JSON.stringify(y) && n.push(r);
|
|
14
14
|
}
|
|
15
|
-
else JSON.stringify(
|
|
15
|
+
else JSON.stringify(s) !== JSON.stringify(i) && n.push(r);
|
|
16
16
|
} else
|
|
17
|
-
JSON.stringify(
|
|
18
|
-
return { different:
|
|
17
|
+
JSON.stringify(l[r]) !== JSON.stringify(d[r]) && n.push(r);
|
|
18
|
+
return { different: n.length > 0, changedProps: n };
|
|
19
19
|
}
|
|
20
|
-
function
|
|
21
|
-
const d = [],
|
|
22
|
-
if (!
|
|
20
|
+
function J(u, g, l) {
|
|
21
|
+
const d = [], n = (o) => (l ? o.pages.find((h) => h.id === l) : null) || o.pages.find((h) => h.id === "home") || o.pages[0], p = n(u), r = n(g);
|
|
22
|
+
if (!p || !r)
|
|
23
23
|
return [];
|
|
24
|
-
const
|
|
25
|
-
if (
|
|
24
|
+
const s = (p.structure || []).map((o) => o?.id).filter(Boolean).sort(), i = (r.structure || []).map((o) => o?.id).filter(Boolean).sort();
|
|
25
|
+
if (s.length === 0 && i.length === 0)
|
|
26
26
|
return [];
|
|
27
|
-
if (JSON.stringify(
|
|
27
|
+
if (JSON.stringify(s) !== JSON.stringify(i))
|
|
28
28
|
return [{ blockId: "__structural__", changedProps: ["children"] }];
|
|
29
|
-
const
|
|
30
|
-
const
|
|
31
|
-
for (const
|
|
32
|
-
if (!
|
|
33
|
-
f.set(
|
|
34
|
-
const e =
|
|
35
|
-
e?.children && Array.isArray(e.children) && a(e.children, f),
|
|
29
|
+
const y = ((o, h) => {
|
|
30
|
+
const k = [], A = /* @__PURE__ */ new Map(), B = /* @__PURE__ */ new Map(), a = (c, f) => {
|
|
31
|
+
for (const t of c) {
|
|
32
|
+
if (!t || !t.id) continue;
|
|
33
|
+
f.set(t.id, t);
|
|
34
|
+
const e = t.props;
|
|
35
|
+
e?.children && Array.isArray(e.children) && a(e.children, f), t.type === "card" && (e.header && Array.isArray(e.header) && a(e.header, f), e.content && Array.isArray(e.content) && a(e.content, f), e.footer && Array.isArray(e.footer) && a(e.footer, f));
|
|
36
36
|
}
|
|
37
37
|
};
|
|
38
|
-
a(o,
|
|
39
|
-
for (const [c, f] of
|
|
40
|
-
const
|
|
41
|
-
if (!
|
|
42
|
-
|
|
38
|
+
a(o, A), a(h, B);
|
|
39
|
+
for (const [c, f] of B) {
|
|
40
|
+
const t = A.get(c);
|
|
41
|
+
if (!t)
|
|
42
|
+
k.push({ blockId: c });
|
|
43
43
|
else {
|
|
44
|
-
const e =
|
|
45
|
-
e.different &&
|
|
44
|
+
const e = S(t, f);
|
|
45
|
+
e.different && k.push({ blockId: c, changedProps: e.changedProps });
|
|
46
46
|
}
|
|
47
47
|
}
|
|
48
|
-
for (const [c] of
|
|
49
|
-
if (!
|
|
48
|
+
for (const [c] of A)
|
|
49
|
+
if (!B.has(c))
|
|
50
50
|
return [];
|
|
51
|
-
return
|
|
52
|
-
})(
|
|
53
|
-
return d.push(...
|
|
51
|
+
return k;
|
|
52
|
+
})(p.structure, r.structure);
|
|
53
|
+
return d.push(...y), d;
|
|
54
54
|
}
|
|
55
55
|
export {
|
|
56
|
-
|
|
56
|
+
J as detectChangedBlocks
|
|
57
57
|
};
|
|
58
58
|
//# sourceMappingURL=changeDetector.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"changeDetector.js","sources":["../../src/utils/changeDetector.ts"],"sourcesContent":["/**\n * Change Detector\n * Detecta mudanças entre documentos para atualização parcial\n */\n\nimport { SiteDocument, Block } from '../engine/schema/siteDocument'\n\n\n/**\n * Compara dois blocos e retorna se são diferentes\n * Também retorna quais propriedades mudaram\n */\nfunction blocksAreDifferent(block1: Block, block2: Block): { different: boolean; changedProps?: string[] } {\n // Comparação rápida primeiro\n if (JSON.stringify(block1) === JSON.stringify(block2)) {\n return { different: false }\n }\n\n // Detectar quais propriedades mudaram\n const props1 = block1.props as Record<string, any>\n const props2 = block2.props as Record<string, any>\n const changedProps: string[] = []\n\n // Verificar todas as propriedades\n const allProps = new Set([...Object.keys(props1 || {}), ...Object.keys(props2 || {})])\n for (const prop of allProps) {\n // Ignorar propriedades que são arrays de filhos - essas mudanças são detectadas nos filhos\n if (prop === 'children' || prop === 'header' || prop === 'content' || prop === 'footer') {\n // Comparar apenas se os arrays têm tamanhos diferentes ou IDs diferentes\n const oldChildren = props1[prop] || []\n const newChildren = props2[prop] || []\n \n if (Array.isArray(oldChildren) && Array.isArray(newChildren)) {\n // Se os arrays têm tamanhos diferentes, a mudança será detectada nos filhos\n if (oldChildren.length !== newChildren.length) {\n changedProps.push(prop)\n } else {\n // Verificar se os IDs dos filhos são os mesmos (ordem pode ter mudado)\n const oldIds = oldChildren.map((c: any) => c?.id).filter(Boolean).sort()\n const newIds = newChildren.map((c: any) => c?.id).filter(Boolean).sort()\n if (JSON.stringify(oldIds) !== JSON.stringify(newIds)) {\n changedProps.push(prop)\n }\n }\n } else if (JSON.stringify(oldChildren) !== JSON.stringify(newChildren)) {\n changedProps.push(prop)\n }\n } else {\n // Para outras propriedades, comparar normalmente\n if (JSON.stringify(props1[prop]) !== JSON.stringify(props2[prop])) {\n changedProps.push(prop)\n }\n }\n }\n\n return { different: changedProps.length > 0, changedProps }\n}\n\n/**\n * Detecta quais blocos foram modificados entre dois documentos\n * @returns Array de objetos com blockId e changedProps\n */\nexport function detectChangedBlocks(\n oldDoc: SiteDocument,\n newDoc: SiteDocument\n): Array<{ blockId: string; changedProps?: string[] }> {\n const changedBlocks: Array<{ blockId: string; changedProps?: string[] }> = []\n\n // Comparar páginas\n const oldPage = oldDoc.pages.find((p) => p.id === 'home') || oldDoc.pages[0]\n const newPage = newDoc.pages.find((p) => p.id === 'home') || newDoc.pages[0]\n\n if (!oldPage || !newPage) {\n return [] // Se não há páginas, não há mudanças\n }\n\n // Comparação rápida: se os IDs dos blocos raiz são os mesmos, não precisa verificar estrutura\n const oldRootIds = (oldPage.structure || []).map(b => b?.id).filter(Boolean).sort()\n const newRootIds = (newPage.structure || []).map(b => b?.id).filter(Boolean).sort()\n \n // Se ambos estão vazios, não há mudança estrutural\n if (oldRootIds.length === 0 && newRootIds.length === 0) {\n // Ambos vazios - não há estrutura para comparar, retornar vazio (sem mudanças)\n return []\n }\n \n if (JSON.stringify(oldRootIds) !== JSON.stringify(newRootIds)) {\n // Estrutura mudou (blocos adicionados/removidos na raiz)\n // Retornar mudança especial indicando mudança estrutural\n return [{ blockId: '__structural__', changedProps: ['children'] }]\n }\n\n // Comparar estrutura recursivamente\n const compareBlocks = (oldBlocks: Block[], newBlocks: Block[]): Array<{ blockId: string; changedProps?: string[] }> => {\n const localChangedBlocks: Array<{ blockId: string; changedProps?: string[] }> = []\n \n // Criar mapas de blocos por ID\n const oldBlocksMap = new Map<string, Block>()\n const newBlocksMap = new Map<string, Block>()\n\n const addToMap = (blocks: Block[], map: Map<string, Block>) => {\n for (const block of blocks) {\n if (!block || !block.id) continue\n map.set(block.id, block)\n const props = block.props as Record<string, any>\n if (props?.children && Array.isArray(props.children)) {\n addToMap(props.children as Block[], map)\n }\n if (block.type === 'card') {\n if (props.header && Array.isArray(props.header)) {\n addToMap(props.header as Block[], map)\n }\n if (props.content && Array.isArray(props.content)) {\n addToMap(props.content as Block[], map)\n }\n if (props.footer && Array.isArray(props.footer)) {\n addToMap(props.footer as Block[], map)\n }\n }\n }\n }\n\n addToMap(oldBlocks, oldBlocksMap)\n addToMap(newBlocks, newBlocksMap)\n\n // Verificar blocos que mudaram ou foram adicionados\n for (const [id, newBlock] of newBlocksMap) {\n const oldBlock = oldBlocksMap.get(id)\n if (!oldBlock) {\n // Novo bloco adicionado - mas não forçar recriação completa, apenas notar\n localChangedBlocks.push({ blockId: id })\n } else {\n const diff = blocksAreDifferent(oldBlock, newBlock)\n if (diff.different) {\n localChangedBlocks.push({ blockId: id, changedProps: diff.changedProps })\n }\n }\n }\n\n // Verificar blocos que foram removidos\n for (const [id] of oldBlocksMap) {\n if (!newBlocksMap.has(id)) {\n // Bloco foi removido - retornar vazio para forçar recriação completa\n return []\n }\n }\n\n return localChangedBlocks\n }\n\n const result = compareBlocks(oldPage.structure, newPage.structure)\n\n changedBlocks.push(...result)\n\n return changedBlocks\n}\n\n/**\n * Determina o tipo de mudança baseado no bloco e propriedade modificada\n */\nexport function getChangeType(_blockId: string, propName: string, blockType?: string): 'text' | 'layout' | 'visual' {\n // Mudanças visuais (cores, tema)\n const visualProps = ['color', 'bg', 'background', 'backgroundColor', 'primary', 'secondary', 'accent']\n if (visualProps.some((p) => propName.toLowerCase().includes(p))) {\n return 'visual'\n }\n\n // Mudanças de texto\n const textBlockTypes = ['heading', 'text', 'button', 'link']\n if (blockType && textBlockTypes.includes(blockType)) {\n if (propName === 'text' || propName === 'content') {\n return 'text'\n }\n }\n\n // Mudanças de layout (padrão)\n return 'layout'\n}\n\n/**\n * Verifica se apenas um bloco foi modificado\n */\nexport function isSingleBlockChange(changedBlocks: Array<{ blockId: string; changedProps?: string[] }>): boolean {\n return changedBlocks.length === 1\n}\n\n/**\n * Obtém IDs dos blocos modificados\n */\nexport function getChangedBlockIds(changedBlocks: Array<{ blockId: string; changedProps?: string[] }>): string[] {\n return changedBlocks.map((c) => c.blockId)\n}\n\n/**\n * Verifica se as mudanças são apenas visuais (cores, background, etc)\n */\nexport function isVisualChangeOnly(changedBlocks: Array<{ blockId: string; changedProps?: string[] }>): boolean {\n if (changedBlocks.length === 0) return false\n \n const visualProps = ['color', 'bg', 'background', 'backgroundColor', 'border', 'shadow', 'radius']\n \n for (const change of changedBlocks) {\n if (!change.changedProps) return false\n \n // Se todas as propriedades mudadas são visuais\n const allVisual = change.changedProps.every((prop) => \n visualProps.some((vp) => prop.toLowerCase().includes(vp.toLowerCase()))\n )\n \n if (!allVisual) return false\n }\n \n return true\n}\n"],"names":["blocksAreDifferent","block1","block2","props1","props2","changedProps","allProps","prop","oldChildren","newChildren","oldIds","c","newIds","detectChangedBlocks","oldDoc","newDoc","changedBlocks","oldPage","p","newPage","oldRootIds","b","newRootIds","result","oldBlocks","newBlocks","localChangedBlocks","oldBlocksMap","newBlocksMap","addToMap","blocks","map","block","props","id","newBlock","oldBlock","diff"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"changeDetector.js","sources":["../../src/utils/changeDetector.ts"],"sourcesContent":["/**\n * Change Detector\n * Detecta mudanças entre documentos para atualização parcial\n */\n\nimport { SiteDocument, Block } from '../engine/schema/siteDocument'\n\n\n/**\n * Compara dois blocos e retorna se são diferentes\n * Também retorna quais propriedades mudaram\n */\nfunction blocksAreDifferent(block1: Block, block2: Block): { different: boolean; changedProps?: string[] } {\n // Comparação rápida primeiro\n if (JSON.stringify(block1) === JSON.stringify(block2)) {\n return { different: false }\n }\n\n // Detectar quais propriedades mudaram\n const props1 = block1.props as Record<string, any>\n const props2 = block2.props as Record<string, any>\n const changedProps: string[] = []\n\n // Verificar todas as propriedades\n const allProps = new Set([...Object.keys(props1 || {}), ...Object.keys(props2 || {})])\n for (const prop of allProps) {\n // Ignorar propriedades que são arrays de filhos - essas mudanças são detectadas nos filhos\n if (prop === 'children' || prop === 'header' || prop === 'content' || prop === 'footer') {\n // Comparar apenas se os arrays têm tamanhos diferentes ou IDs diferentes\n const oldChildren = props1[prop] || []\n const newChildren = props2[prop] || []\n \n if (Array.isArray(oldChildren) && Array.isArray(newChildren)) {\n // Se os arrays têm tamanhos diferentes, a mudança será detectada nos filhos\n if (oldChildren.length !== newChildren.length) {\n changedProps.push(prop)\n } else {\n // Verificar se os IDs dos filhos são os mesmos (ordem pode ter mudado)\n const oldIds = oldChildren.map((c: any) => c?.id).filter(Boolean).sort()\n const newIds = newChildren.map((c: any) => c?.id).filter(Boolean).sort()\n if (JSON.stringify(oldIds) !== JSON.stringify(newIds)) {\n changedProps.push(prop)\n }\n }\n } else if (JSON.stringify(oldChildren) !== JSON.stringify(newChildren)) {\n changedProps.push(prop)\n }\n } else {\n // Para outras propriedades, comparar normalmente\n if (JSON.stringify(props1[prop]) !== JSON.stringify(props2[prop])) {\n changedProps.push(prop)\n }\n }\n }\n\n return { different: changedProps.length > 0, changedProps }\n}\n\n/**\n * Detecta quais blocos foram modificados entre dois documentos\n * @param pageId - ID da página atual sendo editada (se omitido, usa \"home\" ou primeira página)\n * @returns Array de objetos com blockId e changedProps\n */\nexport function detectChangedBlocks(\n oldDoc: SiteDocument,\n newDoc: SiteDocument,\n pageId?: string,\n): Array<{ blockId: string; changedProps?: string[] }> {\n const changedBlocks: Array<{ blockId: string; changedProps?: string[] }> = []\n\n // Comparar a página que está sendo editada\n const findPage = (doc: SiteDocument) =>\n (pageId ? doc.pages.find((p) => p.id === pageId) : null)\n || doc.pages.find((p) => p.id === 'home')\n || doc.pages[0]\n\n const oldPage = findPage(oldDoc)\n const newPage = findPage(newDoc)\n\n if (!oldPage || !newPage) {\n return [] // Se não há páginas, não há mudanças\n }\n\n // Comparação rápida: se os IDs dos blocos raiz são os mesmos, não precisa verificar estrutura\n const oldRootIds = (oldPage.structure || []).map(b => b?.id).filter(Boolean).sort()\n const newRootIds = (newPage.structure || []).map(b => b?.id).filter(Boolean).sort()\n \n // Se ambos estão vazios, não há mudança estrutural\n if (oldRootIds.length === 0 && newRootIds.length === 0) {\n // Ambos vazios - não há estrutura para comparar, retornar vazio (sem mudanças)\n return []\n }\n \n if (JSON.stringify(oldRootIds) !== JSON.stringify(newRootIds)) {\n // Estrutura mudou (blocos adicionados/removidos na raiz)\n // Retornar mudança especial indicando mudança estrutural\n return [{ blockId: '__structural__', changedProps: ['children'] }]\n }\n\n // Comparar estrutura recursivamente\n const compareBlocks = (oldBlocks: Block[], newBlocks: Block[]): Array<{ blockId: string; changedProps?: string[] }> => {\n const localChangedBlocks: Array<{ blockId: string; changedProps?: string[] }> = []\n \n // Criar mapas de blocos por ID\n const oldBlocksMap = new Map<string, Block>()\n const newBlocksMap = new Map<string, Block>()\n\n const addToMap = (blocks: Block[], map: Map<string, Block>) => {\n for (const block of blocks) {\n if (!block || !block.id) continue\n map.set(block.id, block)\n const props = block.props as Record<string, any>\n if (props?.children && Array.isArray(props.children)) {\n addToMap(props.children as Block[], map)\n }\n if (block.type === 'card') {\n if (props.header && Array.isArray(props.header)) {\n addToMap(props.header as Block[], map)\n }\n if (props.content && Array.isArray(props.content)) {\n addToMap(props.content as Block[], map)\n }\n if (props.footer && Array.isArray(props.footer)) {\n addToMap(props.footer as Block[], map)\n }\n }\n }\n }\n\n addToMap(oldBlocks, oldBlocksMap)\n addToMap(newBlocks, newBlocksMap)\n\n // Verificar blocos que mudaram ou foram adicionados\n for (const [id, newBlock] of newBlocksMap) {\n const oldBlock = oldBlocksMap.get(id)\n if (!oldBlock) {\n // Novo bloco adicionado - mas não forçar recriação completa, apenas notar\n localChangedBlocks.push({ blockId: id })\n } else {\n const diff = blocksAreDifferent(oldBlock, newBlock)\n if (diff.different) {\n localChangedBlocks.push({ blockId: id, changedProps: diff.changedProps })\n }\n }\n }\n\n // Verificar blocos que foram removidos\n for (const [id] of oldBlocksMap) {\n if (!newBlocksMap.has(id)) {\n // Bloco foi removido - retornar vazio para forçar recriação completa\n return []\n }\n }\n\n return localChangedBlocks\n }\n\n const result = compareBlocks(oldPage.structure, newPage.structure)\n\n changedBlocks.push(...result)\n\n return changedBlocks\n}\n\n/**\n * Determina o tipo de mudança baseado no bloco e propriedade modificada\n */\nexport function getChangeType(_blockId: string, propName: string, blockType?: string): 'text' | 'layout' | 'visual' {\n // Mudanças visuais (cores, tema)\n const visualProps = ['color', 'bg', 'background', 'backgroundColor', 'primary', 'secondary', 'accent']\n if (visualProps.some((p) => propName.toLowerCase().includes(p))) {\n return 'visual'\n }\n\n // Mudanças de texto\n const textBlockTypes = ['heading', 'text', 'button', 'link']\n if (blockType && textBlockTypes.includes(blockType)) {\n if (propName === 'text' || propName === 'content') {\n return 'text'\n }\n }\n\n // Mudanças de layout (padrão)\n return 'layout'\n}\n\n/**\n * Verifica se apenas um bloco foi modificado\n */\nexport function isSingleBlockChange(changedBlocks: Array<{ blockId: string; changedProps?: string[] }>): boolean {\n return changedBlocks.length === 1\n}\n\n/**\n * Obtém IDs dos blocos modificados\n */\nexport function getChangedBlockIds(changedBlocks: Array<{ blockId: string; changedProps?: string[] }>): string[] {\n return changedBlocks.map((c) => c.blockId)\n}\n\n/**\n * Verifica se as mudanças são apenas visuais (cores, background, etc)\n */\nexport function isVisualChangeOnly(changedBlocks: Array<{ blockId: string; changedProps?: string[] }>): boolean {\n if (changedBlocks.length === 0) return false\n \n const visualProps = ['color', 'bg', 'background', 'backgroundColor', 'border', 'shadow', 'radius']\n \n for (const change of changedBlocks) {\n if (!change.changedProps) return false\n \n // Se todas as propriedades mudadas são visuais\n const allVisual = change.changedProps.every((prop) => \n visualProps.some((vp) => prop.toLowerCase().includes(vp.toLowerCase()))\n )\n \n if (!allVisual) return false\n }\n \n return true\n}\n"],"names":["blocksAreDifferent","block1","block2","props1","props2","changedProps","allProps","prop","oldChildren","newChildren","oldIds","c","newIds","detectChangedBlocks","oldDoc","newDoc","pageId","changedBlocks","findPage","doc","p","oldPage","newPage","oldRootIds","b","newRootIds","result","oldBlocks","newBlocks","localChangedBlocks","oldBlocksMap","newBlocksMap","addToMap","blocks","map","block","props","id","newBlock","oldBlock","diff"],"mappings":"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"}
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
import { SiteDocument as EngineDocument } from '../engine/schema/siteDocument';
|
|
2
2
|
import { SiteDocument as SharedDocument } from '../shared/schema';
|
|
3
|
-
/** Slugs canônicos das páginas pré-fabricadas do site. Links do navbar/CTAs usam /site/p/:slug. */
|
|
4
|
-
export declare const CANONICAL_SITE_PAGE_SLUGS: readonly ["home", "avisos", "cursos", "contato", "sobre", "metodologia", "depoimentos", "faq"];
|
|
5
3
|
/**
|
|
6
4
|
* Converte um documento no formato shared (usado nos templates em shared/templates)
|
|
7
5
|
* para o formato do engine (usado pelo LandingPageEditor e Preview).
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
6
|
+
*
|
|
7
|
+
* Cria apenas a página "home" com a estrutura do template.
|
|
8
|
+
* Páginas adicionais podem ser criadas pelo usuário no editor (botão "+ Nova Página")
|
|
9
|
+
* ou por plugins ativados (ex: Blog cria páginas "Blog" e "Post").
|
|
11
10
|
*/
|
|
12
11
|
export declare function sharedTemplateToEngineDocument(shared: SharedDocument): EngineDocument;
|
|
13
12
|
//# sourceMappingURL=sharedTemplateToEngine.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sharedTemplateToEngine.d.ts","sourceRoot":"","sources":["../../src/utils/sharedTemplateToEngine.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,YAAY,IAAI,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAEpF,OAAO,KAAK,EAAE,YAAY,IAAI,cAAc,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"sharedTemplateToEngine.d.ts","sourceRoot":"","sources":["../../src/utils/sharedTemplateToEngine.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,YAAY,IAAI,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAEpF,OAAO,KAAK,EAAE,YAAY,IAAI,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvE;;;;;;;GAOG;AACH,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,cAAc,GACrB,cAAc,CAkBhB"}
|
|
@@ -1,92 +1,20 @@
|
|
|
1
|
-
|
|
2
|
-
const
|
|
3
|
-
"home",
|
|
4
|
-
"avisos",
|
|
5
|
-
"cursos",
|
|
6
|
-
"contato",
|
|
7
|
-
"sobre",
|
|
8
|
-
"metodologia",
|
|
9
|
-
"depoimentos",
|
|
10
|
-
"faq"
|
|
11
|
-
];
|
|
12
|
-
function p(o, e, n, i) {
|
|
13
|
-
return [
|
|
14
|
-
m(i),
|
|
1
|
+
function o(r) {
|
|
2
|
+
const e = a(r.theme), t = r.structure ? [...r.structure] : [], n = [
|
|
15
3
|
{
|
|
16
|
-
id:
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
id: `${o}-placeholder`,
|
|
22
|
-
type: "text",
|
|
23
|
-
props: { text: n }
|
|
24
|
-
},
|
|
25
|
-
d()
|
|
4
|
+
id: "home",
|
|
5
|
+
name: r.meta?.title || "Home",
|
|
6
|
+
slug: "home",
|
|
7
|
+
structure: t
|
|
8
|
+
}
|
|
26
9
|
];
|
|
27
|
-
}
|
|
28
|
-
const c = {
|
|
29
|
-
avisos: {
|
|
30
|
-
name: "Avisos",
|
|
31
|
-
placeholder: "Os avisos e comunicados aparecerão aqui quando houver conteúdo."
|
|
32
|
-
},
|
|
33
|
-
cursos: {
|
|
34
|
-
name: "Cursos",
|
|
35
|
-
placeholder: "Conheça nossos cursos e formações. O conteúdo será exibido aqui."
|
|
36
|
-
},
|
|
37
|
-
contato: {
|
|
38
|
-
name: "Contato",
|
|
39
|
-
placeholder: "Entre em contato conosco. As informações serão exibidas aqui."
|
|
40
|
-
},
|
|
41
|
-
sobre: {
|
|
42
|
-
name: "Sobre",
|
|
43
|
-
placeholder: "Conheça nossa história e missão. O conteúdo será exibido aqui."
|
|
44
|
-
},
|
|
45
|
-
metodologia: {
|
|
46
|
-
name: "Metodologia",
|
|
47
|
-
placeholder: "Nossa forma de ensinar. O conteúdo será exibido aqui."
|
|
48
|
-
},
|
|
49
|
-
depoimentos: {
|
|
50
|
-
name: "Depoimentos",
|
|
51
|
-
placeholder: "O que nossos alunos dizem. Os depoimentos serão exibidos aqui."
|
|
52
|
-
},
|
|
53
|
-
faq: {
|
|
54
|
-
name: "FAQ",
|
|
55
|
-
placeholder: "Perguntas e respostas frequentes. O conteúdo será exibido aqui."
|
|
56
|
-
}
|
|
57
|
-
};
|
|
58
|
-
function h(o) {
|
|
59
|
-
const e = l(o.theme), n = o.structure ? [...o.structure] : [], t = [
|
|
60
|
-
{ id: "home", name: o.meta?.title || "Home", slug: "home" },
|
|
61
|
-
...u.filter((a) => a !== "home").map((a) => ({
|
|
62
|
-
id: a,
|
|
63
|
-
name: c[a].name,
|
|
64
|
-
slug: a
|
|
65
|
-
}))
|
|
66
|
-
].map(({ id: a, name: r, slug: s }) => ({
|
|
67
|
-
id: a,
|
|
68
|
-
name: r,
|
|
69
|
-
slug: s,
|
|
70
|
-
structure: []
|
|
71
|
-
}));
|
|
72
|
-
t[0].structure = n;
|
|
73
|
-
for (let a = 1; a < t.length; a++) {
|
|
74
|
-
const r = t[a], s = c[r.id];
|
|
75
|
-
r.structure = p(
|
|
76
|
-
r.id,
|
|
77
|
-
s.name,
|
|
78
|
-
s.placeholder,
|
|
79
|
-
t
|
|
80
|
-
);
|
|
81
|
-
}
|
|
82
10
|
return {
|
|
83
11
|
schemaVersion: 2,
|
|
84
12
|
theme: e,
|
|
85
|
-
pages:
|
|
13
|
+
pages: n
|
|
86
14
|
};
|
|
87
15
|
}
|
|
88
|
-
function
|
|
89
|
-
const e =
|
|
16
|
+
function a(r) {
|
|
17
|
+
const e = r.colors;
|
|
90
18
|
return {
|
|
91
19
|
colors: {
|
|
92
20
|
bg: e.background ?? "#ffffff",
|
|
@@ -110,10 +38,10 @@ function l(o) {
|
|
|
110
38
|
backgroundStyle: "flat",
|
|
111
39
|
typography: {
|
|
112
40
|
fontFamily: {
|
|
113
|
-
heading:
|
|
114
|
-
body:
|
|
41
|
+
heading: r.typography?.fontFamilyHeading ?? "Inter, system-ui, sans-serif",
|
|
42
|
+
body: r.typography?.fontFamily ?? "Inter, system-ui, sans-serif"
|
|
115
43
|
},
|
|
116
|
-
baseSize:
|
|
44
|
+
baseSize: r.typography?.baseFontSize ?? "16px",
|
|
117
45
|
headingScale: {
|
|
118
46
|
h1: "2.5rem",
|
|
119
47
|
h2: "2rem",
|
|
@@ -126,7 +54,6 @@ function l(o) {
|
|
|
126
54
|
};
|
|
127
55
|
}
|
|
128
56
|
export {
|
|
129
|
-
|
|
130
|
-
h as sharedTemplateToEngineDocument
|
|
57
|
+
o as sharedTemplateToEngineDocument
|
|
131
58
|
};
|
|
132
59
|
//# sourceMappingURL=sharedTemplateToEngine.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sharedTemplateToEngine.js","sources":["../../src/utils/sharedTemplateToEngine.ts"],"sourcesContent":["/**\n * Converte documento no formato shared (templates) para o formato do engine.\n * Shared: meta, theme (SimpleThemeTokens), structure na raiz.\n * Engine: schemaVersion, theme (ThemeTokens), pages[].structure.\n */\n\nimport type { SiteDocument as EngineDocument } from \"../engine/schema/siteDocument\";\nimport type { ThemeTokens } from \"../engine/schema/themeTokens\";\nimport type { SiteDocument as SharedDocument } from \"../shared/schema\";\
|
|
1
|
+
{"version":3,"file":"sharedTemplateToEngine.js","sources":["../../src/utils/sharedTemplateToEngine.ts"],"sourcesContent":["/**\n * Converte documento no formato shared (templates) para o formato do engine.\n * Shared: meta, theme (SimpleThemeTokens), structure na raiz.\n * Engine: schemaVersion, theme (ThemeTokens), pages[].structure.\n */\n\nimport type { SiteDocument as EngineDocument } from \"../engine/schema/siteDocument\";\nimport type { ThemeTokens } from \"../engine/schema/themeTokens\";\nimport type { SiteDocument as SharedDocument } from \"../shared/schema\";\n\n/**\n * Converte um documento no formato shared (usado nos templates em shared/templates)\n * para o formato do engine (usado pelo LandingPageEditor e Preview).\n *\n * Cria apenas a página \"home\" com a estrutura do template.\n * Páginas adicionais podem ser criadas pelo usuário no editor (botão \"+ Nova Página\")\n * ou por plugins ativados (ex: Blog cria páginas \"Blog\" e \"Post\").\n */\nexport function sharedTemplateToEngineDocument(\n shared: SharedDocument,\n): EngineDocument {\n const theme = mapSharedThemeToEngine(shared.theme);\n const structure = shared.structure ? [...shared.structure] : [];\n\n const pages: EngineDocument[\"pages\"] = [\n {\n id: \"home\",\n name: shared.meta?.title || \"Home\",\n slug: \"home\",\n structure: structure as EngineDocument[\"pages\"][0][\"structure\"],\n },\n ];\n\n return {\n schemaVersion: 2,\n theme,\n pages,\n };\n}\n\nfunction mapSharedThemeToEngine(\n sharedTheme: SharedDocument[\"theme\"],\n): ThemeTokens {\n const c = sharedTheme.colors;\n return {\n colors: {\n bg: c.background ?? \"#ffffff\",\n surface: c.surface ?? \"#f8fafc\",\n border: c.border ?? \"#e2e8f0\",\n text: c.text ?? \"#1e293b\",\n mutedText: c.textMuted ?? \"#64748b\",\n primary: c.primary ?? \"#3b82f6\",\n primaryText: \"#ffffff\",\n secondary: c.secondary ?? \"#64748b\",\n accent: c.accent ?? \"#f59e0b\",\n ring: c.primary ?? \"#3b82f6\",\n success: c.success,\n warning: c.warning,\n danger: c.error,\n },\n radiusScale: \"md\",\n shadowScale: \"soft\",\n spacingScale: \"normal\",\n motion: \"subtle\",\n backgroundStyle: \"flat\",\n typography: {\n fontFamily: {\n heading:\n sharedTheme.typography?.fontFamilyHeading ??\n \"Inter, system-ui, sans-serif\",\n body:\n sharedTheme.typography?.fontFamily ?? \"Inter, system-ui, sans-serif\",\n },\n baseSize: sharedTheme.typography?.baseFontSize ?? \"16px\",\n headingScale: {\n h1: \"2.5rem\",\n h2: \"2rem\",\n h3: \"1.75rem\",\n h4: \"1.5rem\",\n h5: \"1.25rem\",\n h6: \"1rem\",\n },\n },\n };\n}\n"],"names":["sharedTemplateToEngineDocument","shared","theme","mapSharedThemeToEngine","structure","pages","sharedTheme","c"],"mappings":"AAkBO,SAASA,EACdC,GACgB;AAChB,QAAMC,IAAQC,EAAuBF,EAAO,KAAK,GAC3CG,IAAYH,EAAO,YAAY,CAAC,GAAGA,EAAO,SAAS,IAAI,CAAA,GAEvDI,IAAiC;AAAA,IACrC;AAAA,MACE,IAAI;AAAA,MACJ,MAAMJ,EAAO,MAAM,SAAS;AAAA,MAC5B,MAAM;AAAA,MACN,WAAAG;AAAA,IAAA;AAAA,EACF;AAGF,SAAO;AAAA,IACL,eAAe;AAAA,IACf,OAAAF;AAAA,IACA,OAAAG;AAAA,EAAA;AAEJ;AAEA,SAASF,EACPG,GACa;AACb,QAAMC,IAAID,EAAY;AACtB,SAAO;AAAA,IACL,QAAQ;AAAA,MACN,IAAIC,EAAE,cAAc;AAAA,MACpB,SAASA,EAAE,WAAW;AAAA,MACtB,QAAQA,EAAE,UAAU;AAAA,MACpB,MAAMA,EAAE,QAAQ;AAAA,MAChB,WAAWA,EAAE,aAAa;AAAA,MAC1B,SAASA,EAAE,WAAW;AAAA,MACtB,aAAa;AAAA,MACb,WAAWA,EAAE,aAAa;AAAA,MAC1B,QAAQA,EAAE,UAAU;AAAA,MACpB,MAAMA,EAAE,WAAW;AAAA,MACnB,SAASA,EAAE;AAAA,MACX,SAASA,EAAE;AAAA,MACX,QAAQA,EAAE;AAAA,IAAA;AAAA,IAEZ,aAAa;AAAA,IACb,aAAa;AAAA,IACb,cAAc;AAAA,IACd,QAAQ;AAAA,IACR,iBAAiB;AAAA,IACjB,YAAY;AAAA,MACV,YAAY;AAAA,QACV,SACED,EAAY,YAAY,qBACxB;AAAA,QACF,MACEA,EAAY,YAAY,cAAc;AAAA,MAAA;AAAA,MAE1C,UAAUA,EAAY,YAAY,gBAAgB;AAAA,MAClD,cAAc;AAAA,QACZ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,MAAA;AAAA,IACN;AAAA,EACF;AAEJ;"}
|
|
@@ -1,8 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
* Landing Page Viewer
|
|
3
|
-
* Visualização pública da landing page.
|
|
4
|
-
* Usa o mesmo mecanismo do Preview (editor): exportPageToHtml + iframe srcdoc.
|
|
5
|
-
*/
|
|
1
|
+
import { ContentProvider } from '../engine/plugins/types';
|
|
6
2
|
export interface SchoolData {
|
|
7
3
|
id: string;
|
|
8
4
|
name: string;
|
|
@@ -19,7 +15,18 @@ interface LandingPageViewerProps {
|
|
|
19
15
|
schoolSlug?: string;
|
|
20
16
|
/** Dados da escola para header/navbar dinâmico (quando em contexto escola) */
|
|
21
17
|
schoolData?: SchoolData;
|
|
18
|
+
/**
|
|
19
|
+
* Content providers for dynamic pages (e.g., blog posts, products).
|
|
20
|
+
* Supplied by the consumer project to connect plugin data to the viewer.
|
|
21
|
+
*/
|
|
22
|
+
contentProviders?: ContentProvider[];
|
|
23
|
+
/**
|
|
24
|
+
* Callback for internal navigation (link clicks inside iframe).
|
|
25
|
+
* Receives the href from clicked links. Consumer should use router navigation.
|
|
26
|
+
*/
|
|
27
|
+
onNavigate?: (href: string) => void;
|
|
22
28
|
}
|
|
23
|
-
export declare function LandingPageViewer({ siteId, apiBaseUrl, projectId, pageSlug, schoolSlug, schoolData: _schoolData,
|
|
29
|
+
export declare function LandingPageViewer({ siteId, apiBaseUrl, projectId, pageSlug, schoolSlug, schoolData: _schoolData, // reservado para header/navbar dinâmico (logo, nome da escola)
|
|
30
|
+
contentProviders, onNavigate, }: LandingPageViewerProps): import("react/jsx-runtime").JSX.Element | null;
|
|
24
31
|
export {};
|
|
25
32
|
//# sourceMappingURL=LandingPageViewer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LandingPageViewer.d.ts","sourceRoot":"","sources":["../../src/viewer/LandingPageViewer.tsx"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"LandingPageViewer.d.ts","sourceRoot":"","sources":["../../src/viewer/LandingPageViewer.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAUH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAgB/D,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,sBAAsB;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,gEAAgE;IAChE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0DAA0D;IAC1D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,8EAA8E;IAC9E,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,eAAe,EAAE,CAAC;IACrC;;;OAGG;IACH,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC;AAeD,wBAAgB,iBAAiB,CAAC,EAChC,MAAM,EACN,UAAU,EACV,SAAS,EACT,QAAQ,EACR,UAAU,EACV,UAAU,EAAE,WAAW,EAAE,+DAA+D;AACxF,gBAAgB,EAChB,UAAU,GACX,EAAE,sBAAsB,kDAuXxB"}
|