@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
|
@@ -28,12 +28,10 @@ import {
|
|
|
28
28
|
type ValidationResult,
|
|
29
29
|
} from '../../lib/post-editor-service.js'
|
|
30
30
|
import { MediaPickerModal } from '../../components/MediaPickerModal.js'
|
|
31
|
+
import { SharePreviewLinkDialog } from '../../components/SharePreviewLinkDialog.js'
|
|
31
32
|
import { defaultPostHeader } from '@prenta/core/page-sections'
|
|
32
|
-
import {
|
|
33
|
-
|
|
34
|
-
buildPublicUrl,
|
|
35
|
-
createPreviewToken,
|
|
36
|
-
} from '../../lib/preview-link.js'
|
|
33
|
+
import { openPublicSiteTab } from '../../lib/open-public-site-tab.js'
|
|
34
|
+
import type { ViewSiteIntent } from '../../lib/view-site-chrome.js'
|
|
37
35
|
import { usePublicSiteUrl } from '../../hooks/usePublicSiteUrl.js'
|
|
38
36
|
import {
|
|
39
37
|
hasCanvasRenderer,
|
|
@@ -42,12 +40,9 @@ import {
|
|
|
42
40
|
} from '../page-editor/sections/index.js'
|
|
43
41
|
import { DEFAULT_VIEWPORT, type ViewportId } from '../page-editor/viewports.js'
|
|
44
42
|
import { EditorTopBar, type SaveState } from '../page-editor/EditorTopBar.js'
|
|
45
|
-
import { SitePreviewFrame } from '../page-editor/SitePreviewFrame.js'
|
|
46
|
-
import { useSitePreview } from '../page-editor/useSitePreview.js'
|
|
47
43
|
import { SectionsList } from '../page-editor/SectionsPanel.js'
|
|
48
44
|
import { SectionEditForm } from '../page-editor/SectionEditForm.js'
|
|
49
45
|
import { ValidationSummary } from '../page-editor/ValidationSummary.js'
|
|
50
|
-
import { resolveDefaultSitePreview } from '../../lib/editor-preview.js'
|
|
51
46
|
import { buildEditorContentHtml, computeLiveSeoScore } from '../../lib/editor-seo-content.js'
|
|
52
47
|
import { snapshotBaseline, type ReflowBaseline } from '../../lib/reflow-baseline.js'
|
|
53
48
|
import { ReflowContext } from '../page-editor/reflow-context.js'
|
|
@@ -68,7 +63,6 @@ interface EditorConfig {
|
|
|
68
63
|
| undefined
|
|
69
64
|
>
|
|
70
65
|
seo?: { siteUrl?: string }
|
|
71
|
-
admin?: { editor?: { defaultSitePreview?: boolean | { pages?: boolean; posts?: boolean } } }
|
|
72
66
|
}
|
|
73
67
|
|
|
74
68
|
/** The slice of the admin session this editor reads. */
|
|
@@ -83,12 +77,6 @@ interface PostSectionEditorProps {
|
|
|
83
77
|
config?: EditorConfig
|
|
84
78
|
session?: EditorSession
|
|
85
79
|
onNavigate: (path: string) => void
|
|
86
|
-
/**
|
|
87
|
-
* Open a preview route in a new browser tab. `prepare` runs before the tab
|
|
88
|
-
* navigates (used to save an unsaved draft first); returning `false` cancels
|
|
89
|
-
* the open. Falls back to in-tab navigation when not provided.
|
|
90
|
-
*/
|
|
91
|
-
onOpenPreview?: (path: string, prepare?: () => Promise<boolean | void> | boolean | void) => void
|
|
92
80
|
}
|
|
93
81
|
|
|
94
82
|
function deriveCan(session: EditorSession | undefined): {
|
|
@@ -111,7 +99,6 @@ export function PostSectionEditor({
|
|
|
111
99
|
config,
|
|
112
100
|
session,
|
|
113
101
|
onNavigate,
|
|
114
|
-
onOpenPreview,
|
|
115
102
|
}: PostSectionEditorProps) {
|
|
116
103
|
const [post, setPost] = useState<EditorPost | null>(null)
|
|
117
104
|
const [header, setHeader] = useState<PostHeaderConfig>(defaultPostHeader())
|
|
@@ -151,6 +138,7 @@ export function PostSectionEditor({
|
|
|
151
138
|
const [historyOpen, setHistoryOpen] = useState(false)
|
|
152
139
|
const [confirmPublish, setConfirmPublish] = useState(false)
|
|
153
140
|
const [scheduleOpen, setScheduleOpen] = useState(false)
|
|
141
|
+
const [shareOpen, setShareOpen] = useState(false)
|
|
154
142
|
const [leaveTarget, setLeaveTarget] = useState<string | null>(null)
|
|
155
143
|
const [validation, setValidation] = useState<ValidationResult | null>(null)
|
|
156
144
|
|
|
@@ -177,6 +165,8 @@ export function PostSectionEditor({
|
|
|
177
165
|
return col?.labels?.singular ?? postType
|
|
178
166
|
}, [config, postType])
|
|
179
167
|
|
|
168
|
+
const urlPrefix = config?.collections?.[postType]?.urlPrefix ?? postType
|
|
169
|
+
|
|
180
170
|
// A misconfigured post-type collection (missing the fields the editor
|
|
181
171
|
// writes) would silently drop content on save — detect it up front.
|
|
182
172
|
// Memoized to a string/null so the load effect can depend on it without
|
|
@@ -390,21 +380,6 @@ export function PostSectionEditor({
|
|
|
390
380
|
}
|
|
391
381
|
}, [post, documentId, postType, onNavigate])
|
|
392
382
|
|
|
393
|
-
// Inline branded preview — Next builder canvas (same origin as admin).
|
|
394
|
-
// "View on site" still uses publicSiteUrl for the Astro/public apex.
|
|
395
|
-
const sitePreview = useSitePreview({
|
|
396
|
-
collection: postType,
|
|
397
|
-
documentId: post?.id,
|
|
398
|
-
slug: post?.slug,
|
|
399
|
-
urlPrefix: config?.collections?.[postType]?.urlPrefix ?? postType,
|
|
400
|
-
dirty,
|
|
401
|
-
saveState,
|
|
402
|
-
saveDraft: handleSaveDraft,
|
|
403
|
-
defaultActive: resolveDefaultSitePreview(config?.admin?.editor, 'posts'),
|
|
404
|
-
})
|
|
405
|
-
|
|
406
|
-
const sitePreviewAvailable = Boolean(post?.id && post?.slug)
|
|
407
|
-
|
|
408
383
|
const requestPublish = useCallback(() => {
|
|
409
384
|
if (!post) return
|
|
410
385
|
const result = validatePost(post, true)
|
|
@@ -555,78 +530,37 @@ export function PostSectionEditor({
|
|
|
555
530
|
[dirty, onNavigate],
|
|
556
531
|
)
|
|
557
532
|
|
|
558
|
-
const
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
533
|
+
const handleViewOnSite = useCallback(
|
|
534
|
+
(intent: ViewSiteIntent) => {
|
|
535
|
+
if (!post?.id || !post.slug) {
|
|
536
|
+
toast.error('Save the post before viewing it on the site')
|
|
537
|
+
return
|
|
538
|
+
}
|
|
539
|
+
void openPublicSiteTab({
|
|
540
|
+
intent,
|
|
541
|
+
siteUrl: publicSiteUrl,
|
|
542
|
+
collection: postType,
|
|
543
|
+
documentId: post.id,
|
|
544
|
+
slug: post.slug,
|
|
545
|
+
urlPrefix,
|
|
546
|
+
data: { path: (post as { path?: string }).path },
|
|
547
|
+
dirty,
|
|
548
|
+
saveDraft: handleSaveDraft,
|
|
549
|
+
}).catch((err) => {
|
|
550
|
+
toast.error(err instanceof Error ? err.message : 'Failed to open the site')
|
|
551
|
+
})
|
|
552
|
+
},
|
|
553
|
+
[post, postType, urlPrefix, dirty, handleSaveDraft, publicSiteUrl],
|
|
554
|
+
)
|
|
572
555
|
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
return
|
|
579
|
-
}
|
|
580
|
-
// Published → open the LIVE post directly (no preview token, no forced
|
|
581
|
-
// save). Pending edits stay previewable via the eye + globe.
|
|
582
|
-
if (post.status === 'PUBLISHED') {
|
|
583
|
-
window.open(
|
|
584
|
-
buildPublicUrl({
|
|
585
|
-
siteUrl: publicSiteUrl,
|
|
586
|
-
urlPrefix: config?.collections?.[postType]?.urlPrefix ?? postType,
|
|
587
|
-
slug: post.slug,
|
|
588
|
-
data: { path: (post as { path?: string }).path },
|
|
589
|
-
}),
|
|
590
|
-
'_blank',
|
|
591
|
-
'noopener',
|
|
592
|
-
)
|
|
593
|
-
return
|
|
594
|
-
}
|
|
595
|
-
const tab = window.open('about:blank', '_blank')
|
|
596
|
-
if (!tab) {
|
|
597
|
-
toast.error('Enable pop-ups for this site to open the preview in a new tab.')
|
|
598
|
-
return
|
|
556
|
+
const handleShare = useCallback(async () => {
|
|
557
|
+
if (!post?.id) return
|
|
558
|
+
if (dirty) {
|
|
559
|
+
const ok = await handleSaveDraft()
|
|
560
|
+
if (!ok) return
|
|
599
561
|
}
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
if (dirty) {
|
|
603
|
-
const ok = await handleSaveDraft()
|
|
604
|
-
if (!ok) {
|
|
605
|
-
tab.close()
|
|
606
|
-
return
|
|
607
|
-
}
|
|
608
|
-
}
|
|
609
|
-
const { token } = await createPreviewToken(postType, post.id!)
|
|
610
|
-
const urlPrefix = config?.collections?.[postType]?.urlPrefix ?? postType
|
|
611
|
-
const target = buildPublicPreviewUrl({
|
|
612
|
-
siteUrl: publicSiteUrl,
|
|
613
|
-
urlPrefix,
|
|
614
|
-
slug: post.slug,
|
|
615
|
-
data: { path: (post as { path?: string }).path },
|
|
616
|
-
token,
|
|
617
|
-
})
|
|
618
|
-
try {
|
|
619
|
-
tab.opener = null
|
|
620
|
-
} catch {
|
|
621
|
-
/* same-origin guard */
|
|
622
|
-
}
|
|
623
|
-
tab.location.replace(target)
|
|
624
|
-
} catch (err) {
|
|
625
|
-
tab.close()
|
|
626
|
-
toast.error(err instanceof Error ? err.message : 'Failed to open site preview')
|
|
627
|
-
}
|
|
628
|
-
})()
|
|
629
|
-
}, [post, postType, dirty, config, handleSaveDraft, publicSiteUrl])
|
|
562
|
+
setShareOpen(true)
|
|
563
|
+
}, [post, dirty, handleSaveDraft])
|
|
630
564
|
|
|
631
565
|
// ─── Render states ───────────────────────────────────────────────────
|
|
632
566
|
if (loading) {
|
|
@@ -693,16 +627,13 @@ export function PostSectionEditor({
|
|
|
693
627
|
viewport={viewport}
|
|
694
628
|
backLabel="Posts"
|
|
695
629
|
onViewport={setViewport}
|
|
696
|
-
{
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
{}
|
|
700
|
-
: { zoom, canvasScale, onZoom: setZoom })}
|
|
630
|
+
zoom={zoom}
|
|
631
|
+
canvasScale={canvasScale}
|
|
632
|
+
onZoom={setZoom}
|
|
701
633
|
onBack={() => guardedNavigate('/posts')}
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
onToggleSitePreview={post.id && post.slug ? sitePreview.toggle : undefined}
|
|
634
|
+
onViewOnSite={post.id && post.slug ? handleViewOnSite : undefined}
|
|
635
|
+
onShare={post.id ? handleShare : undefined}
|
|
636
|
+
hasPublicSiteUrl={Boolean(publicSiteUrl)}
|
|
706
637
|
onHistory={post.id ? () => setHistoryOpen(true) : undefined}
|
|
707
638
|
onOpenSettings={() => setFieldsOpen(true)}
|
|
708
639
|
onOpenSeo={handleToggleSeo}
|
|
@@ -801,34 +732,18 @@ export function PostSectionEditor({
|
|
|
801
732
|
</EditorRail>
|
|
802
733
|
|
|
803
734
|
<div className="flex-1 overflow-hidden">
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
/>
|
|
817
|
-
) : (
|
|
818
|
-
<PostEditorCanvas
|
|
819
|
-
sections={post.sections}
|
|
820
|
-
header={header}
|
|
821
|
-
context={context}
|
|
822
|
-
selectedId={selectedId}
|
|
823
|
-
viewport={viewport}
|
|
824
|
-
zoom={zoom}
|
|
825
|
-
onScaleChange={setCanvasScale}
|
|
826
|
-
onCanvasElement={setCanvasEl}
|
|
827
|
-
onSelect={handleSelectSection}
|
|
828
|
-
structuralTypes={structuralTypes}
|
|
829
|
-
sitePreviewAvailable={sitePreviewAvailable && !sitePreview.active}
|
|
830
|
-
/>
|
|
831
|
-
)}
|
|
735
|
+
<PostEditorCanvas
|
|
736
|
+
sections={post.sections}
|
|
737
|
+
header={header}
|
|
738
|
+
context={context}
|
|
739
|
+
selectedId={selectedId}
|
|
740
|
+
viewport={viewport}
|
|
741
|
+
zoom={zoom}
|
|
742
|
+
onScaleChange={setCanvasScale}
|
|
743
|
+
onCanvasElement={setCanvasEl}
|
|
744
|
+
onSelect={handleSelectSection}
|
|
745
|
+
structuralTypes={structuralTypes}
|
|
746
|
+
/>
|
|
832
747
|
</div>
|
|
833
748
|
</div>
|
|
834
749
|
</ReflowContext.Provider>
|
|
@@ -874,6 +789,19 @@ export function PostSectionEditor({
|
|
|
874
789
|
/>
|
|
875
790
|
)}
|
|
876
791
|
|
|
792
|
+
{post.id && (
|
|
793
|
+
<SharePreviewLinkDialog
|
|
794
|
+
collectionSlug={postType}
|
|
795
|
+
documentId={post.id}
|
|
796
|
+
documentSlug={post.slug}
|
|
797
|
+
documentPath={(post as { path?: string }).path}
|
|
798
|
+
siteUrl={publicSiteUrl}
|
|
799
|
+
urlPrefix={urlPrefix}
|
|
800
|
+
open={shareOpen}
|
|
801
|
+
onClose={() => setShareOpen(false)}
|
|
802
|
+
/>
|
|
803
|
+
)}
|
|
804
|
+
|
|
877
805
|
<ConfirmDialog
|
|
878
806
|
open={leaveTarget !== null}
|
|
879
807
|
onClose={() => setLeaveTarget(null)}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"page-builder-block-renderer.render.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/views/page-builder-block-renderer.render.test.tsx"],"names":[],"mappings":""}
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
// @vitest-environment happy-dom
|
|
3
|
-
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
|
4
|
-
import { fireEvent, render, screen, waitFor } from '@testing-library/react';
|
|
5
|
-
const cmsApi = vi.fn();
|
|
6
|
-
vi.mock('../../lib/api.js', () => ({ cmsApi: (...args) => cmsApi(...args) }));
|
|
7
|
-
const { BlockRenderer } = await import('../../views/page-builder/canvas/BlockRenderer.js');
|
|
8
|
-
function formNode(over = {}) {
|
|
9
|
-
return {
|
|
10
|
-
id: 'node-1',
|
|
11
|
-
type: 'block',
|
|
12
|
-
settings: { blockType: 'form', variant: 'contact' },
|
|
13
|
-
data: { formId: 'f1' },
|
|
14
|
-
...over,
|
|
15
|
-
};
|
|
16
|
-
}
|
|
17
|
-
beforeEach(() => {
|
|
18
|
-
cmsApi.mockReset();
|
|
19
|
-
cmsApi.mockResolvedValue({
|
|
20
|
-
data: {
|
|
21
|
-
name: 'Contact Us',
|
|
22
|
-
fields: [
|
|
23
|
-
{ key: 'name', label: 'Full Name', type: 'text' },
|
|
24
|
-
{ key: 'message', label: 'Message', type: 'textarea' },
|
|
25
|
-
],
|
|
26
|
-
},
|
|
27
|
-
status: 200,
|
|
28
|
-
});
|
|
29
|
-
});
|
|
30
|
-
describe('canvas BlockRenderer', () => {
|
|
31
|
-
it('renders the live form preview with the linked form name and fields', async () => {
|
|
32
|
-
render(_jsx(BlockRenderer, { node: formNode(), selectedNodeId: null, onSelectNode: vi.fn() }));
|
|
33
|
-
await waitFor(() => expect(screen.getByText('Contact Us')).toBeTruthy());
|
|
34
|
-
expect(cmsApi).toHaveBeenCalledWith('/forms/f1');
|
|
35
|
-
expect(screen.getByText('Full Name')).toBeTruthy();
|
|
36
|
-
});
|
|
37
|
-
it('selects the node on click', () => {
|
|
38
|
-
const onSelectNode = vi.fn();
|
|
39
|
-
const { container } = render(_jsx(BlockRenderer, { node: formNode({ data: {} }), selectedNodeId: null, onSelectNode: onSelectNode }));
|
|
40
|
-
fireEvent.click(container.querySelector('[data-node-id="node-1"]'));
|
|
41
|
-
expect(onSelectNode).toHaveBeenCalledWith('node-1');
|
|
42
|
-
});
|
|
43
|
-
it('falls back to a placeholder for unknown block types', () => {
|
|
44
|
-
render(_jsx(BlockRenderer, { node: formNode({ settings: { blockType: 'widget' }, data: {} }), selectedNodeId: null, onSelectNode: vi.fn() }));
|
|
45
|
-
expect(screen.getByText('No preview available')).toBeTruthy();
|
|
46
|
-
});
|
|
47
|
-
});
|
|
48
|
-
//# sourceMappingURL=page-builder-block-renderer.render.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"page-builder-block-renderer.render.test.js","sourceRoot":"","sources":["../../../src/__tests__/views/page-builder-block-renderer.render.test.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"page-builder-form-picker.render.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/views/page-builder-form-picker.render.test.tsx"],"names":[],"mappings":""}
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
// @vitest-environment happy-dom
|
|
3
|
-
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
|
4
|
-
import { fireEvent, render, screen, waitFor } from '@testing-library/react';
|
|
5
|
-
const cmsApi = vi.fn();
|
|
6
|
-
vi.mock('../../lib/api.js', () => ({ cmsApi: (...args) => cmsApi(...args) }));
|
|
7
|
-
const { RelationshipField } = await import('../../views/page-builder/RelationshipField.js');
|
|
8
|
-
const formField = {
|
|
9
|
-
type: 'relationship',
|
|
10
|
-
label: 'Form',
|
|
11
|
-
relationTo: 'forms',
|
|
12
|
-
};
|
|
13
|
-
beforeEach(() => {
|
|
14
|
-
cmsApi.mockReset();
|
|
15
|
-
});
|
|
16
|
-
describe('RelationshipField (form block picker)', () => {
|
|
17
|
-
it('loads forms and lets the editor pick one by id', async () => {
|
|
18
|
-
cmsApi.mockResolvedValue({
|
|
19
|
-
data: [
|
|
20
|
-
{ id: 'f1', name: 'Contact Us', slug: 'contact-us' },
|
|
21
|
-
{ id: 'f2', name: 'Event RSVP', slug: 'event-rsvp' },
|
|
22
|
-
],
|
|
23
|
-
status: 200,
|
|
24
|
-
});
|
|
25
|
-
const onChange = vi.fn();
|
|
26
|
-
render(_jsx(RelationshipField, { definition: formField, value: "", onChange: onChange, label: "Form" }));
|
|
27
|
-
await waitFor(() => expect(screen.getByText('Contact Us')).toBeTruthy());
|
|
28
|
-
expect(cmsApi).toHaveBeenCalledWith('/forms');
|
|
29
|
-
expect(screen.getByText('Event RSVP')).toBeTruthy();
|
|
30
|
-
fireEvent.change(screen.getByLabelText('Form'), { target: { value: 'f2' } });
|
|
31
|
-
expect(onChange).toHaveBeenCalledWith('f2');
|
|
32
|
-
});
|
|
33
|
-
it('shows an empty hint when the collection has no items', async () => {
|
|
34
|
-
cmsApi.mockResolvedValue({ data: [], status: 200 });
|
|
35
|
-
render(_jsx(RelationshipField, { definition: formField, value: "", onChange: vi.fn(), label: "Form" }));
|
|
36
|
-
await waitFor(() => expect(screen.getByText('No forms found.')).toBeTruthy());
|
|
37
|
-
});
|
|
38
|
-
it('degrades to a plain id input when the collection cannot be loaded', async () => {
|
|
39
|
-
cmsApi.mockResolvedValue({ error: 'boom', status: 500 });
|
|
40
|
-
render(_jsx(RelationshipField, { definition: formField, value: "f9", onChange: vi.fn(), label: "Form" }));
|
|
41
|
-
await waitFor(() => expect(screen.getByPlaceholderText('Enter forms id…').value).toBe('f9'));
|
|
42
|
-
});
|
|
43
|
-
});
|
|
44
|
-
//# sourceMappingURL=page-builder-form-picker.render.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"page-builder-form-picker.render.test.js","sourceRoot":"","sources":["../../../src/__tests__/views/page-builder-form-picker.render.test.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"page-builder-sections-panel.render.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/views/page-builder-sections-panel.render.test.tsx"],"names":[],"mappings":""}
|
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
// @vitest-environment happy-dom
|
|
3
|
-
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
|
4
|
-
import { fireEvent, render, screen } from '@testing-library/react';
|
|
5
|
-
const { BuilderSectionsPanel } = await import('../../views/page-builder/BuilderSectionsPanel.js');
|
|
6
|
-
/** Minimal builder tree: a hero section plus an empty, hidden section. */
|
|
7
|
-
function makeTree() {
|
|
8
|
-
return {
|
|
9
|
-
id: 'page1',
|
|
10
|
-
type: 'page',
|
|
11
|
-
children: [
|
|
12
|
-
{
|
|
13
|
-
id: 'sec1',
|
|
14
|
-
type: 'section',
|
|
15
|
-
settings: {},
|
|
16
|
-
children: [
|
|
17
|
-
{
|
|
18
|
-
id: 'cont1',
|
|
19
|
-
type: 'container',
|
|
20
|
-
settings: {},
|
|
21
|
-
children: [
|
|
22
|
-
{
|
|
23
|
-
id: 'row1',
|
|
24
|
-
type: 'row',
|
|
25
|
-
settings: {},
|
|
26
|
-
children: [
|
|
27
|
-
{
|
|
28
|
-
id: 'col1',
|
|
29
|
-
type: 'column',
|
|
30
|
-
settings: { width: 12 },
|
|
31
|
-
children: [
|
|
32
|
-
{
|
|
33
|
-
id: 'blk1',
|
|
34
|
-
type: 'block',
|
|
35
|
-
settings: { blockType: 'hero', variant: 'centered' },
|
|
36
|
-
data: {},
|
|
37
|
-
},
|
|
38
|
-
],
|
|
39
|
-
},
|
|
40
|
-
],
|
|
41
|
-
},
|
|
42
|
-
],
|
|
43
|
-
},
|
|
44
|
-
],
|
|
45
|
-
},
|
|
46
|
-
{ id: 'sec2', type: 'section', settings: { visibility: 'hidden' }, children: [] },
|
|
47
|
-
],
|
|
48
|
-
};
|
|
49
|
-
}
|
|
50
|
-
function renderPanel(over = {}) {
|
|
51
|
-
const props = {
|
|
52
|
-
tree: makeTree(),
|
|
53
|
-
selectedNodeId: null,
|
|
54
|
-
collapsed: false,
|
|
55
|
-
onToggleCollapsed: vi.fn(),
|
|
56
|
-
onSelect: vi.fn(),
|
|
57
|
-
onReorder: vi.fn(),
|
|
58
|
-
onAddSection: vi.fn(),
|
|
59
|
-
...over,
|
|
60
|
-
};
|
|
61
|
-
render(_jsx(BuilderSectionsPanel, { ...props }));
|
|
62
|
-
return props;
|
|
63
|
-
}
|
|
64
|
-
beforeEach(() => {
|
|
65
|
-
vi.clearAllMocks();
|
|
66
|
-
});
|
|
67
|
-
describe('BuilderSectionsPanel', () => {
|
|
68
|
-
it('lists the page sections in order with derived names and block counts', () => {
|
|
69
|
-
renderPanel();
|
|
70
|
-
// First section is named after its first block's catalog label.
|
|
71
|
-
expect(screen.getByText('Hero')).toBeTruthy();
|
|
72
|
-
expect(screen.getByText('1 block')).toBeTruthy();
|
|
73
|
-
// Empty section falls back to a positional name.
|
|
74
|
-
expect(screen.getByText('Section 2')).toBeTruthy();
|
|
75
|
-
expect(screen.getByText('Empty section')).toBeTruthy();
|
|
76
|
-
// Count chip in the header.
|
|
77
|
-
expect(screen.getByText('2')).toBeTruthy();
|
|
78
|
-
// Panel is an accessible nav landmark.
|
|
79
|
-
expect(screen.getByRole('navigation', { name: 'Page sections' })).toBeTruthy();
|
|
80
|
-
});
|
|
81
|
-
it('fires the selection callback when a section row is clicked', () => {
|
|
82
|
-
const props = renderPanel();
|
|
83
|
-
// `/^Hero/` excludes the drag handle ("Drag to reorder Hero").
|
|
84
|
-
fireEvent.click(screen.getByRole('button', { name: /^Hero/ }));
|
|
85
|
-
expect(props.onSelect).toHaveBeenCalledWith('sec1');
|
|
86
|
-
});
|
|
87
|
-
it('marks the selected section with aria-current', () => {
|
|
88
|
-
renderPanel({ selectedNodeId: 'sec1' });
|
|
89
|
-
const row = screen.getByRole('button', { name: /^Hero/ });
|
|
90
|
-
expect(row.getAttribute('aria-current')).toBe('true');
|
|
91
|
-
});
|
|
92
|
-
it('exposes keyboard-accessible drag handles per section', () => {
|
|
93
|
-
renderPanel();
|
|
94
|
-
expect(screen.getByRole('button', { name: 'Drag to reorder Hero' })).toBeTruthy();
|
|
95
|
-
expect(screen.getByRole('button', { name: 'Drag to reorder Section 2' })).toBeTruthy();
|
|
96
|
-
});
|
|
97
|
-
it('fires the add-section callback from the bottom affordance', () => {
|
|
98
|
-
const props = renderPanel();
|
|
99
|
-
fireEvent.click(screen.getByRole('button', { name: 'Add Section' }));
|
|
100
|
-
expect(props.onAddSection).toHaveBeenCalledTimes(1);
|
|
101
|
-
});
|
|
102
|
-
it('collapses to a rail with an expand toggle', () => {
|
|
103
|
-
const props = renderPanel({ collapsed: true });
|
|
104
|
-
// Section rows are gone; only the expand affordance remains.
|
|
105
|
-
expect(screen.queryByText('Hero')).toBeNull();
|
|
106
|
-
const toggle = screen.getByRole('button', { name: 'Expand sections panel' });
|
|
107
|
-
expect(toggle.getAttribute('aria-expanded')).toBe('false');
|
|
108
|
-
fireEvent.click(toggle);
|
|
109
|
-
expect(props.onToggleCollapsed).toHaveBeenCalledTimes(1);
|
|
110
|
-
});
|
|
111
|
-
it('shows a collapse toggle with aria-expanded when open', () => {
|
|
112
|
-
renderPanel();
|
|
113
|
-
const toggle = screen.getByRole('button', { name: 'Collapse sections panel' });
|
|
114
|
-
expect(toggle.getAttribute('aria-expanded')).toBe('true');
|
|
115
|
-
});
|
|
116
|
-
it('shows an empty message when the page has no sections', () => {
|
|
117
|
-
renderPanel({ tree: { id: 'page1', type: 'page', children: [] } });
|
|
118
|
-
expect(screen.getByText(/No sections yet/)).toBeTruthy();
|
|
119
|
-
});
|
|
120
|
-
});
|
|
121
|
-
//# sourceMappingURL=page-builder-sections-panel.render.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"page-builder-sections-panel.render.test.js","sourceRoot":"","sources":["../../../src/__tests__/views/page-builder-sections-panel.render.test.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"page-builder-seo-panel.render.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/views/page-builder-seo-panel.render.test.tsx"],"names":[],"mappings":""}
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
// @vitest-environment happy-dom
|
|
3
|
-
import { describe, expect, it, vi } from 'vitest';
|
|
4
|
-
import { render, screen } from '@testing-library/react';
|
|
5
|
-
import { BuilderSEOPanel } from '../../views/page-builder/SEOPanel.js';
|
|
6
|
-
const tree = {
|
|
7
|
-
id: 'page-1',
|
|
8
|
-
type: 'page',
|
|
9
|
-
children: [
|
|
10
|
-
{
|
|
11
|
-
id: 'sec-1',
|
|
12
|
-
type: 'section',
|
|
13
|
-
settings: {},
|
|
14
|
-
children: [
|
|
15
|
-
{
|
|
16
|
-
id: 'row-1',
|
|
17
|
-
type: 'row',
|
|
18
|
-
settings: {},
|
|
19
|
-
children: [
|
|
20
|
-
{
|
|
21
|
-
id: 'col-1',
|
|
22
|
-
type: 'column',
|
|
23
|
-
settings: { width: 12 },
|
|
24
|
-
children: [
|
|
25
|
-
{
|
|
26
|
-
id: 'blk-hero',
|
|
27
|
-
type: 'block',
|
|
28
|
-
settings: { blockType: 'hero' },
|
|
29
|
-
data: {
|
|
30
|
-
title: 'Welcome to Our Service',
|
|
31
|
-
image: { url: '/hero.webp', alt: 'Hero banner' },
|
|
32
|
-
},
|
|
33
|
-
},
|
|
34
|
-
],
|
|
35
|
-
},
|
|
36
|
-
],
|
|
37
|
-
},
|
|
38
|
-
],
|
|
39
|
-
},
|
|
40
|
-
],
|
|
41
|
-
};
|
|
42
|
-
const pageSettings = {
|
|
43
|
-
title: 'Home',
|
|
44
|
-
slug: 'home',
|
|
45
|
-
metaTitle: 'Welcome to Our Service',
|
|
46
|
-
metaDescription: 'The public description.',
|
|
47
|
-
};
|
|
48
|
-
describe('BuilderSEOPanel', () => {
|
|
49
|
-
it('grades the live tree with the shared page audit panel and keeps meta fields', () => {
|
|
50
|
-
render(_jsx(BuilderSEOPanel, { tree: tree, pageSettings: pageSettings, onPageSettingsChange: vi.fn() }));
|
|
51
|
-
expect(screen.getByRole('img', { name: /SEO score:/i })).toBeTruthy();
|
|
52
|
-
expect(screen.getByRole('img', { name: /GEO score:/i })).toBeTruthy();
|
|
53
|
-
expect(screen.getByText('SEO checks')).toBeTruthy();
|
|
54
|
-
expect(screen.getByText('GEO checks')).toBeTruthy();
|
|
55
|
-
expect(screen.getByLabelText('Meta Title')).toBeTruthy();
|
|
56
|
-
expect(screen.queryByText('Readability')).toBeNull();
|
|
57
|
-
expect(screen.queryByText('Block Hints')).toBeNull();
|
|
58
|
-
});
|
|
59
|
-
it('keeps the empty-tree copy when the canvas has no children', () => {
|
|
60
|
-
render(_jsx(BuilderSEOPanel, { tree: { id: 'page-1', type: 'page', children: [] }, pageSettings: pageSettings, onPageSettingsChange: vi.fn() }));
|
|
61
|
-
expect(screen.getByText('Add content to your page to see SEO analysis')).toBeTruthy();
|
|
62
|
-
expect(screen.queryByRole('img', { name: /SEO score:/i })).toBeNull();
|
|
63
|
-
});
|
|
64
|
-
});
|
|
65
|
-
//# sourceMappingURL=page-builder-seo-panel.render.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"page-builder-seo-panel.render.test.js","sourceRoot":"","sources":["../../../src/__tests__/views/page-builder-seo-panel.render.test.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"page-builder-template-seed.render.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/views/page-builder-template-seed.render.test.tsx"],"names":[],"mappings":""}
|