@actuate-media/cms-admin 0.76.0 → 0.76.1
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 +28 -0
- package/dist/__tests__/layout/sidebar-plugin-nav.test.d.ts +2 -0
- package/dist/__tests__/layout/sidebar-plugin-nav.test.d.ts.map +1 -0
- package/dist/__tests__/layout/sidebar-plugin-nav.test.js +46 -0
- package/dist/__tests__/layout/sidebar-plugin-nav.test.js.map +1 -0
- package/dist/__tests__/router/navigation-blocker.test.d.ts +2 -0
- package/dist/__tests__/router/navigation-blocker.test.d.ts.map +1 -0
- package/dist/__tests__/router/navigation-blocker.test.js +69 -0
- package/dist/__tests__/router/navigation-blocker.test.js.map +1 -0
- package/dist/__tests__/views/article-body-section.render.test.d.ts +2 -0
- package/dist/__tests__/views/article-body-section.render.test.d.ts.map +1 -0
- package/dist/__tests__/views/article-body-section.render.test.js +24 -0
- package/dist/__tests__/views/article-body-section.render.test.js.map +1 -0
- package/dist/actuate-admin.css +1 -1
- package/dist/layout/Sidebar.d.ts.map +1 -1
- package/dist/layout/Sidebar.js +17 -0
- package/dist/layout/Sidebar.js.map +1 -1
- package/dist/router/index.d.ts +13 -0
- package/dist/router/index.d.ts.map +1 -1
- package/dist/router/index.js +49 -0
- package/dist/router/index.js.map +1 -1
- package/dist/views/DocumentEdit.d.ts.map +1 -1
- package/dist/views/DocumentEdit.js +4 -9
- package/dist/views/DocumentEdit.js.map +1 -1
- package/dist/views/page-builder/PageBuilder.d.ts.map +1 -1
- package/dist/views/page-builder/PageBuilder.js +3 -0
- package/dist/views/page-builder/PageBuilder.js.map +1 -1
- package/dist/views/page-editor/PageSectionEditor.d.ts.map +1 -1
- package/dist/views/page-editor/PageSectionEditor.js +3 -11
- package/dist/views/page-editor/PageSectionEditor.js.map +1 -1
- package/dist/views/page-editor/sections/ArticleBodySection.d.ts.map +1 -1
- package/dist/views/page-editor/sections/ArticleBodySection.js +1 -1
- package/dist/views/page-editor/sections/ArticleBodySection.js.map +1 -1
- package/dist/views/post-editor/PostSectionEditor.d.ts.map +1 -1
- package/dist/views/post-editor/PostSectionEditor.js +3 -11
- package/dist/views/post-editor/PostSectionEditor.js.map +1 -1
- package/dist/views/post-editor/PostTemplateEditor.d.ts.map +1 -1
- package/dist/views/post-editor/PostTemplateEditor.js +3 -10
- package/dist/views/post-editor/PostTemplateEditor.js.map +1 -1
- package/package.json +4 -3
- package/src/__tests__/layout/sidebar-plugin-nav.test.ts +50 -0
- package/src/__tests__/router/navigation-blocker.test.ts +80 -0
- package/src/__tests__/views/article-body-section.render.test.tsx +32 -0
- package/src/layout/Sidebar.tsx +19 -0
- package/src/router/index.ts +61 -0
- package/src/styles/theme.css +91 -0
- package/src/views/DocumentEdit.tsx +4 -8
- package/src/views/page-builder/PageBuilder.tsx +4 -0
- package/src/views/page-editor/PageSectionEditor.tsx +3 -10
- package/src/views/page-editor/sections/ArticleBodySection.tsx +1 -4
- package/src/views/post-editor/PostSectionEditor.tsx +3 -10
- package/src/views/post-editor/PostTemplateEditor.tsx +3 -9
|
@@ -4,6 +4,7 @@ import { useCallback, useEffect, useMemo, useState } from 'react'
|
|
|
4
4
|
import { AlertTriangle, Blocks, Loader2, Lock } from 'lucide-react'
|
|
5
5
|
import { toast } from 'sonner'
|
|
6
6
|
import { ConfirmDialog } from '../../components/ui/ConfirmDialog.js'
|
|
7
|
+
import { useNavigationBlocker } from '../../router/index.js'
|
|
7
8
|
import { SchedulePublishDialog } from '../../components/SchedulePublishDialog.js'
|
|
8
9
|
import { EditorSeoAside } from '../../components/EditorSeoAside.js'
|
|
9
10
|
import { ErrorBoundary } from '../../components/ErrorBoundary.js'
|
|
@@ -190,16 +191,8 @@ export function PageSectionEditor({
|
|
|
190
191
|
}
|
|
191
192
|
}, [documentId, initialParentId, schemaError])
|
|
192
193
|
|
|
193
|
-
// ─── Unsaved-changes guard (browser unload)
|
|
194
|
-
|
|
195
|
-
if (!dirty) return
|
|
196
|
-
function onBeforeUnload(e: BeforeUnloadEvent) {
|
|
197
|
-
e.preventDefault()
|
|
198
|
-
e.returnValue = ''
|
|
199
|
-
}
|
|
200
|
-
window.addEventListener('beforeunload', onBeforeUnload)
|
|
201
|
-
return () => window.removeEventListener('beforeunload', onBeforeUnload)
|
|
202
|
-
}, [dirty])
|
|
194
|
+
// ─── Unsaved-changes guard (client-side navigation + browser unload) ──
|
|
195
|
+
useNavigationBlocker(dirty)
|
|
203
196
|
|
|
204
197
|
// ─── Section mutations ───────────────────────────────────────────────
|
|
205
198
|
const mutateSections = useCallback(
|
|
@@ -37,10 +37,7 @@ export function ArticleBodySection({
|
|
|
37
37
|
</div>
|
|
38
38
|
)}
|
|
39
39
|
{html.trim() ? (
|
|
40
|
-
<div
|
|
41
|
-
className="prose prose-zinc text-foreground max-w-none text-base leading-relaxed"
|
|
42
|
-
dangerouslySetInnerHTML={{ __html: html }}
|
|
43
|
-
/>
|
|
40
|
+
<div className="actuate-rich-text max-w-none" dangerouslySetInnerHTML={{ __html: html }} />
|
|
44
41
|
) : (
|
|
45
42
|
<p className="text-muted-foreground text-base leading-relaxed italic">
|
|
46
43
|
{source === 'field'
|
|
@@ -4,6 +4,7 @@ import { useCallback, useEffect, useMemo, useState } from 'react'
|
|
|
4
4
|
import { AlertTriangle, Loader2, Lock } from 'lucide-react'
|
|
5
5
|
import { toast } from 'sonner'
|
|
6
6
|
import { ConfirmDialog } from '../../components/ui/ConfirmDialog.js'
|
|
7
|
+
import { useNavigationBlocker } from '../../router/index.js'
|
|
7
8
|
import { SchedulePublishDialog } from '../../components/SchedulePublishDialog.js'
|
|
8
9
|
import { EditorSeoAside } from '../../components/EditorSeoAside.js'
|
|
9
10
|
import { ErrorBoundary } from '../../components/ErrorBoundary.js'
|
|
@@ -227,16 +228,8 @@ export function PostSectionEditor({
|
|
|
227
228
|
}
|
|
228
229
|
}, [postType, documentId, schemaError])
|
|
229
230
|
|
|
230
|
-
// ─── Unsaved-changes guard
|
|
231
|
-
|
|
232
|
-
if (!dirty) return
|
|
233
|
-
function onBeforeUnload(e: BeforeUnloadEvent) {
|
|
234
|
-
e.preventDefault()
|
|
235
|
-
e.returnValue = ''
|
|
236
|
-
}
|
|
237
|
-
window.addEventListener('beforeunload', onBeforeUnload)
|
|
238
|
-
return () => window.removeEventListener('beforeunload', onBeforeUnload)
|
|
239
|
-
}, [dirty])
|
|
231
|
+
// ─── Unsaved-changes guard (client-side navigation + browser unload) ──
|
|
232
|
+
useNavigationBlocker(dirty)
|
|
240
233
|
|
|
241
234
|
const context: PostRenderContext = useMemo(
|
|
242
235
|
() => ({
|
|
@@ -4,6 +4,7 @@ import { useCallback, useEffect, useMemo, useState } from 'react'
|
|
|
4
4
|
import { AlertTriangle, ArrowLeft, Layout, Loader2, Save } from 'lucide-react'
|
|
5
5
|
import { toast } from 'sonner'
|
|
6
6
|
import { ConfirmDialog } from '../../components/ui/ConfirmDialog.js'
|
|
7
|
+
import { useNavigationBlocker } from '../../router/index.js'
|
|
7
8
|
import { ErrorBoundary } from '../../components/ErrorBoundary.js'
|
|
8
9
|
import {
|
|
9
10
|
addSection,
|
|
@@ -99,15 +100,8 @@ export function PostTemplateEditor({
|
|
|
99
100
|
}
|
|
100
101
|
}, [postType])
|
|
101
102
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
function onBeforeUnload(e: BeforeUnloadEvent) {
|
|
105
|
-
e.preventDefault()
|
|
106
|
-
e.returnValue = ''
|
|
107
|
-
}
|
|
108
|
-
window.addEventListener('beforeunload', onBeforeUnload)
|
|
109
|
-
return () => window.removeEventListener('beforeunload', onBeforeUnload)
|
|
110
|
-
}, [dirty])
|
|
103
|
+
// Unsaved-changes guard (client-side navigation + browser unload).
|
|
104
|
+
useNavigationBlocker(dirty)
|
|
111
105
|
|
|
112
106
|
const mutateSections = useCallback(
|
|
113
107
|
(fn: (sections: EditorPostTemplate['sections']) => EditorPostTemplate['sections']) => {
|