@actuate-media/cms-admin 0.6.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.
Files changed (188) hide show
  1. package/dist/AdminRoot.d.ts.map +1 -1
  2. package/dist/AdminRoot.js +13 -0
  3. package/dist/AdminRoot.js.map +1 -1
  4. package/dist/actuate-admin.css +1 -1
  5. package/dist/components/ErrorBoundary.js +1 -1
  6. package/dist/components/ErrorBoundary.js.map +1 -1
  7. package/dist/hooks/useBuilderState.d.ts +49 -0
  8. package/dist/hooks/useBuilderState.d.ts.map +1 -0
  9. package/dist/hooks/useBuilderState.js +238 -0
  10. package/dist/hooks/useBuilderState.js.map +1 -0
  11. package/dist/index.d.ts +3 -0
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +2 -0
  14. package/dist/index.js.map +1 -1
  15. package/dist/layout/Sidebar.d.ts.map +1 -1
  16. package/dist/layout/Sidebar.js +2 -2
  17. package/dist/layout/Sidebar.js.map +1 -1
  18. package/dist/views/page-builder/AIBlockAssist.d.ts +9 -0
  19. package/dist/views/page-builder/AIBlockAssist.d.ts.map +1 -0
  20. package/dist/views/page-builder/AIBlockAssist.js +40 -0
  21. package/dist/views/page-builder/AIBlockAssist.js.map +1 -0
  22. package/dist/views/page-builder/AIGenerateDialog.d.ts +8 -0
  23. package/dist/views/page-builder/AIGenerateDialog.d.ts.map +1 -0
  24. package/dist/views/page-builder/AIGenerateDialog.js +170 -0
  25. package/dist/views/page-builder/AIGenerateDialog.js.map +1 -0
  26. package/dist/views/page-builder/BlockEditor.d.ts +11 -0
  27. package/dist/views/page-builder/BlockEditor.d.ts.map +1 -0
  28. package/dist/views/page-builder/BlockEditor.js +67 -0
  29. package/dist/views/page-builder/BlockEditor.js.map +1 -0
  30. package/dist/views/page-builder/BlockPicker.d.ts +7 -0
  31. package/dist/views/page-builder/BlockPicker.d.ts.map +1 -0
  32. package/dist/views/page-builder/BlockPicker.js +102 -0
  33. package/dist/views/page-builder/BlockPicker.js.map +1 -0
  34. package/dist/views/page-builder/BottomBar.d.ts +9 -0
  35. package/dist/views/page-builder/BottomBar.d.ts.map +1 -0
  36. package/dist/views/page-builder/BottomBar.js +13 -0
  37. package/dist/views/page-builder/BottomBar.js.map +1 -0
  38. package/dist/views/page-builder/BuilderToolbar.d.ts +21 -0
  39. package/dist/views/page-builder/BuilderToolbar.d.ts.map +1 -0
  40. package/dist/views/page-builder/BuilderToolbar.js +18 -0
  41. package/dist/views/page-builder/BuilderToolbar.js.map +1 -0
  42. package/dist/views/page-builder/ContextPanel.d.ts +20 -0
  43. package/dist/views/page-builder/ContextPanel.d.ts.map +1 -0
  44. package/dist/views/page-builder/ContextPanel.js +40 -0
  45. package/dist/views/page-builder/ContextPanel.js.map +1 -0
  46. package/dist/views/page-builder/DesignScore.d.ts +6 -0
  47. package/dist/views/page-builder/DesignScore.d.ts.map +1 -0
  48. package/dist/views/page-builder/DesignScore.js +93 -0
  49. package/dist/views/page-builder/DesignScore.js.map +1 -0
  50. package/dist/views/page-builder/NodeSettings.d.ts +12 -0
  51. package/dist/views/page-builder/NodeSettings.d.ts.map +1 -0
  52. package/dist/views/page-builder/NodeSettings.js +80 -0
  53. package/dist/views/page-builder/NodeSettings.js.map +1 -0
  54. package/dist/views/page-builder/PageBuilder.d.ts +8 -0
  55. package/dist/views/page-builder/PageBuilder.d.ts.map +1 -0
  56. package/dist/views/page-builder/PageBuilder.js +126 -0
  57. package/dist/views/page-builder/PageBuilder.js.map +1 -0
  58. package/dist/views/page-builder/PageSettings.d.ts +7 -0
  59. package/dist/views/page-builder/PageSettings.d.ts.map +1 -0
  60. package/dist/views/page-builder/PageSettings.js +27 -0
  61. package/dist/views/page-builder/PageSettings.js.map +1 -0
  62. package/dist/views/page-builder/SEOPanel.d.ts +10 -0
  63. package/dist/views/page-builder/SEOPanel.d.ts.map +1 -0
  64. package/dist/views/page-builder/SEOPanel.js +105 -0
  65. package/dist/views/page-builder/SEOPanel.js.map +1 -0
  66. package/dist/views/page-builder/SavedSections.d.ts +6 -0
  67. package/dist/views/page-builder/SavedSections.d.ts.map +1 -0
  68. package/dist/views/page-builder/SavedSections.js +145 -0
  69. package/dist/views/page-builder/SavedSections.js.map +1 -0
  70. package/dist/views/page-builder/TemplatePicker.d.ts +7 -0
  71. package/dist/views/page-builder/TemplatePicker.d.ts.map +1 -0
  72. package/dist/views/page-builder/TemplatePicker.js +68 -0
  73. package/dist/views/page-builder/TemplatePicker.js.map +1 -0
  74. package/dist/views/page-builder/block-renderers/CTAPreview.d.ts +3 -0
  75. package/dist/views/page-builder/block-renderers/CTAPreview.d.ts.map +1 -0
  76. package/dist/views/page-builder/block-renderers/CTAPreview.js +19 -0
  77. package/dist/views/page-builder/block-renderers/CTAPreview.js.map +1 -0
  78. package/dist/views/page-builder/block-renderers/CardsPreview.d.ts +3 -0
  79. package/dist/views/page-builder/block-renderers/CardsPreview.d.ts.map +1 -0
  80. package/dist/views/page-builder/block-renderers/CardsPreview.js +22 -0
  81. package/dist/views/page-builder/block-renderers/CardsPreview.js.map +1 -0
  82. package/dist/views/page-builder/block-renderers/CodePreview.d.ts +3 -0
  83. package/dist/views/page-builder/block-renderers/CodePreview.d.ts.map +1 -0
  84. package/dist/views/page-builder/block-renderers/CodePreview.js +16 -0
  85. package/dist/views/page-builder/block-renderers/CodePreview.js.map +1 -0
  86. package/dist/views/page-builder/block-renderers/FAQPreview.d.ts +3 -0
  87. package/dist/views/page-builder/block-renderers/FAQPreview.d.ts.map +1 -0
  88. package/dist/views/page-builder/block-renderers/FAQPreview.js +24 -0
  89. package/dist/views/page-builder/block-renderers/FAQPreview.js.map +1 -0
  90. package/dist/views/page-builder/block-renderers/FallbackPreview.d.ts +6 -0
  91. package/dist/views/page-builder/block-renderers/FallbackPreview.d.ts.map +1 -0
  92. package/dist/views/page-builder/block-renderers/FallbackPreview.js +7 -0
  93. package/dist/views/page-builder/block-renderers/FallbackPreview.js.map +1 -0
  94. package/dist/views/page-builder/block-renderers/FormPreview.d.ts +3 -0
  95. package/dist/views/page-builder/block-renderers/FormPreview.d.ts.map +1 -0
  96. package/dist/views/page-builder/block-renderers/FormPreview.js +14 -0
  97. package/dist/views/page-builder/block-renderers/FormPreview.js.map +1 -0
  98. package/dist/views/page-builder/block-renderers/GalleryPreview.d.ts +3 -0
  99. package/dist/views/page-builder/block-renderers/GalleryPreview.d.ts.map +1 -0
  100. package/dist/views/page-builder/block-renderers/GalleryPreview.js +21 -0
  101. package/dist/views/page-builder/block-renderers/GalleryPreview.js.map +1 -0
  102. package/dist/views/page-builder/block-renderers/HeroPreview.d.ts +3 -0
  103. package/dist/views/page-builder/block-renderers/HeroPreview.d.ts.map +1 -0
  104. package/dist/views/page-builder/block-renderers/HeroPreview.js +19 -0
  105. package/dist/views/page-builder/block-renderers/HeroPreview.js.map +1 -0
  106. package/dist/views/page-builder/block-renderers/ImagePreview.d.ts +3 -0
  107. package/dist/views/page-builder/block-renderers/ImagePreview.d.ts.map +1 -0
  108. package/dist/views/page-builder/block-renderers/ImagePreview.js +17 -0
  109. package/dist/views/page-builder/block-renderers/ImagePreview.js.map +1 -0
  110. package/dist/views/page-builder/block-renderers/TextPreview.d.ts +3 -0
  111. package/dist/views/page-builder/block-renderers/TextPreview.d.ts.map +1 -0
  112. package/dist/views/page-builder/block-renderers/TextPreview.js +26 -0
  113. package/dist/views/page-builder/block-renderers/TextPreview.js.map +1 -0
  114. package/dist/views/page-builder/block-renderers/VideoPreview.d.ts +3 -0
  115. package/dist/views/page-builder/block-renderers/VideoPreview.d.ts.map +1 -0
  116. package/dist/views/page-builder/block-renderers/VideoPreview.js +21 -0
  117. package/dist/views/page-builder/block-renderers/VideoPreview.js.map +1 -0
  118. package/dist/views/page-builder/block-renderers/index.d.ts +9 -0
  119. package/dist/views/page-builder/block-renderers/index.d.ts.map +1 -0
  120. package/dist/views/page-builder/block-renderers/index.js +25 -0
  121. package/dist/views/page-builder/block-renderers/index.js.map +1 -0
  122. package/dist/views/page-builder/canvas/BlockRenderer.d.ts +8 -0
  123. package/dist/views/page-builder/canvas/BlockRenderer.d.ts.map +1 -0
  124. package/dist/views/page-builder/canvas/BlockRenderer.js +30 -0
  125. package/dist/views/page-builder/canvas/BlockRenderer.js.map +1 -0
  126. package/dist/views/page-builder/canvas/BuilderCanvas.d.ts +10 -0
  127. package/dist/views/page-builder/canvas/BuilderCanvas.d.ts.map +1 -0
  128. package/dist/views/page-builder/canvas/BuilderCanvas.js +26 -0
  129. package/dist/views/page-builder/canvas/BuilderCanvas.js.map +1 -0
  130. package/dist/views/page-builder/canvas/ColumnRenderer.d.ts +8 -0
  131. package/dist/views/page-builder/canvas/ColumnRenderer.d.ts.map +1 -0
  132. package/dist/views/page-builder/canvas/ColumnRenderer.js +36 -0
  133. package/dist/views/page-builder/canvas/ColumnRenderer.js.map +1 -0
  134. package/dist/views/page-builder/canvas/ContainerRenderer.d.ts +8 -0
  135. package/dist/views/page-builder/canvas/ContainerRenderer.d.ts.map +1 -0
  136. package/dist/views/page-builder/canvas/ContainerRenderer.js +33 -0
  137. package/dist/views/page-builder/canvas/ContainerRenderer.js.map +1 -0
  138. package/dist/views/page-builder/canvas/RowRenderer.d.ts +8 -0
  139. package/dist/views/page-builder/canvas/RowRenderer.d.ts.map +1 -0
  140. package/dist/views/page-builder/canvas/RowRenderer.js +32 -0
  141. package/dist/views/page-builder/canvas/RowRenderer.js.map +1 -0
  142. package/dist/views/page-builder/canvas/SectionRenderer.d.ts +8 -0
  143. package/dist/views/page-builder/canvas/SectionRenderer.d.ts.map +1 -0
  144. package/dist/views/page-builder/canvas/SectionRenderer.js +54 -0
  145. package/dist/views/page-builder/canvas/SectionRenderer.js.map +1 -0
  146. package/dist/views/page-builder/canvas/index.d.ts +3 -0
  147. package/dist/views/page-builder/canvas/index.d.ts.map +1 -0
  148. package/dist/views/page-builder/canvas/index.js +2 -0
  149. package/dist/views/page-builder/canvas/index.js.map +1 -0
  150. package/package.json +3 -2
  151. package/src/AdminRoot.tsx +16 -0
  152. package/src/components/ErrorBoundary.tsx +3 -3
  153. package/src/hooks/useBuilderState.ts +328 -0
  154. package/src/index.ts +4 -0
  155. package/src/layout/Sidebar.tsx +5 -0
  156. package/src/views/page-builder/AIBlockAssist.tsx +68 -0
  157. package/src/views/page-builder/AIGenerateDialog.tsx +574 -0
  158. package/src/views/page-builder/BlockEditor.tsx +352 -0
  159. package/src/views/page-builder/BlockPicker.tsx +338 -0
  160. package/src/views/page-builder/BottomBar.tsx +64 -0
  161. package/src/views/page-builder/BuilderToolbar.tsx +218 -0
  162. package/src/views/page-builder/ContextPanel.tsx +145 -0
  163. package/src/views/page-builder/DesignScore.tsx +258 -0
  164. package/src/views/page-builder/NodeSettings.tsx +515 -0
  165. package/src/views/page-builder/PageBuilder.tsx +288 -0
  166. package/src/views/page-builder/PageSettings.tsx +161 -0
  167. package/src/views/page-builder/SEOPanel.tsx +485 -0
  168. package/src/views/page-builder/SavedSections.tsx +486 -0
  169. package/src/views/page-builder/TemplatePicker.tsx +201 -0
  170. package/src/views/page-builder/block-renderers/CTAPreview.tsx +81 -0
  171. package/src/views/page-builder/block-renderers/CardsPreview.tsx +71 -0
  172. package/src/views/page-builder/block-renderers/CodePreview.tsx +46 -0
  173. package/src/views/page-builder/block-renderers/FAQPreview.tsx +90 -0
  174. package/src/views/page-builder/block-renderers/FallbackPreview.tsx +18 -0
  175. package/src/views/page-builder/block-renderers/FormPreview.tsx +69 -0
  176. package/src/views/page-builder/block-renderers/GalleryPreview.tsx +93 -0
  177. package/src/views/page-builder/block-renderers/HeroPreview.tsx +103 -0
  178. package/src/views/page-builder/block-renderers/ImagePreview.tsx +54 -0
  179. package/src/views/page-builder/block-renderers/TextPreview.tsx +81 -0
  180. package/src/views/page-builder/block-renderers/VideoPreview.tsx +78 -0
  181. package/src/views/page-builder/block-renderers/index.ts +34 -0
  182. package/src/views/page-builder/canvas/BlockRenderer.tsx +62 -0
  183. package/src/views/page-builder/canvas/BuilderCanvas.tsx +90 -0
  184. package/src/views/page-builder/canvas/ColumnRenderer.tsx +86 -0
  185. package/src/views/page-builder/canvas/ContainerRenderer.tsx +71 -0
  186. package/src/views/page-builder/canvas/RowRenderer.tsx +72 -0
  187. package/src/views/page-builder/canvas/SectionRenderer.tsx +97 -0
  188. package/src/views/page-builder/canvas/index.ts +2 -0
@@ -0,0 +1,105 @@
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 '@actuate-media/cms-core';
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-green-500';
9
+ if (score >= 40)
10
+ return 'text-amber-500';
11
+ return 'text-red-500';
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-green-500 shrink-0" });
33
+ case 'warning':
34
+ return _jsx(AlertCircle, { size: 14, className: "text-amber-500 shrink-0" });
35
+ case 'error':
36
+ return _jsx(XCircle, { size: 14, className: "text-red-500 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-green-500" }), _jsxs("span", { className: "text-xs text-muted-foreground", children: [passed, " passed"] })] }), _jsxs("div", { className: "flex items-center gap-1.5", children: [_jsx(AlertCircle, { size: 12, className: "text-amber-500" }), _jsxs("span", { className: "text-xs text-muted-foreground", children: [warnings, " warnings"] })] }), _jsxs("div", { className: "flex items-center gap-1.5", children: [_jsx(XCircle, { size: 12, className: "text-red-500" }), _jsxs("span", { className: "text-xs text-muted-foreground", children: [errors, " issues"] })] })] }));
53
+ }
54
+ function CollapsibleSection({ title, icon: Icon, expanded, onToggle, children, }) {
55
+ 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 items-center justify-between hover:bg-muted/50 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-xs font-medium text-foreground", 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-xs font-medium text-foreground", children: check.label }), _jsx("span", { className: "text-xs text-muted-foreground", 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 rounded-md p-3 flex flex-col gap-1", children: [_jsxs("div", { className: "flex items-center gap-1.5", children: [_jsx(BarChart3, { size: 12, className: "text-muted-foreground" }), _jsx("span", { className: "text-xs text-muted-foreground", children: "Flesch Score" })] }), _jsx("span", { className: `text-sm font-medium ${getScoreColor(readability.fleschScore)}`, children: readability.fleschScore }), _jsx("span", { className: "text-xs text-muted-foreground", children: fleschLabel })] }), _jsxs("div", { className: "bg-muted/50 rounded-md p-3 flex flex-col gap-1", children: [_jsxs("div", { className: "flex items-center gap-1.5", children: [_jsx(Type, { size: 12, className: "text-muted-foreground" }), _jsx("span", { className: "text-xs text-muted-foreground", children: "Word Count" })] }), _jsx("span", { className: "text-sm font-medium text-foreground", children: readability.wordCount }), _jsx("span", { className: "text-xs text-muted-foreground", children: readability.wordCount >= 300 ? 'Good length' : 'Short' })] }), _jsxs("div", { className: "bg-muted/50 rounded-md p-3 flex flex-col gap-1", children: [_jsxs("div", { className: "flex items-center gap-1.5", children: [_jsx(FileText, { size: 12, className: "text-muted-foreground" }), _jsx("span", { className: "text-xs text-muted-foreground", children: "Avg Sentence" })] }), _jsxs("span", { className: "text-sm font-medium text-foreground", children: [readability.avgSentenceLength, " words"] }), _jsx("span", { className: "text-xs text-muted-foreground", children: readability.avgSentenceLength <= 20 ? 'Good' : 'Long' })] }), _jsxs("div", { className: "bg-muted/50 rounded-md p-3 flex flex-col gap-1", children: [_jsxs("div", { className: "flex items-center gap-1.5", children: [_jsx(Clock, { size: 12, className: "text-muted-foreground" }), _jsx("span", { className: "text-xs text-muted-foreground", children: "Reading Time" })] }), _jsxs("span", { className: "text-sm font-medium text-foreground", children: [readability.readingTime, " min"] }), _jsxs("span", { className: "text-xs text-muted-foreground", 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-xs font-medium text-foreground", children: hint.label }), _jsx("span", { className: "text-xs text-muted-foreground", 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-xs font-medium text-foreground", children: "Meta Title" }), _jsxs("span", { className: `text-xs ${metaTitleLength > 60 ? 'text-red-500' : 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: "w-full px-3 py-2 text-sm bg-input-background border border-border rounded-md text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-1 focus:ring-primary" })] }), _jsxs("div", { className: "flex flex-col gap-1.5", children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsx("label", { className: "text-xs font-medium text-foreground", children: "Meta Description" }), _jsxs("span", { className: `text-xs ${metaDescLength > 160 ? 'text-red-500' : 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: "w-full px-3 py-2 text-sm bg-input-background border border-border rounded-md text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-1 focus:ring-primary resize-none" })] }), _jsxs("div", { className: "flex flex-col gap-1.5", children: [_jsx("label", { className: "text-xs font-medium text-foreground", children: "Focus Keyphrase" }), _jsx("input", { type: "text", value: pageSettings.focusKeyphrase || '', onChange: (e) => onPageSettingsChange({ focusKeyphrase: e.target.value }), placeholder: "Primary keyword or phrase", className: "w-full px-3 py-2 text-sm bg-input-background border border-border rounded-md text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-1 focus:ring-primary" })] })] }));
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 rounded-md border border-border p-4", children: [_jsx("p", { className: "text-xs text-muted-foreground mb-2", children: "Google Search Preview" }), _jsxs("div", { className: "flex flex-col gap-1", children: [_jsx("p", { className: "text-sm text-primary truncate", children: title }), _jsxs("p", { className: "text-xs text-green-600 truncate", children: ["example.com/", slug] }), _jsx("p", { className: "text-xs text-muted-foreground line-clamp-2", 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 rounded-md border border-border overflow-hidden", children: [_jsx("p", { className: "text-xs text-muted-foreground px-4 pt-3 pb-2", children: "Open Graph Preview" }), pageSettings.ogImage && (_jsx("div", { className: "w-full h-32 bg-muted flex items-center justify-center overflow-hidden", children: _jsx("img", { src: pageSettings.ogImage, alt: "OG preview", className: "w-full h-full object-cover" }) })), !pageSettings.ogImage && (_jsx("div", { className: "w-full h-32 bg-muted flex items-center justify-center", children: _jsx(Globe, { size: 24, className: "text-muted-foreground" }) })), _jsxs("div", { className: "p-3 flex flex-col gap-1", children: [_jsx("p", { className: "text-xs text-muted-foreground uppercase", children: "example.com" }), _jsx("p", { className: "text-sm font-medium text-foreground truncate", children: title }), _jsx("p", { className: "text-xs text-muted-foreground line-clamp-2", 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)
92
+ ? prev.filter((s) => s !== section)
93
+ : [...prev, section]);
94
+ };
95
+ const blockHints = useMemo(() => {
96
+ if (!selectedNodeId)
97
+ return [];
98
+ return analysis.perBlockHints.get(selectedNodeId) || [];
99
+ }, [analysis.perBlockHints, selectedNodeId]);
100
+ if (!tree.children || tree.children.length === 0) {
101
+ return (_jsxs("div", { className: "p-6 flex flex-col items-center justify-center text-center min-h-[200px]", children: [_jsx(Search, { size: 32, className: "text-muted-foreground mb-3" }), _jsx("p", { className: "text-sm font-medium text-foreground mb-1", children: "SEO Analysis" }), _jsx("p", { className: "text-xs text-muted-foreground", children: "Add content to your page to see SEO analysis" })] }));
102
+ }
103
+ return (_jsxs("div", { className: "flex flex-col", children: [_jsxs("div", { className: "flex items-center gap-4 px-4 py-5 border-b border-border", children: [_jsx(ScoreRing, { score: analysis.score }), _jsxs("div", { className: "flex flex-col gap-1", children: [_jsx("span", { className: "text-xs font-medium text-foreground", 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 }) })] })] }));
104
+ }
105
+ //# sourceMappingURL=SEOPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SEOPanel.js","sourceRoot":"","sources":["../../../src/views/page-builder/SEOPanel.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export interface SavedSectionsProps {
2
+ onNavigate: (path: string) => void;
3
+ config: any;
4
+ }
5
+ export declare function SavedSections({ onNavigate, config }: SavedSectionsProps): import("react/jsx-runtime").JSX.Element;
6
+ //# sourceMappingURL=SavedSections.d.ts.map
@@ -0,0 +1 @@
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,CAAC;IACnC,MAAM,EAAE,GAAG,CAAC;CACb;AA8CD,wBAAgB,aAAa,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,kBAAkB,2CAoRvE"}
@@ -0,0 +1,145 @@
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 '@actuate-media/cms-core';
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'
55
+ ? sections
56
+ : sections.filter((s) => s.category === activeCategory);
57
+ async function handleDelete(id) {
58
+ const res = await cmsApi(`/saved-sections/${id}`, { method: 'DELETE' });
59
+ if (res.error) {
60
+ toast.error(res.error);
61
+ }
62
+ else {
63
+ toast.success('Section deleted');
64
+ setSections((prev) => prev.filter((s) => s.id !== id));
65
+ }
66
+ setDeleteConfirmId(null);
67
+ }
68
+ async function handleDuplicate(section) {
69
+ const res = await cmsApi('/saved-sections', {
70
+ method: 'POST',
71
+ body: JSON.stringify({
72
+ name: `${section.name} (Copy)`,
73
+ description: section.description,
74
+ category: section.category,
75
+ tree: section.tree,
76
+ }),
77
+ });
78
+ if (res.error) {
79
+ toast.error(res.error);
80
+ }
81
+ else {
82
+ toast.success('Section duplicated');
83
+ fetchSections();
84
+ }
85
+ }
86
+ if (viewState.mode === 'create' || viewState.mode === 'edit') {
87
+ return (_jsx(SectionForm, { initial: viewState.mode === 'edit' ? viewState.section : undefined, saving: saving, onSave: async (data) => {
88
+ setSaving(true);
89
+ if (viewState.mode === 'create') {
90
+ const res = await cmsApi('/saved-sections', {
91
+ method: 'POST',
92
+ body: JSON.stringify({ ...data, tree: createEmptySectionTree() }),
93
+ });
94
+ setSaving(false);
95
+ if (res.error) {
96
+ toast.error(res.error);
97
+ }
98
+ else {
99
+ toast.success('Section created');
100
+ setViewState({ mode: 'list' });
101
+ fetchSections();
102
+ }
103
+ }
104
+ else {
105
+ const res = await cmsApi(`/saved-sections/${viewState.section.id}`, {
106
+ method: 'PUT',
107
+ body: JSON.stringify(data),
108
+ });
109
+ setSaving(false);
110
+ if (res.error) {
111
+ toast.error(res.error);
112
+ }
113
+ else {
114
+ toast.success('Section updated');
115
+ setViewState({ mode: 'list' });
116
+ fetchSections();
117
+ }
118
+ }
119
+ }, onCancel: () => setViewState({ mode: 'list' }) }));
120
+ }
121
+ 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-2xl font-medium text-foreground", children: "Saved Sections" }), _jsx("p", { className: "text-sm text-muted-foreground mt-1", children: "Reusable sections for the page builder" })] }), _jsxs("button", { type: "button", onClick: () => setViewState({ mode: 'create' }), className: "flex items-center gap-2 rounded-lg bg-primary px-4 py-2 text-sm font-medium text-primary-foreground transition-colors hover:bg-primary/90", children: [_jsx(Plus, { size: 16 }), "Create Section"] })] }), _jsxs("div", { className: "mb-4 flex items-center gap-1 border-b border-border", 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: "w-6 h-6 animate-spin text-muted-foreground" }) })), 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-sm text-muted-foreground mb-3", children: error }), _jsx("button", { type: "button", onClick: fetchSections, className: "px-3 py-1.5 text-sm font-medium text-foreground border border-border rounded-md hover:bg-accent 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-sm font-medium text-foreground mb-1", children: "No saved sections" }), _jsx("p", { className: "text-xs text-muted-foreground mb-4", children: activeCategory === 'all'
122
+ ? 'Create your first reusable section to get started.'
123
+ : `No sections in the "${activeCategory}" category.` }), activeCategory === 'all' && (_jsxs("button", { type: "button", onClick: () => setViewState({ mode: 'create' }), className: "flex items-center gap-2 rounded-md bg-primary px-3 py-1.5 text-sm font-medium text-primary-foreground hover:bg-primary/90 transition-colors", children: [_jsx(Plus, { size: 14 }), "Create Section"] }))] })), !loading && !error && filteredSections.length > 0 && (_jsx("div", { className: "grid grid-cols-1 lg:grid-cols-2 gap-3", children: filteredSections.map((section) => (_jsxs("div", { className: "border border-border rounded-lg p-4 bg-card hover:border-primary/50 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-sm font-medium text-foreground truncate", children: section.name }), section.description && (_jsx("p", { className: "text-xs text-muted-foreground mt-0.5 line-clamp-2", children: section.description }))] }), _jsx("span", { className: `shrink-0 text-xs px-2 py-0.5 rounded-full ${CATEGORY_COLORS[section.category] ?? 'bg-muted text-muted-foreground'}`, children: section.category })] }), _jsxs("div", { className: "mt-3 flex items-center gap-4 text-xs text-muted-foreground", 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: "mt-3 flex items-center gap-1 border-t border-border pt-3", children: [_jsxs("button", { type: "button", onClick: () => setViewState({ mode: 'edit', section }), className: "flex items-center gap-1.5 px-2.5 py-1.5 text-xs font-medium text-foreground rounded-md hover:bg-accent transition-colors", "aria-label": `Edit ${section.name}`, children: [_jsx(Edit, { size: 13 }), "Edit"] }), _jsxs("button", { type: "button", onClick: () => handleDuplicate(section), className: "flex items-center gap-1.5 px-2.5 py-1.5 text-xs font-medium text-foreground rounded-md hover:bg-accent 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-xs text-destructive mr-1", children: "Delete?" }), _jsx("button", { type: "button", onClick: () => handleDelete(section.id), className: "px-2 py-1 text-xs font-medium text-destructive-foreground bg-destructive rounded-md hover:bg-destructive/90 transition-colors", children: "Yes" }), _jsx("button", { type: "button", onClick: () => setDeleteConfirmId(null), className: "px-2 py-1 text-xs font-medium text-foreground border border-border rounded-md hover:bg-accent transition-colors", children: "No" })] })) : (_jsxs("button", { type: "button", onClick: () => setDeleteConfirmId(section.id), className: "ml-auto flex items-center gap-1.5 px-2.5 py-1.5 text-xs font-medium text-destructive rounded-md hover:bg-destructive/10 transition-colors", "aria-label": `Delete ${section.name}`, children: [_jsx(Trash2, { size: 13 }), "Delete"] }))] })] }, section.id))) }))] }));
124
+ }
125
+ function CategoryTab({ label, active, onClick }) {
126
+ return (_jsx("button", { type: "button", onClick: onClick, className: `px-3 py-2 text-sm transition-colors border-b-2 -mb-px ${active
127
+ ? 'border-primary text-foreground font-medium'
128
+ : 'border-transparent text-muted-foreground hover:text-foreground'}`, children: label }));
129
+ }
130
+ function SectionForm({ initial, saving, onSave, onCancel }) {
131
+ const [name, setName] = useState(initial?.name ?? '');
132
+ const [description, setDescription] = useState(initial?.description ?? '');
133
+ const [category, setCategory] = useState(initial?.category ?? 'content');
134
+ function handleSubmit(e) {
135
+ e.preventDefault();
136
+ if (!name.trim())
137
+ return;
138
+ onSave({ name: name.trim(), description: description.trim(), category });
139
+ }
140
+ const treeSize = initial?.tree
141
+ ? JSON.stringify(initial.tree).length
142
+ : null;
143
+ return (_jsxs("div", { className: "p-4 pr-8", children: [_jsxs("div", { className: "mb-6", children: [_jsxs("button", { type: "button", onClick: onCancel, className: "flex items-center gap-1.5 text-sm text-muted-foreground hover:text-foreground transition-colors mb-3", "aria-label": "Back to saved sections", children: [_jsx(ArrowLeft, { size: 16 }), "Back"] }), _jsx("h1", { className: "text-2xl font-medium 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: "block text-sm font-medium text-foreground mb-1", 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: "w-full px-3 py-2 text-sm bg-background border border-input rounded-md focus:outline-none focus:ring-2 focus:ring-ring" })] }), _jsxs("div", { children: [_jsx("label", { htmlFor: "section-description", className: "block text-sm font-medium text-foreground mb-1", children: "Description" }), _jsx("textarea", { id: "section-description", value: description, onChange: (e) => setDescription(e.target.value), placeholder: "Optional description of this section...", rows: 3, className: "w-full px-3 py-2 text-sm bg-background border border-input rounded-md focus:outline-none focus:ring-2 focus:ring-ring resize-none" })] }), _jsxs("div", { children: [_jsx("label", { htmlFor: "section-category", className: "block text-sm font-medium text-foreground mb-1", children: "Category" }), _jsx("select", { id: "section-category", value: category, onChange: (e) => setCategory(e.target.value), className: "w-full px-3 py-2 text-sm bg-background border border-input rounded-md focus:outline-none focus:ring-2 focus:ring-ring", children: CATEGORIES.map((cat) => (_jsx("option", { value: cat, children: cat.charAt(0).toUpperCase() + cat.slice(1) }, cat))) })] }), treeSize !== null && (_jsx("div", { className: "rounded-md border border-border bg-muted p-3", children: _jsxs("p", { className: "text-xs text-muted-foreground", 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: "flex items-center gap-2 rounded-lg bg-primary px-4 py-2 text-sm font-medium text-primary-foreground transition-colors hover:bg-primary/90 disabled:opacity-50 disabled:cursor-not-allowed", children: [saving && _jsx(Loader2, { size: 14, className: "animate-spin" }), initial ? 'Save Changes' : 'Create Section'] }), _jsx("button", { type: "button", onClick: onCancel, disabled: saving, className: "px-4 py-2 text-sm font-medium text-foreground border border-border rounded-lg hover:bg-accent transition-colors disabled:opacity-50", children: "Cancel" })] })] })] }));
144
+ }
145
+ //# sourceMappingURL=SavedSections.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SavedSections.js","sourceRoot":"","sources":["../../../src/views/page-builder/SavedSections.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { PageNode } from '@actuate-media/cms-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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TemplatePicker.d.ts","sourceRoot":"","sources":["../../../src/views/page-builder/TemplatePicker.tsx"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAExD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,CAAC,YAAY,EAAE,QAAQ,KAAK,IAAI,CAAC;IAC3C,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAkCD,wBAAgB,cAAc,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,mBAAmB,2CAgJxE"}
@@ -0,0 +1,68 @@
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 '@actuate-media/cms-core';
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: "absolute inset-0 bg-black/50 motion-safe:animate-in motion-safe:fade-in-0", onClick: onClose, "aria-hidden": "true" }), _jsxs("div", { className: "relative z-10 w-full max-w-2xl max-h-[80vh] bg-card rounded-xl shadow-2xl border border-border flex flex-col overflow-hidden", children: [_jsxs("div", { className: "flex items-center justify-between px-5 pt-5 pb-3", children: [_jsx("h2", { className: "text-lg font-medium text-foreground", children: "Choose a Template" }), _jsx("button", { type: "button", onClick: onClose, 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 }) })] }), _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: "w-6 h-6 animate-spin text-muted-foreground" }) })), 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-sm text-muted-foreground mb-3", children: error }), _jsx("button", { type: "button", onClick: fetchTemplates, className: "px-3 py-1.5 text-sm font-medium text-foreground border border-border rounded-md hover:bg-accent transition-colors", children: "Retry" })] })), !loading && !error && (_jsxs("div", { className: "grid grid-cols-2 md:grid-cols-3 gap-3", role: "list", "aria-label": "Available templates", children: [_jsxs("button", { type: "button", role: "listitem", onClick: handleBlankPage, className: "p-4 border border-border rounded-lg hover:border-primary cursor-pointer transition-colors bg-card text-left flex flex-col items-center gap-2 group focus:outline-none focus:ring-2 focus:ring-ring", children: [_jsx("div", { className: "w-10 h-10 rounded-md bg-muted flex items-center justify-center text-muted-foreground group-hover:bg-primary/10 group-hover:text-primary transition-colors", children: _jsx(File, { size: 20 }) }), _jsx("p", { className: "text-sm font-medium text-foreground text-center", children: "Blank Page" }), _jsx("p", { className: "text-xs text-muted-foreground text-center", 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: "p-4 border border-border rounded-lg hover:border-primary cursor-pointer transition-colors bg-card text-left flex flex-col items-center gap-2 group focus:outline-none focus:ring-2 focus:ring-ring", children: [_jsx("div", { className: "w-10 h-10 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: 20 }) }), _jsx("p", { className: "text-sm font-medium text-foreground text-center truncate w-full", children: template.name }), template.description && (_jsx("p", { className: "text-xs text-muted-foreground text-center line-clamp-2", children: template.description })), _jsx("span", { className: `inline-block text-xs px-2 py-0.5 rounded-full ${badgeColor}`, children: template.category })] }, template.id));
66
+ })] }))] })] })] }));
67
+ }
68
+ //# sourceMappingURL=TemplatePicker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TemplatePicker.js","sourceRoot":"","sources":["../../../src/views/page-builder/TemplatePicker.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { BlockPreviewProps } from './index.js';
2
+ export declare function CTAPreview({ data, variant }: BlockPreviewProps): import("react/jsx-runtime").JSX.Element;
3
+ //# sourceMappingURL=CTAPreview.d.ts.map
@@ -0,0 +1 @@
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,CAAC;AAEpD,wBAAgB,UAAU,CAAC,EAAE,IAAI,EAAE,OAAkB,EAAE,EAAE,iBAAiB,2CA4EzE"}
@@ -0,0 +1,19 @@
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: "inline-block rounded-md bg-primary px-4 py-2 text-sm text-primary-foreground", children: buttonText || 'Click Here' }));
8
+ if (variant === 'inline') {
9
+ return (_jsxs("div", { className: "flex items-center justify-between gap-4 rounded-md border border-border p-4", children: [_jsxs("div", { className: "flex-1", children: [_jsx("p", { className: "text-sm font-medium text-foreground", children: heading || _jsx("span", { className: "text-muted-foreground", children: "CTA Heading" }) }), body && (_jsx("p", { className: "mt-1 text-xs text-muted-foreground", children: body }))] }), button] }));
10
+ }
11
+ if (variant === 'floating') {
12
+ return (_jsx("div", { className: "mx-auto max-w-md rounded-lg border border-border bg-card p-6 shadow-md", children: _jsxs("div", { className: "text-center", children: [_jsx("h3", { className: "text-lg font-medium text-foreground", children: heading || _jsx("span", { className: "text-muted-foreground", children: "CTA Heading" }) }), (body || !heading) && (_jsx("p", { className: "mt-2 text-sm text-muted-foreground", 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: "flex items-center gap-6 rounded-md border border-border p-6", children: [_jsxs("div", { className: "flex-1", children: [_jsx("h3", { className: "text-lg font-medium text-foreground", children: heading || _jsx("span", { className: "text-muted-foreground", children: "CTA Heading" }) }), (body || !heading) && (_jsx("p", { className: "mt-2 text-sm text-muted-foreground", children: body || 'Supporting text for the call to action' }))] }), _jsx("div", { className: "shrink-0", children: button })] }));
16
+ }
17
+ return (_jsxs("div", { className: "rounded-md border border-border bg-accent p-6 text-center", children: [_jsx("h3", { className: "text-lg font-medium text-foreground", children: heading || _jsx("span", { className: "text-muted-foreground", children: "CTA Heading" }) }), (body || !heading) && (_jsx("p", { className: "mt-2 text-sm text-muted-foreground", children: body || 'Supporting text for the call to action' })), _jsx("div", { className: "mt-4", children: button })] }));
18
+ }
19
+ //# sourceMappingURL=CTAPreview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CTAPreview.js","sourceRoot":"","sources":["../../../../src/views/page-builder/block-renderers/CTAPreview.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAIb,MAAM,UAAU,UAAU,CAAC,EAAE,IAAI,EAAE,OAAO,GAAG,QAAQ,EAAqB;IACxE,MAAM,OAAO,GAAI,IAAI,CAAC,OAAkB,IAAI,EAAE,CAAC;IAC/C,MAAM,IAAI,GAAI,IAAI,CAAC,IAAe,IAAI,EAAE,CAAC;IACzC,MAAM,UAAU,GAAI,IAAI,CAAC,UAAqB,IAAI,EAAE,CAAC;IAErD,MAAM,MAAM,GAAG,CACb,eAAM,SAAS,EAAC,8EAA8E,YAC3F,UAAU,IAAI,YAAY,GACtB,CACR,CAAC;IAEF,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,CACP,YAAG,SAAS,EAAC,oCAAoC,YAAE,IAAI,GAAK,CAC7D,IACG,EACL,MAAM,IACH,CACP,CAAC;IACJ,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,CAAC;IACJ,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,CAAC;IACJ,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,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { BlockPreviewProps } from './index.js';
2
+ export declare function CardsPreview({ data, variant }: BlockPreviewProps): import("react/jsx-runtime").JSX.Element;
3
+ //# sourceMappingURL=CardsPreview.d.ts.map
@@ -0,0 +1 @@
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,CAAC;AAUpD,wBAAgB,YAAY,CAAC,EAAE,IAAI,EAAE,OAAkB,EAAE,EAAE,iBAAiB,2CAyD3E"}
@@ -0,0 +1,22 @@
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: "rounded-md border border-border p-4", children: _jsx("div", { className: gridClass, children: placeholderItems.map((item, i) => (_jsxs("div", { className: `flex flex-col overflow-hidden rounded-md border border-border bg-card ${variant === 'horizontal' ? 'min-w-40' : ''}`, children: [_jsx("div", { className: "flex h-20 items-center justify-center bg-muted", 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-sm font-medium text-foreground", children: item.title || (_jsx("span", { className: "text-muted-foreground", children: "Card Title" })) }), item.description && (_jsx("p", { className: "mt-1 text-xs text-muted-foreground line-clamp-2", children: item.description }))] })] }, i))) }) }));
21
+ }
22
+ //# sourceMappingURL=CardsPreview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CardsPreview.js","sourceRoot":"","sources":["../../../../src/views/page-builder/block-renderers/CardsPreview.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAWrC,MAAM,UAAU,YAAY,CAAC,EAAE,IAAI,EAAE,OAAO,GAAG,QAAQ,EAAqB;IAC1E,MAAM,KAAK,GAAI,IAAI,CAAC,KAAoB,IAAI,EAAE,CAAC;IAE/C,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,CAAC;IAER,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,CAAC;IAEnC,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,CACb,eAAM,SAAS,EAAC,uBAAuB,2BAAkB,CAC1D,GACC,EACH,IAAI,CAAC,WAAW,IAAI,CACnB,YAAG,SAAS,EAAC,iDAAiD,YAC3D,IAAI,CAAC,WAAW,GACf,CACL,IACG,KAzBD,CAAC,CA0BF,CACP,CAAC,GACE,GACF,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { BlockPreviewProps } from './index.js';
2
+ export declare function CodePreview({ data, variant }: BlockPreviewProps): import("react/jsx-runtime").JSX.Element;
3
+ //# sourceMappingURL=CodePreview.d.ts.map
@@ -0,0 +1 @@
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,CAAC;AAEpD,wBAAgB,WAAW,CAAC,EAAE,IAAI,EAAE,OAAiB,EAAE,EAAE,iBAAiB,2CAwCzE"}
@@ -0,0 +1,16 @@
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'
10
+ ? _jsx(Globe, { size: 14, className: "text-muted-foreground" })
11
+ : variant === 'script'
12
+ ? _jsx(Terminal, { size: 14, className: "text-muted-foreground" })
13
+ : _jsx(Code, { size: 14, className: "text-muted-foreground" });
14
+ return (_jsxs("div", { className: "overflow-hidden rounded-md border border-border", children: [_jsxs("div", { className: "flex items-center gap-2 border-b border-border bg-card px-3 py-2", children: [icon, _jsx("span", { className: "text-xs text-muted-foreground", children: language || variant }), sandboxed && (_jsx("span", { className: "ml-auto rounded bg-muted px-1.5 py-0.5 text-xs text-muted-foreground", children: "sandboxed" }))] }), _jsx("div", { className: "bg-card p-4", children: truncated ? (_jsx("pre", { className: "overflow-hidden whitespace-pre-wrap font-mono text-xs text-foreground", children: truncated })) : (_jsx("p", { className: "font-mono text-xs text-muted-foreground italic", children: "// Code content goes here\u2026" })) })] }));
15
+ }
16
+ //# sourceMappingURL=CodePreview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CodePreview.js","sourceRoot":"","sources":["../../../../src/views/page-builder/block-renderers/CodePreview.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAGrD,MAAM,UAAU,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,EAAqB;IACxE,MAAM,OAAO,GAAI,IAAI,CAAC,OAAkB,IAAI,EAAE,CAAC;IAC/C,MAAM,QAAQ,GAAI,IAAI,CAAC,QAAmB,IAAI,EAAE,CAAC;IACjD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAgC,CAAC;IAExD,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,CAAC;IAE/E,MAAM,IAAI,GACR,OAAO,KAAK,MAAM;QAChB,CAAC,CAAC,KAAC,KAAK,IAAC,IAAI,EAAE,EAAE,EAAE,SAAS,EAAC,uBAAuB,GAAG;QACvD,CAAC,CAAC,OAAO,KAAK,QAAQ;YACpB,CAAC,CAAC,KAAC,QAAQ,IAAC,IAAI,EAAE,EAAE,EAAE,SAAS,EAAC,uBAAuB,GAAG;YAC1D,CAAC,CAAC,KAAC,IAAI,IAAC,IAAI,EAAE,EAAE,EAAE,SAAS,EAAC,uBAAuB,GAAG,CAAC;IAE7D,OAAO,CACL,eAAK,SAAS,EAAC,iDAAiD,aAC9D,eAAK,SAAS,EAAC,kEAAkE,aAC9E,IAAI,EACL,eAAM,SAAS,EAAC,+BAA+B,YAC5C,QAAQ,IAAI,OAAO,GACf,EACN,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,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { BlockPreviewProps } from './index.js';
2
+ export declare function FAQPreview({ data, variant }: BlockPreviewProps): import("react/jsx-runtime").JSX.Element;
3
+ //# sourceMappingURL=FAQPreview.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FAQPreview.d.ts","sourceRoot":"","sources":["../../../../src/views/page-builder/block-renderers/FAQPreview.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAOpD,wBAAgB,UAAU,CAAC,EAAE,IAAI,EAAE,OAAqB,EAAE,EAAE,iBAAiB,2CA+E5E"}
@@ -0,0 +1,24 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { ChevronDown } from 'lucide-react';
4
+ export function FAQPreview({ data, variant = 'accordion' }) {
5
+ const items = data.items || [];
6
+ const placeholderItems = items.length > 0
7
+ ? items
8
+ : [
9
+ { question: 'What is this?', answer: 'Answer to the first question goes here.' },
10
+ { question: 'How does it work?', answer: 'Answer to the second question goes here.' },
11
+ { question: 'Where can I learn more?', answer: 'Answer to the third question goes here.' },
12
+ ];
13
+ if (variant === 'two-column') {
14
+ const mid = Math.ceil(placeholderItems.length / 2);
15
+ const col1 = placeholderItems.slice(0, mid);
16
+ const col2 = placeholderItems.slice(mid);
17
+ return (_jsx("div", { className: "rounded-md border border-border p-4", children: _jsx("div", { className: "grid grid-cols-2 gap-4", children: [col1, col2].map((column, colIdx) => (_jsx("div", { className: "flex flex-col gap-3", children: column.map((item, i) => (_jsxs("div", { className: "rounded-md border border-border p-3", children: [_jsx("p", { className: "text-sm font-medium text-foreground", children: item.question || 'Question?' }), _jsx("p", { className: "mt-1 text-xs text-muted-foreground line-clamp-2", children: item.answer || 'Answer text…' })] }, i))) }, colIdx))) }) }));
18
+ }
19
+ if (variant === 'list') {
20
+ return (_jsx("div", { className: "rounded-md border border-border p-4", children: _jsx("div", { className: "flex flex-col gap-3", children: placeholderItems.map((item, i) => (_jsxs("div", { className: "border-b border-border pb-3 last:border-b-0 last:pb-0", children: [_jsx("p", { className: "text-sm font-medium text-foreground", children: item.question || 'Question?' }), _jsx("p", { className: "mt-1 text-xs text-muted-foreground line-clamp-2", children: item.answer || 'Answer text…' })] }, i))) }) }));
21
+ }
22
+ return (_jsx("div", { className: "rounded-md border border-border p-4", children: _jsx("div", { className: "flex flex-col gap-2", children: placeholderItems.map((item, i) => (_jsxs("div", { className: "rounded-md border border-border p-3", children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsx("p", { className: "text-sm font-medium text-foreground", children: item.question || 'Question?' }), _jsx(ChevronDown, { size: 14, className: "shrink-0 text-muted-foreground" })] }), i === 0 && (_jsx("p", { className: "mt-2 text-xs text-muted-foreground", children: item.answer || 'Answer text…' }))] }, i))) }) }));
23
+ }
24
+ //# sourceMappingURL=FAQPreview.js.map