@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.
Files changed (52) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/dist/__tests__/layout/sidebar-plugin-nav.test.d.ts +2 -0
  3. package/dist/__tests__/layout/sidebar-plugin-nav.test.d.ts.map +1 -0
  4. package/dist/__tests__/layout/sidebar-plugin-nav.test.js +46 -0
  5. package/dist/__tests__/layout/sidebar-plugin-nav.test.js.map +1 -0
  6. package/dist/__tests__/router/navigation-blocker.test.d.ts +2 -0
  7. package/dist/__tests__/router/navigation-blocker.test.d.ts.map +1 -0
  8. package/dist/__tests__/router/navigation-blocker.test.js +69 -0
  9. package/dist/__tests__/router/navigation-blocker.test.js.map +1 -0
  10. package/dist/__tests__/views/article-body-section.render.test.d.ts +2 -0
  11. package/dist/__tests__/views/article-body-section.render.test.d.ts.map +1 -0
  12. package/dist/__tests__/views/article-body-section.render.test.js +24 -0
  13. package/dist/__tests__/views/article-body-section.render.test.js.map +1 -0
  14. package/dist/actuate-admin.css +1 -1
  15. package/dist/layout/Sidebar.d.ts.map +1 -1
  16. package/dist/layout/Sidebar.js +17 -0
  17. package/dist/layout/Sidebar.js.map +1 -1
  18. package/dist/router/index.d.ts +13 -0
  19. package/dist/router/index.d.ts.map +1 -1
  20. package/dist/router/index.js +49 -0
  21. package/dist/router/index.js.map +1 -1
  22. package/dist/views/DocumentEdit.d.ts.map +1 -1
  23. package/dist/views/DocumentEdit.js +4 -9
  24. package/dist/views/DocumentEdit.js.map +1 -1
  25. package/dist/views/page-builder/PageBuilder.d.ts.map +1 -1
  26. package/dist/views/page-builder/PageBuilder.js +3 -0
  27. package/dist/views/page-builder/PageBuilder.js.map +1 -1
  28. package/dist/views/page-editor/PageSectionEditor.d.ts.map +1 -1
  29. package/dist/views/page-editor/PageSectionEditor.js +3 -11
  30. package/dist/views/page-editor/PageSectionEditor.js.map +1 -1
  31. package/dist/views/page-editor/sections/ArticleBodySection.d.ts.map +1 -1
  32. package/dist/views/page-editor/sections/ArticleBodySection.js +1 -1
  33. package/dist/views/page-editor/sections/ArticleBodySection.js.map +1 -1
  34. package/dist/views/post-editor/PostSectionEditor.d.ts.map +1 -1
  35. package/dist/views/post-editor/PostSectionEditor.js +3 -11
  36. package/dist/views/post-editor/PostSectionEditor.js.map +1 -1
  37. package/dist/views/post-editor/PostTemplateEditor.d.ts.map +1 -1
  38. package/dist/views/post-editor/PostTemplateEditor.js +3 -10
  39. package/dist/views/post-editor/PostTemplateEditor.js.map +1 -1
  40. package/package.json +4 -3
  41. package/src/__tests__/layout/sidebar-plugin-nav.test.ts +50 -0
  42. package/src/__tests__/router/navigation-blocker.test.ts +80 -0
  43. package/src/__tests__/views/article-body-section.render.test.tsx +32 -0
  44. package/src/layout/Sidebar.tsx +19 -0
  45. package/src/router/index.ts +61 -0
  46. package/src/styles/theme.css +91 -0
  47. package/src/views/DocumentEdit.tsx +4 -8
  48. package/src/views/page-builder/PageBuilder.tsx +4 -0
  49. package/src/views/page-editor/PageSectionEditor.tsx +3 -10
  50. package/src/views/page-editor/sections/ArticleBodySection.tsx +1 -4
  51. package/src/views/post-editor/PostSectionEditor.tsx +3 -10
  52. 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
- useEffect(() => {
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
- useEffect(() => {
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
- useEffect(() => {
103
- if (!dirty) return
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']) => {