@actuate-media/cms-admin 0.38.1 → 0.39.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 (55) hide show
  1. package/dist/AdminRoot.d.ts.map +1 -1
  2. package/dist/AdminRoot.js +8 -0
  3. package/dist/AdminRoot.js.map +1 -1
  4. package/dist/__tests__/components/breadcrumbs-is-id.test.d.ts +2 -0
  5. package/dist/__tests__/components/breadcrumbs-is-id.test.d.ts.map +1 -0
  6. package/dist/__tests__/components/breadcrumbs-is-id.test.js +28 -0
  7. package/dist/__tests__/components/breadcrumbs-is-id.test.js.map +1 -0
  8. package/dist/__tests__/lib/page-editor-service-api.test.js +40 -0
  9. package/dist/__tests__/lib/page-editor-service-api.test.js.map +1 -1
  10. package/dist/__tests__/views/appearance-settings.render.test.js +34 -0
  11. package/dist/__tests__/views/appearance-settings.render.test.js.map +1 -1
  12. package/dist/components/Breadcrumbs.d.ts +1 -0
  13. package/dist/components/Breadcrumbs.d.ts.map +1 -1
  14. package/dist/components/Breadcrumbs.js +10 -2
  15. package/dist/components/Breadcrumbs.js.map +1 -1
  16. package/dist/components/MediaPickerModal.d.ts +9 -1
  17. package/dist/components/MediaPickerModal.d.ts.map +1 -1
  18. package/dist/components/MediaPickerModal.js +11 -5
  19. package/dist/components/MediaPickerModal.js.map +1 -1
  20. package/dist/lib/page-editor-service.d.ts.map +1 -1
  21. package/dist/lib/page-editor-service.js +10 -3
  22. package/dist/lib/page-editor-service.js.map +1 -1
  23. package/dist/views/page-editor/PageSectionEditor.d.ts.map +1 -1
  24. package/dist/views/page-editor/PageSectionEditor.js +5 -2
  25. package/dist/views/page-editor/PageSectionEditor.js.map +1 -1
  26. package/dist/views/page-editor/SectionInspector.d.ts.map +1 -1
  27. package/dist/views/page-editor/SectionInspector.js +6 -1
  28. package/dist/views/page-editor/SectionInspector.js.map +1 -1
  29. package/dist/views/page-editor/SectionsPanel.d.ts.map +1 -1
  30. package/dist/views/page-editor/SectionsPanel.js +7 -4
  31. package/dist/views/page-editor/SectionsPanel.js.map +1 -1
  32. package/dist/views/page-editor/sections/SectionRenderer.d.ts.map +1 -1
  33. package/dist/views/page-editor/sections/SectionRenderer.js +14 -1
  34. package/dist/views/page-editor/sections/SectionRenderer.js.map +1 -1
  35. package/dist/views/settings/BrandingCard.d.ts.map +1 -1
  36. package/dist/views/settings/BrandingCard.js +15 -4
  37. package/dist/views/settings/BrandingCard.js.map +1 -1
  38. package/dist/views/settings/useAppearanceSettings.d.ts +10 -0
  39. package/dist/views/settings/useAppearanceSettings.d.ts.map +1 -1
  40. package/dist/views/settings/useAppearanceSettings.js +24 -0
  41. package/dist/views/settings/useAppearanceSettings.js.map +1 -1
  42. package/package.json +2 -2
  43. package/src/AdminRoot.tsx +12 -0
  44. package/src/__tests__/components/breadcrumbs-is-id.test.ts +32 -0
  45. package/src/__tests__/lib/page-editor-service-api.test.ts +43 -0
  46. package/src/__tests__/views/appearance-settings.render.test.tsx +45 -0
  47. package/src/components/Breadcrumbs.tsx +11 -2
  48. package/src/components/MediaPickerModal.tsx +68 -39
  49. package/src/lib/page-editor-service.ts +10 -3
  50. package/src/views/page-editor/PageSectionEditor.tsx +24 -1
  51. package/src/views/page-editor/SectionInspector.tsx +50 -1
  52. package/src/views/page-editor/SectionsPanel.tsx +54 -38
  53. package/src/views/page-editor/sections/SectionRenderer.tsx +25 -1
  54. package/src/views/settings/BrandingCard.tsx +37 -2
  55. package/src/views/settings/useAppearanceSettings.ts +39 -0
@@ -1 +1 @@
1
- {"version":3,"file":"useAppearanceSettings.js","sourceRoot":"","sources":["../../../src/views/settings/useAppearanceSettings.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useAppearanceSettings.js","sourceRoot":"","sources":["../../../src/views/settings/useAppearanceSettings.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@actuate-media/cms-admin",
3
- "version": "0.38.1",
3
+ "version": "0.39.0",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/actuate-media/actuatecms.git",
@@ -88,7 +88,7 @@
88
88
  "tailwindcss": "^4.0.0",
89
89
  "typescript": "^5.7.0",
90
90
  "vitest": "^4.1.0",
91
- "@actuate-media/cms-core": "0.55.0",
91
+ "@actuate-media/cms-core": "0.56.0",
92
92
  "@actuate-media/component-blocks": "0.2.0"
93
93
  },
94
94
  "scripts": {
package/src/AdminRoot.tsx CHANGED
@@ -5,6 +5,10 @@ import { toast } from 'sonner'
5
5
  import { Layout } from './layout/Layout.js'
6
6
  import { useAdminRouter } from './router/index.js'
7
7
  import { cmsApi, ensureCsrfToken } from './lib/api.js'
8
+ import {
9
+ registerSectionTypes,
10
+ resetCustomSectionTypes,
11
+ } from '@actuate-media/cms-core/page-sections'
8
12
  import { Dashboard } from './views/Dashboard.js'
9
13
  import { CollectionList } from './views/CollectionList.js'
10
14
  import { DocumentEdit } from './views/DocumentEdit.js'
@@ -155,6 +159,14 @@ function AdminShell({
155
159
  }
156
160
  }, [session])
157
161
 
162
+ // Register config-declared custom section types into the client registry so
163
+ // the Page/Post editors recognize them (Add Section gallery + field-driven
164
+ // inspector). Reset first so a config change never leaves stale types.
165
+ useEffect(() => {
166
+ resetCustomSectionTypes()
167
+ registerSectionTypes(config?.sections?.customTypes)
168
+ }, [config])
169
+
158
170
  const shortcuts = useMemo(
159
171
  () => ({
160
172
  'mod+k': () => {
@@ -0,0 +1,32 @@
1
+ import { describe, expect, it } from 'vitest'
2
+
3
+ import { isId } from '../../components/Breadcrumbs.js'
4
+
5
+ /**
6
+ * `isId` decides whether a path segment is a document id (shown as "Edit ...")
7
+ * versus a human-readable route segment (title-cased). Prisma uses
8
+ * `@default(cuid())`, so the regression here is CUIDs being mistaken for slugs
9
+ * and rendered raw in the breadcrumb trail.
10
+ */
11
+ describe('Breadcrumbs.isId', () => {
12
+ it('recognizes cuid ids (Prisma @default(cuid()))', () => {
13
+ expect(isId('clp1q2w3e4r5t6y7u8i9o0p1a')).toBe(true)
14
+ expect(isId('cm5xk3a9b0001qz8f4g7h2j6k')).toBe(true)
15
+ })
16
+
17
+ it('recognizes cuid2 / long base36 token ids', () => {
18
+ expect(isId('tz4a8f5d2e9b1c6h3k7m0p2q')).toBe(true)
19
+ })
20
+
21
+ it('still recognizes numeric and hex ids', () => {
22
+ expect(isId('12345')).toBe(true)
23
+ expect(isId('a1b2c3d4e5f6')).toBe(true)
24
+ })
25
+
26
+ it('does not treat human-readable slugs as ids', () => {
27
+ expect(isId('about')).toBe(false)
28
+ expect(isId('contact-us')).toBe(false)
29
+ expect(isId('new')).toBe(false)
30
+ expect(isId('page-builder')).toBe(false)
31
+ })
32
+ })
@@ -141,6 +141,49 @@ describe('savePageDraft', () => {
141
141
  cmsApi.mockResolvedValue({ error: 'Forbidden', status: 403 })
142
142
  await expect(savePageDraft(draft('p1'))).rejects.toThrow('Forbidden')
143
143
  })
144
+
145
+ it('round-trips externally-managed (unmanaged) sections on save without data loss', async () => {
146
+ // Load a page that carries an unknown section type (seed/code-owned).
147
+ cmsApi.mockResolvedValueOnce({
148
+ data: {
149
+ id: 'p9',
150
+ title: 'Landing',
151
+ slug: 'landing',
152
+ status: 'DRAFT',
153
+ data: {
154
+ path: '/landing',
155
+ sections: [
156
+ { id: 's1', sectionType: 'hero', content: { heading: 'Hi' } },
157
+ { id: 's2', sectionType: 'opal-hero', content: { title: 'Custom', cta: '/x' } },
158
+ ],
159
+ },
160
+ },
161
+ status: 200,
162
+ })
163
+ const page = await fetchPageForEditor('p9')
164
+ expect(page.sections.find((s) => s.id === 's2')?.unmanaged).toBe(true)
165
+
166
+ cmsApi.mockResolvedValueOnce({
167
+ data: {
168
+ id: 'p9',
169
+ title: 'Landing',
170
+ slug: 'landing',
171
+ status: 'DRAFT',
172
+ data: { sections: [] },
173
+ },
174
+ status: 200,
175
+ })
176
+ await savePageDraft(page)
177
+
178
+ const [, opts] = cmsApi.mock.calls[1] as [string, RequestInit]
179
+ const body = JSON.parse(opts.body as string)
180
+ const opal = body.sections.find((s: { sectionType: string }) => s.sectionType === 'opal-hero')
181
+ // The unknown section survives the save, content intact...
182
+ expect(opal).toBeTruthy()
183
+ expect(opal.content).toEqual({ title: 'Custom', cta: '/x' })
184
+ // ...but the derived `unmanaged` marker is never persisted.
185
+ expect('unmanaged' in opal).toBe(false)
186
+ })
144
187
  })
145
188
 
146
189
  describe('publishPage', () => {
@@ -17,6 +17,24 @@ const cmsApi = vi.fn(async (endpoint: string, options?: { method?: string; body?
17
17
  data: { id: 'new-logo', url: 'https://cdn.example.com/x.svg', mimeType: 'image/svg+xml' },
18
18
  status: 200,
19
19
  }
20
+ if (endpoint.startsWith('/media?') && method === 'GET')
21
+ return {
22
+ data: {
23
+ items: [
24
+ {
25
+ id: 'existing-logo',
26
+ filename: 'existing.png',
27
+ storageKey: 'https://cdn.example.com/existing.png',
28
+ url: 'https://cdn.example.com/existing.png',
29
+ mimeType: 'image/png',
30
+ fileSize: 1234,
31
+ width: 400,
32
+ height: 100,
33
+ },
34
+ ],
35
+ },
36
+ status: 200,
37
+ }
20
38
  return { data: {}, status: 200 }
21
39
  })
22
40
 
@@ -120,6 +138,33 @@ describe('AppearanceTab', () => {
120
138
  )
121
139
  })
122
140
 
141
+ it('references an existing media-library asset without re-uploading', async () => {
142
+ render(<AppearanceTab role="ADMIN" />)
143
+ await screen.findByText('Branding')
144
+
145
+ fireEvent.click(screen.getByRole('button', { name: /choose primary logo from media library/i }))
146
+
147
+ const thumb = await screen.findByRole('button', { name: /existing\.png/i })
148
+ fireEvent.click(thumb)
149
+
150
+ // No upload should be issued — we reference the existing asset by id.
151
+ expect(cmsApi.mock.calls.some(([endpoint]) => endpoint === '/media/upload')).toBe(false)
152
+
153
+ const save = await screen.findByRole('button', { name: 'Save Changes' })
154
+ await waitFor(() => expect((save as HTMLButtonElement).disabled).toBe(false))
155
+ fireEvent.click(save)
156
+
157
+ await waitFor(() =>
158
+ expect(cmsApi).toHaveBeenCalledWith(
159
+ '/globals/settings',
160
+ expect.objectContaining({
161
+ method: 'PUT',
162
+ body: expect.stringContaining('"publicPrimaryLogoAssetId":"existing-logo"'),
163
+ }),
164
+ ),
165
+ )
166
+ })
167
+
123
168
  it('is read-only for non-admins', async () => {
124
169
  render(<AppearanceTab role="EDITOR" />)
125
170
 
@@ -27,8 +27,17 @@ function labelFor(segment: string): string {
27
27
  )
28
28
  }
29
29
 
30
- function isId(segment: string): boolean {
31
- return /^\d+$/.test(segment) || /^[0-9a-f]{8,}$/i.test(segment)
30
+ export function isId(segment: string): boolean {
31
+ return (
32
+ // numeric id
33
+ /^\d+$/.test(segment) ||
34
+ // hex id (e.g. ObjectId / md5-style)
35
+ /^[0-9a-f]{8,}$/i.test(segment) ||
36
+ // cuid (Prisma's @default(cuid())): leading "c" + base36, ~25 chars
37
+ /^c[a-z0-9]{20,}$/i.test(segment) ||
38
+ // cuid2 / other long base36 token ids (24+ chars, no separators)
39
+ /^[a-z0-9]{24,}$/i.test(segment)
40
+ )
32
41
  }
33
42
 
34
43
  export interface BreadcrumbsProps {
@@ -10,6 +10,8 @@ interface MediaItem {
10
10
  id: string
11
11
  filename: string
12
12
  storageKey: string
13
+ /** Normalized public URL from the media list endpoint (preferred for display). */
14
+ url?: string
13
15
  mimeType: string
14
16
  fileSize: number
15
17
  width?: number
@@ -20,6 +22,8 @@ interface MediaItem {
20
22
  export interface SelectedMediaItem {
21
23
  id: string
22
24
  storageKey: string
25
+ /** Normalized public URL (falls back to storageKey when absent). */
26
+ url: string
23
27
  filename: string
24
28
  mimeType: string
25
29
  width?: number
@@ -36,6 +40,12 @@ export interface MediaPickerModalProps {
36
40
  */
37
41
  onSelectItem?: (item: SelectedMediaItem) => void
38
42
  accept?: string
43
+ /**
44
+ * Hide the "Upload New" tab and show only the existing library. Used where a
45
+ * caller has its own upload path (e.g. brand assets, which upload with
46
+ * format-preserving options) but still wants to reuse library assets.
47
+ */
48
+ libraryOnly?: boolean
39
49
  }
40
50
 
41
51
  export function MediaPickerModal({
@@ -44,6 +54,7 @@ export function MediaPickerModal({
44
54
  onSelect,
45
55
  onSelectItem,
46
56
  accept,
57
+ libraryOnly = false,
47
58
  }: MediaPickerModalProps) {
48
59
  const [tab, setTab] = useState<'library' | 'upload'>('library')
49
60
  const [search, setSearch] = useState('')
@@ -74,11 +85,12 @@ export function MediaPickerModal({
74
85
  toast.error(res.error)
75
86
  } else if (res.data) {
76
87
  const mediaItem = res.data as MediaItem
77
- const url = mediaItem.storageKey ?? ''
88
+ const url = mediaItem.url || mediaItem.storageKey || ''
78
89
  toast.success(`Uploaded ${file.name}`)
79
90
  onSelectItem?.({
80
91
  id: mediaItem.id,
81
92
  storageKey: mediaItem.storageKey,
93
+ url,
82
94
  filename: mediaItem.filename ?? file.name,
83
95
  mimeType: mediaItem.mimeType ?? file.type,
84
96
  width: mediaItem.width,
@@ -93,15 +105,17 @@ export function MediaPickerModal({
93
105
  }
94
106
 
95
107
  function handleSelectItem(item: MediaItem) {
108
+ const url = item.url || item.storageKey || ''
96
109
  onSelectItem?.({
97
110
  id: item.id,
98
111
  storageKey: item.storageKey,
112
+ url,
99
113
  filename: item.filename,
100
114
  mimeType: item.mimeType,
101
115
  width: item.width,
102
116
  height: item.height,
103
117
  })
104
- onSelect(item.storageKey, item.filename)
118
+ onSelect(url, item.filename)
105
119
  onClose()
106
120
  }
107
121
 
@@ -121,31 +135,33 @@ export function MediaPickerModal({
121
135
  </button>
122
136
  </div>
123
137
 
124
- <div className="flex border-b border-gray-200">
125
- <button
126
- onClick={() => setTab('library')}
127
- className={`flex-1 px-4 py-2.5 text-sm font-medium transition-colors ${
128
- tab === 'library'
129
- ? 'border-b-2 border-blue-600 text-blue-600'
130
- : 'text-gray-500 hover:text-gray-700'
131
- }`}
132
- >
133
- Media Library
134
- </button>
135
- <button
136
- onClick={() => setTab('upload')}
137
- className={`flex-1 px-4 py-2.5 text-sm font-medium transition-colors ${
138
- tab === 'upload'
139
- ? 'border-b-2 border-blue-600 text-blue-600'
140
- : 'text-gray-500 hover:text-gray-700'
141
- }`}
142
- >
143
- Upload New
144
- </button>
145
- </div>
138
+ {!libraryOnly && (
139
+ <div className="flex border-b border-gray-200">
140
+ <button
141
+ onClick={() => setTab('library')}
142
+ className={`flex-1 px-4 py-2.5 text-sm font-medium transition-colors ${
143
+ tab === 'library'
144
+ ? 'border-b-2 border-blue-600 text-blue-600'
145
+ : 'text-gray-500 hover:text-gray-700'
146
+ }`}
147
+ >
148
+ Media Library
149
+ </button>
150
+ <button
151
+ onClick={() => setTab('upload')}
152
+ className={`flex-1 px-4 py-2.5 text-sm font-medium transition-colors ${
153
+ tab === 'upload'
154
+ ? 'border-b-2 border-blue-600 text-blue-600'
155
+ : 'text-gray-500 hover:text-gray-700'
156
+ }`}
157
+ >
158
+ Upload New
159
+ </button>
160
+ </div>
161
+ )}
146
162
 
147
163
  <div className="flex-1 overflow-y-auto p-4">
148
- {tab === 'library' ? (
164
+ {libraryOnly || tab === 'library' ? (
149
165
  <>
150
166
  <div className="relative mb-4">
151
167
  <Search className="absolute top-1/2 left-3 h-4 w-4 -translate-y-1/2 text-gray-400" />
@@ -168,20 +184,33 @@ export function MediaPickerModal({
168
184
  </div>
169
185
  ) : (
170
186
  <div className="grid grid-cols-3 gap-3 sm:grid-cols-4">
171
- {imageItems.map((item: MediaItem) => (
172
- <button
173
- key={item.id}
174
- onClick={() => handleSelectItem(item)}
175
- className="group relative aspect-square overflow-hidden rounded-lg border-2 border-gray-200 bg-gray-100 transition-colors hover:border-blue-500"
176
- >
177
- <div className="flex h-full w-full items-center justify-center">
178
- <ImageIcon className="h-8 w-8 text-gray-300" />
179
- </div>
180
- <div className="absolute inset-x-0 bottom-0 bg-black/60 p-1.5 opacity-0 transition-opacity group-hover:opacity-100">
181
- <p className="truncate text-xs text-white">{item.filename}</p>
182
- </div>
183
- </button>
184
- ))}
187
+ {imageItems.map((item: MediaItem) => {
188
+ const src = item.url || item.storageKey
189
+ return (
190
+ <button
191
+ key={item.id}
192
+ onClick={() => handleSelectItem(item)}
193
+ title={item.filename}
194
+ className="group relative aspect-square overflow-hidden rounded-lg border-2 border-gray-200 bg-gray-100 transition-colors hover:border-blue-500"
195
+ >
196
+ {src ? (
197
+ <img
198
+ src={src}
199
+ alt={item.filename}
200
+ loading="lazy"
201
+ className="h-full w-full object-contain"
202
+ />
203
+ ) : (
204
+ <div className="flex h-full w-full items-center justify-center">
205
+ <ImageIcon className="h-8 w-8 text-gray-300" />
206
+ </div>
207
+ )}
208
+ <div className="absolute inset-x-0 bottom-0 bg-black/60 p-1.5 opacity-0 transition-opacity group-hover:opacity-100">
209
+ <p className="truncate text-xs text-white">{item.filename}</p>
210
+ </div>
211
+ </button>
212
+ )
213
+ })}
185
214
  </div>
186
215
  )}
187
216
  </>
@@ -112,7 +112,9 @@ export function validatePage(page: EditorPage, forPublish = false): ValidationRe
112
112
  errors.push('Add at least one visible section before publishing.')
113
113
  }
114
114
 
115
- for (const section of visible) {
115
+ // Unmanaged (externally-managed) sections have no registered field schema,
116
+ // so they can't be content-validated here and must not block publish.
117
+ for (const section of visible.filter((s) => !s.unmanaged)) {
116
118
  const def = getSectionType(section.sectionType)
117
119
  const label = section.name || def?.name || 'Section'
118
120
  const result = validateSectionContent(section.sectionType, section.content, section.settings)
@@ -216,7 +218,9 @@ function rowToEditorPage(doc: DocumentApiRow): EditorPage {
216
218
  slug,
217
219
  path: typeof data.path === 'string' && data.path ? data.path : slug ? `/${slug}` : '/',
218
220
  status: doc.status ?? 'DRAFT',
219
- sections: coerceSectionsCore(data.sections),
221
+ // Preserve unknown (externally-managed) sections so the editor can show
222
+ // them read-only and round-trip them on save instead of dropping them.
223
+ sections: coerceSectionsCore(data.sections, { preserveUnknown: true }),
220
224
  seoTitle: typeof data.metaTitle === 'string' ? data.metaTitle : '',
221
225
  seoDescription: typeof data.metaDescription === 'string' ? data.metaDescription : '',
222
226
  publishedAt: doc.publishedAt ?? null,
@@ -252,7 +256,10 @@ function toWriteBody(page: EditorPage, extra?: Record<string, unknown>): string
252
256
  title: page.title,
253
257
  slug: page.slug,
254
258
  path: page.path,
255
- sections: page.sections,
259
+ // Unmanaged sections are part of `page.sections`, so they round-trip on
260
+ // every save (no data loss). Strip the derived `unmanaged` marker — it is
261
+ // recomputed from the registry on read, so persisting it would only stale.
262
+ sections: page.sections.map(({ unmanaged: _unmanaged, ...rest }) => rest),
256
263
  metaTitle: page.seoTitle,
257
264
  metaDescription: page.seoDescription,
258
265
  ...extra,
@@ -1,7 +1,7 @@
1
1
  'use client'
2
2
 
3
3
  import { useCallback, useEffect, useMemo, useState } from 'react'
4
- import { AlertTriangle, Blocks, Loader2 } from 'lucide-react'
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
7
  import { ErrorBoundary } from '../../components/ErrorBoundary.js'
@@ -392,6 +392,12 @@ export function PageSectionEditor({
392
392
  const readOnly = page.builderOwned
393
393
  const effectiveCanEdit = canEdit && !readOnly
394
394
 
395
+ // Sections whose type has no registered definition (seed/code-owned, e.g.
396
+ // `opal-*`). They are preserved verbatim on save but can't be edited here.
397
+ const unmanagedTypes = Array.from(
398
+ new Set(page.sections.filter((s) => s.unmanaged).map((s) => s.sectionType)),
399
+ )
400
+
395
401
  return (
396
402
  <ErrorBoundary>
397
403
  <div className="bg-background flex h-full flex-col overflow-hidden">
@@ -436,6 +442,23 @@ export function PageSectionEditor({
436
442
  </div>
437
443
  )}
438
444
 
445
+ {unmanagedTypes.length > 0 && (
446
+ <div
447
+ role="status"
448
+ className="border-border bg-muted/50 flex items-start gap-3 border-b px-4 py-2.5"
449
+ >
450
+ <Lock className="text-muted-foreground mt-0.5 shrink-0" size={16} aria-hidden />
451
+ <p className="text-muted-foreground flex-1 text-sm">
452
+ This page has{' '}
453
+ <span className="text-foreground font-medium">
454
+ {unmanagedTypes.length} section type{unmanagedTypes.length > 1 ? 's' : ''}
455
+ </span>{' '}
456
+ managed outside the editor ({unmanagedTypes.join(', ')}). They are preserved on save
457
+ but edited in your seed script or code, not here.
458
+ </p>
459
+ </div>
460
+ )}
461
+
439
462
  {validation && (
440
463
  <ValidationSummary
441
464
  errors={validation.errors}
@@ -1,7 +1,7 @@
1
1
  'use client'
2
2
 
3
3
  import { useEffect, useState } from 'react'
4
- import { Eye, EyeOff, Plus, X } from 'lucide-react'
4
+ import { Eye, EyeOff, Lock, Plus, X } from 'lucide-react'
5
5
  import { MediaPickerModal } from '../../components/MediaPickerModal.js'
6
6
  import type { PageSection } from '../../lib/page-editor-service.js'
7
7
  import type { SectionSettings } from './section-types.js'
@@ -41,6 +41,55 @@ export function SectionInspector({
41
41
  return () => document.removeEventListener('keydown', onKey)
42
42
  }, [onClose])
43
43
 
44
+ // Unmanaged sections (no registered type) are read-only: show why instead of
45
+ // editable controls, so the externally-managed content is never altered here.
46
+ if (section.unmanaged) {
47
+ return (
48
+ <aside
49
+ role="dialog"
50
+ aria-label={`${section.name} (read-only)`}
51
+ className="bg-card border-border flex h-full w-80 shrink-0 flex-col border-l"
52
+ >
53
+ <div className="border-border flex items-center justify-between border-b px-4 py-3">
54
+ <div className="min-w-0">
55
+ <h2 className="text-foreground truncate text-sm font-medium">{section.name}</h2>
56
+ <p className="text-muted-foreground text-xs">Managed outside the editor</p>
57
+ </div>
58
+ <button
59
+ type="button"
60
+ onClick={onClose}
61
+ aria-label="Close inspector"
62
+ className="text-muted-foreground hover:text-foreground hover:bg-accent rounded p-1"
63
+ >
64
+ <X className="h-4 w-4" aria-hidden />
65
+ </button>
66
+ </div>
67
+ <div className="flex-1 space-y-3 overflow-y-auto p-4">
68
+ <div className="border-border bg-muted text-muted-foreground space-y-2 rounded-md border p-3 text-sm">
69
+ <p className="text-foreground flex items-center gap-2 font-medium">
70
+ <Lock size={14} aria-hidden /> Read-only section
71
+ </p>
72
+ <p>
73
+ The section type{' '}
74
+ <code className="bg-background rounded px-1 py-0.5 text-xs">
75
+ {section.sectionType}
76
+ </code>{' '}
77
+ isn&apos;t registered in this CMS, so it can&apos;t be edited here. It is preserved
78
+ exactly as-is on every save.
79
+ </p>
80
+ <p>
81
+ Edit it in your seed script or code, or register it via{' '}
82
+ <code className="bg-background rounded px-1 py-0.5 text-xs">
83
+ sections.customTypes
84
+ </code>{' '}
85
+ in your config to make it editable.
86
+ </p>
87
+ </div>
88
+ </div>
89
+ </aside>
90
+ )
91
+ }
92
+
44
93
  return (
45
94
  <aside
46
95
  role="dialog"