@prenta/admin 2.4.0 → 2.6.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 (107) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/AdminRoot.d.ts.map +1 -1
  3. package/dist/AdminRoot.js +4 -0
  4. package/dist/AdminRoot.js.map +1 -1
  5. package/dist/__tests__/views/appearance-settings.render.test.js +3 -0
  6. package/dist/__tests__/views/appearance-settings.render.test.js.map +1 -1
  7. package/dist/__tests__/views/mcp-connect.render.test.d.ts +2 -0
  8. package/dist/__tests__/views/mcp-connect.render.test.d.ts.map +1 -0
  9. package/dist/__tests__/views/mcp-connect.render.test.js +55 -0
  10. package/dist/__tests__/views/mcp-connect.render.test.js.map +1 -0
  11. package/dist/__tests__/views/mcp-connect.test.d.ts +2 -0
  12. package/dist/__tests__/views/mcp-connect.test.d.ts.map +1 -0
  13. package/dist/__tests__/views/mcp-connect.test.js +37 -0
  14. package/dist/__tests__/views/mcp-connect.test.js.map +1 -0
  15. package/dist/lib/appearance-api.d.ts +8 -0
  16. package/dist/lib/appearance-api.d.ts.map +1 -1
  17. package/dist/lib/appearance-api.js.map +1 -1
  18. package/dist/prenta-admin.css +1 -1
  19. package/dist/router/admin-routes.d.ts.map +1 -1
  20. package/dist/router/admin-routes.js +1 -0
  21. package/dist/router/admin-routes.js.map +1 -1
  22. package/dist/views/ApiKeys.d.ts +1 -1
  23. package/dist/views/ApiKeys.d.ts.map +1 -1
  24. package/dist/views/ApiKeys.js +2 -2
  25. package/dist/views/ApiKeys.js.map +1 -1
  26. package/dist/views/McpConsent.d.ts +4 -0
  27. package/dist/views/McpConsent.d.ts.map +1 -0
  28. package/dist/views/McpConsent.js +48 -0
  29. package/dist/views/McpConsent.js.map +1 -0
  30. package/dist/views/Settings.d.ts.map +1 -1
  31. package/dist/views/Settings.js +5 -3
  32. package/dist/views/Settings.js.map +1 -1
  33. package/dist/views/page-editor/EditorCanvas.d.ts.map +1 -1
  34. package/dist/views/page-editor/EditorCanvas.js +2 -1
  35. package/dist/views/page-editor/EditorCanvas.js.map +1 -1
  36. package/dist/views/page-editor/SectionThemeRoot.d.ts +10 -0
  37. package/dist/views/page-editor/SectionThemeRoot.d.ts.map +1 -0
  38. package/dist/views/page-editor/SectionThemeRoot.js +27 -0
  39. package/dist/views/page-editor/SectionThemeRoot.js.map +1 -0
  40. package/dist/views/page-editor/sections/AuthorBioSection.js +1 -1
  41. package/dist/views/page-editor/sections/AuthorBioSection.js.map +1 -1
  42. package/dist/views/page-editor/sections/ByTheNumbersSection.js +1 -1
  43. package/dist/views/page-editor/sections/ByTheNumbersSection.js.map +1 -1
  44. package/dist/views/page-editor/sections/CtaBannerSection.js +1 -1
  45. package/dist/views/page-editor/sections/CtaBannerSection.js.map +1 -1
  46. package/dist/views/page-editor/sections/FeatureHighlightSection.js +2 -2
  47. package/dist/views/page-editor/sections/FeatureHighlightSection.js.map +1 -1
  48. package/dist/views/page-editor/sections/HeroBannerSection.js +1 -1
  49. package/dist/views/page-editor/sections/HeroBannerSection.js.map +1 -1
  50. package/dist/views/page-editor/sections/parts.d.ts.map +1 -1
  51. package/dist/views/page-editor/sections/parts.js +11 -15
  52. package/dist/views/page-editor/sections/parts.js.map +1 -1
  53. package/dist/views/post-editor/PostEditorCanvas.d.ts.map +1 -1
  54. package/dist/views/post-editor/PostEditorCanvas.js +3 -2
  55. package/dist/views/post-editor/PostEditorCanvas.js.map +1 -1
  56. package/dist/views/settings/AppearanceTab.d.ts.map +1 -1
  57. package/dist/views/settings/AppearanceTab.js +2 -1
  58. package/dist/views/settings/AppearanceTab.js.map +1 -1
  59. package/dist/views/settings/McpConnectTab.d.ts +9 -0
  60. package/dist/views/settings/McpConnectTab.d.ts.map +1 -0
  61. package/dist/views/settings/McpConnectTab.js +71 -0
  62. package/dist/views/settings/McpConnectTab.js.map +1 -0
  63. package/dist/views/settings/PhiSafeguardsCard.d.ts +9 -0
  64. package/dist/views/settings/PhiSafeguardsCard.d.ts.map +1 -0
  65. package/dist/views/settings/PhiSafeguardsCard.js +70 -0
  66. package/dist/views/settings/PhiSafeguardsCard.js.map +1 -0
  67. package/dist/views/settings/SecurityTab.d.ts.map +1 -1
  68. package/dist/views/settings/SecurityTab.js +2 -1
  69. package/dist/views/settings/SecurityTab.js.map +1 -1
  70. package/dist/views/settings/SiteThemeCard.d.ts +7 -0
  71. package/dist/views/settings/SiteThemeCard.d.ts.map +1 -0
  72. package/dist/views/settings/SiteThemeCard.js +23 -0
  73. package/dist/views/settings/SiteThemeCard.js.map +1 -0
  74. package/dist/views/settings/mcp-connect.d.ts +25 -0
  75. package/dist/views/settings/mcp-connect.d.ts.map +1 -0
  76. package/dist/views/settings/mcp-connect.js +166 -0
  77. package/dist/views/settings/mcp-connect.js.map +1 -0
  78. package/dist/views/settings/useAppearanceSettings.d.ts +3 -1
  79. package/dist/views/settings/useAppearanceSettings.d.ts.map +1 -1
  80. package/dist/views/settings/useAppearanceSettings.js +27 -1
  81. package/dist/views/settings/useAppearanceSettings.js.map +1 -1
  82. package/package.json +4 -4
  83. package/src/AdminRoot.tsx +5 -0
  84. package/src/__tests__/views/appearance-settings.render.test.tsx +8 -0
  85. package/src/__tests__/views/mcp-connect.render.test.tsx +64 -0
  86. package/src/__tests__/views/mcp-connect.test.ts +42 -0
  87. package/src/lib/appearance-api.ts +8 -0
  88. package/src/router/admin-routes.ts +1 -0
  89. package/src/views/ApiKeys.tsx +5 -4
  90. package/src/views/McpConsent.tsx +101 -0
  91. package/src/views/Settings.tsx +13 -0
  92. package/src/views/page-editor/EditorCanvas.tsx +2 -1
  93. package/src/views/page-editor/SectionThemeRoot.tsx +33 -0
  94. package/src/views/page-editor/sections/AuthorBioSection.tsx +2 -2
  95. package/src/views/page-editor/sections/ByTheNumbersSection.tsx +1 -1
  96. package/src/views/page-editor/sections/CtaBannerSection.tsx +1 -1
  97. package/src/views/page-editor/sections/FeatureHighlightSection.tsx +3 -3
  98. package/src/views/page-editor/sections/HeroBannerSection.tsx +2 -2
  99. package/src/views/page-editor/sections/parts.tsx +12 -15
  100. package/src/views/post-editor/PostEditorCanvas.tsx +21 -18
  101. package/src/views/settings/AppearanceTab.tsx +2 -0
  102. package/src/views/settings/McpConnectTab.tsx +212 -0
  103. package/src/views/settings/PhiSafeguardsCard.tsx +85 -0
  104. package/src/views/settings/SecurityTab.tsx +3 -0
  105. package/src/views/settings/SiteThemeCard.tsx +71 -0
  106. package/src/views/settings/mcp-connect.ts +209 -0
  107. package/src/views/settings/useAppearanceSettings.ts +39 -0
@@ -1 +1 @@
1
- {"version":3,"file":"useAppearanceSettings.d.ts","sourceRoot":"","sources":["../../../src/views/settings/useAppearanceSettings.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useAppearanceSettings.d.ts","sourceRoot":"","sources":["../../../src/views/settings/useAppearanceSettings.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  'use client';
2
- import { classifyLogoShape, logoShapeWarning, resolveAdminBrand, resolvePublicBrand, validateAccentColor, } from '@prenta/core/appearance';
2
+ import { classifyLogoShape, logoShapeWarning, resolveAdminBrand, resolvePublicBrand, parsePublicTheme, publicThemeFieldError, validateAccentColor, } from '@prenta/core/appearance';
3
3
  import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
4
4
  import { useTheme } from '../../components/ThemeProvider.js';
5
5
  import { adminBrandToCache, appearanceApiToSnapshot, parseAppearanceAssets, } from '../../lib/appearance-api.js';
@@ -43,12 +43,21 @@ const MIME_LABEL = {
43
43
  function formatAllowed(mimes) {
44
44
  return mimes.map((m) => MIME_LABEL[m] ?? m).join(', ');
45
45
  }
46
+ const EMPTY_PUBLIC_THEME = {
47
+ accent: '',
48
+ background: '',
49
+ foreground: '',
50
+ muted: '',
51
+ fontFamily: '',
52
+ radius: '',
53
+ };
46
54
  const DEFAULT_FORM = {
47
55
  colorMode: 'system',
48
56
  accent: 'purple',
49
57
  density: 'default',
50
58
  font: 'System UI',
51
59
  reduceMotion: false,
60
+ publicTheme: EMPTY_PUBLIC_THEME,
52
61
  };
53
62
  const DEFAULT_BRAND_FORM = { mode: 'inheritPublicBrand' };
54
63
  function snapshot(a, b) {
@@ -146,12 +155,14 @@ export function useAppearanceSettings(canEdit, config) {
146
155
  return;
147
156
  }
148
157
  const d = res.data;
158
+ const storedTheme = d.appearance.publicTheme;
149
159
  const nextAppearance = {
150
160
  colorMode: d.appearance.adminColorModeDefault,
151
161
  accent: d.appearance.adminAccentColor,
152
162
  density: d.appearance.sidebarDensity,
153
163
  font: d.appearance.contentFont,
154
164
  reduceMotion: d.appearance.reduceMotion,
165
+ publicTheme: { ...EMPTY_PUBLIC_THEME, ...storedTheme },
155
166
  };
156
167
  const nextBrand = { ...d.brand, mode: d.brand?.mode ?? 'inheritPublicBrand' };
157
168
  const nextAssets = parseAppearanceAssets(d.assets ?? []);
@@ -182,6 +193,7 @@ export function useAppearanceSettings(canEdit, config) {
182
193
  const setDensity = useCallback((v) => update({ ...appearance, density: v }, brand, assets), [appearance, brand, assets, update]);
183
194
  const setFont = useCallback((v) => update({ ...appearance, font: v }, brand, assets), [appearance, brand, assets, update]);
184
195
  const setReduceMotion = useCallback((v) => update({ ...appearance, reduceMotion: v }, brand, assets), [appearance, brand, assets, update]);
196
+ const setPublicTheme = useCallback((patch) => update({ ...appearance, publicTheme: { ...appearance.publicTheme, ...patch } }, brand, assets), [appearance, brand, assets, update]);
185
197
  const setBrandingMode = useCallback((v) => update(appearance, { ...brand, mode: v }, assets), [appearance, brand, assets, update]);
186
198
  const setAltText = useCallback((v) => update(appearance, { ...brand, defaultLogoAltText: v }, assets), [appearance, brand, assets, update]);
187
199
  const uploadAsset = useCallback(async (field, file) => {
@@ -280,6 +292,18 @@ export function useAppearanceSettings(canEdit, config) {
280
292
  }
281
293
  // Dark mode default but no dark logo.
282
294
  const hasDark = Boolean(brand.publicDarkLogoAssetId || brand.adminDarkLogoAssetId);
295
+ for (const field of [
296
+ 'accent',
297
+ 'background',
298
+ 'foreground',
299
+ 'muted',
300
+ 'fontFamily',
301
+ 'radius',
302
+ ]) {
303
+ const message = publicThemeFieldError(field, appearance.publicTheme[field]);
304
+ if (message)
305
+ out.push({ field: `publicTheme.${field}`, message, severity: 'error' });
306
+ }
283
307
  if (appearance.colorMode === 'dark' && !hasDark) {
284
308
  out.push({
285
309
  field: 'colorMode',
@@ -326,6 +350,7 @@ export function useAppearanceSettings(canEdit, config) {
326
350
  sidebarDensity: appearance.density,
327
351
  contentFont: appearance.font,
328
352
  reduceMotion: appearance.reduceMotion,
353
+ publicTheme: parsePublicTheme(appearance.publicTheme),
329
354
  updatedAt: now,
330
355
  };
331
356
  const merged = {
@@ -372,6 +397,7 @@ export function useAppearanceSettings(canEdit, config) {
372
397
  setDensity,
373
398
  setFont,
374
399
  setReduceMotion,
400
+ setPublicTheme,
375
401
  setBrandingMode,
376
402
  setAltText,
377
403
  uploadAsset,
@@ -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": "@prenta/admin",
3
- "version": "2.4.0",
3
+ "version": "2.6.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.6.0",
104
+ "@prenta/core": "8.8.0",
105
105
  "@prenta/plugin-ai": "4.0.1",
106
- "@prenta/plugin-blocks": "1.0.1",
107
106
  "@prenta/plugin-commerce": "1.0.1",
108
107
  "@prenta/plugin-forms": "1.0.1",
109
108
  "@prenta/plugin-media": "1.0.1",
109
+ "@prenta/plugin-blocks": "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.75"
112
+ "@prenta/sections-react": "0.18.0"
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
@@ -20,6 +20,7 @@ import {
20
20
  type CustomSectionTypeInput,
21
21
  } from '@prenta/core/page-sections'
22
22
  import { Dashboard } from './views/Dashboard.js'
23
+ import { McpConsent } from './views/McpConsent.js'
23
24
  import { SEO_DEEP_PATHS, seoTabForPath } from './views/seo/seo-routes.js'
24
25
  import {
25
26
  CollectionList,
@@ -574,6 +575,10 @@ function AdminShell({
574
575
  return <Trash onNavigate={navigate} config={config} />
575
576
  }
576
577
 
578
+ if (matchRoute('/mcp/consent')) {
579
+ return <McpConsent currentPath={currentPath} />
580
+ }
581
+
577
582
  if (matchRoute('/jobs')) {
578
583
  return <Jobs onNavigate={navigate} />
579
584
  }
@@ -97,6 +97,14 @@ describe('AppearanceTab', () => {
97
97
  }),
98
98
  ),
99
99
  )
100
+ const saveCall = cmsApi.mock.calls.find(
101
+ (call) =>
102
+ call[0] === '/globals/settings' &&
103
+ (call[1] as { method?: string } | undefined)?.method === 'PUT',
104
+ )
105
+ expect(String((saveCall?.[1] as { body?: string } | undefined)?.body)).toContain(
106
+ '"publicTheme"',
107
+ )
100
108
  })
101
109
 
102
110
  it('warns when dark mode is the default but no dark-mode logo is set', async () => {
@@ -0,0 +1,64 @@
1
+ // @vitest-environment happy-dom
2
+ import { beforeEach, describe, expect, it, vi } from 'vitest'
3
+ import { fireEvent, render, screen } from '@testing-library/react'
4
+
5
+ const cmsApi = vi.fn(async (endpoint: string, options?: { method?: string }) => {
6
+ if (endpoint === '/mcp/oauth/setup') {
7
+ return { data: { mcpUrl: 'https://example.com/mcp' }, status: 200 }
8
+ }
9
+ if (endpoint === '/mcp/oauth/grants' && options?.method === 'DELETE') {
10
+ return { data: { note: 'Disconnected' }, status: 200 }
11
+ }
12
+ if (endpoint === '/mcp/oauth/grants') {
13
+ return {
14
+ data: [
15
+ {
16
+ id: 'grant-1',
17
+ clientId: 'https://claude.ai/oauth/client',
18
+ scope: 'content',
19
+ revokedAt: null,
20
+ },
21
+ ],
22
+ status: 200,
23
+ }
24
+ }
25
+ return { data: {}, status: 200 }
26
+ })
27
+
28
+ vi.mock('../../lib/api.js', () => ({ cmsApi: (e: string, o?: unknown) => cmsApi(e, o as never) }))
29
+ vi.mock('sonner', () => ({ toast: { success: vi.fn(), error: vi.fn() } }))
30
+
31
+ const { McpConnectTab } = await import('../../views/settings/McpConnectTab.js')
32
+
33
+ beforeEach(() => {
34
+ cmsApi.mockClear()
35
+ })
36
+
37
+ describe('McpConnectTab', () => {
38
+ it('shows a Claude Code prompt and switches to the Cursor config', async () => {
39
+ const onNavigate = vi.fn()
40
+ render(<McpConnectTab onNavigate={onNavigate} />)
41
+
42
+ expect(
43
+ await screen.findByRole('heading', { name: 'Connect this site to Claude Code' }),
44
+ ).toBeTruthy()
45
+ expect(screen.getByText(/Do not store an API key/)).toBeTruthy()
46
+ expect(screen.getByText(/claude mcp add --transport http example-prenta/)).toBeTruthy()
47
+
48
+ const cursor = screen.getByRole('tab', { name: 'Cursor' })
49
+ fireEvent.mouseDown(cursor)
50
+ fireEvent.click(cursor)
51
+ expect(screen.getByRole('heading', { name: 'Connect this site to Cursor' })).toBeTruthy()
52
+ expect(screen.getByText(/PRENTA_API_KEY/)).toBeTruthy()
53
+
54
+ fireEvent.click(screen.getByRole('button', { name: 'Create a Content API key' }))
55
+ expect(onNavigate).toHaveBeenCalledWith('/settings?tab=api-keys')
56
+ })
57
+
58
+ it('lists a connected app and revokes it', async () => {
59
+ render(<McpConnectTab />)
60
+ expect(await screen.findByText('https://claude.ai/oauth/client')).toBeTruthy()
61
+ fireEvent.click(screen.getByRole('button', { name: 'Revoke' }))
62
+ expect(cmsApi).toHaveBeenCalledWith('/mcp/oauth/grants/grant-1', { method: 'DELETE' })
63
+ })
64
+ })
@@ -0,0 +1,42 @@
1
+ import { describe, expect, it } from 'vitest'
2
+
3
+ import { mcpClientGuides, mcpServerName } from '../../views/settings/mcp-connect.js'
4
+
5
+ const URL = 'https://example.com/mcp'
6
+
7
+ describe('mcp connection guides', () => {
8
+ it('names the server from the site host', () => {
9
+ expect(mcpServerName('https://www.example.com/mcp')).toBe('example-prenta')
10
+ expect(mcpServerName('not a url')).toBe('site-prenta')
11
+ })
12
+
13
+ it('gives Claude Code a prompt with the URL and no API key', () => {
14
+ const guide = mcpClientGuides(URL).find((item) => item.id === 'claude-code')!
15
+ expect(guide.action).toBe('Copy prompt')
16
+ expect(guide.copyText).toBe(guide.panel)
17
+ expect(guide.copyText).toContain(URL)
18
+ expect(guide.copyText).toContain('claude mcp add --transport http example-prenta')
19
+ expect(guide.copyText).not.toContain('act_sk_')
20
+ expect(guide.needsApiKey).toBe(false)
21
+ })
22
+
23
+ it('tells ChatGPT to sign in and not to use an API key', () => {
24
+ const guide = mcpClientGuides(URL).find((item) => item.id === 'chatgpt')!
25
+ expect(guide.copyText).toBe(URL)
26
+ expect(guide.summary).toMatch(/cannot use an API key/i)
27
+ expect(guide.needsApiKey).toBe(false)
28
+ })
29
+
30
+ it('gives Cursor and VS Code different configs with a placeholder key', () => {
31
+ const guides = mcpClientGuides(URL)
32
+ const cursor = guides.find((item) => item.id === 'cursor')!
33
+ const vscode = guides.find((item) => item.id === 'vscode')!
34
+ expect(cursor.copyText).toContain('"mcpServers"')
35
+ expect(cursor.copyText).toContain('"PRENTA_BASE_URL": "https://example.com"')
36
+ expect(cursor.copyText).toContain('"PRENTA_API_KEY": "act_sk_..."')
37
+ expect(cursor.copyText).not.toMatch(/act_sk_[a-z0-9]/i)
38
+ expect(vscode.copyText).toContain('"servers"')
39
+ expect(vscode.copyText).toContain('"type": "stdio"')
40
+ expect(vscode.needsApiKey).toBe(true)
41
+ })
42
+ })
@@ -18,6 +18,14 @@ export interface AppearanceApiResponse {
18
18
  sidebarDensity: SidebarDensity
19
19
  contentFont: string
20
20
  reduceMotion: boolean
21
+ publicTheme?: {
22
+ accent?: string
23
+ background?: string
24
+ foreground?: string
25
+ muted?: string
26
+ fontFamily?: string
27
+ radius?: string
28
+ }
21
29
  }
22
30
  brand: BrandSettings
23
31
  resolved: { admin: { initials: string } }
@@ -35,6 +35,7 @@ export const ADMIN_STATIC_ROUTE_PATTERNS: readonly string[] = [
35
35
  '/forms/new',
36
36
  '/jobs',
37
37
  '/media',
38
+ '/mcp/consent',
38
39
  '/page-builder/:id',
39
40
  '/page-builder/new',
40
41
  '/page-templates',
@@ -77,7 +77,7 @@ function formatDate(value: string | null): string {
77
77
  }
78
78
  }
79
79
 
80
- export function ApiKeys({ embedded = false }: ApiKeysProps = {}) {
80
+ export function ApiKeys({ embedded = false, onNavigate }: ApiKeysProps = {}) {
81
81
  const { data, loading, error, refetch } = useApiData<ApiKeyRecord[]>('/api-keys')
82
82
  const [showCreate, setShowCreate] = useState(false)
83
83
  const [createdKey, setCreatedKey] = useState<{ key: string; record: ApiKeyRecord } | null>(null)
@@ -95,15 +95,16 @@ export function ApiKeys({ embedded = false }: ApiKeysProps = {}) {
95
95
  }
96
96
 
97
97
  return (
98
- <div className={rootPadding}>
98
+ <div className={`${rootPadding} space-y-4`}>
99
99
  <SettingsCard
100
100
  headingLevel="h2"
101
101
  title="API Keys"
102
102
  description={
103
103
  <>
104
- Long-lived credentials for programmatic access. Use the{' '}
104
+ Long-lived credentials for Cursor, VS Code, and other clients that cannot sign in.
105
+ Claude, ChatGPT, and Grok on the web connect from the MCP tab. Use the{' '}
105
106
  <code className="bg-muted rounded px-1 py-0.5 text-xs">Authorization: Bearer</code>{' '}
106
- header instead of session cookies. API key requests skip CSRF.
107
+ header. API key requests skip CSRF.
107
108
  </>
108
109
  }
109
110
  actions={
@@ -0,0 +1,101 @@
1
+ 'use client'
2
+
3
+ import { useEffect, useState } from 'react'
4
+ import { Loader2 } from 'lucide-react'
5
+ import { cmsApi } from '../lib/api.js'
6
+ import { parseRouteQuery } from '../router/index.js'
7
+
8
+ type ConsentDetails = {
9
+ clientName: string
10
+ clientId: string
11
+ redirectHost: string
12
+ scope: string
13
+ }
14
+
15
+ export function McpConsent({ currentPath }: { currentPath: string }) {
16
+ const txn = parseRouteQuery(currentPath).get('txn') ?? ''
17
+ const [details, setDetails] = useState<ConsentDetails | null>(null)
18
+ const [error, setError] = useState('')
19
+ const [busy, setBusy] = useState(false)
20
+
21
+ useEffect(() => {
22
+ if (!txn) {
23
+ setError('This connection request is missing.')
24
+ return
25
+ }
26
+ let cancelled = false
27
+ cmsApi<ConsentDetails>(`/mcp/oauth/transactions/${encodeURIComponent(txn)}`).then((res) => {
28
+ if (cancelled) return
29
+ if (res.error || !res.data) {
30
+ setError(res.error ?? 'This connection request expired.')
31
+ return
32
+ }
33
+ setDetails(res.data)
34
+ })
35
+ return () => {
36
+ cancelled = true
37
+ }
38
+ }, [txn])
39
+
40
+ async function decide(allow: boolean) {
41
+ if (!txn || busy) return
42
+ setBusy(true)
43
+ const res = await cmsApi<{ redirectUrl: string }>('/mcp/oauth/consent', {
44
+ method: 'POST',
45
+ body: JSON.stringify({ txn, allow }),
46
+ })
47
+ if (res.error || !res.data?.redirectUrl) {
48
+ setError(res.error ?? 'Could not finish the connection.')
49
+ setBusy(false)
50
+ return
51
+ }
52
+ window.location.assign(res.data.redirectUrl)
53
+ }
54
+
55
+ return (
56
+ <div className="mx-auto max-w-lg p-6">
57
+ <div className="border-border bg-card rounded-lg border p-6">
58
+ <h1 className="text-foreground text-xl font-medium">Connect an app</h1>
59
+ {!details && !error && (
60
+ <p className="text-muted-foreground mt-4 flex items-center gap-2 text-sm">
61
+ <Loader2 className="animate-spin" size={16} aria-hidden="true" />
62
+ Loading the request
63
+ </p>
64
+ )}
65
+ {error && <p className="text-destructive mt-4 text-sm">{error}</p>}
66
+ {details && (
67
+ <div className="mt-4 space-y-4">
68
+ <p className="text-foreground text-base">
69
+ <span className="font-medium">{details.clientName}</span> wants to edit content on
70
+ this site. It will return to{' '}
71
+ <span className="font-medium">{details.redirectHost}</span>.
72
+ </p>
73
+ <p className="text-muted-foreground text-sm">
74
+ Scope: {details.scope}. This includes pages, posts, forms, and SEO. It does not
75
+ include deleting content or changing settings. If Protect health information is on,
76
+ lead contents stay hidden.
77
+ </p>
78
+ <div className="flex gap-3">
79
+ <button
80
+ type="button"
81
+ disabled={busy}
82
+ onClick={() => void decide(true)}
83
+ className="bg-primary text-primary-foreground rounded-md px-4 py-2 text-base font-medium hover:opacity-90 disabled:opacity-50"
84
+ >
85
+ Allow
86
+ </button>
87
+ <button
88
+ type="button"
89
+ disabled={busy}
90
+ onClick={() => void decide(false)}
91
+ className="border-border text-foreground hover:bg-accent rounded-md border px-4 py-2 text-base font-medium disabled:opacity-50"
92
+ >
93
+ Deny
94
+ </button>
95
+ </div>
96
+ </div>
97
+ )}
98
+ </div>
99
+ </div>
100
+ )
101
+ }
@@ -10,6 +10,7 @@ import {
10
10
  Mail,
11
11
  Users as UsersIcon,
12
12
  KeyRound,
13
+ Plug,
13
14
  } from 'lucide-react'
14
15
  import { useState, useEffect, useCallback, useMemo } from 'react'
15
16
  import { toast } from 'sonner'
@@ -28,6 +29,7 @@ import { UpdatesTab } from './settings/UpdatesTab.js'
28
29
  import { WebhooksTab } from './settings/WebhooksTab.js'
29
30
  import { Users as UsersView } from './Users.js'
30
31
  import { ApiKeys as ApiKeysView } from './ApiKeys.js'
32
+ import { McpConnectTab } from './settings/McpConnectTab.js'
31
33
 
32
34
  export interface SettingsProps {
33
35
  onNavigate?: (path: string) => void
@@ -91,6 +93,7 @@ export function Settings({
91
93
  ...(hasLayoutRegions ? ['layout'] : []),
92
94
  'security',
93
95
  'users',
96
+ 'mcp',
94
97
  'api-keys',
95
98
  'seo',
96
99
  'email',
@@ -215,6 +218,12 @@ export function Settings({
215
218
  Users
216
219
  </span>
217
220
  </Tabs.Trigger>
221
+ <Tabs.Trigger value="mcp" className={tabTriggerClass}>
222
+ <span className="flex items-center gap-1.5">
223
+ <Plug className="h-4 w-4" />
224
+ MCP
225
+ </span>
226
+ </Tabs.Trigger>
218
227
  <Tabs.Trigger value="api-keys" className={tabTriggerClass}>
219
228
  <span className="flex items-center gap-1.5">
220
229
  <KeyRound className="h-4 w-4" />
@@ -346,6 +355,10 @@ export function Settings({
346
355
  <UsersView onNavigate={onNavigate} embedded currentPath={currentPath} />
347
356
  </Tabs.Content>
348
357
 
358
+ <Tabs.Content value="mcp">
359
+ <McpConnectTab onNavigate={onNavigate} />
360
+ </Tabs.Content>
361
+
349
362
  <Tabs.Content value="api-keys">
350
363
  <ApiKeysView onNavigate={onNavigate} embedded />
351
364
  </Tabs.Content>
@@ -13,6 +13,7 @@ import {
13
13
  type ThemeChromeEditTarget,
14
14
  type ThemeChromeMode,
15
15
  } from '../../lib/theme-chrome.js'
16
+ import { SectionThemeRoot } from './SectionThemeRoot.js'
16
17
  import { SectionRenderer } from './sections/index.js'
17
18
  import { StructureNotice } from './StructureNotice.js'
18
19
  import { ThemeChromeFrame, ThemeChromeHealth } from './theme-chrome/index.js'
@@ -172,7 +173,7 @@ export function EditorCanvas({
172
173
  )
173
174
  }
174
175
  >
175
- {inner}
176
+ <SectionThemeRoot>{inner}</SectionThemeRoot>
176
177
  </CanvasSurface>
177
178
  </CanvasScroll>
178
179
  )
@@ -0,0 +1,33 @@
1
+ 'use client'
2
+
3
+ import { publicThemeCssVars, type PublicTheme } from '@prenta/core/appearance'
4
+ import { useEffect, useState, type CSSProperties, type ReactNode } from 'react'
5
+
6
+ import { cmsApi } from '../../lib/api.js'
7
+
8
+ /**
9
+ * Paints the public section theme onto the editor canvas. The stylesheet
10
+ * defaults apply when the site has not set a theme. A failed load keeps
11
+ * those defaults.
12
+ */
13
+ export function SectionThemeRoot({ children }: { children: ReactNode }) {
14
+ const [theme, setTheme] = useState<PublicTheme>({})
15
+
16
+ useEffect(() => {
17
+ let cancelled = false
18
+ void cmsApi<{ appearance?: { publicTheme?: PublicTheme } }>('/appearance').then((res) => {
19
+ if (cancelled || !res.data?.appearance?.publicTheme) return
20
+ setTheme(res.data.appearance.publicTheme)
21
+ })
22
+ return () => {
23
+ cancelled = true
24
+ }
25
+ }, [])
26
+
27
+ const style = publicThemeCssVars(theme) as CSSProperties
28
+ return (
29
+ <div className="prenta-sections" style={style}>
30
+ {children}
31
+ </div>
32
+ )
33
+ }
@@ -36,7 +36,7 @@ export function AuthorBioSection({
36
36
  className="h-14 w-14 shrink-0 rounded-full object-cover"
37
37
  />
38
38
  ) : (
39
- <span className="bg-brand/10 text-brand flex h-14 w-14 shrink-0 items-center justify-center rounded-full text-sm font-medium">
39
+ <span className="flex h-14 w-14 shrink-0 items-center justify-center rounded-full bg-[var(--section-accent-soft)] text-sm font-medium text-[var(--section-accent)]">
40
40
  {initials || '?'}
41
41
  </span>
42
42
  ))}
@@ -49,7 +49,7 @@ export function AuthorBioSection({
49
49
  <p className="text-foreground mt-0.5 text-base font-medium">{name}</p>
50
50
  <p className="text-muted-foreground mt-1 text-sm leading-relaxed">{bio}</p>
51
51
  {showSocial && (
52
- <div className="text-brand mt-2 flex gap-3 text-sm">
52
+ <div className="mt-2 flex gap-3 text-sm text-[var(--section-accent)]">
53
53
  <span>Twitter</span>
54
54
  <span>LinkedIn</span>
55
55
  </div>
@@ -26,7 +26,7 @@ export function ByTheNumbersSection({ section }: { section: PageSection }) {
26
26
  <dl className="@pv-sm:grid-cols-2 @pv-lg:grid-cols-3 mt-10 grid grid-cols-1 gap-8">
27
27
  {stats.map((s, i) => (
28
28
  <div key={i}>
29
- <dt className="text-brand text-4xl font-semibold tracking-tight">
29
+ <dt className="text-4xl font-semibold tracking-tight text-[var(--section-accent)]">
30
30
  {String(s.value ?? '')}
31
31
  </dt>
32
32
  <dd className="text-foreground mt-2 text-sm font-medium">{String(s.label ?? '')}</dd>
@@ -14,7 +14,7 @@ export function CtaBannerSection({ section }: { section: PageSection }) {
14
14
  </h2>
15
15
  {body && (
16
16
  <p
17
- className={`mx-auto mt-3 max-w-xl text-base ${dark ? 'text-brand-foreground/80' : 'text-muted-foreground'}`}
17
+ className={`mx-auto mt-3 max-w-xl text-base ${dark ? 'text-white/80' : 'text-[var(--section-muted)]'}`}
18
18
  >
19
19
  {body}
20
20
  </p>