@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,3 +1,4 @@
1
+ import { default as React } from 'react';
1
2
  import { Block } from '../engine';
2
3
  interface BlockSelectorProps {
3
4
  structure: Block[];
@@ -5,6 +6,6 @@ interface BlockSelectorProps {
5
6
  onSelectBlock: (blockId: string) => void;
6
7
  onDeleteBlock: (blockId: string) => void;
7
8
  }
8
- export declare function BlockSelector({ structure, selectedBlockId, onSelectBlock, onDeleteBlock, }: BlockSelectorProps): import("react/jsx-runtime").JSX.Element;
9
+ export declare const BlockSelector: React.NamedExoticComponent<BlockSelectorProps>;
9
10
  export {};
10
11
  //# sourceMappingURL=BlockSelector.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"BlockSelector.d.ts","sourceRoot":"","sources":["../../src/editor/BlockSelector.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAA;AAKjC,UAAU,kBAAkB;IAC1B,SAAS,EAAE,KAAK,EAAE,CAAA;IAClB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IACxC,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;CACzC;AAgJD,wBAAgB,aAAa,CAAC,EAC5B,SAAS,EACT,eAAe,EACf,aAAa,EACb,aAAa,GACd,EAAE,kBAAkB,2CA6EpB"}
1
+ {"version":3,"file":"BlockSelector.d.ts","sourceRoot":"","sources":["../../src/editor/BlockSelector.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAkB,MAAM,OAAO,CAAA;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAA;AAKjC,UAAU,kBAAkB;IAC1B,SAAS,EAAE,KAAK,EAAE,CAAA;IAClB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IACxC,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;CACzC;AAiJD,eAAO,MAAM,aAAa,gDAkFxB,CAAC"}
@@ -1,7 +1,8 @@
1
- import { jsxs as m, jsx as o } from "react/jsx-runtime";
2
- import { useMemo as v } from "react";
3
- import "../engine/schema/themeTokens.js";
4
- import { componentRegistry as N } from "../engine/registry/registry.js";
1
+ import { jsxs as s, jsx as o } from "react/jsx-runtime";
2
+ import A, { useMemo as N } from "react";
3
+ import { Trash2 as j, ChevronRight as k } from "lucide-react";
4
+ import { cn as h } from "../utils/cn.js";
5
+ import { componentRegistry as v } from "../engine/registry/registry.js";
5
6
  import "../engine/registry/blocks/layout/container.js";
6
7
  import "../engine/registry/blocks/layout/stack.js";
7
8
  import "../engine/registry/blocks/layout/grid.js";
@@ -43,33 +44,23 @@ import "../engine/registry/blocks/sections/teamCard.js";
43
44
  import "../engine/registry/blocks/sections/teamGrid.js";
44
45
  import "../engine/registry/blocks/sections/courseCardGrid.js";
45
46
  import "../engine/registry/blocks/sections/categoryCardGrid.js";
47
+ import "../engine/registry/blocks/sections/blogPostCard.js";
48
+ import "../engine/registry/blocks/sections/blogPostGrid.js";
49
+ import "../engine/registry/blocks/sections/blogPostDetail.js";
46
50
  import "../engine/registry/blocks/forms/form.js";
47
51
  import "../engine/registry/blocks/forms/input.js";
48
52
  import "../engine/registry/blocks/forms/textarea.js";
49
53
  import "../engine/registry/blocks/forms/select.js";
50
- import "../engine/render/renderers/layout/index.js";
51
- import "../engine/render/renderers/content/index.js";
52
- import "../engine/render/renderers/composition/index.js";
53
- import "../engine/render/renderers/sections/index.js";
54
- import "../engine/render/renderers/forms/index.js";
55
- import "../engine/export/exporters/layout/index.js";
56
- import "../engine/export/exporters/content/index.js";
57
- import "../engine/export/exporters/sections/index.js";
58
- import "../engine/export/exporters/forms/index.js";
59
- import "../engine/theme/defaultTheme.js";
60
- import { cn as h } from "../utils/cn.js";
61
- import b from "../node_modules/lucide-react/dist/esm/icons/trash-2.js";
62
- import j from "../node_modules/lucide-react/dist/esm/icons/chevron-right.js";
63
54
  function x(t) {
64
- return N.get(t)?.name || t;
55
+ return v.get(t)?.name || t;
65
56
  }
66
- function A(t) {
57
+ function C(t) {
67
58
  const r = t.props;
68
59
  switch (t.type) {
69
60
  case "heading":
70
61
  return r.text || "Heading";
71
62
  case "text":
72
- return r.text ? r.text.substring(0, 30) + (r.text.length > 30 ? "..." : "") : "Text";
63
+ return r.text ? String(r.text).substring(0, 30) + (String(r.text).length > 30 ? "..." : "") : "Text";
73
64
  case "button":
74
65
  return r.text || "Button";
75
66
  case "link":
@@ -80,7 +71,7 @@ function A(t) {
80
71
  case "stack":
81
72
  case "grid":
82
73
  case "box":
83
- return `${x(t.type)} (${r.children?.length || 0} children)`;
74
+ return `${x(t.type)} (${Array.isArray(r.children) ? r.children.length : 0} children)`;
84
75
  case "section":
85
76
  return r.id ? `Section: ${r.id}` : "Section";
86
77
  case "card":
@@ -91,97 +82,97 @@ function A(t) {
91
82
  return x(t.type);
92
83
  }
93
84
  }
94
- function w(t, r, d, l, a) {
85
+ function b(t, r, c, d, l) {
95
86
  if (!t || typeof t != "object" || !t.id || !t.type)
96
87
  return null;
97
- const n = t.id === d, e = t.props, p = e && typeof e == "object" && e.children && Array.isArray(e.children) && e.children.length > 0;
98
- return /* @__PURE__ */ m("div", { children: [
99
- /* @__PURE__ */ m(
88
+ const a = t.id === c, n = t.props, i = n && typeof n == "object" && n.children && Array.isArray(n.children) && n.children.length > 0;
89
+ return /* @__PURE__ */ s("div", { children: [
90
+ /* @__PURE__ */ s(
100
91
  "div",
101
92
  {
102
93
  className: h(
103
94
  "flex items-center gap-2 p-2 rounded-lg transition-all cursor-pointer group",
104
95
  "hover:scale-[1.01] active:scale-[0.99]",
105
- n ? "bg-blue-500 text-white shadow-md shadow-blue-500/20" : "bg-gray-100/50 dark:bg-gray-800/50 hover:bg-gray-100 dark:hover:bg-gray-800 text-gray-700 dark:text-gray-300",
96
+ a ? "bg-blue-500 text-white shadow-md shadow-blue-500/20" : "bg-gray-100/50 dark:bg-gray-800/50 hover:bg-gray-100 dark:hover:bg-gray-800 text-gray-700 dark:text-gray-300",
106
97
  r > 0 && "ml-4"
107
98
  ),
108
99
  style: { paddingLeft: `${r * 12 + 8}px` },
109
- onClick: () => l(t.id),
100
+ onClick: () => d(t.id),
110
101
  children: [
111
- r > 0 && /* @__PURE__ */ o("div", { className: "flex-shrink-0 w-4 flex items-center justify-center", children: /* @__PURE__ */ o(j, { className: "w-3 h-3 opacity-50" }) }),
102
+ r > 0 && /* @__PURE__ */ o("div", { className: "flex-shrink-0 w-4 flex items-center justify-center", children: /* @__PURE__ */ o(k, { className: "w-3 h-3 opacity-50" }) }),
112
103
  /* @__PURE__ */ o(
113
104
  "div",
114
105
  {
115
106
  className: h(
116
107
  "flex-shrink-0 w-6 h-6 rounded text-xs font-semibold flex items-center justify-center",
117
- n ? "bg-white/20 text-white" : "bg-gray-200 dark:bg-gray-700 text-gray-600 dark:text-gray-400"
108
+ a ? "bg-white/20 text-white" : v.get(t.type)?.pluginId ? "bg-purple-100 dark:bg-purple-900/30 text-purple-600 dark:text-purple-400" : "bg-gray-200 dark:bg-gray-700 text-gray-600 dark:text-gray-400"
118
109
  ),
119
110
  title: x(t.type),
120
- children: t.type.substring(0, 2).toUpperCase()
111
+ children: v.get(t.type)?.pluginId ? "🧩" : t.type.substring(0, 2).toUpperCase()
121
112
  }
122
113
  ),
123
- /* @__PURE__ */ m("div", { className: "flex-1 min-w-0", children: [
114
+ /* @__PURE__ */ s("div", { className: "flex-1 min-w-0", children: [
124
115
  /* @__PURE__ */ o("div", { className: "text-xs font-medium truncate", children: x(t.type) }),
125
116
  /* @__PURE__ */ o(
126
117
  "div",
127
118
  {
128
119
  className: h(
129
120
  "text-xs truncate",
130
- n ? "text-white/80" : "text-gray-500 dark:text-gray-400"
121
+ a ? "text-white/80" : "text-gray-500 dark:text-gray-400"
131
122
  ),
132
- children: A(t)
123
+ children: C(t)
133
124
  }
134
125
  )
135
126
  ] }),
136
127
  /* @__PURE__ */ o(
137
128
  "button",
138
129
  {
139
- onClick: (i) => {
140
- i.stopPropagation(), a(t.id);
130
+ onClick: (e) => {
131
+ e.stopPropagation(), l(t.id);
141
132
  },
142
133
  className: h(
143
134
  "p-1.5 rounded-full transition-all opacity-0 group-hover:opacity-100",
144
135
  "hover:bg-white/30 dark:hover:bg-gray-700/50",
145
136
  "hover:scale-110 active:scale-95",
146
- n ? "text-white hover:bg-white/40" : "text-gray-600 dark:text-gray-400 hover:bg-gray-200 dark:hover:bg-gray-700"
137
+ a ? "text-white hover:bg-white/40" : "text-gray-600 dark:text-gray-400 hover:bg-gray-200 dark:hover:bg-gray-700"
147
138
  ),
148
139
  title: "Deletar bloco",
149
- children: /* @__PURE__ */ o(b, { className: "w-3.5 h-3.5" })
140
+ children: /* @__PURE__ */ o(j, { className: "w-3.5 h-3.5" })
150
141
  }
151
142
  )
152
143
  ]
153
144
  }
154
145
  ),
155
- p && /* @__PURE__ */ o("div", { className: "mt-1", children: e.children.filter((i) => i && i.id && i.type).map(
156
- (i) => w(i, r + 1, d, l, a)
146
+ i && /* @__PURE__ */ o("div", { className: "mt-1", children: n.children.filter((e) => e && e.id && e.type).map(
147
+ (e) => b(e, r + 1, c, d, l)
157
148
  ) })
158
149
  ] }, t.id);
159
150
  }
160
- function Rt({
161
- structure: t,
162
- selectedBlockId: r,
151
+ const Ct = A.memo(function({
152
+ structure: r,
153
+ selectedBlockId: c,
163
154
  onSelectBlock: d,
164
155
  onDeleteBlock: l
165
156
  }) {
166
- const a = v(() => !t || !Array.isArray(t) ? [] : t.filter((e) => e && typeof e == "object" && e.id && e.type), [t]), n = v(() => {
167
- const e = (p) => {
168
- if (!p || !Array.isArray(p) || p.length === 0) return 0;
169
- let i = 0;
170
- for (let f = 0; f < p.length; f++) {
171
- const s = p[f];
172
- if (!(!s || typeof s != "object" || !s.id || !s.type)) {
173
- i++;
157
+ const a = N(() => !r || !Array.isArray(r) ? [] : r.filter((i) => i && typeof i == "object" && i.id && i.type), [r]), n = N(() => {
158
+ const i = (e) => {
159
+ if (!e || !Array.isArray(e) || e.length === 0) return 0;
160
+ let u = 0;
161
+ for (let f = 0; f < e.length; f++) {
162
+ const p = e[f];
163
+ if (!(!p || typeof p != "object" || !p.id || !p.type)) {
164
+ u++;
174
165
  try {
175
- if (!s.props)
166
+ if (!p.props)
176
167
  continue;
177
- const c = s.props;
178
- if (c && typeof c == "object" && !Array.isArray(c)) {
179
- const g = c.children;
168
+ const m = p.props;
169
+ if (m && typeof m == "object" && !Array.isArray(m)) {
170
+ const g = m.children;
180
171
  if (g && Array.isArray(g) && g.length > 0) {
181
- const u = g.filter(
172
+ const w = g.filter(
182
173
  (y) => y && typeof y == "object" && y.id && y.type
183
174
  );
184
- u.length > 0 && (i += e(u));
175
+ w.length > 0 && (u += i(w));
185
176
  }
186
177
  }
187
178
  } catch {
@@ -189,25 +180,25 @@ function Rt({
189
180
  }
190
181
  }
191
182
  }
192
- return i;
183
+ return u;
193
184
  };
194
- return e(a);
185
+ return i(a);
195
186
  }, [a]);
196
- return /* @__PURE__ */ m("div", { className: "h-full flex flex-col overflow-hidden", children: [
197
- /* @__PURE__ */ m("div", { className: "flex-shrink-0 p-3 border-b border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-900", children: [
187
+ return /* @__PURE__ */ s("div", { className: "h-full flex flex-col overflow-hidden", children: [
188
+ /* @__PURE__ */ s("div", { className: "flex-shrink-0 p-3 border-b border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-900", children: [
198
189
  /* @__PURE__ */ o("h2", { className: "text-sm font-semibold text-gray-800 dark:text-gray-100", children: "Blocos" }),
199
- /* @__PURE__ */ m("p", { className: "text-xs text-gray-500 dark:text-gray-400 mt-1", children: [
190
+ /* @__PURE__ */ s("p", { className: "text-xs text-gray-500 dark:text-gray-400 mt-1", children: [
200
191
  n,
201
192
  " ",
202
193
  n === 1 ? "bloco" : "blocos"
203
194
  ] })
204
195
  ] }),
205
196
  /* @__PURE__ */ o("div", { className: "flex-1 overflow-y-auto p-2 space-y-1", children: !a || a.length === 0 ? /* @__PURE__ */ o("div", { className: "text-center text-gray-500 dark:text-gray-400 text-xs py-8", children: "Nenhum bloco adicionado ainda" }) : a.map(
206
- (e) => w(e, 0, r, d, l)
197
+ (i) => b(i, 0, c, d, l)
207
198
  ) })
208
199
  ] });
209
- }
200
+ });
210
201
  export {
211
- Rt as BlockSelector
202
+ Ct as BlockSelector
212
203
  };
213
204
  //# sourceMappingURL=BlockSelector.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BlockSelector.js","sources":["../../src/editor/BlockSelector.tsx"],"sourcesContent":["/**\n * Block Selector\n * Lista blocos da estrutura de forma hierárquica\n */\n\nimport React, { useMemo } from 'react'\nimport { Block } from '../engine'\nimport { componentRegistry } from '../engine'\nimport { Trash2, ChevronRight } from 'lucide-react'\nimport { cn } from '../utils/cn'\n\ninterface BlockSelectorProps {\n structure: Block[]\n selectedBlockId: string | null\n onSelectBlock: (blockId: string) => void\n onDeleteBlock: (blockId: string) => void\n}\n\n/**\n * Obtém nome amigável do tipo de bloco\n */\nfunction getBlockTypeName(type: Block['type']): string {\n const definition = componentRegistry.get(type)\n return definition?.name || type\n}\n\n/**\n * Obtém preview do bloco (texto ou propriedade relevante)\n */\nfunction getBlockPreview(block: Block): string {\n const props = block.props as any\n\n switch (block.type) {\n case 'heading':\n return props.text || 'Heading'\n case 'text':\n return props.text ? props.text.substring(0, 30) + (props.text.length > 30 ? '...' : '') : 'Text'\n case 'button':\n return props.text || 'Button'\n case 'link':\n return props.text || 'Link'\n case 'image':\n return props.alt || props.src ? 'Image' : 'Image'\n case 'container':\n case 'stack':\n case 'grid':\n case 'box':\n return `${getBlockTypeName(block.type)} (${props.children?.length || 0} children)`\n case 'section':\n return props.id ? `Section: ${props.id}` : 'Section'\n case 'card':\n return 'Card'\n case 'divider':\n return 'Divider'\n default:\n // TypeScript não consegue inferir que todos os casos foram cobertos\n return getBlockTypeName((block as Block).type)\n }\n}\n\n/**\n * Renderiza um bloco e seus children recursivamente\n */\nfunction renderBlockTree(\n block: Block,\n depth: number,\n selectedBlockId: string | null,\n onSelectBlock: (blockId: string) => void,\n onDeleteBlock: (blockId: string) => void\n): React.ReactNode {\n // Verificar se o bloco é válido\n if (!block || typeof block !== 'object' || !block.id || !block.type) {\n return null\n }\n\n const isSelected = block.id === selectedBlockId\n const props = block.props as any\n const hasChildren = props && typeof props === 'object' && props.children && Array.isArray(props.children) && props.children.length > 0\n\n return (\n <div key={block.id}>\n <div\n className={cn(\n 'flex items-center gap-2 p-2 rounded-lg transition-all cursor-pointer group',\n 'hover:scale-[1.01] active:scale-[0.99]',\n isSelected\n ? 'bg-blue-500 text-white shadow-md shadow-blue-500/20'\n : 'bg-gray-100/50 dark:bg-gray-800/50 hover:bg-gray-100 dark:hover:bg-gray-800 text-gray-700 dark:text-gray-300',\n depth > 0 && 'ml-4'\n )}\n style={{ paddingLeft: `${depth * 12 + 8}px` }}\n onClick={() => onSelectBlock(block.id)}\n >\n {/* Indentação visual */}\n {depth > 0 && (\n <div className=\"flex-shrink-0 w-4 flex items-center justify-center\">\n <ChevronRight className=\"w-3 h-3 opacity-50\" />\n </div>\n )}\n\n {/* Badge de tipo */}\n <div\n className={cn(\n 'flex-shrink-0 w-6 h-6 rounded text-xs font-semibold flex items-center justify-center',\n isSelected\n ? 'bg-white/20 text-white'\n : 'bg-gray-200 dark:bg-gray-700 text-gray-600 dark:text-gray-400'\n )}\n title={getBlockTypeName(block.type)}\n >\n {block.type.substring(0, 2).toUpperCase()}\n </div>\n\n {/* Nome e preview */}\n <div className=\"flex-1 min-w-0\">\n <div className=\"text-xs font-medium truncate\">{getBlockTypeName(block.type)}</div>\n <div\n className={cn(\n 'text-xs truncate',\n isSelected ? 'text-white/80' : 'text-gray-500 dark:text-gray-400'\n )}\n >\n {getBlockPreview(block)}\n </div>\n </div>\n\n {/* Botão deletar */}\n <button\n onClick={(e) => {\n e.stopPropagation()\n onDeleteBlock(block.id)\n }}\n className={cn(\n 'p-1.5 rounded-full transition-all opacity-0 group-hover:opacity-100',\n 'hover:bg-white/30 dark:hover:bg-gray-700/50',\n 'hover:scale-110 active:scale-95',\n isSelected\n ? 'text-white hover:bg-white/40'\n : 'text-gray-600 dark:text-gray-400 hover:bg-gray-200 dark:hover:bg-gray-700'\n )}\n title=\"Deletar bloco\"\n >\n <Trash2 className=\"w-3.5 h-3.5\" />\n </button>\n </div>\n\n {/* Renderizar children recursivamente */}\n {hasChildren && (\n <div className=\"mt-1\">\n {props.children\n .filter((child: Block) => child && child.id && child.type) // Filtrar children inválidos\n .map((child: Block) =>\n renderBlockTree(child, depth + 1, selectedBlockId, onSelectBlock, onDeleteBlock)\n )}\n </div>\n )}\n </div>\n )\n}\n\nexport function BlockSelector({\n structure,\n selectedBlockId,\n onSelectBlock,\n onDeleteBlock,\n}: BlockSelectorProps) {\n // Filtrar estrutura inválida ANTES de usar\n const validStructure = useMemo(() => {\n if (!structure || !Array.isArray(structure)) return []\n return structure.filter((b) => b && typeof b === 'object' && b.id && b.type)\n }, [structure])\n\n // Contar total de blocos (incluindo children) - usando useMemo para evitar recálculos\n const totalBlocks = useMemo(() => {\n const count = (blocks: Block[]): number => {\n if (!blocks || !Array.isArray(blocks) || blocks.length === 0) return 0\n \n let total = 0\n for (let i = 0; i < blocks.length; i++) {\n const block = blocks[i]\n \n // Verificar se o bloco é válido ANTES de acessar qualquer propriedade\n if (!block || typeof block !== 'object' || !block.id || !block.type) {\n continue\n }\n \n total++ // Contar o bloco atual\n \n // Verificar props de forma segura - SEMPRE dentro de try-catch\n try {\n if (!block.props) {\n continue\n }\n \n const props = block.props\n if (props && typeof props === 'object' && !Array.isArray(props)) {\n const children = (props as any).children\n if (children && Array.isArray(children) && children.length > 0) {\n // Filtrar children inválidos antes de contar recursivamente\n const validChildren = children.filter(\n (child: any) => child && typeof child === 'object' && child.id && child.type\n )\n if (validChildren.length > 0) {\n total += count(validChildren)\n }\n }\n }\n } catch (error) {\n // Se houver erro ao acessar props, apenas continuar\n continue\n }\n }\n return total\n }\n \n return count(validStructure)\n }, [validStructure])\n\n return (\n <div className=\"h-full flex flex-col overflow-hidden\">\n {/* Header */}\n <div className=\"flex-shrink-0 p-3 border-b border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-900\">\n <h2 className=\"text-sm font-semibold text-gray-800 dark:text-gray-100\">Blocos</h2>\n <p className=\"text-xs text-gray-500 dark:text-gray-400 mt-1\">\n {totalBlocks} {totalBlocks === 1 ? 'bloco' : 'blocos'}\n </p>\n </div>\n\n {/* Lista de blocos */}\n <div className=\"flex-1 overflow-y-auto p-2 space-y-1\">\n {!validStructure || validStructure.length === 0 ? (\n <div className=\"text-center text-gray-500 dark:text-gray-400 text-xs py-8\">\n Nenhum bloco adicionado ainda\n </div>\n ) : (\n validStructure.map((block) =>\n renderBlockTree(block, 0, selectedBlockId, onSelectBlock, onDeleteBlock)\n )\n )}\n </div>\n </div>\n )\n}\n"],"names":["getBlockTypeName","type","componentRegistry","getBlockPreview","block","props","renderBlockTree","depth","selectedBlockId","onSelectBlock","onDeleteBlock","isSelected","hasChildren","jsxs","cn","jsx","ChevronRight","e","Trash2","child","BlockSelector","structure","validStructure","useMemo","b","totalBlocks","count","blocks","total","i","children","validChildren"],"mappings":"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"}
1
+ {"version":3,"file":"BlockSelector.js","sources":["../../src/editor/BlockSelector.tsx"],"sourcesContent":["/**\n * Block Selector\n * Lista blocos da estrutura de forma hierárquica\n */\n\nimport React, { useMemo } from 'react'\nimport { Block } from '../engine'\nimport { componentRegistry } from '../engine'\nimport { Trash2, ChevronRight } from 'lucide-react'\nimport { cn } from '../utils/cn'\n\ninterface BlockSelectorProps {\n structure: Block[]\n selectedBlockId: string | null\n onSelectBlock: (blockId: string) => void\n onDeleteBlock: (blockId: string) => void\n}\n\n/**\n * Obtém nome amigável do tipo de bloco\n */\nfunction getBlockTypeName(type: Block['type']): string {\n const definition = componentRegistry.get(type)\n return definition?.name || type\n}\n\n/**\n * Obtém preview do bloco (texto ou propriedade relevante)\n */\nfunction getBlockPreview(block: Block): string {\n const props = block.props as Record<string, any>; // eslint-disable-line @typescript-eslint/no-explicit-any -- dynamic access for preview\n\n switch (block.type) {\n case 'heading':\n return props.text || 'Heading'\n case 'text':\n return props.text ? String(props.text).substring(0, 30) + (String(props.text).length > 30 ? '...' : '') : 'Text'\n case 'button':\n return props.text || 'Button'\n case 'link':\n return props.text || 'Link'\n case 'image':\n return props.alt || props.src ? 'Image' : 'Image'\n case 'container':\n case 'stack':\n case 'grid':\n case 'box':\n return `${getBlockTypeName(block.type)} (${Array.isArray(props.children) ? props.children.length : 0} children)`\n case 'section':\n return props.id ? `Section: ${props.id}` : 'Section'\n case 'card':\n return 'Card'\n case 'divider':\n return 'Divider'\n default:\n return getBlockTypeName(block.type)\n }\n}\n\n/**\n * Renderiza um bloco e seus children recursivamente\n */\nfunction renderBlockTree(\n block: Block,\n depth: number,\n selectedBlockId: string | null,\n onSelectBlock: (blockId: string) => void,\n onDeleteBlock: (blockId: string) => void\n): React.ReactNode {\n // Verificar se o bloco é válido\n if (!block || typeof block !== 'object' || !block.id || !block.type) {\n return null\n }\n\n const isSelected = block.id === selectedBlockId\n const props = block.props as Record<string, any>\n const hasChildren = props && typeof props === 'object' && props.children && Array.isArray(props.children) && props.children.length > 0\n\n return (\n <div key={block.id}>\n <div\n className={cn(\n 'flex items-center gap-2 p-2 rounded-lg transition-all cursor-pointer group',\n 'hover:scale-[1.01] active:scale-[0.99]',\n isSelected\n ? 'bg-blue-500 text-white shadow-md shadow-blue-500/20'\n : 'bg-gray-100/50 dark:bg-gray-800/50 hover:bg-gray-100 dark:hover:bg-gray-800 text-gray-700 dark:text-gray-300',\n depth > 0 && 'ml-4'\n )}\n style={{ paddingLeft: `${depth * 12 + 8}px` }}\n onClick={() => onSelectBlock(block.id)}\n >\n {/* Indentação visual */}\n {depth > 0 && (\n <div className=\"flex-shrink-0 w-4 flex items-center justify-center\">\n <ChevronRight className=\"w-3 h-3 opacity-50\" />\n </div>\n )}\n\n {/* Badge de tipo */}\n <div\n className={cn(\n 'flex-shrink-0 w-6 h-6 rounded text-xs font-semibold flex items-center justify-center',\n isSelected\n ? 'bg-white/20 text-white'\n : componentRegistry.get(block.type)?.pluginId\n ? 'bg-purple-100 dark:bg-purple-900/30 text-purple-600 dark:text-purple-400'\n : 'bg-gray-200 dark:bg-gray-700 text-gray-600 dark:text-gray-400'\n )}\n title={getBlockTypeName(block.type)}\n >\n {componentRegistry.get(block.type)?.pluginId ? '🧩' : block.type.substring(0, 2).toUpperCase()}\n </div>\n\n {/* Nome e preview */}\n <div className=\"flex-1 min-w-0\">\n <div className=\"text-xs font-medium truncate\">{getBlockTypeName(block.type)}</div>\n <div\n className={cn(\n 'text-xs truncate',\n isSelected ? 'text-white/80' : 'text-gray-500 dark:text-gray-400'\n )}\n >\n {getBlockPreview(block)}\n </div>\n </div>\n\n {/* Botão deletar */}\n <button\n onClick={(e) => {\n e.stopPropagation()\n onDeleteBlock(block.id)\n }}\n className={cn(\n 'p-1.5 rounded-full transition-all opacity-0 group-hover:opacity-100',\n 'hover:bg-white/30 dark:hover:bg-gray-700/50',\n 'hover:scale-110 active:scale-95',\n isSelected\n ? 'text-white hover:bg-white/40'\n : 'text-gray-600 dark:text-gray-400 hover:bg-gray-200 dark:hover:bg-gray-700'\n )}\n title=\"Deletar bloco\"\n >\n <Trash2 className=\"w-3.5 h-3.5\" />\n </button>\n </div>\n\n {/* Renderizar children recursivamente */}\n {hasChildren && (\n <div className=\"mt-1\">\n {props.children\n .filter((child: Block) => child && child.id && child.type) // Filtrar children inválidos\n .map((child: Block) =>\n renderBlockTree(child, depth + 1, selectedBlockId, onSelectBlock, onDeleteBlock)\n )}\n </div>\n )}\n </div>\n )\n}\n\nexport const BlockSelector = React.memo(function BlockSelector({\n structure,\n selectedBlockId,\n onSelectBlock,\n onDeleteBlock,\n}: BlockSelectorProps) {\n // Filtrar estrutura inválida ANTES de usar\n const validStructure = useMemo(() => {\n if (!structure || !Array.isArray(structure)) return []\n return structure.filter((b) => b && typeof b === 'object' && b.id && b.type)\n }, [structure])\n\n // Contar total de blocos (incluindo children) - usando useMemo para evitar recálculos\n const totalBlocks = useMemo(() => {\n const count = (blocks: Block[]): number => {\n if (!blocks || !Array.isArray(blocks) || blocks.length === 0) return 0\n \n let total = 0\n for (let i = 0; i < blocks.length; i++) {\n const block = blocks[i]\n \n // Verificar se o bloco é válido ANTES de acessar qualquer propriedade\n if (!block || typeof block !== 'object' || !block.id || !block.type) {\n continue\n }\n \n total++ // Contar o bloco atual\n \n // Verificar props de forma segura - SEMPRE dentro de try-catch\n try {\n if (!block.props) {\n continue\n }\n \n const props = block.props\n if (props && typeof props === 'object' && !Array.isArray(props)) {\n const children = (props as Record<string, any>).children\n if (children && Array.isArray(children) && children.length > 0) {\n // Filtrar children inválidos antes de contar recursivamente\n const validChildren = children.filter(\n (child: unknown) => child && typeof child === 'object' && (child as Block).id && (child as Block).type\n )\n if (validChildren.length > 0) {\n total += count(validChildren)\n }\n }\n }\n } catch (error) {\n // Se houver erro ao acessar props, apenas continuar\n continue\n }\n }\n return total\n }\n \n return count(validStructure)\n }, [validStructure])\n\n return (\n <div className=\"h-full flex flex-col overflow-hidden\">\n {/* Header */}\n <div className=\"flex-shrink-0 p-3 border-b border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-900\">\n <h2 className=\"text-sm font-semibold text-gray-800 dark:text-gray-100\">Blocos</h2>\n <p className=\"text-xs text-gray-500 dark:text-gray-400 mt-1\">\n {totalBlocks} {totalBlocks === 1 ? 'bloco' : 'blocos'}\n </p>\n </div>\n\n {/* Lista de blocos */}\n <div className=\"flex-1 overflow-y-auto p-2 space-y-1\">\n {!validStructure || validStructure.length === 0 ? (\n <div className=\"text-center text-gray-500 dark:text-gray-400 text-xs py-8\">\n Nenhum bloco adicionado ainda\n </div>\n ) : (\n validStructure.map((block) =>\n renderBlockTree(block, 0, selectedBlockId, onSelectBlock, onDeleteBlock)\n )\n )}\n </div>\n </div>\n )\n});\n"],"names":["getBlockTypeName","type","componentRegistry","getBlockPreview","block","props","renderBlockTree","depth","selectedBlockId","onSelectBlock","onDeleteBlock","isSelected","hasChildren","jsxs","cn","jsx","ChevronRight","Trash2","child","BlockSelector","React","structure","validStructure","useMemo","b","totalBlocks","count","blocks","total","i","children","validChildren"],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { SiteDocument } from '../engine';
2
+ import { TemplateId } from '../shared/templates';
3
+ export interface UploadConfig {
4
+ tenantId?: string;
5
+ schoolId?: string;
6
+ siteId?: string | null;
7
+ authToken?: string;
8
+ }
9
+ export interface LandingPageEditorProps {
10
+ initialData?: SiteDocument;
11
+ /** ID do template a carregar quando não houver initialData (ex.: "escola-edvi") */
12
+ defaultTemplateId?: TemplateId;
13
+ onSave?: (data: SiteDocument) => Promise<void>;
14
+ onPublish?: (data: SiteDocument) => Promise<void>;
15
+ /** Configuração para upload seguro de imagens/vídeos */
16
+ uploadConfig?: UploadConfig;
17
+ }
18
+ export declare function LandingPageEditor({ initialData, defaultTemplateId, onSave, onPublish, uploadConfig, }: LandingPageEditorProps): import("react/jsx-runtime").JSX.Element;
19
+ //# sourceMappingURL=LandingPageEditor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LandingPageEditor.d.ts","sourceRoot":"","sources":["../../src/editor/LandingPageEditor.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,OAAO,EAAE,YAAY,EAAuB,MAAM,WAAW,CAAC;AAE9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAWtD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,sBAAsB;IACrC,WAAW,CAAC,EAAE,YAAY,CAAC;IAC3B,mFAAmF;IACnF,iBAAiB,CAAC,EAAE,UAAU,CAAC;IAC/B,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,wDAAwD;IACxD,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AAMD,wBAAgB,iBAAiB,CAAC,EAChC,WAAW,EACX,iBAAiB,EACjB,MAAM,EACN,SAAS,EACT,YAAY,GACb,EAAE,sBAAsB,2CAuRxB"}
@@ -0,0 +1,239 @@
1
+ import { jsx as i, jsxs as I } from "react/jsx-runtime";
2
+ import { useState as h, useCallback as g, useEffect as N } from "react";
3
+ import { TemplatePicker as ne } from "./TemplatePicker.js";
4
+ import { useEditorState as ae } from "../hooks/useEditorState.js";
5
+ import { useKeyboardShortcuts as ce } from "../hooks/useKeyboardShortcuts.js";
6
+ import { getTemplate as O } from "../shared/templates/index.js";
7
+ import { sharedTemplateToEngineDocument as j } from "../utils/sharedTemplateToEngine.js";
8
+ import { findBlockInStructure as se } from "../utils/blockUtils.js";
9
+ import { isLightColor as A } from "../utils/colorUtils.js";
10
+ import { logger as y } from "../utils/logger.js";
11
+ import { processBlockDataURLs as ie } from "../utils/dataURLUtils.js";
12
+ import { Toolbar as le } from "./components/Toolbar.js";
13
+ import { LeftPanel as de } from "./components/LeftPanel.js";
14
+ import { CenterPanel as me } from "./components/CenterPanel.js";
15
+ import { RightPanel as fe } from "./components/RightPanel.js";
16
+ import { PatchBuilder as G } from "../engine/patch/PatchBuilder.js";
17
+ function Le({
18
+ initialData: F,
19
+ defaultTemplateId: p,
20
+ onSave: S,
21
+ onPublish: k,
22
+ uploadConfig: v
23
+ }) {
24
+ const {
25
+ document: o,
26
+ currentPageId: b,
27
+ currentPage: l,
28
+ selectedBlockId: d,
29
+ selectedBlock: K,
30
+ history: M,
31
+ setCurrentPageId: m,
32
+ addPage: W,
33
+ removePage: q,
34
+ canRemovePage: z,
35
+ setSelectedBlockId: c,
36
+ handleUndo: x,
37
+ handleRedo: B,
38
+ handleDeleteBlock: w,
39
+ handleUpdateBlock: H,
40
+ applyChange: f,
41
+ resetToTemplate: J,
42
+ isPaletteSelected: C,
43
+ loadDocument: P,
44
+ activePlugins: Q,
45
+ activatePlugin: V,
46
+ deactivatePlugin: X
47
+ } = ae({ initialData: F }), [Y, u] = h(!1), [T, Z] = h(
48
+ null
49
+ ), [D, L] = h(null), [U, _] = h(!1), E = g(
50
+ (e) => {
51
+ const r = O(e);
52
+ if (!r) return;
53
+ const t = j(r);
54
+ P(t), Z(e);
55
+ },
56
+ [P]
57
+ );
58
+ N(() => {
59
+ !o && p && E(p);
60
+ }, [p]);
61
+ const R = async () => {
62
+ if (!(!o || !S || !v)) {
63
+ u(!0);
64
+ try {
65
+ const e = await Promise.all(
66
+ (o.pages || []).map(async (t) => ({
67
+ ...t,
68
+ structure: await Promise.all(
69
+ (t.structure || []).map((n) => ie(n, v))
70
+ )
71
+ }))
72
+ ), r = {
73
+ ...o,
74
+ pages: e
75
+ };
76
+ await S(r);
77
+ } catch (e) {
78
+ throw y.error("Error saving:", e), e;
79
+ } finally {
80
+ u(!1);
81
+ }
82
+ }
83
+ }, $ = async () => {
84
+ if (!(!o || !k)) {
85
+ u(!0);
86
+ try {
87
+ await k(o);
88
+ } catch (e) {
89
+ y.error("Error publishing:", e);
90
+ } finally {
91
+ u(!1);
92
+ }
93
+ }
94
+ }, ee = g(
95
+ (e, r) => {
96
+ if (!o || !l) return;
97
+ const t = l.id;
98
+ if (t)
99
+ try {
100
+ const n = G.updateBlockProps(
101
+ o,
102
+ t,
103
+ e,
104
+ r
105
+ );
106
+ n?.length && f(n, "Update block properties");
107
+ } catch (n) {
108
+ y.error("Error updating block:", n);
109
+ }
110
+ },
111
+ [o, l, f]
112
+ ), oe = g((e) => {
113
+ if (!o) return;
114
+ const r = A(e.background ?? "#ffffff"), t = A(e.primary ?? "#3b82f6"), n = r ? "#6b7280" : "#9ca3af", s = t ? "#1f2937" : "#ffffff", a = G.updateTheme(o, {
115
+ colors: {
116
+ ...o.theme.colors,
117
+ primary: e.primary,
118
+ secondary: e.secondary,
119
+ accent: e.accent,
120
+ bg: e.background,
121
+ surface: e.surface || o.theme.colors.surface,
122
+ text: e.text || o.theme.colors.text,
123
+ mutedText: n,
124
+ primaryText: s,
125
+ linkColor: e.linkColor || e.primary,
126
+ // Links gerais
127
+ menuLinkColor: e.menuLinkColor || e.primary
128
+ // Links do menu navbar
129
+ }
130
+ });
131
+ f(a, "Update color palette");
132
+ }, [o, f]), re = g((e, r) => {
133
+ c(e), L(r || null);
134
+ }, [c]);
135
+ return ce({
136
+ onUndo: x,
137
+ onRedo: B,
138
+ onSave: R,
139
+ onDelete: () => {
140
+ d && w(d);
141
+ },
142
+ onDeselect: () => c(null)
143
+ }), N(() => {
144
+ const e = (r) => {
145
+ if (r.data?.type !== "editor-navigate" || !r.data.href) return;
146
+ const t = String(r.data.href);
147
+ if (!o) return;
148
+ const n = t.match(/^(?:\/site)?\/p\/([^#?]+)/);
149
+ if (n) {
150
+ const s = n[1], a = o.pages.find((te) => te.slug === s);
151
+ a && m(a.id);
152
+ return;
153
+ }
154
+ if (t.startsWith("#")) {
155
+ const s = t.slice(1);
156
+ for (const a of o.pages)
157
+ if (se(a.structure || [], s)) {
158
+ m(a.id), c(s);
159
+ break;
160
+ }
161
+ }
162
+ };
163
+ return window.addEventListener("message", e), () => window.removeEventListener("message", e);
164
+ }, [o, m, c]), o ? /* @__PURE__ */ I("div", { className: "h-[91vh] max-h-[91vh] flex flex-col bg-background overflow-hidden", children: [
165
+ /* @__PURE__ */ i(
166
+ le,
167
+ {
168
+ history: M,
169
+ isSaving: Y,
170
+ onUndo: x,
171
+ onRedo: B,
172
+ onSave: R,
173
+ onPublish: k ? $ : void 0,
174
+ onReset: T ? () => {
175
+ const e = O(T);
176
+ e && P(j(e));
177
+ } : J,
178
+ showSelectionOverlay: U,
179
+ onToggleSelectionOverlay: () => _((e) => !e)
180
+ }
181
+ ),
182
+ /* @__PURE__ */ I("div", { className: "flex-1 flex overflow-hidden min-h-0 max-h-full", children: [
183
+ /* @__PURE__ */ i(
184
+ de,
185
+ {
186
+ currentPage: l,
187
+ selectedBlockId: d,
188
+ isPaletteSelected: C,
189
+ onSelectBlock: (e) => {
190
+ c(e), L(null);
191
+ },
192
+ onDeleteBlock: w
193
+ }
194
+ ),
195
+ /* @__PURE__ */ i(
196
+ me,
197
+ {
198
+ document: o,
199
+ currentPageId: b,
200
+ currentPage: l,
201
+ selectedBlockId: d,
202
+ onBlockClick: re,
203
+ onSelectPage: m,
204
+ onAddPage: () => {
205
+ const e = prompt("Nome da página:");
206
+ if (!e) return;
207
+ const r = e.toLowerCase().replace(/\s+/g, "-");
208
+ W(r, e, r);
209
+ },
210
+ onRemovePage: q,
211
+ canRemovePage: z,
212
+ onUpdateBlock: ee,
213
+ activePlugins: Q,
214
+ onActivatePlugin: V,
215
+ onDeactivatePlugin: X,
216
+ showSelectionOverlay: U,
217
+ focusedGroup: D
218
+ }
219
+ ),
220
+ /* @__PURE__ */ i(
221
+ fe,
222
+ {
223
+ isPaletteSelected: C,
224
+ selectedBlock: K,
225
+ onPaletteChange: oe,
226
+ onUpdateBlock: H,
227
+ uploadConfig: v,
228
+ document: o,
229
+ currentPageId: b,
230
+ focusedGroup: D
231
+ }
232
+ )
233
+ ] })
234
+ ] }) : /* @__PURE__ */ i("div", { className: "h-[91vh] max-h-[91vh] flex flex-col bg-background overflow-hidden", children: /* @__PURE__ */ i(ne, { onSelectTemplate: E }) });
235
+ }
236
+ export {
237
+ Le as LandingPageEditor
238
+ };
239
+ //# sourceMappingURL=LandingPageEditor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LandingPageEditor.js","sources":["../../src/editor/LandingPageEditor.tsx"],"sourcesContent":["/**\n * Landing Page Editor\n * Editor de landing pages usando block engine\n */\n\nimport { useState, useCallback, useEffect, lazy, Suspense } from \"react\";\nimport { TemplatePicker } from \"./TemplatePicker\";\nimport { Toolbar, LeftPanel, CenterPanel, RightPanel } from \"./components\";\nimport { useEditorState } from \"../hooks/useEditorState\";\nimport { useKeyboardShortcuts } from \"../hooks/useKeyboardShortcuts\";\nimport { LoadingSpinner } from \"./components/LoadingSpinner\";\nimport { SiteDocument, PatchBuilder, Block } from \"../engine\";\nimport { getTemplate } from \"../shared/templates\";\nimport type { TemplateId } from \"../shared/templates\";\nimport { sharedTemplateToEngineDocument } from \"../utils/sharedTemplateToEngine\";\nimport { findBlockInStructure } from \"../utils/blockUtils\";\nimport { isLightColor } from \"../utils/colorUtils\";\nimport { logger } from \"../utils/logger\";\nimport { processBlockDataURLs } from \"../utils/dataURLUtils\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface UploadConfig {\n tenantId?: string;\n schoolId?: string;\n siteId?: string | null;\n authToken?: string;\n}\n\nexport interface LandingPageEditorProps {\n initialData?: SiteDocument;\n /** ID do template a carregar quando não houver initialData (ex.: \"escola-edvi\") */\n defaultTemplateId?: TemplateId;\n onSave?: (data: SiteDocument) => Promise<void>;\n onPublish?: (data: SiteDocument) => Promise<void>;\n /** Configuração para upload seguro de imagens/vídeos */\n uploadConfig?: UploadConfig;\n}\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport function LandingPageEditor({\n initialData,\n defaultTemplateId,\n onSave,\n onPublish,\n uploadConfig,\n}: LandingPageEditorProps) {\n // Hook de estado do editor (edição por páginas; sem navegação)\n const {\n document,\n currentPageId,\n currentPage,\n selectedBlockId,\n selectedBlock,\n history,\n setCurrentPageId,\n addPage,\n removePage,\n canRemovePage,\n setSelectedBlockId,\n handleUndo,\n handleRedo,\n handleDeleteBlock,\n handleUpdateBlock,\n applyChange,\n resetToTemplate,\n isPaletteSelected,\n loadDocument,\n activePlugins,\n activatePlugin,\n deactivatePlugin,\n } = useEditorState({ initialData });\n\n // Estado local da UI\n const [isSaving, setIsSaving] = useState(false);\n const [currentTemplateId, setCurrentTemplateId] = useState<TemplateId | null>(\n null,\n );\n const [focusedGroup, setFocusedGroup] = useState<string | null>(null);\n const [showSelectionOverlay, setShowSelectionOverlay] = useState(false);\n\n // Carregar template escolhido (converter shared → engine e carregar no editor)\n const handleSelectTemplate = useCallback(\n (templateId: TemplateId) => {\n const sharedDoc = getTemplate(templateId);\n if (!sharedDoc) return;\n const engineDoc = sharedTemplateToEngineDocument(sharedDoc);\n loadDocument(engineDoc);\n setCurrentTemplateId(templateId);\n },\n [loadDocument],\n );\n\n // Ao montar sem documento: carregar defaultTemplateId se informado\n useEffect(() => {\n if (!document && defaultTemplateId) {\n handleSelectTemplate(defaultTemplateId);\n }\n }, [defaultTemplateId]); // eslint-disable-line react-hooks/exhaustive-deps -- carregar só uma vez quando defaultTemplateId existe\n\n // Handlers de save/publish\n const handleSave = async () => {\n if (!document || !onSave || !uploadConfig) return;\n setIsSaving(true);\n try {\n // Processar o documento para fazer upload de todos os Data URLs\n const processedPages = await Promise.all(\n (document.pages || []).map(async (page) => ({\n ...page,\n structure: await Promise.all(\n (page.structure || []).map((block) => processBlockDataURLs(block, uploadConfig))\n ),\n }))\n );\n\n const processedDocument = {\n ...document,\n pages: processedPages,\n };\n\n await onSave(processedDocument);\n } catch (error) {\n logger.error(\"Error saving:\", error);\n throw error;\n } finally {\n setIsSaving(false);\n }\n };\n\n const handlePublish = async () => {\n if (!document || !onPublish) return;\n setIsSaving(true);\n try {\n await onPublish(document);\n } catch (error) {\n logger.error(\"Error publishing:\", error);\n } finally {\n setIsSaving(false);\n }\n };\n\n // Handler para atualizar um bloco específico\n const handleUpdateBlockById = useCallback(\n (blockId: string, updates: Record<string, any>) => {\n if (!document || !currentPage) return;\n const pageId = (currentPage as any).id;\n if (!pageId) return;\n\n try {\n const patch = PatchBuilder.updateBlockProps(\n document,\n pageId,\n blockId,\n updates\n );\n if (patch?.length) {\n applyChange(patch, \"Update block properties\");\n }\n } catch (error) {\n logger.error(\"Error updating block:\", error);\n }\n },\n [document, currentPage, applyChange]\n );\n\n // Handler para atualizar paleta de cores (inclui mutedText, primaryText, linkColor e menuLinkColor)\n const handlePaletteChange = useCallback((palette: any) => {\n if (!document) return;\n const bgLight = isLightColor(palette.background ?? \"#ffffff\");\n const primaryLight = isLightColor(palette.primary ?? \"#3b82f6\");\n const mutedText = bgLight ? \"#6b7280\" : \"#9ca3af\";\n const primaryText = primaryLight ? \"#1f2937\" : \"#ffffff\";\n const patch = PatchBuilder.updateTheme(document, {\n colors: {\n ...document.theme.colors,\n primary: palette.primary,\n secondary: palette.secondary,\n accent: palette.accent,\n bg: palette.background,\n surface: palette.surface || document.theme.colors.surface,\n text: palette.text || document.theme.colors.text,\n mutedText,\n primaryText,\n linkColor: palette.linkColor || palette.primary, // Links gerais\n menuLinkColor: palette.menuLinkColor || palette.primary, // Links do menu navbar\n },\n });\n applyChange(patch, \"Update color palette\");\n }, [document, applyChange]);\n\n // Handler para clique no preview (com grupo opcional para scroll-to-group)\n const handleBlockClick = useCallback((blockId: string, group?: string) => {\n setSelectedBlockId(blockId);\n setFocusedGroup(group || null);\n }, [setSelectedBlockId]);\n\n // Limpar focusedGroup quando o bloco selecionado muda (via seleção no painel esquerdo, etc.)\n // Nota: handleBlockClick já define o focusedGroup corretamente quando vem do preview\n\n // No editor: cliques em links no preview não navegam; trocam a página em edição\n // Keyboard shortcuts\n useKeyboardShortcuts({\n onUndo: handleUndo,\n onRedo: handleRedo,\n onSave: handleSave,\n onDelete: () => {\n if (selectedBlockId) {\n handleDeleteBlock(selectedBlockId);\n }\n },\n onDeselect: () => setSelectedBlockId(null),\n });\n\n useEffect(() => {\n const handleMessage = (event: MessageEvent) => {\n if (event.data?.type !== \"editor-navigate\" || !event.data.href) return;\n const href = String(event.data.href);\n if (!document) return;\n // Links internos: /site/p/:slug ou /p/:slug\n const match = href.match(/^(?:\\/site)?\\/p\\/([^#?]+)/);\n if (match) {\n const slug = match[1];\n const page = document.pages.find((p) => p.slug === slug);\n if (page) setCurrentPageId(page.id);\n return;\n }\n // Âncora #id: selecionar bloco com esse id e trocar para a página que o contém\n if (href.startsWith(\"#\")) {\n const id = href.slice(1);\n for (const p of document.pages) {\n if (findBlockInStructure(p.structure || [], id)) {\n setCurrentPageId(p.id);\n setSelectedBlockId(id);\n break;\n }\n }\n }\n };\n window.addEventListener(\"message\", handleMessage);\n return () => window.removeEventListener(\"message\", handleMessage);\n }, [document, setCurrentPageId, setSelectedBlockId]);\n\n // Sem documento: mostrar seletor de templates\n if (!document) {\n return (\n <div className=\"h-[91vh] max-h-[91vh] flex flex-col bg-background overflow-hidden\">\n <TemplatePicker onSelectTemplate={handleSelectTemplate} />\n </div>\n );\n }\n\n return (\n <div className=\"h-[91vh] max-h-[91vh] flex flex-col bg-background overflow-hidden\">\n {/* Toolbar */}\n <Toolbar\n history={history}\n isSaving={isSaving}\n onUndo={handleUndo}\n onRedo={handleRedo}\n onSave={handleSave}\n onPublish={onPublish ? handlePublish : undefined}\n onReset={\n currentTemplateId\n ? () => {\n // Recarregar o mesmo template\n const sharedDoc = getTemplate(currentTemplateId);\n if (sharedDoc)\n loadDocument(sharedTemplateToEngineDocument(sharedDoc));\n }\n : resetToTemplate\n }\n showSelectionOverlay={showSelectionOverlay}\n onToggleSelectionOverlay={() => setShowSelectionOverlay(prev => !prev)}\n />\n\n {/* Main Content - 3 Columns */}\n <div className=\"flex-1 flex overflow-hidden min-h-0 max-h-full\">\n {/* Left: Block Selector + Paletas */}\n <LeftPanel\n currentPage={currentPage}\n selectedBlockId={selectedBlockId}\n isPaletteSelected={isPaletteSelected}\n onSelectBlock={(id) => { setSelectedBlockId(id); setFocusedGroup(null); }}\n onDeleteBlock={handleDeleteBlock}\n />\n\n {/* Center: Preview (apenas a página em edição) */}\n <CenterPanel\n document={document}\n currentPageId={currentPageId}\n currentPage={currentPage}\n selectedBlockId={selectedBlockId}\n onBlockClick={handleBlockClick}\n onSelectPage={setCurrentPageId}\n onAddPage={() => {\n const name = prompt(\"Nome da página:\");\n if (!name) return;\n const slug = name.toLowerCase().replace(/\\s+/g, \"-\");\n const id = slug;\n addPage(id, name, slug);\n }}\n onRemovePage={removePage}\n canRemovePage={canRemovePage}\n onUpdateBlock={handleUpdateBlockById}\n activePlugins={activePlugins}\n onActivatePlugin={activatePlugin}\n onDeactivatePlugin={deactivatePlugin}\n showSelectionOverlay={showSelectionOverlay}\n focusedGroup={focusedGroup}\n />\n\n {/* Right: Editor Panel */}\n <RightPanel\n isPaletteSelected={isPaletteSelected}\n selectedBlock={selectedBlock}\n onPaletteChange={handlePaletteChange}\n onUpdateBlock={handleUpdateBlock}\n uploadConfig={uploadConfig}\n document={document}\n currentPageId={currentPageId}\n focusedGroup={focusedGroup}\n />\n </div>\n </div>\n );\n}\n"],"names":["LandingPageEditor","initialData","defaultTemplateId","onSave","onPublish","uploadConfig","document","currentPageId","currentPage","selectedBlockId","selectedBlock","history","setCurrentPageId","addPage","removePage","canRemovePage","setSelectedBlockId","handleUndo","handleRedo","handleDeleteBlock","handleUpdateBlock","applyChange","resetToTemplate","isPaletteSelected","loadDocument","activePlugins","activatePlugin","deactivatePlugin","useEditorState","isSaving","setIsSaving","useState","currentTemplateId","setCurrentTemplateId","focusedGroup","setFocusedGroup","showSelectionOverlay","setShowSelectionOverlay","handleSelectTemplate","useCallback","templateId","sharedDoc","getTemplate","engineDoc","sharedTemplateToEngineDocument","useEffect","handleSave","processedPages","page","block","processBlockDataURLs","processedDocument","error","logger","handlePublish","handleUpdateBlockById","blockId","updates","pageId","patch","PatchBuilder","handlePaletteChange","palette","bgLight","isLightColor","primaryLight","mutedText","primaryText","handleBlockClick","group","useKeyboardShortcuts","handleMessage","event","href","match","slug","p","id","findBlockInStructure","jsxs","jsx","Toolbar","prev","LeftPanel","CenterPanel","name","RightPanel","TemplatePicker"],"mappings":"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"}
@@ -6,6 +6,9 @@ export interface PageTabBarProps {
6
6
  onAddPage: () => void;
7
7
  onRemovePage: (id: string) => void;
8
8
  canRemovePage: (id: string) => boolean;
9
+ activePlugins: string[];
10
+ onActivatePlugin: (pluginId: string) => void;
11
+ onDeactivatePlugin: (pluginId: string) => void;
9
12
  }
10
- export declare function PageTabBar({ pages, currentPageId, onSelectPage, onAddPage, onRemovePage, canRemovePage, }: PageTabBarProps): import("react/jsx-runtime").JSX.Element;
13
+ export declare function PageTabBar({ pages, currentPageId, onSelectPage, onAddPage, onRemovePage, canRemovePage, activePlugins, onActivatePlugin, onDeactivatePlugin, }: PageTabBarProps): import("react/jsx-runtime").JSX.Element;
11
14
  //# sourceMappingURL=PageTabBar.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"PageTabBar.d.ts","sourceRoot":"","sources":["../../src/editor/PageTabBar.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAExD,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,YAAY,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,aAAa,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC;CACxC;AAED,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,aAAa,EACb,YAAY,EACZ,SAAS,EACT,YAAY,EACZ,aAAa,GACd,EAAE,eAAe,2CA+GjB"}
1
+ {"version":3,"file":"PageTabBar.d.ts","sourceRoot":"","sources":["../../src/editor/PageTabBar.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAGxD,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,YAAY,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,aAAa,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC;IACvC,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,gBAAgB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,kBAAkB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CAChD;AAED,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,aAAa,EACb,YAAY,EACZ,SAAS,EACT,YAAY,EACZ,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,kBAAkB,GACnB,EAAE,eAAe,2CA4RjB"}