@actuate-media/cms-admin 0.19.0 → 0.20.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 (94) hide show
  1. package/dist/AdminRoot.d.ts.map +1 -1
  2. package/dist/AdminRoot.js +9 -5
  3. package/dist/AdminRoot.js.map +1 -1
  4. package/dist/actuate-admin.css +1 -1
  5. package/dist/components/seo/Drawer.d.ts +11 -0
  6. package/dist/components/seo/Drawer.d.ts.map +1 -0
  7. package/dist/components/seo/Drawer.js +13 -0
  8. package/dist/components/seo/Drawer.js.map +1 -0
  9. package/dist/components/seo/RedirectEditorDrawer.d.ts +9 -0
  10. package/dist/components/seo/RedirectEditorDrawer.d.ts.map +1 -0
  11. package/dist/components/seo/RedirectEditorDrawer.js +94 -0
  12. package/dist/components/seo/RedirectEditorDrawer.js.map +1 -0
  13. package/dist/components/seo/SeoCopilotDrawer.d.ts +10 -0
  14. package/dist/components/seo/SeoCopilotDrawer.d.ts.map +1 -0
  15. package/dist/components/seo/SeoCopilotDrawer.js +34 -0
  16. package/dist/components/seo/SeoCopilotDrawer.js.map +1 -0
  17. package/dist/components/seo/SeoEditorDrawer.d.ts +8 -0
  18. package/dist/components/seo/SeoEditorDrawer.d.ts.map +1 -0
  19. package/dist/components/seo/SeoEditorDrawer.js +111 -0
  20. package/dist/components/seo/SeoEditorDrawer.js.map +1 -0
  21. package/dist/components/seo/SeoIssueFixDrawer.d.ts +8 -0
  22. package/dist/components/seo/SeoIssueFixDrawer.d.ts.map +1 -0
  23. package/dist/components/seo/SeoIssueFixDrawer.js +111 -0
  24. package/dist/components/seo/SeoIssueFixDrawer.js.map +1 -0
  25. package/dist/components/seo/primitives.d.ts +53 -0
  26. package/dist/components/seo/primitives.d.ts.map +1 -0
  27. package/dist/components/seo/primitives.js +100 -0
  28. package/dist/components/seo/primitives.js.map +1 -0
  29. package/dist/layout/Sidebar.d.ts.map +1 -1
  30. package/dist/layout/Sidebar.js +3 -0
  31. package/dist/layout/Sidebar.js.map +1 -1
  32. package/dist/lib/seo-service.d.ts +322 -0
  33. package/dist/lib/seo-service.d.ts.map +1 -0
  34. package/dist/lib/seo-service.js +295 -0
  35. package/dist/lib/seo-service.js.map +1 -0
  36. package/dist/router/index.d.ts.map +1 -1
  37. package/dist/router/index.js +4 -1
  38. package/dist/router/index.js.map +1 -1
  39. package/dist/views/MediaBrowser.d.ts.map +1 -1
  40. package/dist/views/MediaBrowser.js +36 -25
  41. package/dist/views/MediaBrowser.js.map +1 -1
  42. package/dist/views/Posts/NewPostTypeInstructions.js +2 -2
  43. package/dist/views/Posts/post-type-presets.d.ts +5 -0
  44. package/dist/views/Posts/post-type-presets.d.ts.map +1 -1
  45. package/dist/views/Posts/post-type-presets.js +10 -64
  46. package/dist/views/Posts/post-type-presets.js.map +1 -1
  47. package/dist/views/SEO.d.ts.map +1 -1
  48. package/dist/views/SEO.js +89 -132
  49. package/dist/views/SEO.js.map +1 -1
  50. package/dist/views/seo/AuditTab.d.ts +6 -0
  51. package/dist/views/seo/AuditTab.d.ts.map +1 -0
  52. package/dist/views/seo/AuditTab.js +57 -0
  53. package/dist/views/seo/AuditTab.js.map +1 -0
  54. package/dist/views/seo/ContentTab.d.ts +5 -0
  55. package/dist/views/seo/ContentTab.d.ts.map +1 -0
  56. package/dist/views/seo/ContentTab.js +27 -0
  57. package/dist/views/seo/ContentTab.js.map +1 -0
  58. package/dist/views/seo/OverviewTab.d.ts +8 -0
  59. package/dist/views/seo/OverviewTab.d.ts.map +1 -0
  60. package/dist/views/seo/OverviewTab.js +35 -0
  61. package/dist/views/seo/OverviewTab.js.map +1 -0
  62. package/dist/views/seo/RedirectsTab.d.ts +2 -0
  63. package/dist/views/seo/RedirectsTab.d.ts.map +1 -0
  64. package/dist/views/seo/RedirectsTab.js +124 -0
  65. package/dist/views/seo/RedirectsTab.js.map +1 -0
  66. package/dist/views/seo/TechnicalTab.d.ts +2 -0
  67. package/dist/views/seo/TechnicalTab.d.ts.map +1 -0
  68. package/dist/views/seo/TechnicalTab.js +102 -0
  69. package/dist/views/seo/TechnicalTab.js.map +1 -0
  70. package/dist/views/seo/useSeoResource.d.ts +8 -0
  71. package/dist/views/seo/useSeoResource.d.ts.map +1 -0
  72. package/dist/views/seo/useSeoResource.js +42 -0
  73. package/dist/views/seo/useSeoResource.js.map +1 -0
  74. package/package.json +2 -2
  75. package/src/AdminRoot.tsx +9 -5
  76. package/src/components/seo/Drawer.tsx +61 -0
  77. package/src/components/seo/RedirectEditorDrawer.tsx +235 -0
  78. package/src/components/seo/SeoCopilotDrawer.tsx +76 -0
  79. package/src/components/seo/SeoEditorDrawer.tsx +347 -0
  80. package/src/components/seo/SeoIssueFixDrawer.tsx +244 -0
  81. package/src/components/seo/primitives.tsx +237 -0
  82. package/src/layout/Sidebar.tsx +3 -0
  83. package/src/lib/seo-service.ts +623 -0
  84. package/src/router/index.ts +4 -1
  85. package/src/views/MediaBrowser.tsx +89 -67
  86. package/src/views/Posts/NewPostTypeInstructions.tsx +2 -2
  87. package/src/views/Posts/post-type-presets.ts +15 -64
  88. package/src/views/SEO.tsx +186 -863
  89. package/src/views/seo/AuditTab.tsx +229 -0
  90. package/src/views/seo/ContentTab.tsx +164 -0
  91. package/src/views/seo/OverviewTab.tsx +257 -0
  92. package/src/views/seo/RedirectsTab.tsx +392 -0
  93. package/src/views/seo/TechnicalTab.tsx +303 -0
  94. package/src/views/seo/useSeoResource.ts +52 -0
@@ -0,0 +1,52 @@
1
+ 'use client'
2
+
3
+ /**
4
+ * Small async-resource hook for the SEO tabs: wraps a service fetcher with
5
+ * loading / error / data / refetch and abort-on-unmount safety. Keeps each
6
+ * tab declarative without re-implementing fetch plumbing.
7
+ */
8
+ import { useCallback, useEffect, useRef, useState } from 'react'
9
+
10
+ export interface SeoResource<T> {
11
+ data: T | null
12
+ loading: boolean
13
+ error: string | null
14
+ refetch: () => void
15
+ }
16
+
17
+ export function useSeoResource<T>(
18
+ fetcher: () => Promise<T>,
19
+ deps: ReadonlyArray<unknown> = [],
20
+ ): SeoResource<T> {
21
+ const [data, setData] = useState<T | null>(null)
22
+ const [loading, setLoading] = useState(true)
23
+ const [error, setError] = useState<string | null>(null)
24
+ const aliveRef = useRef(true)
25
+ // eslint-disable-next-line react-hooks/exhaustive-deps
26
+ const stableFetcher = useCallback(fetcher, deps)
27
+
28
+ const load = useCallback(async () => {
29
+ setLoading(true)
30
+ setError(null)
31
+ try {
32
+ const result = await stableFetcher()
33
+ if (aliveRef.current) setData(result)
34
+ } catch (err) {
35
+ if (aliveRef.current) {
36
+ setError(err instanceof Error ? err.message : 'Failed to load data')
37
+ }
38
+ } finally {
39
+ if (aliveRef.current) setLoading(false)
40
+ }
41
+ }, [stableFetcher])
42
+
43
+ useEffect(() => {
44
+ aliveRef.current = true
45
+ load()
46
+ return () => {
47
+ aliveRef.current = false
48
+ }
49
+ }, [load])
50
+
51
+ return { data, loading, error, refetch: load }
52
+ }