@brunoalz/smartgesti-site-editor 1.0.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (219) hide show
  1. package/dist/editor/BlockSelector.d.ts.map +1 -1
  2. package/dist/editor/BlockSelector.js +60 -57
  3. package/dist/editor/BlockSelector.js.map +1 -1
  4. package/dist/editor/LandingPageEditor.d.ts.map +1 -1
  5. package/dist/editor/LandingPageEditor.js +145 -128
  6. package/dist/editor/LandingPageEditor.js.map +1 -1
  7. package/dist/editor/PageTabBar.d.ts +4 -1
  8. package/dist/editor/PageTabBar.d.ts.map +1 -1
  9. package/dist/editor/PageTabBar.js +179 -41
  10. package/dist/editor/PageTabBar.js.map +1 -1
  11. package/dist/editor/PropertyEditor/BlockPropertyEditor.d.ts +2 -0
  12. package/dist/editor/PropertyEditor/BlockPropertyEditor.d.ts.map +1 -1
  13. package/dist/editor/PropertyEditor/BlockPropertyEditor.js +53 -45
  14. package/dist/editor/PropertyEditor/BlockPropertyEditor.js.map +1 -1
  15. package/dist/editor/PropertyEditor/CollapsiblePropertyGroup.d.ts +2 -0
  16. package/dist/editor/PropertyEditor/CollapsiblePropertyGroup.d.ts.map +1 -1
  17. package/dist/editor/PropertyEditor/CollapsiblePropertyGroup.js +47 -33
  18. package/dist/editor/PropertyEditor/CollapsiblePropertyGroup.js.map +1 -1
  19. package/dist/editor/PropertyEditor/VariationSelector.d.ts.map +1 -1
  20. package/dist/editor/PropertyEditor/VariationSelector.js +10 -6
  21. package/dist/editor/PropertyEditor/VariationSelector.js.map +1 -1
  22. package/dist/editor/PropertyEditor/index.js +20 -18
  23. package/dist/editor/PropertyEditor/index.js.map +1 -1
  24. package/dist/editor/PropertyEditor/inputs/CarouselImagesInput.d.ts +16 -0
  25. package/dist/editor/PropertyEditor/inputs/CarouselImagesInput.d.ts.map +1 -0
  26. package/dist/editor/PropertyEditor/inputs/CarouselImagesInput.js +170 -0
  27. package/dist/editor/PropertyEditor/inputs/CarouselImagesInput.js.map +1 -0
  28. package/dist/editor/PropertyEditor/inputs/ImageGridInput.d.ts.map +1 -1
  29. package/dist/editor/PropertyEditor/inputs/ImageGridInput.js +148 -121
  30. package/dist/editor/PropertyEditor/inputs/ImageGridInput.js.map +1 -1
  31. package/dist/editor/PropertyEditor/inputs/index.d.ts +1 -0
  32. package/dist/editor/PropertyEditor/inputs/index.d.ts.map +1 -1
  33. package/dist/editor/PropertyEditor/renderPropertyInput.d.ts.map +1 -1
  34. package/dist/editor/PropertyEditor/renderPropertyInput.js +167 -139
  35. package/dist/editor/PropertyEditor/renderPropertyInput.js.map +1 -1
  36. package/dist/editor/components/CenterPanel.d.ts +9 -1
  37. package/dist/editor/components/CenterPanel.d.ts.map +1 -1
  38. package/dist/editor/components/CenterPanel.js +24 -14
  39. package/dist/editor/components/CenterPanel.js.map +1 -1
  40. package/dist/editor/components/RightPanel.d.ts +5 -0
  41. package/dist/editor/components/RightPanel.d.ts.map +1 -1
  42. package/dist/editor/components/RightPanel.js +18 -12
  43. package/dist/editor/components/RightPanel.js.map +1 -1
  44. package/dist/editor/components/Toolbar.d.ts +3 -0
  45. package/dist/editor/components/Toolbar.d.ts.map +1 -1
  46. package/dist/editor/components/Toolbar.js +54 -35
  47. package/dist/editor/components/Toolbar.js.map +1 -1
  48. package/dist/engine/export/exportHtml.d.ts.map +1 -1
  49. package/dist/engine/export/exportHtml.js +50 -50
  50. package/dist/engine/export/exportHtml.js.map +1 -1
  51. package/dist/engine/export/exporters/sections/BlogPostExporters.d.ts +6 -0
  52. package/dist/engine/export/exporters/sections/BlogPostExporters.d.ts.map +1 -0
  53. package/dist/engine/export/exporters/sections/BlogPostExporters.js +101 -0
  54. package/dist/engine/export/exporters/sections/BlogPostExporters.js.map +1 -0
  55. package/dist/engine/export/exporters/sections/FooterExporter.js +22 -22
  56. package/dist/engine/export/exporters/sections/FooterExporter.js.map +1 -1
  57. package/dist/engine/export/exporters/sections/HeroExporter.d.ts.map +1 -1
  58. package/dist/engine/export/exporters/sections/HeroExporter.js +222 -205
  59. package/dist/engine/export/exporters/sections/HeroExporter.js.map +1 -1
  60. package/dist/engine/export/exporters/sections/MarketingExporters.js +88 -88
  61. package/dist/engine/export/exporters/sections/MarketingExporters.js.map +1 -1
  62. package/dist/engine/export/exporters/sections/NavbarExporter.js +34 -34
  63. package/dist/engine/export/exporters/sections/NavbarExporter.js.map +1 -1
  64. package/dist/engine/export/exporters/sections/index.d.ts.map +1 -1
  65. package/dist/engine/export/exporters/sections/index.js +29 -22
  66. package/dist/engine/export/exporters/sections/index.js.map +1 -1
  67. package/dist/engine/index.d.ts +3 -0
  68. package/dist/engine/index.d.ts.map +1 -1
  69. package/dist/engine/index.js +99 -87
  70. package/dist/engine/index.js.map +1 -1
  71. package/dist/engine/plugins/builtin/blog/index.d.ts +3 -0
  72. package/dist/engine/plugins/builtin/blog/index.d.ts.map +1 -0
  73. package/dist/engine/plugins/builtin/blog/manifest.d.ts +3 -0
  74. package/dist/engine/plugins/builtin/blog/manifest.d.ts.map +1 -0
  75. package/dist/engine/plugins/builtin/blog/manifest.js +273 -0
  76. package/dist/engine/plugins/builtin/blog/manifest.js.map +1 -0
  77. package/dist/engine/plugins/builtin/blog/mockContentProvider.d.ts +7 -0
  78. package/dist/engine/plugins/builtin/blog/mockContentProvider.d.ts.map +1 -0
  79. package/dist/engine/plugins/builtin/blog/mockContentProvider.js +135 -0
  80. package/dist/engine/plugins/builtin/blog/mockContentProvider.js.map +1 -0
  81. package/dist/engine/plugins/contentHydration.d.ts +17 -0
  82. package/dist/engine/plugins/contentHydration.d.ts.map +1 -0
  83. package/dist/engine/plugins/contentHydration.js +121 -0
  84. package/dist/engine/plugins/contentHydration.js.map +1 -0
  85. package/dist/engine/plugins/dynamicPageResolver.d.ts +25 -0
  86. package/dist/engine/plugins/dynamicPageResolver.d.ts.map +1 -0
  87. package/dist/engine/plugins/dynamicPageResolver.js +32 -0
  88. package/dist/engine/plugins/dynamicPageResolver.js.map +1 -0
  89. package/dist/engine/plugins/index.d.ts +11 -0
  90. package/dist/engine/plugins/index.d.ts.map +1 -0
  91. package/dist/engine/plugins/pluginRegistry.d.ts +37 -0
  92. package/dist/engine/plugins/pluginRegistry.d.ts.map +1 -0
  93. package/dist/engine/plugins/pluginRegistry.js +134 -0
  94. package/dist/engine/plugins/pluginRegistry.js.map +1 -0
  95. package/dist/engine/plugins/types.d.ts +180 -0
  96. package/dist/engine/plugins/types.d.ts.map +1 -0
  97. package/dist/engine/presets/heroVariations.d.ts +5 -0
  98. package/dist/engine/presets/heroVariations.d.ts.map +1 -1
  99. package/dist/engine/presets/heroVariations.js +50 -6
  100. package/dist/engine/presets/heroVariations.js.map +1 -1
  101. package/dist/engine/preview/Preview.d.ts +6 -2
  102. package/dist/engine/preview/Preview.d.ts.map +1 -1
  103. package/dist/engine/preview/Preview.js +295 -125
  104. package/dist/engine/preview/Preview.js.map +1 -1
  105. package/dist/engine/registry/blocks/sections/blogPostCard.d.ts +3 -0
  106. package/dist/engine/registry/blocks/sections/blogPostCard.d.ts.map +1 -0
  107. package/dist/engine/registry/blocks/sections/blogPostCard.js +53 -0
  108. package/dist/engine/registry/blocks/sections/blogPostCard.js.map +1 -0
  109. package/dist/engine/registry/blocks/sections/blogPostDetail.d.ts +3 -0
  110. package/dist/engine/registry/blocks/sections/blogPostDetail.d.ts.map +1 -0
  111. package/dist/engine/registry/blocks/sections/blogPostDetail.js +49 -0
  112. package/dist/engine/registry/blocks/sections/blogPostDetail.js.map +1 -0
  113. package/dist/engine/registry/blocks/sections/blogPostGrid.d.ts +3 -0
  114. package/dist/engine/registry/blocks/sections/blogPostGrid.d.ts.map +1 -0
  115. package/dist/engine/registry/blocks/sections/blogPostGrid.js +89 -0
  116. package/dist/engine/registry/blocks/sections/blogPostGrid.js.map +1 -0
  117. package/dist/engine/registry/blocks/sections/hero.d.ts.map +1 -1
  118. package/dist/engine/registry/blocks/sections/hero.js +67 -14
  119. package/dist/engine/registry/blocks/sections/hero.js.map +1 -1
  120. package/dist/engine/registry/blocks/sections/index.d.ts +3 -0
  121. package/dist/engine/registry/blocks/sections/index.d.ts.map +1 -1
  122. package/dist/engine/registry/blocks/sections/navbar.d.ts.map +1 -1
  123. package/dist/engine/registry/blocks/sections/navbar.js +2 -1
  124. package/dist/engine/registry/blocks/sections/navbar.js.map +1 -1
  125. package/dist/engine/registry/registry.d.ts.map +1 -1
  126. package/dist/engine/registry/registry.js +16 -12
  127. package/dist/engine/registry/registry.js.map +1 -1
  128. package/dist/engine/registry/types.d.ts +10 -6
  129. package/dist/engine/registry/types.d.ts.map +1 -1
  130. package/dist/engine/render/renderers/sections/BlogPostCardRenderer.d.ts +3 -0
  131. package/dist/engine/render/renderers/sections/BlogPostCardRenderer.d.ts.map +1 -0
  132. package/dist/engine/render/renderers/sections/BlogPostCardRenderer.js +199 -0
  133. package/dist/engine/render/renderers/sections/BlogPostCardRenderer.js.map +1 -0
  134. package/dist/engine/render/renderers/sections/BlogPostDetailRenderer.d.ts +3 -0
  135. package/dist/engine/render/renderers/sections/BlogPostDetailRenderer.d.ts.map +1 -0
  136. package/dist/engine/render/renderers/sections/BlogPostDetailRenderer.js +293 -0
  137. package/dist/engine/render/renderers/sections/BlogPostDetailRenderer.js.map +1 -0
  138. package/dist/engine/render/renderers/sections/BlogPostGridRenderer.d.ts +3 -0
  139. package/dist/engine/render/renderers/sections/BlogPostGridRenderer.d.ts.map +1 -0
  140. package/dist/engine/render/renderers/sections/BlogPostGridRenderer.js +101 -0
  141. package/dist/engine/render/renderers/sections/BlogPostGridRenderer.js.map +1 -0
  142. package/dist/engine/render/renderers/sections/CtaRenderer.d.ts.map +1 -1
  143. package/dist/engine/render/renderers/sections/CtaRenderer.js +33 -31
  144. package/dist/engine/render/renderers/sections/CtaRenderer.js.map +1 -1
  145. package/dist/engine/render/renderers/sections/FaqItemRenderer.d.ts.map +1 -1
  146. package/dist/engine/render/renderers/sections/FaqItemRenderer.js +7 -6
  147. package/dist/engine/render/renderers/sections/FaqItemRenderer.js.map +1 -1
  148. package/dist/engine/render/renderers/sections/FaqRenderer.js +7 -7
  149. package/dist/engine/render/renderers/sections/FaqRenderer.js.map +1 -1
  150. package/dist/engine/render/renderers/sections/FeatureGridRenderer.d.ts.map +1 -1
  151. package/dist/engine/render/renderers/sections/FeatureGridRenderer.js +19 -18
  152. package/dist/engine/render/renderers/sections/FeatureGridRenderer.js.map +1 -1
  153. package/dist/engine/render/renderers/sections/FeatureRenderer.d.ts.map +1 -1
  154. package/dist/engine/render/renderers/sections/FeatureRenderer.js +5 -4
  155. package/dist/engine/render/renderers/sections/FeatureRenderer.js.map +1 -1
  156. package/dist/engine/render/renderers/sections/FooterRenderer.d.ts.map +1 -1
  157. package/dist/engine/render/renderers/sections/FooterRenderer.js +8 -7
  158. package/dist/engine/render/renderers/sections/FooterRenderer.js.map +1 -1
  159. package/dist/engine/render/renderers/sections/HeroRenderer.d.ts.map +1 -1
  160. package/dist/engine/render/renderers/sections/HeroRenderer.js +295 -218
  161. package/dist/engine/render/renderers/sections/HeroRenderer.js.map +1 -1
  162. package/dist/engine/render/renderers/sections/NavbarRenderer.d.ts.map +1 -1
  163. package/dist/engine/render/renderers/sections/NavbarRenderer.js +23 -22
  164. package/dist/engine/render/renderers/sections/NavbarRenderer.js.map +1 -1
  165. package/dist/engine/render/renderers/sections/PricingCardRenderer.d.ts.map +1 -1
  166. package/dist/engine/render/renderers/sections/PricingCardRenderer.js +7 -6
  167. package/dist/engine/render/renderers/sections/PricingCardRenderer.js.map +1 -1
  168. package/dist/engine/render/renderers/sections/PricingRenderer.js +9 -9
  169. package/dist/engine/render/renderers/sections/PricingRenderer.js.map +1 -1
  170. package/dist/engine/render/renderers/sections/TestimonialGridRenderer.d.ts.map +1 -1
  171. package/dist/engine/render/renderers/sections/TestimonialGridRenderer.js +17 -16
  172. package/dist/engine/render/renderers/sections/TestimonialGridRenderer.js.map +1 -1
  173. package/dist/engine/render/renderers/sections/TestimonialRenderer.d.ts.map +1 -1
  174. package/dist/engine/render/renderers/sections/TestimonialRenderer.js +11 -10
  175. package/dist/engine/render/renderers/sections/TestimonialRenderer.js.map +1 -1
  176. package/dist/engine/render/renderers/sections/index.js +24 -18
  177. package/dist/engine/render/renderers/sections/index.js.map +1 -1
  178. package/dist/engine/schema/siteDocument.d.ts +104 -3
  179. package/dist/engine/schema/siteDocument.d.ts.map +1 -1
  180. package/dist/engine/schema/siteDocument.js.map +1 -1
  181. package/dist/engine/shared/carouselAnimation.d.ts +20 -0
  182. package/dist/engine/shared/carouselAnimation.d.ts.map +1 -0
  183. package/dist/engine/shared/carouselAnimation.js +62 -0
  184. package/dist/engine/shared/carouselAnimation.js.map +1 -0
  185. package/dist/engine/shared/imageGrid/types.d.ts +2 -0
  186. package/dist/engine/shared/imageGrid/types.d.ts.map +1 -1
  187. package/dist/engine/shared/showWhen.d.ts +44 -0
  188. package/dist/engine/shared/showWhen.d.ts.map +1 -0
  189. package/dist/engine/shared/showWhen.js +33 -0
  190. package/dist/engine/shared/showWhen.js.map +1 -0
  191. package/dist/hooks/useEditorState.d.ts +3 -0
  192. package/dist/hooks/useEditorState.d.ts.map +1 -1
  193. package/dist/hooks/useEditorState.js +106 -84
  194. package/dist/hooks/useEditorState.js.map +1 -1
  195. package/dist/index.d.ts +13 -2
  196. package/dist/index.d.ts.map +1 -1
  197. package/dist/index.js +109 -93
  198. package/dist/index.js.map +1 -1
  199. package/dist/shared/templates/escola-blog.d.ts +3 -0
  200. package/dist/shared/templates/escola-blog.d.ts.map +1 -0
  201. package/dist/shared/templates/escola-blog.js +160 -0
  202. package/dist/shared/templates/escola-blog.js.map +1 -0
  203. package/dist/shared/templates/index.d.ts +2 -0
  204. package/dist/shared/templates/index.d.ts.map +1 -1
  205. package/dist/shared/templates/index.js +30 -12
  206. package/dist/shared/templates/index.js.map +1 -1
  207. package/dist/utils/changeDetector.d.ts +2 -1
  208. package/dist/utils/changeDetector.d.ts.map +1 -1
  209. package/dist/utils/changeDetector.js +39 -39
  210. package/dist/utils/changeDetector.js.map +1 -1
  211. package/dist/utils/sharedTemplateToEngine.d.ts +4 -5
  212. package/dist/utils/sharedTemplateToEngine.d.ts.map +1 -1
  213. package/dist/utils/sharedTemplateToEngine.js +14 -87
  214. package/dist/utils/sharedTemplateToEngine.js.map +1 -1
  215. package/dist/viewer/LandingPageViewer.d.ts +13 -6
  216. package/dist/viewer/LandingPageViewer.d.ts.map +1 -1
  217. package/dist/viewer/LandingPageViewer.js +220 -122
  218. package/dist/viewer/LandingPageViewer.js.map +1 -1
  219. package/package.json +3 -2
@@ -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":"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"}
@@ -1,12 +1,12 @@
1
- import { resolveNavbarStyles as oe, mergeStyles as de, applyOpacityToColor as le } from "../../styleResolver.js";
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: S,
8
- links: k = [],
9
- ctaButton: o,
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 = oe(
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
- ), H = typeof n == "string" ? n : n?.src ?? "", Y = typeof n == "string" ? S || "Logo" : n?.alt ?? S ?? "Logo";
57
- let v = typeof n == "object" && n?.href ? n.href : "";
58
- (v === "/" || v === "") && (v = r ?? "/site");
59
- let y = H ? `<img src="${a(H)}" 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 (v && y) {
61
- const t = l(v, r), s = c(t, r);
62
- y = `<a href="${a(t)}"${s} class="sg-navbar__brand-link" style="display: flex; align-items: center;">${y}</a>`;
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), p = e.props.linkColor || g?.colors?.linkColor || g?.colors?.text || "#1f2937", q = k.map((t) => {
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((f) => {
67
- const u = l(f.href || "#", r), _ = c(u, r);
68
- return `<a href="${a(u)}"${_} class="sg-navbar-dropdown__item" style="${i.dropdownItem}">${a(f.text)}</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 s = l(t.href || "#", r), h = c(s, r);
83
- return `<a href="${a(s)}"${h} class="sg-navbar__link" style="${i.link}">${a(t.text)}</a>`;
84
- }).join(""), C = o ? l(o.href || "#", r) : "#", U = o ? c(C, r) : "", $ = o ? `<a href="${a(C)}"${U} class="sg-navbar__btn" style="${i.button}">${a(o.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" style="${X}">${q}${m ? "" : $}</div>`, Z = m && o ? `<div class="sg-navbar__actions" style="flex-shrink: 0; justify-self: end;">${$}</div>` : "", P = `
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: ${p};
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 = k.map((t) => {
121
+ `, te = S.map((t) => {
122
122
  if (t.dropdown && Array.isArray(t.dropdown)) {
123
- const x = t.dropdown.map((f) => {
124
- const u = l(f.href || "#", r), _ = c(u, r);
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(u)}"${_}
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: ${p};
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(f.text)}
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: ${p}; font-weight: 600; font-size: 1rem;">
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 s = l(t.href || "#", r), h = c(s, r);
153
+ const o = l(t.href || "#", r), h = c(o, r);
154
154
  return `
155
155
  <a
156
- href="${a(s)}"${h}
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: ${p};
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: ${p};
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
- `), se = I ? `<style>${I}</style>` : "";
383
- return `<nav ${ce(e.id)} ${ge(e.id)} class="${a(O)}" data-variation="${a(w)}" style="${N}">${se}${ie}</nav>${ee}${ae}${ne}`;
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":";;AAmBO,SAASA,GACdC,GACAC,IACAC,GACAC,GACQ;AACR,QAAM;AAAA,IACJ,WAAAC,IAAY;AAAA,IACZ,MAAAC;AAAA,IACA,UAAAC;AAAA,IACA,OAAAC,IAAQ,CAAA;AAAA,IACR,WAAAC;AAAA,IACA,QAAAC;AAAA,IACA,UAAAC,IAAW;AAAA,IACX,QAAAC;AAAA,IACA,YAAAC,IAAa;AAAA,IACb,gBAAAC,IAAiB;AAAA,IACjB,aAAAC,IAAc;AAAA,IACd,aAAAC,IAAc;AAAA,EAAA,IACXf,EAAc,OAGbgB,IAAiBC;AAAA,IACpBjB,EAAc;AAAA,IACfA,EAAM,MAAM;AAAA,IACZG;AAAA,EAAA,GAWIe,IAP4C;AAAA,IAChD,kBAAkB;AAAA,IAClB,kBAAkB;AAAA,IAClB,gBAAgB;AAAA,IAChB,mBAAmB;AAAA,IACnB,eAAe;AAAA,EAAA,EAEwBd,CAAS,KAAK,sBAIjDe,KADkBR,KAAU,gBACK,YACjCS,IAAYT,MAAW,WAEvBU,IAAa;AAAA,IACjB;AAAA,IACAH;AAAA,IACAT,IAAS,sBAAsB;AAAA,IAC/BC,IAAW,wBAAwB;AAAA,IACnCU,IAAY,uBAAuB;AAAA,EAAA,EAElC,OAAO,OAAO,EACd,KAAK,GAAG,GAKLE,IACJb,KAAU,CAACC,IAAW,2EAA2E,IAqB7Fa,KAnBiB,MAAc;AACnC,QAAIV,MAAmB,OAAQ,QAAO;AACtC,UAAMW,IAAc,GAAGV,CAAW,YAAYC,CAAW;AAEzD,YAAQF,GAAA;AAAA,MACN,KAAK;AACH,eAAO,WAAWW,CAAW;AAAA,MAC/B,KAAK;AACH,eAAO,eAAeA,CAAW;AAAA,MACnC,KAAK;AACH,eAAO,kBAAkBA,CAAW;AAAA,MACtC,KAAK;AACH,eAAO,gBAAgBA,CAAW;AAAA,MACpC,KAAK;AACH,eAAO,iBAAiBA,CAAW;AAAA,MACrC;AACE,eAAO;AAAA,IAAA;AAAA,EAEb,GACkB,GACZC,IAAe,IAGfC,IAAuBhB,IACzB,2FACA,IAGEiB,IAAWC;AAAA,IACfZ,EAAe;AAAA,IACfS;AAAA,IACAF;AAAA,IACAD;AAAA,IACAI;AAAA,EAAA,GAGIG,IAAU,OAAOxB,KAAS,WAAWA,IAAQA,GAAM,OAAO,IAC1DyB,IACJ,OAAOzB,KAAS,WACZC,KAAY,SACXD,GAAM,OAAOC,KAAY;AAChC,MAAIyB,IAAW,OAAO1B,KAAS,YAAYA,GAAM,OAAOA,EAAK,OAAO;AACpE,GAAI0B,MAAa,OAAOA,MAAa,YAAe7B,KAAY;AAGhE,MAAI8B,IACFH,IACI,aAAaI,EAAWJ,CAAO,CAAC,UAAUI,EAAWH,CAAO,CAAC,oBAAoBlB,CAAU,mBAAmBA,CAAU,8DACxH;AACN,MAAImB,KAAYC,GAAU;AACxB,UAAME,IAAmBC,EAAYJ,GAAU7B,CAAQ,GACjDkC,IAAiBC,EAAeH,GAAkBhC,CAAQ;AAChE,IAAA8B,IAAW,YAAYC,EAAWC,CAAgB,CAAC,IAAIE,CAAc,8EAA8EJ,CAAQ;AAAA,EAC7J;AAGA,QAAMM,IAAYtC,EAAc,MAAM,MAAM,WACtCuC,IAAiBvC,EAAc,MAAM,WAAW,KAChDwC,IAAYC,GAAoBH,GAAUC,CAAa,GAGvDG,IACH1C,EAAc,MAAM,aACrBG,GAAO,QAAQ,aACfA,GAAO,QAAQ,QACf,WAGIwC,IAAYpC,EACf,IAAI,CAACqC,MAAW;AACf,QAAIA,EAAE,YAAY,MAAM,QAAQA,EAAE,QAAQ,GAAG;AAE3C,YAAMC,IAAoBD,EAAE,SACzB,IAAI,CAACE,MAAc;AAClB,cAAMC,IAAeZ,EAAYW,EAAK,QAAQ,KAAK5C,CAAQ,GACrD8C,IAAiBX,EAAeU,GAAc7C,CAAQ;AAC5D,eAAO,YAAY+B,EAAWc,CAAY,CAAC,IAAIC,CAAc,4CAA4ChC,EAAe,YAAY,KAAKiB,EAAWa,EAAK,IAAI,CAAC;AAAA,MAChK,CAAC,EACA,KAAK,EAAE;AAEV,aAAO;AAAA;AAAA,mFAEoE9B,EAAe,IAAI;AAAA,gBACtFiB,EAAWW,EAAE,IAAI,CAAC;AAAA;AAAA;AAAA,qDAGmB5B,EAAe,QAAQ;AAAA,gBAC5D6B,CAAiB;AAAA;AAAA;AAAA;AAAA,IAI3B;AAEA,UAAMI,IAAWd,EAAYS,EAAE,QAAQ,KAAK1C,CAAQ,GAC9CgD,IAAab,EAAeY,GAAU/C,CAAQ;AACpD,WAAO,YAAY+B,EAAWgB,CAAQ,CAAC,IAAIC,CAAU,mCAAmClC,EAAe,IAAI,KAAKiB,EAAWW,EAAE,IAAI,CAAC;AAAA,EACpI,CAAC,EACA,KAAK,EAAE,GAGJO,IAAc3C,IAChB2B,EAAY3B,EAAU,QAAQ,KAAKN,CAAQ,IAC3C,KACEkD,IAAgB5C,IAClB6B,EAAec,GAAajD,CAAQ,IACpC,IACEmD,IAAa7C,IACf,YAAYyB,EAAWkB,CAAW,CAAC,IAAIC,CAAa,kCAAkCpC,EAAe,MAAM,KAAKiB,EAAWzB,EAAU,IAAI,CAAC,SAC1I,IAKE8C,IADgBnC,IAElB,iDAAiDC,IAAY,SAAS,QAAQ,mFAAmFA,IAAY,SAAS,QAAQ,MAC9L,4CAA4CV,IAAW,SAAUU,IAAY,SAAS,QAAS,8EAA8EA,IAAY,WAAW,MAAM,KACxMmC,IAAY,4CAA4CnC,IAAY,SAAS,QAAQ,qBAAqBD,IAAa,2BAA2B,EAAE,IACpJqC,IAAiBrC,IACnB,yCACA,mBAEEsC,IAAW,uCAAuCF,CAAS,KAAKZ,CAAS,GAAIxB,IAA0B,KAAbkC,CAAe,UACzGK,IACJvC,KAAcX,IACV,8EAA8E6C,CAAU,WACxF,IAWAM,IAAgB;AAAA;AAAA,gCAEQ3D,EAAM,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAYvB0C,CAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAYlBkB,KAAc;AAAA;AAAA,8BAEQ5D,EAAM,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAe9B6D,KAAkBtD,EACrB,IAAI,CAACqC,MAAW;AACf,QAAIA,EAAE,YAAY,MAAM,QAAQA,EAAE,QAAQ,GAAG;AAE3C,YAAMC,IAAoBD,EAAE,SACzB,IAAI,CAACE,MAAc;AAClB,cAAMC,IAAeZ,EAAYW,EAAK,QAAQ,KAAK5C,CAAQ,GACrD8C,IAAiBX,EAAeU,GAAc7C,CAAQ;AAC5D,eAAO;AAAA;AAAA,wBAEK+B,EAAWc,CAAY,CAAC,IAAIC,CAAc;AAAA;AAAA;AAAA;AAAA;AAAA,2BAKvCN,CAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAQlBT,EAAWa,EAAK,IAAI,CAAC;AAAA;AAAA;AAAA,MAG7B,CAAC,EACA,KAAK,EAAE;AAEV,aAAO;AAAA;AAAA,kEAEmDJ,CAAS;AAAA,gBAC3DT,EAAWW,EAAE,IAAI,CAAC;AAAA;AAAA,cAEpBC,CAAiB;AAAA;AAAA;AAAA,IAGzB;AAEA,UAAMI,IAAWd,EAAYS,EAAE,QAAQ,KAAK1C,CAAQ,GAC9CgD,IAAab,EAAeY,GAAU/C,CAAQ;AACpD,WAAO;AAAA;AAAA,kBAEK+B,EAAWgB,CAAQ,CAAC,IAAIC,CAAU;AAAA;AAAA;AAAA;AAAA;AAAA,qBAK/BR,CAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAQlBT,EAAWW,EAAE,IAAI,CAAC;AAAA;AAAA;AAAA,EAG1B,CAAC,EACA,KAAK,EAAE,GAGJkB,KAAc;AAAA;AAAA,8BAEQ9D,EAAM,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BASVwC,CAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BASPxC,EAAM,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAWnB0C,CAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAclBmB,EAAe;AAAA,UAEfR,IACI,gGAAgGA,CAAU,WAC1G,EACN;AAAA;AAAA;AAAA,KAMAU,KAAY;AAAA;AAAA;AAAA;AAAA;AAAA,QAKZ/D,EAAM,KAAK,mBAAmBA,EAAM,EAAE,OAAO,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA,QAKzDA,EAAM,KAAK,mBAAmBA,EAAM,EAAE,OAAO,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA,QAKzDA,EAAM,MAAMU,IAAW,mBAAmBV,EAAM,EAAE,OAAO,sBAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAS/EA,EAAM,KAAK,mBAAmBA,EAAM,EAAE,OAAO,YAAY;AAAA;AAAA;AAAA;AAAA,QAIzDA,EAAM,KAAK,mBAAmBA,EAAM,EAAE,OAAO,YAAY;AAAA;AAAA;AAAA;AAAA,QAIzDA,EAAM,KAAK,mBAAmBA,EAAM,EAAE,OAAO,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA,QAKzDA,EAAM,KAAK,mBAAmBA,EAAM,EAAE,OAAO,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA,QAKzDA,EAAM,KAAK,mBAAmBA,EAAM,EAAE,OAAO,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAMzDA,EAAM,KAAK,mBAAmBA,EAAM,EAAE,OAAO,YAAY;AAAA,iBAChDG,GAAO,QAAQ,WAAW,SAAS;AAAA,4BACxBA,GAAO,QAAQ,WAAW,SAAS;AAAA;AAAA;AAAA;AAAA,QAIvDH,EAAM,KAAK,mBAAmBA,EAAM,EAAE,OAAO,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAwBzDgE,KAAe;AAAA;AAAA;AAAA,iBAGNhE,EAAM,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KA4EjBiE,KAA0B;AAAA,+CACaX,CAAc;AAAA,6CAChBE,CAAc;AAAA,UACjDxB,CAAQ;AAAA;AAAA,QAEVyB,CAAQ;AAAA,QACRC,CAAW;AAAA,QACXC,CAAa;AAAA;AAAA,KAKbO,IAAS,CAAClD,EAAe,KAAK+C,EAAS,EAC1C,OAAO,OAAO,EACd,KAAK;AAAA,CAAI,GACNI,KAAkBD,IAAS,UAAUA,CAAM,aAAa;AAE9D,SAAO,QAAQE,GAAYpE,EAAM,EAAE,CAAC,IAAIqE,GAAgBrE,EAAM,EAAE,CAAC,WAAWiC,EAAWZ,CAAU,CAAC,qBAAqBY,EAAW7B,CAAS,CAAC,YAAYuB,CAAQ,KAAKwC,EAAe,GAAGF,EAAuB,SAASL,EAAW,GAAGE,EAAW,GAAGE,EAAY;AACjQ;"}
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;AAgCH,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
+ {"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 a } from "./HeroExporter.js";
3
- import { exportNavbar as d } from "./NavbarExporter.js";
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 p, exportCta as g, exportPricingCard as l, exportTestimonial as m, exportFaqItem as x, exportStats as C, exportStatItem as u, exportLogoCloud as f, exportSocialLinks as h, exportFeatureGrid as w, exportPricing as c, exportTestimonialGrid as G, exportFaq as E } from "./MarketingExporters.js";
6
- import { exportBlogCard as z, exportTeamCard as b, exportCourseCardGrid as F, exportCountdown as q, exportCarousel as I, exportBlogCardGrid as S, exportTeamGrid as T } from "./ContentGridExporters.js";
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 y(e) {
9
+ function j(e) {
9
10
  t = e;
10
11
  }
11
- r.register("hero", a);
12
- r.register("navbar", d);
12
+ r.register("hero", d);
13
+ r.register("navbar", a);
13
14
  r.register("footer", s);
14
- r.register("feature", p);
15
- r.register("cta", g);
16
- r.register("pricingCard", l);
17
- r.register("testimonial", m);
18
- r.register("faqItem", x);
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", u);
21
- r.register("logoCloud", f);
22
- r.register("socialLinks", h);
23
- r.register("blogCard", z);
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", F);
26
- r.register("countdown", q);
27
- r.register("carousel", I);
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 S(e, i, o, n, t);
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 T(e, i, o, n, t);
57
+ return I(e, i, o, n, t);
51
58
  });
52
59
  export {
53
- y as setSectionExportersRenderChild
60
+ j as setSectionExportersRenderChild
54
61
  };
55
62
  //# sourceMappingURL=index.js.map