@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.
- package/CHANGELOG.md +13 -0
- package/dist/AdminRoot.d.ts.map +1 -1
- package/dist/AdminRoot.js +4 -0
- package/dist/AdminRoot.js.map +1 -1
- package/dist/__tests__/views/appearance-settings.render.test.js +3 -0
- package/dist/__tests__/views/appearance-settings.render.test.js.map +1 -1
- package/dist/__tests__/views/mcp-connect.render.test.d.ts +2 -0
- package/dist/__tests__/views/mcp-connect.render.test.d.ts.map +1 -0
- package/dist/__tests__/views/mcp-connect.render.test.js +55 -0
- package/dist/__tests__/views/mcp-connect.render.test.js.map +1 -0
- package/dist/__tests__/views/mcp-connect.test.d.ts +2 -0
- package/dist/__tests__/views/mcp-connect.test.d.ts.map +1 -0
- package/dist/__tests__/views/mcp-connect.test.js +37 -0
- package/dist/__tests__/views/mcp-connect.test.js.map +1 -0
- package/dist/lib/appearance-api.d.ts +8 -0
- package/dist/lib/appearance-api.d.ts.map +1 -1
- package/dist/lib/appearance-api.js.map +1 -1
- package/dist/prenta-admin.css +1 -1
- package/dist/router/admin-routes.d.ts.map +1 -1
- package/dist/router/admin-routes.js +1 -0
- package/dist/router/admin-routes.js.map +1 -1
- package/dist/views/ApiKeys.d.ts +1 -1
- package/dist/views/ApiKeys.d.ts.map +1 -1
- package/dist/views/ApiKeys.js +2 -2
- package/dist/views/ApiKeys.js.map +1 -1
- package/dist/views/McpConsent.d.ts +4 -0
- package/dist/views/McpConsent.d.ts.map +1 -0
- package/dist/views/McpConsent.js +48 -0
- package/dist/views/McpConsent.js.map +1 -0
- package/dist/views/Settings.d.ts.map +1 -1
- package/dist/views/Settings.js +5 -3
- package/dist/views/Settings.js.map +1 -1
- package/dist/views/page-editor/EditorCanvas.d.ts.map +1 -1
- package/dist/views/page-editor/EditorCanvas.js +2 -1
- package/dist/views/page-editor/EditorCanvas.js.map +1 -1
- package/dist/views/page-editor/SectionThemeRoot.d.ts +10 -0
- package/dist/views/page-editor/SectionThemeRoot.d.ts.map +1 -0
- package/dist/views/page-editor/SectionThemeRoot.js +27 -0
- package/dist/views/page-editor/SectionThemeRoot.js.map +1 -0
- package/dist/views/page-editor/sections/AuthorBioSection.js +1 -1
- package/dist/views/page-editor/sections/AuthorBioSection.js.map +1 -1
- package/dist/views/page-editor/sections/ByTheNumbersSection.js +1 -1
- package/dist/views/page-editor/sections/ByTheNumbersSection.js.map +1 -1
- package/dist/views/page-editor/sections/CtaBannerSection.js +1 -1
- package/dist/views/page-editor/sections/CtaBannerSection.js.map +1 -1
- package/dist/views/page-editor/sections/FeatureHighlightSection.js +2 -2
- package/dist/views/page-editor/sections/FeatureHighlightSection.js.map +1 -1
- package/dist/views/page-editor/sections/HeroBannerSection.js +1 -1
- package/dist/views/page-editor/sections/HeroBannerSection.js.map +1 -1
- package/dist/views/page-editor/sections/parts.d.ts.map +1 -1
- package/dist/views/page-editor/sections/parts.js +11 -15
- package/dist/views/page-editor/sections/parts.js.map +1 -1
- package/dist/views/post-editor/PostEditorCanvas.d.ts.map +1 -1
- package/dist/views/post-editor/PostEditorCanvas.js +3 -2
- package/dist/views/post-editor/PostEditorCanvas.js.map +1 -1
- package/dist/views/settings/AppearanceTab.d.ts.map +1 -1
- package/dist/views/settings/AppearanceTab.js +2 -1
- package/dist/views/settings/AppearanceTab.js.map +1 -1
- package/dist/views/settings/McpConnectTab.d.ts +9 -0
- package/dist/views/settings/McpConnectTab.d.ts.map +1 -0
- package/dist/views/settings/McpConnectTab.js +71 -0
- package/dist/views/settings/McpConnectTab.js.map +1 -0
- package/dist/views/settings/PhiSafeguardsCard.d.ts +9 -0
- package/dist/views/settings/PhiSafeguardsCard.d.ts.map +1 -0
- package/dist/views/settings/PhiSafeguardsCard.js +70 -0
- package/dist/views/settings/PhiSafeguardsCard.js.map +1 -0
- package/dist/views/settings/SecurityTab.d.ts.map +1 -1
- package/dist/views/settings/SecurityTab.js +2 -1
- package/dist/views/settings/SecurityTab.js.map +1 -1
- package/dist/views/settings/SiteThemeCard.d.ts +7 -0
- package/dist/views/settings/SiteThemeCard.d.ts.map +1 -0
- package/dist/views/settings/SiteThemeCard.js +23 -0
- package/dist/views/settings/SiteThemeCard.js.map +1 -0
- package/dist/views/settings/mcp-connect.d.ts +25 -0
- package/dist/views/settings/mcp-connect.d.ts.map +1 -0
- package/dist/views/settings/mcp-connect.js +166 -0
- package/dist/views/settings/mcp-connect.js.map +1 -0
- package/dist/views/settings/useAppearanceSettings.d.ts +3 -1
- package/dist/views/settings/useAppearanceSettings.d.ts.map +1 -1
- package/dist/views/settings/useAppearanceSettings.js +27 -1
- package/dist/views/settings/useAppearanceSettings.js.map +1 -1
- package/package.json +4 -4
- package/src/AdminRoot.tsx +5 -0
- package/src/__tests__/views/appearance-settings.render.test.tsx +8 -0
- package/src/__tests__/views/mcp-connect.render.test.tsx +64 -0
- package/src/__tests__/views/mcp-connect.test.ts +42 -0
- package/src/lib/appearance-api.ts +8 -0
- package/src/router/admin-routes.ts +1 -0
- package/src/views/ApiKeys.tsx +5 -4
- package/src/views/McpConsent.tsx +101 -0
- package/src/views/Settings.tsx +13 -0
- package/src/views/page-editor/EditorCanvas.tsx +2 -1
- package/src/views/page-editor/SectionThemeRoot.tsx +33 -0
- package/src/views/page-editor/sections/AuthorBioSection.tsx +2 -2
- package/src/views/page-editor/sections/ByTheNumbersSection.tsx +1 -1
- package/src/views/page-editor/sections/CtaBannerSection.tsx +1 -1
- package/src/views/page-editor/sections/FeatureHighlightSection.tsx +3 -3
- package/src/views/page-editor/sections/HeroBannerSection.tsx +2 -2
- package/src/views/page-editor/sections/parts.tsx +12 -15
- package/src/views/post-editor/PostEditorCanvas.tsx +21 -18
- package/src/views/settings/AppearanceTab.tsx +2 -0
- package/src/views/settings/McpConnectTab.tsx +212 -0
- package/src/views/settings/PhiSafeguardsCard.tsx +85 -0
- package/src/views/settings/SecurityTab.tsx +3 -0
- package/src/views/settings/SiteThemeCard.tsx +71 -0
- package/src/views/settings/mcp-connect.ts +209 -0
- 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":"AAEA,OAAO,
|
|
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.
|
|
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.
|
|
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.
|
|
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 } }
|
package/src/views/ApiKeys.tsx
CHANGED
|
@@ -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
|
|
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
|
|
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
|
+
}
|
package/src/views/Settings.tsx
CHANGED
|
@@ -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="
|
|
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="
|
|
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-
|
|
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-
|
|
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>
|