@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
@@ -3,8 +3,8 @@ export interface PageEditorProps {
3
3
  onNavigate?: (path: string) => void;
4
4
  }
5
5
  /**
6
- * @deprecated Superseded by the visual page builder (`PageBuilder` and the
7
- * `views/page-editor/` section editor); will be removed in the next major.
6
+ * @deprecated Superseded by the section editor (`PageSectionEditor`); will be
7
+ * removed in the next major.
8
8
  */
9
9
  export declare function PageEditor({ id, onNavigate }: PageEditorProps): import("react/jsx-runtime").JSX.Element;
10
10
  //# sourceMappingURL=PageEditor.d.ts.map
@@ -7,8 +7,8 @@ import { SEOPanel } from '../components/SEOPanel.js';
7
7
  import { useApiData } from '../lib/useApiData.js';
8
8
  import { cmsApi } from '../lib/api.js';
9
9
  /**
10
- * @deprecated Superseded by the visual page builder (`PageBuilder` and the
11
- * `views/page-editor/` section editor); will be removed in the next major.
10
+ * @deprecated Superseded by the section editor (`PageSectionEditor`); will be
11
+ * removed in the next major.
12
12
  */
13
13
  export function PageEditor({ id, onNavigate }) {
14
14
  const isNew = !id;
@@ -10,7 +10,6 @@ interface EditorCanvasProps {
10
10
  onCanvasElement?: (el: HTMLElement | null) => void;
11
11
  /** Section types rendered as placeholders — shows the "Structure view" notice. */
12
12
  structuralTypes?: string[];
13
- sitePreviewAvailable?: boolean;
14
13
  /**
15
14
  * Read-only render of a past version. Suppresses selection and the editing
16
15
  * affordances, and turns on the changed-section outlines.
@@ -32,6 +31,6 @@ interface EditorCanvasProps {
32
31
  * with the post editor. What is left here is what is genuinely page-specific:
33
32
  * which chrome sits above the canvas, and what goes inside it.
34
33
  */
35
- export declare function EditorCanvas({ sections, selectedId, breakpoint, zoom, onSelect, onScaleChange, onCanvasElement, structuralTypes, sitePreviewAvailable, reviewing, changedSectionIds, reviewBar, }: EditorCanvasProps): import("react/jsx-runtime").JSX.Element;
34
+ export declare function EditorCanvas({ sections, selectedId, breakpoint, zoom, onSelect, onScaleChange, onCanvasElement, structuralTypes, reviewing, changedSectionIds, reviewBar, }: EditorCanvasProps): import("react/jsx-runtime").JSX.Element;
36
35
  export {};
37
36
  //# sourceMappingURL=EditorCanvas.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"EditorCanvas.d.ts","sourceRoot":"","sources":["../../../src/views/page-editor/EditorCanvas.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAA;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAA;AAInE,UAAU,iBAAiB;IACzB,QAAQ,EAAE,WAAW,EAAE,CAAA;IACvB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,UAAU,EAAE,YAAY,CAAA;IACxB,IAAI,CAAC,EAAE,IAAI,CAAA;IACX,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IAC9B,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACvC,eAAe,CAAC,EAAE,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAA;IAClD,kFAAkF;IAClF,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;IAC1B,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,2EAA2E;IAC3E,iBAAiB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IACvC;;;;OAIG;IACH,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CAC5B;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,EACR,UAAU,EACV,UAAU,EACV,IAAY,EACZ,QAAQ,EACR,aAAa,EACb,eAAe,EACf,eAAoB,EACpB,oBAA4B,EAC5B,SAAiB,EACjB,iBAAiB,EACjB,SAAS,GACV,EAAE,iBAAiB,2CAqDnB"}
1
+ {"version":3,"file":"EditorCanvas.d.ts","sourceRoot":"","sources":["../../../src/views/page-editor/EditorCanvas.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAA;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAA;AAInE,UAAU,iBAAiB;IACzB,QAAQ,EAAE,WAAW,EAAE,CAAA;IACvB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,UAAU,EAAE,YAAY,CAAA;IACxB,IAAI,CAAC,EAAE,IAAI,CAAA;IACX,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IAC9B,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACvC,eAAe,CAAC,EAAE,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAA;IAClD,kFAAkF;IAClF,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;IAC1B;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,2EAA2E;IAC3E,iBAAiB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IACvC;;;;OAIG;IACH,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CAC5B;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,EACR,UAAU,EACV,UAAU,EACV,IAAY,EACZ,QAAQ,EACR,aAAa,EACb,eAAe,EACf,eAAoB,EACpB,SAAiB,EACjB,iBAAiB,EACjB,SAAS,GACV,EAAE,iBAAiB,2CAkDnB"}
@@ -12,7 +12,7 @@ import { StructureNotice } from './StructureNotice.js';
12
12
  * with the post editor. What is left here is what is genuinely page-specific:
13
13
  * which chrome sits above the canvas, and what goes inside it.
14
14
  */
15
- export function EditorCanvas({ sections, selectedId, breakpoint, zoom = 'fit', onSelect, onScaleChange, onCanvasElement, structuralTypes = [], sitePreviewAvailable = false, reviewing = false, changedSectionIds, reviewBar, }) {
15
+ export function EditorCanvas({ sections, selectedId, breakpoint, zoom = 'fit', onSelect, onScaleChange, onCanvasElement, structuralTypes = [], reviewing = false, changedSectionIds, reviewBar, }) {
16
16
  const registerRef = useSectionRefs(selectedId);
17
17
  // A design-owned page always ships the template's sections, so an empty
18
18
  // canvas means the template resolved to nothing — a configuration problem,
@@ -24,7 +24,7 @@ export function EditorCanvas({ sections, selectedId, breakpoint, zoom = 'fit', o
24
24
  // The review bar REPLACES the editing chrome rather than joining it:
25
25
  // a tip about clicking sections to edit them is actively wrong while
26
26
  // the canvas is showing a version you cannot edit.
27
- reviewing ? (reviewBar) : (_jsxs(_Fragment, { children: [_jsx(CanvasEditTip, {}), _jsx(StructureNotice, { structuralTypes: structuralTypes, sitePreviewAvailable: sitePreviewAvailable })] })), children: sections.map((section) => (_jsx(SectionRenderer, { section: section, editable: true, reviewing: reviewing, changed: changedSectionIds?.has(section.id) ?? false, selected: section.id === selectedId, onSelect: onSelect, registerRef: registerRef }, section.id))) }) }));
27
+ reviewing ? (reviewBar) : (_jsxs(_Fragment, { children: [_jsx(CanvasEditTip, {}), _jsx(StructureNotice, { structuralTypes: structuralTypes })] })), children: sections.map((section) => (_jsx(SectionRenderer, { section: section, editable: true, reviewing: reviewing, changed: changedSectionIds?.has(section.id) ?? false, selected: section.id === selectedId, onSelect: onSelect, registerRef: registerRef }, section.id))) }) }));
28
28
  }
29
29
  /**
30
30
  * Design-owned pages always ship the template's sections, so an empty canvas
@@ -1 +1 @@
1
- {"version":3,"file":"EditorCanvas.js","sourceRoot":"","sources":["../../../src/views/page-editor/EditorCanvas.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAA;AACjE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAGhF,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AA4BtD;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,EAC3B,QAAQ,EACR,UAAU,EACV,UAAU,EACV,IAAI,GAAG,KAAK,EACZ,QAAQ,EACR,aAAa,EACb,eAAe,EACf,eAAe,GAAG,EAAE,EACpB,oBAAoB,GAAG,KAAK,EAC5B,SAAS,GAAG,KAAK,EACjB,iBAAiB,EACjB,SAAS,GACS;IAClB,MAAM,WAAW,GAAG,cAAc,CAAC,UAAU,CAAC,CAAA;IAE9C,wEAAwE;IACxE,2EAA2E;IAC3E,mCAAmC;IACnC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,CACL,KAAC,YAAY,cACX,KAAC,WAAW,KAAG,GACF,CAChB,CAAA;IACH,CAAC;IAED,OAAO,CACL,KAAC,YAAY,cACX,KAAC,aAAa,IACZ,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,IAAI,EACV,aAAa,EAAE,aAAa,EAC5B,eAAe,EAAE,eAAe,EAChC,MAAM;YACJ,qEAAqE;YACrE,qEAAqE;YACrE,mDAAmD;YACnD,SAAS,CAAC,CAAC,CAAC,CACV,SAAS,CACV,CAAC,CAAC,CAAC,CACF,8BACE,KAAC,aAAa,KAAG,EACjB,KAAC,eAAe,IACd,eAAe,EAAE,eAAe,EAChC,oBAAoB,EAAE,oBAAoB,GAC1C,IACD,CACJ,YAGF,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CACzB,KAAC,eAAe,IAEd,OAAO,EAAE,OAAO,EAChB,QAAQ,QACR,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,iBAAiB,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,KAAK,EACpD,QAAQ,EAAE,OAAO,CAAC,EAAE,KAAK,UAAU,EACnC,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,WAAW,IAPnB,OAAO,CAAC,EAAE,CAQf,CACH,CAAC,GACY,GACH,CAChB,CAAA;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,WAAW;IAClB,OAAO,CACL,eAAK,SAAS,EAAC,+EAA+E,aAC5F,cAAK,SAAS,EAAC,2FAA2F,YACxG,KAAC,cAAc,IAAC,SAAS,EAAC,+BAA+B,wBAAe,GACpE,EACN,aAAI,SAAS,EAAC,qCAAqC,kDAAuC,EAC1F,YAAG,SAAS,EAAC,oCAAoC,qLAG7C,IACA,CACP,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"EditorCanvas.js","sourceRoot":"","sources":["../../../src/views/page-editor/EditorCanvas.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAA;AACjE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAGhF,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AA2BtD;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,EAC3B,QAAQ,EACR,UAAU,EACV,UAAU,EACV,IAAI,GAAG,KAAK,EACZ,QAAQ,EACR,aAAa,EACb,eAAe,EACf,eAAe,GAAG,EAAE,EACpB,SAAS,GAAG,KAAK,EACjB,iBAAiB,EACjB,SAAS,GACS;IAClB,MAAM,WAAW,GAAG,cAAc,CAAC,UAAU,CAAC,CAAA;IAE9C,wEAAwE;IACxE,2EAA2E;IAC3E,mCAAmC;IACnC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,CACL,KAAC,YAAY,cACX,KAAC,WAAW,KAAG,GACF,CAChB,CAAA;IACH,CAAC;IAED,OAAO,CACL,KAAC,YAAY,cACX,KAAC,aAAa,IACZ,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,IAAI,EACV,aAAa,EAAE,aAAa,EAC5B,eAAe,EAAE,eAAe,EAChC,MAAM;YACJ,qEAAqE;YACrE,qEAAqE;YACrE,mDAAmD;YACnD,SAAS,CAAC,CAAC,CAAC,CACV,SAAS,CACV,CAAC,CAAC,CAAC,CACF,8BACE,KAAC,aAAa,KAAG,EACjB,KAAC,eAAe,IAAC,eAAe,EAAE,eAAe,GAAI,IACpD,CACJ,YAGF,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CACzB,KAAC,eAAe,IAEd,OAAO,EAAE,OAAO,EAChB,QAAQ,QACR,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,iBAAiB,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,KAAK,EACpD,QAAQ,EAAE,OAAO,CAAC,EAAE,KAAK,UAAU,EACnC,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,WAAW,IAPnB,OAAO,CAAC,EAAE,CAQf,CACH,CAAC,GACY,GACH,CAChB,CAAA;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,WAAW;IAClB,OAAO,CACL,eAAK,SAAS,EAAC,+EAA+E,aAC5F,cAAK,SAAS,EAAC,2FAA2F,YACxG,KAAC,cAAc,IAAC,SAAS,EAAC,+BAA+B,wBAAe,GACpE,EACN,aAAI,SAAS,EAAC,qCAAqC,kDAAuC,EAC1F,YAAG,SAAS,EAAC,oCAAoC,qLAG7C,IACA,CACP,CAAA;AACH,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import type { PageStatus } from '../../lib/page-editor-service.js';
2
2
  import type { Zoom } from '../../lib/breakpoints.js';
3
+ import { type ViewSiteIntent } from '../../lib/view-site-chrome.js';
3
4
  import { type ViewportId } from './viewports.js';
4
5
  export type SaveState = 'idle' | 'saving' | 'saved' | 'error';
5
6
  interface EditorTopBarProps {
@@ -15,7 +16,7 @@ interface EditorTopBarProps {
15
16
  /** Shown on hover/focus when publish is blocked by validation (not role). */
16
17
  publishDisabledReason?: string;
17
18
  viewport: ViewportId;
18
- /** Canvas zoom mode; omit to hide the zoom chip (e.g. the site-preview iframe). */
19
+ /** Canvas zoom mode; omit to hide the zoom chip. */
19
20
  zoom?: Zoom;
20
21
  /** Scale the canvas actually measured, 0–1 — displayed by the zoom chip. */
21
22
  canvasScale?: number;
@@ -24,13 +25,16 @@ interface EditorTopBarProps {
24
25
  backLabel?: string;
25
26
  onViewport: (v: ViewportId) => void;
26
27
  onBack: () => void;
27
- onPreview: () => void;
28
28
  /**
29
- * Open the draft on the public site (real front-end) in a new tab. When
30
- * omitted the "View on site" button is hidden — e.g. for unsaved documents
31
- * or installs without a public URL.
29
+ * Open the public site in a new tab. Called with `preview-draft` or
30
+ * `view-live` depending on status and dirty. Omitted for unsaved documents
31
+ * (no id/slug yet) View site / Share / View live are then hidden.
32
32
  */
33
- onViewOnSite?: () => void;
33
+ onViewOnSite?: (intent: ViewSiteIntent) => void;
34
+ /** Copy a shareable draft preview link. Hidden when `shareVisible` is false. */
35
+ onShare?: () => void;
36
+ /** When false, View site and Share are disabled with the SEO settings reason. */
37
+ hasPublicSiteUrl?: boolean;
34
38
  /**
35
39
  * Toggle the version history panel. When omitted the History button is
36
40
  * hidden — e.g. for unsaved documents that have no versions yet.
@@ -42,13 +46,6 @@ interface EditorTopBarProps {
42
46
  * is nothing in the chrome saying which mode the editor is in.
43
47
  */
44
48
  historyOpen?: boolean;
45
- /** Whether the inline site preview (iframe of the public site) is showing. */
46
- sitePreview?: boolean;
47
- /**
48
- * Toggle the inline site preview — renders the draft through the consumer's
49
- * real public route inside the editor. Hidden when omitted (unsaved docs).
50
- */
51
- onToggleSitePreview?: () => void;
52
49
  onOpenSettings: () => void;
53
50
  /** Open the document SEO panel (meta, social, schema, analysis). */
54
51
  onOpenSeo?: () => void;
@@ -72,12 +69,11 @@ interface EditorTopBarProps {
72
69
  scheduledUnpublishAt?: string | null;
73
70
  /**
74
71
  * Section types the canvas renders as placeholders (custom / unmanaged).
75
- * When non-empty the editor is in "structure" mode: the eye preview is
76
- * labeled as a structure preview and "View on site" is promoted to a
77
- * labeled button as the primary design preview.
72
+ * Used for structure notice / other chrome. View site is always a labeled
73
+ * button regardless of this list.
78
74
  */
79
75
  structuralTypes?: string[];
80
76
  }
81
- export declare function EditorTopBar({ title, status, dirty, saveState, publishing, canEdit, canPublish, publishReady, publishDisabledReason, viewport, zoom, canvasScale, onZoom, backLabel, onViewport, onBack, onPreview, onViewOnSite, onHistory, historyOpen, sitePreview, onToggleSitePreview, onOpenSettings, onOpenSeo, seoOpen, seoScore, seoScoreBand, onSaveDraft, onPublish, onSchedule, scheduleReady, scheduledAt, scheduledUnpublishAt, structuralTypes, }: EditorTopBarProps): import("react/jsx-runtime").JSX.Element;
77
+ export declare function EditorTopBar({ title, status, dirty, saveState, publishing, canEdit, canPublish, publishReady, publishDisabledReason, viewport, zoom, canvasScale, onZoom, backLabel, onViewport, onBack, onViewOnSite, onShare, hasPublicSiteUrl, onHistory, historyOpen, onOpenSettings, onOpenSeo, seoOpen, seoScore, seoScoreBand, onSaveDraft, onPublish, onSchedule, scheduleReady, scheduledAt, scheduledUnpublishAt, }: EditorTopBarProps): import("react/jsx-runtime").JSX.Element;
82
78
  export {};
83
79
  //# sourceMappingURL=EditorTopBar.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"EditorTopBar.d.ts","sourceRoot":"","sources":["../../../src/views/page-editor/EditorTopBar.tsx"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAA;AAClE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAA;AACpD,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAEhD,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,CAAA;AAE7D,UAAU,iBAAiB;IACzB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,UAAU,CAAA;IAClB,KAAK,EAAE,OAAO,CAAA;IACd,SAAS,EAAE,SAAS,CAAA;IACpB,UAAU,EAAE,OAAO,CAAA;IACnB,OAAO,EAAE,OAAO,CAAA;IAChB,UAAU,EAAE,OAAO,CAAA;IACnB,kFAAkF;IAClF,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,6EAA6E;IAC7E,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,QAAQ,EAAE,UAAU,CAAA;IACpB,mFAAmF;IACnF,IAAI,CAAC,EAAE,IAAI,CAAA;IACX,4EAA4E;IAC5E,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAA;IAC7B,0EAA0E;IAC1E,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAA;IACnC,MAAM,EAAE,MAAM,IAAI,CAAA;IAClB,SAAS,EAAE,MAAM,IAAI,CAAA;IACrB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,IAAI,CAAA;IACzB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;IACtB;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,8EAA8E;IAC9E,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB;;;OAGG;IACH,mBAAmB,CAAC,EAAE,MAAM,IAAI,CAAA;IAChC,cAAc,EAAE,MAAM,IAAI,CAAA;IAC1B,oEAAoE;IACpE,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;IACtB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,wDAAwD;IACxD;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,2EAA2E;IAC3E,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAA;IACvC,WAAW,EAAE,MAAM,IAAI,CAAA;IACvB,SAAS,EAAE,MAAM,IAAI,CAAA;IACrB,8EAA8E;IAC9E,UAAU,CAAC,EAAE,MAAM,IAAI,CAAA;IACvB,qFAAqF;IACrF,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,oBAAoB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACpC;;;;;OAKG;IACH,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;CAC3B;AASD,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,MAAM,EACN,KAAK,EACL,SAAS,EACT,UAAU,EACV,OAAO,EACP,UAAU,EACV,YAAmB,EACnB,qBAAqB,EACrB,QAAQ,EACR,IAAI,EACJ,WAAW,EACX,MAAM,EACN,SAAmB,EACnB,UAAU,EACV,MAAM,EACN,SAAS,EACT,YAAY,EACZ,SAAS,EACT,WAAmB,EACnB,WAAmB,EACnB,mBAAmB,EACnB,cAAc,EACd,SAAS,EACT,OAAe,EACf,QAAQ,EACR,YAAY,EACZ,WAAW,EACX,SAAS,EACT,UAAU,EACV,aAAoB,EACpB,WAAkB,EAClB,oBAA2B,EAC3B,eAAoB,GACrB,EAAE,iBAAiB,2CA6OnB"}
1
+ {"version":3,"file":"EditorTopBar.d.ts","sourceRoot":"","sources":["../../../src/views/page-editor/EditorTopBar.tsx"],"names":[],"mappings":"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"}
@@ -1,27 +1,28 @@
1
1
  'use client';
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { Calendar, Check, ExternalLink, Eye, Globe, History, Loader2, Settings2, TriangleAlert, } from 'lucide-react';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
4
+ import { Calendar, Check, ChevronDown, ExternalLink, History, Loader2, Settings2, Share2, TriangleAlert, } from 'lucide-react';
4
5
  import { EditorSeoScoreBadge } from '../../components/seo/EditorSeoScoreBadge.js';
5
6
  import { BreakpointPicker } from '../../components/BreakpointPicker.js';
6
7
  import { ZoomChip } from '../../components/ZoomChip.js';
8
+ import { adminPortalContainer } from '../../lib/portal-container.js';
9
+ import { resolveViewSiteChrome } from '../../lib/view-site-chrome.js';
7
10
  const STATUS_TEXT = {
8
11
  DRAFT: { label: 'Draft', className: 'text-warning dark:text-amber-400' },
9
12
  PUBLISHED: { label: 'Published', className: 'text-emerald-600 dark:text-emerald-400' },
10
13
  SCHEDULED: { label: 'Scheduled', className: 'text-warning dark:text-amber-400' },
11
14
  ARCHIVED: { label: 'Archived', className: 'text-muted-foreground' },
12
15
  };
13
- export function EditorTopBar({ title, status, dirty, saveState, publishing, canEdit, canPublish, publishReady = true, publishDisabledReason, viewport, zoom, canvasScale, onZoom, backLabel = 'Pages', onViewport, onBack, onPreview, onViewOnSite, onHistory, historyOpen = false, sitePreview = false, onToggleSitePreview, onOpenSettings, onOpenSeo, seoOpen = false, seoScore, seoScoreBand, onSaveDraft, onPublish, onSchedule, scheduleReady = true, scheduledAt = null, scheduledUnpublishAt = null, structuralTypes = [], }) {
16
+ export function EditorTopBar({ title, status, dirty, saveState, publishing, canEdit, canPublish, publishReady = true, publishDisabledReason, viewport, zoom, canvasScale, onZoom, backLabel = 'Pages', onViewport, onBack, onViewOnSite, onShare, hasPublicSiteUrl, onHistory, historyOpen = false, onOpenSettings, onOpenSeo, seoOpen = false, seoScore, seoScoreBand, onSaveDraft, onPublish, onSchedule, scheduleReady = true, scheduledAt = null, scheduledUnpublishAt = null, }) {
14
17
  const statusInfo = STATUS_TEXT[status];
15
- // With custom section types on the page the canvas (and the eye preview,
16
- // which reuses the admin renderers) only shows structure — the real design
17
- // preview is the public site, so promote "View on site" to a labeled button.
18
- const structural = structuralTypes.length > 0;
19
- const previewLabel = structural
20
- ? 'Preview structure (custom sections show placeholders)'
21
- : 'Preview page';
22
- // For a published document the external-link button opens the LIVE page (no
23
- // preview token); otherwise it opens a token-gated preview of the draft.
24
- const isLive = status === 'PUBLISHED';
18
+ const chrome = onViewOnSite
19
+ ? resolveViewSiteChrome({
20
+ status,
21
+ dirty,
22
+ hasPublicSiteUrl: Boolean(hasPublicSiteUrl),
23
+ hasIdentity: true,
24
+ })
25
+ : null;
25
26
  const publishBlocked = !canPublish || !publishReady || publishing || saveState === 'saving';
26
27
  const publishTitle = publishing
27
28
  ? 'Publishing…'
@@ -57,14 +58,11 @@ export function EditorTopBar({ title, status, dirty, saveState, publishing, canE
57
58
  ? 'bg-primary text-primary-foreground'
58
59
  : 'text-muted-foreground hover:text-foreground hover:bg-accent'}`, children: [seoScore !== undefined && (_jsx(EditorSeoScoreBadge, { score: seoScore, band: seoScoreBand, inverted: seoOpen })), _jsx("span", { className: "hidden sm:inline", children: "SEO" })] })), onHistory && (_jsx("button", { type: "button", onClick: onHistory, "aria-pressed": historyOpen, "aria-label": "Version history", title: historyOpen ? 'Close version history' : 'Version history', className: `prenta-touch-target rounded-lg p-2 transition-colors ${historyOpen
59
60
  ? 'bg-primary text-primary-foreground'
60
- : 'text-muted-foreground hover:text-foreground hover:bg-accent'}`, children: _jsx(History, { className: "h-4 w-4", "aria-hidden": true }) })), _jsx("button", { type: "button", onClick: onPreview, "aria-label": previewLabel, title: previewLabel, className: "prenta-touch-target text-muted-foreground hover:text-foreground hover:bg-accent rounded-lg p-2", children: _jsx(Eye, { className: "h-4 w-4", "aria-hidden": true }) }), onToggleSitePreview && (_jsx("button", { type: "button", onClick: onToggleSitePreview, "aria-pressed": sitePreview, "aria-label": sitePreview ? 'Back to editor canvas' : 'Inline site preview', title: sitePreview
61
- ? 'Back to editor canvas'
62
- : 'Inline site preview — render the draft through your public site, in place', className: `prenta-touch-target rounded-lg p-2 transition-colors ${sitePreview
63
- ? 'bg-primary text-primary-foreground'
64
- : 'text-muted-foreground hover:text-foreground hover:bg-accent'}`, children: _jsx(Globe, { className: "h-4 w-4", "aria-hidden": true }) })), onViewOnSite &&
65
- (structural ? (_jsxs("button", { type: "button", onClick: onViewOnSite, title: isLive
66
- ? 'Open the live published page in a new tab'
67
- : 'Open the draft on your public site — the real design preview', className: "border-border text-foreground hover:bg-accent inline-flex items-center gap-1.5 rounded-lg border px-3 py-1.5 text-sm font-medium transition-colors", children: [_jsx(ExternalLink, { className: "h-3.5 w-3.5", "aria-hidden": true }), isLive ? 'View live' : 'View on site'] })) : (_jsx("button", { type: "button", onClick: onViewOnSite, "aria-label": isLive ? 'View live page' : 'View draft on site', title: isLive ? 'View live page' : 'View draft on site', className: "prenta-touch-target text-muted-foreground hover:text-foreground hover:bg-accent rounded-lg p-2", children: _jsx(ExternalLink, { className: "h-4 w-4", "aria-hidden": true }) }))), _jsx("button", { type: "button", onClick: onSaveDraft, disabled: !canEdit || saveState === 'saving' || (!dirty && saveState !== 'error'), className: "border-border text-foreground hover:bg-accent rounded-lg border px-3 py-1.5 text-sm font-medium transition-colors disabled:cursor-not-allowed disabled:opacity-50", children: saveState === 'saving' ? 'Saving…' : 'Save Draft' }), onSchedule && (_jsxs("button", { type: "button", onClick: onSchedule, disabled: scheduleBlocked, title: scheduleTitle, "aria-label": scheduledAt ? 'Reschedule publish' : 'Schedule publish', className: "border-border text-foreground hover:bg-accent inline-flex items-center gap-1.5 rounded-lg border px-3 py-1.5 text-sm font-medium transition-colors disabled:cursor-not-allowed disabled:opacity-50", children: [_jsx(Calendar, { className: "h-3.5 w-3.5", "aria-hidden": true }), _jsx("span", { className: "hidden sm:inline", children: scheduledAt ? 'Reschedule' : 'Schedule' })] })), _jsxs("button", { type: "button", onClick: onPublish, disabled: publishBlocked, title: publishTitle, "aria-disabled": publishBlocked, className: "bg-primary text-primary-foreground hover:bg-primary/90 inline-flex items-center gap-1.5 rounded-lg px-3.5 py-1.5 text-sm font-medium transition-colors disabled:cursor-not-allowed disabled:opacity-50", children: [publishing && _jsx(Loader2, { className: "h-3.5 w-3.5 animate-spin", "aria-hidden": true }), "Publish"] })] })] }));
61
+ : 'text-muted-foreground hover:text-foreground hover:bg-accent'}`, children: _jsx(History, { className: "h-4 w-4", "aria-hidden": true }) })), chrome && (_jsxs(_Fragment, { children: [_jsxs("button", { type: "button", onClick: () => onViewOnSite?.(chrome.primaryIntent), disabled: !chrome.viewEnabled, title: chrome.viewDisabledReason ??
62
+ (chrome.primaryIntent === 'view-live'
63
+ ? 'Open the published page in a new tab.'
64
+ : 'Open the draft on your site in a new tab.'), className: "border-border text-foreground hover:bg-accent inline-flex items-center gap-1.5 rounded-lg border px-3 py-1.5 text-sm font-medium transition-colors disabled:cursor-not-allowed disabled:opacity-50", children: [_jsx(ExternalLink, { className: "h-3.5 w-3.5", "aria-hidden": true }), chrome.primaryIntent === 'view-live' ? 'View live' : 'View site'] }), chrome.showViewLive && (_jsxs(DropdownMenu.Root, { children: [_jsx(DropdownMenu.Trigger, { asChild: true, children: _jsx("button", { type: "button", disabled: !chrome.viewEnabled, "aria-label": "More view options", className: "prenta-touch-target border-border text-foreground hover:bg-accent inline-flex h-[34px] items-center rounded-lg border px-2 text-sm font-medium disabled:cursor-not-allowed disabled:opacity-50", children: _jsx(ChevronDown, { className: "h-3.5 w-3.5", "aria-hidden": true }) }) }), _jsx(DropdownMenu.Portal, { container: adminPortalContainer(), children: _jsx(DropdownMenu.Content, { align: "end", sideOffset: 6, className: "border-border bg-popover z-[120] rounded-[10px] border p-[5px] shadow-[0_12px_34px_rgba(26,24,39,0.17)]", children: _jsx(DropdownMenu.Item, { onSelect: () => onViewOnSite?.('view-live'), className: "hover:bg-accent focus:bg-accent cursor-pointer rounded-md px-2.5 py-1.5 text-sm outline-none", children: "View live" }) }) })] })), chrome.shareVisible && onShare && (_jsxs("button", { type: "button", onClick: onShare, disabled: !chrome.viewEnabled, title: chrome.viewDisabledReason ??
65
+ 'Copy a link so someone can view this draft without signing in.', className: "border-border text-foreground hover:bg-accent inline-flex items-center gap-1.5 rounded-lg border px-3 py-1.5 text-sm font-medium transition-colors disabled:cursor-not-allowed disabled:opacity-50", children: [_jsx(Share2, { className: "h-3.5 w-3.5", "aria-hidden": true }), "Share"] }))] })), _jsx("button", { type: "button", onClick: onSaveDraft, disabled: !canEdit || saveState === 'saving' || (!dirty && saveState !== 'error'), className: "border-border text-foreground hover:bg-accent rounded-lg border px-3 py-1.5 text-sm font-medium transition-colors disabled:cursor-not-allowed disabled:opacity-50", children: saveState === 'saving' ? 'Saving…' : 'Save Draft' }), onSchedule && (_jsxs("button", { type: "button", onClick: onSchedule, disabled: scheduleBlocked, title: scheduleTitle, "aria-label": scheduledAt ? 'Reschedule publish' : 'Schedule publish', className: "border-border text-foreground hover:bg-accent inline-flex items-center gap-1.5 rounded-lg border px-3 py-1.5 text-sm font-medium transition-colors disabled:cursor-not-allowed disabled:opacity-50", children: [_jsx(Calendar, { className: "h-3.5 w-3.5", "aria-hidden": true }), _jsx("span", { className: "hidden sm:inline", children: scheduledAt ? 'Reschedule' : 'Schedule' })] })), _jsxs("button", { type: "button", onClick: onPublish, disabled: publishBlocked, title: publishTitle, "aria-disabled": publishBlocked, className: "bg-primary text-primary-foreground hover:bg-primary/90 inline-flex items-center gap-1.5 rounded-lg px-3.5 py-1.5 text-sm font-medium transition-colors disabled:cursor-not-allowed disabled:opacity-50", children: [publishing && _jsx(Loader2, { className: "h-3.5 w-3.5 animate-spin", "aria-hidden": true }), "Publish"] })] })] }));
68
66
  }
69
67
  function SaveStatus({ state, dirty }) {
70
68
  if (state === 'saving') {
@@ -1 +1 @@
1
- {"version":3,"file":"EditorTopBar.js","sourceRoot":"","sources":["../../../src/views/page-editor/EditorTopBar.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"EditorTopBar.js","sourceRoot":"","sources":["../../../src/views/page-editor/EditorTopBar.tsx"],"names":[],"mappings":"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"}
@@ -10,13 +10,7 @@ interface PageSectionEditorProps {
10
10
  config?: any;
11
11
  session?: any;
12
12
  onNavigate: (path: string) => void;
13
- /**
14
- * Open a preview route in a new browser tab. `prepare` runs before the tab
15
- * navigates (used to save an unsaved draft first); returning `false` cancels
16
- * the open. Falls back to in-tab navigation when not provided.
17
- */
18
- onOpenPreview?: (path: string, prepare?: () => Promise<boolean | void> | boolean | void) => void;
19
13
  }
20
- export declare function PageSectionEditor({ documentId, initialParentId, config, session, onNavigate, onOpenPreview, }: PageSectionEditorProps): import("react/jsx-runtime").JSX.Element;
14
+ export declare function PageSectionEditor({ documentId, initialParentId, config, session, onNavigate, }: PageSectionEditorProps): import("react/jsx-runtime").JSX.Element;
21
15
  export {};
22
16
  //# sourceMappingURL=PageSectionEditor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"PageSectionEditor.d.ts","sourceRoot":"","sources":["../../../src/views/page-editor/PageSectionEditor.tsx"],"names":[],"mappings":"AAsEA,UAAU,sBAAsB;IAC9B,wDAAwD;IACxD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,MAAM,CAAC,EAAE,GAAG,CAAA;IACZ,OAAO,CAAC,EAAE,GAAG,CAAA;IACb,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC;;;;OAIG;IACH,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,OAAO,GAAG,IAAI,KAAK,IAAI,CAAA;CACjG;AA6CD,wBAAgB,iBAAiB,CAAC,EAChC,UAAU,EACV,eAAe,EACf,MAAM,EACN,OAAO,EACP,UAAU,EACV,aAAa,GACd,EAAE,sBAAsB,2CAulCxB"}
1
+ {"version":3,"file":"PageSectionEditor.d.ts","sourceRoot":"","sources":["../../../src/views/page-editor/PageSectionEditor.tsx"],"names":[],"mappings":"AAiEA,UAAU,sBAAsB;IAC9B,wDAAwD;IACxD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,MAAM,CAAC,EAAE,GAAG,CAAA;IACZ,OAAO,CAAC,EAAE,GAAG,CAAA;IACb,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;CACnC;AA6CD,wBAAgB,iBAAiB,CAAC,EAChC,UAAU,EACV,eAAe,EACf,MAAM,EACN,OAAO,EACP,UAAU,GACX,EAAE,sBAAsB,2CAs/BxB"}
@@ -1,7 +1,7 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
3
  import { useCallback, useEffect, useMemo, useState } from 'react';
4
- import { AlertTriangle, Blocks, Loader2, Lock } from 'lucide-react';
4
+ import { AlertTriangle, Loader2, Lock } from 'lucide-react';
5
5
  import { toast } from 'sonner';
6
6
  import { ConfirmDialog } from '../../components/ui/ConfirmDialog.js';
7
7
  import { useNavigationBlocker } from '../../router/index.js';
@@ -16,7 +16,8 @@ import { fetchPageVersions, restorePageVersion, } from '../../lib/version-histor
16
16
  import { changedSectionIds, diffVersions } from '../../lib/version-diff.js';
17
17
  import { emptyPage, fetchPageForEditor, missingPageFields, publishPage, PAGES_COLLECTION, savePageDraft, toggleSectionVisibility, updateSectionContent, updateSectionContentAtPath, updateSectionMeta, validatePage, } from '../../lib/page-editor-service.js';
18
18
  import { MediaPickerModal } from '../../components/MediaPickerModal.js';
19
- import { buildPublicPreviewUrl, buildPublicUrl, createPreviewToken, } from '../../lib/preview-link.js';
19
+ import { SharePreviewLinkDialog } from '../../components/SharePreviewLinkDialog.js';
20
+ import { openPublicSiteTab } from '../../lib/open-public-site-tab.js';
20
21
  import { usePublicSiteUrl } from '../../hooks/usePublicSiteUrl.js';
21
22
  import { DEFAULT_VIEWPORT } from './viewports.js';
22
23
  import { snapshotBaseline } from '../../lib/reflow-baseline.js';
@@ -32,12 +33,9 @@ import { EditorTopBar } from './EditorTopBar.js';
32
33
  import { SectionsList } from './SectionsPanel.js';
33
34
  import { EditorCanvas } from './EditorCanvas.js';
34
35
  import { ReflowContext } from './reflow-context.js';
35
- import { SitePreviewFrame } from './SitePreviewFrame.js';
36
- import { useSitePreview } from './useSitePreview.js';
37
36
  import { SectionEditForm } from './SectionEditForm.js';
38
37
  import { PageSettingsModal } from './PageSettingsModal.js';
39
38
  import { ValidationSummary } from './ValidationSummary.js';
40
- import { resolveDefaultSitePreview } from '../../lib/editor-preview.js';
41
39
  import { buildEditorContentHtml } from '../../lib/editor-seo-content.js';
42
40
  import { companionDimensionPaths, inspectorIdFromFieldPath } from '../../lib/preview-bridge.js';
43
41
  /**
@@ -79,7 +77,7 @@ function deriveCan(session) {
79
77
  canCreateRedirect: redirectCreators.includes(role),
80
78
  };
81
79
  }
82
- export function PageSectionEditor({ documentId, initialParentId, config, session, onNavigate, onOpenPreview, }) {
80
+ export function PageSectionEditor({ documentId, initialParentId, config, session, onNavigate, }) {
83
81
  const [page, setPage] = useState(null);
84
82
  const [loading, setLoading] = useState(true);
85
83
  const [loadError, setLoadError] = useState(null);
@@ -102,8 +100,7 @@ export function PageSectionEditor({ documentId, initialParentId, config, session
102
100
  const [canvasScale, setCanvasScale] = useState(1);
103
101
  /**
104
102
  * The live canvas surface, for the reflow guard to clone. State rather than a
105
- * ref because the context value has to update when it mounts — the canvas
106
- * unmounts whenever the site-preview frame takes over.
103
+ * ref because the context value has to update when it mounts.
107
104
  */
108
105
  const [canvasEl, setCanvasEl] = useState(null);
109
106
  /**
@@ -165,6 +162,7 @@ export function PageSectionEditor({ documentId, initialParentId, config, session
165
162
  const [restoring, setRestoring] = useState(false);
166
163
  const [confirmPublish, setConfirmPublish] = useState(false);
167
164
  const [scheduleOpen, setScheduleOpen] = useState(false);
165
+ const [shareOpen, setShareOpen] = useState(false);
168
166
  const [leaveTarget, setLeaveTarget] = useState(null);
169
167
  const [validation, setValidation] = useState(null);
170
168
  const { canEdit, canPublish, canCreateRedirect } = useMemo(() => deriveCan(session), [session]);
@@ -312,25 +310,19 @@ export function PageSectionEditor({ documentId, initialParentId, config, session
312
310
  }
313
311
  }, [page?.id, acceptPage, closeHistory, loadVersions]);
314
312
  // ─── Edit permission ─────────────────────────────────────────────────
315
- /**
316
- * ADR 0002: a Page-Builder-owned page (it has a `_layout`) compiles its
317
- * sections from the builder layout on every save, so editing them here would
318
- * be overwritten. The server independently refuses such edits with 409.
319
- */
320
- const readOnly = page?.builderOwned ?? false;
321
313
  /**
322
314
  * The single gate every writing surface reads.
323
315
  *
324
316
  * Hoisted above the callbacks rather than derived at render time, because
325
317
  * the two that were left behind were the ones that mattered: the site
326
318
  * preview's in-place edit handlers close over `canEdit` (the raw role) and
327
- * so kept accepting edits while a past version was under review and while
328
- * a builder-owned page was supposedly read-only. The iframe is a second
329
- * editing surface, and a lock that only covers the rail is not a lock.
319
+ * so kept accepting edits while a past version was under review. The iframe
320
+ * is a second editing surface, and a lock that only covers the rail is not
321
+ * a lock.
330
322
  */
331
- const effectiveCanEdit = canEdit && !readOnly && !reviewing;
323
+ const effectiveCanEdit = canEdit && !reviewing;
332
324
  /** Restoring is not editing: it is allowed precisely while reviewing. */
333
- const canRestoreVersion = canEdit && !readOnly;
325
+ const canRestoreVersion = canEdit;
334
326
  // ─── Load ──────────────────────────────────────────────────────────
335
327
  useEffect(() => {
336
328
  let cancelled = false;
@@ -461,20 +453,6 @@ export function PageSectionEditor({ documentId, initialParentId, config, session
461
453
  return false;
462
454
  }
463
455
  }, [page, documentId, onNavigate, saveDirectives, acceptPage]);
464
- // Inline branded preview — Next builder canvas (same origin as admin), not
465
- // the Astro public apex. "View on site" still uses publicSiteUrl below.
466
- const sitePreview = useSitePreview({
467
- collection: 'pages',
468
- documentId: page?.id,
469
- slug: page?.slug,
470
- path: page?.path,
471
- urlPrefix: '',
472
- dirty,
473
- saveState,
474
- saveDraft: handleSaveDraft,
475
- defaultActive: resolveDefaultSitePreview(config?.admin?.editor, 'pages'),
476
- });
477
- const sitePreviewAvailable = Boolean(page?.id && page?.slug);
478
456
  const requestPublish = useCallback(() => {
479
457
  if (!page)
480
458
  return;
@@ -663,80 +641,34 @@ export function PageSectionEditor({ documentId, initialParentId, config, session
663
641
  else
664
642
  onNavigate(path);
665
643
  }, [dirty, onNavigate]);
666
- const handlePreview = useCallback(() => {
667
- if (!page?.id) {
668
- toast.error('Save the page before previewing');
669
- return;
670
- }
671
- const path = `/pages/${page.id}/preview`;
672
- // New-tab preview: save first when there are unsaved edits so the preview
673
- // (which reads the persisted document) reflects what's on screen.
674
- if (onOpenPreview) {
675
- onOpenPreview(path, dirty ? handleSaveDraft : undefined);
676
- }
677
- else {
678
- guardedNavigate(path);
679
- }
680
- }, [page, dirty, onOpenPreview, handleSaveDraft, guardedNavigate]);
681
- // "View on site": render the draft through the consumer's real public route
682
- // via a signed preview token. The blank tab is opened synchronously inside
683
- // the click (popup-safe), then pointed at the public URL once any unsaved
684
- // draft is persisted and the token is minted.
685
- const handleViewOnSite = useCallback(() => {
644
+ const handleViewOnSite = useCallback((intent) => {
686
645
  if (!page?.id || !page.slug) {
687
646
  toast.error('Save the page before viewing it on the site');
688
647
  return;
689
648
  }
690
- // Published → jump straight to the LIVE page: no preview token, no forced
691
- // save. This is the fast "see it live" path. Pending edits stay previewable
692
- // via the eye (canvas) and globe (inline site preview).
693
- if (page.status === 'PUBLISHED') {
694
- window.open(buildPublicUrl({
695
- siteUrl: publicSiteUrl,
696
- urlPrefix: '',
697
- slug: page.slug,
698
- path: page.path,
699
- }), '_blank', 'noopener');
700
- return;
701
- }
702
- // Not yet public (draft / scheduled / archived) → token-gated preview of
703
- // the current draft through the real front-end.
704
- const tab = window.open('about:blank', '_blank');
705
- if (!tab) {
706
- toast.error('Enable pop-ups for this site to open the preview in a new tab.');
649
+ void openPublicSiteTab({
650
+ intent,
651
+ siteUrl: publicSiteUrl,
652
+ collection: 'pages',
653
+ documentId: page.id,
654
+ slug: page.slug,
655
+ path: page.path,
656
+ dirty,
657
+ saveDraft: handleSaveDraft,
658
+ }).catch((err) => {
659
+ toast.error(err instanceof Error ? err.message : 'Failed to open the site');
660
+ });
661
+ }, [page, dirty, handleSaveDraft, publicSiteUrl]);
662
+ const handleShare = useCallback(async () => {
663
+ if (!page?.id)
707
664
  return;
665
+ if (dirty) {
666
+ const ok = await handleSaveDraft();
667
+ if (!ok)
668
+ return;
708
669
  }
709
- void (async () => {
710
- try {
711
- if (dirty) {
712
- const ok = await handleSaveDraft();
713
- if (!ok) {
714
- tab.close();
715
- return;
716
- }
717
- }
718
- const { token } = await createPreviewToken('pages', page.id);
719
- const target = buildPublicPreviewUrl({
720
- siteUrl: publicSiteUrl,
721
- urlPrefix: '',
722
- slug: page.slug,
723
- path: page.path,
724
- token,
725
- });
726
- try {
727
- tab.opener = null;
728
- }
729
- catch {
730
- /* same-origin guard */
731
- }
732
- tab.location.replace(target);
733
- }
734
- catch (err) {
735
- tab.close();
736
- toast.error(err instanceof Error ? err.message : 'Failed to open site preview');
737
- }
738
- })();
739
- }, [page, dirty, handleSaveDraft, publicSiteUrl]);
670
+ setShareOpen(true);
671
+ }, [page, dirty, handleSaveDraft]);
740
672
  // ─── Render states ───────────────────────────────────────────────────
741
673
  if (loading) {
742
674
  return (_jsxs("div", { className: "bg-background flex h-full items-center justify-center", children: [_jsx(Loader2, { className: "text-muted-foreground h-6 w-6 animate-spin", "aria-hidden": true }), _jsx("span", { className: "sr-only", children: "Loading page editor\u2026" })] }));
@@ -744,8 +676,8 @@ export function PageSectionEditor({ documentId, initialParentId, config, session
744
676
  if (loadError || !page) {
745
677
  return (_jsx("div", { className: "bg-background flex h-full items-center justify-center p-6", children: _jsxs("div", { className: "border-destructive/30 bg-destructive/5 flex max-w-md items-center gap-3 rounded-lg border p-4", children: [_jsx(AlertTriangle, { className: "text-destructive shrink-0", size: 20, "aria-hidden": true }), _jsxs("div", { className: "min-w-0", children: [_jsx("p", { className: "text-foreground text-sm font-medium", children: "Failed to load page" }), _jsx("p", { className: "text-muted-foreground mt-1 text-sm", children: loadError ?? 'Page not found.' }), _jsx("button", { type: "button", onClick: () => onNavigate('/pages'), className: "text-primary mt-2 text-sm font-medium hover:underline", children: "Back to Pages" })] })] }) }));
746
678
  }
747
- // `readOnly` / `effectiveCanEdit` / `canRestoreVersion` are computed above,
748
- // with the hooks, so the callbacks defined there share this one gate.
679
+ // `effectiveCanEdit` / `canRestoreVersion` are computed above, with the
680
+ // hooks, so the callbacks defined there share this one gate.
749
681
  // The canvas shows the reviewed snapshot, but `page.sections` stays the
750
682
  // editor's own content throughout — nothing about review mode writes to it.
751
683
  const canvasSections = reviewVersion ? reviewVersion.sections : page.sections;
@@ -759,15 +691,11 @@ export function PageSectionEditor({ documentId, initialParentId, config, session
759
691
  const structuralTypes = Array.from(new Set(page.sections
760
692
  .filter((s) => !hasCanvasRenderer(s.sectionType) && !customRenderers[s.sectionType])
761
693
  .map((s) => s.sectionType)));
762
- return (_jsxs(ErrorBoundary, { children: [_jsxs("div", { className: "bg-background flex h-full flex-col overflow-hidden", children: [_jsx(EditorTopBar, { title: page.title, status: page.status, dirty: dirty, saveState: saveState, publishing: publishing, canEdit: effectiveCanEdit, canPublish: canPublish && effectiveCanEdit, publishReady: publishReady, publishDisabledReason: publishDisabledReason, viewport: viewport, onViewport: setViewport, ...(sitePreview.active
763
- ? // The site preview is an iframe of the real front end, not a
764
- // scaled canvas — a zoom percentage there would be a lie.
765
- {}
766
- : { zoom, canvasScale, onZoom: setZoom }), onBack: () => guardedNavigate('/pages'), onPreview: handlePreview, onViewOnSite: page.id ? handleViewOnSite : undefined, sitePreview: sitePreview.active, onToggleSitePreview: page.id && page.slug ? sitePreview.toggle : undefined, historyOpen: historyOpen, onHistory: page.id ? () => (historyOpen ? closeHistory() : openHistory()) : undefined, onOpenSettings: () => setSettingsOpen(true), onOpenSeo: handleToggleSeo, seoOpen: railTab === 'seo',
694
+ return (_jsxs(ErrorBoundary, { children: [_jsxs("div", { className: "bg-background flex h-full flex-col overflow-hidden", children: [_jsx(EditorTopBar, { title: page.title, status: page.status, dirty: dirty, saveState: saveState, publishing: publishing, canEdit: effectiveCanEdit, canPublish: canPublish && effectiveCanEdit, publishReady: publishReady, publishDisabledReason: publishDisabledReason, viewport: viewport, onViewport: setViewport, zoom: zoom, canvasScale: canvasScale, onZoom: setZoom, onBack: () => guardedNavigate('/pages'), onViewOnSite: page.id && page.slug ? handleViewOnSite : undefined, onShare: page.id ? handleShare : undefined, hasPublicSiteUrl: Boolean(publicSiteUrl), historyOpen: historyOpen, onHistory: page.id ? () => (historyOpen ? closeHistory() : openHistory()) : undefined, onOpenSettings: () => setSettingsOpen(true), onOpenSeo: handleToggleSeo, seoOpen: railTab === 'seo',
767
695
  // The audit's SEO score, banded by the audit's own scale. Previously
768
696
  // this chip showed `computeLiveSeoScore` — a different model — so the
769
697
  // header read 53 while the rings beside it read 0 and 57.
770
- seoScore: audit?.seo.score ?? undefined, seoScoreBand: typeof audit?.seo.score === 'number' ? scoreBand(audit.seo.score) : undefined, onSaveDraft: handleSaveDraft, onPublish: requestPublish, onSchedule: page.id ? requestSchedule : undefined, scheduleReady: Boolean(page.id), scheduledAt: page.scheduledAt, scheduledUnpublishAt: page.scheduledUnpublishAt, structuralTypes: structuralTypes }), readOnly && (_jsxs("div", { role: "status", className: "border-border bg-accent/40 flex items-center gap-3 border-b px-4 py-2.5", children: [_jsx(Blocks, { className: "text-muted-foreground shrink-0", size: 16, "aria-hidden": true }), _jsxs("p", { className: "text-muted-foreground flex-1 text-sm", children: ["This page is built in the", ' ', _jsx("span", { className: "text-foreground font-medium", children: "Page Builder" }), ". Its sections are generated from the builder layout and are read-only here."] }), page.id && (_jsx("button", { type: "button", onClick: () => guardedNavigate(`/page-builder/${page.id}`), className: "bg-primary text-primary-foreground hover:bg-primary/90 shrink-0 rounded-lg px-3 py-1.5 text-sm font-medium transition-colors", children: "Open in Page Builder" }))] })), unmanagedTypes.length > 0 && (_jsxs("div", { role: "status", className: "border-border bg-muted/50 flex items-start gap-3 border-b px-4 py-2.5", children: [_jsx(Lock, { className: "text-muted-foreground mt-0.5 shrink-0", size: 16, "aria-hidden": true }), _jsxs("p", { className: "text-muted-foreground flex-1 text-sm", children: ["This page has", ' ', _jsxs("span", { className: "text-foreground font-medium", children: [unmanagedTypes.length, " section type", unmanagedTypes.length > 1 ? 's' : ''] }), ' ', "managed outside the editor (", unmanagedTypes.join(', '), "). They are preserved on save but edited in your seed script or code, not here."] })] })), validation && (_jsx(ValidationSummary, { errors: validation.errors, warnings: validation.warnings, onDismiss: () => setValidation(null) })), _jsx(ReflowContext.Provider, { value: reflowContext, children: _jsxs("div", { className: "prenta-editor-body relative flex flex-1 overflow-hidden", children: [_jsx(EditorRail, { collapsedLabel: activeRailTab.label, children: ({ width, dragging, collapse }) => (_jsxs(_Fragment, { children: [_jsx(EditorRailTabs, { tabs: railTabs, active: railTab, onChange: setRailTab }), _jsx(RailHeader, { title: activeRailTab.title, width: width, dragging: dragging, onCollapse: collapse }), _jsx("div", { role: "tabpanel", id: `rail-panel-${railTab}`, "aria-labelledby": `rail-tab-${railTab}`, className: "flex min-h-0 flex-1 flex-col", children: railTab === 'sections' ? (_jsx(SectionsList, { sections: page.sections, selectedId: selectedId, canEdit: effectiveCanEdit, onSelect: handleSelectSection, onToggleVisibility: handleToggleVisibility,
698
+ seoScore: audit?.seo.score ?? undefined, seoScoreBand: typeof audit?.seo.score === 'number' ? scoreBand(audit.seo.score) : undefined, onSaveDraft: handleSaveDraft, onPublish: requestPublish, onSchedule: page.id ? requestSchedule : undefined, scheduleReady: Boolean(page.id), scheduledAt: page.scheduledAt, scheduledUnpublishAt: page.scheduledUnpublishAt, structuralTypes: structuralTypes }), unmanagedTypes.length > 0 && (_jsxs("div", { role: "status", className: "border-border bg-muted/50 flex items-start gap-3 border-b px-4 py-2.5", children: [_jsx(Lock, { className: "text-muted-foreground mt-0.5 shrink-0", size: 16, "aria-hidden": true }), _jsxs("p", { className: "text-muted-foreground flex-1 text-sm", children: ["This page has", ' ', _jsxs("span", { className: "text-foreground font-medium", children: [unmanagedTypes.length, " section type", unmanagedTypes.length > 1 ? 's' : ''] }), ' ', "managed outside the editor (", unmanagedTypes.join(', '), "). They are preserved on save but edited in your seed script or code, not here."] })] })), validation && (_jsx(ValidationSummary, { errors: validation.errors, warnings: validation.warnings, onDismiss: () => setValidation(null) })), _jsx(ReflowContext.Provider, { value: reflowContext, children: _jsxs("div", { className: "prenta-editor-body relative flex flex-1 overflow-hidden", children: [_jsx(EditorRail, { collapsedLabel: activeRailTab.label, children: ({ width, dragging, collapse }) => (_jsxs(_Fragment, { children: [_jsx(EditorRailTabs, { tabs: railTabs, active: railTab, onChange: setRailTab }), _jsx(RailHeader, { title: activeRailTab.title, width: width, dragging: dragging, onCollapse: collapse }), _jsx("div", { role: "tabpanel", id: `rail-panel-${railTab}`, "aria-labelledby": `rail-tab-${railTab}`, className: "flex min-h-0 flex-1 flex-col", children: railTab === 'sections' ? (_jsx(SectionsList, { sections: page.sections, selectedId: selectedId, canEdit: effectiveCanEdit, onSelect: handleSelectSection, onToggleVisibility: handleToggleVisibility,
771
699
  // The editor opens inside the row it belongs to. While
772
700
  // reviewing a past version there is nothing to edit, so
773
701
  // rows stay closed rather than opening a dead form.
@@ -779,7 +707,7 @@ export function PageSectionEditor({ documentId, initialParentId, config, session
779
707
  }, redirectOnPublish: redirectOnPublish, onRedirectOnPublishChange: setRedirectOnPublish, canCreateRedirect: canCreateRedirect, onPageChange: handlePageSettings, onDuplicate: handleDuplicate, onTrash: handleTrash, schemaType: seoRecord?.structuredDataType ?? undefined, brandName: config?.seo?.siteName ?? undefined }) })) : (_jsx(SeoEditorPane, { entityType: "page", entityId: page.id, slug: page.slug, auditSections: page.sections, onAuditChange: setLiveAudit, contentHtml: seoContentHtml, draftMeta: {
780
708
  seoTitle: page.seoTitle,
781
709
  seoDescription: page.seoDescription,
782
- }, onDraftChange: handlePageSettings, onClose: () => setRailTab('sections'), onSaved: handleSeoSaved })) }), historyOpen && (_jsx(VersionHistoryPanel, { versions: versions, loading: versionsLoading, error: versionsError, selectedIndex: versionIndex, onSelect: setVersionIndex, onClose: closeHistory, onRestore: handleRestoreVersion, restoring: restoring, canRestore: canRestoreVersion }))] })) }), _jsx("div", { className: "flex-1 overflow-hidden", children: sitePreview.active ? (_jsx(SitePreviewFrame, { src: sitePreview.url, viewport: viewport, reloadKey: sitePreview.reloadKey, title: `Site preview: ${page.title || 'Untitled page'}`, selectedId: selectedId, sections: page.sections, suppressSectionsEcho: suppressSectionsEcho, onSelectSection: handleSelectSection, onCanvasEdit: handleCanvasEdit, onCanvasRequestMedia: handleCanvasRequestMedia })) : (_jsx(EditorCanvas, { sections: canvasSections, selectedId: selectedId, breakpoint: viewport, zoom: zoom, onScaleChange: setCanvasScale, onCanvasElement: setCanvasEl, onSelect: handleSelectSection, structuralTypes: structuralTypes, sitePreviewAvailable: sitePreviewAvailable && !sitePreview.active, reviewing: reviewing, changedSectionIds: reviewChangedIds, reviewBar: reviewVersion ? (_jsx(ReviewBar, { version: reviewVersion, changedCount: reviewChangedIds.size, onRestore: () => void handleRestoreVersion(reviewVersion), onBackToCurrent: () => setVersionIndex(0), restoring: restoring, canRestore: canRestoreVersion })) : null })) })] }) })] }), _jsx(PageSettingsModal, { open: settingsOpen, page: page, canEdit: effectiveCanEdit, onClose: () => setSettingsOpen(false), onSave: handlePageSettings }), _jsx(ConfirmDialog, { open: confirmPublish, onClose: () => setConfirmPublish(false), onConfirm: doPublish, title: "Publish this page?", description: "The current content will go live and replace the published version.", confirmLabel: "Publish" }), page.id && (_jsx(SchedulePublishDialog, { collectionSlug: PAGES_COLLECTION, documentId: page.id, scheduledAt: page.scheduledAt, scheduledUnpublishAt: page.scheduledUnpublishAt, open: scheduleOpen, onClose: () => setScheduleOpen(false), onScheduled: handleScheduled })), _jsx(ConfirmDialog, { open: leaveTarget !== null, onClose: () => setLeaveTarget(null), onConfirm: () => {
710
+ }, onDraftChange: handlePageSettings, onClose: () => setRailTab('sections'), onSaved: handleSeoSaved })) }), historyOpen && (_jsx(VersionHistoryPanel, { versions: versions, loading: versionsLoading, error: versionsError, selectedIndex: versionIndex, onSelect: setVersionIndex, onClose: closeHistory, onRestore: handleRestoreVersion, restoring: restoring, canRestore: canRestoreVersion }))] })) }), _jsx("div", { className: "flex-1 overflow-hidden", children: _jsx(EditorCanvas, { sections: canvasSections, selectedId: selectedId, breakpoint: viewport, zoom: zoom, onScaleChange: setCanvasScale, onCanvasElement: setCanvasEl, onSelect: handleSelectSection, structuralTypes: structuralTypes, reviewing: reviewing, changedSectionIds: reviewChangedIds, reviewBar: reviewVersion ? (_jsx(ReviewBar, { version: reviewVersion, changedCount: reviewChangedIds.size, onRestore: () => void handleRestoreVersion(reviewVersion), onBackToCurrent: () => setVersionIndex(0), restoring: restoring, canRestore: canRestoreVersion })) : null }) })] }) })] }), _jsx(PageSettingsModal, { open: settingsOpen, page: page, canEdit: effectiveCanEdit, onClose: () => setSettingsOpen(false), onSave: handlePageSettings }), _jsx(ConfirmDialog, { open: confirmPublish, onClose: () => setConfirmPublish(false), onConfirm: doPublish, title: "Publish this page?", description: "The current content will go live and replace the published version.", confirmLabel: "Publish" }), page.id && (_jsx(SchedulePublishDialog, { collectionSlug: PAGES_COLLECTION, documentId: page.id, scheduledAt: page.scheduledAt, scheduledUnpublishAt: page.scheduledUnpublishAt, open: scheduleOpen, onClose: () => setScheduleOpen(false), onScheduled: handleScheduled })), page.id && (_jsx(SharePreviewLinkDialog, { collectionSlug: "pages", documentId: page.id, documentSlug: page.slug, documentPath: page.path, siteUrl: publicSiteUrl, urlPrefix: "", open: shareOpen, onClose: () => setShareOpen(false) })), _jsx(ConfirmDialog, { open: leaveTarget !== null, onClose: () => setLeaveTarget(null), onConfirm: () => {
783
711
  const target = leaveTarget;
784
712
  setLeaveTarget(null);
785
713
  setDirty(false);