@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":"changeDetector.js","sources":["../../src/utils/changeDetector.ts"],"sourcesContent":["/**\n * Change Detector\n * Detecta mudanças entre documentos para atualização parcial\n */\n\nimport { SiteDocumentV2, Block } from '../engine/schema/siteDocument'\n\n\n/**\n * Compara dois blocos e retorna se são diferentes\n * Também retorna quais propriedades mudaram\n */\nfunction blocksAreDifferent(block1: Block, block2: Block): { different: boolean; changedProps?: string[] } {\n // Comparação rápida primeiro\n if (JSON.stringify(block1) === JSON.stringify(block2)) {\n return { different: false }\n }\n\n // Detectar quais propriedades mudaram\n const props1 = block1.props as Record<string, any>\n const props2 = block2.props as Record<string, any>\n const changedProps: string[] = []\n\n // Verificar todas as propriedades\n const allProps = new Set([...Object.keys(props1 || {}), ...Object.keys(props2 || {})])\n for (const prop of allProps) {\n // Ignorar propriedades que são arrays de filhos - essas mudanças são detectadas nos filhos\n if (prop === 'children' || prop === 'header' || prop === 'content' || prop === 'footer') {\n // Comparar apenas se os arrays têm tamanhos diferentes ou IDs diferentes\n const oldChildren = props1[prop] || []\n const newChildren = props2[prop] || []\n \n if (Array.isArray(oldChildren) && Array.isArray(newChildren)) {\n // Se os arrays têm tamanhos diferentes, a mudança será detectada nos filhos\n if (oldChildren.length !== newChildren.length) {\n changedProps.push(prop)\n } else {\n // Verificar se os IDs dos filhos são os mesmos (ordem pode ter mudado)\n const oldIds = oldChildren.map((c: any) => c?.id).filter(Boolean).sort()\n const newIds = newChildren.map((c: any) => c?.id).filter(Boolean).sort()\n if (JSON.stringify(oldIds) !== JSON.stringify(newIds)) {\n changedProps.push(prop)\n }\n }\n } else if (JSON.stringify(oldChildren) !== JSON.stringify(newChildren)) {\n changedProps.push(prop)\n }\n } else {\n // Para outras propriedades, comparar normalmente\n if (JSON.stringify(props1[prop]) !== JSON.stringify(props2[prop])) {\n changedProps.push(prop)\n }\n }\n }\n\n return { different: changedProps.length > 0, changedProps }\n}\n\n/**\n * Detecta quais blocos foram modificados entre dois documentos\n * @returns Array de objetos com blockId e changedProps\n */\nexport function detectChangedBlocks(\n oldDoc: SiteDocumentV2,\n newDoc: SiteDocumentV2\n): Array<{ blockId: string; changedProps?: string[] }> {\n const changedBlocks: Array<{ blockId: string; changedProps?: string[] }> = []\n\n // Comparar páginas\n const oldPage = oldDoc.pages.find((p) => p.id === 'home') || oldDoc.pages[0]\n const newPage = newDoc.pages.find((p) => p.id === 'home') || newDoc.pages[0]\n\n if (!oldPage || !newPage) {\n return [] // Se não há páginas, não há mudanças\n }\n\n // Comparação rápida: se os IDs dos blocos raiz são os mesmos, não precisa verificar estrutura\n const oldRootIds = (oldPage.structure || []).map(b => b?.id).filter(Boolean).sort()\n const newRootIds = (newPage.structure || []).map(b => b?.id).filter(Boolean).sort()\n \n // Se ambos estão vazios, não há mudança estrutural\n if (oldRootIds.length === 0 && newRootIds.length === 0) {\n // Ambos vazios - não há estrutura para comparar, retornar vazio (sem mudanças)\n return []\n }\n \n if (JSON.stringify(oldRootIds) !== JSON.stringify(newRootIds)) {\n // Estrutura mudou (blocos adicionados/removidos na raiz)\n // Retornar mudança especial indicando mudança estrutural\n return [{ blockId: '__structural__', changedProps: ['children'] }]\n }\n\n // Comparar estrutura recursivamente\n const compareBlocks = (oldBlocks: Block[], newBlocks: Block[]): Array<{ blockId: string; changedProps?: string[] }> => {\n const localChangedBlocks: Array<{ blockId: string; changedProps?: string[] }> = []\n \n // Criar mapas de blocos por ID\n const oldBlocksMap = new Map<string, Block>()\n const newBlocksMap = new Map<string, Block>()\n\n const addToMap = (blocks: Block[], map: Map<string, Block>) => {\n for (const block of blocks) {\n if (!block || !block.id) continue\n map.set(block.id, block)\n const props = block.props as any\n if (props?.children && Array.isArray(props.children)) {\n addToMap(props.children, map)\n }\n if (block.type === 'card') {\n if (props.header && Array.isArray(props.header)) {\n addToMap(props.header, map)\n }\n if (props.content && Array.isArray(props.content)) {\n addToMap(props.content, map)\n }\n if (props.footer && Array.isArray(props.footer)) {\n addToMap(props.footer, map)\n }\n }\n }\n }\n\n addToMap(oldBlocks, oldBlocksMap)\n addToMap(newBlocks, newBlocksMap)\n\n // Verificar blocos que mudaram ou foram adicionados\n for (const [id, newBlock] of newBlocksMap) {\n const oldBlock = oldBlocksMap.get(id)\n if (!oldBlock) {\n // Novo bloco adicionado - mas não forçar recriação completa, apenas notar\n localChangedBlocks.push({ blockId: id })\n } else {\n const diff = blocksAreDifferent(oldBlock, newBlock)\n if (diff.different) {\n localChangedBlocks.push({ blockId: id, changedProps: diff.changedProps })\n }\n }\n }\n\n // Verificar blocos que foram removidos\n for (const [id] of oldBlocksMap) {\n if (!newBlocksMap.has(id)) {\n // Bloco foi removido - retornar vazio para forçar recriação completa\n return []\n }\n }\n\n return localChangedBlocks\n }\n\n const result = compareBlocks(oldPage.structure, newPage.structure)\n\n changedBlocks.push(...result)\n\n return changedBlocks\n}\n\n/**\n * Determina o tipo de mudança baseado no bloco e propriedade modificada\n */\nexport function getChangeType(_blockId: string, propName: string, blockType?: string): 'text' | 'layout' | 'visual' {\n // Mudanças visuais (cores, tema)\n const visualProps = ['color', 'bg', 'background', 'backgroundColor', 'primary', 'secondary', 'accent']\n if (visualProps.some((p) => propName.toLowerCase().includes(p))) {\n return 'visual'\n }\n\n // Mudanças de texto\n const textBlockTypes = ['heading', 'text', 'button', 'link']\n if (blockType && textBlockTypes.includes(blockType)) {\n if (propName === 'text' || propName === 'content') {\n return 'text'\n }\n }\n\n // Mudanças de layout (padrão)\n return 'layout'\n}\n\n/**\n * Verifica se apenas um bloco foi modificado\n */\nexport function isSingleBlockChange(changedBlocks: Array<{ blockId: string; changedProps?: string[] }>): boolean {\n return changedBlocks.length === 1\n}\n\n/**\n * Obtém IDs dos blocos modificados\n */\nexport function getChangedBlockIds(changedBlocks: Array<{ blockId: string; changedProps?: string[] }>): string[] {\n return changedBlocks.map((c) => c.blockId)\n}\n\n/**\n * Verifica se as mudanças são apenas visuais (cores, background, etc)\n */\nexport function isVisualChangeOnly(changedBlocks: Array<{ blockId: string; changedProps?: string[] }>): boolean {\n if (changedBlocks.length === 0) return false\n \n const visualProps = ['color', 'bg', 'background', 'backgroundColor', 'border', 'shadow', 'radius']\n \n for (const change of changedBlocks) {\n if (!change.changedProps) return false\n \n // Se todas as propriedades mudadas são visuais\n const allVisual = change.changedProps.every((prop) => \n visualProps.some((vp) => prop.toLowerCase().includes(vp.toLowerCase()))\n )\n \n if (!allVisual) return false\n }\n \n return true\n}\n"],"names":["blocksAreDifferent","block1","block2","props1","props2","changedProps","allProps","prop","oldChildren","newChildren","oldIds","c","newIds","detectChangedBlocks","oldDoc","newDoc","changedBlocks","oldPage","p","newPage","oldRootIds","b","newRootIds","result","oldBlocks","newBlocks","localChangedBlocks","oldBlocksMap","newBlocksMap","addToMap","blocks","map","block","props","id","newBlock","oldBlock","diff"],"mappings":"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"}
1
+ {"version":3,"file":"changeDetector.js","sources":["../../src/utils/changeDetector.ts"],"sourcesContent":["/**\n * Change Detector\n * Detecta mudanças entre documentos para atualização parcial\n */\n\nimport { SiteDocument, Block } from '../engine/schema/siteDocument'\n\n\n/**\n * Compara dois blocos e retorna se são diferentes\n * Também retorna quais propriedades mudaram\n */\nfunction blocksAreDifferent(block1: Block, block2: Block): { different: boolean; changedProps?: string[] } {\n // Comparação rápida primeiro\n if (JSON.stringify(block1) === JSON.stringify(block2)) {\n return { different: false }\n }\n\n // Detectar quais propriedades mudaram\n const props1 = block1.props as Record<string, any>\n const props2 = block2.props as Record<string, any>\n const changedProps: string[] = []\n\n // Verificar todas as propriedades\n const allProps = new Set([...Object.keys(props1 || {}), ...Object.keys(props2 || {})])\n for (const prop of allProps) {\n // Ignorar propriedades que são arrays de filhos - essas mudanças são detectadas nos filhos\n if (prop === 'children' || prop === 'header' || prop === 'content' || prop === 'footer') {\n // Comparar apenas se os arrays têm tamanhos diferentes ou IDs diferentes\n const oldChildren = props1[prop] || []\n const newChildren = props2[prop] || []\n \n if (Array.isArray(oldChildren) && Array.isArray(newChildren)) {\n // Se os arrays têm tamanhos diferentes, a mudança será detectada nos filhos\n if (oldChildren.length !== newChildren.length) {\n changedProps.push(prop)\n } else {\n // Verificar se os IDs dos filhos são os mesmos (ordem pode ter mudado)\n const oldIds = oldChildren.map((c: any) => c?.id).filter(Boolean).sort()\n const newIds = newChildren.map((c: any) => c?.id).filter(Boolean).sort()\n if (JSON.stringify(oldIds) !== JSON.stringify(newIds)) {\n changedProps.push(prop)\n }\n }\n } else if (JSON.stringify(oldChildren) !== JSON.stringify(newChildren)) {\n changedProps.push(prop)\n }\n } else {\n // Para outras propriedades, comparar normalmente\n if (JSON.stringify(props1[prop]) !== JSON.stringify(props2[prop])) {\n changedProps.push(prop)\n }\n }\n }\n\n return { different: changedProps.length > 0, changedProps }\n}\n\n/**\n * Detecta quais blocos foram modificados entre dois documentos\n * @param pageId - ID da página atual sendo editada (se omitido, usa \"home\" ou primeira página)\n * @returns Array de objetos com blockId e changedProps\n */\nexport function detectChangedBlocks(\n oldDoc: SiteDocument,\n newDoc: SiteDocument,\n pageId?: string,\n): Array<{ blockId: string; changedProps?: string[] }> {\n const changedBlocks: Array<{ blockId: string; changedProps?: string[] }> = []\n\n // Comparar a página que está sendo editada\n const findPage = (doc: SiteDocument) =>\n (pageId ? doc.pages.find((p) => p.id === pageId) : null)\n || doc.pages.find((p) => p.id === 'home')\n || doc.pages[0]\n\n const oldPage = findPage(oldDoc)\n const newPage = findPage(newDoc)\n\n if (!oldPage || !newPage) {\n return [] // Se não há páginas, não há mudanças\n }\n\n // Comparação rápida: se os IDs dos blocos raiz são os mesmos, não precisa verificar estrutura\n const oldRootIds = (oldPage.structure || []).map(b => b?.id).filter(Boolean).sort()\n const newRootIds = (newPage.structure || []).map(b => b?.id).filter(Boolean).sort()\n \n // Se ambos estão vazios, não há mudança estrutural\n if (oldRootIds.length === 0 && newRootIds.length === 0) {\n // Ambos vazios - não há estrutura para comparar, retornar vazio (sem mudanças)\n return []\n }\n \n if (JSON.stringify(oldRootIds) !== JSON.stringify(newRootIds)) {\n // Estrutura mudou (blocos adicionados/removidos na raiz)\n // Retornar mudança especial indicando mudança estrutural\n return [{ blockId: '__structural__', changedProps: ['children'] }]\n }\n\n // Comparar estrutura recursivamente\n const compareBlocks = (oldBlocks: Block[], newBlocks: Block[]): Array<{ blockId: string; changedProps?: string[] }> => {\n const localChangedBlocks: Array<{ blockId: string; changedProps?: string[] }> = []\n \n // Criar mapas de blocos por ID\n const oldBlocksMap = new Map<string, Block>()\n const newBlocksMap = new Map<string, Block>()\n\n const addToMap = (blocks: Block[], map: Map<string, Block>) => {\n for (const block of blocks) {\n if (!block || !block.id) continue\n map.set(block.id, block)\n const props = block.props as Record<string, any>\n if (props?.children && Array.isArray(props.children)) {\n addToMap(props.children as Block[], map)\n }\n if (block.type === 'card') {\n if (props.header && Array.isArray(props.header)) {\n addToMap(props.header as Block[], map)\n }\n if (props.content && Array.isArray(props.content)) {\n addToMap(props.content as Block[], map)\n }\n if (props.footer && Array.isArray(props.footer)) {\n addToMap(props.footer as Block[], map)\n }\n }\n }\n }\n\n addToMap(oldBlocks, oldBlocksMap)\n addToMap(newBlocks, newBlocksMap)\n\n // Verificar blocos que mudaram ou foram adicionados\n for (const [id, newBlock] of newBlocksMap) {\n const oldBlock = oldBlocksMap.get(id)\n if (!oldBlock) {\n // Novo bloco adicionado - mas não forçar recriação completa, apenas notar\n localChangedBlocks.push({ blockId: id })\n } else {\n const diff = blocksAreDifferent(oldBlock, newBlock)\n if (diff.different) {\n localChangedBlocks.push({ blockId: id, changedProps: diff.changedProps })\n }\n }\n }\n\n // Verificar blocos que foram removidos\n for (const [id] of oldBlocksMap) {\n if (!newBlocksMap.has(id)) {\n // Bloco foi removido - retornar vazio para forçar recriação completa\n return []\n }\n }\n\n return localChangedBlocks\n }\n\n const result = compareBlocks(oldPage.structure, newPage.structure)\n\n changedBlocks.push(...result)\n\n return changedBlocks\n}\n\n/**\n * Determina o tipo de mudança baseado no bloco e propriedade modificada\n */\nexport function getChangeType(_blockId: string, propName: string, blockType?: string): 'text' | 'layout' | 'visual' {\n // Mudanças visuais (cores, tema)\n const visualProps = ['color', 'bg', 'background', 'backgroundColor', 'primary', 'secondary', 'accent']\n if (visualProps.some((p) => propName.toLowerCase().includes(p))) {\n return 'visual'\n }\n\n // Mudanças de texto\n const textBlockTypes = ['heading', 'text', 'button', 'link']\n if (blockType && textBlockTypes.includes(blockType)) {\n if (propName === 'text' || propName === 'content') {\n return 'text'\n }\n }\n\n // Mudanças de layout (padrão)\n return 'layout'\n}\n\n/**\n * Verifica se apenas um bloco foi modificado\n */\nexport function isSingleBlockChange(changedBlocks: Array<{ blockId: string; changedProps?: string[] }>): boolean {\n return changedBlocks.length === 1\n}\n\n/**\n * Obtém IDs dos blocos modificados\n */\nexport function getChangedBlockIds(changedBlocks: Array<{ blockId: string; changedProps?: string[] }>): string[] {\n return changedBlocks.map((c) => c.blockId)\n}\n\n/**\n * Verifica se as mudanças são apenas visuais (cores, background, etc)\n */\nexport function isVisualChangeOnly(changedBlocks: Array<{ blockId: string; changedProps?: string[] }>): boolean {\n if (changedBlocks.length === 0) return false\n \n const visualProps = ['color', 'bg', 'background', 'backgroundColor', 'border', 'shadow', 'radius']\n \n for (const change of changedBlocks) {\n if (!change.changedProps) return false\n \n // Se todas as propriedades mudadas são visuais\n const allVisual = change.changedProps.every((prop) => \n visualProps.some((vp) => prop.toLowerCase().includes(vp.toLowerCase()))\n )\n \n if (!allVisual) return false\n }\n \n return true\n}\n"],"names":["blocksAreDifferent","block1","block2","props1","props2","changedProps","allProps","prop","oldChildren","newChildren","oldIds","c","newIds","detectChangedBlocks","oldDoc","newDoc","pageId","changedBlocks","findPage","doc","p","oldPage","newPage","oldRootIds","b","newRootIds","result","oldBlocks","newBlocks","localChangedBlocks","oldBlocksMap","newBlocksMap","addToMap","blocks","map","block","props","id","newBlock","oldBlock","diff"],"mappings":"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"}
package/dist/utils/cn.js CHANGED
@@ -1,5 +1,5 @@
1
- import { clsx as o } from "../node_modules/clsx/dist/clsx.js";
2
- import { twMerge as t } from "../node_modules/tailwind-merge/dist/bundle-mjs.js";
1
+ import { clsx as o } from "clsx";
2
+ import { twMerge as t } from "tailwind-merge";
3
3
  function n(...r) {
4
4
  return t(o(r));
5
5
  }
@@ -0,0 +1,24 @@
1
+ import { UploadConfig } from '../editor/LandingPageEditor';
2
+ /**
3
+ * Detect if a string is a Data URL
4
+ */
5
+ export declare function isDataURL(str: string): boolean;
6
+ /**
7
+ * Convert Data URL to Blob
8
+ */
9
+ export declare function dataURLtoBlob(dataURL: string): Blob;
10
+ /**
11
+ * Upload a Data URL to Supabase Storage
12
+ * @param dataURL - The data URL to upload
13
+ * @param uploadConfig - Upload configuration (tenantId, schoolId, siteId, authToken)
14
+ * @returns Promise with the public URL of the uploaded asset
15
+ */
16
+ export declare function uploadDataURL(dataURL: string, uploadConfig: UploadConfig): Promise<string>;
17
+ /**
18
+ * Process a block recursively to upload all Data URLs
19
+ * @param block - The block to process
20
+ * @param uploadConfig - Upload configuration
21
+ * @returns Promise with the processed block (Data URLs replaced with uploaded URLs)
22
+ */
23
+ export declare function processBlockDataURLs(block: any, uploadConfig: UploadConfig): Promise<any>;
24
+ //# sourceMappingURL=dataURLUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dataURLUtils.d.ts","sourceRoot":"","sources":["../../src/utils/dataURLUtils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAE3D;;GAEG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAE9C;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAUnD;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,YAAY,GACzB,OAAO,CAAC,MAAM,CAAC,CA+BjB;AAED;;;;;GAKG;AACH,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,GAAG,EACV,YAAY,EAAE,YAAY,GACzB,OAAO,CAAC,GAAG,CAAC,CAqCd"}
@@ -0,0 +1,47 @@
1
+ function i(r) {
2
+ return r?.startsWith("data:image/") || r?.startsWith("data:video/");
3
+ }
4
+ function d(r) {
5
+ const t = r.split(","), e = t[0].match(/:(.*?);/)?.[1] || "image/png", a = atob(t[1]);
6
+ let o = a.length;
7
+ const s = new Uint8Array(o);
8
+ for (; o--; )
9
+ s[o] = a.charCodeAt(o);
10
+ return new Blob([s], { type: e });
11
+ }
12
+ async function c(r, t) {
13
+ if (!t?.tenantId) throw new Error("Upload config não disponível");
14
+ const e = d(r), a = new File([e], "image.png", { type: e.type }), o = new FormData();
15
+ o.append("file", a);
16
+ const s = "http://localhost:3001", n = new URLSearchParams();
17
+ n.append("tenantId", t.tenantId), n.append("assetType", "image"), t.schoolId && n.append("schoolId", t.schoolId), t.siteId && n.append("siteId", t.siteId);
18
+ const l = await fetch(`${s}/api/site-assets/upload?${n}`, {
19
+ method: "POST",
20
+ headers: {
21
+ Authorization: `Bearer ${t.authToken}`
22
+ },
23
+ body: o
24
+ });
25
+ if (!l.ok) {
26
+ const p = await l.json().catch(() => ({}));
27
+ throw new Error(p.message || "Upload falhou");
28
+ }
29
+ return (await l.json()).url;
30
+ }
31
+ async function g(r, t) {
32
+ const e = { ...r };
33
+ if (e.props) {
34
+ const a = { ...e.props };
35
+ a.logo && (typeof a.logo == "string" && i(a.logo) ? a.logo = await c(a.logo, t) : typeof a.logo == "object" && a.logo.src && i(a.logo.src) && (a.logo = { ...a.logo, src: await c(a.logo.src, t) })), a.image && typeof a.image == "string" && i(a.image) && (a.image = await c(a.image, t)), a.backgroundImage && typeof a.backgroundImage == "string" && i(a.backgroundImage) && (a.backgroundImage = await c(a.backgroundImage, t)), a.children && Array.isArray(a.children) && (a.children = await Promise.all(
36
+ a.children.map((o) => g(o, t))
37
+ )), e.props = a;
38
+ }
39
+ return e;
40
+ }
41
+ export {
42
+ d as dataURLtoBlob,
43
+ i as isDataURL,
44
+ g as processBlockDataURLs,
45
+ c as uploadDataURL
46
+ };
47
+ //# sourceMappingURL=dataURLUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dataURLUtils.js","sources":["../../src/utils/dataURLUtils.ts"],"sourcesContent":["/**\n * Data URL Utilities\n * Helper functions for handling Data URLs (base64 encoded images/videos)\n * and uploading them to Supabase Storage\n */\n\nimport { UploadConfig } from '../editor/LandingPageEditor';\n\n/**\n * Detect if a string is a Data URL\n */\nexport function isDataURL(str: string): boolean {\n return str?.startsWith('data:image/') || str?.startsWith('data:video/');\n}\n\n/**\n * Convert Data URL to Blob\n */\nexport function dataURLtoBlob(dataURL: string): Blob {\n const arr = dataURL.split(',');\n const mime = arr[0].match(/:(.*?);/)?.[1] || 'image/png';\n const bstr = atob(arr[1]);\n let n = bstr.length;\n const u8arr = new Uint8Array(n);\n while (n--) {\n u8arr[n] = bstr.charCodeAt(n);\n }\n return new Blob([u8arr], { type: mime });\n}\n\n/**\n * Upload a Data URL to Supabase Storage\n * @param dataURL - The data URL to upload\n * @param uploadConfig - Upload configuration (tenantId, schoolId, siteId, authToken)\n * @returns Promise with the public URL of the uploaded asset\n */\nexport async function uploadDataURL(\n dataURL: string,\n uploadConfig: UploadConfig\n): Promise<string> {\n if (!uploadConfig?.tenantId) throw new Error('Upload config não disponível');\n\n const blob = dataURLtoBlob(dataURL);\n const file = new File([blob], 'image.png', { type: blob.type });\n\n const formData = new FormData();\n formData.append('file', file);\n\n const apiUrl = (import.meta as any).env.VITE_API_URL || 'http://localhost:3001';\n const params = new URLSearchParams();\n params.append('tenantId', uploadConfig.tenantId);\n params.append('assetType', 'image');\n if (uploadConfig.schoolId) params.append('schoolId', uploadConfig.schoolId);\n if (uploadConfig.siteId) params.append('siteId', uploadConfig.siteId);\n\n const res = await fetch(`${apiUrl}/api/site-assets/upload?${params}`, {\n method: 'POST',\n headers: {\n 'Authorization': `Bearer ${uploadConfig.authToken}`,\n },\n body: formData,\n });\n\n if (!res.ok) {\n const errorData = await res.json().catch(() => ({}));\n throw new Error(errorData.message || 'Upload falhou');\n }\n\n const data = await res.json();\n return data.url;\n}\n\n/**\n * Process a block recursively to upload all Data URLs\n * @param block - The block to process\n * @param uploadConfig - Upload configuration\n * @returns Promise with the processed block (Data URLs replaced with uploaded URLs)\n */\nexport async function processBlockDataURLs(\n block: any,\n uploadConfig: UploadConfig\n): Promise<any> {\n const newBlock = { ...block };\n\n // Processar props que podem ter imagens\n if (newBlock.props) {\n const newProps = { ...newBlock.props };\n\n // Processar logo (pode ser string ou objeto)\n if (newProps.logo) {\n if (typeof newProps.logo === 'string' && isDataURL(newProps.logo)) {\n newProps.logo = await uploadDataURL(newProps.logo, uploadConfig);\n } else if (typeof newProps.logo === 'object' && newProps.logo.src && isDataURL(newProps.logo.src)) {\n newProps.logo = { ...newProps.logo, src: await uploadDataURL(newProps.logo.src, uploadConfig) };\n }\n }\n\n // Processar image prop (hero, etc)\n if (newProps.image && typeof newProps.image === 'string' && isDataURL(newProps.image)) {\n newProps.image = await uploadDataURL(newProps.image, uploadConfig);\n }\n\n // Processar backgroundImage\n if (newProps.backgroundImage && typeof newProps.backgroundImage === 'string' && isDataURL(newProps.backgroundImage)) {\n newProps.backgroundImage = await uploadDataURL(newProps.backgroundImage, uploadConfig);\n }\n\n // Processar children recursivamente\n if (newProps.children && Array.isArray(newProps.children)) {\n newProps.children = await Promise.all(\n newProps.children.map((child: any) => processBlockDataURLs(child, uploadConfig))\n );\n }\n\n newBlock.props = newProps;\n }\n\n return newBlock;\n}\n"],"names":["isDataURL","str","dataURLtoBlob","dataURL","arr","mime","bstr","n","u8arr","uploadDataURL","uploadConfig","blob","file","formData","apiUrl","params","res","errorData","processBlockDataURLs","block","newBlock","newProps","child"],"mappings":"AAWO,SAASA,EAAUC,GAAsB;AAC9C,SAAOA,GAAK,WAAW,aAAa,KAAKA,GAAK,WAAW,aAAa;AACxE;AAKO,SAASC,EAAcC,GAAuB;AACnD,QAAMC,IAAMD,EAAQ,MAAM,GAAG,GACvBE,IAAOD,EAAI,CAAC,EAAE,MAAM,SAAS,IAAI,CAAC,KAAK,aACvCE,IAAO,KAAKF,EAAI,CAAC,CAAC;AACxB,MAAIG,IAAID,EAAK;AACb,QAAME,IAAQ,IAAI,WAAWD,CAAC;AAC9B,SAAOA;AACL,IAAAC,EAAMD,CAAC,IAAID,EAAK,WAAWC,CAAC;AAE9B,SAAO,IAAI,KAAK,CAACC,CAAK,GAAG,EAAE,MAAMH,GAAM;AACzC;AAQA,eAAsBI,EACpBN,GACAO,GACiB;AACjB,MAAI,CAACA,GAAc,SAAU,OAAM,IAAI,MAAM,8BAA8B;AAE3E,QAAMC,IAAOT,EAAcC,CAAO,GAC5BS,IAAO,IAAI,KAAK,CAACD,CAAI,GAAG,aAAa,EAAE,MAAMA,EAAK,MAAM,GAExDE,IAAW,IAAI,SAAA;AACrB,EAAAA,EAAS,OAAO,QAAQD,CAAI;AAE5B,QAAME,IAAkD,yBAClDC,IAAS,IAAI,gBAAA;AACnB,EAAAA,EAAO,OAAO,YAAYL,EAAa,QAAQ,GAC/CK,EAAO,OAAO,aAAa,OAAO,GAC9BL,EAAa,YAAUK,EAAO,OAAO,YAAYL,EAAa,QAAQ,GACtEA,EAAa,UAAQK,EAAO,OAAO,UAAUL,EAAa,MAAM;AAEpE,QAAMM,IAAM,MAAM,MAAM,GAAGF,CAAM,2BAA2BC,CAAM,IAAI;AAAA,IACpE,QAAQ;AAAA,IACR,SAAS;AAAA,MACP,eAAiB,UAAUL,EAAa,SAAS;AAAA,IAAA;AAAA,IAEnD,MAAMG;AAAA,EAAA,CACP;AAED,MAAI,CAACG,EAAI,IAAI;AACX,UAAMC,IAAY,MAAMD,EAAI,KAAA,EAAO,MAAM,OAAO,CAAA,EAAG;AACnD,UAAM,IAAI,MAAMC,EAAU,WAAW,eAAe;AAAA,EACtD;AAGA,UADa,MAAMD,EAAI,KAAA,GACX;AACd;AAQA,eAAsBE,EACpBC,GACAT,GACc;AACd,QAAMU,IAAW,EAAE,GAAGD,EAAA;AAGtB,MAAIC,EAAS,OAAO;AAClB,UAAMC,IAAW,EAAE,GAAGD,EAAS,MAAA;AAG/B,IAAIC,EAAS,SACP,OAAOA,EAAS,QAAS,YAAYrB,EAAUqB,EAAS,IAAI,IAC9DA,EAAS,OAAO,MAAMZ,EAAcY,EAAS,MAAMX,CAAY,IACtD,OAAOW,EAAS,QAAS,YAAYA,EAAS,KAAK,OAAOrB,EAAUqB,EAAS,KAAK,GAAG,MAC9FA,EAAS,OAAO,EAAE,GAAGA,EAAS,MAAM,KAAK,MAAMZ,EAAcY,EAAS,KAAK,KAAKX,CAAY,EAAA,KAK5FW,EAAS,SAAS,OAAOA,EAAS,SAAU,YAAYrB,EAAUqB,EAAS,KAAK,MAClFA,EAAS,QAAQ,MAAMZ,EAAcY,EAAS,OAAOX,CAAY,IAI/DW,EAAS,mBAAmB,OAAOA,EAAS,mBAAoB,YAAYrB,EAAUqB,EAAS,eAAe,MAChHA,EAAS,kBAAkB,MAAMZ,EAAcY,EAAS,iBAAiBX,CAAY,IAInFW,EAAS,YAAY,MAAM,QAAQA,EAAS,QAAQ,MACtDA,EAAS,WAAW,MAAM,QAAQ;AAAA,MAChCA,EAAS,SAAS,IAAI,CAACC,MAAeJ,EAAqBI,GAAOZ,CAAY,CAAC;AAAA,IAAA,IAInFU,EAAS,QAAQC;AAAA,EACnB;AAEA,SAAOD;AACT;"}
@@ -1,9 +1,9 @@
1
- import { SiteDocumentV2 } from '../engine/schema/siteDocument';
1
+ import { SiteDocument } from '../engine/schema/siteDocument';
2
2
  /**
3
3
  * Gera hash do documento baseado em seu conteúdo
4
4
  * Usa JSON.stringify para serializar e depois hash
5
5
  */
6
- export declare function hashDocument(document: SiteDocumentV2): string;
6
+ export declare function hashDocument(document: SiteDocument): string;
7
7
  /**
8
8
  * Gera hash de um bloco específico
9
9
  * Útil para cache de blocos individuais
@@ -1 +1 @@
1
- {"version":3,"file":"documentHash.d.ts","sourceRoot":"","sources":["../../src/utils/documentHash.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AAe9D;;;GAGG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,CAU7D;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM,CAQ5C"}
1
+ {"version":3,"file":"documentHash.d.ts","sourceRoot":"","sources":["../../src/utils/documentHash.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AAgB5D;;;GAGG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM,CAU3D;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM,CAQ5C"}
@@ -1,18 +1,19 @@
1
- function e(t) {
1
+ import { logger as n } from "./logger.js";
2
+ function o(t) {
2
3
  let r = 5381;
3
- for (let n = 0; n < t.length; n++)
4
- r = (r << 5) + r + t.charCodeAt(n), r = r & r;
4
+ for (let e = 0; e < t.length; e++)
5
+ r = (r << 5) + r + t.charCodeAt(e), r = r & r;
5
6
  return Math.abs(r).toString(36);
6
7
  }
7
- function o(t) {
8
+ function h(t) {
8
9
  try {
9
10
  const r = JSON.stringify(t, null, 0);
10
- return e(r);
11
+ return o(r);
11
12
  } catch (r) {
12
- return console.error("Error hashing document:", r), Date.now().toString(36);
13
+ return n.error("Error hashing document:", r), Date.now().toString(36);
13
14
  }
14
15
  }
15
16
  export {
16
- o as hashDocument
17
+ h as hashDocument
17
18
  };
18
19
  //# sourceMappingURL=documentHash.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"documentHash.js","sources":["../../src/utils/documentHash.ts"],"sourcesContent":["/**\n * Document Hash\n * Funções para gerar hash de documentos para cache\n */\n\nimport { SiteDocumentV2 } from '../engine/schema/siteDocument'\n\n/**\n * Gera hash simples de uma string\n * Usa algoritmo djb2 (simples e rápido)\n */\nfunction simpleHash(str: string): string {\n let hash = 5381\n for (let i = 0; i < str.length; i++) {\n hash = ((hash << 5) + hash) + str.charCodeAt(i)\n hash = hash & hash // Convert to 32bit integer\n }\n return Math.abs(hash).toString(36)\n}\n\n/**\n * Gera hash do documento baseado em seu conteúdo\n * Usa JSON.stringify para serializar e depois hash\n */\nexport function hashDocument(document: SiteDocumentV2): string {\n try {\n // Serializar documento (sem espaços para consistência)\n const serialized = JSON.stringify(document, null, 0)\n return simpleHash(serialized)\n } catch (error) {\n console.error('Error hashing document:', error)\n // Fallback: usar timestamp se houver erro\n return Date.now().toString(36)\n }\n}\n\n/**\n * Gera hash de um bloco específico\n * Útil para cache de blocos individuais\n */\nexport function hashBlock(block: any): string {\n try {\n const serialized = JSON.stringify(block, null, 0)\n return simpleHash(serialized)\n } catch (error) {\n console.error('Error hashing block:', error)\n return Date.now().toString(36)\n }\n}\n"],"names":["simpleHash","str","hash","i","hashDocument","document","serialized","error"],"mappings":"AAWA,SAASA,EAAWC,GAAqB;AACvC,MAAIC,IAAO;AACX,WAASC,IAAI,GAAGA,IAAIF,EAAI,QAAQE;AAC9B,IAAAD,KAASA,KAAQ,KAAKA,IAAQD,EAAI,WAAWE,CAAC,GAC9CD,IAAOA,IAAOA;AAEhB,SAAO,KAAK,IAAIA,CAAI,EAAE,SAAS,EAAE;AACnC;AAMO,SAASE,EAAaC,GAAkC;AAC7D,MAAI;AAEF,UAAMC,IAAa,KAAK,UAAUD,GAAU,MAAM,CAAC;AACnD,WAAOL,EAAWM,CAAU;AAAA,EAC9B,SAASC,GAAO;AACd,mBAAQ,MAAM,2BAA2BA,CAAK,GAEvC,KAAK,MAAM,SAAS,EAAE;AAAA,EAC/B;AACF;"}
1
+ {"version":3,"file":"documentHash.js","sources":["../../src/utils/documentHash.ts"],"sourcesContent":["/**\n * Document Hash\n * Funções para gerar hash de documentos para cache\n */\n\nimport { SiteDocument } from '../engine/schema/siteDocument'\nimport { logger } from './logger'\n\n/**\n * Gera hash simples de uma string\n * Usa algoritmo djb2 (simples e rápido)\n */\nfunction simpleHash(str: string): string {\n let hash = 5381\n for (let i = 0; i < str.length; i++) {\n hash = ((hash << 5) + hash) + str.charCodeAt(i)\n hash = hash & hash // Convert to 32bit integer\n }\n return Math.abs(hash).toString(36)\n}\n\n/**\n * Gera hash do documento baseado em seu conteúdo\n * Usa JSON.stringify para serializar e depois hash\n */\nexport function hashDocument(document: SiteDocument): string {\n try {\n // Serializar documento (sem espaços para consistência)\n const serialized = JSON.stringify(document, null, 0)\n return simpleHash(serialized)\n } catch (error) {\n logger.error('Error hashing document:', error)\n // Fallback: usar timestamp se houver erro\n return Date.now().toString(36)\n }\n}\n\n/**\n * Gera hash de um bloco específico\n * Útil para cache de blocos individuais\n */\nexport function hashBlock(block: any): string {\n try {\n const serialized = JSON.stringify(block, null, 0)\n return simpleHash(serialized)\n } catch (error) {\n logger.error('Error hashing block:', error)\n return Date.now().toString(36)\n }\n}\n"],"names":["simpleHash","str","hash","i","hashDocument","document","serialized","error","logger"],"mappings":";AAYA,SAASA,EAAWC,GAAqB;AACvC,MAAIC,IAAO;AACX,WAASC,IAAI,GAAGA,IAAIF,EAAI,QAAQE;AAC9B,IAAAD,KAASA,KAAQ,KAAKA,IAAQD,EAAI,WAAWE,CAAC,GAC9CD,IAAOA,IAAOA;AAEhB,SAAO,KAAK,IAAIA,CAAI,EAAE,SAAS,EAAE;AACnC;AAMO,SAASE,EAAaC,GAAgC;AAC3D,MAAI;AAEF,UAAMC,IAAa,KAAK,UAAUD,GAAU,MAAM,CAAC;AACnD,WAAOL,EAAWM,CAAU;AAAA,EAC9B,SAASC,GAAO;AACd,WAAAC,EAAO,MAAM,2BAA2BD,CAAK,GAEtC,KAAK,MAAM,SAAS,EAAE;AAAA,EAC/B;AACF;"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Logger utility — silenciável em produção
3
+ *
4
+ * Em dev: exibe tudo.
5
+ * Em produção: só warn/error (e somente se explicitamente habilitado).
6
+ */
7
+ export declare const logger: {
8
+ readonly log: (...data: any[]) => void;
9
+ readonly warn: (...data: any[]) => void;
10
+ readonly error: (...data: any[]) => void;
11
+ readonly debug: (...data: any[]) => void;
12
+ };
13
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,eAAO,MAAM,MAAM;;;;;CAKT,CAAC"}
@@ -0,0 +1,13 @@
1
+ const o = typeof process < "u" ? process.env.NODE_ENV !== "production" : typeof import.meta < "u" && !1;
2
+ function e() {
3
+ }
4
+ const n = {
5
+ log: o ? console.log.bind(console) : e,
6
+ warn: console.warn.bind(console),
7
+ error: console.error.bind(console),
8
+ debug: o ? console.log.bind(console) : e
9
+ };
10
+ export {
11
+ n as logger
12
+ };
13
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sources":["../../src/utils/logger.ts"],"sourcesContent":["/**\n * Logger utility — silenciável em produção\n *\n * Em dev: exibe tudo.\n * Em produção: só warn/error (e somente se explicitamente habilitado).\n */\n\nconst isDev =\n typeof process !== \"undefined\"\n ? process.env.NODE_ENV !== \"production\"\n : typeof import.meta !== \"undefined\" &&\n (import.meta as any).env?.DEV === true;\n\nfunction noop() {}\n\nexport const logger = {\n log: isDev ? console.log.bind(console) : noop,\n warn: console.warn.bind(console),\n error: console.error.bind(console),\n debug: isDev ? console.log.bind(console) : noop,\n} as const;\n"],"names":["isDev","noop","logger"],"mappings":"AAOA,MAAMA,IACJ,OAAO,UAAY,MACf,QAAQ,IAAI,aAAa,eACzB,OAAO,cAAgB,OACtB;AAEP,SAASC,IAAO;AAAC;AAEV,MAAMC,IAAS;AAAA,EACpB,KAAKF,IAAQ,QAAQ,IAAI,KAAK,OAAO,IAAIC;AAAA,EACzC,MAAM,QAAQ,KAAK,KAAK,OAAO;AAAA,EAC/B,OAAO,QAAQ,MAAM,KAAK,OAAO;AAAA,EACjC,OAAOD,IAAQ,QAAQ,IAAI,KAAK,OAAO,IAAIC;AAC7C;"}
@@ -1,4 +1,4 @@
1
- import { NavbarBlock, SiteDocumentV2, SitePage } from '../engine/schema/siteDocument';
1
+ import { NavbarBlock, SiteDocument, SitePage } from '../engine/schema/siteDocument';
2
2
  import { Patch } from '../engine/patch/types';
3
3
  /**
4
4
  * Informação sobre um bloco navbar encontrado
@@ -18,7 +18,7 @@ interface NavbarLink {
18
18
  /**
19
19
  * Encontra todos os blocos navbar em todas as páginas do documento
20
20
  */
21
- export declare function findNavbarBlocks(document: SiteDocumentV2): NavbarBlockInfo[];
21
+ export declare function findNavbarBlocks(document: SiteDocument): NavbarBlockInfo[];
22
22
  /**
23
23
  * Gera array de links do navbar a partir das páginas do documento
24
24
  */
@@ -27,6 +27,6 @@ export declare function generateNavbarLinks(pages: SitePage[]): NavbarLink[];
27
27
  * Sincroniza os links de todos os navbars com as páginas do documento
28
28
  * Retorna array de patches para aplicar
29
29
  */
30
- export declare function syncNavbarLinks(document: SiteDocumentV2): Patch;
30
+ export declare function syncNavbarLinks(document: SiteDocument): Patch;
31
31
  export {};
32
32
  //# sourceMappingURL=navbarSync.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"navbarSync.d.ts","sourceRoot":"","sources":["../../src/utils/navbarSync.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAS,WAAW,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAC5F,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAG7C;;GAEG;AACH,UAAU,eAAe;IACvB,KAAK,EAAE,WAAW,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,UAAU,UAAU;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAkDD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,cAAc,GAAG,eAAe,EAAE,CAQ5E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,UAAU,EAAE,CAKnE;AAeD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,cAAc,GAAG,KAAK,CAoC/D"}
1
+ {"version":3,"file":"navbarSync.d.ts","sourceRoot":"","sources":["../../src/utils/navbarSync.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAS,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAC1F,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAI7C;;GAEG;AACH,UAAU,eAAe;IACvB,KAAK,EAAE,WAAW,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,UAAU,UAAU;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAkDD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,YAAY,GAAG,eAAe,EAAE,CAQ1E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,UAAU,EAAE,CAKnE;AAeD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,YAAY,GAAG,KAAK,CAoC7D"}
@@ -1,55 +1,56 @@
1
1
  import { PatchBuilder as s } from "../engine/patch/PatchBuilder.js";
2
- function e(t, n, o = []) {
2
+ import { logger as a } from "./logger.js";
3
+ function e(t, o, n = []) {
3
4
  for (const c of t) {
4
- c.type === "navbar" && o.push({
5
+ c.type === "navbar" && n.push({
5
6
  block: c,
6
- pageId: n,
7
+ pageId: o,
7
8
  blockId: c.id
8
9
  });
9
10
  const r = c.props;
10
- r?.children && Array.isArray(r.children) && e(r.children, n, o), c.type === "card" && (r?.header && Array.isArray(r.header) && e(r.header, n, o), r?.content && Array.isArray(r.content) && e(r.content, n, o), r?.footer && Array.isArray(r.footer) && e(r.footer, n, o)), ["section", "container", "box", "stack", "grid"].includes(c.type) && r?.children && Array.isArray(r.children) && e(r.children, n, o);
11
+ r?.children && Array.isArray(r.children) && e(r.children, o, n), c.type === "card" && (r?.header && Array.isArray(r.header) && e(r.header, o, n), r?.content && Array.isArray(r.content) && e(r.content, o, n), r?.footer && Array.isArray(r.footer) && e(r.footer, o, n)), ["section", "container", "box", "stack", "grid"].includes(c.type) && r?.children && Array.isArray(r.children) && e(r.children, o, n);
11
12
  }
12
- return o;
13
- }
14
- function a(t) {
15
- const n = [];
16
- for (const o of t.pages)
17
- e(o.structure, o.id, n);
18
13
  return n;
19
14
  }
20
15
  function f(t) {
21
- return t.map((n) => ({
22
- text: n.name,
23
- href: n.slug === "home" ? "/" : `/p/${n.slug}`
24
- }));
16
+ const o = [];
17
+ for (const n of t.pages)
18
+ e(n.structure, n.id, o);
19
+ return o;
25
20
  }
26
21
  function l(t) {
22
+ return t.map((o) => ({
23
+ text: o.name,
24
+ href: o.slug === "home" ? "/" : `/p/${o.slug}`
25
+ }));
26
+ }
27
+ function u(t) {
27
28
  return t.props._autoSync !== !1;
28
29
  }
29
- function p(t) {
30
- const n = [], o = f(t.pages), c = a(t);
30
+ function h(t) {
31
+ const o = [], n = l(t.pages), c = f(t);
31
32
  for (const r of c)
32
- if (l(r.block))
33
+ if (u(r.block))
33
34
  try {
34
35
  const i = s.updateBlockProp(
35
36
  t,
36
37
  r.pageId,
37
38
  r.blockId,
38
39
  "links",
39
- o
40
+ n
40
41
  );
41
- n.push(...i);
42
+ o.push(...i);
42
43
  } catch (i) {
43
- console.warn(
44
+ a.warn(
44
45
  `Failed to sync navbar ${r.blockId} in page ${r.pageId}:`,
45
46
  i
46
47
  );
47
48
  }
48
- return n;
49
+ return o;
49
50
  }
50
51
  export {
51
- a as findNavbarBlocks,
52
- f as generateNavbarLinks,
53
- p as syncNavbarLinks
52
+ f as findNavbarBlocks,
53
+ l as generateNavbarLinks,
54
+ h as syncNavbarLinks
54
55
  };
55
56
  //# sourceMappingURL=navbarSync.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"navbarSync.js","sources":["../../src/utils/navbarSync.ts"],"sourcesContent":["/**\n * Navbar Sync - Sincronização automática de links do navbar\n * Sistema que mantém os links do navbar atualizados com as páginas do documento\n */\n\nimport { Block, NavbarBlock, SiteDocumentV2, SitePage } from \"@/engine/schema/siteDocument\";\nimport { Patch } from \"@/engine/patch/types\";\nimport { PatchBuilder } from \"@/engine/patch/PatchBuilder\";\n\n/**\n * Informação sobre um bloco navbar encontrado\n */\ninterface NavbarBlockInfo {\n block: NavbarBlock;\n pageId: string;\n blockId: string;\n}\n\n/**\n * Link do navbar\n */\ninterface NavbarLink {\n text: string;\n href: string;\n}\n\n/**\n * Busca recursiva por blocos navbar na estrutura\n */\nfunction findNavbarBlocksInStructure(\n structure: Block[],\n pageId: string,\n navbars: NavbarBlockInfo[] = []\n): NavbarBlockInfo[] {\n for (const block of structure) {\n // Se é um navbar, adiciona à lista\n if (block.type === \"navbar\") {\n navbars.push({\n block: block as NavbarBlock,\n pageId,\n blockId: block.id,\n });\n }\n\n // Busca recursiva em children\n const props = block.props as any;\n if (props?.children && Array.isArray(props.children)) {\n findNavbarBlocksInStructure(props.children, pageId, navbars);\n }\n\n // Busca em slots de card\n if (block.type === \"card\") {\n if (props?.header && Array.isArray(props.header)) {\n findNavbarBlocksInStructure(props.header, pageId, navbars);\n }\n if (props?.content && Array.isArray(props.content)) {\n findNavbarBlocksInStructure(props.content, pageId, navbars);\n }\n if (props?.footer && Array.isArray(props.footer)) {\n findNavbarBlocksInStructure(props.footer, pageId, navbars);\n }\n }\n\n // Busca em children de section/container/box/stack/grid\n if ([\"section\", \"container\", \"box\", \"stack\", \"grid\"].includes(block.type)) {\n if (props?.children && Array.isArray(props.children)) {\n findNavbarBlocksInStructure(props.children, pageId, navbars);\n }\n }\n }\n\n return navbars;\n}\n\n/**\n * Encontra todos os blocos navbar em todas as páginas do documento\n */\nexport function findNavbarBlocks(document: SiteDocumentV2): NavbarBlockInfo[] {\n const navbars: NavbarBlockInfo[] = [];\n\n for (const page of document.pages) {\n findNavbarBlocksInStructure(page.structure, page.id, navbars);\n }\n\n return navbars;\n}\n\n/**\n * Gera array de links do navbar a partir das páginas do documento\n */\nexport function generateNavbarLinks(pages: SitePage[]): NavbarLink[] {\n return pages.map((page) => ({\n text: page.name,\n href: page.slug === \"home\" ? \"/\" : `/p/${page.slug}`,\n }));\n}\n\n/**\n * Verifica se um bloco navbar deve ter sincronização automática\n */\nfunction shouldAutoSync(navbarBlock: NavbarBlock): boolean {\n const props = navbarBlock.props as any;\n // Se _autoSync foi explicitamente setado como false, respeitar\n if (props._autoSync === false) {\n return false;\n }\n // Por padrão, sincronizar (undefined ou true)\n return true;\n}\n\n/**\n * Sincroniza os links de todos os navbars com as páginas do documento\n * Retorna array de patches para aplicar\n */\nexport function syncNavbarLinks(document: SiteDocumentV2): Patch {\n const patches: Patch = [];\n\n // Gera links a partir das páginas\n const links = generateNavbarLinks(document.pages);\n\n // Encontra todos os navbars\n const navbars = findNavbarBlocks(document);\n\n // Para cada navbar, cria patch de atualização\n for (const navbarInfo of navbars) {\n // Verifica se deve sincronizar\n if (!shouldAutoSync(navbarInfo.block)) {\n continue;\n }\n\n try {\n // Cria patch para atualizar a propriedade links\n const patch = PatchBuilder.updateBlockProp(\n document,\n navbarInfo.pageId,\n navbarInfo.blockId,\n \"links\",\n links\n );\n\n patches.push(...patch);\n } catch (error) {\n console.warn(\n `Failed to sync navbar ${navbarInfo.blockId} in page ${navbarInfo.pageId}:`,\n error\n );\n }\n }\n\n return patches;\n}\n"],"names":["findNavbarBlocksInStructure","structure","pageId","navbars","block","props","findNavbarBlocks","document","page","generateNavbarLinks","pages","shouldAutoSync","navbarBlock","syncNavbarLinks","patches","links","navbarInfo","patch","PatchBuilder","error"],"mappings":";AA6BA,SAASA,EACPC,GACAC,GACAC,IAA6B,CAAA,GACV;AACnB,aAAWC,KAASH,GAAW;AAE7B,IAAIG,EAAM,SAAS,YACjBD,EAAQ,KAAK;AAAA,MACX,OAAAC;AAAA,MACA,QAAAF;AAAA,MACA,SAASE,EAAM;AAAA,IAAA,CAChB;AAIH,UAAMC,IAAQD,EAAM;AACpB,IAAIC,GAAO,YAAY,MAAM,QAAQA,EAAM,QAAQ,KACjDL,EAA4BK,EAAM,UAAUH,GAAQC,CAAO,GAIzDC,EAAM,SAAS,WACbC,GAAO,UAAU,MAAM,QAAQA,EAAM,MAAM,KAC7CL,EAA4BK,EAAM,QAAQH,GAAQC,CAAO,GAEvDE,GAAO,WAAW,MAAM,QAAQA,EAAM,OAAO,KAC/CL,EAA4BK,EAAM,SAASH,GAAQC,CAAO,GAExDE,GAAO,UAAU,MAAM,QAAQA,EAAM,MAAM,KAC7CL,EAA4BK,EAAM,QAAQH,GAAQC,CAAO,IAKzD,CAAC,WAAW,aAAa,OAAO,SAAS,MAAM,EAAE,SAASC,EAAM,IAAI,KAClEC,GAAO,YAAY,MAAM,QAAQA,EAAM,QAAQ,KACjDL,EAA4BK,EAAM,UAAUH,GAAQC,CAAO;AAAA,EAGjE;AAEA,SAAOA;AACT;AAKO,SAASG,EAAiBC,GAA6C;AAC5E,QAAMJ,IAA6B,CAAA;AAEnC,aAAWK,KAAQD,EAAS;AAC1B,IAAAP,EAA4BQ,EAAK,WAAWA,EAAK,IAAIL,CAAO;AAG9D,SAAOA;AACT;AAKO,SAASM,EAAoBC,GAAiC;AACnE,SAAOA,EAAM,IAAI,CAACF,OAAU;AAAA,IAC1B,MAAMA,EAAK;AAAA,IACX,MAAMA,EAAK,SAAS,SAAS,MAAM,MAAMA,EAAK,IAAI;AAAA,EAAA,EAClD;AACJ;AAKA,SAASG,EAAeC,GAAmC;AAGzD,SAFcA,EAAY,MAEhB,cAAc;AAK1B;AAMO,SAASC,EAAgBN,GAAiC;AAC/D,QAAMO,IAAiB,CAAA,GAGjBC,IAAQN,EAAoBF,EAAS,KAAK,GAG1CJ,IAAUG,EAAiBC,CAAQ;AAGzC,aAAWS,KAAcb;AAEvB,QAAKQ,EAAeK,EAAW,KAAK;AAIpC,UAAI;AAEF,cAAMC,IAAQC,EAAa;AAAA,UACzBX;AAAA,UACAS,EAAW;AAAA,UACXA,EAAW;AAAA,UACX;AAAA,UACAD;AAAA,QAAA;AAGF,QAAAD,EAAQ,KAAK,GAAGG,CAAK;AAAA,MACvB,SAASE,GAAO;AACd,gBAAQ;AAAA,UACN,yBAAyBH,EAAW,OAAO,YAAYA,EAAW,MAAM;AAAA,UACxEG;AAAA,QAAA;AAAA,MAEJ;AAGF,SAAOL;AACT;"}
1
+ {"version":3,"file":"navbarSync.js","sources":["../../src/utils/navbarSync.ts"],"sourcesContent":["/**\n * Navbar Sync - Sincronização automática de links do navbar\n * Sistema que mantém os links do navbar atualizados com as páginas do documento\n */\n\nimport { Block, NavbarBlock, SiteDocument, SitePage } from \"@/engine/schema/siteDocument\";\nimport { Patch } from \"@/engine/patch/types\";\nimport { PatchBuilder } from \"@/engine/patch/PatchBuilder\";\nimport { logger } from \"./logger\";\n\n/**\n * Informação sobre um bloco navbar encontrado\n */\ninterface NavbarBlockInfo {\n block: NavbarBlock;\n pageId: string;\n blockId: string;\n}\n\n/**\n * Link do navbar\n */\ninterface NavbarLink {\n text: string;\n href: string;\n}\n\n/**\n * Busca recursiva por blocos navbar na estrutura\n */\nfunction findNavbarBlocksInStructure(\n structure: Block[],\n pageId: string,\n navbars: NavbarBlockInfo[] = []\n): NavbarBlockInfo[] {\n for (const block of structure) {\n // Se é um navbar, adiciona à lista\n if (block.type === \"navbar\") {\n navbars.push({\n block: block as NavbarBlock,\n pageId,\n blockId: block.id,\n });\n }\n\n // Busca recursiva em children\n const props = block.props as Record<string, any>;\n if (props?.children && Array.isArray(props.children)) {\n findNavbarBlocksInStructure(props.children, pageId, navbars);\n }\n\n // Busca em slots de card\n if (block.type === \"card\") {\n if (props?.header && Array.isArray(props.header)) {\n findNavbarBlocksInStructure(props.header, pageId, navbars);\n }\n if (props?.content && Array.isArray(props.content)) {\n findNavbarBlocksInStructure(props.content, pageId, navbars);\n }\n if (props?.footer && Array.isArray(props.footer)) {\n findNavbarBlocksInStructure(props.footer, pageId, navbars);\n }\n }\n\n // Busca em children de section/container/box/stack/grid\n if ([\"section\", \"container\", \"box\", \"stack\", \"grid\"].includes(block.type)) {\n if (props?.children && Array.isArray(props.children)) {\n findNavbarBlocksInStructure(props.children, pageId, navbars);\n }\n }\n }\n\n return navbars;\n}\n\n/**\n * Encontra todos os blocos navbar em todas as páginas do documento\n */\nexport function findNavbarBlocks(document: SiteDocument): NavbarBlockInfo[] {\n const navbars: NavbarBlockInfo[] = [];\n\n for (const page of document.pages) {\n findNavbarBlocksInStructure(page.structure, page.id, navbars);\n }\n\n return navbars;\n}\n\n/**\n * Gera array de links do navbar a partir das páginas do documento\n */\nexport function generateNavbarLinks(pages: SitePage[]): NavbarLink[] {\n return pages.map((page) => ({\n text: page.name,\n href: page.slug === \"home\" ? \"/\" : `/p/${page.slug}`,\n }));\n}\n\n/**\n * Verifica se um bloco navbar deve ter sincronização automática\n */\nfunction shouldAutoSync(navbarBlock: NavbarBlock): boolean {\n const props = navbarBlock.props as Record<string, any>;\n // Se _autoSync foi explicitamente setado como false, respeitar\n if (props._autoSync === false) {\n return false;\n }\n // Por padrão, sincronizar (undefined ou true)\n return true;\n}\n\n/**\n * Sincroniza os links de todos os navbars com as páginas do documento\n * Retorna array de patches para aplicar\n */\nexport function syncNavbarLinks(document: SiteDocument): Patch {\n const patches: Patch = [];\n\n // Gera links a partir das páginas\n const links = generateNavbarLinks(document.pages);\n\n // Encontra todos os navbars\n const navbars = findNavbarBlocks(document);\n\n // Para cada navbar, cria patch de atualização\n for (const navbarInfo of navbars) {\n // Verifica se deve sincronizar\n if (!shouldAutoSync(navbarInfo.block)) {\n continue;\n }\n\n try {\n // Cria patch para atualizar a propriedade links\n const patch = PatchBuilder.updateBlockProp(\n document,\n navbarInfo.pageId,\n navbarInfo.blockId,\n \"links\",\n links\n );\n\n patches.push(...patch);\n } catch (error) {\n logger.warn(\n `Failed to sync navbar ${navbarInfo.blockId} in page ${navbarInfo.pageId}:`,\n error\n );\n }\n }\n\n return patches;\n}\n"],"names":["findNavbarBlocksInStructure","structure","pageId","navbars","block","props","findNavbarBlocks","document","page","generateNavbarLinks","pages","shouldAutoSync","navbarBlock","syncNavbarLinks","patches","links","navbarInfo","patch","PatchBuilder","error","logger"],"mappings":";;AA8BA,SAASA,EACPC,GACAC,GACAC,IAA6B,CAAA,GACV;AACnB,aAAWC,KAASH,GAAW;AAE7B,IAAIG,EAAM,SAAS,YACjBD,EAAQ,KAAK;AAAA,MACX,OAAAC;AAAA,MACA,QAAAF;AAAA,MACA,SAASE,EAAM;AAAA,IAAA,CAChB;AAIH,UAAMC,IAAQD,EAAM;AACpB,IAAIC,GAAO,YAAY,MAAM,QAAQA,EAAM,QAAQ,KACjDL,EAA4BK,EAAM,UAAUH,GAAQC,CAAO,GAIzDC,EAAM,SAAS,WACbC,GAAO,UAAU,MAAM,QAAQA,EAAM,MAAM,KAC7CL,EAA4BK,EAAM,QAAQH,GAAQC,CAAO,GAEvDE,GAAO,WAAW,MAAM,QAAQA,EAAM,OAAO,KAC/CL,EAA4BK,EAAM,SAASH,GAAQC,CAAO,GAExDE,GAAO,UAAU,MAAM,QAAQA,EAAM,MAAM,KAC7CL,EAA4BK,EAAM,QAAQH,GAAQC,CAAO,IAKzD,CAAC,WAAW,aAAa,OAAO,SAAS,MAAM,EAAE,SAASC,EAAM,IAAI,KAClEC,GAAO,YAAY,MAAM,QAAQA,EAAM,QAAQ,KACjDL,EAA4BK,EAAM,UAAUH,GAAQC,CAAO;AAAA,EAGjE;AAEA,SAAOA;AACT;AAKO,SAASG,EAAiBC,GAA2C;AAC1E,QAAMJ,IAA6B,CAAA;AAEnC,aAAWK,KAAQD,EAAS;AAC1B,IAAAP,EAA4BQ,EAAK,WAAWA,EAAK,IAAIL,CAAO;AAG9D,SAAOA;AACT;AAKO,SAASM,EAAoBC,GAAiC;AACnE,SAAOA,EAAM,IAAI,CAACF,OAAU;AAAA,IAC1B,MAAMA,EAAK;AAAA,IACX,MAAMA,EAAK,SAAS,SAAS,MAAM,MAAMA,EAAK,IAAI;AAAA,EAAA,EAClD;AACJ;AAKA,SAASG,EAAeC,GAAmC;AAGzD,SAFcA,EAAY,MAEhB,cAAc;AAK1B;AAMO,SAASC,EAAgBN,GAA+B;AAC7D,QAAMO,IAAiB,CAAA,GAGjBC,IAAQN,EAAoBF,EAAS,KAAK,GAG1CJ,IAAUG,EAAiBC,CAAQ;AAGzC,aAAWS,KAAcb;AAEvB,QAAKQ,EAAeK,EAAW,KAAK;AAIpC,UAAI;AAEF,cAAMC,IAAQC,EAAa;AAAA,UACzBX;AAAA,UACAS,EAAW;AAAA,UACXA,EAAW;AAAA,UACX;AAAA,UACAD;AAAA,QAAA;AAGF,QAAAD,EAAQ,KAAK,GAAGG,CAAK;AAAA,MACvB,SAASE,GAAO;AACd,QAAAC,EAAO;AAAA,UACL,yBAAyBJ,EAAW,OAAO,YAAYA,EAAW,MAAM;AAAA,UACxEG;AAAA,QAAA;AAAA,MAEJ;AAGF,SAAOL;AACT;"}
@@ -1,13 +1,12 @@
1
- import { SiteDocumentV2 as EngineDocument } from '../engine/schema/siteDocument';
2
- import { SiteDocumentV2 as SharedDocument } from '../shared/schema';
3
- /** Slugs canônicos das páginas pré-fabricadas do site. Links do navbar/CTAs usam /site/p/:slug. */
4
- export declare const CANONICAL_SITE_PAGE_SLUGS: readonly ["home", "avisos", "cursos", "contato", "sobre", "metodologia", "depoimentos", "faq"];
1
+ import { SiteDocument as EngineDocument } from '../engine/schema/siteDocument';
2
+ import { SiteDocument as SharedDocument } from '../shared/schema';
5
3
  /**
6
4
  * Converte um documento no formato shared (usado nos templates em shared/templates)
7
- * para o formato do engine (usado pelo LandingPageEditorV2 e PreviewV2).
8
- * Cria todas as páginas pré-fabricadas (home + avisos, cursos, contato, etc.) para que
9
- * os links do navbar (/site/p/:slug) tenham página correspondente.
10
- * Cada página criada automaticamente inclui navbar (com links para todas as páginas) e footer.
5
+ * para o formato do engine (usado pelo LandingPageEditor e Preview).
6
+ *
7
+ * Cria apenas a página "home" com a estrutura do template.
8
+ * Páginas adicionais podem ser criadas pelo usuário no editor (botão "+ Nova Página")
9
+ * ou por plugins ativados (ex: Blog cria páginas "Blog" e "Post").
11
10
  */
12
11
  export declare function sharedTemplateToEngineDocument(shared: SharedDocument): EngineDocument;
13
12
  //# sourceMappingURL=sharedTemplateToEngine.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sharedTemplateToEngine.d.ts","sourceRoot":"","sources":["../../src/utils/sharedTemplateToEngine.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,cAAc,IAAI,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAEtF,OAAO,KAAK,EAAE,cAAc,IAAI,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGzE,mGAAmG;AACnG,eAAO,MAAM,yBAAyB,gGAS5B,CAAC;AAiEX;;;;;;GAMG;AACH,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,cAAc,GACrB,cAAc,CAyChB"}
1
+ {"version":3,"file":"sharedTemplateToEngine.d.ts","sourceRoot":"","sources":["../../src/utils/sharedTemplateToEngine.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,YAAY,IAAI,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAEpF,OAAO,KAAK,EAAE,YAAY,IAAI,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvE;;;;;;;GAOG;AACH,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,cAAc,GACrB,cAAc,CAkBhB"}
@@ -1,92 +1,20 @@
1
- import { createNavbarBlock as m, createFooterBlock as d } from "./pageTemplateFactory.js";
2
- const u = [
3
- "home",
4
- "avisos",
5
- "cursos",
6
- "contato",
7
- "sobre",
8
- "metodologia",
9
- "depoimentos",
10
- "faq"
11
- ];
12
- function p(o, e, n, i) {
13
- return [
14
- m(i),
1
+ function o(r) {
2
+ const e = a(r.theme), t = r.structure ? [...r.structure] : [], n = [
15
3
  {
16
- id: `${o}-heading`,
17
- type: "heading",
18
- props: { level: 1, text: e }
19
- },
20
- {
21
- id: `${o}-placeholder`,
22
- type: "text",
23
- props: { text: n }
24
- },
25
- d()
4
+ id: "home",
5
+ name: r.meta?.title || "Home",
6
+ slug: "home",
7
+ structure: t
8
+ }
26
9
  ];
27
- }
28
- const c = {
29
- avisos: {
30
- name: "Avisos",
31
- placeholder: "Os avisos e comunicados aparecerão aqui quando houver conteúdo."
32
- },
33
- cursos: {
34
- name: "Cursos",
35
- placeholder: "Conheça nossos cursos e formações. O conteúdo será exibido aqui."
36
- },
37
- contato: {
38
- name: "Contato",
39
- placeholder: "Entre em contato conosco. As informações serão exibidas aqui."
40
- },
41
- sobre: {
42
- name: "Sobre",
43
- placeholder: "Conheça nossa história e missão. O conteúdo será exibido aqui."
44
- },
45
- metodologia: {
46
- name: "Metodologia",
47
- placeholder: "Nossa forma de ensinar. O conteúdo será exibido aqui."
48
- },
49
- depoimentos: {
50
- name: "Depoimentos",
51
- placeholder: "O que nossos alunos dizem. Os depoimentos serão exibidos aqui."
52
- },
53
- faq: {
54
- name: "FAQ",
55
- placeholder: "Perguntas e respostas frequentes. O conteúdo será exibido aqui."
56
- }
57
- };
58
- function h(o) {
59
- const e = l(o.theme), n = o.structure ? [...o.structure] : [], t = [
60
- { id: "home", name: o.meta?.title || "Home", slug: "home" },
61
- ...u.filter((a) => a !== "home").map((a) => ({
62
- id: a,
63
- name: c[a].name,
64
- slug: a
65
- }))
66
- ].map(({ id: a, name: r, slug: s }) => ({
67
- id: a,
68
- name: r,
69
- slug: s,
70
- structure: []
71
- }));
72
- t[0].structure = n;
73
- for (let a = 1; a < t.length; a++) {
74
- const r = t[a], s = c[r.id];
75
- r.structure = p(
76
- r.id,
77
- s.name,
78
- s.placeholder,
79
- t
80
- );
81
- }
82
10
  return {
83
11
  schemaVersion: 2,
84
12
  theme: e,
85
- pages: t
13
+ pages: n
86
14
  };
87
15
  }
88
- function l(o) {
89
- const e = o.colors;
16
+ function a(r) {
17
+ const e = r.colors;
90
18
  return {
91
19
  colors: {
92
20
  bg: e.background ?? "#ffffff",
@@ -110,10 +38,10 @@ function l(o) {
110
38
  backgroundStyle: "flat",
111
39
  typography: {
112
40
  fontFamily: {
113
- heading: o.typography?.fontFamilyHeading ?? "Inter, system-ui, sans-serif",
114
- body: o.typography?.fontFamily ?? "Inter, system-ui, sans-serif"
41
+ heading: r.typography?.fontFamilyHeading ?? "Inter, system-ui, sans-serif",
42
+ body: r.typography?.fontFamily ?? "Inter, system-ui, sans-serif"
115
43
  },
116
- baseSize: o.typography?.baseFontSize ?? "16px",
44
+ baseSize: r.typography?.baseFontSize ?? "16px",
117
45
  headingScale: {
118
46
  h1: "2.5rem",
119
47
  h2: "2rem",
@@ -126,7 +54,6 @@ function l(o) {
126
54
  };
127
55
  }
128
56
  export {
129
- u as CANONICAL_SITE_PAGE_SLUGS,
130
- h as sharedTemplateToEngineDocument
57
+ o as sharedTemplateToEngineDocument
131
58
  };
132
59
  //# sourceMappingURL=sharedTemplateToEngine.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sharedTemplateToEngine.js","sources":["../../src/utils/sharedTemplateToEngine.ts"],"sourcesContent":["/**\n * Converte documento no formato shared (templates) para o formato do engine V2.\n * Shared: meta, theme (SimpleThemeTokens), structure na raiz.\n * Engine: schemaVersion, theme (ThemeTokens), pages[].structure.\n */\n\nimport type { SiteDocumentV2 as EngineDocument } from \"../engine/schema/siteDocument\";\nimport type { ThemeTokens } from \"../engine/schema/themeTokens\";\nimport type { SiteDocumentV2 as SharedDocument } from \"../shared/schema\";\nimport { createNavbarBlock, createFooterBlock } from \"./pageTemplateFactory\";\n\n/** Slugs canônicos das páginas pré-fabricadas do site. Links do navbar/CTAs usam /site/p/:slug. */\nexport const CANONICAL_SITE_PAGE_SLUGS = [\n \"home\",\n \"avisos\",\n \"cursos\",\n \"contato\",\n \"sobre\",\n \"metodologia\",\n \"depoimentos\",\n \"faq\",\n] as const;\n\ntype CanonicalSlug = (typeof CANONICAL_SITE_PAGE_SLUGS)[number];\n\n/**\n * Cria estrutura mínima (navbar + título + placeholder + footer) para cada página canônica além da home.\n * As páginas são criadas dinamicamente com navbar e footer incluídos.\n */\nfunction createCanonicalPageStructure(\n slug: Exclude<CanonicalSlug, \"home\">,\n name: string,\n placeholder: string,\n allPages: EngineDocument[\"pages\"]\n): EngineDocument[\"pages\"][0][\"structure\"] {\n return [\n createNavbarBlock(allPages),\n {\n id: `${slug}-heading`,\n type: \"heading\",\n props: { level: 1, text: name },\n },\n {\n id: `${slug}-placeholder`,\n type: \"text\",\n props: { text: placeholder },\n },\n createFooterBlock(),\n ];\n}\n\n/** Metadados das páginas canônicas */\nconst CANONICAL_PAGE_META: Record<\n Exclude<CanonicalSlug, \"home\">,\n { name: string; placeholder: string }\n> = {\n avisos: {\n name: \"Avisos\",\n placeholder: \"Os avisos e comunicados aparecerão aqui quando houver conteúdo.\",\n },\n cursos: {\n name: \"Cursos\",\n placeholder: \"Conheça nossos cursos e formações. O conteúdo será exibido aqui.\",\n },\n contato: {\n name: \"Contato\",\n placeholder: \"Entre em contato conosco. As informações serão exibidas aqui.\",\n },\n sobre: {\n name: \"Sobre\",\n placeholder: \"Conheça nossa história e missão. O conteúdo será exibido aqui.\",\n },\n metodologia: {\n name: \"Metodologia\",\n placeholder: \"Nossa forma de ensinar. O conteúdo será exibido aqui.\",\n },\n depoimentos: {\n name: \"Depoimentos\",\n placeholder: \"O que nossos alunos dizem. Os depoimentos serão exibidos aqui.\",\n },\n faq: {\n name: \"FAQ\",\n placeholder: \"Perguntas e respostas frequentes. O conteúdo será exibido aqui.\",\n },\n};\n\n/**\n * Converte um documento no formato shared (usado nos templates em shared/templates)\n * para o formato do engine (usado pelo LandingPageEditorV2 e PreviewV2).\n * Cria todas as páginas pré-fabricadas (home + avisos, cursos, contato, etc.) para que\n * os links do navbar (/site/p/:slug) tenham página correspondente.\n * Cada página criada automaticamente inclui navbar (com links para todas as páginas) e footer.\n */\nexport function sharedTemplateToEngineDocument(\n shared: SharedDocument,\n): EngineDocument {\n const theme = mapSharedThemeToEngine(shared.theme);\n const structure = shared.structure ? [...shared.structure] : [];\n\n // Primeiro, criar array de metadados das páginas\n const pagesMetadata = [\n { id: \"home\", name: shared.meta?.title || \"Home\", slug: \"home\" },\n ...CANONICAL_SITE_PAGE_SLUGS.filter(s => s !== \"home\").map(slug => ({\n id: slug,\n name: CANONICAL_PAGE_META[slug].name,\n slug,\n })),\n ];\n\n // Criar páginas vazias inicialmente para generateNavbarLinks\n const pages: EngineDocument[\"pages\"] = pagesMetadata.map(({ id, name, slug }) => ({\n id,\n name,\n slug,\n structure: [],\n }));\n\n // Agora preencher a estrutura de cada página com navbar, conteúdo e footer\n pages[0].structure = structure as EngineDocument[\"pages\"][0][\"structure\"];\n\n for (let i = 1; i < pages.length; i++) {\n const page = pages[i];\n const meta = CANONICAL_PAGE_META[page.id as Exclude<CanonicalSlug, \"home\">];\n page.structure = createCanonicalPageStructure(\n page.id as Exclude<CanonicalSlug, \"home\">,\n meta.name,\n meta.placeholder,\n pages\n );\n }\n\n return {\n schemaVersion: 2,\n theme,\n pages,\n };\n}\n\nfunction mapSharedThemeToEngine(\n sharedTheme: SharedDocument[\"theme\"],\n): ThemeTokens {\n const c = sharedTheme.colors;\n return {\n colors: {\n bg: c.background ?? \"#ffffff\",\n surface: c.surface ?? \"#f8fafc\",\n border: c.border ?? \"#e2e8f0\",\n text: c.text ?? \"#1e293b\",\n mutedText: c.textMuted ?? \"#64748b\",\n primary: c.primary ?? \"#3b82f6\",\n primaryText: \"#ffffff\",\n secondary: c.secondary ?? \"#64748b\",\n accent: c.accent ?? \"#f59e0b\",\n ring: c.primary ?? \"#3b82f6\",\n success: c.success,\n warning: c.warning,\n danger: c.error,\n },\n radiusScale: \"md\",\n shadowScale: \"soft\",\n spacingScale: \"normal\",\n motion: \"subtle\",\n backgroundStyle: \"flat\",\n typography: {\n fontFamily: {\n heading:\n sharedTheme.typography?.fontFamilyHeading ??\n \"Inter, system-ui, sans-serif\",\n body:\n sharedTheme.typography?.fontFamily ?? \"Inter, system-ui, sans-serif\",\n },\n baseSize: sharedTheme.typography?.baseFontSize ?? \"16px\",\n headingScale: {\n h1: \"2.5rem\",\n h2: \"2rem\",\n h3: \"1.75rem\",\n h4: \"1.5rem\",\n h5: \"1.25rem\",\n h6: \"1rem\",\n },\n },\n };\n}\n"],"names":["CANONICAL_SITE_PAGE_SLUGS","createCanonicalPageStructure","slug","name","placeholder","allPages","createNavbarBlock","createFooterBlock","CANONICAL_PAGE_META","sharedTemplateToEngineDocument","shared","theme","mapSharedThemeToEngine","structure","pages","s","id","i","page","meta","sharedTheme","c"],"mappings":"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"}
1
+ {"version":3,"file":"sharedTemplateToEngine.js","sources":["../../src/utils/sharedTemplateToEngine.ts"],"sourcesContent":["/**\n * Converte documento no formato shared (templates) para o formato do engine.\n * Shared: meta, theme (SimpleThemeTokens), structure na raiz.\n * Engine: schemaVersion, theme (ThemeTokens), pages[].structure.\n */\n\nimport type { SiteDocument as EngineDocument } from \"../engine/schema/siteDocument\";\nimport type { ThemeTokens } from \"../engine/schema/themeTokens\";\nimport type { SiteDocument as SharedDocument } from \"../shared/schema\";\n\n/**\n * Converte um documento no formato shared (usado nos templates em shared/templates)\n * para o formato do engine (usado pelo LandingPageEditor e Preview).\n *\n * Cria apenas a página \"home\" com a estrutura do template.\n * Páginas adicionais podem ser criadas pelo usuário no editor (botão \"+ Nova Página\")\n * ou por plugins ativados (ex: Blog cria páginas \"Blog\" e \"Post\").\n */\nexport function sharedTemplateToEngineDocument(\n shared: SharedDocument,\n): EngineDocument {\n const theme = mapSharedThemeToEngine(shared.theme);\n const structure = shared.structure ? [...shared.structure] : [];\n\n const pages: EngineDocument[\"pages\"] = [\n {\n id: \"home\",\n name: shared.meta?.title || \"Home\",\n slug: \"home\",\n structure: structure as EngineDocument[\"pages\"][0][\"structure\"],\n },\n ];\n\n return {\n schemaVersion: 2,\n theme,\n pages,\n };\n}\n\nfunction mapSharedThemeToEngine(\n sharedTheme: SharedDocument[\"theme\"],\n): ThemeTokens {\n const c = sharedTheme.colors;\n return {\n colors: {\n bg: c.background ?? \"#ffffff\",\n surface: c.surface ?? \"#f8fafc\",\n border: c.border ?? \"#e2e8f0\",\n text: c.text ?? \"#1e293b\",\n mutedText: c.textMuted ?? \"#64748b\",\n primary: c.primary ?? \"#3b82f6\",\n primaryText: \"#ffffff\",\n secondary: c.secondary ?? \"#64748b\",\n accent: c.accent ?? \"#f59e0b\",\n ring: c.primary ?? \"#3b82f6\",\n success: c.success,\n warning: c.warning,\n danger: c.error,\n },\n radiusScale: \"md\",\n shadowScale: \"soft\",\n spacingScale: \"normal\",\n motion: \"subtle\",\n backgroundStyle: \"flat\",\n typography: {\n fontFamily: {\n heading:\n sharedTheme.typography?.fontFamilyHeading ??\n \"Inter, system-ui, sans-serif\",\n body:\n sharedTheme.typography?.fontFamily ?? \"Inter, system-ui, sans-serif\",\n },\n baseSize: sharedTheme.typography?.baseFontSize ?? \"16px\",\n headingScale: {\n h1: \"2.5rem\",\n h2: \"2rem\",\n h3: \"1.75rem\",\n h4: \"1.5rem\",\n h5: \"1.25rem\",\n h6: \"1rem\",\n },\n },\n };\n}\n"],"names":["sharedTemplateToEngineDocument","shared","theme","mapSharedThemeToEngine","structure","pages","sharedTheme","c"],"mappings":"AAkBO,SAASA,EACdC,GACgB;AAChB,QAAMC,IAAQC,EAAuBF,EAAO,KAAK,GAC3CG,IAAYH,EAAO,YAAY,CAAC,GAAGA,EAAO,SAAS,IAAI,CAAA,GAEvDI,IAAiC;AAAA,IACrC;AAAA,MACE,IAAI;AAAA,MACJ,MAAMJ,EAAO,MAAM,SAAS;AAAA,MAC5B,MAAM;AAAA,MACN,WAAAG;AAAA,IAAA;AAAA,EACF;AAGF,SAAO;AAAA,IACL,eAAe;AAAA,IACf,OAAAF;AAAA,IACA,OAAAG;AAAA,EAAA;AAEJ;AAEA,SAASF,EACPG,GACa;AACb,QAAMC,IAAID,EAAY;AACtB,SAAO;AAAA,IACL,QAAQ;AAAA,MACN,IAAIC,EAAE,cAAc;AAAA,MACpB,SAASA,EAAE,WAAW;AAAA,MACtB,QAAQA,EAAE,UAAU;AAAA,MACpB,MAAMA,EAAE,QAAQ;AAAA,MAChB,WAAWA,EAAE,aAAa;AAAA,MAC1B,SAASA,EAAE,WAAW;AAAA,MACtB,aAAa;AAAA,MACb,WAAWA,EAAE,aAAa;AAAA,MAC1B,QAAQA,EAAE,UAAU;AAAA,MACpB,MAAMA,EAAE,WAAW;AAAA,MACnB,SAASA,EAAE;AAAA,MACX,SAASA,EAAE;AAAA,MACX,QAAQA,EAAE;AAAA,IAAA;AAAA,IAEZ,aAAa;AAAA,IACb,aAAa;AAAA,IACb,cAAc;AAAA,IACd,QAAQ;AAAA,IACR,iBAAiB;AAAA,IACjB,YAAY;AAAA,MACV,YAAY;AAAA,QACV,SACED,EAAY,YAAY,qBACxB;AAAA,QACF,MACEA,EAAY,YAAY,cAAc;AAAA,MAAA;AAAA,MAE1C,UAAUA,EAAY,YAAY,gBAAgB;AAAA,MAClD,cAAc;AAAA,QACZ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,MAAA;AAAA,IACN;AAAA,EACF;AAEJ;"}