@prenta/admin 2.0.2 → 2.1.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 (58) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/AdminRoot.d.ts.map +1 -1
  3. package/dist/AdminRoot.js +2 -6
  4. package/dist/AdminRoot.js.map +1 -1
  5. package/dist/__tests__/lib/admin-shortcuts.test.d.ts +2 -0
  6. package/dist/__tests__/lib/admin-shortcuts.test.d.ts.map +1 -0
  7. package/dist/__tests__/lib/admin-shortcuts.test.js +11 -0
  8. package/dist/__tests__/lib/admin-shortcuts.test.js.map +1 -0
  9. package/dist/__tests__/lib/editor-history.test.d.ts +2 -0
  10. package/dist/__tests__/lib/editor-history.test.d.ts.map +1 -0
  11. package/dist/__tests__/lib/editor-history.test.js +76 -0
  12. package/dist/__tests__/lib/editor-history.test.js.map +1 -0
  13. package/dist/__tests__/views/editor-top-bar.render.test.js +17 -0
  14. package/dist/__tests__/views/editor-top-bar.render.test.js.map +1 -1
  15. package/dist/__tests__/views/post-section-editor.test.js +16 -0
  16. package/dist/__tests__/views/post-section-editor.test.js.map +1 -1
  17. package/dist/hooks/use-editor-history.d.ts +19 -0
  18. package/dist/hooks/use-editor-history.d.ts.map +1 -0
  19. package/dist/hooks/use-editor-history.js +94 -0
  20. package/dist/hooks/use-editor-history.js.map +1 -0
  21. package/dist/lib/admin-shortcuts.d.ts +6 -0
  22. package/dist/lib/admin-shortcuts.d.ts.map +1 -0
  23. package/dist/lib/admin-shortcuts.js +11 -0
  24. package/dist/lib/admin-shortcuts.js.map +1 -0
  25. package/dist/lib/editor-history.d.ts +24 -0
  26. package/dist/lib/editor-history.d.ts.map +1 -0
  27. package/dist/lib/editor-history.js +61 -0
  28. package/dist/lib/editor-history.js.map +1 -0
  29. package/dist/lib/seo-service.d.ts +2 -0
  30. package/dist/lib/seo-service.d.ts.map +1 -1
  31. package/dist/lib/seo-service.js.map +1 -1
  32. package/dist/views/page-editor/EditorTopBar.d.ts +6 -1
  33. package/dist/views/page-editor/EditorTopBar.d.ts.map +1 -1
  34. package/dist/views/page-editor/EditorTopBar.js +3 -3
  35. package/dist/views/page-editor/EditorTopBar.js.map +1 -1
  36. package/dist/views/page-editor/PageSectionEditor.d.ts.map +1 -1
  37. package/dist/views/page-editor/PageSectionEditor.js +37 -9
  38. package/dist/views/page-editor/PageSectionEditor.js.map +1 -1
  39. package/dist/views/post-editor/PostSectionEditor.d.ts.map +1 -1
  40. package/dist/views/post-editor/PostSectionEditor.js +44 -11
  41. package/dist/views/post-editor/PostSectionEditor.js.map +1 -1
  42. package/dist/views/seo/AuditTab.d.ts.map +1 -1
  43. package/dist/views/seo/AuditTab.js +7 -2
  44. package/dist/views/seo/AuditTab.js.map +1 -1
  45. package/package.json +3 -3
  46. package/src/AdminRoot.tsx +5 -9
  47. package/src/__tests__/lib/admin-shortcuts.test.ts +11 -0
  48. package/src/__tests__/lib/editor-history.test.ts +99 -0
  49. package/src/__tests__/views/editor-top-bar.render.test.tsx +27 -0
  50. package/src/__tests__/views/post-section-editor.test.tsx +30 -0
  51. package/src/hooks/use-editor-history.ts +102 -0
  52. package/src/lib/admin-shortcuts.ts +10 -0
  53. package/src/lib/editor-history.ts +83 -0
  54. package/src/lib/seo-service.ts +2 -0
  55. package/src/views/page-editor/EditorTopBar.tsx +35 -0
  56. package/src/views/page-editor/PageSectionEditor.tsx +53 -10
  57. package/src/views/post-editor/PostSectionEditor.tsx +64 -14
  58. package/src/views/seo/AuditTab.tsx +18 -1
@@ -1 +1 @@
1
- {"version":3,"file":"AuditTab.js","sourceRoot":"","sources":["../../../src/views/seo/AuditTab.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AuditTab.js","sourceRoot":"","sources":["../../../src/views/seo/AuditTab.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@prenta/admin",
3
- "version": "2.0.2",
3
+ "version": "2.1.0",
4
4
  "license": "MIT",
5
5
  "repository": {
6
6
  "type": "git",
@@ -101,15 +101,15 @@
101
101
  "typescript": "^5.7.0",
102
102
  "vitest": "^4.1.0",
103
103
  "@prenta/component-blocks": "0.3.1",
104
- "@prenta/core": "8.1.0",
105
104
  "@prenta/plugin-ai": "4.0.1",
105
+ "@prenta/core": "8.2.0",
106
106
  "@prenta/plugin-blocks": "1.0.1",
107
107
  "@prenta/plugin-commerce": "1.0.1",
108
108
  "@prenta/plugin-forms": "1.0.1",
109
109
  "@prenta/plugin-media": "1.0.1",
110
110
  "@prenta/plugin-navigation": "1.0.1",
111
111
  "@prenta/plugin-seo": "2.0.1",
112
- "@prenta/sections-react": "0.17.69"
112
+ "@prenta/sections-react": "0.17.70"
113
113
  },
114
114
  "scripts": {
115
115
  "build": "tsc --project tsconfig.json && npx @tailwindcss/cli -i src/styles/build-input.css -o dist/prenta-admin.css --minify",
package/src/AdminRoot.tsx CHANGED
@@ -7,6 +7,7 @@ import { Layout } from './layout/Layout.js'
7
7
  import { adminPortalContainer } from './lib/portal-container.js'
8
8
  import { ADMIN_ROOT_ATTR, getAdminRootElement } from './lib/admin-root-element.js'
9
9
  import { useAdminRouter, parseRouteQuery } from './router/index.js'
10
+ import { ADMIN_KEYBOARD_SHORTCUTS } from './lib/admin-shortcuts.js'
10
11
  import { cmsApi, ensureCsrfToken } from './lib/api.js'
11
12
  import { setDocumentFavicon, BRAND_UPDATED_EVENT } from './lib/favicon.js'
12
13
  import {
@@ -740,15 +741,10 @@ function ShortcutHelp({ open, onClose }: { open: boolean; onClose: () => void })
740
741
  >
741
742
  <Dialog.Title className="mb-4 text-lg font-medium">Keyboard Shortcuts</Dialog.Title>
742
743
  <div className="space-y-3 text-sm">
743
- {[
744
- ['⌘ K', 'Open search'],
745
- ['⌘ S', 'Save document'],
746
- ['⌘ /', 'Toggle this help'],
747
- ['Esc', 'Close panel / modal'],
748
- ].map(([key, desc]) => (
749
- <div key={key} className="flex items-center justify-between">
750
- <span className="text-muted-foreground">{desc}</span>
751
- <kbd className="bg-muted rounded px-2 py-1 font-mono text-xs">{key}</kbd>
744
+ {ADMIN_KEYBOARD_SHORTCUTS.map((row) => (
745
+ <div key={row.keys} className="flex items-center justify-between gap-4">
746
+ <span className="text-muted-foreground">{row.label}</span>
747
+ <kbd className="bg-muted rounded px-2 py-1 font-mono text-xs">{row.keys}</kbd>
752
748
  </div>
753
749
  ))}
754
750
  </div>
@@ -0,0 +1,11 @@
1
+ import { describe, expect, it } from 'vitest'
2
+ import { ADMIN_KEYBOARD_SHORTCUTS } from '../../lib/admin-shortcuts.js'
3
+
4
+ describe('admin keyboard shortcuts', () => {
5
+ it('documents undo and redo for the section editor', () => {
6
+ const labels = ADMIN_KEYBOARD_SHORTCUTS.map((row) => `${row.keys} ${row.label}`)
7
+ expect(labels).toContain('⌘ Z Undo in the section editor')
8
+ expect(labels).toContain('⌘ ⇧ Z Redo in the section editor')
9
+ expect(labels).toContain('⌘ Y Redo in the section editor')
10
+ })
11
+ })
@@ -0,0 +1,99 @@
1
+ // @vitest-environment happy-dom
2
+ import { describe, expect, it } from 'vitest'
3
+ import {
4
+ createEditorHistory,
5
+ isNativeEditingTarget,
6
+ pushEditorHistory,
7
+ redoEditorHistory,
8
+ undoEditorHistory,
9
+ } from '../../lib/editor-history.js'
10
+
11
+ describe('editor history', () => {
12
+ it('undo restores the snapshot from before the edit and redo puts it back', () => {
13
+ let history = pushEditorHistory(createEditorHistory<string>(), 'a', {
14
+ key: 'visibility',
15
+ now: 1_000,
16
+ })
17
+ const undone = undoEditorHistory(history, 'b')
18
+ expect(undone?.value).toBe('a')
19
+ const redone = redoEditorHistory(undone!.history, undone!.value)
20
+ expect(redone?.value).toBe('b')
21
+ history = redone!.history
22
+ expect(undoEditorHistory(history, 'b')?.value).toBe('a')
23
+ })
24
+
25
+ it('a new edit drops the redo stack', () => {
26
+ const once = pushEditorHistory(createEditorHistory<string>(), 'a', {
27
+ key: 'visibility',
28
+ now: 1_000,
29
+ })
30
+ const undone = undoEditorHistory(once, 'b')!
31
+ const again = pushEditorHistory(undone.history, 'a', { key: 'visibility', now: 2_000 })
32
+ expect(redoEditorHistory(again, 'c')).toBeNull()
33
+ })
34
+
35
+ it('coalesces rapid edits with the same key into one step', () => {
36
+ const first = pushEditorHistory(
37
+ createEditorHistory<{ n: number }>(),
38
+ { n: 0 },
39
+ {
40
+ key: 'content:s1',
41
+ now: 5_000,
42
+ coalesce: true,
43
+ },
44
+ )
45
+ const second = pushEditorHistory(
46
+ first,
47
+ { n: 1 },
48
+ {
49
+ key: 'content:s1',
50
+ now: 5_000 + 799,
51
+ coalesce: true,
52
+ },
53
+ )
54
+ expect(second.past).toEqual([{ n: 0 }])
55
+ const later = pushEditorHistory(
56
+ second,
57
+ { n: 2 },
58
+ {
59
+ key: 'content:s1',
60
+ now: 5_000 + 799 + 800,
61
+ coalesce: true,
62
+ },
63
+ )
64
+ expect(later.past).toEqual([{ n: 0 }, { n: 2 }])
65
+ })
66
+
67
+ it('does not coalesce a different key', () => {
68
+ const first = pushEditorHistory(createEditorHistory<string>(), 'a', {
69
+ key: 'content:s1',
70
+ now: 1_000,
71
+ coalesce: true,
72
+ })
73
+ const second = pushEditorHistory(first, 'b', {
74
+ key: 'content:s2',
75
+ now: 1_100,
76
+ coalesce: true,
77
+ })
78
+ expect(second.past).toEqual(['a', 'b'])
79
+ })
80
+
81
+ it('drops the oldest snapshot past the limit', () => {
82
+ let history = createEditorHistory<number>()
83
+ for (let i = 0; i < 53; i++) {
84
+ history = pushEditorHistory(history, i, { key: `step-${i}`, now: i })
85
+ }
86
+ expect(history.past).toHaveLength(50)
87
+ expect(history.past[0]).toBe(3)
88
+ })
89
+
90
+ it('leaves undo to text fields and rich text', () => {
91
+ expect(isNativeEditingTarget(null)).toBe(false)
92
+ const input = document.createElement('input')
93
+ const editable = document.createElement('div')
94
+ editable.contentEditable = 'true'
95
+ expect(isNativeEditingTarget(input)).toBe(true)
96
+ expect(isNativeEditingTarget(editable)).toBe(true)
97
+ expect(isNativeEditingTarget(document.createElement('button'))).toBe(false)
98
+ })
99
+ })
@@ -99,6 +99,33 @@ describe('EditorTopBar review chrome', () => {
99
99
  render(<EditorTopBar {...baseProps} reviewNote="Need a stronger lede." />)
100
100
  expect(screen.getByText('Reviewer note: Need a stronger lede.')).toBeTruthy()
101
101
  })
102
+
103
+ it('undo and redo follow the section stack and stay quiet until there is a step', () => {
104
+ const onUndo = vi.fn()
105
+ const onRedo = vi.fn()
106
+ const { rerender } = render(
107
+ <EditorTopBar
108
+ {...baseProps}
109
+ onUndo={onUndo}
110
+ onRedo={onRedo}
111
+ canUndo={false}
112
+ canRedo={false}
113
+ />,
114
+ )
115
+ const undo = screen.getByRole('button', { name: 'Undo' }) as HTMLButtonElement
116
+ const redo = screen.getByRole('button', { name: 'Redo' }) as HTMLButtonElement
117
+ expect(undo.disabled).toBe(true)
118
+ expect(redo.disabled).toBe(true)
119
+ expect(undo.getAttribute('title')).toContain('Ctrl+Z')
120
+ fireEvent.click(undo)
121
+ expect(onUndo).not.toHaveBeenCalled()
122
+
123
+ rerender(<EditorTopBar {...baseProps} onUndo={onUndo} onRedo={onRedo} canUndo canRedo />)
124
+ fireEvent.click(screen.getByRole('button', { name: 'Undo' }))
125
+ fireEvent.click(screen.getByRole('button', { name: 'Redo' }))
126
+ expect(onUndo).toHaveBeenCalledOnce()
127
+ expect(onRedo).toHaveBeenCalledOnce()
128
+ })
102
129
  })
103
130
 
104
131
  describe('EditorTopBar view site / share', () => {
@@ -211,6 +211,36 @@ describe('PostSectionEditor section disclosure', () => {
211
211
  fireEvent.click(screen.getByRole('button', { name: 'Close Quote' }))
212
212
  await waitFor(() => expect(screen.queryByRole('button', { name: 'Close Quote' })).toBeNull())
213
213
  })
214
+
215
+ it('undo puts a hidden section back', async () => {
216
+ fetchTemplateForEditor.mockRejectedValue(new Error('no template'))
217
+ fetchPostForEditor.mockResolvedValue(
218
+ loadedPost([{ id: 's1', sectionType: 'quote', name: 'Quote' }]),
219
+ )
220
+ render(
221
+ <PostSectionEditor
222
+ postType="blog"
223
+ documentId="p1"
224
+ config={validConfig}
225
+ onNavigate={() => {}}
226
+ session={{ user: { role: 'EDITOR' } }}
227
+ />,
228
+ )
229
+
230
+ const hide = await screen.findByRole('button', { name: 'Hide Quote' })
231
+ fireEvent.click(hide)
232
+ await screen.findByRole('button', { name: 'Show Quote' })
233
+
234
+ const undo = screen.getByRole('button', { name: 'Undo' }) as HTMLButtonElement
235
+ await waitFor(() => expect(undo.disabled).toBe(false))
236
+ fireEvent.click(undo)
237
+ await screen.findByRole('button', { name: 'Hide Quote' })
238
+
239
+ const redo = screen.getByRole('button', { name: 'Redo' }) as HTMLButtonElement
240
+ await waitFor(() => expect(redo.disabled).toBe(false))
241
+ fireEvent.click(redo)
242
+ await screen.findByRole('button', { name: 'Show Quote' })
243
+ })
214
244
  })
215
245
 
216
246
  describe('PostSectionEditor Share', () => {
@@ -0,0 +1,102 @@
1
+ 'use client'
2
+
3
+ import { useCallback, useEffect, useRef, useState } from 'react'
4
+ import {
5
+ createEditorHistory,
6
+ isNativeEditingTarget,
7
+ pushEditorHistory,
8
+ redoEditorHistory,
9
+ undoEditorHistory,
10
+ } from '../lib/editor-history.js'
11
+
12
+ function cloneSnapshot<T>(value: T): T {
13
+ return JSON.parse(JSON.stringify(value)) as T
14
+ }
15
+
16
+ /**
17
+ * Snapshot stack for the section editor. `note` records the document from
18
+ * before a change and is safe to call inside a state updater (it only writes
19
+ * a ref). The stack commits after that render. Rapid notes with the same key
20
+ * collapse into one step.
21
+ */
22
+ export function useEditorHistory<T>(current: T | null, resetKey: string | null) {
23
+ const historyRef = useRef(createEditorHistory<T>())
24
+ const pendingRef = useRef<Array<{ snapshot: T; key: string; coalesce: boolean }>>([])
25
+ const [, setRevision] = useState(0)
26
+
27
+ const note = useCallback((snapshot: T, key: string, coalesce = false) => {
28
+ pendingRef.current.push({ snapshot: cloneSnapshot(snapshot), key, coalesce })
29
+ }, [])
30
+
31
+ useEffect(() => {
32
+ historyRef.current = createEditorHistory()
33
+ pendingRef.current = []
34
+ setRevision((n) => n + 1)
35
+ }, [resetKey])
36
+
37
+ useEffect(() => {
38
+ if (pendingRef.current.length === 0) return
39
+ const now = Date.now()
40
+ let next = historyRef.current
41
+ for (const item of pendingRef.current) {
42
+ next = pushEditorHistory(next, item.snapshot, {
43
+ key: item.key,
44
+ now,
45
+ coalesce: item.coalesce,
46
+ })
47
+ }
48
+ pendingRef.current = []
49
+ historyRef.current = next
50
+ setRevision((n) => n + 1)
51
+ }, [current])
52
+
53
+ const undo = useCallback((): T | null => {
54
+ if (current == null) return null
55
+ const result = undoEditorHistory(historyRef.current, cloneSnapshot(current))
56
+ if (!result) return null
57
+ historyRef.current = result.history
58
+ setRevision((n) => n + 1)
59
+ return result.value
60
+ }, [current])
61
+
62
+ const redo = useCallback((): T | null => {
63
+ if (current == null) return null
64
+ const result = redoEditorHistory(historyRef.current, cloneSnapshot(current))
65
+ if (!result) return null
66
+ historyRef.current = result.history
67
+ setRevision((n) => n + 1)
68
+ return result.value
69
+ }, [current])
70
+
71
+ return {
72
+ note,
73
+ undo,
74
+ redo,
75
+ canUndo: historyRef.current.past.length > 0,
76
+ canRedo: historyRef.current.future.length > 0,
77
+ }
78
+ }
79
+
80
+ export function useSectionEditorShortcuts(input: {
81
+ enabled: boolean
82
+ onUndo: () => void
83
+ onRedo: () => void
84
+ }) {
85
+ const { enabled, onUndo, onRedo } = input
86
+ useEffect(() => {
87
+ if (!enabled) return
88
+ function onKey(event: KeyboardEvent) {
89
+ if (isNativeEditingTarget(event.target)) return
90
+ if (!(event.metaKey || event.ctrlKey) || event.altKey) return
91
+ const key = event.key.toLowerCase()
92
+ const redoKey = key === 'y' || (key === 'z' && event.shiftKey)
93
+ const undoKey = key === 'z' && !event.shiftKey
94
+ if (!undoKey && !redoKey) return
95
+ event.preventDefault()
96
+ if (redoKey) onRedo()
97
+ else onUndo()
98
+ }
99
+ document.addEventListener('keydown', onKey)
100
+ return () => document.removeEventListener('keydown', onKey)
101
+ }, [enabled, onUndo, onRedo])
102
+ }
@@ -0,0 +1,10 @@
1
+ /** Shown in the keyboard-shortcuts dialog (⌘ /). */
2
+ export const ADMIN_KEYBOARD_SHORTCUTS: ReadonlyArray<{ keys: string; label: string }> = [
3
+ { keys: '⌘ K', label: 'Open search' },
4
+ { keys: '⌘ S', label: 'Save document' },
5
+ { keys: '⌘ Z', label: 'Undo in the section editor' },
6
+ { keys: '⌘ ⇧ Z', label: 'Redo in the section editor' },
7
+ { keys: '⌘ Y', label: 'Redo in the section editor' },
8
+ { keys: '⌘ /', label: 'Toggle this help' },
9
+ { keys: 'Esc', label: 'Close panel / modal' },
10
+ ]
@@ -0,0 +1,83 @@
1
+ /** How long edits with the same key collapse into one undo step. */
2
+ const EDITOR_HISTORY_COALESCE_MS = 800
3
+
4
+ /** Cap so a long editing session cannot grow the stack without bound. */
5
+ const EDITOR_HISTORY_LIMIT = 50
6
+
7
+ interface EditorHistory<T> {
8
+ past: T[]
9
+ future: T[]
10
+ lastKey: string | null
11
+ lastAt: number
12
+ }
13
+
14
+ export function createEditorHistory<T>(): EditorHistory<T> {
15
+ return { past: [], future: [], lastKey: null, lastAt: 0 }
16
+ }
17
+
18
+ export function pushEditorHistory<T>(
19
+ history: EditorHistory<T>,
20
+ snapshot: T,
21
+ options: { key: string; now: number; coalesce?: boolean },
22
+ ): EditorHistory<T> {
23
+ const coalesce = options.coalesce === true
24
+ if (
25
+ coalesce &&
26
+ history.lastKey === options.key &&
27
+ history.past.length > 0 &&
28
+ options.now - history.lastAt < EDITOR_HISTORY_COALESCE_MS
29
+ ) {
30
+ return { ...history, lastAt: options.now }
31
+ }
32
+
33
+ const past = [...history.past, snapshot]
34
+ return {
35
+ past:
36
+ past.length > EDITOR_HISTORY_LIMIT ? past.slice(past.length - EDITOR_HISTORY_LIMIT) : past,
37
+ future: [],
38
+ lastKey: options.key,
39
+ lastAt: options.now,
40
+ }
41
+ }
42
+
43
+ export function undoEditorHistory<T>(
44
+ history: EditorHistory<T>,
45
+ current: T,
46
+ ): { history: EditorHistory<T>; value: T } | null {
47
+ if (history.past.length === 0) return null
48
+ const value = history.past[history.past.length - 1] as T
49
+ return {
50
+ value,
51
+ history: {
52
+ past: history.past.slice(0, -1),
53
+ future: [...history.future, current],
54
+ lastKey: null,
55
+ lastAt: 0,
56
+ },
57
+ }
58
+ }
59
+
60
+ export function redoEditorHistory<T>(
61
+ history: EditorHistory<T>,
62
+ current: T,
63
+ ): { history: EditorHistory<T>; value: T } | null {
64
+ if (history.future.length === 0) return null
65
+ const value = history.future[history.future.length - 1] as T
66
+ return {
67
+ value,
68
+ history: {
69
+ past: [...history.past, current],
70
+ future: history.future.slice(0, -1),
71
+ lastKey: null,
72
+ lastAt: 0,
73
+ },
74
+ }
75
+ }
76
+
77
+ /** Text fields and rich text keep their own undo. The page stack must not steal it. */
78
+ export function isNativeEditingTarget(target: EventTarget | null): boolean {
79
+ if (!(target instanceof HTMLElement)) return false
80
+ if (target.isContentEditable) return true
81
+ const tag = target.tagName
82
+ return tag === 'INPUT' || tag === 'TEXTAREA' || tag === 'SELECT'
83
+ }
@@ -385,6 +385,8 @@ export interface SeoAuditRun {
385
385
  errorMessage: string | null
386
386
  metadata: {
387
387
  renderedAudit?: RenderedAuditSummary
388
+ total?: number
389
+ truncated?: boolean
388
390
  } | null
389
391
  }
390
392
 
@@ -9,9 +9,11 @@ import {
9
9
  ExternalLink,
10
10
  History,
11
11
  Loader2,
12
+ Redo2,
12
13
  Settings2,
13
14
  Share2,
14
15
  TriangleAlert,
16
+ Undo2,
15
17
  } from 'lucide-react'
16
18
  import { EditorSeoScoreBadge } from '../../components/seo/EditorSeoScoreBadge.js'
17
19
  import { BreakpointPicker } from '../../components/BreakpointPicker.js'
@@ -99,6 +101,11 @@ interface EditorTopBarProps {
99
101
  /** Band for `seoScore`; omit to derive from the content-analysis scale. */
100
102
  seoScoreBand?: 'good' | 'fair' | 'poor'
101
103
  onSaveDraft: () => void
104
+ /** Section-editor undo. Omitted outside the page and post editors. */
105
+ onUndo?: () => void
106
+ onRedo?: () => void
107
+ canUndo?: boolean
108
+ canRedo?: boolean
102
109
  onSubmitForReview: () => void
103
110
  onApprove: () => void
104
111
  onRequestChanges: (note: string) => void
@@ -149,6 +156,10 @@ export function EditorTopBar({
149
156
  seoScore,
150
157
  seoScoreBand,
151
158
  onSaveDraft,
159
+ onUndo,
160
+ onRedo,
161
+ canUndo = false,
162
+ canRedo = false,
152
163
  onSubmitForReview,
153
164
  onApprove,
154
165
  onRequestChanges,
@@ -290,6 +301,30 @@ export function EditorTopBar({
290
301
  </span>
291
302
  )}
292
303
  <SaveStatus state={saveState} dirty={dirty} />
304
+ {onUndo && onRedo && (
305
+ <span className="ml-1 inline-flex shrink-0 items-center">
306
+ <button
307
+ type="button"
308
+ onClick={onUndo}
309
+ disabled={!canUndo}
310
+ aria-label="Undo"
311
+ title="Undo the last edit (Ctrl+Z or ⌘Z). Text fields keep their own undo."
312
+ className="prenta-touch-target text-muted-foreground hover:text-foreground hover:bg-accent rounded-lg p-2 disabled:cursor-not-allowed disabled:opacity-40"
313
+ >
314
+ <Undo2 className="h-4 w-4" aria-hidden />
315
+ </button>
316
+ <button
317
+ type="button"
318
+ onClick={onRedo}
319
+ disabled={!canRedo}
320
+ aria-label="Redo"
321
+ title="Redo (Ctrl+Shift+Z, Ctrl+Y, or ⌘⇧Z)."
322
+ className="prenta-touch-target text-muted-foreground hover:text-foreground hover:bg-accent rounded-lg p-2 disabled:cursor-not-allowed disabled:opacity-40"
323
+ >
324
+ <Redo2 className="h-4 w-4" aria-hidden />
325
+ </button>
326
+ </span>
327
+ )}
293
328
  </div>
294
329
 
295
330
  {/* Right controls */}