@brunoalz/smartgesti-site-editor 0.2.2 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (607) hide show
  1. package/dist/editor/BlockSelector.d.ts +2 -1
  2. package/dist/editor/BlockSelector.d.ts.map +1 -1
  3. package/dist/editor/BlockSelector.js +55 -64
  4. package/dist/editor/BlockSelector.js.map +1 -1
  5. package/dist/editor/LandingPageEditor.d.ts +19 -0
  6. package/dist/editor/LandingPageEditor.d.ts.map +1 -0
  7. package/dist/editor/LandingPageEditor.js +239 -0
  8. package/dist/editor/LandingPageEditor.js.map +1 -0
  9. package/dist/editor/PageTabBar.d.ts +4 -1
  10. package/dist/editor/PageTabBar.d.ts.map +1 -1
  11. package/dist/editor/PageTabBar.js +179 -41
  12. package/dist/editor/PageTabBar.js.map +1 -1
  13. package/dist/editor/PropertyEditor/BlockPropertyEditor.d.ts +5 -3
  14. package/dist/editor/PropertyEditor/BlockPropertyEditor.d.ts.map +1 -1
  15. package/dist/editor/PropertyEditor/BlockPropertyEditor.js +60 -113
  16. package/dist/editor/PropertyEditor/BlockPropertyEditor.js.map +1 -1
  17. package/dist/editor/PropertyEditor/CollapsiblePropertyGroup.d.ts +3 -1
  18. package/dist/editor/PropertyEditor/CollapsiblePropertyGroup.d.ts.map +1 -1
  19. package/dist/editor/PropertyEditor/CollapsiblePropertyGroup.js +47 -33
  20. package/dist/editor/PropertyEditor/CollapsiblePropertyGroup.js.map +1 -1
  21. package/dist/editor/PropertyEditor/PropertyGroup.d.ts +1 -1
  22. package/dist/editor/PropertyEditor/PropertyGroup.d.ts.map +1 -1
  23. package/dist/editor/PropertyEditor/VariationSelector.d.ts +2 -1
  24. package/dist/editor/PropertyEditor/VariationSelector.d.ts.map +1 -1
  25. package/dist/editor/PropertyEditor/VariationSelector.js +35 -31
  26. package/dist/editor/PropertyEditor/VariationSelector.js.map +1 -1
  27. package/dist/editor/PropertyEditor/index.js +30 -28
  28. package/dist/editor/PropertyEditor/inputs/CarouselImagesInput.d.ts +16 -0
  29. package/dist/editor/PropertyEditor/inputs/CarouselImagesInput.d.ts.map +1 -0
  30. package/dist/editor/PropertyEditor/inputs/CarouselImagesInput.js +170 -0
  31. package/dist/editor/PropertyEditor/inputs/CarouselImagesInput.js.map +1 -0
  32. package/dist/editor/PropertyEditor/inputs/ImageGridInput.d.ts +1 -1
  33. package/dist/editor/PropertyEditor/inputs/ImageGridInput.d.ts.map +1 -1
  34. package/dist/editor/PropertyEditor/inputs/ImageGridInput.js +148 -121
  35. package/dist/editor/PropertyEditor/inputs/ImageGridInput.js.map +1 -1
  36. package/dist/editor/PropertyEditor/inputs/ImageInput.d.ts.map +1 -0
  37. package/dist/{components → editor/PropertyEditor}/inputs/ImageInput.js +41 -39
  38. package/dist/editor/PropertyEditor/inputs/ImageInput.js.map +1 -0
  39. package/dist/editor/PropertyEditor/inputs/TypographyInput.js +41 -44
  40. package/dist/editor/PropertyEditor/inputs/TypographyInput.js.map +1 -1
  41. package/dist/editor/PropertyEditor/inputs/index.d.ts +2 -0
  42. package/dist/editor/PropertyEditor/inputs/index.d.ts.map +1 -1
  43. package/dist/editor/PropertyEditor/renderPropertyInput.d.ts +1 -1
  44. package/dist/editor/PropertyEditor/renderPropertyInput.d.ts.map +1 -1
  45. package/dist/editor/PropertyEditor/renderPropertyInput.js +167 -139
  46. package/dist/editor/PropertyEditor/renderPropertyInput.js.map +1 -1
  47. package/dist/editor/components/CenterPanel.d.ts +13 -4
  48. package/dist/editor/components/CenterPanel.d.ts.map +1 -1
  49. package/dist/editor/components/CenterPanel.js +40 -31
  50. package/dist/editor/components/CenterPanel.js.map +1 -1
  51. package/dist/editor/components/LeftPanel.d.ts +2 -1
  52. package/dist/editor/components/LeftPanel.d.ts.map +1 -1
  53. package/dist/editor/components/LeftPanel.js +13 -12
  54. package/dist/editor/components/LeftPanel.js.map +1 -1
  55. package/dist/editor/components/LoadingSpinner.d.ts.map +1 -0
  56. package/dist/editor/components/LoadingSpinner.js.map +1 -0
  57. package/dist/editor/components/RightPanel.d.ts +8 -2
  58. package/dist/editor/components/RightPanel.d.ts.map +1 -1
  59. package/dist/editor/components/RightPanel.js +24 -19
  60. package/dist/editor/components/RightPanel.js.map +1 -1
  61. package/dist/editor/components/Toolbar.d.ts +5 -1
  62. package/dist/editor/components/Toolbar.d.ts.map +1 -1
  63. package/dist/editor/components/Toolbar.js +56 -40
  64. package/dist/editor/components/Toolbar.js.map +1 -1
  65. package/dist/engine/export/exportHtml.d.ts +10 -5
  66. package/dist/engine/export/exportHtml.d.ts.map +1 -1
  67. package/dist/engine/export/exportHtml.js +38 -40
  68. package/dist/engine/export/exportHtml.js.map +1 -1
  69. package/dist/engine/export/exporters/content/HeadingExporter.d.ts.map +1 -1
  70. package/dist/engine/export/exporters/content/HeadingExporter.js +6 -6
  71. package/dist/engine/export/exporters/content/HeadingExporter.js.map +1 -1
  72. package/dist/engine/export/exporters/content/LinkExporter.d.ts.map +1 -1
  73. package/dist/engine/export/exporters/content/LinkExporter.js +6 -6
  74. package/dist/engine/export/exporters/content/LinkExporter.js.map +1 -1
  75. package/dist/engine/export/exporters/content/TextExporter.d.ts.map +1 -1
  76. package/dist/engine/export/exporters/content/TextExporter.js +7 -7
  77. package/dist/engine/export/exporters/content/TextExporter.js.map +1 -1
  78. package/dist/engine/export/exporters/sections/BlogPostExporters.d.ts +6 -0
  79. package/dist/engine/export/exporters/sections/BlogPostExporters.d.ts.map +1 -0
  80. package/dist/engine/export/exporters/sections/BlogPostExporters.js +101 -0
  81. package/dist/engine/export/exporters/sections/BlogPostExporters.js.map +1 -0
  82. package/dist/engine/export/exporters/sections/FooterExporter.d.ts.map +1 -1
  83. package/dist/engine/export/exporters/sections/FooterExporter.js +33 -40
  84. package/dist/engine/export/exporters/sections/FooterExporter.js.map +1 -1
  85. package/dist/engine/export/exporters/sections/HeroExporter.d.ts.map +1 -1
  86. package/dist/engine/export/exporters/sections/HeroExporter.js +222 -218
  87. package/dist/engine/export/exporters/sections/HeroExporter.js.map +1 -1
  88. package/dist/engine/export/exporters/sections/MarketingExporters.js +88 -88
  89. package/dist/engine/export/exporters/sections/MarketingExporters.js.map +1 -1
  90. package/dist/engine/export/exporters/sections/NavbarExporter.js +34 -34
  91. package/dist/engine/export/exporters/sections/NavbarExporter.js.map +1 -1
  92. package/dist/engine/export/exporters/sections/index.d.ts.map +1 -1
  93. package/dist/engine/export/exporters/sections/index.js +29 -22
  94. package/dist/engine/export/exporters/sections/index.js.map +1 -1
  95. package/dist/engine/export/sanitizeHtml.d.ts.map +1 -1
  96. package/dist/engine/export/sanitizeHtml.js +65 -18
  97. package/dist/engine/export/sanitizeHtml.js.map +1 -1
  98. package/dist/engine/export/styleResolver.d.ts.map +1 -1
  99. package/dist/engine/export/styleResolver.js +33 -33
  100. package/dist/engine/export/styleResolver.js.map +1 -1
  101. package/dist/engine/generators/generateLandingPage.d.ts +4 -4
  102. package/dist/engine/generators/generateLandingPage.d.ts.map +1 -1
  103. package/dist/engine/generators/generateLandingPage.js.map +1 -1
  104. package/dist/engine/index.d.ts +6 -3
  105. package/dist/engine/index.d.ts.map +1 -1
  106. package/dist/engine/index.js +99 -89
  107. package/dist/engine/index.js.map +1 -1
  108. package/dist/engine/patch/PatchBuilder.d.ts +11 -11
  109. package/dist/engine/patch/PatchBuilder.d.ts.map +1 -1
  110. package/dist/engine/patch/PatchBuilder.js +92 -93
  111. package/dist/engine/patch/PatchBuilder.js.map +1 -1
  112. package/dist/engine/patch/applyPatch.js.map +1 -1
  113. package/dist/engine/plugins/builtin/blog/index.d.ts +3 -0
  114. package/dist/engine/plugins/builtin/blog/index.d.ts.map +1 -0
  115. package/dist/engine/plugins/builtin/blog/manifest.d.ts +3 -0
  116. package/dist/engine/plugins/builtin/blog/manifest.d.ts.map +1 -0
  117. package/dist/engine/plugins/builtin/blog/manifest.js +273 -0
  118. package/dist/engine/plugins/builtin/blog/manifest.js.map +1 -0
  119. package/dist/engine/plugins/builtin/blog/mockContentProvider.d.ts +7 -0
  120. package/dist/engine/plugins/builtin/blog/mockContentProvider.d.ts.map +1 -0
  121. package/dist/engine/plugins/builtin/blog/mockContentProvider.js +135 -0
  122. package/dist/engine/plugins/builtin/blog/mockContentProvider.js.map +1 -0
  123. package/dist/engine/plugins/contentHydration.d.ts +17 -0
  124. package/dist/engine/plugins/contentHydration.d.ts.map +1 -0
  125. package/dist/engine/plugins/contentHydration.js +121 -0
  126. package/dist/engine/plugins/contentHydration.js.map +1 -0
  127. package/dist/engine/plugins/dynamicPageResolver.d.ts +25 -0
  128. package/dist/engine/plugins/dynamicPageResolver.d.ts.map +1 -0
  129. package/dist/engine/plugins/dynamicPageResolver.js +32 -0
  130. package/dist/engine/plugins/dynamicPageResolver.js.map +1 -0
  131. package/dist/engine/plugins/index.d.ts +11 -0
  132. package/dist/engine/plugins/index.d.ts.map +1 -0
  133. package/dist/engine/plugins/pluginRegistry.d.ts +37 -0
  134. package/dist/engine/plugins/pluginRegistry.d.ts.map +1 -0
  135. package/dist/engine/plugins/pluginRegistry.js +134 -0
  136. package/dist/engine/plugins/pluginRegistry.js.map +1 -0
  137. package/dist/engine/plugins/types.d.ts +180 -0
  138. package/dist/engine/plugins/types.d.ts.map +1 -0
  139. package/dist/engine/presets/heroVariations.d.ts +5 -0
  140. package/dist/engine/presets/heroVariations.d.ts.map +1 -1
  141. package/dist/engine/presets/heroVariations.js +50 -6
  142. package/dist/engine/presets/heroVariations.js.map +1 -1
  143. package/dist/engine/preview/Preview.d.ts +19 -0
  144. package/dist/engine/preview/Preview.d.ts.map +1 -0
  145. package/dist/engine/preview/Preview.js +418 -0
  146. package/dist/engine/preview/Preview.js.map +1 -0
  147. package/dist/engine/registry/blocks/sections/blogPostCard.d.ts +3 -0
  148. package/dist/engine/registry/blocks/sections/blogPostCard.d.ts.map +1 -0
  149. package/dist/engine/registry/blocks/sections/blogPostCard.js +53 -0
  150. package/dist/engine/registry/blocks/sections/blogPostCard.js.map +1 -0
  151. package/dist/engine/registry/blocks/sections/blogPostDetail.d.ts +3 -0
  152. package/dist/engine/registry/blocks/sections/blogPostDetail.d.ts.map +1 -0
  153. package/dist/engine/registry/blocks/sections/blogPostDetail.js +49 -0
  154. package/dist/engine/registry/blocks/sections/blogPostDetail.js.map +1 -0
  155. package/dist/engine/registry/blocks/sections/blogPostGrid.d.ts +3 -0
  156. package/dist/engine/registry/blocks/sections/blogPostGrid.d.ts.map +1 -0
  157. package/dist/engine/registry/blocks/sections/blogPostGrid.js +89 -0
  158. package/dist/engine/registry/blocks/sections/blogPostGrid.js.map +1 -0
  159. package/dist/engine/registry/blocks/sections/hero.d.ts.map +1 -1
  160. package/dist/engine/registry/blocks/sections/hero.js +67 -14
  161. package/dist/engine/registry/blocks/sections/hero.js.map +1 -1
  162. package/dist/engine/registry/blocks/sections/index.d.ts +3 -0
  163. package/dist/engine/registry/blocks/sections/index.d.ts.map +1 -1
  164. package/dist/engine/registry/blocks/sections/navbar.d.ts.map +1 -1
  165. package/dist/engine/registry/blocks/sections/navbar.js +2 -1
  166. package/dist/engine/registry/blocks/sections/navbar.js.map +1 -1
  167. package/dist/engine/registry/registry.d.ts.map +1 -1
  168. package/dist/engine/registry/registry.js +39 -36
  169. package/dist/engine/registry/registry.js.map +1 -1
  170. package/dist/engine/registry/types.d.ts +17 -13
  171. package/dist/engine/registry/types.d.ts.map +1 -1
  172. package/dist/engine/render/renderNodeImpl.js +85 -85
  173. package/dist/engine/render/renderNodeImpl.js.map +1 -1
  174. package/dist/engine/render/renderPage.d.ts +3 -3
  175. package/dist/engine/render/renderPage.d.ts.map +1 -1
  176. package/dist/engine/render/renderPage.js.map +1 -1
  177. package/dist/engine/render/renderers/composition/CardRenderer.js +4 -4
  178. package/dist/engine/render/renderers/content/LinkRenderer.d.ts.map +1 -1
  179. package/dist/engine/render/renderers/content/LinkRenderer.js +41 -16
  180. package/dist/engine/render/renderers/content/LinkRenderer.js.map +1 -1
  181. package/dist/engine/render/renderers/content/SocialLinksRenderer.d.ts.map +1 -1
  182. package/dist/engine/render/renderers/content/SocialLinksRenderer.js +16 -23
  183. package/dist/engine/render/renderers/content/SocialLinksRenderer.js.map +1 -1
  184. package/dist/engine/render/renderers/forms/FormRenderer.js +6 -6
  185. package/dist/engine/render/renderers/layout/GridRenderer.js +3 -3
  186. package/dist/engine/render/renderers/sections/BlogPostCardRenderer.d.ts +3 -0
  187. package/dist/engine/render/renderers/sections/BlogPostCardRenderer.d.ts.map +1 -0
  188. package/dist/engine/render/renderers/sections/BlogPostCardRenderer.js +199 -0
  189. package/dist/engine/render/renderers/sections/BlogPostCardRenderer.js.map +1 -0
  190. package/dist/engine/render/renderers/sections/BlogPostDetailRenderer.d.ts +3 -0
  191. package/dist/engine/render/renderers/sections/BlogPostDetailRenderer.d.ts.map +1 -0
  192. package/dist/engine/render/renderers/sections/BlogPostDetailRenderer.js +293 -0
  193. package/dist/engine/render/renderers/sections/BlogPostDetailRenderer.js.map +1 -0
  194. package/dist/engine/render/renderers/sections/BlogPostGridRenderer.d.ts +3 -0
  195. package/dist/engine/render/renderers/sections/BlogPostGridRenderer.d.ts.map +1 -0
  196. package/dist/engine/render/renderers/sections/BlogPostGridRenderer.js +101 -0
  197. package/dist/engine/render/renderers/sections/BlogPostGridRenderer.js.map +1 -0
  198. package/dist/engine/render/renderers/sections/CtaRenderer.d.ts.map +1 -1
  199. package/dist/engine/render/renderers/sections/CtaRenderer.js +33 -31
  200. package/dist/engine/render/renderers/sections/CtaRenderer.js.map +1 -1
  201. package/dist/engine/render/renderers/sections/FaqItemRenderer.d.ts.map +1 -1
  202. package/dist/engine/render/renderers/sections/FaqItemRenderer.js +7 -6
  203. package/dist/engine/render/renderers/sections/FaqItemRenderer.js.map +1 -1
  204. package/dist/engine/render/renderers/sections/FaqRenderer.js +7 -7
  205. package/dist/engine/render/renderers/sections/FaqRenderer.js.map +1 -1
  206. package/dist/engine/render/renderers/sections/FeatureGridRenderer.d.ts.map +1 -1
  207. package/dist/engine/render/renderers/sections/FeatureGridRenderer.js +19 -18
  208. package/dist/engine/render/renderers/sections/FeatureGridRenderer.js.map +1 -1
  209. package/dist/engine/render/renderers/sections/FeatureRenderer.d.ts.map +1 -1
  210. package/dist/engine/render/renderers/sections/FeatureRenderer.js +5 -4
  211. package/dist/engine/render/renderers/sections/FeatureRenderer.js.map +1 -1
  212. package/dist/engine/render/renderers/sections/FooterRenderer.d.ts.map +1 -1
  213. package/dist/engine/render/renderers/sections/FooterRenderer.js +25 -30
  214. package/dist/engine/render/renderers/sections/FooterRenderer.js.map +1 -1
  215. package/dist/engine/render/renderers/sections/HeroRenderer.d.ts.map +1 -1
  216. package/dist/engine/render/renderers/sections/HeroRenderer.js +293 -229
  217. package/dist/engine/render/renderers/sections/HeroRenderer.js.map +1 -1
  218. package/dist/engine/render/renderers/sections/NavbarRenderer.d.ts.map +1 -1
  219. package/dist/engine/render/renderers/sections/NavbarRenderer.js +23 -22
  220. package/dist/engine/render/renderers/sections/NavbarRenderer.js.map +1 -1
  221. package/dist/engine/render/renderers/sections/PricingCardRenderer.d.ts.map +1 -1
  222. package/dist/engine/render/renderers/sections/PricingCardRenderer.js +7 -6
  223. package/dist/engine/render/renderers/sections/PricingCardRenderer.js.map +1 -1
  224. package/dist/engine/render/renderers/sections/PricingRenderer.js +9 -9
  225. package/dist/engine/render/renderers/sections/PricingRenderer.js.map +1 -1
  226. package/dist/engine/render/renderers/sections/TestimonialGridRenderer.d.ts.map +1 -1
  227. package/dist/engine/render/renderers/sections/TestimonialGridRenderer.js +17 -16
  228. package/dist/engine/render/renderers/sections/TestimonialGridRenderer.js.map +1 -1
  229. package/dist/engine/render/renderers/sections/TestimonialRenderer.d.ts.map +1 -1
  230. package/dist/engine/render/renderers/sections/TestimonialRenderer.js +11 -10
  231. package/dist/engine/render/renderers/sections/TestimonialRenderer.js.map +1 -1
  232. package/dist/engine/render/renderers/sections/index.js +24 -18
  233. package/dist/engine/render/renderers/sections/index.js.map +1 -1
  234. package/dist/engine/schema/siteDocument.d.ts +118 -7
  235. package/dist/engine/schema/siteDocument.d.ts.map +1 -1
  236. package/dist/engine/schema/siteDocument.js +1 -1
  237. package/dist/engine/schema/siteDocument.js.map +1 -1
  238. package/dist/engine/schema/themeTokens.d.ts +1 -1
  239. package/dist/engine/schema/themeTokens.js.map +1 -1
  240. package/dist/engine/shared/carouselAnimation.d.ts +20 -0
  241. package/dist/engine/shared/carouselAnimation.d.ts.map +1 -0
  242. package/dist/engine/shared/carouselAnimation.js +62 -0
  243. package/dist/engine/shared/carouselAnimation.js.map +1 -0
  244. package/dist/engine/shared/imageGrid/presets.js +4 -12
  245. package/dist/engine/shared/imageGrid/presets.js.map +1 -1
  246. package/dist/engine/shared/imageGrid/types.d.ts +2 -0
  247. package/dist/engine/shared/imageGrid/types.d.ts.map +1 -1
  248. package/dist/engine/shared/layoutConstants.d.ts +13 -0
  249. package/dist/engine/shared/layoutConstants.d.ts.map +1 -0
  250. package/dist/engine/shared/layoutConstants.js +14 -0
  251. package/dist/engine/shared/layoutConstants.js.map +1 -0
  252. package/dist/engine/shared/shadowConstants.d.ts +5 -0
  253. package/dist/engine/shared/shadowConstants.d.ts.map +1 -0
  254. package/dist/engine/shared/shadowConstants.js +11 -0
  255. package/dist/engine/shared/shadowConstants.js.map +1 -0
  256. package/dist/engine/shared/showWhen.d.ts +44 -0
  257. package/dist/engine/shared/showWhen.d.ts.map +1 -0
  258. package/dist/engine/shared/showWhen.js +33 -0
  259. package/dist/engine/shared/showWhen.js.map +1 -0
  260. package/dist/engine/shared/socialIcons.d.ts +6 -0
  261. package/dist/engine/shared/socialIcons.d.ts.map +1 -0
  262. package/dist/engine/shared/socialIcons.js +13 -0
  263. package/dist/engine/shared/socialIcons.js.map +1 -0
  264. package/dist/engine/shared/typeGuards.d.ts +11 -0
  265. package/dist/engine/shared/typeGuards.d.ts.map +1 -0
  266. package/dist/hooks/useEditorState.d.ts +8 -5
  267. package/dist/hooks/useEditorState.d.ts.map +1 -1
  268. package/dist/hooks/useEditorState.js +150 -194
  269. package/dist/hooks/useEditorState.js.map +1 -1
  270. package/dist/hooks/useNavbarAutoSync.d.ts +2 -2
  271. package/dist/hooks/useNavbarAutoSync.d.ts.map +1 -1
  272. package/dist/hooks/useNavbarAutoSync.js.map +1 -1
  273. package/dist/index.d.ts +60 -14
  274. package/dist/index.d.ts.map +1 -1
  275. package/dist/index.js +109 -124
  276. package/dist/index.js.map +1 -1
  277. package/dist/shared/index.d.ts +2 -2
  278. package/dist/shared/index.d.ts.map +1 -1
  279. package/dist/shared/schema.d.ts +4 -4
  280. package/dist/shared/schema.d.ts.map +1 -1
  281. package/dist/shared/schema.js.map +1 -1
  282. package/dist/shared/templates/escola-blog.d.ts +3 -0
  283. package/dist/shared/templates/escola-blog.d.ts.map +1 -0
  284. package/dist/shared/templates/escola-blog.js +160 -0
  285. package/dist/shared/templates/escola-blog.js.map +1 -0
  286. package/dist/shared/templates/escola-edvi.d.ts +2 -2
  287. package/dist/shared/templates/escola-edvi.d.ts.map +1 -1
  288. package/dist/shared/templates/escola-edvi.js.map +1 -1
  289. package/dist/shared/templates/escola-premium.d.ts +2 -2
  290. package/dist/shared/templates/escola-premium.d.ts.map +1 -1
  291. package/dist/shared/templates/escola-premium.js.map +1 -1
  292. package/dist/shared/templates/escola-zilom.d.ts +2 -2
  293. package/dist/shared/templates/escola-zilom.d.ts.map +1 -1
  294. package/dist/shared/templates/escola-zilom.js.map +1 -1
  295. package/dist/shared/templates/index.d.ts +7 -5
  296. package/dist/shared/templates/index.d.ts.map +1 -1
  297. package/dist/shared/templates/index.js +30 -12
  298. package/dist/shared/templates/index.js.map +1 -1
  299. package/dist/shared/validators.d.ts +3 -3
  300. package/dist/shared/validators.d.ts.map +1 -1
  301. package/dist/shared/validators.js.map +1 -1
  302. package/dist/site/BlockRenderer.d.ts +1 -1
  303. package/dist/site/BlockRenderer.d.ts.map +1 -1
  304. package/dist/site/BlockRenderer.js +22 -26
  305. package/dist/site/BlockRenderer.js.map +1 -1
  306. package/dist/site/blocks/Button.js +15 -17
  307. package/dist/site/blocks/Button.js.map +1 -1
  308. package/dist/site/blocks/Card.js +13 -15
  309. package/dist/site/blocks/Card.js.map +1 -1
  310. package/dist/site/blocks/Features.js +15 -17
  311. package/dist/site/blocks/Features.js.map +1 -1
  312. package/dist/site/blocks/Footer.js +10 -12
  313. package/dist/site/blocks/Footer.js.map +1 -1
  314. package/dist/site/blocks/Hero.js +12 -14
  315. package/dist/site/blocks/Hero.js.map +1 -1
  316. package/dist/site/blocks/Navbar.js +13 -15
  317. package/dist/site/blocks/Navbar.js.map +1 -1
  318. package/dist/site/blocks/Section.js +9 -11
  319. package/dist/site/blocks/Section.js.map +1 -1
  320. package/dist/site/blocks/SectionHeader.js +9 -11
  321. package/dist/site/blocks/SectionHeader.js.map +1 -1
  322. package/dist/site/blocks/SiteRoot.js +9 -12
  323. package/dist/site/blocks/SiteRoot.js.map +1 -1
  324. package/dist/site/index.js +73 -73
  325. package/dist/styles/site/sections.css.d.ts +1 -1
  326. package/dist/utils/blockUtils.d.ts +2 -2
  327. package/dist/utils/blockUtils.d.ts.map +1 -1
  328. package/dist/utils/blockUtils.js.map +1 -1
  329. package/dist/utils/changeDetector.d.ts +3 -2
  330. package/dist/utils/changeDetector.d.ts.map +1 -1
  331. package/dist/utils/changeDetector.js +39 -39
  332. package/dist/utils/changeDetector.js.map +1 -1
  333. package/dist/utils/cn.js +2 -2
  334. package/dist/utils/dataURLUtils.d.ts +24 -0
  335. package/dist/utils/dataURLUtils.d.ts.map +1 -0
  336. package/dist/utils/dataURLUtils.js +47 -0
  337. package/dist/utils/dataURLUtils.js.map +1 -0
  338. package/dist/utils/documentHash.d.ts +2 -2
  339. package/dist/utils/documentHash.d.ts.map +1 -1
  340. package/dist/utils/documentHash.js +8 -7
  341. package/dist/utils/documentHash.js.map +1 -1
  342. package/dist/utils/logger.d.ts +13 -0
  343. package/dist/utils/logger.d.ts.map +1 -0
  344. package/dist/utils/logger.js +13 -0
  345. package/dist/utils/logger.js.map +1 -0
  346. package/dist/utils/navbarSync.d.ts +3 -3
  347. package/dist/utils/navbarSync.d.ts.map +1 -1
  348. package/dist/utils/navbarSync.js +25 -24
  349. package/dist/utils/navbarSync.js.map +1 -1
  350. package/dist/utils/sharedTemplateToEngine.d.ts +7 -8
  351. package/dist/utils/sharedTemplateToEngine.d.ts.map +1 -1
  352. package/dist/utils/sharedTemplateToEngine.js +14 -87
  353. package/dist/utils/sharedTemplateToEngine.js.map +1 -1
  354. package/dist/viewer/LandingPageViewer.d.ts +32 -0
  355. package/dist/viewer/LandingPageViewer.d.ts.map +1 -0
  356. package/dist/viewer/LandingPageViewer.js +300 -0
  357. package/dist/viewer/LandingPageViewer.js.map +1 -0
  358. package/package.json +10 -5
  359. package/dist/components/ComponentPalette/definitions.d.ts +0 -3
  360. package/dist/components/ComponentPalette/definitions.d.ts.map +0 -1
  361. package/dist/components/ComponentPalette/definitions.js +0 -206
  362. package/dist/components/ComponentPalette/definitions.js.map +0 -1
  363. package/dist/components/ComponentPalette/index.d.ts +0 -7
  364. package/dist/components/ComponentPalette/index.d.ts.map +0 -1
  365. package/dist/components/ComponentPalette/index.js +0 -86
  366. package/dist/components/ComponentPalette/index.js.map +0 -1
  367. package/dist/components/LoadingSpinner.d.ts.map +0 -1
  368. package/dist/components/LoadingSpinner.js.map +0 -1
  369. package/dist/components/PreviewPanel/index.d.ts +0 -12
  370. package/dist/components/PreviewPanel/index.d.ts.map +0 -1
  371. package/dist/components/PreviewPanel/index.js +0 -140
  372. package/dist/components/PreviewPanel/index.js.map +0 -1
  373. package/dist/components/PropertyPanel/index.d.ts +0 -8
  374. package/dist/components/PropertyPanel/index.d.ts.map +0 -1
  375. package/dist/components/PropertyPanel/index.js +0 -223
  376. package/dist/components/PropertyPanel/index.js.map +0 -1
  377. package/dist/components/SiteEditor/index.d.ts +0 -3
  378. package/dist/components/SiteEditor/index.d.ts.map +0 -1
  379. package/dist/components/SiteEditor/index.js +0 -251
  380. package/dist/components/SiteEditor/index.js.map +0 -1
  381. package/dist/components/SiteViewer/index.d.ts +0 -3
  382. package/dist/components/SiteViewer/index.d.ts.map +0 -1
  383. package/dist/components/SiteViewer/index.js +0 -55
  384. package/dist/components/SiteViewer/index.js.map +0 -1
  385. package/dist/components/TemplateSelector/index.d.ts +0 -7
  386. package/dist/components/TemplateSelector/index.d.ts.map +0 -1
  387. package/dist/components/TemplateSelector/index.js +0 -109
  388. package/dist/components/TemplateSelector/index.js.map +0 -1
  389. package/dist/components/Toolbar/index.d.ts +0 -15
  390. package/dist/components/Toolbar/index.d.ts.map +0 -1
  391. package/dist/components/Toolbar/index.js +0 -113
  392. package/dist/components/Toolbar/index.js.map +0 -1
  393. package/dist/components/editors/PaletteSelector.d.ts +0 -14
  394. package/dist/components/editors/PaletteSelector.d.ts.map +0 -1
  395. package/dist/components/editors/PaletteSelector.js +0 -175
  396. package/dist/components/editors/PaletteSelector.js.map +0 -1
  397. package/dist/components/effects/SectionGlow.d.ts +0 -12
  398. package/dist/components/effects/SectionGlow.d.ts.map +0 -1
  399. package/dist/components/effects/SectionGlow.js +0 -139
  400. package/dist/components/effects/SectionGlow.js.map +0 -1
  401. package/dist/components/inputs/CheckboxInput.d.ts +0 -3
  402. package/dist/components/inputs/CheckboxInput.d.ts.map +0 -1
  403. package/dist/components/inputs/CheckboxInput.js +0 -46
  404. package/dist/components/inputs/CheckboxInput.js.map +0 -1
  405. package/dist/components/inputs/ColorInput.d.ts +0 -7
  406. package/dist/components/inputs/ColorInput.d.ts.map +0 -1
  407. package/dist/components/inputs/ColorInput.js +0 -180
  408. package/dist/components/inputs/ColorInput.js.map +0 -1
  409. package/dist/components/inputs/GradientInput.d.ts +0 -7
  410. package/dist/components/inputs/GradientInput.d.ts.map +0 -1
  411. package/dist/components/inputs/GradientInput.js +0 -78
  412. package/dist/components/inputs/GradientInput.js.map +0 -1
  413. package/dist/components/inputs/ImageInput.d.ts.map +0 -1
  414. package/dist/components/inputs/ImageInput.js.map +0 -1
  415. package/dist/components/inputs/SelectInput.d.ts +0 -7
  416. package/dist/components/inputs/SelectInput.d.ts.map +0 -1
  417. package/dist/components/inputs/SelectInput.js +0 -97
  418. package/dist/components/inputs/SelectInput.js.map +0 -1
  419. package/dist/components/inputs/SliderInput.d.ts +0 -8
  420. package/dist/components/inputs/SliderInput.d.ts.map +0 -1
  421. package/dist/components/inputs/SliderInput.js +0 -77
  422. package/dist/components/inputs/SliderInput.js.map +0 -1
  423. package/dist/components/inputs/index.d.ts +0 -11
  424. package/dist/components/inputs/index.d.ts.map +0 -1
  425. package/dist/components/inputs/types.d.ts +0 -48
  426. package/dist/components/inputs/types.d.ts.map +0 -1
  427. package/dist/components/inputs/types.js +0 -9
  428. package/dist/components/inputs/types.js.map +0 -1
  429. package/dist/components/renderers/ComponentRenderer.d.ts +0 -8
  430. package/dist/components/renderers/ComponentRenderer.d.ts.map +0 -1
  431. package/dist/components/renderers/ComponentRenderer.js +0 -13
  432. package/dist/components/renderers/ComponentRenderer.js.map +0 -1
  433. package/dist/components/renderers/HeroRenderer.d.ts +0 -3
  434. package/dist/components/renderers/HeroRenderer.d.ts.map +0 -1
  435. package/dist/components/renderers/HeroRenderer.js +0 -10
  436. package/dist/components/renderers/HeroRenderer.js.map +0 -1
  437. package/dist/components/renderers/hero/HeroBanner.d.ts +0 -3
  438. package/dist/components/renderers/hero/HeroBanner.d.ts.map +0 -1
  439. package/dist/components/renderers/hero/HeroBanner.js +0 -122
  440. package/dist/components/renderers/hero/HeroBanner.js.map +0 -1
  441. package/dist/components/renderers/hero/HeroCinematic.d.ts +0 -3
  442. package/dist/components/renderers/hero/HeroCinematic.d.ts.map +0 -1
  443. package/dist/components/renderers/hero/HeroCinematic.js +0 -141
  444. package/dist/components/renderers/hero/HeroCinematic.js.map +0 -1
  445. package/dist/components/renderers/hero/HeroClassic.d.ts +0 -3
  446. package/dist/components/renderers/hero/HeroClassic.d.ts.map +0 -1
  447. package/dist/components/renderers/hero/HeroClassic.js +0 -241
  448. package/dist/components/renderers/hero/HeroClassic.js.map +0 -1
  449. package/dist/components/renderers/hero/HeroCollage.d.ts +0 -3
  450. package/dist/components/renderers/hero/HeroCollage.d.ts.map +0 -1
  451. package/dist/components/renderers/hero/HeroCollage.js +0 -131
  452. package/dist/components/renderers/hero/HeroCollage.js.map +0 -1
  453. package/dist/components/renderers/hero/HeroColumns.d.ts +0 -3
  454. package/dist/components/renderers/hero/HeroColumns.d.ts.map +0 -1
  455. package/dist/components/renderers/hero/HeroColumns.js +0 -114
  456. package/dist/components/renderers/hero/HeroColumns.js.map +0 -1
  457. package/dist/components/renderers/hero/HeroGlass.d.ts +0 -3
  458. package/dist/components/renderers/hero/HeroGlass.d.ts.map +0 -1
  459. package/dist/components/renderers/hero/HeroGlass.js +0 -119
  460. package/dist/components/renderers/hero/HeroGlass.js.map +0 -1
  461. package/dist/components/renderers/hero/HeroNeon.d.ts +0 -3
  462. package/dist/components/renderers/hero/HeroNeon.d.ts.map +0 -1
  463. package/dist/components/renderers/hero/HeroNeon.js +0 -136
  464. package/dist/components/renderers/hero/HeroNeon.js.map +0 -1
  465. package/dist/components/renderers/hero/HeroParallax.d.ts +0 -3
  466. package/dist/components/renderers/hero/HeroParallax.d.ts.map +0 -1
  467. package/dist/components/renderers/hero/HeroParallax.js +0 -99
  468. package/dist/components/renderers/hero/HeroParallax.js.map +0 -1
  469. package/dist/components/renderers/hero/HeroSplit.d.ts +0 -3
  470. package/dist/components/renderers/hero/HeroSplit.d.ts.map +0 -1
  471. package/dist/components/renderers/hero/HeroSplit.js +0 -142
  472. package/dist/components/renderers/hero/HeroSplit.js.map +0 -1
  473. package/dist/components/renderers/hero/HeroSpotlight.d.ts +0 -3
  474. package/dist/components/renderers/hero/HeroSpotlight.d.ts.map +0 -1
  475. package/dist/components/renderers/hero/HeroSpotlight.js +0 -213
  476. package/dist/components/renderers/hero/HeroSpotlight.js.map +0 -1
  477. package/dist/components/renderers/hero/index.d.ts +0 -14
  478. package/dist/components/renderers/hero/index.d.ts.map +0 -1
  479. package/dist/components/renderers/index.d.ts +0 -8
  480. package/dist/components/renderers/index.d.ts.map +0 -1
  481. package/dist/components/renderers/index.js +0 -89
  482. package/dist/components/renderers/index.js.map +0 -1
  483. package/dist/components/renderers/types.d.ts +0 -11
  484. package/dist/components/renderers/types.d.ts.map +0 -1
  485. package/dist/editor/LandingPageEditorV2.d.ts +0 -19
  486. package/dist/editor/LandingPageEditorV2.d.ts.map +0 -1
  487. package/dist/editor/LandingPageEditorV2.js +0 -311
  488. package/dist/editor/LandingPageEditorV2.js.map +0 -1
  489. package/dist/editor/PropertyEditor/PropertyGroup.js +0 -23
  490. package/dist/editor/PropertyEditor/PropertyGroup.js.map +0 -1
  491. package/dist/engine/preview/PreviewV2.d.ts +0 -15
  492. package/dist/engine/preview/PreviewV2.d.ts.map +0 -1
  493. package/dist/engine/preview/PreviewV2.js +0 -242
  494. package/dist/engine/preview/PreviewV2.js.map +0 -1
  495. package/dist/modules/registry.d.ts +0 -31
  496. package/dist/modules/registry.d.ts.map +0 -1
  497. package/dist/modules/registry.js +0 -67
  498. package/dist/modules/registry.js.map +0 -1
  499. package/dist/node_modules/@dnd-kit/accessibility/dist/accessibility.esm.js +0 -57
  500. package/dist/node_modules/@dnd-kit/accessibility/dist/accessibility.esm.js.map +0 -1
  501. package/dist/node_modules/@dnd-kit/core/dist/core.esm.js +0 -2345
  502. package/dist/node_modules/@dnd-kit/core/dist/core.esm.js.map +0 -1
  503. package/dist/node_modules/@dnd-kit/sortable/dist/sortable.esm.js +0 -440
  504. package/dist/node_modules/@dnd-kit/sortable/dist/sortable.esm.js.map +0 -1
  505. package/dist/node_modules/@dnd-kit/utilities/dist/utilities.esm.js +0 -236
  506. package/dist/node_modules/@dnd-kit/utilities/dist/utilities.esm.js.map +0 -1
  507. package/dist/node_modules/clsx/dist/clsx.js +0 -17
  508. package/dist/node_modules/clsx/dist/clsx.js.map +0 -1
  509. package/dist/node_modules/lucide-react/dist/esm/Icon.js +0 -35
  510. package/dist/node_modules/lucide-react/dist/esm/Icon.js.map +0 -1
  511. package/dist/node_modules/lucide-react/dist/esm/createLucideIcon.js +0 -18
  512. package/dist/node_modules/lucide-react/dist/esm/createLucideIcon.js.map +0 -1
  513. package/dist/node_modules/lucide-react/dist/esm/defaultAttributes.js +0 -15
  514. package/dist/node_modules/lucide-react/dist/esm/defaultAttributes.js.map +0 -1
  515. package/dist/node_modules/lucide-react/dist/esm/icons/arrow-right.js +0 -9
  516. package/dist/node_modules/lucide-react/dist/esm/icons/arrow-right.js.map +0 -1
  517. package/dist/node_modules/lucide-react/dist/esm/icons/briefcase.js +0 -9
  518. package/dist/node_modules/lucide-react/dist/esm/icons/briefcase.js.map +0 -1
  519. package/dist/node_modules/lucide-react/dist/esm/icons/check.js +0 -6
  520. package/dist/node_modules/lucide-react/dist/esm/icons/check.js.map +0 -1
  521. package/dist/node_modules/lucide-react/dist/esm/icons/chevron-down.js +0 -8
  522. package/dist/node_modules/lucide-react/dist/esm/icons/chevron-down.js.map +0 -1
  523. package/dist/node_modules/lucide-react/dist/esm/icons/chevron-right.js +0 -8
  524. package/dist/node_modules/lucide-react/dist/esm/icons/chevron-right.js.map +0 -1
  525. package/dist/node_modules/lucide-react/dist/esm/icons/chevron-up.js +0 -6
  526. package/dist/node_modules/lucide-react/dist/esm/icons/chevron-up.js.map +0 -1
  527. package/dist/node_modules/lucide-react/dist/esm/icons/eye.js +0 -15
  528. package/dist/node_modules/lucide-react/dist/esm/icons/eye.js.map +0 -1
  529. package/dist/node_modules/lucide-react/dist/esm/icons/file-text.js +0 -12
  530. package/dist/node_modules/lucide-react/dist/esm/icons/file-text.js.map +0 -1
  531. package/dist/node_modules/lucide-react/dist/esm/icons/globe.js +0 -10
  532. package/dist/node_modules/lucide-react/dist/esm/icons/globe.js.map +0 -1
  533. package/dist/node_modules/lucide-react/dist/esm/icons/grid-3x3.js +0 -12
  534. package/dist/node_modules/lucide-react/dist/esm/icons/grid-3x3.js.map +0 -1
  535. package/dist/node_modules/lucide-react/dist/esm/icons/grip-vertical.js +0 -13
  536. package/dist/node_modules/lucide-react/dist/esm/icons/grip-vertical.js.map +0 -1
  537. package/dist/node_modules/lucide-react/dist/esm/icons/heading.js +0 -10
  538. package/dist/node_modules/lucide-react/dist/esm/icons/heading.js.map +0 -1
  539. package/dist/node_modules/lucide-react/dist/esm/icons/image.js +0 -10
  540. package/dist/node_modules/lucide-react/dist/esm/icons/image.js.map +0 -1
  541. package/dist/node_modules/lucide-react/dist/esm/icons/images.js +0 -11
  542. package/dist/node_modules/lucide-react/dist/esm/icons/images.js.map +0 -1
  543. package/dist/node_modules/lucide-react/dist/esm/icons/list.js +0 -13
  544. package/dist/node_modules/lucide-react/dist/esm/icons/list.js.map +0 -1
  545. package/dist/node_modules/lucide-react/dist/esm/icons/loader-circle.js +0 -8
  546. package/dist/node_modules/lucide-react/dist/esm/icons/loader-circle.js.map +0 -1
  547. package/dist/node_modules/lucide-react/dist/esm/icons/minus.js +0 -6
  548. package/dist/node_modules/lucide-react/dist/esm/icons/minus.js.map +0 -1
  549. package/dist/node_modules/lucide-react/dist/esm/icons/mouse-pointer-click.js +0 -18
  550. package/dist/node_modules/lucide-react/dist/esm/icons/mouse-pointer-click.js.map +0 -1
  551. package/dist/node_modules/lucide-react/dist/esm/icons/navigation.js +0 -8
  552. package/dist/node_modules/lucide-react/dist/esm/icons/navigation.js.map +0 -1
  553. package/dist/node_modules/lucide-react/dist/esm/icons/panels-top-left.js +0 -10
  554. package/dist/node_modules/lucide-react/dist/esm/icons/panels-top-left.js.map +0 -1
  555. package/dist/node_modules/lucide-react/dist/esm/icons/phone.js +0 -14
  556. package/dist/node_modules/lucide-react/dist/esm/icons/phone.js.map +0 -1
  557. package/dist/node_modules/lucide-react/dist/esm/icons/plus.js +0 -9
  558. package/dist/node_modules/lucide-react/dist/esm/icons/plus.js.map +0 -1
  559. package/dist/node_modules/lucide-react/dist/esm/icons/redo-2.js +0 -9
  560. package/dist/node_modules/lucide-react/dist/esm/icons/redo-2.js.map +0 -1
  561. package/dist/node_modules/lucide-react/dist/esm/icons/redo.js +0 -9
  562. package/dist/node_modules/lucide-react/dist/esm/icons/redo.js.map +0 -1
  563. package/dist/node_modules/lucide-react/dist/esm/icons/rotate-ccw.js +0 -9
  564. package/dist/node_modules/lucide-react/dist/esm/icons/rotate-ccw.js.map +0 -1
  565. package/dist/node_modules/lucide-react/dist/esm/icons/save.js +0 -16
  566. package/dist/node_modules/lucide-react/dist/esm/icons/save.js.map +0 -1
  567. package/dist/node_modules/lucide-react/dist/esm/icons/square.js +0 -8
  568. package/dist/node_modules/lucide-react/dist/esm/icons/square.js.map +0 -1
  569. package/dist/node_modules/lucide-react/dist/esm/icons/star.js +0 -14
  570. package/dist/node_modules/lucide-react/dist/esm/icons/star.js.map +0 -1
  571. package/dist/node_modules/lucide-react/dist/esm/icons/trash-2.js +0 -12
  572. package/dist/node_modules/lucide-react/dist/esm/icons/trash-2.js.map +0 -1
  573. package/dist/node_modules/lucide-react/dist/esm/icons/type.js +0 -10
  574. package/dist/node_modules/lucide-react/dist/esm/icons/type.js.map +0 -1
  575. package/dist/node_modules/lucide-react/dist/esm/icons/undo-2.js +0 -9
  576. package/dist/node_modules/lucide-react/dist/esm/icons/undo-2.js.map +0 -1
  577. package/dist/node_modules/lucide-react/dist/esm/icons/undo.js +0 -9
  578. package/dist/node_modules/lucide-react/dist/esm/icons/undo.js.map +0 -1
  579. package/dist/node_modules/lucide-react/dist/esm/icons/user.js +0 -9
  580. package/dist/node_modules/lucide-react/dist/esm/icons/user.js.map +0 -1
  581. package/dist/node_modules/lucide-react/dist/esm/shared/src/utils.js +0 -6
  582. package/dist/node_modules/lucide-react/dist/esm/shared/src/utils.js.map +0 -1
  583. package/dist/node_modules/react-colorful/dist/index.js +0 -167
  584. package/dist/node_modules/react-colorful/dist/index.js.map +0 -1
  585. package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js +0 -2266
  586. package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js.map +0 -1
  587. package/dist/types/index.d.ts +0 -99
  588. package/dist/types/index.d.ts.map +0 -1
  589. package/dist/types/module.d.ts +0 -25
  590. package/dist/types/module.d.ts.map +0 -1
  591. package/dist/utils/htmlExporter.d.ts +0 -6
  592. package/dist/utils/htmlExporter.d.ts.map +0 -1
  593. package/dist/utils/htmlExporter.js +0 -92
  594. package/dist/utils/htmlExporter.js.map +0 -1
  595. package/dist/utils/themeApplier.d.ts +0 -11
  596. package/dist/utils/themeApplier.d.ts.map +0 -1
  597. package/dist/utils/themeApplier.js +0 -29
  598. package/dist/utils/themeApplier.js.map +0 -1
  599. package/dist/utils/useDebounce.d.ts +0 -12
  600. package/dist/utils/useDebounce.d.ts.map +0 -1
  601. package/dist/viewer/LandingPageViewerV2.d.ts +0 -25
  602. package/dist/viewer/LandingPageViewerV2.d.ts.map +0 -1
  603. package/dist/viewer/LandingPageViewerV2.js +0 -253
  604. package/dist/viewer/LandingPageViewerV2.js.map +0 -1
  605. /package/dist/{components → editor/PropertyEditor}/inputs/ImageInput.d.ts +0 -0
  606. /package/dist/{components → editor/components}/LoadingSpinner.d.ts +0 -0
  607. /package/dist/{components → editor/components}/LoadingSpinner.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"MarketingExporters.js","sources":["../../../../../src/engine/export/exporters/sections/MarketingExporters.ts"],"sourcesContent":["/**\n * Marketing Sections Exporters\n * Feature, FeatureGrid, Pricing, Testimonials, FAQ, CTA, Stats, Logo Cloud, etc.\n * Mobile-first responsive grids with media queries\n */\n\nimport { Block } from \"../../../schema/siteDocument\";\nimport { ThemeTokens } from \"../../../schema/themeTokens\";\nimport { dataBlockIdAttr, blockIdAttr, escapeHtml, resolveHref, linkTargetAttr } from \"../../shared/htmlHelpers\";\nimport { generateScopedId } from \"../../shared/idGenerator\";\nimport { resolveResponsiveColumns, generateResponsiveGridStyles } from \"../../shared/responsiveGridHelper\";\nimport {\n generateButtonHoverStyles,\n generateButtonOverlayCSS,\n getButtonHoverKeyframes,\n type ButtonHoverEffect,\n type ButtonHoverOverlay,\n} from \"../../../shared/hoverEffects\";\n\nexport function exportFeature(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const { icon, title, description } = (block as any).props;\n const iconHtml = icon\n ? `<div style=\"width: 3rem; height: 3rem; background-color: var(--sg-primary); border-radius: 0.75rem; display: flex; align-items: center; justify-content: center; margin: 0 auto 1rem; color: #fff;\">[★]</div>`\n : \"\";\n return `<div ${dataBlockIdAttr(block.id)} style=\"padding: 1.5rem; text-align: center;\">${iconHtml}<h3 style=\"font-size: 1.25rem; font-weight: 600; margin-bottom: 0.5rem;\">${escapeHtml(title)}</h3><p style=\"color: var(--sg-muted-text); font-size: 0.875rem;\">${escapeHtml(description)}</p></div>`;\n}\n\nexport function exportFeatureGrid(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n renderChild?: (block: Block, _depth: number, basePath?: string, theme?: ThemeTokens) => string,\n): string {\n const {\n title,\n subtitle,\n columns = 3,\n variant = \"default\",\n features = [],\n } = (block as any).props;\n\n // Responsive grid: 1 col (mobile) → 2 cols (tablet) → N cols (desktop)\n const gridId = generateScopedId(block.id || \"\", \"feature-grid\");\n const responsiveConfig = resolveResponsiveColumns(columns, 1, 2, columns);\n const { inlineStyles, mediaQueries } = generateResponsiveGridStyles(gridId, responsiveConfig, \"2rem\");\n\n const isImageCards = variant === \"image-cards\";\n const headerHtml =\n title || subtitle\n ? `<div style=\"text-align: center; margin-bottom: 3rem;\">${title ? `<h2 style=\"font-size: var(--sg-heading-h2); margin-bottom: 0.5rem;\">${escapeHtml(title)}</h2>` : \"\"}${subtitle ? `<p style=\"color: var(--sg-muted-text); font-size: 1.125rem;\">${escapeHtml(subtitle)}</p>` : \"\"}</div>`\n : \"\";\n\n const featuresHtml = features\n .map((f: any) => {\n const imgBlock =\n isImageCards && f.image\n ? `<div style=\"width: 100%; height: 200px; background-image: url(${escapeHtml(f.image)}); background-size: cover; background-position: center;\"></div>`\n : \"\";\n const iconBlock =\n !isImageCards && f.icon\n ? `<div style=\"width: 3rem; height: 3rem; background-color: var(--sg-primary); border-radius: 0.75rem; display: flex; align-items: center; justify-content: center; margin-bottom: 1rem; color: #fff;\">[★]</div>`\n : \"\";\n const linkBlock = f.link\n ? `<a href=\"${escapeHtml(f.link.href || \"#\")}\" style=\"display: inline-block; margin-top: 0.75rem; color: var(--sg-primary); font-weight: 500; text-decoration: none; border: 1px solid var(--sg-primary); padding: 0.5rem 1rem; border-radius: var(--sg-button-radius);\">${escapeHtml(f.link.text)}</a>`\n : \"\";\n const innerPadding = isImageCards && f.image ? \"1.5rem\" : \"2rem\";\n return `<div style=\"background-color: var(--sg-bg); border-radius: 0.75rem; padding: ${isImageCards && f.image ? 0 : \"2rem\"}; box-shadow: var(--sg-card-shadow); overflow: hidden;\">${imgBlock}<div style=\"padding: ${innerPadding};\">${iconBlock}<h3 style=\"font-size: 1.25rem; font-weight: 600; margin-bottom: 0.5rem;\">${escapeHtml(f.title)}</h3><p style=\"color: var(--sg-muted-text);\">${escapeHtml(f.description)}</p>${linkBlock}</div></div>`;\n })\n .join(\"\");\n\n return `<style>${mediaQueries}</style><section ${blockIdAttr(block.id)} ${dataBlockIdAttr(block.id)} style=\"padding: 4rem 0; background-color: var(--sg-surface);\"><div style=\"max-width: 1200px; margin: 0 auto; padding: 0 1rem;\">${headerHtml}<div id=\"${gridId}\" style=\"${inlineStyles}\">${featuresHtml}</div></div></section>`;\n}\n\nexport function exportCta(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const {\n title,\n description: ctaDesc,\n primaryButton,\n secondaryButton,\n variant = \"centered\",\n // Button size\n buttonSize = \"md\",\n // Button hover effects\n buttonHoverEffect = \"scale\",\n buttonHoverIntensity = 50,\n buttonHoverOverlay = \"none\",\n buttonHoverIconName = \"arrow-right\",\n } = (block as any).props;\n\n // Size-based styles\n const sizeStyles: Record<string, { padding: string; fontSize: string }> = {\n sm: { padding: \"0.5rem 1rem\", fontSize: \"0.875rem\" },\n md: { padding: \"0.75rem 1.5rem\", fontSize: \"1rem\" },\n lg: { padding: \"1rem 2rem\", fontSize: \"1.125rem\" },\n };\n const btnSize = sizeStyles[buttonSize] || sizeStyles.md;\n\n // Responsive buttons: column (mobile) → row (desktop)\n const ctaId = generateScopedId(block.id || \"\", \"cta-actions\");\n const scope = `[data-block-id=\"${block.id}\"]`;\n\n const isGradient = variant === \"gradient\";\n const primaryColor = theme?.colors?.primary || \"#3b82f6\";\n const primaryText = theme?.colors?.primaryText || \"#ffffff\";\n\n // Button colors depend on gradient variant\n const primaryBtnBg = isGradient ? \"#fff\" : primaryColor;\n const primaryBtnText = isGradient ? primaryColor : primaryText;\n const secondaryBtnBg = \"transparent\";\n const secondaryBtnText = isGradient ? \"#fff\" : primaryColor;\n const secondaryBtnBorder = isGradient ? \"#fff\" : primaryColor;\n\n let buttonsCss = `\n @media (max-width: 640px) {\n #${ctaId} {\n flex-direction: column !important;\n width: 100%;\n }\n #${ctaId} a {\n width: 100% !important;\n text-align: center;\n }\n }\n `;\n\n // Generate hover CSS\n if (buttonHoverEffect !== \"none\") {\n // Primary button hover\n const primaryHoverResult = generateButtonHoverStyles({\n effect: buttonHoverEffect as ButtonHoverEffect,\n intensity: buttonHoverIntensity,\n buttonColor: primaryBtnBg,\n buttonTextColor: primaryBtnText,\n variant: \"solid\",\n });\n\n // Secondary button hover\n const secondaryHoverResult = generateButtonHoverStyles({\n effect: buttonHoverEffect as ButtonHoverEffect,\n intensity: buttonHoverIntensity,\n buttonColor: secondaryBtnBorder,\n buttonTextColor: secondaryBtnText,\n variant: \"outline\",\n });\n\n // Base styles if needed\n if (primaryHoverResult.base) {\n buttonsCss += `\n ${scope} .sg-cta__btn--primary {\n ${primaryHoverResult.base}\n }\n `;\n }\n\n if (secondaryHoverResult.base) {\n buttonsCss += `\n ${scope} .sg-cta__btn--secondary {\n ${secondaryHoverResult.base}\n }\n `;\n }\n\n // Hover styles\n buttonsCss += `\n ${scope} .sg-cta__btn--primary:hover {\n ${primaryHoverResult.hover}\n }\n ${scope} .sg-cta__btn--secondary:hover {\n ${secondaryHoverResult.hover}\n }\n `;\n\n // Add keyframes for pulse animation\n buttonsCss += getButtonHoverKeyframes();\n }\n\n // Efeito overlay (adicional)\n if (buttonHoverOverlay && buttonHoverOverlay !== \"none\") {\n buttonsCss += generateButtonOverlayCSS(`${scope} .sg-cta__btn--primary`, {\n overlay: buttonHoverOverlay as ButtonHoverOverlay,\n primaryColor,\n iconName: buttonHoverIconName,\n textColor: primaryBtnText,\n });\n buttonsCss += generateButtonOverlayCSS(`${scope} .sg-cta__btn--secondary`, {\n overlay: buttonHoverOverlay as ButtonHoverOverlay,\n primaryColor,\n iconName: buttonHoverIconName,\n textColor: secondaryBtnText,\n });\n }\n\n const bgStyle = isGradient\n ? \"background: linear-gradient(135deg, var(--sg-primary), var(--sg-accent));\"\n : \"background-color: var(--sg-surface);\";\n const textColor = isGradient ? \"#fff\" : \"var(--sg-text)\";\n const mutedColor = isGradient\n ? \"rgba(255,255,255,0.9)\"\n : \"var(--sg-muted-text)\";\n const ctaPrimaryHref = primaryButton\n ? resolveHref(primaryButton.href || \"#\", basePath)\n : \"#\";\n const ctaSecondaryHref = secondaryButton\n ? resolveHref(secondaryButton.href || \"#\", basePath)\n : \"#\";\n\n const primaryBtnStyle = `padding: ${btnSize.padding}; font-size: ${btnSize.fontSize}; background-color: ${primaryBtnBg}; color: ${primaryBtnText}; border-radius: var(--sg-button-radius); text-decoration: none; font-weight: 500; display: inline-block; transition: all 0.2s ease; position: relative; overflow: hidden;`;\n const secondaryBtnStyle = `padding: ${btnSize.padding}; font-size: ${btnSize.fontSize}; background-color: ${secondaryBtnBg}; color: ${secondaryBtnText}; border: 2px solid ${secondaryBtnBorder}; border-radius: var(--sg-button-radius); text-decoration: none; font-weight: 500; display: inline-block; transition: all 0.2s ease; position: relative; overflow: hidden;`;\n\n const primaryBtnHtml = primaryButton\n ? `<a href=\"${escapeHtml(ctaPrimaryHref)}\"${linkTargetAttr(ctaPrimaryHref, basePath)} class=\"sg-cta__btn sg-cta__btn--primary\" style=\"${primaryBtnStyle}\">${escapeHtml(primaryButton.text)}</a>`\n : \"\";\n const secondaryBtnHtml = secondaryButton\n ? `<a href=\"${escapeHtml(ctaSecondaryHref)}\"${linkTargetAttr(ctaSecondaryHref, basePath)} class=\"sg-cta__btn sg-cta__btn--secondary\" style=\"${secondaryBtnStyle}\">${escapeHtml(secondaryButton.text)}</a>`\n : \"\";\n return `<style>${buttonsCss}</style><section ${blockIdAttr(block.id)} ${dataBlockIdAttr(block.id)} style=\"padding: 4rem 0; ${bgStyle} text-align: center;\"><div style=\"max-width: 800px; margin: 0 auto; padding: 0 1rem;\"><h2 style=\"font-size: var(--sg-heading-h2); margin-bottom: 1rem; color: ${textColor};\">${escapeHtml(title)}</h2>${ctaDesc ? `<p style=\"font-size: 1.125rem; margin-bottom: 2rem; color: ${mutedColor};\">${escapeHtml(ctaDesc)}</p>` : \"\"}<div id=\"${ctaId}\" style=\"display: flex; gap: 1rem; justify-content: center; flex-wrap: wrap;\">${primaryBtnHtml}${secondaryBtnHtml}</div></div></section>`;\n}\n\nexport function exportPricingCard(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const {\n name,\n price,\n period,\n description: desc,\n features = [],\n buttonText,\n highlighted,\n badge: pBadge,\n } = (block as any).props;\n\n const badgeHtml = pBadge\n ? `<span style=\"position: absolute; top: -0.75rem; right: 1rem; background-color: var(--sg-primary); color: #fff; padding: 0.25rem 0.75rem; border-radius: 9999px; font-size: 0.75rem;\">${escapeHtml(pBadge)}</span>`\n : \"\";\n const featuresHtml = features\n .map(\n (f: string) =>\n `<li style=\"padding: 0.5rem 0; display: flex; align-items: center; gap: 0.5rem;\"><span style=\"color: var(--sg-success);\">\\u2713</span>${escapeHtml(f)}</li>`,\n )\n .join(\"\");\n const buttonStyle = highlighted\n ? \"background-color: var(--sg-primary); color: var(--sg-primary-text); border: none;\"\n : \"background-color: transparent; color: var(--sg-primary); border: 1px solid var(--sg-primary);\";\n return `<div ${dataBlockIdAttr(block.id)} style=\"background-color: var(--sg-bg); border-radius: 0.75rem; padding: 2rem; box-shadow: ${highlighted ? \"var(--sg-shadow-strong)\" : \"var(--sg-card-shadow)\"}; border: ${highlighted ? \"2px solid var(--sg-primary)\" : \"1px solid var(--sg-border)\"}; position: relative;\">${badgeHtml}<h3 style=\"font-size: 1.25rem; font-weight: 600; margin-bottom: 0.5rem;\">${escapeHtml(name)}</h3>${desc ? `<p style=\"color: var(--sg-muted-text); margin-bottom: 1rem;\">${escapeHtml(desc)}</p>` : \"\"}<div style=\"margin-bottom: 1.5rem;\"><span style=\"font-size: 2.5rem; font-weight: 700;\">${escapeHtml(price)}</span>${period ? `<span style=\"color: var(--sg-muted-text);\">${escapeHtml(period)}</span>` : \"\"}</div><ul style=\"list-style: none; padding: 0; margin-bottom: 1.5rem;\">${featuresHtml}</ul>${buttonText ? `<button style=\"width: 100%; padding: 0.625rem 1.25rem; ${buttonStyle} border-radius: var(--sg-button-radius); font-weight: 500; cursor: pointer;\">${escapeHtml(buttonText)}</button>` : \"\"}</div>`;\n}\n\nexport function exportPricing(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n renderChild?: (block: Block, _depth: number, basePath?: string, theme?: ThemeTokens) => string,\n): string {\n const { title, subtitle, plans = [] } = (block as any).props;\n\n // Responsive grid: 1 col (mobile) → 2 cols (tablet) → N cols (desktop, max 4)\n const gridId = generateScopedId(block.id || \"\", \"pricing-grid\");\n const maxCols = Math.min(plans.length, 4);\n const responsiveConfig = resolveResponsiveColumns({ lg: maxCols }, 1, 2, maxCols);\n const { inlineStyles, mediaQueries } = generateResponsiveGridStyles(gridId, responsiveConfig, \"2rem\", \"align-items: start;\");\n\n const headerHtml =\n title || subtitle\n ? `<div style=\"text-align: center; margin-bottom: 3rem;\">${title ? `<h2 style=\"font-size: var(--sg-heading-h2); margin-bottom: 0.5rem;\">${escapeHtml(title)}</h2>` : \"\"}${subtitle ? `<p style=\"color: var(--sg-muted-text); font-size: 1.125rem;\">${escapeHtml(subtitle)}</p>` : \"\"}</div>`\n : \"\";\n\n if (!renderChild) {\n throw new Error(\"exportPricing requires renderChild function\");\n }\n\n const plansHtml = plans\n .map((p: any) =>\n renderChild(\n { id: `${block.id}-plan`, type: \"pricingCard\", props: p } as Block,\n depth + 1,\n basePath,\n theme,\n ),\n )\n .join(\"\");\n\n return `<style>${mediaQueries}</style><section ${blockIdAttr(block.id)} ${dataBlockIdAttr(block.id)} style=\"padding: 4rem 0; background-color: var(--sg-bg);\"><div style=\"max-width: 1200px; margin: 0 auto; padding: 0 1rem;\">${headerHtml}<div id=\"${gridId}\" style=\"${inlineStyles}\">${plansHtml}</div></div></section>`;\n}\n\nexport function exportTestimonial(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const {\n quote,\n authorName,\n authorRole,\n authorCompany,\n authorAvatar,\n rating,\n } = (block as any).props;\n\n const ratingHtml = rating\n ? `<div style=\"margin-bottom: 1rem; color: #fbbf24;\">${\"\\u2605\".repeat(rating)}</div>`\n : \"\";\n const avatarHtml = authorAvatar\n ? `<img src=\"${escapeHtml(authorAvatar)}\" alt=\"${escapeHtml(authorName)}\" style=\"width: 3rem; height: 3rem; border-radius: 50%; object-fit: cover;\" />`\n : `<div style=\"width: 3rem; height: 3rem; border-radius: 50%; background-color: var(--sg-primary); color: #fff; display: flex; align-items: center; justify-content: center; font-weight: 600;\">${\n authorName\n ? authorName\n .split(\" \")\n .map((n: string) => n[0])\n .join(\"\")\n .toUpperCase()\n .slice(0, 2)\n : \"?\"\n }</div>`;\n return `<div ${dataBlockIdAttr(block.id)} style=\"background-color: var(--sg-surface); border-radius: var(--sg-card-radius); padding: 2rem;\">${ratingHtml}<blockquote style=\"font-size: 1rem; margin-bottom: 1.5rem; font-style: italic;\">\"${escapeHtml(quote)}\"</blockquote><div style=\"display: flex; align-items: center; gap: 1rem;\">${avatarHtml}<div><div style=\"font-weight: 600;\">${escapeHtml(authorName)}</div>${authorRole || authorCompany ? `<div style=\"color: var(--sg-muted-text); font-size: 0.875rem;\">${escapeHtml(authorRole || \"\")}${authorRole && authorCompany ? \", \" : \"\"}${escapeHtml(authorCompany || \"\")}</div>` : \"\"}</div></div></div>`;\n}\n\nexport function exportTestimonialGrid(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n renderChild?: (block: Block, _depth: number, basePath?: string, theme?: ThemeTokens) => string,\n): string {\n const {\n title,\n subtitle,\n columns = 3,\n testimonials = [],\n } = (block as any).props;\n\n // Responsive grid: 1 col (mobile) → 2 cols (tablet) → N cols (desktop)\n const gridId = generateScopedId(block.id || \"\", \"testimonial-grid\");\n const responsiveConfig = resolveResponsiveColumns(columns, 1, 2, columns);\n const { inlineStyles, mediaQueries } = generateResponsiveGridStyles(gridId, responsiveConfig, \"2rem\");\n\n const headerHtml =\n title || subtitle\n ? `<div style=\"text-align: center; margin-bottom: 3rem;\">${title ? `<h2 style=\"font-size: var(--sg-heading-h2); margin-bottom: 0.5rem;\">${escapeHtml(title)}</h2>` : \"\"}${subtitle ? `<p style=\"color: var(--sg-muted-text); font-size: 1.125rem;\">${escapeHtml(subtitle)}</p>` : \"\"}</div>`\n : \"\";\n\n if (!renderChild) {\n throw new Error(\"exportTestimonialGrid requires renderChild function\");\n }\n\n const testimonialsHtml = testimonials\n .map((t: any) =>\n renderChild(\n { id: `${block.id}-t`, type: \"testimonial\", props: t } as Block,\n depth + 1,\n basePath,\n theme,\n ),\n )\n .join(\"\");\n\n return `<style>${mediaQueries}</style><section ${blockIdAttr(block.id)} ${dataBlockIdAttr(block.id)} style=\"padding: 4rem 0; background-color: var(--sg-bg);\"><div style=\"max-width: 1200px; margin: 0 auto; padding: 0 1rem;\">${headerHtml}<div id=\"${gridId}\" style=\"${inlineStyles}\">${testimonialsHtml}</div></div></section>`;\n}\n\nexport function exportFaqItem(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const { question, answer } = (block as any).props;\n return `<details ${dataBlockIdAttr(block.id)} style=\"border-bottom: 1px solid var(--sg-border); padding: 1rem 0;\"><summary style=\"font-weight: 600; cursor: pointer; display: flex; justify-content: space-between; align-items: center;\">${escapeHtml(question)}<span>+</span></summary><p style=\"margin-top: 1rem; color: var(--sg-muted-text);\">${escapeHtml(answer)}</p></details>`;\n}\n\nexport function exportFaq(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n renderChild?: (block: Block, _depth: number, basePath?: string, theme?: ThemeTokens) => string,\n): string {\n const { title, subtitle, items = [] } = (block as any).props;\n\n const headerHtml =\n title || subtitle\n ? `<div style=\"text-align: center; margin-bottom: 3rem;\">${title ? `<h2 style=\"font-size: var(--sg-heading-h2); margin-bottom: 0.5rem;\">${escapeHtml(title)}</h2>` : \"\"}${subtitle ? `<p style=\"color: var(--sg-muted-text); font-size: 1.125rem;\">${escapeHtml(subtitle)}</p>` : \"\"}</div>`\n : \"\";\n\n if (!renderChild) {\n throw new Error(\"exportFaq requires renderChild function\");\n }\n\n const itemsHtml = items\n .map((i: any) =>\n renderChild(\n { id: `${block.id}-faq`, type: \"faqItem\", props: i } as Block,\n depth + 1,\n basePath,\n theme,\n ),\n )\n .join(\"\");\n\n return `<section ${blockIdAttr(block.id)} ${dataBlockIdAttr(block.id)} style=\"padding: 4rem 0; background-color: var(--sg-bg);\"><div style=\"max-width: 800px; margin: 0 auto; padding: 0 1rem;\">${headerHtml}<div>${itemsHtml}</div></div></section>`;\n}\n\nexport function exportStats(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const { title, subtitle, items = [] } = (block as any).props;\n\n // Responsive grid: 1 col (mobile) → 2 cols (tablet) → N cols (desktop)\n const gridId = generateScopedId(block.id || \"\", \"stats-grid\");\n const responsiveConfig = resolveResponsiveColumns({ lg: items.length }, 1, 2, items.length);\n const { inlineStyles, mediaQueries } = generateResponsiveGridStyles(gridId, responsiveConfig, \"2rem\", \"text-align: center;\");\n\n const headerHtml =\n title || subtitle\n ? `<div style=\"text-align: center; margin-bottom: 3rem;\">${title ? `<h2 style=\"font-size: var(--sg-heading-h2); margin-bottom: 0.5rem;\">${escapeHtml(title)}</h2>` : \"\"}${subtitle ? `<p style=\"color: var(--sg-muted-text); font-size: 1.125rem;\">${escapeHtml(subtitle)}</p>` : \"\"}</div>`\n : \"\";\n\n const itemsHtml = items\n .map(\n (i: any) =>\n `<div style=\"text-align: center;\"><div style=\"font-size: 3rem; font-weight: 700; color: var(--sg-primary);\">${escapeHtml(i.prefix || \"\")}${escapeHtml(i.value)}${escapeHtml(i.suffix || \"\")}</div><div style=\"color: var(--sg-muted-text);\">${escapeHtml(i.label)}</div></div>`,\n )\n .join(\"\");\n\n return `<style>${mediaQueries}</style><section ${blockIdAttr(block.id)} ${dataBlockIdAttr(block.id)} style=\"padding: 4rem 0; background-color: var(--sg-surface);\"><div style=\"max-width: 1200px; margin: 0 auto; padding: 0 1rem;\">${headerHtml}<div id=\"${gridId}\" style=\"${inlineStyles}\">${itemsHtml}</div></div></section>`;\n}\n\nexport function exportStatItem(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const { value, label, prefix, suffix } = (block as any).props;\n return `<div ${dataBlockIdAttr(block.id)} style=\"text-align: center;\"><div style=\"font-size: 2.5rem; font-weight: 700; color: var(--sg-primary);\">${escapeHtml(prefix || \"\")}${escapeHtml(value)}${escapeHtml(suffix || \"\")}</div><div style=\"color: var(--sg-muted-text);\">${escapeHtml(label)}</div></div>`;\n}\n\nexport function exportLogoCloud(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const { title, logos = [], grayscale } = (block as any).props;\n\n const titleHtml = title\n ? `<p style=\"color: var(--sg-muted-text); margin-bottom: 2rem;\">${escapeHtml(title)}</p>`\n : \"\";\n\n const logosHtml = logos\n .map(\n (l: any) =>\n `<img src=\"${escapeHtml(l.src)}\" alt=\"${escapeHtml(l.alt)}\" style=\"height: 2rem; object-fit: contain; ${grayscale ? \"filter: grayscale(100%); opacity: 0.6;\" : \"\"}\" />`,\n )\n .join(\"\");\n\n return `<section ${blockIdAttr(block.id)} ${dataBlockIdAttr(block.id)} style=\"padding: 2rem 0; background-color: var(--sg-bg);\"><div style=\"max-width: 1200px; margin: 0 auto; padding: 0 1rem; text-align: center;\">${titleHtml}<div style=\"display: flex; justify-content: center; align-items: center; gap: 3rem; flex-wrap: wrap;\">${logosHtml}</div></div></section>`;\n}\n\nexport function exportSocialLinks(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const {\n links = [],\n size = \"md\",\n variant = \"default\",\n } = (block as any).props;\n\n const sizeMap: Record<string, string> = {\n sm: \"1.25rem\",\n md: \"1.5rem\",\n lg: \"2rem\",\n };\n\n const iconSize = sizeMap[size] || sizeMap.md;\n\n const linksHtml = links\n .map(\n (l: any) =>\n `<a href=\"${escapeHtml(l.url)}\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"display: flex; align-items: center; justify-content: center; width: ${variant === \"filled\" ? `calc(${iconSize} + 0.75rem)` : iconSize}; height: ${variant === \"filled\" ? `calc(${iconSize} + 0.75rem)` : iconSize}; background-color: ${variant === \"filled\" ? \"var(--sg-surface)\" : \"transparent\"}; border-radius: ${variant === \"filled\" ? \"50%\" : \"0\"}; color: var(--sg-muted-text); text-decoration: none;\">[${escapeHtml(l.platform)}]</a>`,\n )\n .join(\"\");\n\n return `<div ${dataBlockIdAttr(block.id)} style=\"display: flex; gap: 1rem; align-items: center;\">${linksHtml}</div>`;\n}\n"],"names":["exportFeature","block","depth","basePath","theme","icon","title","description","iconHtml","dataBlockIdAttr","escapeHtml","exportFeatureGrid","renderChild","subtitle","columns","variant","features","gridId","generateScopedId","responsiveConfig","resolveResponsiveColumns","inlineStyles","mediaQueries","generateResponsiveGridStyles","isImageCards","headerHtml","featuresHtml","f","imgBlock","iconBlock","linkBlock","innerPadding","blockIdAttr","exportCta","ctaDesc","primaryButton","secondaryButton","buttonSize","buttonHoverEffect","buttonHoverIntensity","buttonHoverOverlay","buttonHoverIconName","sizeStyles","btnSize","ctaId","scope","isGradient","primaryColor","primaryText","primaryBtnBg","primaryBtnText","secondaryBtnBg","secondaryBtnText","secondaryBtnBorder","buttonsCss","primaryHoverResult","generateButtonHoverStyles","secondaryHoverResult","getButtonHoverKeyframes","generateButtonOverlayCSS","bgStyle","textColor","mutedColor","ctaPrimaryHref","resolveHref","ctaSecondaryHref","primaryBtnStyle","secondaryBtnStyle","primaryBtnHtml","linkTargetAttr","secondaryBtnHtml","exportPricingCard","name","price","period","desc","buttonText","highlighted","pBadge","badgeHtml","buttonStyle","exportPricing","plans","maxCols","plansHtml","p","exportTestimonial","quote","authorName","authorRole","authorCompany","authorAvatar","rating","ratingHtml","avatarHtml","n","exportTestimonialGrid","testimonials","testimonialsHtml","t","exportFaqItem","question","answer","exportFaq","items","itemsHtml","i","exportStats","exportStatItem","value","label","prefix","suffix","exportLogoCloud","logos","grayscale","titleHtml","logosHtml","l","exportSocialLinks","links","size","sizeMap","iconSize","linksHtml"],"mappings":"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"}
1
+ {"version":3,"file":"MarketingExporters.js","sources":["../../../../../src/engine/export/exporters/sections/MarketingExporters.ts"],"sourcesContent":["/**\n * Marketing Sections Exporters\n * Feature, FeatureGrid, Pricing, Testimonials, FAQ, CTA, Stats, Logo Cloud, etc.\n * Mobile-first responsive grids with media queries\n */\n\nimport { Block } from \"../../../schema/siteDocument\";\nimport { ThemeTokens } from \"../../../schema/themeTokens\";\nimport { dataBlockIdAttr, blockIdAttr, escapeHtml, resolveHref, linkTargetAttr } from \"../../shared/htmlHelpers\";\nimport { generateScopedId } from \"../../shared/idGenerator\";\nimport { resolveResponsiveColumns, generateResponsiveGridStyles } from \"../../shared/responsiveGridHelper\";\nimport {\n generateButtonHoverStyles,\n generateButtonOverlayCSS,\n getButtonHoverKeyframes,\n type ButtonHoverEffect,\n type ButtonHoverOverlay,\n} from \"../../../shared/hoverEffects\";\n\nexport function exportFeature(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const { icon, title, description } = (block as any).props;\n const iconHtml = icon\n ? `<div style=\"width: 3rem; height: 3rem; background-color: var(--sg-primary); border-radius: 0.75rem; display: flex; align-items: center; justify-content: center; margin: 0 auto 1rem; color: #fff;\">[★]</div>`\n : \"\";\n return `<div ${dataBlockIdAttr(block.id)} data-block-group=\"Conteúdo\" style=\"padding: 1.5rem; text-align: center;\">${iconHtml}<h3 style=\"font-size: 1.25rem; font-weight: 600; margin-bottom: 0.5rem;\">${escapeHtml(title)}</h3><p style=\"color: var(--sg-muted-text); font-size: 0.875rem;\">${escapeHtml(description)}</p></div>`;\n}\n\nexport function exportFeatureGrid(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n renderChild?: (block: Block, _depth: number, basePath?: string, theme?: ThemeTokens) => string,\n): string {\n const {\n title,\n subtitle,\n columns = 3,\n variant = \"default\",\n features = [],\n } = (block as any).props;\n\n // Responsive grid: 1 col (mobile) → 2 cols (tablet) → N cols (desktop)\n const gridId = generateScopedId(block.id || \"\", \"feature-grid\");\n const responsiveConfig = resolveResponsiveColumns(columns, 1, 2, columns);\n const { inlineStyles, mediaQueries } = generateResponsiveGridStyles(gridId, responsiveConfig, \"2rem\");\n\n const isImageCards = variant === \"image-cards\";\n const headerHtml =\n title || subtitle\n ? `<div data-block-group=\"Conteúdo\" style=\"text-align: center; margin-bottom: 3rem;\">${title ? `<h2 style=\"font-size: var(--sg-heading-h2); margin-bottom: 0.5rem;\">${escapeHtml(title)}</h2>` : \"\"}${subtitle ? `<p style=\"color: var(--sg-muted-text); font-size: 1.125rem;\">${escapeHtml(subtitle)}</p>` : \"\"}</div>`\n : \"\";\n\n const featuresHtml = features\n .map((f: any) => {\n const imgBlock =\n isImageCards && f.image\n ? `<div style=\"width: 100%; height: 200px; background-image: url(${escapeHtml(f.image)}); background-size: cover; background-position: center;\"></div>`\n : \"\";\n const iconBlock =\n !isImageCards && f.icon\n ? `<div style=\"width: 3rem; height: 3rem; background-color: var(--sg-primary); border-radius: 0.75rem; display: flex; align-items: center; justify-content: center; margin-bottom: 1rem; color: #fff;\">[★]</div>`\n : \"\";\n const linkBlock = f.link\n ? `<a href=\"${escapeHtml(f.link.href || \"#\")}\" style=\"display: inline-block; margin-top: 0.75rem; color: var(--sg-primary); font-weight: 500; text-decoration: none; border: 1px solid var(--sg-primary); padding: 0.5rem 1rem; border-radius: var(--sg-button-radius);\">${escapeHtml(f.link.text)}</a>`\n : \"\";\n const innerPadding = isImageCards && f.image ? \"1.5rem\" : \"2rem\";\n return `<div style=\"background-color: var(--sg-bg); border-radius: 0.75rem; padding: ${isImageCards && f.image ? 0 : \"2rem\"}; box-shadow: var(--sg-card-shadow); overflow: hidden;\">${imgBlock}<div style=\"padding: ${innerPadding};\">${iconBlock}<h3 style=\"font-size: 1.25rem; font-weight: 600; margin-bottom: 0.5rem;\">${escapeHtml(f.title)}</h3><p style=\"color: var(--sg-muted-text);\">${escapeHtml(f.description)}</p>${linkBlock}</div></div>`;\n })\n .join(\"\");\n\n return `<style>${mediaQueries}</style><section ${blockIdAttr(block.id)} ${dataBlockIdAttr(block.id)} style=\"padding: 4rem 0; background-color: var(--sg-surface);\"><div style=\"max-width: 1200px; margin: 0 auto; padding: 0 1rem;\">${headerHtml}<div data-block-group=\"Layout\" id=\"${gridId}\" style=\"${inlineStyles}\">${featuresHtml}</div></div></section>`;\n}\n\nexport function exportCta(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const {\n title,\n description: ctaDesc,\n primaryButton,\n secondaryButton,\n variant = \"centered\",\n // Button size\n buttonSize = \"md\",\n // Button hover effects\n buttonHoverEffect = \"scale\",\n buttonHoverIntensity = 50,\n buttonHoverOverlay = \"none\",\n buttonHoverIconName = \"arrow-right\",\n } = (block as any).props;\n\n // Size-based styles\n const sizeStyles: Record<string, { padding: string; fontSize: string }> = {\n sm: { padding: \"0.5rem 1rem\", fontSize: \"0.875rem\" },\n md: { padding: \"0.75rem 1.5rem\", fontSize: \"1rem\" },\n lg: { padding: \"1rem 2rem\", fontSize: \"1.125rem\" },\n };\n const btnSize = sizeStyles[buttonSize] || sizeStyles.md;\n\n // Responsive buttons: column (mobile) → row (desktop)\n const ctaId = generateScopedId(block.id || \"\", \"cta-actions\");\n const scope = `[data-block-id=\"${block.id}\"]`;\n\n const isGradient = variant === \"gradient\";\n const primaryColor = theme?.colors?.primary || \"#3b82f6\";\n const primaryText = theme?.colors?.primaryText || \"#ffffff\";\n\n // Button colors depend on gradient variant\n const primaryBtnBg = isGradient ? \"#fff\" : primaryColor;\n const primaryBtnText = isGradient ? primaryColor : primaryText;\n const secondaryBtnBg = \"transparent\";\n const secondaryBtnText = isGradient ? \"#fff\" : primaryColor;\n const secondaryBtnBorder = isGradient ? \"#fff\" : primaryColor;\n\n let buttonsCss = `\n @media (max-width: 640px) {\n #${ctaId} {\n flex-direction: column !important;\n width: 100%;\n }\n #${ctaId} a {\n width: 100% !important;\n text-align: center;\n }\n }\n `;\n\n // Generate hover CSS\n if (buttonHoverEffect !== \"none\") {\n // Primary button hover\n const primaryHoverResult = generateButtonHoverStyles({\n effect: buttonHoverEffect as ButtonHoverEffect,\n intensity: buttonHoverIntensity,\n buttonColor: primaryBtnBg,\n buttonTextColor: primaryBtnText,\n variant: \"solid\",\n });\n\n // Secondary button hover\n const secondaryHoverResult = generateButtonHoverStyles({\n effect: buttonHoverEffect as ButtonHoverEffect,\n intensity: buttonHoverIntensity,\n buttonColor: secondaryBtnBorder,\n buttonTextColor: secondaryBtnText,\n variant: \"outline\",\n });\n\n // Base styles if needed\n if (primaryHoverResult.base) {\n buttonsCss += `\n ${scope} .sg-cta__btn--primary {\n ${primaryHoverResult.base}\n }\n `;\n }\n\n if (secondaryHoverResult.base) {\n buttonsCss += `\n ${scope} .sg-cta__btn--secondary {\n ${secondaryHoverResult.base}\n }\n `;\n }\n\n // Hover styles\n buttonsCss += `\n ${scope} .sg-cta__btn--primary:hover {\n ${primaryHoverResult.hover}\n }\n ${scope} .sg-cta__btn--secondary:hover {\n ${secondaryHoverResult.hover}\n }\n `;\n\n // Add keyframes for pulse animation\n buttonsCss += getButtonHoverKeyframes();\n }\n\n // Efeito overlay (adicional)\n if (buttonHoverOverlay && buttonHoverOverlay !== \"none\") {\n buttonsCss += generateButtonOverlayCSS(`${scope} .sg-cta__btn--primary`, {\n overlay: buttonHoverOverlay as ButtonHoverOverlay,\n primaryColor,\n iconName: buttonHoverIconName,\n textColor: primaryBtnText,\n });\n buttonsCss += generateButtonOverlayCSS(`${scope} .sg-cta__btn--secondary`, {\n overlay: buttonHoverOverlay as ButtonHoverOverlay,\n primaryColor,\n iconName: buttonHoverIconName,\n textColor: secondaryBtnText,\n });\n }\n\n const bgStyle = isGradient\n ? \"background: linear-gradient(135deg, var(--sg-primary), var(--sg-accent));\"\n : \"background-color: var(--sg-surface);\";\n const textColor = isGradient ? \"#fff\" : \"var(--sg-text)\";\n const mutedColor = isGradient\n ? \"rgba(255,255,255,0.9)\"\n : \"var(--sg-muted-text)\";\n const ctaPrimaryHref = primaryButton\n ? resolveHref(primaryButton.href || \"#\", basePath)\n : \"#\";\n const ctaSecondaryHref = secondaryButton\n ? resolveHref(secondaryButton.href || \"#\", basePath)\n : \"#\";\n\n const primaryBtnStyle = `padding: ${btnSize.padding}; font-size: ${btnSize.fontSize}; background-color: ${primaryBtnBg}; color: ${primaryBtnText}; border-radius: var(--sg-button-radius); text-decoration: none; font-weight: 500; display: inline-block; transition: all 0.2s ease; position: relative; overflow: hidden;`;\n const secondaryBtnStyle = `padding: ${btnSize.padding}; font-size: ${btnSize.fontSize}; background-color: ${secondaryBtnBg}; color: ${secondaryBtnText}; border: 2px solid ${secondaryBtnBorder}; border-radius: var(--sg-button-radius); text-decoration: none; font-weight: 500; display: inline-block; transition: all 0.2s ease; position: relative; overflow: hidden;`;\n\n const primaryBtnHtml = primaryButton\n ? `<a href=\"${escapeHtml(ctaPrimaryHref)}\"${linkTargetAttr(ctaPrimaryHref, basePath)} class=\"sg-cta__btn sg-cta__btn--primary\" style=\"${primaryBtnStyle}\">${escapeHtml(primaryButton.text)}</a>`\n : \"\";\n const secondaryBtnHtml = secondaryButton\n ? `<a href=\"${escapeHtml(ctaSecondaryHref)}\"${linkTargetAttr(ctaSecondaryHref, basePath)} class=\"sg-cta__btn sg-cta__btn--secondary\" style=\"${secondaryBtnStyle}\">${escapeHtml(secondaryButton.text)}</a>`\n : \"\";\n return `<style>${buttonsCss}</style><section ${blockIdAttr(block.id)} ${dataBlockIdAttr(block.id)} style=\"padding: 4rem 0; ${bgStyle} text-align: center;\"><div style=\"max-width: 800px; margin: 0 auto; padding: 0 1rem;\"><div data-block-group=\"Conteúdo\"><h2 style=\"font-size: var(--sg-heading-h2); margin-bottom: 1rem; color: ${textColor};\">${escapeHtml(title)}</h2>${ctaDesc ? `<p style=\"font-size: 1.125rem; margin-bottom: 2rem; color: ${mutedColor};\">${escapeHtml(ctaDesc)}</p>` : \"\"}</div><div data-block-group=\"Botoes\" id=\"${ctaId}\" style=\"display: flex; gap: 1rem; justify-content: center; flex-wrap: wrap;\">${primaryBtnHtml}${secondaryBtnHtml}</div></div></section>`;\n}\n\nexport function exportPricingCard(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const {\n name,\n price,\n period,\n description: desc,\n features = [],\n buttonText,\n highlighted,\n badge: pBadge,\n } = (block as any).props;\n\n const badgeHtml = pBadge\n ? `<span style=\"position: absolute; top: -0.75rem; right: 1rem; background-color: var(--sg-primary); color: #fff; padding: 0.25rem 0.75rem; border-radius: 9999px; font-size: 0.75rem;\">${escapeHtml(pBadge)}</span>`\n : \"\";\n const featuresHtml = features\n .map(\n (f: string) =>\n `<li style=\"padding: 0.5rem 0; display: flex; align-items: center; gap: 0.5rem;\"><span style=\"color: var(--sg-success);\">\\u2713</span>${escapeHtml(f)}</li>`,\n )\n .join(\"\");\n const buttonStyle = highlighted\n ? \"background-color: var(--sg-primary); color: var(--sg-primary-text); border: none;\"\n : \"background-color: transparent; color: var(--sg-primary); border: 1px solid var(--sg-primary);\";\n return `<div ${dataBlockIdAttr(block.id)} data-block-group=\"Conteúdo\" style=\"background-color: var(--sg-bg); border-radius: 0.75rem; padding: 2rem; box-shadow: ${highlighted ? \"var(--sg-shadow-strong)\" : \"var(--sg-card-shadow)\"}; border: ${highlighted ? \"2px solid var(--sg-primary)\" : \"1px solid var(--sg-border)\"}; position: relative;\">${badgeHtml}<h3 style=\"font-size: 1.25rem; font-weight: 600; margin-bottom: 0.5rem;\">${escapeHtml(name)}</h3>${desc ? `<p style=\"color: var(--sg-muted-text); margin-bottom: 1rem;\">${escapeHtml(desc)}</p>` : \"\"}<div style=\"margin-bottom: 1.5rem;\"><span style=\"font-size: 2.5rem; font-weight: 700;\">${escapeHtml(price)}</span>${period ? `<span style=\"color: var(--sg-muted-text);\">${escapeHtml(period)}</span>` : \"\"}</div><ul style=\"list-style: none; padding: 0; margin-bottom: 1.5rem;\">${featuresHtml}</ul>${buttonText ? `<button style=\"width: 100%; padding: 0.625rem 1.25rem; ${buttonStyle} border-radius: var(--sg-button-radius); font-weight: 500; cursor: pointer;\">${escapeHtml(buttonText)}</button>` : \"\"}</div>`;\n}\n\nexport function exportPricing(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n renderChild?: (block: Block, _depth: number, basePath?: string, theme?: ThemeTokens) => string,\n): string {\n const { title, subtitle, plans = [] } = (block as any).props;\n\n // Responsive grid: 1 col (mobile) → 2 cols (tablet) → N cols (desktop, max 4)\n const gridId = generateScopedId(block.id || \"\", \"pricing-grid\");\n const maxCols = Math.min(plans.length, 4);\n const responsiveConfig = resolveResponsiveColumns({ lg: maxCols }, 1, 2, maxCols);\n const { inlineStyles, mediaQueries } = generateResponsiveGridStyles(gridId, responsiveConfig, \"2rem\", \"align-items: start;\");\n\n const headerHtml =\n title || subtitle\n ? `<div data-block-group=\"Conteúdo\" style=\"text-align: center; margin-bottom: 3rem;\">${title ? `<h2 style=\"font-size: var(--sg-heading-h2); margin-bottom: 0.5rem;\">${escapeHtml(title)}</h2>` : \"\"}${subtitle ? `<p style=\"color: var(--sg-muted-text); font-size: 1.125rem;\">${escapeHtml(subtitle)}</p>` : \"\"}</div>`\n : \"\";\n\n if (!renderChild) {\n throw new Error(\"exportPricing requires renderChild function\");\n }\n\n const plansHtml = plans\n .map((p: any) =>\n renderChild(\n { id: `${block.id}-plan`, type: \"pricingCard\", props: p } as Block,\n depth + 1,\n basePath,\n theme,\n ),\n )\n .join(\"\");\n\n return `<style>${mediaQueries}</style><section ${blockIdAttr(block.id)} ${dataBlockIdAttr(block.id)} style=\"padding: 4rem 0; background-color: var(--sg-bg);\"><div style=\"max-width: 1200px; margin: 0 auto; padding: 0 1rem;\">${headerHtml}<div id=\"${gridId}\" style=\"${inlineStyles}\">${plansHtml}</div></div></section>`;\n}\n\nexport function exportTestimonial(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const {\n quote,\n authorName,\n authorRole,\n authorCompany,\n authorAvatar,\n rating,\n } = (block as any).props;\n\n const ratingHtml = rating\n ? `<div data-block-group=\"Estilo\" style=\"margin-bottom: 1rem; color: #fbbf24;\">${\"\\u2605\".repeat(rating)}</div>`\n : \"\";\n const avatarHtml = authorAvatar\n ? `<img src=\"${escapeHtml(authorAvatar)}\" alt=\"${escapeHtml(authorName)}\" style=\"width: 3rem; height: 3rem; border-radius: 50%; object-fit: cover;\" />`\n : `<div style=\"width: 3rem; height: 3rem; border-radius: 50%; background-color: var(--sg-primary); color: #fff; display: flex; align-items: center; justify-content: center; font-weight: 600;\">${\n authorName\n ? authorName\n .split(\" \")\n .map((n: string) => n[0])\n .join(\"\")\n .toUpperCase()\n .slice(0, 2)\n : \"?\"\n }</div>`;\n return `<div ${dataBlockIdAttr(block.id)} style=\"background-color: var(--sg-surface); border-radius: var(--sg-card-radius); padding: 2rem;\">${ratingHtml}<blockquote data-block-group=\"Conteúdo\" style=\"font-size: 1rem; margin-bottom: 1.5rem; font-style: italic;\">\"${escapeHtml(quote)}\"</blockquote><div data-block-group=\"Autor\" style=\"display: flex; align-items: center; gap: 1rem;\">${avatarHtml}<div><div style=\"font-weight: 600;\">${escapeHtml(authorName)}</div>${authorRole || authorCompany ? `<div style=\"color: var(--sg-muted-text); font-size: 0.875rem;\">${escapeHtml(authorRole || \"\")}${authorRole && authorCompany ? \", \" : \"\"}${escapeHtml(authorCompany || \"\")}</div>` : \"\"}</div></div></div>`;\n}\n\nexport function exportTestimonialGrid(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n renderChild?: (block: Block, _depth: number, basePath?: string, theme?: ThemeTokens) => string,\n): string {\n const {\n title,\n subtitle,\n columns = 3,\n testimonials = [],\n } = (block as any).props;\n\n // Responsive grid: 1 col (mobile) → 2 cols (tablet) → N cols (desktop)\n const gridId = generateScopedId(block.id || \"\", \"testimonial-grid\");\n const responsiveConfig = resolveResponsiveColumns(columns, 1, 2, columns);\n const { inlineStyles, mediaQueries } = generateResponsiveGridStyles(gridId, responsiveConfig, \"2rem\");\n\n const headerHtml =\n title || subtitle\n ? `<div data-block-group=\"Conteúdo\" style=\"text-align: center; margin-bottom: 3rem;\">${title ? `<h2 style=\"font-size: var(--sg-heading-h2); margin-bottom: 0.5rem;\">${escapeHtml(title)}</h2>` : \"\"}${subtitle ? `<p style=\"color: var(--sg-muted-text); font-size: 1.125rem;\">${escapeHtml(subtitle)}</p>` : \"\"}</div>`\n : \"\";\n\n if (!renderChild) {\n throw new Error(\"exportTestimonialGrid requires renderChild function\");\n }\n\n const testimonialsHtml = testimonials\n .map((t: any) =>\n renderChild(\n { id: `${block.id}-t`, type: \"testimonial\", props: t } as Block,\n depth + 1,\n basePath,\n theme,\n ),\n )\n .join(\"\");\n\n return `<style>${mediaQueries}</style><section ${blockIdAttr(block.id)} ${dataBlockIdAttr(block.id)} style=\"padding: 4rem 0; background-color: var(--sg-bg);\"><div style=\"max-width: 1200px; margin: 0 auto; padding: 0 1rem;\">${headerHtml}<div data-block-group=\"Layout\" id=\"${gridId}\" style=\"${inlineStyles}\">${testimonialsHtml}</div></div></section>`;\n}\n\nexport function exportFaqItem(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const { question, answer } = (block as any).props;\n return `<details ${dataBlockIdAttr(block.id)} data-block-group=\"Conteúdo\" style=\"border-bottom: 1px solid var(--sg-border); padding: 1rem 0;\"><summary style=\"font-weight: 600; cursor: pointer; display: flex; justify-content: space-between; align-items: center;\">${escapeHtml(question)}<span>+</span></summary><p style=\"margin-top: 1rem; color: var(--sg-muted-text);\">${escapeHtml(answer)}</p></details>`;\n}\n\nexport function exportFaq(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n renderChild?: (block: Block, _depth: number, basePath?: string, theme?: ThemeTokens) => string,\n): string {\n const { title, subtitle, items = [] } = (block as any).props;\n\n const headerHtml =\n title || subtitle\n ? `<div data-block-group=\"Conteúdo\" style=\"text-align: center; margin-bottom: 3rem;\">${title ? `<h2 style=\"font-size: var(--sg-heading-h2); margin-bottom: 0.5rem;\">${escapeHtml(title)}</h2>` : \"\"}${subtitle ? `<p style=\"color: var(--sg-muted-text); font-size: 1.125rem;\">${escapeHtml(subtitle)}</p>` : \"\"}</div>`\n : \"\";\n\n if (!renderChild) {\n throw new Error(\"exportFaq requires renderChild function\");\n }\n\n const itemsHtml = items\n .map((i: any) =>\n renderChild(\n { id: `${block.id}-faq`, type: \"faqItem\", props: i } as Block,\n depth + 1,\n basePath,\n theme,\n ),\n )\n .join(\"\");\n\n return `<section ${blockIdAttr(block.id)} ${dataBlockIdAttr(block.id)} style=\"padding: 4rem 0; background-color: var(--sg-bg);\"><div style=\"max-width: 800px; margin: 0 auto; padding: 0 1rem;\">${headerHtml}<div>${itemsHtml}</div></div></section>`;\n}\n\nexport function exportStats(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const { title, subtitle, items = [] } = (block as any).props;\n\n // Responsive grid: 1 col (mobile) → 2 cols (tablet) → N cols (desktop)\n const gridId = generateScopedId(block.id || \"\", \"stats-grid\");\n const responsiveConfig = resolveResponsiveColumns({ lg: items.length }, 1, 2, items.length);\n const { inlineStyles, mediaQueries } = generateResponsiveGridStyles(gridId, responsiveConfig, \"2rem\", \"text-align: center;\");\n\n const headerHtml =\n title || subtitle\n ? `<div style=\"text-align: center; margin-bottom: 3rem;\">${title ? `<h2 style=\"font-size: var(--sg-heading-h2); margin-bottom: 0.5rem;\">${escapeHtml(title)}</h2>` : \"\"}${subtitle ? `<p style=\"color: var(--sg-muted-text); font-size: 1.125rem;\">${escapeHtml(subtitle)}</p>` : \"\"}</div>`\n : \"\";\n\n const itemsHtml = items\n .map(\n (i: any) =>\n `<div style=\"text-align: center;\"><div style=\"font-size: 3rem; font-weight: 700; color: var(--sg-primary);\">${escapeHtml(i.prefix || \"\")}${escapeHtml(i.value)}${escapeHtml(i.suffix || \"\")}</div><div style=\"color: var(--sg-muted-text);\">${escapeHtml(i.label)}</div></div>`,\n )\n .join(\"\");\n\n return `<style>${mediaQueries}</style><section ${blockIdAttr(block.id)} ${dataBlockIdAttr(block.id)} style=\"padding: 4rem 0; background-color: var(--sg-surface);\"><div style=\"max-width: 1200px; margin: 0 auto; padding: 0 1rem;\">${headerHtml}<div id=\"${gridId}\" style=\"${inlineStyles}\">${itemsHtml}</div></div></section>`;\n}\n\nexport function exportStatItem(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const { value, label, prefix, suffix } = (block as any).props;\n return `<div ${dataBlockIdAttr(block.id)} style=\"text-align: center;\"><div style=\"font-size: 2.5rem; font-weight: 700; color: var(--sg-primary);\">${escapeHtml(prefix || \"\")}${escapeHtml(value)}${escapeHtml(suffix || \"\")}</div><div style=\"color: var(--sg-muted-text);\">${escapeHtml(label)}</div></div>`;\n}\n\nexport function exportLogoCloud(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const { title, logos = [], grayscale } = (block as any).props;\n\n const titleHtml = title\n ? `<p style=\"color: var(--sg-muted-text); margin-bottom: 2rem;\">${escapeHtml(title)}</p>`\n : \"\";\n\n const logosHtml = logos\n .map(\n (l: any) =>\n `<img src=\"${escapeHtml(l.src)}\" alt=\"${escapeHtml(l.alt)}\" style=\"height: 2rem; object-fit: contain; ${grayscale ? \"filter: grayscale(100%); opacity: 0.6;\" : \"\"}\" />`,\n )\n .join(\"\");\n\n return `<section ${blockIdAttr(block.id)} ${dataBlockIdAttr(block.id)} style=\"padding: 2rem 0; background-color: var(--sg-bg);\"><div style=\"max-width: 1200px; margin: 0 auto; padding: 0 1rem; text-align: center;\">${titleHtml}<div style=\"display: flex; justify-content: center; align-items: center; gap: 3rem; flex-wrap: wrap;\">${logosHtml}</div></div></section>`;\n}\n\nexport function exportSocialLinks(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const {\n links = [],\n size = \"md\",\n variant = \"default\",\n } = (block as any).props;\n\n const sizeMap: Record<string, string> = {\n sm: \"1.25rem\",\n md: \"1.5rem\",\n lg: \"2rem\",\n };\n\n const iconSize = sizeMap[size] || sizeMap.md;\n\n const linksHtml = links\n .map(\n (l: any) =>\n `<a href=\"${escapeHtml(l.url)}\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"display: flex; align-items: center; justify-content: center; width: ${variant === \"filled\" ? `calc(${iconSize} + 0.75rem)` : iconSize}; height: ${variant === \"filled\" ? `calc(${iconSize} + 0.75rem)` : iconSize}; background-color: ${variant === \"filled\" ? \"var(--sg-surface)\" : \"transparent\"}; border-radius: ${variant === \"filled\" ? \"50%\" : \"0\"}; color: var(--sg-muted-text); text-decoration: none;\">[${escapeHtml(l.platform)}]</a>`,\n )\n .join(\"\");\n\n return `<div ${dataBlockIdAttr(block.id)} style=\"display: flex; gap: 1rem; align-items: center;\">${linksHtml}</div>`;\n}\n"],"names":["exportFeature","block","depth","basePath","theme","icon","title","description","iconHtml","dataBlockIdAttr","escapeHtml","exportFeatureGrid","renderChild","subtitle","columns","variant","features","gridId","generateScopedId","responsiveConfig","resolveResponsiveColumns","inlineStyles","mediaQueries","generateResponsiveGridStyles","isImageCards","headerHtml","featuresHtml","f","imgBlock","iconBlock","linkBlock","innerPadding","blockIdAttr","exportCta","ctaDesc","primaryButton","secondaryButton","buttonSize","buttonHoverEffect","buttonHoverIntensity","buttonHoverOverlay","buttonHoverIconName","sizeStyles","btnSize","ctaId","scope","isGradient","primaryColor","primaryText","primaryBtnBg","primaryBtnText","secondaryBtnBg","secondaryBtnText","secondaryBtnBorder","buttonsCss","primaryHoverResult","generateButtonHoverStyles","secondaryHoverResult","getButtonHoverKeyframes","generateButtonOverlayCSS","bgStyle","textColor","mutedColor","ctaPrimaryHref","resolveHref","ctaSecondaryHref","primaryBtnStyle","secondaryBtnStyle","primaryBtnHtml","linkTargetAttr","secondaryBtnHtml","exportPricingCard","name","price","period","desc","buttonText","highlighted","pBadge","badgeHtml","buttonStyle","exportPricing","plans","maxCols","plansHtml","p","exportTestimonial","quote","authorName","authorRole","authorCompany","authorAvatar","rating","ratingHtml","avatarHtml","n","exportTestimonialGrid","testimonials","testimonialsHtml","t","exportFaqItem","question","answer","exportFaq","items","itemsHtml","i","exportStats","exportStatItem","value","label","prefix","suffix","exportLogoCloud","logos","grayscale","titleHtml","logosHtml","l","exportSocialLinks","links","size","sizeMap","iconSize","linksHtml"],"mappings":"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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":"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"}
1
+ {"version":3,"file":"NavbarExporter.js","sources":["../../../../../src/engine/export/exporters/sections/NavbarExporter.ts"],"sourcesContent":["/**\n * Navbar Section Exporter\n */\n\nimport { Block } from \"../../../schema/siteDocument\";\nimport { ThemeTokens } from \"../../../schema/themeTokens\";\nimport {\n resolveNavbarStyles,\n mergeStyles,\n applyOpacityToColor,\n} from \"../../styleResolver\";\nimport {\n dataBlockIdAttr,\n blockIdAttr,\n escapeHtml,\n resolveHref,\n linkTargetAttr,\n} from \"../../shared/htmlHelpers\";\n\nexport function exportNavbar(\n block: Block,\n depth: number,\n basePath?: string,\n theme?: ThemeTokens,\n): string {\n const {\n variation = \"navbar-moderno\",\n logo,\n logoText,\n links = [],\n ctaButton,\n sticky,\n floating = false,\n layout,\n logoHeight = 70,\n borderPosition = \"none\",\n borderWidth = 1,\n borderColor = \"#e5e7eb\",\n } = (block as any).props;\n\n // Use Style Resolver to get complete inline styles\n const resolvedStyles = resolveNavbarStyles(\n (block as any).props,\n block.id || \"\",\n theme,\n );\n\n // Classe CSS baseada na variação\n const variationClassMap: Record<string, string> = {\n \"navbar-simples\": \"sg-navbar--simples\",\n \"navbar-moderno\": \"sg-navbar--moderno\",\n \"navbar-glass\": \"sg-navbar--glass\",\n \"navbar-elegante\": \"sg-navbar--elegante\",\n \"navbar-pill\": \"sg-navbar--pill\",\n };\n const variationClass = variationClassMap[variation] || \"sg-navbar--moderno\";\n\n // Determine effective layout\n const effectiveLayout = layout || \"expanded\";\n const isCentered = effectiveLayout === \"centered\";\n const isCompact = layout === \"compact\";\n\n const navClasses = [\n \"sg-navbar\",\n variationClass,\n sticky ? \"sg-navbar--sticky\" : \"\",\n floating ? \"sg-navbar--floating\" : \"\",\n isCompact ? \"sg-navbar--compact\" : \"\",\n ]\n .filter(Boolean)\n .join(\" \");\n\n // Build nav style from resolved styles + layout modifiers\n // Note: floating mode already includes position: fixed in resolvedStyles.nav\n // Changed from sticky to fixed to avoid navbar occupying space\n const stickyStyle =\n sticky && !floating ? \"position: fixed; top: 0; left: 0; right: 0; width: 100%; z-index: 1000\" : \"\";\n // Borda baseada na posição selecionada\n const getBorderStyle = (): string => {\n if (borderPosition === \"none\") return \"\";\n const borderValue = `${borderWidth}px solid ${borderColor}`;\n\n switch (borderPosition) {\n case \"all\":\n return `border: ${borderValue}`;\n case \"top\":\n return `border-top: ${borderValue}`;\n case \"bottom\":\n return `border-bottom: ${borderValue}`;\n case \"left\":\n return `border-left: ${borderValue}`;\n case \"right\":\n return `border-right: ${borderValue}`;\n default:\n return \"\";\n }\n };\n const baseStyle = getBorderStyle();\n const paddingStyle = \"\";\n\n // Navbar flutuante: centralizado com margin auto e próximo ao topo\n const floatingCompactStyle = floating\n ? \"max-width: 1200px; width: calc(100% - 4rem); margin: 0.5rem auto 0; left: 0; right: 0;\"\n : \"\";\n\n // Merge all nav styles (resolvedStyles.nav contains bg, opacity, position for floating, border-radius, shadow)\n const navStyle = mergeStyles(\n resolvedStyles.nav,\n paddingStyle,\n baseStyle,\n stickyStyle,\n floatingCompactStyle,\n );\n\n const logoUrl = typeof logo === \"string\" ? logo : (logo?.src ?? \"\");\n const logoAlt =\n typeof logo === \"string\"\n ? logoText || \"Logo\"\n : (logo?.alt ?? logoText ?? \"Logo\");\n let logoHref = typeof logo === \"object\" && logo?.href ? logo.href : \"\";\n if (logoHref === \"/\" || logoHref === \"\") logoHref = basePath ?? \"/site\";\n\n // Brand with resolved styles\n let logoHtml =\n logoUrl\n ? `<img src=\"${escapeHtml(logoUrl)}\" alt=\"${escapeHtml(logoAlt)}\" style=\"height: ${logoHeight}px; max-height: ${logoHeight}px; object-fit: contain;\" class=\"sg-navbar__brand-img\" />`\n : `<div style=\"display: flex; align-items: center; justify-content: center; height: 40px; width: 100px; background-color: #e5e7eb; border: 2px solid #d1d5db; border-radius: 4px; font-size: 16px; font-weight: 600; color: #6b7280;\">Logo</div>`;\n if (logoHref && logoHtml) {\n const resolvedLogoHref = resolveHref(logoHref, basePath);\n const logoTargetAttr = linkTargetAttr(resolvedLogoHref, basePath);\n logoHtml = `<a href=\"${escapeHtml(resolvedLogoHref)}\"${logoTargetAttr} class=\"sg-navbar__brand-link\" style=\"display: flex; align-items: center;\">${logoHtml}</a>`;\n }\n\n // Extrair cores da navbar para usar no sidebar mobile\n const navbarBg = (block as any).props.bg || \"#ffffff\";\n const navbarOpacity = (block as any).props.opacity || 100;\n const sidebarBg = applyOpacityToColor(navbarBg, navbarOpacity);\n\n // Usar linkColor da paleta se disponível, caso contrário fallback para text\n const linkColor =\n (block as any).props.linkColor ||\n theme?.colors?.linkColor ||\n theme?.colors?.text ||\n \"#1f2937\";\n\n // Links with resolved styles (complete inline styling)\n const linksHtml = links\n .map((l: any) => {\n if (l.dropdown && Array.isArray(l.dropdown)) {\n // Link com dropdown\n const dropdownItemsHtml = l.dropdown\n .map((item: any) => {\n const itemResolved = resolveHref(item.href || \"#\", basePath);\n const itemTargetAttr = linkTargetAttr(itemResolved, basePath);\n return `<a href=\"${escapeHtml(itemResolved)}\"${itemTargetAttr} class=\"sg-navbar-dropdown__item\" style=\"${resolvedStyles.dropdownItem}\">${escapeHtml(item.text)}</a>`;\n })\n .join(\"\");\n\n return `\n <div class=\"sg-navbar__dropdown-wrapper\">\n <button class=\"sg-navbar__link sg-navbar__link--has-dropdown\" style=\"${resolvedStyles.link}\">\n ${escapeHtml(l.text)}\n <!-- Chevron adicionado via CSS ::after -->\n </button>\n <div class=\"sg-navbar-dropdown\" style=\"${resolvedStyles.dropdown}\">\n ${dropdownItemsHtml}\n </div>\n </div>\n `;\n }\n // Link normal sem dropdown\n const resolved = resolveHref(l.href || \"#\", basePath);\n const targetAttr = linkTargetAttr(resolved, basePath);\n return `<a href=\"${escapeHtml(resolved)}\"${targetAttr} class=\"sg-navbar__link\" style=\"${resolvedStyles.link}\">${escapeHtml(l.text)}</a>`;\n })\n .join(\"\");\n\n // CTA Button with resolved styles (complete inline styling)\n const ctaResolved = ctaButton\n ? resolveHref(ctaButton.href || \"#\", basePath)\n : \"#\";\n const ctaTargetAttr = ctaButton\n ? linkTargetAttr(ctaResolved, basePath)\n : \"\";\n const ctaBtnHtml = ctaButton\n ? `<a href=\"${escapeHtml(ctaResolved)}\"${ctaTargetAttr} class=\"sg-navbar__btn\" data-block-group=\"Botao CTA\" style=\"${resolvedStyles.button}\">${escapeHtml(ctaButton.text)}</a>`\n : \"\";\n\n // Container style baseado no layout\n // Nota: isCompact apenas reduz tamanhos, não altera o layout base\n const useGridLayout = isCentered;\n const containerStyle = useGridLayout\n ? `max-width: 1200px; margin: 0 auto; padding: 0 ${isCompact ? \"1rem\" : \"1.5rem\"}; display: grid; grid-template-columns: 1fr auto 1fr; align-items: center; gap: ${isCompact ? \"1rem\" : \"1.5rem\"};`\n : `width: 100%; max-width: 100%; padding: 0 ${floating ? \"2rem\" : (isCompact ? \"1rem\" : \"1.5rem\")}; display: flex; justify-content: space-between; align-items: center; gap: ${isCompact ? \"1.5rem\" : \"2rem\"};`;\n const menuStyle = `display: flex; align-items: center; gap: ${isCompact ? \"1rem\" : \"1.5rem\"}; flex-wrap: wrap;${isCentered ? \" justify-self: center;\" : \"\"}`;\n const brandWrapStyle = isCentered\n ? \"flex-shrink: 0; justify-self: start;\"\n : \"flex-shrink: 0;\";\n\n const menuHtml = `<div class=\"sg-navbar__menu\" data-block-group=\"Links\" style=\"${menuStyle}\">${linksHtml}${!isCentered ? ctaBtnHtml : \"\"}</div>`;\n const actionsHtml =\n isCentered && ctaButton\n ? `<div class=\"sg-navbar__actions\" style=\"flex-shrink: 0; justify-self: end;\">${ctaBtnHtml}</div>`\n : \"\";\n\n // Container HTML\n const containerHtml = `<div class=\"sg-navbar__container\" style=\"${containerStyle}\"><div class=\"sg-navbar__brand\" style=\"${brandWrapStyle}\">${logoHtml}</div>${menuHtml}${actionsHtml}</div>`;\n\n // Inject dynamic CSS styles (hover effects) if present\n const styleBlock = resolvedStyles.css ? `<style>${resolvedStyles.css}</style>` : \"\";\n\n // ========== MOBILE SIDEBAR COMPONENTS ==========\n\n // 1. Hamburger Button (visible only in mobile)\n const hamburgerHtml = `\n <button\n id=\"sg-navbar-hamburger-${block.id}\"\n class=\"sg-navbar__hamburger\"\n aria-label=\"Menu\"\n aria-expanded=\"false\"\n style=\"\n display: none;\n background: transparent;\n border: none;\n cursor: pointer;\n padding: 0.5rem;\n z-index: 1002;\n position: relative;\n color: ${linkColor};\n \"\n >\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <line x1=\"3\" y1=\"6\" x2=\"21\" y2=\"6\" class=\"sg-hamburger-line sg-hamburger-top\" style=\"transition: transform 0.3s ease, opacity 0.3s ease;\"/>\n <line x1=\"3\" y1=\"12\" x2=\"21\" y2=\"12\" class=\"sg-hamburger-line sg-hamburger-middle\" style=\"transition: transform 0.3s ease, opacity 0.3s ease;\"/>\n <line x1=\"3\" y1=\"18\" x2=\"21\" y2=\"18\" class=\"sg-hamburger-line sg-hamburger-bottom\" style=\"transition: transform 0.3s ease, opacity 0.3s ease;\"/>\n </svg>\n </button>\n `;\n\n // 2. Overlay (semi-transparent backdrop)\n const overlayHtml = `\n <div\n id=\"sg-navbar-overlay-${block.id}\"\n class=\"sg-navbar__overlay\"\n style=\"\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.5);\n opacity: 0;\n visibility: hidden;\n transition: opacity 0.3s ease, visibility 0.3s ease;\n z-index: 1000;\n \"\n ></div>\n `;\n\n // 3. Mobile links (stack vertical)\n const linksMobileHtml = links\n .map((l: any) => {\n if (l.dropdown && Array.isArray(l.dropdown)) {\n // Link com dropdown no mobile\n const dropdownItemsHtml = l.dropdown\n .map((item: any) => {\n const itemResolved = resolveHref(item.href || \"#\", basePath);\n const itemTargetAttr = linkTargetAttr(itemResolved, basePath);\n return `\n <a\n href=\"${escapeHtml(itemResolved)}\"${itemTargetAttr}\n class=\"sg-navbar__link-mobile sg-navbar__link-mobile--dropdown-item\"\n style=\"\n display: block;\n padding: 0.75rem 0 0.75rem 1.5rem;\n color: ${linkColor};\n text-decoration: none;\n font-weight: 400;\n font-size: 0.9rem;\n border-bottom: 1px solid rgba(0,0,0,0.05);\n transition: color 0.2s;\n \"\n >\n ${escapeHtml(item.text)}\n </a>\n `;\n })\n .join(\"\");\n\n return `\n <div class=\"sg-navbar__link-mobile sg-navbar__link-mobile--has-dropdown\" style=\"border-bottom: 1px solid rgba(0,0,0,0.05);\">\n <div style=\"display: block; padding: 1rem 0; color: ${linkColor}; font-weight: 600; font-size: 1rem;\">\n ${escapeHtml(l.text)}\n </div>\n ${dropdownItemsHtml}\n </div>\n `;\n }\n // Link normal sem dropdown\n const resolved = resolveHref(l.href || \"#\", basePath);\n const targetAttr = linkTargetAttr(resolved, basePath);\n return `\n <a\n href=\"${escapeHtml(resolved)}\"${targetAttr}\n class=\"sg-navbar__link-mobile\"\n style=\"\n display: block;\n padding: 1rem 0;\n color: ${linkColor};\n text-decoration: none;\n font-weight: 500;\n font-size: 1rem;\n border-bottom: 1px solid rgba(0,0,0,0.05);\n transition: color 0.2s;\n \"\n >\n ${escapeHtml(l.text)}\n </a>\n `;\n })\n .join(\"\");\n\n // 4. Sidebar container\n const sidebarHtml = `\n <div\n id=\"sg-navbar-sidebar-${block.id}\"\n class=\"sg-navbar__sidebar\"\n style=\"\n position: fixed;\n top: 0;\n right: -100%;\n width: 280px;\n max-width: 85vw;\n height: 100vh;\n background-color: ${sidebarBg};\n box-shadow: -4px 0 20px rgba(0, 0, 0, 0.15);\n transition: right 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n z-index: 1001;\n overflow-y: auto;\n padding: 4.5rem 0 2rem;\n \"\n >\n <button\n id=\"sg-navbar-close-${block.id}\"\n class=\"sg-navbar__close\"\n aria-label=\"Fechar menu\"\n style=\"\n position: absolute;\n top: 1rem;\n right: 1rem;\n background: transparent;\n border: none;\n cursor: pointer;\n padding: 0.5rem;\n color: ${linkColor};\n font-size: 2rem;\n line-height: 1;\n \"\n >\n ×\n </button>\n\n <div class=\"sg-navbar__menu-mobile\" style=\"\n display: flex;\n flex-direction: column;\n gap: 0;\n padding: 0 1.5rem;\n \">\n ${linksMobileHtml}\n ${\n ctaBtnHtml\n ? `<div style=\"margin-top: 1.5rem; padding-top: 1.5rem; border-top: 1px solid rgba(0,0,0,0.1);\">${ctaBtnHtml}</div>`\n : \"\"\n }\n </div>\n </div>\n `;\n\n // 5. Mobile CSS\n const mobileCss = `\n /* ===== MOBILE SIDEBAR STYLES ===== */\n\n /* Hamburger visible only in mobile */\n @media (max-width: 768px) {\n ${block.id ? `[data-block-id=\"${block.id}\"]` : \".sg-navbar\"} .sg-navbar__hamburger {\n display: block !important;\n }\n\n /* Desktop menu hidden in mobile */\n ${block.id ? `[data-block-id=\"${block.id}\"]` : \".sg-navbar\"} .sg-navbar__menu {\n display: none !important;\n }\n\n /* Navbar flutuante: ajuste responsivo mobile */\n ${block.id && floating ? `[data-block-id=\"${block.id}\"]` : \".sg-navbar--floating\"} {\n max-width: calc(100% - 2rem) !important;\n width: calc(100% - 2rem) !important;\n left: 0 !important;\n right: 0 !important;\n margin: 0.5rem auto 0 !important;\n }\n\n /* Hamburger animation to X */\n ${block.id ? `[data-block-id=\"${block.id}\"]` : \".sg-navbar\"} .sg-navbar__hamburger[aria-expanded=\"true\"] .sg-hamburger-top {\n transform: translateY(6px) rotate(45deg);\n }\n\n ${block.id ? `[data-block-id=\"${block.id}\"]` : \".sg-navbar\"} .sg-navbar__hamburger[aria-expanded=\"true\"] .sg-hamburger-middle {\n opacity: 0;\n }\n\n ${block.id ? `[data-block-id=\"${block.id}\"]` : \".sg-navbar\"} .sg-navbar__hamburger[aria-expanded=\"true\"] .sg-hamburger-bottom {\n transform: translateY(-6px) rotate(-45deg);\n }\n\n /* Sidebar open state */\n ${block.id ? `[data-block-id=\"${block.id}\"]` : \".sg-navbar\"} ~ .sg-navbar__sidebar.is-open {\n right: 0 !important;\n }\n\n /* Overlay visible */\n ${block.id ? `[data-block-id=\"${block.id}\"]` : \".sg-navbar\"} ~ .sg-navbar__overlay.is-visible {\n opacity: 1 !important;\n visibility: visible !important;\n }\n\n /* Link mobile hover/active */\n ${block.id ? `[data-block-id=\"${block.id}\"]` : \".sg-navbar\"} ~ .sg-navbar__sidebar .sg-navbar__link-mobile:active {\n color: ${theme?.colors?.primary || \"#3b82f6\"};\n background-color: ${theme?.colors?.primary || \"#3b82f6\"}10;\n }\n\n /* CTA button full width in sidebar */\n ${block.id ? `[data-block-id=\"${block.id}\"]` : \".sg-navbar\"} ~ .sg-navbar__sidebar .sg-navbar__btn {\n display: block;\n text-align: center;\n width: 100%;\n }\n }\n\n /* Desktop - hide mobile components */\n @media (min-width: 769px) {\n .sg-navbar__hamburger {\n display: none !important;\n }\n\n .sg-navbar__sidebar {\n display: none !important;\n }\n\n .sg-navbar__overlay {\n display: none !important;\n }\n }\n `;\n\n // 6. Mobile JavaScript\n const mobileScript = `\n<script>\n(function() {\n var navId = '${block.id}';\n var hamburger = document.getElementById('sg-navbar-hamburger-' + navId);\n var sidebar = document.getElementById('sg-navbar-sidebar-' + navId);\n var overlay = document.getElementById('sg-navbar-overlay-' + navId);\n var closeBtn = document.getElementById('sg-navbar-close-' + navId);\n\n var isOpen = false;\n\n function openSidebar() {\n isOpen = true;\n sidebar.classList.add('is-open');\n overlay.classList.add('is-visible');\n hamburger.setAttribute('aria-expanded', 'true');\n document.body.style.overflow = 'hidden';\n closeBtn.focus();\n }\n\n function closeSidebar() {\n isOpen = false;\n sidebar.classList.remove('is-open');\n overlay.classList.remove('is-visible');\n hamburger.setAttribute('aria-expanded', 'false');\n document.body.style.overflow = '';\n hamburger.focus();\n }\n\n function toggleSidebar() {\n if (isOpen) {\n closeSidebar();\n } else {\n openSidebar();\n }\n }\n\n hamburger.addEventListener('click', toggleSidebar);\n closeBtn.addEventListener('click', closeSidebar);\n overlay.addEventListener('click', closeSidebar);\n\n document.addEventListener('keydown', function(e) {\n if (e.key === 'Escape' && isOpen) {\n closeSidebar();\n }\n });\n\n sidebar.addEventListener('keydown', function(e) {\n var focusableElements = sidebar.querySelectorAll(\n 'button, a[href], [tabindex]:not([tabindex=\"-1\"])'\n );\n var firstElement = focusableElements[0];\n var lastElement = focusableElements[focusableElements.length - 1];\n\n if (e.key === 'Tab') {\n if (e.shiftKey && document.activeElement === firstElement) {\n e.preventDefault();\n lastElement.focus();\n } else if (!e.shiftKey && document.activeElement === lastElement) {\n e.preventDefault();\n firstElement.focus();\n }\n }\n });\n\n var resizeTimer;\n window.addEventListener('resize', function() {\n clearTimeout(resizeTimer);\n resizeTimer = setTimeout(function() {\n if (window.innerWidth > 768 && isOpen) {\n closeSidebar();\n }\n }, 250);\n });\n})();\n</script>\n `;\n\n // Update containerHtml to include hamburger\n const containerHtmlWithMobile = `\n <div class=\"sg-navbar__container\" style=\"${containerStyle}\">\n <div class=\"sg-navbar__brand\" data-block-group=\"Logo e Marca\" style=\"${brandWrapStyle}\">\n ${logoHtml}\n </div>\n ${menuHtml}\n ${actionsHtml}\n ${hamburgerHtml}\n </div>\n `;\n\n // Combine all CSS\n const allCss = [resolvedStyles.css, mobileCss]\n .filter(Boolean)\n .join(\"\\n\");\n const styleBlockFinal = allCss ? `<style>${allCss}</style>` : \"\";\n\n return `<nav ${blockIdAttr(block.id)} ${dataBlockIdAttr(block.id)} class=\"${escapeHtml(navClasses)}\" data-variation=\"${escapeHtml(variation)}\" style=\"${navStyle}\">${styleBlockFinal}${containerHtmlWithMobile}</nav>${overlayHtml}${sidebarHtml}${mobileScript}`;\n}\n"],"names":["exportNavbar","block","depth","basePath","theme","variation","logo","logoText","links","ctaButton","sticky","floating","layout","logoHeight","borderPosition","borderWidth","borderColor","resolvedStyles","resolveNavbarStyles","variationClass","isCentered","isCompact","navClasses","stickyStyle","baseStyle","borderValue","paddingStyle","floatingCompactStyle","navStyle","mergeStyles","logoUrl","logoAlt","logoHref","logoHtml","escapeHtml","resolvedLogoHref","resolveHref","logoTargetAttr","linkTargetAttr","navbarBg","navbarOpacity","sidebarBg","applyOpacityToColor","linkColor","linksHtml","l","dropdownItemsHtml","item","itemResolved","itemTargetAttr","resolved","targetAttr","ctaResolved","ctaTargetAttr","ctaBtnHtml","containerStyle","menuStyle","brandWrapStyle","menuHtml","actionsHtml","hamburgerHtml","overlayHtml","linksMobileHtml","sidebarHtml","mobileCss","mobileScript","containerHtmlWithMobile","allCss","styleBlockFinal","blockIdAttr","dataBlockIdAttr"],"mappings":";;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,+DAA+DpC,EAAe,MAAM,KAAKiB,EAAWzB,EAAU,IAAI,CAAC,SACvK,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,gEAAgEF,CAAS,KAAKZ,CAAS,GAAIxB,IAA0B,KAAbkC,CAAe,UAClIK,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,6EACgBE,CAAc;AAAA,UACjFxB,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 +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