@prenta/admin 2.5.0 → 2.6.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.
- package/CHANGELOG.md +13 -0
- 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 +56 -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/views/ApiKeys.d.ts +1 -1
- package/dist/views/ApiKeys.d.ts.map +1 -1
- package/dist/views/ApiKeys.js +2 -3
- package/dist/views/ApiKeys.js.map +1 -1
- 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/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 +3 -3
- package/src/__tests__/views/appearance-settings.render.test.tsx +8 -0
- package/src/__tests__/views/mcp-connect.render.test.tsx +65 -0
- package/src/__tests__/views/mcp-connect.test.ts +42 -0
- package/src/lib/appearance-api.ts +8 -0
- package/src/views/ApiKeys.tsx +4 -5
- 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 +213 -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
- package/dist/views/settings/McpSetupCard.d.ts +0 -2
- package/dist/views/settings/McpSetupCard.d.ts.map +0 -1
- package/dist/views/settings/McpSetupCard.js +0 -48
- package/dist/views/settings/McpSetupCard.js.map +0 -1
- package/src/views/settings/McpSetupCard.tsx +0 -95
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
'use client'
|
|
2
|
-
|
|
3
|
-
import { useEffect, useState } from 'react'
|
|
4
|
-
import { Copy } from 'lucide-react'
|
|
5
|
-
import { toast } from 'sonner'
|
|
6
|
-
import { cmsApi } from '../../lib/api.js'
|
|
7
|
-
import { SettingsCard } from './components.js'
|
|
8
|
-
|
|
9
|
-
type Grant = {
|
|
10
|
-
id: string
|
|
11
|
-
clientId: string
|
|
12
|
-
scope: string
|
|
13
|
-
revokedAt: string | null
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
export function McpSetupCard() {
|
|
17
|
-
const [mcpUrl, setMcpUrl] = useState('')
|
|
18
|
-
const [grants, setGrants] = useState<Grant[]>([])
|
|
19
|
-
const [hidden, setHidden] = useState(false)
|
|
20
|
-
|
|
21
|
-
function load() {
|
|
22
|
-
void cmsApi<{ mcpUrl: string }>('/mcp/oauth/setup').then((res) => {
|
|
23
|
-
if (res.error || !res.data?.mcpUrl) {
|
|
24
|
-
setHidden(true)
|
|
25
|
-
return
|
|
26
|
-
}
|
|
27
|
-
setMcpUrl(res.data.mcpUrl)
|
|
28
|
-
})
|
|
29
|
-
void cmsApi<Grant[]>('/mcp/oauth/grants').then((res) => {
|
|
30
|
-
if (res.data) setGrants(res.data.filter((grant) => !grant.revokedAt))
|
|
31
|
-
})
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
useEffect(() => {
|
|
35
|
-
load()
|
|
36
|
-
}, [])
|
|
37
|
-
|
|
38
|
-
async function revoke(id: string) {
|
|
39
|
-
const res = await cmsApi<{ note: string }>(`/mcp/oauth/grants/${encodeURIComponent(id)}`, {
|
|
40
|
-
method: 'DELETE',
|
|
41
|
-
})
|
|
42
|
-
if (res.error) {
|
|
43
|
-
toast.error(res.error)
|
|
44
|
-
return
|
|
45
|
-
}
|
|
46
|
-
toast.success(res.data?.note ?? 'Disconnected')
|
|
47
|
-
load()
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
if (hidden) return null
|
|
51
|
-
|
|
52
|
-
return (
|
|
53
|
-
<SettingsCard
|
|
54
|
-
title="Remote MCP"
|
|
55
|
-
description="Paste this URL into Claude, ChatGPT, or Grok on the web. They sign in here. Cursor and VS Code keep using an API key from the list below."
|
|
56
|
-
>
|
|
57
|
-
<div className="flex flex-wrap items-center gap-2">
|
|
58
|
-
<code className="bg-muted text-foreground rounded px-2 py-1 text-sm">{mcpUrl || '…'}</code>
|
|
59
|
-
<button
|
|
60
|
-
type="button"
|
|
61
|
-
className="border-border text-foreground hover:bg-accent inline-flex items-center gap-2 rounded-md border px-3 py-2 text-sm font-medium"
|
|
62
|
-
onClick={() => {
|
|
63
|
-
if (!mcpUrl) return
|
|
64
|
-
void navigator.clipboard.writeText(mcpUrl)
|
|
65
|
-
toast.success('MCP URL copied')
|
|
66
|
-
}}
|
|
67
|
-
aria-label="Copy MCP URL"
|
|
68
|
-
>
|
|
69
|
-
<Copy size={16} aria-hidden="true" />
|
|
70
|
-
Copy
|
|
71
|
-
</button>
|
|
72
|
-
</div>
|
|
73
|
-
{grants.length > 0 && (
|
|
74
|
-
<ul className="mt-4 space-y-2">
|
|
75
|
-
{grants.map((grant) => (
|
|
76
|
-
<li key={grant.id} className="flex items-center justify-between gap-3 text-sm">
|
|
77
|
-
<span className="text-foreground min-w-0 truncate">{grant.clientId}</span>
|
|
78
|
-
<button
|
|
79
|
-
type="button"
|
|
80
|
-
className="text-destructive shrink-0 font-medium hover:underline"
|
|
81
|
-
onClick={() => void revoke(grant.id)}
|
|
82
|
-
>
|
|
83
|
-
Revoke
|
|
84
|
-
</button>
|
|
85
|
-
</li>
|
|
86
|
-
))}
|
|
87
|
-
</ul>
|
|
88
|
-
)}
|
|
89
|
-
<p className="text-muted-foreground mt-3 text-sm">
|
|
90
|
-
Revoke stops new requests immediately. An access token already issued can keep working for
|
|
91
|
-
up to 15 minutes.
|
|
92
|
-
</p>
|
|
93
|
-
</SettingsCard>
|
|
94
|
-
)
|
|
95
|
-
}
|