@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":"MarketingExporters.js","sources":["../../../../../src/engine/export/exporters/sections/MarketingExporters.ts"],"sourcesContent":["/**\n * Marketing Sections Exporters\n * Feature, FeatureGrid, Pricing, Testimonials, FAQ, CTA, Stats, Logo Cloud, etc.\n * Mobile-first responsive grids with media queries\n */\n\nimport { Block } from \"../../../schema/siteDocument\";\nimport { ThemeTokens } from \"../../../schema/themeTokens\";\nimport { dataBlockIdAttr, blockIdAttr, escapeHtml, resolveHref, linkTargetAttr } from \"../../shared/htmlHelpers\";\nimport { generateScopedId } from \"../../shared/idGenerator\";\nimport { resolveResponsiveColumns, generateResponsiveGridStyles } from \"../../shared/responsiveGridHelper\";\nimport {\n generateButtonHoverStyles,\n generateButtonOverlayCSS,\n getButtonHoverKeyframes,\n type ButtonHoverEffect,\n type ButtonHoverOverlay,\n} from \"../../../shared/hoverEffects\";\n\nexport function exportFeature(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const { icon, title, description } = (block as any).props;\n const iconHtml = icon\n ? `<div style=\"width: 3rem; height: 3rem; background-color: var(--sg-primary); border-radius: 0.75rem; display: flex; align-items: center; justify-content: center; margin: 0 auto 1rem; color: #fff;\">[★]</div>`\n : \"\";\n return `<div ${dataBlockIdAttr(block.id)} style=\"padding: 1.5rem; text-align: center;\">${iconHtml}<h3 style=\"font-size: 1.25rem; font-weight: 600; margin-bottom: 0.5rem;\">${escapeHtml(title)}</h3><p style=\"color: var(--sg-muted-text); font-size: 0.875rem;\">${escapeHtml(description)}</p></div>`;\n}\n\nexport function exportFeatureGrid(\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 variant = \"default\",\n features = [],\n } = (block as any).props;\n\n // Responsive grid: 1 col (mobile) → 2 cols (tablet) → N cols (desktop)\n const gridId = generateScopedId(block.id || \"\", \"feature-grid\");\n const responsiveConfig = resolveResponsiveColumns(columns, 1, 2, columns);\n const { inlineStyles, mediaQueries } = generateResponsiveGridStyles(gridId, responsiveConfig, \"2rem\");\n\n const isImageCards = variant === \"image-cards\";\n const headerHtml =\n title || subtitle\n ? `<div 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); font-size: 1.125rem;\">${escapeHtml(subtitle)}</p>` : \"\"}</div>`\n : \"\";\n\n const featuresHtml = features\n .map((f: any) => {\n const imgBlock =\n isImageCards && f.image\n ? `<div style=\"width: 100%; height: 200px; background-image: url(${escapeHtml(f.image)}); background-size: cover; background-position: center;\"></div>`\n : \"\";\n const iconBlock =\n !isImageCards && f.icon\n ? `<div style=\"width: 3rem; height: 3rem; background-color: var(--sg-primary); border-radius: 0.75rem; display: flex; align-items: center; justify-content: center; margin-bottom: 1rem; color: #fff;\">[★]</div>`\n : \"\";\n const linkBlock = f.link\n ? `<a href=\"${escapeHtml(f.link.href || \"#\")}\" style=\"display: inline-block; margin-top: 0.75rem; color: var(--sg-primary); font-weight: 500; text-decoration: none; border: 1px solid var(--sg-primary); padding: 0.5rem 1rem; border-radius: var(--sg-button-radius);\">${escapeHtml(f.link.text)}</a>`\n : \"\";\n const innerPadding = isImageCards && f.image ? \"1.5rem\" : \"2rem\";\n return `<div style=\"background-color: var(--sg-bg); border-radius: 0.75rem; padding: ${isImageCards && f.image ? 0 : \"2rem\"}; box-shadow: var(--sg-card-shadow); overflow: hidden;\">${imgBlock}<div style=\"padding: ${innerPadding};\">${iconBlock}<h3 style=\"font-size: 1.25rem; font-weight: 600; margin-bottom: 0.5rem;\">${escapeHtml(f.title)}</h3><p style=\"color: var(--sg-muted-text);\">${escapeHtml(f.description)}</p>${linkBlock}</div></div>`;\n })\n .join(\"\");\n\n return `<style>${mediaQueries}</style><section ${blockIdAttr(block.id)} ${dataBlockIdAttr(block.id)} style=\"padding: 4rem 0; background-color: var(--sg-surface);\"><div style=\"max-width: 1200px; margin: 0 auto; padding: 0 1rem;\">${headerHtml}<div id=\"${gridId}\" style=\"${inlineStyles}\">${featuresHtml}</div></div></section>`;\n}\n\nexport function exportCta(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const {\n title,\n description: ctaDesc,\n primaryButton,\n secondaryButton,\n variant = \"centered\",\n // Button size\n buttonSize = \"md\",\n // Button hover effects\n buttonHoverEffect = \"scale\",\n buttonHoverIntensity = 50,\n buttonHoverOverlay = \"none\",\n buttonHoverIconName = \"arrow-right\",\n } = (block as any).props;\n\n // Size-based styles\n const sizeStyles: Record<string, { padding: string; fontSize: string }> = {\n sm: { padding: \"0.5rem 1rem\", fontSize: \"0.875rem\" },\n md: { padding: \"0.75rem 1.5rem\", fontSize: \"1rem\" },\n lg: { padding: \"1rem 2rem\", fontSize: \"1.125rem\" },\n };\n const btnSize = sizeStyles[buttonSize] || sizeStyles.md;\n\n // Responsive buttons: column (mobile) → row (desktop)\n const ctaId = generateScopedId(block.id || \"\", \"cta-actions\");\n const scope = `[data-block-id=\"${block.id}\"]`;\n\n const isGradient = variant === \"gradient\";\n const primaryColor = theme?.colors?.primary || \"#3b82f6\";\n const primaryText = theme?.colors?.primaryText || \"#ffffff\";\n\n // Button colors depend on gradient variant\n const primaryBtnBg = isGradient ? \"#fff\" : primaryColor;\n const primaryBtnText = isGradient ? primaryColor : primaryText;\n const secondaryBtnBg = \"transparent\";\n const secondaryBtnText = isGradient ? \"#fff\" : primaryColor;\n const secondaryBtnBorder = isGradient ? \"#fff\" : primaryColor;\n\n let buttonsCss = `\n @media (max-width: 640px) {\n #${ctaId} {\n flex-direction: column !important;\n width: 100%;\n }\n #${ctaId} a {\n width: 100% !important;\n text-align: center;\n }\n }\n `;\n\n // Generate hover CSS\n if (buttonHoverEffect !== \"none\") {\n // Primary button hover\n const primaryHoverResult = generateButtonHoverStyles({\n effect: buttonHoverEffect as ButtonHoverEffect,\n intensity: buttonHoverIntensity,\n buttonColor: primaryBtnBg,\n buttonTextColor: primaryBtnText,\n variant: \"solid\",\n });\n\n // Secondary button hover\n const secondaryHoverResult = generateButtonHoverStyles({\n effect: buttonHoverEffect as ButtonHoverEffect,\n intensity: buttonHoverIntensity,\n buttonColor: secondaryBtnBorder,\n buttonTextColor: secondaryBtnText,\n variant: \"outline\",\n });\n\n // Base styles if needed\n if (primaryHoverResult.base) {\n buttonsCss += `\n ${scope} .sg-cta__btn--primary {\n ${primaryHoverResult.base}\n }\n `;\n }\n\n if (secondaryHoverResult.base) {\n buttonsCss += `\n ${scope} .sg-cta__btn--secondary {\n ${secondaryHoverResult.base}\n }\n `;\n }\n\n // Hover styles\n buttonsCss += `\n ${scope} .sg-cta__btn--primary:hover {\n ${primaryHoverResult.hover}\n }\n ${scope} .sg-cta__btn--secondary:hover {\n ${secondaryHoverResult.hover}\n }\n `;\n\n // Add keyframes for pulse animation\n buttonsCss += getButtonHoverKeyframes();\n }\n\n // Efeito overlay (adicional)\n if (buttonHoverOverlay && buttonHoverOverlay !== \"none\") {\n buttonsCss += generateButtonOverlayCSS(`${scope} .sg-cta__btn--primary`, {\n overlay: buttonHoverOverlay as ButtonHoverOverlay,\n primaryColor,\n iconName: buttonHoverIconName,\n textColor: primaryBtnText,\n });\n buttonsCss += generateButtonOverlayCSS(`${scope} .sg-cta__btn--secondary`, {\n overlay: buttonHoverOverlay as ButtonHoverOverlay,\n primaryColor,\n iconName: buttonHoverIconName,\n textColor: secondaryBtnText,\n });\n }\n\n const bgStyle = isGradient\n ? \"background: linear-gradient(135deg, var(--sg-primary), var(--sg-accent));\"\n : \"background-color: var(--sg-surface);\";\n const textColor = isGradient ? \"#fff\" : \"var(--sg-text)\";\n const mutedColor = isGradient\n ? \"rgba(255,255,255,0.9)\"\n : \"var(--sg-muted-text)\";\n const ctaPrimaryHref = primaryButton\n ? resolveHref(primaryButton.href || \"#\", basePath)\n : \"#\";\n const ctaSecondaryHref = secondaryButton\n ? resolveHref(secondaryButton.href || \"#\", basePath)\n : \"#\";\n\n const primaryBtnStyle = `padding: ${btnSize.padding}; font-size: ${btnSize.fontSize}; background-color: ${primaryBtnBg}; color: ${primaryBtnText}; border-radius: var(--sg-button-radius); text-decoration: none; font-weight: 500; display: inline-block; transition: all 0.2s ease; position: relative; overflow: hidden;`;\n const secondaryBtnStyle = `padding: ${btnSize.padding}; font-size: ${btnSize.fontSize}; background-color: ${secondaryBtnBg}; color: ${secondaryBtnText}; border: 2px solid ${secondaryBtnBorder}; border-radius: var(--sg-button-radius); text-decoration: none; font-weight: 500; display: inline-block; transition: all 0.2s ease; position: relative; overflow: hidden;`;\n\n const primaryBtnHtml = primaryButton\n ? `<a href=\"${escapeHtml(ctaPrimaryHref)}\"${linkTargetAttr(ctaPrimaryHref, basePath)} class=\"sg-cta__btn sg-cta__btn--primary\" style=\"${primaryBtnStyle}\">${escapeHtml(primaryButton.text)}</a>`\n : \"\";\n const secondaryBtnHtml = secondaryButton\n ? `<a href=\"${escapeHtml(ctaSecondaryHref)}\"${linkTargetAttr(ctaSecondaryHref, basePath)} class=\"sg-cta__btn sg-cta__btn--secondary\" style=\"${secondaryBtnStyle}\">${escapeHtml(secondaryButton.text)}</a>`\n : \"\";\n return `<style>${buttonsCss}</style><section ${blockIdAttr(block.id)} ${dataBlockIdAttr(block.id)} style=\"padding: 4rem 0; ${bgStyle} text-align: center;\"><div style=\"max-width: 800px; margin: 0 auto; padding: 0 1rem;\"><h2 style=\"font-size: var(--sg-heading-h2); margin-bottom: 1rem; color: ${textColor};\">${escapeHtml(title)}</h2>${ctaDesc ? `<p style=\"font-size: 1.125rem; margin-bottom: 2rem; color: ${mutedColor};\">${escapeHtml(ctaDesc)}</p>` : \"\"}<div id=\"${ctaId}\" style=\"display: flex; gap: 1rem; justify-content: center; flex-wrap: wrap;\">${primaryBtnHtml}${secondaryBtnHtml}</div></div></section>`;\n}\n\nexport function exportPricingCard(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const {\n name,\n price,\n period,\n description: desc,\n features = [],\n buttonText,\n highlighted,\n badge: pBadge,\n } = (block as any).props;\n\n const badgeHtml = pBadge\n ? `<span style=\"position: absolute; top: -0.75rem; right: 1rem; background-color: var(--sg-primary); color: #fff; padding: 0.25rem 0.75rem; border-radius: 9999px; font-size: 0.75rem;\">${escapeHtml(pBadge)}</span>`\n : \"\";\n const featuresHtml = features\n .map(\n (f: string) =>\n `<li style=\"padding: 0.5rem 0; display: flex; align-items: center; gap: 0.5rem;\"><span style=\"color: var(--sg-success);\">\\u2713</span>${escapeHtml(f)}</li>`,\n )\n .join(\"\");\n const buttonStyle = highlighted\n ? \"background-color: var(--sg-primary); color: var(--sg-primary-text); border: none;\"\n : \"background-color: transparent; color: var(--sg-primary); border: 1px solid var(--sg-primary);\";\n return `<div ${dataBlockIdAttr(block.id)} style=\"background-color: var(--sg-bg); border-radius: 0.75rem; padding: 2rem; box-shadow: ${highlighted ? \"var(--sg-shadow-strong)\" : \"var(--sg-card-shadow)\"}; border: ${highlighted ? \"2px solid var(--sg-primary)\" : \"1px solid var(--sg-border)\"}; position: relative;\">${badgeHtml}<h3 style=\"font-size: 1.25rem; font-weight: 600; margin-bottom: 0.5rem;\">${escapeHtml(name)}</h3>${desc ? `<p style=\"color: var(--sg-muted-text); margin-bottom: 1rem;\">${escapeHtml(desc)}</p>` : \"\"}<div style=\"margin-bottom: 1.5rem;\"><span style=\"font-size: 2.5rem; font-weight: 700;\">${escapeHtml(price)}</span>${period ? `<span style=\"color: var(--sg-muted-text);\">${escapeHtml(period)}</span>` : \"\"}</div><ul style=\"list-style: none; padding: 0; margin-bottom: 1.5rem;\">${featuresHtml}</ul>${buttonText ? `<button style=\"width: 100%; padding: 0.625rem 1.25rem; ${buttonStyle} border-radius: var(--sg-button-radius); font-weight: 500; cursor: pointer;\">${escapeHtml(buttonText)}</button>` : \"\"}</div>`;\n}\n\nexport function exportPricing(\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 { title, subtitle, plans = [] } = (block as any).props;\n\n // Responsive grid: 1 col (mobile) → 2 cols (tablet) → N cols (desktop, max 4)\n const gridId = generateScopedId(block.id || \"\", \"pricing-grid\");\n const maxCols = Math.min(plans.length, 4);\n const responsiveConfig = resolveResponsiveColumns({ lg: maxCols }, 1, 2, maxCols);\n const { inlineStyles, mediaQueries } = generateResponsiveGridStyles(gridId, responsiveConfig, \"2rem\", \"align-items: start;\");\n\n const headerHtml =\n title || subtitle\n ? `<div 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); font-size: 1.125rem;\">${escapeHtml(subtitle)}</p>` : \"\"}</div>`\n : \"\";\n\n if (!renderChild) {\n throw new Error(\"exportPricing requires renderChild function\");\n }\n\n const plansHtml = plans\n .map((p: any) =>\n renderChild(\n { id: `${block.id}-plan`, type: \"pricingCard\", props: p } as Block,\n depth + 1,\n basePath,\n theme,\n ),\n )\n .join(\"\");\n\n return `<style>${mediaQueries}</style><section ${blockIdAttr(block.id)} ${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 id=\"${gridId}\" style=\"${inlineStyles}\">${plansHtml}</div></div></section>`;\n}\n\nexport function exportTestimonial(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const {\n quote,\n authorName,\n authorRole,\n authorCompany,\n authorAvatar,\n rating,\n } = (block as any).props;\n\n const ratingHtml = rating\n ? `<div style=\"margin-bottom: 1rem; color: #fbbf24;\">${\"\\u2605\".repeat(rating)}</div>`\n : \"\";\n const avatarHtml = authorAvatar\n ? `<img src=\"${escapeHtml(authorAvatar)}\" alt=\"${escapeHtml(authorName)}\" style=\"width: 3rem; height: 3rem; border-radius: 50%; object-fit: cover;\" />`\n : `<div style=\"width: 3rem; height: 3rem; border-radius: 50%; background-color: var(--sg-primary); color: #fff; display: flex; align-items: center; justify-content: center; font-weight: 600;\">${\n authorName\n ? authorName\n .split(\" \")\n .map((n: string) => n[0])\n .join(\"\")\n .toUpperCase()\n .slice(0, 2)\n : \"?\"\n }</div>`;\n return `<div ${dataBlockIdAttr(block.id)} style=\"background-color: var(--sg-surface); border-radius: var(--sg-card-radius); padding: 2rem;\">${ratingHtml}<blockquote style=\"font-size: 1rem; margin-bottom: 1.5rem; font-style: italic;\">\"${escapeHtml(quote)}\"</blockquote><div style=\"display: flex; align-items: center; gap: 1rem;\">${avatarHtml}<div><div style=\"font-weight: 600;\">${escapeHtml(authorName)}</div>${authorRole || authorCompany ? `<div style=\"color: var(--sg-muted-text); font-size: 0.875rem;\">${escapeHtml(authorRole || \"\")}${authorRole && authorCompany ? \", \" : \"\"}${escapeHtml(authorCompany || \"\")}</div>` : \"\"}</div></div></div>`;\n}\n\nexport function exportTestimonialGrid(\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 testimonials = [],\n } = (block as any).props;\n\n // Responsive grid: 1 col (mobile) → 2 cols (tablet) → N cols (desktop)\n const gridId = generateScopedId(block.id || \"\", \"testimonial-grid\");\n const responsiveConfig = resolveResponsiveColumns(columns, 1, 2, columns);\n const { inlineStyles, mediaQueries } = generateResponsiveGridStyles(gridId, responsiveConfig, \"2rem\");\n\n const headerHtml =\n title || subtitle\n ? `<div 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); font-size: 1.125rem;\">${escapeHtml(subtitle)}</p>` : \"\"}</div>`\n : \"\";\n\n if (!renderChild) {\n throw new Error(\"exportTestimonialGrid requires renderChild function\");\n }\n\n const testimonialsHtml = testimonials\n .map((t: any) =>\n renderChild(\n { id: `${block.id}-t`, type: \"testimonial\", props: t } as Block,\n depth + 1,\n basePath,\n theme,\n ),\n )\n .join(\"\");\n\n return `<style>${mediaQueries}</style><section ${blockIdAttr(block.id)} ${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 id=\"${gridId}\" style=\"${inlineStyles}\">${testimonialsHtml}</div></div></section>`;\n}\n\nexport function exportFaqItem(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const { question, answer } = (block as any).props;\n return `<details ${dataBlockIdAttr(block.id)} style=\"border-bottom: 1px solid var(--sg-border); padding: 1rem 0;\"><summary style=\"font-weight: 600; cursor: pointer; display: flex; justify-content: space-between; align-items: center;\">${escapeHtml(question)}<span>+</span></summary><p style=\"margin-top: 1rem; color: var(--sg-muted-text);\">${escapeHtml(answer)}</p></details>`;\n}\n\nexport function exportFaq(\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 { title, subtitle, items = [] } = (block as any).props;\n\n const headerHtml =\n title || subtitle\n ? `<div 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); font-size: 1.125rem;\">${escapeHtml(subtitle)}</p>` : \"\"}</div>`\n : \"\";\n\n if (!renderChild) {\n throw new Error(\"exportFaq requires renderChild function\");\n }\n\n const itemsHtml = items\n .map((i: any) =>\n renderChild(\n { id: `${block.id}-faq`, type: \"faqItem\", props: i } as Block,\n depth + 1,\n basePath,\n theme,\n ),\n )\n .join(\"\");\n\n return `<section ${blockIdAttr(block.id)} ${dataBlockIdAttr(block.id)} style=\"padding: 4rem 0; background-color: var(--sg-bg);\"><div style=\"max-width: 800px; margin: 0 auto; padding: 0 1rem;\">${headerHtml}<div>${itemsHtml}</div></div></section>`;\n}\n\nexport function exportStats(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const { title, subtitle, items = [] } = (block as any).props;\n\n // Responsive grid: 1 col (mobile) → 2 cols (tablet) → N cols (desktop)\n const gridId = generateScopedId(block.id || \"\", \"stats-grid\");\n const responsiveConfig = resolveResponsiveColumns({ lg: items.length }, 1, 2, items.length);\n const { inlineStyles, mediaQueries } = generateResponsiveGridStyles(gridId, responsiveConfig, \"2rem\", \"text-align: center;\");\n\n const headerHtml =\n title || subtitle\n ? `<div 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); font-size: 1.125rem;\">${escapeHtml(subtitle)}</p>` : \"\"}</div>`\n : \"\";\n\n const itemsHtml = items\n .map(\n (i: any) =>\n `<div style=\"text-align: center;\"><div style=\"font-size: 3rem; font-weight: 700; color: var(--sg-primary);\">${escapeHtml(i.prefix || \"\")}${escapeHtml(i.value)}${escapeHtml(i.suffix || \"\")}</div><div style=\"color: var(--sg-muted-text);\">${escapeHtml(i.label)}</div></div>`,\n )\n .join(\"\");\n\n return `<style>${mediaQueries}</style><section ${blockIdAttr(block.id)} ${dataBlockIdAttr(block.id)} style=\"padding: 4rem 0; background-color: var(--sg-surface);\"><div style=\"max-width: 1200px; margin: 0 auto; padding: 0 1rem;\">${headerHtml}<div id=\"${gridId}\" style=\"${inlineStyles}\">${itemsHtml}</div></div></section>`;\n}\n\nexport function exportStatItem(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const { value, label, prefix, suffix } = (block as any).props;\n return `<div ${dataBlockIdAttr(block.id)} style=\"text-align: center;\"><div style=\"font-size: 2.5rem; font-weight: 700; color: var(--sg-primary);\">${escapeHtml(prefix || \"\")}${escapeHtml(value)}${escapeHtml(suffix || \"\")}</div><div style=\"color: var(--sg-muted-text);\">${escapeHtml(label)}</div></div>`;\n}\n\nexport function exportLogoCloud(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const { title, logos = [], grayscale } = (block as any).props;\n\n const titleHtml = title\n ? `<p style=\"color: var(--sg-muted-text); margin-bottom: 2rem;\">${escapeHtml(title)}</p>`\n : \"\";\n\n const logosHtml = logos\n .map(\n (l: any) =>\n `<img src=\"${escapeHtml(l.src)}\" alt=\"${escapeHtml(l.alt)}\" style=\"height: 2rem; object-fit: contain; ${grayscale ? \"filter: grayscale(100%); opacity: 0.6;\" : \"\"}\" />`,\n )\n .join(\"\");\n\n return `<section ${blockIdAttr(block.id)} ${dataBlockIdAttr(block.id)} style=\"padding: 2rem 0; background-color: var(--sg-bg);\"><div style=\"max-width: 1200px; margin: 0 auto; padding: 0 1rem; text-align: center;\">${titleHtml}<div style=\"display: flex; justify-content: center; align-items: center; gap: 3rem; flex-wrap: wrap;\">${logosHtml}</div></div></section>`;\n}\n\nexport function exportSocialLinks(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const {\n links = [],\n size = \"md\",\n variant = \"default\",\n } = (block as any).props;\n\n const sizeMap: Record<string, string> = {\n sm: \"1.25rem\",\n md: \"1.5rem\",\n lg: \"2rem\",\n };\n\n const iconSize = sizeMap[size] || sizeMap.md;\n\n const linksHtml = links\n .map(\n (l: any) =>\n `<a href=\"${escapeHtml(l.url)}\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"display: flex; align-items: center; justify-content: center; width: ${variant === \"filled\" ? `calc(${iconSize} + 0.75rem)` : iconSize}; height: ${variant === \"filled\" ? `calc(${iconSize} + 0.75rem)` : iconSize}; background-color: ${variant === \"filled\" ? \"var(--sg-surface)\" : \"transparent\"}; border-radius: ${variant === \"filled\" ? \"50%\" : \"0\"}; color: var(--sg-muted-text); text-decoration: none;\">[${escapeHtml(l.platform)}]</a>`,\n )\n .join(\"\");\n\n return `<div ${dataBlockIdAttr(block.id)} style=\"display: flex; gap: 1rem; align-items: center;\">${linksHtml}</div>`;\n}\n"],"names":["exportFeature","block","depth","basePath","theme","icon","title","description","iconHtml","dataBlockIdAttr","escapeHtml","exportFeatureGrid","renderChild","subtitle","columns","variant","features","gridId","generateScopedId","responsiveConfig","resolveResponsiveColumns","inlineStyles","mediaQueries","generateResponsiveGridStyles","isImageCards","headerHtml","featuresHtml","f","imgBlock","iconBlock","linkBlock","innerPadding","blockIdAttr","exportCta","ctaDesc","primaryButton","secondaryButton","buttonSize","buttonHoverEffect","buttonHoverIntensity","buttonHoverOverlay","buttonHoverIconName","sizeStyles","btnSize","ctaId","scope","isGradient","primaryColor","primaryText","primaryBtnBg","primaryBtnText","secondaryBtnBg","secondaryBtnText","secondaryBtnBorder","buttonsCss","primaryHoverResult","generateButtonHoverStyles","secondaryHoverResult","getButtonHoverKeyframes","generateButtonOverlayCSS","bgStyle","textColor","mutedColor","ctaPrimaryHref","resolveHref","ctaSecondaryHref","primaryBtnStyle","secondaryBtnStyle","primaryBtnHtml","linkTargetAttr","secondaryBtnHtml","exportPricingCard","name","price","period","desc","buttonText","highlighted","pBadge","badgeHtml","buttonStyle","exportPricing","plans","maxCols","plansHtml","p","exportTestimonial","quote","authorName","authorRole","authorCompany","authorAvatar","rating","ratingHtml","avatarHtml","n","exportTestimonialGrid","testimonials","testimonialsHtml","t","exportFaqItem","question","answer","exportFaq","items","itemsHtml","i","exportStats","exportStatItem","value","label","prefix","suffix","exportLogoCloud","logos","grayscale","titleHtml","logosHtml","l","exportSocialLinks","links","size","sizeMap","iconSize","linksHtml"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MarketingExporters.js","sources":["../../../../../src/engine/export/exporters/sections/MarketingExporters.ts"],"sourcesContent":["/**\n * Marketing Sections Exporters\n * Feature, FeatureGrid, Pricing, Testimonials, FAQ, CTA, Stats, Logo Cloud, etc.\n * Mobile-first responsive grids with media queries\n */\n\nimport { Block } from \"../../../schema/siteDocument\";\nimport { ThemeTokens } from \"../../../schema/themeTokens\";\nimport { dataBlockIdAttr, blockIdAttr, escapeHtml, resolveHref, linkTargetAttr } from \"../../shared/htmlHelpers\";\nimport { generateScopedId } from \"../../shared/idGenerator\";\nimport { resolveResponsiveColumns, generateResponsiveGridStyles } from \"../../shared/responsiveGridHelper\";\nimport {\n generateButtonHoverStyles,\n generateButtonOverlayCSS,\n getButtonHoverKeyframes,\n type ButtonHoverEffect,\n type ButtonHoverOverlay,\n} from \"../../../shared/hoverEffects\";\n\nexport function exportFeature(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const { icon, title, description } = (block as any).props;\n const iconHtml = icon\n ? `<div style=\"width: 3rem; height: 3rem; background-color: var(--sg-primary); border-radius: 0.75rem; display: flex; align-items: center; justify-content: center; margin: 0 auto 1rem; color: #fff;\">[★]</div>`\n : \"\";\n return `<div ${dataBlockIdAttr(block.id)} data-block-group=\"Conteúdo\" style=\"padding: 1.5rem; text-align: center;\">${iconHtml}<h3 style=\"font-size: 1.25rem; font-weight: 600; margin-bottom: 0.5rem;\">${escapeHtml(title)}</h3><p style=\"color: var(--sg-muted-text); font-size: 0.875rem;\">${escapeHtml(description)}</p></div>`;\n}\n\nexport function exportFeatureGrid(\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 variant = \"default\",\n features = [],\n } = (block as any).props;\n\n // Responsive grid: 1 col (mobile) → 2 cols (tablet) → N cols (desktop)\n const gridId = generateScopedId(block.id || \"\", \"feature-grid\");\n const responsiveConfig = resolveResponsiveColumns(columns, 1, 2, columns);\n const { inlineStyles, mediaQueries } = generateResponsiveGridStyles(gridId, responsiveConfig, \"2rem\");\n\n const isImageCards = variant === \"image-cards\";\n const headerHtml =\n title || subtitle\n ? `<div data-block-group=\"Conteúdo\" 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); font-size: 1.125rem;\">${escapeHtml(subtitle)}</p>` : \"\"}</div>`\n : \"\";\n\n const featuresHtml = features\n .map((f: any) => {\n const imgBlock =\n isImageCards && f.image\n ? `<div style=\"width: 100%; height: 200px; background-image: url(${escapeHtml(f.image)}); background-size: cover; background-position: center;\"></div>`\n : \"\";\n const iconBlock =\n !isImageCards && f.icon\n ? `<div style=\"width: 3rem; height: 3rem; background-color: var(--sg-primary); border-radius: 0.75rem; display: flex; align-items: center; justify-content: center; margin-bottom: 1rem; color: #fff;\">[★]</div>`\n : \"\";\n const linkBlock = f.link\n ? `<a href=\"${escapeHtml(f.link.href || \"#\")}\" style=\"display: inline-block; margin-top: 0.75rem; color: var(--sg-primary); font-weight: 500; text-decoration: none; border: 1px solid var(--sg-primary); padding: 0.5rem 1rem; border-radius: var(--sg-button-radius);\">${escapeHtml(f.link.text)}</a>`\n : \"\";\n const innerPadding = isImageCards && f.image ? \"1.5rem\" : \"2rem\";\n return `<div style=\"background-color: var(--sg-bg); border-radius: 0.75rem; padding: ${isImageCards && f.image ? 0 : \"2rem\"}; box-shadow: var(--sg-card-shadow); overflow: hidden;\">${imgBlock}<div style=\"padding: ${innerPadding};\">${iconBlock}<h3 style=\"font-size: 1.25rem; font-weight: 600; margin-bottom: 0.5rem;\">${escapeHtml(f.title)}</h3><p style=\"color: var(--sg-muted-text);\">${escapeHtml(f.description)}</p>${linkBlock}</div></div>`;\n })\n .join(\"\");\n\n return `<style>${mediaQueries}</style><section ${blockIdAttr(block.id)} ${dataBlockIdAttr(block.id)} style=\"padding: 4rem 0; background-color: var(--sg-surface);\"><div style=\"max-width: 1200px; margin: 0 auto; padding: 0 1rem;\">${headerHtml}<div data-block-group=\"Layout\" id=\"${gridId}\" style=\"${inlineStyles}\">${featuresHtml}</div></div></section>`;\n}\n\nexport function exportCta(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const {\n title,\n description: ctaDesc,\n primaryButton,\n secondaryButton,\n variant = \"centered\",\n // Button size\n buttonSize = \"md\",\n // Button hover effects\n buttonHoverEffect = \"scale\",\n buttonHoverIntensity = 50,\n buttonHoverOverlay = \"none\",\n buttonHoverIconName = \"arrow-right\",\n } = (block as any).props;\n\n // Size-based styles\n const sizeStyles: Record<string, { padding: string; fontSize: string }> = {\n sm: { padding: \"0.5rem 1rem\", fontSize: \"0.875rem\" },\n md: { padding: \"0.75rem 1.5rem\", fontSize: \"1rem\" },\n lg: { padding: \"1rem 2rem\", fontSize: \"1.125rem\" },\n };\n const btnSize = sizeStyles[buttonSize] || sizeStyles.md;\n\n // Responsive buttons: column (mobile) → row (desktop)\n const ctaId = generateScopedId(block.id || \"\", \"cta-actions\");\n const scope = `[data-block-id=\"${block.id}\"]`;\n\n const isGradient = variant === \"gradient\";\n const primaryColor = theme?.colors?.primary || \"#3b82f6\";\n const primaryText = theme?.colors?.primaryText || \"#ffffff\";\n\n // Button colors depend on gradient variant\n const primaryBtnBg = isGradient ? \"#fff\" : primaryColor;\n const primaryBtnText = isGradient ? primaryColor : primaryText;\n const secondaryBtnBg = \"transparent\";\n const secondaryBtnText = isGradient ? \"#fff\" : primaryColor;\n const secondaryBtnBorder = isGradient ? \"#fff\" : primaryColor;\n\n let buttonsCss = `\n @media (max-width: 640px) {\n #${ctaId} {\n flex-direction: column !important;\n width: 100%;\n }\n #${ctaId} a {\n width: 100% !important;\n text-align: center;\n }\n }\n `;\n\n // Generate hover CSS\n if (buttonHoverEffect !== \"none\") {\n // Primary button hover\n const primaryHoverResult = generateButtonHoverStyles({\n effect: buttonHoverEffect as ButtonHoverEffect,\n intensity: buttonHoverIntensity,\n buttonColor: primaryBtnBg,\n buttonTextColor: primaryBtnText,\n variant: \"solid\",\n });\n\n // Secondary button hover\n const secondaryHoverResult = generateButtonHoverStyles({\n effect: buttonHoverEffect as ButtonHoverEffect,\n intensity: buttonHoverIntensity,\n buttonColor: secondaryBtnBorder,\n buttonTextColor: secondaryBtnText,\n variant: \"outline\",\n });\n\n // Base styles if needed\n if (primaryHoverResult.base) {\n buttonsCss += `\n ${scope} .sg-cta__btn--primary {\n ${primaryHoverResult.base}\n }\n `;\n }\n\n if (secondaryHoverResult.base) {\n buttonsCss += `\n ${scope} .sg-cta__btn--secondary {\n ${secondaryHoverResult.base}\n }\n `;\n }\n\n // Hover styles\n buttonsCss += `\n ${scope} .sg-cta__btn--primary:hover {\n ${primaryHoverResult.hover}\n }\n ${scope} .sg-cta__btn--secondary:hover {\n ${secondaryHoverResult.hover}\n }\n `;\n\n // Add keyframes for pulse animation\n buttonsCss += getButtonHoverKeyframes();\n }\n\n // Efeito overlay (adicional)\n if (buttonHoverOverlay && buttonHoverOverlay !== \"none\") {\n buttonsCss += generateButtonOverlayCSS(`${scope} .sg-cta__btn--primary`, {\n overlay: buttonHoverOverlay as ButtonHoverOverlay,\n primaryColor,\n iconName: buttonHoverIconName,\n textColor: primaryBtnText,\n });\n buttonsCss += generateButtonOverlayCSS(`${scope} .sg-cta__btn--secondary`, {\n overlay: buttonHoverOverlay as ButtonHoverOverlay,\n primaryColor,\n iconName: buttonHoverIconName,\n textColor: secondaryBtnText,\n });\n }\n\n const bgStyle = isGradient\n ? \"background: linear-gradient(135deg, var(--sg-primary), var(--sg-accent));\"\n : \"background-color: var(--sg-surface);\";\n const textColor = isGradient ? \"#fff\" : \"var(--sg-text)\";\n const mutedColor = isGradient\n ? \"rgba(255,255,255,0.9)\"\n : \"var(--sg-muted-text)\";\n const ctaPrimaryHref = primaryButton\n ? resolveHref(primaryButton.href || \"#\", basePath)\n : \"#\";\n const ctaSecondaryHref = secondaryButton\n ? resolveHref(secondaryButton.href || \"#\", basePath)\n : \"#\";\n\n const primaryBtnStyle = `padding: ${btnSize.padding}; font-size: ${btnSize.fontSize}; background-color: ${primaryBtnBg}; color: ${primaryBtnText}; border-radius: var(--sg-button-radius); text-decoration: none; font-weight: 500; display: inline-block; transition: all 0.2s ease; position: relative; overflow: hidden;`;\n const secondaryBtnStyle = `padding: ${btnSize.padding}; font-size: ${btnSize.fontSize}; background-color: ${secondaryBtnBg}; color: ${secondaryBtnText}; border: 2px solid ${secondaryBtnBorder}; border-radius: var(--sg-button-radius); text-decoration: none; font-weight: 500; display: inline-block; transition: all 0.2s ease; position: relative; overflow: hidden;`;\n\n const primaryBtnHtml = primaryButton\n ? `<a href=\"${escapeHtml(ctaPrimaryHref)}\"${linkTargetAttr(ctaPrimaryHref, basePath)} class=\"sg-cta__btn sg-cta__btn--primary\" style=\"${primaryBtnStyle}\">${escapeHtml(primaryButton.text)}</a>`\n : \"\";\n const secondaryBtnHtml = secondaryButton\n ? `<a href=\"${escapeHtml(ctaSecondaryHref)}\"${linkTargetAttr(ctaSecondaryHref, basePath)} class=\"sg-cta__btn sg-cta__btn--secondary\" style=\"${secondaryBtnStyle}\">${escapeHtml(secondaryButton.text)}</a>`\n : \"\";\n return `<style>${buttonsCss}</style><section ${blockIdAttr(block.id)} ${dataBlockIdAttr(block.id)} style=\"padding: 4rem 0; ${bgStyle} text-align: center;\"><div style=\"max-width: 800px; margin: 0 auto; padding: 0 1rem;\"><div data-block-group=\"Conteúdo\"><h2 style=\"font-size: var(--sg-heading-h2); margin-bottom: 1rem; color: ${textColor};\">${escapeHtml(title)}</h2>${ctaDesc ? `<p style=\"font-size: 1.125rem; margin-bottom: 2rem; color: ${mutedColor};\">${escapeHtml(ctaDesc)}</p>` : \"\"}</div><div data-block-group=\"Botoes\" id=\"${ctaId}\" style=\"display: flex; gap: 1rem; justify-content: center; flex-wrap: wrap;\">${primaryBtnHtml}${secondaryBtnHtml}</div></div></section>`;\n}\n\nexport function exportPricingCard(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const {\n name,\n price,\n period,\n description: desc,\n features = [],\n buttonText,\n highlighted,\n badge: pBadge,\n } = (block as any).props;\n\n const badgeHtml = pBadge\n ? `<span style=\"position: absolute; top: -0.75rem; right: 1rem; background-color: var(--sg-primary); color: #fff; padding: 0.25rem 0.75rem; border-radius: 9999px; font-size: 0.75rem;\">${escapeHtml(pBadge)}</span>`\n : \"\";\n const featuresHtml = features\n .map(\n (f: string) =>\n `<li style=\"padding: 0.5rem 0; display: flex; align-items: center; gap: 0.5rem;\"><span style=\"color: var(--sg-success);\">\\u2713</span>${escapeHtml(f)}</li>`,\n )\n .join(\"\");\n const buttonStyle = highlighted\n ? \"background-color: var(--sg-primary); color: var(--sg-primary-text); border: none;\"\n : \"background-color: transparent; color: var(--sg-primary); border: 1px solid var(--sg-primary);\";\n return `<div ${dataBlockIdAttr(block.id)} data-block-group=\"Conteúdo\" style=\"background-color: var(--sg-bg); border-radius: 0.75rem; padding: 2rem; box-shadow: ${highlighted ? \"var(--sg-shadow-strong)\" : \"var(--sg-card-shadow)\"}; border: ${highlighted ? \"2px solid var(--sg-primary)\" : \"1px solid var(--sg-border)\"}; position: relative;\">${badgeHtml}<h3 style=\"font-size: 1.25rem; font-weight: 600; margin-bottom: 0.5rem;\">${escapeHtml(name)}</h3>${desc ? `<p style=\"color: var(--sg-muted-text); margin-bottom: 1rem;\">${escapeHtml(desc)}</p>` : \"\"}<div style=\"margin-bottom: 1.5rem;\"><span style=\"font-size: 2.5rem; font-weight: 700;\">${escapeHtml(price)}</span>${period ? `<span style=\"color: var(--sg-muted-text);\">${escapeHtml(period)}</span>` : \"\"}</div><ul style=\"list-style: none; padding: 0; margin-bottom: 1.5rem;\">${featuresHtml}</ul>${buttonText ? `<button style=\"width: 100%; padding: 0.625rem 1.25rem; ${buttonStyle} border-radius: var(--sg-button-radius); font-weight: 500; cursor: pointer;\">${escapeHtml(buttonText)}</button>` : \"\"}</div>`;\n}\n\nexport function exportPricing(\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 { title, subtitle, plans = [] } = (block as any).props;\n\n // Responsive grid: 1 col (mobile) → 2 cols (tablet) → N cols (desktop, max 4)\n const gridId = generateScopedId(block.id || \"\", \"pricing-grid\");\n const maxCols = Math.min(plans.length, 4);\n const responsiveConfig = resolveResponsiveColumns({ lg: maxCols }, 1, 2, maxCols);\n const { inlineStyles, mediaQueries } = generateResponsiveGridStyles(gridId, responsiveConfig, \"2rem\", \"align-items: start;\");\n\n const headerHtml =\n title || subtitle\n ? `<div data-block-group=\"Conteúdo\" 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); font-size: 1.125rem;\">${escapeHtml(subtitle)}</p>` : \"\"}</div>`\n : \"\";\n\n if (!renderChild) {\n throw new Error(\"exportPricing requires renderChild function\");\n }\n\n const plansHtml = plans\n .map((p: any) =>\n renderChild(\n { id: `${block.id}-plan`, type: \"pricingCard\", props: p } as Block,\n depth + 1,\n basePath,\n theme,\n ),\n )\n .join(\"\");\n\n return `<style>${mediaQueries}</style><section ${blockIdAttr(block.id)} ${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 id=\"${gridId}\" style=\"${inlineStyles}\">${plansHtml}</div></div></section>`;\n}\n\nexport function exportTestimonial(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const {\n quote,\n authorName,\n authorRole,\n authorCompany,\n authorAvatar,\n rating,\n } = (block as any).props;\n\n const ratingHtml = rating\n ? `<div data-block-group=\"Estilo\" style=\"margin-bottom: 1rem; color: #fbbf24;\">${\"\\u2605\".repeat(rating)}</div>`\n : \"\";\n const avatarHtml = authorAvatar\n ? `<img src=\"${escapeHtml(authorAvatar)}\" alt=\"${escapeHtml(authorName)}\" style=\"width: 3rem; height: 3rem; border-radius: 50%; object-fit: cover;\" />`\n : `<div style=\"width: 3rem; height: 3rem; border-radius: 50%; background-color: var(--sg-primary); color: #fff; display: flex; align-items: center; justify-content: center; font-weight: 600;\">${\n authorName\n ? authorName\n .split(\" \")\n .map((n: string) => n[0])\n .join(\"\")\n .toUpperCase()\n .slice(0, 2)\n : \"?\"\n }</div>`;\n return `<div ${dataBlockIdAttr(block.id)} style=\"background-color: var(--sg-surface); border-radius: var(--sg-card-radius); padding: 2rem;\">${ratingHtml}<blockquote data-block-group=\"Conteúdo\" style=\"font-size: 1rem; margin-bottom: 1.5rem; font-style: italic;\">\"${escapeHtml(quote)}\"</blockquote><div data-block-group=\"Autor\" style=\"display: flex; align-items: center; gap: 1rem;\">${avatarHtml}<div><div style=\"font-weight: 600;\">${escapeHtml(authorName)}</div>${authorRole || authorCompany ? `<div style=\"color: var(--sg-muted-text); font-size: 0.875rem;\">${escapeHtml(authorRole || \"\")}${authorRole && authorCompany ? \", \" : \"\"}${escapeHtml(authorCompany || \"\")}</div>` : \"\"}</div></div></div>`;\n}\n\nexport function exportTestimonialGrid(\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 testimonials = [],\n } = (block as any).props;\n\n // Responsive grid: 1 col (mobile) → 2 cols (tablet) → N cols (desktop)\n const gridId = generateScopedId(block.id || \"\", \"testimonial-grid\");\n const responsiveConfig = resolveResponsiveColumns(columns, 1, 2, columns);\n const { inlineStyles, mediaQueries } = generateResponsiveGridStyles(gridId, responsiveConfig, \"2rem\");\n\n const headerHtml =\n title || subtitle\n ? `<div data-block-group=\"Conteúdo\" 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); font-size: 1.125rem;\">${escapeHtml(subtitle)}</p>` : \"\"}</div>`\n : \"\";\n\n if (!renderChild) {\n throw new Error(\"exportTestimonialGrid requires renderChild function\");\n }\n\n const testimonialsHtml = testimonials\n .map((t: any) =>\n renderChild(\n { id: `${block.id}-t`, type: \"testimonial\", props: t } as Block,\n depth + 1,\n basePath,\n theme,\n ),\n )\n .join(\"\");\n\n return `<style>${mediaQueries}</style><section ${blockIdAttr(block.id)} ${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}\">${testimonialsHtml}</div></div></section>`;\n}\n\nexport function exportFaqItem(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const { question, answer } = (block as any).props;\n return `<details ${dataBlockIdAttr(block.id)} data-block-group=\"Conteúdo\" style=\"border-bottom: 1px solid var(--sg-border); padding: 1rem 0;\"><summary style=\"font-weight: 600; cursor: pointer; display: flex; justify-content: space-between; align-items: center;\">${escapeHtml(question)}<span>+</span></summary><p style=\"margin-top: 1rem; color: var(--sg-muted-text);\">${escapeHtml(answer)}</p></details>`;\n}\n\nexport function exportFaq(\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 { title, subtitle, items = [] } = (block as any).props;\n\n const headerHtml =\n title || subtitle\n ? `<div data-block-group=\"Conteúdo\" 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); font-size: 1.125rem;\">${escapeHtml(subtitle)}</p>` : \"\"}</div>`\n : \"\";\n\n if (!renderChild) {\n throw new Error(\"exportFaq requires renderChild function\");\n }\n\n const itemsHtml = items\n .map((i: any) =>\n renderChild(\n { id: `${block.id}-faq`, type: \"faqItem\", props: i } as Block,\n depth + 1,\n basePath,\n theme,\n ),\n )\n .join(\"\");\n\n return `<section ${blockIdAttr(block.id)} ${dataBlockIdAttr(block.id)} style=\"padding: 4rem 0; background-color: var(--sg-bg);\"><div style=\"max-width: 800px; margin: 0 auto; padding: 0 1rem;\">${headerHtml}<div>${itemsHtml}</div></div></section>`;\n}\n\nexport function exportStats(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const { title, subtitle, items = [] } = (block as any).props;\n\n // Responsive grid: 1 col (mobile) → 2 cols (tablet) → N cols (desktop)\n const gridId = generateScopedId(block.id || \"\", \"stats-grid\");\n const responsiveConfig = resolveResponsiveColumns({ lg: items.length }, 1, 2, items.length);\n const { inlineStyles, mediaQueries } = generateResponsiveGridStyles(gridId, responsiveConfig, \"2rem\", \"text-align: center;\");\n\n const headerHtml =\n title || subtitle\n ? `<div 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); font-size: 1.125rem;\">${escapeHtml(subtitle)}</p>` : \"\"}</div>`\n : \"\";\n\n const itemsHtml = items\n .map(\n (i: any) =>\n `<div style=\"text-align: center;\"><div style=\"font-size: 3rem; font-weight: 700; color: var(--sg-primary);\">${escapeHtml(i.prefix || \"\")}${escapeHtml(i.value)}${escapeHtml(i.suffix || \"\")}</div><div style=\"color: var(--sg-muted-text);\">${escapeHtml(i.label)}</div></div>`,\n )\n .join(\"\");\n\n return `<style>${mediaQueries}</style><section ${blockIdAttr(block.id)} ${dataBlockIdAttr(block.id)} style=\"padding: 4rem 0; background-color: var(--sg-surface);\"><div style=\"max-width: 1200px; margin: 0 auto; padding: 0 1rem;\">${headerHtml}<div id=\"${gridId}\" style=\"${inlineStyles}\">${itemsHtml}</div></div></section>`;\n}\n\nexport function exportStatItem(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const { value, label, prefix, suffix } = (block as any).props;\n return `<div ${dataBlockIdAttr(block.id)} style=\"text-align: center;\"><div style=\"font-size: 2.5rem; font-weight: 700; color: var(--sg-primary);\">${escapeHtml(prefix || \"\")}${escapeHtml(value)}${escapeHtml(suffix || \"\")}</div><div style=\"color: var(--sg-muted-text);\">${escapeHtml(label)}</div></div>`;\n}\n\nexport function exportLogoCloud(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const { title, logos = [], grayscale } = (block as any).props;\n\n const titleHtml = title\n ? `<p style=\"color: var(--sg-muted-text); margin-bottom: 2rem;\">${escapeHtml(title)}</p>`\n : \"\";\n\n const logosHtml = logos\n .map(\n (l: any) =>\n `<img src=\"${escapeHtml(l.src)}\" alt=\"${escapeHtml(l.alt)}\" style=\"height: 2rem; object-fit: contain; ${grayscale ? \"filter: grayscale(100%); opacity: 0.6;\" : \"\"}\" />`,\n )\n .join(\"\");\n\n return `<section ${blockIdAttr(block.id)} ${dataBlockIdAttr(block.id)} style=\"padding: 2rem 0; background-color: var(--sg-bg);\"><div style=\"max-width: 1200px; margin: 0 auto; padding: 0 1rem; text-align: center;\">${titleHtml}<div style=\"display: flex; justify-content: center; align-items: center; gap: 3rem; flex-wrap: wrap;\">${logosHtml}</div></div></section>`;\n}\n\nexport function exportSocialLinks(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const {\n links = [],\n size = \"md\",\n variant = \"default\",\n } = (block as any).props;\n\n const sizeMap: Record<string, string> = {\n sm: \"1.25rem\",\n md: \"1.5rem\",\n lg: \"2rem\",\n };\n\n const iconSize = sizeMap[size] || sizeMap.md;\n\n const linksHtml = links\n .map(\n (l: any) =>\n `<a href=\"${escapeHtml(l.url)}\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"display: flex; align-items: center; justify-content: center; width: ${variant === \"filled\" ? `calc(${iconSize} + 0.75rem)` : iconSize}; height: ${variant === \"filled\" ? `calc(${iconSize} + 0.75rem)` : iconSize}; background-color: ${variant === \"filled\" ? \"var(--sg-surface)\" : \"transparent\"}; border-radius: ${variant === \"filled\" ? \"50%\" : \"0\"}; color: var(--sg-muted-text); text-decoration: none;\">[${escapeHtml(l.platform)}]</a>`,\n )\n .join(\"\");\n\n return `<div ${dataBlockIdAttr(block.id)} style=\"display: flex; gap: 1rem; align-items: center;\">${linksHtml}</div>`;\n}\n"],"names":["exportFeature","block","depth","basePath","theme","icon","title","description","iconHtml","dataBlockIdAttr","escapeHtml","exportFeatureGrid","renderChild","subtitle","columns","variant","features","gridId","generateScopedId","responsiveConfig","resolveResponsiveColumns","inlineStyles","mediaQueries","generateResponsiveGridStyles","isImageCards","headerHtml","featuresHtml","f","imgBlock","iconBlock","linkBlock","innerPadding","blockIdAttr","exportCta","ctaDesc","primaryButton","secondaryButton","buttonSize","buttonHoverEffect","buttonHoverIntensity","buttonHoverOverlay","buttonHoverIconName","sizeStyles","btnSize","ctaId","scope","isGradient","primaryColor","primaryText","primaryBtnBg","primaryBtnText","secondaryBtnBg","secondaryBtnText","secondaryBtnBorder","buttonsCss","primaryHoverResult","generateButtonHoverStyles","secondaryHoverResult","getButtonHoverKeyframes","generateButtonOverlayCSS","bgStyle","textColor","mutedColor","ctaPrimaryHref","resolveHref","ctaSecondaryHref","primaryBtnStyle","secondaryBtnStyle","primaryBtnHtml","linkTargetAttr","secondaryBtnHtml","exportPricingCard","name","price","period","desc","buttonText","highlighted","pBadge","badgeHtml","buttonStyle","exportPricing","plans","maxCols","plansHtml","p","exportTestimonial","quote","authorName","authorRole","authorCompany","authorAvatar","rating","ratingHtml","avatarHtml","n","exportTestimonialGrid","testimonials","testimonialsHtml","t","exportFaqItem","question","answer","exportFaq","items","itemsHtml","i","exportStats","exportStatItem","value","label","prefix","suffix","exportLogoCloud","logos","grayscale","titleHtml","logosHtml","l","exportSocialLinks","links","size","sizeMap","iconSize","linksHtml"],"mappings":";;;;AAmBO,SAASA,EACdC,GACAC,GACAC,GACAC,GACQ;AACR,QAAM,EAAE,MAAAC,GAAM,OAAAC,GAAO,aAAAC,EAAA,IAAiBN,EAAc,OAC9CO,IAAWH,IACb,kNACA;AACJ,SAAO,QAAQI,EAAgBR,EAAM,EAAE,CAAC,6EAA6EO,CAAQ,4EAA4EE,EAAWJ,CAAK,CAAC,qEAAqEI,EAAWH,CAAW,CAAC;AACxT;AAEO,SAASI,GACdV,GACAC,GACAC,GACAC,GACAQ,GACQ;AACR,QAAM;AAAA,IACJ,OAAAN;AAAA,IACA,UAAAO;AAAA,IACA,SAAAC,IAAU;AAAA,IACV,SAAAC,IAAU;AAAA,IACV,UAAAC,IAAW,CAAA;AAAA,EAAC,IACTf,EAAc,OAGbgB,IAASC,EAAiBjB,EAAM,MAAM,IAAI,cAAc,GACxDkB,IAAmBC,EAAyBN,GAAS,GAAG,GAAGA,CAAO,GAClE,EAAE,cAAAO,GAAc,cAAAC,EAAA,IAAiBC,EAA6BN,GAAQE,GAAkB,MAAM,GAE9FK,IAAeT,MAAY,eAC3BU,IACJnB,KAASO,IACL,qFAAqFP,IAAQ,uEAAuEI,EAAWJ,CAAK,CAAC,UAAU,EAAE,GAAGO,IAAW,gEAAgEH,EAAWG,CAAQ,CAAC,SAAS,EAAE,WAC9S,IAEAa,IAAeV,EAClB,IAAI,CAACW,MAAW;AACf,UAAMC,IACJJ,KAAgBG,EAAE,QACd,iEAAiEjB,EAAWiB,EAAE,KAAK,CAAC,oEACpF,IACAE,IACJ,CAACL,KAAgBG,EAAE,OACf,kNACA,IACAG,IAAYH,EAAE,OAChB,YAAYjB,EAAWiB,EAAE,KAAK,QAAQ,GAAG,CAAC,+NAA+NjB,EAAWiB,EAAE,KAAK,IAAI,CAAC,SAChS,IACEI,IAAeP,KAAgBG,EAAE,QAAQ,WAAW;AAC1D,WAAO,gFAAgFH,KAAgBG,EAAE,QAAQ,IAAI,MAAM,2DAA2DC,CAAQ,wBAAwBG,CAAY,MAAMF,CAAS,4EAA4EnB,EAAWiB,EAAE,KAAK,CAAC,gDAAgDjB,EAAWiB,EAAE,WAAW,CAAC,OAAOG,CAAS;AAAA,EAC3a,CAAC,EACA,KAAK,EAAE;AAEV,SAAO,UAAUR,CAAY,oBAAoBU,EAAY/B,EAAM,EAAE,CAAC,IAAIQ,EAAgBR,EAAM,EAAE,CAAC,mIAAmIwB,CAAU,sCAAsCR,CAAM,YAAYI,CAAY,KAAKK,CAAY;AACvU;AAEO,SAASO,GACdhC,GACAC,GACAC,GACAC,GACQ;AACR,QAAM;AAAA,IACJ,OAAAE;AAAA,IACA,aAAa4B;AAAA,IACb,eAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,SAAArB,IAAU;AAAA;AAAA,IAEV,YAAAsB,IAAa;AAAA;AAAA,IAEb,mBAAAC,IAAoB;AAAA,IACpB,sBAAAC,IAAuB;AAAA,IACvB,oBAAAC,IAAqB;AAAA,IACrB,qBAAAC,IAAsB;AAAA,EAAA,IACnBxC,EAAc,OAGbyC,IAAoE;AAAA,IACxE,IAAI,EAAE,SAAS,eAAe,UAAU,WAAA;AAAA,IACxC,IAAI,EAAE,SAAS,kBAAkB,UAAU,OAAA;AAAA,IAC3C,IAAI,EAAE,SAAS,aAAa,UAAU,WAAA;AAAA,EAAW,GAE7CC,IAAUD,EAAWL,CAAU,KAAKK,EAAW,IAG/CE,IAAQ1B,EAAiBjB,EAAM,MAAM,IAAI,aAAa,GACtD4C,IAAQ,mBAAmB5C,EAAM,EAAE,MAEnC6C,IAAa/B,MAAY,YACzBgC,IAAe3C,GAAO,QAAQ,WAAW,WACzC4C,IAAc5C,GAAO,QAAQ,eAAe,WAG5C6C,IAAeH,IAAa,SAASC,GACrCG,IAAiBJ,IAAaC,IAAeC,GAC7CG,IAAiB,eACjBC,IAAmBN,IAAa,SAASC,GACzCM,IAAqBP,IAAa,SAASC;AAEjD,MAAIO,IAAa;AAAA;AAAA,SAEVV,CAAK;AAAA;AAAA;AAAA;AAAA,SAILA,CAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAQZ,MAAIN,MAAsB,QAAQ;AAEhC,UAAMiB,IAAqBC,EAA0B;AAAA,MACnD,QAAQlB;AAAA,MACR,WAAWC;AAAA,MACX,aAAaU;AAAA,MAEb,SAAS;AAAA,IAAA,CACV,GAGKQ,IAAuBD,EAA0B;AAAA,MACrD,QAAQlB;AAAA,MACR,WAAWC;AAAA,MACX,aAAac;AAAA,MAEb,SAAS;AAAA,IAAA,CACV;AAGD,IAAIE,EAAmB,SACrBD,KAAc;AAAA,UACVT,CAAK;AAAA,YACHU,EAAmB,IAAI;AAAA;AAAA,UAK3BE,EAAqB,SACvBH,KAAc;AAAA,UACVT,CAAK;AAAA,YACHY,EAAqB,IAAI;AAAA;AAAA,UAMjCH,KAAc;AAAA,QACVT,CAAK;AAAA,UACHU,EAAmB,KAAK;AAAA;AAAA,QAE1BV,CAAK;AAAA,UACHY,EAAqB,KAAK;AAAA;AAAA,OAKhCH,KAAcI,EAAA;AAAA,EAChB;AAGA,EAAIlB,KAAsBA,MAAuB,WAC/Cc,KAAcK,EAAyB,GAAGd,CAAK,0BAA0B;AAAA,IACvE,SAASL;AAAA,IACT,cAAAO;AAAA,IACA,UAAUN;AAAA,IACV,WAAWS;AAAA,EAAA,CACZ,GACDI,KAAcK,EAAyB,GAAGd,CAAK,4BAA4B;AAAA,IACzE,SAASL;AAAA,IACT,cAAAO;AAAA,IACA,UAAUN;AAAA,IACV,WAAWW;AAAA,EAAA,CACZ;AAGH,QAAMQ,IAAUd,IACZ,8EACA,wCACEe,IAAYf,IAAa,SAAS,kBAClCgB,IAAahB,IACf,0BACA,wBACEiB,IAAiB5B,IACnB6B,EAAY7B,EAAc,QAAQ,KAAKhC,CAAQ,IAC/C,KACE8D,IAAmB7B,IACrB4B,EAAY5B,EAAgB,QAAQ,KAAKjC,CAAQ,IACjD,KAEE+D,IAAkB,YAAYvB,EAAQ,OAAO,gBAAgBA,EAAQ,QAAQ,uBAAuBM,CAAY,YAAYC,CAAc,8KAC1IiB,IAAoB,YAAYxB,EAAQ,OAAO,gBAAgBA,EAAQ,QAAQ,uBAAuBQ,CAAc,YAAYC,CAAgB,uBAAuBC,CAAkB,8KAEzLe,IAAiBjC,IACnB,YAAYzB,EAAWqD,CAAc,CAAC,IAAIM,EAAeN,GAAgB5D,CAAQ,CAAC,oDAAoD+D,CAAe,KAAKxD,EAAWyB,EAAc,IAAI,CAAC,SACxL,IACEmC,IAAmBlC,IACrB,YAAY1B,EAAWuD,CAAgB,CAAC,IAAII,EAAeJ,GAAkB9D,CAAQ,CAAC,sDAAsDgE,CAAiB,KAAKzD,EAAW0B,EAAgB,IAAI,CAAC,SAClM;AACJ,SAAO,UAAUkB,CAAU,oBAAoBtB,EAAY/B,EAAM,EAAE,CAAC,IAAIQ,EAAgBR,EAAM,EAAE,CAAC,4BAA4B2D,CAAO,kMAAkMC,CAAS,MAAMnD,EAAWJ,CAAK,CAAC,QAAQ4B,IAAU,8DAA8D4B,CAAU,MAAMpD,EAAWwB,CAAO,CAAC,SAAS,EAAE,4CAA4CU,CAAK,iFAAiFwB,CAAc,GAAGE,CAAgB;AACzoB;AAEO,SAASC,GACdtE,GACAC,GACAC,GACAC,GACQ;AACR,QAAM;AAAA,IACJ,MAAAoE;AAAA,IACA,OAAAC;AAAA,IACA,QAAAC;AAAA,IACA,aAAaC;AAAA,IACb,UAAA3D,IAAW,CAAA;AAAA,IACX,YAAA4D;AAAA,IACA,aAAAC;AAAA,IACA,OAAOC;AAAA,EAAA,IACJ7E,EAAc,OAEb8E,IAAYD,IACd,wLAAwLpE,EAAWoE,CAAM,CAAC,YAC1M,IACEpD,IAAeV,EAClB;AAAA,IACC,CAAC,MACC,mIAAwIN,EAAW,CAAC,CAAC;AAAA,EAAA,EAExJ,KAAK,EAAE,GACJsE,IAAcH,IAChB,sFACA;AACJ,SAAO,QAAQpE,EAAgBR,EAAM,EAAE,CAAC,0HAA0H4E,IAAc,4BAA4B,uBAAuB,aAAaA,IAAc,gCAAgC,4BAA4B,0BAA0BE,CAAS,4EAA4ErE,EAAW8D,CAAI,CAAC,QAAQG,IAAO,gEAAgEjE,EAAWiE,CAAI,CAAC,SAAS,EAAE,0FAA0FjE,EAAW+D,CAAK,CAAC,UAAUC,IAAS,8CAA8ChE,EAAWgE,CAAM,CAAC,YAAY,EAAE,0EAA0EhD,CAAY,QAAQkD,IAAa,0DAA0DI,CAAW,gFAAgFtE,EAAWkE,CAAU,CAAC,cAAc,EAAE;AACvhC;AAEO,SAASK,GACdhF,GACAC,GACAC,GACAC,GACAQ,GACQ;AACR,QAAM,EAAE,OAAAN,GAAO,UAAAO,GAAU,OAAAqE,IAAQ,CAAA,EAAC,IAAOjF,EAAc,OAGjDgB,IAASC,EAAiBjB,EAAM,MAAM,IAAI,cAAc,GACxDkF,IAAU,KAAK,IAAID,EAAM,QAAQ,CAAC,GAClC/D,IAAmBC,EAAyB,EAAE,IAAI+D,KAAW,GAAG,GAAGA,CAAO,GAC1E,EAAE,cAAA9D,GAAc,cAAAC,MAAiBC,EAA6BN,GAAQE,GAAkB,QAAQ,qBAAqB,GAErHM,IACJnB,KAASO,IACL,qFAAqFP,IAAQ,uEAAuEI,EAAWJ,CAAK,CAAC,UAAU,EAAE,GAAGO,IAAW,gEAAgEH,EAAWG,CAAQ,CAAC,SAAS,EAAE,WAC9S;AAEN,MAAI,CAACD;AACH,UAAM,IAAI,MAAM,6CAA6C;AAG/D,QAAMwE,IAAYF,EACf;AAAA,IAAI,CAACG,MACJzE;AAAA,MACE,EAAE,IAAI,GAAGX,EAAM,EAAE,SAAS,MAAM,eAAe,OAAOoF,EAAA;AAAA,MACtDnF,IAAQ;AAAA,MACRC;AAAA,MACAC;AAAA,IAAA;AAAA,EACF,EAED,KAAK,EAAE;AAEV,SAAO,UAAUkB,CAAY,oBAAoBU,EAAY/B,EAAM,EAAE,CAAC,IAAIQ,EAAgBR,EAAM,EAAE,CAAC,8HAA8HwB,CAAU,YAAYR,CAAM,YAAYI,CAAY,KAAK+D,CAAS;AACrS;AAEO,SAASE,GACdrF,GACAC,GACAC,GACAC,GACQ;AACR,QAAM;AAAA,IACJ,OAAAmF;AAAA,IACA,YAAAC;AAAA,IACA,YAAAC;AAAA,IACA,eAAAC;AAAA,IACA,cAAAC;AAAA,IACA,QAAAC;AAAA,EAAA,IACG3F,EAAc,OAEb4F,IAAaD,IACf,+EAA+E,IAAS,OAAOA,CAAM,CAAC,WACtG,IACEE,IAAaH,IACf,aAAajF,EAAWiF,CAAY,CAAC,UAAUjF,EAAW8E,CAAU,CAAC,mFACrE,gMACEA,IACIA,EACG,MAAM,GAAG,EACT,IAAI,CAACO,MAAcA,EAAE,CAAC,CAAC,EACvB,KAAK,EAAE,EACP,cACA,MAAM,GAAG,CAAC,IACb,GACN;AACJ,SAAO,QAAQtF,EAAgBR,EAAM,EAAE,CAAC,sGAAsG4F,CAAU,gHAAgHnF,EAAW6E,CAAK,CAAC,sGAAsGO,CAAU,uCAAuCpF,EAAW8E,CAAU,CAAC,SAASC,KAAcC,IAAgB,kEAAkEhF,EAAW+E,KAAc,EAAE,CAAC,GAAGA,KAAcC,IAAgB,OAAO,EAAE,GAAGhF,EAAWgF,KAAiB,EAAE,CAAC,WAAW,EAAE;AACtqB;AAEO,SAASM,GACd/F,GACAC,GACAC,GACAC,GACAQ,GACQ;AACR,QAAM;AAAA,IACJ,OAAAN;AAAA,IACA,UAAAO;AAAA,IACA,SAAAC,IAAU;AAAA,IACV,cAAAmF,IAAe,CAAA;AAAA,EAAC,IACbhG,EAAc,OAGbgB,IAASC,EAAiBjB,EAAM,MAAM,IAAI,kBAAkB,GAC5DkB,IAAmBC,EAAyBN,GAAS,GAAG,GAAGA,CAAO,GAClE,EAAE,cAAAO,GAAc,cAAAC,EAAA,IAAiBC,EAA6BN,GAAQE,GAAkB,MAAM,GAE9FM,IACJnB,KAASO,IACL,qFAAqFP,IAAQ,uEAAuEI,EAAWJ,CAAK,CAAC,UAAU,EAAE,GAAGO,IAAW,gEAAgEH,EAAWG,CAAQ,CAAC,SAAS,EAAE,WAC9S;AAEN,MAAI,CAACD;AACH,UAAM,IAAI,MAAM,qDAAqD;AAGvE,QAAMsF,IAAmBD,EACtB;AAAA,IAAI,CAACE,MACJvF;AAAA,MACE,EAAE,IAAI,GAAGX,EAAM,EAAE,MAAM,MAAM,eAAe,OAAOkG,EAAA;AAAA,MACnDjG,IAAQ;AAAA,MACRC;AAAA,MACAC;AAAA,IAAA;AAAA,EACF,EAED,KAAK,EAAE;AAEV,SAAO,UAAUkB,CAAY,oBAAoBU,EAAY/B,EAAM,EAAE,CAAC,IAAIQ,EAAgBR,EAAM,EAAE,CAAC,8HAA8HwB,CAAU,sCAAsCR,CAAM,YAAYI,CAAY,KAAK6E,CAAgB;AACtU;AAEO,SAASE,GACdnG,GACAC,GACAC,GACAC,GACQ;AACR,QAAM,EAAE,UAAAiG,GAAU,QAAAC,EAAA,IAAYrG,EAAc;AAC5C,SAAO,YAAYQ,EAAgBR,EAAM,EAAE,CAAC,4NAA4NS,EAAW2F,CAAQ,CAAC,qFAAqF3F,EAAW4F,CAAM,CAAC;AACrY;AAEO,SAASC,GACdtG,GACAC,GACAC,GACAC,GACAQ,GACQ;AACR,QAAM,EAAE,OAAAN,GAAO,UAAAO,GAAU,OAAA2F,IAAQ,CAAA,EAAC,IAAOvG,EAAc,OAEjDwB,IACJnB,KAASO,IACL,qFAAqFP,IAAQ,uEAAuEI,EAAWJ,CAAK,CAAC,UAAU,EAAE,GAAGO,IAAW,gEAAgEH,EAAWG,CAAQ,CAAC,SAAS,EAAE,WAC9S;AAEN,MAAI,CAACD;AACH,UAAM,IAAI,MAAM,yCAAyC;AAG3D,QAAM6F,IAAYD,EACf;AAAA,IAAI,CAACE,MACJ9F;AAAA,MACE,EAAE,IAAI,GAAGX,EAAM,EAAE,QAAQ,MAAM,WAAW,OAAOyG,EAAA;AAAA,MACjDxG,IAAQ;AAAA,MACRC;AAAA,MACAC;AAAA,IAAA;AAAA,EACF,EAED,KAAK,EAAE;AAEV,SAAO,YAAY4B,EAAY/B,EAAM,EAAE,CAAC,IAAIQ,EAAgBR,EAAM,EAAE,CAAC,6HAA6HwB,CAAU,QAAQgF,CAAS;AAC/N;AAEO,SAASE,GACd1G,GACAC,GACAC,GACAC,GACQ;AACR,QAAM,EAAE,OAAAE,GAAO,UAAAO,GAAU,OAAA2F,IAAQ,CAAA,EAAC,IAAOvG,EAAc,OAGjDgB,IAASC,EAAiBjB,EAAM,MAAM,IAAI,YAAY,GACtDkB,IAAmBC,EAAyB,EAAE,IAAIoF,EAAM,UAAU,GAAG,GAAGA,EAAM,MAAM,GACpF,EAAE,cAAAnF,GAAc,cAAAC,MAAiBC,EAA6BN,GAAQE,GAAkB,QAAQ,qBAAqB,GAErHM,IACJnB,KAASO,IACL,yDAAyDP,IAAQ,uEAAuEI,EAAWJ,CAAK,CAAC,UAAU,EAAE,GAAGO,IAAW,gEAAgEH,EAAWG,CAAQ,CAAC,SAAS,EAAE,WAClR,IAEA4F,IAAYD,EACf;AAAA,IACC,CAACE,MACC,8GAA8GhG,EAAWgG,EAAE,UAAU,EAAE,CAAC,GAAGhG,EAAWgG,EAAE,KAAK,CAAC,GAAGhG,EAAWgG,EAAE,UAAU,EAAE,CAAC,mDAAmDhG,EAAWgG,EAAE,KAAK,CAAC;AAAA,EAAA,EAEpQ,KAAK,EAAE;AAEV,SAAO,UAAUpF,CAAY,oBAAoBU,EAAY/B,EAAM,EAAE,CAAC,IAAIQ,EAAgBR,EAAM,EAAE,CAAC,mIAAmIwB,CAAU,YAAYR,CAAM,YAAYI,CAAY,KAAKoF,CAAS;AAC1S;AAEO,SAASG,GACd3G,GACAC,GACAC,GACAC,GACQ;AACR,QAAM,EAAE,OAAAyG,GAAO,OAAAC,GAAO,QAAAC,GAAQ,QAAAC,EAAA,IAAY/G,EAAc;AACxD,SAAO,QAAQQ,EAAgBR,EAAM,EAAE,CAAC,4GAA4GS,EAAWqG,KAAU,EAAE,CAAC,GAAGrG,EAAWmG,CAAK,CAAC,GAAGnG,EAAWsG,KAAU,EAAE,CAAC,mDAAmDtG,EAAWoG,CAAK,CAAC;AACjS;AAEO,SAASG,GACdhH,GACAC,GACAC,GACAC,GACQ;AACR,QAAM,EAAE,OAAAE,GAAO,OAAA4G,IAAQ,CAAA,GAAI,WAAAC,EAAA,IAAelH,EAAc,OAElDmH,IAAY9G,IACd,gEAAgEI,EAAWJ,CAAK,CAAC,SACjF,IAEE+G,IAAYH,EACf;AAAA,IACC,CAACI,MACC,aAAa5G,EAAW4G,EAAE,GAAG,CAAC,UAAU5G,EAAW4G,EAAE,GAAG,CAAC,+CAA+CH,IAAY,2CAA2C,EAAE;AAAA,EAAA,EAEpK,KAAK,EAAE;AAEV,SAAO,YAAYnF,EAAY/B,EAAM,EAAE,CAAC,IAAIQ,EAAgBR,EAAM,EAAE,CAAC,kJAAkJmH,CAAS,yGAAyGC,CAAS;AACpV;AAEO,SAASE,GACdtH,GACAC,GACAC,GACAC,GACQ;AACR,QAAM;AAAA,IACJ,OAAAoH,IAAQ,CAAA;AAAA,IACR,MAAAC,IAAO;AAAA,IACP,SAAA1G,IAAU;AAAA,EAAA,IACPd,EAAc,OAEbyH,IAAkC;AAAA,IACtC,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EAAA,GAGAC,IAAWD,EAAQD,CAAI,KAAKC,EAAQ,IAEpCE,IAAYJ,EACf;AAAA,IACC,CAACF,MACC,YAAY5G,EAAW4G,EAAE,GAAG,CAAC,0HAA0HvG,MAAY,WAAW,QAAQ4G,CAAQ,gBAAgBA,CAAQ,aAAa5G,MAAY,WAAW,QAAQ4G,CAAQ,gBAAgBA,CAAQ,uBAAuB5G,MAAY,WAAW,sBAAsB,aAAa,oBAAoBA,MAAY,WAAW,QAAQ,GAAG,2DAA2DL,EAAW4G,EAAE,QAAQ,CAAC;AAAA,EAAA,EAE7f,KAAK,EAAE;AAEV,SAAO,QAAQ7G,EAAgBR,EAAM,EAAE,CAAC,2DAA2D2H,CAAS;AAC9G;"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { resolveNavbarStyles as
|
|
1
|
+
import { resolveNavbarStyles as se, mergeStyles as de, applyOpacityToColor as le } from "../../styleResolver.js";
|
|
2
2
|
import { escapeHtml as a, resolveHref as l, linkTargetAttr as c, blockIdAttr as ce, dataBlockIdAttr as ge } from "../../shared/htmlHelpers.js";
|
|
3
3
|
function $e(e, be, r, g) {
|
|
4
4
|
const {
|
|
5
5
|
variation: w = "navbar-moderno",
|
|
6
6
|
logo: n,
|
|
7
|
-
logoText:
|
|
8
|
-
links:
|
|
9
|
-
ctaButton:
|
|
7
|
+
logoText: k,
|
|
8
|
+
links: S = [],
|
|
9
|
+
ctaButton: s,
|
|
10
10
|
sticky: E,
|
|
11
11
|
floating: b = !1,
|
|
12
12
|
layout: L,
|
|
@@ -14,7 +14,7 @@ function $e(e, be, r, g) {
|
|
|
14
14
|
borderPosition: A = "none",
|
|
15
15
|
borderWidth: T = 1,
|
|
16
16
|
borderColor: j = "#e5e7eb"
|
|
17
|
-
} = e.props, i =
|
|
17
|
+
} = e.props, i = se(
|
|
18
18
|
e.props,
|
|
19
19
|
e.id || "",
|
|
20
20
|
g
|
|
@@ -53,19 +53,19 @@ function $e(e, be, r, g) {
|
|
|
53
53
|
D,
|
|
54
54
|
M,
|
|
55
55
|
W
|
|
56
|
-
),
|
|
57
|
-
let
|
|
58
|
-
(
|
|
59
|
-
let y =
|
|
60
|
-
if (
|
|
61
|
-
const t = l(
|
|
62
|
-
y = `<a href="${a(t)}"${
|
|
56
|
+
), C = typeof n == "string" ? n : n?.src ?? "", Y = typeof n == "string" ? k || "Logo" : n?.alt ?? k ?? "Logo";
|
|
57
|
+
let p = typeof n == "object" && n?.href ? n.href : "";
|
|
58
|
+
(p === "/" || p === "") && (p = r ?? "/site");
|
|
59
|
+
let y = C ? `<img src="${a(C)}" alt="${a(Y)}" style="height: ${B}px; max-height: ${B}px; object-fit: contain;" class="sg-navbar__brand-img" />` : '<div style="display: flex; align-items: center; justify-content: center; height: 40px; width: 100px; background-color: #e5e7eb; border: 2px solid #d1d5db; border-radius: 4px; font-size: 16px; font-weight: 600; color: #6b7280;">Logo</div>';
|
|
60
|
+
if (p && y) {
|
|
61
|
+
const t = l(p, r), o = c(t, r);
|
|
62
|
+
y = `<a href="${a(t)}"${o} class="sg-navbar__brand-link" style="display: flex; align-items: center;">${y}</a>`;
|
|
63
63
|
}
|
|
64
|
-
const F = e.props.bg || "#ffffff", G = e.props.opacity || 100, K = le(F, G),
|
|
64
|
+
const F = e.props.bg || "#ffffff", G = e.props.opacity || 100, K = le(F, G), v = e.props.linkColor || g?.colors?.linkColor || g?.colors?.text || "#1f2937", q = S.map((t) => {
|
|
65
65
|
if (t.dropdown && Array.isArray(t.dropdown)) {
|
|
66
|
-
const x = t.dropdown.map((
|
|
67
|
-
const
|
|
68
|
-
return `<a href="${a(
|
|
66
|
+
const x = t.dropdown.map((u) => {
|
|
67
|
+
const f = l(u.href || "#", r), _ = c(f, r);
|
|
68
|
+
return `<a href="${a(f)}"${_} class="sg-navbar-dropdown__item" style="${i.dropdownItem}">${a(u.text)}</a>`;
|
|
69
69
|
}).join("");
|
|
70
70
|
return `
|
|
71
71
|
<div class="sg-navbar__dropdown-wrapper">
|
|
@@ -79,9 +79,9 @@ function $e(e, be, r, g) {
|
|
|
79
79
|
</div>
|
|
80
80
|
`;
|
|
81
81
|
}
|
|
82
|
-
const
|
|
83
|
-
return `<a href="${a(
|
|
84
|
-
}).join(""),
|
|
82
|
+
const o = l(t.href || "#", r), h = c(o, r);
|
|
83
|
+
return `<a href="${a(o)}"${h} class="sg-navbar__link" style="${i.link}">${a(t.text)}</a>`;
|
|
84
|
+
}).join(""), H = s ? l(s.href || "#", r) : "#", U = s ? c(H, r) : "", $ = s ? `<a href="${a(H)}"${U} class="sg-navbar__btn" data-block-group="Botao CTA" style="${i.button}">${a(s.text)}</a>` : "", V = m ? `max-width: 1200px; margin: 0 auto; padding: 0 ${d ? "1rem" : "1.5rem"}; display: grid; grid-template-columns: 1fr auto 1fr; align-items: center; gap: ${d ? "1rem" : "1.5rem"};` : `width: 100%; max-width: 100%; padding: 0 ${b ? "2rem" : d ? "1rem" : "1.5rem"}; display: flex; justify-content: space-between; align-items: center; gap: ${d ? "1.5rem" : "2rem"};`, X = `display: flex; align-items: center; gap: ${d ? "1rem" : "1.5rem"}; flex-wrap: wrap;${m ? " justify-self: center;" : ""}`, J = m ? "flex-shrink: 0; justify-self: start;" : "flex-shrink: 0;", Q = `<div class="sg-navbar__menu" data-block-group="Links" style="${X}">${q}${m ? "" : $}</div>`, Z = m && s ? `<div class="sg-navbar__actions" style="flex-shrink: 0; justify-self: end;">${$}</div>` : "", P = `
|
|
85
85
|
<button
|
|
86
86
|
id="sg-navbar-hamburger-${e.id}"
|
|
87
87
|
class="sg-navbar__hamburger"
|
|
@@ -95,7 +95,7 @@ function $e(e, be, r, g) {
|
|
|
95
95
|
padding: 0.5rem;
|
|
96
96
|
z-index: 1002;
|
|
97
97
|
position: relative;
|
|
98
|
-
color: ${
|
|
98
|
+
color: ${v};
|
|
99
99
|
"
|
|
100
100
|
>
|
|
101
101
|
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
@@ -118,18 +118,18 @@ function $e(e, be, r, g) {
|
|
|
118
118
|
z-index: 1000;
|
|
119
119
|
"
|
|
120
120
|
></div>
|
|
121
|
-
`, te =
|
|
121
|
+
`, te = S.map((t) => {
|
|
122
122
|
if (t.dropdown && Array.isArray(t.dropdown)) {
|
|
123
|
-
const x = t.dropdown.map((
|
|
124
|
-
const
|
|
123
|
+
const x = t.dropdown.map((u) => {
|
|
124
|
+
const f = l(u.href || "#", r), _ = c(f, r);
|
|
125
125
|
return `
|
|
126
126
|
<a
|
|
127
|
-
href="${a(
|
|
127
|
+
href="${a(f)}"${_}
|
|
128
128
|
class="sg-navbar__link-mobile sg-navbar__link-mobile--dropdown-item"
|
|
129
129
|
style="
|
|
130
130
|
display: block;
|
|
131
131
|
padding: 0.75rem 0 0.75rem 1.5rem;
|
|
132
|
-
color: ${
|
|
132
|
+
color: ${v};
|
|
133
133
|
text-decoration: none;
|
|
134
134
|
font-weight: 400;
|
|
135
135
|
font-size: 0.9rem;
|
|
@@ -137,28 +137,28 @@ function $e(e, be, r, g) {
|
|
|
137
137
|
transition: color 0.2s;
|
|
138
138
|
"
|
|
139
139
|
>
|
|
140
|
-
${a(
|
|
140
|
+
${a(u.text)}
|
|
141
141
|
</a>
|
|
142
142
|
`;
|
|
143
143
|
}).join("");
|
|
144
144
|
return `
|
|
145
145
|
<div class="sg-navbar__link-mobile sg-navbar__link-mobile--has-dropdown" style="border-bottom: 1px solid rgba(0,0,0,0.05);">
|
|
146
|
-
<div style="display: block; padding: 1rem 0; color: ${
|
|
146
|
+
<div style="display: block; padding: 1rem 0; color: ${v}; font-weight: 600; font-size: 1rem;">
|
|
147
147
|
${a(t.text)}
|
|
148
148
|
</div>
|
|
149
149
|
${x}
|
|
150
150
|
</div>
|
|
151
151
|
`;
|
|
152
152
|
}
|
|
153
|
-
const
|
|
153
|
+
const o = l(t.href || "#", r), h = c(o, r);
|
|
154
154
|
return `
|
|
155
155
|
<a
|
|
156
|
-
href="${a(
|
|
156
|
+
href="${a(o)}"${h}
|
|
157
157
|
class="sg-navbar__link-mobile"
|
|
158
158
|
style="
|
|
159
159
|
display: block;
|
|
160
160
|
padding: 1rem 0;
|
|
161
|
-
color: ${
|
|
161
|
+
color: ${v};
|
|
162
162
|
text-decoration: none;
|
|
163
163
|
font-weight: 500;
|
|
164
164
|
font-size: 1rem;
|
|
@@ -200,7 +200,7 @@ function $e(e, be, r, g) {
|
|
|
200
200
|
border: none;
|
|
201
201
|
cursor: pointer;
|
|
202
202
|
padding: 0.5rem;
|
|
203
|
-
color: ${
|
|
203
|
+
color: ${v};
|
|
204
204
|
font-size: 2rem;
|
|
205
205
|
line-height: 1;
|
|
206
206
|
"
|
|
@@ -371,7 +371,7 @@ function $e(e, be, r, g) {
|
|
|
371
371
|
<\/script>
|
|
372
372
|
`, ie = `
|
|
373
373
|
<div class="sg-navbar__container" style="${V}">
|
|
374
|
-
<div class="sg-navbar__brand" style="${J}">
|
|
374
|
+
<div class="sg-navbar__brand" data-block-group="Logo e Marca" style="${J}">
|
|
375
375
|
${y}
|
|
376
376
|
</div>
|
|
377
377
|
${Q}
|
|
@@ -379,8 +379,8 @@ function $e(e, be, r, g) {
|
|
|
379
379
|
${P}
|
|
380
380
|
</div>
|
|
381
381
|
`, I = [i.css, re].filter(Boolean).join(`
|
|
382
|
-
`),
|
|
383
|
-
return `<nav ${ce(e.id)} ${ge(e.id)} class="${a(O)}" data-variation="${a(w)}" style="${N}">${
|
|
382
|
+
`), oe = I ? `<style>${I}</style>` : "";
|
|
383
|
+
return `<nav ${ce(e.id)} ${ge(e.id)} class="${a(O)}" data-variation="${a(w)}" style="${N}">${oe}${ie}</nav>${ee}${ae}${ne}`;
|
|
384
384
|
}
|
|
385
385
|
export {
|
|
386
386
|
$e as exportNavbar
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NavbarExporter.js","sources":["../../../../../src/engine/export/exporters/sections/NavbarExporter.ts"],"sourcesContent":["/**\n * Navbar Section Exporter\n */\n\nimport { Block } from \"../../../schema/siteDocument\";\nimport { ThemeTokens } from \"../../../schema/themeTokens\";\nimport {\n resolveNavbarStyles,\n mergeStyles,\n applyOpacityToColor,\n} from \"../../styleResolver\";\nimport {\n dataBlockIdAttr,\n blockIdAttr,\n escapeHtml,\n resolveHref,\n linkTargetAttr,\n} from \"../../shared/htmlHelpers\";\n\nexport function exportNavbar(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const {\n variation = \"navbar-moderno\",\n logo,\n logoText,\n links = [],\n ctaButton,\n sticky,\n floating = false,\n layout,\n logoHeight = 70,\n borderPosition = \"none\",\n borderWidth = 1,\n borderColor = \"#e5e7eb\",\n } = (block as any).props;\n\n // Use Style Resolver to get complete inline styles\n const resolvedStyles = resolveNavbarStyles(\n (block as any).props,\n block.id || \"\",\n theme,\n );\n\n // Classe CSS baseada na variação\n const variationClassMap: Record<string, string> = {\n \"navbar-simples\": \"sg-navbar--simples\",\n \"navbar-moderno\": \"sg-navbar--moderno\",\n \"navbar-glass\": \"sg-navbar--glass\",\n \"navbar-elegante\": \"sg-navbar--elegante\",\n \"navbar-pill\": \"sg-navbar--pill\",\n };\n const variationClass = variationClassMap[variation] || \"sg-navbar--moderno\";\n\n // Determine effective layout\n const effectiveLayout = layout || \"expanded\";\n const isCentered = effectiveLayout === \"centered\";\n const isCompact = layout === \"compact\";\n\n const navClasses = [\n \"sg-navbar\",\n variationClass,\n sticky ? \"sg-navbar--sticky\" : \"\",\n floating ? \"sg-navbar--floating\" : \"\",\n isCompact ? \"sg-navbar--compact\" : \"\",\n ]\n .filter(Boolean)\n .join(\" \");\n\n // Build nav style from resolved styles + layout modifiers\n // Note: floating mode already includes position: fixed in resolvedStyles.nav\n // Changed from sticky to fixed to avoid navbar occupying space\n const stickyStyle =\n sticky && !floating ? \"position: fixed; top: 0; left: 0; right: 0; width: 100%; z-index: 1000\" : \"\";\n // Borda baseada na posição selecionada\n const getBorderStyle = (): string => {\n if (borderPosition === \"none\") return \"\";\n const borderValue = `${borderWidth}px solid ${borderColor}`;\n\n switch (borderPosition) {\n case \"all\":\n return `border: ${borderValue}`;\n case \"top\":\n return `border-top: ${borderValue}`;\n case \"bottom\":\n return `border-bottom: ${borderValue}`;\n case \"left\":\n return `border-left: ${borderValue}`;\n case \"right\":\n return `border-right: ${borderValue}`;\n default:\n return \"\";\n }\n };\n const baseStyle = getBorderStyle();\n const paddingStyle = \"\";\n\n // Navbar flutuante: centralizado com margin auto e próximo ao topo\n const floatingCompactStyle = floating\n ? \"max-width: 1200px; width: calc(100% - 4rem); margin: 0.5rem auto 0; left: 0; right: 0;\"\n : \"\";\n\n // Merge all nav styles (resolvedStyles.nav contains bg, opacity, position for floating, border-radius, shadow)\n const navStyle = mergeStyles(\n resolvedStyles.nav,\n paddingStyle,\n baseStyle,\n stickyStyle,\n floatingCompactStyle,\n );\n\n const logoUrl = typeof logo === \"string\" ? logo : (logo?.src ?? \"\");\n const logoAlt =\n typeof logo === \"string\"\n ? logoText || \"Logo\"\n : (logo?.alt ?? logoText ?? \"Logo\");\n let logoHref = typeof logo === \"object\" && logo?.href ? logo.href : \"\";\n if (logoHref === \"/\" || logoHref === \"\") logoHref = basePath ?? \"/site\";\n\n // Brand with resolved styles\n let logoHtml =\n logoUrl\n ? `<img src=\"${escapeHtml(logoUrl)}\" alt=\"${escapeHtml(logoAlt)}\" style=\"height: ${logoHeight}px; max-height: ${logoHeight}px; object-fit: contain;\" class=\"sg-navbar__brand-img\" />`\n : `<div style=\"display: flex; align-items: center; justify-content: center; height: 40px; width: 100px; background-color: #e5e7eb; border: 2px solid #d1d5db; border-radius: 4px; font-size: 16px; font-weight: 600; color: #6b7280;\">Logo</div>`;\n if (logoHref && logoHtml) {\n const resolvedLogoHref = resolveHref(logoHref, basePath);\n const logoTargetAttr = linkTargetAttr(resolvedLogoHref, basePath);\n logoHtml = `<a href=\"${escapeHtml(resolvedLogoHref)}\"${logoTargetAttr} class=\"sg-navbar__brand-link\" style=\"display: flex; align-items: center;\">${logoHtml}</a>`;\n }\n\n // Extrair cores da navbar para usar no sidebar mobile\n const navbarBg = (block as any).props.bg || \"#ffffff\";\n const navbarOpacity = (block as any).props.opacity || 100;\n const sidebarBg = applyOpacityToColor(navbarBg, navbarOpacity);\n\n // Usar linkColor da paleta se disponível, caso contrário fallback para text\n const linkColor =\n (block as any).props.linkColor ||\n theme?.colors?.linkColor ||\n theme?.colors?.text ||\n \"#1f2937\";\n\n // Links with resolved styles (complete inline styling)\n const linksHtml = links\n .map((l: any) => {\n if (l.dropdown && Array.isArray(l.dropdown)) {\n // Link com dropdown\n const dropdownItemsHtml = l.dropdown\n .map((item: any) => {\n const itemResolved = resolveHref(item.href || \"#\", basePath);\n const itemTargetAttr = linkTargetAttr(itemResolved, basePath);\n return `<a href=\"${escapeHtml(itemResolved)}\"${itemTargetAttr} class=\"sg-navbar-dropdown__item\" style=\"${resolvedStyles.dropdownItem}\">${escapeHtml(item.text)}</a>`;\n })\n .join(\"\");\n\n return `\n <div class=\"sg-navbar__dropdown-wrapper\">\n <button class=\"sg-navbar__link sg-navbar__link--has-dropdown\" style=\"${resolvedStyles.link}\">\n ${escapeHtml(l.text)}\n <!-- Chevron adicionado via CSS ::after -->\n </button>\n <div class=\"sg-navbar-dropdown\" style=\"${resolvedStyles.dropdown}\">\n ${dropdownItemsHtml}\n </div>\n </div>\n `;\n }\n // Link normal sem dropdown\n const resolved = resolveHref(l.href || \"#\", basePath);\n const targetAttr = linkTargetAttr(resolved, basePath);\n return `<a href=\"${escapeHtml(resolved)}\"${targetAttr} class=\"sg-navbar__link\" style=\"${resolvedStyles.link}\">${escapeHtml(l.text)}</a>`;\n })\n .join(\"\");\n\n // CTA Button with resolved styles (complete inline styling)\n const ctaResolved = ctaButton\n ? resolveHref(ctaButton.href || \"#\", basePath)\n : \"#\";\n const ctaTargetAttr = ctaButton\n ? linkTargetAttr(ctaResolved, basePath)\n : \"\";\n const ctaBtnHtml = ctaButton\n ? `<a href=\"${escapeHtml(ctaResolved)}\"${ctaTargetAttr} class=\"sg-navbar__btn\" style=\"${resolvedStyles.button}\">${escapeHtml(ctaButton.text)}</a>`\n : \"\";\n\n // Container style baseado no layout\n // Nota: isCompact apenas reduz tamanhos, não altera o layout base\n const useGridLayout = isCentered;\n const containerStyle = useGridLayout\n ? `max-width: 1200px; margin: 0 auto; padding: 0 ${isCompact ? \"1rem\" : \"1.5rem\"}; display: grid; grid-template-columns: 1fr auto 1fr; align-items: center; gap: ${isCompact ? \"1rem\" : \"1.5rem\"};`\n : `width: 100%; max-width: 100%; padding: 0 ${floating ? \"2rem\" : (isCompact ? \"1rem\" : \"1.5rem\")}; display: flex; justify-content: space-between; align-items: center; gap: ${isCompact ? \"1.5rem\" : \"2rem\"};`;\n const menuStyle = `display: flex; align-items: center; gap: ${isCompact ? \"1rem\" : \"1.5rem\"}; flex-wrap: wrap;${isCentered ? \" justify-self: center;\" : \"\"}`;\n const brandWrapStyle = isCentered\n ? \"flex-shrink: 0; justify-self: start;\"\n : \"flex-shrink: 0;\";\n\n const menuHtml = `<div class=\"sg-navbar__menu\" style=\"${menuStyle}\">${linksHtml}${!isCentered ? ctaBtnHtml : \"\"}</div>`;\n const actionsHtml =\n isCentered && ctaButton\n ? `<div class=\"sg-navbar__actions\" style=\"flex-shrink: 0; justify-self: end;\">${ctaBtnHtml}</div>`\n : \"\";\n\n // Container HTML\n const containerHtml = `<div class=\"sg-navbar__container\" style=\"${containerStyle}\"><div class=\"sg-navbar__brand\" style=\"${brandWrapStyle}\">${logoHtml}</div>${menuHtml}${actionsHtml}</div>`;\n\n // Inject dynamic CSS styles (hover effects) if present\n const styleBlock = resolvedStyles.css ? `<style>${resolvedStyles.css}</style>` : \"\";\n\n // ========== MOBILE SIDEBAR COMPONENTS ==========\n\n // 1. Hamburger Button (visible only in mobile)\n const hamburgerHtml = `\n <button\n id=\"sg-navbar-hamburger-${block.id}\"\n class=\"sg-navbar__hamburger\"\n aria-label=\"Menu\"\n aria-expanded=\"false\"\n style=\"\n display: none;\n background: transparent;\n border: none;\n cursor: pointer;\n padding: 0.5rem;\n z-index: 1002;\n position: relative;\n color: ${linkColor};\n \"\n >\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <line x1=\"3\" y1=\"6\" x2=\"21\" y2=\"6\" class=\"sg-hamburger-line sg-hamburger-top\" style=\"transition: transform 0.3s ease, opacity 0.3s ease;\"/>\n <line x1=\"3\" y1=\"12\" x2=\"21\" y2=\"12\" class=\"sg-hamburger-line sg-hamburger-middle\" style=\"transition: transform 0.3s ease, opacity 0.3s ease;\"/>\n <line x1=\"3\" y1=\"18\" x2=\"21\" y2=\"18\" class=\"sg-hamburger-line sg-hamburger-bottom\" style=\"transition: transform 0.3s ease, opacity 0.3s ease;\"/>\n </svg>\n </button>\n `;\n\n // 2. Overlay (semi-transparent backdrop)\n const overlayHtml = `\n <div\n id=\"sg-navbar-overlay-${block.id}\"\n class=\"sg-navbar__overlay\"\n style=\"\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.5);\n opacity: 0;\n visibility: hidden;\n transition: opacity 0.3s ease, visibility 0.3s ease;\n z-index: 1000;\n \"\n ></div>\n `;\n\n // 3. Mobile links (stack vertical)\n const linksMobileHtml = links\n .map((l: any) => {\n if (l.dropdown && Array.isArray(l.dropdown)) {\n // Link com dropdown no mobile\n const dropdownItemsHtml = l.dropdown\n .map((item: any) => {\n const itemResolved = resolveHref(item.href || \"#\", basePath);\n const itemTargetAttr = linkTargetAttr(itemResolved, basePath);\n return `\n <a\n href=\"${escapeHtml(itemResolved)}\"${itemTargetAttr}\n class=\"sg-navbar__link-mobile sg-navbar__link-mobile--dropdown-item\"\n style=\"\n display: block;\n padding: 0.75rem 0 0.75rem 1.5rem;\n color: ${linkColor};\n text-decoration: none;\n font-weight: 400;\n font-size: 0.9rem;\n border-bottom: 1px solid rgba(0,0,0,0.05);\n transition: color 0.2s;\n \"\n >\n ${escapeHtml(item.text)}\n </a>\n `;\n })\n .join(\"\");\n\n return `\n <div class=\"sg-navbar__link-mobile sg-navbar__link-mobile--has-dropdown\" style=\"border-bottom: 1px solid rgba(0,0,0,0.05);\">\n <div style=\"display: block; padding: 1rem 0; color: ${linkColor}; font-weight: 600; font-size: 1rem;\">\n ${escapeHtml(l.text)}\n </div>\n ${dropdownItemsHtml}\n </div>\n `;\n }\n // Link normal sem dropdown\n const resolved = resolveHref(l.href || \"#\", basePath);\n const targetAttr = linkTargetAttr(resolved, basePath);\n return `\n <a\n href=\"${escapeHtml(resolved)}\"${targetAttr}\n class=\"sg-navbar__link-mobile\"\n style=\"\n display: block;\n padding: 1rem 0;\n color: ${linkColor};\n text-decoration: none;\n font-weight: 500;\n font-size: 1rem;\n border-bottom: 1px solid rgba(0,0,0,0.05);\n transition: color 0.2s;\n \"\n >\n ${escapeHtml(l.text)}\n </a>\n `;\n })\n .join(\"\");\n\n // 4. Sidebar container\n const sidebarHtml = `\n <div\n id=\"sg-navbar-sidebar-${block.id}\"\n class=\"sg-navbar__sidebar\"\n style=\"\n position: fixed;\n top: 0;\n right: -100%;\n width: 280px;\n max-width: 85vw;\n height: 100vh;\n background-color: ${sidebarBg};\n box-shadow: -4px 0 20px rgba(0, 0, 0, 0.15);\n transition: right 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n z-index: 1001;\n overflow-y: auto;\n padding: 4.5rem 0 2rem;\n \"\n >\n <button\n id=\"sg-navbar-close-${block.id}\"\n class=\"sg-navbar__close\"\n aria-label=\"Fechar menu\"\n style=\"\n position: absolute;\n top: 1rem;\n right: 1rem;\n background: transparent;\n border: none;\n cursor: pointer;\n padding: 0.5rem;\n color: ${linkColor};\n font-size: 2rem;\n line-height: 1;\n \"\n >\n ×\n </button>\n\n <div class=\"sg-navbar__menu-mobile\" style=\"\n display: flex;\n flex-direction: column;\n gap: 0;\n padding: 0 1.5rem;\n \">\n ${linksMobileHtml}\n ${\n ctaBtnHtml\n ? `<div style=\"margin-top: 1.5rem; padding-top: 1.5rem; border-top: 1px solid rgba(0,0,0,0.1);\">${ctaBtnHtml}</div>`\n : \"\"\n }\n </div>\n </div>\n `;\n\n // 5. Mobile CSS\n const mobileCss = `\n /* ===== MOBILE SIDEBAR STYLES ===== */\n\n /* Hamburger visible only in mobile */\n @media (max-width: 768px) {\n ${block.id ? `[data-block-id=\"${block.id}\"]` : \".sg-navbar\"} .sg-navbar__hamburger {\n display: block !important;\n }\n\n /* Desktop menu hidden in mobile */\n ${block.id ? `[data-block-id=\"${block.id}\"]` : \".sg-navbar\"} .sg-navbar__menu {\n display: none !important;\n }\n\n /* Navbar flutuante: ajuste responsivo mobile */\n ${block.id && floating ? `[data-block-id=\"${block.id}\"]` : \".sg-navbar--floating\"} {\n max-width: calc(100% - 2rem) !important;\n width: calc(100% - 2rem) !important;\n left: 0 !important;\n right: 0 !important;\n margin: 0.5rem auto 0 !important;\n }\n\n /* Hamburger animation to X */\n ${block.id ? `[data-block-id=\"${block.id}\"]` : \".sg-navbar\"} .sg-navbar__hamburger[aria-expanded=\"true\"] .sg-hamburger-top {\n transform: translateY(6px) rotate(45deg);\n }\n\n ${block.id ? `[data-block-id=\"${block.id}\"]` : \".sg-navbar\"} .sg-navbar__hamburger[aria-expanded=\"true\"] .sg-hamburger-middle {\n opacity: 0;\n }\n\n ${block.id ? `[data-block-id=\"${block.id}\"]` : \".sg-navbar\"} .sg-navbar__hamburger[aria-expanded=\"true\"] .sg-hamburger-bottom {\n transform: translateY(-6px) rotate(-45deg);\n }\n\n /* Sidebar open state */\n ${block.id ? `[data-block-id=\"${block.id}\"]` : \".sg-navbar\"} ~ .sg-navbar__sidebar.is-open {\n right: 0 !important;\n }\n\n /* Overlay visible */\n ${block.id ? `[data-block-id=\"${block.id}\"]` : \".sg-navbar\"} ~ .sg-navbar__overlay.is-visible {\n opacity: 1 !important;\n visibility: visible !important;\n }\n\n /* Link mobile hover/active */\n ${block.id ? `[data-block-id=\"${block.id}\"]` : \".sg-navbar\"} ~ .sg-navbar__sidebar .sg-navbar__link-mobile:active {\n color: ${theme?.colors?.primary || \"#3b82f6\"};\n background-color: ${theme?.colors?.primary || \"#3b82f6\"}10;\n }\n\n /* CTA button full width in sidebar */\n ${block.id ? `[data-block-id=\"${block.id}\"]` : \".sg-navbar\"} ~ .sg-navbar__sidebar .sg-navbar__btn {\n display: block;\n text-align: center;\n width: 100%;\n }\n }\n\n /* Desktop - hide mobile components */\n @media (min-width: 769px) {\n .sg-navbar__hamburger {\n display: none !important;\n }\n\n .sg-navbar__sidebar {\n display: none !important;\n }\n\n .sg-navbar__overlay {\n display: none !important;\n }\n }\n `;\n\n // 6. Mobile JavaScript\n const mobileScript = `\n<script>\n(function() {\n var navId = '${block.id}';\n var hamburger = document.getElementById('sg-navbar-hamburger-' + navId);\n var sidebar = document.getElementById('sg-navbar-sidebar-' + navId);\n var overlay = document.getElementById('sg-navbar-overlay-' + navId);\n var closeBtn = document.getElementById('sg-navbar-close-' + navId);\n\n var isOpen = false;\n\n function openSidebar() {\n isOpen = true;\n sidebar.classList.add('is-open');\n overlay.classList.add('is-visible');\n hamburger.setAttribute('aria-expanded', 'true');\n document.body.style.overflow = 'hidden';\n closeBtn.focus();\n }\n\n function closeSidebar() {\n isOpen = false;\n sidebar.classList.remove('is-open');\n overlay.classList.remove('is-visible');\n hamburger.setAttribute('aria-expanded', 'false');\n document.body.style.overflow = '';\n hamburger.focus();\n }\n\n function toggleSidebar() {\n if (isOpen) {\n closeSidebar();\n } else {\n openSidebar();\n }\n }\n\n hamburger.addEventListener('click', toggleSidebar);\n closeBtn.addEventListener('click', closeSidebar);\n overlay.addEventListener('click', closeSidebar);\n\n document.addEventListener('keydown', function(e) {\n if (e.key === 'Escape' && isOpen) {\n closeSidebar();\n }\n });\n\n sidebar.addEventListener('keydown', function(e) {\n var focusableElements = sidebar.querySelectorAll(\n 'button, a[href], [tabindex]:not([tabindex=\"-1\"])'\n );\n var firstElement = focusableElements[0];\n var lastElement = focusableElements[focusableElements.length - 1];\n\n if (e.key === 'Tab') {\n if (e.shiftKey && document.activeElement === firstElement) {\n e.preventDefault();\n lastElement.focus();\n } else if (!e.shiftKey && document.activeElement === lastElement) {\n e.preventDefault();\n firstElement.focus();\n }\n }\n });\n\n var resizeTimer;\n window.addEventListener('resize', function() {\n clearTimeout(resizeTimer);\n resizeTimer = setTimeout(function() {\n if (window.innerWidth > 768 && isOpen) {\n closeSidebar();\n }\n }, 250);\n });\n})();\n</script>\n `;\n\n // Update containerHtml to include hamburger\n const containerHtmlWithMobile = `\n <div class=\"sg-navbar__container\" style=\"${containerStyle}\">\n <div class=\"sg-navbar__brand\" style=\"${brandWrapStyle}\">\n ${logoHtml}\n </div>\n ${menuHtml}\n ${actionsHtml}\n ${hamburgerHtml}\n </div>\n `;\n\n // Combine all CSS\n const allCss = [resolvedStyles.css, mobileCss]\n .filter(Boolean)\n .join(\"\\n\");\n const styleBlockFinal = allCss ? `<style>${allCss}</style>` : \"\";\n\n return `<nav ${blockIdAttr(block.id)} ${dataBlockIdAttr(block.id)} class=\"${escapeHtml(navClasses)}\" data-variation=\"${escapeHtml(variation)}\" style=\"${navStyle}\">${styleBlockFinal}${containerHtmlWithMobile}</nav>${overlayHtml}${sidebarHtml}${mobileScript}`;\n}\n"],"names":["exportNavbar","block","depth","basePath","theme","variation","logo","logoText","links","ctaButton","sticky","floating","layout","logoHeight","borderPosition","borderWidth","borderColor","resolvedStyles","resolveNavbarStyles","variationClass","isCentered","isCompact","navClasses","stickyStyle","baseStyle","borderValue","paddingStyle","floatingCompactStyle","navStyle","mergeStyles","logoUrl","logoAlt","logoHref","logoHtml","escapeHtml","resolvedLogoHref","resolveHref","logoTargetAttr","linkTargetAttr","navbarBg","navbarOpacity","sidebarBg","applyOpacityToColor","linkColor","linksHtml","l","dropdownItemsHtml","item","itemResolved","itemTargetAttr","resolved","targetAttr","ctaResolved","ctaTargetAttr","ctaBtnHtml","containerStyle","menuStyle","brandWrapStyle","menuHtml","actionsHtml","hamburgerHtml","overlayHtml","linksMobileHtml","sidebarHtml","mobileCss","mobileScript","containerHtmlWithMobile","allCss","styleBlockFinal","blockIdAttr","dataBlockIdAttr"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"NavbarExporter.js","sources":["../../../../../src/engine/export/exporters/sections/NavbarExporter.ts"],"sourcesContent":["/**\n * Navbar Section Exporter\n */\n\nimport { Block } from \"../../../schema/siteDocument\";\nimport { ThemeTokens } from \"../../../schema/themeTokens\";\nimport {\n resolveNavbarStyles,\n mergeStyles,\n applyOpacityToColor,\n} from \"../../styleResolver\";\nimport {\n dataBlockIdAttr,\n blockIdAttr,\n escapeHtml,\n resolveHref,\n linkTargetAttr,\n} from \"../../shared/htmlHelpers\";\n\nexport function exportNavbar(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const {\n variation = \"navbar-moderno\",\n logo,\n logoText,\n links = [],\n ctaButton,\n sticky,\n floating = false,\n layout,\n logoHeight = 70,\n borderPosition = \"none\",\n borderWidth = 1,\n borderColor = \"#e5e7eb\",\n } = (block as any).props;\n\n // Use Style Resolver to get complete inline styles\n const resolvedStyles = resolveNavbarStyles(\n (block as any).props,\n block.id || \"\",\n theme,\n );\n\n // Classe CSS baseada na variação\n const variationClassMap: Record<string, string> = {\n \"navbar-simples\": \"sg-navbar--simples\",\n \"navbar-moderno\": \"sg-navbar--moderno\",\n \"navbar-glass\": \"sg-navbar--glass\",\n \"navbar-elegante\": \"sg-navbar--elegante\",\n \"navbar-pill\": \"sg-navbar--pill\",\n };\n const variationClass = variationClassMap[variation] || \"sg-navbar--moderno\";\n\n // Determine effective layout\n const effectiveLayout = layout || \"expanded\";\n const isCentered = effectiveLayout === \"centered\";\n const isCompact = layout === \"compact\";\n\n const navClasses = [\n \"sg-navbar\",\n variationClass,\n sticky ? \"sg-navbar--sticky\" : \"\",\n floating ? \"sg-navbar--floating\" : \"\",\n isCompact ? \"sg-navbar--compact\" : \"\",\n ]\n .filter(Boolean)\n .join(\" \");\n\n // Build nav style from resolved styles + layout modifiers\n // Note: floating mode already includes position: fixed in resolvedStyles.nav\n // Changed from sticky to fixed to avoid navbar occupying space\n const stickyStyle =\n sticky && !floating ? \"position: fixed; top: 0; left: 0; right: 0; width: 100%; z-index: 1000\" : \"\";\n // Borda baseada na posição selecionada\n const getBorderStyle = (): string => {\n if (borderPosition === \"none\") return \"\";\n const borderValue = `${borderWidth}px solid ${borderColor}`;\n\n switch (borderPosition) {\n case \"all\":\n return `border: ${borderValue}`;\n case \"top\":\n return `border-top: ${borderValue}`;\n case \"bottom\":\n return `border-bottom: ${borderValue}`;\n case \"left\":\n return `border-left: ${borderValue}`;\n case \"right\":\n return `border-right: ${borderValue}`;\n default:\n return \"\";\n }\n };\n const baseStyle = getBorderStyle();\n const paddingStyle = \"\";\n\n // Navbar flutuante: centralizado com margin auto e próximo ao topo\n const floatingCompactStyle = floating\n ? \"max-width: 1200px; width: calc(100% - 4rem); margin: 0.5rem auto 0; left: 0; right: 0;\"\n : \"\";\n\n // Merge all nav styles (resolvedStyles.nav contains bg, opacity, position for floating, border-radius, shadow)\n const navStyle = mergeStyles(\n resolvedStyles.nav,\n paddingStyle,\n baseStyle,\n stickyStyle,\n floatingCompactStyle,\n );\n\n const logoUrl = typeof logo === \"string\" ? logo : (logo?.src ?? \"\");\n const logoAlt =\n typeof logo === \"string\"\n ? logoText || \"Logo\"\n : (logo?.alt ?? logoText ?? \"Logo\");\n let logoHref = typeof logo === \"object\" && logo?.href ? logo.href : \"\";\n if (logoHref === \"/\" || logoHref === \"\") logoHref = basePath ?? \"/site\";\n\n // Brand with resolved styles\n let logoHtml =\n logoUrl\n ? `<img src=\"${escapeHtml(logoUrl)}\" alt=\"${escapeHtml(logoAlt)}\" style=\"height: ${logoHeight}px; max-height: ${logoHeight}px; object-fit: contain;\" class=\"sg-navbar__brand-img\" />`\n : `<div style=\"display: flex; align-items: center; justify-content: center; height: 40px; width: 100px; background-color: #e5e7eb; border: 2px solid #d1d5db; border-radius: 4px; font-size: 16px; font-weight: 600; color: #6b7280;\">Logo</div>`;\n if (logoHref && logoHtml) {\n const resolvedLogoHref = resolveHref(logoHref, basePath);\n const logoTargetAttr = linkTargetAttr(resolvedLogoHref, basePath);\n logoHtml = `<a href=\"${escapeHtml(resolvedLogoHref)}\"${logoTargetAttr} class=\"sg-navbar__brand-link\" style=\"display: flex; align-items: center;\">${logoHtml}</a>`;\n }\n\n // Extrair cores da navbar para usar no sidebar mobile\n const navbarBg = (block as any).props.bg || \"#ffffff\";\n const navbarOpacity = (block as any).props.opacity || 100;\n const sidebarBg = applyOpacityToColor(navbarBg, navbarOpacity);\n\n // Usar linkColor da paleta se disponível, caso contrário fallback para text\n const linkColor =\n (block as any).props.linkColor ||\n theme?.colors?.linkColor ||\n theme?.colors?.text ||\n \"#1f2937\";\n\n // Links with resolved styles (complete inline styling)\n const linksHtml = links\n .map((l: any) => {\n if (l.dropdown && Array.isArray(l.dropdown)) {\n // Link com dropdown\n const dropdownItemsHtml = l.dropdown\n .map((item: any) => {\n const itemResolved = resolveHref(item.href || \"#\", basePath);\n const itemTargetAttr = linkTargetAttr(itemResolved, basePath);\n return `<a href=\"${escapeHtml(itemResolved)}\"${itemTargetAttr} class=\"sg-navbar-dropdown__item\" style=\"${resolvedStyles.dropdownItem}\">${escapeHtml(item.text)}</a>`;\n })\n .join(\"\");\n\n return `\n <div class=\"sg-navbar__dropdown-wrapper\">\n <button class=\"sg-navbar__link sg-navbar__link--has-dropdown\" style=\"${resolvedStyles.link}\">\n ${escapeHtml(l.text)}\n <!-- Chevron adicionado via CSS ::after -->\n </button>\n <div class=\"sg-navbar-dropdown\" style=\"${resolvedStyles.dropdown}\">\n ${dropdownItemsHtml}\n </div>\n </div>\n `;\n }\n // Link normal sem dropdown\n const resolved = resolveHref(l.href || \"#\", basePath);\n const targetAttr = linkTargetAttr(resolved, basePath);\n return `<a href=\"${escapeHtml(resolved)}\"${targetAttr} class=\"sg-navbar__link\" style=\"${resolvedStyles.link}\">${escapeHtml(l.text)}</a>`;\n })\n .join(\"\");\n\n // CTA Button with resolved styles (complete inline styling)\n const ctaResolved = ctaButton\n ? resolveHref(ctaButton.href || \"#\", basePath)\n : \"#\";\n const ctaTargetAttr = ctaButton\n ? linkTargetAttr(ctaResolved, basePath)\n : \"\";\n const ctaBtnHtml = ctaButton\n ? `<a href=\"${escapeHtml(ctaResolved)}\"${ctaTargetAttr} class=\"sg-navbar__btn\" data-block-group=\"Botao CTA\" style=\"${resolvedStyles.button}\">${escapeHtml(ctaButton.text)}</a>`\n : \"\";\n\n // Container style baseado no layout\n // Nota: isCompact apenas reduz tamanhos, não altera o layout base\n const useGridLayout = isCentered;\n const containerStyle = useGridLayout\n ? `max-width: 1200px; margin: 0 auto; padding: 0 ${isCompact ? \"1rem\" : \"1.5rem\"}; display: grid; grid-template-columns: 1fr auto 1fr; align-items: center; gap: ${isCompact ? \"1rem\" : \"1.5rem\"};`\n : `width: 100%; max-width: 100%; padding: 0 ${floating ? \"2rem\" : (isCompact ? \"1rem\" : \"1.5rem\")}; display: flex; justify-content: space-between; align-items: center; gap: ${isCompact ? \"1.5rem\" : \"2rem\"};`;\n const menuStyle = `display: flex; align-items: center; gap: ${isCompact ? \"1rem\" : \"1.5rem\"}; flex-wrap: wrap;${isCentered ? \" justify-self: center;\" : \"\"}`;\n const brandWrapStyle = isCentered\n ? \"flex-shrink: 0; justify-self: start;\"\n : \"flex-shrink: 0;\";\n\n const menuHtml = `<div class=\"sg-navbar__menu\" data-block-group=\"Links\" style=\"${menuStyle}\">${linksHtml}${!isCentered ? ctaBtnHtml : \"\"}</div>`;\n const actionsHtml =\n isCentered && ctaButton\n ? `<div class=\"sg-navbar__actions\" style=\"flex-shrink: 0; justify-self: end;\">${ctaBtnHtml}</div>`\n : \"\";\n\n // Container HTML\n const containerHtml = `<div class=\"sg-navbar__container\" style=\"${containerStyle}\"><div class=\"sg-navbar__brand\" style=\"${brandWrapStyle}\">${logoHtml}</div>${menuHtml}${actionsHtml}</div>`;\n\n // Inject dynamic CSS styles (hover effects) if present\n const styleBlock = resolvedStyles.css ? `<style>${resolvedStyles.css}</style>` : \"\";\n\n // ========== MOBILE SIDEBAR COMPONENTS ==========\n\n // 1. Hamburger Button (visible only in mobile)\n const hamburgerHtml = `\n <button\n id=\"sg-navbar-hamburger-${block.id}\"\n class=\"sg-navbar__hamburger\"\n aria-label=\"Menu\"\n aria-expanded=\"false\"\n style=\"\n display: none;\n background: transparent;\n border: none;\n cursor: pointer;\n padding: 0.5rem;\n z-index: 1002;\n position: relative;\n color: ${linkColor};\n \"\n >\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <line x1=\"3\" y1=\"6\" x2=\"21\" y2=\"6\" class=\"sg-hamburger-line sg-hamburger-top\" style=\"transition: transform 0.3s ease, opacity 0.3s ease;\"/>\n <line x1=\"3\" y1=\"12\" x2=\"21\" y2=\"12\" class=\"sg-hamburger-line sg-hamburger-middle\" style=\"transition: transform 0.3s ease, opacity 0.3s ease;\"/>\n <line x1=\"3\" y1=\"18\" x2=\"21\" y2=\"18\" class=\"sg-hamburger-line sg-hamburger-bottom\" style=\"transition: transform 0.3s ease, opacity 0.3s ease;\"/>\n </svg>\n </button>\n `;\n\n // 2. Overlay (semi-transparent backdrop)\n const overlayHtml = `\n <div\n id=\"sg-navbar-overlay-${block.id}\"\n class=\"sg-navbar__overlay\"\n style=\"\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.5);\n opacity: 0;\n visibility: hidden;\n transition: opacity 0.3s ease, visibility 0.3s ease;\n z-index: 1000;\n \"\n ></div>\n `;\n\n // 3. Mobile links (stack vertical)\n const linksMobileHtml = links\n .map((l: any) => {\n if (l.dropdown && Array.isArray(l.dropdown)) {\n // Link com dropdown no mobile\n const dropdownItemsHtml = l.dropdown\n .map((item: any) => {\n const itemResolved = resolveHref(item.href || \"#\", basePath);\n const itemTargetAttr = linkTargetAttr(itemResolved, basePath);\n return `\n <a\n href=\"${escapeHtml(itemResolved)}\"${itemTargetAttr}\n class=\"sg-navbar__link-mobile sg-navbar__link-mobile--dropdown-item\"\n style=\"\n display: block;\n padding: 0.75rem 0 0.75rem 1.5rem;\n color: ${linkColor};\n text-decoration: none;\n font-weight: 400;\n font-size: 0.9rem;\n border-bottom: 1px solid rgba(0,0,0,0.05);\n transition: color 0.2s;\n \"\n >\n ${escapeHtml(item.text)}\n </a>\n `;\n })\n .join(\"\");\n\n return `\n <div class=\"sg-navbar__link-mobile sg-navbar__link-mobile--has-dropdown\" style=\"border-bottom: 1px solid rgba(0,0,0,0.05);\">\n <div style=\"display: block; padding: 1rem 0; color: ${linkColor}; font-weight: 600; font-size: 1rem;\">\n ${escapeHtml(l.text)}\n </div>\n ${dropdownItemsHtml}\n </div>\n `;\n }\n // Link normal sem dropdown\n const resolved = resolveHref(l.href || \"#\", basePath);\n const targetAttr = linkTargetAttr(resolved, basePath);\n return `\n <a\n href=\"${escapeHtml(resolved)}\"${targetAttr}\n class=\"sg-navbar__link-mobile\"\n style=\"\n display: block;\n padding: 1rem 0;\n color: ${linkColor};\n text-decoration: none;\n font-weight: 500;\n font-size: 1rem;\n border-bottom: 1px solid rgba(0,0,0,0.05);\n transition: color 0.2s;\n \"\n >\n ${escapeHtml(l.text)}\n </a>\n `;\n })\n .join(\"\");\n\n // 4. Sidebar container\n const sidebarHtml = `\n <div\n id=\"sg-navbar-sidebar-${block.id}\"\n class=\"sg-navbar__sidebar\"\n style=\"\n position: fixed;\n top: 0;\n right: -100%;\n width: 280px;\n max-width: 85vw;\n height: 100vh;\n background-color: ${sidebarBg};\n box-shadow: -4px 0 20px rgba(0, 0, 0, 0.15);\n transition: right 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n z-index: 1001;\n overflow-y: auto;\n padding: 4.5rem 0 2rem;\n \"\n >\n <button\n id=\"sg-navbar-close-${block.id}\"\n class=\"sg-navbar__close\"\n aria-label=\"Fechar menu\"\n style=\"\n position: absolute;\n top: 1rem;\n right: 1rem;\n background: transparent;\n border: none;\n cursor: pointer;\n padding: 0.5rem;\n color: ${linkColor};\n font-size: 2rem;\n line-height: 1;\n \"\n >\n ×\n </button>\n\n <div class=\"sg-navbar__menu-mobile\" style=\"\n display: flex;\n flex-direction: column;\n gap: 0;\n padding: 0 1.5rem;\n \">\n ${linksMobileHtml}\n ${\n ctaBtnHtml\n ? `<div style=\"margin-top: 1.5rem; padding-top: 1.5rem; border-top: 1px solid rgba(0,0,0,0.1);\">${ctaBtnHtml}</div>`\n : \"\"\n }\n </div>\n </div>\n `;\n\n // 5. Mobile CSS\n const mobileCss = `\n /* ===== MOBILE SIDEBAR STYLES ===== */\n\n /* Hamburger visible only in mobile */\n @media (max-width: 768px) {\n ${block.id ? `[data-block-id=\"${block.id}\"]` : \".sg-navbar\"} .sg-navbar__hamburger {\n display: block !important;\n }\n\n /* Desktop menu hidden in mobile */\n ${block.id ? `[data-block-id=\"${block.id}\"]` : \".sg-navbar\"} .sg-navbar__menu {\n display: none !important;\n }\n\n /* Navbar flutuante: ajuste responsivo mobile */\n ${block.id && floating ? `[data-block-id=\"${block.id}\"]` : \".sg-navbar--floating\"} {\n max-width: calc(100% - 2rem) !important;\n width: calc(100% - 2rem) !important;\n left: 0 !important;\n right: 0 !important;\n margin: 0.5rem auto 0 !important;\n }\n\n /* Hamburger animation to X */\n ${block.id ? `[data-block-id=\"${block.id}\"]` : \".sg-navbar\"} .sg-navbar__hamburger[aria-expanded=\"true\"] .sg-hamburger-top {\n transform: translateY(6px) rotate(45deg);\n }\n\n ${block.id ? `[data-block-id=\"${block.id}\"]` : \".sg-navbar\"} .sg-navbar__hamburger[aria-expanded=\"true\"] .sg-hamburger-middle {\n opacity: 0;\n }\n\n ${block.id ? `[data-block-id=\"${block.id}\"]` : \".sg-navbar\"} .sg-navbar__hamburger[aria-expanded=\"true\"] .sg-hamburger-bottom {\n transform: translateY(-6px) rotate(-45deg);\n }\n\n /* Sidebar open state */\n ${block.id ? `[data-block-id=\"${block.id}\"]` : \".sg-navbar\"} ~ .sg-navbar__sidebar.is-open {\n right: 0 !important;\n }\n\n /* Overlay visible */\n ${block.id ? `[data-block-id=\"${block.id}\"]` : \".sg-navbar\"} ~ .sg-navbar__overlay.is-visible {\n opacity: 1 !important;\n visibility: visible !important;\n }\n\n /* Link mobile hover/active */\n ${block.id ? `[data-block-id=\"${block.id}\"]` : \".sg-navbar\"} ~ .sg-navbar__sidebar .sg-navbar__link-mobile:active {\n color: ${theme?.colors?.primary || \"#3b82f6\"};\n background-color: ${theme?.colors?.primary || \"#3b82f6\"}10;\n }\n\n /* CTA button full width in sidebar */\n ${block.id ? `[data-block-id=\"${block.id}\"]` : \".sg-navbar\"} ~ .sg-navbar__sidebar .sg-navbar__btn {\n display: block;\n text-align: center;\n width: 100%;\n }\n }\n\n /* Desktop - hide mobile components */\n @media (min-width: 769px) {\n .sg-navbar__hamburger {\n display: none !important;\n }\n\n .sg-navbar__sidebar {\n display: none !important;\n }\n\n .sg-navbar__overlay {\n display: none !important;\n }\n }\n `;\n\n // 6. Mobile JavaScript\n const mobileScript = `\n<script>\n(function() {\n var navId = '${block.id}';\n var hamburger = document.getElementById('sg-navbar-hamburger-' + navId);\n var sidebar = document.getElementById('sg-navbar-sidebar-' + navId);\n var overlay = document.getElementById('sg-navbar-overlay-' + navId);\n var closeBtn = document.getElementById('sg-navbar-close-' + navId);\n\n var isOpen = false;\n\n function openSidebar() {\n isOpen = true;\n sidebar.classList.add('is-open');\n overlay.classList.add('is-visible');\n hamburger.setAttribute('aria-expanded', 'true');\n document.body.style.overflow = 'hidden';\n closeBtn.focus();\n }\n\n function closeSidebar() {\n isOpen = false;\n sidebar.classList.remove('is-open');\n overlay.classList.remove('is-visible');\n hamburger.setAttribute('aria-expanded', 'false');\n document.body.style.overflow = '';\n hamburger.focus();\n }\n\n function toggleSidebar() {\n if (isOpen) {\n closeSidebar();\n } else {\n openSidebar();\n }\n }\n\n hamburger.addEventListener('click', toggleSidebar);\n closeBtn.addEventListener('click', closeSidebar);\n overlay.addEventListener('click', closeSidebar);\n\n document.addEventListener('keydown', function(e) {\n if (e.key === 'Escape' && isOpen) {\n closeSidebar();\n }\n });\n\n sidebar.addEventListener('keydown', function(e) {\n var focusableElements = sidebar.querySelectorAll(\n 'button, a[href], [tabindex]:not([tabindex=\"-1\"])'\n );\n var firstElement = focusableElements[0];\n var lastElement = focusableElements[focusableElements.length - 1];\n\n if (e.key === 'Tab') {\n if (e.shiftKey && document.activeElement === firstElement) {\n e.preventDefault();\n lastElement.focus();\n } else if (!e.shiftKey && document.activeElement === lastElement) {\n e.preventDefault();\n firstElement.focus();\n }\n }\n });\n\n var resizeTimer;\n window.addEventListener('resize', function() {\n clearTimeout(resizeTimer);\n resizeTimer = setTimeout(function() {\n if (window.innerWidth > 768 && isOpen) {\n closeSidebar();\n }\n }, 250);\n });\n})();\n</script>\n `;\n\n // Update containerHtml to include hamburger\n const containerHtmlWithMobile = `\n <div class=\"sg-navbar__container\" style=\"${containerStyle}\">\n <div class=\"sg-navbar__brand\" data-block-group=\"Logo e Marca\" style=\"${brandWrapStyle}\">\n ${logoHtml}\n </div>\n ${menuHtml}\n ${actionsHtml}\n ${hamburgerHtml}\n </div>\n `;\n\n // Combine all CSS\n const allCss = [resolvedStyles.css, mobileCss]\n .filter(Boolean)\n .join(\"\\n\");\n const styleBlockFinal = allCss ? `<style>${allCss}</style>` : \"\";\n\n return `<nav ${blockIdAttr(block.id)} ${dataBlockIdAttr(block.id)} class=\"${escapeHtml(navClasses)}\" data-variation=\"${escapeHtml(variation)}\" style=\"${navStyle}\">${styleBlockFinal}${containerHtmlWithMobile}</nav>${overlayHtml}${sidebarHtml}${mobileScript}`;\n}\n"],"names":["exportNavbar","block","depth","basePath","theme","variation","logo","logoText","links","ctaButton","sticky","floating","layout","logoHeight","borderPosition","borderWidth","borderColor","resolvedStyles","resolveNavbarStyles","variationClass","isCentered","isCompact","navClasses","stickyStyle","baseStyle","borderValue","paddingStyle","floatingCompactStyle","navStyle","mergeStyles","logoUrl","logoAlt","logoHref","logoHtml","escapeHtml","resolvedLogoHref","resolveHref","logoTargetAttr","linkTargetAttr","navbarBg","navbarOpacity","sidebarBg","applyOpacityToColor","linkColor","linksHtml","l","dropdownItemsHtml","item","itemResolved","itemTargetAttr","resolved","targetAttr","ctaResolved","ctaTargetAttr","ctaBtnHtml","containerStyle","menuStyle","brandWrapStyle","menuHtml","actionsHtml","hamburgerHtml","overlayHtml","linksMobileHtml","sidebarHtml","mobileCss","mobileScript","containerHtmlWithMobile","allCss","styleBlockFinal","blockIdAttr","dataBlockIdAttr"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/engine/export/exporters/sections/index.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/engine/export/exporters/sections/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAqCH,OAAO,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAI1D,wBAAgB,8BAA8B,CAC5C,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,WAAW,KAAK,MAAM,QAGpF"}
|
|
@@ -1,30 +1,33 @@
|
|
|
1
1
|
import { htmlExportRegistry as r } from "../HtmlExporter.js";
|
|
2
|
-
import { exportHero as
|
|
3
|
-
import { exportNavbar as
|
|
2
|
+
import { exportHero as d } from "./HeroExporter.js";
|
|
3
|
+
import { exportNavbar as a } from "./NavbarExporter.js";
|
|
4
4
|
import { exportFooter as s } from "./FooterExporter.js";
|
|
5
|
-
import { exportFeature as
|
|
6
|
-
import { exportBlogCard as
|
|
5
|
+
import { exportFeature as g, exportCta as l, exportPricingCard as p, exportTestimonial as x, exportFaqItem as m, exportStats as C, exportStatItem as f, exportLogoCloud as h, exportSocialLinks as u, exportFeatureGrid as w, exportPricing as c, exportTestimonialGrid as G, exportFaq as E } from "./MarketingExporters.js";
|
|
6
|
+
import { exportBlogCard as P, exportTeamCard as b, exportCourseCardGrid as z, exportCountdown as B, exportCarousel as F, exportBlogCardGrid as q, exportTeamGrid as I } from "./ContentGridExporters.js";
|
|
7
|
+
import { exportBlogPostCard as S, exportBlogPostDetail as T, exportBlogPostGrid as L } from "./BlogPostExporters.js";
|
|
7
8
|
let t = null;
|
|
8
|
-
function
|
|
9
|
+
function j(e) {
|
|
9
10
|
t = e;
|
|
10
11
|
}
|
|
11
|
-
r.register("hero",
|
|
12
|
-
r.register("navbar",
|
|
12
|
+
r.register("hero", d);
|
|
13
|
+
r.register("navbar", a);
|
|
13
14
|
r.register("footer", s);
|
|
14
|
-
r.register("feature",
|
|
15
|
-
r.register("cta",
|
|
16
|
-
r.register("pricingCard",
|
|
17
|
-
r.register("testimonial",
|
|
18
|
-
r.register("faqItem",
|
|
15
|
+
r.register("feature", g);
|
|
16
|
+
r.register("cta", l);
|
|
17
|
+
r.register("pricingCard", p);
|
|
18
|
+
r.register("testimonial", x);
|
|
19
|
+
r.register("faqItem", m);
|
|
19
20
|
r.register("stats", C);
|
|
20
|
-
r.register("statItem",
|
|
21
|
-
r.register("logoCloud",
|
|
22
|
-
r.register("socialLinks",
|
|
23
|
-
r.register("blogCard",
|
|
21
|
+
r.register("statItem", f);
|
|
22
|
+
r.register("logoCloud", h);
|
|
23
|
+
r.register("socialLinks", u);
|
|
24
|
+
r.register("blogCard", P);
|
|
25
|
+
r.register("blogPostCard", S);
|
|
26
|
+
r.register("blogPostDetail", T);
|
|
24
27
|
r.register("teamCard", b);
|
|
25
|
-
r.register("courseCardGrid",
|
|
26
|
-
r.register("countdown",
|
|
27
|
-
r.register("carousel",
|
|
28
|
+
r.register("courseCardGrid", z);
|
|
29
|
+
r.register("countdown", B);
|
|
30
|
+
r.register("carousel", F);
|
|
28
31
|
r.register("featureGrid", (e, i, o, n) => {
|
|
29
32
|
if (!t) throw new Error("renderChild not initialized");
|
|
30
33
|
return w(e);
|
|
@@ -43,13 +46,17 @@ r.register("faq", (e, i, o, n) => {
|
|
|
43
46
|
});
|
|
44
47
|
r.register("blogCardGrid", (e, i, o, n) => {
|
|
45
48
|
if (!t) throw new Error("renderChild not initialized");
|
|
46
|
-
return
|
|
49
|
+
return q(e, i, o, n, t);
|
|
50
|
+
});
|
|
51
|
+
r.register("blogPostGrid", (e, i, o, n) => {
|
|
52
|
+
if (!t) throw new Error("renderChild not initialized");
|
|
53
|
+
return L(e, i, o, n, t);
|
|
47
54
|
});
|
|
48
55
|
r.register("teamGrid", (e, i, o, n) => {
|
|
49
56
|
if (!t) throw new Error("renderChild not initialized");
|
|
50
|
-
return
|
|
57
|
+
return I(e, i, o, n, t);
|
|
51
58
|
});
|
|
52
59
|
export {
|
|
53
|
-
|
|
60
|
+
j as setSectionExportersRenderChild
|
|
54
61
|
};
|
|
55
62
|
//# sourceMappingURL=index.js.map
|