@brunoalz/smartgesti-site-editor 0.2.2 → 1.1.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 +2 -1
- package/dist/editor/BlockSelector.d.ts.map +1 -1
- package/dist/editor/BlockSelector.js +55 -64
- package/dist/editor/BlockSelector.js.map +1 -1
- package/dist/editor/LandingPageEditor.d.ts +19 -0
- package/dist/editor/LandingPageEditor.d.ts.map +1 -0
- package/dist/editor/LandingPageEditor.js +239 -0
- package/dist/editor/LandingPageEditor.js.map +1 -0
- 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 +5 -3
- package/dist/editor/PropertyEditor/BlockPropertyEditor.d.ts.map +1 -1
- package/dist/editor/PropertyEditor/BlockPropertyEditor.js +60 -113
- package/dist/editor/PropertyEditor/BlockPropertyEditor.js.map +1 -1
- package/dist/editor/PropertyEditor/CollapsiblePropertyGroup.d.ts +3 -1
- 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/PropertyGroup.d.ts +1 -1
- package/dist/editor/PropertyEditor/PropertyGroup.d.ts.map +1 -1
- package/dist/editor/PropertyEditor/VariationSelector.d.ts +2 -1
- package/dist/editor/PropertyEditor/VariationSelector.d.ts.map +1 -1
- package/dist/editor/PropertyEditor/VariationSelector.js +35 -31
- package/dist/editor/PropertyEditor/VariationSelector.js.map +1 -1
- package/dist/editor/PropertyEditor/index.js +30 -28
- 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 +1 -1
- 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/ImageInput.d.ts.map +1 -0
- package/dist/{components → editor/PropertyEditor}/inputs/ImageInput.js +41 -39
- package/dist/editor/PropertyEditor/inputs/ImageInput.js.map +1 -0
- package/dist/editor/PropertyEditor/inputs/TypographyInput.js +41 -44
- package/dist/editor/PropertyEditor/inputs/TypographyInput.js.map +1 -1
- package/dist/editor/PropertyEditor/inputs/index.d.ts +2 -0
- package/dist/editor/PropertyEditor/inputs/index.d.ts.map +1 -1
- package/dist/editor/PropertyEditor/renderPropertyInput.d.ts +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 +13 -4
- package/dist/editor/components/CenterPanel.d.ts.map +1 -1
- package/dist/editor/components/CenterPanel.js +40 -31
- package/dist/editor/components/CenterPanel.js.map +1 -1
- package/dist/editor/components/LeftPanel.d.ts +2 -1
- package/dist/editor/components/LeftPanel.d.ts.map +1 -1
- package/dist/editor/components/LeftPanel.js +13 -12
- package/dist/editor/components/LeftPanel.js.map +1 -1
- package/dist/editor/components/LoadingSpinner.d.ts.map +1 -0
- package/dist/editor/components/LoadingSpinner.js.map +1 -0
- package/dist/editor/components/RightPanel.d.ts +8 -2
- package/dist/editor/components/RightPanel.d.ts.map +1 -1
- package/dist/editor/components/RightPanel.js +24 -19
- package/dist/editor/components/RightPanel.js.map +1 -1
- package/dist/editor/components/Toolbar.d.ts +5 -1
- package/dist/editor/components/Toolbar.d.ts.map +1 -1
- package/dist/editor/components/Toolbar.js +56 -40
- package/dist/editor/components/Toolbar.js.map +1 -1
- package/dist/engine/export/exportHtml.d.ts +10 -5
- package/dist/engine/export/exportHtml.d.ts.map +1 -1
- package/dist/engine/export/exportHtml.js +38 -40
- package/dist/engine/export/exportHtml.js.map +1 -1
- package/dist/engine/export/exporters/content/HeadingExporter.d.ts.map +1 -1
- package/dist/engine/export/exporters/content/HeadingExporter.js +6 -6
- package/dist/engine/export/exporters/content/HeadingExporter.js.map +1 -1
- package/dist/engine/export/exporters/content/LinkExporter.d.ts.map +1 -1
- package/dist/engine/export/exporters/content/LinkExporter.js +6 -6
- package/dist/engine/export/exporters/content/LinkExporter.js.map +1 -1
- package/dist/engine/export/exporters/content/TextExporter.d.ts.map +1 -1
- package/dist/engine/export/exporters/content/TextExporter.js +7 -7
- package/dist/engine/export/exporters/content/TextExporter.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.d.ts.map +1 -1
- package/dist/engine/export/exporters/sections/FooterExporter.js +33 -40
- 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 -218
- 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/export/sanitizeHtml.d.ts.map +1 -1
- package/dist/engine/export/sanitizeHtml.js +65 -18
- package/dist/engine/export/sanitizeHtml.js.map +1 -1
- package/dist/engine/export/styleResolver.d.ts.map +1 -1
- package/dist/engine/export/styleResolver.js +33 -33
- package/dist/engine/export/styleResolver.js.map +1 -1
- package/dist/engine/generators/generateLandingPage.d.ts +4 -4
- package/dist/engine/generators/generateLandingPage.d.ts.map +1 -1
- package/dist/engine/generators/generateLandingPage.js.map +1 -1
- package/dist/engine/index.d.ts +6 -3
- package/dist/engine/index.d.ts.map +1 -1
- package/dist/engine/index.js +99 -89
- package/dist/engine/index.js.map +1 -1
- package/dist/engine/patch/PatchBuilder.d.ts +11 -11
- package/dist/engine/patch/PatchBuilder.d.ts.map +1 -1
- package/dist/engine/patch/PatchBuilder.js +92 -93
- package/dist/engine/patch/PatchBuilder.js.map +1 -1
- package/dist/engine/patch/applyPatch.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 +19 -0
- package/dist/engine/preview/Preview.d.ts.map +1 -0
- package/dist/engine/preview/Preview.js +418 -0
- package/dist/engine/preview/Preview.js.map +1 -0
- 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 +39 -36
- package/dist/engine/registry/registry.js.map +1 -1
- package/dist/engine/registry/types.d.ts +17 -13
- package/dist/engine/registry/types.d.ts.map +1 -1
- package/dist/engine/render/renderNodeImpl.js +85 -85
- package/dist/engine/render/renderNodeImpl.js.map +1 -1
- package/dist/engine/render/renderPage.d.ts +3 -3
- package/dist/engine/render/renderPage.d.ts.map +1 -1
- package/dist/engine/render/renderPage.js.map +1 -1
- package/dist/engine/render/renderers/composition/CardRenderer.js +4 -4
- package/dist/engine/render/renderers/content/LinkRenderer.d.ts.map +1 -1
- package/dist/engine/render/renderers/content/LinkRenderer.js +41 -16
- package/dist/engine/render/renderers/content/LinkRenderer.js.map +1 -1
- package/dist/engine/render/renderers/content/SocialLinksRenderer.d.ts.map +1 -1
- package/dist/engine/render/renderers/content/SocialLinksRenderer.js +16 -23
- package/dist/engine/render/renderers/content/SocialLinksRenderer.js.map +1 -1
- package/dist/engine/render/renderers/forms/FormRenderer.js +6 -6
- package/dist/engine/render/renderers/layout/GridRenderer.js +3 -3
- 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 +25 -30
- 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 +293 -229
- 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 +118 -7
- package/dist/engine/schema/siteDocument.d.ts.map +1 -1
- package/dist/engine/schema/siteDocument.js +1 -1
- package/dist/engine/schema/siteDocument.js.map +1 -1
- package/dist/engine/schema/themeTokens.d.ts +1 -1
- package/dist/engine/schema/themeTokens.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/presets.js +4 -12
- package/dist/engine/shared/imageGrid/presets.js.map +1 -1
- 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/layoutConstants.d.ts +13 -0
- package/dist/engine/shared/layoutConstants.d.ts.map +1 -0
- package/dist/engine/shared/layoutConstants.js +14 -0
- package/dist/engine/shared/layoutConstants.js.map +1 -0
- package/dist/engine/shared/shadowConstants.d.ts +5 -0
- package/dist/engine/shared/shadowConstants.d.ts.map +1 -0
- package/dist/engine/shared/shadowConstants.js +11 -0
- package/dist/engine/shared/shadowConstants.js.map +1 -0
- 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/engine/shared/socialIcons.d.ts +6 -0
- package/dist/engine/shared/socialIcons.d.ts.map +1 -0
- package/dist/engine/shared/socialIcons.js +13 -0
- package/dist/engine/shared/socialIcons.js.map +1 -0
- package/dist/engine/shared/typeGuards.d.ts +11 -0
- package/dist/engine/shared/typeGuards.d.ts.map +1 -0
- package/dist/hooks/useEditorState.d.ts +8 -5
- package/dist/hooks/useEditorState.d.ts.map +1 -1
- package/dist/hooks/useEditorState.js +150 -194
- package/dist/hooks/useEditorState.js.map +1 -1
- package/dist/hooks/useNavbarAutoSync.d.ts +2 -2
- package/dist/hooks/useNavbarAutoSync.d.ts.map +1 -1
- package/dist/hooks/useNavbarAutoSync.js.map +1 -1
- package/dist/index.d.ts +60 -14
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +109 -124
- package/dist/index.js.map +1 -1
- package/dist/shared/index.d.ts +2 -2
- package/dist/shared/index.d.ts.map +1 -1
- package/dist/shared/schema.d.ts +4 -4
- package/dist/shared/schema.d.ts.map +1 -1
- package/dist/shared/schema.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/escola-edvi.d.ts +2 -2
- package/dist/shared/templates/escola-edvi.d.ts.map +1 -1
- package/dist/shared/templates/escola-edvi.js.map +1 -1
- package/dist/shared/templates/escola-premium.d.ts +2 -2
- package/dist/shared/templates/escola-premium.d.ts.map +1 -1
- package/dist/shared/templates/escola-premium.js.map +1 -1
- package/dist/shared/templates/escola-zilom.d.ts +2 -2
- package/dist/shared/templates/escola-zilom.d.ts.map +1 -1
- package/dist/shared/templates/escola-zilom.js.map +1 -1
- package/dist/shared/templates/index.d.ts +7 -5
- 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/shared/validators.d.ts +3 -3
- package/dist/shared/validators.d.ts.map +1 -1
- package/dist/shared/validators.js.map +1 -1
- package/dist/site/BlockRenderer.d.ts +1 -1
- package/dist/site/BlockRenderer.d.ts.map +1 -1
- package/dist/site/BlockRenderer.js +22 -26
- package/dist/site/BlockRenderer.js.map +1 -1
- package/dist/site/blocks/Button.js +15 -17
- package/dist/site/blocks/Button.js.map +1 -1
- package/dist/site/blocks/Card.js +13 -15
- package/dist/site/blocks/Card.js.map +1 -1
- package/dist/site/blocks/Features.js +15 -17
- package/dist/site/blocks/Features.js.map +1 -1
- package/dist/site/blocks/Footer.js +10 -12
- package/dist/site/blocks/Footer.js.map +1 -1
- package/dist/site/blocks/Hero.js +12 -14
- package/dist/site/blocks/Hero.js.map +1 -1
- package/dist/site/blocks/Navbar.js +13 -15
- package/dist/site/blocks/Navbar.js.map +1 -1
- package/dist/site/blocks/Section.js +9 -11
- package/dist/site/blocks/Section.js.map +1 -1
- package/dist/site/blocks/SectionHeader.js +9 -11
- package/dist/site/blocks/SectionHeader.js.map +1 -1
- package/dist/site/blocks/SiteRoot.js +9 -12
- package/dist/site/blocks/SiteRoot.js.map +1 -1
- package/dist/site/index.js +73 -73
- package/dist/styles/site/sections.css.d.ts +1 -1
- package/dist/utils/blockUtils.d.ts +2 -2
- package/dist/utils/blockUtils.d.ts.map +1 -1
- package/dist/utils/blockUtils.js.map +1 -1
- package/dist/utils/changeDetector.d.ts +3 -2
- 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/cn.js +2 -2
- package/dist/utils/dataURLUtils.d.ts +24 -0
- package/dist/utils/dataURLUtils.d.ts.map +1 -0
- package/dist/utils/dataURLUtils.js +47 -0
- package/dist/utils/dataURLUtils.js.map +1 -0
- package/dist/utils/documentHash.d.ts +2 -2
- package/dist/utils/documentHash.d.ts.map +1 -1
- package/dist/utils/documentHash.js +8 -7
- package/dist/utils/documentHash.js.map +1 -1
- package/dist/utils/logger.d.ts +13 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +13 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/navbarSync.d.ts +3 -3
- package/dist/utils/navbarSync.d.ts.map +1 -1
- package/dist/utils/navbarSync.js +25 -24
- package/dist/utils/navbarSync.js.map +1 -1
- package/dist/utils/sharedTemplateToEngine.d.ts +7 -8
- 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 +32 -0
- package/dist/viewer/LandingPageViewer.d.ts.map +1 -0
- package/dist/viewer/LandingPageViewer.js +300 -0
- package/dist/viewer/LandingPageViewer.js.map +1 -0
- package/package.json +10 -5
- package/dist/components/ComponentPalette/definitions.d.ts +0 -3
- package/dist/components/ComponentPalette/definitions.d.ts.map +0 -1
- package/dist/components/ComponentPalette/definitions.js +0 -206
- package/dist/components/ComponentPalette/definitions.js.map +0 -1
- package/dist/components/ComponentPalette/index.d.ts +0 -7
- package/dist/components/ComponentPalette/index.d.ts.map +0 -1
- package/dist/components/ComponentPalette/index.js +0 -86
- package/dist/components/ComponentPalette/index.js.map +0 -1
- package/dist/components/LoadingSpinner.d.ts.map +0 -1
- package/dist/components/LoadingSpinner.js.map +0 -1
- package/dist/components/PreviewPanel/index.d.ts +0 -12
- package/dist/components/PreviewPanel/index.d.ts.map +0 -1
- package/dist/components/PreviewPanel/index.js +0 -140
- package/dist/components/PreviewPanel/index.js.map +0 -1
- package/dist/components/PropertyPanel/index.d.ts +0 -8
- package/dist/components/PropertyPanel/index.d.ts.map +0 -1
- package/dist/components/PropertyPanel/index.js +0 -223
- package/dist/components/PropertyPanel/index.js.map +0 -1
- package/dist/components/SiteEditor/index.d.ts +0 -3
- package/dist/components/SiteEditor/index.d.ts.map +0 -1
- package/dist/components/SiteEditor/index.js +0 -251
- package/dist/components/SiteEditor/index.js.map +0 -1
- package/dist/components/SiteViewer/index.d.ts +0 -3
- package/dist/components/SiteViewer/index.d.ts.map +0 -1
- package/dist/components/SiteViewer/index.js +0 -55
- package/dist/components/SiteViewer/index.js.map +0 -1
- package/dist/components/TemplateSelector/index.d.ts +0 -7
- package/dist/components/TemplateSelector/index.d.ts.map +0 -1
- package/dist/components/TemplateSelector/index.js +0 -109
- package/dist/components/TemplateSelector/index.js.map +0 -1
- package/dist/components/Toolbar/index.d.ts +0 -15
- package/dist/components/Toolbar/index.d.ts.map +0 -1
- package/dist/components/Toolbar/index.js +0 -113
- package/dist/components/Toolbar/index.js.map +0 -1
- package/dist/components/editors/PaletteSelector.d.ts +0 -14
- package/dist/components/editors/PaletteSelector.d.ts.map +0 -1
- package/dist/components/editors/PaletteSelector.js +0 -175
- package/dist/components/editors/PaletteSelector.js.map +0 -1
- package/dist/components/effects/SectionGlow.d.ts +0 -12
- package/dist/components/effects/SectionGlow.d.ts.map +0 -1
- package/dist/components/effects/SectionGlow.js +0 -139
- package/dist/components/effects/SectionGlow.js.map +0 -1
- package/dist/components/inputs/CheckboxInput.d.ts +0 -3
- package/dist/components/inputs/CheckboxInput.d.ts.map +0 -1
- package/dist/components/inputs/CheckboxInput.js +0 -46
- package/dist/components/inputs/CheckboxInput.js.map +0 -1
- package/dist/components/inputs/ColorInput.d.ts +0 -7
- package/dist/components/inputs/ColorInput.d.ts.map +0 -1
- package/dist/components/inputs/ColorInput.js +0 -180
- package/dist/components/inputs/ColorInput.js.map +0 -1
- package/dist/components/inputs/GradientInput.d.ts +0 -7
- package/dist/components/inputs/GradientInput.d.ts.map +0 -1
- package/dist/components/inputs/GradientInput.js +0 -78
- package/dist/components/inputs/GradientInput.js.map +0 -1
- package/dist/components/inputs/ImageInput.d.ts.map +0 -1
- package/dist/components/inputs/ImageInput.js.map +0 -1
- package/dist/components/inputs/SelectInput.d.ts +0 -7
- package/dist/components/inputs/SelectInput.d.ts.map +0 -1
- package/dist/components/inputs/SelectInput.js +0 -97
- package/dist/components/inputs/SelectInput.js.map +0 -1
- package/dist/components/inputs/SliderInput.d.ts +0 -8
- package/dist/components/inputs/SliderInput.d.ts.map +0 -1
- package/dist/components/inputs/SliderInput.js +0 -77
- package/dist/components/inputs/SliderInput.js.map +0 -1
- package/dist/components/inputs/index.d.ts +0 -11
- package/dist/components/inputs/index.d.ts.map +0 -1
- package/dist/components/inputs/types.d.ts +0 -48
- package/dist/components/inputs/types.d.ts.map +0 -1
- package/dist/components/inputs/types.js +0 -9
- package/dist/components/inputs/types.js.map +0 -1
- package/dist/components/renderers/ComponentRenderer.d.ts +0 -8
- package/dist/components/renderers/ComponentRenderer.d.ts.map +0 -1
- package/dist/components/renderers/ComponentRenderer.js +0 -13
- package/dist/components/renderers/ComponentRenderer.js.map +0 -1
- package/dist/components/renderers/HeroRenderer.d.ts +0 -3
- package/dist/components/renderers/HeroRenderer.d.ts.map +0 -1
- package/dist/components/renderers/HeroRenderer.js +0 -10
- package/dist/components/renderers/HeroRenderer.js.map +0 -1
- package/dist/components/renderers/hero/HeroBanner.d.ts +0 -3
- package/dist/components/renderers/hero/HeroBanner.d.ts.map +0 -1
- package/dist/components/renderers/hero/HeroBanner.js +0 -122
- package/dist/components/renderers/hero/HeroBanner.js.map +0 -1
- package/dist/components/renderers/hero/HeroCinematic.d.ts +0 -3
- package/dist/components/renderers/hero/HeroCinematic.d.ts.map +0 -1
- package/dist/components/renderers/hero/HeroCinematic.js +0 -141
- package/dist/components/renderers/hero/HeroCinematic.js.map +0 -1
- package/dist/components/renderers/hero/HeroClassic.d.ts +0 -3
- package/dist/components/renderers/hero/HeroClassic.d.ts.map +0 -1
- package/dist/components/renderers/hero/HeroClassic.js +0 -241
- package/dist/components/renderers/hero/HeroClassic.js.map +0 -1
- package/dist/components/renderers/hero/HeroCollage.d.ts +0 -3
- package/dist/components/renderers/hero/HeroCollage.d.ts.map +0 -1
- package/dist/components/renderers/hero/HeroCollage.js +0 -131
- package/dist/components/renderers/hero/HeroCollage.js.map +0 -1
- package/dist/components/renderers/hero/HeroColumns.d.ts +0 -3
- package/dist/components/renderers/hero/HeroColumns.d.ts.map +0 -1
- package/dist/components/renderers/hero/HeroColumns.js +0 -114
- package/dist/components/renderers/hero/HeroColumns.js.map +0 -1
- package/dist/components/renderers/hero/HeroGlass.d.ts +0 -3
- package/dist/components/renderers/hero/HeroGlass.d.ts.map +0 -1
- package/dist/components/renderers/hero/HeroGlass.js +0 -119
- package/dist/components/renderers/hero/HeroGlass.js.map +0 -1
- package/dist/components/renderers/hero/HeroNeon.d.ts +0 -3
- package/dist/components/renderers/hero/HeroNeon.d.ts.map +0 -1
- package/dist/components/renderers/hero/HeroNeon.js +0 -136
- package/dist/components/renderers/hero/HeroNeon.js.map +0 -1
- package/dist/components/renderers/hero/HeroParallax.d.ts +0 -3
- package/dist/components/renderers/hero/HeroParallax.d.ts.map +0 -1
- package/dist/components/renderers/hero/HeroParallax.js +0 -99
- package/dist/components/renderers/hero/HeroParallax.js.map +0 -1
- package/dist/components/renderers/hero/HeroSplit.d.ts +0 -3
- package/dist/components/renderers/hero/HeroSplit.d.ts.map +0 -1
- package/dist/components/renderers/hero/HeroSplit.js +0 -142
- package/dist/components/renderers/hero/HeroSplit.js.map +0 -1
- package/dist/components/renderers/hero/HeroSpotlight.d.ts +0 -3
- package/dist/components/renderers/hero/HeroSpotlight.d.ts.map +0 -1
- package/dist/components/renderers/hero/HeroSpotlight.js +0 -213
- package/dist/components/renderers/hero/HeroSpotlight.js.map +0 -1
- package/dist/components/renderers/hero/index.d.ts +0 -14
- package/dist/components/renderers/hero/index.d.ts.map +0 -1
- package/dist/components/renderers/index.d.ts +0 -8
- package/dist/components/renderers/index.d.ts.map +0 -1
- package/dist/components/renderers/index.js +0 -89
- package/dist/components/renderers/index.js.map +0 -1
- package/dist/components/renderers/types.d.ts +0 -11
- package/dist/components/renderers/types.d.ts.map +0 -1
- package/dist/editor/LandingPageEditorV2.d.ts +0 -19
- package/dist/editor/LandingPageEditorV2.d.ts.map +0 -1
- package/dist/editor/LandingPageEditorV2.js +0 -311
- package/dist/editor/LandingPageEditorV2.js.map +0 -1
- package/dist/editor/PropertyEditor/PropertyGroup.js +0 -23
- package/dist/editor/PropertyEditor/PropertyGroup.js.map +0 -1
- package/dist/engine/preview/PreviewV2.d.ts +0 -15
- package/dist/engine/preview/PreviewV2.d.ts.map +0 -1
- package/dist/engine/preview/PreviewV2.js +0 -242
- package/dist/engine/preview/PreviewV2.js.map +0 -1
- package/dist/modules/registry.d.ts +0 -31
- package/dist/modules/registry.d.ts.map +0 -1
- package/dist/modules/registry.js +0 -67
- package/dist/modules/registry.js.map +0 -1
- package/dist/node_modules/@dnd-kit/accessibility/dist/accessibility.esm.js +0 -57
- package/dist/node_modules/@dnd-kit/accessibility/dist/accessibility.esm.js.map +0 -1
- package/dist/node_modules/@dnd-kit/core/dist/core.esm.js +0 -2345
- package/dist/node_modules/@dnd-kit/core/dist/core.esm.js.map +0 -1
- package/dist/node_modules/@dnd-kit/sortable/dist/sortable.esm.js +0 -440
- package/dist/node_modules/@dnd-kit/sortable/dist/sortable.esm.js.map +0 -1
- package/dist/node_modules/@dnd-kit/utilities/dist/utilities.esm.js +0 -236
- package/dist/node_modules/@dnd-kit/utilities/dist/utilities.esm.js.map +0 -1
- package/dist/node_modules/clsx/dist/clsx.js +0 -17
- package/dist/node_modules/clsx/dist/clsx.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/Icon.js +0 -35
- package/dist/node_modules/lucide-react/dist/esm/Icon.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/createLucideIcon.js +0 -18
- package/dist/node_modules/lucide-react/dist/esm/createLucideIcon.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/defaultAttributes.js +0 -15
- package/dist/node_modules/lucide-react/dist/esm/defaultAttributes.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/arrow-right.js +0 -9
- package/dist/node_modules/lucide-react/dist/esm/icons/arrow-right.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/briefcase.js +0 -9
- package/dist/node_modules/lucide-react/dist/esm/icons/briefcase.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/check.js +0 -6
- package/dist/node_modules/lucide-react/dist/esm/icons/check.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/chevron-down.js +0 -8
- package/dist/node_modules/lucide-react/dist/esm/icons/chevron-down.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/chevron-right.js +0 -8
- package/dist/node_modules/lucide-react/dist/esm/icons/chevron-right.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/chevron-up.js +0 -6
- package/dist/node_modules/lucide-react/dist/esm/icons/chevron-up.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/eye.js +0 -15
- package/dist/node_modules/lucide-react/dist/esm/icons/eye.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/file-text.js +0 -12
- package/dist/node_modules/lucide-react/dist/esm/icons/file-text.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/globe.js +0 -10
- package/dist/node_modules/lucide-react/dist/esm/icons/globe.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/grid-3x3.js +0 -12
- package/dist/node_modules/lucide-react/dist/esm/icons/grid-3x3.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/grip-vertical.js +0 -13
- package/dist/node_modules/lucide-react/dist/esm/icons/grip-vertical.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/heading.js +0 -10
- package/dist/node_modules/lucide-react/dist/esm/icons/heading.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/image.js +0 -10
- package/dist/node_modules/lucide-react/dist/esm/icons/image.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/images.js +0 -11
- package/dist/node_modules/lucide-react/dist/esm/icons/images.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/list.js +0 -13
- package/dist/node_modules/lucide-react/dist/esm/icons/list.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/loader-circle.js +0 -8
- package/dist/node_modules/lucide-react/dist/esm/icons/loader-circle.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/minus.js +0 -6
- package/dist/node_modules/lucide-react/dist/esm/icons/minus.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/mouse-pointer-click.js +0 -18
- package/dist/node_modules/lucide-react/dist/esm/icons/mouse-pointer-click.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/navigation.js +0 -8
- package/dist/node_modules/lucide-react/dist/esm/icons/navigation.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/panels-top-left.js +0 -10
- package/dist/node_modules/lucide-react/dist/esm/icons/panels-top-left.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/phone.js +0 -14
- package/dist/node_modules/lucide-react/dist/esm/icons/phone.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/plus.js +0 -9
- package/dist/node_modules/lucide-react/dist/esm/icons/plus.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/redo-2.js +0 -9
- package/dist/node_modules/lucide-react/dist/esm/icons/redo-2.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/redo.js +0 -9
- package/dist/node_modules/lucide-react/dist/esm/icons/redo.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/rotate-ccw.js +0 -9
- package/dist/node_modules/lucide-react/dist/esm/icons/rotate-ccw.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/save.js +0 -16
- package/dist/node_modules/lucide-react/dist/esm/icons/save.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/square.js +0 -8
- package/dist/node_modules/lucide-react/dist/esm/icons/square.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/star.js +0 -14
- package/dist/node_modules/lucide-react/dist/esm/icons/star.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/trash-2.js +0 -12
- package/dist/node_modules/lucide-react/dist/esm/icons/trash-2.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/type.js +0 -10
- package/dist/node_modules/lucide-react/dist/esm/icons/type.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/undo-2.js +0 -9
- package/dist/node_modules/lucide-react/dist/esm/icons/undo-2.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/undo.js +0 -9
- package/dist/node_modules/lucide-react/dist/esm/icons/undo.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/user.js +0 -9
- package/dist/node_modules/lucide-react/dist/esm/icons/user.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/shared/src/utils.js +0 -6
- package/dist/node_modules/lucide-react/dist/esm/shared/src/utils.js.map +0 -1
- package/dist/node_modules/react-colorful/dist/index.js +0 -167
- package/dist/node_modules/react-colorful/dist/index.js.map +0 -1
- package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js +0 -2266
- package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js.map +0 -1
- package/dist/types/index.d.ts +0 -99
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/module.d.ts +0 -25
- package/dist/types/module.d.ts.map +0 -1
- package/dist/utils/htmlExporter.d.ts +0 -6
- package/dist/utils/htmlExporter.d.ts.map +0 -1
- package/dist/utils/htmlExporter.js +0 -92
- package/dist/utils/htmlExporter.js.map +0 -1
- package/dist/utils/themeApplier.d.ts +0 -11
- package/dist/utils/themeApplier.d.ts.map +0 -1
- package/dist/utils/themeApplier.js +0 -29
- package/dist/utils/themeApplier.js.map +0 -1
- package/dist/utils/useDebounce.d.ts +0 -12
- package/dist/utils/useDebounce.d.ts.map +0 -1
- package/dist/viewer/LandingPageViewerV2.d.ts +0 -25
- package/dist/viewer/LandingPageViewerV2.d.ts.map +0 -1
- package/dist/viewer/LandingPageViewerV2.js +0 -253
- package/dist/viewer/LandingPageViewerV2.js.map +0 -1
- /package/dist/{components → editor/PropertyEditor}/inputs/ImageInput.d.ts +0 -0
- /package/dist/{components → editor/components}/LoadingSpinner.d.ts +0 -0
- /package/dist/{components → editor/components}/LoadingSpinner.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exportHtml.js","sources":["../../../src/engine/export/exportHtml.ts"],"sourcesContent":["/**\n * HTML Exporter\n * Exporta SiteDocumentV2 para HTML estático\n */\n\nimport { SiteDocumentV2, SitePage, Block } from \"../schema/siteDocument\";\nimport { generateThemeCSSVariables, ThemeTokens } from \"../schema/themeTokens\";\nimport { sanitizeHtml } from \"./sanitizeHtml\";\nimport { hashDocument } from \"../../utils/documentHash\";\nimport { htmlExportRegistry, initializeExporters } from \"./exporters\";\n\n/**\n * Landing Page CSS crítico para navbar e outros componentes\n * Incluído inline para garantir que sempre esteja disponível\n */\nconst landingPageCSS = `\n/* Navbar engine (sg-navbar) - base e variações */\n.sg-navbar {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 4.5rem;\n color: var(--sg-text, #1f2937);\n position: relative;\n transition: all 0.2s ease;\n background-color: var(--navbar-bg, var(--sg-bg, #fff));\n border-radius: var(--navbar-border-radius, 0);\n box-shadow: var(--navbar-shadow, 0 1px 2px 0 rgba(0, 0, 0, 0.05));\n}\n\n.sg-navbar::before {\n content: \"\";\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: inherit;\n opacity: var(--navbar-blur-opacity, 0);\n border-radius: inherit;\n z-index: 0;\n pointer-events: none;\n backdrop-filter: blur(var(--navbar-blur-amount, 0px));\n -webkit-backdrop-filter: blur(var(--navbar-blur-amount, 0px));\n}\n\n.sg-navbar--floating {\n margin: 1rem;\n max-width: calc(100% - 2rem);\n border-radius: var(--navbar-border-radius, 12px);\n box-shadow: var(--navbar-shadow, 0 10px 40px rgba(0, 0, 0, 0.15));\n}\n\n/* Compact mode - 20% smaller height and smaller elements */\n.sg-navbar--compact {\n height: 3.6rem;\n}\n\n.sg-navbar--compact .sg-navbar__link {\n font-size: 0.875rem;\n padding: 0.375rem 0.5rem;\n}\n\n.sg-navbar--compact .sg-navbar__btn {\n font-size: 0.875rem;\n padding: 0.375rem 0.875rem;\n}\n\n.sg-navbar__container {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 1.5rem;\n max-width: 1200px;\n width: 100%;\n height: 100%;\n margin: 0 auto;\n padding: 0 1rem;\n position: relative;\n z-index: 1;\n}\n\n.sg-navbar__brand {\n flex-shrink: 0;\n display: flex;\n align-items: center;\n justify-content: flex-start;\n height: 100%;\n}\n\n.sg-navbar__brand a {\n display: flex;\n align-items: center;\n justify-content: flex-start;\n height: 100%;\n text-decoration: none;\n color: var(--sg-primary, #3b82f6);\n font-weight: 700;\n font-size: 1.25rem;\n}\n\n.sg-navbar__brand img {\n object-fit: contain;\n object-position: left center;\n}\n\n.sg-navbar__brand-text {\n color: var(--sg-primary, #3b82f6);\n font-weight: 700;\n font-size: 1.25rem;\n}\n\n.sg-navbar__menu {\n display: flex;\n align-items: center;\n gap: 1.5rem;\n}\n\n.sg-navbar__link {\n color: var(--navbar-link-color, var(--sg-text, #1f2937));\n font-size: var(--navbar-link-size, 1rem);\n text-decoration: none;\n font-weight: 500;\n transition: color 0.2s ease;\n}\n\n.sg-navbar__link:hover {\n color: var(--navbar-link-hover-color, var(--sg-primary, #3b82f6));\n}\n\n.sg-navbar__btn {\n padding: 0.5rem 1rem;\n font-weight: 500;\n text-decoration: none;\n display: inline-block;\n transition: all 0.2s ease;\n border-radius: var(--navbar-btn-radius, 0.5rem);\n}\n\n.sg-navbar__btn--solid {\n background-color: var(--navbar-btn-bg, var(--sg-primary, #3b82f6));\n color: var(--navbar-btn-text, var(--sg-primary-text, #fff));\n border: none;\n}\n\n/* Hover effects are now controlled by the hover effects system */\n\n.sg-navbar__btn--outline {\n background-color: transparent;\n color: var(--navbar-btn-bg, var(--sg-primary, #3b82f6));\n border: 2px solid var(--navbar-btn-bg, var(--sg-primary, #3b82f6));\n}\n\n.sg-navbar__btn--ghost {\n background-color: transparent;\n color: var(--navbar-btn-bg, var(--sg-primary, #3b82f6));\n border: none;\n}\n\n.sg-navbar--classic.sg-navbar--floating {\n padding: 1rem 0;\n border-bottom: 1px solid var(--sg-border, #e5e7eb);\n}\n\n.sg-navbar--centered.sg-navbar--floating {\n padding: 1rem 0;\n border-bottom: 1px solid var(--sg-border, #e5e7eb);\n}\n\n.sg-navbar--centered .sg-navbar__container {\n display: grid;\n grid-template-columns: 1fr auto 1fr;\n align-items: center;\n}\n\n.sg-navbar--centered .sg-navbar__brand {\n justify-self: start;\n}\n\n.sg-navbar--centered .sg-navbar__menu {\n justify-self: center;\n}\n\n.sg-navbar--centered .sg-navbar__actions {\n justify-self: end;\n}\n\n/* Dropdown wrapper */\n.sg-navbar__dropdown-wrapper {\n position: relative;\n display: inline-block;\n}\n\n/* Hover bridge invisível - conecta o botão ao dropdown (16px gap + overlap) */\n.sg-navbar__dropdown-wrapper::before {\n content: \"\";\n position: absolute;\n top: 100%;\n left: -1rem;\n right: -1rem;\n height: 20px;\n background: transparent;\n}\n\n.sg-navbar__link--has-dropdown {\n display: inline-flex;\n align-items: center;\n gap: 0.375rem;\n background: none;\n border: none;\n cursor: pointer;\n font: inherit;\n color: inherit;\n padding: 0.5rem 0.75rem;\n border-radius: 6px;\n position: relative;\n text-decoration: none;\n font-weight: 500;\n transition: all 0.2s ease;\n}\n\n/* Chevron-down icon (▼) */\n.sg-navbar__link--has-dropdown::after {\n content: \"\";\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 0.25rem;\n border-left: 4px solid transparent;\n border-right: 4px solid transparent;\n border-top: 5px solid currentColor;\n transition: transform 0.2s ease;\n}\n\n.sg-navbar__dropdown-wrapper:hover .sg-navbar__link--has-dropdown::after {\n transform: rotate(180deg);\n}\n\n/* Dropdown container */\n.sg-navbar-dropdown {\n display: none;\n opacity: 0;\n position: absolute;\n top: calc(100% + 16px); /* Pequeno gap visual abaixo do navbar */\n left: 0;\n z-index: 1000;\n min-width: 200px;\n padding: 0.5rem 0;\n transform: translateY(-5px);\n transition: opacity 0.2s ease, transform 0.2s ease;\n overflow: visible;\n}\n\n/* Frost layer do dropdown - cobre todo o dropdown */\n.sg-navbar-dropdown::before {\n content: \"\";\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: var(--dropdown-bg, rgba(255, 255, 255, 0.9));\n border-radius: var(--dropdown-radius, 25px);\n box-shadow: 0 10px 40px rgba(0, 0, 0, 0.15);\n pointer-events: none;\n z-index: 0;\n backdrop-filter: blur(var(--navbar-blur-amount, 0px));\n -webkit-backdrop-filter: blur(var(--navbar-blur-amount, 0px));\n}\n\n/* Dropdown items acima do frost layer */\n.sg-navbar-dropdown > * {\n position: relative;\n z-index: 1;\n}\n\n/* Show dropdown on hover/focus with animation */\n.sg-navbar__dropdown-wrapper:hover .sg-navbar-dropdown,\n.sg-navbar__dropdown-wrapper:focus-within .sg-navbar-dropdown {\n display: block;\n opacity: 1;\n transform: translateY(0);\n}\n\n/* Dropdown items */\n.sg-navbar-dropdown__item {\n display: block;\n white-space: nowrap;\n}\n\n/* Mobile - dropdowns sempre visíveis no sidebar */\n@media (max-width: 768px) {\n .sg-navbar-dropdown {\n position: static;\n display: block !important;\n opacity: 1 !important;\n transform: none !important;\n min-width: auto;\n padding-left: 1rem;\n background: transparent !important;\n box-shadow: none !important;\n margin-top: 0.25rem;\n }\n\n .sg-navbar__link--has-dropdown::after {\n content: none;\n }\n\n .sg-navbar-dropdown__item {\n padding: 0.5rem 1.25rem;\n font-size: 0.9rem;\n }\n}\n`;\n\n/**\n * Cache de HTML com limite LRU (Last Recently Used)\n * Limite de 50 entradas para evitar memory leak\n */\nconst htmlCache = new Map<string, { html: string; timestamp: number }>();\nconst MAX_CACHE_SIZE = 50;\n\n/**\n * Limpa entradas antigas do cache quando excede o limite\n */\nfunction cleanCache() {\n if (htmlCache.size <= MAX_CACHE_SIZE) return;\n\n // Ordenar por timestamp e remover os mais antigos\n const entries = Array.from(htmlCache.entries()).sort(\n (a, b) => a[1].timestamp - b[1].timestamp,\n );\n\n const toRemove = entries.slice(0, entries.length - MAX_CACHE_SIZE);\n toRemove.forEach(([key]) => htmlCache.delete(key));\n}\n\n// Inicializar exporters com referência à função de renderização\nlet exportersInitialized = false;\n\n/**\n * Renderiza um bloco diretamente para HTML (sem React)\n * Usa registry pattern para despachar para exporters modulares\n */\nfunction blockToHtmlDirect(\n block: Block,\n depth: number = 0,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n // Inicializar exporters na primeira execução\n if (!exportersInitialized) {\n initializeExporters(blockToHtmlDirect);\n exportersInitialized = true;\n }\n\n // Buscar exporter no registry\n const exporter = htmlExportRegistry.get(block.type);\n\n if (!exporter) {\n // Fallback para blocos desconhecidos\n return `<div data-block-id=\"${block.id}\" style=\"color: red; padding: 1rem; border: 2px dashed red;\">Bloco desconhecido: ${block.type}</div>`;\n }\n\n // Executar exporter\n return exporter(block, depth, basePath, theme);\n}\n\n/**\n * Escapa HTML para prevenir XSS\n * NOTA: Esta função foi mantida aqui por compatibilidade, mas está duplicada\n * em shared/htmlHelpers.ts onde é usada pelos exporters\n */\nfunction escapeHtml(text: string): string {\n if (!text) return \"\";\n return String(text)\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\");\n}\n\n// ============================================================================\n// CÓDIGO ANTIGO REMOVIDO - Agora usamos Registry Pattern\n// ============================================================================\n// Todo o switch gigante de blockToHtmlDirect foi refatorado para exporters\n// modulares em /exporters/. Mantido apenas as linhas abaixo para referência\n// do que foi removido:\n//\n// - ~1200 linhas de código de switch/case\n// - 40+ casos de tipos de blocos\n// - Lógica de renderização HTML inline\n//\n// Agora distribuído em:\n// - /exporters/layout/*.ts (Container, Stack, Grid, Box, Section)\n// - /exporters/content/*.ts (Heading, Text, Image, Button, Link, etc)\n// - /exporters/sections/*.ts (Hero, Navbar, Footer, Marketing sections)\n// - /exporters/forms/*.ts (Form, Input, Textarea, FormSelect)\n// ============================================================================\n\n\nexport interface ExportPageToHtmlOptions {\n /** Página de referência para layout (navbar + footer). Quando a página atual não é a home, inclui navbar e footer desta página. */\n layoutFromPage?: SitePage;\n}\n\n/**\n * Exporta uma página para HTML (com cache)\n * @param basePath - Base path para links (ex.: /site ou /site/escola/:slug)\n * @param options - layoutFromPage: quando informado e diferente da página atual, inclui navbar (primeiro bloco navbar) e footer (último bloco) da página de referência\n */\nexport function exportPageToHtml(\n page: SitePage,\n document: SiteDocumentV2,\n useCache: boolean = true,\n basePath?: string,\n options?: ExportPageToHtmlOptions,\n): string {\n const layoutFromPage = options?.layoutFromPage;\n const docHash = hashDocument(document);\n const layoutId = layoutFromPage?.id ?? \"\";\n const cacheKey = `${docHash}-${page.id}-${basePath ?? \"\"}-${layoutId}`;\n\n // Verificar cache\n if (useCache && htmlCache.has(cacheKey)) {\n const cached = htmlCache.get(cacheKey)!;\n cached.timestamp = Date.now();\n return cached.html;\n }\n\n // Gerar HTML\n const themeCSS = generateThemeCSSVariables(document.theme);\n let bodyHtml = page.structure\n .map((block) => blockToHtmlDirect(block, 0, basePath, document.theme))\n .join(\"\");\n\n // Layout compartilhado: em páginas não-home, incluir navbar e footer da página de referência (ex.: home)\n if (\n layoutFromPage &&\n layoutFromPage.id !== page.id &&\n layoutFromPage.structure?.length\n ) {\n const layoutStructure = layoutFromPage.structure;\n const navbarBlock = layoutStructure.find((b) => b.type === \"navbar\");\n const navbarHtml = navbarBlock\n ? blockToHtmlDirect(navbarBlock, 0, basePath, document.theme)\n : \"\";\n const footerBlock =\n layoutStructure.length > 1\n ? layoutStructure[layoutStructure.length - 1]\n : null;\n const footerHtml =\n footerBlock && footerBlock.type !== \"navbar\"\n ? blockToHtmlDirect(footerBlock, 0, basePath, document.theme)\n : \"\";\n bodyHtml = navbarHtml + bodyHtml + footerHtml;\n }\n\n const html = `<!DOCTYPE html>\n<html lang=\"pt-BR\">\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <title>${escapeHtml(page.name)}</title>\n <style>\n * {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n }\n html {\n scroll-behavior: smooth;\n }\n body {\n font-family: var(--sg-font-body, system-ui, -apple-system, sans-serif);\n line-height: 1.6;\n color: var(--sg-text, #1f2937);\n }\n ${themeCSS}\n\n /* Landing Page Styles */\n ${landingPageCSS}\n </style>\n <script>\n // Smooth scroll para âncoras sem reload\n document.addEventListener('DOMContentLoaded', function() {\n // Interceptar cliques em links com âncoras\n document.querySelectorAll('a[href^=\"#\"]').forEach(function(anchor) {\n anchor.addEventListener('click', function(e) {\n const href = this.getAttribute('href');\n\n // Ignorar # vazio\n if (!href || href === '#') return;\n\n // Prevenir comportamento padrão (reload)\n e.preventDefault();\n\n // Encontrar o elemento alvo\n const targetId = href.substring(1); // Remove o #\n const targetElement = document.getElementById(targetId);\n\n if (targetElement) {\n // Scroll suave até o elemento\n targetElement.scrollIntoView({\n behavior: 'smooth',\n block: 'start'\n });\n\n // Atualizar URL sem reload (para manter histórico de navegação)\n if (history.pushState) {\n history.pushState(null, '', href);\n }\n }\n });\n });\n });\n </script>\n</head>\n<body>\n ${bodyHtml}\n</body>\n</html>`;\n\n // Armazenar no cache\n if (useCache) {\n htmlCache.set(cacheKey, { html, timestamp: Date.now() });\n cleanCache();\n }\n\n return html;\n}\n\n/**\n * Exporta apenas um bloco para HTML (para atualização parcial)\n */\nexport function exportBlockToHtml(\n block: Block,\n basePath?: string,\n theme?: ThemeTokens\n): string {\n return blockToHtmlDirect(block, 0, basePath, theme);\n}\n\n/**\n * Limpa o cache de HTML\n */\nexport function clearHtmlCache(): void {\n htmlCache.clear();\n}\n\n/**\n * Exporta documento completo para HTML (sanitizado)\n */\nexport function exportDocumentToHtml(\n document: SiteDocumentV2,\n pageId?: string,\n): string {\n const page = pageId\n ? document.pages.find((p) => p.id === pageId)\n : document.pages[0];\n\n if (!page) {\n throw new Error(\"Page not found\");\n }\n\n const html = exportPageToHtml(page, document);\n return sanitizeHtml(html);\n}\n\n/**\n * Gera manifest de assets (imagens, fontes, etc)\n */\nexport function generateAssetsManifest(\n document: SiteDocumentV2,\n): Array<{ type: string; url: string }> {\n const assets: Array<{ type: string; url: string }> = [];\n\n function extractAssetsFromBlock(block: Block) {\n if (block.type === \"image\") {\n const src = (block as any).props.src;\n if (src) {\n assets.push({ type: \"image\", url: src });\n }\n }\n\n // Recursivamente extrair de children\n const children = (block as any).props?.children || [];\n children.forEach(extractAssetsFromBlock);\n }\n\n document.pages.forEach((page) => {\n page.structure.forEach(extractAssetsFromBlock);\n });\n\n return assets;\n}\n"],"names":["landingPageCSS","htmlCache","MAX_CACHE_SIZE","cleanCache","entries","a","b","key","exportersInitialized","blockToHtmlDirect","block","depth","basePath","theme","initializeExporters","exporter","htmlExportRegistry","escapeHtml","text","exportPageToHtml","page","document","useCache","options","layoutFromPage","docHash","hashDocument","layoutId","cacheKey","cached","themeCSS","generateThemeCSSVariables","bodyHtml","layoutStructure","navbarBlock","navbarHtml","footerBlock","footerHtml","html","exportBlockToHtml","clearHtmlCache","exportDocumentToHtml","pageId","p","sanitizeHtml","generateAssetsManifest","assets","extractAssetsFromBlock","src"],"mappings":";;;;;AAeA,MAAMA,IAAiB;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;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;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;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;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;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;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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA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"}
|
|
1
|
+
{"version":3,"file":"exportHtml.js","sources":["../../../src/engine/export/exportHtml.ts"],"sourcesContent":["/**\n * HTML Exporter\n * Exporta SiteDocument para HTML estático\n */\n\nimport { SiteDocument, SitePage, Block } from \"../schema/siteDocument\";\nimport { generateThemeCSSVariables, ThemeTokens } from \"../schema/themeTokens\";\nimport { hashDocument } from \"../../utils/documentHash\";\nimport { htmlExportRegistry, initializeExporters } from \"./exporters\";\n\n/**\n * Landing Page CSS crítico para navbar e outros componentes\n * Incluído inline para garantir que sempre esteja disponível\n */\nconst landingPageCSS = `\n/* Navbar engine (sg-navbar) - base e variações */\n.sg-navbar {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 4.5rem;\n color: var(--sg-text, #1f2937);\n position: relative;\n transition: all 0.2s ease;\n background-color: var(--navbar-bg, var(--sg-bg, #fff));\n border-radius: var(--navbar-border-radius, 0);\n box-shadow: var(--navbar-shadow, 0 1px 2px 0 rgba(0, 0, 0, 0.05));\n}\n\n.sg-navbar::before {\n content: \"\";\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: inherit;\n opacity: var(--navbar-blur-opacity, 0);\n border-radius: inherit;\n z-index: 0;\n pointer-events: none;\n backdrop-filter: blur(var(--navbar-blur-amount, 0px));\n -webkit-backdrop-filter: blur(var(--navbar-blur-amount, 0px));\n}\n\n.sg-navbar--floating {\n margin: 1rem;\n max-width: calc(100% - 2rem);\n border-radius: var(--navbar-border-radius, 12px);\n box-shadow: var(--navbar-shadow, 0 10px 40px rgba(0, 0, 0, 0.15));\n}\n\n/* Compact mode - 20% smaller height and smaller elements */\n.sg-navbar--compact {\n height: 3.6rem;\n}\n\n.sg-navbar--compact .sg-navbar__link {\n font-size: 0.875rem;\n padding: 0.375rem 0.5rem;\n}\n\n.sg-navbar--compact .sg-navbar__btn {\n font-size: 0.875rem;\n padding: 0.375rem 0.875rem;\n}\n\n.sg-navbar__container {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 1.5rem;\n max-width: 1200px;\n width: 100%;\n height: 100%;\n margin: 0 auto;\n padding: 0 1rem;\n position: relative;\n z-index: 1;\n}\n\n.sg-navbar__brand {\n flex-shrink: 0;\n display: flex;\n align-items: center;\n justify-content: flex-start;\n height: 100%;\n}\n\n.sg-navbar__brand a {\n display: flex;\n align-items: center;\n justify-content: flex-start;\n height: 100%;\n text-decoration: none;\n color: var(--sg-primary, #3b82f6);\n font-weight: 700;\n font-size: 1.25rem;\n}\n\n.sg-navbar__brand img {\n object-fit: contain;\n object-position: left center;\n}\n\n.sg-navbar__brand-text {\n color: var(--sg-primary, #3b82f6);\n font-weight: 700;\n font-size: 1.25rem;\n}\n\n.sg-navbar__menu {\n display: flex;\n align-items: center;\n gap: 1.5rem;\n}\n\n.sg-navbar__link {\n color: var(--navbar-link-color, var(--sg-text, #1f2937));\n font-size: var(--navbar-link-size, 1rem);\n text-decoration: none;\n font-weight: 500;\n transition: color 0.2s ease;\n}\n\n.sg-navbar__link:hover {\n color: var(--navbar-link-hover-color, var(--sg-primary, #3b82f6));\n}\n\n.sg-navbar__btn {\n padding: 0.5rem 1rem;\n font-weight: 500;\n text-decoration: none;\n display: inline-block;\n transition: all 0.2s ease;\n border-radius: var(--navbar-btn-radius, 0.5rem);\n}\n\n.sg-navbar__btn--solid {\n background-color: var(--navbar-btn-bg, var(--sg-primary, #3b82f6));\n color: var(--navbar-btn-text, var(--sg-primary-text, #fff));\n border: none;\n}\n\n/* Hover effects are now controlled by the hover effects system */\n\n.sg-navbar__btn--outline {\n background-color: transparent;\n color: var(--navbar-btn-bg, var(--sg-primary, #3b82f6));\n border: 2px solid var(--navbar-btn-bg, var(--sg-primary, #3b82f6));\n}\n\n.sg-navbar__btn--ghost {\n background-color: transparent;\n color: var(--navbar-btn-bg, var(--sg-primary, #3b82f6));\n border: none;\n}\n\n.sg-navbar--classic.sg-navbar--floating {\n padding: 1rem 0;\n border-bottom: 1px solid var(--sg-border, #e5e7eb);\n}\n\n.sg-navbar--centered.sg-navbar--floating {\n padding: 1rem 0;\n border-bottom: 1px solid var(--sg-border, #e5e7eb);\n}\n\n.sg-navbar--centered .sg-navbar__container {\n display: grid;\n grid-template-columns: 1fr auto 1fr;\n align-items: center;\n}\n\n.sg-navbar--centered .sg-navbar__brand {\n justify-self: start;\n}\n\n.sg-navbar--centered .sg-navbar__menu {\n justify-self: center;\n}\n\n.sg-navbar--centered .sg-navbar__actions {\n justify-self: end;\n}\n\n/* Dropdown wrapper */\n.sg-navbar__dropdown-wrapper {\n position: relative;\n display: inline-block;\n}\n\n/* Hover bridge invisível - conecta o botão ao dropdown (16px gap + overlap) */\n.sg-navbar__dropdown-wrapper::before {\n content: \"\";\n position: absolute;\n top: 100%;\n left: -1rem;\n right: -1rem;\n height: 20px;\n background: transparent;\n}\n\n.sg-navbar__link--has-dropdown {\n display: inline-flex;\n align-items: center;\n gap: 0.375rem;\n background: none;\n border: none;\n cursor: pointer;\n font: inherit;\n color: inherit;\n padding: 0.5rem 0.75rem;\n border-radius: 6px;\n position: relative;\n text-decoration: none;\n font-weight: 500;\n transition: all 0.2s ease;\n}\n\n/* Chevron-down icon (▼) */\n.sg-navbar__link--has-dropdown::after {\n content: \"\";\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 0.25rem;\n border-left: 4px solid transparent;\n border-right: 4px solid transparent;\n border-top: 5px solid currentColor;\n transition: transform 0.2s ease;\n}\n\n.sg-navbar__dropdown-wrapper:hover .sg-navbar__link--has-dropdown::after {\n transform: rotate(180deg);\n}\n\n/* Dropdown container */\n.sg-navbar-dropdown {\n display: none;\n opacity: 0;\n position: absolute;\n top: calc(100% + 16px); /* Pequeno gap visual abaixo do navbar */\n left: 0;\n z-index: 1000;\n min-width: 200px;\n padding: 0.5rem 0;\n transform: translateY(-5px);\n transition: opacity 0.2s ease, transform 0.2s ease;\n overflow: visible;\n}\n\n/* Frost layer do dropdown - cobre todo o dropdown */\n.sg-navbar-dropdown::before {\n content: \"\";\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: var(--dropdown-bg, rgba(255, 255, 255, 0.9));\n border-radius: var(--dropdown-radius, 25px);\n box-shadow: 0 10px 40px rgba(0, 0, 0, 0.15);\n pointer-events: none;\n z-index: 0;\n backdrop-filter: blur(var(--navbar-blur-amount, 0px));\n -webkit-backdrop-filter: blur(var(--navbar-blur-amount, 0px));\n}\n\n/* Dropdown items acima do frost layer */\n.sg-navbar-dropdown > * {\n position: relative;\n z-index: 1;\n}\n\n/* Show dropdown on hover/focus with animation */\n.sg-navbar__dropdown-wrapper:hover .sg-navbar-dropdown,\n.sg-navbar__dropdown-wrapper:focus-within .sg-navbar-dropdown {\n display: block;\n opacity: 1;\n transform: translateY(0);\n}\n\n/* Dropdown items */\n.sg-navbar-dropdown__item {\n display: block;\n white-space: nowrap;\n}\n\n/* Mobile - dropdowns sempre visíveis no sidebar */\n@media (max-width: 768px) {\n .sg-navbar-dropdown {\n position: static;\n display: block !important;\n opacity: 1 !important;\n transform: none !important;\n min-width: auto;\n padding-left: 1rem;\n background: transparent !important;\n box-shadow: none !important;\n margin-top: 0.25rem;\n }\n\n .sg-navbar__link--has-dropdown::after {\n content: none;\n }\n\n .sg-navbar-dropdown__item {\n padding: 0.5rem 1.25rem;\n font-size: 0.9rem;\n }\n}\n`;\n\n/**\n * Cache de HTML com limite LRU (Last Recently Used)\n * Limite de 50 entradas para evitar memory leak\n */\nconst htmlCache = new Map<string, { html: string; timestamp: number }>();\nconst MAX_CACHE_SIZE = 50;\n\n/**\n * Limpa entradas antigas do cache quando excede o limite\n */\nfunction cleanCache() {\n if (htmlCache.size <= MAX_CACHE_SIZE) return;\n\n // Ordenar por timestamp e remover os mais antigos\n const entries = Array.from(htmlCache.entries()).sort(\n (a, b) => a[1].timestamp - b[1].timestamp,\n );\n\n const toRemove = entries.slice(0, entries.length - MAX_CACHE_SIZE);\n toRemove.forEach(([key]) => htmlCache.delete(key));\n}\n\n// Inicializar exporters com referência à função de renderização\nlet exportersInitialized = false;\n\n/**\n * Renderiza um bloco diretamente para HTML (sem React)\n * Usa registry pattern para despachar para exporters modulares\n */\nfunction blockToHtmlDirect(\n block: Block,\n depth: number = 0,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n // Inicializar exporters na primeira execução\n if (!exportersInitialized) {\n initializeExporters(blockToHtmlDirect);\n exportersInitialized = true;\n }\n\n // Buscar exporter no registry\n const exporter = htmlExportRegistry.get(block.type);\n\n if (!exporter) {\n // Fallback para blocos desconhecidos\n return `<div data-block-id=\"${block.id}\" style=\"color: red; padding: 1rem; border: 2px dashed red;\">Bloco desconhecido: ${block.type}</div>`;\n }\n\n // Executar exporter\n return exporter(block, depth, basePath, theme);\n}\n\n/**\n * Escapa HTML para prevenir XSS\n * NOTA: Esta função foi mantida aqui por compatibilidade, mas está duplicada\n * em shared/htmlHelpers.ts onde é usada pelos exporters\n */\nfunction escapeHtml(text: string): string {\n if (!text) return \"\";\n return String(text)\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\");\n}\n\n// ============================================================================\n// CÓDIGO ANTIGO REMOVIDO - Agora usamos Registry Pattern\n// ============================================================================\n// Todo o switch gigante de blockToHtmlDirect foi refatorado para exporters\n// modulares em /exporters/. Mantido apenas as linhas abaixo para referência\n// do que foi removido:\n//\n// - ~1200 linhas de código de switch/case\n// - 40+ casos de tipos de blocos\n// - Lógica de renderização HTML inline\n//\n// Agora distribuído em:\n// - /exporters/layout/*.ts (Container, Stack, Grid, Box, Section)\n// - /exporters/content/*.ts (Heading, Text, Image, Button, Link, etc)\n// - /exporters/sections/*.ts (Hero, Navbar, Footer, Marketing sections)\n// - /exporters/forms/*.ts (Form, Input, Textarea, FormSelect)\n// ============================================================================\n\n\nexport interface ExportPageToHtmlOptions {\n /** Página de referência para layout (navbar + footer). Quando a página atual não é a home, inclui navbar e footer desta página. */\n layoutFromPage?: SitePage;\n}\n\n/**\n * Exporta uma página para HTML (com cache)\n * @param basePath - Base path para links (ex.: /site ou /site/escola/:slug)\n * @param options - layoutFromPage: quando informado e diferente da página atual, inclui navbar (primeiro bloco navbar) e footer (último bloco) da página de referência\n */\nexport function exportPageToHtml(\n page: SitePage,\n document: SiteDocument,\n useCache: boolean = true,\n basePath?: string,\n options?: ExportPageToHtmlOptions,\n): string {\n const layoutFromPage = options?.layoutFromPage;\n const docHash = hashDocument(document);\n const layoutId = layoutFromPage?.id ?? \"\";\n const cacheKey = `${docHash}-${page.id}-${basePath ?? \"\"}-${layoutId}`;\n\n // Verificar cache\n if (useCache && htmlCache.has(cacheKey)) {\n const cached = htmlCache.get(cacheKey)!;\n cached.timestamp = Date.now();\n return cached.html;\n }\n\n // Gerar HTML\n const themeCSS = generateThemeCSSVariables(document.theme);\n let bodyHtml = page.structure\n .map((block) => blockToHtmlDirect(block, 0, basePath, document.theme))\n .join(\"\");\n\n // Layout compartilhado: em páginas não-home, incluir navbar e footer da página de referência (ex.: home)\n // Pula injeção se a página já possui seu próprio navbar/footer (ex.: páginas de plugin)\n if (\n layoutFromPage &&\n layoutFromPage.id !== page.id &&\n layoutFromPage.structure?.length\n ) {\n const layoutStructure = layoutFromPage.structure;\n\n const pageHasNavbar = page.structure.some((b) => b.type === \"navbar\");\n const pageHasFooter = page.structure.some((b) => b.type === \"footer\");\n\n const navbarBlock = !pageHasNavbar\n ? layoutStructure.find((b) => b.type === \"navbar\")\n : null;\n const navbarHtml = navbarBlock\n ? blockToHtmlDirect(navbarBlock, 0, basePath, document.theme)\n : \"\";\n\n const footerBlock = !pageHasFooter\n ? layoutStructure.find((b) => b.type === \"footer\")\n : null;\n const footerHtml =\n footerBlock && footerBlock.type !== \"navbar\"\n ? blockToHtmlDirect(footerBlock, 0, basePath, document.theme)\n : \"\";\n\n if (navbarHtml || footerHtml) {\n bodyHtml = navbarHtml + bodyHtml + footerHtml;\n }\n }\n\n const html = `<!DOCTYPE html>\n<html lang=\"pt-BR\">\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <title>${escapeHtml(page.name)}</title>\n <style>\n * {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n }\n html {\n scroll-behavior: smooth;\n }\n body {\n font-family: var(--sg-font-body, system-ui, -apple-system, sans-serif);\n line-height: 1.6;\n color: var(--sg-text, #1f2937);\n }\n ${themeCSS}\n\n /* Landing Page Styles */\n ${landingPageCSS}\n </style>\n <script>\n // Smooth scroll para âncoras sem reload\n document.addEventListener('DOMContentLoaded', function() {\n // Interceptar cliques em links com âncoras\n document.querySelectorAll('a[href^=\"#\"]').forEach(function(anchor) {\n anchor.addEventListener('click', function(e) {\n const href = this.getAttribute('href');\n\n // Ignorar # vazio\n if (!href || href === '#') return;\n\n // Prevenir comportamento padrão (reload)\n e.preventDefault();\n\n // Encontrar o elemento alvo\n const targetId = href.substring(1); // Remove o #\n const targetElement = document.getElementById(targetId);\n\n if (targetElement) {\n // Scroll suave até o elemento\n targetElement.scrollIntoView({\n behavior: 'smooth',\n block: 'start'\n });\n\n // Atualizar URL sem reload (para manter histórico de navegação)\n if (history.pushState) {\n history.pushState(null, '', href);\n }\n }\n });\n });\n });\n </script>\n</head>\n<body>\n ${bodyHtml}\n</body>\n</html>`;\n\n // Armazenar no cache\n if (useCache) {\n htmlCache.set(cacheKey, { html, timestamp: Date.now() });\n cleanCache();\n }\n\n return html;\n}\n\n/**\n * Exporta apenas um bloco para HTML (para atualização parcial)\n */\nexport function exportBlockToHtml(\n block: Block,\n basePath?: string,\n theme?: ThemeTokens\n): string {\n return blockToHtmlDirect(block, 0, basePath, theme);\n}\n\n/**\n * Limpa o cache de HTML\n */\nexport function clearHtmlCache(): void {\n htmlCache.clear();\n}\n\n/**\n * Exporta documento completo para HTML\n *\n * Nota: Não sanitiza o HTML pois exportPageToHtml() já gera HTML seguro\n * (conteúdo de usuário é escapado via escapeHtml nos exporters).\n * A sanitização anterior (sanitizeHtml) removia o <head> inteiro,\n * perdendo CSS de tema, hover effects e landing page styles.\n */\nexport function exportDocumentToHtml(\n document: SiteDocument,\n pageId?: string,\n): string {\n const page = pageId\n ? document.pages.find((p) => p.id === pageId)\n : document.pages[0];\n\n if (!page) {\n throw new Error(\"Page not found\");\n }\n\n return exportPageToHtml(page, document);\n}\n\n/**\n * Gera manifest de assets (imagens, fontes, etc)\n */\nexport function generateAssetsManifest(\n document: SiteDocument,\n): Array<{ type: string; url: string }> {\n const assets: Array<{ type: string; url: string }> = [];\n\n function extractAssetsFromBlock(block: Block) {\n if (block.type === \"image\") {\n const src = (block as any).props.src;\n if (src) {\n assets.push({ type: \"image\", url: src });\n }\n }\n\n // Recursivamente extrair de children\n const children = (block as any).props?.children || [];\n children.forEach(extractAssetsFromBlock);\n }\n\n document.pages.forEach((page) => {\n page.structure.forEach(extractAssetsFromBlock);\n });\n\n return assets;\n}\n"],"names":["landingPageCSS","htmlCache","MAX_CACHE_SIZE","cleanCache","entries","a","b","key","exportersInitialized","blockToHtmlDirect","block","depth","basePath","theme","initializeExporters","exporter","htmlExportRegistry","escapeHtml","text","exportPageToHtml","page","document","useCache","options","layoutFromPage","docHash","hashDocument","layoutId","cacheKey","cached","themeCSS","generateThemeCSSVariables","bodyHtml","layoutStructure","pageHasNavbar","pageHasFooter","navbarBlock","navbarHtml","footerBlock","footerHtml","html","exportBlockToHtml","clearHtmlCache","exportDocumentToHtml","pageId","p","generateAssetsManifest","assets","extractAssetsFromBlock","src"],"mappings":";;;;AAcA,MAAMA,IAAiB;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;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;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;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;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;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;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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HeadingExporter.d.ts","sourceRoot":"","sources":["../../../../../src/engine/export/exporters/content/HeadingExporter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAG1D,wBAAgB,aAAa,CAC3B,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,EACb,QAAQ,CAAC,EAAE,MAAM,EACjB,KAAK,CAAC,EAAE,WAAW,GAClB,MAAM,
|
|
1
|
+
{"version":3,"file":"HeadingExporter.d.ts","sourceRoot":"","sources":["../../../../../src/engine/export/exporters/content/HeadingExporter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAG1D,wBAAgB,aAAa,CAC3B,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,EACb,QAAQ,CAAC,EAAE,MAAM,EACjB,KAAK,CAAC,EAAE,WAAW,GAClB,MAAM,CAYR"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { dataBlockIdAttr as
|
|
2
|
-
function
|
|
3
|
-
const { level: e, text: l, align:
|
|
4
|
-
`text-align: ${
|
|
1
|
+
import { dataBlockIdAttr as s, escapeHtml as p } from "../../shared/htmlHelpers.js";
|
|
2
|
+
function f(t, c, i, $) {
|
|
3
|
+
const r = t.props, { level: e, text: l, align: n = "left", color: o } = r, a = [
|
|
4
|
+
`text-align: ${n}`,
|
|
5
5
|
o ? `color: ${o}` : "color: var(--sg-text, #1f2937)"
|
|
6
6
|
].filter(Boolean).join("; ");
|
|
7
|
-
return `<h${e} ${
|
|
7
|
+
return `<h${e} ${s(t.id)} style="${a}">${p(l)}</h${e}>`;
|
|
8
8
|
}
|
|
9
9
|
export {
|
|
10
|
-
|
|
10
|
+
f as exportHeading
|
|
11
11
|
};
|
|
12
12
|
//# sourceMappingURL=HeadingExporter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HeadingExporter.js","sources":["../../../../../src/engine/export/exporters/content/HeadingExporter.ts"],"sourcesContent":["/**\n * Heading Block Exporter\n */\n\nimport { Block } from \"../../../schema/siteDocument\";\nimport { ThemeTokens } from \"../../../schema/themeTokens\";\nimport { dataBlockIdAttr, escapeHtml } from \"../../shared/htmlHelpers\";\n\nexport function exportHeading(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const { level, text, align = \"left\", color } =
|
|
1
|
+
{"version":3,"file":"HeadingExporter.js","sources":["../../../../../src/engine/export/exporters/content/HeadingExporter.ts"],"sourcesContent":["/**\n * Heading Block Exporter\n */\n\nimport { Block } from \"../../../schema/siteDocument\";\nimport { ThemeTokens } from \"../../../schema/themeTokens\";\nimport { dataBlockIdAttr, escapeHtml } from \"../../shared/htmlHelpers\";\n\nexport function exportHeading(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const props = block.props as Record<string, any>;\n const { level, text, align = \"left\", color } = props;\n\n const style = [\n `text-align: ${align}`,\n color ? `color: ${color}` : \"color: var(--sg-text, #1f2937)\",\n ]\n .filter(Boolean)\n .join(\"; \");\n\n return `<h${level} ${dataBlockIdAttr(block.id)} style=\"${style}\">${escapeHtml(text)}</h${level}>`;\n}\n"],"names":["exportHeading","block","depth","basePath","theme","props","level","text","align","color","style","dataBlockIdAttr","escapeHtml"],"mappings":";AAQO,SAASA,EACdC,GACAC,GACAC,GACAC,GACQ;AACR,QAAMC,IAAQJ,EAAM,OACd,EAAE,OAAAK,GAAO,MAAAC,GAAM,OAAAC,IAAQ,QAAQ,OAAAC,MAAUJ,GAEzCK,IAAQ;AAAA,IACZ,eAAeF,CAAK;AAAA,IACpBC,IAAQ,UAAUA,CAAK,KAAK;AAAA,EAAA,EAE3B,OAAO,OAAO,EACd,KAAK,IAAI;AAEZ,SAAO,KAAKH,CAAK,IAAIK,EAAgBV,EAAM,EAAE,CAAC,WAAWS,CAAK,KAAKE,EAAWL,CAAI,CAAC,MAAMD,CAAK;AAChG;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LinkExporter.d.ts","sourceRoot":"","sources":["../../../../../src/engine/export/exporters/content/LinkExporter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAO1D,wBAAgB,UAAU,CACxB,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,EACb,QAAQ,CAAC,EAAE,MAAM,EACjB,KAAK,CAAC,EAAE,WAAW,GAClB,MAAM,
|
|
1
|
+
{"version":3,"file":"LinkExporter.d.ts","sourceRoot":"","sources":["../../../../../src/engine/export/exporters/content/LinkExporter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAO1D,wBAAgB,UAAU,CACxB,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,EACb,QAAQ,CAAC,EAAE,MAAM,EACjB,KAAK,CAAC,EAAE,WAAW,GAClB,MAAM,CA2DR"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { resolveHref as
|
|
1
|
+
import { resolveHref as k, linkTargetAttr as u, dataBlockIdAttr as C, escapeHtml as a } from "../../shared/htmlHelpers.js";
|
|
2
2
|
import { generateLinkHoverStyles as H } from "../../../shared/hoverEffects/linkHover.js";
|
|
3
3
|
function I(t, b, r, c) {
|
|
4
4
|
const {
|
|
@@ -8,7 +8,7 @@ function I(t, b, r, c) {
|
|
|
8
8
|
hoverEffect: s = "underline",
|
|
9
9
|
hoverIntensity: v = 50,
|
|
10
10
|
hoverColor: $
|
|
11
|
-
} = t.props, n = c?.colors?.primary || "#3b82f6", d = $ || n, l =
|
|
11
|
+
} = t.props, n = c?.colors?.primary || "#3b82f6", d = $ || n, l = k(p, r), y = u(l, r) || ' target="_self"', i = `[data-block-id="${t.id}"]`;
|
|
12
12
|
let e = "";
|
|
13
13
|
const h = [
|
|
14
14
|
`color: ${n}`,
|
|
@@ -24,17 +24,17 @@ function I(t, b, r, c) {
|
|
|
24
24
|
hoverColor: d
|
|
25
25
|
});
|
|
26
26
|
o.base && (e += `
|
|
27
|
-
${i}
|
|
27
|
+
${i} {
|
|
28
28
|
${o.base}
|
|
29
29
|
}
|
|
30
30
|
`), e += `
|
|
31
|
-
${i}
|
|
31
|
+
${i}:hover {
|
|
32
32
|
${o.hover}
|
|
33
33
|
}
|
|
34
34
|
`;
|
|
35
35
|
}
|
|
36
|
-
const g = e ? `<style>${e}</style>` : "",
|
|
37
|
-
return `${g}<a ${C(t.id)} href="${a(l)}"${y} class="sg-link" style="${
|
|
36
|
+
const g = e ? `<style>${e}</style>` : "", m = h.join("; ");
|
|
37
|
+
return `${g}<a ${C(t.id)} href="${a(l)}"${y} class="sg-link" style="${m}">${a(f)}</a>`;
|
|
38
38
|
}
|
|
39
39
|
export {
|
|
40
40
|
I as exportLink
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LinkExporter.js","sources":["../../../../../src/engine/export/exporters/content/LinkExporter.ts"],"sourcesContent":["/**\n * Link Block Exporter\n */\n\nimport { Block } from \"../../../schema/siteDocument\";\nimport { ThemeTokens } from \"../../../schema/themeTokens\";\nimport { dataBlockIdAttr, escapeHtml, resolveHref, linkTargetAttr } from \"../../shared/htmlHelpers\";\nimport {\n generateLinkHoverStyles,\n type LinkHoverEffect,\n} from \"../../../shared/hoverEffects\";\n\nexport function exportLink(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const {\n text,\n href,\n // Hover effects\n hoverEffect = \"underline\",\n hoverIntensity = 50,\n hoverColor,\n } = (block as any).props;\n\n // Get color from theme or use default\n const primaryColor = theme?.colors?.primary || \"#3b82f6\";\n const effectiveHoverColor = hoverColor || primaryColor;\n\n const resolvedHref = resolveHref(href, basePath);\n const targetAttr = linkTargetAttr(resolvedHref, basePath) || ' target=\"_self\"';\n\n // Generate hover CSS\n const scope = `[data-block-id=\"${block.id}\"]`;\n let hoverCss = \"\";\n\n // Base styles for link\n const baseStyles = [\n `color: ${primaryColor}`,\n \"text-decoration: none\",\n \"transition: all 0.3s ease\",\n \"display: inline-block\",\n \"background-repeat: no-repeat\",\n ];\n\n if (hoverEffect !== \"none\") {\n const hoverResult = generateLinkHoverStyles({\n effect: hoverEffect as LinkHoverEffect,\n intensity: hoverIntensity,\n hoverColor: effectiveHoverColor,\n });\n\n // Add base styles from hover effect\n if (hoverResult.base) {\n hoverCss += `\n ${scope}
|
|
1
|
+
{"version":3,"file":"LinkExporter.js","sources":["../../../../../src/engine/export/exporters/content/LinkExporter.ts"],"sourcesContent":["/**\n * Link Block Exporter\n */\n\nimport { Block } from \"../../../schema/siteDocument\";\nimport { ThemeTokens } from \"../../../schema/themeTokens\";\nimport { dataBlockIdAttr, escapeHtml, resolveHref, linkTargetAttr } from \"../../shared/htmlHelpers\";\nimport {\n generateLinkHoverStyles,\n type LinkHoverEffect,\n} from \"../../../shared/hoverEffects\";\n\nexport function exportLink(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const {\n text,\n href,\n // Hover effects\n hoverEffect = \"underline\",\n hoverIntensity = 50,\n hoverColor,\n } = (block as any).props;\n\n // Get color from theme or use default\n const primaryColor = theme?.colors?.primary || \"#3b82f6\";\n const effectiveHoverColor = hoverColor || primaryColor;\n\n const resolvedHref = resolveHref(href, basePath);\n const targetAttr = linkTargetAttr(resolvedHref, basePath) || ' target=\"_self\"';\n\n // Generate hover CSS\n const scope = `[data-block-id=\"${block.id}\"]`;\n let hoverCss = \"\";\n\n // Base styles for link\n const baseStyles = [\n `color: ${primaryColor}`,\n \"text-decoration: none\",\n \"transition: all 0.3s ease\",\n \"display: inline-block\",\n \"background-repeat: no-repeat\",\n ];\n\n if (hoverEffect !== \"none\") {\n const hoverResult = generateLinkHoverStyles({\n effect: hoverEffect as LinkHoverEffect,\n intensity: hoverIntensity,\n hoverColor: effectiveHoverColor,\n });\n\n // Add base styles from hover effect\n // Nota: O seletor usa apenas ${scope} pois o próprio <a> tem data-block-id\n if (hoverResult.base) {\n hoverCss += `\n ${scope} {\n ${hoverResult.base}\n }\n `;\n }\n\n // Hover styles\n hoverCss += `\n ${scope}:hover {\n ${hoverResult.hover}\n }\n `;\n }\n\n const styleTag = hoverCss ? `<style>${hoverCss}</style>` : \"\";\n const style = baseStyles.join(\"; \");\n\n return `${styleTag}<a ${dataBlockIdAttr(block.id)} href=\"${escapeHtml(resolvedHref)}\"${targetAttr} class=\"sg-link\" style=\"${style}\">${escapeHtml(text)}</a>`;\n}\n"],"names":["exportLink","block","depth","basePath","theme","text","href","hoverEffect","hoverIntensity","hoverColor","primaryColor","effectiveHoverColor","resolvedHref","resolveHref","targetAttr","linkTargetAttr","scope","hoverCss","baseStyles","hoverResult","generateLinkHoverStyles","styleTag","style","dataBlockIdAttr","escapeHtml"],"mappings":";;AAYO,SAASA,EACdC,GACAC,GACAC,GACAC,GACQ;AACR,QAAM;AAAA,IACJ,MAAAC;AAAA,IACA,MAAAC;AAAA;AAAA,IAEA,aAAAC,IAAc;AAAA,IACd,gBAAAC,IAAiB;AAAA,IACjB,YAAAC;AAAA,EAAA,IACGR,EAAc,OAGbS,IAAeN,GAAO,QAAQ,WAAW,WACzCO,IAAsBF,KAAcC,GAEpCE,IAAeC,EAAYP,GAAMH,CAAQ,GACzCW,IAAaC,EAAeH,GAAcT,CAAQ,KAAK,mBAGvDa,IAAQ,mBAAmBf,EAAM,EAAE;AACzC,MAAIgB,IAAW;AAGf,QAAMC,IAAa;AAAA,IACjB,UAAUR,CAAY;AAAA,IACtB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAGF,MAAIH,MAAgB,QAAQ;AAC1B,UAAMY,IAAcC,EAAwB;AAAA,MAC1C,QAAQb;AAAA,MACR,WAAWC;AAAA,MACX,YAAYG;AAAA,IAAA,CACb;AAID,IAAIQ,EAAY,SACdF,KAAY;AAAA,UACRD,CAAK;AAAA,YACHG,EAAY,IAAI;AAAA;AAAA,UAMxBF,KAAY;AAAA,QACRD,CAAK;AAAA,UACHG,EAAY,KAAK;AAAA;AAAA;AAAA,EAGzB;AAEA,QAAME,IAAWJ,IAAW,UAAUA,CAAQ,aAAa,IACrDK,IAAQJ,EAAW,KAAK,IAAI;AAElC,SAAO,GAAGG,CAAQ,MAAME,EAAgBtB,EAAM,EAAE,CAAC,UAAUuB,EAAWZ,CAAY,CAAC,IAAIE,CAAU,2BAA2BQ,CAAK,KAAKE,EAAWnB,CAAI,CAAC;AACxJ;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextExporter.d.ts","sourceRoot":"","sources":["../../../../../src/engine/export/exporters/content/TextExporter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAG1D,wBAAgB,UAAU,CACxB,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,EACb,QAAQ,CAAC,EAAE,MAAM,EACjB,KAAK,CAAC,EAAE,WAAW,GAClB,MAAM,
|
|
1
|
+
{"version":3,"file":"TextExporter.d.ts","sourceRoot":"","sources":["../../../../../src/engine/export/exporters/content/TextExporter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAG1D,wBAAgB,UAAU,CACxB,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,EACb,QAAQ,CAAC,EAAE,MAAM,EACjB,KAAK,CAAC,EAAE,WAAW,GAClB,MAAM,CAmBR"}
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import { dataBlockIdAttr as a, escapeHtml as i } from "../../shared/htmlHelpers.js";
|
|
2
|
-
function
|
|
3
|
-
const { text:
|
|
2
|
+
function x(t, m, c, f) {
|
|
3
|
+
const o = t.props, { text: r, align: s = "left", color: e, size: n = "md" } = o, l = {
|
|
4
4
|
sm: "0.875rem",
|
|
5
5
|
md: "1rem",
|
|
6
6
|
lg: "1.125rem"
|
|
7
|
-
},
|
|
8
|
-
`text-align: ${
|
|
7
|
+
}, p = [
|
|
8
|
+
`text-align: ${s}`,
|
|
9
9
|
e ? `color: ${e}` : "color: var(--sg-text, #1f2937)",
|
|
10
|
-
`font-size: ${n
|
|
10
|
+
`font-size: ${l[n]}`
|
|
11
11
|
].filter(Boolean).join("; ");
|
|
12
|
-
return `<p ${a(t.id)} style="${
|
|
12
|
+
return `<p ${a(t.id)} style="${p}">${i(r)}</p>`;
|
|
13
13
|
}
|
|
14
14
|
export {
|
|
15
|
-
|
|
15
|
+
x as exportText
|
|
16
16
|
};
|
|
17
17
|
//# sourceMappingURL=TextExporter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextExporter.js","sources":["../../../../../src/engine/export/exporters/content/TextExporter.ts"],"sourcesContent":["/**\n * Text Block Exporter\n */\n\nimport { Block } from \"../../../schema/siteDocument\";\nimport { ThemeTokens } from \"../../../schema/themeTokens\";\nimport { dataBlockIdAttr, escapeHtml } from \"../../shared/htmlHelpers\";\n\nexport function exportText(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const { text, align = \"left\", color, size = \"md\" } =
|
|
1
|
+
{"version":3,"file":"TextExporter.js","sources":["../../../../../src/engine/export/exporters/content/TextExporter.ts"],"sourcesContent":["/**\n * Text Block Exporter\n */\n\nimport { Block } from \"../../../schema/siteDocument\";\nimport { ThemeTokens } from \"../../../schema/themeTokens\";\nimport { dataBlockIdAttr, escapeHtml } from \"../../shared/htmlHelpers\";\n\nexport function exportText(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const props = block.props as Record<string, any>;\n const { text, align = \"left\", color, size = \"md\" } = props;\n\n const fontSizeMap: Record<string, string> = {\n sm: \"0.875rem\",\n md: \"1rem\",\n lg: \"1.125rem\",\n };\n\n const style = [\n `text-align: ${align}`,\n color ? `color: ${color}` : \"color: var(--sg-text, #1f2937)\",\n `font-size: ${fontSizeMap[size]}`,\n ]\n .filter(Boolean)\n .join(\"; \");\n\n return `<p ${dataBlockIdAttr(block.id)} style=\"${style}\">${escapeHtml(text)}</p>`;\n}\n"],"names":["exportText","block","depth","basePath","theme","props","text","align","color","size","fontSizeMap","style","dataBlockIdAttr","escapeHtml"],"mappings":";AAQO,SAASA,EACdC,GACAC,GACAC,GACAC,GACQ;AACR,QAAMC,IAAQJ,EAAM,OACd,EAAE,MAAAK,GAAM,OAAAC,IAAQ,QAAQ,OAAAC,GAAO,MAAAC,IAAO,SAASJ,GAE/CK,IAAsC;AAAA,IAC1C,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EAAA,GAGAC,IAAQ;AAAA,IACZ,eAAeJ,CAAK;AAAA,IACpBC,IAAQ,UAAUA,CAAK,KAAK;AAAA,IAC5B,cAAcE,EAAYD,CAAI,CAAC;AAAA,EAAA,EAE9B,OAAO,OAAO,EACd,KAAK,IAAI;AAEZ,SAAO,MAAMG,EAAgBX,EAAM,EAAE,CAAC,WAAWU,CAAK,KAAKE,EAAWP,CAAI,CAAC;AAC7E;"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Block } from '../../../schema/siteDocument';
|
|
2
|
+
import { ThemeTokens } from '../../../schema/themeTokens';
|
|
3
|
+
export declare function exportBlogPostCard(block: Block, depth: number, basePath?: string, theme?: ThemeTokens): string;
|
|
4
|
+
export declare function exportBlogPostGrid(block: Block, depth: number, basePath?: string, theme?: ThemeTokens, renderChild?: (block: Block, _depth: number, basePath?: string, theme?: ThemeTokens) => string): string;
|
|
5
|
+
export declare function exportBlogPostDetail(block: Block, depth: number, basePath?: string, theme?: ThemeTokens): string;
|
|
6
|
+
//# sourceMappingURL=BlogPostExporters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BlogPostExporters.d.ts","sourceRoot":"","sources":["../../../../../src/engine/export/exporters/sections/BlogPostExporters.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAY1D,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,EACb,QAAQ,CAAC,EAAE,MAAM,EACjB,KAAK,CAAC,EAAE,WAAW,GAClB,MAAM,CAgGR;AAMD,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,EACb,QAAQ,CAAC,EAAE,MAAM,EACjB,KAAK,CAAC,EAAE,WAAW,EACnB,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,WAAW,KAAK,MAAM,GAC7F,MAAM,CAoDR;AAMD,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,EACb,QAAQ,CAAC,EAAE,MAAM,EACjB,KAAK,CAAC,EAAE,WAAW,GAClB,MAAM,CAyER"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { escapeHtml as e, dataBlockIdAttr as z } from "../../shared/htmlHelpers.js";
|
|
2
|
+
import { generateScopedId as B } from "../../shared/idGenerator.js";
|
|
3
|
+
import { resolveResponsiveColumns as N, generateResponsiveGridStyles as R } from "../../shared/responsiveGridHelper.js";
|
|
4
|
+
function D(r, k, H, A) {
|
|
5
|
+
const {
|
|
6
|
+
title: c,
|
|
7
|
+
excerpt: t,
|
|
8
|
+
image: s,
|
|
9
|
+
date: o,
|
|
10
|
+
category: i,
|
|
11
|
+
authorName: d,
|
|
12
|
+
authorAvatar: l,
|
|
13
|
+
readingTime: m,
|
|
14
|
+
linkHref: p,
|
|
15
|
+
linkText: n,
|
|
16
|
+
variant: y = "default",
|
|
17
|
+
showImage: x = !0,
|
|
18
|
+
showCategory: f = !0,
|
|
19
|
+
showDate: h = !0,
|
|
20
|
+
showAuthor: $ = !1,
|
|
21
|
+
showReadingTime: v = !1
|
|
22
|
+
} = r.props;
|
|
23
|
+
if (y === "horizontal") {
|
|
24
|
+
const g = x && s ? `<div style="width: 260px; min-height: 180px; flex-shrink: 0; background-image: url(${e(s)}); background-size: cover; background-position: center;"></div>` : "", a = [];
|
|
25
|
+
f && i && a.push(e(i)), h && o && a.push(e(o)), v && m && a.push(e(m));
|
|
26
|
+
const w = a.length ? `<p style="font-size: 0.75rem; color: var(--sg-muted-text); margin-bottom: 0.5rem;">${a.join(" · ")}</p>` : "", I = $ && d ? `<div style="display: flex; align-items: center; gap: 0.5rem; margin-top: auto; padding-top: 0.75rem;">${l ? `<img src="${e(l)}" alt="${e(d)}" style="width: 28px; height: 28px; border-radius: 50%; object-fit: cover;" />` : ""}<span style="font-size: 0.8rem; color: var(--sg-muted-text);">${e(d)}</span></div>` : "", T = n ? `<a href="${e(p || "#")}" style="color: var(--sg-primary); font-weight: 500; text-decoration: none; font-size: 0.875rem;">${e(n)}</a>` : "";
|
|
27
|
+
return `<article ${z(r.id)} class="sg-blog-post-card" style="display: flex; background-color: var(--sg-bg); border-radius: var(--sg-card-radius); overflow: hidden; box-shadow: var(--sg-card-shadow);" data-variant="horizontal">${g}<div style="padding: 1.25rem; display: flex; flex-direction: column; flex: 1;">${w}<h3 style="font-size: 1.125rem; font-weight: 600; margin-bottom: 0.5rem;">${e(c)}</h3>${t ? `<p style="color: var(--sg-muted-text); font-size: 0.875rem; margin-bottom: 0.75rem;">${e(t)}</p>` : ""}${T}${I}</div></article>`;
|
|
28
|
+
}
|
|
29
|
+
if (y === "minimal") {
|
|
30
|
+
const g = [];
|
|
31
|
+
f && i && g.push(e(i)), h && o && g.push(e(o)), v && m && g.push(e(m));
|
|
32
|
+
const a = g.length ? `<p style="font-size: 0.75rem; color: var(--sg-muted-text); margin-bottom: 0.5rem;">${g.join(" · ")}</p>` : "", w = n ? `<a href="${e(p || "#")}" style="color: var(--sg-primary); font-weight: 500; text-decoration: none; font-size: 0.875rem;">${e(n)}</a>` : "";
|
|
33
|
+
return `<article ${z(r.id)} class="sg-blog-post-card" style="padding: 1.25rem 0; border-bottom: 1px solid var(--sg-border, #e5e7eb);" data-variant="minimal">${a}<h3 style="font-size: 1.125rem; font-weight: 600; margin-bottom: 0.25rem;">${e(c)}</h3>${t ? `<p style="color: var(--sg-muted-text); font-size: 0.875rem; margin-bottom: 0.5rem;">${e(t)}</p>` : ""}${w}</article>`;
|
|
34
|
+
}
|
|
35
|
+
const u = x && s ? `<div style="height: 200px; background-image: url(${e(s)}); background-size: cover; background-position: center;"></div>` : "", b = [];
|
|
36
|
+
f && i && b.push(e(i)), h && o && b.push(e(o)), v && m && b.push(e(m));
|
|
37
|
+
const P = b.length ? `<p style="font-size: 0.75rem; color: var(--sg-muted-text); margin-bottom: 0.5rem;">${b.join(" · ")}</p>` : "", j = $ && d ? `<div style="display: flex; align-items: center; gap: 0.5rem; margin-top: 1rem;">${l ? `<img src="${e(l)}" alt="${e(d)}" style="width: 32px; height: 32px; border-radius: 50%; object-fit: cover;" />` : ""}<span style="font-size: 0.8rem; color: var(--sg-muted-text);">${e(d)}</span></div>` : "", C = n ? `<a href="${e(p || "#")}" style="color: var(--sg-primary); font-weight: 500; text-decoration: none; font-size: 0.875rem;">${e(n)}</a>` : "";
|
|
38
|
+
return `<article ${z(r.id)} class="sg-blog-post-card" style="background-color: var(--sg-bg); border-radius: var(--sg-card-radius); overflow: hidden; box-shadow: var(--sg-card-shadow);" data-variant="default">${u}<div style="padding: 1.5rem;">${P}<h3 style="font-size: 1.125rem; font-weight: 600; margin-bottom: 0.5rem;">${e(c)}</h3>${t ? `<p style="color: var(--sg-muted-text); font-size: 0.875rem; margin-bottom: 1rem;">${e(t)}</p>` : ""}${C}${j}</div></article>`;
|
|
39
|
+
}
|
|
40
|
+
function G(r, k, H, A, c) {
|
|
41
|
+
const {
|
|
42
|
+
title: t,
|
|
43
|
+
subtitle: s,
|
|
44
|
+
columns: o = 3,
|
|
45
|
+
cards: i = [],
|
|
46
|
+
showViewAll: d = !1,
|
|
47
|
+
viewAllText: l,
|
|
48
|
+
viewAllHref: m
|
|
49
|
+
} = r.props, p = B(r.id || "", "blog-post-grid"), n = N(o, 1, 2, o), { inlineStyles: y, mediaQueries: x } = R(
|
|
50
|
+
p,
|
|
51
|
+
n,
|
|
52
|
+
"2rem"
|
|
53
|
+
), f = t || s ? `<div data-block-group="Cabeçalho" style="text-align: center; margin-bottom: 3rem;">${t ? `<h2 style="font-size: var(--sg-heading-h2); margin-bottom: 0.5rem;">${e(t)}</h2>` : ""}${s ? `<p style="color: var(--sg-muted-text);">${e(s)}</p>` : ""}</div>` : "";
|
|
54
|
+
if (!c)
|
|
55
|
+
throw new Error("exportBlogPostGrid requires renderChild function");
|
|
56
|
+
const h = i.length > 0 ? i.map(
|
|
57
|
+
(v, u) => c(
|
|
58
|
+
{
|
|
59
|
+
id: `${r.id}-card-${u}`,
|
|
60
|
+
type: "blogPostCard",
|
|
61
|
+
props: v
|
|
62
|
+
},
|
|
63
|
+
k + 1,
|
|
64
|
+
H,
|
|
65
|
+
A
|
|
66
|
+
)
|
|
67
|
+
).join("") : '<div style="grid-column: 1 / -1; text-align: center; padding: 3rem 1rem; color: var(--sg-muted-text); border: 2px dashed var(--sg-border, #e5e7eb); border-radius: var(--sg-card-radius, 0.5rem);"><p style="font-size: 1rem; margin-bottom: 0.5rem;">Nenhum post encontrado</p><p style="font-size: 0.875rem;">Os posts aparecerão aqui quando forem publicados.</p></div>', $ = d && l ? `<div data-block-group="Rodapé" style="text-align: center; margin-top: 2.5rem;"><a href="${e(m || "#")}" style="display: inline-block; padding: 0.75rem 1.5rem; background-color: var(--sg-primary); color: #fff; font-weight: 600; border-radius: var(--sg-button-radius); text-decoration: none;">${e(l)}</a></div>` : "";
|
|
68
|
+
return `<style>${x}</style><section ${z(r.id)} style="padding: 4rem 0; background-color: var(--sg-bg);"><div style="max-width: 1200px; margin: 0 auto; padding: 0 1rem;">${f}<div data-block-group="Layout" id="${p}" style="${y}">${h}</div>${$}</div></section>`;
|
|
69
|
+
}
|
|
70
|
+
function V(r, k, H, A) {
|
|
71
|
+
const {
|
|
72
|
+
title: c,
|
|
73
|
+
content: t,
|
|
74
|
+
featuredImage: s,
|
|
75
|
+
date: o,
|
|
76
|
+
category: i,
|
|
77
|
+
readingTime: d,
|
|
78
|
+
tags: l = [],
|
|
79
|
+
showFeaturedImage: m = !0,
|
|
80
|
+
showAuthor: p = !0,
|
|
81
|
+
authorVariant: n = "inline",
|
|
82
|
+
showDate: y = !0,
|
|
83
|
+
showTags: x = !0,
|
|
84
|
+
showReadingTime: f = !0,
|
|
85
|
+
contentMaxWidth: h = "720px"
|
|
86
|
+
} = r.props, $ = m && s ? `<div data-block-group="Mídia" style="width: 100%; height: 400px; background-image: url(${e(s)}); background-size: cover; background-position: center; border-radius: var(--sg-card-radius); margin-bottom: 2rem;"></div>` : "", v = i ? `<span style="display: inline-block; padding: 0.25rem 0.75rem; background-color: var(--sg-primary); color: #fff; border-radius: 999px; font-size: 0.75rem; font-weight: 600; margin-bottom: 1rem;">${e(i)}</span>` : "", u = [];
|
|
87
|
+
y && o && u.push(e(o)), f && d && u.push(e(d));
|
|
88
|
+
const b = u.length ? `<p style="color: var(--sg-muted-text); font-size: 0.875rem; margin-bottom: 1.5rem;">${u.join(" · ")}</p>` : "", P = `<h1 data-block-group="Conteúdo" style="font-size: var(--sg-heading-h1, 2.25rem); font-weight: 700; margin-bottom: 0.75rem; line-height: 1.2;">${e(c)}</h1>`, j = t ? `<div class="sg-blog-post-content" style="font-size: 1.0625rem; line-height: 1.75; color: var(--sg-text);">${t}</div>` : "", C = '<div style="width:56px;height:56px;border-radius:50%;background:linear-gradient(135deg, var(--sg-primary, #6366f1) 0%, #818cf8 100%);display:flex;align-items:center;justify-content:center;flex-shrink:0;color:#fff;font-size:1.5rem;font-weight:700;">A</div>', g = '<div style="width:40px;height:40px;border-radius:50%;background:linear-gradient(135deg, var(--sg-primary, #6366f1) 0%, #818cf8 100%);display:flex;align-items:center;justify-content:center;flex-shrink:0;color:#fff;font-size:1.1rem;font-weight:700;">A</div>';
|
|
89
|
+
let a = "";
|
|
90
|
+
p && (n === "card" ? a = `<div data-block-group="Autor" style="display:flex;align-items:flex-start;gap:1rem;margin-top:3rem;padding:1.25rem;border-radius:var(--sg-card-radius, 0.75rem);background-color:var(--sg-surface, #f9fafb);">${C}<div><div style="font-size:0.75rem;color:var(--sg-muted-text);text-transform:uppercase;letter-spacing:0.05em;margin-bottom:0.125rem;">Escrito por</div><div style="font-weight:600;font-size:1rem;">Nome do Autor</div><p style="color:var(--sg-muted-text);font-size:0.875rem;margin:0.25rem 0 0;">Bio do autor carregada do banco de dados.</p></div></div>` : n === "minimal" ? a = '<p data-block-group="Autor" style="margin-top:3rem;padding-top:2rem;border-top:1px solid var(--sg-border, #e5e7eb);color:var(--sg-muted-text);font-size:0.9375rem;">Escrito por <span style="font-weight:600;color:var(--sg-text);">Nome do Autor</span></p>' : a = `<div data-block-group="Autor" style="display:flex;align-items:center;gap:0.75rem;margin-top:3rem;padding-top:2rem;border-top:1px solid var(--sg-border, #e5e7eb);">${g}<div><div style="font-size:0.75rem;color:var(--sg-muted-text);">Escrito por</div><div style="font-weight:600;font-size:0.9375rem;">Nome do Autor</div></div></div>`);
|
|
91
|
+
const w = x && l.length > 0 ? `<div data-block-group="Visibilidade" style="margin-top: 2rem; display: flex; flex-wrap: wrap; gap: 0.5rem;">${l.map(
|
|
92
|
+
(I) => `<span style="display: inline-block; padding: 0.25rem 0.75rem; background-color: var(--sg-surface, #f3f4f6); color: var(--sg-text); border-radius: 999px; font-size: 0.75rem;">${e(I)}</span>`
|
|
93
|
+
).join("")}</div>` : "";
|
|
94
|
+
return `<article ${z(r.id)} class="sg-blog-post-detail" style="padding: 4rem 0; background-color: var(--sg-bg);"><div style="max-width: ${e(h)}; margin: 0 auto; padding: 0 1rem;">${$}${v}${P}${b}${j}${a}${w}</div></article>`;
|
|
95
|
+
}
|
|
96
|
+
export {
|
|
97
|
+
D as exportBlogPostCard,
|
|
98
|
+
V as exportBlogPostDetail,
|
|
99
|
+
G as exportBlogPostGrid
|
|
100
|
+
};
|
|
101
|
+
//# sourceMappingURL=BlogPostExporters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BlogPostExporters.js","sources":["../../../../../src/engine/export/exporters/sections/BlogPostExporters.ts"],"sourcesContent":["/**\n * Blog Post Exporters\n * BlogPostCard, BlogPostGrid, BlogPostDetail\n * Mobile-first responsive layouts for blog plugin blocks\n */\n\nimport { Block } from \"../../../schema/siteDocument\";\nimport { ThemeTokens } from \"../../../schema/themeTokens\";\nimport { dataBlockIdAttr, escapeHtml } from \"../../shared/htmlHelpers\";\nimport { generateScopedId } from \"../../shared/idGenerator\";\nimport {\n resolveResponsiveColumns,\n generateResponsiveGridStyles,\n} from \"../../shared/responsiveGridHelper\";\n\n// ---------------------------------------------------------------------------\n// BlogPostCard\n// ---------------------------------------------------------------------------\n\nexport function exportBlogPostCard(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const {\n title,\n excerpt,\n image,\n date,\n category,\n authorName,\n authorAvatar,\n readingTime,\n linkHref,\n linkText,\n variant = \"default\",\n showImage = true,\n showCategory = true,\n showDate = true,\n showAuthor = false,\n showReadingTime = false,\n } = (block as any).props;\n\n // ---------- variant: horizontal ----------\n if (variant === \"horizontal\") {\n const imgHtml =\n showImage && image\n ? `<div style=\"width: 260px; min-height: 180px; flex-shrink: 0; background-image: url(${escapeHtml(image)}); background-size: cover; background-position: center;\"></div>`\n : \"\";\n\n const metaParts: string[] = [];\n if (showCategory && category) metaParts.push(escapeHtml(category));\n if (showDate && date) metaParts.push(escapeHtml(date));\n if (showReadingTime && readingTime) metaParts.push(escapeHtml(readingTime));\n const metaHtml = metaParts.length\n ? `<p style=\"font-size: 0.75rem; color: var(--sg-muted-text); margin-bottom: 0.5rem;\">${metaParts.join(\" · \")}</p>`\n : \"\";\n\n const authorHtml =\n showAuthor && authorName\n ? `<div style=\"display: flex; align-items: center; gap: 0.5rem; margin-top: auto; padding-top: 0.75rem;\">${\n authorAvatar\n ? `<img src=\"${escapeHtml(authorAvatar)}\" alt=\"${escapeHtml(authorName)}\" style=\"width: 28px; height: 28px; border-radius: 50%; object-fit: cover;\" />`\n : \"\"\n }<span style=\"font-size: 0.8rem; color: var(--sg-muted-text);\">${escapeHtml(authorName)}</span></div>`\n : \"\";\n\n const linkHtml = linkText\n ? `<a href=\"${escapeHtml(linkHref || \"#\")}\" style=\"color: var(--sg-primary); font-weight: 500; text-decoration: none; font-size: 0.875rem;\">${escapeHtml(linkText)}</a>`\n : \"\";\n\n return `<article ${dataBlockIdAttr(block.id)} class=\"sg-blog-post-card\" style=\"display: flex; background-color: var(--sg-bg); border-radius: var(--sg-card-radius); overflow: hidden; box-shadow: var(--sg-card-shadow);\" data-variant=\"horizontal\">${imgHtml}<div style=\"padding: 1.25rem; display: flex; flex-direction: column; flex: 1;\">${metaHtml}<h3 style=\"font-size: 1.125rem; font-weight: 600; margin-bottom: 0.5rem;\">${escapeHtml(title)}</h3>${excerpt ? `<p style=\"color: var(--sg-muted-text); font-size: 0.875rem; margin-bottom: 0.75rem;\">${escapeHtml(excerpt)}</p>` : \"\"}${linkHtml}${authorHtml}</div></article>`;\n }\n\n // ---------- variant: minimal ----------\n if (variant === \"minimal\") {\n const metaParts: string[] = [];\n if (showCategory && category) metaParts.push(escapeHtml(category));\n if (showDate && date) metaParts.push(escapeHtml(date));\n if (showReadingTime && readingTime) metaParts.push(escapeHtml(readingTime));\n const metaHtml = metaParts.length\n ? `<p style=\"font-size: 0.75rem; color: var(--sg-muted-text); margin-bottom: 0.5rem;\">${metaParts.join(\" · \")}</p>`\n : \"\";\n\n const linkHtml = linkText\n ? `<a href=\"${escapeHtml(linkHref || \"#\")}\" style=\"color: var(--sg-primary); font-weight: 500; text-decoration: none; font-size: 0.875rem;\">${escapeHtml(linkText)}</a>`\n : \"\";\n\n return `<article ${dataBlockIdAttr(block.id)} class=\"sg-blog-post-card\" style=\"padding: 1.25rem 0; border-bottom: 1px solid var(--sg-border, #e5e7eb);\" data-variant=\"minimal\">${metaHtml}<h3 style=\"font-size: 1.125rem; font-weight: 600; margin-bottom: 0.25rem;\">${escapeHtml(title)}</h3>${excerpt ? `<p style=\"color: var(--sg-muted-text); font-size: 0.875rem; margin-bottom: 0.5rem;\">${escapeHtml(excerpt)}</p>` : \"\"}${linkHtml}</article>`;\n }\n\n // ---------- variant: default ----------\n const imgHtml =\n showImage && image\n ? `<div style=\"height: 200px; background-image: url(${escapeHtml(image)}); background-size: cover; background-position: center;\"></div>`\n : \"\";\n\n const metaParts: string[] = [];\n if (showCategory && category) metaParts.push(escapeHtml(category));\n if (showDate && date) metaParts.push(escapeHtml(date));\n if (showReadingTime && readingTime) metaParts.push(escapeHtml(readingTime));\n const metaHtml = metaParts.length\n ? `<p style=\"font-size: 0.75rem; color: var(--sg-muted-text); margin-bottom: 0.5rem;\">${metaParts.join(\" · \")}</p>`\n : \"\";\n\n const authorHtml =\n showAuthor && authorName\n ? `<div style=\"display: flex; align-items: center; gap: 0.5rem; margin-top: 1rem;\">${\n authorAvatar\n ? `<img src=\"${escapeHtml(authorAvatar)}\" alt=\"${escapeHtml(authorName)}\" style=\"width: 32px; height: 32px; border-radius: 50%; object-fit: cover;\" />`\n : \"\"\n }<span style=\"font-size: 0.8rem; color: var(--sg-muted-text);\">${escapeHtml(authorName)}</span></div>`\n : \"\";\n\n const linkHtml = linkText\n ? `<a href=\"${escapeHtml(linkHref || \"#\")}\" style=\"color: var(--sg-primary); font-weight: 500; text-decoration: none; font-size: 0.875rem;\">${escapeHtml(linkText)}</a>`\n : \"\";\n\n return `<article ${dataBlockIdAttr(block.id)} class=\"sg-blog-post-card\" style=\"background-color: var(--sg-bg); border-radius: var(--sg-card-radius); overflow: hidden; box-shadow: var(--sg-card-shadow);\" data-variant=\"default\">${imgHtml}<div style=\"padding: 1.5rem;\">${metaHtml}<h3 style=\"font-size: 1.125rem; font-weight: 600; margin-bottom: 0.5rem;\">${escapeHtml(title)}</h3>${excerpt ? `<p style=\"color: var(--sg-muted-text); font-size: 0.875rem; margin-bottom: 1rem;\">${escapeHtml(excerpt)}</p>` : \"\"}${linkHtml}${authorHtml}</div></article>`;\n}\n\n// ---------------------------------------------------------------------------\n// BlogPostGrid\n// ---------------------------------------------------------------------------\n\nexport function exportBlogPostGrid(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n renderChild?: (block: Block, _depth: number, basePath?: string, theme?: ThemeTokens) => string,\n): string {\n const {\n title,\n subtitle,\n columns = 3,\n cards = [],\n showViewAll = false,\n viewAllText,\n viewAllHref,\n } = (block as any).props;\n\n // Responsive grid: 1 col (mobile) -> 2 cols (tablet) -> N cols (desktop)\n const gridId = generateScopedId(block.id || \"\", \"blog-post-grid\");\n const responsiveConfig = resolveResponsiveColumns(columns, 1, 2, columns);\n const { inlineStyles, mediaQueries } = generateResponsiveGridStyles(\n gridId,\n responsiveConfig,\n \"2rem\",\n );\n\n const headerHtml =\n title || subtitle\n ? `<div data-block-group=\"Cabeçalho\" style=\"text-align: center; margin-bottom: 3rem;\">${title ? `<h2 style=\"font-size: var(--sg-heading-h2); margin-bottom: 0.5rem;\">${escapeHtml(title)}</h2>` : \"\"}${subtitle ? `<p style=\"color: var(--sg-muted-text);\">${escapeHtml(subtitle)}</p>` : \"\"}</div>`\n : \"\";\n\n if (!renderChild) {\n throw new Error(\"exportBlogPostGrid requires renderChild function\");\n }\n\n const cardsHtml = cards.length > 0\n ? cards\n .map((c: any, i: number) =>\n renderChild(\n {\n id: `${block.id}-card-${i}`,\n type: \"blogPostCard\",\n props: c,\n } as Block,\n depth + 1,\n basePath,\n theme,\n ),\n )\n .join(\"\")\n : `<div style=\"grid-column: 1 / -1; text-align: center; padding: 3rem 1rem; color: var(--sg-muted-text); border: 2px dashed var(--sg-border, #e5e7eb); border-radius: var(--sg-card-radius, 0.5rem);\"><p style=\"font-size: 1rem; margin-bottom: 0.5rem;\">Nenhum post encontrado</p><p style=\"font-size: 0.875rem;\">Os posts aparecerão aqui quando forem publicados.</p></div>`;\n\n const viewAllHtml =\n showViewAll && viewAllText\n ? `<div data-block-group=\"Rodapé\" style=\"text-align: center; margin-top: 2.5rem;\"><a href=\"${escapeHtml(viewAllHref || \"#\")}\" style=\"display: inline-block; padding: 0.75rem 1.5rem; background-color: var(--sg-primary); color: #fff; font-weight: 600; border-radius: var(--sg-button-radius); text-decoration: none;\">${escapeHtml(viewAllText)}</a></div>`\n : \"\";\n\n return `<style>${mediaQueries}</style><section ${dataBlockIdAttr(block.id)} style=\"padding: 4rem 0; background-color: var(--sg-bg);\"><div style=\"max-width: 1200px; margin: 0 auto; padding: 0 1rem;\">${headerHtml}<div data-block-group=\"Layout\" id=\"${gridId}\" style=\"${inlineStyles}\">${cardsHtml}</div>${viewAllHtml}</div></section>`;\n}\n\n// ---------------------------------------------------------------------------\n// BlogPostDetail\n// ---------------------------------------------------------------------------\n\nexport function exportBlogPostDetail(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const {\n title,\n content,\n featuredImage,\n date,\n category,\n readingTime,\n tags = [],\n showFeaturedImage = true,\n showAuthor = true,\n authorVariant = \"inline\",\n showDate = true,\n showTags = true,\n showReadingTime = true,\n contentMaxWidth = \"720px\",\n } = (block as any).props;\n\n // Featured image banner\n const featuredImageHtml =\n showFeaturedImage && featuredImage\n ? `<div data-block-group=\"Mídia\" style=\"width: 100%; height: 400px; background-image: url(${escapeHtml(featuredImage)}); background-size: cover; background-position: center; border-radius: var(--sg-card-radius); margin-bottom: 2rem;\"></div>`\n : \"\";\n\n // Category badge\n const categoryHtml = category\n ? `<span style=\"display: inline-block; padding: 0.25rem 0.75rem; background-color: var(--sg-primary); color: #fff; border-radius: 999px; font-size: 0.75rem; font-weight: 600; margin-bottom: 1rem;\">${escapeHtml(category)}</span>`\n : \"\";\n\n // Meta line (date + reading time)\n const metaParts: string[] = [];\n if (showDate && date) metaParts.push(escapeHtml(date));\n if (showReadingTime && readingTime) metaParts.push(escapeHtml(readingTime));\n const metaHtml = metaParts.length\n ? `<p style=\"color: var(--sg-muted-text); font-size: 0.875rem; margin-bottom: 1.5rem;\">${metaParts.join(\" · \")}</p>`\n : \"\";\n\n // Title\n const titleHtml = `<h1 data-block-group=\"Conteúdo\" style=\"font-size: var(--sg-heading-h1, 2.25rem); font-weight: 700; margin-bottom: 0.75rem; line-height: 1.2;\">${escapeHtml(title)}</h1>`;\n\n // Content — trusted HTML from backend, not escaped\n const contentHtml = content\n ? `<div class=\"sg-blog-post-content\" style=\"font-size: 1.0625rem; line-height: 1.75; color: var(--sg-text);\">${content}</div>`\n : \"\";\n\n // Author — placeholder structure (real data injected by ContentProvider at runtime)\n const avatarPlaceholder = `<div style=\"width:56px;height:56px;border-radius:50%;background:linear-gradient(135deg, var(--sg-primary, #6366f1) 0%, #818cf8 100%);display:flex;align-items:center;justify-content:center;flex-shrink:0;color:#fff;font-size:1.5rem;font-weight:700;\">A</div>`;\n const avatarSmall = `<div style=\"width:40px;height:40px;border-radius:50%;background:linear-gradient(135deg, var(--sg-primary, #6366f1) 0%, #818cf8 100%);display:flex;align-items:center;justify-content:center;flex-shrink:0;color:#fff;font-size:1.1rem;font-weight:700;\">A</div>`;\n\n let authorHtml = \"\";\n if (showAuthor) {\n if (authorVariant === \"card\") {\n authorHtml = `<div data-block-group=\"Autor\" style=\"display:flex;align-items:flex-start;gap:1rem;margin-top:3rem;padding:1.25rem;border-radius:var(--sg-card-radius, 0.75rem);background-color:var(--sg-surface, #f9fafb);\">${avatarPlaceholder}<div><div style=\"font-size:0.75rem;color:var(--sg-muted-text);text-transform:uppercase;letter-spacing:0.05em;margin-bottom:0.125rem;\">Escrito por</div><div style=\"font-weight:600;font-size:1rem;\">Nome do Autor</div><p style=\"color:var(--sg-muted-text);font-size:0.875rem;margin:0.25rem 0 0;\">Bio do autor carregada do banco de dados.</p></div></div>`;\n } else if (authorVariant === \"minimal\") {\n authorHtml = `<p data-block-group=\"Autor\" style=\"margin-top:3rem;padding-top:2rem;border-top:1px solid var(--sg-border, #e5e7eb);color:var(--sg-muted-text);font-size:0.9375rem;\">Escrito por <span style=\"font-weight:600;color:var(--sg-text);\">Nome do Autor</span></p>`;\n } else {\n // inline (default)\n authorHtml = `<div data-block-group=\"Autor\" style=\"display:flex;align-items:center;gap:0.75rem;margin-top:3rem;padding-top:2rem;border-top:1px solid var(--sg-border, #e5e7eb);\">${avatarSmall}<div><div style=\"font-size:0.75rem;color:var(--sg-muted-text);\">Escrito por</div><div style=\"font-weight:600;font-size:0.9375rem;\">Nome do Autor</div></div></div>`;\n }\n }\n\n // Tags\n const tagsHtml =\n showTags && tags.length > 0\n ? `<div data-block-group=\"Visibilidade\" style=\"margin-top: 2rem; display: flex; flex-wrap: wrap; gap: 0.5rem;\">${tags\n .map(\n (tag: string) =>\n `<span style=\"display: inline-block; padding: 0.25rem 0.75rem; background-color: var(--sg-surface, #f3f4f6); color: var(--sg-text); border-radius: 999px; font-size: 0.75rem;\">${escapeHtml(tag)}</span>`,\n )\n .join(\"\")}</div>`\n : \"\";\n\n return `<article ${dataBlockIdAttr(block.id)} class=\"sg-blog-post-detail\" style=\"padding: 4rem 0; background-color: var(--sg-bg);\"><div style=\"max-width: ${escapeHtml(contentMaxWidth)}; margin: 0 auto; padding: 0 1rem;\">${featuredImageHtml}${categoryHtml}${titleHtml}${metaHtml}${contentHtml}${authorHtml}${tagsHtml}</div></article>`;\n}\n"],"names":["exportBlogPostCard","block","depth","basePath","theme","title","excerpt","image","date","category","authorName","authorAvatar","readingTime","linkHref","linkText","variant","showImage","showCategory","showDate","showAuthor","showReadingTime","imgHtml","escapeHtml","metaParts","metaHtml","authorHtml","linkHtml","dataBlockIdAttr","exportBlogPostGrid","renderChild","subtitle","columns","cards","showViewAll","viewAllText","viewAllHref","gridId","generateScopedId","responsiveConfig","resolveResponsiveColumns","inlineStyles","mediaQueries","generateResponsiveGridStyles","headerHtml","cardsHtml","c","i","viewAllHtml","exportBlogPostDetail","content","featuredImage","tags","showFeaturedImage","authorVariant","showTags","contentMaxWidth","featuredImageHtml","categoryHtml","titleHtml","contentHtml","avatarPlaceholder","avatarSmall","tagsHtml","tag"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FooterExporter.d.ts","sourceRoot":"","sources":["../../../../../src/engine/export/exporters/sections/FooterExporter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"FooterExporter.d.ts","sourceRoot":"","sources":["../../../../../src/engine/export/exporters/sections/FooterExporter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAS1D,wBAAgB,YAAY,CAC1B,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,EACb,QAAQ,CAAC,EAAE,MAAM,EACjB,KAAK,CAAC,EAAE,WAAW,GAClB,MAAM,CAmHR"}
|
|
@@ -1,48 +1,41 @@
|
|
|
1
|
-
import { escapeHtml as t, dataBlockIdAttr as
|
|
2
|
-
import { generateScopedId as
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
twitter: "M23 3a10.9 10.9 0 0 1-3.14 1.53 4.48 4.48 0 0 0-7.86 3v1A10.66 10.66 0 0 1 3 4s-4 9 5 13a11.64 11.64 0 0 1-7 2c9 5 20 0 20-11.5a4.5 4.5 0 0 0-.08-.83A7.72 7.72 0 0 0 23 3z",
|
|
7
|
-
instagram: "M16 11.37A4 4 0 1 1 12.63 8 4 4 0 0 1 16 11.37zM17.5 6.5h.01M7 2h10a5 5 0 0 1 5 5v10a5 5 0 0 1-5 5H7a5 5 0 0 1-5-5V7a5 5 0 0 1 5-5z",
|
|
8
|
-
linkedin: "M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2 2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6zM2 9h4v12H2zM4 2a2 2 0 1 1 0 4 2 2 0 0 1 0-4z",
|
|
9
|
-
youtube: "M22.54 6.42a2.78 2.78 0 0 0-1.94-2C18.88 4 12 4 12 4s-6.88 0-8.6.46a2.78 2.78 0 0 0-1.94 2A29 29 0 0 0 1 11.75a29 29 0 0 0 .46 5.33A2.78 2.78 0 0 0 3.4 19c1.72.46 8.6.46 8.6.46s6.88 0 8.6-.46a2.78 2.78 0 0 0 1.94-2 29 29 0 0 0 .46-5.25 29 29 0 0 0-.46-5.33zM9.75 15.02V8.48l5.75 3.27-5.75 3.27z",
|
|
10
|
-
github: "M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"
|
|
11
|
-
};
|
|
12
|
-
function q(r, B, E, b) {
|
|
1
|
+
import { escapeHtml as t, dataBlockIdAttr as A } from "../../shared/htmlHelpers.js";
|
|
2
|
+
import { generateScopedId as B } from "../../shared/idGenerator.js";
|
|
3
|
+
import { socialIconPaths as y } from "../../../shared/socialIcons.js";
|
|
4
|
+
import { generateLinkHoverStyles as P } from "../../../shared/hoverEffects/linkHover.js";
|
|
5
|
+
function G(r, E, F, b) {
|
|
13
6
|
const {
|
|
14
7
|
logo: o,
|
|
15
8
|
description: i,
|
|
16
9
|
columns: n = [],
|
|
17
10
|
social: l = [],
|
|
18
|
-
copyright:
|
|
11
|
+
copyright: m,
|
|
19
12
|
variant: x = "simple",
|
|
20
13
|
// Hover effects
|
|
21
|
-
linkHoverEffect:
|
|
14
|
+
linkHoverEffect: g = "underline",
|
|
22
15
|
linkHoverIntensity: k = 50,
|
|
23
16
|
linkHoverColor: H
|
|
24
|
-
} = r.props,
|
|
25
|
-
effect:
|
|
17
|
+
} = r.props, w = H || b?.colors?.primary || "#3b82f6", s = P({
|
|
18
|
+
effect: g,
|
|
26
19
|
intensity: k,
|
|
27
|
-
hoverColor:
|
|
28
|
-
}),
|
|
29
|
-
let
|
|
30
|
-
|
|
31
|
-
${
|
|
32
|
-
${
|
|
20
|
+
hoverColor: w
|
|
21
|
+
}), c = `[data-block-id="${r.id}"]`;
|
|
22
|
+
let a = "";
|
|
23
|
+
g !== "none" && (s.base && (a += `
|
|
24
|
+
${c} .sg-footer__link {
|
|
25
|
+
${s.base}
|
|
33
26
|
transition: all 0.3s ease;
|
|
34
27
|
}
|
|
35
|
-
`),
|
|
36
|
-
${
|
|
37
|
-
${
|
|
28
|
+
`), a += `
|
|
29
|
+
${c} .sg-footer__link:hover {
|
|
30
|
+
${s.hover}
|
|
38
31
|
}
|
|
39
32
|
`);
|
|
40
|
-
const p = typeof o == "string" ? o : o?.src ?? "",
|
|
41
|
-
(e) => `<a href="${t(e.href)}" target="_blank" rel="noopener noreferrer" style="color: var(--sg-muted-text, #64748b); text-decoration: none;"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="${
|
|
42
|
-
).join(""), v = p ? `<img src="${t(p)}" alt="${t(
|
|
43
|
-
let
|
|
44
|
-
if (
|
|
45
|
-
const e =
|
|
33
|
+
const p = typeof o == "string" ? o : o?.src ?? "", C = typeof o == "string" ? "Logo" : o?.alt ?? "Logo", _ = x === "multi-column" && n.length > 0, f = l.map(
|
|
34
|
+
(e) => `<a href="${t(e.href)}" target="_blank" rel="noopener noreferrer" style="color: var(--sg-muted-text, #64748b); text-decoration: none;"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="${y[e.platform] || y.github}"/></svg></a>`
|
|
35
|
+
).join(""), v = p ? `<img src="${t(p)}" alt="${t(C)}" style="height: 2.5rem; object-fit: contain; margin-bottom: 1rem;" />` : "", $ = i ? `<p style="color: var(--sg-muted-text, #64748b); font-size: 0.875rem; line-height: 1.6; margin-bottom: 1rem;">${t(i)}</p>` : "", j = l.length > 0 ? `<div style="display: flex; gap: 0.75rem;">${f}</div>` : "";
|
|
36
|
+
let d = "";
|
|
37
|
+
if (_) {
|
|
38
|
+
const e = B(r.id || "", "footer-grid"), I = `
|
|
46
39
|
#${e} {
|
|
47
40
|
display: grid;
|
|
48
41
|
grid-template-columns: 1fr;
|
|
@@ -58,19 +51,19 @@ function q(r, B, E, b) {
|
|
|
58
51
|
grid-template-columns: 2fr repeat(${n.length}, 1fr);
|
|
59
52
|
}
|
|
60
53
|
}
|
|
61
|
-
`,
|
|
62
|
-
const
|
|
63
|
-
(
|
|
54
|
+
`, z = n.map((h) => {
|
|
55
|
+
const S = (h.links || []).map(
|
|
56
|
+
(u) => `<li><a href="${t(u.href)}" class="sg-footer__link" style="color: var(--sg-muted-text, #64748b); text-decoration: none; font-size: 0.875rem; display: inline-block; padding: 0.25rem 0; transition: all 0.3s ease;">${t(u.text)}</a></li>`
|
|
64
57
|
).join("");
|
|
65
|
-
return `<div><h4 style="font-weight: 600; margin-bottom: 1rem; color: var(--sg-text, #0f172a);">${t(
|
|
58
|
+
return `<div data-block-group="🔗 Links"><h4 style="font-weight: 600; margin-bottom: 1rem; color: var(--sg-text, #0f172a);">${t(h.title)}</h4><ul style="list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 0.5rem;">${S}</ul></div>`;
|
|
66
59
|
}).join("");
|
|
67
|
-
|
|
60
|
+
d = `<style>${I}${a}</style><div id="${e}" style="margin-bottom: 2rem;"><div data-block-group="Logo">${v}${$}${j}</div>${z}</div>`;
|
|
68
61
|
} else
|
|
69
|
-
|
|
70
|
-
const
|
|
71
|
-
return `<footer ${
|
|
62
|
+
d = `<div data-block-group="Logo" style="text-align: center; margin-bottom: 1.5rem;">${v}${$ ? `<p style="color: var(--sg-muted-text, #64748b); font-size: 0.875rem; max-width: 400px; margin: 0 auto 1rem;">${t(i || "")}</p>` : ""}${l.length > 0 ? `<div style="display: flex; justify-content: center; gap: 1rem;">${f}</div>` : ""}</div>`;
|
|
63
|
+
const L = m ? `<div style="border-top: 1px solid var(--sg-border, #e5e7eb); padding-top: 1.5rem; text-align: center;"><p style="color: var(--sg-muted-text, #64748b); font-size: 0.875rem; margin: 0;">${t(m)}</p></div>` : "";
|
|
64
|
+
return `<footer ${A(r.id)} style="background-color: var(--sg-surface, #f8fafc); border-top: 1px solid var(--sg-border, #e5e7eb); padding: 3rem 0 1.5rem;"><div style="max-width: 1200px; margin: 0 auto; padding: 0 1rem;">${d}${L}</div></footer>`;
|
|
72
65
|
}
|
|
73
66
|
export {
|
|
74
|
-
|
|
67
|
+
G as exportFooter
|
|
75
68
|
};
|
|
76
69
|
//# sourceMappingURL=FooterExporter.js.map
|