@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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Preview.js","sources":["../../../src/engine/preview/Preview.tsx"],"sourcesContent":["/**\n * Preview\n * Sem dependências circulares, sem reloads desnecessários\n */\n\nimport React, { useEffect, useRef, useState, useMemo } from \"react\";\nimport { SiteDocument, Block } from \"../schema/siteDocument\";\nimport { exportPageToHtml, exportBlockToHtml } from \"../export/exportHtml\";\nimport { detectChangedBlocks } from \"../../utils/changeDetector\";\nimport { hashDocument } from \"../../utils/documentHash\";\nimport { logger } from \"../../utils/logger\";\n\nexport interface PreviewProps {\n document: SiteDocument;\n pageId?: string;\n className?: string;\n style?: React.CSSProperties;\n onBlockClick?: (blockId: string) => void;\n selectedBlockId?: string | null;\n}\n\n/**\n * Encontra um bloco na estrutura recursivamente\n */\nfunction findBlockInPage(page: any, blockId: string): Block | null {\n const findInBlocks = (blocks: Block[]): Block | null => {\n for (const block of blocks) {\n if (block.id === blockId) return block;\n const props = block.props as Record<string, any>;\n if (props?.children && Array.isArray(props.children)) {\n const found = findInBlocks(props.children);\n if (found) return found;\n }\n if (block.type === \"card\") {\n if (props.header && Array.isArray(props.header)) {\n const found = findInBlocks(props.header);\n if (found) return found;\n }\n if (props.content && Array.isArray(props.content)) {\n const found = findInBlocks(props.content);\n if (found) return found;\n }\n if (props.footer && Array.isArray(props.footer)) {\n const found = findInBlocks(props.footer);\n if (found) return found;\n }\n }\n }\n return null;\n };\n return findInBlocks(page.structure);\n}\n\n/**\n * Componente de preview usando iframe isolado\n */\nexport function Preview({\n document,\n pageId,\n className,\n style,\n onBlockClick,\n selectedBlockId,\n}: PreviewProps) {\n const iframeRef = useRef<HTMLIFrameElement>(null);\n const previousDocRef = useRef<SiteDocument | null>(null);\n const previousDocHashRef = useRef<string | null>(null);\n const isInitializedRef = useRef<boolean>(false);\n const [isLoading, setIsLoading] = useState(true);\n\n // Usar ref para selectedBlockId (necessário para highlight assíncrono)\n const selectedBlockIdRef = useRef(selectedBlockId);\n\n // Atualizar ref quando prop muda\n useEffect(() => {\n selectedBlockIdRef.current = selectedBlockId;\n }, [selectedBlockId]);\n\n const page = useMemo(() => {\n return pageId\n ? document.pages.find((p) => p.id === pageId)\n : document.pages[0];\n }, [document, pageId]);\n\n // Atualizar highlight diretamente no iframe (sem reload)\n const updateHighlight = (blockId: string | null) => {\n if (!iframeRef.current) return;\n\n const iframeDoc =\n iframeRef.current.contentDocument ||\n iframeRef.current.contentWindow?.document;\n if (!iframeDoc) return;\n\n requestAnimationFrame(() => {\n // Remover highlight anterior\n const oldStyle = iframeDoc.getElementById(\"block-highlight\");\n if (oldStyle) oldStyle.remove();\n\n const allBlocks = iframeDoc.querySelectorAll(\"[data-block-id]\");\n allBlocks.forEach((el) => {\n const htmlEl = el as HTMLElement;\n htmlEl.style.outline = \"\";\n htmlEl.style.outlineOffset = \"\";\n });\n\n // Adicionar novo highlight\n if (blockId) {\n const highlightStyle = iframeDoc.createElement(\"style\");\n highlightStyle.id = \"block-highlight\";\n highlightStyle.textContent = `\n [data-block-id=\"${blockId}\"] {\n outline: 2px solid #3b82f6 !important;\n outline-offset: 2px !important;\n position: relative;\n }\n [data-block-id=\"${blockId}\"]::before {\n content: '';\n position: absolute;\n top: -4px;\n left: -4px;\n right: -4px;\n bottom: -4px;\n background: rgba(59, 130, 246, 0.1);\n pointer-events: none;\n z-index: -1;\n }\n `;\n iframeDoc.head.appendChild(highlightStyle);\n }\n });\n };\n\n // Atualizar preview completo (com srcdoc - causa reload)\n const updateFullPreview = (doc: SiteDocument, showLoading: boolean) => {\n if (!iframeRef.current || !page) return;\n\n try {\n if (showLoading) {\n setIsLoading(true);\n }\n\n let html = exportPageToHtml(page, doc, true);\n\n // Adicionar click handler: links não navegam, enviam editor-navigate; outros cliques enviam block-click\n const clickHandler = `\n <script>\n (function() {\n // Click handler\n document.addEventListener('click', function(e) {\n var target = e.target;\n var anchor = target;\n while (anchor && anchor.tagName !== 'A') {\n anchor = anchor.parentElement;\n }\n if (anchor && anchor.tagName === 'A' && anchor.href) {\n e.preventDefault();\n e.stopPropagation();\n window.parent.postMessage({\n type: 'editor-navigate',\n href: anchor.getAttribute('href') || anchor.href\n }, '*');\n return;\n }\n var element = target;\n while (element && !element.dataset.blockId) {\n element = element.parentElement;\n }\n if (element && element.dataset.blockId) {\n window.parent.postMessage({\n type: 'block-click',\n blockId: element.dataset.blockId\n }, '*');\n }\n }, true);\n })();\n </script>\n `;\n html = html.replace(\"</body>\", `${clickHandler}</body>`);\n if (!html.includes(\"</body>\")) {\n html = html + clickHandler;\n }\n\n const iframe = iframeRef.current;\n\n if (showLoading) {\n iframe.onload = () => {\n setIsLoading(false);\n previousDocRef.current = JSON.parse(JSON.stringify(doc));\n previousDocHashRef.current = hashDocument(doc);\n // Aplicar highlight após carregar\n updateHighlight(selectedBlockIdRef.current || null);\n };\n setTimeout(() => {\n setIsLoading(false);\n previousDocRef.current = JSON.parse(JSON.stringify(doc));\n previousDocHashRef.current = hashDocument(doc);\n updateHighlight(selectedBlockIdRef.current || null);\n }, 1000);\n } else {\n previousDocRef.current = JSON.parse(JSON.stringify(doc));\n previousDocHashRef.current = hashDocument(doc);\n // Aguardar iframe recarregar para aplicar highlight\n iframe.onload = () => {\n updateHighlight(selectedBlockIdRef.current || null);\n };\n }\n\n iframe.srcdoc = html;\n } catch (error) {\n logger.error(\"[Preview] Error:\", error);\n if (showLoading) {\n setIsLoading(false);\n }\n }\n };\n\n // Atualizar apenas um bloco (sem reload)\n const updatePartialPreview = (blockId: string, doc: SiteDocument) => {\n if (!iframeRef.current || !page) return;\n\n try {\n const block = findBlockInPage(page, blockId);\n if (!block) {\n updateFullPreview(doc, false);\n return;\n }\n\n const blockHtml = exportBlockToHtml(block, undefined, doc.theme);\n\n requestAnimationFrame(() => {\n const iframe = iframeRef.current;\n if (!iframe) return;\n\n const iframeDoc =\n iframe.contentDocument || iframe.contentWindow?.document;\n if (!iframeDoc) return;\n\n const element = iframeDoc.querySelector(`[data-block-id=\"${blockId}\"]`);\n if (element) {\n try {\n // Remover <style> tags antigas associadas a este bloco\n const oldStyles = iframeDoc.querySelectorAll(`style[data-block-style=\"${blockId}\"]`);\n oldStyles.forEach(s => s.remove());\n\n const temp = iframeDoc.createElement(\"div\");\n temp.innerHTML = blockHtml;\n\n // Marcar e extrair <style> tags para inserção separada\n const styleTags = temp.querySelectorAll(\"style\");\n styleTags.forEach(style => {\n style.setAttribute(\"data-block-style\", blockId);\n });\n\n // Usar DocumentFragment para substituir com múltiplos elementos irmãos\n // (ex: <style>hover CSS</style><button>text</button>)\n const fragment = iframeDoc.createDocumentFragment();\n while (temp.firstChild) {\n fragment.appendChild(temp.firstChild);\n }\n\n if (fragment.childNodes.length > 0) {\n element.parentNode?.replaceChild(fragment, element);\n } else {\n element.outerHTML = blockHtml;\n }\n\n // Atualizar refs\n previousDocRef.current = JSON.parse(JSON.stringify(doc));\n previousDocHashRef.current = hashDocument(doc);\n\n // Reaplicar highlight\n updateHighlight(selectedBlockIdRef.current || null);\n } catch (error) {\n logger.error(\"[Preview] Erro ao atualizar:\", error);\n updateFullPreview(doc, false);\n }\n } else {\n updateFullPreview(doc, false);\n }\n });\n } catch (error) {\n logger.error(\"[Preview] Erro:\", error);\n updateFullPreview(doc, false);\n }\n };\n\n // Efeito para mudanças no DOCUMENTO (não no selectedBlockId)\n useEffect(() => {\n if (!page) {\n setIsLoading(false);\n return;\n }\n\n const currentDocHash = hashDocument(document);\n\n // Primeira renderização\n if (!isInitializedRef.current) {\n if (iframeRef.current) {\n isInitializedRef.current = true;\n updateFullPreview(document, true);\n }\n return;\n }\n\n if (!iframeRef.current) return;\n\n // Se hash não mudou, não há mudanças no documento\n if (previousDocHashRef.current === currentDocHash) {\n return;\n }\n\n // Detectar mudanças\n const changedBlocks = detectChangedBlocks(\n previousDocRef.current || document,\n document,\n );\n\n // Se não há mudanças detectadas mas o hash mudou, forçar reload\n if (changedBlocks.length === 0) {\n logger.debug(\n \"[Preview] Hash changed but no changes detected, forcing reload\",\n );\n updateFullPreview(document, false);\n return;\n }\n\n // Mudança estrutural (bloco adicionado/removido) = reload completo\n if (\n changedBlocks.some(\n (c) =>\n c.blockId === \"__structural__\" ||\n c.changedProps?.includes(\"children\"),\n )\n ) {\n updateFullPreview(document, false);\n return;\n }\n\n // Mudança de 1 bloco (não estrutural) = atualização parcial\n if (changedBlocks.length === 1) {\n const change = changedBlocks[0];\n const changedProps = change.changedProps || [];\n\n const isStructural = changedProps.some(\n (prop) =>\n prop === \"children\" ||\n prop === \"header\" ||\n prop === \"content\" ||\n prop === \"footer\",\n );\n\n if (!isStructural) {\n updatePartialPreview(change.blockId, document);\n return;\n }\n }\n\n // Fallback: reload completo SEM loader\n updateFullPreview(document, false);\n }, [document, page]); // APENAS document e page - sem funções\n\n // Efeito SEPARADO para highlight (não recarrega o preview)\n useEffect(() => {\n if (!isInitializedRef.current) return;\n updateHighlight(selectedBlockId || null);\n }, [selectedBlockId]);\n\n // Listener para cliques\n useEffect(() => {\n if (!onBlockClick) return;\n\n const handleMessage = (event: MessageEvent) => {\n if (event.data?.type === \"block-click\" && event.data?.blockId) {\n onBlockClick(event.data.blockId);\n }\n };\n\n window.addEventListener(\"message\", handleMessage);\n return () => {\n window.removeEventListener(\"message\", handleMessage);\n };\n }, [onBlockClick]);\n\n if (!page) {\n return (\n <div className={className} style={style}>\n <div style={{ padding: \"2rem\", textAlign: \"center\", color: \"#6b7280\" }}>\n Página não encontrada\n </div>\n </div>\n );\n }\n\n return (\n <div className={className} style={{ position: \"relative\", ...style }}>\n {isLoading && (\n <div\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: \"rgba(255, 255, 255, 0.8)\",\n zIndex: 10,\n }}\n >\n <div style={{ color: \"#6b7280\" }}>Carregando preview...</div>\n </div>\n )}\n <iframe\n ref={iframeRef}\n style={{\n width: \"100%\",\n height: \"100%\",\n border: \"none\",\n backgroundColor: \"#ffffff\",\n }}\n title=\"Preview do site\"\n />\n </div>\n );\n}\n"],"names":["findBlockInPage","page","blockId","findInBlocks","blocks","block","props","found","Preview","document","pageId","className","style","onBlockClick","selectedBlockId","iframeRef","useRef","previousDocRef","previousDocHashRef","isInitializedRef","isLoading","setIsLoading","useState","selectedBlockIdRef","useEffect","useMemo","p","updateHighlight","iframeDoc","oldStyle","el","htmlEl","highlightStyle","updateFullPreview","doc","showLoading","html","exportPageToHtml","clickHandler","iframe","hashDocument","error","logger","updatePartialPreview","blockHtml","exportBlockToHtml","element","s","temp","fragment","currentDocHash","changedBlocks","detectChangedBlocks","c","change","prop","handleMessage","event","jsxs","jsx"],"mappings":";;;;;;AAwBA,SAASA,EAAgBC,GAAWC,GAA+B;AACjE,QAAMC,IAAe,CAACC,MAAkC;AACtD,eAAWC,KAASD,GAAQ;AAC1B,UAAIC,EAAM,OAAOH,EAAS,QAAOG;AACjC,YAAMC,IAAQD,EAAM;AACpB,UAAIC,GAAO,YAAY,MAAM,QAAQA,EAAM,QAAQ,GAAG;AACpD,cAAMC,IAAQJ,EAAaG,EAAM,QAAQ;AACzC,YAAIC,EAAO,QAAOA;AAAA,MACpB;AACA,UAAIF,EAAM,SAAS,QAAQ;AACzB,YAAIC,EAAM,UAAU,MAAM,QAAQA,EAAM,MAAM,GAAG;AAC/C,gBAAMC,IAAQJ,EAAaG,EAAM,MAAM;AACvC,cAAIC,EAAO,QAAOA;AAAA,QACpB;AACA,YAAID,EAAM,WAAW,MAAM,QAAQA,EAAM,OAAO,GAAG;AACjD,gBAAMC,IAAQJ,EAAaG,EAAM,OAAO;AACxC,cAAIC,EAAO,QAAOA;AAAA,QACpB;AACA,YAAID,EAAM,UAAU,MAAM,QAAQA,EAAM,MAAM,GAAG;AAC/C,gBAAMC,IAAQJ,EAAaG,EAAM,MAAM;AACvC,cAAIC,EAAO,QAAOA;AAAA,QACpB;AAAA,MACF;AAAA,IACF;AACA,WAAO;AAAA,EACT;AACA,SAAOJ,EAAaF,EAAK,SAAS;AACpC;AAKO,SAASO,EAAQ;AAAA,EACtB,UAAAC;AAAA,EACA,QAAAC;AAAA,EACA,WAAAC;AAAA,EACA,OAAAC;AAAA,EACA,cAAAC;AAAA,EACA,iBAAAC;AACF,GAAiB;AACf,QAAMC,IAAYC,EAA0B,IAAI,GAC1CC,IAAiBD,EAA4B,IAAI,GACjDE,IAAqBF,EAAsB,IAAI,GAC/CG,IAAmBH,EAAgB,EAAK,GACxC,CAACI,GAAWC,CAAY,IAAIC,EAAS,EAAI,GAGzCC,IAAqBP,EAAOF,CAAe;AAGjD,EAAAU,EAAU,MAAM;AACd,IAAAD,EAAmB,UAAUT;AAAA,EAC/B,GAAG,CAACA,CAAe,CAAC;AAEpB,QAAMb,IAAOwB,EAAQ,MACZf,IACHD,EAAS,MAAM,KAAK,CAACiB,MAAMA,EAAE,OAAOhB,CAAM,IAC1CD,EAAS,MAAM,CAAC,GACnB,CAACA,GAAUC,CAAM,CAAC,GAGfiB,IAAkB,CAACzB,MAA2B;AAClD,QAAI,CAACa,EAAU,QAAS;AAExB,UAAMa,IACJb,EAAU,QAAQ,mBAClBA,EAAU,QAAQ,eAAe;AACnC,IAAKa,KAEL,sBAAsB,MAAM;AAE1B,YAAMC,IAAWD,EAAU,eAAe,iBAAiB;AAW3D,UAVIC,OAAmB,OAAA,GAELD,EAAU,iBAAiB,iBAAiB,EACpD,QAAQ,CAACE,MAAO;AACxB,cAAMC,IAASD;AACf,QAAAC,EAAO,MAAM,UAAU,IACvBA,EAAO,MAAM,gBAAgB;AAAA,MAC/B,CAAC,GAGG7B,GAAS;AACX,cAAM8B,IAAiBJ,EAAU,cAAc,OAAO;AACtD,QAAAI,EAAe,KAAK,mBACpBA,EAAe,cAAc;AAAA,4BACT9B,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,4BAKPA,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAY3B0B,EAAU,KAAK,YAAYI,CAAc;AAAA,MAC3C;AAAA,IACF,CAAC;AAAA,EACH,GAGMC,IAAoB,CAACC,GAAmBC,MAAyB;AACrE,QAAI,GAACpB,EAAU,WAAW,CAACd;AAE3B,UAAI;AACF,QAAIkC,KACFd,EAAa,EAAI;AAGnB,YAAIe,IAAOC,EAAiBpC,GAAMiC,GAAK,EAAI;AAG3C,cAAMI,IAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiCrB,QAAAF,IAAOA,EAAK,QAAQ,WAAW,GAAGE,CAAY,SAAS,GAClDF,EAAK,SAAS,SAAS,MAC1BA,IAAOA,IAAOE;AAGhB,cAAMC,IAASxB,EAAU;AAEzB,QAAIoB,KACFI,EAAO,SAAS,MAAM;AACpB,UAAAlB,EAAa,EAAK,GAClBJ,EAAe,UAAU,KAAK,MAAM,KAAK,UAAUiB,CAAG,CAAC,GACvDhB,EAAmB,UAAUsB,EAAaN,CAAG,GAE7CP,EAAgBJ,EAAmB,WAAW,IAAI;AAAA,QACpD,GACA,WAAW,MAAM;AACf,UAAAF,EAAa,EAAK,GAClBJ,EAAe,UAAU,KAAK,MAAM,KAAK,UAAUiB,CAAG,CAAC,GACvDhB,EAAmB,UAAUsB,EAAaN,CAAG,GAC7CP,EAAgBJ,EAAmB,WAAW,IAAI;AAAA,QACpD,GAAG,GAAI,MAEPN,EAAe,UAAU,KAAK,MAAM,KAAK,UAAUiB,CAAG,CAAC,GACvDhB,EAAmB,UAAUsB,EAAaN,CAAG,GAE7CK,EAAO,SAAS,MAAM;AACpB,UAAAZ,EAAgBJ,EAAmB,WAAW,IAAI;AAAA,QACpD,IAGFgB,EAAO,SAASH;AAAA,MAClB,SAASK,GAAO;AACd,QAAAC,EAAO,MAAM,oBAAoBD,CAAK,GAClCN,KACFd,EAAa,EAAK;AAAA,MAEtB;AAAA,EACF,GAGMsB,IAAuB,CAACzC,GAAiBgC,MAAsB;AACnE,QAAI,GAACnB,EAAU,WAAW,CAACd;AAE3B,UAAI;AACF,cAAMI,IAAQL,EAAgBC,GAAMC,CAAO;AAC3C,YAAI,CAACG,GAAO;AACV,UAAA4B,EAAkBC,GAAK,EAAK;AAC5B;AAAA,QACF;AAEA,cAAMU,IAAYC,EAAkBxC,GAAO,QAAW6B,EAAI,KAAK;AAE/D,8BAAsB,MAAM;AAC1B,gBAAMK,IAASxB,EAAU;AACzB,cAAI,CAACwB,EAAQ;AAEb,gBAAMX,IACJW,EAAO,mBAAmBA,EAAO,eAAe;AAClD,cAAI,CAACX,EAAW;AAEhB,gBAAMkB,IAAUlB,EAAU,cAAc,mBAAmB1B,CAAO,IAAI;AACtE,cAAI4C;AACF,gBAAI;AAGF,cADkBlB,EAAU,iBAAiB,2BAA2B1B,CAAO,IAAI,EACzE,QAAQ,CAAA6C,MAAKA,EAAE,OAAA,CAAQ;AAEjC,oBAAMC,IAAOpB,EAAU,cAAc,KAAK;AAC1C,cAAAoB,EAAK,YAAYJ,GAGCI,EAAK,iBAAiB,OAAO,EACrC,QAAQ,CAAApC,MAAS;AACzBA,gBAAAA,EAAM,aAAa,oBAAoBV,CAAO;AAAA,cAChD,CAAC;AAID,oBAAM+C,IAAWrB,EAAU,uBAAA;AAC3B,qBAAOoB,EAAK;AACV,gBAAAC,EAAS,YAAYD,EAAK,UAAU;AAGtC,cAAIC,EAAS,WAAW,SAAS,IAC/BH,EAAQ,YAAY,aAAaG,GAAUH,CAAO,IAElDA,EAAQ,YAAYF,GAItB3B,EAAe,UAAU,KAAK,MAAM,KAAK,UAAUiB,CAAG,CAAC,GACvDhB,EAAmB,UAAUsB,EAAaN,CAAG,GAG7CP,EAAgBJ,EAAmB,WAAW,IAAI;AAAA,YACpD,SAASkB,GAAO;AACd,cAAAC,EAAO,MAAM,gCAAgCD,CAAK,GAClDR,EAAkBC,GAAK,EAAK;AAAA,YAC9B;AAAA;AAEA,YAAAD,EAAkBC,GAAK,EAAK;AAAA,QAEhC,CAAC;AAAA,MACH,SAASO,GAAO;AACd,QAAAC,EAAO,MAAM,mBAAmBD,CAAK,GACrCR,EAAkBC,GAAK,EAAK;AAAA,MAC9B;AAAA,EACF;AAmGA,SAhGAV,EAAU,MAAM;AACd,QAAI,CAACvB,GAAM;AACT,MAAAoB,EAAa,EAAK;AAClB;AAAA,IACF;AAEA,UAAM6B,IAAiBV,EAAa/B,CAAQ;AAG5C,QAAI,CAACU,EAAiB,SAAS;AAC7B,MAAIJ,EAAU,YACZI,EAAiB,UAAU,IAC3Bc,EAAkBxB,GAAU,EAAI;AAElC;AAAA,IACF;AAKA,QAHI,CAACM,EAAU,WAGXG,EAAmB,YAAYgC;AACjC;AAIF,UAAMC,IAAgBC;AAAA,MACpBnC,EAAe,WAAWR;AAAA,MAC1BA;AAAA,IAAA;AAIF,QAAI0C,EAAc,WAAW,GAAG;AAC9B,MAAAT,EAAO;AAAA,QACL;AAAA,MAAA,GAEFT,EAAkBxB,GAAU,EAAK;AACjC;AAAA,IACF;AAGA,QACE0C,EAAc;AAAA,MACZ,CAACE,MACCA,EAAE,YAAY,oBACdA,EAAE,cAAc,SAAS,UAAU;AAAA,IAAA,GAEvC;AACA,MAAApB,EAAkBxB,GAAU,EAAK;AACjC;AAAA,IACF;AAGA,QAAI0C,EAAc,WAAW,GAAG;AAC9B,YAAMG,IAASH,EAAc,CAAC;AAW9B,UAAI,EAViBG,EAAO,gBAAgB,CAAA,GAEV;AAAA,QAChC,CAACC,MACCA,MAAS,cACTA,MAAS,YACTA,MAAS,aACTA,MAAS;AAAA,MAAA,GAGM;AACjB,QAAAZ,EAAqBW,EAAO,SAAS7C,CAAQ;AAC7C;AAAA,MACF;AAAA,IACF;AAGA,IAAAwB,EAAkBxB,GAAU,EAAK;AAAA,EACnC,GAAG,CAACA,GAAUR,CAAI,CAAC,GAGnBuB,EAAU,MAAM;AACd,IAAKL,EAAiB,WACtBQ,EAAgBb,KAAmB,IAAI;AAAA,EACzC,GAAG,CAACA,CAAe,CAAC,GAGpBU,EAAU,MAAM;AACd,QAAI,CAACX,EAAc;AAEnB,UAAM2C,IAAgB,CAACC,MAAwB;AAC7C,MAAIA,EAAM,MAAM,SAAS,iBAAiBA,EAAM,MAAM,WACpD5C,EAAa4C,EAAM,KAAK,OAAO;AAAA,IAEnC;AAEA,kBAAO,iBAAiB,WAAWD,CAAa,GACzC,MAAM;AACX,aAAO,oBAAoB,WAAWA,CAAa;AAAA,IACrD;AAAA,EACF,GAAG,CAAC3C,CAAY,CAAC,GAEZZ,IAWH,gBAAAyD,EAAC,SAAI,WAAA/C,GAAsB,OAAO,EAAE,UAAU,YAAY,GAAGC,EAAA,GAC1D,UAAA;AAAA,IAAAQ,KACC,gBAAAuC;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,UACL,UAAU;AAAA,UACV,KAAK;AAAA,UACL,MAAM;AAAA,UACN,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,SAAS;AAAA,UACT,YAAY;AAAA,UACZ,gBAAgB;AAAA,UAChB,iBAAiB;AAAA,UACjB,QAAQ;AAAA,QAAA;AAAA,QAGV,4BAAC,OAAA,EAAI,OAAO,EAAE,OAAO,UAAA,GAAa,UAAA,wBAAA,CAAqB;AAAA,MAAA;AAAA,IAAA;AAAA,IAG3D,gBAAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAK5C;AAAA,QACL,OAAO;AAAA,UACL,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,QAAQ;AAAA,UACR,iBAAiB;AAAA,QAAA;AAAA,QAEnB,OAAM;AAAA,MAAA;AAAA,IAAA;AAAA,EACR,GACF,sBAtCG,OAAA,EAAI,WAAAJ,GAAsB,OAAAC,GACzB,UAAA,gBAAA+C,EAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,WAAW,UAAU,OAAO,UAAA,GAAa,mCAExE,GACF;AAoCN;"}
|
|
1
|
+
{"version":3,"file":"Preview.js","sources":["../../../src/engine/preview/Preview.tsx"],"sourcesContent":["/**\n * Preview\n * Sem dependências circulares, sem reloads desnecessários\n */\n\nimport React, { useEffect, useRef, useState, useMemo } from \"react\";\nimport { SiteDocument, Block } from \"../schema/siteDocument\";\nimport { componentRegistry } from \"../registry/registry\";\nimport { exportPageToHtml, exportBlockToHtml } from \"../export/exportHtml\";\nimport { detectChangedBlocks } from \"../../utils/changeDetector\";\nimport { hashDocument } from \"../../utils/documentHash\";\nimport { logger } from \"../../utils/logger\";\n\nexport interface PreviewProps {\n document: SiteDocument;\n pageId?: string;\n className?: string;\n style?: React.CSSProperties;\n onBlockClick?: (blockId: string, group?: string) => void;\n selectedBlockId?: string | null;\n /** Exibe hover e label de seleção nos blocos do preview */\n showSelectionOverlay?: boolean;\n /** Grupo focado para indicador visual no preview */\n focusedGroup?: string | null;\n}\n\n/**\n * Encontra um bloco na estrutura recursivamente\n */\nfunction findBlockInPage(page: any, blockId: string): Block | null {\n const findInBlocks = (blocks: Block[]): Block | null => {\n for (const block of blocks) {\n if (block.id === blockId) return block;\n const props = block.props as Record<string, any>;\n if (props?.children && Array.isArray(props.children)) {\n const found = findInBlocks(props.children);\n if (found) return found;\n }\n if (block.type === \"card\") {\n if (props.header && Array.isArray(props.header)) {\n const found = findInBlocks(props.header);\n if (found) return found;\n }\n if (props.content && Array.isArray(props.content)) {\n const found = findInBlocks(props.content);\n if (found) return found;\n }\n if (props.footer && Array.isArray(props.footer)) {\n const found = findInBlocks(props.footer);\n if (found) return found;\n }\n }\n }\n return null;\n };\n return findInBlocks(page.structure);\n}\n\n/**\n * Monta mapa blockId → nome legível (da registry)\n */\nfunction buildBlockNameMap(page: any): Record<string, string> {\n const map: Record<string, string> = {};\n const walk = (blocks: Block[]) => {\n for (const block of blocks) {\n const def = componentRegistry.get(block.type);\n map[block.id] = def?.name || block.type;\n const props = block.props as Record<string, any>;\n if (props?.children && Array.isArray(props.children)) walk(props.children);\n if (block.type === \"card\") {\n if (Array.isArray(props?.header)) walk(props.header);\n if (Array.isArray(props?.content)) walk(props.content);\n if (Array.isArray(props?.footer)) walk(props.footer);\n }\n }\n };\n if (page?.structure) walk(page.structure);\n return map;\n}\n\n/**\n * Componente de preview usando iframe isolado\n */\nexport function Preview({\n document,\n pageId,\n className,\n style,\n onBlockClick,\n selectedBlockId,\n showSelectionOverlay = false,\n focusedGroup = null,\n}: PreviewProps) {\n const iframeRef = useRef<HTMLIFrameElement>(null);\n const previousDocRef = useRef<SiteDocument | null>(null);\n const previousDocHashRef = useRef<string | null>(null);\n const previousPageIdRef = useRef<string | null>(null);\n const isInitializedRef = useRef<boolean>(false);\n const [isLoading, setIsLoading] = useState(true);\n\n // Usar ref para selectedBlockId (necessário para highlight assíncrono)\n const selectedBlockIdRef = useRef(selectedBlockId);\n const showSelectionOverlayRef = useRef(showSelectionOverlay);\n const focusedGroupRef = useRef(focusedGroup);\n\n // Atualizar refs quando props mudam\n useEffect(() => {\n selectedBlockIdRef.current = selectedBlockId;\n }, [selectedBlockId]);\n\n useEffect(() => {\n showSelectionOverlayRef.current = showSelectionOverlay;\n }, [showSelectionOverlay]);\n\n useEffect(() => {\n focusedGroupRef.current = focusedGroup;\n }, [focusedGroup]);\n\n const page = useMemo(() => {\n return pageId\n ? document.pages.find((p) => p.id === pageId)\n : document.pages[0];\n }, [document, pageId]);\n\n // Mapa blockId → nome legível para labels\n const blockNameMapRef = useRef<Record<string, string>>({});\n useEffect(() => {\n blockNameMapRef.current = buildBlockNameMap(page);\n }, [page]);\n\n // Atualizar highlight + selection overlay diretamente no iframe (sem reload)\n const updateHighlight = (blockId: string | null) => {\n if (!iframeRef.current) return;\n\n const iframeDoc =\n iframeRef.current.contentDocument ||\n iframeRef.current.contentWindow?.document;\n if (!iframeDoc) return;\n\n const overlayEnabled = showSelectionOverlayRef.current;\n const group = focusedGroupRef.current;\n\n requestAnimationFrame(() => {\n // Remover highlight anterior\n const oldStyle = iframeDoc.getElementById(\"block-highlight\");\n if (oldStyle) oldStyle.remove();\n\n const allBlocks = iframeDoc.querySelectorAll(\"[data-block-id]\");\n allBlocks.forEach((el) => {\n const htmlEl = el as HTMLElement;\n htmlEl.style.outline = \"\";\n htmlEl.style.outlineOffset = \"\";\n });\n\n // Remover labels anteriores\n const oldLabel = iframeDoc.getElementById(\"sg-block-label\");\n if (oldLabel) oldLabel.remove();\n const oldGroupStyle = iframeDoc.getElementById(\"sg-group-highlight\");\n if (oldGroupStyle) oldGroupStyle.remove();\n const oldGroupLabel = iframeDoc.getElementById(\"sg-group-label\");\n if (oldGroupLabel) oldGroupLabel.remove();\n\n // Adicionar novo highlight\n if (blockId) {\n const highlightStyle = iframeDoc.createElement(\"style\");\n highlightStyle.id = \"block-highlight\";\n highlightStyle.textContent = `\n [data-block-id=\"${blockId}\"] {\n outline: 2px solid #3b82f6 !important;\n outline-offset: 2px !important;\n position: relative;\n }\n [data-block-id=\"${blockId}\"]::before {\n content: '';\n position: absolute;\n top: -4px;\n left: -4px;\n right: -4px;\n bottom: -4px;\n background: rgba(59, 130, 246, 0.1);\n pointer-events: none;\n z-index: -1;\n }\n `;\n iframeDoc.head.appendChild(highlightStyle);\n\n // Selection label (only when overlay is enabled)\n if (overlayEnabled) {\n const selectedEl = iframeDoc.querySelector(`[data-block-id=\"${blockId}\"]`) as HTMLElement;\n if (selectedEl) {\n const blockName = blockNameMapRef.current[blockId] || blockId;\n const label = iframeDoc.createElement(\"div\");\n label.id = \"sg-block-label\";\n label.textContent = blockName;\n label.style.cssText = \"position:absolute;top:-22px;left:0;background:#3b82f6;color:#fff;font-size:11px;font-weight:600;padding:2px 8px;border-radius:4px 4px 0 0;z-index:10000;pointer-events:none;font-family:system-ui,sans-serif;white-space:nowrap;line-height:16px;\";\n const pos = getComputedStyle(selectedEl).position;\n if (pos === \"static\") selectedEl.style.position = \"relative\";\n selectedEl.appendChild(label);\n }\n }\n\n // Indicador de grupo — mostra qual sub-seção foi clicada (purple)\n if (group) {\n const blockEl = iframeDoc.querySelector(`[data-block-id=\"${blockId}\"]`);\n const groupEl = blockEl?.querySelector(`[data-block-group=\"${group}\"]`) as HTMLElement;\n if (groupEl) {\n const ghStyle = iframeDoc.createElement(\"style\");\n ghStyle.id = \"sg-group-highlight\";\n ghStyle.textContent = `\n [data-block-id=\"${blockId}\"] [data-block-group=\"${group}\"] {\n outline: 2px solid #8b5cf6 !important;\n outline-offset: 2px !important;\n position: relative;\n }\n `;\n iframeDoc.head.appendChild(ghStyle);\n\n const gLabel = iframeDoc.createElement(\"div\");\n gLabel.id = \"sg-group-label\";\n gLabel.textContent = group;\n gLabel.style.cssText = \"position:absolute;top:-20px;right:0;background:#8b5cf6;color:#fff;font-size:10px;font-weight:600;padding:2px 8px;border-radius:4px 4px 0 0;z-index:10001;pointer-events:none;font-family:system-ui,sans-serif;white-space:nowrap;line-height:14px;\";\n const gPos = getComputedStyle(groupEl).position;\n if (gPos === \"static\") groupEl.style.position = \"relative\";\n groupEl.appendChild(gLabel);\n }\n }\n }\n });\n };\n\n // Enviar mapa de nomes para o iframe\n const sendBlockNamesToIframe = () => {\n if (!iframeRef.current?.contentWindow) return;\n iframeRef.current.contentWindow.postMessage({\n type: \"sg-set-block-names\",\n names: blockNameMapRef.current,\n }, \"*\");\n };\n\n // Atualizar hover overlay (injetar/remover CSS de hover nos blocos)\n const updateSelectionOverlay = (enabled: boolean) => {\n if (!iframeRef.current) return;\n\n const iframeDoc =\n iframeRef.current.contentDocument ||\n iframeRef.current.contentWindow?.document;\n if (!iframeDoc) return;\n\n const existingStyle = iframeDoc.getElementById(\"sg-hover-overlay\");\n if (existingStyle) existingStyle.remove();\n\n // Remove tooltip when disabling\n if (!enabled) {\n const tooltip = iframeDoc.getElementById(\"sg-hover-tooltip\");\n if (tooltip) tooltip.style.opacity = \"0\";\n }\n\n if (enabled) {\n const hoverStyle = iframeDoc.createElement(\"style\");\n hoverStyle.id = \"sg-hover-overlay\";\n hoverStyle.textContent = `\n [data-block-id] {\n cursor: pointer;\n transition: outline 0.15s ease, outline-offset 0.15s ease;\n }\n [data-block-id]:hover {\n outline: 2px dashed #94a3b8 !important;\n outline-offset: 2px !important;\n }\n [data-block-group] {\n cursor: pointer;\n transition: outline 0.15s ease, background 0.15s ease;\n }\n [data-block-group]:hover {\n outline: 1.5px dashed #a78bfa !important;\n outline-offset: 1px !important;\n background: rgba(139, 92, 246, 0.04);\n }\n `;\n iframeDoc.head.appendChild(hoverStyle);\n sendBlockNamesToIframe();\n }\n\n // Re-apply highlight (recalcula label)\n updateHighlight(selectedBlockIdRef.current || null);\n };\n\n // Atualizar preview completo (com srcdoc - causa reload)\n const updateFullPreview = (doc: SiteDocument, showLoading: boolean) => {\n if (!iframeRef.current || !page) return;\n\n try {\n if (showLoading) {\n setIsLoading(true);\n }\n\n let html = exportPageToHtml(page, doc, true);\n\n // Adicionar click handler + hover handler: links não navegam, enviam editor-navigate; outros cliques enviam block-click\n const clickHandler = `\n <script>\n (function() {\n // Click handler\n document.addEventListener('click', function(e) {\n var target = e.target;\n var anchor = target;\n while (anchor && anchor.tagName !== 'A') {\n anchor = anchor.parentElement;\n }\n if (anchor && anchor.tagName === 'A' && anchor.href) {\n e.preventDefault();\n e.stopPropagation();\n window.parent.postMessage({\n type: 'editor-navigate',\n href: anchor.getAttribute('href') || anchor.href\n }, '*');\n return;\n }\n var element = target;\n var group = null;\n while (element && !element.dataset.blockId) {\n if (element.dataset && element.dataset.blockGroup && !group) {\n group = element.dataset.blockGroup;\n }\n element = element.parentElement;\n }\n if (element && element.dataset.blockId) {\n window.parent.postMessage({\n type: 'block-click',\n blockId: element.dataset.blockId,\n group: group\n }, '*');\n }\n }, true);\n\n // Hover tooltip — block name map injected from parent via postMessage\n var _blockNames = {};\n var _hoverTooltip = null;\n\n window.addEventListener('message', function(e) {\n if (e.data && e.data.type === 'sg-set-block-names') {\n _blockNames = e.data.names || {};\n }\n });\n\n function getTooltip() {\n if (_hoverTooltip) return _hoverTooltip;\n _hoverTooltip = document.createElement('div');\n _hoverTooltip.id = 'sg-hover-tooltip';\n _hoverTooltip.style.cssText = 'position:fixed;top:0;left:0;background:#334155;color:#fff;font-size:11px;font-weight:500;padding:3px 8px;border-radius:4px;z-index:99999;pointer-events:none;font-family:system-ui,sans-serif;white-space:nowrap;line-height:16px;opacity:0;transition:opacity 0.12s ease;box-shadow:0 2px 6px rgba(0,0,0,0.2);';\n document.body.appendChild(_hoverTooltip);\n return _hoverTooltip;\n }\n\n var _currentHoveredBlock = null;\n var _currentHoveredGroup = null;\n\n document.addEventListener('mouseover', function(e) {\n // Check if hover overlay is active\n if (!document.getElementById('sg-hover-overlay')) return;\n var el = e.target;\n var groupName = null;\n while (el && !el.dataset.blockId) {\n if (el.dataset && el.dataset.blockGroup && !groupName) {\n groupName = el.dataset.blockGroup;\n }\n el = el.parentElement;\n }\n if (el && el.dataset.blockId) {\n if (el !== _currentHoveredBlock || groupName !== _currentHoveredGroup) {\n _currentHoveredBlock = el;\n _currentHoveredGroup = groupName;\n var tt = getTooltip();\n var blockName = _blockNames[el.dataset.blockId] || el.dataset.blockId;\n tt.textContent = groupName ? (blockName + ' \\\\u203A ' + groupName) : blockName;\n tt.style.opacity = '1';\n }\n }\n }, true);\n\n document.addEventListener('mousemove', function(e) {\n if (_hoverTooltip && _hoverTooltip.style.opacity === '1') {\n _hoverTooltip.style.left = (e.clientX + 12) + 'px';\n _hoverTooltip.style.top = (e.clientY - 28) + 'px';\n }\n }, true);\n\n document.addEventListener('mouseout', function(e) {\n var el = e.target;\n while (el && !el.dataset.blockId) el = el.parentElement;\n if (el === _currentHoveredBlock) {\n var related = e.relatedTarget;\n while (related && related !== el) related = related.parentElement;\n if (!related) {\n _currentHoveredBlock = null;\n _currentHoveredGroup = null;\n if (_hoverTooltip) _hoverTooltip.style.opacity = '0';\n }\n }\n }, true);\n })();\n </script>\n `;\n html = html.replace(\"</body>\", `${clickHandler}</body>`);\n if (!html.includes(\"</body>\")) {\n html = html + clickHandler;\n }\n\n const iframe = iframeRef.current;\n\n const applyOverlayAfterLoad = () => {\n updateHighlight(selectedBlockIdRef.current || null);\n if (showSelectionOverlayRef.current) {\n updateSelectionOverlay(true);\n }\n };\n\n if (showLoading) {\n iframe.onload = () => {\n setIsLoading(false);\n previousDocRef.current = JSON.parse(JSON.stringify(doc));\n previousDocHashRef.current = hashDocument(doc);\n applyOverlayAfterLoad();\n };\n setTimeout(() => {\n setIsLoading(false);\n previousDocRef.current = JSON.parse(JSON.stringify(doc));\n previousDocHashRef.current = hashDocument(doc);\n applyOverlayAfterLoad();\n }, 1000);\n } else {\n previousDocRef.current = JSON.parse(JSON.stringify(doc));\n previousDocHashRef.current = hashDocument(doc);\n iframe.onload = () => {\n applyOverlayAfterLoad();\n };\n }\n\n iframe.srcdoc = html;\n } catch (error) {\n logger.error(\"[Preview] Error:\", error);\n if (showLoading) {\n setIsLoading(false);\n }\n }\n };\n\n // Atualizar apenas um bloco (sem reload)\n const updatePartialPreview = (blockId: string, doc: SiteDocument) => {\n if (!iframeRef.current || !page) return;\n\n try {\n const block = findBlockInPage(page, blockId);\n if (!block) {\n updateFullPreview(doc, false);\n return;\n }\n\n const blockHtml = exportBlockToHtml(block, undefined, doc.theme);\n\n requestAnimationFrame(() => {\n const iframe = iframeRef.current;\n if (!iframe) return;\n\n const iframeDoc =\n iframe.contentDocument || iframe.contentWindow?.document;\n if (!iframeDoc) return;\n\n const element = iframeDoc.querySelector(`[data-block-id=\"${blockId}\"]`);\n if (element) {\n try {\n // Remover <style> tags antigas associadas a este bloco\n const oldStyles = iframeDoc.querySelectorAll(`style[data-block-style=\"${blockId}\"]`);\n oldStyles.forEach(s => s.remove());\n\n const temp = iframeDoc.createElement(\"div\");\n temp.innerHTML = blockHtml;\n\n // Marcar e extrair <style> tags para inserção separada\n const styleTags = temp.querySelectorAll(\"style\");\n styleTags.forEach(style => {\n style.setAttribute(\"data-block-style\", blockId);\n });\n\n // Usar DocumentFragment para substituir com múltiplos elementos irmãos\n // (ex: <style>hover CSS</style><button>text</button>)\n const fragment = iframeDoc.createDocumentFragment();\n while (temp.firstChild) {\n fragment.appendChild(temp.firstChild);\n }\n\n if (fragment.childNodes.length > 0) {\n element.parentNode?.replaceChild(fragment, element);\n } else {\n element.outerHTML = blockHtml;\n }\n\n // Atualizar refs\n previousDocRef.current = JSON.parse(JSON.stringify(doc));\n previousDocHashRef.current = hashDocument(doc);\n\n // Reaplicar highlight\n updateHighlight(selectedBlockIdRef.current || null);\n } catch (error) {\n logger.error(\"[Preview] Erro ao atualizar:\", error);\n updateFullPreview(doc, false);\n }\n } else {\n updateFullPreview(doc, false);\n }\n });\n } catch (error) {\n logger.error(\"[Preview] Erro:\", error);\n updateFullPreview(doc, false);\n }\n };\n\n // Efeito para mudanças no DOCUMENTO (não no selectedBlockId)\n useEffect(() => {\n if (!page) {\n setIsLoading(false);\n return;\n }\n\n const currentDocHash = hashDocument(document);\n\n // Primeira renderização\n if (!isInitializedRef.current) {\n if (iframeRef.current) {\n isInitializedRef.current = true;\n previousPageIdRef.current = page?.id ?? null;\n updateFullPreview(document, true);\n }\n return;\n }\n\n if (!iframeRef.current) return;\n\n // Detectar troca de página (pageId mudou)\n const currentPageId = page?.id ?? null;\n if (previousPageIdRef.current !== currentPageId) {\n previousPageIdRef.current = currentPageId;\n updateFullPreview(document, false);\n return;\n }\n\n // Se hash não mudou, não há mudanças no documento\n if (previousDocHashRef.current === currentDocHash) {\n return;\n }\n\n // Detectar mudanças na página atual\n const changedBlocks = detectChangedBlocks(\n previousDocRef.current || document,\n document,\n page?.id,\n );\n\n // Se não há mudanças detectadas mas o hash mudou, forçar reload\n if (changedBlocks.length === 0) {\n logger.debug(\n \"[Preview] Hash changed but no changes detected, forcing reload\",\n );\n updateFullPreview(document, false);\n return;\n }\n\n // Mudança estrutural (bloco adicionado/removido) = reload completo\n if (\n changedBlocks.some(\n (c) =>\n c.blockId === \"__structural__\" ||\n c.changedProps?.includes(\"children\"),\n )\n ) {\n updateFullPreview(document, false);\n return;\n }\n\n // Mudança de 1 bloco (não estrutural) = atualização parcial\n if (changedBlocks.length === 1) {\n const change = changedBlocks[0];\n const changedProps = change.changedProps || [];\n\n const isStructural = changedProps.some(\n (prop) =>\n prop === \"children\" ||\n prop === \"header\" ||\n prop === \"content\" ||\n prop === \"footer\",\n );\n\n if (!isStructural) {\n updatePartialPreview(change.blockId, document);\n return;\n }\n }\n\n // Fallback: reload completo SEM loader\n updateFullPreview(document, false);\n }, [document, page]); // APENAS document e page - sem funções\n\n // Efeito SEPARADO para highlight (não recarrega o preview)\n useEffect(() => {\n if (!isInitializedRef.current) return;\n updateHighlight(selectedBlockId || null);\n }, [selectedBlockId, focusedGroup]); // eslint-disable-line react-hooks/exhaustive-deps -- updateHighlight reads focusedGroupRef\n\n // Efeito para toggle do selection overlay\n useEffect(() => {\n if (!isInitializedRef.current) return;\n updateSelectionOverlay(showSelectionOverlay);\n }, [showSelectionOverlay]); // eslint-disable-line react-hooks/exhaustive-deps -- same pattern as updateFullPreview\n\n // Listener para cliques\n useEffect(() => {\n if (!onBlockClick) return;\n\n const handleMessage = (event: MessageEvent) => {\n if (event.data?.type === \"block-click\" && event.data?.blockId) {\n onBlockClick(event.data.blockId, event.data.group || undefined);\n }\n };\n\n window.addEventListener(\"message\", handleMessage);\n return () => {\n window.removeEventListener(\"message\", handleMessage);\n };\n }, [onBlockClick]);\n\n if (!page) {\n return (\n <div className={className} style={style}>\n <div style={{ padding: \"2rem\", textAlign: \"center\", color: \"#6b7280\" }}>\n Página não encontrada\n </div>\n </div>\n );\n }\n\n return (\n <div className={className} style={{ position: \"relative\", ...style }}>\n {isLoading && (\n <div\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: \"rgba(255, 255, 255, 0.8)\",\n zIndex: 10,\n }}\n >\n <div style={{ color: \"#6b7280\" }}>Carregando preview...</div>\n </div>\n )}\n <iframe\n ref={iframeRef}\n style={{\n width: \"100%\",\n height: \"100%\",\n border: \"none\",\n backgroundColor: \"#ffffff\",\n }}\n title=\"Preview do site\"\n />\n </div>\n );\n}\n"],"names":["findBlockInPage","page","blockId","findInBlocks","blocks","block","props","found","buildBlockNameMap","map","walk","def","componentRegistry","Preview","document","pageId","className","style","onBlockClick","selectedBlockId","showSelectionOverlay","focusedGroup","iframeRef","useRef","previousDocRef","previousDocHashRef","previousPageIdRef","isInitializedRef","isLoading","setIsLoading","useState","selectedBlockIdRef","showSelectionOverlayRef","focusedGroupRef","useEffect","useMemo","p","blockNameMapRef","updateHighlight","iframeDoc","overlayEnabled","group","oldStyle","el","htmlEl","oldLabel","oldGroupStyle","oldGroupLabel","highlightStyle","selectedEl","blockName","label","groupEl","ghStyle","gLabel","sendBlockNamesToIframe","updateSelectionOverlay","enabled","existingStyle","tooltip","hoverStyle","updateFullPreview","doc","showLoading","html","exportPageToHtml","clickHandler","iframe","applyOverlayAfterLoad","hashDocument","error","logger","updatePartialPreview","blockHtml","exportBlockToHtml","element","s","temp","fragment","currentDocHash","currentPageId","changedBlocks","detectChangedBlocks","c","change","prop","handleMessage","event","jsxs","jsx"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blogPostCard.d.ts","sourceRoot":"","sources":["../../../../../src/engine/registry/blocks/sections/blogPostCard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAG9C,eAAO,MAAM,iBAAiB,EAAE,eAAe,CAAC,cAAc,CA8C7D,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { componentRegistry as e } from "../../registry.js";
|
|
2
|
+
const o = {
|
|
3
|
+
type: "blogPostCard",
|
|
4
|
+
name: "Blog Post Card",
|
|
5
|
+
description: "Card de post do blog (plugin Blog)",
|
|
6
|
+
category: "sections",
|
|
7
|
+
pluginId: "blog",
|
|
8
|
+
canHaveChildren: !1,
|
|
9
|
+
defaultProps: {
|
|
10
|
+
title: "Título do Post",
|
|
11
|
+
excerpt: "Uma breve descrição do conteúdo do post...",
|
|
12
|
+
linkText: "Ler mais",
|
|
13
|
+
linkHref: "#",
|
|
14
|
+
variant: "default",
|
|
15
|
+
showImage: !0,
|
|
16
|
+
showCategory: !0,
|
|
17
|
+
showDate: !0,
|
|
18
|
+
showAuthor: !1,
|
|
19
|
+
showReadingTime: !1
|
|
20
|
+
},
|
|
21
|
+
inspectorMeta: {
|
|
22
|
+
image: { label: "Imagem", inputType: "image-upload", group: "Conteúdo" },
|
|
23
|
+
title: { label: "Título", inputType: "text", group: "Conteúdo" },
|
|
24
|
+
excerpt: { label: "Resumo", inputType: "textarea", group: "Conteúdo" },
|
|
25
|
+
date: { label: "Data", inputType: "text", group: "Conteúdo" },
|
|
26
|
+
category: { label: "Categoria", inputType: "text", group: "Conteúdo" },
|
|
27
|
+
authorName: { label: "Autor", inputType: "text", group: "Conteúdo" },
|
|
28
|
+
authorAvatar: { label: "Avatar do Autor", inputType: "image-upload", group: "Conteúdo" },
|
|
29
|
+
readingTime: { label: "Tempo de Leitura", inputType: "text", group: "Conteúdo" },
|
|
30
|
+
linkText: { label: "Texto do Link", inputType: "text", group: "Link" },
|
|
31
|
+
linkHref: { label: "URL do Link", inputType: "text", group: "Link" },
|
|
32
|
+
variant: {
|
|
33
|
+
label: "Variante",
|
|
34
|
+
inputType: "select",
|
|
35
|
+
options: [
|
|
36
|
+
{ label: "Padrão", value: "default" },
|
|
37
|
+
{ label: "Horizontal", value: "horizontal" },
|
|
38
|
+
{ label: "Minimal", value: "minimal" }
|
|
39
|
+
],
|
|
40
|
+
group: "Aparência"
|
|
41
|
+
},
|
|
42
|
+
showImage: { label: "Mostrar Imagem", inputType: "checkbox", group: "Visibilidade" },
|
|
43
|
+
showCategory: { label: "Mostrar Categoria", inputType: "checkbox", group: "Visibilidade" },
|
|
44
|
+
showDate: { label: "Mostrar Data", inputType: "checkbox", group: "Visibilidade" },
|
|
45
|
+
showAuthor: { label: "Mostrar Autor", inputType: "checkbox", group: "Visibilidade" },
|
|
46
|
+
showReadingTime: { label: "Mostrar Tempo de Leitura", inputType: "checkbox", group: "Visibilidade" }
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
e.register(o);
|
|
50
|
+
export {
|
|
51
|
+
o as blogPostCardBlock
|
|
52
|
+
};
|
|
53
|
+
//# sourceMappingURL=blogPostCard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blogPostCard.js","sources":["../../../../../src/engine/registry/blocks/sections/blogPostCard.ts"],"sourcesContent":["import { BlockDefinition } from \"../../types\";\nimport { componentRegistry } from \"../../registry\";\n\nexport const blogPostCardBlock: BlockDefinition<\"blogPostCard\"> = {\n type: \"blogPostCard\",\n name: \"Blog Post Card\",\n description: \"Card de post do blog (plugin Blog)\",\n category: \"sections\",\n pluginId: \"blog\",\n canHaveChildren: false,\n defaultProps: {\n title: \"Título do Post\",\n excerpt: \"Uma breve descrição do conteúdo do post...\",\n linkText: \"Ler mais\",\n linkHref: \"#\",\n variant: \"default\",\n showImage: true,\n showCategory: true,\n showDate: true,\n showAuthor: false,\n showReadingTime: false,\n },\n inspectorMeta: {\n image: { label: \"Imagem\", inputType: \"image-upload\", group: \"Conteúdo\" },\n title: { label: \"Título\", inputType: \"text\", group: \"Conteúdo\" },\n excerpt: { label: \"Resumo\", inputType: \"textarea\", group: \"Conteúdo\" },\n date: { label: \"Data\", inputType: \"text\", group: \"Conteúdo\" },\n category: { label: \"Categoria\", inputType: \"text\", group: \"Conteúdo\" },\n authorName: { label: \"Autor\", inputType: \"text\", group: \"Conteúdo\" },\n authorAvatar: { label: \"Avatar do Autor\", inputType: \"image-upload\", group: \"Conteúdo\" },\n readingTime: { label: \"Tempo de Leitura\", inputType: \"text\", group: \"Conteúdo\" },\n linkText: { label: \"Texto do Link\", inputType: \"text\", group: \"Link\" },\n linkHref: { label: \"URL do Link\", inputType: \"text\", group: \"Link\" },\n variant: {\n label: \"Variante\",\n inputType: \"select\",\n options: [\n { label: \"Padrão\", value: \"default\" },\n { label: \"Horizontal\", value: \"horizontal\" },\n { label: \"Minimal\", value: \"minimal\" },\n ],\n group: \"Aparência\",\n },\n showImage: { label: \"Mostrar Imagem\", inputType: \"checkbox\", group: \"Visibilidade\" },\n showCategory: { label: \"Mostrar Categoria\", inputType: \"checkbox\", group: \"Visibilidade\" },\n showDate: { label: \"Mostrar Data\", inputType: \"checkbox\", group: \"Visibilidade\" },\n showAuthor: { label: \"Mostrar Autor\", inputType: \"checkbox\", group: \"Visibilidade\" },\n showReadingTime: { label: \"Mostrar Tempo de Leitura\", inputType: \"checkbox\", group: \"Visibilidade\" },\n },\n};\n\n// Auto-registro\ncomponentRegistry.register(blogPostCardBlock);\n"],"names":["blogPostCardBlock","componentRegistry"],"mappings":";AAGO,MAAMA,IAAqD;AAAA,EAChE,MAAM;AAAA,EACN,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAU;AAAA,EACV,UAAU;AAAA,EACV,iBAAiB;AAAA,EACjB,cAAc;AAAA,IACZ,OAAO;AAAA,IACP,SAAS;AAAA,IACT,UAAU;AAAA,IACV,UAAU;AAAA,IACV,SAAS;AAAA,IACT,WAAW;AAAA,IACX,cAAc;AAAA,IACd,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,iBAAiB;AAAA,EAAA;AAAA,EAEnB,eAAe;AAAA,IACb,OAAO,EAAE,OAAO,UAAU,WAAW,gBAAgB,OAAO,WAAA;AAAA,IAC5D,OAAO,EAAE,OAAO,UAAU,WAAW,QAAQ,OAAO,WAAA;AAAA,IACpD,SAAS,EAAE,OAAO,UAAU,WAAW,YAAY,OAAO,WAAA;AAAA,IAC1D,MAAM,EAAE,OAAO,QAAQ,WAAW,QAAQ,OAAO,WAAA;AAAA,IACjD,UAAU,EAAE,OAAO,aAAa,WAAW,QAAQ,OAAO,WAAA;AAAA,IAC1D,YAAY,EAAE,OAAO,SAAS,WAAW,QAAQ,OAAO,WAAA;AAAA,IACxD,cAAc,EAAE,OAAO,mBAAmB,WAAW,gBAAgB,OAAO,WAAA;AAAA,IAC5E,aAAa,EAAE,OAAO,oBAAoB,WAAW,QAAQ,OAAO,WAAA;AAAA,IACpE,UAAU,EAAE,OAAO,iBAAiB,WAAW,QAAQ,OAAO,OAAA;AAAA,IAC9D,UAAU,EAAE,OAAO,eAAe,WAAW,QAAQ,OAAO,OAAA;AAAA,IAC5D,SAAS;AAAA,MACP,OAAO;AAAA,MACP,WAAW;AAAA,MACX,SAAS;AAAA,QACP,EAAE,OAAO,UAAU,OAAO,UAAA;AAAA,QAC1B,EAAE,OAAO,cAAc,OAAO,aAAA;AAAA,QAC9B,EAAE,OAAO,WAAW,OAAO,UAAA;AAAA,MAAU;AAAA,MAEvC,OAAO;AAAA,IAAA;AAAA,IAET,WAAW,EAAE,OAAO,kBAAkB,WAAW,YAAY,OAAO,eAAA;AAAA,IACpE,cAAc,EAAE,OAAO,qBAAqB,WAAW,YAAY,OAAO,eAAA;AAAA,IAC1E,UAAU,EAAE,OAAO,gBAAgB,WAAW,YAAY,OAAO,eAAA;AAAA,IACjE,YAAY,EAAE,OAAO,iBAAiB,WAAW,YAAY,OAAO,eAAA;AAAA,IACpE,iBAAiB,EAAE,OAAO,4BAA4B,WAAW,YAAY,OAAO,eAAA;AAAA,EAAe;AAEvG;AAGAC,EAAkB,SAASD,CAAiB;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blogPostDetail.d.ts","sourceRoot":"","sources":["../../../../../src/engine/registry/blocks/sections/blogPostDetail.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAG9C,eAAO,MAAM,mBAAmB,EAAE,eAAe,CAAC,gBAAgB,CA0CjE,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { componentRegistry as e } from "../../registry.js";
|
|
2
|
+
const t = {
|
|
3
|
+
type: "blogPostDetail",
|
|
4
|
+
name: "Blog Post Detail",
|
|
5
|
+
description: "Conteúdo completo de um post do blog (plugin Blog)",
|
|
6
|
+
category: "sections",
|
|
7
|
+
pluginId: "blog",
|
|
8
|
+
canHaveChildren: !1,
|
|
9
|
+
defaultProps: {
|
|
10
|
+
title: "Título do Post",
|
|
11
|
+
content: "<p>Conteúdo do post...</p>",
|
|
12
|
+
showFeaturedImage: !0,
|
|
13
|
+
showAuthor: !0,
|
|
14
|
+
authorVariant: "inline",
|
|
15
|
+
showDate: !0,
|
|
16
|
+
showTags: !0,
|
|
17
|
+
showReadingTime: !0,
|
|
18
|
+
contentMaxWidth: "720px"
|
|
19
|
+
},
|
|
20
|
+
inspectorMeta: {
|
|
21
|
+
title: { label: "Título", inputType: "text", group: "Conteúdo" },
|
|
22
|
+
content: { label: "Conteúdo", inputType: "textarea", group: "Conteúdo" },
|
|
23
|
+
featuredImage: { label: "Imagem Destacada", inputType: "image-upload", group: "Mídia" },
|
|
24
|
+
date: { label: "Data", inputType: "text", group: "Metadata" },
|
|
25
|
+
category: { label: "Categoria", inputType: "text", group: "Metadata" },
|
|
26
|
+
readingTime: { label: "Tempo de Leitura", inputType: "text", group: "Metadata" },
|
|
27
|
+
showFeaturedImage: { label: "Mostrar Imagem Destacada", inputType: "checkbox", group: "Visibilidade" },
|
|
28
|
+
showAuthor: { label: "Mostrar Autor", inputType: "checkbox", group: "Autor" },
|
|
29
|
+
authorVariant: {
|
|
30
|
+
label: "Variante do Autor",
|
|
31
|
+
inputType: "select",
|
|
32
|
+
group: "Autor",
|
|
33
|
+
options: [
|
|
34
|
+
{ value: "inline", label: "Inline — Avatar + nome" },
|
|
35
|
+
{ value: "card", label: "Card — Avatar, nome e bio" },
|
|
36
|
+
{ value: "minimal", label: "Minimal — Apenas nome" }
|
|
37
|
+
]
|
|
38
|
+
},
|
|
39
|
+
showDate: { label: "Mostrar Data", inputType: "checkbox", group: "Visibilidade" },
|
|
40
|
+
showTags: { label: "Mostrar Tags", inputType: "checkbox", group: "Visibilidade" },
|
|
41
|
+
showReadingTime: { label: "Mostrar Tempo de Leitura", inputType: "checkbox", group: "Visibilidade" },
|
|
42
|
+
contentMaxWidth: { label: "Largura Máxima do Conteúdo", inputType: "text", group: "Layout" }
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
e.register(t);
|
|
46
|
+
export {
|
|
47
|
+
t as blogPostDetailBlock
|
|
48
|
+
};
|
|
49
|
+
//# sourceMappingURL=blogPostDetail.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blogPostDetail.js","sources":["../../../../../src/engine/registry/blocks/sections/blogPostDetail.ts"],"sourcesContent":["import { BlockDefinition } from \"../../types\";\nimport { componentRegistry } from \"../../registry\";\n\nexport const blogPostDetailBlock: BlockDefinition<\"blogPostDetail\"> = {\n type: \"blogPostDetail\",\n name: \"Blog Post Detail\",\n description: \"Conteúdo completo de um post do blog (plugin Blog)\",\n category: \"sections\",\n pluginId: \"blog\",\n canHaveChildren: false,\n defaultProps: {\n title: \"Título do Post\",\n content: \"<p>Conteúdo do post...</p>\",\n showFeaturedImage: true,\n showAuthor: true,\n authorVariant: \"inline\",\n showDate: true,\n showTags: true,\n showReadingTime: true,\n contentMaxWidth: \"720px\",\n },\n inspectorMeta: {\n title: { label: \"Título\", inputType: \"text\", group: \"Conteúdo\" },\n content: { label: \"Conteúdo\", inputType: \"textarea\", group: \"Conteúdo\" },\n featuredImage: { label: \"Imagem Destacada\", inputType: \"image-upload\", group: \"Mídia\" },\n date: { label: \"Data\", inputType: \"text\", group: \"Metadata\" },\n category: { label: \"Categoria\", inputType: \"text\", group: \"Metadata\" },\n readingTime: { label: \"Tempo de Leitura\", inputType: \"text\", group: \"Metadata\" },\n showFeaturedImage: { label: \"Mostrar Imagem Destacada\", inputType: \"checkbox\", group: \"Visibilidade\" },\n showAuthor: { label: \"Mostrar Autor\", inputType: \"checkbox\", group: \"Autor\" },\n authorVariant: {\n label: \"Variante do Autor\",\n inputType: \"select\",\n group: \"Autor\",\n options: [\n { value: \"inline\", label: \"Inline — Avatar + nome\" },\n { value: \"card\", label: \"Card — Avatar, nome e bio\" },\n { value: \"minimal\", label: \"Minimal — Apenas nome\" },\n ],\n },\n showDate: { label: \"Mostrar Data\", inputType: \"checkbox\", group: \"Visibilidade\" },\n showTags: { label: \"Mostrar Tags\", inputType: \"checkbox\", group: \"Visibilidade\" },\n showReadingTime: { label: \"Mostrar Tempo de Leitura\", inputType: \"checkbox\", group: \"Visibilidade\" },\n contentMaxWidth: { label: \"Largura Máxima do Conteúdo\", inputType: \"text\", group: \"Layout\" },\n },\n};\n\n// Auto-registro\ncomponentRegistry.register(blogPostDetailBlock);\n"],"names":["blogPostDetailBlock","componentRegistry"],"mappings":";AAGO,MAAMA,IAAyD;AAAA,EACpE,MAAM;AAAA,EACN,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAU;AAAA,EACV,UAAU;AAAA,EACV,iBAAiB;AAAA,EACjB,cAAc;AAAA,IACZ,OAAO;AAAA,IACP,SAAS;AAAA,IACT,mBAAmB;AAAA,IACnB,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,UAAU;AAAA,IACV,UAAU;AAAA,IACV,iBAAiB;AAAA,IACjB,iBAAiB;AAAA,EAAA;AAAA,EAEnB,eAAe;AAAA,IACb,OAAO,EAAE,OAAO,UAAU,WAAW,QAAQ,OAAO,WAAA;AAAA,IACpD,SAAS,EAAE,OAAO,YAAY,WAAW,YAAY,OAAO,WAAA;AAAA,IAC5D,eAAe,EAAE,OAAO,oBAAoB,WAAW,gBAAgB,OAAO,QAAA;AAAA,IAC9E,MAAM,EAAE,OAAO,QAAQ,WAAW,QAAQ,OAAO,WAAA;AAAA,IACjD,UAAU,EAAE,OAAO,aAAa,WAAW,QAAQ,OAAO,WAAA;AAAA,IAC1D,aAAa,EAAE,OAAO,oBAAoB,WAAW,QAAQ,OAAO,WAAA;AAAA,IACpE,mBAAmB,EAAE,OAAO,4BAA4B,WAAW,YAAY,OAAO,eAAA;AAAA,IACtF,YAAY,EAAE,OAAO,iBAAiB,WAAW,YAAY,OAAO,QAAA;AAAA,IACpE,eAAe;AAAA,MACb,OAAO;AAAA,MACP,WAAW;AAAA,MACX,OAAO;AAAA,MACP,SAAS;AAAA,QACP,EAAE,OAAO,UAAU,OAAO,yBAAA;AAAA,QAC1B,EAAE,OAAO,QAAQ,OAAO,4BAAA;AAAA,QACxB,EAAE,OAAO,WAAW,OAAO,wBAAA;AAAA,MAAwB;AAAA,IACrD;AAAA,IAEF,UAAU,EAAE,OAAO,gBAAgB,WAAW,YAAY,OAAO,eAAA;AAAA,IACjE,UAAU,EAAE,OAAO,gBAAgB,WAAW,YAAY,OAAO,eAAA;AAAA,IACjE,iBAAiB,EAAE,OAAO,4BAA4B,WAAW,YAAY,OAAO,eAAA;AAAA,IACpF,iBAAiB,EAAE,OAAO,8BAA8B,WAAW,QAAQ,OAAO,SAAA;AAAA,EAAS;AAE/F;AAGAC,EAAkB,SAASD,CAAmB;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blogPostGrid.d.ts","sourceRoot":"","sources":["../../../../../src/engine/registry/blocks/sections/blogPostGrid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAqC9C,eAAO,MAAM,iBAAiB,EAAE,eAAe,CAAC,cAAc,CAsD7D,CAAC"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { componentRegistry as e } from "../../registry.js";
|
|
2
|
+
const o = [
|
|
3
|
+
{
|
|
4
|
+
title: "Bem-vindo ao nosso blog!",
|
|
5
|
+
excerpt: "Estamos animados em lançar nosso blog oficial. Acompanhe novidades e dicas.",
|
|
6
|
+
image: "https://images.unsplash.com/photo-1499750310107-5fef28a66643?w=800&h=400&fit=crop",
|
|
7
|
+
category: "Novidades",
|
|
8
|
+
date: "15 Jan 2025",
|
|
9
|
+
linkHref: "/blog/bem-vindo",
|
|
10
|
+
linkText: "Ler mais"
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
title: "5 Dicas para Estudantes de Sucesso",
|
|
14
|
+
excerpt: "Confira as melhores práticas para melhorar seus estudos e alcançar seus objetivos.",
|
|
15
|
+
image: "https://images.unsplash.com/photo-1523050854058-8df90110c9f1?w=800&h=400&fit=crop",
|
|
16
|
+
category: "Educação",
|
|
17
|
+
date: "20 Jan 2025",
|
|
18
|
+
linkHref: "/blog/dicas-estudantes",
|
|
19
|
+
linkText: "Ler mais"
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
title: "Novidades para o Próximo Semestre",
|
|
23
|
+
excerpt: "Novos cursos, eventos e melhorias que estão chegando. Saiba tudo sobre o que vem por aí.",
|
|
24
|
+
image: "https://images.unsplash.com/photo-1524178232363-1fb2b075b655?w=800&h=400&fit=crop",
|
|
25
|
+
category: "Institucional",
|
|
26
|
+
date: "01 Fev 2025",
|
|
27
|
+
linkHref: "/blog/novidades-semestre",
|
|
28
|
+
linkText: "Ler mais"
|
|
29
|
+
}
|
|
30
|
+
], a = {
|
|
31
|
+
type: "blogPostGrid",
|
|
32
|
+
name: "Blog Post Grid",
|
|
33
|
+
description: "Grid de posts do blog com suporte a dados dinâmicos (plugin Blog)",
|
|
34
|
+
category: "sections",
|
|
35
|
+
pluginId: "blog",
|
|
36
|
+
canHaveChildren: !1,
|
|
37
|
+
defaultProps: {
|
|
38
|
+
title: "Blog",
|
|
39
|
+
subtitle: "Últimas publicações",
|
|
40
|
+
columns: 3,
|
|
41
|
+
cards: o,
|
|
42
|
+
variant: "default",
|
|
43
|
+
showViewAll: !1,
|
|
44
|
+
viewAllText: "Ver todos",
|
|
45
|
+
viewAllHref: "/blog"
|
|
46
|
+
},
|
|
47
|
+
inspectorMeta: {
|
|
48
|
+
title: { label: "Título", inputType: "text", group: "Cabeçalho" },
|
|
49
|
+
subtitle: { label: "Subtítulo", inputType: "text", group: "Cabeçalho" },
|
|
50
|
+
columns: {
|
|
51
|
+
label: "Colunas",
|
|
52
|
+
inputType: "select",
|
|
53
|
+
options: [
|
|
54
|
+
{ label: "2", value: 2 },
|
|
55
|
+
{ label: "3", value: 3 },
|
|
56
|
+
{ label: "4", value: 4 }
|
|
57
|
+
],
|
|
58
|
+
group: "Layout"
|
|
59
|
+
},
|
|
60
|
+
variant: {
|
|
61
|
+
label: "Variante",
|
|
62
|
+
inputType: "select",
|
|
63
|
+
options: [
|
|
64
|
+
{ label: "Padrão", value: "default" },
|
|
65
|
+
{ label: "Destaque", value: "featured" },
|
|
66
|
+
{ label: "Minimal", value: "minimal" }
|
|
67
|
+
],
|
|
68
|
+
group: "Aparência"
|
|
69
|
+
},
|
|
70
|
+
showViewAll: { label: "Mostrar 'Ver Todos'", inputType: "checkbox", group: "Rodapé" },
|
|
71
|
+
viewAllText: {
|
|
72
|
+
label: "Texto do Link",
|
|
73
|
+
inputType: "text",
|
|
74
|
+
group: "Rodapé",
|
|
75
|
+
showWhen: { field: "showViewAll", equals: !0 }
|
|
76
|
+
},
|
|
77
|
+
viewAllHref: {
|
|
78
|
+
label: "URL do Link",
|
|
79
|
+
inputType: "text",
|
|
80
|
+
group: "Rodapé",
|
|
81
|
+
showWhen: { field: "showViewAll", equals: !0 }
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
e.register(a);
|
|
86
|
+
export {
|
|
87
|
+
a as blogPostGridBlock
|
|
88
|
+
};
|
|
89
|
+
//# sourceMappingURL=blogPostGrid.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blogPostGrid.js","sources":["../../../../../src/engine/registry/blocks/sections/blogPostGrid.ts"],"sourcesContent":["import { BlockDefinition } from \"../../types\";\nimport { componentRegistry } from \"../../registry\";\n\n/**\n * Sample cards for editor preview.\n * In production, these are replaced by ContentProvider data.\n */\nconst sampleCards = [\n {\n title: \"Bem-vindo ao nosso blog!\",\n excerpt: \"Estamos animados em lançar nosso blog oficial. Acompanhe novidades e dicas.\",\n image: \"https://images.unsplash.com/photo-1499750310107-5fef28a66643?w=800&h=400&fit=crop\",\n category: \"Novidades\",\n date: \"15 Jan 2025\",\n linkHref: \"/blog/bem-vindo\",\n linkText: \"Ler mais\",\n },\n {\n title: \"5 Dicas para Estudantes de Sucesso\",\n excerpt: \"Confira as melhores práticas para melhorar seus estudos e alcançar seus objetivos.\",\n image: \"https://images.unsplash.com/photo-1523050854058-8df90110c9f1?w=800&h=400&fit=crop\",\n category: \"Educação\",\n date: \"20 Jan 2025\",\n linkHref: \"/blog/dicas-estudantes\",\n linkText: \"Ler mais\",\n },\n {\n title: \"Novidades para o Próximo Semestre\",\n excerpt: \"Novos cursos, eventos e melhorias que estão chegando. Saiba tudo sobre o que vem por aí.\",\n image: \"https://images.unsplash.com/photo-1524178232363-1fb2b075b655?w=800&h=400&fit=crop\",\n category: \"Institucional\",\n date: \"01 Fev 2025\",\n linkHref: \"/blog/novidades-semestre\",\n linkText: \"Ler mais\",\n },\n];\n\nexport const blogPostGridBlock: BlockDefinition<\"blogPostGrid\"> = {\n type: \"blogPostGrid\",\n name: \"Blog Post Grid\",\n description: \"Grid de posts do blog com suporte a dados dinâmicos (plugin Blog)\",\n category: \"sections\",\n pluginId: \"blog\",\n canHaveChildren: false,\n defaultProps: {\n title: \"Blog\",\n subtitle: \"Últimas publicações\",\n columns: 3,\n cards: sampleCards,\n variant: \"default\",\n showViewAll: false,\n viewAllText: \"Ver todos\",\n viewAllHref: \"/blog\",\n },\n inspectorMeta: {\n title: { label: \"Título\", inputType: \"text\", group: \"Cabeçalho\" },\n subtitle: { label: \"Subtítulo\", inputType: \"text\", group: \"Cabeçalho\" },\n columns: {\n label: \"Colunas\",\n inputType: \"select\",\n options: [\n { label: \"2\", value: 2 },\n { label: \"3\", value: 3 },\n { label: \"4\", value: 4 },\n ],\n group: \"Layout\",\n },\n variant: {\n label: \"Variante\",\n inputType: \"select\",\n options: [\n { label: \"Padrão\", value: \"default\" },\n { label: \"Destaque\", value: \"featured\" },\n { label: \"Minimal\", value: \"minimal\" },\n ],\n group: \"Aparência\",\n },\n showViewAll: { label: \"Mostrar 'Ver Todos'\", inputType: \"checkbox\", group: \"Rodapé\" },\n viewAllText: {\n label: \"Texto do Link\",\n inputType: \"text\",\n group: \"Rodapé\",\n showWhen: { field: \"showViewAll\", equals: true },\n },\n viewAllHref: {\n label: \"URL do Link\",\n inputType: \"text\",\n group: \"Rodapé\",\n showWhen: { field: \"showViewAll\", equals: true },\n },\n },\n};\n\n// Auto-registro\ncomponentRegistry.register(blogPostGridBlock);\n"],"names":["sampleCards","blogPostGridBlock","componentRegistry"],"mappings":";AAOA,MAAMA,IAAc;AAAA,EAClB;AAAA,IACE,OAAO;AAAA,IACP,SAAS;AAAA,IACT,OAAO;AAAA,IACP,UAAU;AAAA,IACV,MAAM;AAAA,IACN,UAAU;AAAA,IACV,UAAU;AAAA,EAAA;AAAA,EAEZ;AAAA,IACE,OAAO;AAAA,IACP,SAAS;AAAA,IACT,OAAO;AAAA,IACP,UAAU;AAAA,IACV,MAAM;AAAA,IACN,UAAU;AAAA,IACV,UAAU;AAAA,EAAA;AAAA,EAEZ;AAAA,IACE,OAAO;AAAA,IACP,SAAS;AAAA,IACT,OAAO;AAAA,IACP,UAAU;AAAA,IACV,MAAM;AAAA,IACN,UAAU;AAAA,IACV,UAAU;AAAA,EAAA;AAEd,GAEaC,IAAqD;AAAA,EAChE,MAAM;AAAA,EACN,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAU;AAAA,EACV,UAAU;AAAA,EACV,iBAAiB;AAAA,EACjB,cAAc;AAAA,IACZ,OAAO;AAAA,IACP,UAAU;AAAA,IACV,SAAS;AAAA,IACT,OAAOD;AAAA,IACP,SAAS;AAAA,IACT,aAAa;AAAA,IACb,aAAa;AAAA,IACb,aAAa;AAAA,EAAA;AAAA,EAEf,eAAe;AAAA,IACb,OAAO,EAAE,OAAO,UAAU,WAAW,QAAQ,OAAO,YAAA;AAAA,IACpD,UAAU,EAAE,OAAO,aAAa,WAAW,QAAQ,OAAO,YAAA;AAAA,IAC1D,SAAS;AAAA,MACP,OAAO;AAAA,MACP,WAAW;AAAA,MACX,SAAS;AAAA,QACP,EAAE,OAAO,KAAK,OAAO,EAAA;AAAA,QACrB,EAAE,OAAO,KAAK,OAAO,EAAA;AAAA,QACrB,EAAE,OAAO,KAAK,OAAO,EAAA;AAAA,MAAE;AAAA,MAEzB,OAAO;AAAA,IAAA;AAAA,IAET,SAAS;AAAA,MACP,OAAO;AAAA,MACP,WAAW;AAAA,MACX,SAAS;AAAA,QACP,EAAE,OAAO,UAAU,OAAO,UAAA;AAAA,QAC1B,EAAE,OAAO,YAAY,OAAO,WAAA;AAAA,QAC5B,EAAE,OAAO,WAAW,OAAO,UAAA;AAAA,MAAU;AAAA,MAEvC,OAAO;AAAA,IAAA;AAAA,IAET,aAAa,EAAE,OAAO,uBAAuB,WAAW,YAAY,OAAO,SAAA;AAAA,IAC3E,aAAa;AAAA,MACX,OAAO;AAAA,MACP,WAAW;AAAA,MACX,OAAO;AAAA,MACP,UAAU,EAAE,OAAO,eAAe,QAAQ,GAAA;AAAA,IAAK;AAAA,IAEjD,aAAa;AAAA,MACX,OAAO;AAAA,MACP,WAAW;AAAA,MACX,OAAO;AAAA,MACP,UAAU,EAAE,OAAO,eAAe,QAAQ,GAAA;AAAA,IAAK;AAAA,EACjD;AAEJ;AAGAE,EAAkB,SAASD,CAAiB;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hero.d.ts","sourceRoot":"","sources":["../../../../../src/engine/registry/blocks/sections/hero.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAI9C;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8BrB,CAAC;AAEX,eAAO,MAAM,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"hero.d.ts","sourceRoot":"","sources":["../../../../../src/engine/registry/blocks/sections/hero.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAI9C;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8BrB,CAAC;AAEX,eAAO,MAAM,SAAS,EAAE,eAkZvB,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { componentRegistry as
|
|
2
|
-
import { heroVariationIds as
|
|
3
|
-
const
|
|
1
|
+
import { componentRegistry as l } from "../../registry.js";
|
|
2
|
+
import { heroVariationIds as t, heroVariations as r } from "../../../presets/heroVariations.js";
|
|
3
|
+
const i = {
|
|
4
4
|
variant: "centered",
|
|
5
5
|
title: "Bem-vindo ao Nosso Site",
|
|
6
6
|
subtitle: "Subtítulo incrível aqui",
|
|
@@ -36,10 +36,10 @@ const r = {
|
|
|
36
36
|
description: "Seção hero completa com múltiplas variações",
|
|
37
37
|
category: "sections",
|
|
38
38
|
canHaveChildren: !1,
|
|
39
|
-
defaultProps:
|
|
40
|
-
variations:
|
|
39
|
+
defaultProps: i,
|
|
40
|
+
variations: t.reduce(
|
|
41
41
|
(o, a) => {
|
|
42
|
-
const e =
|
|
42
|
+
const e = r[a];
|
|
43
43
|
return o[a] = { id: e.id, name: e.name, defaultProps: e.defaultProps }, o;
|
|
44
44
|
},
|
|
45
45
|
{}
|
|
@@ -90,7 +90,8 @@ const r = {
|
|
|
90
90
|
label: "Imagem",
|
|
91
91
|
inputType: "image-upload",
|
|
92
92
|
group: "Mídia",
|
|
93
|
-
description: "Imagem de fundo ou lateral"
|
|
93
|
+
description: "Imagem de fundo ou lateral",
|
|
94
|
+
showWhen: { field: "imageGridEnabled", notEquals: !0 }
|
|
94
95
|
},
|
|
95
96
|
imagePosition: {
|
|
96
97
|
label: "Inverter Layout",
|
|
@@ -100,7 +101,13 @@ const r = {
|
|
|
100
101
|
{ label: "Imagem à Esquerda / Conteúdo à Direita", value: "left" }
|
|
101
102
|
],
|
|
102
103
|
group: "Layout",
|
|
103
|
-
description: "Inverte a posição do conteúdo e da imagem
|
|
104
|
+
description: "Inverte a posição do conteúdo e da imagem",
|
|
105
|
+
showWhen: {
|
|
106
|
+
or: [
|
|
107
|
+
{ field: "image", truthy: !0 },
|
|
108
|
+
{ field: "imageGridEnabled", equals: !0 }
|
|
109
|
+
]
|
|
110
|
+
}
|
|
104
111
|
},
|
|
105
112
|
imageRadius: {
|
|
106
113
|
label: "Cantos da Imagem",
|
|
@@ -108,7 +115,13 @@ const r = {
|
|
|
108
115
|
min: 0,
|
|
109
116
|
max: 32,
|
|
110
117
|
step: 2,
|
|
111
|
-
group: "Mídia"
|
|
118
|
+
group: "Mídia",
|
|
119
|
+
showWhen: {
|
|
120
|
+
and: [
|
|
121
|
+
{ field: "image", truthy: !0 },
|
|
122
|
+
{ field: "imageGridEnabled", notEquals: !0 }
|
|
123
|
+
]
|
|
124
|
+
}
|
|
112
125
|
},
|
|
113
126
|
imageShadow: {
|
|
114
127
|
label: "Sombra da Imagem",
|
|
@@ -120,7 +133,13 @@ const r = {
|
|
|
120
133
|
{ label: "Grande", value: "lg" },
|
|
121
134
|
{ label: "Extra Grande", value: "xl" }
|
|
122
135
|
],
|
|
123
|
-
group: "Mídia"
|
|
136
|
+
group: "Mídia",
|
|
137
|
+
showWhen: {
|
|
138
|
+
and: [
|
|
139
|
+
{ field: "image", truthy: !0 },
|
|
140
|
+
{ field: "imageGridEnabled", notEquals: !0 }
|
|
141
|
+
]
|
|
142
|
+
}
|
|
124
143
|
},
|
|
125
144
|
// =========================================================================
|
|
126
145
|
// GRUPO: Grid de Imagens
|
|
@@ -129,7 +148,7 @@ const r = {
|
|
|
129
148
|
label: "Usar Grid de Imagens",
|
|
130
149
|
inputType: "checkbox",
|
|
131
150
|
group: "Grid de Imagens",
|
|
132
|
-
description: "Substituir imagem única por grid de até 4 imagens
|
|
151
|
+
description: "Substituir imagem única por grid de até 4 imagens"
|
|
133
152
|
},
|
|
134
153
|
imageGridConfig: {
|
|
135
154
|
label: "Configuração da Grid",
|
|
@@ -182,7 +201,13 @@ const r = {
|
|
|
182
201
|
{ label: "X. Largo", value: "x-wide" }
|
|
183
202
|
],
|
|
184
203
|
group: "Layout",
|
|
185
|
-
description: "Distância entre o bloco de conteúdo e a
|
|
204
|
+
description: "Distância entre o bloco de conteúdo e a mídia",
|
|
205
|
+
showWhen: {
|
|
206
|
+
or: [
|
|
207
|
+
{ field: "image", truthy: !0 },
|
|
208
|
+
{ field: "imageGridEnabled", equals: !0 }
|
|
209
|
+
]
|
|
210
|
+
}
|
|
186
211
|
},
|
|
187
212
|
minHeight: {
|
|
188
213
|
label: "Altura",
|
|
@@ -364,12 +389,40 @@ const r = {
|
|
|
364
389
|
inputType: "icon-grid",
|
|
365
390
|
group: "Efeitos Hover",
|
|
366
391
|
showWhen: { field: "buttonHoverOverlay", equals: "icon" }
|
|
392
|
+
},
|
|
393
|
+
// =========================================================================
|
|
394
|
+
// GRUPO: Carrossel
|
|
395
|
+
// =========================================================================
|
|
396
|
+
carouselImages: {
|
|
397
|
+
label: "Imagens do Carrossel",
|
|
398
|
+
inputType: "carousel-images",
|
|
399
|
+
group: "Carrossel",
|
|
400
|
+
description: "Imagens de fundo que alternam automaticamente",
|
|
401
|
+
showWhen: { field: "variation", equals: "hero-carousel" }
|
|
402
|
+
},
|
|
403
|
+
carouselInterval: {
|
|
404
|
+
label: "Intervalo (segundos)",
|
|
405
|
+
inputType: "slider",
|
|
406
|
+
min: 3,
|
|
407
|
+
max: 10,
|
|
408
|
+
step: 1,
|
|
409
|
+
group: "Carrossel",
|
|
410
|
+
showWhen: { field: "variation", equals: "hero-carousel" }
|
|
411
|
+
},
|
|
412
|
+
carouselTransition: {
|
|
413
|
+
label: "Transição",
|
|
414
|
+
inputType: "select",
|
|
415
|
+
options: [
|
|
416
|
+
{ label: "Crossfade", value: "crossfade" }
|
|
417
|
+
],
|
|
418
|
+
group: "Carrossel",
|
|
419
|
+
showWhen: { field: "variation", equals: "hero-carousel" }
|
|
367
420
|
}
|
|
368
421
|
}
|
|
369
422
|
};
|
|
370
|
-
|
|
423
|
+
l.register(n);
|
|
371
424
|
export {
|
|
372
|
-
|
|
425
|
+
i as HERO_DEFAULT_PROPS,
|
|
373
426
|
n as heroBlock
|
|
374
427
|
};
|
|
375
428
|
//# sourceMappingURL=hero.js.map
|