@actuate-media/cms-admin 0.4.0 → 0.7.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/dist/AdminRoot.d.ts.map +1 -1
- package/dist/AdminRoot.js +35 -0
- package/dist/AdminRoot.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 +1 -0
- package/dist/components/Breadcrumbs.js.map +1 -1
- package/dist/components/ErrorBoundary.js +1 -1
- package/dist/components/ErrorBoundary.js.map +1 -1
- package/dist/hooks/useBuilderState.d.ts +49 -0
- package/dist/hooks/useBuilderState.d.ts.map +1 -0
- package/dist/hooks/useBuilderState.js +238 -0
- package/dist/hooks/useBuilderState.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/layout/Sidebar.d.ts.map +1 -1
- package/dist/layout/Sidebar.js +2 -2
- package/dist/layout/Sidebar.js.map +1 -1
- package/dist/views/ForgotPassword.d.ts +5 -0
- package/dist/views/ForgotPassword.d.ts.map +1 -0
- package/dist/views/ForgotPassword.js +41 -0
- package/dist/views/ForgotPassword.js.map +1 -0
- package/dist/views/ResetPassword.d.ts +6 -0
- package/dist/views/ResetPassword.d.ts.map +1 -0
- package/dist/views/ResetPassword.js +46 -0
- package/dist/views/ResetPassword.js.map +1 -0
- package/dist/views/ScriptTagEditor.d.ts +6 -0
- package/dist/views/ScriptTagEditor.d.ts.map +1 -0
- package/dist/views/ScriptTagEditor.js +109 -0
- package/dist/views/ScriptTagEditor.js.map +1 -0
- package/dist/views/ScriptTags.d.ts +5 -0
- package/dist/views/ScriptTags.d.ts.map +1 -0
- package/dist/views/ScriptTags.js +54 -0
- package/dist/views/ScriptTags.js.map +1 -0
- package/dist/views/page-builder/AIBlockAssist.d.ts +9 -0
- package/dist/views/page-builder/AIBlockAssist.d.ts.map +1 -0
- package/dist/views/page-builder/AIBlockAssist.js +40 -0
- package/dist/views/page-builder/AIBlockAssist.js.map +1 -0
- package/dist/views/page-builder/AIGenerateDialog.d.ts +8 -0
- package/dist/views/page-builder/AIGenerateDialog.d.ts.map +1 -0
- package/dist/views/page-builder/AIGenerateDialog.js +170 -0
- package/dist/views/page-builder/AIGenerateDialog.js.map +1 -0
- package/dist/views/page-builder/BlockEditor.d.ts +11 -0
- package/dist/views/page-builder/BlockEditor.d.ts.map +1 -0
- package/dist/views/page-builder/BlockEditor.js +67 -0
- package/dist/views/page-builder/BlockEditor.js.map +1 -0
- package/dist/views/page-builder/BlockPicker.d.ts +7 -0
- package/dist/views/page-builder/BlockPicker.d.ts.map +1 -0
- package/dist/views/page-builder/BlockPicker.js +102 -0
- package/dist/views/page-builder/BlockPicker.js.map +1 -0
- package/dist/views/page-builder/BottomBar.d.ts +9 -0
- package/dist/views/page-builder/BottomBar.d.ts.map +1 -0
- package/dist/views/page-builder/BottomBar.js +13 -0
- package/dist/views/page-builder/BottomBar.js.map +1 -0
- package/dist/views/page-builder/BuilderToolbar.d.ts +21 -0
- package/dist/views/page-builder/BuilderToolbar.d.ts.map +1 -0
- package/dist/views/page-builder/BuilderToolbar.js +18 -0
- package/dist/views/page-builder/BuilderToolbar.js.map +1 -0
- package/dist/views/page-builder/ContextPanel.d.ts +20 -0
- package/dist/views/page-builder/ContextPanel.d.ts.map +1 -0
- package/dist/views/page-builder/ContextPanel.js +40 -0
- package/dist/views/page-builder/ContextPanel.js.map +1 -0
- package/dist/views/page-builder/DesignScore.d.ts +6 -0
- package/dist/views/page-builder/DesignScore.d.ts.map +1 -0
- package/dist/views/page-builder/DesignScore.js +93 -0
- package/dist/views/page-builder/DesignScore.js.map +1 -0
- package/dist/views/page-builder/NodeSettings.d.ts +12 -0
- package/dist/views/page-builder/NodeSettings.d.ts.map +1 -0
- package/dist/views/page-builder/NodeSettings.js +80 -0
- package/dist/views/page-builder/NodeSettings.js.map +1 -0
- package/dist/views/page-builder/PageBuilder.d.ts +8 -0
- package/dist/views/page-builder/PageBuilder.d.ts.map +1 -0
- package/dist/views/page-builder/PageBuilder.js +126 -0
- package/dist/views/page-builder/PageBuilder.js.map +1 -0
- package/dist/views/page-builder/PageSettings.d.ts +7 -0
- package/dist/views/page-builder/PageSettings.d.ts.map +1 -0
- package/dist/views/page-builder/PageSettings.js +27 -0
- package/dist/views/page-builder/PageSettings.js.map +1 -0
- package/dist/views/page-builder/SEOPanel.d.ts +10 -0
- package/dist/views/page-builder/SEOPanel.d.ts.map +1 -0
- package/dist/views/page-builder/SEOPanel.js +105 -0
- package/dist/views/page-builder/SEOPanel.js.map +1 -0
- package/dist/views/page-builder/SavedSections.d.ts +6 -0
- package/dist/views/page-builder/SavedSections.d.ts.map +1 -0
- package/dist/views/page-builder/SavedSections.js +145 -0
- package/dist/views/page-builder/SavedSections.js.map +1 -0
- package/dist/views/page-builder/TemplatePicker.d.ts +7 -0
- package/dist/views/page-builder/TemplatePicker.d.ts.map +1 -0
- package/dist/views/page-builder/TemplatePicker.js +68 -0
- package/dist/views/page-builder/TemplatePicker.js.map +1 -0
- package/dist/views/page-builder/block-renderers/CTAPreview.d.ts +3 -0
- package/dist/views/page-builder/block-renderers/CTAPreview.d.ts.map +1 -0
- package/dist/views/page-builder/block-renderers/CTAPreview.js +19 -0
- package/dist/views/page-builder/block-renderers/CTAPreview.js.map +1 -0
- package/dist/views/page-builder/block-renderers/CardsPreview.d.ts +3 -0
- package/dist/views/page-builder/block-renderers/CardsPreview.d.ts.map +1 -0
- package/dist/views/page-builder/block-renderers/CardsPreview.js +22 -0
- package/dist/views/page-builder/block-renderers/CardsPreview.js.map +1 -0
- package/dist/views/page-builder/block-renderers/CodePreview.d.ts +3 -0
- package/dist/views/page-builder/block-renderers/CodePreview.d.ts.map +1 -0
- package/dist/views/page-builder/block-renderers/CodePreview.js +16 -0
- package/dist/views/page-builder/block-renderers/CodePreview.js.map +1 -0
- package/dist/views/page-builder/block-renderers/FAQPreview.d.ts +3 -0
- package/dist/views/page-builder/block-renderers/FAQPreview.d.ts.map +1 -0
- package/dist/views/page-builder/block-renderers/FAQPreview.js +24 -0
- package/dist/views/page-builder/block-renderers/FAQPreview.js.map +1 -0
- package/dist/views/page-builder/block-renderers/FallbackPreview.d.ts +6 -0
- package/dist/views/page-builder/block-renderers/FallbackPreview.d.ts.map +1 -0
- package/dist/views/page-builder/block-renderers/FallbackPreview.js +7 -0
- package/dist/views/page-builder/block-renderers/FallbackPreview.js.map +1 -0
- package/dist/views/page-builder/block-renderers/FormPreview.d.ts +3 -0
- package/dist/views/page-builder/block-renderers/FormPreview.d.ts.map +1 -0
- package/dist/views/page-builder/block-renderers/FormPreview.js +14 -0
- package/dist/views/page-builder/block-renderers/FormPreview.js.map +1 -0
- package/dist/views/page-builder/block-renderers/GalleryPreview.d.ts +3 -0
- package/dist/views/page-builder/block-renderers/GalleryPreview.d.ts.map +1 -0
- package/dist/views/page-builder/block-renderers/GalleryPreview.js +21 -0
- package/dist/views/page-builder/block-renderers/GalleryPreview.js.map +1 -0
- package/dist/views/page-builder/block-renderers/HeroPreview.d.ts +3 -0
- package/dist/views/page-builder/block-renderers/HeroPreview.d.ts.map +1 -0
- package/dist/views/page-builder/block-renderers/HeroPreview.js +19 -0
- package/dist/views/page-builder/block-renderers/HeroPreview.js.map +1 -0
- package/dist/views/page-builder/block-renderers/ImagePreview.d.ts +3 -0
- package/dist/views/page-builder/block-renderers/ImagePreview.d.ts.map +1 -0
- package/dist/views/page-builder/block-renderers/ImagePreview.js +17 -0
- package/dist/views/page-builder/block-renderers/ImagePreview.js.map +1 -0
- package/dist/views/page-builder/block-renderers/TextPreview.d.ts +3 -0
- package/dist/views/page-builder/block-renderers/TextPreview.d.ts.map +1 -0
- package/dist/views/page-builder/block-renderers/TextPreview.js +26 -0
- package/dist/views/page-builder/block-renderers/TextPreview.js.map +1 -0
- package/dist/views/page-builder/block-renderers/VideoPreview.d.ts +3 -0
- package/dist/views/page-builder/block-renderers/VideoPreview.d.ts.map +1 -0
- package/dist/views/page-builder/block-renderers/VideoPreview.js +21 -0
- package/dist/views/page-builder/block-renderers/VideoPreview.js.map +1 -0
- package/dist/views/page-builder/block-renderers/index.d.ts +9 -0
- package/dist/views/page-builder/block-renderers/index.d.ts.map +1 -0
- package/dist/views/page-builder/block-renderers/index.js +25 -0
- package/dist/views/page-builder/block-renderers/index.js.map +1 -0
- package/dist/views/page-builder/canvas/BlockRenderer.d.ts +8 -0
- package/dist/views/page-builder/canvas/BlockRenderer.d.ts.map +1 -0
- package/dist/views/page-builder/canvas/BlockRenderer.js +30 -0
- package/dist/views/page-builder/canvas/BlockRenderer.js.map +1 -0
- package/dist/views/page-builder/canvas/BuilderCanvas.d.ts +10 -0
- package/dist/views/page-builder/canvas/BuilderCanvas.d.ts.map +1 -0
- package/dist/views/page-builder/canvas/BuilderCanvas.js +26 -0
- package/dist/views/page-builder/canvas/BuilderCanvas.js.map +1 -0
- package/dist/views/page-builder/canvas/ColumnRenderer.d.ts +8 -0
- package/dist/views/page-builder/canvas/ColumnRenderer.d.ts.map +1 -0
- package/dist/views/page-builder/canvas/ColumnRenderer.js +36 -0
- package/dist/views/page-builder/canvas/ColumnRenderer.js.map +1 -0
- package/dist/views/page-builder/canvas/ContainerRenderer.d.ts +8 -0
- package/dist/views/page-builder/canvas/ContainerRenderer.d.ts.map +1 -0
- package/dist/views/page-builder/canvas/ContainerRenderer.js +33 -0
- package/dist/views/page-builder/canvas/ContainerRenderer.js.map +1 -0
- package/dist/views/page-builder/canvas/RowRenderer.d.ts +8 -0
- package/dist/views/page-builder/canvas/RowRenderer.d.ts.map +1 -0
- package/dist/views/page-builder/canvas/RowRenderer.js +32 -0
- package/dist/views/page-builder/canvas/RowRenderer.js.map +1 -0
- package/dist/views/page-builder/canvas/SectionRenderer.d.ts +8 -0
- package/dist/views/page-builder/canvas/SectionRenderer.d.ts.map +1 -0
- package/dist/views/page-builder/canvas/SectionRenderer.js +54 -0
- package/dist/views/page-builder/canvas/SectionRenderer.js.map +1 -0
- package/dist/views/page-builder/canvas/index.d.ts +3 -0
- package/dist/views/page-builder/canvas/index.d.ts.map +1 -0
- package/dist/views/page-builder/canvas/index.js +2 -0
- package/dist/views/page-builder/canvas/index.js.map +1 -0
- package/package.json +7 -4
- package/src/AdminRoot.tsx +41 -0
- package/src/components/Breadcrumbs.tsx +1 -0
- package/src/components/ErrorBoundary.tsx +3 -3
- package/src/hooks/useBuilderState.ts +328 -0
- package/src/index.ts +8 -0
- package/src/layout/Sidebar.tsx +7 -0
- package/src/views/ForgotPassword.tsx +136 -0
- package/src/views/ResetPassword.tsx +192 -0
- package/src/views/ScriptTagEditor.tsx +361 -0
- package/src/views/ScriptTags.tsx +174 -0
- package/src/views/page-builder/AIBlockAssist.tsx +68 -0
- package/src/views/page-builder/AIGenerateDialog.tsx +574 -0
- package/src/views/page-builder/BlockEditor.tsx +352 -0
- package/src/views/page-builder/BlockPicker.tsx +338 -0
- package/src/views/page-builder/BottomBar.tsx +64 -0
- package/src/views/page-builder/BuilderToolbar.tsx +218 -0
- package/src/views/page-builder/ContextPanel.tsx +145 -0
- package/src/views/page-builder/DesignScore.tsx +258 -0
- package/src/views/page-builder/NodeSettings.tsx +515 -0
- package/src/views/page-builder/PageBuilder.tsx +288 -0
- package/src/views/page-builder/PageSettings.tsx +161 -0
- package/src/views/page-builder/SEOPanel.tsx +485 -0
- package/src/views/page-builder/SavedSections.tsx +486 -0
- package/src/views/page-builder/TemplatePicker.tsx +201 -0
- package/src/views/page-builder/block-renderers/CTAPreview.tsx +81 -0
- package/src/views/page-builder/block-renderers/CardsPreview.tsx +71 -0
- package/src/views/page-builder/block-renderers/CodePreview.tsx +46 -0
- package/src/views/page-builder/block-renderers/FAQPreview.tsx +90 -0
- package/src/views/page-builder/block-renderers/FallbackPreview.tsx +18 -0
- package/src/views/page-builder/block-renderers/FormPreview.tsx +69 -0
- package/src/views/page-builder/block-renderers/GalleryPreview.tsx +93 -0
- package/src/views/page-builder/block-renderers/HeroPreview.tsx +103 -0
- package/src/views/page-builder/block-renderers/ImagePreview.tsx +54 -0
- package/src/views/page-builder/block-renderers/TextPreview.tsx +81 -0
- package/src/views/page-builder/block-renderers/VideoPreview.tsx +78 -0
- package/src/views/page-builder/block-renderers/index.ts +34 -0
- package/src/views/page-builder/canvas/BlockRenderer.tsx +62 -0
- package/src/views/page-builder/canvas/BuilderCanvas.tsx +90 -0
- package/src/views/page-builder/canvas/ColumnRenderer.tsx +86 -0
- package/src/views/page-builder/canvas/ContainerRenderer.tsx +71 -0
- package/src/views/page-builder/canvas/RowRenderer.tsx +72 -0
- package/src/views/page-builder/canvas/SectionRenderer.tsx +97 -0
- package/src/views/page-builder/canvas/index.ts +2 -0
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useState, useMemo, useCallback } from 'react';
|
|
4
|
+
import { Star, Copy, Trash2 } from 'lucide-react';
|
|
5
|
+
import * as SwitchPrimitive from '@radix-ui/react-switch';
|
|
6
|
+
import { BlockCatalog } from '@actuate-media/cms-core';
|
|
7
|
+
import { AIBlockAssist } from './AIBlockAssist.js';
|
|
8
|
+
const INPUT_CLASS = 'w-full px-3 py-2 text-sm bg-background border border-input rounded-md focus:outline-none focus:ring-2 focus:ring-ring';
|
|
9
|
+
const LABEL_CLASS = 'text-sm font-medium text-foreground mb-1 block';
|
|
10
|
+
export function BlockEditor({ node, onUpdateBlock, onUpdateSettings, onRemoveNode, onDuplicateNode, config, }) {
|
|
11
|
+
const [confirmDelete, setConfirmDelete] = useState(false);
|
|
12
|
+
const catalog = useMemo(() => new BlockCatalog(), []);
|
|
13
|
+
const blockDef = useMemo(() => catalog.get(node.settings.blockType), [catalog, node.settings.blockType]);
|
|
14
|
+
const handleFieldChange = useCallback((fieldName, value) => {
|
|
15
|
+
onUpdateBlock(node.id, { [fieldName]: value });
|
|
16
|
+
}, [node.id, onUpdateBlock]);
|
|
17
|
+
const handleVariantChange = useCallback((variantName) => {
|
|
18
|
+
onUpdateSettings(node.id, { variant: variantName });
|
|
19
|
+
}, [node.id, onUpdateSettings]);
|
|
20
|
+
const handleDelete = useCallback(() => {
|
|
21
|
+
if (confirmDelete) {
|
|
22
|
+
onRemoveNode(node.id);
|
|
23
|
+
setConfirmDelete(false);
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
setConfirmDelete(true);
|
|
27
|
+
}
|
|
28
|
+
}, [confirmDelete, node.id, onRemoveNode]);
|
|
29
|
+
if (!blockDef) {
|
|
30
|
+
return (_jsx("div", { className: "p-4", children: _jsxs("p", { className: "text-sm text-muted-foreground", children: ["Unknown block type: ", _jsx("code", { className: "text-xs", children: node.settings.blockType })] }) }));
|
|
31
|
+
}
|
|
32
|
+
return (_jsxs("div", { className: "flex flex-col h-full", children: [_jsxs("div", { className: "p-4 border-b border-border", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Star, { size: 16, className: "text-muted-foreground" }), _jsx("span", { className: "text-sm font-medium text-foreground flex-1", children: blockDef.label }), _jsx(AIBlockAssist, { block: node, onUpdateData: (data) => onUpdateBlock(node.id, data) })] }), blockDef.description && (_jsx("p", { className: "text-xs text-muted-foreground mt-1", children: blockDef.description }))] }), blockDef.variants.length > 1 && (_jsxs("div", { className: "p-4 border-b border-border", children: [_jsx("p", { className: "text-xs font-medium uppercase tracking-wider text-muted-foreground mb-2", children: "Variant" }), _jsx("div", { className: "grid grid-cols-2 gap-1.5", children: blockDef.variants.map((variant) => (_jsx("button", { type: "button", onClick: () => handleVariantChange(variant.name), className: `px-2 py-1.5 text-xs rounded-md border transition-colors ${node.settings.variant === variant.name
|
|
33
|
+
? 'bg-primary text-primary-foreground border-primary'
|
|
34
|
+
: 'bg-background border-input text-foreground hover:bg-accent'}`, children: variant.label }, variant.name))) })] })), _jsxs("div", { className: "space-y-4 p-4 flex-1", children: [_jsx("p", { className: "text-xs font-medium uppercase tracking-wider text-muted-foreground mb-2", children: "Fields" }), Object.entries(blockDef.fields).map(([fieldName, fieldDef]) => (_jsx(FieldRenderer, { name: fieldName, definition: fieldDef, value: node.data[fieldName], onChange: (value) => handleFieldChange(fieldName, value) }, fieldName)))] }), _jsxs("div", { className: "p-4 border-t border-border space-y-2", children: [_jsxs("button", { type: "button", onClick: () => onDuplicateNode(node.id), className: "w-full flex items-center justify-center gap-2 px-3 py-2 text-sm font-medium bg-background border border-input rounded-md hover:bg-accent transition-colors", children: [_jsx(Copy, { size: 14 }), "Duplicate"] }), _jsxs("button", { type: "button", onClick: handleDelete, onBlur: () => setConfirmDelete(false), className: `w-full flex items-center justify-center gap-2 px-3 py-2 text-sm font-medium rounded-md transition-colors ${confirmDelete
|
|
35
|
+
? 'bg-destructive text-destructive-foreground'
|
|
36
|
+
: 'bg-background border border-destructive text-destructive hover:bg-destructive/10'}`, children: [_jsx(Trash2, { size: 14 }), confirmDelete ? 'Click again to confirm' : 'Delete'] })] })] }));
|
|
37
|
+
}
|
|
38
|
+
function FieldRenderer({ name, definition, value, onChange }) {
|
|
39
|
+
const label = definition.label || name;
|
|
40
|
+
switch (definition.type) {
|
|
41
|
+
case 'text':
|
|
42
|
+
return (_jsxs("div", { children: [_jsx("label", { className: LABEL_CLASS, children: label }), _jsx("input", { type: "text", value: value ?? '', onChange: (e) => onChange(e.target.value), placeholder: definition.admin?.placeholder, className: INPUT_CLASS })] }));
|
|
43
|
+
case 'richText':
|
|
44
|
+
return (_jsxs("div", { children: [_jsx("label", { className: LABEL_CLASS, children: label }), _jsx("textarea", { value: value ?? '', onChange: (e) => onChange(e.target.value), placeholder: definition.admin?.placeholder, rows: 4, className: `${INPUT_CLASS} resize-y` })] }));
|
|
45
|
+
case 'url':
|
|
46
|
+
return (_jsxs("div", { children: [_jsx("label", { className: LABEL_CLASS, children: label }), _jsx("input", { type: "url", value: value ?? '', onChange: (e) => onChange(e.target.value), placeholder: definition.admin?.placeholder ?? 'https://', className: INPUT_CLASS })] }));
|
|
47
|
+
case 'number':
|
|
48
|
+
return (_jsxs("div", { children: [_jsx("label", { className: LABEL_CLASS, children: label }), _jsx("input", { type: "number", value: value ?? '', onChange: (e) => onChange(e.target.value ? Number(e.target.value) : undefined), min: definition.min, max: definition.max, step: definition.step, className: INPUT_CLASS })] }));
|
|
49
|
+
case 'boolean':
|
|
50
|
+
return (_jsxs("div", { className: "flex items-center justify-between", children: [_jsx("label", { className: "text-sm font-medium text-foreground", children: label }), _jsx(SwitchPrimitive.Root, { checked: !!value, onCheckedChange: (checked) => onChange(checked), className: "w-9 h-5 bg-input rounded-full relative data-[state=checked]:bg-primary transition-colors", "aria-label": label, children: _jsx(SwitchPrimitive.Thumb, { className: "block h-3.5 w-3.5 rounded-full bg-background shadow-sm transition-transform translate-x-0.5 data-[state=checked]:translate-x-[18px]" }) })] }));
|
|
51
|
+
case 'media':
|
|
52
|
+
return (_jsxs("div", { children: [_jsx("label", { className: LABEL_CLASS, children: label }), _jsxs("div", { className: "flex gap-2", children: [_jsx("input", { type: "text", value: value ?? '', onChange: (e) => onChange(e.target.value), placeholder: "Select media...", className: `${INPUT_CLASS} flex-1` }), _jsx("button", { type: "button", className: "px-3 py-2 text-xs font-medium bg-accent text-foreground border border-input rounded-md hover:bg-accent/80 transition-colors", children: "Browse" })] })] }));
|
|
53
|
+
case 'select':
|
|
54
|
+
return (_jsxs("div", { children: [_jsx("label", { className: LABEL_CLASS, children: label }), _jsxs("select", { value: value ?? '', onChange: (e) => onChange(e.target.value), className: INPUT_CLASS, children: [_jsx("option", { value: "", children: "Select..." }), definition.options.map((opt) => (_jsx("option", { value: opt.value, children: opt.label }, opt.value)))] })] }));
|
|
55
|
+
case 'array':
|
|
56
|
+
return (_jsxs("div", { children: [_jsx("label", { className: LABEL_CLASS, children: label }), _jsx("div", { className: "px-3 py-2 text-sm bg-muted border border-input rounded-md text-muted-foreground", children: Array.isArray(value) ? `${value.length} items` : '0 items' })] }));
|
|
57
|
+
case 'relationship':
|
|
58
|
+
return (_jsxs("div", { children: [_jsx("label", { className: LABEL_CLASS, children: label }), _jsx("input", { type: "text", value: value ?? '', onChange: (e) => onChange(e.target.value), placeholder: "Select relationship...", className: INPUT_CLASS })] }));
|
|
59
|
+
case 'email':
|
|
60
|
+
return (_jsxs("div", { children: [_jsx("label", { className: LABEL_CLASS, children: label }), _jsx("input", { type: "email", value: value ?? '', onChange: (e) => onChange(e.target.value), placeholder: definition.admin?.placeholder ?? 'email@example.com', className: INPUT_CLASS })] }));
|
|
61
|
+
case 'color':
|
|
62
|
+
return (_jsxs("div", { children: [_jsx("label", { className: LABEL_CLASS, children: label }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx("input", { type: "color", value: value ?? '#000000', onChange: (e) => onChange(e.target.value), className: "h-9 w-9 rounded-md border border-input cursor-pointer" }), _jsx("input", { type: "text", value: value ?? '', onChange: (e) => onChange(e.target.value), placeholder: "#000000", className: `${INPUT_CLASS} flex-1` })] })] }));
|
|
63
|
+
default:
|
|
64
|
+
return (_jsxs("div", { children: [_jsx("label", { className: LABEL_CLASS, children: label }), _jsx("input", { type: "text", value: String(value ?? ''), onChange: (e) => onChange(e.target.value), className: INPUT_CLASS })] }));
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=BlockEditor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BlockEditor.js","sourceRoot":"","sources":["../../../src/views/page-builder/BlockEditor.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export interface BlockPickerProps {
|
|
2
|
+
open: boolean;
|
|
3
|
+
onClose: () => void;
|
|
4
|
+
onSelect: (blockType: string, variant?: string) => void;
|
|
5
|
+
}
|
|
6
|
+
export declare function BlockPicker({ open, onClose, onSelect }: BlockPickerProps): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
//# sourceMappingURL=BlockPicker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BlockPicker.d.ts","sourceRoot":"","sources":["../../../src/views/page-builder/BlockPicker.tsx"],"names":[],"mappings":"AAyBA,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CACzD;AAmBD,wBAAgB,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,gBAAgB,2CAmHxE"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useState, useMemo, useRef, useEffect, useCallback } from 'react';
|
|
4
|
+
import * as Dialog from '@radix-ui/react-dialog';
|
|
5
|
+
import { Star, Type, Image, LayoutGrid, MousePointer, Play, Grid, HelpCircle, FileText, Code, Box, X, ArrowLeft, Search, Check, } from 'lucide-react';
|
|
6
|
+
import { BlockCatalog } from '@actuate-media/cms-core';
|
|
7
|
+
const iconMap = {
|
|
8
|
+
Star,
|
|
9
|
+
Type,
|
|
10
|
+
Image,
|
|
11
|
+
LayoutGrid,
|
|
12
|
+
MousePointer,
|
|
13
|
+
Play,
|
|
14
|
+
Grid,
|
|
15
|
+
HelpCircle,
|
|
16
|
+
FileText,
|
|
17
|
+
Code,
|
|
18
|
+
};
|
|
19
|
+
function resolveIcon(name) {
|
|
20
|
+
return iconMap[name] ?? Box;
|
|
21
|
+
}
|
|
22
|
+
export function BlockPicker({ open, onClose, onSelect }) {
|
|
23
|
+
const [search, setSearch] = useState('');
|
|
24
|
+
const [selectedBlock, setSelectedBlock] = useState(null);
|
|
25
|
+
const searchInputRef = useRef(null);
|
|
26
|
+
const variantListRef = useRef(null);
|
|
27
|
+
const catalog = useMemo(() => new BlockCatalog(), []);
|
|
28
|
+
const allBlocks = useMemo(() => catalog.getAll(), [catalog]);
|
|
29
|
+
const filteredBlocks = useMemo(() => {
|
|
30
|
+
if (!search.trim())
|
|
31
|
+
return allBlocks;
|
|
32
|
+
const q = search.toLowerCase();
|
|
33
|
+
return allBlocks.filter((block) => block.label.toLowerCase().includes(q) ||
|
|
34
|
+
(block.description?.toLowerCase().includes(q) ?? false));
|
|
35
|
+
}, [allBlocks, search]);
|
|
36
|
+
const resetState = useCallback(() => {
|
|
37
|
+
setSearch('');
|
|
38
|
+
setSelectedBlock(null);
|
|
39
|
+
}, []);
|
|
40
|
+
useEffect(() => {
|
|
41
|
+
if (open) {
|
|
42
|
+
resetState();
|
|
43
|
+
}
|
|
44
|
+
}, [open, resetState]);
|
|
45
|
+
useEffect(() => {
|
|
46
|
+
if (open && !selectedBlock) {
|
|
47
|
+
const timer = setTimeout(() => searchInputRef.current?.focus(), 50);
|
|
48
|
+
return () => clearTimeout(timer);
|
|
49
|
+
}
|
|
50
|
+
}, [open, selectedBlock]);
|
|
51
|
+
useEffect(() => {
|
|
52
|
+
if (selectedBlock && variantListRef.current) {
|
|
53
|
+
const firstButton = variantListRef.current.querySelector('button[data-variant]');
|
|
54
|
+
firstButton?.focus();
|
|
55
|
+
}
|
|
56
|
+
}, [selectedBlock]);
|
|
57
|
+
function handleBlockClick(block) {
|
|
58
|
+
if (block.variants.length === 1) {
|
|
59
|
+
onSelect(block.type, block.variants[0].name);
|
|
60
|
+
onClose();
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
setSelectedBlock(block);
|
|
64
|
+
}
|
|
65
|
+
function handleVariantClick(variant) {
|
|
66
|
+
if (!selectedBlock)
|
|
67
|
+
return;
|
|
68
|
+
onSelect(selectedBlock.type, variant.name);
|
|
69
|
+
onClose();
|
|
70
|
+
}
|
|
71
|
+
function handleBack() {
|
|
72
|
+
setSelectedBlock(null);
|
|
73
|
+
}
|
|
74
|
+
function handleKeyDownOnGrid(e) {
|
|
75
|
+
if (e.key === 'Escape') {
|
|
76
|
+
e.stopPropagation();
|
|
77
|
+
onClose();
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
function handleKeyDownOnVariants(e) {
|
|
81
|
+
if (e.key === 'Escape') {
|
|
82
|
+
e.stopPropagation();
|
|
83
|
+
handleBack();
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return (_jsx(Dialog.Root, { open: open, onOpenChange: (isOpen) => !isOpen && onClose(), children: _jsxs(Dialog.Portal, { children: [_jsx(Dialog.Overlay, { className: "fixed inset-0 bg-black/50 z-50 motion-safe:animate-in motion-safe:fade-in-0" }), _jsx(Dialog.Content, { className: "fixed top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 bg-card rounded-xl shadow-2xl border border-border z-50 w-full max-w-2xl max-h-[80vh] overflow-hidden flex flex-col", "aria-describedby": undefined, onEscapeKeyDown: () => {
|
|
87
|
+
if (selectedBlock) {
|
|
88
|
+
handleBack();
|
|
89
|
+
}
|
|
90
|
+
}, children: selectedBlock ? (_jsx(VariantView, { block: selectedBlock, variantListRef: variantListRef, onBack: handleBack, onVariantClick: handleVariantClick, onKeyDown: handleKeyDownOnVariants })) : (_jsx(BlockTypeGrid, { search: search, filteredBlocks: filteredBlocks, searchInputRef: searchInputRef, onSearchChange: setSearch, onBlockClick: handleBlockClick, onClose: onClose, onKeyDown: handleKeyDownOnGrid })) })] }) }));
|
|
91
|
+
}
|
|
92
|
+
function BlockTypeGrid({ search, filteredBlocks, searchInputRef, onSearchChange, onBlockClick, onClose, onKeyDown, }) {
|
|
93
|
+
return (_jsxs("div", { className: "flex flex-col h-full", onKeyDown: onKeyDown, children: [_jsxs("div", { className: "flex items-center justify-between gap-3 px-5 pt-5 pb-3", children: [_jsx(Dialog.Title, { className: "text-lg font-medium text-foreground", children: "Add Block" }), _jsx(Dialog.Close, { asChild: true, children: _jsx("button", { type: "button", className: "p-1.5 rounded-md text-muted-foreground hover:text-foreground hover:bg-accent transition-colors", "aria-label": "Close", children: _jsx(X, { size: 18 }) }) })] }), _jsx("div", { className: "px-5 pb-3", children: _jsxs("div", { className: "relative", children: [_jsx(Search, { className: "absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground pointer-events-none", size: 16 }), _jsx("input", { ref: searchInputRef, type: "text", placeholder: "Search blocks...", value: search, onChange: (e) => onSearchChange(e.target.value), className: "w-full pl-9 pr-3 py-2 text-sm bg-background border border-input rounded-md focus:outline-none focus:ring-2 focus:ring-ring", "aria-label": "Search block types" })] }) }), _jsx("div", { className: "flex-1 overflow-y-auto px-5 pb-5", children: filteredBlocks.length === 0 ? (_jsxs("div", { className: "flex flex-col items-center justify-center py-12 text-center", children: [_jsx(Search, { size: 24, className: "text-muted-foreground mb-2" }), _jsxs("p", { className: "text-sm text-muted-foreground", children: ["No blocks match \u201C", search, "\u201D"] })] })) : (_jsx("div", { className: "grid grid-cols-2 gap-3", role: "list", "aria-label": "Available block types", children: filteredBlocks.map((block) => {
|
|
94
|
+
const Icon = resolveIcon(block.icon);
|
|
95
|
+
return (_jsxs("button", { type: "button", role: "listitem", onClick: () => onBlockClick(block), className: "p-4 border border-border rounded-lg hover:border-primary cursor-pointer transition-colors bg-card text-left flex items-start gap-3 group focus:outline-none focus:ring-2 focus:ring-ring", children: [_jsx("div", { className: "shrink-0 w-9 h-9 rounded-md bg-accent flex items-center justify-center text-foreground group-hover:bg-primary/10 group-hover:text-primary transition-colors", children: _jsx(Icon, { size: 18 }) }), _jsxs("div", { className: "min-w-0", children: [_jsx("p", { className: "text-sm font-medium text-foreground truncate", children: block.label }), block.description && (_jsx("p", { className: "text-xs text-muted-foreground mt-0.5 line-clamp-2", children: block.description }))] })] }, block.type));
|
|
96
|
+
}) })) })] }));
|
|
97
|
+
}
|
|
98
|
+
function VariantView({ block, variantListRef, onBack, onVariantClick, onKeyDown, }) {
|
|
99
|
+
const Icon = resolveIcon(block.icon);
|
|
100
|
+
return (_jsxs("div", { className: "flex flex-col h-full", onKeyDown: onKeyDown, children: [_jsxs("div", { className: "flex items-center gap-3 px-5 pt-5 pb-3", children: [_jsx("button", { type: "button", onClick: onBack, className: "p-1.5 rounded-md text-muted-foreground hover:text-foreground hover:bg-accent transition-colors", "aria-label": "Back to block types", children: _jsx(ArrowLeft, { size: 18 }) }), _jsxs("div", { className: "flex items-center gap-2 min-w-0", children: [_jsx(Icon, { size: 18, className: "text-foreground shrink-0" }), _jsx("h2", { className: "text-lg font-medium text-foreground truncate", children: block.label })] })] }), block.description && (_jsx("p", { className: "text-sm text-muted-foreground px-5 pb-3", children: block.description })), _jsx("div", { className: "flex-1 overflow-y-auto px-5 pb-5", ref: variantListRef, children: _jsx("div", { className: "space-y-2", role: "list", "aria-label": `${block.label} variants`, children: block.variants.map((variant, index) => (_jsx("button", { type: "button", role: "listitem", "data-variant": variant.name, onClick: () => onVariantClick(variant), className: "w-full p-4 border border-border rounded-lg hover:border-primary cursor-pointer transition-colors bg-card text-left flex items-center gap-3 group focus:outline-none focus:ring-2 focus:ring-ring", children: _jsxs("div", { className: "flex-1 min-w-0", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("p", { className: "text-sm font-medium text-foreground", children: variant.label }), index === 0 && (_jsxs("span", { className: "inline-flex items-center gap-1 text-xs text-primary bg-primary/10 px-1.5 py-0.5 rounded", children: [_jsx(Check, { size: 10 }), "Default"] }))] }), _jsx("p", { className: "text-xs text-muted-foreground mt-0.5", children: variant.description })] }) }, variant.name))) }) })] }));
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=BlockPicker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BlockPicker.js","sourceRoot":"","sources":["../../../src/views/page-builder/BlockPicker.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { DeviceMode } from '../../hooks/useBuilderState.js';
|
|
2
|
+
export interface BottomBarProps {
|
|
3
|
+
deviceMode: DeviceMode;
|
|
4
|
+
showGridOverlay: boolean;
|
|
5
|
+
onAddSection: () => void;
|
|
6
|
+
onToggleGrid: (show: boolean) => void;
|
|
7
|
+
}
|
|
8
|
+
export declare function BottomBar({ deviceMode, showGridOverlay, onAddSection, onToggleGrid, }: BottomBarProps): import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
//# sourceMappingURL=BottomBar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BottomBar.d.ts","sourceRoot":"","sources":["../../../src/views/page-builder/BottomBar.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAEjE,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,UAAU,CAAC;IACvB,eAAe,EAAE,OAAO,CAAC;IACzB,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;CACvC;AAQD,wBAAgB,SAAS,CAAC,EACxB,UAAU,EACV,eAAe,EACf,YAAY,EACZ,YAAY,GACb,EAAE,cAAc,2CAuChB"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { Plus, Grid3X3 } from 'lucide-react';
|
|
4
|
+
import * as Switch from '@radix-ui/react-switch';
|
|
5
|
+
const DEVICE_LABELS = {
|
|
6
|
+
desktop: '100%',
|
|
7
|
+
tablet: '768px',
|
|
8
|
+
mobile: '375px',
|
|
9
|
+
};
|
|
10
|
+
export function BottomBar({ deviceMode, showGridOverlay, onAddSection, onToggleGrid, }) {
|
|
11
|
+
return (_jsxs("div", { className: "h-10 bg-card border-t border-border flex items-center px-4 gap-4 shrink-0", role: "toolbar", "aria-label": "Builder actions", children: [_jsxs("button", { onClick: onAddSection, className: "flex items-center gap-1.5 px-3 py-2 text-sm text-muted-foreground hover:text-foreground transition-colors", "aria-label": "Add a new section", children: [_jsx(Plus, { size: 14 }), _jsx("span", { children: "Add Section" })] }), _jsx("div", { className: "w-px h-5 bg-border" }), _jsxs("label", { className: "flex items-center gap-2 cursor-pointer", children: [_jsx(Grid3X3, { size: 14, className: "text-muted-foreground" }), _jsx(Switch.Root, { checked: showGridOverlay, onCheckedChange: onToggleGrid, className: "w-8 h-[18px] bg-input-background rounded-full relative data-[state=checked]:bg-primary transition-colors", "aria-label": "Toggle grid overlay", children: _jsx(Switch.Thumb, { className: "block w-3.5 h-3.5 bg-background rounded-full shadow-sm transition-transform translate-x-0.5 data-[state=checked]:translate-x-[14px]" }) }), _jsx("span", { className: "text-xs text-muted-foreground", children: "Grid" })] }), _jsx("div", { className: "flex-1" }), _jsx("span", { className: "text-xs text-muted-foreground tabular-nums", children: DEVICE_LABELS[deviceMode] })] }));
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=BottomBar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BottomBar.js","sourceRoot":"","sources":["../../../src/views/page-builder/BottomBar.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,KAAK,MAAM,MAAM,wBAAwB,CAAC;AAUjD,MAAM,aAAa,GAA+B;IAChD,OAAO,EAAE,MAAM;IACf,MAAM,EAAE,OAAO;IACf,MAAM,EAAE,OAAO;CAChB,CAAC;AAEF,MAAM,UAAU,SAAS,CAAC,EACxB,UAAU,EACV,eAAe,EACf,YAAY,EACZ,YAAY,GACG;IACf,OAAO,CACL,eAAK,SAAS,EAAC,2EAA2E,EAAC,IAAI,EAAC,SAAS,gBAAY,iBAAiB,aAEpI,kBACE,OAAO,EAAE,YAAY,EACrB,SAAS,EAAC,2GAA2G,gBAC1G,mBAAmB,aAE9B,KAAC,IAAI,IAAC,IAAI,EAAE,EAAE,GAAI,EAClB,yCAAwB,IACjB,EAGT,cAAK,SAAS,EAAC,oBAAoB,GAAG,EAGtC,iBAAO,SAAS,EAAC,wCAAwC,aACvD,KAAC,OAAO,IAAC,IAAI,EAAE,EAAE,EAAE,SAAS,EAAC,uBAAuB,GAAG,EACvD,KAAC,MAAM,CAAC,IAAI,IACV,OAAO,EAAE,eAAe,EACxB,eAAe,EAAE,YAAY,EAC7B,SAAS,EAAC,0GAA0G,gBACzG,qBAAqB,YAEhC,KAAC,MAAM,CAAC,KAAK,IAAC,SAAS,EAAC,qIAAqI,GAAG,GACpJ,EACd,eAAM,SAAS,EAAC,+BAA+B,qBAAY,IACrD,EAGR,cAAK,SAAS,EAAC,QAAQ,GAAG,EAG1B,eAAM,SAAS,EAAC,4CAA4C,YACzD,aAAa,CAAC,UAAU,CAAC,GACrB,IACH,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { DeviceMode, PageSettings } from '../../hooks/useBuilderState.js';
|
|
2
|
+
export interface BuilderToolbarProps {
|
|
3
|
+
collectionSlug: string;
|
|
4
|
+
pageSettings: PageSettings;
|
|
5
|
+
status: 'DRAFT' | 'PUBLISHED' | 'SCHEDULED';
|
|
6
|
+
dirty: boolean;
|
|
7
|
+
saving: boolean;
|
|
8
|
+
canUndo: boolean;
|
|
9
|
+
canRedo: boolean;
|
|
10
|
+
deviceMode: DeviceMode;
|
|
11
|
+
onNavigate: (path: string) => void;
|
|
12
|
+
onTitleChange: (title: string) => void;
|
|
13
|
+
onUndo: () => void;
|
|
14
|
+
onRedo: () => void;
|
|
15
|
+
onDeviceMode: (mode: DeviceMode) => void;
|
|
16
|
+
onSave: () => void;
|
|
17
|
+
onPublish: () => void;
|
|
18
|
+
onOpenAI?: () => void;
|
|
19
|
+
}
|
|
20
|
+
export declare function BuilderToolbar({ collectionSlug, pageSettings, status, dirty, saving, canUndo, canRedo, deviceMode, onNavigate, onTitleChange, onUndo, onRedo, onDeviceMode, onSave, onPublish, onOpenAI, }: BuilderToolbarProps): import("react/jsx-runtime").JSX.Element;
|
|
21
|
+
//# sourceMappingURL=BuilderToolbar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BuilderToolbar.d.ts","sourceRoot":"","sources":["../../../src/views/page-builder/BuilderToolbar.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAE/E,MAAM,WAAW,mBAAmB;IAClC,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,YAAY,CAAC;IAC3B,MAAM,EAAE,OAAO,GAAG,WAAW,GAAG,WAAW,CAAC;IAC5C,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,UAAU,CAAC;IACvB,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,YAAY,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC;IACzC,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB;AAQD,wBAAgB,cAAc,CAAC,EAC7B,cAAc,EACd,YAAY,EACZ,MAAM,EACN,KAAK,EACL,MAAM,EACN,OAAO,EACP,OAAO,EACP,UAAU,EACV,UAAU,EACV,aAAa,EACb,MAAM,EACN,MAAM,EACN,YAAY,EACZ,MAAM,EACN,SAAS,EACT,QAAQ,GACT,EAAE,mBAAmB,2CAsIrB"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import { ChevronLeft, Undo2, Redo2, Monitor, Tablet, Smartphone, Loader2, Sparkles, } from 'lucide-react';
|
|
4
|
+
const STATUS_STYLES = {
|
|
5
|
+
DRAFT: 'bg-muted text-muted-foreground',
|
|
6
|
+
PUBLISHED: 'bg-primary/10 text-primary',
|
|
7
|
+
SCHEDULED: 'bg-accent text-accent-foreground',
|
|
8
|
+
};
|
|
9
|
+
export function BuilderToolbar({ collectionSlug, pageSettings, status, dirty, saving, canUndo, canRedo, deviceMode, onNavigate, onTitleChange, onUndo, onRedo, onDeviceMode, onSave, onPublish, onOpenAI, }) {
|
|
10
|
+
const collectionLabel = collectionSlug.charAt(0).toUpperCase() + collectionSlug.slice(1);
|
|
11
|
+
return (_jsxs("div", { className: "h-14 bg-card border-b border-border flex items-center px-4 gap-3 shrink-0", role: "toolbar", "aria-label": "Page builder toolbar", children: [_jsxs("button", { onClick: () => onNavigate(`/collections/${collectionSlug}`), className: "flex items-center gap-1 text-sm text-muted-foreground hover:text-foreground transition-colors", "aria-label": `Back to ${collectionLabel}`, children: [_jsx(ChevronLeft, { size: 16 }), _jsx("span", { className: "hidden sm:inline", children: collectionLabel })] }), _jsx("div", { className: "w-px h-6 bg-border" }), _jsx("input", { type: "text", value: pageSettings.title, onChange: (e) => onTitleChange(e.target.value), placeholder: "Untitled Page", className: "flex-1 min-w-0 text-sm font-medium text-foreground bg-transparent border-none outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 rounded-sm placeholder:text-muted-foreground", "aria-label": "Page title" }), _jsx("span", { className: `text-xs font-medium px-2 py-0.5 rounded-md whitespace-nowrap ${STATUS_STYLES[status] ?? STATUS_STYLES.DRAFT}`, children: status }), dirty && !saving && (_jsx("span", { className: "w-2 h-2 rounded-full bg-destructive shrink-0", title: "Unsaved changes", "aria-label": "Unsaved changes" })), _jsx("div", { className: "w-px h-6 bg-border" }), _jsxs("div", { className: "flex items-center gap-1", children: [_jsx("button", { onClick: onUndo, disabled: !canUndo, className: "p-1.5 rounded-md text-muted-foreground hover:text-foreground hover:bg-muted disabled:opacity-30 disabled:pointer-events-none transition-colors", "aria-label": "Undo", children: _jsx(Undo2, { size: 16 }) }), _jsx("button", { onClick: onRedo, disabled: !canRedo, className: "p-1.5 rounded-md text-muted-foreground hover:text-foreground hover:bg-muted disabled:opacity-30 disabled:pointer-events-none transition-colors", "aria-label": "Redo", children: _jsx(Redo2, { size: 16 }) })] }), _jsx("div", { className: "w-px h-6 bg-border" }), _jsxs("div", { className: "flex items-center gap-0.5 bg-muted rounded-md p-0.5", children: [_jsx(DeviceButton, { active: deviceMode === 'desktop', onClick: () => onDeviceMode('desktop'), label: "Desktop view", children: _jsx(Monitor, { size: 16 }) }), _jsx(DeviceButton, { active: deviceMode === 'tablet', onClick: () => onDeviceMode('tablet'), label: "Tablet view", children: _jsx(Tablet, { size: 16 }) }), _jsx(DeviceButton, { active: deviceMode === 'mobile', onClick: () => onDeviceMode('mobile'), label: "Mobile view", children: _jsx(Smartphone, { size: 16 }) })] }), _jsx("div", { className: "w-px h-6 bg-border" }), onOpenAI && (_jsxs(_Fragment, { children: [_jsxs("button", { onClick: onOpenAI, className: "flex items-center gap-1.5 px-2.5 py-1.5 text-sm font-medium text-primary bg-primary/10 rounded-md hover:bg-primary/20 transition-colors", "aria-label": "Generate page with AI", children: [_jsx(Sparkles, { size: 14 }), _jsx("span", { className: "hidden sm:inline", children: "AI" })] }), _jsx("div", { className: "w-px h-6 bg-border" })] })), _jsxs("div", { className: "flex items-center gap-2", children: [_jsxs("button", { onClick: onSave, disabled: saving || !dirty, className: "bg-muted text-muted-foreground rounded-md px-3 py-1.5 text-sm font-medium hover:bg-muted/80 disabled:opacity-50 disabled:pointer-events-none transition-colors flex items-center gap-1.5", children: [saving && _jsx(Loader2, { size: 14, className: "animate-spin" }), saving ? 'Saving...' : 'Save'] }), _jsx("button", { onClick: onPublish, disabled: saving, className: "bg-primary text-primary-foreground rounded-md px-3 py-1.5 text-sm font-medium hover:bg-primary/90 disabled:opacity-50 disabled:pointer-events-none transition-colors", children: "Publish" })] })] }));
|
|
12
|
+
}
|
|
13
|
+
function DeviceButton({ active, onClick, label, children, }) {
|
|
14
|
+
return (_jsx("button", { onClick: onClick, className: `p-1.5 rounded-md transition-colors ${active
|
|
15
|
+
? 'bg-background text-foreground shadow-sm'
|
|
16
|
+
: 'text-muted-foreground hover:text-foreground'}`, "aria-label": label, "aria-pressed": active, children: children }));
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=BuilderToolbar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BuilderToolbar.js","sourceRoot":"","sources":["../../../src/views/page-builder/BuilderToolbar.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { BuilderNode, PageNode } from '@actuate-media/cms-core';
|
|
2
|
+
import type { PageSettings } from '../../hooks/useBuilderState.js';
|
|
3
|
+
export interface ContextPanelProps {
|
|
4
|
+
activeTab: 'block' | 'node' | 'page' | 'seo' | 'design';
|
|
5
|
+
onTabChange: (tab: 'block' | 'node' | 'page' | 'seo' | 'design') => void;
|
|
6
|
+
selectedNode: BuilderNode | null;
|
|
7
|
+
tree: PageNode;
|
|
8
|
+
pageSettings: PageSettings;
|
|
9
|
+
onUpdateSettings: (id: string, settings: Record<string, unknown>) => void;
|
|
10
|
+
onUpdateBlock: (id: string, data: Record<string, unknown>) => void;
|
|
11
|
+
onRemoveNode: (id: string) => void;
|
|
12
|
+
onDuplicateNode: (id: string) => void;
|
|
13
|
+
onMoveNodeUp: (id: string) => void;
|
|
14
|
+
onMoveNodeDown: (id: string) => void;
|
|
15
|
+
onPageSettingsChange: (settings: Partial<PageSettings>) => void;
|
|
16
|
+
onAddRow: (sectionId: string) => void;
|
|
17
|
+
config: any;
|
|
18
|
+
}
|
|
19
|
+
export declare function ContextPanel({ activeTab, onTabChange, selectedNode, tree, pageSettings, onUpdateSettings, onUpdateBlock, onRemoveNode, onDuplicateNode, onMoveNodeUp, onMoveNodeDown, onPageSettingsChange, onAddRow, config, }: ContextPanelProps): import("react/jsx-runtime").JSX.Element;
|
|
20
|
+
//# sourceMappingURL=ContextPanel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ContextPanel.d.ts","sourceRoot":"","sources":["../../../src/views/page-builder/ContextPanel.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAMrE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAEnE,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC;IACxD,WAAW,EAAE,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,KAAK,IAAI,CAAC;IACzE,YAAY,EAAE,WAAW,GAAG,IAAI,CAAC;IACjC,IAAI,EAAE,QAAQ,CAAC;IACf,YAAY,EAAE,YAAY,CAAC;IAC3B,gBAAgB,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAC1E,aAAa,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IACnE,YAAY,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,eAAe,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,YAAY,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,cAAc,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,oBAAoB,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC;IAChE,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,MAAM,EAAE,GAAG,CAAC;CACb;AAgBD,wBAAgB,YAAY,CAAC,EAC3B,SAAS,EACT,WAAW,EACX,YAAY,EACZ,IAAI,EACJ,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,cAAc,EACd,oBAAoB,EACpB,QAAQ,EACR,MAAM,GACP,EAAE,iBAAiB,2CAqFnB"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useMemo } from 'react';
|
|
4
|
+
import * as Tabs from '@radix-ui/react-tabs';
|
|
5
|
+
import { Blocks, Settings2, FileText, Search, Palette } from 'lucide-react';
|
|
6
|
+
import { BlockEditor } from './BlockEditor.js';
|
|
7
|
+
import { NodeSettings } from './NodeSettings.js';
|
|
8
|
+
import { PageSettingsEditor } from './PageSettings.js';
|
|
9
|
+
import { BuilderSEOPanel } from './SEOPanel.js';
|
|
10
|
+
import { DesignScorePanel } from './DesignScore.js';
|
|
11
|
+
const TABS = [
|
|
12
|
+
{ value: 'block', label: 'Block', icon: Blocks },
|
|
13
|
+
{ value: 'node', label: 'Node', icon: Settings2 },
|
|
14
|
+
{ value: 'page', label: 'Page', icon: FileText },
|
|
15
|
+
{ value: 'seo', label: 'SEO', icon: Search },
|
|
16
|
+
{ value: 'design', label: 'Design', icon: Palette },
|
|
17
|
+
];
|
|
18
|
+
export function ContextPanel({ activeTab, onTabChange, selectedNode, tree, pageSettings, onUpdateSettings, onUpdateBlock, onRemoveNode, onDuplicateNode, onMoveNodeUp, onMoveNodeDown, onPageSettingsChange, onAddRow, config, }) {
|
|
19
|
+
const availableTabs = useMemo(() => {
|
|
20
|
+
if (!selectedNode)
|
|
21
|
+
return TABS.filter((t) => t.value !== 'block' && t.value !== 'node');
|
|
22
|
+
if (selectedNode.type === 'block')
|
|
23
|
+
return TABS.filter((t) => t.value !== 'node');
|
|
24
|
+
return TABS.filter((t) => t.value !== 'block');
|
|
25
|
+
}, [selectedNode]);
|
|
26
|
+
const effectiveTab = useMemo(() => {
|
|
27
|
+
if (availableTabs.some((t) => t.value === activeTab))
|
|
28
|
+
return activeTab;
|
|
29
|
+
if (selectedNode?.type === 'block')
|
|
30
|
+
return 'block';
|
|
31
|
+
if (selectedNode)
|
|
32
|
+
return 'node';
|
|
33
|
+
return 'page';
|
|
34
|
+
}, [activeTab, availableTabs, selectedNode]);
|
|
35
|
+
return (_jsx("div", { className: "w-full h-full bg-card overflow-y-auto", children: _jsxs(Tabs.Root, { value: effectiveTab, onValueChange: (value) => onTabChange(value), children: [_jsx(Tabs.List, { className: "flex border-b border-border bg-muted/30", children: availableTabs.map((tab) => {
|
|
36
|
+
const Icon = tab.icon;
|
|
37
|
+
return (_jsxs(Tabs.Trigger, { value: tab.value, className: "flex-1 flex items-center justify-center gap-1.5 px-2 py-2.5 text-xs font-medium text-muted-foreground transition-colors hover:text-foreground data-[state=active]:text-foreground data-[state=active]:border-b-2 data-[state=active]:border-primary data-[state=active]:bg-background", children: [_jsx(Icon, { size: 14 }), _jsx("span", { children: tab.label })] }, tab.value));
|
|
38
|
+
}) }), _jsx(Tabs.Content, { value: "block", children: selectedNode?.type === 'block' && (_jsx(BlockEditor, { node: selectedNode, onUpdateBlock: onUpdateBlock, onUpdateSettings: onUpdateSettings, onRemoveNode: onRemoveNode, onDuplicateNode: onDuplicateNode, config: config })) }), _jsx(Tabs.Content, { value: "node", children: selectedNode && selectedNode.type !== 'block' && selectedNode.type !== 'page' && selectedNode.type !== 'savedSectionRef' && (_jsx(NodeSettings, { node: selectedNode, onUpdateSettings: onUpdateSettings, onRemoveNode: onRemoveNode, onDuplicateNode: onDuplicateNode, onMoveNodeUp: onMoveNodeUp, onMoveNodeDown: onMoveNodeDown, onAddRow: selectedNode.type === 'section' ? onAddRow : undefined })) }), _jsx(Tabs.Content, { value: "page", children: _jsx(PageSettingsEditor, { settings: pageSettings, onChange: onPageSettingsChange }) }), _jsx(Tabs.Content, { value: "seo", children: _jsx(BuilderSEOPanel, { tree: tree, pageSettings: pageSettings, onPageSettingsChange: onPageSettingsChange, selectedNodeId: selectedNode?.id ?? null }) }), _jsx(Tabs.Content, { value: "design", children: _jsx(DesignScorePanel, { tree: tree }) })] }) }));
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=ContextPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ContextPanel.js","sourceRoot":"","sources":["../../../src/views/page-builder/ContextPanel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { PageNode } from '@actuate-media/cms-core';
|
|
2
|
+
export interface DesignScorePanelProps {
|
|
3
|
+
tree: PageNode;
|
|
4
|
+
}
|
|
5
|
+
export declare function DesignScorePanel({ tree }: DesignScorePanelProps): import("react/jsx-runtime").JSX.Element;
|
|
6
|
+
//# sourceMappingURL=DesignScore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DesignScore.d.ts","sourceRoot":"","sources":["../../../src/views/page-builder/DesignScore.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,QAAQ,EAKT,MAAM,yBAAyB,CAAC;AAWjC,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,QAAQ,CAAC;CAChB;AAgMD,wBAAgB,gBAAgB,CAAC,EAAE,IAAI,EAAE,EAAE,qBAAqB,2CA0C/D"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useState, useMemo } from 'react';
|
|
4
|
+
import { analyzeDesign } from '@actuate-media/cms-core';
|
|
5
|
+
import { CheckCircle2, AlertCircle, XCircle, ChevronDown, ChevronUp, Lightbulb, Palette, } from 'lucide-react';
|
|
6
|
+
function getScoreColor(score, max) {
|
|
7
|
+
const ratio = max > 0 ? score / max : 0;
|
|
8
|
+
if (ratio >= 0.8)
|
|
9
|
+
return 'text-green-500';
|
|
10
|
+
if (ratio >= 0.5)
|
|
11
|
+
return 'text-amber-500';
|
|
12
|
+
return 'text-red-500';
|
|
13
|
+
}
|
|
14
|
+
function getBarColor(score, max) {
|
|
15
|
+
const ratio = max > 0 ? score / max : 0;
|
|
16
|
+
if (ratio >= 0.8)
|
|
17
|
+
return 'bg-green-500';
|
|
18
|
+
if (ratio >= 0.5)
|
|
19
|
+
return 'bg-amber-500';
|
|
20
|
+
return 'bg-red-500';
|
|
21
|
+
}
|
|
22
|
+
function getScoreLabel(score) {
|
|
23
|
+
if (score >= 80)
|
|
24
|
+
return 'Excellent';
|
|
25
|
+
if (score >= 65)
|
|
26
|
+
return 'Good';
|
|
27
|
+
if (score >= 50)
|
|
28
|
+
return 'Needs Work';
|
|
29
|
+
return 'Poor';
|
|
30
|
+
}
|
|
31
|
+
function getRingStrokeColor(score) {
|
|
32
|
+
if (score >= 80)
|
|
33
|
+
return 'rgb(34, 197, 94)';
|
|
34
|
+
if (score >= 50)
|
|
35
|
+
return 'rgb(245, 158, 11)';
|
|
36
|
+
return 'rgb(239, 68, 68)';
|
|
37
|
+
}
|
|
38
|
+
function StatusIcon({ status }) {
|
|
39
|
+
switch (status) {
|
|
40
|
+
case 'good':
|
|
41
|
+
return _jsx(CheckCircle2, { size: 14, className: "text-green-500 shrink-0" });
|
|
42
|
+
case 'warning':
|
|
43
|
+
return _jsx(AlertCircle, { size: 14, className: "text-amber-500 shrink-0" });
|
|
44
|
+
case 'error':
|
|
45
|
+
return _jsx(XCircle, { size: 14, className: "text-red-500 shrink-0" });
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
function SeverityBadge({ severity }) {
|
|
49
|
+
const classes = {
|
|
50
|
+
important: 'bg-red-100 text-red-700',
|
|
51
|
+
suggestion: 'bg-amber-100 text-amber-700',
|
|
52
|
+
info: 'bg-blue-100 text-blue-700',
|
|
53
|
+
};
|
|
54
|
+
return (_jsx("span", { className: `inline-block px-1.5 py-0.5 rounded text-xs font-medium ${classes[severity]}`, children: severity }));
|
|
55
|
+
}
|
|
56
|
+
function ScoreRing({ score }) {
|
|
57
|
+
const radius = 32;
|
|
58
|
+
const strokeWidth = 6;
|
|
59
|
+
const circumference = 2 * Math.PI * radius;
|
|
60
|
+
const progress = Math.min(score, 100) / 100;
|
|
61
|
+
const dashOffset = circumference * (1 - progress);
|
|
62
|
+
const size = (radius + strokeWidth) * 2;
|
|
63
|
+
return (_jsxs("div", { className: "flex flex-col items-center gap-2", children: [_jsxs("div", { className: "relative", children: [_jsxs("svg", { width: size, height: size, viewBox: `0 0 ${size} ${size}`, className: "-rotate-90", children: [_jsx("circle", { cx: size / 2, cy: size / 2, r: radius, fill: "none", stroke: "var(--border)", strokeWidth: strokeWidth }), _jsx("circle", { cx: size / 2, cy: size / 2, r: radius, fill: "none", stroke: getRingStrokeColor(score), strokeWidth: strokeWidth, strokeDasharray: circumference, strokeDashoffset: dashOffset, strokeLinecap: "round", className: "transition-all duration-700 ease-out" })] }), _jsx("div", { className: "absolute inset-0 flex items-center justify-center", children: _jsx("span", { className: `text-lg font-medium ${getScoreColor(score, 100)}`, children: score }) })] }), _jsx("span", { className: "text-xs text-muted-foreground", children: getScoreLabel(score) })] }));
|
|
64
|
+
}
|
|
65
|
+
function CategoryRow({ category, expanded, onToggle, }) {
|
|
66
|
+
const percentage = category.maxScore > 0 ? (category.score / category.maxScore) * 100 : 0;
|
|
67
|
+
return (_jsxs("div", { className: "border-b border-border last:border-b-0", children: [_jsxs("button", { type: "button", className: "w-full text-left px-4 py-3 flex flex-col gap-2 hover:bg-muted/50 transition-colors", onClick: onToggle, "aria-expanded": expanded, children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsx("span", { className: "text-xs font-medium text-foreground", children: category.label }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsxs("span", { className: "text-xs text-muted-foreground", children: [category.score, "/", category.maxScore] }), expanded ? (_jsx(ChevronUp, { size: 14, className: "text-muted-foreground" })) : (_jsx(ChevronDown, { size: 14, className: "text-muted-foreground" }))] })] }), _jsx("div", { className: "w-full h-1.5 rounded-full bg-muted overflow-hidden", children: _jsx("div", { className: `h-full rounded-full transition-all duration-500 ease-out ${getBarColor(category.score, category.maxScore)}`, style: { width: `${percentage}%` } }) })] }), expanded && category.checks.length > 0 && (_jsx("div", { className: "px-4 pb-3 flex flex-col gap-2", children: category.checks.map((check) => (_jsxs("div", { className: "flex items-start gap-2 pl-1", children: [_jsx(StatusIcon, { status: check.status }), _jsxs("div", { className: "flex flex-col", children: [_jsx("span", { className: "text-xs font-medium text-foreground", children: check.label }), _jsx("span", { className: "text-xs text-muted-foreground", children: check.detail })] })] }, check.id))) }))] }));
|
|
68
|
+
}
|
|
69
|
+
function SuggestionsList({ suggestions }) {
|
|
70
|
+
const sorted = useMemo(() => {
|
|
71
|
+
const order = {
|
|
72
|
+
important: 0,
|
|
73
|
+
suggestion: 1,
|
|
74
|
+
info: 2,
|
|
75
|
+
};
|
|
76
|
+
return [...suggestions].sort((a, b) => order[a.severity] - order[b.severity]);
|
|
77
|
+
}, [suggestions]);
|
|
78
|
+
if (sorted.length === 0)
|
|
79
|
+
return null;
|
|
80
|
+
return (_jsxs("div", { className: "px-4 py-3 border-t border-border", children: [_jsxs("div", { className: "flex items-center gap-2 mb-3", children: [_jsx(Lightbulb, { size: 14, className: "text-muted-foreground" }), _jsx("span", { className: "text-xs font-medium text-foreground", children: "Suggestions" })] }), _jsx("div", { className: "flex flex-col gap-2.5", children: sorted.map((suggestion) => (_jsxs("div", { className: "flex items-start gap-2", children: [_jsx(SeverityBadge, { severity: suggestion.severity }), _jsx("span", { className: "text-xs text-muted-foreground leading-relaxed", children: suggestion.message })] }, suggestion.id))) })] }));
|
|
81
|
+
}
|
|
82
|
+
export function DesignScorePanel({ tree }) {
|
|
83
|
+
const analysis = useMemo(() => analyzeDesign(tree), [tree]);
|
|
84
|
+
const [expandedCategories, setExpandedCategories] = useState([]);
|
|
85
|
+
const toggleCategory = (name) => {
|
|
86
|
+
setExpandedCategories((prev) => prev.includes(name) ? prev.filter((n) => n !== name) : [...prev, name]);
|
|
87
|
+
};
|
|
88
|
+
if (!tree.children || tree.children.length === 0) {
|
|
89
|
+
return (_jsxs("div", { className: "p-6 flex flex-col items-center justify-center text-center min-h-[200px]", children: [_jsx(Palette, { size: 32, className: "text-muted-foreground mb-3" }), _jsx("p", { className: "text-sm font-medium text-foreground mb-1", children: "Design Score" }), _jsx("p", { className: "text-xs text-muted-foreground", children: "Add sections to your page to see the design analysis" })] }));
|
|
90
|
+
}
|
|
91
|
+
return (_jsxs("div", { className: "flex flex-col", children: [_jsx("div", { className: "flex flex-col items-center py-5 border-b border-border", children: _jsx(ScoreRing, { score: analysis.score }) }), _jsx("div", { className: "flex flex-col", children: analysis.categories.map((category) => (_jsx(CategoryRow, { category: category, expanded: expandedCategories.includes(category.name), onToggle: () => toggleCategory(category.name) }, category.name))) }), _jsx(SuggestionsList, { suggestions: analysis.suggestions })] }));
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=DesignScore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DesignScore.js","sourceRoot":"","sources":["../../../src/views/page-builder/DesignScore.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { SectionNode, ContainerNode, RowNode, ColumnNode } from '@actuate-media/cms-core';
|
|
2
|
+
export interface NodeSettingsProps {
|
|
3
|
+
node: SectionNode | ContainerNode | RowNode | ColumnNode;
|
|
4
|
+
onUpdateSettings: (id: string, settings: Record<string, unknown>) => void;
|
|
5
|
+
onRemoveNode: (id: string) => void;
|
|
6
|
+
onDuplicateNode: (id: string) => void;
|
|
7
|
+
onMoveNodeUp: (id: string) => void;
|
|
8
|
+
onMoveNodeDown: (id: string) => void;
|
|
9
|
+
onAddRow?: (sectionId: string) => void;
|
|
10
|
+
}
|
|
11
|
+
export declare function NodeSettings({ node, onUpdateSettings, onRemoveNode, onDuplicateNode, onMoveNodeUp, onMoveNodeDown, onAddRow, }: NodeSettingsProps): import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
//# sourceMappingURL=NodeSettings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NodeSettings.d.ts","sourceRoot":"","sources":["../../../src/views/page-builder/NodeSettings.tsx"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAEV,WAAW,EACX,aAAa,EACb,OAAO,EACP,UAAU,EACX,MAAM,yBAAyB,CAAC;AAEjC,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,WAAW,GAAG,aAAa,GAAG,OAAO,GAAG,UAAU,CAAC;IACzD,gBAAgB,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAC1E,YAAY,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,eAAe,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,YAAY,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,cAAc,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,QAAQ,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC;AAiBD,wBAAgB,YAAY,CAAC,EAC3B,IAAI,EACJ,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,cAAc,EACd,QAAQ,GACT,EAAE,iBAAiB,2CAyFnB"}
|