@prenta/admin 0.93.0 → 0.95.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 (130) hide show
  1. package/CHANGELOG.md +152 -0
  2. package/dist/__tests__/lib/page-editor-service-api.test.js +37 -0
  3. package/dist/__tests__/lib/page-editor-service-api.test.js.map +1 -1
  4. package/dist/__tests__/lib/version-diff.test.d.ts +2 -0
  5. package/dist/__tests__/lib/version-diff.test.d.ts.map +1 -0
  6. package/dist/__tests__/lib/version-diff.test.js +230 -0
  7. package/dist/__tests__/lib/version-diff.test.js.map +1 -0
  8. package/dist/__tests__/lib/version-history.test.d.ts +2 -0
  9. package/dist/__tests__/lib/version-history.test.d.ts.map +1 -0
  10. package/dist/__tests__/lib/version-history.test.js +125 -0
  11. package/dist/__tests__/lib/version-history.test.js.map +1 -0
  12. package/dist/__tests__/styles/responsive-layer.test.d.ts +2 -0
  13. package/dist/__tests__/styles/responsive-layer.test.d.ts.map +1 -0
  14. package/dist/__tests__/styles/responsive-layer.test.js +127 -0
  15. package/dist/__tests__/styles/responsive-layer.test.js.map +1 -0
  16. package/dist/__tests__/views/canvas-review-mode.render.test.d.ts +2 -0
  17. package/dist/__tests__/views/canvas-review-mode.render.test.d.ts.map +1 -0
  18. package/dist/__tests__/views/canvas-review-mode.render.test.js +70 -0
  19. package/dist/__tests__/views/canvas-review-mode.render.test.js.map +1 -0
  20. package/dist/__tests__/views/editor-top-bar.render.test.js +29 -0
  21. package/dist/__tests__/views/editor-top-bar.render.test.js.map +1 -1
  22. package/dist/__tests__/views/section-edit-form.render.test.d.ts +2 -0
  23. package/dist/__tests__/views/section-edit-form.render.test.d.ts.map +1 -0
  24. package/dist/__tests__/views/section-edit-form.render.test.js +124 -0
  25. package/dist/__tests__/views/section-edit-form.render.test.js.map +1 -0
  26. package/dist/__tests__/views/section-inspector-media.test.js +1 -1
  27. package/dist/__tests__/views/section-inspector-media.test.js.map +1 -1
  28. package/dist/__tests__/views/section-inspector-repeater.render.test.js +2 -1
  29. package/dist/__tests__/views/section-inspector-repeater.render.test.js.map +1 -1
  30. package/dist/__tests__/views/version-history-panel.render.test.d.ts +2 -0
  31. package/dist/__tests__/views/version-history-panel.render.test.d.ts.map +1 -0
  32. package/dist/__tests__/views/version-history-panel.render.test.js +153 -0
  33. package/dist/__tests__/views/version-history-panel.render.test.js.map +1 -0
  34. package/dist/components/CanvasEditTip.js +1 -1
  35. package/dist/components/CanvasEditTip.js.map +1 -1
  36. package/dist/components/EditorRail.js +3 -3
  37. package/dist/components/EditorRail.js.map +1 -1
  38. package/dist/components/page-tab/DirectiveSwitch.d.ts.map +1 -1
  39. package/dist/components/page-tab/DirectiveSwitch.js +5 -1
  40. package/dist/components/page-tab/DirectiveSwitch.js.map +1 -1
  41. package/dist/layout/primitives/AdminShell.d.ts.map +1 -1
  42. package/dist/layout/primitives/AdminShell.js +2 -2
  43. package/dist/layout/primitives/AdminShell.js.map +1 -1
  44. package/dist/lib/version-diff.d.ts +50 -0
  45. package/dist/lib/version-diff.d.ts.map +1 -0
  46. package/dist/lib/version-diff.js +294 -0
  47. package/dist/lib/version-diff.js.map +1 -0
  48. package/dist/lib/version-history.d.ts +73 -0
  49. package/dist/lib/version-history.d.ts.map +1 -0
  50. package/dist/lib/version-history.js +126 -0
  51. package/dist/lib/version-history.js.map +1 -0
  52. package/dist/prenta-admin.css +1 -1
  53. package/dist/views/page-editor/EditorCanvas.d.ts +14 -1
  54. package/dist/views/page-editor/EditorCanvas.d.ts.map +1 -1
  55. package/dist/views/page-editor/EditorCanvas.js +3 -3
  56. package/dist/views/page-editor/EditorCanvas.js.map +1 -1
  57. package/dist/views/page-editor/EditorTopBar.d.ts +8 -2
  58. package/dist/views/page-editor/EditorTopBar.d.ts.map +1 -1
  59. package/dist/views/page-editor/EditorTopBar.js +8 -6
  60. package/dist/views/page-editor/EditorTopBar.js.map +1 -1
  61. package/dist/views/page-editor/PageSectionEditor.d.ts.map +1 -1
  62. package/dist/views/page-editor/PageSectionEditor.js +129 -40
  63. package/dist/views/page-editor/PageSectionEditor.js.map +1 -1
  64. package/dist/views/page-editor/ReviewBar.d.ts +21 -0
  65. package/dist/views/page-editor/ReviewBar.d.ts.map +1 -0
  66. package/dist/views/page-editor/ReviewBar.js +22 -0
  67. package/dist/views/page-editor/ReviewBar.js.map +1 -0
  68. package/dist/views/page-editor/SectionEditForm.d.ts +42 -0
  69. package/dist/views/page-editor/SectionEditForm.d.ts.map +1 -0
  70. package/dist/views/page-editor/SectionEditForm.js +48 -0
  71. package/dist/views/page-editor/SectionEditForm.js.map +1 -0
  72. package/dist/views/page-editor/SectionInspector.d.ts +0 -20
  73. package/dist/views/page-editor/SectionInspector.d.ts.map +1 -1
  74. package/dist/views/page-editor/SectionInspector.js +6 -224
  75. package/dist/views/page-editor/SectionInspector.js.map +1 -1
  76. package/dist/views/page-editor/SectionsPanel.d.ts +10 -1
  77. package/dist/views/page-editor/SectionsPanel.d.ts.map +1 -1
  78. package/dist/views/page-editor/SectionsPanel.js +11 -5
  79. package/dist/views/page-editor/SectionsPanel.js.map +1 -1
  80. package/dist/views/page-editor/VersionHistoryPanel.d.ts +29 -0
  81. package/dist/views/page-editor/VersionHistoryPanel.d.ts.map +1 -0
  82. package/dist/views/page-editor/VersionHistoryPanel.js +81 -0
  83. package/dist/views/page-editor/VersionHistoryPanel.js.map +1 -0
  84. package/dist/views/page-editor/section-fields.d.ts +43 -0
  85. package/dist/views/page-editor/section-fields.d.ts.map +1 -0
  86. package/dist/views/page-editor/section-fields.js +236 -0
  87. package/dist/views/page-editor/section-fields.js.map +1 -0
  88. package/dist/views/page-editor/sections/ArticleBodySection.js +1 -1
  89. package/dist/views/page-editor/sections/ArticleBodySection.js.map +1 -1
  90. package/dist/views/page-editor/sections/SectionRenderer.d.ts +13 -1
  91. package/dist/views/page-editor/sections/SectionRenderer.d.ts.map +1 -1
  92. package/dist/views/page-editor/sections/SectionRenderer.js +23 -8
  93. package/dist/views/page-editor/sections/SectionRenderer.js.map +1 -1
  94. package/dist/views/post-editor/PostEditorCanvas.js +1 -1
  95. package/dist/views/post-editor/PostEditorCanvas.js.map +1 -1
  96. package/dist/views/post-editor/PostSectionEditor.d.ts.map +1 -1
  97. package/dist/views/post-editor/PostSectionEditor.js +11 -9
  98. package/dist/views/post-editor/PostSectionEditor.js.map +1 -1
  99. package/package.json +3 -3
  100. package/src/__tests__/lib/page-editor-service-api.test.ts +44 -0
  101. package/src/__tests__/lib/version-diff.test.ts +278 -0
  102. package/src/__tests__/lib/version-history.test.ts +166 -0
  103. package/src/__tests__/styles/responsive-layer.test.ts +152 -0
  104. package/src/__tests__/views/canvas-review-mode.render.test.tsx +94 -0
  105. package/src/__tests__/views/editor-top-bar.render.test.tsx +42 -0
  106. package/src/__tests__/views/section-edit-form.render.test.tsx +162 -0
  107. package/src/__tests__/views/section-inspector-media.test.ts +1 -1
  108. package/src/__tests__/views/section-inspector-repeater.render.test.tsx +2 -1
  109. package/src/__tests__/views/version-history-panel.render.test.tsx +195 -0
  110. package/src/components/CanvasEditTip.tsx +3 -3
  111. package/src/components/EditorRail.tsx +5 -5
  112. package/src/components/page-tab/DirectiveSwitch.tsx +4 -1
  113. package/src/layout/primitives/AdminShell.tsx +13 -1
  114. package/src/lib/version-diff.ts +376 -0
  115. package/src/lib/version-history.ts +192 -0
  116. package/src/styles/responsive.css +281 -0
  117. package/src/styles/theme.css +8 -0
  118. package/src/views/page-editor/EditorCanvas.tsx +34 -7
  119. package/src/views/page-editor/EditorTopBar.tsx +20 -8
  120. package/src/views/page-editor/PageSectionEditor.tsx +182 -65
  121. package/src/views/page-editor/ReviewBar.tsx +76 -0
  122. package/src/views/page-editor/SectionEditForm.tsx +161 -0
  123. package/src/views/page-editor/SectionInspector.tsx +9 -553
  124. package/src/views/page-editor/SectionsPanel.tsx +72 -16
  125. package/src/views/page-editor/VersionHistoryPanel.tsx +302 -0
  126. package/src/views/page-editor/section-fields.tsx +563 -0
  127. package/src/views/page-editor/sections/ArticleBodySection.tsx +1 -1
  128. package/src/views/page-editor/sections/SectionRenderer.tsx +53 -12
  129. package/src/views/post-editor/PostEditorCanvas.tsx +1 -1
  130. package/src/views/post-editor/PostSectionEditor.tsx +18 -26
@@ -0,0 +1,236 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ /**
4
+ * Schema-driven field renderers for a section's content.
5
+ *
6
+ * Extracted from `SectionInspector` so the inline editor in the rail and the
7
+ * template editor's inspector render fields through ONE implementation. The
8
+ * two surfaces disagree about chrome — an accordion body versus a docked panel
9
+ * — and about nothing else, and this codebase has twice paid for a second copy
10
+ * of a renderer drifting from the first (see the `paddingClass` and
11
+ * mirror-renderer entries in docs/page-builder-handoff-followups.md).
12
+ */
13
+ import { GripVertical, Plus, X } from 'lucide-react';
14
+ import { DndContext, KeyboardSensor, PointerSensor, closestCenter, useSensor, useSensors, } from '@dnd-kit/core';
15
+ import { SortableContext, sortableKeyboardCoordinates, useSortable, verticalListSortingStrategy, } from '@dnd-kit/sortable';
16
+ import { CSS } from '@dnd-kit/utilities';
17
+ import { MediaBlock } from '../../components/MediaBlock.js';
18
+ import { ReflowMeter } from '../../components/ReflowMeter.js';
19
+ import { Toggle } from '../../components/ui/Toggle.js';
20
+ import { useReflowGuard } from '../../hooks/useReflowGuard.js';
21
+ import { baselineFieldText } from '../../lib/reflow-baseline.js';
22
+ import { useReflowContext } from './reflow-context.js';
23
+ import { blankRepeaterRow, resolveRepeaterField } from './section-types.js';
24
+ /** Shared control classes, so every field surface looks identical. */
25
+ export const FIELD_LABEL = 'text-foreground mb-1 block text-xs font-medium';
26
+ export const FIELD_INPUT = 'border-input bg-input-background text-foreground focus-visible:ring-ring w-full rounded-md border px-2.5 py-1.5 text-sm focus-visible:ring-2 focus-visible:outline-none';
27
+ /**
28
+ * Field types the reflow guard measures.
29
+ *
30
+ * Text that wraps, and nothing else. A `select` has a fixed set of values the
31
+ * design already accounts for; a `boolean` has no text; `media` wraps nothing.
32
+ *
33
+ * `richText` is excluded deliberately. The probe establishes a baseline by
34
+ * writing the published string into the cloned element, which for rich text
35
+ * would mean injecting stored markup into the DOM — and the whole body is one
36
+ * marker, so a line count across several paragraphs answers no question an
37
+ * editor is asking.
38
+ */
39
+ const GUARDED_FIELD_TYPES = new Set(['text', 'textarea', 'url']);
40
+ /**
41
+ * Attaches the reflow readout under a field.
42
+ *
43
+ * Renders nothing at all when the guard has no rows — the section may be drawn
44
+ * by a consumer's renderer that carries no `data-cms-field` markers, and an
45
+ * empty row of dots would read as "measured, all fine" rather than "not
46
+ * measured".
47
+ */
48
+ function FieldReflow({ fieldPath, value }) {
49
+ const ctx = useReflowContext();
50
+ const guard = useReflowGuard({
51
+ canvas: ctx.canvas,
52
+ sectionId: ctx.sectionId ?? '',
53
+ fieldPath,
54
+ value,
55
+ baseline: baselineFieldText(ctx.baseline, ctx.sectionId ?? '', fieldPath),
56
+ enabled: Boolean(ctx.canvas && ctx.sectionId),
57
+ });
58
+ if (guard.rows.length === 0)
59
+ return null;
60
+ return (_jsx(ReflowMeter, { guard: guard, length: value.length, device: ctx.device, onProof: ctx.onProof }));
61
+ }
62
+ export function ContentField({ field, value, onChange, onPatch, id: idProp, fieldPath, }) {
63
+ const id = idProp ?? `insp-field-${field.key}`;
64
+ const path = fieldPath ?? field.key;
65
+ const text = typeof value === 'string' ? value : '';
66
+ const guarded = GUARDED_FIELD_TYPES.has(field.type);
67
+ const repeater = resolveRepeaterField(field);
68
+ if (repeater) {
69
+ return (_jsx(RepeaterField, { fieldKey: field.key, label: field.label, repeater: repeater, value: value, onChange: onChange }));
70
+ }
71
+ if (field.type === 'boolean') {
72
+ return _jsx(BooleanField, { id: id, field: field, value: value === true, onChange: onChange });
73
+ }
74
+ if (field.type === 'relationship') {
75
+ return _jsx(RelationshipField, { id: id, field: field, value: value, onChange: onChange });
76
+ }
77
+ if (field.type === 'media') {
78
+ return _jsx(MediaField, { id: id, field: field, value: text, onChange: onChange, onPatch: onPatch });
79
+ }
80
+ if (field.type === 'select') {
81
+ return (_jsxs("div", { children: [_jsx("label", { className: FIELD_LABEL, htmlFor: id, children: field.label }), _jsx("select", { id: id, className: FIELD_INPUT, value: text, onChange: (e) => onChange(e.target.value), children: field.options?.map((o) => (_jsx("option", { value: o.value, children: o.label }, o.value))) })] }));
82
+ }
83
+ if (field.type === 'textarea' || field.type === 'richText') {
84
+ return (_jsxs("div", { children: [_jsxs("label", { className: FIELD_LABEL, htmlFor: id, children: [field.label, field.required && _jsx("span", { className: "text-destructive ml-0.5", children: "*" })] }), _jsx("textarea", { id: id, className: `${FIELD_INPUT} resize-y ${field.type === 'richText' ? 'min-h-[140px]' : 'min-h-[72px]'}`, value: text, placeholder: field.placeholder, onChange: (e) => onChange(e.target.value) }), guarded && _jsx(FieldReflow, { fieldPath: path, value: text }), field.help && _jsx("p", { className: "text-muted-foreground mt-1 text-xs", children: field.help })] }));
85
+ }
86
+ return (_jsxs("div", { children: [_jsxs("label", { className: FIELD_LABEL, htmlFor: id, children: [field.label, field.required && _jsx("span", { className: "text-destructive ml-0.5", children: "*" })] }), _jsx("input", { id: id, type: field.type === 'url' ? 'url' : 'text', className: FIELD_INPUT, value: text, placeholder: field.placeholder, onChange: (e) => onChange(e.target.value) }), guarded && _jsx(FieldReflow, { fieldPath: path, value: text }), field.help && _jsx("p", { className: "text-muted-foreground mt-1 text-xs", children: field.help })] }));
87
+ }
88
+ /**
89
+ * Companion content keys that hold an image field's intrinsic dimensions.
90
+ * Picking from the media library persists width/height alongside the URL so the
91
+ * public renderer can use the CLS-safe `next/image` path without waiting on
92
+ * read-time `/resolve` enrichment. Mirrors the keys the section renderers read:
93
+ * `imageUrl` → `imageWidth` / `imageHeight`; `url` (gallery row) → `width` / `height`.
94
+ */
95
+ export function companionDimensionKeys(fieldKey) {
96
+ if (fieldKey === 'url')
97
+ return { width: 'width', height: 'height' };
98
+ if (fieldKey.endsWith('Url')) {
99
+ const base = fieldKey.slice(0, -'Url'.length);
100
+ return { width: `${base}Width`, height: `${base}Height` };
101
+ }
102
+ return { width: `${fieldKey}Width`, height: `${fieldKey}Height` };
103
+ }
104
+ function MediaField({ id, field, value, onChange, onPatch, }) {
105
+ return (_jsxs("div", { children: [_jsx("span", { className: FIELD_LABEL, id: `${id}-label`, children: field.label }), _jsx(MediaBlock, { value: value, label: field.label, onChange: (url, item) => {
106
+ if (!onPatch) {
107
+ onChange(url);
108
+ return;
109
+ }
110
+ // Persist the intrinsic dimensions alongside the URL so the public
111
+ // renderer can use the CLS-safe path without a read-time lookup.
112
+ const { width: wKey, height: hKey } = companionDimensionKeys(field.key);
113
+ const patch = { [field.key]: url };
114
+ if (typeof item?.width === 'number')
115
+ patch[wKey] = item.width;
116
+ if (typeof item?.height === 'number')
117
+ patch[hKey] = item.height;
118
+ // Clearing the slot clears the dimensions with it — leaving them
119
+ // behind would size the next image by the previous one's box.
120
+ if (!url) {
121
+ patch[wKey] = undefined;
122
+ patch[hKey] = undefined;
123
+ }
124
+ onPatch(patch);
125
+ } }), field.help && _jsx("p", { className: "text-muted-foreground mt-1 text-xs", children: field.help })] }));
126
+ }
127
+ function BooleanField({ id, field, value, onChange, }) {
128
+ return (_jsxs("div", { children: [_jsxs("div", { className: "border-border text-foreground flex w-full items-center justify-between rounded-md border px-2.5 py-1.5 text-sm", children: [_jsx("span", { children: field.label }), _jsx(Toggle, { id: id, checked: value, onCheckedChange: (v) => onChange(v), "aria-label": field.label })] }), field.help && _jsx("p", { className: "text-muted-foreground mt-1 text-xs", children: field.help })] }));
129
+ }
130
+ function RelationshipField({ id, field, value, onChange, }) {
131
+ // Stored as an array of slugs; edited as a newline/comma-separated list
132
+ // so authors can hand-pick referenced documents without a live picker.
133
+ const slugs = Array.isArray(value) ? value : [];
134
+ const text = slugs.join('\n');
135
+ return (_jsxs("div", { children: [_jsx("label", { className: FIELD_LABEL, htmlFor: id, children: field.label }), _jsx("textarea", { id: id, className: `${FIELD_INPUT} min-h-[72px] resize-y`, placeholder: "one-slug-per-line", value: text, onChange: (e) => onChange(e.target.value
136
+ .split(/[\n,]/)
137
+ .map((s) => s.trim())
138
+ .filter(Boolean)) }), field.help && _jsx("p", { className: "text-muted-foreground mt-1 text-xs", children: field.help })] }));
139
+ }
140
+ // Field types whose values are short enough to scan in a row header. Long-form
141
+ // fields (textarea, richText) and non-text values (media, url) stay out.
142
+ const SUMMARY_FIELD_TYPES = new Set(['text', 'select']);
143
+ const SUMMARY_MAX_LENGTH = 60;
144
+ /**
145
+ * Derive a scannable one-line summary for a repeater row from its first two
146
+ * short text values — e.g. a pricing row renders as "Pro · $79/mo" instead of
147
+ * "Plan 2". Returns `null` when the row has no usable values yet, so the
148
+ * caller falls back to the positional "Plan 2" label.
149
+ */
150
+ export function repeaterRowSummary(fields, row) {
151
+ const parts = [];
152
+ for (const field of fields) {
153
+ if (parts.length >= 2)
154
+ break;
155
+ if (!SUMMARY_FIELD_TYPES.has(field.type))
156
+ continue;
157
+ const raw = row[field.key];
158
+ const value = typeof raw === 'string' ? raw.trim() : typeof raw === 'number' ? String(raw) : '';
159
+ if (!value)
160
+ continue;
161
+ if (field.type === 'select') {
162
+ const option = field.options?.find((o) => o.value === value);
163
+ parts.push(option?.label ?? value);
164
+ }
165
+ else {
166
+ parts.push(value);
167
+ }
168
+ }
169
+ if (parts.length === 0)
170
+ return null;
171
+ const joined = parts.join(' · ');
172
+ return joined.length > SUMMARY_MAX_LENGTH
173
+ ? `${joined.slice(0, SUMMARY_MAX_LENGTH - 1).trimEnd()}…`
174
+ : joined;
175
+ }
176
+ /**
177
+ * Generic repeater editor: an orderable list of rows, each row a small form of
178
+ * the repeater's sub-fields. Drives the generic `repeater` field type and the
179
+ * `stats` / `gallery` shorthands (resolved upstream to the same row model), so
180
+ * there's one editor for every structured-array field.
181
+ *
182
+ * Rows are stored as a plain array on `content[fieldKey]`. Drag/reorder uses an
183
+ * index-derived row id (`row-0`, `row-1`, …); since every edit commits a fresh
184
+ * array this stays consistent and matches the prior stats/gallery behavior.
185
+ */
186
+ function RepeaterField({ fieldKey, label, repeater, value, onChange, }) {
187
+ const rows = Array.isArray(value) ? value : [];
188
+ const atCap = typeof repeater.maxRows === 'number' && rows.length >= repeater.maxRows;
189
+ const rowKey = (i) => `row-${i}`;
190
+ const sensors = useSensors(useSensor(PointerSensor, { activationConstraint: { distance: 4 } }), useSensor(KeyboardSensor, { coordinateGetter: sortableKeyboardCoordinates }));
191
+ function commit(next) {
192
+ onChange(next);
193
+ }
194
+ function update(index, patch) {
195
+ commit(rows.map((r, i) => (i === index ? { ...r, ...patch } : r)));
196
+ }
197
+ function remove(index) {
198
+ commit(rows.filter((_, i) => i !== index));
199
+ }
200
+ function add() {
201
+ if (atCap)
202
+ return;
203
+ commit([...rows, blankRepeaterRow(repeater.fields)]);
204
+ }
205
+ function handleDragEnd(event) {
206
+ const { active, over } = event;
207
+ if (!over || active.id === over.id)
208
+ return;
209
+ // Map the dnd id (index-derived rowKey) back to array positions.
210
+ const ids = rows.map((_, i) => rowKey(i));
211
+ const from = ids.indexOf(String(active.id));
212
+ const to = ids.indexOf(String(over.id));
213
+ if (from === -1 || to === -1)
214
+ return;
215
+ const next = rows.slice();
216
+ const [moved] = next.splice(from, 1);
217
+ next.splice(to, 0, moved);
218
+ commit(next);
219
+ }
220
+ const lower = repeater.rowLabel.toLowerCase();
221
+ return (_jsxs("div", { children: [_jsx("span", { className: FIELD_LABEL, children: label }), rows.length === 0 ? (_jsxs("p", { className: "border-border text-muted-foreground mb-2 rounded-md border border-dashed px-2 py-3 text-center text-xs", children: ["No ", lower, "s yet."] })) : (_jsx(DndContext, { sensors: sensors, collisionDetection: closestCenter, onDragEnd: handleDragEnd, children: _jsx(SortableContext, { items: rows.map((_, i) => rowKey(i)), strategy: verticalListSortingStrategy, children: _jsx("div", { className: "space-y-3", children: rows.map((row, i) => (_jsx(SortableRepeaterRow, { id: rowKey(i), index: i, fieldKey: fieldKey, rowLabel: repeater.rowLabel, fields: repeater.fields, row: row, reorderable: rows.length > 1, onPatch: (patch) => update(i, patch), onRemove: () => remove(i) }, rowKey(i)))) }) }) })), _jsxs("button", { type: "button", onClick: add, disabled: atCap, className: "border-border text-foreground hover:bg-accent mt-2 flex w-full items-center justify-center gap-1.5 rounded-md border border-dashed px-2 py-1.5 text-xs font-medium disabled:cursor-not-allowed disabled:opacity-50", children: [_jsx(Plus, { className: "h-3.5 w-3.5", "aria-hidden": true }), "Add ", lower] }), atCap && (_jsxs("p", { className: "text-muted-foreground mt-1 text-xs", children: ["Maximum of ", repeater.maxRows, " reached."] }))] }));
222
+ }
223
+ function SortableRepeaterRow({ id, index, fieldKey, rowLabel, fields, row, reorderable, onPatch, onRemove, }) {
224
+ const { attributes, listeners, setNodeRef, transform, transition, isDragging } = useSortable({
225
+ id,
226
+ disabled: !reorderable,
227
+ });
228
+ const style = {
229
+ transform: CSS.Transform.toString(transform),
230
+ transition,
231
+ zIndex: isDragging ? 10 : undefined,
232
+ };
233
+ const summary = repeaterRowSummary(fields, row);
234
+ return (_jsxs("div", { ref: setNodeRef, style: style, className: `border-border rounded-md border p-2 ${isDragging ? 'bg-card shadow-md' : ''}`, children: [_jsxs("div", { className: "mb-2 flex items-center justify-between", children: [_jsxs("span", { className: "flex items-center gap-1", children: [reorderable && (_jsx("button", { type: "button", "aria-label": `Drag to reorder ${rowLabel} ${index + 1}`, className: "text-muted-foreground hover:text-foreground cursor-grab touch-none", ...attributes, ...listeners, children: _jsx(GripVertical, { className: "h-3.5 w-3.5", "aria-hidden": true }) })), _jsx("span", { className: "text-muted-foreground max-w-[200px] truncate text-xs", title: summary ? `${rowLabel} ${index + 1}: ${summary}` : undefined, children: summary ?? `${rowLabel} ${index + 1}` })] }), _jsx("button", { type: "button", onClick: onRemove, "aria-label": `Remove ${rowLabel.toLowerCase()} ${index + 1}`, className: "text-muted-foreground hover:text-destructive rounded p-0.5", children: _jsx(X, { className: "h-3.5 w-3.5", "aria-hidden": true }) })] }), _jsx("div", { className: "space-y-2", children: fields.map((sub) => (_jsx(ContentField, { id: `insp-field-${fieldKey}-${index}-${sub.key}`, fieldPath: `${fieldKey}.${index}.${sub.key}`, field: sub, value: row[sub.key], onChange: (v) => onPatch({ [sub.key]: v }), onPatch: (patch) => onPatch(patch) }, sub.key))) })] }));
235
+ }
236
+ //# sourceMappingURL=section-fields.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"section-fields.js","sourceRoot":"","sources":["../../../src/views/page-editor/section-fields.tsx"],"names":[],"mappings":"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"}
@@ -18,6 +18,6 @@ export function ArticleBodySection({ section, context, }) {
18
18
  const showToc = bool(c, 'showToc');
19
19
  return (_jsxs("div", { className: `mx-auto px-6 ${wide ? 'max-w-4xl' : 'max-w-2xl'}`, children: [showToc && (_jsxs("div", { className: "border-border bg-muted mb-8 rounded-lg border p-4", children: [_jsx("p", { className: "text-muted-foreground text-xs font-semibold tracking-wider uppercase", children: "On this page" }), _jsx("p", { className: "text-muted-foreground mt-1 text-sm", children: "A table of contents will be generated from the body headings." })] })), html.trim() ? (_jsx("div", { className: "prenta-rich-text max-w-none", dangerouslySetInnerHTML: { __html: html } })) : (_jsx("p", { className: "text-muted-foreground text-base leading-relaxed italic", children: source === 'field'
20
20
  ? "This will show the post's Body content."
21
- : 'Add body copy in the inspector.' }))] }));
21
+ : 'Add body copy in the section list.' }))] }));
22
22
  }
23
23
  //# sourceMappingURL=ArticleBodySection.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ArticleBodySection.js","sourceRoot":"","sources":["../../../../src/views/page-editor/sections/ArticleBodySection.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,IAAI,EAAE,GAAG,EAA0B,MAAM,YAAY,CAAA;AAE9D;;;;;;;;;GASG;AACH,MAAM,UAAU,kBAAkB,CAAC,EACjC,OAAO,EACP,OAAO,GAIR;IACC,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,CAAA;IACzB,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAA;IACxC,MAAM,IAAI,GAAG,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;IACxE,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,KAAK,MAAM,CAAA;IACjD,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,EAAE,SAAS,CAAC,CAAA;IAElC,OAAO,CACL,eAAK,SAAS,EAAE,gBAAgB,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,EAAE,aAC/D,OAAO,IAAI,CACV,eAAK,SAAS,EAAC,mDAAmD,aAChE,YAAG,SAAS,EAAC,sEAAsE,6BAE/E,EACJ,YAAG,SAAS,EAAC,oCAAoC,8EAE7C,IACA,CACP,EACA,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CACb,cAAK,SAAS,EAAC,6BAA6B,EAAC,uBAAuB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,GAAI,CAC3F,CAAC,CAAC,CAAC,CACF,YAAG,SAAS,EAAC,wDAAwD,YAClE,MAAM,KAAK,OAAO;oBACjB,CAAC,CAAC,yCAAyC;oBAC3C,CAAC,CAAC,iCAAiC,GACnC,CACL,IACG,CACP,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"ArticleBodySection.js","sourceRoot":"","sources":["../../../../src/views/page-editor/sections/ArticleBodySection.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,IAAI,EAAE,GAAG,EAA0B,MAAM,YAAY,CAAA;AAE9D;;;;;;;;;GASG;AACH,MAAM,UAAU,kBAAkB,CAAC,EACjC,OAAO,EACP,OAAO,GAIR;IACC,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,CAAA;IACzB,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAA;IACxC,MAAM,IAAI,GAAG,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;IACxE,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,KAAK,MAAM,CAAA;IACjD,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,EAAE,SAAS,CAAC,CAAA;IAElC,OAAO,CACL,eAAK,SAAS,EAAE,gBAAgB,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,EAAE,aAC/D,OAAO,IAAI,CACV,eAAK,SAAS,EAAC,mDAAmD,aAChE,YAAG,SAAS,EAAC,sEAAsE,6BAE/E,EACJ,YAAG,SAAS,EAAC,oCAAoC,8EAE7C,IACA,CACP,EACA,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CACb,cAAK,SAAS,EAAC,6BAA6B,EAAC,uBAAuB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,GAAI,CAC3F,CAAC,CAAC,CAAC,CACF,YAAG,SAAS,EAAC,wDAAwD,YAClE,MAAM,KAAK,OAAO;oBACjB,CAAC,CAAC,yCAAyC;oBAC3C,CAAC,CAAC,oCAAoC,GACtC,CACL,IACG,CACP,CAAA;AACH,CAAC"}
@@ -13,6 +13,18 @@ export interface SectionRendererProps {
13
13
  registerRef?: (id: string, el: HTMLElement | null) => void;
14
14
  /** Live post data for post-oriented section renderers (pages omit this). */
15
15
  context?: PostRenderContext;
16
+ /**
17
+ * Reviewing a past version: the canvas is a read-only render of a snapshot.
18
+ *
19
+ * A SEPARATE flag from `editable`, not a second use of it. Both modes
20
+ * suppress click-to-select and the hover outline, so it is tempting to fold
21
+ * them together — but review mode has to keep showing a label on the
22
+ * sections that changed, which is the entire reason it exists. One shared
23
+ * suppression rule hides exactly the thing the mode is for.
24
+ */
25
+ reviewing?: boolean;
26
+ /** This section differs from the version immediately before the one shown. */
27
+ changed?: boolean;
16
28
  }
17
29
  /**
18
30
  * Renders one section with its background + padding, dispatching to the
@@ -20,5 +32,5 @@ export interface SectionRendererProps {
20
32
  * (outline + a small purple type label) on top of the same markup the
21
33
  * public preview uses — so what you edit is what ships.
22
34
  */
23
- export declare function SectionRenderer({ section, editable, selected, onSelect, registerRef, context, }: SectionRendererProps): import("react/jsx-runtime").JSX.Element;
35
+ export declare function SectionRenderer({ section, editable, selected, onSelect, registerRef, context, reviewing, changed, }: SectionRendererProps): import("react/jsx-runtime").JSX.Element;
24
36
  //# sourceMappingURL=SectionRenderer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SectionRenderer.d.ts","sourceRoot":"","sources":["../../../../src/views/page-editor/sections/SectionRenderer.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAA;AAItE,OAAO,EAAiC,KAAK,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAmClF,8EAA8E;AAC9E,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAE9D;AA8GD,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,WAAW,CAAA;IACpB;kEAC8D;IAC9D,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IAC/B,mEAAmE;IACnE,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAA;IAC1D,4EAA4E;IAC5E,OAAO,CAAC,EAAE,iBAAiB,CAAA;CAC5B;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,EAC9B,OAAO,EACP,QAAgB,EAChB,QAAgB,EAChB,QAAQ,EACR,WAAW,EACX,OAAO,GACR,EAAE,oBAAoB,2CA0CtB"}
1
+ {"version":3,"file":"SectionRenderer.d.ts","sourceRoot":"","sources":["../../../../src/views/page-editor/sections/SectionRenderer.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAA;AAItE,OAAO,EAAiC,KAAK,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAmClF,8EAA8E;AAC9E,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAE9D;AA8GD,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,WAAW,CAAA;IACpB;kEAC8D;IAC9D,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IAC/B,mEAAmE;IACnE,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAA;IAC1D,4EAA4E;IAC5E,OAAO,CAAC,EAAE,iBAAiB,CAAA;IAC3B;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,8EAA8E;IAC9E,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,EAC9B,OAAO,EACP,QAAgB,EAChB,QAAgB,EAChB,QAAQ,EACR,WAAW,EACX,OAAO,EACP,SAAiB,EACjB,OAAe,GAChB,EAAE,oBAAoB,2CAqEtB"}
@@ -127,15 +127,30 @@ function PlaceholderSection({ section }) {
127
127
  * (outline + a small purple type label) on top of the same markup the
128
128
  * public preview uses — so what you edit is what ships.
129
129
  */
130
- export function SectionRenderer({ section, editable = false, selected = false, onSelect, registerRef, context, }) {
130
+ export function SectionRenderer({ section, editable = false, selected = false, onSelect, registerRef, context, reviewing = false, changed = false, }) {
131
131
  const settings = section.settings ?? {};
132
- const hidden = editable && !section.visible;
133
- return (_jsxs("section", { ref: (el) => registerRef?.(section.id, el), "data-section-id": section.id, "data-editable": editable ? 'true' : undefined, "data-selected": selected ? 'true' : undefined, id: settings.anchorId || undefined, className: `relative ${backgroundClass(settings)} ${paddingClass(settings)} ${settings.cssClass ?? ''} ${hidden ? 'opacity-40' : ''} ${editable
132
+ // A snapshot's hidden sections stay muted: the page is still being shown as
133
+ // the editor's own view of it, and a hidden section that rendered solid here
134
+ // would misreport what was live at that moment.
135
+ const chromed = editable || reviewing;
136
+ const hidden = chromed && !section.visible;
137
+ // Review mode is read-only. Click-to-select would edit the CURRENT page
138
+ // while the canvas shows a past one.
139
+ const interactive = editable && !reviewing;
140
+ return (_jsxs("section", { ref: (el) => registerRef?.(section.id, el), "data-section-id": section.id, "data-editable": interactive ? 'true' : undefined, "data-selected": interactive && selected ? 'true' : undefined, "data-reviewing": reviewing ? 'true' : undefined, "data-changed": reviewing && changed ? 'true' : undefined, id: settings.anchorId || undefined, className: `relative ${backgroundClass(settings)} ${paddingClass(settings)} ${settings.cssClass ?? ''} ${hidden ? 'opacity-40' : ''} ${interactive
134
141
  ? 'cursor-pointer outline-2 -outline-offset-2 motion-safe:transition-[outline-color] motion-safe:duration-150'
135
- : ''} ${selected
136
- ? 'outline outline-violet-500'
137
- : editable
138
- ? 'outline-transparent hover:outline hover:outline-[color-mix(in_oklab,var(--acc)_40%,transparent)]'
139
- : 'outline-transparent'}`, onClick: editable ? () => onSelect?.(section.id) : undefined, "aria-label": editable ? `${section.name} section` : undefined, children: [editable && selected && (_jsx("span", { className: "bg-brand pointer-events-none absolute top-0 left-0 z-10 rounded-br-md px-2 py-0.5 text-xs font-medium text-white", children: section.name })), editable && hidden && (_jsx("span", { className: "bg-foreground pointer-events-none absolute top-0 right-0 z-10 rounded-bl-md px-2 py-0.5 text-xs font-medium text-white", children: "Hidden" })), _jsx(SectionBody, { section: section, context: context })] }));
142
+ : ''} ${reviewing
143
+ ? changed
144
+ ? 'outline-warning outline-2 -outline-offset-2 outline-dashed'
145
+ : 'outline-transparent'
146
+ : selected
147
+ ? 'outline outline-violet-500'
148
+ : interactive
149
+ ? 'outline-transparent hover:outline hover:outline-[color-mix(in_oklab,var(--acc)_40%,transparent)]'
150
+ : 'outline-transparent'}`, onClick: interactive ? () => onSelect?.(section.id) : undefined, "aria-label": reviewing && changed
151
+ ? `${section.name} section — changed in this version`
152
+ : interactive
153
+ ? `${section.name} section`
154
+ : undefined, children: [interactive && selected && (_jsx("span", { className: "bg-brand pointer-events-none absolute top-0 left-0 z-10 rounded-br-md px-2 py-0.5 text-xs font-medium text-white", children: section.name })), reviewing && changed && (_jsxs("span", { className: "bg-warning text-warning-foreground pointer-events-none absolute top-0 left-0 z-10 rounded-br-md px-2 py-0.5 text-xs font-medium", children: [section.name, " \u2014 changed"] })), chromed && hidden && (_jsx("span", { className: "bg-foreground pointer-events-none absolute top-0 right-0 z-10 rounded-bl-md px-2 py-0.5 text-xs font-medium text-white", children: "Hidden" })), _jsx(SectionBody, { section: section, context: context })] }));
140
155
  }
141
156
  //# sourceMappingURL=SectionRenderer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SectionRenderer.js","sourceRoot":"","sources":["../../../../src/views/page-editor/sections/SectionRenderer.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SectionRenderer.js","sourceRoot":"","sources":["../../../../src/views/page-editor/sections/SectionRenderer.tsx"],"names":[],"mappings":"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"}
@@ -62,7 +62,7 @@ function EmptyBody({ onAddSection }) {
62
62
  // one true admin affordance here, so it uses the brand `primary` token,
63
63
  // which carries a guaranteed-contrast foreground in both modes.
64
64
  return (_jsxs("div", { className: "flex flex-col items-center justify-center gap-3 border-t border-zinc-100 px-6 py-16 text-center", children: [_jsx("span", { className: "bg-muted flex h-12 w-12 items-center justify-center rounded-full", children: _jsx(FileText, { className: "text-muted-foreground h-5 w-5", "aria-hidden": true }) }), _jsx("p", { className: "text-muted-foreground text-sm", children: onAddSection
65
- ? 'The header is set by the template. Add body sections to build out this post. Hover sections for a light outline, click to select, and edit in the inspector — or use Site preview to click text and images in place.'
65
+ ? 'The header is set by the template. Add body sections to build out this post. Hover sections for a light outline, click to open its editor in the section list — or use Site preview to click text and images in place.'
66
66
  : 'This post’s template renders no body sections. Layout is design-owned — sections come from the template in code. Pick a different template in Post settings, or edit the template itself.' }), onAddSection && (_jsxs("button", { type: "button", onClick: onAddSection, className: "bg-primary text-primary-foreground hover:bg-primary/90 inline-flex items-center gap-2 rounded-lg px-4 py-2 text-sm font-medium transition-colors", children: [_jsx(Plus, { className: "h-4 w-4", "aria-hidden": true }), "Add Section"] }))] }));
67
67
  }
68
68
  //# sourceMappingURL=PostEditorCanvas.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PostEditorCanvas.js","sourceRoot":"","sources":["../../../src/views/post-editor/PostEditorCanvas.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PostEditorCanvas.js","sourceRoot":"","sources":["../../../src/views/post-editor/PostEditorCanvas.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"PostSectionEditor.d.ts","sourceRoot":"","sources":["../../../src/views/post-editor/PostSectionEditor.tsx"],"names":[],"mappings":"AAqDA,OAAO,EAAmB,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAE5E,8DAA8D;AAC9D,UAAU,YAAY;IACpB,WAAW,CAAC,EAAE,MAAM,CAClB,MAAM,EACJ;QACE,MAAM,CAAC,EAAE;YAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;QAC9B,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,GAAG,SAAS,CAAC,CAAA;KACrD,GACD,SAAS,CACZ,CAAA;IACD,GAAG,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC1B,KAAK,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE;YAAE,kBAAkB,CAAC,EAAE,OAAO,GAAG;gBAAE,KAAK,CAAC,EAAE,OAAO,CAAC;gBAAC,KAAK,CAAC,EAAE,OAAO,CAAA;aAAE,CAAA;SAAE,CAAA;KAAE,CAAA;CAC7F;AAED,wDAAwD;AACxD,UAAU,aAAa;IACrB,IAAI,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CACxD;AAED,UAAU,sBAAsB;IAC9B,QAAQ,EAAE,MAAM,CAAA;IAChB,8DAA8D;IAC9D,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,MAAM,CAAC,EAAE,YAAY,CAAA;IACrB,OAAO,CAAC,EAAE,aAAa,CAAA;IACvB,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC;;;;OAIG;IACH,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,OAAO,GAAG,IAAI,KAAK,IAAI,CAAA;CACjG;AAgBD,wBAAgB,iBAAiB,CAAC,EAChC,QAAQ,EACR,UAAU,EACV,MAAM,EACN,OAAO,EACP,UAAU,EACV,aAAa,GACd,EAAE,sBAAsB,2CAusBxB"}
1
+ {"version":3,"file":"PostSectionEditor.d.ts","sourceRoot":"","sources":["../../../src/views/post-editor/PostSectionEditor.tsx"],"names":[],"mappings":"AAmDA,OAAO,EAAmB,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAE5E,8DAA8D;AAC9D,UAAU,YAAY;IACpB,WAAW,CAAC,EAAE,MAAM,CAClB,MAAM,EACJ;QACE,MAAM,CAAC,EAAE;YAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;QAC9B,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,GAAG,SAAS,CAAC,CAAA;KACrD,GACD,SAAS,CACZ,CAAA;IACD,GAAG,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC1B,KAAK,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE;YAAE,kBAAkB,CAAC,EAAE,OAAO,GAAG;gBAAE,KAAK,CAAC,EAAE,OAAO,CAAC;gBAAC,KAAK,CAAC,EAAE,OAAO,CAAA;aAAE,CAAA;SAAE,CAAA;KAAE,CAAA;CAC7F;AAED,wDAAwD;AACxD,UAAU,aAAa;IACrB,IAAI,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CACxD;AAED,UAAU,sBAAsB;IAC9B,QAAQ,EAAE,MAAM,CAAA;IAChB,8DAA8D;IAC9D,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,MAAM,CAAC,EAAE,YAAY,CAAA;IACrB,OAAO,CAAC,EAAE,aAAa,CAAA;IACvB,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC;;;;OAIG;IACH,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,OAAO,GAAG,IAAI,KAAK,IAAI,CAAA;CACjG;AAgBD,wBAAgB,iBAAiB,CAAC,EAChC,QAAQ,EACR,UAAU,EACV,MAAM,EACN,OAAO,EACP,UAAU,EACV,aAAa,GACd,EAAE,sBAAsB,2CAisBxB"}
@@ -9,7 +9,7 @@ import { SchedulePublishDialog } from '../../components/SchedulePublishDialog.js
9
9
  import { EditorSeoAside } from '../../components/EditorSeoAside.js';
10
10
  import { ErrorBoundary } from '../../components/ErrorBoundary.js';
11
11
  import { VersionHistory } from '../../components/VersionHistory.js';
12
- import { emptyPostFromTemplate, fetchPostForEditor, fetchTemplateForEditor, missingPostFields, publishPost, savePostDraft, toggleSectionVisibility, updateSectionContent, updateSectionContentAtPath, updateSectionMeta, updateSectionSettings, validatePost, } from '../../lib/post-editor-service.js';
12
+ import { emptyPostFromTemplate, fetchPostForEditor, fetchTemplateForEditor, missingPostFields, publishPost, savePostDraft, toggleSectionVisibility, updateSectionContent, updateSectionContentAtPath, updateSectionMeta, validatePost, } from '../../lib/post-editor-service.js';
13
13
  import { MediaPickerModal } from '../../components/MediaPickerModal.js';
14
14
  import { defaultPostHeader } from '@prenta/core/page-sections';
15
15
  import { buildPublicPreviewUrl, buildPublicUrl, createPreviewToken, } from '../../lib/preview-link.js';
@@ -20,7 +20,7 @@ import { EditorTopBar } from '../page-editor/EditorTopBar.js';
20
20
  import { SitePreviewFrame } from '../page-editor/SitePreviewFrame.js';
21
21
  import { useSitePreview } from '../page-editor/useSitePreview.js';
22
22
  import { SectionsPanel } from '../page-editor/SectionsPanel.js';
23
- import { SectionInspector } from '../page-editor/SectionInspector.js';
23
+ import { SectionEditForm } from '../page-editor/SectionEditForm.js';
24
24
  import { ValidationSummary } from '../page-editor/ValidationSummary.js';
25
25
  import { resolveDefaultSitePreview } from '../../lib/editor-preview.js';
26
26
  import { computeLiveSeoScore } from '../../lib/editor-seo-content.js';
@@ -169,11 +169,9 @@ export function PostSectionEditor({ postType, documentId, config, session, onNav
169
169
  return;
170
170
  mutateSections((s) => updateSectionContent(s, selectedId, patch));
171
171
  }, [selectedId, mutateSections]);
172
- const handleSettingsChange = useCallback((patch) => {
173
- if (!selectedId)
174
- return;
175
- mutateSections((s) => updateSectionSettings(s, selectedId, patch));
176
- }, [selectedId, mutateSections]);
172
+ // No `handleSettingsChange`: background, spacing, anchor and CSS class are
173
+ // template-authored (docs/design-owned-sections.md). Values round-trip on
174
+ // save untouched; the post TEMPLATE editor still edits them.
177
175
  const handleMetaChange = useCallback((patch) => {
178
176
  if (!selectedId)
179
177
  return;
@@ -441,7 +439,6 @@ export function PostSectionEditor({ postType, documentId, config, session, onNav
441
439
  if (loadError || !post) {
442
440
  return (_jsx("div", { className: "bg-background flex h-full items-center justify-center p-6", children: _jsxs("div", { className: "border-destructive/30 bg-destructive/5 flex max-w-md items-center gap-3 rounded-lg border p-4", children: [_jsx(AlertTriangle, { className: "text-destructive shrink-0", size: 20, "aria-hidden": true }), _jsxs("div", { className: "min-w-0", children: [_jsx("p", { className: "text-foreground text-sm font-medium", children: "Failed to load post" }), _jsx("p", { className: "text-muted-foreground mt-1 text-sm", children: loadError ?? 'Post not found.' }), _jsx("button", { type: "button", onClick: () => onNavigate('/posts'), className: "text-primary mt-2 text-sm font-medium hover:underline", children: "Back to Posts" })] })] }) }));
443
441
  }
444
- const selected = post.sections.find((s) => s.id === selectedId) ?? null;
445
442
  // Sections whose type has no registered definition (seed/code-owned, e.g.
446
443
  // `opal-*`). They are preserved verbatim on save but can't be edited here.
447
444
  const unmanagedTypes = Array.from(new Set(post.sections.filter((s) => s.unmanaged).map((s) => s.sectionType)));
@@ -452,7 +449,12 @@ export function PostSectionEditor({ postType, documentId, config, session, onNav
452
449
  const structuralTypes = Array.from(new Set(post.sections
453
450
  .filter((s) => !hasCanvasRenderer(s.sectionType) && !customRenderers[s.sectionType])
454
451
  .map((s) => s.sectionType)));
455
- return (_jsxs(ErrorBoundary, { children: [_jsxs("div", { className: "bg-background flex h-full flex-col overflow-hidden", children: [_jsx(EditorTopBar, { title: post.title || `New ${typeLabel}`, status: post.status, dirty: dirty, saveState: saveState, publishing: publishing, canEdit: canEdit, canPublish: canPublish && canEdit, publishReady: publishReady, publishDisabledReason: publishDisabledReason, viewport: viewport, backLabel: "Posts", onViewport: setViewport, onBack: () => guardedNavigate('/posts'), onPreview: handlePreview, onViewOnSite: post.id ? handleViewOnSite : undefined, sitePreview: sitePreview.active, onToggleSitePreview: post.id && post.slug ? sitePreview.toggle : undefined, onHistory: post.id ? () => setHistoryOpen(true) : undefined, onOpenSettings: () => setFieldsOpen(true), onOpenSeo: handleToggleSeo, seoOpen: seoOpen, seoScore: liveSeoScore, onSaveDraft: handleSaveDraft, onPublish: requestPublish, onSchedule: post.id ? requestSchedule : undefined, scheduleReady: Boolean(post.id), scheduledAt: post.scheduledAt, scheduledUnpublishAt: post.scheduledUnpublishAt, structuralTypes: structuralTypes }), unmanagedTypes.length > 0 && (_jsxs("div", { role: "status", className: "border-border bg-muted/50 flex items-start gap-3 border-b px-4 py-2.5", children: [_jsx(Lock, { className: "text-muted-foreground mt-0.5 shrink-0", size: 16, "aria-hidden": true }), _jsxs("p", { className: "text-muted-foreground flex-1 text-sm", children: ["This post has", ' ', _jsxs("span", { className: "text-foreground font-medium", children: [unmanagedTypes.length, " section type", unmanagedTypes.length > 1 ? 's' : ''] }), ' ', "managed outside the editor (", unmanagedTypes.join(', '), "). They are preserved on save but edited in your seed script or code, not here."] })] })), validation && (_jsx(ValidationSummary, { errors: validation.errors, warnings: validation.warnings, onDismiss: () => setValidation(null) })), _jsxs("div", { className: "relative flex flex-1 overflow-hidden", children: [_jsx(SectionsPanel, { sections: post.sections, selectedId: selectedId, canEdit: canEdit, onSelect: handleSelectSection, onToggleVisibility: handleToggleVisibility }), _jsx("div", { className: "flex-1 overflow-hidden", children: sitePreview.active ? (_jsx(SitePreviewFrame, { src: sitePreview.url, viewport: viewport, reloadKey: sitePreview.reloadKey, title: `Site preview: ${post.title || `New ${typeLabel}`}`, selectedId: selectedId, sections: post.sections, suppressSectionsEcho: suppressSectionsEcho, onSelectSection: handleSelectSection, onCanvasEdit: handleCanvasEdit, onCanvasRequestMedia: handleCanvasRequestMedia })) : (_jsx(PostEditorCanvas, { sections: post.sections, header: header, context: context, selectedId: selectedId, viewport: viewport, onSelect: handleSelectSection, structuralTypes: structuralTypes, sitePreviewAvailable: sitePreviewAvailable && !sitePreview.active })) }), selected && !seoOpen && (_jsx(SectionInspector, { section: selected, canEdit: canEdit, onClose: () => setSelectedId(null), onContentChange: handleContentChange, onSettingsChange: handleSettingsChange, onMetaChange: handleMetaChange, onToggleVisibility: () => handleToggleVisibility(selected.id), postBody: post.body, onPostBodyChange: handlePostBodyChange })), seoOpen && (_jsx(EditorSeoAside, { entityType: "post", entityId: post.id, title: post.title, slug: post.slug, seoTitle: post.seoTitle, seoDescription: post.seoDescription, sections: post.sections, bodyHtml: post.body, canEdit: canEdit, onClose: () => setSeoOpen(false), onDraftChange: handleFields, onSaved: handleSeoSaved }))] })] }), post.id && (_jsx(VersionHistory, { collectionSlug: postType, documentId: post.id, open: historyOpen, onClose: () => setHistoryOpen(false), onRestore: handleRestored })), _jsx(PostFieldsModal, { open: fieldsOpen, post: post, canEdit: canEdit, fields: config?.collections?.[postType]?.fields, onClose: () => setFieldsOpen(false), onSave: handleFields }), _jsx(ConfirmDialog, { open: confirmPublish, onClose: () => setConfirmPublish(false), onConfirm: doPublish, title: "Publish this post?", description: "The current content will go live and replace the published version.", confirmLabel: "Publish" }), post.id && (_jsx(SchedulePublishDialog, { collectionSlug: postType, documentId: post.id, scheduledAt: post.scheduledAt, scheduledUnpublishAt: post.scheduledUnpublishAt, open: scheduleOpen, onClose: () => setScheduleOpen(false), onScheduled: handleScheduled })), _jsx(ConfirmDialog, { open: leaveTarget !== null, onClose: () => setLeaveTarget(null), onConfirm: () => {
452
+ return (_jsxs(ErrorBoundary, { children: [_jsxs("div", { className: "bg-background flex h-full flex-col overflow-hidden", children: [_jsx(EditorTopBar, { title: post.title || `New ${typeLabel}`, status: post.status, dirty: dirty, saveState: saveState, publishing: publishing, canEdit: canEdit, canPublish: canPublish && canEdit, publishReady: publishReady, publishDisabledReason: publishDisabledReason, viewport: viewport, backLabel: "Posts", onViewport: setViewport, onBack: () => guardedNavigate('/posts'), onPreview: handlePreview, onViewOnSite: post.id ? handleViewOnSite : undefined, sitePreview: sitePreview.active, onToggleSitePreview: post.id && post.slug ? sitePreview.toggle : undefined, onHistory: post.id ? () => setHistoryOpen(true) : undefined, onOpenSettings: () => setFieldsOpen(true), onOpenSeo: handleToggleSeo, seoOpen: seoOpen, seoScore: liveSeoScore, onSaveDraft: handleSaveDraft, onPublish: requestPublish, onSchedule: post.id ? requestSchedule : undefined, scheduleReady: Boolean(post.id), scheduledAt: post.scheduledAt, scheduledUnpublishAt: post.scheduledUnpublishAt, structuralTypes: structuralTypes }), unmanagedTypes.length > 0 && (_jsxs("div", { role: "status", className: "border-border bg-muted/50 flex items-start gap-3 border-b px-4 py-2.5", children: [_jsx(Lock, { className: "text-muted-foreground mt-0.5 shrink-0", size: 16, "aria-hidden": true }), _jsxs("p", { className: "text-muted-foreground flex-1 text-sm", children: ["This post has", ' ', _jsxs("span", { className: "text-foreground font-medium", children: [unmanagedTypes.length, " section type", unmanagedTypes.length > 1 ? 's' : ''] }), ' ', "managed outside the editor (", unmanagedTypes.join(', '), "). They are preserved on save but edited in your seed script or code, not here."] })] })), validation && (_jsx(ValidationSummary, { errors: validation.errors, warnings: validation.warnings, onDismiss: () => setValidation(null) })), _jsxs("div", { className: "relative flex flex-1 overflow-hidden", children: [_jsx(SectionsPanel, { sections: post.sections, selectedId: selectedId, canEdit: canEdit, onSelect: handleSelectSection, onToggleVisibility: handleToggleVisibility,
453
+ // Same inline editor as the page editor. The post editor still has
454
+ // its own standalone panel rather than the rail (followup 20), but
455
+ // where the FORM lives is a separate question from what contains
456
+ // the list, and the answer is the same on both screens.
457
+ renderEditor: (section) => (_jsx(SectionEditForm, { section: section, canEdit: canEdit, onContentChange: handleContentChange, onMetaChange: handleMetaChange, postBody: post.body, onPostBodyChange: handlePostBodyChange })) }), _jsx("div", { className: "flex-1 overflow-hidden", children: sitePreview.active ? (_jsx(SitePreviewFrame, { src: sitePreview.url, viewport: viewport, reloadKey: sitePreview.reloadKey, title: `Site preview: ${post.title || `New ${typeLabel}`}`, selectedId: selectedId, sections: post.sections, suppressSectionsEcho: suppressSectionsEcho, onSelectSection: handleSelectSection, onCanvasEdit: handleCanvasEdit, onCanvasRequestMedia: handleCanvasRequestMedia })) : (_jsx(PostEditorCanvas, { sections: post.sections, header: header, context: context, selectedId: selectedId, viewport: viewport, onSelect: handleSelectSection, structuralTypes: structuralTypes, sitePreviewAvailable: sitePreviewAvailable && !sitePreview.active })) }), seoOpen && (_jsx(EditorSeoAside, { entityType: "post", entityId: post.id, title: post.title, slug: post.slug, seoTitle: post.seoTitle, seoDescription: post.seoDescription, sections: post.sections, bodyHtml: post.body, canEdit: canEdit, onClose: () => setSeoOpen(false), onDraftChange: handleFields, onSaved: handleSeoSaved }))] })] }), post.id && (_jsx(VersionHistory, { collectionSlug: postType, documentId: post.id, open: historyOpen, onClose: () => setHistoryOpen(false), onRestore: handleRestored })), _jsx(PostFieldsModal, { open: fieldsOpen, post: post, canEdit: canEdit, fields: config?.collections?.[postType]?.fields, onClose: () => setFieldsOpen(false), onSave: handleFields }), _jsx(ConfirmDialog, { open: confirmPublish, onClose: () => setConfirmPublish(false), onConfirm: doPublish, title: "Publish this post?", description: "The current content will go live and replace the published version.", confirmLabel: "Publish" }), post.id && (_jsx(SchedulePublishDialog, { collectionSlug: postType, documentId: post.id, scheduledAt: post.scheduledAt, scheduledUnpublishAt: post.scheduledUnpublishAt, open: scheduleOpen, onClose: () => setScheduleOpen(false), onScheduled: handleScheduled })), _jsx(ConfirmDialog, { open: leaveTarget !== null, onClose: () => setLeaveTarget(null), onConfirm: () => {
456
458
  const target = leaveTarget;
457
459
  setLeaveTarget(null);
458
460
  setDirty(false);