@prenta/admin 2.5.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 (90) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/dist/__tests__/views/appearance-settings.render.test.js +3 -0
  3. package/dist/__tests__/views/appearance-settings.render.test.js.map +1 -1
  4. package/dist/__tests__/views/mcp-connect.render.test.d.ts +2 -0
  5. package/dist/__tests__/views/mcp-connect.render.test.d.ts.map +1 -0
  6. package/dist/__tests__/views/mcp-connect.render.test.js +55 -0
  7. package/dist/__tests__/views/mcp-connect.render.test.js.map +1 -0
  8. package/dist/__tests__/views/mcp-connect.test.d.ts +2 -0
  9. package/dist/__tests__/views/mcp-connect.test.d.ts.map +1 -0
  10. package/dist/__tests__/views/mcp-connect.test.js +37 -0
  11. package/dist/__tests__/views/mcp-connect.test.js.map +1 -0
  12. package/dist/lib/appearance-api.d.ts +8 -0
  13. package/dist/lib/appearance-api.d.ts.map +1 -1
  14. package/dist/lib/appearance-api.js.map +1 -1
  15. package/dist/prenta-admin.css +1 -1
  16. package/dist/views/ApiKeys.d.ts +1 -1
  17. package/dist/views/ApiKeys.d.ts.map +1 -1
  18. package/dist/views/ApiKeys.js +2 -3
  19. package/dist/views/ApiKeys.js.map +1 -1
  20. package/dist/views/Settings.d.ts.map +1 -1
  21. package/dist/views/Settings.js +5 -3
  22. package/dist/views/Settings.js.map +1 -1
  23. package/dist/views/page-editor/EditorCanvas.d.ts.map +1 -1
  24. package/dist/views/page-editor/EditorCanvas.js +2 -1
  25. package/dist/views/page-editor/EditorCanvas.js.map +1 -1
  26. package/dist/views/page-editor/SectionThemeRoot.d.ts +10 -0
  27. package/dist/views/page-editor/SectionThemeRoot.d.ts.map +1 -0
  28. package/dist/views/page-editor/SectionThemeRoot.js +27 -0
  29. package/dist/views/page-editor/SectionThemeRoot.js.map +1 -0
  30. package/dist/views/page-editor/sections/AuthorBioSection.js +1 -1
  31. package/dist/views/page-editor/sections/AuthorBioSection.js.map +1 -1
  32. package/dist/views/page-editor/sections/ByTheNumbersSection.js +1 -1
  33. package/dist/views/page-editor/sections/ByTheNumbersSection.js.map +1 -1
  34. package/dist/views/page-editor/sections/CtaBannerSection.js +1 -1
  35. package/dist/views/page-editor/sections/CtaBannerSection.js.map +1 -1
  36. package/dist/views/page-editor/sections/FeatureHighlightSection.js +2 -2
  37. package/dist/views/page-editor/sections/FeatureHighlightSection.js.map +1 -1
  38. package/dist/views/page-editor/sections/HeroBannerSection.js +1 -1
  39. package/dist/views/page-editor/sections/HeroBannerSection.js.map +1 -1
  40. package/dist/views/page-editor/sections/parts.d.ts.map +1 -1
  41. package/dist/views/page-editor/sections/parts.js +11 -15
  42. package/dist/views/page-editor/sections/parts.js.map +1 -1
  43. package/dist/views/post-editor/PostEditorCanvas.d.ts.map +1 -1
  44. package/dist/views/post-editor/PostEditorCanvas.js +3 -2
  45. package/dist/views/post-editor/PostEditorCanvas.js.map +1 -1
  46. package/dist/views/settings/AppearanceTab.d.ts.map +1 -1
  47. package/dist/views/settings/AppearanceTab.js +2 -1
  48. package/dist/views/settings/AppearanceTab.js.map +1 -1
  49. package/dist/views/settings/McpConnectTab.d.ts +9 -0
  50. package/dist/views/settings/McpConnectTab.d.ts.map +1 -0
  51. package/dist/views/settings/McpConnectTab.js +71 -0
  52. package/dist/views/settings/McpConnectTab.js.map +1 -0
  53. package/dist/views/settings/SiteThemeCard.d.ts +7 -0
  54. package/dist/views/settings/SiteThemeCard.d.ts.map +1 -0
  55. package/dist/views/settings/SiteThemeCard.js +23 -0
  56. package/dist/views/settings/SiteThemeCard.js.map +1 -0
  57. package/dist/views/settings/mcp-connect.d.ts +25 -0
  58. package/dist/views/settings/mcp-connect.d.ts.map +1 -0
  59. package/dist/views/settings/mcp-connect.js +166 -0
  60. package/dist/views/settings/mcp-connect.js.map +1 -0
  61. package/dist/views/settings/useAppearanceSettings.d.ts +3 -1
  62. package/dist/views/settings/useAppearanceSettings.d.ts.map +1 -1
  63. package/dist/views/settings/useAppearanceSettings.js +27 -1
  64. package/dist/views/settings/useAppearanceSettings.js.map +1 -1
  65. package/package.json +4 -4
  66. package/src/__tests__/views/appearance-settings.render.test.tsx +8 -0
  67. package/src/__tests__/views/mcp-connect.render.test.tsx +64 -0
  68. package/src/__tests__/views/mcp-connect.test.ts +42 -0
  69. package/src/lib/appearance-api.ts +8 -0
  70. package/src/views/ApiKeys.tsx +4 -5
  71. package/src/views/Settings.tsx +13 -0
  72. package/src/views/page-editor/EditorCanvas.tsx +2 -1
  73. package/src/views/page-editor/SectionThemeRoot.tsx +33 -0
  74. package/src/views/page-editor/sections/AuthorBioSection.tsx +2 -2
  75. package/src/views/page-editor/sections/ByTheNumbersSection.tsx +1 -1
  76. package/src/views/page-editor/sections/CtaBannerSection.tsx +1 -1
  77. package/src/views/page-editor/sections/FeatureHighlightSection.tsx +3 -3
  78. package/src/views/page-editor/sections/HeroBannerSection.tsx +2 -2
  79. package/src/views/page-editor/sections/parts.tsx +12 -15
  80. package/src/views/post-editor/PostEditorCanvas.tsx +21 -18
  81. package/src/views/settings/AppearanceTab.tsx +2 -0
  82. package/src/views/settings/McpConnectTab.tsx +212 -0
  83. package/src/views/settings/SiteThemeCard.tsx +71 -0
  84. package/src/views/settings/mcp-connect.ts +209 -0
  85. package/src/views/settings/useAppearanceSettings.ts +39 -0
  86. package/dist/views/settings/McpSetupCard.d.ts +0 -2
  87. package/dist/views/settings/McpSetupCard.d.ts.map +0 -1
  88. package/dist/views/settings/McpSetupCard.js +0 -48
  89. package/dist/views/settings/McpSetupCard.js.map +0 -1
  90. 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
- }