@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.
- package/CHANGELOG.md +12 -0
- package/dist/AdminRoot.d.ts.map +1 -1
- package/dist/AdminRoot.js +22 -84
- package/dist/AdminRoot.js.map +1 -1
- package/dist/__tests__/components/breakpoint-controls.render.test.js +4 -4
- package/dist/__tests__/components/breakpoint-controls.render.test.js.map +1 -1
- package/dist/__tests__/components/seo-score-bands.test.js +0 -3
- package/dist/__tests__/components/seo-score-bands.test.js.map +1 -1
- package/dist/__tests__/layout/sidebar-posts.test.js +6 -11
- package/dist/__tests__/layout/sidebar-posts.test.js.map +1 -1
- package/dist/__tests__/layout/sidebar-submenu.render.test.js +3 -2
- package/dist/__tests__/layout/sidebar-submenu.render.test.js.map +1 -1
- package/dist/__tests__/lib/open-public-site-tab.test.d.ts +2 -0
- package/dist/__tests__/lib/open-public-site-tab.test.d.ts.map +1 -0
- package/dist/__tests__/lib/open-public-site-tab.test.js +64 -0
- package/dist/__tests__/lib/open-public-site-tab.test.js.map +1 -0
- package/dist/__tests__/lib/page-editor-service-api.test.js +26 -23
- package/dist/__tests__/lib/page-editor-service-api.test.js.map +1 -1
- package/dist/__tests__/lib/view-site-chrome.test.d.ts +2 -0
- package/dist/__tests__/lib/view-site-chrome.test.d.ts.map +1 -0
- package/dist/__tests__/lib/view-site-chrome.test.js +59 -0
- package/dist/__tests__/lib/view-site-chrome.test.js.map +1 -0
- package/dist/__tests__/router/admin-routes.test.js +4 -0
- package/dist/__tests__/router/admin-routes.test.js.map +1 -1
- package/dist/__tests__/views/canvas-surface-shared.test.js +0 -16
- package/dist/__tests__/views/canvas-surface-shared.test.js.map +1 -1
- package/dist/__tests__/views/editor-top-bar.render.test.js +44 -22
- package/dist/__tests__/views/editor-top-bar.render.test.js.map +1 -1
- package/dist/__tests__/views/page-section-editor.test.js +30 -10
- package/dist/__tests__/views/page-section-editor.test.js.map +1 -1
- package/dist/__tests__/views/page-tab.render.test.js +0 -1
- package/dist/__tests__/views/page-tab.render.test.js.map +1 -1
- package/dist/__tests__/views/post-section-editor.test.js +23 -0
- package/dist/__tests__/views/post-section-editor.test.js.map +1 -1
- package/dist/components/BreakpointPicker.d.ts +3 -2
- package/dist/components/BreakpointPicker.d.ts.map +1 -1
- package/dist/components/BreakpointPicker.js +5 -3
- package/dist/components/BreakpointPicker.js.map +1 -1
- package/dist/components/CanvasEditTip.js +1 -1
- package/dist/components/CanvasEditTip.js.map +1 -1
- package/dist/index.d.ts +1 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -3
- package/dist/index.js.map +1 -1
- package/dist/layout/Sidebar.d.ts +3 -4
- package/dist/layout/Sidebar.d.ts.map +1 -1
- package/dist/layout/Sidebar.js +7 -38
- package/dist/layout/Sidebar.js.map +1 -1
- package/dist/lib/editor-preview.d.ts +4 -1
- package/dist/lib/editor-preview.d.ts.map +1 -1
- package/dist/lib/editor-preview.js +4 -1
- package/dist/lib/editor-preview.js.map +1 -1
- package/dist/lib/open-public-site-tab.d.ts +14 -0
- package/dist/lib/open-public-site-tab.d.ts.map +1 -0
- package/dist/lib/open-public-site-tab.js +46 -0
- package/dist/lib/open-public-site-tab.js.map +1 -0
- package/dist/lib/page-editor-service.d.ts +0 -7
- package/dist/lib/page-editor-service.d.ts.map +1 -1
- package/dist/lib/page-editor-service.js +9 -9
- package/dist/lib/page-editor-service.js.map +1 -1
- package/dist/lib/view-site-chrome.d.ts +16 -0
- package/dist/lib/view-site-chrome.d.ts.map +1 -0
- package/dist/lib/view-site-chrome.js +15 -0
- package/dist/lib/view-site-chrome.js.map +1 -0
- package/dist/prenta-admin.css +1 -1
- package/dist/router/admin-routes.d.ts.map +1 -1
- package/dist/router/admin-routes.js +0 -2
- package/dist/router/admin-routes.js.map +1 -1
- package/dist/views/PageEditor.d.ts +2 -2
- package/dist/views/PageEditor.js +2 -2
- package/dist/views/page-editor/EditorCanvas.d.ts +1 -2
- package/dist/views/page-editor/EditorCanvas.d.ts.map +1 -1
- package/dist/views/page-editor/EditorCanvas.js +2 -2
- package/dist/views/page-editor/EditorCanvas.js.map +1 -1
- package/dist/views/page-editor/EditorTopBar.d.ts +13 -17
- package/dist/views/page-editor/EditorTopBar.d.ts.map +1 -1
- package/dist/views/page-editor/EditorTopBar.js +19 -21
- package/dist/views/page-editor/EditorTopBar.js.map +1 -1
- package/dist/views/page-editor/PageSectionEditor.d.ts +1 -7
- package/dist/views/page-editor/PageSectionEditor.d.ts.map +1 -1
- package/dist/views/page-editor/PageSectionEditor.js +38 -110
- package/dist/views/page-editor/PageSectionEditor.js.map +1 -1
- package/dist/views/page-editor/StructureNotice.d.ts +2 -5
- package/dist/views/page-editor/StructureNotice.d.ts.map +1 -1
- package/dist/views/page-editor/StructureNotice.js +6 -10
- package/dist/views/page-editor/StructureNotice.js.map +1 -1
- package/dist/views/post-editor/PostEditorCanvas.d.ts +1 -3
- package/dist/views/post-editor/PostEditorCanvas.d.ts.map +1 -1
- package/dist/views/post-editor/PostEditorCanvas.js +3 -3
- package/dist/views/post-editor/PostEditorCanvas.js.map +1 -1
- package/dist/views/post-editor/PostSectionEditor.d.ts +1 -15
- package/dist/views/post-editor/PostSectionEditor.d.ts.map +1 -1
- package/dist/views/post-editor/PostSectionEditor.js +30 -88
- package/dist/views/post-editor/PostSectionEditor.js.map +1 -1
- package/package.json +3 -3
- package/src/AdminRoot.tsx +18 -138
- package/src/__tests__/components/breakpoint-controls.render.test.tsx +6 -4
- package/src/__tests__/components/seo-score-bands.test.ts +0 -3
- package/src/__tests__/layout/sidebar-posts.test.ts +6 -11
- package/src/__tests__/layout/sidebar-submenu.render.test.tsx +3 -2
- package/src/__tests__/lib/open-public-site-tab.test.ts +74 -0
- package/src/__tests__/lib/page-editor-service-api.test.ts +27 -25
- package/src/__tests__/lib/view-site-chrome.test.ts +65 -0
- package/src/__tests__/router/admin-routes.test.ts +5 -0
- package/src/__tests__/views/canvas-surface-shared.test.ts +0 -19
- package/src/__tests__/views/editor-top-bar.render.test.tsx +85 -22
- package/src/__tests__/views/page-section-editor.test.tsx +42 -10
- package/src/__tests__/views/page-tab.render.test.tsx +0 -1
- package/src/__tests__/views/post-section-editor.test.tsx +35 -0
- package/src/components/BreakpointPicker.tsx +6 -3
- package/src/components/CanvasEditTip.tsx +2 -2
- package/src/index.ts +1 -11
- package/src/layout/Sidebar.tsx +6 -41
- package/src/lib/editor-preview.ts +4 -1
- package/src/lib/open-public-site-tab.ts +57 -0
- package/src/lib/page-editor-service.ts +9 -16
- package/src/lib/view-site-chrome.ts +34 -0
- package/src/router/admin-routes.ts +0 -2
- package/src/styles/theme.css +4 -4
- package/src/views/PageEditor.tsx +2 -2
- package/src/views/page-editor/EditorCanvas.tsx +1 -6
- package/src/views/page-editor/EditorTopBar.tsx +81 -82
- package/src/views/page-editor/PageSectionEditor.tsx +85 -194
- package/src/views/page-editor/StructureNotice.tsx +7 -42
- package/src/views/post-editor/PostEditorCanvas.tsx +2 -8
- package/src/views/post-editor/PostSectionEditor.tsx +66 -138
- package/dist/__tests__/views/page-builder-block-renderer.render.test.d.ts +0 -2
- package/dist/__tests__/views/page-builder-block-renderer.render.test.d.ts.map +0 -1
- package/dist/__tests__/views/page-builder-block-renderer.render.test.js +0 -48
- package/dist/__tests__/views/page-builder-block-renderer.render.test.js.map +0 -1
- package/dist/__tests__/views/page-builder-form-picker.render.test.d.ts +0 -2
- package/dist/__tests__/views/page-builder-form-picker.render.test.d.ts.map +0 -1
- package/dist/__tests__/views/page-builder-form-picker.render.test.js +0 -44
- package/dist/__tests__/views/page-builder-form-picker.render.test.js.map +0 -1
- package/dist/__tests__/views/page-builder-sections-panel.render.test.d.ts +0 -2
- package/dist/__tests__/views/page-builder-sections-panel.render.test.d.ts.map +0 -1
- package/dist/__tests__/views/page-builder-sections-panel.render.test.js +0 -121
- package/dist/__tests__/views/page-builder-sections-panel.render.test.js.map +0 -1
- package/dist/__tests__/views/page-builder-seo-panel.render.test.d.ts +0 -2
- package/dist/__tests__/views/page-builder-seo-panel.render.test.d.ts.map +0 -1
- package/dist/__tests__/views/page-builder-seo-panel.render.test.js +0 -65
- package/dist/__tests__/views/page-builder-seo-panel.render.test.js.map +0 -1
- package/dist/__tests__/views/page-builder-template-seed.render.test.d.ts +0 -2
- package/dist/__tests__/views/page-builder-template-seed.render.test.d.ts.map +0 -1
- package/dist/__tests__/views/page-builder-template-seed.render.test.js +0 -48
- package/dist/__tests__/views/page-builder-template-seed.render.test.js.map +0 -1
- package/dist/__tests__/views/page-templates.render.test.d.ts +0 -2
- package/dist/__tests__/views/page-templates.render.test.d.ts.map +0 -1
- package/dist/__tests__/views/page-templates.render.test.js +0 -126
- package/dist/__tests__/views/page-templates.render.test.js.map +0 -1
- package/dist/__tests__/views/use-site-preview.render.test.d.ts +0 -2
- package/dist/__tests__/views/use-site-preview.render.test.d.ts.map +0 -1
- package/dist/__tests__/views/use-site-preview.render.test.js +0 -120
- package/dist/__tests__/views/use-site-preview.render.test.js.map +0 -1
- package/dist/hooks/useBuilderState.d.ts +0 -49
- package/dist/hooks/useBuilderState.d.ts.map +0 -1
- package/dist/hooks/useBuilderState.js +0 -238
- package/dist/hooks/useBuilderState.js.map +0 -1
- package/dist/views/page-builder/AIBlockAssist.d.ts +0 -9
- package/dist/views/page-builder/AIBlockAssist.d.ts.map +0 -1
- package/dist/views/page-builder/AIBlockAssist.js +0 -40
- package/dist/views/page-builder/AIBlockAssist.js.map +0 -1
- package/dist/views/page-builder/AIGenerateDialog.d.ts +0 -8
- package/dist/views/page-builder/AIGenerateDialog.d.ts.map +0 -1
- package/dist/views/page-builder/AIGenerateDialog.js +0 -173
- package/dist/views/page-builder/AIGenerateDialog.js.map +0 -1
- package/dist/views/page-builder/BlockEditor.d.ts +0 -11
- package/dist/views/page-builder/BlockEditor.d.ts.map +0 -1
- package/dist/views/page-builder/BlockEditor.js +0 -159
- package/dist/views/page-builder/BlockEditor.js.map +0 -1
- package/dist/views/page-builder/BlockPicker.d.ts +0 -7
- package/dist/views/page-builder/BlockPicker.d.ts.map +0 -1
- package/dist/views/page-builder/BlockPicker.js +0 -103
- package/dist/views/page-builder/BlockPicker.js.map +0 -1
- package/dist/views/page-builder/BottomBar.d.ts +0 -9
- package/dist/views/page-builder/BottomBar.d.ts.map +0 -1
- package/dist/views/page-builder/BottomBar.js +0 -13
- package/dist/views/page-builder/BottomBar.js.map +0 -1
- package/dist/views/page-builder/BuilderSectionsPanel.d.ts +0 -20
- package/dist/views/page-builder/BuilderSectionsPanel.d.ts.map +0 -1
- package/dist/views/page-builder/BuilderSectionsPanel.js +0 -105
- package/dist/views/page-builder/BuilderSectionsPanel.js.map +0 -1
- package/dist/views/page-builder/BuilderToolbar.d.ts +0 -21
- package/dist/views/page-builder/BuilderToolbar.d.ts.map +0 -1
- package/dist/views/page-builder/BuilderToolbar.js +0 -18
- package/dist/views/page-builder/BuilderToolbar.js.map +0 -1
- package/dist/views/page-builder/ContextPanel.d.ts +0 -20
- package/dist/views/page-builder/ContextPanel.d.ts.map +0 -1
- package/dist/views/page-builder/ContextPanel.js +0 -43
- package/dist/views/page-builder/ContextPanel.js.map +0 -1
- package/dist/views/page-builder/DesignScore.d.ts +0 -6
- package/dist/views/page-builder/DesignScore.d.ts.map +0 -1
- package/dist/views/page-builder/DesignScore.js +0 -93
- package/dist/views/page-builder/DesignScore.js.map +0 -1
- package/dist/views/page-builder/NodeSettings.d.ts +0 -12
- package/dist/views/page-builder/NodeSettings.d.ts.map +0 -1
- package/dist/views/page-builder/NodeSettings.js +0 -80
- package/dist/views/page-builder/NodeSettings.js.map +0 -1
- package/dist/views/page-builder/PageBuilder.d.ts +0 -10
- package/dist/views/page-builder/PageBuilder.d.ts.map +0 -1
- package/dist/views/page-builder/PageBuilder.js +0 -222
- package/dist/views/page-builder/PageBuilder.js.map +0 -1
- package/dist/views/page-builder/PageSettings.d.ts +0 -7
- package/dist/views/page-builder/PageSettings.d.ts.map +0 -1
- package/dist/views/page-builder/PageSettings.js +0 -27
- package/dist/views/page-builder/PageSettings.js.map +0 -1
- package/dist/views/page-builder/PageTemplates.d.ts +0 -5
- package/dist/views/page-builder/PageTemplates.d.ts.map +0 -1
- package/dist/views/page-builder/PageTemplates.js +0 -146
- package/dist/views/page-builder/PageTemplates.js.map +0 -1
- package/dist/views/page-builder/RelationshipField.d.ts +0 -15
- package/dist/views/page-builder/RelationshipField.d.ts.map +0 -1
- package/dist/views/page-builder/RelationshipField.js +0 -65
- package/dist/views/page-builder/RelationshipField.js.map +0 -1
- package/dist/views/page-builder/SEOPanel.d.ts +0 -9
- package/dist/views/page-builder/SEOPanel.d.ts.map +0 -1
- package/dist/views/page-builder/SEOPanel.js +0 -38
- package/dist/views/page-builder/SEOPanel.js.map +0 -1
- package/dist/views/page-builder/SavedSections.d.ts +0 -6
- package/dist/views/page-builder/SavedSections.d.ts.map +0 -1
- package/dist/views/page-builder/SavedSections.js +0 -141
- package/dist/views/page-builder/SavedSections.js.map +0 -1
- package/dist/views/page-builder/TemplatePicker.d.ts +0 -7
- package/dist/views/page-builder/TemplatePicker.d.ts.map +0 -1
- package/dist/views/page-builder/TemplatePicker.js +0 -68
- package/dist/views/page-builder/TemplatePicker.js.map +0 -1
- package/dist/views/page-builder/Widgets.d.ts +0 -13
- package/dist/views/page-builder/Widgets.d.ts.map +0 -1
- package/dist/views/page-builder/Widgets.js +0 -15
- package/dist/views/page-builder/Widgets.js.map +0 -1
- package/dist/views/page-builder/block-renderers/CTAPreview.d.ts +0 -3
- package/dist/views/page-builder/block-renderers/CTAPreview.d.ts.map +0 -1
- package/dist/views/page-builder/block-renderers/CTAPreview.js +0 -19
- package/dist/views/page-builder/block-renderers/CTAPreview.js.map +0 -1
- package/dist/views/page-builder/block-renderers/CardsPreview.d.ts +0 -3
- package/dist/views/page-builder/block-renderers/CardsPreview.d.ts.map +0 -1
- package/dist/views/page-builder/block-renderers/CardsPreview.js +0 -22
- package/dist/views/page-builder/block-renderers/CardsPreview.js.map +0 -1
- package/dist/views/page-builder/block-renderers/CodePreview.d.ts +0 -3
- package/dist/views/page-builder/block-renderers/CodePreview.d.ts.map +0 -1
- package/dist/views/page-builder/block-renderers/CodePreview.js +0 -12
- package/dist/views/page-builder/block-renderers/CodePreview.js.map +0 -1
- package/dist/views/page-builder/block-renderers/FAQPreview.d.ts +0 -3
- package/dist/views/page-builder/block-renderers/FAQPreview.d.ts.map +0 -1
- package/dist/views/page-builder/block-renderers/FAQPreview.js +0 -27
- package/dist/views/page-builder/block-renderers/FAQPreview.js.map +0 -1
- package/dist/views/page-builder/block-renderers/FallbackPreview.d.ts +0 -6
- package/dist/views/page-builder/block-renderers/FallbackPreview.d.ts.map +0 -1
- package/dist/views/page-builder/block-renderers/FallbackPreview.js +0 -7
- package/dist/views/page-builder/block-renderers/FallbackPreview.js.map +0 -1
- package/dist/views/page-builder/block-renderers/FormPreview.d.ts +0 -9
- package/dist/views/page-builder/block-renderers/FormPreview.d.ts.map +0 -1
- package/dist/views/page-builder/block-renderers/FormPreview.js +0 -52
- package/dist/views/page-builder/block-renderers/FormPreview.js.map +0 -1
- package/dist/views/page-builder/block-renderers/GalleryPreview.d.ts +0 -3
- package/dist/views/page-builder/block-renderers/GalleryPreview.d.ts.map +0 -1
- package/dist/views/page-builder/block-renderers/GalleryPreview.js +0 -19
- package/dist/views/page-builder/block-renderers/GalleryPreview.js.map +0 -1
- package/dist/views/page-builder/block-renderers/HeroPreview.d.ts +0 -3
- package/dist/views/page-builder/block-renderers/HeroPreview.d.ts.map +0 -1
- package/dist/views/page-builder/block-renderers/HeroPreview.js +0 -19
- package/dist/views/page-builder/block-renderers/HeroPreview.js.map +0 -1
- package/dist/views/page-builder/block-renderers/ImagePreview.d.ts +0 -3
- package/dist/views/page-builder/block-renderers/ImagePreview.d.ts.map +0 -1
- package/dist/views/page-builder/block-renderers/ImagePreview.js +0 -17
- package/dist/views/page-builder/block-renderers/ImagePreview.js.map +0 -1
- package/dist/views/page-builder/block-renderers/TextPreview.d.ts +0 -3
- package/dist/views/page-builder/block-renderers/TextPreview.d.ts.map +0 -1
- package/dist/views/page-builder/block-renderers/TextPreview.js +0 -22
- package/dist/views/page-builder/block-renderers/TextPreview.js.map +0 -1
- package/dist/views/page-builder/block-renderers/VideoPreview.d.ts +0 -3
- package/dist/views/page-builder/block-renderers/VideoPreview.d.ts.map +0 -1
- package/dist/views/page-builder/block-renderers/VideoPreview.js +0 -18
- package/dist/views/page-builder/block-renderers/VideoPreview.js.map +0 -1
- package/dist/views/page-builder/block-renderers/index.d.ts +0 -9
- package/dist/views/page-builder/block-renderers/index.d.ts.map +0 -1
- package/dist/views/page-builder/block-renderers/index.js +0 -25
- package/dist/views/page-builder/block-renderers/index.js.map +0 -1
- package/dist/views/page-builder/canvas/BlockRenderer.d.ts +0 -8
- package/dist/views/page-builder/canvas/BlockRenderer.d.ts.map +0 -1
- package/dist/views/page-builder/canvas/BlockRenderer.js +0 -20
- package/dist/views/page-builder/canvas/BlockRenderer.js.map +0 -1
- package/dist/views/page-builder/canvas/BuilderCanvas.d.ts +0 -10
- package/dist/views/page-builder/canvas/BuilderCanvas.d.ts.map +0 -1
- package/dist/views/page-builder/canvas/BuilderCanvas.js +0 -26
- package/dist/views/page-builder/canvas/BuilderCanvas.js.map +0 -1
- package/dist/views/page-builder/canvas/ColumnRenderer.d.ts +0 -8
- package/dist/views/page-builder/canvas/ColumnRenderer.d.ts.map +0 -1
- package/dist/views/page-builder/canvas/ColumnRenderer.js +0 -32
- package/dist/views/page-builder/canvas/ColumnRenderer.js.map +0 -1
- package/dist/views/page-builder/canvas/ContainerRenderer.d.ts +0 -8
- package/dist/views/page-builder/canvas/ContainerRenderer.d.ts.map +0 -1
- package/dist/views/page-builder/canvas/ContainerRenderer.js +0 -29
- package/dist/views/page-builder/canvas/ContainerRenderer.js.map +0 -1
- package/dist/views/page-builder/canvas/RowRenderer.d.ts +0 -8
- package/dist/views/page-builder/canvas/RowRenderer.d.ts.map +0 -1
- package/dist/views/page-builder/canvas/RowRenderer.js +0 -28
- package/dist/views/page-builder/canvas/RowRenderer.js.map +0 -1
- package/dist/views/page-builder/canvas/SectionRenderer.d.ts +0 -8
- package/dist/views/page-builder/canvas/SectionRenderer.d.ts.map +0 -1
- package/dist/views/page-builder/canvas/SectionRenderer.js +0 -50
- package/dist/views/page-builder/canvas/SectionRenderer.js.map +0 -1
- package/dist/views/page-builder/canvas/index.d.ts +0 -3
- package/dist/views/page-builder/canvas/index.d.ts.map +0 -1
- package/dist/views/page-builder/canvas/index.js +0 -2
- package/dist/views/page-builder/canvas/index.js.map +0 -1
- package/dist/views/page-editor/PagePreview.d.ts +0 -13
- package/dist/views/page-editor/PagePreview.d.ts.map +0 -1
- package/dist/views/page-editor/PagePreview.js +0 -46
- package/dist/views/page-editor/PagePreview.js.map +0 -1
- package/dist/views/page-editor/SitePreviewFrame.d.ts +0 -43
- package/dist/views/page-editor/SitePreviewFrame.d.ts.map +0 -1
- package/dist/views/page-editor/SitePreviewFrame.js +0 -165
- package/dist/views/page-editor/SitePreviewFrame.js.map +0 -1
- package/dist/views/page-editor/useSitePreview.d.ts +0 -47
- package/dist/views/page-editor/useSitePreview.d.ts.map +0 -1
- package/dist/views/page-editor/useSitePreview.js +0 -96
- package/dist/views/page-editor/useSitePreview.js.map +0 -1
- package/dist/views/post-editor/PostPreview.d.ts +0 -14
- package/dist/views/post-editor/PostPreview.d.ts.map +0 -1
- package/dist/views/post-editor/PostPreview.js +0 -63
- package/dist/views/post-editor/PostPreview.js.map +0 -1
- package/src/__tests__/views/page-builder-block-renderer.render.test.tsx +0 -66
- package/src/__tests__/views/page-builder-form-picker.render.test.tsx +0 -54
- package/src/__tests__/views/page-builder-sections-panel.render.test.tsx +0 -138
- package/src/__tests__/views/page-builder-seo-panel.render.test.tsx +0 -77
- package/src/__tests__/views/page-builder-template-seed.render.test.tsx +0 -59
- package/src/__tests__/views/page-templates.render.test.tsx +0 -182
- package/src/__tests__/views/use-site-preview.render.test.tsx +0 -164
- package/src/hooks/useBuilderState.ts +0 -361
- package/src/views/page-builder/AIBlockAssist.tsx +0 -64
- package/src/views/page-builder/AIGenerateDialog.tsx +0 -593
- package/src/views/page-builder/BlockEditor.tsx +0 -523
- package/src/views/page-builder/BlockPicker.tsx +0 -324
- package/src/views/page-builder/BottomBar.tsx +0 -65
- package/src/views/page-builder/BuilderSectionsPanel.tsx +0 -304
- package/src/views/page-builder/BuilderToolbar.tsx +0 -221
- package/src/views/page-builder/ContextPanel.tsx +0 -144
- package/src/views/page-builder/DesignScore.tsx +0 -251
- package/src/views/page-builder/NodeSettings.tsx +0 -500
- package/src/views/page-builder/PageBuilder.tsx +0 -405
- package/src/views/page-builder/PageSettings.tsx +0 -162
- package/src/views/page-builder/PageTemplates.tsx +0 -435
- package/src/views/page-builder/RelationshipField.tsx +0 -113
- package/src/views/page-builder/SEOPanel.tsx +0 -222
- package/src/views/page-builder/SavedSections.tsx +0 -480
- package/src/views/page-builder/TemplatePicker.tsx +0 -197
- package/src/views/page-builder/Widgets.tsx +0 -44
- package/src/views/page-builder/block-renderers/CTAPreview.tsx +0 -79
- package/src/views/page-builder/block-renderers/CardsPreview.tsx +0 -69
- package/src/views/page-builder/block-renderers/CodePreview.tsx +0 -46
- package/src/views/page-builder/block-renderers/FAQPreview.tsx +0 -87
- package/src/views/page-builder/block-renderers/FallbackPreview.tsx +0 -18
- package/src/views/page-builder/block-renderers/FormPreview.tsx +0 -117
- package/src/views/page-builder/block-renderers/GalleryPreview.tsx +0 -87
- package/src/views/page-builder/block-renderers/HeroPreview.tsx +0 -90
- package/src/views/page-builder/block-renderers/ImagePreview.tsx +0 -54
- package/src/views/page-builder/block-renderers/TextPreview.tsx +0 -81
- package/src/views/page-builder/block-renderers/VideoPreview.tsx +0 -73
- package/src/views/page-builder/block-renderers/index.ts +0 -34
- package/src/views/page-builder/canvas/BlockRenderer.tsx +0 -56
- package/src/views/page-builder/canvas/BuilderCanvas.tsx +0 -87
- package/src/views/page-builder/canvas/ColumnRenderer.tsx +0 -82
- package/src/views/page-builder/canvas/ContainerRenderer.tsx +0 -67
- package/src/views/page-builder/canvas/RowRenderer.tsx +0 -68
- package/src/views/page-builder/canvas/SectionRenderer.tsx +0 -93
- package/src/views/page-builder/canvas/index.ts +0 -2
- package/src/views/page-editor/PagePreview.tsx +0 -105
- package/src/views/page-editor/SitePreviewFrame.tsx +0 -250
- package/src/views/page-editor/useSitePreview.ts +0 -158
- package/src/views/post-editor/PostPreview.tsx +0 -125
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use client'
|
|
2
2
|
|
|
3
3
|
import { useCallback, useEffect, useMemo, useState } from 'react'
|
|
4
|
-
import { AlertTriangle,
|
|
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'
|
|
@@ -34,11 +34,9 @@ import {
|
|
|
34
34
|
type ValidationResult,
|
|
35
35
|
} from '../../lib/page-editor-service.js'
|
|
36
36
|
import { MediaPickerModal } from '../../components/MediaPickerModal.js'
|
|
37
|
-
import {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
createPreviewToken,
|
|
41
|
-
} from '../../lib/preview-link.js'
|
|
37
|
+
import { SharePreviewLinkDialog } from '../../components/SharePreviewLinkDialog.js'
|
|
38
|
+
import { openPublicSiteTab } from '../../lib/open-public-site-tab.js'
|
|
39
|
+
import type { ViewSiteIntent } from '../../lib/view-site-chrome.js'
|
|
42
40
|
import { usePublicSiteUrl } from '../../hooks/usePublicSiteUrl.js'
|
|
43
41
|
import { DEFAULT_VIEWPORT, type ViewportId } from './viewports.js'
|
|
44
42
|
import type { Zoom } from '../../lib/breakpoints.js'
|
|
@@ -59,12 +57,9 @@ import { EditorTopBar, type SaveState } from './EditorTopBar.js'
|
|
|
59
57
|
import { SectionsList } from './SectionsPanel.js'
|
|
60
58
|
import { EditorCanvas } from './EditorCanvas.js'
|
|
61
59
|
import { ReflowContext } from './reflow-context.js'
|
|
62
|
-
import { SitePreviewFrame } from './SitePreviewFrame.js'
|
|
63
|
-
import { useSitePreview } from './useSitePreview.js'
|
|
64
60
|
import { SectionEditForm } from './SectionEditForm.js'
|
|
65
61
|
import { PageSettingsModal } from './PageSettingsModal.js'
|
|
66
62
|
import { ValidationSummary } from './ValidationSummary.js'
|
|
67
|
-
import { resolveDefaultSitePreview } from '../../lib/editor-preview.js'
|
|
68
63
|
import { buildEditorContentHtml } from '../../lib/editor-seo-content.js'
|
|
69
64
|
import { companionDimensionPaths, inspectorIdFromFieldPath } from '../../lib/preview-bridge.js'
|
|
70
65
|
|
|
@@ -80,12 +75,6 @@ interface PageSectionEditorProps {
|
|
|
80
75
|
config?: any
|
|
81
76
|
session?: any
|
|
82
77
|
onNavigate: (path: string) => void
|
|
83
|
-
/**
|
|
84
|
-
* Open a preview route in a new browser tab. `prepare` runs before the tab
|
|
85
|
-
* navigates (used to save an unsaved draft first); returning `false` cancels
|
|
86
|
-
* the open. Falls back to in-tab navigation when not provided.
|
|
87
|
-
*/
|
|
88
|
-
onOpenPreview?: (path: string, prepare?: () => Promise<boolean | void> | boolean | void) => void
|
|
89
78
|
}
|
|
90
79
|
|
|
91
80
|
/**
|
|
@@ -137,7 +126,6 @@ export function PageSectionEditor({
|
|
|
137
126
|
config,
|
|
138
127
|
session,
|
|
139
128
|
onNavigate,
|
|
140
|
-
onOpenPreview,
|
|
141
129
|
}: PageSectionEditorProps) {
|
|
142
130
|
const [page, setPage] = useState<EditorPage | null>(null)
|
|
143
131
|
const [loading, setLoading] = useState(true)
|
|
@@ -165,8 +153,7 @@ export function PageSectionEditor({
|
|
|
165
153
|
const [canvasScale, setCanvasScale] = useState(1)
|
|
166
154
|
/**
|
|
167
155
|
* The live canvas surface, for the reflow guard to clone. State rather than a
|
|
168
|
-
* ref because the context value has to update when it mounts
|
|
169
|
-
* unmounts whenever the site-preview frame takes over.
|
|
156
|
+
* ref because the context value has to update when it mounts.
|
|
170
157
|
*/
|
|
171
158
|
const [canvasEl, setCanvasEl] = useState<HTMLElement | null>(null)
|
|
172
159
|
/**
|
|
@@ -234,6 +221,7 @@ export function PageSectionEditor({
|
|
|
234
221
|
const [restoring, setRestoring] = useState(false)
|
|
235
222
|
const [confirmPublish, setConfirmPublish] = useState(false)
|
|
236
223
|
const [scheduleOpen, setScheduleOpen] = useState(false)
|
|
224
|
+
const [shareOpen, setShareOpen] = useState(false)
|
|
237
225
|
const [leaveTarget, setLeaveTarget] = useState<string | null>(null)
|
|
238
226
|
const [validation, setValidation] = useState<ValidationResult | null>(null)
|
|
239
227
|
|
|
@@ -415,25 +403,19 @@ export function PageSectionEditor({
|
|
|
415
403
|
)
|
|
416
404
|
|
|
417
405
|
// ─── Edit permission ─────────────────────────────────────────────────
|
|
418
|
-
/**
|
|
419
|
-
* ADR 0002: a Page-Builder-owned page (it has a `_layout`) compiles its
|
|
420
|
-
* sections from the builder layout on every save, so editing them here would
|
|
421
|
-
* be overwritten. The server independently refuses such edits with 409.
|
|
422
|
-
*/
|
|
423
|
-
const readOnly = page?.builderOwned ?? false
|
|
424
406
|
/**
|
|
425
407
|
* The single gate every writing surface reads.
|
|
426
408
|
*
|
|
427
409
|
* Hoisted above the callbacks rather than derived at render time, because
|
|
428
410
|
* the two that were left behind were the ones that mattered: the site
|
|
429
411
|
* preview's in-place edit handlers close over `canEdit` (the raw role) and
|
|
430
|
-
* so kept accepting edits while a past version was under review
|
|
431
|
-
* a
|
|
432
|
-
*
|
|
412
|
+
* so kept accepting edits while a past version was under review. The iframe
|
|
413
|
+
* is a second editing surface, and a lock that only covers the rail is not
|
|
414
|
+
* a lock.
|
|
433
415
|
*/
|
|
434
|
-
const effectiveCanEdit = canEdit && !
|
|
416
|
+
const effectiveCanEdit = canEdit && !reviewing
|
|
435
417
|
/** Restoring is not editing: it is allowed precisely while reviewing. */
|
|
436
|
-
const canRestoreVersion = canEdit
|
|
418
|
+
const canRestoreVersion = canEdit
|
|
437
419
|
|
|
438
420
|
// ─── Load ──────────────────────────────────────────────────────────
|
|
439
421
|
useEffect(() => {
|
|
@@ -585,22 +567,6 @@ export function PageSectionEditor({
|
|
|
585
567
|
}
|
|
586
568
|
}, [page, documentId, onNavigate, saveDirectives, acceptPage])
|
|
587
569
|
|
|
588
|
-
// Inline branded preview — Next builder canvas (same origin as admin), not
|
|
589
|
-
// the Astro public apex. "View on site" still uses publicSiteUrl below.
|
|
590
|
-
const sitePreview = useSitePreview({
|
|
591
|
-
collection: 'pages',
|
|
592
|
-
documentId: page?.id,
|
|
593
|
-
slug: page?.slug,
|
|
594
|
-
path: page?.path,
|
|
595
|
-
urlPrefix: '',
|
|
596
|
-
dirty,
|
|
597
|
-
saveState,
|
|
598
|
-
saveDraft: handleSaveDraft,
|
|
599
|
-
defaultActive: resolveDefaultSitePreview(config?.admin?.editor, 'pages'),
|
|
600
|
-
})
|
|
601
|
-
|
|
602
|
-
const sitePreviewAvailable = Boolean(page?.id && page?.slug)
|
|
603
|
-
|
|
604
570
|
const requestPublish = useCallback(() => {
|
|
605
571
|
if (!page) return
|
|
606
572
|
const result = validatePage(page, true)
|
|
@@ -803,82 +769,36 @@ export function PageSectionEditor({
|
|
|
803
769
|
[dirty, onNavigate],
|
|
804
770
|
)
|
|
805
771
|
|
|
806
|
-
const
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
const path = `/pages/${page.id}/preview`
|
|
812
|
-
// New-tab preview: save first when there are unsaved edits so the preview
|
|
813
|
-
// (which reads the persisted document) reflects what's on screen.
|
|
814
|
-
if (onOpenPreview) {
|
|
815
|
-
onOpenPreview(path, dirty ? handleSaveDraft : undefined)
|
|
816
|
-
} else {
|
|
817
|
-
guardedNavigate(path)
|
|
818
|
-
}
|
|
819
|
-
}, [page, dirty, onOpenPreview, handleSaveDraft, guardedNavigate])
|
|
820
|
-
|
|
821
|
-
// "View on site": render the draft through the consumer's real public route
|
|
822
|
-
// via a signed preview token. The blank tab is opened synchronously inside
|
|
823
|
-
// the click (popup-safe), then pointed at the public URL once any unsaved
|
|
824
|
-
// draft is persisted and the token is minted.
|
|
825
|
-
const handleViewOnSite = useCallback(() => {
|
|
826
|
-
if (!page?.id || !page.slug) {
|
|
827
|
-
toast.error('Save the page before viewing it on the site')
|
|
828
|
-
return
|
|
829
|
-
}
|
|
830
|
-
// Published → jump straight to the LIVE page: no preview token, no forced
|
|
831
|
-
// save. This is the fast "see it live" path. Pending edits stay previewable
|
|
832
|
-
// via the eye (canvas) and globe (inline site preview).
|
|
833
|
-
if (page.status === 'PUBLISHED') {
|
|
834
|
-
window.open(
|
|
835
|
-
buildPublicUrl({
|
|
836
|
-
siteUrl: publicSiteUrl,
|
|
837
|
-
urlPrefix: '',
|
|
838
|
-
slug: page.slug,
|
|
839
|
-
path: page.path,
|
|
840
|
-
}),
|
|
841
|
-
'_blank',
|
|
842
|
-
'noopener',
|
|
843
|
-
)
|
|
844
|
-
return
|
|
845
|
-
}
|
|
846
|
-
// Not yet public (draft / scheduled / archived) → token-gated preview of
|
|
847
|
-
// the current draft through the real front-end.
|
|
848
|
-
const tab = window.open('about:blank', '_blank')
|
|
849
|
-
if (!tab) {
|
|
850
|
-
toast.error('Enable pop-ups for this site to open the preview in a new tab.')
|
|
851
|
-
return
|
|
852
|
-
}
|
|
853
|
-
void (async () => {
|
|
854
|
-
try {
|
|
855
|
-
if (dirty) {
|
|
856
|
-
const ok = await handleSaveDraft()
|
|
857
|
-
if (!ok) {
|
|
858
|
-
tab.close()
|
|
859
|
-
return
|
|
860
|
-
}
|
|
861
|
-
}
|
|
862
|
-
const { token } = await createPreviewToken('pages', page.id!)
|
|
863
|
-
const target = buildPublicPreviewUrl({
|
|
864
|
-
siteUrl: publicSiteUrl,
|
|
865
|
-
urlPrefix: '',
|
|
866
|
-
slug: page.slug,
|
|
867
|
-
path: page.path,
|
|
868
|
-
token,
|
|
869
|
-
})
|
|
870
|
-
try {
|
|
871
|
-
tab.opener = null
|
|
872
|
-
} catch {
|
|
873
|
-
/* same-origin guard */
|
|
874
|
-
}
|
|
875
|
-
tab.location.replace(target)
|
|
876
|
-
} catch (err) {
|
|
877
|
-
tab.close()
|
|
878
|
-
toast.error(err instanceof Error ? err.message : 'Failed to open site preview')
|
|
772
|
+
const handleViewOnSite = useCallback(
|
|
773
|
+
(intent: ViewSiteIntent) => {
|
|
774
|
+
if (!page?.id || !page.slug) {
|
|
775
|
+
toast.error('Save the page before viewing it on the site')
|
|
776
|
+
return
|
|
879
777
|
}
|
|
880
|
-
|
|
881
|
-
|
|
778
|
+
void openPublicSiteTab({
|
|
779
|
+
intent,
|
|
780
|
+
siteUrl: publicSiteUrl,
|
|
781
|
+
collection: 'pages',
|
|
782
|
+
documentId: page.id,
|
|
783
|
+
slug: page.slug,
|
|
784
|
+
path: page.path,
|
|
785
|
+
dirty,
|
|
786
|
+
saveDraft: handleSaveDraft,
|
|
787
|
+
}).catch((err) => {
|
|
788
|
+
toast.error(err instanceof Error ? err.message : 'Failed to open the site')
|
|
789
|
+
})
|
|
790
|
+
},
|
|
791
|
+
[page, dirty, handleSaveDraft, publicSiteUrl],
|
|
792
|
+
)
|
|
793
|
+
|
|
794
|
+
const handleShare = useCallback(async () => {
|
|
795
|
+
if (!page?.id) return
|
|
796
|
+
if (dirty) {
|
|
797
|
+
const ok = await handleSaveDraft()
|
|
798
|
+
if (!ok) return
|
|
799
|
+
}
|
|
800
|
+
setShareOpen(true)
|
|
801
|
+
}, [page, dirty, handleSaveDraft])
|
|
882
802
|
|
|
883
803
|
// ─── Render states ───────────────────────────────────────────────────
|
|
884
804
|
if (loading) {
|
|
@@ -911,8 +831,8 @@ export function PageSectionEditor({
|
|
|
911
831
|
)
|
|
912
832
|
}
|
|
913
833
|
|
|
914
|
-
// `
|
|
915
|
-
//
|
|
834
|
+
// `effectiveCanEdit` / `canRestoreVersion` are computed above, with the
|
|
835
|
+
// hooks, so the callbacks defined there share this one gate.
|
|
916
836
|
|
|
917
837
|
// The canvas shows the reviewed snapshot, but `page.sections` stays the
|
|
918
838
|
// editor's own content throughout — nothing about review mode writes to it.
|
|
@@ -951,16 +871,13 @@ export function PageSectionEditor({
|
|
|
951
871
|
publishDisabledReason={publishDisabledReason}
|
|
952
872
|
viewport={viewport}
|
|
953
873
|
onViewport={setViewport}
|
|
954
|
-
{
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
{}
|
|
958
|
-
: { zoom, canvasScale, onZoom: setZoom })}
|
|
874
|
+
zoom={zoom}
|
|
875
|
+
canvasScale={canvasScale}
|
|
876
|
+
onZoom={setZoom}
|
|
959
877
|
onBack={() => guardedNavigate('/pages')}
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
onToggleSitePreview={page.id && page.slug ? sitePreview.toggle : undefined}
|
|
878
|
+
onViewOnSite={page.id && page.slug ? handleViewOnSite : undefined}
|
|
879
|
+
onShare={page.id ? handleShare : undefined}
|
|
880
|
+
hasPublicSiteUrl={Boolean(publicSiteUrl)}
|
|
964
881
|
historyOpen={historyOpen}
|
|
965
882
|
onHistory={page.id ? () => (historyOpen ? closeHistory() : openHistory()) : undefined}
|
|
966
883
|
onOpenSettings={() => setSettingsOpen(true)}
|
|
@@ -982,29 +899,6 @@ export function PageSectionEditor({
|
|
|
982
899
|
structuralTypes={structuralTypes}
|
|
983
900
|
/>
|
|
984
901
|
|
|
985
|
-
{readOnly && (
|
|
986
|
-
<div
|
|
987
|
-
role="status"
|
|
988
|
-
className="border-border bg-accent/40 flex items-center gap-3 border-b px-4 py-2.5"
|
|
989
|
-
>
|
|
990
|
-
<Blocks className="text-muted-foreground shrink-0" size={16} aria-hidden />
|
|
991
|
-
<p className="text-muted-foreground flex-1 text-sm">
|
|
992
|
-
This page is built in the{' '}
|
|
993
|
-
<span className="text-foreground font-medium">Page Builder</span>. Its sections are
|
|
994
|
-
generated from the builder layout and are read-only here.
|
|
995
|
-
</p>
|
|
996
|
-
{page.id && (
|
|
997
|
-
<button
|
|
998
|
-
type="button"
|
|
999
|
-
onClick={() => guardedNavigate(`/page-builder/${page.id}`)}
|
|
1000
|
-
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"
|
|
1001
|
-
>
|
|
1002
|
-
Open in Page Builder
|
|
1003
|
-
</button>
|
|
1004
|
-
)}
|
|
1005
|
-
</div>
|
|
1006
|
-
)}
|
|
1007
|
-
|
|
1008
902
|
{unmanagedTypes.length > 0 && (
|
|
1009
903
|
<div
|
|
1010
904
|
role="status"
|
|
@@ -1134,46 +1028,30 @@ export function PageSectionEditor({
|
|
|
1134
1028
|
</EditorRail>
|
|
1135
1029
|
|
|
1136
1030
|
<div className="flex-1 overflow-hidden">
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
-
|
|
1150
|
-
|
|
1151
|
-
|
|
1152
|
-
|
|
1153
|
-
|
|
1154
|
-
|
|
1155
|
-
|
|
1156
|
-
|
|
1157
|
-
|
|
1158
|
-
|
|
1159
|
-
|
|
1160
|
-
|
|
1161
|
-
reviewing={reviewing}
|
|
1162
|
-
changedSectionIds={reviewChangedIds}
|
|
1163
|
-
reviewBar={
|
|
1164
|
-
reviewVersion ? (
|
|
1165
|
-
<ReviewBar
|
|
1166
|
-
version={reviewVersion}
|
|
1167
|
-
changedCount={reviewChangedIds.size}
|
|
1168
|
-
onRestore={() => void handleRestoreVersion(reviewVersion)}
|
|
1169
|
-
onBackToCurrent={() => setVersionIndex(0)}
|
|
1170
|
-
restoring={restoring}
|
|
1171
|
-
canRestore={canRestoreVersion}
|
|
1172
|
-
/>
|
|
1173
|
-
) : null
|
|
1174
|
-
}
|
|
1175
|
-
/>
|
|
1176
|
-
)}
|
|
1031
|
+
<EditorCanvas
|
|
1032
|
+
sections={canvasSections}
|
|
1033
|
+
selectedId={selectedId}
|
|
1034
|
+
breakpoint={viewport}
|
|
1035
|
+
zoom={zoom}
|
|
1036
|
+
onScaleChange={setCanvasScale}
|
|
1037
|
+
onCanvasElement={setCanvasEl}
|
|
1038
|
+
onSelect={handleSelectSection}
|
|
1039
|
+
structuralTypes={structuralTypes}
|
|
1040
|
+
reviewing={reviewing}
|
|
1041
|
+
changedSectionIds={reviewChangedIds}
|
|
1042
|
+
reviewBar={
|
|
1043
|
+
reviewVersion ? (
|
|
1044
|
+
<ReviewBar
|
|
1045
|
+
version={reviewVersion}
|
|
1046
|
+
changedCount={reviewChangedIds.size}
|
|
1047
|
+
onRestore={() => void handleRestoreVersion(reviewVersion)}
|
|
1048
|
+
onBackToCurrent={() => setVersionIndex(0)}
|
|
1049
|
+
restoring={restoring}
|
|
1050
|
+
canRestore={canRestoreVersion}
|
|
1051
|
+
/>
|
|
1052
|
+
) : null
|
|
1053
|
+
}
|
|
1054
|
+
/>
|
|
1177
1055
|
</div>
|
|
1178
1056
|
</div>
|
|
1179
1057
|
</ReflowContext.Provider>
|
|
@@ -1208,6 +1086,19 @@ export function PageSectionEditor({
|
|
|
1208
1086
|
/>
|
|
1209
1087
|
)}
|
|
1210
1088
|
|
|
1089
|
+
{page.id && (
|
|
1090
|
+
<SharePreviewLinkDialog
|
|
1091
|
+
collectionSlug="pages"
|
|
1092
|
+
documentId={page.id}
|
|
1093
|
+
documentSlug={page.slug}
|
|
1094
|
+
documentPath={page.path}
|
|
1095
|
+
siteUrl={publicSiteUrl}
|
|
1096
|
+
urlPrefix=""
|
|
1097
|
+
open={shareOpen}
|
|
1098
|
+
onClose={() => setShareOpen(false)}
|
|
1099
|
+
/>
|
|
1100
|
+
)}
|
|
1101
|
+
|
|
1211
1102
|
<ConfirmDialog
|
|
1212
1103
|
open={leaveTarget !== null}
|
|
1213
1104
|
onClose={() => setLeaveTarget(null)}
|
|
@@ -4,48 +4,12 @@ import { Puzzle } from 'lucide-react'
|
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* Banner shown above the canvas surface when the document contains section
|
|
7
|
-
* types the canvas can only render as placeholders (custom / unmanaged
|
|
8
|
-
* types), or when Site preview is available for accurate styling.
|
|
7
|
+
* types the canvas can only render as placeholders (custom / unmanaged types).
|
|
9
8
|
*/
|
|
10
|
-
export function StructureNotice({
|
|
11
|
-
structuralTypes
|
|
12
|
-
sitePreviewAvailable = false,
|
|
13
|
-
}: {
|
|
14
|
-
structuralTypes: string[]
|
|
15
|
-
/** When true, nudge editors toward the Site preview toggle for WYSIWYG. */
|
|
16
|
-
sitePreviewAvailable?: boolean
|
|
17
|
-
}) {
|
|
18
|
-
if (structuralTypes.length === 0 && !sitePreviewAvailable) return null
|
|
19
|
-
|
|
20
|
-
if (structuralTypes.length > 0) {
|
|
21
|
-
const count = structuralTypes.length
|
|
22
|
-
return (
|
|
23
|
-
<div
|
|
24
|
-
role="note"
|
|
25
|
-
className="border-border bg-card text-muted-foreground mx-auto mb-4 flex w-fit max-w-full items-center gap-2 rounded-lg border px-3 py-1.5 text-xs"
|
|
26
|
-
>
|
|
27
|
-
<Puzzle className="h-3.5 w-3.5 shrink-0" aria-hidden />
|
|
28
|
-
<span>
|
|
29
|
-
<span className="text-foreground font-medium">Structure view</span> — {count} custom
|
|
30
|
-
section type{count > 1 ? 's' : ''} shown as placeholders.
|
|
31
|
-
{sitePreviewAvailable ? (
|
|
32
|
-
<>
|
|
33
|
-
{' '}
|
|
34
|
-
Use <span className="text-foreground font-medium">Site preview</span> for accurate
|
|
35
|
-
styling.
|
|
36
|
-
</>
|
|
37
|
-
) : (
|
|
38
|
-
<>
|
|
39
|
-
{' '}
|
|
40
|
-
Use <span className="text-foreground font-medium">View on site</span> for the real
|
|
41
|
-
design.
|
|
42
|
-
</>
|
|
43
|
-
)}
|
|
44
|
-
</span>
|
|
45
|
-
</div>
|
|
46
|
-
)
|
|
47
|
-
}
|
|
9
|
+
export function StructureNotice({ structuralTypes }: { structuralTypes: string[] }) {
|
|
10
|
+
if (structuralTypes.length === 0) return null
|
|
48
11
|
|
|
12
|
+
const count = structuralTypes.length
|
|
49
13
|
return (
|
|
50
14
|
<div
|
|
51
15
|
role="note"
|
|
@@ -53,8 +17,9 @@ export function StructureNotice({
|
|
|
53
17
|
>
|
|
54
18
|
<Puzzle className="h-3.5 w-3.5 shrink-0" aria-hidden />
|
|
55
19
|
<span>
|
|
56
|
-
<span className="text-foreground font-medium">Structure
|
|
57
|
-
|
|
20
|
+
<span className="text-foreground font-medium">Structure view</span> — {count} custom section
|
|
21
|
+
type{count > 1 ? 's' : ''} shown as placeholders. Use{' '}
|
|
22
|
+
<span className="text-foreground font-medium">View site</span> for the real design.
|
|
58
23
|
</span>
|
|
59
24
|
</div>
|
|
60
25
|
)
|
|
@@ -24,8 +24,6 @@ interface PostEditorCanvasProps {
|
|
|
24
24
|
onAddSection?: () => void
|
|
25
25
|
/** Section types rendered as placeholders — shows the "Structure view" notice. */
|
|
26
26
|
structuralTypes?: string[]
|
|
27
|
-
/** Site preview toggle is available — show WYSIWYG nudge on the canvas. */
|
|
28
|
-
sitePreviewAvailable?: boolean
|
|
29
27
|
}
|
|
30
28
|
|
|
31
29
|
/**
|
|
@@ -53,7 +51,6 @@ export function PostEditorCanvas({
|
|
|
53
51
|
onCanvasElement,
|
|
54
52
|
onAddSection,
|
|
55
53
|
structuralTypes = [],
|
|
56
|
-
sitePreviewAvailable = false,
|
|
57
54
|
}: PostEditorCanvasProps) {
|
|
58
55
|
const registerRef = useSectionRefs(selectedId)
|
|
59
56
|
|
|
@@ -67,10 +64,7 @@ export function PostEditorCanvas({
|
|
|
67
64
|
chrome={
|
|
68
65
|
<>
|
|
69
66
|
{sections.length > 0 && <CanvasEditTip />}
|
|
70
|
-
<StructureNotice
|
|
71
|
-
structuralTypes={structuralTypes}
|
|
72
|
-
sitePreviewAvailable={sitePreviewAvailable}
|
|
73
|
-
/>
|
|
67
|
+
<StructureNotice structuralTypes={structuralTypes} />
|
|
74
68
|
</>
|
|
75
69
|
}
|
|
76
70
|
>
|
|
@@ -109,7 +103,7 @@ function EmptyBody({ onAddSection }: { onAddSection?: () => void }) {
|
|
|
109
103
|
</span>
|
|
110
104
|
<p className="text-muted-foreground text-sm">
|
|
111
105
|
{onAddSection
|
|
112
|
-
? 'The header is set by the template. Add body sections to build out this post. Hover sections for a light outline, click to open its editor in the section list
|
|
106
|
+
? 'The header is set by the template. Add body sections to build out this post. Hover sections for a light outline, click to open its editor in the section list.'
|
|
113
107
|
: 'This post’s template renders no body sections. Layout is design-owned — sections come from the template in code. Pick a different template in Post settings, or edit the template itself.'}
|
|
114
108
|
</p>
|
|
115
109
|
{onAddSection && (
|