@prenta/admin 0.98.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/dist/AdminRoot.d.ts.map +1 -1
- package/dist/AdminRoot.js +17 -28
- package/dist/AdminRoot.js.map +1 -1
- package/dist/__tests__/components/seo-score-bands.test.js +0 -10
- package/dist/__tests__/components/seo-score-bands.test.js.map +1 -1
- package/dist/__tests__/layout/sidebar-posts.test.js +6 -11
- package/dist/__tests__/layout/sidebar-posts.test.js.map +1 -1
- package/dist/__tests__/layout/sidebar-submenu.render.test.js +3 -2
- package/dist/__tests__/layout/sidebar-submenu.render.test.js.map +1 -1
- package/dist/__tests__/lib/page-audit-input.test.js +77 -1
- package/dist/__tests__/lib/page-audit-input.test.js.map +1 -1
- package/dist/__tests__/lib/page-editor-service-api.test.js +26 -23
- package/dist/__tests__/lib/page-editor-service-api.test.js.map +1 -1
- package/dist/__tests__/views/page-section-editor.test.js +0 -1
- package/dist/__tests__/views/page-section-editor.test.js.map +1 -1
- package/dist/__tests__/views/page-tab.render.test.js +0 -1
- package/dist/__tests__/views/page-tab.render.test.js.map +1 -1
- package/dist/index.d.ts +1 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -3
- package/dist/index.js.map +1 -1
- package/dist/layout/Sidebar.d.ts +3 -4
- package/dist/layout/Sidebar.d.ts.map +1 -1
- package/dist/layout/Sidebar.js +7 -38
- package/dist/layout/Sidebar.js.map +1 -1
- package/dist/lib/page-audit-input.d.ts +14 -1
- package/dist/lib/page-audit-input.d.ts.map +1 -1
- package/dist/lib/page-audit-input.js +19 -0
- package/dist/lib/page-audit-input.js.map +1 -1
- package/dist/lib/page-editor-service.d.ts +0 -7
- package/dist/lib/page-editor-service.d.ts.map +1 -1
- package/dist/lib/page-editor-service.js +9 -9
- package/dist/lib/page-editor-service.js.map +1 -1
- package/dist/prenta-admin.css +1 -1
- package/dist/views/PageEditor.d.ts +2 -2
- package/dist/views/PageEditor.js +2 -2
- package/dist/views/page-editor/PageSectionEditor.d.ts.map +1 -1
- package/dist/views/page-editor/PageSectionEditor.js +9 -15
- package/dist/views/page-editor/PageSectionEditor.js.map +1 -1
- package/package.json +4 -4
- package/src/AdminRoot.tsx +18 -68
- package/src/__tests__/components/seo-score-bands.test.ts +0 -10
- package/src/__tests__/layout/sidebar-posts.test.ts +6 -11
- package/src/__tests__/layout/sidebar-submenu.render.test.tsx +3 -2
- package/src/__tests__/lib/page-audit-input.test.ts +91 -1
- package/src/__tests__/lib/page-editor-service-api.test.ts +27 -25
- package/src/__tests__/views/page-section-editor.test.tsx +0 -1
- package/src/__tests__/views/page-tab.render.test.tsx +0 -1
- package/src/index.ts +1 -11
- package/src/layout/Sidebar.tsx +6 -41
- package/src/lib/page-audit-input.ts +36 -1
- package/src/lib/page-editor-service.ts +9 -16
- package/src/views/PageEditor.tsx +2 -2
- package/src/views/page-editor/PageSectionEditor.tsx +8 -37
- package/dist/__tests__/views/page-builder-block-renderer.render.test.d.ts +0 -2
- package/dist/__tests__/views/page-builder-block-renderer.render.test.d.ts.map +0 -1
- package/dist/__tests__/views/page-builder-block-renderer.render.test.js +0 -48
- package/dist/__tests__/views/page-builder-block-renderer.render.test.js.map +0 -1
- package/dist/__tests__/views/page-builder-form-picker.render.test.d.ts +0 -2
- package/dist/__tests__/views/page-builder-form-picker.render.test.d.ts.map +0 -1
- package/dist/__tests__/views/page-builder-form-picker.render.test.js +0 -44
- package/dist/__tests__/views/page-builder-form-picker.render.test.js.map +0 -1
- package/dist/__tests__/views/page-builder-sections-panel.render.test.d.ts +0 -2
- package/dist/__tests__/views/page-builder-sections-panel.render.test.d.ts.map +0 -1
- package/dist/__tests__/views/page-builder-sections-panel.render.test.js +0 -121
- package/dist/__tests__/views/page-builder-sections-panel.render.test.js.map +0 -1
- package/dist/__tests__/views/page-builder-template-seed.render.test.d.ts +0 -2
- package/dist/__tests__/views/page-builder-template-seed.render.test.d.ts.map +0 -1
- package/dist/__tests__/views/page-builder-template-seed.render.test.js +0 -48
- package/dist/__tests__/views/page-builder-template-seed.render.test.js.map +0 -1
- package/dist/__tests__/views/page-templates.render.test.d.ts +0 -2
- package/dist/__tests__/views/page-templates.render.test.d.ts.map +0 -1
- package/dist/__tests__/views/page-templates.render.test.js +0 -126
- package/dist/__tests__/views/page-templates.render.test.js.map +0 -1
- package/dist/hooks/useBuilderState.d.ts +0 -49
- package/dist/hooks/useBuilderState.d.ts.map +0 -1
- package/dist/hooks/useBuilderState.js +0 -238
- package/dist/hooks/useBuilderState.js.map +0 -1
- package/dist/views/page-builder/AIBlockAssist.d.ts +0 -9
- package/dist/views/page-builder/AIBlockAssist.d.ts.map +0 -1
- package/dist/views/page-builder/AIBlockAssist.js +0 -40
- package/dist/views/page-builder/AIBlockAssist.js.map +0 -1
- package/dist/views/page-builder/AIGenerateDialog.d.ts +0 -8
- package/dist/views/page-builder/AIGenerateDialog.d.ts.map +0 -1
- package/dist/views/page-builder/AIGenerateDialog.js +0 -173
- package/dist/views/page-builder/AIGenerateDialog.js.map +0 -1
- package/dist/views/page-builder/BlockEditor.d.ts +0 -11
- package/dist/views/page-builder/BlockEditor.d.ts.map +0 -1
- package/dist/views/page-builder/BlockEditor.js +0 -159
- package/dist/views/page-builder/BlockEditor.js.map +0 -1
- package/dist/views/page-builder/BlockPicker.d.ts +0 -7
- package/dist/views/page-builder/BlockPicker.d.ts.map +0 -1
- package/dist/views/page-builder/BlockPicker.js +0 -103
- package/dist/views/page-builder/BlockPicker.js.map +0 -1
- package/dist/views/page-builder/BottomBar.d.ts +0 -9
- package/dist/views/page-builder/BottomBar.d.ts.map +0 -1
- package/dist/views/page-builder/BottomBar.js +0 -13
- package/dist/views/page-builder/BottomBar.js.map +0 -1
- package/dist/views/page-builder/BuilderSectionsPanel.d.ts +0 -20
- package/dist/views/page-builder/BuilderSectionsPanel.d.ts.map +0 -1
- package/dist/views/page-builder/BuilderSectionsPanel.js +0 -105
- package/dist/views/page-builder/BuilderSectionsPanel.js.map +0 -1
- package/dist/views/page-builder/BuilderToolbar.d.ts +0 -21
- package/dist/views/page-builder/BuilderToolbar.d.ts.map +0 -1
- package/dist/views/page-builder/BuilderToolbar.js +0 -18
- package/dist/views/page-builder/BuilderToolbar.js.map +0 -1
- package/dist/views/page-builder/ContextPanel.d.ts +0 -20
- package/dist/views/page-builder/ContextPanel.d.ts.map +0 -1
- package/dist/views/page-builder/ContextPanel.js +0 -43
- package/dist/views/page-builder/ContextPanel.js.map +0 -1
- package/dist/views/page-builder/DesignScore.d.ts +0 -6
- package/dist/views/page-builder/DesignScore.d.ts.map +0 -1
- package/dist/views/page-builder/DesignScore.js +0 -93
- package/dist/views/page-builder/DesignScore.js.map +0 -1
- package/dist/views/page-builder/NodeSettings.d.ts +0 -12
- package/dist/views/page-builder/NodeSettings.d.ts.map +0 -1
- package/dist/views/page-builder/NodeSettings.js +0 -80
- package/dist/views/page-builder/NodeSettings.js.map +0 -1
- package/dist/views/page-builder/PageBuilder.d.ts +0 -10
- package/dist/views/page-builder/PageBuilder.d.ts.map +0 -1
- package/dist/views/page-builder/PageBuilder.js +0 -222
- package/dist/views/page-builder/PageBuilder.js.map +0 -1
- package/dist/views/page-builder/PageSettings.d.ts +0 -7
- package/dist/views/page-builder/PageSettings.d.ts.map +0 -1
- package/dist/views/page-builder/PageSettings.js +0 -27
- package/dist/views/page-builder/PageSettings.js.map +0 -1
- package/dist/views/page-builder/PageTemplates.d.ts +0 -5
- package/dist/views/page-builder/PageTemplates.d.ts.map +0 -1
- package/dist/views/page-builder/PageTemplates.js +0 -146
- package/dist/views/page-builder/PageTemplates.js.map +0 -1
- package/dist/views/page-builder/RelationshipField.d.ts +0 -15
- package/dist/views/page-builder/RelationshipField.d.ts.map +0 -1
- package/dist/views/page-builder/RelationshipField.js +0 -65
- package/dist/views/page-builder/RelationshipField.js.map +0 -1
- package/dist/views/page-builder/SEOPanel.d.ts +0 -10
- package/dist/views/page-builder/SEOPanel.d.ts.map +0 -1
- package/dist/views/page-builder/SEOPanel.js +0 -103
- package/dist/views/page-builder/SEOPanel.js.map +0 -1
- package/dist/views/page-builder/SavedSections.d.ts +0 -6
- package/dist/views/page-builder/SavedSections.d.ts.map +0 -1
- package/dist/views/page-builder/SavedSections.js +0 -141
- package/dist/views/page-builder/SavedSections.js.map +0 -1
- package/dist/views/page-builder/TemplatePicker.d.ts +0 -7
- package/dist/views/page-builder/TemplatePicker.d.ts.map +0 -1
- package/dist/views/page-builder/TemplatePicker.js +0 -68
- package/dist/views/page-builder/TemplatePicker.js.map +0 -1
- package/dist/views/page-builder/Widgets.d.ts +0 -13
- package/dist/views/page-builder/Widgets.d.ts.map +0 -1
- package/dist/views/page-builder/Widgets.js +0 -15
- package/dist/views/page-builder/Widgets.js.map +0 -1
- package/dist/views/page-builder/block-renderers/CTAPreview.d.ts +0 -3
- package/dist/views/page-builder/block-renderers/CTAPreview.d.ts.map +0 -1
- package/dist/views/page-builder/block-renderers/CTAPreview.js +0 -19
- package/dist/views/page-builder/block-renderers/CTAPreview.js.map +0 -1
- package/dist/views/page-builder/block-renderers/CardsPreview.d.ts +0 -3
- package/dist/views/page-builder/block-renderers/CardsPreview.d.ts.map +0 -1
- package/dist/views/page-builder/block-renderers/CardsPreview.js +0 -22
- package/dist/views/page-builder/block-renderers/CardsPreview.js.map +0 -1
- package/dist/views/page-builder/block-renderers/CodePreview.d.ts +0 -3
- package/dist/views/page-builder/block-renderers/CodePreview.d.ts.map +0 -1
- package/dist/views/page-builder/block-renderers/CodePreview.js +0 -12
- package/dist/views/page-builder/block-renderers/CodePreview.js.map +0 -1
- package/dist/views/page-builder/block-renderers/FAQPreview.d.ts +0 -3
- package/dist/views/page-builder/block-renderers/FAQPreview.d.ts.map +0 -1
- package/dist/views/page-builder/block-renderers/FAQPreview.js +0 -27
- package/dist/views/page-builder/block-renderers/FAQPreview.js.map +0 -1
- package/dist/views/page-builder/block-renderers/FallbackPreview.d.ts +0 -6
- package/dist/views/page-builder/block-renderers/FallbackPreview.d.ts.map +0 -1
- package/dist/views/page-builder/block-renderers/FallbackPreview.js +0 -7
- package/dist/views/page-builder/block-renderers/FallbackPreview.js.map +0 -1
- package/dist/views/page-builder/block-renderers/FormPreview.d.ts +0 -9
- package/dist/views/page-builder/block-renderers/FormPreview.d.ts.map +0 -1
- package/dist/views/page-builder/block-renderers/FormPreview.js +0 -52
- package/dist/views/page-builder/block-renderers/FormPreview.js.map +0 -1
- package/dist/views/page-builder/block-renderers/GalleryPreview.d.ts +0 -3
- package/dist/views/page-builder/block-renderers/GalleryPreview.d.ts.map +0 -1
- package/dist/views/page-builder/block-renderers/GalleryPreview.js +0 -19
- package/dist/views/page-builder/block-renderers/GalleryPreview.js.map +0 -1
- package/dist/views/page-builder/block-renderers/HeroPreview.d.ts +0 -3
- package/dist/views/page-builder/block-renderers/HeroPreview.d.ts.map +0 -1
- package/dist/views/page-builder/block-renderers/HeroPreview.js +0 -19
- package/dist/views/page-builder/block-renderers/HeroPreview.js.map +0 -1
- package/dist/views/page-builder/block-renderers/ImagePreview.d.ts +0 -3
- package/dist/views/page-builder/block-renderers/ImagePreview.d.ts.map +0 -1
- package/dist/views/page-builder/block-renderers/ImagePreview.js +0 -17
- package/dist/views/page-builder/block-renderers/ImagePreview.js.map +0 -1
- package/dist/views/page-builder/block-renderers/TextPreview.d.ts +0 -3
- package/dist/views/page-builder/block-renderers/TextPreview.d.ts.map +0 -1
- package/dist/views/page-builder/block-renderers/TextPreview.js +0 -22
- package/dist/views/page-builder/block-renderers/TextPreview.js.map +0 -1
- package/dist/views/page-builder/block-renderers/VideoPreview.d.ts +0 -3
- package/dist/views/page-builder/block-renderers/VideoPreview.d.ts.map +0 -1
- package/dist/views/page-builder/block-renderers/VideoPreview.js +0 -18
- package/dist/views/page-builder/block-renderers/VideoPreview.js.map +0 -1
- package/dist/views/page-builder/block-renderers/index.d.ts +0 -9
- package/dist/views/page-builder/block-renderers/index.d.ts.map +0 -1
- package/dist/views/page-builder/block-renderers/index.js +0 -25
- package/dist/views/page-builder/block-renderers/index.js.map +0 -1
- package/dist/views/page-builder/canvas/BlockRenderer.d.ts +0 -8
- package/dist/views/page-builder/canvas/BlockRenderer.d.ts.map +0 -1
- package/dist/views/page-builder/canvas/BlockRenderer.js +0 -20
- package/dist/views/page-builder/canvas/BlockRenderer.js.map +0 -1
- package/dist/views/page-builder/canvas/BuilderCanvas.d.ts +0 -10
- package/dist/views/page-builder/canvas/BuilderCanvas.d.ts.map +0 -1
- package/dist/views/page-builder/canvas/BuilderCanvas.js +0 -26
- package/dist/views/page-builder/canvas/BuilderCanvas.js.map +0 -1
- package/dist/views/page-builder/canvas/ColumnRenderer.d.ts +0 -8
- package/dist/views/page-builder/canvas/ColumnRenderer.d.ts.map +0 -1
- package/dist/views/page-builder/canvas/ColumnRenderer.js +0 -32
- package/dist/views/page-builder/canvas/ColumnRenderer.js.map +0 -1
- package/dist/views/page-builder/canvas/ContainerRenderer.d.ts +0 -8
- package/dist/views/page-builder/canvas/ContainerRenderer.d.ts.map +0 -1
- package/dist/views/page-builder/canvas/ContainerRenderer.js +0 -29
- package/dist/views/page-builder/canvas/ContainerRenderer.js.map +0 -1
- package/dist/views/page-builder/canvas/RowRenderer.d.ts +0 -8
- package/dist/views/page-builder/canvas/RowRenderer.d.ts.map +0 -1
- package/dist/views/page-builder/canvas/RowRenderer.js +0 -28
- package/dist/views/page-builder/canvas/RowRenderer.js.map +0 -1
- package/dist/views/page-builder/canvas/SectionRenderer.d.ts +0 -8
- package/dist/views/page-builder/canvas/SectionRenderer.d.ts.map +0 -1
- package/dist/views/page-builder/canvas/SectionRenderer.js +0 -50
- package/dist/views/page-builder/canvas/SectionRenderer.js.map +0 -1
- package/dist/views/page-builder/canvas/index.d.ts +0 -3
- package/dist/views/page-builder/canvas/index.d.ts.map +0 -1
- package/dist/views/page-builder/canvas/index.js +0 -2
- package/dist/views/page-builder/canvas/index.js.map +0 -1
- package/src/__tests__/views/page-builder-block-renderer.render.test.tsx +0 -66
- package/src/__tests__/views/page-builder-form-picker.render.test.tsx +0 -54
- package/src/__tests__/views/page-builder-sections-panel.render.test.tsx +0 -138
- package/src/__tests__/views/page-builder-template-seed.render.test.tsx +0 -59
- package/src/__tests__/views/page-templates.render.test.tsx +0 -182
- package/src/hooks/useBuilderState.ts +0 -361
- package/src/views/page-builder/AIBlockAssist.tsx +0 -64
- package/src/views/page-builder/AIGenerateDialog.tsx +0 -593
- package/src/views/page-builder/BlockEditor.tsx +0 -523
- package/src/views/page-builder/BlockPicker.tsx +0 -324
- package/src/views/page-builder/BottomBar.tsx +0 -65
- package/src/views/page-builder/BuilderSectionsPanel.tsx +0 -304
- package/src/views/page-builder/BuilderToolbar.tsx +0 -221
- package/src/views/page-builder/ContextPanel.tsx +0 -145
- package/src/views/page-builder/DesignScore.tsx +0 -251
- package/src/views/page-builder/NodeSettings.tsx +0 -500
- package/src/views/page-builder/PageBuilder.tsx +0 -405
- package/src/views/page-builder/PageSettings.tsx +0 -162
- package/src/views/page-builder/PageTemplates.tsx +0 -435
- package/src/views/page-builder/RelationshipField.tsx +0 -113
- package/src/views/page-builder/SEOPanel.tsx +0 -464
- package/src/views/page-builder/SavedSections.tsx +0 -480
- package/src/views/page-builder/TemplatePicker.tsx +0 -197
- package/src/views/page-builder/Widgets.tsx +0 -44
- package/src/views/page-builder/block-renderers/CTAPreview.tsx +0 -79
- package/src/views/page-builder/block-renderers/CardsPreview.tsx +0 -69
- package/src/views/page-builder/block-renderers/CodePreview.tsx +0 -46
- package/src/views/page-builder/block-renderers/FAQPreview.tsx +0 -87
- package/src/views/page-builder/block-renderers/FallbackPreview.tsx +0 -18
- package/src/views/page-builder/block-renderers/FormPreview.tsx +0 -117
- package/src/views/page-builder/block-renderers/GalleryPreview.tsx +0 -87
- package/src/views/page-builder/block-renderers/HeroPreview.tsx +0 -90
- package/src/views/page-builder/block-renderers/ImagePreview.tsx +0 -54
- package/src/views/page-builder/block-renderers/TextPreview.tsx +0 -81
- package/src/views/page-builder/block-renderers/VideoPreview.tsx +0 -73
- package/src/views/page-builder/block-renderers/index.ts +0 -34
- package/src/views/page-builder/canvas/BlockRenderer.tsx +0 -56
- package/src/views/page-builder/canvas/BuilderCanvas.tsx +0 -87
- package/src/views/page-builder/canvas/ColumnRenderer.tsx +0 -82
- package/src/views/page-builder/canvas/ContainerRenderer.tsx +0 -67
- package/src/views/page-builder/canvas/RowRenderer.tsx +0 -68
- package/src/views/page-builder/canvas/SectionRenderer.tsx +0 -93
- package/src/views/page-builder/canvas/index.ts +0 -2
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { useState, useMemo } from 'react';
|
|
4
|
-
import { analyzeSEO } from '@prenta/core/page-builder';
|
|
5
|
-
import { CheckCircle2, AlertCircle, XCircle, ChevronDown, ChevronUp, Search, Globe, Type, FileText, Clock, BarChart3, Target, Eye, } from 'lucide-react';
|
|
6
|
-
function getScoreColor(score) {
|
|
7
|
-
if (score >= 70)
|
|
8
|
-
return 'text-success';
|
|
9
|
-
if (score >= 40)
|
|
10
|
-
return 'text-warning';
|
|
11
|
-
return 'text-destructive';
|
|
12
|
-
}
|
|
13
|
-
function getRingStrokeColor(score) {
|
|
14
|
-
if (score >= 70)
|
|
15
|
-
return 'rgb(34, 197, 94)';
|
|
16
|
-
if (score >= 40)
|
|
17
|
-
return 'rgb(245, 158, 11)';
|
|
18
|
-
return 'rgb(239, 68, 68)';
|
|
19
|
-
}
|
|
20
|
-
function getScoreLabel(score) {
|
|
21
|
-
if (score >= 80)
|
|
22
|
-
return 'Excellent';
|
|
23
|
-
if (score >= 70)
|
|
24
|
-
return 'Good';
|
|
25
|
-
if (score >= 50)
|
|
26
|
-
return 'Needs Work';
|
|
27
|
-
return 'Poor';
|
|
28
|
-
}
|
|
29
|
-
function StatusIcon({ status }) {
|
|
30
|
-
switch (status) {
|
|
31
|
-
case 'good':
|
|
32
|
-
return _jsx(CheckCircle2, { size: 14, className: "text-success shrink-0" });
|
|
33
|
-
case 'warning':
|
|
34
|
-
return _jsx(AlertCircle, { size: 14, className: "text-warning shrink-0" });
|
|
35
|
-
case 'error':
|
|
36
|
-
return _jsx(XCircle, { size: 14, className: "text-destructive shrink-0" });
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
function ScoreRing({ score }) {
|
|
40
|
-
const radius = 32;
|
|
41
|
-
const strokeWidth = 6;
|
|
42
|
-
const circumference = 2 * Math.PI * radius;
|
|
43
|
-
const progress = Math.min(score, 100) / 100;
|
|
44
|
-
const dashOffset = circumference * (1 - progress);
|
|
45
|
-
const size = (radius + strokeWidth) * 2;
|
|
46
|
-
return (_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)}`, children: score }) })] }));
|
|
47
|
-
}
|
|
48
|
-
function ScoreSummary({ checks }) {
|
|
49
|
-
const passed = checks.filter((c) => c.status === 'good').length;
|
|
50
|
-
const warnings = checks.filter((c) => c.status === 'warning').length;
|
|
51
|
-
const errors = checks.filter((c) => c.status === 'error').length;
|
|
52
|
-
return (_jsxs("div", { className: "flex flex-col gap-1", children: [_jsxs("div", { className: "flex items-center gap-1.5", children: [_jsx(CheckCircle2, { size: 12, className: "text-success" }), _jsxs("span", { className: "text-muted-foreground text-xs", children: [passed, " passed"] })] }), _jsxs("div", { className: "flex items-center gap-1.5", children: [_jsx(AlertCircle, { size: 12, className: "text-warning" }), _jsxs("span", { className: "text-muted-foreground text-xs", children: [warnings, " warnings"] })] }), _jsxs("div", { className: "flex items-center gap-1.5", children: [_jsx(XCircle, { size: 12, className: "text-destructive" }), _jsxs("span", { className: "text-muted-foreground text-xs", children: [errors, " issues"] })] })] }));
|
|
53
|
-
}
|
|
54
|
-
function CollapsibleSection({ title, icon: Icon, expanded, onToggle, children, }) {
|
|
55
|
-
return (_jsxs("div", { className: "border-border border-b last:border-b-0", children: [_jsxs("button", { type: "button", className: "hover:bg-muted/50 flex w-full items-center justify-between px-4 py-3 text-left transition-colors", onClick: onToggle, "aria-expanded": expanded, children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Icon, { size: 14, className: "text-muted-foreground" }), _jsx("span", { className: "text-foreground text-xs font-medium", children: title })] }), expanded ? (_jsx(ChevronUp, { size: 14, className: "text-muted-foreground" })) : (_jsx(ChevronDown, { size: 14, className: "text-muted-foreground" }))] }), expanded && _jsx("div", { className: "px-4 pb-4", children: children })] }));
|
|
56
|
-
}
|
|
57
|
-
function SEOChecksList({ checks }) {
|
|
58
|
-
return (_jsx("div", { className: "flex flex-col gap-2", children: checks.map((check) => (_jsxs("div", { className: "flex items-start gap-2", children: [_jsx(StatusIcon, { status: check.status }), _jsxs("div", { className: "flex flex-col", children: [_jsx("span", { className: "text-foreground text-xs font-medium", children: check.label }), _jsx("span", { className: "text-muted-foreground text-xs", children: check.detail })] })] }, check.id))) }));
|
|
59
|
-
}
|
|
60
|
-
function ReadabilityGrid({ readability }) {
|
|
61
|
-
const fleschLabel = readability.fleschScore >= 60
|
|
62
|
-
? 'Easy'
|
|
63
|
-
: readability.fleschScore >= 30
|
|
64
|
-
? 'Moderate'
|
|
65
|
-
: 'Difficult';
|
|
66
|
-
return (_jsxs("div", { className: "grid grid-cols-2 gap-3", children: [_jsxs("div", { className: "bg-muted/50 flex flex-col gap-1 rounded-md p-3", children: [_jsxs("div", { className: "flex items-center gap-1.5", children: [_jsx(BarChart3, { size: 12, className: "text-muted-foreground" }), _jsx("span", { className: "text-muted-foreground text-xs", children: "Flesch Score" })] }), _jsx("span", { className: `text-sm font-medium ${getScoreColor(readability.fleschScore)}`, children: readability.fleschScore }), _jsx("span", { className: "text-muted-foreground text-xs", children: fleschLabel })] }), _jsxs("div", { className: "bg-muted/50 flex flex-col gap-1 rounded-md p-3", children: [_jsxs("div", { className: "flex items-center gap-1.5", children: [_jsx(Type, { size: 12, className: "text-muted-foreground" }), _jsx("span", { className: "text-muted-foreground text-xs", children: "Word Count" })] }), _jsx("span", { className: "text-foreground text-sm font-medium", children: readability.wordCount }), _jsx("span", { className: "text-muted-foreground text-xs", children: readability.wordCount >= 300 ? 'Good length' : 'Short' })] }), _jsxs("div", { className: "bg-muted/50 flex flex-col gap-1 rounded-md p-3", children: [_jsxs("div", { className: "flex items-center gap-1.5", children: [_jsx(FileText, { size: 12, className: "text-muted-foreground" }), _jsx("span", { className: "text-muted-foreground text-xs", children: "Avg Sentence" })] }), _jsxs("span", { className: "text-foreground text-sm font-medium", children: [readability.avgSentenceLength, " words"] }), _jsx("span", { className: "text-muted-foreground text-xs", children: readability.avgSentenceLength <= 20 ? 'Good' : 'Long' })] }), _jsxs("div", { className: "bg-muted/50 flex flex-col gap-1 rounded-md p-3", children: [_jsxs("div", { className: "flex items-center gap-1.5", children: [_jsx(Clock, { size: 12, className: "text-muted-foreground" }), _jsx("span", { className: "text-muted-foreground text-xs", children: "Reading Time" })] }), _jsxs("span", { className: "text-foreground text-sm font-medium", children: [readability.readingTime, " min"] }), _jsxs("span", { className: "text-muted-foreground text-xs", children: ["~", readability.wordCount, " words"] })] })] }));
|
|
67
|
-
}
|
|
68
|
-
function PerBlockHints({ hints }) {
|
|
69
|
-
return (_jsx("div", { className: "flex flex-col gap-2", children: hints.map((hint, index) => (_jsxs("div", { className: "flex items-start gap-2", children: [_jsx(StatusIcon, { status: hint.status }), _jsxs("div", { className: "flex flex-col", children: [_jsx("span", { className: "text-foreground text-xs font-medium", children: hint.label }), _jsx("span", { className: "text-muted-foreground text-xs", children: hint.detail })] })] }, `${hint.id}-${index}`))) }));
|
|
70
|
-
}
|
|
71
|
-
function BasicSEOFields({ pageSettings, onPageSettingsChange, }) {
|
|
72
|
-
const metaTitleLength = (pageSettings.metaTitle || '').length;
|
|
73
|
-
const metaDescLength = (pageSettings.metaDescription || '').length;
|
|
74
|
-
return (_jsxs("div", { className: "flex flex-col gap-4", children: [_jsxs("div", { className: "flex flex-col gap-1.5", children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsx("label", { className: "text-foreground text-xs font-medium", children: "Meta Title" }), _jsxs("span", { className: `text-xs ${metaTitleLength > 60 ? 'text-destructive' : metaTitleLength > 0 ? 'text-muted-foreground' : 'text-muted-foreground'}`, children: [metaTitleLength, "/60"] })] }), _jsx("input", { type: "text", value: pageSettings.metaTitle || '', onChange: (e) => onPageSettingsChange({ metaTitle: e.target.value }), placeholder: "Page title for search engines", className: "bg-input-background border-border text-foreground placeholder:text-muted-foreground focus:ring-primary w-full rounded-md border px-3 py-2 text-sm focus:ring-1 focus:outline-none" })] }), _jsxs("div", { className: "flex flex-col gap-1.5", children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsx("label", { className: "text-foreground text-xs font-medium", children: "Meta Description" }), _jsxs("span", { className: `text-xs ${metaDescLength > 160 ? 'text-destructive' : metaDescLength > 0 ? 'text-muted-foreground' : 'text-muted-foreground'}`, children: [metaDescLength, "/160"] })] }), _jsx("textarea", { value: pageSettings.metaDescription || '', onChange: (e) => onPageSettingsChange({ metaDescription: e.target.value }), placeholder: "Brief description of the page content", rows: 3, className: "bg-input-background border-border text-foreground placeholder:text-muted-foreground focus:ring-primary w-full resize-none rounded-md border px-3 py-2 text-sm focus:ring-1 focus:outline-none" })] }), _jsxs("div", { className: "flex flex-col gap-1.5", children: [_jsx("label", { className: "text-foreground text-xs font-medium", children: "Focus Keyphrase" }), _jsx("input", { type: "text", value: pageSettings.focusKeyphrase || '', onChange: (e) => onPageSettingsChange({ focusKeyphrase: e.target.value }), placeholder: "Primary keyword or phrase", className: "bg-input-background border-border text-foreground placeholder:text-muted-foreground focus:ring-primary w-full rounded-md border px-3 py-2 text-sm focus:ring-1 focus:outline-none" })] })] }));
|
|
75
|
-
}
|
|
76
|
-
function SearchPreview({ pageSettings }) {
|
|
77
|
-
const title = pageSettings.metaTitle || pageSettings.title || 'Untitled Page';
|
|
78
|
-
const description = pageSettings.metaDescription || 'No description set';
|
|
79
|
-
const slug = pageSettings.slug || 'page';
|
|
80
|
-
return (_jsxs("div", { className: "bg-background border-border rounded-md border p-4", children: [_jsx("p", { className: "text-muted-foreground mb-2 text-xs", children: "Google Search Preview" }), _jsxs("div", { className: "flex flex-col gap-1", children: [_jsx("p", { className: "text-primary truncate text-sm", children: title }), _jsxs("p", { className: "text-success truncate text-xs", children: ["example.com/", slug] }), _jsx("p", { className: "text-muted-foreground line-clamp-2 text-xs", children: description })] })] }));
|
|
81
|
-
}
|
|
82
|
-
function SocialPreview({ pageSettings }) {
|
|
83
|
-
const title = pageSettings.metaTitle || pageSettings.title || 'Untitled Page';
|
|
84
|
-
const description = pageSettings.metaDescription || 'No description set';
|
|
85
|
-
return (_jsxs("div", { className: "bg-background border-border overflow-hidden rounded-md border", children: [_jsx("p", { className: "text-muted-foreground px-4 pt-3 pb-2 text-xs", children: "Open Graph Preview" }), pageSettings.ogImage && (_jsx("div", { className: "bg-muted flex h-32 w-full items-center justify-center overflow-hidden", children: _jsx("img", { src: pageSettings.ogImage, alt: "OG preview", className: "h-full w-full object-cover" }) })), !pageSettings.ogImage && (_jsx("div", { className: "bg-muted flex h-32 w-full items-center justify-center", children: _jsx(Globe, { size: 24, className: "text-muted-foreground" }) })), _jsxs("div", { className: "flex flex-col gap-1 p-3", children: [_jsx("p", { className: "text-muted-foreground text-xs uppercase", children: "example.com" }), _jsx("p", { className: "text-foreground truncate text-sm font-medium", children: title }), _jsx("p", { className: "text-muted-foreground line-clamp-2 text-xs", children: description })] })] }));
|
|
86
|
-
}
|
|
87
|
-
export function BuilderSEOPanel({ tree, pageSettings, onPageSettingsChange, selectedNodeId, }) {
|
|
88
|
-
const analysis = useMemo(() => analyzeSEO(tree, pageSettings), [tree, pageSettings]);
|
|
89
|
-
const [expandedSections, setExpandedSections] = useState(['checks']);
|
|
90
|
-
const toggleSection = (section) => {
|
|
91
|
-
setExpandedSections((prev) => prev.includes(section) ? prev.filter((s) => s !== section) : [...prev, section]);
|
|
92
|
-
};
|
|
93
|
-
const blockHints = useMemo(() => {
|
|
94
|
-
if (!selectedNodeId)
|
|
95
|
-
return [];
|
|
96
|
-
return analysis.perBlockHints.get(selectedNodeId) || [];
|
|
97
|
-
}, [analysis.perBlockHints, selectedNodeId]);
|
|
98
|
-
if (!tree.children || tree.children.length === 0) {
|
|
99
|
-
return (_jsxs("div", { className: "flex min-h-[200px] flex-col items-center justify-center p-6 text-center", children: [_jsx(Search, { size: 32, className: "text-muted-foreground mb-3" }), _jsx("p", { className: "text-foreground mb-1 text-sm font-medium", children: "SEO Analysis" }), _jsx("p", { className: "text-muted-foreground text-xs", children: "Add content to your page to see SEO analysis" })] }));
|
|
100
|
-
}
|
|
101
|
-
return (_jsxs("div", { className: "flex flex-col", children: [_jsxs("div", { className: "border-border flex items-center gap-4 border-b px-4 py-5", children: [_jsx(ScoreRing, { score: analysis.score }), _jsxs("div", { className: "flex flex-col gap-1", children: [_jsx("span", { className: "text-foreground text-xs font-medium", children: getScoreLabel(analysis.score) }), _jsx(ScoreSummary, { checks: analysis.checks })] })] }), _jsxs("div", { className: "flex flex-col", children: [_jsx(CollapsibleSection, { title: "SEO Checks", icon: Search, expanded: expandedSections.includes('checks'), onToggle: () => toggleSection('checks'), children: _jsx(SEOChecksList, { checks: analysis.checks }) }), _jsx(CollapsibleSection, { title: "Readability", icon: BarChart3, expanded: expandedSections.includes('readability'), onToggle: () => toggleSection('readability'), children: _jsx(ReadabilityGrid, { readability: analysis.readability }) }), blockHints.length > 0 && (_jsx(CollapsibleSection, { title: "Block Hints", icon: Target, expanded: expandedSections.includes('blockHints'), onToggle: () => toggleSection('blockHints'), children: _jsx(PerBlockHints, { hints: blockHints }) })), _jsx(CollapsibleSection, { title: "Basic SEO", icon: FileText, expanded: expandedSections.includes('basicSeo'), onToggle: () => toggleSection('basicSeo'), children: _jsx(BasicSEOFields, { pageSettings: pageSettings, onPageSettingsChange: onPageSettingsChange }) }), _jsx(CollapsibleSection, { title: "Search Preview", icon: Eye, expanded: expandedSections.includes('searchPreview'), onToggle: () => toggleSection('searchPreview'), children: _jsx(SearchPreview, { pageSettings: pageSettings }) }), _jsx(CollapsibleSection, { title: "Social Preview", icon: Globe, expanded: expandedSections.includes('socialPreview'), onToggle: () => toggleSection('socialPreview'), children: _jsx(SocialPreview, { pageSettings: pageSettings }) })] })] }));
|
|
102
|
-
}
|
|
103
|
-
//# sourceMappingURL=SEOPanel.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SEOPanel.js","sourceRoot":"","sources":["../../../src/views/page-builder/SEOPanel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SavedSections.d.ts","sourceRoot":"","sources":["../../../src/views/page-builder/SavedSections.tsx"],"names":[],"mappings":"AAmBA,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC,MAAM,EAAE,GAAG,CAAA;CACZ;AA2CD,wBAAgB,aAAa,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,kBAAkB,2CA6QvE"}
|
|
@@ -1,141 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { useState, useEffect, useCallback } from 'react';
|
|
4
|
-
import { Plus, ArrowLeft, Edit, Trash2, Copy, Layers, Loader2, AlertTriangle, Calendar, Hash, } from 'lucide-react';
|
|
5
|
-
import { toast } from 'sonner';
|
|
6
|
-
import { cmsApi } from '../../lib/api.js';
|
|
7
|
-
import { createSection, createContainer, createRow, createColumn } from '@prenta/core/page-builder';
|
|
8
|
-
const CATEGORIES = ['header', 'footer', 'content', 'sidebar'];
|
|
9
|
-
const CATEGORY_COLORS = {
|
|
10
|
-
header: 'bg-primary/10 text-primary',
|
|
11
|
-
footer: 'bg-accent text-foreground',
|
|
12
|
-
content: 'bg-muted text-muted-foreground',
|
|
13
|
-
sidebar: 'bg-primary/10 text-primary',
|
|
14
|
-
};
|
|
15
|
-
function formatDate(dateStr) {
|
|
16
|
-
return new Date(dateStr).toLocaleDateString(undefined, {
|
|
17
|
-
month: 'short',
|
|
18
|
-
day: 'numeric',
|
|
19
|
-
year: 'numeric',
|
|
20
|
-
});
|
|
21
|
-
}
|
|
22
|
-
function createEmptySectionTree() {
|
|
23
|
-
const col = createColumn(100);
|
|
24
|
-
const row = createRow([col]);
|
|
25
|
-
const container = createContainer();
|
|
26
|
-
container.children = [row];
|
|
27
|
-
const section = createSection();
|
|
28
|
-
section.children = [container];
|
|
29
|
-
return section;
|
|
30
|
-
}
|
|
31
|
-
export function SavedSections({ onNavigate, config }) {
|
|
32
|
-
const [sections, setSections] = useState([]);
|
|
33
|
-
const [loading, setLoading] = useState(true);
|
|
34
|
-
const [error, setError] = useState(null);
|
|
35
|
-
const [viewState, setViewState] = useState({ mode: 'list' });
|
|
36
|
-
const [activeCategory, setActiveCategory] = useState('all');
|
|
37
|
-
const [deleteConfirmId, setDeleteConfirmId] = useState(null);
|
|
38
|
-
const [saving, setSaving] = useState(false);
|
|
39
|
-
const fetchSections = useCallback(async () => {
|
|
40
|
-
setLoading(true);
|
|
41
|
-
setError(null);
|
|
42
|
-
const res = await cmsApi('/saved-sections');
|
|
43
|
-
if (res.error) {
|
|
44
|
-
setError(res.error);
|
|
45
|
-
}
|
|
46
|
-
else {
|
|
47
|
-
setSections(res.data ?? []);
|
|
48
|
-
}
|
|
49
|
-
setLoading(false);
|
|
50
|
-
}, []);
|
|
51
|
-
useEffect(() => {
|
|
52
|
-
fetchSections();
|
|
53
|
-
}, [fetchSections]);
|
|
54
|
-
const filteredSections = activeCategory === 'all' ? sections : sections.filter((s) => s.category === activeCategory);
|
|
55
|
-
async function handleDelete(id) {
|
|
56
|
-
const res = await cmsApi(`/saved-sections/${id}`, { method: 'DELETE' });
|
|
57
|
-
if (res.error) {
|
|
58
|
-
toast.error(res.error);
|
|
59
|
-
}
|
|
60
|
-
else {
|
|
61
|
-
toast.success('Section deleted');
|
|
62
|
-
setSections((prev) => prev.filter((s) => s.id !== id));
|
|
63
|
-
}
|
|
64
|
-
setDeleteConfirmId(null);
|
|
65
|
-
}
|
|
66
|
-
async function handleDuplicate(section) {
|
|
67
|
-
const res = await cmsApi('/saved-sections', {
|
|
68
|
-
method: 'POST',
|
|
69
|
-
body: JSON.stringify({
|
|
70
|
-
name: `${section.name} (Copy)`,
|
|
71
|
-
description: section.description,
|
|
72
|
-
category: section.category,
|
|
73
|
-
tree: section.tree,
|
|
74
|
-
}),
|
|
75
|
-
});
|
|
76
|
-
if (res.error) {
|
|
77
|
-
toast.error(res.error);
|
|
78
|
-
}
|
|
79
|
-
else {
|
|
80
|
-
toast.success('Section duplicated');
|
|
81
|
-
fetchSections();
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
if (viewState.mode === 'create' || viewState.mode === 'edit') {
|
|
85
|
-
return (_jsx(SectionForm, { initial: viewState.mode === 'edit' ? viewState.section : undefined, saving: saving, onSave: async (data) => {
|
|
86
|
-
setSaving(true);
|
|
87
|
-
if (viewState.mode === 'create') {
|
|
88
|
-
const res = await cmsApi('/saved-sections', {
|
|
89
|
-
method: 'POST',
|
|
90
|
-
body: JSON.stringify({ ...data, tree: createEmptySectionTree() }),
|
|
91
|
-
});
|
|
92
|
-
setSaving(false);
|
|
93
|
-
if (res.error) {
|
|
94
|
-
toast.error(res.error);
|
|
95
|
-
}
|
|
96
|
-
else {
|
|
97
|
-
toast.success('Section created');
|
|
98
|
-
setViewState({ mode: 'list' });
|
|
99
|
-
fetchSections();
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
else {
|
|
103
|
-
const res = await cmsApi(`/saved-sections/${viewState.section.id}`, {
|
|
104
|
-
method: 'PUT',
|
|
105
|
-
body: JSON.stringify(data),
|
|
106
|
-
});
|
|
107
|
-
setSaving(false);
|
|
108
|
-
if (res.error) {
|
|
109
|
-
toast.error(res.error);
|
|
110
|
-
}
|
|
111
|
-
else {
|
|
112
|
-
toast.success('Section updated');
|
|
113
|
-
setViewState({ mode: 'list' });
|
|
114
|
-
fetchSections();
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
}, onCancel: () => setViewState({ mode: 'list' }) }));
|
|
118
|
-
}
|
|
119
|
-
return (_jsxs("div", { className: "p-4 pr-8", children: [_jsxs("div", { className: "mb-6 flex items-center justify-between", children: [_jsxs("div", { children: [_jsx("h1", { className: "text-foreground", children: "Saved Sections" }), _jsx("p", { className: "text-muted-foreground mt-1 text-sm", children: "Reusable sections for the page builder" })] }), _jsxs("button", { type: "button", onClick: () => setViewState({ mode: 'create' }), className: "bg-primary text-primary-foreground hover:bg-primary/90 flex items-center gap-2 rounded-lg px-4 py-2 text-sm font-medium transition-colors", children: [_jsx(Plus, { size: 16 }), "Create Section"] })] }), _jsxs("div", { className: "border-border mb-4 flex items-center gap-1 border-b", children: [_jsx(CategoryTab, { label: "All", active: activeCategory === 'all', onClick: () => setActiveCategory('all') }), CATEGORIES.map((cat) => (_jsx(CategoryTab, { label: cat.charAt(0).toUpperCase() + cat.slice(1), active: activeCategory === cat, onClick: () => setActiveCategory(cat) }, cat)))] }), loading && (_jsx("div", { className: "flex items-center justify-center py-16", children: _jsx(Loader2, { className: "text-muted-foreground h-6 w-6 animate-spin" }) })), error && !loading && (_jsxs("div", { className: "flex flex-col items-center justify-center py-12 text-center", children: [_jsx(AlertTriangle, { size: 24, className: "text-destructive mb-2" }), _jsx("p", { className: "text-muted-foreground mb-3 text-sm", children: error }), _jsx("button", { type: "button", onClick: fetchSections, className: "text-foreground border-border hover:bg-accent rounded-md border px-3 py-1.5 text-sm font-medium transition-colors", children: "Retry" })] })), !loading && !error && filteredSections.length === 0 && (_jsxs("div", { className: "flex flex-col items-center justify-center py-16 text-center", children: [_jsx(Layers, { size: 32, className: "text-muted-foreground mb-3" }), _jsx("p", { className: "text-foreground mb-1 text-sm font-medium", children: "No saved sections" }), _jsx("p", { className: "text-muted-foreground mb-4 text-xs", children: activeCategory === 'all'
|
|
120
|
-
? 'Create your first reusable section to get started.'
|
|
121
|
-
: `No sections in the "${activeCategory}" category.` }), activeCategory === 'all' && (_jsxs("button", { type: "button", onClick: () => setViewState({ mode: 'create' }), className: "bg-primary text-primary-foreground hover:bg-primary/90 flex items-center gap-2 rounded-md px-3 py-1.5 text-sm font-medium transition-colors", children: [_jsx(Plus, { size: 14 }), "Create Section"] }))] })), !loading && !error && filteredSections.length > 0 && (_jsx("div", { className: "grid grid-cols-1 gap-3 lg:grid-cols-2", children: filteredSections.map((section) => (_jsxs("div", { className: "border-border bg-card hover:border-primary/50 rounded-lg border p-4 transition-colors", children: [_jsxs("div", { className: "flex items-start justify-between gap-3", children: [_jsxs("div", { className: "min-w-0 flex-1", children: [_jsx("p", { className: "text-foreground truncate text-sm font-medium", children: section.name }), section.description && (_jsx("p", { className: "text-muted-foreground mt-0.5 line-clamp-2 text-xs", children: section.description }))] }), _jsx("span", { className: `shrink-0 rounded-full px-2 py-0.5 text-xs ${CATEGORY_COLORS[section.category] ?? 'bg-muted text-muted-foreground'}`, children: section.category })] }), _jsxs("div", { className: "text-muted-foreground mt-3 flex items-center gap-4 text-xs", children: [_jsxs("span", { className: "flex items-center gap-1", children: [_jsx(Hash, { size: 12 }), section.usageCount, " use", section.usageCount !== 1 ? 's' : ''] }), _jsxs("span", { className: "flex items-center gap-1", children: [_jsx(Calendar, { size: 12 }), formatDate(section.createdAt)] }), section.tree && (_jsxs("span", { className: "flex items-center gap-1", children: [_jsx(Layers, { size: 12 }), JSON.stringify(section.tree).length > 1000 ? 'Complex' : 'Simple'] }))] }), _jsxs("div", { className: "border-border mt-3 flex items-center gap-1 border-t pt-3", children: [_jsxs("button", { type: "button", onClick: () => setViewState({ mode: 'edit', section }), className: "text-foreground hover:bg-accent flex items-center gap-1.5 rounded-md px-2.5 py-1.5 text-xs font-medium transition-colors", "aria-label": `Edit ${section.name}`, children: [_jsx(Edit, { size: 13 }), "Edit"] }), _jsxs("button", { type: "button", onClick: () => handleDuplicate(section), className: "text-foreground hover:bg-accent flex items-center gap-1.5 rounded-md px-2.5 py-1.5 text-xs font-medium transition-colors", "aria-label": `Duplicate ${section.name}`, children: [_jsx(Copy, { size: 13 }), "Duplicate"] }), deleteConfirmId === section.id ? (_jsxs("div", { className: "ml-auto flex items-center gap-1", children: [_jsx("span", { className: "text-destructive mr-1 text-xs", children: "Delete?" }), _jsx("button", { type: "button", onClick: () => handleDelete(section.id), className: "text-destructive-foreground bg-destructive hover:bg-destructive/90 rounded-md px-2 py-1 text-xs font-medium transition-colors", children: "Yes" }), _jsx("button", { type: "button", onClick: () => setDeleteConfirmId(null), className: "text-foreground border-border hover:bg-accent rounded-md border px-2 py-1 text-xs font-medium transition-colors", children: "No" })] })) : (_jsxs("button", { type: "button", onClick: () => setDeleteConfirmId(section.id), className: "text-destructive hover:bg-destructive/10 ml-auto flex items-center gap-1.5 rounded-md px-2.5 py-1.5 text-xs font-medium transition-colors", "aria-label": `Delete ${section.name}`, children: [_jsx(Trash2, { size: 13 }), "Delete"] }))] })] }, section.id))) }))] }));
|
|
122
|
-
}
|
|
123
|
-
function CategoryTab({ label, active, onClick }) {
|
|
124
|
-
return (_jsx("button", { type: "button", onClick: onClick, className: `-mb-px border-b-2 px-3 py-2 text-sm transition-colors ${active
|
|
125
|
-
? 'border-primary text-foreground font-medium'
|
|
126
|
-
: 'text-muted-foreground hover:text-foreground border-transparent'}`, children: label }));
|
|
127
|
-
}
|
|
128
|
-
function SectionForm({ initial, saving, onSave, onCancel }) {
|
|
129
|
-
const [name, setName] = useState(initial?.name ?? '');
|
|
130
|
-
const [description, setDescription] = useState(initial?.description ?? '');
|
|
131
|
-
const [category, setCategory] = useState(initial?.category ?? 'content');
|
|
132
|
-
function handleSubmit(e) {
|
|
133
|
-
e.preventDefault();
|
|
134
|
-
if (!name.trim())
|
|
135
|
-
return;
|
|
136
|
-
onSave({ name: name.trim(), description: description.trim(), category });
|
|
137
|
-
}
|
|
138
|
-
const treeSize = initial?.tree ? JSON.stringify(initial.tree).length : null;
|
|
139
|
-
return (_jsxs("div", { className: "p-4 pr-8", children: [_jsxs("div", { className: "mb-6", children: [_jsxs("button", { type: "button", onClick: onCancel, className: "text-muted-foreground hover:text-foreground mb-3 flex items-center gap-1.5 text-sm transition-colors", "aria-label": "Back to saved sections", children: [_jsx(ArrowLeft, { size: 16 }), "Back"] }), _jsx("h1", { className: "text-foreground", children: initial ? `Edit: ${initial.name}` : 'Create Saved Section' })] }), _jsxs("form", { onSubmit: handleSubmit, className: "max-w-lg space-y-4", children: [_jsxs("div", { children: [_jsxs("label", { htmlFor: "section-name", className: "text-foreground mb-1 block text-sm font-medium", children: ["Name ", _jsx("span", { className: "text-destructive", children: "*" })] }), _jsx("input", { id: "section-name", type: "text", value: name, onChange: (e) => setName(e.target.value), required: true, placeholder: "e.g. Hero Banner", className: "bg-background border-input focus:ring-ring w-full rounded-md border px-3 py-2 text-sm focus:ring-2 focus:outline-none" })] }), _jsxs("div", { children: [_jsx("label", { htmlFor: "section-description", className: "text-foreground mb-1 block text-sm font-medium", children: "Description" }), _jsx("textarea", { id: "section-description", value: description, onChange: (e) => setDescription(e.target.value), placeholder: "Optional description of this section...", rows: 3, className: "bg-background border-input focus:ring-ring w-full resize-none rounded-md border px-3 py-2 text-sm focus:ring-2 focus:outline-none" })] }), _jsxs("div", { children: [_jsx("label", { htmlFor: "section-category", className: "text-foreground mb-1 block text-sm font-medium", children: "Category" }), _jsx("select", { id: "section-category", value: category, onChange: (e) => setCategory(e.target.value), className: "bg-background border-input focus:ring-ring w-full rounded-md border px-3 py-2 text-sm focus:ring-2 focus:outline-none", children: CATEGORIES.map((cat) => (_jsx("option", { value: cat, children: cat.charAt(0).toUpperCase() + cat.slice(1) }, cat))) })] }), treeSize !== null && (_jsx("div", { className: "border-border bg-muted rounded-md border p-3", children: _jsxs("p", { className: "text-muted-foreground text-xs", children: ["Section tree editing is available in the page builder. Current tree size:", ' ', (treeSize / 1024).toFixed(1), " KB"] }) })), _jsxs("div", { className: "flex items-center gap-3 pt-2", children: [_jsxs("button", { type: "submit", disabled: saving || !name.trim(), className: "bg-primary text-primary-foreground hover:bg-primary/90 flex items-center gap-2 rounded-lg px-4 py-2 text-sm font-medium transition-colors disabled:cursor-not-allowed disabled:opacity-50", children: [saving && _jsx(Loader2, { size: 14, className: "animate-spin" }), initial ? 'Save Changes' : 'Create Section'] }), _jsx("button", { type: "button", onClick: onCancel, disabled: saving, className: "text-foreground border-border hover:bg-accent rounded-lg border px-4 py-2 text-sm font-medium transition-colors disabled:opacity-50", children: "Cancel" })] })] })] }));
|
|
140
|
-
}
|
|
141
|
-
//# sourceMappingURL=SavedSections.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SavedSections.js","sourceRoot":"","sources":["../../../src/views/page-builder/SavedSections.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import type { PageNode } from '@prenta/core';
|
|
2
|
-
export interface TemplatePickerProps {
|
|
3
|
-
onSelect: (templateTree: PageNode) => void;
|
|
4
|
-
onClose: () => void;
|
|
5
|
-
}
|
|
6
|
-
export declare function TemplatePicker({ onSelect, onClose }: TemplatePickerProps): import("react/jsx-runtime").JSX.Element;
|
|
7
|
-
//# sourceMappingURL=TemplatePicker.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TemplatePicker.d.ts","sourceRoot":"","sources":["../../../src/views/page-builder/TemplatePicker.tsx"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAE5C,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,CAAC,YAAY,EAAE,QAAQ,KAAK,IAAI,CAAA;IAC1C,OAAO,EAAE,MAAM,IAAI,CAAA;CACpB;AAkCD,wBAAgB,cAAc,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,mBAAmB,2CA4IxE"}
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { useState, useEffect, useCallback } from 'react';
|
|
4
|
-
import { X, Loader2, AlertTriangle, Layout, FileText, MapPin, Phone, BookOpen, File, } from 'lucide-react';
|
|
5
|
-
import { cmsApi } from '../../lib/api.js';
|
|
6
|
-
import { createEmptyPage } from '@prenta/core/page-builder';
|
|
7
|
-
const categoryIcons = {
|
|
8
|
-
landing: Layout,
|
|
9
|
-
blog: FileText,
|
|
10
|
-
contact: MapPin,
|
|
11
|
-
portfolio: BookOpen,
|
|
12
|
-
mobile: Phone,
|
|
13
|
-
};
|
|
14
|
-
const categoryColors = {
|
|
15
|
-
landing: 'bg-primary/10 text-primary',
|
|
16
|
-
blog: 'bg-accent text-foreground',
|
|
17
|
-
contact: 'bg-primary/10 text-primary',
|
|
18
|
-
portfolio: 'bg-accent text-foreground',
|
|
19
|
-
mobile: 'bg-primary/10 text-primary',
|
|
20
|
-
};
|
|
21
|
-
function resolveIcon(category) {
|
|
22
|
-
return categoryIcons[category] ?? File;
|
|
23
|
-
}
|
|
24
|
-
function resolveBadgeColor(category) {
|
|
25
|
-
return categoryColors[category] ?? 'bg-muted text-muted-foreground';
|
|
26
|
-
}
|
|
27
|
-
export function TemplatePicker({ onSelect, onClose }) {
|
|
28
|
-
const [templates, setTemplates] = useState([]);
|
|
29
|
-
const [loading, setLoading] = useState(true);
|
|
30
|
-
const [error, setError] = useState(null);
|
|
31
|
-
const fetchTemplates = useCallback(async () => {
|
|
32
|
-
setLoading(true);
|
|
33
|
-
setError(null);
|
|
34
|
-
const res = await cmsApi('/page-templates');
|
|
35
|
-
if (res.error) {
|
|
36
|
-
setError(res.error);
|
|
37
|
-
}
|
|
38
|
-
else {
|
|
39
|
-
setTemplates(res.data ?? []);
|
|
40
|
-
}
|
|
41
|
-
setLoading(false);
|
|
42
|
-
}, []);
|
|
43
|
-
useEffect(() => {
|
|
44
|
-
fetchTemplates();
|
|
45
|
-
}, [fetchTemplates]);
|
|
46
|
-
useEffect(() => {
|
|
47
|
-
function handleKeyDown(e) {
|
|
48
|
-
if (e.key === 'Escape')
|
|
49
|
-
onClose();
|
|
50
|
-
}
|
|
51
|
-
document.addEventListener('keydown', handleKeyDown);
|
|
52
|
-
return () => document.removeEventListener('keydown', handleKeyDown);
|
|
53
|
-
}, [onClose]);
|
|
54
|
-
function handleBlankPage() {
|
|
55
|
-
onSelect(createEmptyPage());
|
|
56
|
-
onClose();
|
|
57
|
-
}
|
|
58
|
-
function handleTemplateSelect(template) {
|
|
59
|
-
onSelect(template.tree);
|
|
60
|
-
onClose();
|
|
61
|
-
}
|
|
62
|
-
return (_jsxs("div", { className: "fixed inset-0 z-50 flex items-center justify-center", role: "dialog", "aria-modal": "true", "aria-label": "Choose a template", children: [_jsx("div", { className: "motion-safe:animate-in motion-safe:fade-in-0 absolute inset-0 bg-black/50", onClick: onClose, "aria-hidden": "true" }), _jsxs("div", { className: "bg-card border-border relative z-10 flex max-h-[80vh] w-full max-w-2xl flex-col overflow-hidden rounded-xl border shadow-2xl", children: [_jsxs("div", { className: "flex items-center justify-between px-5 pt-5 pb-3", children: [_jsx("h2", { className: "text-foreground text-lg font-medium", children: "Choose a Template" }), _jsx("button", { type: "button", onClick: onClose, className: "text-muted-foreground hover:text-foreground hover:bg-accent rounded-md p-1.5 transition-colors", "aria-label": "Close", children: _jsx(X, { size: 18 }) })] }), _jsxs("div", { className: "flex-1 overflow-y-auto px-5 pb-5", children: [loading && (_jsx("div", { className: "flex items-center justify-center py-16", children: _jsx(Loader2, { className: "text-muted-foreground h-6 w-6 animate-spin" }) })), error && !loading && (_jsxs("div", { className: "flex flex-col items-center justify-center py-12 text-center", children: [_jsx(AlertTriangle, { size: 24, className: "text-destructive mb-2" }), _jsx("p", { className: "text-muted-foreground mb-3 text-sm", children: error }), _jsx("button", { type: "button", onClick: fetchTemplates, className: "text-foreground border-border hover:bg-accent rounded-md border px-3 py-1.5 text-sm font-medium transition-colors", children: "Retry" })] })), !loading && !error && (_jsxs("div", { className: "grid grid-cols-2 gap-3 md:grid-cols-3", role: "list", "aria-label": "Available templates", children: [_jsxs("button", { type: "button", role: "listitem", onClick: handleBlankPage, className: "border-border hover:border-primary bg-card group focus:ring-ring flex cursor-pointer flex-col items-center gap-2 rounded-lg border p-4 text-left transition-colors focus:ring-2 focus:outline-none", children: [_jsx("div", { className: "bg-muted text-muted-foreground group-hover:bg-primary/10 group-hover:text-primary flex h-10 w-10 items-center justify-center rounded-md transition-colors", children: _jsx(File, { size: 20 }) }), _jsx("p", { className: "text-foreground text-center text-sm font-medium", children: "Blank Page" }), _jsx("p", { className: "text-muted-foreground text-center text-xs", children: "Start from scratch" })] }), templates.map((template) => {
|
|
63
|
-
const Icon = resolveIcon(template.category);
|
|
64
|
-
const badgeColor = resolveBadgeColor(template.category);
|
|
65
|
-
return (_jsxs("button", { type: "button", role: "listitem", onClick: () => handleTemplateSelect(template), className: "border-border hover:border-primary bg-card group focus:ring-ring flex cursor-pointer flex-col items-center gap-2 rounded-lg border p-4 text-left transition-colors focus:ring-2 focus:outline-none", children: [_jsx("div", { className: "bg-accent text-foreground group-hover:bg-primary/10 group-hover:text-primary flex h-10 w-10 items-center justify-center rounded-md transition-colors", children: _jsx(Icon, { size: 20 }) }), _jsx("p", { className: "text-foreground w-full truncate text-center text-sm font-medium", children: template.name }), template.description && (_jsx("p", { className: "text-muted-foreground line-clamp-2 text-center text-xs", children: template.description })), _jsx("span", { className: `inline-block rounded-full px-2 py-0.5 text-xs ${badgeColor}`, children: template.category })] }, template.id));
|
|
66
|
-
})] }))] })] })] }));
|
|
67
|
-
}
|
|
68
|
-
//# sourceMappingURL=TemplatePicker.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TemplatePicker.js","sourceRoot":"","sources":["../../../src/views/page-builder/TemplatePicker.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
export interface WidgetsProps {
|
|
2
|
-
onNavigate?: (path: string) => void;
|
|
3
|
-
}
|
|
4
|
-
/**
|
|
5
|
-
* /widgets — placeholder for the embeddable Widgets library.
|
|
6
|
-
*
|
|
7
|
-
* Widgets are reusable, embeddable components (forms, CTAs, banners)
|
|
8
|
-
* that can be dropped into pages and saved sections. The management UI
|
|
9
|
-
* ships in a later release; this view establishes the route and nav
|
|
10
|
-
* entry with an honest empty state rather than a dead link.
|
|
11
|
-
*/
|
|
12
|
-
export declare function Widgets({ onNavigate }: WidgetsProps): import("react/jsx-runtime").JSX.Element;
|
|
13
|
-
//# sourceMappingURL=Widgets.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Widgets.d.ts","sourceRoot":"","sources":["../../../src/views/page-builder/Widgets.tsx"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAY;IAC3B,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;CACpC;AAED;;;;;;;GAOG;AACH,wBAAgB,OAAO,CAAC,EAAE,UAAU,EAAE,EAAE,YAAY,2CA2BnD"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { LayoutGrid } from 'lucide-react';
|
|
4
|
-
/**
|
|
5
|
-
* /widgets — placeholder for the embeddable Widgets library.
|
|
6
|
-
*
|
|
7
|
-
* Widgets are reusable, embeddable components (forms, CTAs, banners)
|
|
8
|
-
* that can be dropped into pages and saved sections. The management UI
|
|
9
|
-
* ships in a later release; this view establishes the route and nav
|
|
10
|
-
* entry with an honest empty state rather than a dead link.
|
|
11
|
-
*/
|
|
12
|
-
export function Widgets({ onNavigate }) {
|
|
13
|
-
return (_jsxs("div", { className: "p-4 pr-8", children: [_jsxs("div", { className: "mb-4", children: [_jsx("h1", { className: "text-foreground mb-1", children: "Widgets" }), _jsx("p", { className: "text-muted-foreground text-sm", children: "Reusable, embeddable components for pages and saved sections." })] }), _jsxs("div", { className: "border-border bg-card rounded-lg border p-8 text-center", children: [_jsx(LayoutGrid, { className: "text-muted-foreground mx-auto mb-3 h-8 w-8", "aria-hidden": true }), _jsx("h2", { className: "text-foreground mb-1 text-lg font-medium", children: "Widgets are coming soon" }), _jsx("p", { className: "text-muted-foreground mx-auto mb-4 max-w-md text-sm", children: "The widget library lets you build embeddable components once and reuse them across pages. In the meantime, use Saved Sections for reusable content blocks." }), _jsx("button", { type: "button", onClick: () => onNavigate?.('/saved-sections'), className: "bg-primary text-primary-foreground rounded-md px-4 py-2 text-sm font-medium hover:opacity-90", children: "View Saved Sections" })] })] }));
|
|
14
|
-
}
|
|
15
|
-
//# sourceMappingURL=Widgets.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Widgets.js","sourceRoot":"","sources":["../../../src/views/page-builder/Widgets.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAMzC;;;;;;;GAOG;AACH,MAAM,UAAU,OAAO,CAAC,EAAE,UAAU,EAAgB;IAClD,OAAO,CACL,eAAK,SAAS,EAAC,UAAU,aACvB,eAAK,SAAS,EAAC,MAAM,aACnB,aAAI,SAAS,EAAC,sBAAsB,wBAAa,EACjD,YAAG,SAAS,EAAC,+BAA+B,8EAExC,IACA,EAEN,eAAK,SAAS,EAAC,yDAAyD,aACtE,KAAC,UAAU,IAAC,SAAS,EAAC,4CAA4C,wBAAe,EACjF,aAAI,SAAS,EAAC,0CAA0C,wCAA6B,EACrF,YAAG,SAAS,EAAC,qDAAqD,2KAG9D,EACJ,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC,iBAAiB,CAAC,EAC9C,SAAS,EAAC,8FAA8F,oCAGjG,IACL,IACF,CACP,CAAA;AACH,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"CTAPreview.d.ts","sourceRoot":"","sources":["../../../../src/views/page-builder/block-renderers/CTAPreview.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAEnD,wBAAgB,UAAU,CAAC,EAAE,IAAI,EAAE,OAAkB,EAAE,EAAE,iBAAiB,2CA0EzE"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
export function CTAPreview({ data, variant = 'banner' }) {
|
|
4
|
-
const heading = data.heading || '';
|
|
5
|
-
const body = data.body || '';
|
|
6
|
-
const buttonText = data.buttonText || '';
|
|
7
|
-
const button = (_jsx("span", { className: "bg-primary text-primary-foreground inline-block rounded-md px-4 py-2 text-sm", children: buttonText || 'Click Here' }));
|
|
8
|
-
if (variant === 'inline') {
|
|
9
|
-
return (_jsxs("div", { className: "border-border flex items-center justify-between gap-4 rounded-md border p-4", children: [_jsxs("div", { className: "flex-1", children: [_jsx("p", { className: "text-foreground text-sm font-medium", children: heading || _jsx("span", { className: "text-muted-foreground", children: "CTA Heading" }) }), body && _jsx("p", { className: "text-muted-foreground mt-1 text-xs", children: body })] }), button] }));
|
|
10
|
-
}
|
|
11
|
-
if (variant === 'floating') {
|
|
12
|
-
return (_jsx("div", { className: "border-border bg-card mx-auto max-w-md rounded-lg border p-6 shadow-md", children: _jsxs("div", { className: "text-center", children: [_jsx("h3", { className: "text-foreground text-lg font-medium", children: heading || _jsx("span", { className: "text-muted-foreground", children: "CTA Heading" }) }), (body || !heading) && (_jsx("p", { className: "text-muted-foreground mt-2 text-sm", children: body || 'Supporting text for the call to action' })), _jsx("div", { className: "mt-4", children: button })] }) }));
|
|
13
|
-
}
|
|
14
|
-
if (variant === 'split') {
|
|
15
|
-
return (_jsxs("div", { className: "border-border flex items-center gap-6 rounded-md border p-6", children: [_jsxs("div", { className: "flex-1", children: [_jsx("h3", { className: "text-foreground text-lg font-medium", children: heading || _jsx("span", { className: "text-muted-foreground", children: "CTA Heading" }) }), (body || !heading) && (_jsx("p", { className: "text-muted-foreground mt-2 text-sm", children: body || 'Supporting text for the call to action' }))] }), _jsx("div", { className: "shrink-0", children: button })] }));
|
|
16
|
-
}
|
|
17
|
-
return (_jsxs("div", { className: "border-border bg-accent rounded-md border p-6 text-center", children: [_jsx("h3", { className: "text-foreground text-lg font-medium", children: heading || _jsx("span", { className: "text-muted-foreground", children: "CTA Heading" }) }), (body || !heading) && (_jsx("p", { className: "text-muted-foreground mt-2 text-sm", children: body || 'Supporting text for the call to action' })), _jsx("div", { className: "mt-4", children: button })] }));
|
|
18
|
-
}
|
|
19
|
-
//# sourceMappingURL=CTAPreview.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"CTAPreview.js","sourceRoot":"","sources":["../../../../src/views/page-builder/block-renderers/CTAPreview.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAIZ,MAAM,UAAU,UAAU,CAAC,EAAE,IAAI,EAAE,OAAO,GAAG,QAAQ,EAAqB;IACxE,MAAM,OAAO,GAAI,IAAI,CAAC,OAAkB,IAAI,EAAE,CAAA;IAC9C,MAAM,IAAI,GAAI,IAAI,CAAC,IAAe,IAAI,EAAE,CAAA;IACxC,MAAM,UAAU,GAAI,IAAI,CAAC,UAAqB,IAAI,EAAE,CAAA;IAEpD,MAAM,MAAM,GAAG,CACb,eAAM,SAAS,EAAC,8EAA8E,YAC3F,UAAU,IAAI,YAAY,GACtB,CACR,CAAA;IAED,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACzB,OAAO,CACL,eAAK,SAAS,EAAC,6EAA6E,aAC1F,eAAK,SAAS,EAAC,QAAQ,aACrB,YAAG,SAAS,EAAC,qCAAqC,YAC/C,OAAO,IAAI,eAAM,SAAS,EAAC,uBAAuB,4BAAmB,GACpE,EACH,IAAI,IAAI,YAAG,SAAS,EAAC,oCAAoC,YAAE,IAAI,GAAK,IACjE,EACL,MAAM,IACH,CACP,CAAA;IACH,CAAC;IAED,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC;QAC3B,OAAO,CACL,cAAK,SAAS,EAAC,wEAAwE,YACrF,eAAK,SAAS,EAAC,aAAa,aAC1B,aAAI,SAAS,EAAC,qCAAqC,YAChD,OAAO,IAAI,eAAM,SAAS,EAAC,uBAAuB,4BAAmB,GACnE,EACJ,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CACrB,YAAG,SAAS,EAAC,oCAAoC,YAC9C,IAAI,IAAI,wCAAwC,GAC/C,CACL,EACD,cAAK,SAAS,EAAC,MAAM,YAAE,MAAM,GAAO,IAChC,GACF,CACP,CAAA;IACH,CAAC;IAED,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QACxB,OAAO,CACL,eAAK,SAAS,EAAC,6DAA6D,aAC1E,eAAK,SAAS,EAAC,QAAQ,aACrB,aAAI,SAAS,EAAC,qCAAqC,YAChD,OAAO,IAAI,eAAM,SAAS,EAAC,uBAAuB,4BAAmB,GACnE,EACJ,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CACrB,YAAG,SAAS,EAAC,oCAAoC,YAC9C,IAAI,IAAI,wCAAwC,GAC/C,CACL,IACG,EACN,cAAK,SAAS,EAAC,UAAU,YAAE,MAAM,GAAO,IACpC,CACP,CAAA;IACH,CAAC;IAED,OAAO,CACL,eAAK,SAAS,EAAC,2DAA2D,aACxE,aAAI,SAAS,EAAC,qCAAqC,YAChD,OAAO,IAAI,eAAM,SAAS,EAAC,uBAAuB,4BAAmB,GACnE,EACJ,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CACrB,YAAG,SAAS,EAAC,oCAAoC,YAC9C,IAAI,IAAI,wCAAwC,GAC/C,CACL,EACD,cAAK,SAAS,EAAC,MAAM,YAAE,MAAM,GAAO,IAChC,CACP,CAAA;AACH,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"CardsPreview.d.ts","sourceRoot":"","sources":["../../../../src/views/page-builder/block-renderers/CardsPreview.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAUnD,wBAAgB,YAAY,CAAC,EAAE,IAAI,EAAE,OAAkB,EAAE,EAAE,iBAAiB,2CAuD3E"}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { Image } from 'lucide-react';
|
|
4
|
-
export function CardsPreview({ data, variant = 'grid-3' }) {
|
|
5
|
-
const items = data.items || [];
|
|
6
|
-
const placeholderItems = items.length > 0
|
|
7
|
-
? items
|
|
8
|
-
: [
|
|
9
|
-
{ title: 'Card Title', description: 'Card description text' },
|
|
10
|
-
{ title: 'Card Title', description: 'Card description text' },
|
|
11
|
-
{ title: 'Card Title', description: 'Card description text' },
|
|
12
|
-
];
|
|
13
|
-
const gridClass = variant === 'grid-2'
|
|
14
|
-
? 'grid grid-cols-2 gap-3'
|
|
15
|
-
: variant === 'grid-4'
|
|
16
|
-
? 'grid grid-cols-4 gap-3'
|
|
17
|
-
: variant === 'horizontal'
|
|
18
|
-
? 'flex gap-3 overflow-hidden'
|
|
19
|
-
: 'grid grid-cols-3 gap-3';
|
|
20
|
-
return (_jsx("div", { className: "border-border rounded-md border p-4", children: _jsx("div", { className: gridClass, children: placeholderItems.map((item, i) => (_jsxs("div", { className: `border-border bg-card flex flex-col overflow-hidden rounded-md border ${variant === 'horizontal' ? 'min-w-40' : ''}`, children: [_jsx("div", { className: "bg-muted flex h-20 items-center justify-center", children: item.image ? (_jsx("img", { src: item.image, alt: item.title || '', className: "h-full w-full object-cover" })) : (_jsx(Image, { size: 20, className: "text-muted-foreground" })) }), _jsxs("div", { className: "p-3", children: [_jsx("p", { className: "text-foreground text-sm font-medium", children: item.title || _jsx("span", { className: "text-muted-foreground", children: "Card Title" }) }), item.description && (_jsx("p", { className: "text-muted-foreground mt-1 line-clamp-2 text-xs", children: item.description }))] })] }, i))) }) }));
|
|
21
|
-
}
|
|
22
|
-
//# sourceMappingURL=CardsPreview.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"CardsPreview.js","sourceRoot":"","sources":["../../../../src/views/page-builder/block-renderers/CardsPreview.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAA;AAWpC,MAAM,UAAU,YAAY,CAAC,EAAE,IAAI,EAAE,OAAO,GAAG,QAAQ,EAAqB;IAC1E,MAAM,KAAK,GAAI,IAAI,CAAC,KAAoB,IAAI,EAAE,CAAA;IAE9C,MAAM,gBAAgB,GACpB,KAAK,CAAC,MAAM,GAAG,CAAC;QACd,CAAC,CAAC,KAAK;QACP,CAAC,CAAC;YACE,EAAE,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,uBAAuB,EAAE;YAC7D,EAAE,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,uBAAuB,EAAE;YAC7D,EAAE,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,uBAAuB,EAAE;SAC9D,CAAA;IAEP,MAAM,SAAS,GACb,OAAO,KAAK,QAAQ;QAClB,CAAC,CAAC,wBAAwB;QAC1B,CAAC,CAAC,OAAO,KAAK,QAAQ;YACpB,CAAC,CAAC,wBAAwB;YAC1B,CAAC,CAAC,OAAO,KAAK,YAAY;gBACxB,CAAC,CAAC,4BAA4B;gBAC9B,CAAC,CAAC,wBAAwB,CAAA;IAElC,OAAO,CACL,cAAK,SAAS,EAAC,qCAAqC,YAClD,cAAK,SAAS,EAAE,SAAS,YACtB,gBAAgB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CACjC,eAEE,SAAS,EAAE,yEAAyE,OAAO,KAAK,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,aAEhI,cAAK,SAAS,EAAC,gDAAgD,YAC5D,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CACZ,cACE,GAAG,EAAE,IAAI,CAAC,KAAK,EACf,GAAG,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE,EACrB,SAAS,EAAC,4BAA4B,GACtC,CACH,CAAC,CAAC,CAAC,CACF,KAAC,KAAK,IAAC,IAAI,EAAE,EAAE,EAAE,SAAS,EAAC,uBAAuB,GAAG,CACtD,GACG,EACN,eAAK,SAAS,EAAC,KAAK,aAClB,YAAG,SAAS,EAAC,qCAAqC,YAC/C,IAAI,CAAC,KAAK,IAAI,eAAM,SAAS,EAAC,uBAAuB,2BAAkB,GACtE,EACH,IAAI,CAAC,WAAW,IAAI,CACnB,YAAG,SAAS,EAAC,iDAAiD,YAC3D,IAAI,CAAC,WAAW,GACf,CACL,IACG,KAvBD,CAAC,CAwBF,CACP,CAAC,GACE,GACF,CACP,CAAA;AACH,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"CodePreview.d.ts","sourceRoot":"","sources":["../../../../src/views/page-builder/block-renderers/CodePreview.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAEnD,wBAAgB,WAAW,CAAC,EAAE,IAAI,EAAE,OAAiB,EAAE,EAAE,iBAAiB,2CAwCzE"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { Code, Globe, Terminal } from 'lucide-react';
|
|
4
|
-
export function CodePreview({ data, variant = 'embed' }) {
|
|
5
|
-
const content = data.content || '';
|
|
6
|
-
const language = data.language || '';
|
|
7
|
-
const sandboxed = data.sandboxed;
|
|
8
|
-
const truncated = content.length > 200 ? content.slice(0, 200) + '…' : content;
|
|
9
|
-
const icon = variant === 'html' ? (_jsx(Globe, { size: 14, className: "text-muted-foreground" })) : variant === 'script' ? (_jsx(Terminal, { size: 14, className: "text-muted-foreground" })) : (_jsx(Code, { size: 14, className: "text-muted-foreground" }));
|
|
10
|
-
return (_jsxs("div", { className: "border-border overflow-hidden rounded-md border", children: [_jsxs("div", { className: "border-border bg-card flex items-center gap-2 border-b px-3 py-2", children: [icon, _jsx("span", { className: "text-muted-foreground text-xs", children: language || variant }), sandboxed && (_jsx("span", { className: "bg-muted text-muted-foreground ml-auto rounded px-1.5 py-0.5 text-xs", children: "sandboxed" }))] }), _jsx("div", { className: "bg-card p-4", children: truncated ? (_jsx("pre", { className: "text-foreground overflow-hidden font-mono text-xs whitespace-pre-wrap", children: truncated })) : (_jsx("p", { className: "text-muted-foreground font-mono text-xs italic", children: "// Code content goes here\u2026" })) })] }));
|
|
11
|
-
}
|
|
12
|
-
//# sourceMappingURL=CodePreview.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"CodePreview.js","sourceRoot":"","sources":["../../../../src/views/page-builder/block-renderers/CodePreview.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAGpD,MAAM,UAAU,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,EAAqB;IACxE,MAAM,OAAO,GAAI,IAAI,CAAC,OAAkB,IAAI,EAAE,CAAA;IAC9C,MAAM,QAAQ,GAAI,IAAI,CAAC,QAAmB,IAAI,EAAE,CAAA;IAChD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAgC,CAAA;IAEvD,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,OAAO,CAAA;IAE9E,MAAM,IAAI,GACR,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,CACnB,KAAC,KAAK,IAAC,IAAI,EAAE,EAAE,EAAE,SAAS,EAAC,uBAAuB,GAAG,CACtD,CAAC,CAAC,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,CACzB,KAAC,QAAQ,IAAC,IAAI,EAAE,EAAE,EAAE,SAAS,EAAC,uBAAuB,GAAG,CACzD,CAAC,CAAC,CAAC,CACF,KAAC,IAAI,IAAC,IAAI,EAAE,EAAE,EAAE,SAAS,EAAC,uBAAuB,GAAG,CACrD,CAAA;IAEH,OAAO,CACL,eAAK,SAAS,EAAC,iDAAiD,aAC9D,eAAK,SAAS,EAAC,kEAAkE,aAC9E,IAAI,EACL,eAAM,SAAS,EAAC,+BAA+B,YAAE,QAAQ,IAAI,OAAO,GAAQ,EAC3E,SAAS,IAAI,CACZ,eAAM,SAAS,EAAC,sEAAsE,0BAE/E,CACR,IACG,EACN,cAAK,SAAS,EAAC,aAAa,YACzB,SAAS,CAAC,CAAC,CAAC,CACX,cAAK,SAAS,EAAC,uEAAuE,YACnF,SAAS,GACN,CACP,CAAC,CAAC,CAAC,CACF,YAAG,SAAS,EAAC,gDAAgD,gDAEzD,CACL,GACG,IACF,CACP,CAAA;AACH,CAAC"}
|