@prenta/admin 0.98.1 → 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 (371) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/AdminRoot.d.ts.map +1 -1
  3. package/dist/AdminRoot.js +22 -84
  4. package/dist/AdminRoot.js.map +1 -1
  5. package/dist/__tests__/components/breakpoint-controls.render.test.js +4 -4
  6. package/dist/__tests__/components/breakpoint-controls.render.test.js.map +1 -1
  7. package/dist/__tests__/components/seo-score-bands.test.js +0 -3
  8. package/dist/__tests__/components/seo-score-bands.test.js.map +1 -1
  9. package/dist/__tests__/layout/sidebar-posts.test.js +6 -11
  10. package/dist/__tests__/layout/sidebar-posts.test.js.map +1 -1
  11. package/dist/__tests__/layout/sidebar-submenu.render.test.js +3 -2
  12. package/dist/__tests__/layout/sidebar-submenu.render.test.js.map +1 -1
  13. package/dist/__tests__/lib/open-public-site-tab.test.d.ts +2 -0
  14. package/dist/__tests__/lib/open-public-site-tab.test.d.ts.map +1 -0
  15. package/dist/__tests__/lib/open-public-site-tab.test.js +64 -0
  16. package/dist/__tests__/lib/open-public-site-tab.test.js.map +1 -0
  17. package/dist/__tests__/lib/page-editor-service-api.test.js +26 -23
  18. package/dist/__tests__/lib/page-editor-service-api.test.js.map +1 -1
  19. package/dist/__tests__/lib/view-site-chrome.test.d.ts +2 -0
  20. package/dist/__tests__/lib/view-site-chrome.test.d.ts.map +1 -0
  21. package/dist/__tests__/lib/view-site-chrome.test.js +59 -0
  22. package/dist/__tests__/lib/view-site-chrome.test.js.map +1 -0
  23. package/dist/__tests__/router/admin-routes.test.js +4 -0
  24. package/dist/__tests__/router/admin-routes.test.js.map +1 -1
  25. package/dist/__tests__/views/canvas-surface-shared.test.js +0 -16
  26. package/dist/__tests__/views/canvas-surface-shared.test.js.map +1 -1
  27. package/dist/__tests__/views/editor-top-bar.render.test.js +44 -22
  28. package/dist/__tests__/views/editor-top-bar.render.test.js.map +1 -1
  29. package/dist/__tests__/views/page-section-editor.test.js +30 -10
  30. package/dist/__tests__/views/page-section-editor.test.js.map +1 -1
  31. package/dist/__tests__/views/page-tab.render.test.js +0 -1
  32. package/dist/__tests__/views/page-tab.render.test.js.map +1 -1
  33. package/dist/__tests__/views/post-section-editor.test.js +23 -0
  34. package/dist/__tests__/views/post-section-editor.test.js.map +1 -1
  35. package/dist/components/BreakpointPicker.d.ts +3 -2
  36. package/dist/components/BreakpointPicker.d.ts.map +1 -1
  37. package/dist/components/BreakpointPicker.js +5 -3
  38. package/dist/components/BreakpointPicker.js.map +1 -1
  39. package/dist/components/CanvasEditTip.js +1 -1
  40. package/dist/components/CanvasEditTip.js.map +1 -1
  41. package/dist/index.d.ts +1 -4
  42. package/dist/index.d.ts.map +1 -1
  43. package/dist/index.js +1 -3
  44. package/dist/index.js.map +1 -1
  45. package/dist/layout/Sidebar.d.ts +3 -4
  46. package/dist/layout/Sidebar.d.ts.map +1 -1
  47. package/dist/layout/Sidebar.js +7 -38
  48. package/dist/layout/Sidebar.js.map +1 -1
  49. package/dist/lib/editor-preview.d.ts +4 -1
  50. package/dist/lib/editor-preview.d.ts.map +1 -1
  51. package/dist/lib/editor-preview.js +4 -1
  52. package/dist/lib/editor-preview.js.map +1 -1
  53. package/dist/lib/open-public-site-tab.d.ts +14 -0
  54. package/dist/lib/open-public-site-tab.d.ts.map +1 -0
  55. package/dist/lib/open-public-site-tab.js +46 -0
  56. package/dist/lib/open-public-site-tab.js.map +1 -0
  57. package/dist/lib/page-editor-service.d.ts +0 -7
  58. package/dist/lib/page-editor-service.d.ts.map +1 -1
  59. package/dist/lib/page-editor-service.js +9 -9
  60. package/dist/lib/page-editor-service.js.map +1 -1
  61. package/dist/lib/view-site-chrome.d.ts +16 -0
  62. package/dist/lib/view-site-chrome.d.ts.map +1 -0
  63. package/dist/lib/view-site-chrome.js +15 -0
  64. package/dist/lib/view-site-chrome.js.map +1 -0
  65. package/dist/prenta-admin.css +1 -1
  66. package/dist/router/admin-routes.d.ts.map +1 -1
  67. package/dist/router/admin-routes.js +0 -2
  68. package/dist/router/admin-routes.js.map +1 -1
  69. package/dist/views/PageEditor.d.ts +2 -2
  70. package/dist/views/PageEditor.js +2 -2
  71. package/dist/views/page-editor/EditorCanvas.d.ts +1 -2
  72. package/dist/views/page-editor/EditorCanvas.d.ts.map +1 -1
  73. package/dist/views/page-editor/EditorCanvas.js +2 -2
  74. package/dist/views/page-editor/EditorCanvas.js.map +1 -1
  75. package/dist/views/page-editor/EditorTopBar.d.ts +13 -17
  76. package/dist/views/page-editor/EditorTopBar.d.ts.map +1 -1
  77. package/dist/views/page-editor/EditorTopBar.js +19 -21
  78. package/dist/views/page-editor/EditorTopBar.js.map +1 -1
  79. package/dist/views/page-editor/PageSectionEditor.d.ts +1 -7
  80. package/dist/views/page-editor/PageSectionEditor.d.ts.map +1 -1
  81. package/dist/views/page-editor/PageSectionEditor.js +38 -110
  82. package/dist/views/page-editor/PageSectionEditor.js.map +1 -1
  83. package/dist/views/page-editor/StructureNotice.d.ts +2 -5
  84. package/dist/views/page-editor/StructureNotice.d.ts.map +1 -1
  85. package/dist/views/page-editor/StructureNotice.js +6 -10
  86. package/dist/views/page-editor/StructureNotice.js.map +1 -1
  87. package/dist/views/post-editor/PostEditorCanvas.d.ts +1 -3
  88. package/dist/views/post-editor/PostEditorCanvas.d.ts.map +1 -1
  89. package/dist/views/post-editor/PostEditorCanvas.js +3 -3
  90. package/dist/views/post-editor/PostEditorCanvas.js.map +1 -1
  91. package/dist/views/post-editor/PostSectionEditor.d.ts +1 -15
  92. package/dist/views/post-editor/PostSectionEditor.d.ts.map +1 -1
  93. package/dist/views/post-editor/PostSectionEditor.js +30 -88
  94. package/dist/views/post-editor/PostSectionEditor.js.map +1 -1
  95. package/package.json +3 -3
  96. package/src/AdminRoot.tsx +18 -138
  97. package/src/__tests__/components/breakpoint-controls.render.test.tsx +6 -4
  98. package/src/__tests__/components/seo-score-bands.test.ts +0 -3
  99. package/src/__tests__/layout/sidebar-posts.test.ts +6 -11
  100. package/src/__tests__/layout/sidebar-submenu.render.test.tsx +3 -2
  101. package/src/__tests__/lib/open-public-site-tab.test.ts +74 -0
  102. package/src/__tests__/lib/page-editor-service-api.test.ts +27 -25
  103. package/src/__tests__/lib/view-site-chrome.test.ts +65 -0
  104. package/src/__tests__/router/admin-routes.test.ts +5 -0
  105. package/src/__tests__/views/canvas-surface-shared.test.ts +0 -19
  106. package/src/__tests__/views/editor-top-bar.render.test.tsx +85 -22
  107. package/src/__tests__/views/page-section-editor.test.tsx +42 -10
  108. package/src/__tests__/views/page-tab.render.test.tsx +0 -1
  109. package/src/__tests__/views/post-section-editor.test.tsx +35 -0
  110. package/src/components/BreakpointPicker.tsx +6 -3
  111. package/src/components/CanvasEditTip.tsx +2 -2
  112. package/src/index.ts +1 -11
  113. package/src/layout/Sidebar.tsx +6 -41
  114. package/src/lib/editor-preview.ts +4 -1
  115. package/src/lib/open-public-site-tab.ts +57 -0
  116. package/src/lib/page-editor-service.ts +9 -16
  117. package/src/lib/view-site-chrome.ts +34 -0
  118. package/src/router/admin-routes.ts +0 -2
  119. package/src/styles/theme.css +4 -4
  120. package/src/views/PageEditor.tsx +2 -2
  121. package/src/views/page-editor/EditorCanvas.tsx +1 -6
  122. package/src/views/page-editor/EditorTopBar.tsx +81 -82
  123. package/src/views/page-editor/PageSectionEditor.tsx +85 -194
  124. package/src/views/page-editor/StructureNotice.tsx +7 -42
  125. package/src/views/post-editor/PostEditorCanvas.tsx +2 -8
  126. package/src/views/post-editor/PostSectionEditor.tsx +66 -138
  127. package/dist/__tests__/views/page-builder-block-renderer.render.test.d.ts +0 -2
  128. package/dist/__tests__/views/page-builder-block-renderer.render.test.d.ts.map +0 -1
  129. package/dist/__tests__/views/page-builder-block-renderer.render.test.js +0 -48
  130. package/dist/__tests__/views/page-builder-block-renderer.render.test.js.map +0 -1
  131. package/dist/__tests__/views/page-builder-form-picker.render.test.d.ts +0 -2
  132. package/dist/__tests__/views/page-builder-form-picker.render.test.d.ts.map +0 -1
  133. package/dist/__tests__/views/page-builder-form-picker.render.test.js +0 -44
  134. package/dist/__tests__/views/page-builder-form-picker.render.test.js.map +0 -1
  135. package/dist/__tests__/views/page-builder-sections-panel.render.test.d.ts +0 -2
  136. package/dist/__tests__/views/page-builder-sections-panel.render.test.d.ts.map +0 -1
  137. package/dist/__tests__/views/page-builder-sections-panel.render.test.js +0 -121
  138. package/dist/__tests__/views/page-builder-sections-panel.render.test.js.map +0 -1
  139. package/dist/__tests__/views/page-builder-seo-panel.render.test.d.ts +0 -2
  140. package/dist/__tests__/views/page-builder-seo-panel.render.test.d.ts.map +0 -1
  141. package/dist/__tests__/views/page-builder-seo-panel.render.test.js +0 -65
  142. package/dist/__tests__/views/page-builder-seo-panel.render.test.js.map +0 -1
  143. package/dist/__tests__/views/page-builder-template-seed.render.test.d.ts +0 -2
  144. package/dist/__tests__/views/page-builder-template-seed.render.test.d.ts.map +0 -1
  145. package/dist/__tests__/views/page-builder-template-seed.render.test.js +0 -48
  146. package/dist/__tests__/views/page-builder-template-seed.render.test.js.map +0 -1
  147. package/dist/__tests__/views/page-templates.render.test.d.ts +0 -2
  148. package/dist/__tests__/views/page-templates.render.test.d.ts.map +0 -1
  149. package/dist/__tests__/views/page-templates.render.test.js +0 -126
  150. package/dist/__tests__/views/page-templates.render.test.js.map +0 -1
  151. package/dist/__tests__/views/use-site-preview.render.test.d.ts +0 -2
  152. package/dist/__tests__/views/use-site-preview.render.test.d.ts.map +0 -1
  153. package/dist/__tests__/views/use-site-preview.render.test.js +0 -120
  154. package/dist/__tests__/views/use-site-preview.render.test.js.map +0 -1
  155. package/dist/hooks/useBuilderState.d.ts +0 -49
  156. package/dist/hooks/useBuilderState.d.ts.map +0 -1
  157. package/dist/hooks/useBuilderState.js +0 -238
  158. package/dist/hooks/useBuilderState.js.map +0 -1
  159. package/dist/views/page-builder/AIBlockAssist.d.ts +0 -9
  160. package/dist/views/page-builder/AIBlockAssist.d.ts.map +0 -1
  161. package/dist/views/page-builder/AIBlockAssist.js +0 -40
  162. package/dist/views/page-builder/AIBlockAssist.js.map +0 -1
  163. package/dist/views/page-builder/AIGenerateDialog.d.ts +0 -8
  164. package/dist/views/page-builder/AIGenerateDialog.d.ts.map +0 -1
  165. package/dist/views/page-builder/AIGenerateDialog.js +0 -173
  166. package/dist/views/page-builder/AIGenerateDialog.js.map +0 -1
  167. package/dist/views/page-builder/BlockEditor.d.ts +0 -11
  168. package/dist/views/page-builder/BlockEditor.d.ts.map +0 -1
  169. package/dist/views/page-builder/BlockEditor.js +0 -159
  170. package/dist/views/page-builder/BlockEditor.js.map +0 -1
  171. package/dist/views/page-builder/BlockPicker.d.ts +0 -7
  172. package/dist/views/page-builder/BlockPicker.d.ts.map +0 -1
  173. package/dist/views/page-builder/BlockPicker.js +0 -103
  174. package/dist/views/page-builder/BlockPicker.js.map +0 -1
  175. package/dist/views/page-builder/BottomBar.d.ts +0 -9
  176. package/dist/views/page-builder/BottomBar.d.ts.map +0 -1
  177. package/dist/views/page-builder/BottomBar.js +0 -13
  178. package/dist/views/page-builder/BottomBar.js.map +0 -1
  179. package/dist/views/page-builder/BuilderSectionsPanel.d.ts +0 -20
  180. package/dist/views/page-builder/BuilderSectionsPanel.d.ts.map +0 -1
  181. package/dist/views/page-builder/BuilderSectionsPanel.js +0 -105
  182. package/dist/views/page-builder/BuilderSectionsPanel.js.map +0 -1
  183. package/dist/views/page-builder/BuilderToolbar.d.ts +0 -21
  184. package/dist/views/page-builder/BuilderToolbar.d.ts.map +0 -1
  185. package/dist/views/page-builder/BuilderToolbar.js +0 -18
  186. package/dist/views/page-builder/BuilderToolbar.js.map +0 -1
  187. package/dist/views/page-builder/ContextPanel.d.ts +0 -20
  188. package/dist/views/page-builder/ContextPanel.d.ts.map +0 -1
  189. package/dist/views/page-builder/ContextPanel.js +0 -43
  190. package/dist/views/page-builder/ContextPanel.js.map +0 -1
  191. package/dist/views/page-builder/DesignScore.d.ts +0 -6
  192. package/dist/views/page-builder/DesignScore.d.ts.map +0 -1
  193. package/dist/views/page-builder/DesignScore.js +0 -93
  194. package/dist/views/page-builder/DesignScore.js.map +0 -1
  195. package/dist/views/page-builder/NodeSettings.d.ts +0 -12
  196. package/dist/views/page-builder/NodeSettings.d.ts.map +0 -1
  197. package/dist/views/page-builder/NodeSettings.js +0 -80
  198. package/dist/views/page-builder/NodeSettings.js.map +0 -1
  199. package/dist/views/page-builder/PageBuilder.d.ts +0 -10
  200. package/dist/views/page-builder/PageBuilder.d.ts.map +0 -1
  201. package/dist/views/page-builder/PageBuilder.js +0 -222
  202. package/dist/views/page-builder/PageBuilder.js.map +0 -1
  203. package/dist/views/page-builder/PageSettings.d.ts +0 -7
  204. package/dist/views/page-builder/PageSettings.d.ts.map +0 -1
  205. package/dist/views/page-builder/PageSettings.js +0 -27
  206. package/dist/views/page-builder/PageSettings.js.map +0 -1
  207. package/dist/views/page-builder/PageTemplates.d.ts +0 -5
  208. package/dist/views/page-builder/PageTemplates.d.ts.map +0 -1
  209. package/dist/views/page-builder/PageTemplates.js +0 -146
  210. package/dist/views/page-builder/PageTemplates.js.map +0 -1
  211. package/dist/views/page-builder/RelationshipField.d.ts +0 -15
  212. package/dist/views/page-builder/RelationshipField.d.ts.map +0 -1
  213. package/dist/views/page-builder/RelationshipField.js +0 -65
  214. package/dist/views/page-builder/RelationshipField.js.map +0 -1
  215. package/dist/views/page-builder/SEOPanel.d.ts +0 -9
  216. package/dist/views/page-builder/SEOPanel.d.ts.map +0 -1
  217. package/dist/views/page-builder/SEOPanel.js +0 -38
  218. package/dist/views/page-builder/SEOPanel.js.map +0 -1
  219. package/dist/views/page-builder/SavedSections.d.ts +0 -6
  220. package/dist/views/page-builder/SavedSections.d.ts.map +0 -1
  221. package/dist/views/page-builder/SavedSections.js +0 -141
  222. package/dist/views/page-builder/SavedSections.js.map +0 -1
  223. package/dist/views/page-builder/TemplatePicker.d.ts +0 -7
  224. package/dist/views/page-builder/TemplatePicker.d.ts.map +0 -1
  225. package/dist/views/page-builder/TemplatePicker.js +0 -68
  226. package/dist/views/page-builder/TemplatePicker.js.map +0 -1
  227. package/dist/views/page-builder/Widgets.d.ts +0 -13
  228. package/dist/views/page-builder/Widgets.d.ts.map +0 -1
  229. package/dist/views/page-builder/Widgets.js +0 -15
  230. package/dist/views/page-builder/Widgets.js.map +0 -1
  231. package/dist/views/page-builder/block-renderers/CTAPreview.d.ts +0 -3
  232. package/dist/views/page-builder/block-renderers/CTAPreview.d.ts.map +0 -1
  233. package/dist/views/page-builder/block-renderers/CTAPreview.js +0 -19
  234. package/dist/views/page-builder/block-renderers/CTAPreview.js.map +0 -1
  235. package/dist/views/page-builder/block-renderers/CardsPreview.d.ts +0 -3
  236. package/dist/views/page-builder/block-renderers/CardsPreview.d.ts.map +0 -1
  237. package/dist/views/page-builder/block-renderers/CardsPreview.js +0 -22
  238. package/dist/views/page-builder/block-renderers/CardsPreview.js.map +0 -1
  239. package/dist/views/page-builder/block-renderers/CodePreview.d.ts +0 -3
  240. package/dist/views/page-builder/block-renderers/CodePreview.d.ts.map +0 -1
  241. package/dist/views/page-builder/block-renderers/CodePreview.js +0 -12
  242. package/dist/views/page-builder/block-renderers/CodePreview.js.map +0 -1
  243. package/dist/views/page-builder/block-renderers/FAQPreview.d.ts +0 -3
  244. package/dist/views/page-builder/block-renderers/FAQPreview.d.ts.map +0 -1
  245. package/dist/views/page-builder/block-renderers/FAQPreview.js +0 -27
  246. package/dist/views/page-builder/block-renderers/FAQPreview.js.map +0 -1
  247. package/dist/views/page-builder/block-renderers/FallbackPreview.d.ts +0 -6
  248. package/dist/views/page-builder/block-renderers/FallbackPreview.d.ts.map +0 -1
  249. package/dist/views/page-builder/block-renderers/FallbackPreview.js +0 -7
  250. package/dist/views/page-builder/block-renderers/FallbackPreview.js.map +0 -1
  251. package/dist/views/page-builder/block-renderers/FormPreview.d.ts +0 -9
  252. package/dist/views/page-builder/block-renderers/FormPreview.d.ts.map +0 -1
  253. package/dist/views/page-builder/block-renderers/FormPreview.js +0 -52
  254. package/dist/views/page-builder/block-renderers/FormPreview.js.map +0 -1
  255. package/dist/views/page-builder/block-renderers/GalleryPreview.d.ts +0 -3
  256. package/dist/views/page-builder/block-renderers/GalleryPreview.d.ts.map +0 -1
  257. package/dist/views/page-builder/block-renderers/GalleryPreview.js +0 -19
  258. package/dist/views/page-builder/block-renderers/GalleryPreview.js.map +0 -1
  259. package/dist/views/page-builder/block-renderers/HeroPreview.d.ts +0 -3
  260. package/dist/views/page-builder/block-renderers/HeroPreview.d.ts.map +0 -1
  261. package/dist/views/page-builder/block-renderers/HeroPreview.js +0 -19
  262. package/dist/views/page-builder/block-renderers/HeroPreview.js.map +0 -1
  263. package/dist/views/page-builder/block-renderers/ImagePreview.d.ts +0 -3
  264. package/dist/views/page-builder/block-renderers/ImagePreview.d.ts.map +0 -1
  265. package/dist/views/page-builder/block-renderers/ImagePreview.js +0 -17
  266. package/dist/views/page-builder/block-renderers/ImagePreview.js.map +0 -1
  267. package/dist/views/page-builder/block-renderers/TextPreview.d.ts +0 -3
  268. package/dist/views/page-builder/block-renderers/TextPreview.d.ts.map +0 -1
  269. package/dist/views/page-builder/block-renderers/TextPreview.js +0 -22
  270. package/dist/views/page-builder/block-renderers/TextPreview.js.map +0 -1
  271. package/dist/views/page-builder/block-renderers/VideoPreview.d.ts +0 -3
  272. package/dist/views/page-builder/block-renderers/VideoPreview.d.ts.map +0 -1
  273. package/dist/views/page-builder/block-renderers/VideoPreview.js +0 -18
  274. package/dist/views/page-builder/block-renderers/VideoPreview.js.map +0 -1
  275. package/dist/views/page-builder/block-renderers/index.d.ts +0 -9
  276. package/dist/views/page-builder/block-renderers/index.d.ts.map +0 -1
  277. package/dist/views/page-builder/block-renderers/index.js +0 -25
  278. package/dist/views/page-builder/block-renderers/index.js.map +0 -1
  279. package/dist/views/page-builder/canvas/BlockRenderer.d.ts +0 -8
  280. package/dist/views/page-builder/canvas/BlockRenderer.d.ts.map +0 -1
  281. package/dist/views/page-builder/canvas/BlockRenderer.js +0 -20
  282. package/dist/views/page-builder/canvas/BlockRenderer.js.map +0 -1
  283. package/dist/views/page-builder/canvas/BuilderCanvas.d.ts +0 -10
  284. package/dist/views/page-builder/canvas/BuilderCanvas.d.ts.map +0 -1
  285. package/dist/views/page-builder/canvas/BuilderCanvas.js +0 -26
  286. package/dist/views/page-builder/canvas/BuilderCanvas.js.map +0 -1
  287. package/dist/views/page-builder/canvas/ColumnRenderer.d.ts +0 -8
  288. package/dist/views/page-builder/canvas/ColumnRenderer.d.ts.map +0 -1
  289. package/dist/views/page-builder/canvas/ColumnRenderer.js +0 -32
  290. package/dist/views/page-builder/canvas/ColumnRenderer.js.map +0 -1
  291. package/dist/views/page-builder/canvas/ContainerRenderer.d.ts +0 -8
  292. package/dist/views/page-builder/canvas/ContainerRenderer.d.ts.map +0 -1
  293. package/dist/views/page-builder/canvas/ContainerRenderer.js +0 -29
  294. package/dist/views/page-builder/canvas/ContainerRenderer.js.map +0 -1
  295. package/dist/views/page-builder/canvas/RowRenderer.d.ts +0 -8
  296. package/dist/views/page-builder/canvas/RowRenderer.d.ts.map +0 -1
  297. package/dist/views/page-builder/canvas/RowRenderer.js +0 -28
  298. package/dist/views/page-builder/canvas/RowRenderer.js.map +0 -1
  299. package/dist/views/page-builder/canvas/SectionRenderer.d.ts +0 -8
  300. package/dist/views/page-builder/canvas/SectionRenderer.d.ts.map +0 -1
  301. package/dist/views/page-builder/canvas/SectionRenderer.js +0 -50
  302. package/dist/views/page-builder/canvas/SectionRenderer.js.map +0 -1
  303. package/dist/views/page-builder/canvas/index.d.ts +0 -3
  304. package/dist/views/page-builder/canvas/index.d.ts.map +0 -1
  305. package/dist/views/page-builder/canvas/index.js +0 -2
  306. package/dist/views/page-builder/canvas/index.js.map +0 -1
  307. package/dist/views/page-editor/PagePreview.d.ts +0 -13
  308. package/dist/views/page-editor/PagePreview.d.ts.map +0 -1
  309. package/dist/views/page-editor/PagePreview.js +0 -46
  310. package/dist/views/page-editor/PagePreview.js.map +0 -1
  311. package/dist/views/page-editor/SitePreviewFrame.d.ts +0 -43
  312. package/dist/views/page-editor/SitePreviewFrame.d.ts.map +0 -1
  313. package/dist/views/page-editor/SitePreviewFrame.js +0 -165
  314. package/dist/views/page-editor/SitePreviewFrame.js.map +0 -1
  315. package/dist/views/page-editor/useSitePreview.d.ts +0 -47
  316. package/dist/views/page-editor/useSitePreview.d.ts.map +0 -1
  317. package/dist/views/page-editor/useSitePreview.js +0 -96
  318. package/dist/views/page-editor/useSitePreview.js.map +0 -1
  319. package/dist/views/post-editor/PostPreview.d.ts +0 -14
  320. package/dist/views/post-editor/PostPreview.d.ts.map +0 -1
  321. package/dist/views/post-editor/PostPreview.js +0 -63
  322. package/dist/views/post-editor/PostPreview.js.map +0 -1
  323. package/src/__tests__/views/page-builder-block-renderer.render.test.tsx +0 -66
  324. package/src/__tests__/views/page-builder-form-picker.render.test.tsx +0 -54
  325. package/src/__tests__/views/page-builder-sections-panel.render.test.tsx +0 -138
  326. package/src/__tests__/views/page-builder-seo-panel.render.test.tsx +0 -77
  327. package/src/__tests__/views/page-builder-template-seed.render.test.tsx +0 -59
  328. package/src/__tests__/views/page-templates.render.test.tsx +0 -182
  329. package/src/__tests__/views/use-site-preview.render.test.tsx +0 -164
  330. package/src/hooks/useBuilderState.ts +0 -361
  331. package/src/views/page-builder/AIBlockAssist.tsx +0 -64
  332. package/src/views/page-builder/AIGenerateDialog.tsx +0 -593
  333. package/src/views/page-builder/BlockEditor.tsx +0 -523
  334. package/src/views/page-builder/BlockPicker.tsx +0 -324
  335. package/src/views/page-builder/BottomBar.tsx +0 -65
  336. package/src/views/page-builder/BuilderSectionsPanel.tsx +0 -304
  337. package/src/views/page-builder/BuilderToolbar.tsx +0 -221
  338. package/src/views/page-builder/ContextPanel.tsx +0 -144
  339. package/src/views/page-builder/DesignScore.tsx +0 -251
  340. package/src/views/page-builder/NodeSettings.tsx +0 -500
  341. package/src/views/page-builder/PageBuilder.tsx +0 -405
  342. package/src/views/page-builder/PageSettings.tsx +0 -162
  343. package/src/views/page-builder/PageTemplates.tsx +0 -435
  344. package/src/views/page-builder/RelationshipField.tsx +0 -113
  345. package/src/views/page-builder/SEOPanel.tsx +0 -222
  346. package/src/views/page-builder/SavedSections.tsx +0 -480
  347. package/src/views/page-builder/TemplatePicker.tsx +0 -197
  348. package/src/views/page-builder/Widgets.tsx +0 -44
  349. package/src/views/page-builder/block-renderers/CTAPreview.tsx +0 -79
  350. package/src/views/page-builder/block-renderers/CardsPreview.tsx +0 -69
  351. package/src/views/page-builder/block-renderers/CodePreview.tsx +0 -46
  352. package/src/views/page-builder/block-renderers/FAQPreview.tsx +0 -87
  353. package/src/views/page-builder/block-renderers/FallbackPreview.tsx +0 -18
  354. package/src/views/page-builder/block-renderers/FormPreview.tsx +0 -117
  355. package/src/views/page-builder/block-renderers/GalleryPreview.tsx +0 -87
  356. package/src/views/page-builder/block-renderers/HeroPreview.tsx +0 -90
  357. package/src/views/page-builder/block-renderers/ImagePreview.tsx +0 -54
  358. package/src/views/page-builder/block-renderers/TextPreview.tsx +0 -81
  359. package/src/views/page-builder/block-renderers/VideoPreview.tsx +0 -73
  360. package/src/views/page-builder/block-renderers/index.ts +0 -34
  361. package/src/views/page-builder/canvas/BlockRenderer.tsx +0 -56
  362. package/src/views/page-builder/canvas/BuilderCanvas.tsx +0 -87
  363. package/src/views/page-builder/canvas/ColumnRenderer.tsx +0 -82
  364. package/src/views/page-builder/canvas/ContainerRenderer.tsx +0 -67
  365. package/src/views/page-builder/canvas/RowRenderer.tsx +0 -68
  366. package/src/views/page-builder/canvas/SectionRenderer.tsx +0 -93
  367. package/src/views/page-builder/canvas/index.ts +0 -2
  368. package/src/views/page-editor/PagePreview.tsx +0 -105
  369. package/src/views/page-editor/SitePreviewFrame.tsx +0 -250
  370. package/src/views/page-editor/useSitePreview.ts +0 -158
  371. package/src/views/post-editor/PostPreview.tsx +0 -125
@@ -28,12 +28,10 @@ import {
28
28
  type ValidationResult,
29
29
  } from '../../lib/post-editor-service.js'
30
30
  import { MediaPickerModal } from '../../components/MediaPickerModal.js'
31
+ import { SharePreviewLinkDialog } from '../../components/SharePreviewLinkDialog.js'
31
32
  import { defaultPostHeader } from '@prenta/core/page-sections'
32
- import {
33
- buildPublicPreviewUrl,
34
- buildPublicUrl,
35
- createPreviewToken,
36
- } from '../../lib/preview-link.js'
33
+ import { openPublicSiteTab } from '../../lib/open-public-site-tab.js'
34
+ import type { ViewSiteIntent } from '../../lib/view-site-chrome.js'
37
35
  import { usePublicSiteUrl } from '../../hooks/usePublicSiteUrl.js'
38
36
  import {
39
37
  hasCanvasRenderer,
@@ -42,12 +40,9 @@ import {
42
40
  } from '../page-editor/sections/index.js'
43
41
  import { DEFAULT_VIEWPORT, type ViewportId } from '../page-editor/viewports.js'
44
42
  import { EditorTopBar, type SaveState } from '../page-editor/EditorTopBar.js'
45
- import { SitePreviewFrame } from '../page-editor/SitePreviewFrame.js'
46
- import { useSitePreview } from '../page-editor/useSitePreview.js'
47
43
  import { SectionsList } from '../page-editor/SectionsPanel.js'
48
44
  import { SectionEditForm } from '../page-editor/SectionEditForm.js'
49
45
  import { ValidationSummary } from '../page-editor/ValidationSummary.js'
50
- import { resolveDefaultSitePreview } from '../../lib/editor-preview.js'
51
46
  import { buildEditorContentHtml, computeLiveSeoScore } from '../../lib/editor-seo-content.js'
52
47
  import { snapshotBaseline, type ReflowBaseline } from '../../lib/reflow-baseline.js'
53
48
  import { ReflowContext } from '../page-editor/reflow-context.js'
@@ -68,7 +63,6 @@ interface EditorConfig {
68
63
  | undefined
69
64
  >
70
65
  seo?: { siteUrl?: string }
71
- admin?: { editor?: { defaultSitePreview?: boolean | { pages?: boolean; posts?: boolean } } }
72
66
  }
73
67
 
74
68
  /** The slice of the admin session this editor reads. */
@@ -83,12 +77,6 @@ interface PostSectionEditorProps {
83
77
  config?: EditorConfig
84
78
  session?: EditorSession
85
79
  onNavigate: (path: string) => void
86
- /**
87
- * Open a preview route in a new browser tab. `prepare` runs before the tab
88
- * navigates (used to save an unsaved draft first); returning `false` cancels
89
- * the open. Falls back to in-tab navigation when not provided.
90
- */
91
- onOpenPreview?: (path: string, prepare?: () => Promise<boolean | void> | boolean | void) => void
92
80
  }
93
81
 
94
82
  function deriveCan(session: EditorSession | undefined): {
@@ -111,7 +99,6 @@ export function PostSectionEditor({
111
99
  config,
112
100
  session,
113
101
  onNavigate,
114
- onOpenPreview,
115
102
  }: PostSectionEditorProps) {
116
103
  const [post, setPost] = useState<EditorPost | null>(null)
117
104
  const [header, setHeader] = useState<PostHeaderConfig>(defaultPostHeader())
@@ -151,6 +138,7 @@ export function PostSectionEditor({
151
138
  const [historyOpen, setHistoryOpen] = useState(false)
152
139
  const [confirmPublish, setConfirmPublish] = useState(false)
153
140
  const [scheduleOpen, setScheduleOpen] = useState(false)
141
+ const [shareOpen, setShareOpen] = useState(false)
154
142
  const [leaveTarget, setLeaveTarget] = useState<string | null>(null)
155
143
  const [validation, setValidation] = useState<ValidationResult | null>(null)
156
144
 
@@ -177,6 +165,8 @@ export function PostSectionEditor({
177
165
  return col?.labels?.singular ?? postType
178
166
  }, [config, postType])
179
167
 
168
+ const urlPrefix = config?.collections?.[postType]?.urlPrefix ?? postType
169
+
180
170
  // A misconfigured post-type collection (missing the fields the editor
181
171
  // writes) would silently drop content on save — detect it up front.
182
172
  // Memoized to a string/null so the load effect can depend on it without
@@ -390,21 +380,6 @@ export function PostSectionEditor({
390
380
  }
391
381
  }, [post, documentId, postType, onNavigate])
392
382
 
393
- // Inline branded preview — Next builder canvas (same origin as admin).
394
- // "View on site" still uses publicSiteUrl for the Astro/public apex.
395
- const sitePreview = useSitePreview({
396
- collection: postType,
397
- documentId: post?.id,
398
- slug: post?.slug,
399
- urlPrefix: config?.collections?.[postType]?.urlPrefix ?? postType,
400
- dirty,
401
- saveState,
402
- saveDraft: handleSaveDraft,
403
- defaultActive: resolveDefaultSitePreview(config?.admin?.editor, 'posts'),
404
- })
405
-
406
- const sitePreviewAvailable = Boolean(post?.id && post?.slug)
407
-
408
383
  const requestPublish = useCallback(() => {
409
384
  if (!post) return
410
385
  const result = validatePost(post, true)
@@ -555,78 +530,37 @@ export function PostSectionEditor({
555
530
  [dirty, onNavigate],
556
531
  )
557
532
 
558
- const handlePreview = useCallback(() => {
559
- if (!post?.id) {
560
- toast.error('Save the post before previewing')
561
- return
562
- }
563
- const path = `/posts/${postType}/${post.id}/preview`
564
- // New-tab preview: save first when there are unsaved edits so the preview
565
- // (which reads the persisted document) reflects what's on screen.
566
- if (onOpenPreview) {
567
- onOpenPreview(path, dirty ? handleSaveDraft : undefined)
568
- } else {
569
- guardedNavigate(path)
570
- }
571
- }, [post, postType, dirty, onOpenPreview, handleSaveDraft, guardedNavigate])
533
+ const handleViewOnSite = useCallback(
534
+ (intent: ViewSiteIntent) => {
535
+ if (!post?.id || !post.slug) {
536
+ toast.error('Save the post before viewing it on the site')
537
+ return
538
+ }
539
+ void openPublicSiteTab({
540
+ intent,
541
+ siteUrl: publicSiteUrl,
542
+ collection: postType,
543
+ documentId: post.id,
544
+ slug: post.slug,
545
+ urlPrefix,
546
+ data: { path: (post as { path?: string }).path },
547
+ dirty,
548
+ saveDraft: handleSaveDraft,
549
+ }).catch((err) => {
550
+ toast.error(err instanceof Error ? err.message : 'Failed to open the site')
551
+ })
552
+ },
553
+ [post, postType, urlPrefix, dirty, handleSaveDraft, publicSiteUrl],
554
+ )
572
555
 
573
- // "View on site": render the draft through the consumer's real public route
574
- // (`/<urlPrefix>/<slug>?preview=<token>`) via a signed preview token.
575
- const handleViewOnSite = useCallback(() => {
576
- if (!post?.id || !post.slug) {
577
- toast.error('Save the post before viewing it on the site')
578
- return
579
- }
580
- // Published → open the LIVE post directly (no preview token, no forced
581
- // save). Pending edits stay previewable via the eye + globe.
582
- if (post.status === 'PUBLISHED') {
583
- window.open(
584
- buildPublicUrl({
585
- siteUrl: publicSiteUrl,
586
- urlPrefix: config?.collections?.[postType]?.urlPrefix ?? postType,
587
- slug: post.slug,
588
- data: { path: (post as { path?: string }).path },
589
- }),
590
- '_blank',
591
- 'noopener',
592
- )
593
- return
594
- }
595
- const tab = window.open('about:blank', '_blank')
596
- if (!tab) {
597
- toast.error('Enable pop-ups for this site to open the preview in a new tab.')
598
- return
556
+ const handleShare = useCallback(async () => {
557
+ if (!post?.id) return
558
+ if (dirty) {
559
+ const ok = await handleSaveDraft()
560
+ if (!ok) return
599
561
  }
600
- void (async () => {
601
- try {
602
- if (dirty) {
603
- const ok = await handleSaveDraft()
604
- if (!ok) {
605
- tab.close()
606
- return
607
- }
608
- }
609
- const { token } = await createPreviewToken(postType, post.id!)
610
- const urlPrefix = config?.collections?.[postType]?.urlPrefix ?? postType
611
- const target = buildPublicPreviewUrl({
612
- siteUrl: publicSiteUrl,
613
- urlPrefix,
614
- slug: post.slug,
615
- data: { path: (post as { path?: string }).path },
616
- token,
617
- })
618
- try {
619
- tab.opener = null
620
- } catch {
621
- /* same-origin guard */
622
- }
623
- tab.location.replace(target)
624
- } catch (err) {
625
- tab.close()
626
- toast.error(err instanceof Error ? err.message : 'Failed to open site preview')
627
- }
628
- })()
629
- }, [post, postType, dirty, config, handleSaveDraft, publicSiteUrl])
562
+ setShareOpen(true)
563
+ }, [post, dirty, handleSaveDraft])
630
564
 
631
565
  // ─── Render states ───────────────────────────────────────────────────
632
566
  if (loading) {
@@ -693,16 +627,13 @@ export function PostSectionEditor({
693
627
  viewport={viewport}
694
628
  backLabel="Posts"
695
629
  onViewport={setViewport}
696
- {...(sitePreview.active
697
- ? // The site preview is an iframe of the real front end, not a
698
- // scaled canvas — a zoom percentage there would be a lie.
699
- {}
700
- : { zoom, canvasScale, onZoom: setZoom })}
630
+ zoom={zoom}
631
+ canvasScale={canvasScale}
632
+ onZoom={setZoom}
701
633
  onBack={() => guardedNavigate('/posts')}
702
- onPreview={handlePreview}
703
- onViewOnSite={post.id ? handleViewOnSite : undefined}
704
- sitePreview={sitePreview.active}
705
- onToggleSitePreview={post.id && post.slug ? sitePreview.toggle : undefined}
634
+ onViewOnSite={post.id && post.slug ? handleViewOnSite : undefined}
635
+ onShare={post.id ? handleShare : undefined}
636
+ hasPublicSiteUrl={Boolean(publicSiteUrl)}
706
637
  onHistory={post.id ? () => setHistoryOpen(true) : undefined}
707
638
  onOpenSettings={() => setFieldsOpen(true)}
708
639
  onOpenSeo={handleToggleSeo}
@@ -801,34 +732,18 @@ export function PostSectionEditor({
801
732
  </EditorRail>
802
733
 
803
734
  <div className="flex-1 overflow-hidden">
804
- {sitePreview.active ? (
805
- <SitePreviewFrame
806
- src={sitePreview.url}
807
- viewport={viewport}
808
- reloadKey={sitePreview.reloadKey}
809
- title={`Site preview: ${post.title || `New ${typeLabel}`}`}
810
- selectedId={selectedId}
811
- sections={post.sections}
812
- suppressSectionsEcho={suppressSectionsEcho}
813
- onSelectSection={handleSelectSection}
814
- onCanvasEdit={handleCanvasEdit}
815
- onCanvasRequestMedia={handleCanvasRequestMedia}
816
- />
817
- ) : (
818
- <PostEditorCanvas
819
- sections={post.sections}
820
- header={header}
821
- context={context}
822
- selectedId={selectedId}
823
- viewport={viewport}
824
- zoom={zoom}
825
- onScaleChange={setCanvasScale}
826
- onCanvasElement={setCanvasEl}
827
- onSelect={handleSelectSection}
828
- structuralTypes={structuralTypes}
829
- sitePreviewAvailable={sitePreviewAvailable && !sitePreview.active}
830
- />
831
- )}
735
+ <PostEditorCanvas
736
+ sections={post.sections}
737
+ header={header}
738
+ context={context}
739
+ selectedId={selectedId}
740
+ viewport={viewport}
741
+ zoom={zoom}
742
+ onScaleChange={setCanvasScale}
743
+ onCanvasElement={setCanvasEl}
744
+ onSelect={handleSelectSection}
745
+ structuralTypes={structuralTypes}
746
+ />
832
747
  </div>
833
748
  </div>
834
749
  </ReflowContext.Provider>
@@ -874,6 +789,19 @@ export function PostSectionEditor({
874
789
  />
875
790
  )}
876
791
 
792
+ {post.id && (
793
+ <SharePreviewLinkDialog
794
+ collectionSlug={postType}
795
+ documentId={post.id}
796
+ documentSlug={post.slug}
797
+ documentPath={(post as { path?: string }).path}
798
+ siteUrl={publicSiteUrl}
799
+ urlPrefix={urlPrefix}
800
+ open={shareOpen}
801
+ onClose={() => setShareOpen(false)}
802
+ />
803
+ )}
804
+
877
805
  <ConfirmDialog
878
806
  open={leaveTarget !== null}
879
807
  onClose={() => setLeaveTarget(null)}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=page-builder-block-renderer.render.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"page-builder-block-renderer.render.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/views/page-builder-block-renderer.render.test.tsx"],"names":[],"mappings":""}
@@ -1,48 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- // @vitest-environment happy-dom
3
- import { beforeEach, describe, expect, it, vi } from 'vitest';
4
- import { fireEvent, render, screen, waitFor } from '@testing-library/react';
5
- const cmsApi = vi.fn();
6
- vi.mock('../../lib/api.js', () => ({ cmsApi: (...args) => cmsApi(...args) }));
7
- const { BlockRenderer } = await import('../../views/page-builder/canvas/BlockRenderer.js');
8
- function formNode(over = {}) {
9
- return {
10
- id: 'node-1',
11
- type: 'block',
12
- settings: { blockType: 'form', variant: 'contact' },
13
- data: { formId: 'f1' },
14
- ...over,
15
- };
16
- }
17
- beforeEach(() => {
18
- cmsApi.mockReset();
19
- cmsApi.mockResolvedValue({
20
- data: {
21
- name: 'Contact Us',
22
- fields: [
23
- { key: 'name', label: 'Full Name', type: 'text' },
24
- { key: 'message', label: 'Message', type: 'textarea' },
25
- ],
26
- },
27
- status: 200,
28
- });
29
- });
30
- describe('canvas BlockRenderer', () => {
31
- it('renders the live form preview with the linked form name and fields', async () => {
32
- render(_jsx(BlockRenderer, { node: formNode(), selectedNodeId: null, onSelectNode: vi.fn() }));
33
- await waitFor(() => expect(screen.getByText('Contact Us')).toBeTruthy());
34
- expect(cmsApi).toHaveBeenCalledWith('/forms/f1');
35
- expect(screen.getByText('Full Name')).toBeTruthy();
36
- });
37
- it('selects the node on click', () => {
38
- const onSelectNode = vi.fn();
39
- const { container } = render(_jsx(BlockRenderer, { node: formNode({ data: {} }), selectedNodeId: null, onSelectNode: onSelectNode }));
40
- fireEvent.click(container.querySelector('[data-node-id="node-1"]'));
41
- expect(onSelectNode).toHaveBeenCalledWith('node-1');
42
- });
43
- it('falls back to a placeholder for unknown block types', () => {
44
- render(_jsx(BlockRenderer, { node: formNode({ settings: { blockType: 'widget' }, data: {} }), selectedNodeId: null, onSelectNode: vi.fn() }));
45
- expect(screen.getByText('No preview available')).toBeTruthy();
46
- });
47
- });
48
- //# sourceMappingURL=page-builder-block-renderer.render.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"page-builder-block-renderer.render.test.js","sourceRoot":"","sources":["../../../src/__tests__/views/page-builder-block-renderer.render.test.tsx"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=page-builder-form-picker.render.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"page-builder-form-picker.render.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/views/page-builder-form-picker.render.test.tsx"],"names":[],"mappings":""}
@@ -1,44 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- // @vitest-environment happy-dom
3
- import { beforeEach, describe, expect, it, vi } from 'vitest';
4
- import { fireEvent, render, screen, waitFor } from '@testing-library/react';
5
- const cmsApi = vi.fn();
6
- vi.mock('../../lib/api.js', () => ({ cmsApi: (...args) => cmsApi(...args) }));
7
- const { RelationshipField } = await import('../../views/page-builder/RelationshipField.js');
8
- const formField = {
9
- type: 'relationship',
10
- label: 'Form',
11
- relationTo: 'forms',
12
- };
13
- beforeEach(() => {
14
- cmsApi.mockReset();
15
- });
16
- describe('RelationshipField (form block picker)', () => {
17
- it('loads forms and lets the editor pick one by id', async () => {
18
- cmsApi.mockResolvedValue({
19
- data: [
20
- { id: 'f1', name: 'Contact Us', slug: 'contact-us' },
21
- { id: 'f2', name: 'Event RSVP', slug: 'event-rsvp' },
22
- ],
23
- status: 200,
24
- });
25
- const onChange = vi.fn();
26
- render(_jsx(RelationshipField, { definition: formField, value: "", onChange: onChange, label: "Form" }));
27
- await waitFor(() => expect(screen.getByText('Contact Us')).toBeTruthy());
28
- expect(cmsApi).toHaveBeenCalledWith('/forms');
29
- expect(screen.getByText('Event RSVP')).toBeTruthy();
30
- fireEvent.change(screen.getByLabelText('Form'), { target: { value: 'f2' } });
31
- expect(onChange).toHaveBeenCalledWith('f2');
32
- });
33
- it('shows an empty hint when the collection has no items', async () => {
34
- cmsApi.mockResolvedValue({ data: [], status: 200 });
35
- render(_jsx(RelationshipField, { definition: formField, value: "", onChange: vi.fn(), label: "Form" }));
36
- await waitFor(() => expect(screen.getByText('No forms found.')).toBeTruthy());
37
- });
38
- it('degrades to a plain id input when the collection cannot be loaded', async () => {
39
- cmsApi.mockResolvedValue({ error: 'boom', status: 500 });
40
- render(_jsx(RelationshipField, { definition: formField, value: "f9", onChange: vi.fn(), label: "Form" }));
41
- await waitFor(() => expect(screen.getByPlaceholderText('Enter forms id…').value).toBe('f9'));
42
- });
43
- });
44
- //# sourceMappingURL=page-builder-form-picker.render.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"page-builder-form-picker.render.test.js","sourceRoot":"","sources":["../../../src/__tests__/views/page-builder-form-picker.render.test.tsx"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=page-builder-sections-panel.render.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"page-builder-sections-panel.render.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/views/page-builder-sections-panel.render.test.tsx"],"names":[],"mappings":""}
@@ -1,121 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- // @vitest-environment happy-dom
3
- import { beforeEach, describe, expect, it, vi } from 'vitest';
4
- import { fireEvent, render, screen } from '@testing-library/react';
5
- const { BuilderSectionsPanel } = await import('../../views/page-builder/BuilderSectionsPanel.js');
6
- /** Minimal builder tree: a hero section plus an empty, hidden section. */
7
- function makeTree() {
8
- return {
9
- id: 'page1',
10
- type: 'page',
11
- children: [
12
- {
13
- id: 'sec1',
14
- type: 'section',
15
- settings: {},
16
- children: [
17
- {
18
- id: 'cont1',
19
- type: 'container',
20
- settings: {},
21
- children: [
22
- {
23
- id: 'row1',
24
- type: 'row',
25
- settings: {},
26
- children: [
27
- {
28
- id: 'col1',
29
- type: 'column',
30
- settings: { width: 12 },
31
- children: [
32
- {
33
- id: 'blk1',
34
- type: 'block',
35
- settings: { blockType: 'hero', variant: 'centered' },
36
- data: {},
37
- },
38
- ],
39
- },
40
- ],
41
- },
42
- ],
43
- },
44
- ],
45
- },
46
- { id: 'sec2', type: 'section', settings: { visibility: 'hidden' }, children: [] },
47
- ],
48
- };
49
- }
50
- function renderPanel(over = {}) {
51
- const props = {
52
- tree: makeTree(),
53
- selectedNodeId: null,
54
- collapsed: false,
55
- onToggleCollapsed: vi.fn(),
56
- onSelect: vi.fn(),
57
- onReorder: vi.fn(),
58
- onAddSection: vi.fn(),
59
- ...over,
60
- };
61
- render(_jsx(BuilderSectionsPanel, { ...props }));
62
- return props;
63
- }
64
- beforeEach(() => {
65
- vi.clearAllMocks();
66
- });
67
- describe('BuilderSectionsPanel', () => {
68
- it('lists the page sections in order with derived names and block counts', () => {
69
- renderPanel();
70
- // First section is named after its first block's catalog label.
71
- expect(screen.getByText('Hero')).toBeTruthy();
72
- expect(screen.getByText('1 block')).toBeTruthy();
73
- // Empty section falls back to a positional name.
74
- expect(screen.getByText('Section 2')).toBeTruthy();
75
- expect(screen.getByText('Empty section')).toBeTruthy();
76
- // Count chip in the header.
77
- expect(screen.getByText('2')).toBeTruthy();
78
- // Panel is an accessible nav landmark.
79
- expect(screen.getByRole('navigation', { name: 'Page sections' })).toBeTruthy();
80
- });
81
- it('fires the selection callback when a section row is clicked', () => {
82
- const props = renderPanel();
83
- // `/^Hero/` excludes the drag handle ("Drag to reorder Hero").
84
- fireEvent.click(screen.getByRole('button', { name: /^Hero/ }));
85
- expect(props.onSelect).toHaveBeenCalledWith('sec1');
86
- });
87
- it('marks the selected section with aria-current', () => {
88
- renderPanel({ selectedNodeId: 'sec1' });
89
- const row = screen.getByRole('button', { name: /^Hero/ });
90
- expect(row.getAttribute('aria-current')).toBe('true');
91
- });
92
- it('exposes keyboard-accessible drag handles per section', () => {
93
- renderPanel();
94
- expect(screen.getByRole('button', { name: 'Drag to reorder Hero' })).toBeTruthy();
95
- expect(screen.getByRole('button', { name: 'Drag to reorder Section 2' })).toBeTruthy();
96
- });
97
- it('fires the add-section callback from the bottom affordance', () => {
98
- const props = renderPanel();
99
- fireEvent.click(screen.getByRole('button', { name: 'Add Section' }));
100
- expect(props.onAddSection).toHaveBeenCalledTimes(1);
101
- });
102
- it('collapses to a rail with an expand toggle', () => {
103
- const props = renderPanel({ collapsed: true });
104
- // Section rows are gone; only the expand affordance remains.
105
- expect(screen.queryByText('Hero')).toBeNull();
106
- const toggle = screen.getByRole('button', { name: 'Expand sections panel' });
107
- expect(toggle.getAttribute('aria-expanded')).toBe('false');
108
- fireEvent.click(toggle);
109
- expect(props.onToggleCollapsed).toHaveBeenCalledTimes(1);
110
- });
111
- it('shows a collapse toggle with aria-expanded when open', () => {
112
- renderPanel();
113
- const toggle = screen.getByRole('button', { name: 'Collapse sections panel' });
114
- expect(toggle.getAttribute('aria-expanded')).toBe('true');
115
- });
116
- it('shows an empty message when the page has no sections', () => {
117
- renderPanel({ tree: { id: 'page1', type: 'page', children: [] } });
118
- expect(screen.getByText(/No sections yet/)).toBeTruthy();
119
- });
120
- });
121
- //# sourceMappingURL=page-builder-sections-panel.render.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"page-builder-sections-panel.render.test.js","sourceRoot":"","sources":["../../../src/__tests__/views/page-builder-sections-panel.render.test.tsx"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=page-builder-seo-panel.render.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"page-builder-seo-panel.render.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/views/page-builder-seo-panel.render.test.tsx"],"names":[],"mappings":""}
@@ -1,65 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- // @vitest-environment happy-dom
3
- import { describe, expect, it, vi } from 'vitest';
4
- import { render, screen } from '@testing-library/react';
5
- import { BuilderSEOPanel } from '../../views/page-builder/SEOPanel.js';
6
- const tree = {
7
- id: 'page-1',
8
- type: 'page',
9
- children: [
10
- {
11
- id: 'sec-1',
12
- type: 'section',
13
- settings: {},
14
- children: [
15
- {
16
- id: 'row-1',
17
- type: 'row',
18
- settings: {},
19
- children: [
20
- {
21
- id: 'col-1',
22
- type: 'column',
23
- settings: { width: 12 },
24
- children: [
25
- {
26
- id: 'blk-hero',
27
- type: 'block',
28
- settings: { blockType: 'hero' },
29
- data: {
30
- title: 'Welcome to Our Service',
31
- image: { url: '/hero.webp', alt: 'Hero banner' },
32
- },
33
- },
34
- ],
35
- },
36
- ],
37
- },
38
- ],
39
- },
40
- ],
41
- };
42
- const pageSettings = {
43
- title: 'Home',
44
- slug: 'home',
45
- metaTitle: 'Welcome to Our Service',
46
- metaDescription: 'The public description.',
47
- };
48
- describe('BuilderSEOPanel', () => {
49
- it('grades the live tree with the shared page audit panel and keeps meta fields', () => {
50
- render(_jsx(BuilderSEOPanel, { tree: tree, pageSettings: pageSettings, onPageSettingsChange: vi.fn() }));
51
- expect(screen.getByRole('img', { name: /SEO score:/i })).toBeTruthy();
52
- expect(screen.getByRole('img', { name: /GEO score:/i })).toBeTruthy();
53
- expect(screen.getByText('SEO checks')).toBeTruthy();
54
- expect(screen.getByText('GEO checks')).toBeTruthy();
55
- expect(screen.getByLabelText('Meta Title')).toBeTruthy();
56
- expect(screen.queryByText('Readability')).toBeNull();
57
- expect(screen.queryByText('Block Hints')).toBeNull();
58
- });
59
- it('keeps the empty-tree copy when the canvas has no children', () => {
60
- render(_jsx(BuilderSEOPanel, { tree: { id: 'page-1', type: 'page', children: [] }, pageSettings: pageSettings, onPageSettingsChange: vi.fn() }));
61
- expect(screen.getByText('Add content to your page to see SEO analysis')).toBeTruthy();
62
- expect(screen.queryByRole('img', { name: /SEO score:/i })).toBeNull();
63
- });
64
- });
65
- //# sourceMappingURL=page-builder-seo-panel.render.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"page-builder-seo-panel.render.test.js","sourceRoot":"","sources":["../../../src/__tests__/views/page-builder-seo-panel.render.test.tsx"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=page-builder-template-seed.render.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"page-builder-template-seed.render.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/views/page-builder-template-seed.render.test.tsx"],"names":[],"mappings":""}