@actuate-media/cms-admin 0.8.0 → 0.8.1
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/dist/AdminRoot.d.ts.map +1 -1
- package/dist/AdminRoot.js +44 -42
- package/dist/AdminRoot.js.map +1 -1
- package/dist/__tests__/lib/search.test.js +10 -10
- package/dist/__tests__/lib/search.test.js.map +1 -1
- package/dist/__tests__/lib/utils.test.js.map +1 -1
- package/dist/__tests__/router/match-route.test.js.map +1 -1
- package/dist/__tests__/router/strip-base.test.js.map +1 -1
- package/dist/components/Breadcrumbs.d.ts.map +1 -1
- package/dist/components/Breadcrumbs.js +2 -4
- package/dist/components/Breadcrumbs.js.map +1 -1
- package/dist/components/CommandPalette.d.ts.map +1 -1
- package/dist/components/CommandPalette.js +7 -3
- package/dist/components/CommandPalette.js.map +1 -1
- package/dist/components/ContentOverviewChart.d.ts.map +1 -1
- package/dist/components/ContentOverviewChart.js.map +1 -1
- package/dist/components/ErrorBoundary.d.ts.map +1 -1
- package/dist/components/ErrorBoundary.js.map +1 -1
- package/dist/components/FocalPointPicker.d.ts.map +1 -1
- package/dist/components/FocalPointPicker.js +4 -2
- package/dist/components/FocalPointPicker.js.map +1 -1
- package/dist/components/FolderTree.d.ts.map +1 -1
- package/dist/components/FolderTree.js +18 -10
- package/dist/components/FolderTree.js.map +1 -1
- package/dist/components/LivePreview.d.ts +1 -1
- package/dist/components/LivePreview.d.ts.map +1 -1
- package/dist/components/LivePreview.js +6 -2
- package/dist/components/LivePreview.js.map +1 -1
- package/dist/components/LocaleProvider.d.ts.map +1 -1
- package/dist/components/LocaleProvider.js.map +1 -1
- package/dist/components/LocaleSwitcher.d.ts.map +1 -1
- package/dist/components/LocaleSwitcher.js +1 -1
- package/dist/components/LocaleSwitcher.js.map +1 -1
- package/dist/components/MediaPickerModal.d.ts.map +1 -1
- package/dist/components/MediaPickerModal.js.map +1 -1
- package/dist/components/PresenceIndicator.d.ts.map +1 -1
- package/dist/components/PresenceIndicator.js +5 -2
- package/dist/components/PresenceIndicator.js.map +1 -1
- package/dist/components/SEOPanel.d.ts +1 -1
- package/dist/components/SEOPanel.d.ts.map +1 -1
- package/dist/components/SEOPanel.js +110 -24
- package/dist/components/SEOPanel.js.map +1 -1
- package/dist/components/SEOPerformance.d.ts.map +1 -1
- package/dist/components/SEOPerformance.js +2 -2
- package/dist/components/SEOPerformance.js.map +1 -1
- package/dist/components/ThemeProvider.d.ts.map +1 -1
- package/dist/components/ThemeProvider.js.map +1 -1
- package/dist/components/TipTapEditor.d.ts.map +1 -1
- package/dist/components/TipTapEditor.js +5 -1
- package/dist/components/TipTapEditor.js.map +1 -1
- package/dist/components/VersionHistory.d.ts +1 -1
- package/dist/components/VersionHistory.d.ts.map +1 -1
- package/dist/components/VersionHistory.js +1 -1
- package/dist/components/VersionHistory.js.map +1 -1
- package/dist/components/ui/Avatar.d.ts.map +1 -1
- package/dist/components/ui/Avatar.js.map +1 -1
- package/dist/components/ui/Badge.d.ts.map +1 -1
- package/dist/components/ui/Badge.js.map +1 -1
- package/dist/components/ui/Button.d.ts.map +1 -1
- package/dist/components/ui/Button.js.map +1 -1
- package/dist/components/ui/CommandPalette.d.ts.map +1 -1
- package/dist/components/ui/CommandPalette.js +8 -2
- package/dist/components/ui/CommandPalette.js.map +1 -1
- package/dist/components/ui/ConfirmDialog.d.ts.map +1 -1
- package/dist/components/ui/ConfirmDialog.js.map +1 -1
- package/dist/components/ui/DataTable.d.ts.map +1 -1
- package/dist/components/ui/DataTable.js +1 -3
- package/dist/components/ui/DataTable.js.map +1 -1
- package/dist/components/ui/EmptyState.d.ts.map +1 -1
- package/dist/components/ui/EmptyState.js +1 -1
- package/dist/components/ui/EmptyState.js.map +1 -1
- package/dist/components/ui/Modal.d.ts.map +1 -1
- package/dist/components/ui/Modal.js.map +1 -1
- package/dist/components/ui/Pagination.d.ts +1 -1
- package/dist/components/ui/Pagination.d.ts.map +1 -1
- package/dist/components/ui/Pagination.js +7 -2
- package/dist/components/ui/Pagination.js.map +1 -1
- package/dist/components/ui/SearchInput.d.ts.map +1 -1
- package/dist/components/ui/SearchInput.js.map +1 -1
- package/dist/components/ui/Skeleton.d.ts.map +1 -1
- package/dist/components/ui/Skeleton.js.map +1 -1
- package/dist/components/ui/Toast.d.ts.map +1 -1
- package/dist/components/ui/Toast.js.map +1 -1
- package/dist/components/ui/index.d.ts.map +1 -1
- package/dist/components/ui/index.js.map +1 -1
- package/dist/fields/ArrayField.d.ts.map +1 -1
- package/dist/fields/ArrayField.js +1 -1
- package/dist/fields/ArrayField.js.map +1 -1
- package/dist/fields/BlockBuilderField.d.ts.map +1 -1
- package/dist/fields/BlockBuilderField.js +7 -7
- package/dist/fields/BlockBuilderField.js.map +1 -1
- package/dist/fields/DateField.d.ts.map +1 -1
- package/dist/fields/DateField.js +1 -1
- package/dist/fields/DateField.js.map +1 -1
- package/dist/fields/FieldRenderer.d.ts.map +1 -1
- package/dist/fields/FieldRenderer.js.map +1 -1
- package/dist/fields/GroupField.d.ts.map +1 -1
- package/dist/fields/GroupField.js +1 -1
- package/dist/fields/GroupField.js.map +1 -1
- package/dist/fields/MediaField.d.ts.map +1 -1
- package/dist/fields/MediaField.js +1 -1
- package/dist/fields/MediaField.js.map +1 -1
- package/dist/fields/NavBuilderField.d.ts.map +1 -1
- package/dist/fields/NavBuilderField.js +2 -5
- package/dist/fields/NavBuilderField.js.map +1 -1
- package/dist/fields/NumberField.d.ts +1 -1
- package/dist/fields/NumberField.d.ts.map +1 -1
- package/dist/fields/NumberField.js +2 -2
- package/dist/fields/NumberField.js.map +1 -1
- package/dist/fields/RelationshipField.d.ts.map +1 -1
- package/dist/fields/RelationshipField.js +7 -3
- package/dist/fields/RelationshipField.js.map +1 -1
- package/dist/fields/RichTextField.d.ts +1 -1
- package/dist/fields/RichTextField.d.ts.map +1 -1
- package/dist/fields/RichTextField.js +2 -2
- package/dist/fields/RichTextField.js.map +1 -1
- package/dist/fields/SelectField.d.ts.map +1 -1
- package/dist/fields/SelectField.js +9 -7
- package/dist/fields/SelectField.js.map +1 -1
- package/dist/fields/SlugField.d.ts.map +1 -1
- package/dist/fields/SlugField.js +1 -1
- package/dist/fields/SlugField.js.map +1 -1
- package/dist/fields/TextField.d.ts +1 -1
- package/dist/fields/TextField.d.ts.map +1 -1
- package/dist/fields/TextField.js +2 -2
- package/dist/fields/TextField.js.map +1 -1
- package/dist/fields/ToggleField.d.ts.map +1 -1
- package/dist/fields/ToggleField.js +1 -1
- package/dist/fields/ToggleField.js.map +1 -1
- package/dist/fields/block-types.d.ts.map +1 -1
- package/dist/fields/block-types.js +28 -8
- package/dist/fields/block-types.js.map +1 -1
- package/dist/fields/index.d.ts.map +1 -1
- package/dist/fields/index.js.map +1 -1
- package/dist/hooks/useBuilderState.d.ts.map +1 -1
- package/dist/hooks/useBuilderState.js.map +1 -1
- package/dist/hooks/useContentLock.d.ts.map +1 -1
- package/dist/hooks/useContentLock.js.map +1 -1
- package/dist/hooks/useDebounce.js.map +1 -1
- package/dist/hooks/useKeyboardShortcuts.d.ts.map +1 -1
- package/dist/hooks/useKeyboardShortcuts.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/layout/Header.d.ts.map +1 -1
- package/dist/layout/Header.js.map +1 -1
- package/dist/layout/Layout.d.ts.map +1 -1
- package/dist/layout/Layout.js.map +1 -1
- package/dist/layout/Sidebar.d.ts +1 -1
- package/dist/layout/Sidebar.d.ts.map +1 -1
- package/dist/layout/Sidebar.js +5 -8
- package/dist/layout/Sidebar.js.map +1 -1
- package/dist/lib/api.js.map +1 -1
- package/dist/lib/search.d.ts.map +1 -1
- package/dist/lib/search.js +3 -5
- package/dist/lib/search.js.map +1 -1
- package/dist/lib/useApiData.d.ts.map +1 -1
- package/dist/lib/useApiData.js.map +1 -1
- package/dist/lib/utils.d.ts.map +1 -1
- package/dist/lib/utils.js.map +1 -1
- package/dist/router/index.d.ts.map +1 -1
- package/dist/router/index.js +1 -3
- package/dist/router/index.js.map +1 -1
- package/dist/views/CollectionList.d.ts.map +1 -1
- package/dist/views/CollectionList.js +56 -17
- package/dist/views/CollectionList.js.map +1 -1
- package/dist/views/Dashboard.d.ts.map +1 -1
- package/dist/views/Dashboard.js +26 -13
- package/dist/views/Dashboard.js.map +1 -1
- package/dist/views/DocumentEdit.d.ts +1 -1
- package/dist/views/DocumentEdit.d.ts.map +1 -1
- package/dist/views/DocumentEdit.js +33 -15
- package/dist/views/DocumentEdit.js.map +1 -1
- package/dist/views/ForgotPassword.d.ts.map +1 -1
- package/dist/views/ForgotPassword.js.map +1 -1
- package/dist/views/FormEditor.d.ts.map +1 -1
- package/dist/views/FormEditor.js +8 -2
- package/dist/views/FormEditor.js.map +1 -1
- package/dist/views/FormSubmissions.d.ts.map +1 -1
- package/dist/views/FormSubmissions.js +6 -6
- package/dist/views/FormSubmissions.js.map +1 -1
- package/dist/views/Forms.d.ts.map +1 -1
- package/dist/views/Forms.js.map +1 -1
- package/dist/views/Login.d.ts.map +1 -1
- package/dist/views/Login.js +5 -2
- package/dist/views/Login.js.map +1 -1
- package/dist/views/MediaBrowser.d.ts.map +1 -1
- package/dist/views/MediaBrowser.js +39 -19
- package/dist/views/MediaBrowser.js.map +1 -1
- package/dist/views/PageEditor.d.ts.map +1 -1
- package/dist/views/PageEditor.js.map +1 -1
- package/dist/views/Pages.d.ts.map +1 -1
- package/dist/views/Pages.js +20 -10
- package/dist/views/Pages.js.map +1 -1
- package/dist/views/PostEditor.d.ts.map +1 -1
- package/dist/views/PostEditor.js.map +1 -1
- package/dist/views/Posts.d.ts.map +1 -1
- package/dist/views/Posts.js +13 -7
- package/dist/views/Posts.js.map +1 -1
- package/dist/views/Redirects.d.ts.map +1 -1
- package/dist/views/Redirects.js +17 -5
- package/dist/views/Redirects.js.map +1 -1
- package/dist/views/ResetPassword.d.ts.map +1 -1
- package/dist/views/ResetPassword.js.map +1 -1
- package/dist/views/SEO.d.ts.map +1 -1
- package/dist/views/SEO.js +39 -16
- package/dist/views/SEO.js.map +1 -1
- package/dist/views/ScriptTagEditor.d.ts.map +1 -1
- package/dist/views/ScriptTagEditor.js +2 -1
- package/dist/views/ScriptTagEditor.js.map +1 -1
- package/dist/views/ScriptTags.d.ts.map +1 -1
- package/dist/views/ScriptTags.js.map +1 -1
- package/dist/views/Settings.d.ts.map +1 -1
- package/dist/views/Settings.js +38 -11
- package/dist/views/Settings.js.map +1 -1
- package/dist/views/SetupWizard.d.ts.map +1 -1
- package/dist/views/SetupWizard.js.map +1 -1
- package/dist/views/Users.d.ts.map +1 -1
- package/dist/views/Users.js +5 -3
- package/dist/views/Users.js.map +1 -1
- package/dist/views/page-builder/AIBlockAssist.d.ts.map +1 -1
- package/dist/views/page-builder/AIBlockAssist.js +1 -1
- package/dist/views/page-builder/AIBlockAssist.js.map +1 -1
- package/dist/views/page-builder/AIGenerateDialog.d.ts.map +1 -1
- package/dist/views/page-builder/AIGenerateDialog.js +4 -1
- package/dist/views/page-builder/AIGenerateDialog.js.map +1 -1
- package/dist/views/page-builder/BlockEditor.d.ts.map +1 -1
- package/dist/views/page-builder/BlockEditor.js +1 -1
- package/dist/views/page-builder/BlockEditor.js.map +1 -1
- package/dist/views/page-builder/BlockPicker.d.ts.map +1 -1
- package/dist/views/page-builder/BlockPicker.js.map +1 -1
- package/dist/views/page-builder/BottomBar.d.ts.map +1 -1
- package/dist/views/page-builder/BottomBar.js.map +1 -1
- package/dist/views/page-builder/BuilderToolbar.d.ts.map +1 -1
- package/dist/views/page-builder/BuilderToolbar.js.map +1 -1
- package/dist/views/page-builder/ContextPanel.d.ts.map +1 -1
- package/dist/views/page-builder/ContextPanel.js +4 -1
- package/dist/views/page-builder/ContextPanel.js.map +1 -1
- package/dist/views/page-builder/DesignScore.d.ts.map +1 -1
- package/dist/views/page-builder/DesignScore.js.map +1 -1
- package/dist/views/page-builder/NodeSettings.d.ts.map +1 -1
- package/dist/views/page-builder/NodeSettings.js +1 -1
- package/dist/views/page-builder/NodeSettings.js.map +1 -1
- package/dist/views/page-builder/PageBuilder.d.ts +1 -1
- package/dist/views/page-builder/PageBuilder.d.ts.map +1 -1
- package/dist/views/page-builder/PageBuilder.js +4 -2
- package/dist/views/page-builder/PageBuilder.js.map +1 -1
- package/dist/views/page-builder/PageSettings.d.ts.map +1 -1
- package/dist/views/page-builder/PageSettings.js.map +1 -1
- package/dist/views/page-builder/PageTemplates.d.ts.map +1 -1
- package/dist/views/page-builder/PageTemplates.js.map +1 -1
- package/dist/views/page-builder/SEOPanel.d.ts.map +1 -1
- package/dist/views/page-builder/SEOPanel.js +1 -3
- package/dist/views/page-builder/SEOPanel.js.map +1 -1
- package/dist/views/page-builder/SavedSections.d.ts.map +1 -1
- package/dist/views/page-builder/SavedSections.js +3 -7
- package/dist/views/page-builder/SavedSections.js.map +1 -1
- package/dist/views/page-builder/TemplatePicker.d.ts.map +1 -1
- package/dist/views/page-builder/TemplatePicker.js.map +1 -1
- package/dist/views/page-builder/block-renderers/CTAPreview.d.ts.map +1 -1
- package/dist/views/page-builder/block-renderers/CTAPreview.js +1 -1
- package/dist/views/page-builder/block-renderers/CTAPreview.js.map +1 -1
- package/dist/views/page-builder/block-renderers/CardsPreview.d.ts.map +1 -1
- package/dist/views/page-builder/block-renderers/CardsPreview.js +1 -1
- package/dist/views/page-builder/block-renderers/CardsPreview.js.map +1 -1
- package/dist/views/page-builder/block-renderers/CodePreview.d.ts.map +1 -1
- package/dist/views/page-builder/block-renderers/CodePreview.js +1 -5
- package/dist/views/page-builder/block-renderers/CodePreview.js.map +1 -1
- package/dist/views/page-builder/block-renderers/FAQPreview.d.ts.map +1 -1
- package/dist/views/page-builder/block-renderers/FAQPreview.js +4 -1
- package/dist/views/page-builder/block-renderers/FAQPreview.js.map +1 -1
- package/dist/views/page-builder/block-renderers/FallbackPreview.d.ts.map +1 -1
- package/dist/views/page-builder/block-renderers/FallbackPreview.js.map +1 -1
- package/dist/views/page-builder/block-renderers/FormPreview.d.ts.map +1 -1
- package/dist/views/page-builder/block-renderers/FormPreview.js +2 -2
- package/dist/views/page-builder/block-renderers/FormPreview.js.map +1 -1
- package/dist/views/page-builder/block-renderers/GalleryPreview.d.ts.map +1 -1
- package/dist/views/page-builder/block-renderers/GalleryPreview.js +1 -3
- package/dist/views/page-builder/block-renderers/GalleryPreview.js.map +1 -1
- package/dist/views/page-builder/block-renderers/HeroPreview.d.ts.map +1 -1
- package/dist/views/page-builder/block-renderers/HeroPreview.js.map +1 -1
- package/dist/views/page-builder/block-renderers/ImagePreview.d.ts.map +1 -1
- package/dist/views/page-builder/block-renderers/ImagePreview.js.map +1 -1
- package/dist/views/page-builder/block-renderers/TextPreview.d.ts.map +1 -1
- package/dist/views/page-builder/block-renderers/TextPreview.js +2 -6
- package/dist/views/page-builder/block-renderers/TextPreview.js.map +1 -1
- package/dist/views/page-builder/block-renderers/VideoPreview.d.ts.map +1 -1
- package/dist/views/page-builder/block-renderers/VideoPreview.js +2 -5
- package/dist/views/page-builder/block-renderers/VideoPreview.js.map +1 -1
- package/dist/views/page-builder/block-renderers/index.d.ts.map +1 -1
- package/dist/views/page-builder/block-renderers/index.js.map +1 -1
- package/dist/views/page-builder/canvas/BlockRenderer.d.ts.map +1 -1
- package/dist/views/page-builder/canvas/BlockRenderer.js +1 -5
- package/dist/views/page-builder/canvas/BlockRenderer.js.map +1 -1
- package/dist/views/page-builder/canvas/BuilderCanvas.d.ts.map +1 -1
- package/dist/views/page-builder/canvas/BuilderCanvas.js.map +1 -1
- package/dist/views/page-builder/canvas/ColumnRenderer.d.ts.map +1 -1
- package/dist/views/page-builder/canvas/ColumnRenderer.js +1 -5
- package/dist/views/page-builder/canvas/ColumnRenderer.js.map +1 -1
- package/dist/views/page-builder/canvas/ContainerRenderer.d.ts.map +1 -1
- package/dist/views/page-builder/canvas/ContainerRenderer.js +1 -5
- package/dist/views/page-builder/canvas/ContainerRenderer.js.map +1 -1
- package/dist/views/page-builder/canvas/RowRenderer.d.ts.map +1 -1
- package/dist/views/page-builder/canvas/RowRenderer.js +1 -5
- package/dist/views/page-builder/canvas/RowRenderer.js.map +1 -1
- package/dist/views/page-builder/canvas/SectionRenderer.d.ts.map +1 -1
- package/dist/views/page-builder/canvas/SectionRenderer.js +1 -5
- package/dist/views/page-builder/canvas/SectionRenderer.js.map +1 -1
- package/dist/views/page-builder/canvas/index.d.ts.map +1 -1
- package/dist/views/page-builder/canvas/index.js.map +1 -1
- package/package.json +2 -2
- package/src/AdminRoot.tsx +263 -191
- package/src/__tests__/lib/search.test.ts +60 -69
- package/src/__tests__/lib/utils.test.ts +12 -12
- package/src/__tests__/router/match-route.test.ts +24 -26
- package/src/__tests__/router/strip-base.test.ts +15 -15
- package/src/components/Breadcrumbs.tsx +27 -24
- package/src/components/CommandPalette.tsx +115 -99
- package/src/components/ContentOverviewChart.tsx +19 -14
- package/src/components/ErrorBoundary.tsx +13 -13
- package/src/components/FocalPointPicker.tsx +31 -20
- package/src/components/FolderTree.tsx +172 -139
- package/src/components/LivePreview.tsx +68 -41
- package/src/components/LocaleProvider.tsx +26 -20
- package/src/components/LocaleSwitcher.tsx +9 -11
- package/src/components/MediaPickerModal.tsx +46 -45
- package/src/components/PresenceIndicator.tsx +30 -27
- package/src/components/SEOPanel.tsx +378 -228
- package/src/components/SEOPerformance.tsx +52 -30
- package/src/components/ThemeProvider.tsx +46 -46
- package/src/components/TipTapEditor.tsx +60 -64
- package/src/components/VersionHistory.tsx +63 -52
- package/src/components/ui/Avatar.tsx +8 -8
- package/src/components/ui/Badge.tsx +7 -5
- package/src/components/ui/Button.tsx +24 -13
- package/src/components/ui/CommandPalette.tsx +56 -42
- package/src/components/ui/ConfirmDialog.tsx +14 -14
- package/src/components/ui/DataTable.tsx +37 -39
- package/src/components/ui/EmptyState.tsx +9 -11
- package/src/components/ui/Modal.tsx +21 -15
- package/src/components/ui/Pagination.tsx +34 -19
- package/src/components/ui/SearchInput.tsx +17 -7
- package/src/components/ui/Skeleton.tsx +7 -7
- package/src/components/ui/Toast.tsx +29 -22
- package/src/components/ui/index.ts +24 -24
- package/src/fields/ArrayField.tsx +43 -25
- package/src/fields/BlockBuilderField.tsx +80 -99
- package/src/fields/DateField.tsx +20 -12
- package/src/fields/FieldRenderer.tsx +34 -34
- package/src/fields/GroupField.tsx +8 -10
- package/src/fields/MediaField.tsx +8 -10
- package/src/fields/NavBuilderField.tsx +24 -25
- package/src/fields/NumberField.tsx +21 -14
- package/src/fields/RelationshipField.tsx +105 -91
- package/src/fields/RichTextField.tsx +16 -12
- package/src/fields/SelectField.tsx +42 -34
- package/src/fields/SlugField.tsx +29 -17
- package/src/fields/TextField.tsx +24 -16
- package/src/fields/ToggleField.tsx +7 -9
- package/src/fields/block-types.ts +50 -24
- package/src/fields/index.ts +17 -17
- package/src/hooks/useBuilderState.ts +260 -221
- package/src/hooks/useContentLock.ts +23 -20
- package/src/hooks/useDebounce.ts +7 -7
- package/src/hooks/useKeyboardShortcuts.ts +16 -16
- package/src/index.ts +69 -58
- package/src/layout/Header.tsx +21 -20
- package/src/layout/Layout.tsx +22 -24
- package/src/layout/Sidebar.tsx +107 -72
- package/src/lib/api.ts +34 -34
- package/src/lib/search.ts +30 -34
- package/src/lib/useApiData.ts +65 -62
- package/src/lib/utils.ts +3 -3
- package/src/router/index.ts +33 -35
- package/src/styles/build-input.css +2 -2
- package/src/styles/tailwind.css +1 -1
- package/src/styles/theme.css +7 -1
- package/src/views/CollectionList.tsx +275 -121
- package/src/views/Dashboard.tsx +164 -117
- package/src/views/DocumentEdit.tsx +298 -253
- package/src/views/ForgotPassword.tsx +27 -23
- package/src/views/FormEditor.tsx +165 -99
- package/src/views/FormSubmissions.tsx +261 -117
- package/src/views/Forms.tsx +56 -26
- package/src/views/Login.tsx +107 -84
- package/src/views/MediaBrowser.tsx +717 -523
- package/src/views/PageEditor.tsx +44 -46
- package/src/views/Pages.tsx +312 -149
- package/src/views/PostEditor.tsx +57 -51
- package/src/views/Posts.tsx +206 -74
- package/src/views/Redirects.tsx +173 -117
- package/src/views/ResetPassword.tsx +43 -32
- package/src/views/SEO.tsx +589 -160
- package/src/views/ScriptTagEditor.tsx +69 -69
- package/src/views/ScriptTags.tsx +54 -42
- package/src/views/Settings.tsx +430 -220
- package/src/views/SetupWizard.tsx +69 -46
- package/src/views/Users.tsx +154 -120
- package/src/views/page-builder/AIBlockAssist.tsx +21 -25
- package/src/views/page-builder/AIGenerateDialog.tsx +134 -127
- package/src/views/page-builder/BlockEditor.tsx +94 -96
- package/src/views/page-builder/BlockPicker.tsx +73 -88
- package/src/views/page-builder/BottomBar.tsx +15 -11
- package/src/views/page-builder/BuilderToolbar.tsx +32 -29
- package/src/views/page-builder/ContextPanel.tsx +57 -57
- package/src/views/page-builder/DesignScore.tsx +52 -59
- package/src/views/page-builder/NodeSettings.tsx +59 -59
- package/src/views/page-builder/PageBuilder.tsx +156 -155
- package/src/views/page-builder/PageSettings.tsx +16 -15
- package/src/views/page-builder/PageTemplates.tsx +23 -17
- package/src/views/page-builder/SEOPanel.tsx +90 -111
- package/src/views/page-builder/SavedSections.tsx +99 -105
- package/src/views/page-builder/TemplatePicker.tsx +44 -48
- package/src/views/page-builder/block-renderers/CTAPreview.tsx +11 -13
- package/src/views/page-builder/block-renderers/CardsPreview.tsx +13 -15
- package/src/views/page-builder/block-renderers/CodePreview.tsx +16 -16
- package/src/views/page-builder/block-renderers/FAQPreview.tsx +20 -23
- package/src/views/page-builder/block-renderers/FallbackPreview.tsx +5 -5
- package/src/views/page-builder/block-renderers/FormPreview.tsx +9 -13
- package/src/views/page-builder/block-renderers/GalleryPreview.tsx +22 -28
- package/src/views/page-builder/block-renderers/HeroPreview.tsx +17 -30
- package/src/views/page-builder/block-renderers/ImagePreview.tsx +12 -12
- package/src/views/page-builder/block-renderers/TextPreview.tsx +22 -22
- package/src/views/page-builder/block-renderers/VideoPreview.tsx +13 -18
- package/src/views/page-builder/block-renderers/index.ts +17 -17
- package/src/views/page-builder/canvas/BlockRenderer.tsx +19 -23
- package/src/views/page-builder/canvas/BuilderCanvas.tsx +17 -20
- package/src/views/page-builder/canvas/ColumnRenderer.tsx +22 -26
- package/src/views/page-builder/canvas/ContainerRenderer.tsx +20 -24
- package/src/views/page-builder/canvas/RowRenderer.tsx +19 -23
- package/src/views/page-builder/canvas/SectionRenderer.tsx +30 -34
- package/src/views/page-builder/canvas/index.ts +2 -2
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
'use client'
|
|
1
|
+
'use client'
|
|
2
2
|
|
|
3
|
-
import { useState, useMemo } from 'react'
|
|
4
|
-
import { analyzeSEO } from '@actuate-media/cms-core'
|
|
3
|
+
import { useState, useMemo } from 'react'
|
|
4
|
+
import { analyzeSEO } from '@actuate-media/cms-core'
|
|
5
5
|
import type {
|
|
6
6
|
PageNode,
|
|
7
7
|
BuilderSEOAnalysis,
|
|
8
8
|
BuilderSEOCheck,
|
|
9
9
|
BuilderReadabilityResult,
|
|
10
|
-
} from '@actuate-media/cms-core'
|
|
11
|
-
import type { PageSettings } from '../../hooks/useBuilderState.js'
|
|
10
|
+
} from '@actuate-media/cms-core'
|
|
11
|
+
import type { PageSettings } from '../../hooks/useBuilderState.js'
|
|
12
12
|
import {
|
|
13
13
|
CheckCircle2,
|
|
14
14
|
AlertCircle,
|
|
@@ -23,61 +23,56 @@ import {
|
|
|
23
23
|
BarChart3,
|
|
24
24
|
Target,
|
|
25
25
|
Eye,
|
|
26
|
-
} from 'lucide-react'
|
|
26
|
+
} from 'lucide-react'
|
|
27
27
|
|
|
28
28
|
export interface BuilderSEOPanelProps {
|
|
29
|
-
tree: PageNode
|
|
30
|
-
pageSettings: PageSettings
|
|
31
|
-
onPageSettingsChange: (settings: Partial<PageSettings>) => void
|
|
32
|
-
selectedNodeId: string | null
|
|
29
|
+
tree: PageNode
|
|
30
|
+
pageSettings: PageSettings
|
|
31
|
+
onPageSettingsChange: (settings: Partial<PageSettings>) => void
|
|
32
|
+
selectedNodeId: string | null
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
function getScoreColor(score: number): string {
|
|
36
|
-
if (score >= 70) return 'text-green-500'
|
|
37
|
-
if (score >= 40) return 'text-amber-500'
|
|
38
|
-
return 'text-red-500'
|
|
36
|
+
if (score >= 70) return 'text-green-500'
|
|
37
|
+
if (score >= 40) return 'text-amber-500'
|
|
38
|
+
return 'text-red-500'
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
function getRingStrokeColor(score: number): string {
|
|
42
|
-
if (score >= 70) return 'rgb(34, 197, 94)'
|
|
43
|
-
if (score >= 40) return 'rgb(245, 158, 11)'
|
|
44
|
-
return 'rgb(239, 68, 68)'
|
|
42
|
+
if (score >= 70) return 'rgb(34, 197, 94)'
|
|
43
|
+
if (score >= 40) return 'rgb(245, 158, 11)'
|
|
44
|
+
return 'rgb(239, 68, 68)'
|
|
45
45
|
}
|
|
46
46
|
|
|
47
47
|
function getScoreLabel(score: number): string {
|
|
48
|
-
if (score >= 80) return 'Excellent'
|
|
49
|
-
if (score >= 70) return 'Good'
|
|
50
|
-
if (score >= 50) return 'Needs Work'
|
|
51
|
-
return 'Poor'
|
|
48
|
+
if (score >= 80) return 'Excellent'
|
|
49
|
+
if (score >= 70) return 'Good'
|
|
50
|
+
if (score >= 50) return 'Needs Work'
|
|
51
|
+
return 'Poor'
|
|
52
52
|
}
|
|
53
53
|
|
|
54
54
|
function StatusIcon({ status }: { status: BuilderSEOCheck['status'] }) {
|
|
55
55
|
switch (status) {
|
|
56
56
|
case 'good':
|
|
57
|
-
return <CheckCircle2 size={14} className="text-green-500 shrink-0"
|
|
57
|
+
return <CheckCircle2 size={14} className="text-green-500 shrink-0" />
|
|
58
58
|
case 'warning':
|
|
59
|
-
return <AlertCircle size={14} className="text-amber-500 shrink-0"
|
|
59
|
+
return <AlertCircle size={14} className="text-amber-500 shrink-0" />
|
|
60
60
|
case 'error':
|
|
61
|
-
return <XCircle size={14} className="text-red-500 shrink-0"
|
|
61
|
+
return <XCircle size={14} className="text-red-500 shrink-0" />
|
|
62
62
|
}
|
|
63
63
|
}
|
|
64
64
|
|
|
65
65
|
function ScoreRing({ score }: { score: number }) {
|
|
66
|
-
const radius = 32
|
|
67
|
-
const strokeWidth = 6
|
|
68
|
-
const circumference = 2 * Math.PI * radius
|
|
69
|
-
const progress = Math.min(score, 100) / 100
|
|
70
|
-
const dashOffset = circumference * (1 - progress)
|
|
71
|
-
const size = (radius + strokeWidth) * 2
|
|
66
|
+
const radius = 32
|
|
67
|
+
const strokeWidth = 6
|
|
68
|
+
const circumference = 2 * Math.PI * radius
|
|
69
|
+
const progress = Math.min(score, 100) / 100
|
|
70
|
+
const dashOffset = circumference * (1 - progress)
|
|
71
|
+
const size = (radius + strokeWidth) * 2
|
|
72
72
|
|
|
73
73
|
return (
|
|
74
74
|
<div className="relative">
|
|
75
|
-
<svg
|
|
76
|
-
width={size}
|
|
77
|
-
height={size}
|
|
78
|
-
viewBox={`0 0 ${size} ${size}`}
|
|
79
|
-
className="-rotate-90"
|
|
80
|
-
>
|
|
75
|
+
<svg width={size} height={size} viewBox={`0 0 ${size} ${size}`} className="-rotate-90">
|
|
81
76
|
<circle
|
|
82
77
|
cx={size / 2}
|
|
83
78
|
cy={size / 2}
|
|
@@ -100,18 +95,16 @@ function ScoreRing({ score }: { score: number }) {
|
|
|
100
95
|
/>
|
|
101
96
|
</svg>
|
|
102
97
|
<div className="absolute inset-0 flex items-center justify-center">
|
|
103
|
-
<span className={`text-lg font-medium ${getScoreColor(score)}`}>
|
|
104
|
-
{score}
|
|
105
|
-
</span>
|
|
98
|
+
<span className={`text-lg font-medium ${getScoreColor(score)}`}>{score}</span>
|
|
106
99
|
</div>
|
|
107
100
|
</div>
|
|
108
|
-
)
|
|
101
|
+
)
|
|
109
102
|
}
|
|
110
103
|
|
|
111
104
|
function ScoreSummary({ checks }: { checks: BuilderSEOCheck[] }) {
|
|
112
|
-
const passed = checks.filter((c) => c.status === 'good').length
|
|
113
|
-
const warnings = checks.filter((c) => c.status === 'warning').length
|
|
114
|
-
const errors = checks.filter((c) => c.status === 'error').length
|
|
105
|
+
const passed = checks.filter((c) => c.status === 'good').length
|
|
106
|
+
const warnings = checks.filter((c) => c.status === 'warning').length
|
|
107
|
+
const errors = checks.filter((c) => c.status === 'error').length
|
|
115
108
|
|
|
116
109
|
return (
|
|
117
110
|
<div className="flex flex-col gap-1">
|
|
@@ -128,7 +121,7 @@ function ScoreSummary({ checks }: { checks: BuilderSEOCheck[] }) {
|
|
|
128
121
|
<span className="text-xs text-muted-foreground">{errors} issues</span>
|
|
129
122
|
</div>
|
|
130
123
|
</div>
|
|
131
|
-
)
|
|
124
|
+
)
|
|
132
125
|
}
|
|
133
126
|
|
|
134
127
|
function CollapsibleSection({
|
|
@@ -138,11 +131,11 @@ function CollapsibleSection({
|
|
|
138
131
|
onToggle,
|
|
139
132
|
children,
|
|
140
133
|
}: {
|
|
141
|
-
title: string
|
|
142
|
-
icon: typeof Search
|
|
143
|
-
expanded: boolean
|
|
144
|
-
onToggle: () => void
|
|
145
|
-
children: React.ReactNode
|
|
134
|
+
title: string
|
|
135
|
+
icon: typeof Search
|
|
136
|
+
expanded: boolean
|
|
137
|
+
onToggle: () => void
|
|
138
|
+
children: React.ReactNode
|
|
146
139
|
}) {
|
|
147
140
|
return (
|
|
148
141
|
<div className="border-b border-border last:border-b-0">
|
|
@@ -164,7 +157,7 @@ function CollapsibleSection({
|
|
|
164
157
|
</button>
|
|
165
158
|
{expanded && <div className="px-4 pb-4">{children}</div>}
|
|
166
159
|
</div>
|
|
167
|
-
)
|
|
160
|
+
)
|
|
168
161
|
}
|
|
169
162
|
|
|
170
163
|
function SEOChecksList({ checks }: { checks: BuilderSEOCheck[] }) {
|
|
@@ -180,15 +173,16 @@ function SEOChecksList({ checks }: { checks: BuilderSEOCheck[] }) {
|
|
|
180
173
|
</div>
|
|
181
174
|
))}
|
|
182
175
|
</div>
|
|
183
|
-
)
|
|
176
|
+
)
|
|
184
177
|
}
|
|
185
178
|
|
|
186
179
|
function ReadabilityGrid({ readability }: { readability: BuilderReadabilityResult }) {
|
|
187
|
-
const fleschLabel =
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
180
|
+
const fleschLabel =
|
|
181
|
+
readability.fleschScore >= 60
|
|
182
|
+
? 'Easy'
|
|
183
|
+
: readability.fleschScore >= 30
|
|
184
|
+
? 'Moderate'
|
|
185
|
+
: 'Difficult'
|
|
192
186
|
|
|
193
187
|
return (
|
|
194
188
|
<div className="grid grid-cols-2 gap-3">
|
|
@@ -208,9 +202,7 @@ function ReadabilityGrid({ readability }: { readability: BuilderReadabilityResul
|
|
|
208
202
|
<Type size={12} className="text-muted-foreground" />
|
|
209
203
|
<span className="text-xs text-muted-foreground">Word Count</span>
|
|
210
204
|
</div>
|
|
211
|
-
<span className="text-sm font-medium text-foreground">
|
|
212
|
-
{readability.wordCount}
|
|
213
|
-
</span>
|
|
205
|
+
<span className="text-sm font-medium text-foreground">{readability.wordCount}</span>
|
|
214
206
|
<span className="text-xs text-muted-foreground">
|
|
215
207
|
{readability.wordCount >= 300 ? 'Good length' : 'Short'}
|
|
216
208
|
</span>
|
|
@@ -234,15 +226,11 @@ function ReadabilityGrid({ readability }: { readability: BuilderReadabilityResul
|
|
|
234
226
|
<Clock size={12} className="text-muted-foreground" />
|
|
235
227
|
<span className="text-xs text-muted-foreground">Reading Time</span>
|
|
236
228
|
</div>
|
|
237
|
-
<span className="text-sm font-medium text-foreground">
|
|
238
|
-
|
|
239
|
-
</span>
|
|
240
|
-
<span className="text-xs text-muted-foreground">
|
|
241
|
-
~{readability.wordCount} words
|
|
242
|
-
</span>
|
|
229
|
+
<span className="text-sm font-medium text-foreground">{readability.readingTime} min</span>
|
|
230
|
+
<span className="text-xs text-muted-foreground">~{readability.wordCount} words</span>
|
|
243
231
|
</div>
|
|
244
232
|
</div>
|
|
245
|
-
)
|
|
233
|
+
)
|
|
246
234
|
}
|
|
247
235
|
|
|
248
236
|
function PerBlockHints({ hints }: { hints: BuilderSEOCheck[] }) {
|
|
@@ -258,25 +246,27 @@ function PerBlockHints({ hints }: { hints: BuilderSEOCheck[] }) {
|
|
|
258
246
|
</div>
|
|
259
247
|
))}
|
|
260
248
|
</div>
|
|
261
|
-
)
|
|
249
|
+
)
|
|
262
250
|
}
|
|
263
251
|
|
|
264
252
|
function BasicSEOFields({
|
|
265
253
|
pageSettings,
|
|
266
254
|
onPageSettingsChange,
|
|
267
255
|
}: {
|
|
268
|
-
pageSettings: PageSettings
|
|
269
|
-
onPageSettingsChange: (settings: Partial<PageSettings>) => void
|
|
256
|
+
pageSettings: PageSettings
|
|
257
|
+
onPageSettingsChange: (settings: Partial<PageSettings>) => void
|
|
270
258
|
}) {
|
|
271
|
-
const metaTitleLength = (pageSettings.metaTitle || '').length
|
|
272
|
-
const metaDescLength = (pageSettings.metaDescription || '').length
|
|
259
|
+
const metaTitleLength = (pageSettings.metaTitle || '').length
|
|
260
|
+
const metaDescLength = (pageSettings.metaDescription || '').length
|
|
273
261
|
|
|
274
262
|
return (
|
|
275
263
|
<div className="flex flex-col gap-4">
|
|
276
264
|
<div className="flex flex-col gap-1.5">
|
|
277
265
|
<div className="flex items-center justify-between">
|
|
278
266
|
<label className="text-xs font-medium text-foreground">Meta Title</label>
|
|
279
|
-
<span
|
|
267
|
+
<span
|
|
268
|
+
className={`text-xs ${metaTitleLength > 60 ? 'text-red-500' : metaTitleLength > 0 ? 'text-muted-foreground' : 'text-muted-foreground'}`}
|
|
269
|
+
>
|
|
280
270
|
{metaTitleLength}/60
|
|
281
271
|
</span>
|
|
282
272
|
</div>
|
|
@@ -292,7 +282,9 @@ function BasicSEOFields({
|
|
|
292
282
|
<div className="flex flex-col gap-1.5">
|
|
293
283
|
<div className="flex items-center justify-between">
|
|
294
284
|
<label className="text-xs font-medium text-foreground">Meta Description</label>
|
|
295
|
-
<span
|
|
285
|
+
<span
|
|
286
|
+
className={`text-xs ${metaDescLength > 160 ? 'text-red-500' : metaDescLength > 0 ? 'text-muted-foreground' : 'text-muted-foreground'}`}
|
|
287
|
+
>
|
|
296
288
|
{metaDescLength}/160
|
|
297
289
|
</span>
|
|
298
290
|
</div>
|
|
@@ -316,46 +308,36 @@ function BasicSEOFields({
|
|
|
316
308
|
/>
|
|
317
309
|
</div>
|
|
318
310
|
</div>
|
|
319
|
-
)
|
|
311
|
+
)
|
|
320
312
|
}
|
|
321
313
|
|
|
322
314
|
function SearchPreview({ pageSettings }: { pageSettings: PageSettings }) {
|
|
323
|
-
const title = pageSettings.metaTitle || pageSettings.title || 'Untitled Page'
|
|
324
|
-
const description = pageSettings.metaDescription || 'No description set'
|
|
325
|
-
const slug = pageSettings.slug || 'page'
|
|
315
|
+
const title = pageSettings.metaTitle || pageSettings.title || 'Untitled Page'
|
|
316
|
+
const description = pageSettings.metaDescription || 'No description set'
|
|
317
|
+
const slug = pageSettings.slug || 'page'
|
|
326
318
|
|
|
327
319
|
return (
|
|
328
320
|
<div className="bg-background rounded-md border border-border p-4">
|
|
329
321
|
<p className="text-xs text-muted-foreground mb-2">Google Search Preview</p>
|
|
330
322
|
<div className="flex flex-col gap-1">
|
|
331
|
-
<p className="text-sm text-primary truncate">
|
|
332
|
-
|
|
333
|
-
</p>
|
|
334
|
-
<p className="text-xs text-green-600 truncate">
|
|
335
|
-
example.com/{slug}
|
|
336
|
-
</p>
|
|
337
|
-
<p className="text-xs text-muted-foreground line-clamp-2">
|
|
338
|
-
{description}
|
|
339
|
-
</p>
|
|
323
|
+
<p className="text-sm text-primary truncate">{title}</p>
|
|
324
|
+
<p className="text-xs text-green-600 truncate">example.com/{slug}</p>
|
|
325
|
+
<p className="text-xs text-muted-foreground line-clamp-2">{description}</p>
|
|
340
326
|
</div>
|
|
341
327
|
</div>
|
|
342
|
-
)
|
|
328
|
+
)
|
|
343
329
|
}
|
|
344
330
|
|
|
345
331
|
function SocialPreview({ pageSettings }: { pageSettings: PageSettings }) {
|
|
346
|
-
const title = pageSettings.metaTitle || pageSettings.title || 'Untitled Page'
|
|
347
|
-
const description = pageSettings.metaDescription || 'No description set'
|
|
332
|
+
const title = pageSettings.metaTitle || pageSettings.title || 'Untitled Page'
|
|
333
|
+
const description = pageSettings.metaDescription || 'No description set'
|
|
348
334
|
|
|
349
335
|
return (
|
|
350
336
|
<div className="bg-background rounded-md border border-border overflow-hidden">
|
|
351
337
|
<p className="text-xs text-muted-foreground px-4 pt-3 pb-2">Open Graph Preview</p>
|
|
352
338
|
{pageSettings.ogImage && (
|
|
353
339
|
<div className="w-full h-32 bg-muted flex items-center justify-center overflow-hidden">
|
|
354
|
-
<img
|
|
355
|
-
src={pageSettings.ogImage}
|
|
356
|
-
alt="OG preview"
|
|
357
|
-
className="w-full h-full object-cover"
|
|
358
|
-
/>
|
|
340
|
+
<img src={pageSettings.ogImage} alt="OG preview" className="w-full h-full object-cover" />
|
|
359
341
|
</div>
|
|
360
342
|
)}
|
|
361
343
|
{!pageSettings.ogImage && (
|
|
@@ -369,7 +351,7 @@ function SocialPreview({ pageSettings }: { pageSettings: PageSettings }) {
|
|
|
369
351
|
<p className="text-xs text-muted-foreground line-clamp-2">{description}</p>
|
|
370
352
|
</div>
|
|
371
353
|
</div>
|
|
372
|
-
)
|
|
354
|
+
)
|
|
373
355
|
}
|
|
374
356
|
|
|
375
357
|
export function BuilderSEOPanel({
|
|
@@ -381,22 +363,20 @@ export function BuilderSEOPanel({
|
|
|
381
363
|
const analysis = useMemo<BuilderSEOAnalysis>(
|
|
382
364
|
() => analyzeSEO(tree, pageSettings as any),
|
|
383
365
|
[tree, pageSettings],
|
|
384
|
-
)
|
|
366
|
+
)
|
|
385
367
|
|
|
386
|
-
const [expandedSections, setExpandedSections] = useState<string[]>(['checks'])
|
|
368
|
+
const [expandedSections, setExpandedSections] = useState<string[]>(['checks'])
|
|
387
369
|
|
|
388
370
|
const toggleSection = (section: string) => {
|
|
389
371
|
setExpandedSections((prev) =>
|
|
390
|
-
prev.includes(section)
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
);
|
|
394
|
-
};
|
|
372
|
+
prev.includes(section) ? prev.filter((s) => s !== section) : [...prev, section],
|
|
373
|
+
)
|
|
374
|
+
}
|
|
395
375
|
|
|
396
376
|
const blockHints = useMemo(() => {
|
|
397
|
-
if (!selectedNodeId) return []
|
|
398
|
-
return analysis.perBlockHints.get(selectedNodeId) || []
|
|
399
|
-
}, [analysis.perBlockHints, selectedNodeId])
|
|
377
|
+
if (!selectedNodeId) return []
|
|
378
|
+
return analysis.perBlockHints.get(selectedNodeId) || []
|
|
379
|
+
}, [analysis.perBlockHints, selectedNodeId])
|
|
400
380
|
|
|
401
381
|
if (!tree.children || tree.children.length === 0) {
|
|
402
382
|
return (
|
|
@@ -407,7 +387,7 @@ export function BuilderSEOPanel({
|
|
|
407
387
|
Add content to your page to see SEO analysis
|
|
408
388
|
</p>
|
|
409
389
|
</div>
|
|
410
|
-
)
|
|
390
|
+
)
|
|
411
391
|
}
|
|
412
392
|
|
|
413
393
|
return (
|
|
@@ -415,7 +395,9 @@ export function BuilderSEOPanel({
|
|
|
415
395
|
<div className="flex items-center gap-4 px-4 py-5 border-b border-border">
|
|
416
396
|
<ScoreRing score={analysis.score} />
|
|
417
397
|
<div className="flex flex-col gap-1">
|
|
418
|
-
<span className="text-xs font-medium text-foreground">
|
|
398
|
+
<span className="text-xs font-medium text-foreground">
|
|
399
|
+
{getScoreLabel(analysis.score)}
|
|
400
|
+
</span>
|
|
419
401
|
<ScoreSummary checks={analysis.checks} />
|
|
420
402
|
</div>
|
|
421
403
|
</div>
|
|
@@ -456,10 +438,7 @@ export function BuilderSEOPanel({
|
|
|
456
438
|
expanded={expandedSections.includes('basicSeo')}
|
|
457
439
|
onToggle={() => toggleSection('basicSeo')}
|
|
458
440
|
>
|
|
459
|
-
<BasicSEOFields
|
|
460
|
-
pageSettings={pageSettings}
|
|
461
|
-
onPageSettingsChange={onPageSettingsChange}
|
|
462
|
-
/>
|
|
441
|
+
<BasicSEOFields pageSettings={pageSettings} onPageSettingsChange={onPageSettingsChange} />
|
|
463
442
|
</CollapsibleSection>
|
|
464
443
|
|
|
465
444
|
<CollapsibleSection
|
|
@@ -481,5 +460,5 @@ export function BuilderSEOPanel({
|
|
|
481
460
|
</CollapsibleSection>
|
|
482
461
|
</div>
|
|
483
462
|
</div>
|
|
484
|
-
)
|
|
463
|
+
)
|
|
485
464
|
}
|