@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.
- package/CHANGELOG.md +12 -0
- package/dist/AdminRoot.d.ts.map +1 -1
- package/dist/AdminRoot.js +2 -6
- package/dist/AdminRoot.js.map +1 -1
- package/dist/__tests__/lib/admin-shortcuts.test.d.ts +2 -0
- package/dist/__tests__/lib/admin-shortcuts.test.d.ts.map +1 -0
- package/dist/__tests__/lib/admin-shortcuts.test.js +11 -0
- package/dist/__tests__/lib/admin-shortcuts.test.js.map +1 -0
- package/dist/__tests__/lib/editor-history.test.d.ts +2 -0
- package/dist/__tests__/lib/editor-history.test.d.ts.map +1 -0
- package/dist/__tests__/lib/editor-history.test.js +76 -0
- package/dist/__tests__/lib/editor-history.test.js.map +1 -0
- package/dist/__tests__/views/editor-top-bar.render.test.js +17 -0
- package/dist/__tests__/views/editor-top-bar.render.test.js.map +1 -1
- package/dist/__tests__/views/post-section-editor.test.js +16 -0
- package/dist/__tests__/views/post-section-editor.test.js.map +1 -1
- package/dist/hooks/use-editor-history.d.ts +19 -0
- package/dist/hooks/use-editor-history.d.ts.map +1 -0
- package/dist/hooks/use-editor-history.js +94 -0
- package/dist/hooks/use-editor-history.js.map +1 -0
- package/dist/lib/admin-shortcuts.d.ts +6 -0
- package/dist/lib/admin-shortcuts.d.ts.map +1 -0
- package/dist/lib/admin-shortcuts.js +11 -0
- package/dist/lib/admin-shortcuts.js.map +1 -0
- package/dist/lib/editor-history.d.ts +24 -0
- package/dist/lib/editor-history.d.ts.map +1 -0
- package/dist/lib/editor-history.js +61 -0
- package/dist/lib/editor-history.js.map +1 -0
- package/dist/lib/seo-service.d.ts +2 -0
- package/dist/lib/seo-service.d.ts.map +1 -1
- package/dist/lib/seo-service.js.map +1 -1
- package/dist/views/page-editor/EditorTopBar.d.ts +6 -1
- package/dist/views/page-editor/EditorTopBar.d.ts.map +1 -1
- package/dist/views/page-editor/EditorTopBar.js +3 -3
- package/dist/views/page-editor/EditorTopBar.js.map +1 -1
- package/dist/views/page-editor/PageSectionEditor.d.ts.map +1 -1
- package/dist/views/page-editor/PageSectionEditor.js +37 -9
- package/dist/views/page-editor/PageSectionEditor.js.map +1 -1
- package/dist/views/post-editor/PostSectionEditor.d.ts.map +1 -1
- package/dist/views/post-editor/PostSectionEditor.js +44 -11
- package/dist/views/post-editor/PostSectionEditor.js.map +1 -1
- package/dist/views/seo/AuditTab.d.ts.map +1 -1
- package/dist/views/seo/AuditTab.js +7 -2
- package/dist/views/seo/AuditTab.js.map +1 -1
- package/package.json +3 -3
- package/src/AdminRoot.tsx +5 -9
- package/src/__tests__/lib/admin-shortcuts.test.ts +11 -0
- package/src/__tests__/lib/editor-history.test.ts +99 -0
- package/src/__tests__/views/editor-top-bar.render.test.tsx +27 -0
- package/src/__tests__/views/post-section-editor.test.tsx +30 -0
- package/src/hooks/use-editor-history.ts +102 -0
- package/src/lib/admin-shortcuts.ts +10 -0
- package/src/lib/editor-history.ts +83 -0
- package/src/lib/seo-service.ts +2 -0
- package/src/views/page-editor/EditorTopBar.tsx +35 -0
- package/src/views/page-editor/PageSectionEditor.tsx +53 -10
- package/src/views/post-editor/PostSectionEditor.tsx +64 -14
- 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
|
|
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.
|
|
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
|
-
|
|
745
|
-
|
|
746
|
-
|
|
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
|
+
}
|
package/src/lib/seo-service.ts
CHANGED
|
@@ -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 */}
|