@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":"heroVariations.js","sources":["../../../src/engine/presets/heroVariations.ts"],"sourcesContent":["/**\n * Presets de variações do bloco Hero\n * Imagens padrão são placeholders visíveis; o usuário pode trocar por upload ou URL.\n */\n\nimport type { HeroVariationId } from \"../schema/siteDocument\";\n\n/** URL de imagem placeholder que funciona no editor e no site (sem depender de /site-images/) */\nexport const PLACEHOLDER_IMAGE_URL =\n \"https://placehold.co/1200x800/e2e8f0/64748b?text=Imagem+Hero\";\n\nexport const HERO_IMAGE_NAMES = [\n \"20221121_00_ensino_ciencias_molecula.jpg\",\n \"escolaweb-capas-artigos-5-maneiras-de-engajar-os-alunos-nas-atividades-escolares-1.jpg\",\n \"metodo-tradicional-de-ensino-do-Brasil.jpg\",\n \"niveis-e-modalidades-de-ensino-da-Educacao-Basica-scaled.jpg\",\n] as const;\n\nexport interface HeroVariationPreset {\n id: HeroVariationId;\n name: string;\n defaultProps: {\n variation: HeroVariationId;\n variant: \"centered\" | \"split\" | \"image-bg\" | \"video-bg\";\n title: string;\n subtitle?: string;\n description?: string;\n primaryButton?: { text: string; href?: string };\n secondaryButton?: { text: string; href?: string };\n image?: string;\n badge?: string;\n align?: \"left\" | \"center\" | \"right\";\n minHeight?: string;\n overlay?: boolean;\n overlayColor?: string;\n background?: string;\n // Typography\n titleColor?: string;\n subtitleColor?: string;\n descriptionColor?: string;\n // Badge\n badgeColor?: string;\n badgeTextColor?: string;\n // Layout\n contentMaxWidth?: string;\n paddingY?: string;\n // Image\n imageRadius?: number;\n imageShadow?: \"none\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\n imagePosition?: \"left\" | \"right\";\n // Buttons\n buttonSize?: \"sm\" | \"md\" | \"lg\";\n primaryButtonVariant?: \"solid\" | \"outline\" | \"ghost\";\n primaryButtonColor?: string;\n primaryButtonTextColor?: string;\n primaryButtonRadius?: number;\n secondaryButtonVariant?: \"solid\" | \"outline\" | \"ghost\";\n secondaryButtonColor?: string;\n secondaryButtonTextColor?: string;\n secondaryButtonRadius?: number;\n // Decorative\n showWave?: boolean;\n waveColor?: string;\n };\n}\n\nexport const heroVariations: Record<HeroVariationId, HeroVariationPreset> = {\n // ============================================================================\n // HERO SPLIT - Layout dividido (conteúdo + imagem)\n // ============================================================================\n \"hero-split\": {\n id: \"hero-split\",\n name: \"Dividido\",\n defaultProps: {\n variation: \"hero-split\",\n variant: \"split\",\n title: \"Educação que transforma\",\n subtitle: \"Metodologias ativas e suporte dedicado\",\n description:\n \"Conteúdo alinhado à Base Nacional Comum Curricular, com foco em competências e habilidades para o mundo atual.\",\n primaryButton: { text: \"Conhecer cursos\", href: \"#courses\" },\n secondaryButton: { text: \"Fale conosco\", href: \"#contact\" },\n align: \"left\",\n minHeight: \"600px\",\n imageRadius: 16,\n imageShadow: \"lg\",\n imagePosition: \"right\",\n primaryButtonVariant: \"solid\",\n secondaryButtonVariant: \"outline\",\n primaryButtonRadius: 8,\n secondaryButtonRadius: 8,\n },\n },\n\n // ============================================================================\n // HERO PARALLAX - Efeito de parallax com imagem fixa\n // ============================================================================\n \"hero-parallax\": {\n id: \"hero-parallax\",\n name: \"Parallax\",\n defaultProps: {\n variation: \"hero-parallax\",\n variant: \"image-bg\",\n title: \"Ensino de qualidade para todos\",\n subtitle: \"Do tradicional ao contemporâneo\",\n description:\n \"Integramos as melhores práticas pedagógicas para formar cidadãos críticos e criativos.\",\n primaryButton: { text: \"Saiba mais\", href: \"#about\" },\n secondaryButton: { text: \"Matricule-se\", href: \"#enroll\" },\n overlay: true,\n overlayColor: \"linear-gradient(135deg, rgba(0,0,0,0.7) 0%, rgba(0,0,0,0.4) 100%)\",\n align: \"center\",\n minHeight: \"85vh\",\n titleColor: \"#ffffff\",\n subtitleColor: \"#f3f4f6\",\n descriptionColor: \"#e5e7eb\",\n primaryButtonVariant: \"solid\",\n secondaryButtonVariant: \"outline\",\n secondaryButtonColor: \"#ffffff\",\n secondaryButtonTextColor: \"#ffffff\",\n primaryButtonRadius: 8,\n secondaryButtonRadius: 8,\n },\n },\n\n // ============================================================================\n // HERO OVERLAY - Fullscreen com overlay escuro\n // ============================================================================\n \"hero-overlay\": {\n id: \"hero-overlay\",\n name: \"Fullscreen\",\n defaultProps: {\n variation: \"hero-overlay\",\n variant: \"image-bg\",\n title: \"Engaje seus alunos nas atividades escolares\",\n subtitle: \"5 maneiras comprovadas de aumentar a participação\",\n badge: \"Destaque\",\n primaryButton: { text: \"Ver artigos\", href: \"#blog\" },\n secondaryButton: { text: \"Aula grátis\", href: \"#trial\" },\n overlay: true,\n overlayColor: \"linear-gradient(180deg, rgba(0,0,0,0.6) 0%, rgba(0,0,0,0.8) 100%)\",\n align: \"center\",\n minHeight: \"100vh\",\n titleColor: \"#ffffff\",\n subtitleColor: \"#f3f4f6\",\n descriptionColor: \"#d1d5db\",\n badgeColor: \"#3b82f6\",\n badgeTextColor: \"#ffffff\",\n primaryButtonVariant: \"solid\",\n secondaryButtonVariant: \"ghost\",\n secondaryButtonTextColor: \"#ffffff\",\n primaryButtonRadius: 50,\n secondaryButtonRadius: 50,\n },\n },\n\n // ============================================================================\n // HERO GRADIENT - Fundo gradiente vibrante (SEM imagem)\n // ============================================================================\n \"hero-gradient\": {\n id: \"hero-gradient\",\n name: \"Gradiente\",\n defaultProps: {\n variation: \"hero-gradient\",\n variant: \"centered\",\n title: \"Transforme o futuro da educação\",\n subtitle: \"Plataforma completa para gestão escolar\",\n description:\n \"Simplifique processos, engaje alunos e pais, e tenha controle total da sua instituição com nossa solução integrada.\",\n primaryButton: { text: \"Começar grátis\", href: \"#trial\" },\n secondaryButton: { text: \"Ver demonstração\", href: \"#demo\" },\n badge: \"Novo\",\n align: \"center\",\n minHeight: \"90vh\",\n // Gradiente vibrante azul/roxo\n background: \"linear-gradient(135deg, #667eea 0%, #764ba2 50%, #f093fb 100%)\",\n titleColor: \"#ffffff\",\n subtitleColor: \"#f3f4f6\",\n descriptionColor: \"#e5e7eb\",\n badgeColor: \"rgba(255,255,255,0.2)\",\n badgeTextColor: \"#ffffff\",\n contentMaxWidth: \"800px\",\n // Botões brancos/transparentes para contraste\n primaryButtonVariant: \"solid\",\n primaryButtonColor: \"#ffffff\",\n primaryButtonTextColor: \"#667eea\",\n primaryButtonRadius: 50,\n secondaryButtonVariant: \"outline\",\n secondaryButtonColor: \"#ffffff\",\n secondaryButtonTextColor: \"#ffffff\",\n secondaryButtonRadius: 50,\n // Onda decorativa\n showWave: true,\n waveColor: \"rgba(255,255,255,0.1)\",\n },\n },\n\n // ============================================================================\n // HERO MINIMAL - Design limpo e minimalista\n // ============================================================================\n \"hero-minimal\": {\n id: \"hero-minimal\",\n name: \"Minimal\",\n defaultProps: {\n variation: \"hero-minimal\",\n variant: \"centered\",\n title: \"Educação simplificada\",\n subtitle: \"Menos complexidade, mais aprendizado\",\n description:\n \"Uma abordagem moderna e direta para o ensino de qualidade. Foco no que realmente importa.\",\n primaryButton: { text: \"Explorar\", href: \"#explore\" },\n align: \"center\",\n minHeight: \"70vh\",\n background: \"#fafafa\",\n titleColor: \"#111827\",\n subtitleColor: \"#4b5563\",\n descriptionColor: \"#6b7280\",\n contentMaxWidth: \"700px\",\n paddingY: \"120px\",\n // Botão único, estilo minimalista\n primaryButtonVariant: \"solid\",\n primaryButtonColor: \"#111827\",\n primaryButtonTextColor: \"#ffffff\",\n primaryButtonRadius: 4,\n buttonSize: \"lg\",\n },\n },\n\n // ============================================================================\n // HERO CARD - Conteúdo em card flutuante sobre imagem\n // ============================================================================\n \"hero-card\": {\n id: \"hero-card\",\n name: \"Card\",\n defaultProps: {\n variation: \"hero-card\",\n variant: \"image-bg\",\n title: \"Aprenda com os melhores\",\n subtitle: \"Professores qualificados e conteúdo atualizado\",\n description:\n \"Nossa equipe de educadores está pronta para guiar você em uma jornada de conhecimento transformadora.\",\n primaryButton: { text: \"Matricule-se\", href: \"#enroll\" },\n secondaryButton: { text: \"Conheça o time\", href: \"#team\" },\n badge: \"Matrículas Abertas\",\n overlay: true,\n overlayColor: \"rgba(0,0,0,0.3)\",\n align: \"left\",\n minHeight: \"70vh\",\n paddingY: \"6rem\",\n // Card styling (cores do card)\n background: \"#ffffff\",\n titleColor: \"#111827\",\n subtitleColor: \"#374151\",\n descriptionColor: \"#6b7280\",\n badgeColor: \"#10b981\",\n badgeTextColor: \"#ffffff\",\n contentMaxWidth: \"450px\",\n // Botões dentro do card\n primaryButtonVariant: \"solid\",\n primaryButtonRadius: 8,\n secondaryButtonVariant: \"ghost\",\n secondaryButtonRadius: 8,\n // Imagem\n imageRadius: 0,\n imageShadow: \"none\",\n },\n },\n};\n\nexport const heroVariationIds: HeroVariationId[] = [\n \"hero-split\",\n \"hero-parallax\",\n \"hero-overlay\",\n \"hero-gradient\",\n \"hero-minimal\",\n \"hero-card\",\n];\n\nexport function getHeroVariation(id: HeroVariationId): HeroVariationPreset {\n return heroVariations[id];\n}\n"],"names":["PLACEHOLDER_IMAGE_URL","HERO_IMAGE_NAMES","heroVariations","heroVariationIds","getHeroVariation","id"],"mappings":"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"}
1
+ {"version":3,"file":"heroVariations.js","sources":["../../../src/engine/presets/heroVariations.ts"],"sourcesContent":["/**\n * Presets de variações do bloco Hero\n * Imagens padrão são placeholders visíveis; o usuário pode trocar por upload ou URL.\n */\n\nimport type { HeroVariationId } from \"../schema/siteDocument\";\n\n/** URL de imagem placeholder que funciona no editor e no site (sem depender de /site-images/) */\nexport const PLACEHOLDER_IMAGE_URL =\n \"https://placehold.co/1200x800/e2e8f0/64748b?text=Imagem+Hero\";\n\n/** Imagens placeholder para o carrossel de hero */\nexport const CAROUSEL_PLACEHOLDER_IMAGES = [\n \"https://placehold.co/1920x1080/1e3a5f/ffffff?text=Slide+1\",\n \"https://placehold.co/1920x1080/2d5016/ffffff?text=Slide+2\",\n \"https://placehold.co/1920x1080/5a1a2e/ffffff?text=Slide+3\",\n];\n\nexport const HERO_IMAGE_NAMES = [\n \"20221121_00_ensino_ciencias_molecula.jpg\",\n \"escolaweb-capas-artigos-5-maneiras-de-engajar-os-alunos-nas-atividades-escolares-1.jpg\",\n \"metodo-tradicional-de-ensino-do-Brasil.jpg\",\n \"niveis-e-modalidades-de-ensino-da-Educacao-Basica-scaled.jpg\",\n] as const;\n\nexport interface HeroVariationPreset {\n id: HeroVariationId;\n name: string;\n defaultProps: {\n variation: HeroVariationId;\n variant: \"centered\" | \"split\" | \"image-bg\" | \"video-bg\";\n title: string;\n subtitle?: string;\n description?: string;\n primaryButton?: { text: string; href?: string };\n secondaryButton?: { text: string; href?: string };\n image?: string;\n badge?: string;\n align?: \"left\" | \"center\" | \"right\";\n minHeight?: string;\n overlay?: boolean;\n overlayColor?: string;\n background?: string;\n // Typography\n titleColor?: string;\n subtitleColor?: string;\n descriptionColor?: string;\n // Badge\n badgeColor?: string;\n badgeTextColor?: string;\n // Layout\n contentMaxWidth?: string;\n paddingY?: string;\n // Image\n imageRadius?: number;\n imageShadow?: \"none\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\n imagePosition?: \"left\" | \"right\";\n // Buttons\n buttonSize?: \"sm\" | \"md\" | \"lg\";\n primaryButtonVariant?: \"solid\" | \"outline\" | \"ghost\";\n primaryButtonColor?: string;\n primaryButtonTextColor?: string;\n primaryButtonRadius?: number;\n secondaryButtonVariant?: \"solid\" | \"outline\" | \"ghost\";\n secondaryButtonColor?: string;\n secondaryButtonTextColor?: string;\n secondaryButtonRadius?: number;\n // Decorative\n showWave?: boolean;\n waveColor?: string;\n // Carousel\n carouselImages?: string[];\n carouselInterval?: number;\n carouselTransition?: \"crossfade\" | \"slide\";\n };\n}\n\nexport const heroVariations: Record<HeroVariationId, HeroVariationPreset> = {\n // ============================================================================\n // HERO SPLIT - Layout dividido (conteúdo + imagem)\n // ============================================================================\n \"hero-split\": {\n id: \"hero-split\",\n name: \"Dividido\",\n defaultProps: {\n variation: \"hero-split\",\n variant: \"split\",\n title: \"Educação que transforma\",\n subtitle: \"Metodologias ativas e suporte dedicado\",\n description:\n \"Conteúdo alinhado à Base Nacional Comum Curricular, com foco em competências e habilidades para o mundo atual.\",\n primaryButton: { text: \"Conhecer cursos\", href: \"#courses\" },\n secondaryButton: { text: \"Fale conosco\", href: \"#contact\" },\n align: \"left\",\n minHeight: \"600px\",\n imageRadius: 16,\n imageShadow: \"lg\",\n imagePosition: \"right\",\n primaryButtonVariant: \"solid\",\n secondaryButtonVariant: \"outline\",\n primaryButtonRadius: 8,\n secondaryButtonRadius: 8,\n },\n },\n\n // ============================================================================\n // HERO PARALLAX - Efeito de parallax com imagem fixa\n // ============================================================================\n \"hero-parallax\": {\n id: \"hero-parallax\",\n name: \"Parallax\",\n defaultProps: {\n variation: \"hero-parallax\",\n variant: \"image-bg\",\n title: \"Ensino de qualidade para todos\",\n subtitle: \"Do tradicional ao contemporâneo\",\n description:\n \"Integramos as melhores práticas pedagógicas para formar cidadãos críticos e criativos.\",\n primaryButton: { text: \"Saiba mais\", href: \"#about\" },\n secondaryButton: { text: \"Matricule-se\", href: \"#enroll\" },\n overlay: true,\n overlayColor: \"linear-gradient(135deg, rgba(0,0,0,0.7) 0%, rgba(0,0,0,0.4) 100%)\",\n align: \"center\",\n minHeight: \"85vh\",\n titleColor: \"#ffffff\",\n subtitleColor: \"#f3f4f6\",\n descriptionColor: \"#e5e7eb\",\n primaryButtonVariant: \"solid\",\n secondaryButtonVariant: \"outline\",\n secondaryButtonColor: \"#ffffff\",\n secondaryButtonTextColor: \"#ffffff\",\n primaryButtonRadius: 8,\n secondaryButtonRadius: 8,\n },\n },\n\n // ============================================================================\n // HERO OVERLAY - Fullscreen com overlay escuro\n // ============================================================================\n \"hero-overlay\": {\n id: \"hero-overlay\",\n name: \"Fullscreen\",\n defaultProps: {\n variation: \"hero-overlay\",\n variant: \"image-bg\",\n title: \"Engaje seus alunos nas atividades escolares\",\n subtitle: \"5 maneiras comprovadas de aumentar a participação\",\n badge: \"Destaque\",\n primaryButton: { text: \"Ver artigos\", href: \"#blog\" },\n secondaryButton: { text: \"Aula grátis\", href: \"#trial\" },\n overlay: true,\n overlayColor: \"linear-gradient(180deg, rgba(0,0,0,0.6) 0%, rgba(0,0,0,0.8) 100%)\",\n align: \"center\",\n minHeight: \"100vh\",\n titleColor: \"#ffffff\",\n subtitleColor: \"#f3f4f6\",\n descriptionColor: \"#d1d5db\",\n badgeColor: \"#3b82f6\",\n badgeTextColor: \"#ffffff\",\n primaryButtonVariant: \"solid\",\n secondaryButtonVariant: \"ghost\",\n secondaryButtonTextColor: \"#ffffff\",\n primaryButtonRadius: 50,\n secondaryButtonRadius: 50,\n },\n },\n\n // ============================================================================\n // HERO GRADIENT - Fundo gradiente vibrante (SEM imagem)\n // ============================================================================\n \"hero-gradient\": {\n id: \"hero-gradient\",\n name: \"Gradiente\",\n defaultProps: {\n variation: \"hero-gradient\",\n variant: \"centered\",\n title: \"Transforme o futuro da educação\",\n subtitle: \"Plataforma completa para gestão escolar\",\n description:\n \"Simplifique processos, engaje alunos e pais, e tenha controle total da sua instituição com nossa solução integrada.\",\n primaryButton: { text: \"Começar grátis\", href: \"#trial\" },\n secondaryButton: { text: \"Ver demonstração\", href: \"#demo\" },\n badge: \"Novo\",\n align: \"center\",\n minHeight: \"90vh\",\n // Gradiente vibrante azul/roxo\n background: \"linear-gradient(135deg, #667eea 0%, #764ba2 50%, #f093fb 100%)\",\n titleColor: \"#ffffff\",\n subtitleColor: \"#f3f4f6\",\n descriptionColor: \"#e5e7eb\",\n badgeColor: \"rgba(255,255,255,0.2)\",\n badgeTextColor: \"#ffffff\",\n contentMaxWidth: \"800px\",\n // Botões brancos/transparentes para contraste\n primaryButtonVariant: \"solid\",\n primaryButtonColor: \"#ffffff\",\n primaryButtonTextColor: \"#667eea\",\n primaryButtonRadius: 50,\n secondaryButtonVariant: \"outline\",\n secondaryButtonColor: \"#ffffff\",\n secondaryButtonTextColor: \"#ffffff\",\n secondaryButtonRadius: 50,\n // Onda decorativa\n showWave: true,\n waveColor: \"rgba(255,255,255,0.1)\",\n },\n },\n\n // ============================================================================\n // HERO MINIMAL - Design limpo e minimalista\n // ============================================================================\n \"hero-minimal\": {\n id: \"hero-minimal\",\n name: \"Minimal\",\n defaultProps: {\n variation: \"hero-minimal\",\n variant: \"centered\",\n title: \"Educação simplificada\",\n subtitle: \"Menos complexidade, mais aprendizado\",\n description:\n \"Uma abordagem moderna e direta para o ensino de qualidade. Foco no que realmente importa.\",\n primaryButton: { text: \"Explorar\", href: \"#explore\" },\n align: \"center\",\n minHeight: \"70vh\",\n background: \"#fafafa\",\n titleColor: \"#111827\",\n subtitleColor: \"#4b5563\",\n descriptionColor: \"#6b7280\",\n contentMaxWidth: \"700px\",\n paddingY: \"120px\",\n // Botão único, estilo minimalista\n primaryButtonVariant: \"solid\",\n primaryButtonColor: \"#111827\",\n primaryButtonTextColor: \"#ffffff\",\n primaryButtonRadius: 4,\n buttonSize: \"lg\",\n },\n },\n\n // ============================================================================\n // HERO CARD - Conteúdo em card flutuante sobre imagem\n // ============================================================================\n \"hero-card\": {\n id: \"hero-card\",\n name: \"Card\",\n defaultProps: {\n variation: \"hero-card\",\n variant: \"image-bg\",\n title: \"Aprenda com os melhores\",\n subtitle: \"Professores qualificados e conteúdo atualizado\",\n description:\n \"Nossa equipe de educadores está pronta para guiar você em uma jornada de conhecimento transformadora.\",\n primaryButton: { text: \"Matricule-se\", href: \"#enroll\" },\n secondaryButton: { text: \"Conheça o time\", href: \"#team\" },\n badge: \"Matrículas Abertas\",\n overlay: true,\n overlayColor: \"rgba(0,0,0,0.3)\",\n align: \"left\",\n minHeight: \"70vh\",\n paddingY: \"6rem\",\n // Card styling (cores do card)\n background: \"#ffffff\",\n titleColor: \"#111827\",\n subtitleColor: \"#374151\",\n descriptionColor: \"#6b7280\",\n badgeColor: \"#10b981\",\n badgeTextColor: \"#ffffff\",\n contentMaxWidth: \"450px\",\n // Botões dentro do card\n primaryButtonVariant: \"solid\",\n primaryButtonRadius: 8,\n secondaryButtonVariant: \"ghost\",\n secondaryButtonRadius: 8,\n // Imagem\n imageRadius: 0,\n imageShadow: \"none\",\n },\n },\n\n // ============================================================================\n // HERO CAROUSEL - Carrossel de imagens de fundo com crossfade\n // ============================================================================\n \"hero-carousel\": {\n id: \"hero-carousel\",\n name: \"Carrossel\",\n defaultProps: {\n variation: \"hero-carousel\",\n variant: \"image-bg\",\n title: \"Descubra novas possibilidades\",\n subtitle: \"Uma jornada de aprendizado envolvente\",\n description:\n \"Explore nossos programas e descubra como podemos ajudar você a alcançar seus objetivos educacionais.\",\n primaryButton: { text: \"Explorar cursos\", href: \"#courses\" },\n secondaryButton: { text: \"Saiba mais\", href: \"#about\" },\n overlay: true,\n overlayColor: \"linear-gradient(180deg, rgba(0,0,0,0.5) 0%, rgba(0,0,0,0.7) 100%)\",\n align: \"center\",\n minHeight: \"90vh\",\n titleColor: \"#ffffff\",\n subtitleColor: \"#f3f4f6\",\n descriptionColor: \"#e5e7eb\",\n contentMaxWidth: \"800px\",\n primaryButtonVariant: \"solid\",\n primaryButtonRadius: 8,\n secondaryButtonVariant: \"outline\",\n secondaryButtonColor: \"#ffffff\",\n secondaryButtonTextColor: \"#ffffff\",\n secondaryButtonRadius: 8,\n // Carousel\n carouselImages: [\n \"https://placehold.co/1920x1080/1e3a5f/ffffff?text=Slide+1\",\n \"https://placehold.co/1920x1080/2d5016/ffffff?text=Slide+2\",\n \"https://placehold.co/1920x1080/5a1a2e/ffffff?text=Slide+3\",\n ],\n carouselInterval: 5,\n carouselTransition: \"crossfade\",\n },\n },\n};\n\nexport const heroVariationIds: HeroVariationId[] = [\n \"hero-split\",\n \"hero-parallax\",\n \"hero-overlay\",\n \"hero-gradient\",\n \"hero-minimal\",\n \"hero-card\",\n \"hero-carousel\",\n];\n\nexport function getHeroVariation(id: HeroVariationId): HeroVariationPreset {\n return heroVariations[id];\n}\n"],"names":["PLACEHOLDER_IMAGE_URL","CAROUSEL_PLACEHOLDER_IMAGES","HERO_IMAGE_NAMES","heroVariations","heroVariationIds","getHeroVariation","id"],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { default as React } from 'react';
2
+ import { SiteDocument } from '../schema/siteDocument';
3
+ export interface PreviewProps {
4
+ document: SiteDocument;
5
+ pageId?: string;
6
+ className?: string;
7
+ style?: React.CSSProperties;
8
+ onBlockClick?: (blockId: string, group?: string) => void;
9
+ selectedBlockId?: string | null;
10
+ /** Exibe hover e label de seleção nos blocos do preview */
11
+ showSelectionOverlay?: boolean;
12
+ /** Grupo focado para indicador visual no preview */
13
+ focusedGroup?: string | null;
14
+ }
15
+ /**
16
+ * Componente de preview usando iframe isolado
17
+ */
18
+ export declare function Preview({ document, pageId, className, style, onBlockClick, selectedBlockId, showSelectionOverlay, focusedGroup, }: PreviewProps): import("react/jsx-runtime").JSX.Element;
19
+ //# sourceMappingURL=Preview.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Preview.d.ts","sourceRoot":"","sources":["../../../src/engine/preview/Preview.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAA+C,MAAM,OAAO,CAAC;AACpE,OAAO,EAAE,YAAY,EAAS,MAAM,wBAAwB,CAAC;AAO7D,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,YAAY,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACzD,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,2DAA2D;IAC3D,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,oDAAoD;IACpD,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAwDD;;GAEG;AACH,wBAAgB,OAAO,CAAC,EACtB,QAAQ,EACR,MAAM,EACN,SAAS,EACT,KAAK,EACL,YAAY,EACZ,eAAe,EACf,oBAA4B,EAC5B,YAAmB,GACpB,EAAE,YAAY,2CAokBd"}
@@ -0,0 +1,418 @@
1
+ import { jsx as C, jsxs as W } from "react/jsx-runtime";
2
+ import { useRef as y, useState as j, useEffect as k, useMemo as F } from "react";
3
+ import { componentRegistry as X } from "../registry/registry.js";
4
+ import { exportPageToHtml as Y, exportBlockToHtml as K } from "../export/exportHtml.js";
5
+ import { detectChangedBlocks as Q } from "../../utils/changeDetector.js";
6
+ import { hashDocument as P } from "../../utils/documentHash.js";
7
+ import { logger as D } from "../../utils/logger.js";
8
+ function U(a, v) {
9
+ const s = (E) => {
10
+ for (const c of E) {
11
+ if (c.id === v) return c;
12
+ const i = c.props;
13
+ if (i?.children && Array.isArray(i.children)) {
14
+ const r = s(i.children);
15
+ if (r) return r;
16
+ }
17
+ if (c.type === "card") {
18
+ if (i.header && Array.isArray(i.header)) {
19
+ const r = s(i.header);
20
+ if (r) return r;
21
+ }
22
+ if (i.content && Array.isArray(i.content)) {
23
+ const r = s(i.content);
24
+ if (r) return r;
25
+ }
26
+ if (i.footer && Array.isArray(i.footer)) {
27
+ const r = s(i.footer);
28
+ if (r) return r;
29
+ }
30
+ }
31
+ }
32
+ return null;
33
+ };
34
+ return s(a.structure);
35
+ }
36
+ function V(a) {
37
+ const v = {}, s = (E) => {
38
+ for (const c of E) {
39
+ const i = X.get(c.type);
40
+ v[c.id] = i?.name || c.type;
41
+ const r = c.props;
42
+ r?.children && Array.isArray(r.children) && s(r.children), c.type === "card" && (Array.isArray(r?.header) && s(r.header), Array.isArray(r?.content) && s(r.content), Array.isArray(r?.footer) && s(r.footer));
43
+ }
44
+ };
45
+ return a?.structure && s(a.structure), v;
46
+ }
47
+ function le({
48
+ document: a,
49
+ pageId: v,
50
+ className: s,
51
+ style: E,
52
+ onBlockClick: c,
53
+ selectedBlockId: i,
54
+ showSelectionOverlay: r = !1,
55
+ focusedGroup: H = null
56
+ }) {
57
+ const l = y(null), _ = y(null), A = y(null), R = y(null), B = y(!1), [G, N] = j(!0), I = y(i), z = y(r), $ = y(H);
58
+ k(() => {
59
+ I.current = i;
60
+ }, [i]), k(() => {
61
+ z.current = r;
62
+ }, [r]), k(() => {
63
+ $.current = H;
64
+ }, [H]);
65
+ const u = F(() => v ? a.pages.find((t) => t.id === v) : a.pages[0], [a, v]), M = y({});
66
+ k(() => {
67
+ M.current = V(u);
68
+ }, [u]);
69
+ const L = (t) => {
70
+ if (!l.current) return;
71
+ const e = l.current.contentDocument || l.current.contentWindow?.document;
72
+ if (!e) return;
73
+ const o = z.current, n = $.current;
74
+ requestAnimationFrame(() => {
75
+ const p = e.getElementById("block-highlight");
76
+ p && p.remove(), e.querySelectorAll("[data-block-id]").forEach((w) => {
77
+ const f = w;
78
+ f.style.outline = "", f.style.outlineOffset = "";
79
+ });
80
+ const d = e.getElementById("sg-block-label");
81
+ d && d.remove();
82
+ const T = e.getElementById("sg-group-highlight");
83
+ T && T.remove();
84
+ const x = e.getElementById("sg-group-label");
85
+ if (x && x.remove(), t) {
86
+ const w = e.createElement("style");
87
+ if (w.id = "block-highlight", w.textContent = `
88
+ [data-block-id="${t}"] {
89
+ outline: 2px solid #3b82f6 !important;
90
+ outline-offset: 2px !important;
91
+ position: relative;
92
+ }
93
+ [data-block-id="${t}"]::before {
94
+ content: '';
95
+ position: absolute;
96
+ top: -4px;
97
+ left: -4px;
98
+ right: -4px;
99
+ bottom: -4px;
100
+ background: rgba(59, 130, 246, 0.1);
101
+ pointer-events: none;
102
+ z-index: -1;
103
+ }
104
+ `, e.head.appendChild(w), o) {
105
+ const f = e.querySelector(`[data-block-id="${t}"]`);
106
+ if (f) {
107
+ const h = M.current[t] || t, b = e.createElement("div");
108
+ b.id = "sg-block-label", b.textContent = h, b.style.cssText = "position:absolute;top:-22px;left:0;background:#3b82f6;color:#fff;font-size:11px;font-weight:600;padding:2px 8px;border-radius:4px 4px 0 0;z-index:10000;pointer-events:none;font-family:system-ui,sans-serif;white-space:nowrap;line-height:16px;", getComputedStyle(f).position === "static" && (f.style.position = "relative"), f.appendChild(b);
109
+ }
110
+ }
111
+ if (n) {
112
+ const h = e.querySelector(`[data-block-id="${t}"]`)?.querySelector(`[data-block-group="${n}"]`);
113
+ if (h) {
114
+ const b = e.createElement("style");
115
+ b.id = "sg-group-highlight", b.textContent = `
116
+ [data-block-id="${t}"] [data-block-group="${n}"] {
117
+ outline: 2px solid #8b5cf6 !important;
118
+ outline-offset: 2px !important;
119
+ position: relative;
120
+ }
121
+ `, e.head.appendChild(b);
122
+ const S = e.createElement("div");
123
+ S.id = "sg-group-label", S.textContent = n, S.style.cssText = "position:absolute;top:-20px;right:0;background:#8b5cf6;color:#fff;font-size:10px;font-weight:600;padding:2px 8px;border-radius:4px 4px 0 0;z-index:10001;pointer-events:none;font-family:system-ui,sans-serif;white-space:nowrap;line-height:14px;", getComputedStyle(h).position === "static" && (h.style.position = "relative"), h.appendChild(S);
124
+ }
125
+ }
126
+ }
127
+ });
128
+ }, J = () => {
129
+ l.current?.contentWindow && l.current.contentWindow.postMessage({
130
+ type: "sg-set-block-names",
131
+ names: M.current
132
+ }, "*");
133
+ }, q = (t) => {
134
+ if (!l.current) return;
135
+ const e = l.current.contentDocument || l.current.contentWindow?.document;
136
+ if (!e) return;
137
+ const o = e.getElementById("sg-hover-overlay");
138
+ if (o && o.remove(), !t) {
139
+ const n = e.getElementById("sg-hover-tooltip");
140
+ n && (n.style.opacity = "0");
141
+ }
142
+ if (t) {
143
+ const n = e.createElement("style");
144
+ n.id = "sg-hover-overlay", n.textContent = `
145
+ [data-block-id] {
146
+ cursor: pointer;
147
+ transition: outline 0.15s ease, outline-offset 0.15s ease;
148
+ }
149
+ [data-block-id]:hover {
150
+ outline: 2px dashed #94a3b8 !important;
151
+ outline-offset: 2px !important;
152
+ }
153
+ [data-block-group] {
154
+ cursor: pointer;
155
+ transition: outline 0.15s ease, background 0.15s ease;
156
+ }
157
+ [data-block-group]:hover {
158
+ outline: 1.5px dashed #a78bfa !important;
159
+ outline-offset: 1px !important;
160
+ background: rgba(139, 92, 246, 0.04);
161
+ }
162
+ `, e.head.appendChild(n), J();
163
+ }
164
+ L(I.current || null);
165
+ }, m = (t, e) => {
166
+ if (!(!l.current || !u))
167
+ try {
168
+ e && N(!0);
169
+ let o = Y(u, t, !0);
170
+ const n = `
171
+ <script>
172
+ (function() {
173
+ // Click handler
174
+ document.addEventListener('click', function(e) {
175
+ var target = e.target;
176
+ var anchor = target;
177
+ while (anchor && anchor.tagName !== 'A') {
178
+ anchor = anchor.parentElement;
179
+ }
180
+ if (anchor && anchor.tagName === 'A' && anchor.href) {
181
+ e.preventDefault();
182
+ e.stopPropagation();
183
+ window.parent.postMessage({
184
+ type: 'editor-navigate',
185
+ href: anchor.getAttribute('href') || anchor.href
186
+ }, '*');
187
+ return;
188
+ }
189
+ var element = target;
190
+ var group = null;
191
+ while (element && !element.dataset.blockId) {
192
+ if (element.dataset && element.dataset.blockGroup && !group) {
193
+ group = element.dataset.blockGroup;
194
+ }
195
+ element = element.parentElement;
196
+ }
197
+ if (element && element.dataset.blockId) {
198
+ window.parent.postMessage({
199
+ type: 'block-click',
200
+ blockId: element.dataset.blockId,
201
+ group: group
202
+ }, '*');
203
+ }
204
+ }, true);
205
+
206
+ // Hover tooltip — block name map injected from parent via postMessage
207
+ var _blockNames = {};
208
+ var _hoverTooltip = null;
209
+
210
+ window.addEventListener('message', function(e) {
211
+ if (e.data && e.data.type === 'sg-set-block-names') {
212
+ _blockNames = e.data.names || {};
213
+ }
214
+ });
215
+
216
+ function getTooltip() {
217
+ if (_hoverTooltip) return _hoverTooltip;
218
+ _hoverTooltip = document.createElement('div');
219
+ _hoverTooltip.id = 'sg-hover-tooltip';
220
+ _hoverTooltip.style.cssText = 'position:fixed;top:0;left:0;background:#334155;color:#fff;font-size:11px;font-weight:500;padding:3px 8px;border-radius:4px;z-index:99999;pointer-events:none;font-family:system-ui,sans-serif;white-space:nowrap;line-height:16px;opacity:0;transition:opacity 0.12s ease;box-shadow:0 2px 6px rgba(0,0,0,0.2);';
221
+ document.body.appendChild(_hoverTooltip);
222
+ return _hoverTooltip;
223
+ }
224
+
225
+ var _currentHoveredBlock = null;
226
+ var _currentHoveredGroup = null;
227
+
228
+ document.addEventListener('mouseover', function(e) {
229
+ // Check if hover overlay is active
230
+ if (!document.getElementById('sg-hover-overlay')) return;
231
+ var el = e.target;
232
+ var groupName = null;
233
+ while (el && !el.dataset.blockId) {
234
+ if (el.dataset && el.dataset.blockGroup && !groupName) {
235
+ groupName = el.dataset.blockGroup;
236
+ }
237
+ el = el.parentElement;
238
+ }
239
+ if (el && el.dataset.blockId) {
240
+ if (el !== _currentHoveredBlock || groupName !== _currentHoveredGroup) {
241
+ _currentHoveredBlock = el;
242
+ _currentHoveredGroup = groupName;
243
+ var tt = getTooltip();
244
+ var blockName = _blockNames[el.dataset.blockId] || el.dataset.blockId;
245
+ tt.textContent = groupName ? (blockName + ' \\u203A ' + groupName) : blockName;
246
+ tt.style.opacity = '1';
247
+ }
248
+ }
249
+ }, true);
250
+
251
+ document.addEventListener('mousemove', function(e) {
252
+ if (_hoverTooltip && _hoverTooltip.style.opacity === '1') {
253
+ _hoverTooltip.style.left = (e.clientX + 12) + 'px';
254
+ _hoverTooltip.style.top = (e.clientY - 28) + 'px';
255
+ }
256
+ }, true);
257
+
258
+ document.addEventListener('mouseout', function(e) {
259
+ var el = e.target;
260
+ while (el && !el.dataset.blockId) el = el.parentElement;
261
+ if (el === _currentHoveredBlock) {
262
+ var related = e.relatedTarget;
263
+ while (related && related !== el) related = related.parentElement;
264
+ if (!related) {
265
+ _currentHoveredBlock = null;
266
+ _currentHoveredGroup = null;
267
+ if (_hoverTooltip) _hoverTooltip.style.opacity = '0';
268
+ }
269
+ }
270
+ }, true);
271
+ })();
272
+ <\/script>
273
+ `;
274
+ o = o.replace("</body>", `${n}</body>`), o.includes("</body>") || (o = o + n);
275
+ const p = l.current, g = () => {
276
+ L(I.current || null), z.current && q(!0);
277
+ };
278
+ e ? (p.onload = () => {
279
+ N(!1), _.current = JSON.parse(JSON.stringify(t)), A.current = P(t), g();
280
+ }, setTimeout(() => {
281
+ N(!1), _.current = JSON.parse(JSON.stringify(t)), A.current = P(t), g();
282
+ }, 1e3)) : (_.current = JSON.parse(JSON.stringify(t)), A.current = P(t), p.onload = () => {
283
+ g();
284
+ }), p.srcdoc = o;
285
+ } catch (o) {
286
+ D.error("[Preview] Error:", o), e && N(!1);
287
+ }
288
+ }, O = (t, e) => {
289
+ if (!(!l.current || !u))
290
+ try {
291
+ const o = U(u, t);
292
+ if (!o) {
293
+ m(e, !1);
294
+ return;
295
+ }
296
+ const n = K(o, void 0, e.theme);
297
+ requestAnimationFrame(() => {
298
+ const p = l.current;
299
+ if (!p) return;
300
+ const g = p.contentDocument || p.contentWindow?.document;
301
+ if (!g) return;
302
+ const d = g.querySelector(`[data-block-id="${t}"]`);
303
+ if (d)
304
+ try {
305
+ g.querySelectorAll(`style[data-block-style="${t}"]`).forEach((h) => h.remove());
306
+ const x = g.createElement("div");
307
+ x.innerHTML = n, x.querySelectorAll("style").forEach((h) => {
308
+ h.setAttribute("data-block-style", t);
309
+ });
310
+ const f = g.createDocumentFragment();
311
+ for (; x.firstChild; )
312
+ f.appendChild(x.firstChild);
313
+ f.childNodes.length > 0 ? d.parentNode?.replaceChild(f, d) : d.outerHTML = n, _.current = JSON.parse(JSON.stringify(e)), A.current = P(e), L(I.current || null);
314
+ } catch (T) {
315
+ D.error("[Preview] Erro ao atualizar:", T), m(e, !1);
316
+ }
317
+ else
318
+ m(e, !1);
319
+ });
320
+ } catch (o) {
321
+ D.error("[Preview] Erro:", o), m(e, !1);
322
+ }
323
+ };
324
+ return k(() => {
325
+ if (!u) {
326
+ N(!1);
327
+ return;
328
+ }
329
+ const t = P(a);
330
+ if (!B.current) {
331
+ l.current && (B.current = !0, R.current = u?.id ?? null, m(a, !0));
332
+ return;
333
+ }
334
+ if (!l.current) return;
335
+ const e = u?.id ?? null;
336
+ if (R.current !== e) {
337
+ R.current = e, m(a, !1);
338
+ return;
339
+ }
340
+ if (A.current === t)
341
+ return;
342
+ const o = Q(
343
+ _.current || a,
344
+ a,
345
+ u?.id
346
+ );
347
+ if (o.length === 0) {
348
+ D.debug(
349
+ "[Preview] Hash changed but no changes detected, forcing reload"
350
+ ), m(a, !1);
351
+ return;
352
+ }
353
+ if (o.some(
354
+ (n) => n.blockId === "__structural__" || n.changedProps?.includes("children")
355
+ )) {
356
+ m(a, !1);
357
+ return;
358
+ }
359
+ if (o.length === 1) {
360
+ const n = o[0];
361
+ if (!(n.changedProps || []).some(
362
+ (d) => d === "children" || d === "header" || d === "content" || d === "footer"
363
+ )) {
364
+ O(n.blockId, a);
365
+ return;
366
+ }
367
+ }
368
+ m(a, !1);
369
+ }, [a, u]), k(() => {
370
+ B.current && L(i || null);
371
+ }, [i, H]), k(() => {
372
+ B.current && q(r);
373
+ }, [r]), k(() => {
374
+ if (!c) return;
375
+ const t = (e) => {
376
+ e.data?.type === "block-click" && e.data?.blockId && c(e.data.blockId, e.data.group || void 0);
377
+ };
378
+ return window.addEventListener("message", t), () => {
379
+ window.removeEventListener("message", t);
380
+ };
381
+ }, [c]), u ? /* @__PURE__ */ W("div", { className: s, style: { position: "relative", ...E }, children: [
382
+ G && /* @__PURE__ */ C(
383
+ "div",
384
+ {
385
+ style: {
386
+ position: "absolute",
387
+ top: 0,
388
+ left: 0,
389
+ right: 0,
390
+ bottom: 0,
391
+ display: "flex",
392
+ alignItems: "center",
393
+ justifyContent: "center",
394
+ backgroundColor: "rgba(255, 255, 255, 0.8)",
395
+ zIndex: 10
396
+ },
397
+ children: /* @__PURE__ */ C("div", { style: { color: "#6b7280" }, children: "Carregando preview..." })
398
+ }
399
+ ),
400
+ /* @__PURE__ */ C(
401
+ "iframe",
402
+ {
403
+ ref: l,
404
+ style: {
405
+ width: "100%",
406
+ height: "100%",
407
+ border: "none",
408
+ backgroundColor: "#ffffff"
409
+ },
410
+ title: "Preview do site"
411
+ }
412
+ )
413
+ ] }) : /* @__PURE__ */ C("div", { className: s, style: E, children: /* @__PURE__ */ C("div", { style: { padding: "2rem", textAlign: "center", color: "#6b7280" }, children: "Página não encontrada" }) });
414
+ }
415
+ export {
416
+ le as Preview
417
+ };
418
+ //# sourceMappingURL=Preview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Preview.js","sources":["../../../src/engine/preview/Preview.tsx"],"sourcesContent":["/**\n * Preview\n * Sem dependências circulares, sem reloads desnecessários\n */\n\nimport React, { useEffect, useRef, useState, useMemo } from \"react\";\nimport { SiteDocument, Block } from \"../schema/siteDocument\";\nimport { componentRegistry } from \"../registry/registry\";\nimport { exportPageToHtml, exportBlockToHtml } from \"../export/exportHtml\";\nimport { detectChangedBlocks } from \"../../utils/changeDetector\";\nimport { hashDocument } from \"../../utils/documentHash\";\nimport { logger } from \"../../utils/logger\";\n\nexport interface PreviewProps {\n document: SiteDocument;\n pageId?: string;\n className?: string;\n style?: React.CSSProperties;\n onBlockClick?: (blockId: string, group?: string) => void;\n selectedBlockId?: string | null;\n /** Exibe hover e label de seleção nos blocos do preview */\n showSelectionOverlay?: boolean;\n /** Grupo focado para indicador visual no preview */\n focusedGroup?: string | null;\n}\n\n/**\n * Encontra um bloco na estrutura recursivamente\n */\nfunction findBlockInPage(page: any, blockId: string): Block | null {\n const findInBlocks = (blocks: Block[]): Block | null => {\n for (const block of blocks) {\n if (block.id === blockId) return block;\n const props = block.props as Record<string, any>;\n if (props?.children && Array.isArray(props.children)) {\n const found = findInBlocks(props.children);\n if (found) return found;\n }\n if (block.type === \"card\") {\n if (props.header && Array.isArray(props.header)) {\n const found = findInBlocks(props.header);\n if (found) return found;\n }\n if (props.content && Array.isArray(props.content)) {\n const found = findInBlocks(props.content);\n if (found) return found;\n }\n if (props.footer && Array.isArray(props.footer)) {\n const found = findInBlocks(props.footer);\n if (found) return found;\n }\n }\n }\n return null;\n };\n return findInBlocks(page.structure);\n}\n\n/**\n * Monta mapa blockId → nome legível (da registry)\n */\nfunction buildBlockNameMap(page: any): Record<string, string> {\n const map: Record<string, string> = {};\n const walk = (blocks: Block[]) => {\n for (const block of blocks) {\n const def = componentRegistry.get(block.type);\n map[block.id] = def?.name || block.type;\n const props = block.props as Record<string, any>;\n if (props?.children && Array.isArray(props.children)) walk(props.children);\n if (block.type === \"card\") {\n if (Array.isArray(props?.header)) walk(props.header);\n if (Array.isArray(props?.content)) walk(props.content);\n if (Array.isArray(props?.footer)) walk(props.footer);\n }\n }\n };\n if (page?.structure) walk(page.structure);\n return map;\n}\n\n/**\n * Componente de preview usando iframe isolado\n */\nexport function Preview({\n document,\n pageId,\n className,\n style,\n onBlockClick,\n selectedBlockId,\n showSelectionOverlay = false,\n focusedGroup = null,\n}: PreviewProps) {\n const iframeRef = useRef<HTMLIFrameElement>(null);\n const previousDocRef = useRef<SiteDocument | null>(null);\n const previousDocHashRef = useRef<string | null>(null);\n const previousPageIdRef = useRef<string | null>(null);\n const isInitializedRef = useRef<boolean>(false);\n const [isLoading, setIsLoading] = useState(true);\n\n // Usar ref para selectedBlockId (necessário para highlight assíncrono)\n const selectedBlockIdRef = useRef(selectedBlockId);\n const showSelectionOverlayRef = useRef(showSelectionOverlay);\n const focusedGroupRef = useRef(focusedGroup);\n\n // Atualizar refs quando props mudam\n useEffect(() => {\n selectedBlockIdRef.current = selectedBlockId;\n }, [selectedBlockId]);\n\n useEffect(() => {\n showSelectionOverlayRef.current = showSelectionOverlay;\n }, [showSelectionOverlay]);\n\n useEffect(() => {\n focusedGroupRef.current = focusedGroup;\n }, [focusedGroup]);\n\n const page = useMemo(() => {\n return pageId\n ? document.pages.find((p) => p.id === pageId)\n : document.pages[0];\n }, [document, pageId]);\n\n // Mapa blockId → nome legível para labels\n const blockNameMapRef = useRef<Record<string, string>>({});\n useEffect(() => {\n blockNameMapRef.current = buildBlockNameMap(page);\n }, [page]);\n\n // Atualizar highlight + selection overlay diretamente no iframe (sem reload)\n const updateHighlight = (blockId: string | null) => {\n if (!iframeRef.current) return;\n\n const iframeDoc =\n iframeRef.current.contentDocument ||\n iframeRef.current.contentWindow?.document;\n if (!iframeDoc) return;\n\n const overlayEnabled = showSelectionOverlayRef.current;\n const group = focusedGroupRef.current;\n\n requestAnimationFrame(() => {\n // Remover highlight anterior\n const oldStyle = iframeDoc.getElementById(\"block-highlight\");\n if (oldStyle) oldStyle.remove();\n\n const allBlocks = iframeDoc.querySelectorAll(\"[data-block-id]\");\n allBlocks.forEach((el) => {\n const htmlEl = el as HTMLElement;\n htmlEl.style.outline = \"\";\n htmlEl.style.outlineOffset = \"\";\n });\n\n // Remover labels anteriores\n const oldLabel = iframeDoc.getElementById(\"sg-block-label\");\n if (oldLabel) oldLabel.remove();\n const oldGroupStyle = iframeDoc.getElementById(\"sg-group-highlight\");\n if (oldGroupStyle) oldGroupStyle.remove();\n const oldGroupLabel = iframeDoc.getElementById(\"sg-group-label\");\n if (oldGroupLabel) oldGroupLabel.remove();\n\n // Adicionar novo highlight\n if (blockId) {\n const highlightStyle = iframeDoc.createElement(\"style\");\n highlightStyle.id = \"block-highlight\";\n highlightStyle.textContent = `\n [data-block-id=\"${blockId}\"] {\n outline: 2px solid #3b82f6 !important;\n outline-offset: 2px !important;\n position: relative;\n }\n [data-block-id=\"${blockId}\"]::before {\n content: '';\n position: absolute;\n top: -4px;\n left: -4px;\n right: -4px;\n bottom: -4px;\n background: rgba(59, 130, 246, 0.1);\n pointer-events: none;\n z-index: -1;\n }\n `;\n iframeDoc.head.appendChild(highlightStyle);\n\n // Selection label (only when overlay is enabled)\n if (overlayEnabled) {\n const selectedEl = iframeDoc.querySelector(`[data-block-id=\"${blockId}\"]`) as HTMLElement;\n if (selectedEl) {\n const blockName = blockNameMapRef.current[blockId] || blockId;\n const label = iframeDoc.createElement(\"div\");\n label.id = \"sg-block-label\";\n label.textContent = blockName;\n label.style.cssText = \"position:absolute;top:-22px;left:0;background:#3b82f6;color:#fff;font-size:11px;font-weight:600;padding:2px 8px;border-radius:4px 4px 0 0;z-index:10000;pointer-events:none;font-family:system-ui,sans-serif;white-space:nowrap;line-height:16px;\";\n const pos = getComputedStyle(selectedEl).position;\n if (pos === \"static\") selectedEl.style.position = \"relative\";\n selectedEl.appendChild(label);\n }\n }\n\n // Indicador de grupo — mostra qual sub-seção foi clicada (purple)\n if (group) {\n const blockEl = iframeDoc.querySelector(`[data-block-id=\"${blockId}\"]`);\n const groupEl = blockEl?.querySelector(`[data-block-group=\"${group}\"]`) as HTMLElement;\n if (groupEl) {\n const ghStyle = iframeDoc.createElement(\"style\");\n ghStyle.id = \"sg-group-highlight\";\n ghStyle.textContent = `\n [data-block-id=\"${blockId}\"] [data-block-group=\"${group}\"] {\n outline: 2px solid #8b5cf6 !important;\n outline-offset: 2px !important;\n position: relative;\n }\n `;\n iframeDoc.head.appendChild(ghStyle);\n\n const gLabel = iframeDoc.createElement(\"div\");\n gLabel.id = \"sg-group-label\";\n gLabel.textContent = group;\n gLabel.style.cssText = \"position:absolute;top:-20px;right:0;background:#8b5cf6;color:#fff;font-size:10px;font-weight:600;padding:2px 8px;border-radius:4px 4px 0 0;z-index:10001;pointer-events:none;font-family:system-ui,sans-serif;white-space:nowrap;line-height:14px;\";\n const gPos = getComputedStyle(groupEl).position;\n if (gPos === \"static\") groupEl.style.position = \"relative\";\n groupEl.appendChild(gLabel);\n }\n }\n }\n });\n };\n\n // Enviar mapa de nomes para o iframe\n const sendBlockNamesToIframe = () => {\n if (!iframeRef.current?.contentWindow) return;\n iframeRef.current.contentWindow.postMessage({\n type: \"sg-set-block-names\",\n names: blockNameMapRef.current,\n }, \"*\");\n };\n\n // Atualizar hover overlay (injetar/remover CSS de hover nos blocos)\n const updateSelectionOverlay = (enabled: boolean) => {\n if (!iframeRef.current) return;\n\n const iframeDoc =\n iframeRef.current.contentDocument ||\n iframeRef.current.contentWindow?.document;\n if (!iframeDoc) return;\n\n const existingStyle = iframeDoc.getElementById(\"sg-hover-overlay\");\n if (existingStyle) existingStyle.remove();\n\n // Remove tooltip when disabling\n if (!enabled) {\n const tooltip = iframeDoc.getElementById(\"sg-hover-tooltip\");\n if (tooltip) tooltip.style.opacity = \"0\";\n }\n\n if (enabled) {\n const hoverStyle = iframeDoc.createElement(\"style\");\n hoverStyle.id = \"sg-hover-overlay\";\n hoverStyle.textContent = `\n [data-block-id] {\n cursor: pointer;\n transition: outline 0.15s ease, outline-offset 0.15s ease;\n }\n [data-block-id]:hover {\n outline: 2px dashed #94a3b8 !important;\n outline-offset: 2px !important;\n }\n [data-block-group] {\n cursor: pointer;\n transition: outline 0.15s ease, background 0.15s ease;\n }\n [data-block-group]:hover {\n outline: 1.5px dashed #a78bfa !important;\n outline-offset: 1px !important;\n background: rgba(139, 92, 246, 0.04);\n }\n `;\n iframeDoc.head.appendChild(hoverStyle);\n sendBlockNamesToIframe();\n }\n\n // Re-apply highlight (recalcula label)\n updateHighlight(selectedBlockIdRef.current || null);\n };\n\n // Atualizar preview completo (com srcdoc - causa reload)\n const updateFullPreview = (doc: SiteDocument, showLoading: boolean) => {\n if (!iframeRef.current || !page) return;\n\n try {\n if (showLoading) {\n setIsLoading(true);\n }\n\n let html = exportPageToHtml(page, doc, true);\n\n // Adicionar click handler + hover handler: links não navegam, enviam editor-navigate; outros cliques enviam block-click\n const clickHandler = `\n <script>\n (function() {\n // Click handler\n document.addEventListener('click', function(e) {\n var target = e.target;\n var anchor = target;\n while (anchor && anchor.tagName !== 'A') {\n anchor = anchor.parentElement;\n }\n if (anchor && anchor.tagName === 'A' && anchor.href) {\n e.preventDefault();\n e.stopPropagation();\n window.parent.postMessage({\n type: 'editor-navigate',\n href: anchor.getAttribute('href') || anchor.href\n }, '*');\n return;\n }\n var element = target;\n var group = null;\n while (element && !element.dataset.blockId) {\n if (element.dataset && element.dataset.blockGroup && !group) {\n group = element.dataset.blockGroup;\n }\n element = element.parentElement;\n }\n if (element && element.dataset.blockId) {\n window.parent.postMessage({\n type: 'block-click',\n blockId: element.dataset.blockId,\n group: group\n }, '*');\n }\n }, true);\n\n // Hover tooltip — block name map injected from parent via postMessage\n var _blockNames = {};\n var _hoverTooltip = null;\n\n window.addEventListener('message', function(e) {\n if (e.data && e.data.type === 'sg-set-block-names') {\n _blockNames = e.data.names || {};\n }\n });\n\n function getTooltip() {\n if (_hoverTooltip) return _hoverTooltip;\n _hoverTooltip = document.createElement('div');\n _hoverTooltip.id = 'sg-hover-tooltip';\n _hoverTooltip.style.cssText = 'position:fixed;top:0;left:0;background:#334155;color:#fff;font-size:11px;font-weight:500;padding:3px 8px;border-radius:4px;z-index:99999;pointer-events:none;font-family:system-ui,sans-serif;white-space:nowrap;line-height:16px;opacity:0;transition:opacity 0.12s ease;box-shadow:0 2px 6px rgba(0,0,0,0.2);';\n document.body.appendChild(_hoverTooltip);\n return _hoverTooltip;\n }\n\n var _currentHoveredBlock = null;\n var _currentHoveredGroup = null;\n\n document.addEventListener('mouseover', function(e) {\n // Check if hover overlay is active\n if (!document.getElementById('sg-hover-overlay')) return;\n var el = e.target;\n var groupName = null;\n while (el && !el.dataset.blockId) {\n if (el.dataset && el.dataset.blockGroup && !groupName) {\n groupName = el.dataset.blockGroup;\n }\n el = el.parentElement;\n }\n if (el && el.dataset.blockId) {\n if (el !== _currentHoveredBlock || groupName !== _currentHoveredGroup) {\n _currentHoveredBlock = el;\n _currentHoveredGroup = groupName;\n var tt = getTooltip();\n var blockName = _blockNames[el.dataset.blockId] || el.dataset.blockId;\n tt.textContent = groupName ? (blockName + ' \\\\u203A ' + groupName) : blockName;\n tt.style.opacity = '1';\n }\n }\n }, true);\n\n document.addEventListener('mousemove', function(e) {\n if (_hoverTooltip && _hoverTooltip.style.opacity === '1') {\n _hoverTooltip.style.left = (e.clientX + 12) + 'px';\n _hoverTooltip.style.top = (e.clientY - 28) + 'px';\n }\n }, true);\n\n document.addEventListener('mouseout', function(e) {\n var el = e.target;\n while (el && !el.dataset.blockId) el = el.parentElement;\n if (el === _currentHoveredBlock) {\n var related = e.relatedTarget;\n while (related && related !== el) related = related.parentElement;\n if (!related) {\n _currentHoveredBlock = null;\n _currentHoveredGroup = null;\n if (_hoverTooltip) _hoverTooltip.style.opacity = '0';\n }\n }\n }, true);\n })();\n </script>\n `;\n html = html.replace(\"</body>\", `${clickHandler}</body>`);\n if (!html.includes(\"</body>\")) {\n html = html + clickHandler;\n }\n\n const iframe = iframeRef.current;\n\n const applyOverlayAfterLoad = () => {\n updateHighlight(selectedBlockIdRef.current || null);\n if (showSelectionOverlayRef.current) {\n updateSelectionOverlay(true);\n }\n };\n\n if (showLoading) {\n iframe.onload = () => {\n setIsLoading(false);\n previousDocRef.current = JSON.parse(JSON.stringify(doc));\n previousDocHashRef.current = hashDocument(doc);\n applyOverlayAfterLoad();\n };\n setTimeout(() => {\n setIsLoading(false);\n previousDocRef.current = JSON.parse(JSON.stringify(doc));\n previousDocHashRef.current = hashDocument(doc);\n applyOverlayAfterLoad();\n }, 1000);\n } else {\n previousDocRef.current = JSON.parse(JSON.stringify(doc));\n previousDocHashRef.current = hashDocument(doc);\n iframe.onload = () => {\n applyOverlayAfterLoad();\n };\n }\n\n iframe.srcdoc = html;\n } catch (error) {\n logger.error(\"[Preview] Error:\", error);\n if (showLoading) {\n setIsLoading(false);\n }\n }\n };\n\n // Atualizar apenas um bloco (sem reload)\n const updatePartialPreview = (blockId: string, doc: SiteDocument) => {\n if (!iframeRef.current || !page) return;\n\n try {\n const block = findBlockInPage(page, blockId);\n if (!block) {\n updateFullPreview(doc, false);\n return;\n }\n\n const blockHtml = exportBlockToHtml(block, undefined, doc.theme);\n\n requestAnimationFrame(() => {\n const iframe = iframeRef.current;\n if (!iframe) return;\n\n const iframeDoc =\n iframe.contentDocument || iframe.contentWindow?.document;\n if (!iframeDoc) return;\n\n const element = iframeDoc.querySelector(`[data-block-id=\"${blockId}\"]`);\n if (element) {\n try {\n // Remover <style> tags antigas associadas a este bloco\n const oldStyles = iframeDoc.querySelectorAll(`style[data-block-style=\"${blockId}\"]`);\n oldStyles.forEach(s => s.remove());\n\n const temp = iframeDoc.createElement(\"div\");\n temp.innerHTML = blockHtml;\n\n // Marcar e extrair <style> tags para inserção separada\n const styleTags = temp.querySelectorAll(\"style\");\n styleTags.forEach(style => {\n style.setAttribute(\"data-block-style\", blockId);\n });\n\n // Usar DocumentFragment para substituir com múltiplos elementos irmãos\n // (ex: <style>hover CSS</style><button>text</button>)\n const fragment = iframeDoc.createDocumentFragment();\n while (temp.firstChild) {\n fragment.appendChild(temp.firstChild);\n }\n\n if (fragment.childNodes.length > 0) {\n element.parentNode?.replaceChild(fragment, element);\n } else {\n element.outerHTML = blockHtml;\n }\n\n // Atualizar refs\n previousDocRef.current = JSON.parse(JSON.stringify(doc));\n previousDocHashRef.current = hashDocument(doc);\n\n // Reaplicar highlight\n updateHighlight(selectedBlockIdRef.current || null);\n } catch (error) {\n logger.error(\"[Preview] Erro ao atualizar:\", error);\n updateFullPreview(doc, false);\n }\n } else {\n updateFullPreview(doc, false);\n }\n });\n } catch (error) {\n logger.error(\"[Preview] Erro:\", error);\n updateFullPreview(doc, false);\n }\n };\n\n // Efeito para mudanças no DOCUMENTO (não no selectedBlockId)\n useEffect(() => {\n if (!page) {\n setIsLoading(false);\n return;\n }\n\n const currentDocHash = hashDocument(document);\n\n // Primeira renderização\n if (!isInitializedRef.current) {\n if (iframeRef.current) {\n isInitializedRef.current = true;\n previousPageIdRef.current = page?.id ?? null;\n updateFullPreview(document, true);\n }\n return;\n }\n\n if (!iframeRef.current) return;\n\n // Detectar troca de página (pageId mudou)\n const currentPageId = page?.id ?? null;\n if (previousPageIdRef.current !== currentPageId) {\n previousPageIdRef.current = currentPageId;\n updateFullPreview(document, false);\n return;\n }\n\n // Se hash não mudou, não há mudanças no documento\n if (previousDocHashRef.current === currentDocHash) {\n return;\n }\n\n // Detectar mudanças na página atual\n const changedBlocks = detectChangedBlocks(\n previousDocRef.current || document,\n document,\n page?.id,\n );\n\n // Se não há mudanças detectadas mas o hash mudou, forçar reload\n if (changedBlocks.length === 0) {\n logger.debug(\n \"[Preview] Hash changed but no changes detected, forcing reload\",\n );\n updateFullPreview(document, false);\n return;\n }\n\n // Mudança estrutural (bloco adicionado/removido) = reload completo\n if (\n changedBlocks.some(\n (c) =>\n c.blockId === \"__structural__\" ||\n c.changedProps?.includes(\"children\"),\n )\n ) {\n updateFullPreview(document, false);\n return;\n }\n\n // Mudança de 1 bloco (não estrutural) = atualização parcial\n if (changedBlocks.length === 1) {\n const change = changedBlocks[0];\n const changedProps = change.changedProps || [];\n\n const isStructural = changedProps.some(\n (prop) =>\n prop === \"children\" ||\n prop === \"header\" ||\n prop === \"content\" ||\n prop === \"footer\",\n );\n\n if (!isStructural) {\n updatePartialPreview(change.blockId, document);\n return;\n }\n }\n\n // Fallback: reload completo SEM loader\n updateFullPreview(document, false);\n }, [document, page]); // APENAS document e page - sem funções\n\n // Efeito SEPARADO para highlight (não recarrega o preview)\n useEffect(() => {\n if (!isInitializedRef.current) return;\n updateHighlight(selectedBlockId || null);\n }, [selectedBlockId, focusedGroup]); // eslint-disable-line react-hooks/exhaustive-deps -- updateHighlight reads focusedGroupRef\n\n // Efeito para toggle do selection overlay\n useEffect(() => {\n if (!isInitializedRef.current) return;\n updateSelectionOverlay(showSelectionOverlay);\n }, [showSelectionOverlay]); // eslint-disable-line react-hooks/exhaustive-deps -- same pattern as updateFullPreview\n\n // Listener para cliques\n useEffect(() => {\n if (!onBlockClick) return;\n\n const handleMessage = (event: MessageEvent) => {\n if (event.data?.type === \"block-click\" && event.data?.blockId) {\n onBlockClick(event.data.blockId, event.data.group || undefined);\n }\n };\n\n window.addEventListener(\"message\", handleMessage);\n return () => {\n window.removeEventListener(\"message\", handleMessage);\n };\n }, [onBlockClick]);\n\n if (!page) {\n return (\n <div className={className} style={style}>\n <div style={{ padding: \"2rem\", textAlign: \"center\", color: \"#6b7280\" }}>\n Página não encontrada\n </div>\n </div>\n );\n }\n\n return (\n <div className={className} style={{ position: \"relative\", ...style }}>\n {isLoading && (\n <div\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: \"rgba(255, 255, 255, 0.8)\",\n zIndex: 10,\n }}\n >\n <div style={{ color: \"#6b7280\" }}>Carregando preview...</div>\n </div>\n )}\n <iframe\n ref={iframeRef}\n style={{\n width: \"100%\",\n height: \"100%\",\n border: \"none\",\n backgroundColor: \"#ffffff\",\n }}\n title=\"Preview do site\"\n />\n </div>\n );\n}\n"],"names":["findBlockInPage","page","blockId","findInBlocks","blocks","block","props","found","buildBlockNameMap","map","walk","def","componentRegistry","Preview","document","pageId","className","style","onBlockClick","selectedBlockId","showSelectionOverlay","focusedGroup","iframeRef","useRef","previousDocRef","previousDocHashRef","previousPageIdRef","isInitializedRef","isLoading","setIsLoading","useState","selectedBlockIdRef","showSelectionOverlayRef","focusedGroupRef","useEffect","useMemo","p","blockNameMapRef","updateHighlight","iframeDoc","overlayEnabled","group","oldStyle","el","htmlEl","oldLabel","oldGroupStyle","oldGroupLabel","highlightStyle","selectedEl","blockName","label","groupEl","ghStyle","gLabel","sendBlockNamesToIframe","updateSelectionOverlay","enabled","existingStyle","tooltip","hoverStyle","updateFullPreview","doc","showLoading","html","exportPageToHtml","clickHandler","iframe","applyOverlayAfterLoad","hashDocument","error","logger","updatePartialPreview","blockHtml","exportBlockToHtml","element","s","temp","fragment","currentDocHash","currentPageId","changedBlocks","detectChangedBlocks","c","change","prop","handleMessage","event","jsxs","jsx"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { BlockDefinition } from '../../types';
2
+ export declare const blogPostCardBlock: BlockDefinition<"blogPostCard">;
3
+ //# sourceMappingURL=blogPostCard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blogPostCard.d.ts","sourceRoot":"","sources":["../../../../../src/engine/registry/blocks/sections/blogPostCard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAG9C,eAAO,MAAM,iBAAiB,EAAE,eAAe,CAAC,cAAc,CA8C7D,CAAC"}