@actuate-media/cms-admin 0.7.3 → 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 +95 -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/actuate-admin.css +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.d.ts.map +1 -1
- package/dist/lib/api.js +33 -4
- 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 +94 -3
- 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 +25 -3
- 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 +302 -177
- 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 +58 -30
- 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 +258 -81
- 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 +164 -146
- 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 { analyzeDesign } from '@actuate-media/cms-core'
|
|
3
|
+
import { useState, useMemo } from 'react'
|
|
4
|
+
import { analyzeDesign } from '@actuate-media/cms-core'
|
|
5
5
|
import type {
|
|
6
6
|
PageNode,
|
|
7
7
|
DesignAnalysis,
|
|
8
8
|
DesignCategory,
|
|
9
9
|
BuilderDesignCheck,
|
|
10
10
|
DesignSuggestion,
|
|
11
|
-
} from '@actuate-media/cms-core'
|
|
11
|
+
} from '@actuate-media/cms-core'
|
|
12
12
|
import {
|
|
13
13
|
CheckCircle2,
|
|
14
14
|
AlertCircle,
|
|
@@ -17,47 +17,47 @@ import {
|
|
|
17
17
|
ChevronUp,
|
|
18
18
|
Lightbulb,
|
|
19
19
|
Palette,
|
|
20
|
-
} from 'lucide-react'
|
|
20
|
+
} from 'lucide-react'
|
|
21
21
|
|
|
22
22
|
export interface DesignScorePanelProps {
|
|
23
|
-
tree: PageNode
|
|
23
|
+
tree: PageNode
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
function getScoreColor(score: number, max: number): string {
|
|
27
|
-
const ratio = max > 0 ? score / max : 0
|
|
28
|
-
if (ratio >= 0.8) return 'text-green-500'
|
|
29
|
-
if (ratio >= 0.5) return 'text-amber-500'
|
|
30
|
-
return 'text-red-500'
|
|
27
|
+
const ratio = max > 0 ? score / max : 0
|
|
28
|
+
if (ratio >= 0.8) return 'text-green-500'
|
|
29
|
+
if (ratio >= 0.5) return 'text-amber-500'
|
|
30
|
+
return 'text-red-500'
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
function getBarColor(score: number, max: number): string {
|
|
34
|
-
const ratio = max > 0 ? score / max : 0
|
|
35
|
-
if (ratio >= 0.8) return 'bg-green-500'
|
|
36
|
-
if (ratio >= 0.5) return 'bg-amber-500'
|
|
37
|
-
return 'bg-red-500'
|
|
34
|
+
const ratio = max > 0 ? score / max : 0
|
|
35
|
+
if (ratio >= 0.8) return 'bg-green-500'
|
|
36
|
+
if (ratio >= 0.5) return 'bg-amber-500'
|
|
37
|
+
return 'bg-red-500'
|
|
38
38
|
}
|
|
39
39
|
|
|
40
40
|
function getScoreLabel(score: number): string {
|
|
41
|
-
if (score >= 80) return 'Excellent'
|
|
42
|
-
if (score >= 65) return 'Good'
|
|
43
|
-
if (score >= 50) return 'Needs Work'
|
|
44
|
-
return 'Poor'
|
|
41
|
+
if (score >= 80) return 'Excellent'
|
|
42
|
+
if (score >= 65) return 'Good'
|
|
43
|
+
if (score >= 50) return 'Needs Work'
|
|
44
|
+
return 'Poor'
|
|
45
45
|
}
|
|
46
46
|
|
|
47
47
|
function getRingStrokeColor(score: number): string {
|
|
48
|
-
if (score >= 80) return 'rgb(34, 197, 94)'
|
|
49
|
-
if (score >= 50) return 'rgb(245, 158, 11)'
|
|
50
|
-
return 'rgb(239, 68, 68)'
|
|
48
|
+
if (score >= 80) return 'rgb(34, 197, 94)'
|
|
49
|
+
if (score >= 50) return 'rgb(245, 158, 11)'
|
|
50
|
+
return 'rgb(239, 68, 68)'
|
|
51
51
|
}
|
|
52
52
|
|
|
53
53
|
function StatusIcon({ status }: { status: BuilderDesignCheck['status'] }) {
|
|
54
54
|
switch (status) {
|
|
55
55
|
case 'good':
|
|
56
|
-
return <CheckCircle2 size={14} className="text-green-500 shrink-0"
|
|
56
|
+
return <CheckCircle2 size={14} className="text-green-500 shrink-0" />
|
|
57
57
|
case 'warning':
|
|
58
|
-
return <AlertCircle size={14} className="text-amber-500 shrink-0"
|
|
58
|
+
return <AlertCircle size={14} className="text-amber-500 shrink-0" />
|
|
59
59
|
case 'error':
|
|
60
|
-
return <XCircle size={14} className="text-red-500 shrink-0"
|
|
60
|
+
return <XCircle size={14} className="text-red-500 shrink-0" />
|
|
61
61
|
}
|
|
62
62
|
}
|
|
63
63
|
|
|
@@ -66,32 +66,27 @@ function SeverityBadge({ severity }: { severity: DesignSuggestion['severity'] })
|
|
|
66
66
|
important: 'bg-red-100 text-red-700',
|
|
67
67
|
suggestion: 'bg-amber-100 text-amber-700',
|
|
68
68
|
info: 'bg-blue-100 text-blue-700',
|
|
69
|
-
}
|
|
69
|
+
}
|
|
70
70
|
|
|
71
71
|
return (
|
|
72
72
|
<span className={`inline-block px-1.5 py-0.5 rounded text-xs font-medium ${classes[severity]}`}>
|
|
73
73
|
{severity}
|
|
74
74
|
</span>
|
|
75
|
-
)
|
|
75
|
+
)
|
|
76
76
|
}
|
|
77
77
|
|
|
78
78
|
function ScoreRing({ score }: { score: number }) {
|
|
79
|
-
const radius = 32
|
|
80
|
-
const strokeWidth = 6
|
|
81
|
-
const circumference = 2 * Math.PI * radius
|
|
82
|
-
const progress = Math.min(score, 100) / 100
|
|
83
|
-
const dashOffset = circumference * (1 - progress)
|
|
84
|
-
const size = (radius + strokeWidth) * 2
|
|
79
|
+
const radius = 32
|
|
80
|
+
const strokeWidth = 6
|
|
81
|
+
const circumference = 2 * Math.PI * radius
|
|
82
|
+
const progress = Math.min(score, 100) / 100
|
|
83
|
+
const dashOffset = circumference * (1 - progress)
|
|
84
|
+
const size = (radius + strokeWidth) * 2
|
|
85
85
|
|
|
86
86
|
return (
|
|
87
87
|
<div className="flex flex-col items-center gap-2">
|
|
88
88
|
<div className="relative">
|
|
89
|
-
<svg
|
|
90
|
-
width={size}
|
|
91
|
-
height={size}
|
|
92
|
-
viewBox={`0 0 ${size} ${size}`}
|
|
93
|
-
className="-rotate-90"
|
|
94
|
-
>
|
|
89
|
+
<svg width={size} height={size} viewBox={`0 0 ${size} ${size}`} className="-rotate-90">
|
|
95
90
|
<circle
|
|
96
91
|
cx={size / 2}
|
|
97
92
|
cy={size / 2}
|
|
@@ -114,14 +109,12 @@ function ScoreRing({ score }: { score: number }) {
|
|
|
114
109
|
/>
|
|
115
110
|
</svg>
|
|
116
111
|
<div className="absolute inset-0 flex items-center justify-center">
|
|
117
|
-
<span className={`text-lg font-medium ${getScoreColor(score, 100)}`}>
|
|
118
|
-
{score}
|
|
119
|
-
</span>
|
|
112
|
+
<span className={`text-lg font-medium ${getScoreColor(score, 100)}`}>{score}</span>
|
|
120
113
|
</div>
|
|
121
114
|
</div>
|
|
122
115
|
<span className="text-xs text-muted-foreground">{getScoreLabel(score)}</span>
|
|
123
116
|
</div>
|
|
124
|
-
)
|
|
117
|
+
)
|
|
125
118
|
}
|
|
126
119
|
|
|
127
120
|
function CategoryRow({
|
|
@@ -129,11 +122,11 @@ function CategoryRow({
|
|
|
129
122
|
expanded,
|
|
130
123
|
onToggle,
|
|
131
124
|
}: {
|
|
132
|
-
category: DesignCategory
|
|
133
|
-
expanded: boolean
|
|
134
|
-
onToggle: () => void
|
|
125
|
+
category: DesignCategory
|
|
126
|
+
expanded: boolean
|
|
127
|
+
onToggle: () => void
|
|
135
128
|
}) {
|
|
136
|
-
const percentage = category.maxScore > 0 ? (category.score / category.maxScore) * 100 : 0
|
|
129
|
+
const percentage = category.maxScore > 0 ? (category.score / category.maxScore) * 100 : 0
|
|
137
130
|
|
|
138
131
|
return (
|
|
139
132
|
<div className="border-b border-border last:border-b-0">
|
|
@@ -178,7 +171,7 @@ function CategoryRow({
|
|
|
178
171
|
</div>
|
|
179
172
|
)}
|
|
180
173
|
</div>
|
|
181
|
-
)
|
|
174
|
+
)
|
|
182
175
|
}
|
|
183
176
|
|
|
184
177
|
function SuggestionsList({ suggestions }: { suggestions: DesignSuggestion[] }) {
|
|
@@ -187,11 +180,11 @@ function SuggestionsList({ suggestions }: { suggestions: DesignSuggestion[] }) {
|
|
|
187
180
|
important: 0,
|
|
188
181
|
suggestion: 1,
|
|
189
182
|
info: 2,
|
|
190
|
-
}
|
|
191
|
-
return [...suggestions].sort((a, b) => order[a.severity] - order[b.severity])
|
|
192
|
-
}, [suggestions])
|
|
183
|
+
}
|
|
184
|
+
return [...suggestions].sort((a, b) => order[a.severity] - order[b.severity])
|
|
185
|
+
}, [suggestions])
|
|
193
186
|
|
|
194
|
-
if (sorted.length === 0) return null
|
|
187
|
+
if (sorted.length === 0) return null
|
|
195
188
|
|
|
196
189
|
return (
|
|
197
190
|
<div className="px-4 py-3 border-t border-border">
|
|
@@ -210,18 +203,18 @@ function SuggestionsList({ suggestions }: { suggestions: DesignSuggestion[] }) {
|
|
|
210
203
|
))}
|
|
211
204
|
</div>
|
|
212
205
|
</div>
|
|
213
|
-
)
|
|
206
|
+
)
|
|
214
207
|
}
|
|
215
208
|
|
|
216
209
|
export function DesignScorePanel({ tree }: DesignScorePanelProps) {
|
|
217
|
-
const analysis = useMemo(() => analyzeDesign(tree), [tree])
|
|
218
|
-
const [expandedCategories, setExpandedCategories] = useState<string[]>([])
|
|
210
|
+
const analysis = useMemo(() => analyzeDesign(tree), [tree])
|
|
211
|
+
const [expandedCategories, setExpandedCategories] = useState<string[]>([])
|
|
219
212
|
|
|
220
213
|
const toggleCategory = (name: string) => {
|
|
221
214
|
setExpandedCategories((prev) =>
|
|
222
|
-
prev.includes(name) ? prev.filter((n) => n !== name) : [...prev, name]
|
|
223
|
-
)
|
|
224
|
-
}
|
|
215
|
+
prev.includes(name) ? prev.filter((n) => n !== name) : [...prev, name],
|
|
216
|
+
)
|
|
217
|
+
}
|
|
225
218
|
|
|
226
219
|
if (!tree.children || tree.children.length === 0) {
|
|
227
220
|
return (
|
|
@@ -232,7 +225,7 @@ export function DesignScorePanel({ tree }: DesignScorePanelProps) {
|
|
|
232
225
|
Add sections to your page to see the design analysis
|
|
233
226
|
</p>
|
|
234
227
|
</div>
|
|
235
|
-
)
|
|
228
|
+
)
|
|
236
229
|
}
|
|
237
230
|
|
|
238
231
|
return (
|
|
@@ -254,5 +247,5 @@ export function DesignScorePanel({ tree }: DesignScorePanelProps) {
|
|
|
254
247
|
|
|
255
248
|
<SuggestionsList suggestions={analysis.suggestions} />
|
|
256
249
|
</div>
|
|
257
|
-
)
|
|
250
|
+
)
|
|
258
251
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
'use client'
|
|
1
|
+
'use client'
|
|
2
2
|
|
|
3
|
-
import { useState, useCallback } from 'react'
|
|
3
|
+
import { useState, useCallback } from 'react'
|
|
4
4
|
import {
|
|
5
5
|
ArrowUp,
|
|
6
6
|
ArrowDown,
|
|
@@ -13,30 +13,31 @@ import {
|
|
|
13
13
|
ArrowUpFromLine,
|
|
14
14
|
ArrowDownToLine,
|
|
15
15
|
Minus,
|
|
16
|
-
} from 'lucide-react'
|
|
17
|
-
import * as SwitchPrimitive from '@radix-ui/react-switch'
|
|
16
|
+
} from 'lucide-react'
|
|
17
|
+
import * as SwitchPrimitive from '@radix-ui/react-switch'
|
|
18
18
|
import type {
|
|
19
19
|
BuilderNode,
|
|
20
20
|
SectionNode,
|
|
21
21
|
ContainerNode,
|
|
22
22
|
RowNode,
|
|
23
23
|
ColumnNode,
|
|
24
|
-
} from '@actuate-media/cms-core'
|
|
24
|
+
} from '@actuate-media/cms-core'
|
|
25
25
|
|
|
26
26
|
export interface NodeSettingsProps {
|
|
27
|
-
node: SectionNode | ContainerNode | RowNode | ColumnNode
|
|
28
|
-
onUpdateSettings: (id: string, settings: Record<string, unknown>) => void
|
|
29
|
-
onRemoveNode: (id: string) => void
|
|
30
|
-
onDuplicateNode: (id: string) => void
|
|
31
|
-
onMoveNodeUp: (id: string) => void
|
|
32
|
-
onMoveNodeDown: (id: string) => void
|
|
33
|
-
onAddRow?: (sectionId: string) => void
|
|
27
|
+
node: SectionNode | ContainerNode | RowNode | ColumnNode
|
|
28
|
+
onUpdateSettings: (id: string, settings: Record<string, unknown>) => void
|
|
29
|
+
onRemoveNode: (id: string) => void
|
|
30
|
+
onDuplicateNode: (id: string) => void
|
|
31
|
+
onMoveNodeUp: (id: string) => void
|
|
32
|
+
onMoveNodeDown: (id: string) => void
|
|
33
|
+
onAddRow?: (sectionId: string) => void
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
const INPUT_CLASS =
|
|
37
|
-
'w-full px-3 py-2 text-sm bg-background border border-input rounded-md focus:outline-none focus:ring-2 focus:ring-ring'
|
|
38
|
-
const LABEL_CLASS = 'text-sm font-medium text-foreground mb-1 block'
|
|
39
|
-
const SECTION_HEADING_CLASS =
|
|
37
|
+
'w-full px-3 py-2 text-sm bg-background border border-input rounded-md focus:outline-none focus:ring-2 focus:ring-ring'
|
|
38
|
+
const LABEL_CLASS = 'text-sm font-medium text-foreground mb-1 block'
|
|
39
|
+
const SECTION_HEADING_CLASS =
|
|
40
|
+
'text-xs font-medium uppercase tracking-wider text-muted-foreground mb-2'
|
|
40
41
|
|
|
41
42
|
const COLUMN_PRESETS: { label: string; widths: number[] }[] = [
|
|
42
43
|
{ label: '12', widths: [12] },
|
|
@@ -46,7 +47,7 @@ const COLUMN_PRESETS: { label: string; widths: number[] }[] = [
|
|
|
46
47
|
{ label: '8 | 4', widths: [8, 4] },
|
|
47
48
|
{ label: '4 | 8', widths: [4, 8] },
|
|
48
49
|
{ label: '3 | 6 | 3', widths: [3, 6, 3] },
|
|
49
|
-
]
|
|
50
|
+
]
|
|
50
51
|
|
|
51
52
|
export function NodeSettings({
|
|
52
53
|
node,
|
|
@@ -57,23 +58,23 @@ export function NodeSettings({
|
|
|
57
58
|
onMoveNodeDown,
|
|
58
59
|
onAddRow,
|
|
59
60
|
}: NodeSettingsProps) {
|
|
60
|
-
const [confirmDelete, setConfirmDelete] = useState(false)
|
|
61
|
+
const [confirmDelete, setConfirmDelete] = useState(false)
|
|
61
62
|
|
|
62
63
|
const updateSetting = useCallback(
|
|
63
64
|
(key: string, value: unknown) => {
|
|
64
|
-
onUpdateSettings(node.id, { [key]: value })
|
|
65
|
+
onUpdateSettings(node.id, { [key]: value })
|
|
65
66
|
},
|
|
66
|
-
[node.id, onUpdateSettings]
|
|
67
|
-
)
|
|
67
|
+
[node.id, onUpdateSettings],
|
|
68
|
+
)
|
|
68
69
|
|
|
69
70
|
const handleDelete = useCallback(() => {
|
|
70
71
|
if (confirmDelete) {
|
|
71
|
-
onRemoveNode(node.id)
|
|
72
|
-
setConfirmDelete(false)
|
|
72
|
+
onRemoveNode(node.id)
|
|
73
|
+
setConfirmDelete(false)
|
|
73
74
|
} else {
|
|
74
|
-
setConfirmDelete(true)
|
|
75
|
+
setConfirmDelete(true)
|
|
75
76
|
}
|
|
76
|
-
}, [confirmDelete, node.id, onRemoveNode])
|
|
77
|
+
}, [confirmDelete, node.id, onRemoveNode])
|
|
77
78
|
|
|
78
79
|
const nodeLabel =
|
|
79
80
|
node.type === 'section'
|
|
@@ -82,7 +83,7 @@ export function NodeSettings({
|
|
|
82
83
|
? 'Container'
|
|
83
84
|
: node.type === 'row'
|
|
84
85
|
? 'Row'
|
|
85
|
-
: 'Column'
|
|
86
|
+
: 'Column'
|
|
86
87
|
|
|
87
88
|
return (
|
|
88
89
|
<div className="flex flex-col h-full">
|
|
@@ -92,8 +93,12 @@ export function NodeSettings({
|
|
|
92
93
|
|
|
93
94
|
<div className="flex-1 overflow-y-auto">
|
|
94
95
|
<div className="space-y-4 p-4">
|
|
95
|
-
{node.type === 'section' &&
|
|
96
|
-
|
|
96
|
+
{node.type === 'section' && (
|
|
97
|
+
<SectionFields node={node} updateSetting={updateSetting} onAddRow={onAddRow} />
|
|
98
|
+
)}
|
|
99
|
+
{node.type === 'container' && (
|
|
100
|
+
<ContainerFields node={node} updateSetting={updateSetting} />
|
|
101
|
+
)}
|
|
97
102
|
{node.type === 'row' && <RowFields node={node} updateSetting={updateSetting} />}
|
|
98
103
|
{node.type === 'column' && <ColumnFields node={node} updateSetting={updateSetting} />}
|
|
99
104
|
</div>
|
|
@@ -144,7 +149,7 @@ export function NodeSettings({
|
|
|
144
149
|
</button>
|
|
145
150
|
</div>
|
|
146
151
|
</div>
|
|
147
|
-
)
|
|
152
|
+
)
|
|
148
153
|
}
|
|
149
154
|
|
|
150
155
|
function SectionFields({
|
|
@@ -152,11 +157,11 @@ function SectionFields({
|
|
|
152
157
|
updateSetting,
|
|
153
158
|
onAddRow,
|
|
154
159
|
}: {
|
|
155
|
-
node: SectionNode
|
|
156
|
-
updateSetting: (key: string, value: unknown) => void
|
|
157
|
-
onAddRow?: (sectionId: string) => void
|
|
160
|
+
node: SectionNode
|
|
161
|
+
updateSetting: (key: string, value: unknown) => void
|
|
162
|
+
onAddRow?: (sectionId: string) => void
|
|
158
163
|
}) {
|
|
159
|
-
const s = node.settings
|
|
164
|
+
const s = node.settings
|
|
160
165
|
return (
|
|
161
166
|
<>
|
|
162
167
|
<p className={SECTION_HEADING_CLASS}>Background</p>
|
|
@@ -228,9 +233,7 @@ function SectionFields({
|
|
|
228
233
|
<label className="text-sm font-medium text-foreground">Visibility</label>
|
|
229
234
|
<SwitchPrimitive.Root
|
|
230
235
|
checked={s.visibility !== 'hidden'}
|
|
231
|
-
onCheckedChange={(checked) =>
|
|
232
|
-
updateSetting('visibility', checked ? 'visible' : 'hidden')
|
|
233
|
-
}
|
|
236
|
+
onCheckedChange={(checked) => updateSetting('visibility', checked ? 'visible' : 'hidden')}
|
|
234
237
|
className="w-9 h-5 bg-input rounded-full relative data-[state=checked]:bg-primary transition-colors"
|
|
235
238
|
aria-label="Section visibility"
|
|
236
239
|
>
|
|
@@ -269,17 +272,17 @@ function SectionFields({
|
|
|
269
272
|
</button>
|
|
270
273
|
)}
|
|
271
274
|
</>
|
|
272
|
-
)
|
|
275
|
+
)
|
|
273
276
|
}
|
|
274
277
|
|
|
275
278
|
function ContainerFields({
|
|
276
279
|
node,
|
|
277
280
|
updateSetting,
|
|
278
281
|
}: {
|
|
279
|
-
node: ContainerNode
|
|
280
|
-
updateSetting: (key: string, value: unknown) => void
|
|
282
|
+
node: ContainerNode
|
|
283
|
+
updateSetting: (key: string, value: unknown) => void
|
|
281
284
|
}) {
|
|
282
|
-
const s = node.settings
|
|
285
|
+
const s = node.settings
|
|
283
286
|
return (
|
|
284
287
|
<>
|
|
285
288
|
<p className={SECTION_HEADING_CLASS}>Layout</p>
|
|
@@ -297,7 +300,8 @@ function ContainerFields({
|
|
|
297
300
|
<label className={LABEL_CLASS}>Alignment</label>
|
|
298
301
|
<div className="flex gap-1">
|
|
299
302
|
{(['left', 'center', 'right'] as const).map((align) => {
|
|
300
|
-
const Icon =
|
|
303
|
+
const Icon =
|
|
304
|
+
align === 'left' ? AlignLeft : align === 'center' ? AlignCenter : AlignRight
|
|
301
305
|
return (
|
|
302
306
|
<button
|
|
303
307
|
key={align}
|
|
@@ -312,7 +316,7 @@ function ContainerFields({
|
|
|
312
316
|
>
|
|
313
317
|
<Icon size={14} />
|
|
314
318
|
</button>
|
|
315
|
-
)
|
|
319
|
+
)
|
|
316
320
|
})}
|
|
317
321
|
</div>
|
|
318
322
|
</div>
|
|
@@ -327,17 +331,17 @@ function ContainerFields({
|
|
|
327
331
|
/>
|
|
328
332
|
</div>
|
|
329
333
|
</>
|
|
330
|
-
)
|
|
334
|
+
)
|
|
331
335
|
}
|
|
332
336
|
|
|
333
337
|
function RowFields({
|
|
334
338
|
node,
|
|
335
339
|
updateSetting,
|
|
336
340
|
}: {
|
|
337
|
-
node: RowNode
|
|
338
|
-
updateSetting: (key: string, value: unknown) => void
|
|
341
|
+
node: RowNode
|
|
342
|
+
updateSetting: (key: string, value: unknown) => void
|
|
339
343
|
}) {
|
|
340
|
-
const s = node.settings
|
|
344
|
+
const s = node.settings
|
|
341
345
|
return (
|
|
342
346
|
<>
|
|
343
347
|
<p className={SECTION_HEADING_CLASS}>Layout</p>
|
|
@@ -362,7 +366,7 @@ function RowFields({
|
|
|
362
366
|
? ArrowDownToLine
|
|
363
367
|
: align === 'center'
|
|
364
368
|
? Minus
|
|
365
|
-
: AlignCenter
|
|
369
|
+
: AlignCenter
|
|
366
370
|
return (
|
|
367
371
|
<button
|
|
368
372
|
key={align}
|
|
@@ -377,7 +381,7 @@ function RowFields({
|
|
|
377
381
|
>
|
|
378
382
|
<Icon size={14} />
|
|
379
383
|
</button>
|
|
380
|
-
)
|
|
384
|
+
)
|
|
381
385
|
})}
|
|
382
386
|
</div>
|
|
383
387
|
</div>
|
|
@@ -417,11 +421,7 @@ function RowFields({
|
|
|
417
421
|
>
|
|
418
422
|
<div className="flex gap-0.5 h-4">
|
|
419
423
|
{preset.widths.map((w, i) => (
|
|
420
|
-
<div
|
|
421
|
-
key={i}
|
|
422
|
-
className="bg-muted-foreground/30 rounded-sm"
|
|
423
|
-
style={{ flex: w }}
|
|
424
|
-
/>
|
|
424
|
+
<div key={i} className="bg-muted-foreground/30 rounded-sm" style={{ flex: w }} />
|
|
425
425
|
))}
|
|
426
426
|
</div>
|
|
427
427
|
<p className="text-xs text-muted-foreground mt-1 text-center">
|
|
@@ -431,17 +431,17 @@ function RowFields({
|
|
|
431
431
|
))}
|
|
432
432
|
</div>
|
|
433
433
|
</>
|
|
434
|
-
)
|
|
434
|
+
)
|
|
435
435
|
}
|
|
436
436
|
|
|
437
437
|
function ColumnFields({
|
|
438
438
|
node,
|
|
439
439
|
updateSetting,
|
|
440
440
|
}: {
|
|
441
|
-
node: ColumnNode
|
|
442
|
-
updateSetting: (key: string, value: unknown) => void
|
|
441
|
+
node: ColumnNode
|
|
442
|
+
updateSetting: (key: string, value: unknown) => void
|
|
443
443
|
}) {
|
|
444
|
-
const s = node.settings
|
|
444
|
+
const s = node.settings
|
|
445
445
|
return (
|
|
446
446
|
<>
|
|
447
447
|
<p className={SECTION_HEADING_CLASS}>Size</p>
|
|
@@ -463,7 +463,7 @@ function ColumnFields({
|
|
|
463
463
|
<div className="flex gap-1">
|
|
464
464
|
{(['top', 'center', 'bottom'] as const).map((align) => {
|
|
465
465
|
const Icon =
|
|
466
|
-
align === 'top' ? ArrowUpFromLine : align === 'bottom' ? ArrowDownToLine : Minus
|
|
466
|
+
align === 'top' ? ArrowUpFromLine : align === 'bottom' ? ArrowDownToLine : Minus
|
|
467
467
|
return (
|
|
468
468
|
<button
|
|
469
469
|
key={align}
|
|
@@ -478,7 +478,7 @@ function ColumnFields({
|
|
|
478
478
|
>
|
|
479
479
|
<Icon size={14} />
|
|
480
480
|
</button>
|
|
481
|
-
)
|
|
481
|
+
)
|
|
482
482
|
})}
|
|
483
483
|
</div>
|
|
484
484
|
</div>
|
|
@@ -511,5 +511,5 @@ function ColumnFields({
|
|
|
511
511
|
</div>
|
|
512
512
|
</div>
|
|
513
513
|
</>
|
|
514
|
-
)
|
|
514
|
+
)
|
|
515
515
|
}
|