@actuate-media/cms-admin 0.36.1 → 0.37.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 (38) hide show
  1. package/dist/__tests__/views/appearance-settings.render.test.js +4 -4
  2. package/dist/__tests__/views/updates-tab.render.test.d.ts +2 -0
  3. package/dist/__tests__/views/updates-tab.render.test.d.ts.map +1 -0
  4. package/dist/__tests__/views/updates-tab.render.test.js +132 -0
  5. package/dist/__tests__/views/updates-tab.render.test.js.map +1 -0
  6. package/dist/actuate-admin.css +1 -1
  7. package/dist/views/Settings.d.ts.map +1 -1
  8. package/dist/views/Settings.js +4 -112
  9. package/dist/views/Settings.js.map +1 -1
  10. package/dist/views/settings/AdminThemeCard.js +1 -1
  11. package/dist/views/settings/BrandPreviewCard.js +1 -1
  12. package/dist/views/settings/BrandingCard.d.ts.map +1 -1
  13. package/dist/views/settings/BrandingCard.js +34 -19
  14. package/dist/views/settings/BrandingCard.js.map +1 -1
  15. package/dist/views/settings/TypographyMotionCard.js +1 -1
  16. package/dist/views/settings/UpdatesTab.d.ts +6 -0
  17. package/dist/views/settings/UpdatesTab.d.ts.map +1 -0
  18. package/dist/views/settings/UpdatesTab.js +80 -0
  19. package/dist/views/settings/UpdatesTab.js.map +1 -0
  20. package/dist/views/settings/components.d.ts +20 -0
  21. package/dist/views/settings/components.d.ts.map +1 -1
  22. package/dist/views/settings/components.js +11 -0
  23. package/dist/views/settings/components.js.map +1 -1
  24. package/dist/views/settings/useUpdates.d.ts +67 -0
  25. package/dist/views/settings/useUpdates.d.ts.map +1 -0
  26. package/dist/views/settings/useUpdates.js +127 -0
  27. package/dist/views/settings/useUpdates.js.map +1 -0
  28. package/package.json +2 -2
  29. package/src/__tests__/views/appearance-settings.render.test.tsx +4 -4
  30. package/src/__tests__/views/updates-tab.render.test.tsx +161 -0
  31. package/src/views/Settings.tsx +2 -438
  32. package/src/views/settings/AdminThemeCard.tsx +1 -1
  33. package/src/views/settings/BrandPreviewCard.tsx +1 -1
  34. package/src/views/settings/BrandingCard.tsx +179 -180
  35. package/src/views/settings/TypographyMotionCard.tsx +1 -1
  36. package/src/views/settings/UpdatesTab.tsx +545 -0
  37. package/src/views/settings/components.tsx +51 -0
  38. package/src/views/settings/useUpdates.ts +183 -0
@@ -1,7 +1,7 @@
1
1
  'use client';
2
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import * as Tabs from '@radix-ui/react-tabs';
4
- import { Bot, Eye, EyeOff, Loader2, AlertTriangle, Download, CheckCircle2, ArrowUpCircle, ExternalLink, RefreshCw, GitPullRequest, Layers, Users as UsersIcon, KeyRound, } from 'lucide-react';
4
+ import { Bot, Loader2, AlertTriangle, Download, Layers, Users as UsersIcon, KeyRound, } from 'lucide-react';
5
5
  import { useState, useEffect, useCallback, useMemo } from 'react';
6
6
  import { toast } from 'sonner';
7
7
  import { useApiData } from '../lib/useApiData.js';
@@ -13,6 +13,7 @@ import { AISettingsTab } from './settings/AISettingsTab.js';
13
13
  import { AppearanceTab } from './settings/AppearanceTab.js';
14
14
  import { SecurityTab } from './settings/SecurityTab.js';
15
15
  import { SettingsCard } from './settings/components.js';
16
+ import { UpdatesTab } from './settings/UpdatesTab.js';
16
17
  import { Users as UsersView } from './Users.js';
17
18
  import { ApiKeys as ApiKeysView } from './ApiKeys.js';
18
19
  /**
@@ -116,115 +117,6 @@ export function Settings({ config, onNavigate, session, initialTab = 'general',
116
117
  }
117
118
  return next;
118
119
  });
119
- }, relationTo: region.collection, helpText: `The ${region.label.toLowerCase()} variant used when no page in the ancestor chain specifies one` }, region.name))) }) }), _jsx(SettingsCard, { title: "How Layout Inheritance Works", children: _jsxs("ul", { className: "text-muted-foreground space-y-1.5 text-sm", children: [_jsxs("li", { className: "flex items-start gap-2", children: [_jsx("span", { className: "bg-brand/10 text-brand mt-0.5 flex h-4 w-4 shrink-0 items-center justify-center rounded-full text-[10px] font-medium", children: "1" }), _jsx("span", { children: "Each page can assign specific layout variants (header, footer, etc.) from the document editor." })] }), _jsxs("li", { className: "flex items-start gap-2", children: [_jsx("span", { className: "bg-brand/10 text-brand mt-0.5 flex h-4 w-4 shrink-0 items-center justify-center rounded-full text-[10px] font-medium", children: "2" }), _jsxs("span", { children: ["Child pages automatically inherit their parent's layout. For example,", ' ', _jsx("code", { className: "bg-muted rounded px-1 font-mono", children: "/hampton-roads/thank-you" }), ' ', "inherits from", ' ', _jsx("code", { className: "bg-muted rounded px-1 font-mono", children: "/hampton-roads" }), "."] })] }), _jsxs("li", { className: "flex items-start gap-2", children: [_jsx("span", { className: "bg-brand/10 text-brand mt-0.5 flex h-4 w-4 shrink-0 items-center justify-center rounded-full text-[10px] font-medium", children: "3" }), _jsx("span", { children: "If no page in the ancestor chain sets a variant, the defaults configured above are used." })] })] }) })] })), _jsx(Tabs.Content, { value: "security", className: "space-y-4", children: _jsx(SecurityTab, { role: session?.user?.role, onNavigate: onNavigate }) }), _jsx(Tabs.Content, { value: "seo", className: "space-y-4", children: _jsx(SeoSettingsTab, { onNavigate: onNavigate, role: session?.user?.role }) }), _jsx(Tabs.Content, { value: "ai", className: "space-y-4", children: _jsx(AISettingsTab, { role: session?.user?.role }) }), _jsx(Tabs.Content, { value: "users", children: _jsx(UsersView, { onNavigate: onNavigate, embedded: true }) }), _jsx(Tabs.Content, { value: "api-keys", children: _jsx(ApiKeysView, { onNavigate: onNavigate, embedded: true }) }), _jsx(Tabs.Content, { value: "updates", className: "space-y-4", children: _jsx(UpdatesPanel, {}) })] }), GLOBAL_SAVE_TABS.has(activeTab) && (_jsx("div", { className: "mt-6 flex justify-end", children: _jsx("button", { type: "button", onClick: handleSave, disabled: saving, className: "rounded-lg bg-blue-600 px-6 py-2 text-sm text-white transition-colors hover:bg-blue-700 disabled:opacity-50", children: saving ? 'Saving...' : 'Save Changes' }) }))] }));
120
- }
121
- function UpdatesPanel() {
122
- const [updateInfo, setUpdateInfo] = useState(null);
123
- const [checking, setChecking] = useState(false);
124
- const [checkError, setCheckError] = useState('');
125
- const [applying, setApplying] = useState(false);
126
- const [prResult, setPrResult] = useState(null);
127
- const [hasChecked, setHasChecked] = useState(false);
128
- // GitHub config
129
- const [ghToken, setGhToken] = useState('');
130
- const [ghRepo, setGhRepo] = useState('');
131
- const [showGhToken, setShowGhToken] = useState(false);
132
- const [savingConfig, setSavingConfig] = useState(false);
133
- const [configSaved, setConfigSaved] = useState(false);
134
- const checkForUpdates = async () => {
135
- setChecking(true);
136
- setCheckError('');
137
- setPrResult(null);
138
- try {
139
- const res = await cmsApi('/updates/check');
140
- if (res.error) {
141
- setCheckError(res.error);
142
- }
143
- else if (res.data) {
144
- setUpdateInfo(res.data);
145
- if (res.data.githubRepo)
146
- setGhRepo(res.data.githubRepo);
147
- }
148
- }
149
- catch {
150
- setCheckError('Unable to check for updates. Please try again.');
151
- }
152
- finally {
153
- setChecking(false);
154
- setHasChecked(true);
155
- }
156
- };
157
- const saveGitHubConfig = async () => {
158
- setSavingConfig(true);
159
- setConfigSaved(false);
160
- try {
161
- const res = await cmsApi('/updates/config', {
162
- method: 'PUT',
163
- body: JSON.stringify({
164
- ...(ghToken ? { githubToken: ghToken } : {}),
165
- ...(ghRepo ? { githubRepo: ghRepo } : {}),
166
- }),
167
- });
168
- if (res.error) {
169
- toast.error(res.error);
170
- }
171
- else {
172
- toast.success('GitHub configuration saved and encrypted.');
173
- setConfigSaved(true);
174
- setGhToken('');
175
- if (updateInfo) {
176
- setUpdateInfo({ ...updateInfo, hasGithubToken: true, githubRepo: ghRepo });
177
- }
178
- }
179
- }
180
- catch {
181
- toast.error('Failed to save configuration.');
182
- }
183
- finally {
184
- setSavingConfig(false);
185
- }
186
- };
187
- const applyUpdate = async () => {
188
- if (!updateInfo?.latest)
189
- return;
190
- setApplying(true);
191
- try {
192
- const res = await cmsApi('/updates/apply', {
193
- method: 'POST',
194
- body: JSON.stringify({ targetVersion: updateInfo.latest }),
195
- });
196
- if (res.error) {
197
- toast.error(res.error);
198
- }
199
- else if (res.data) {
200
- setPrResult(res.data);
201
- toast.success('Update PR created successfully!');
202
- }
203
- }
204
- catch {
205
- toast.error('Failed to create update PR. Check your GitHub configuration.');
206
- }
207
- finally {
208
- setApplying(false);
209
- }
210
- };
211
- useEffect(() => {
212
- checkForUpdates();
213
- }, []);
214
- // Semantic severity tokens so update banners match the rest of the admin in
215
- // both light and dark mode (no raw palette colors). Concrete keys (not a
216
- // string-index Record) keep the lookup non-nullable.
217
- const severityColors = {
218
- patch: { banner: 'border-brand/30 bg-brand/10', text: 'text-brand', label: 'Patch' },
219
- minor: { banner: 'border-warning/30 bg-warning/10', text: 'text-warning', label: 'Minor' },
220
- major: {
221
- banner: 'border-destructive/30 bg-destructive/10',
222
- text: 'text-destructive',
223
- label: 'Major',
224
- },
225
- };
226
- const sev = severityColors[updateInfo?.severity ?? 'patch'];
227
- const ghInputClass = 'w-full rounded-md border border-border bg-input-background px-3 py-2 text-base text-foreground focus-visible:ring-2 focus-visible:ring-ring focus-visible:outline-none';
228
- return (_jsxs(_Fragment, { children: [_jsx(SettingsCard, { title: "Actuate CMS", description: "Keep your CMS up to date with the latest features and security patches.", actions: _jsxs("button", { type: "button", onClick: checkForUpdates, disabled: checking, className: "border-border text-foreground hover:bg-accent inline-flex items-center gap-2 rounded-md border px-4 py-2 text-sm font-medium transition-colors disabled:opacity-50", children: [_jsx(RefreshCw, { size: 16, className: checking ? 'animate-spin' : '', "aria-hidden": "true" }), checking ? 'Checking…' : 'Check for Updates'] }), children: _jsxs("p", { className: "text-muted-foreground text-sm", children: ["Current version:", ' ', _jsx("span", { className: "text-foreground font-mono font-medium", children: updateInfo?.current ?? '…' })] }) }), checkError && (_jsxs("div", { role: "alert", className: "border-destructive/30 bg-destructive/10 text-destructive flex items-center gap-3 rounded-lg border p-3 text-sm", children: [_jsx(AlertTriangle, { size: 20, className: "shrink-0", "aria-hidden": "true" }), _jsx("span", { className: "flex-1", children: checkError }), _jsx("button", { onClick: checkForUpdates, className: "border-destructive/40 rounded-md border px-3 py-1 transition-colors hover:opacity-80", children: "Retry" })] })), hasChecked && updateInfo && !updateInfo.updateAvailable && !checkError && (_jsxs("div", { className: "border-success/30 bg-success/10 text-success flex items-center gap-3 rounded-lg border p-4", children: [_jsx(CheckCircle2, { size: 24, className: "shrink-0", "aria-hidden": "true" }), _jsxs("div", { children: [_jsx("h3", { className: "text-foreground font-medium", children: "You're up to date!" }), _jsxs("p", { className: "text-muted-foreground mt-0.5 text-sm", children: ["Actuate CMS ", _jsx("span", { className: "font-mono", children: updateInfo.current }), " is the latest version."] })] })] })), updateInfo?.updateAvailable && (_jsxs(_Fragment, { children: [_jsxs("div", { className: `rounded-lg border p-4 ${sev.banner}`, children: [_jsxs("div", { className: "flex items-start gap-3", children: [_jsx(ArrowUpCircle, { size: 24, className: `mt-0.5 shrink-0 ${sev.text}`, "aria-hidden": "true" }), _jsxs("div", { className: "flex-1", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("h3", { className: `font-medium ${sev.text}`, children: "Update Available" }), _jsx("span", { className: `inline-flex items-center rounded border px-2 py-0.5 text-xs font-medium ${sev.banner} ${sev.text}`, children: sev.label })] }), _jsxs("p", { className: "text-muted-foreground mt-1 text-sm", children: [_jsx("span", { className: "font-mono", children: updateInfo.current }), " \u2192", ' ', _jsx("span", { className: "text-foreground font-mono font-medium", children: updateInfo.latest }), updateInfo.releaseDate && (_jsxs("span", { className: "ml-2 text-xs opacity-70", children: ["Released ", updateInfo.releaseDate] }))] })] })] }), _jsxs("div", { className: "mt-4 flex items-center gap-3", children: [_jsx("button", { type: "button", onClick: applyUpdate, disabled: applying, className: "bg-brand text-brand-foreground inline-flex items-center gap-2 rounded-md px-4 py-2 text-sm font-medium transition-opacity hover:opacity-90 disabled:opacity-50", children: applying ? (_jsxs(_Fragment, { children: [_jsx(Loader2, { size: 16, className: "animate-spin", "aria-hidden": "true" }), "Creating PR\u2026"] })) : (_jsxs(_Fragment, { children: [_jsx(GitPullRequest, { size: 16, "aria-hidden": "true" }), "Create Update PR"] })) }), _jsx("span", { className: "text-muted-foreground text-xs", children: "Opens a pull request on your repository" })] }), updateInfo.updateCommand && (_jsxs("div", { className: "border-border bg-card mt-3 rounded-md border p-3", children: [_jsx("p", { className: "text-muted-foreground mb-1 text-xs", children: "Or update manually:" }), _jsx("code", { className: "bg-muted text-foreground block rounded px-2 py-1.5 font-mono text-xs select-all", children: updateInfo.updateCommand })] }))] }), updateInfo.changelog && updateInfo.changelog.length > 0 && (_jsx(SettingsCard, { title: "Changelog", children: _jsx("div", { className: "max-h-64 space-y-2 overflow-y-auto", children: updateInfo.changelog.map((entry) => (_jsxs("div", { className: "flex items-baseline gap-3 text-sm", children: [_jsx("span", { className: "text-muted-foreground w-14 shrink-0 font-mono text-xs", children: entry.version }), _jsx("span", { className: "text-muted-foreground w-20 shrink-0 text-xs", children: entry.date }), _jsx("span", { className: "text-foreground", children: entry.summary })] }, entry.version))) }) }))] })), prResult && (_jsx("div", { className: "border-success/30 bg-success/10 rounded-lg border p-4", children: _jsxs("div", { className: "flex items-start gap-3", children: [_jsx(GitPullRequest, { size: 20, className: "text-success mt-0.5 shrink-0", "aria-hidden": "true" }), _jsxs("div", { children: [_jsx("h3", { className: "text-foreground font-medium", children: "Pull Request Created" }), _jsxs("p", { className: "text-muted-foreground mt-1 text-sm", children: ["PR #", prResult.prNumber, " has been created on your repository. Review and merge it to apply the update, then run", ' ', _jsx("code", { className: "bg-muted rounded px-1 font-mono text-xs", children: "npx prisma migrate deploy" }), "."] }), _jsxs("a", { href: prResult.prUrl, target: "_blank", rel: "noopener noreferrer", className: "text-brand mt-2 inline-flex items-center gap-1.5 text-sm font-medium hover:underline", children: [_jsx(ExternalLink, { size: 16, "aria-hidden": "true" }), "View Pull Request"] })] })] }) })), _jsx(SettingsCard, { title: "GitHub Integration", description: "Connect your repository to enable one-click update PRs. Credentials are encrypted at rest (AES-256-GCM).", children: _jsxs("div", { className: "space-y-4", children: [_jsxs("div", { children: [_jsx("label", { htmlFor: "updates-gh-repo", className: "text-foreground mb-1 block text-sm font-medium", children: "Repository" }), _jsx("input", { id: "updates-gh-repo", type: "text", value: ghRepo, onChange: (e) => setGhRepo(e.target.value), placeholder: "owner/repo", className: ghInputClass }), _jsxs("p", { className: "text-muted-foreground mt-1 text-sm", children: ["e.g.", ' ', _jsx("code", { className: "bg-muted rounded px-1 font-mono", children: "actuate-media/my-client-site" })] })] }), _jsxs("div", { children: [_jsxs("label", { htmlFor: "updates-gh-token", className: "text-foreground mb-1 block text-sm font-medium", children: ["GitHub Token", updateInfo?.hasGithubToken && !ghToken && (_jsx("span", { className: "text-success ml-2 text-xs font-normal", children: "Saved" }))] }), _jsxs("div", { className: "relative", children: [_jsx("input", { id: "updates-gh-token", type: showGhToken ? 'text' : 'password', value: ghToken, onChange: (e) => setGhToken(e.target.value), placeholder: updateInfo?.hasGithubToken ? '••••••••••••••••' : 'ghp_... or github_pat_...', className: `${ghInputClass} pr-10` }), _jsx("button", { type: "button", onClick: () => setShowGhToken(!showGhToken), "aria-label": showGhToken ? 'Hide token' : 'Show token', className: "text-muted-foreground hover:text-foreground absolute top-1/2 right-2 -translate-y-1/2 p-1", children: showGhToken ? (_jsx(EyeOff, { size: 16, "aria-hidden": "true" })) : (_jsx(Eye, { size: 16, "aria-hidden": "true" })) })] }), _jsxs("p", { className: "text-muted-foreground mt-1 text-sm", children: ["Needs ", _jsx("code", { className: "bg-muted rounded px-1 font-mono", children: "repo" }), " scope. Create at", ' ', _jsx("a", { href: "https://github.com/settings/tokens", target: "_blank", rel: "noopener noreferrer", className: "text-brand hover:underline", children: "github.com/settings/tokens" })] })] }), _jsx("button", { type: "button", onClick: saveGitHubConfig, disabled: savingConfig || (!ghToken && !ghRepo), className: "bg-brand text-brand-foreground inline-flex items-center gap-2 rounded-md px-4 py-2 text-sm font-medium transition-opacity hover:opacity-90 disabled:opacity-50", children: savingConfig ? (_jsxs(_Fragment, { children: [_jsx(Loader2, { size: 16, className: "animate-spin", "aria-hidden": "true" }), "Encrypting & Saving\u2026"] })) : ('Save Configuration') })] }) }), _jsx(SettingsCard, { title: "How Updates Work", children: _jsxs("ul", { className: "text-muted-foreground space-y-1.5 text-sm", children: [_jsxs("li", { className: "flex items-start gap-2", children: [_jsx("span", { className: "bg-brand/10 text-brand mt-0.5 flex h-4 w-4 shrink-0 items-center justify-center rounded-full text-[10px] font-medium", children: "1" }), _jsx("span", { children: "Click \"Check for Updates\" to see if a new version is available on npm." })] }), _jsxs("li", { className: "flex items-start gap-2", children: [_jsx("span", { className: "bg-brand/10 text-brand mt-0.5 flex h-4 w-4 shrink-0 items-center justify-center rounded-full text-[10px] font-medium", children: "2" }), _jsx("span", { children: "Add your GitHub token and repository above. They're encrypted at rest \u2014 never stored in plaintext." })] }), _jsxs("li", { className: "flex items-start gap-2", children: [_jsx("span", { className: "bg-brand/10 text-brand mt-0.5 flex h-4 w-4 shrink-0 items-center justify-center rounded-full text-[10px] font-medium", children: "3" }), _jsx("span", { children: "Click \"Create Update PR\" to open a pull request that bumps your CMS packages automatically." })] }), _jsxs("li", { className: "flex items-start gap-2", children: [_jsx("span", { className: "bg-brand/10 text-brand mt-0.5 flex h-4 w-4 shrink-0 items-center justify-center rounded-full text-[10px] font-medium", children: "4" }), _jsxs("span", { children: ["Review and merge the PR, then deploy. Database migrations run automatically via", ' ', _jsx("code", { className: "bg-muted rounded px-1 font-mono", children: "prisma migrate deploy" }), "."] })] })] }) })] }));
120
+ }, relationTo: region.collection, helpText: `The ${region.label.toLowerCase()} variant used when no page in the ancestor chain specifies one` }, region.name))) }) }), _jsx(SettingsCard, { title: "How Layout Inheritance Works", children: _jsxs("ul", { className: "text-muted-foreground space-y-1.5 text-sm", children: [_jsxs("li", { className: "flex items-start gap-2", children: [_jsx("span", { className: "bg-brand/10 text-brand mt-0.5 flex h-4 w-4 shrink-0 items-center justify-center rounded-full text-[10px] font-medium", children: "1" }), _jsx("span", { children: "Each page can assign specific layout variants (header, footer, etc.) from the document editor." })] }), _jsxs("li", { className: "flex items-start gap-2", children: [_jsx("span", { className: "bg-brand/10 text-brand mt-0.5 flex h-4 w-4 shrink-0 items-center justify-center rounded-full text-[10px] font-medium", children: "2" }), _jsxs("span", { children: ["Child pages automatically inherit their parent's layout. For example,", ' ', _jsx("code", { className: "bg-muted rounded px-1 font-mono", children: "/hampton-roads/thank-you" }), ' ', "inherits from", ' ', _jsx("code", { className: "bg-muted rounded px-1 font-mono", children: "/hampton-roads" }), "."] })] }), _jsxs("li", { className: "flex items-start gap-2", children: [_jsx("span", { className: "bg-brand/10 text-brand mt-0.5 flex h-4 w-4 shrink-0 items-center justify-center rounded-full text-[10px] font-medium", children: "3" }), _jsx("span", { children: "If no page in the ancestor chain sets a variant, the defaults configured above are used." })] })] }) })] })), _jsx(Tabs.Content, { value: "security", className: "space-y-4", children: _jsx(SecurityTab, { role: session?.user?.role, onNavigate: onNavigate }) }), _jsx(Tabs.Content, { value: "seo", className: "space-y-4", children: _jsx(SeoSettingsTab, { onNavigate: onNavigate, role: session?.user?.role }) }), _jsx(Tabs.Content, { value: "ai", className: "space-y-4", children: _jsx(AISettingsTab, { role: session?.user?.role }) }), _jsx(Tabs.Content, { value: "users", children: _jsx(UsersView, { onNavigate: onNavigate, embedded: true }) }), _jsx(Tabs.Content, { value: "api-keys", children: _jsx(ApiKeysView, { onNavigate: onNavigate, embedded: true }) }), _jsx(Tabs.Content, { value: "updates", className: "space-y-4", children: _jsx(UpdatesTab, { role: session?.user?.role }) })] }), GLOBAL_SAVE_TABS.has(activeTab) && (_jsx("div", { className: "mt-6 flex justify-end", children: _jsx("button", { type: "button", onClick: handleSave, disabled: saving, className: "rounded-lg bg-blue-600 px-6 py-2 text-sm text-white transition-colors hover:bg-blue-700 disabled:opacity-50", children: saving ? 'Saving...' : 'Save Changes' }) }))] }));
229
121
  }
230
122
  //# sourceMappingURL=Settings.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Settings.js","sourceRoot":"","sources":["../../src/views/Settings.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Settings.js","sourceRoot":"","sources":["../../src/views/Settings.tsx"],"names":[],"mappings":"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"}
@@ -21,7 +21,7 @@ function SegmentedGroup({ label, value, options, canEdit, onChange, }) {
21
21
  }) }));
22
22
  }
23
23
  export function AdminThemeCard({ s, canEdit }) {
24
- return (_jsxs("section", { className: "border-border bg-card rounded-lg border p-6", children: [_jsxs("header", { className: "mb-4", children: [_jsx("h3", { className: "text-foreground text-lg font-medium", children: "Admin Theme" }), _jsx("p", { className: "text-muted-foreground mt-0.5 text-sm", children: "Controls the default look of the admin. Individual users can override the color mode." })] }), _jsxs("div", { className: "space-y-5", children: [_jsxs("div", { children: [_jsxs("div", { className: "mb-2 flex items-center gap-2", children: [_jsx("span", { className: "text-foreground text-base font-medium", children: "Color mode" }), _jsx(SettingsSourceBadge, { meta: s.sources.colorMode })] }), _jsx(SegmentedGroup, { label: "Color mode", value: s.appearance.colorMode, options: COLOR_MODES, canEdit: canEdit, onChange: s.setColorMode })] }), _jsxs("div", { children: [_jsxs("div", { className: "mb-2 flex items-center gap-2", children: [_jsx("span", { className: "text-foreground text-base font-medium", children: "Accent color" }), _jsx(SettingsSourceBadge, { meta: s.sources.accent })] }), _jsxs("div", { role: "radiogroup", "aria-label": "Accent color", className: "flex flex-wrap items-center gap-3", children: [ACCENT_PRESET_LIST.map((preset) => {
24
+ return (_jsxs("section", { className: "border-border bg-card rounded-lg border p-6", children: [_jsxs("header", { className: "mb-4", children: [_jsx("h3", { className: "text-foreground text-lg font-medium", children: "Admin theme" }), _jsx("p", { className: "text-muted-foreground mt-0.5 text-sm", children: "Controls the default look of the admin. Individual users can override the color mode." })] }), _jsxs("div", { className: "space-y-5", children: [_jsxs("div", { children: [_jsxs("div", { className: "mb-2 flex items-center gap-2", children: [_jsx("span", { className: "text-foreground text-base font-medium", children: "Color mode" }), _jsx(SettingsSourceBadge, { meta: s.sources.colorMode })] }), _jsx(SegmentedGroup, { label: "Color mode", value: s.appearance.colorMode, options: COLOR_MODES, canEdit: canEdit, onChange: s.setColorMode })] }), _jsxs("div", { children: [_jsxs("div", { className: "mb-2 flex items-center gap-2", children: [_jsx("span", { className: "text-foreground text-base font-medium", children: "Accent color" }), _jsx(SettingsSourceBadge, { meta: s.sources.accent })] }), _jsxs("div", { role: "radiogroup", "aria-label": "Accent color", className: "flex flex-wrap items-center gap-3", children: [ACCENT_PRESET_LIST.map((preset) => {
25
25
  const active = s.appearance.accent === preset.name;
26
26
  const editable = s.sources.accent?.editable !== false;
27
27
  return (_jsx("button", { type: "button", role: "radio", "aria-checked": active, "aria-label": preset.label, title: preset.label, disabled: !canEdit || !editable, onClick: () => s.setAccent(preset.name), className: `focus-visible:ring-ring relative flex h-9 w-9 items-center justify-center rounded-full transition-transform focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50 ${active ? 'ring-foreground ring-2 ring-offset-2' : ''}`, style: { backgroundColor: preset.swatch }, children: active && _jsx(Check, { size: 16, className: "text-white", "aria-hidden": "true" }) }, preset.name));
@@ -13,6 +13,6 @@ function PreviewTile({ label, children }) {
13
13
  }
14
14
  export function BrandPreviewCard({ s }) {
15
15
  const { admin, public: pub, faviconUrl } = s.preview;
16
- return (_jsxs("section", { className: "border-border bg-card rounded-lg border p-6", children: [_jsxs("header", { className: "mb-4 flex items-center justify-between gap-2", children: [_jsxs("div", { children: [_jsx("h3", { className: "text-foreground text-lg font-medium", children: "Brand Preview" }), _jsx("p", { className: "text-muted-foreground mt-0.5 text-sm", children: "How your brand renders across the admin and public site." })] }), s.dirty && (_jsx("span", { className: "text-warning bg-warning/10 border-warning/30 rounded-md border px-2 py-0.5 text-xs", children: "Unsaved" }))] }), _jsxs("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3", children: [_jsx(PreviewTile, { label: "Admin sidebar", children: _jsx(SidebarPreview, { admin: admin }) }), _jsx(PreviewTile, { label: "Collapsed sidebar", children: _jsx("div", { className: "bg-sidebar border-sidebar-border flex h-14 w-14 items-center justify-center rounded-md border", children: admin.mark ? (_jsx("img", { src: admin.mark.url, alt: admin.mark.alt, className: "h-8 w-8 object-contain" })) : (_jsx(Initials, { initials: admin.initials })) }) }), _jsx(PreviewTile, { label: "Dark mode", children: _jsx(SidebarPreview, { admin: admin, dark: true }) }), _jsx(PreviewTile, { label: "Public header", children: _jsx("div", { className: "border-border bg-background flex h-14 items-center gap-2.5 rounded-md border px-3", children: pub.primary ? (_jsx("img", { src: pub.primary.url, alt: pub.primary.alt, className: "h-8 w-auto object-contain" })) : pub.mark ? (_jsxs(_Fragment, { children: [_jsx("img", { src: pub.mark.url, alt: pub.mark.alt, className: "h-8 w-8 object-contain" }), _jsx("span", { className: "text-foreground text-sm", children: pub.initials })] })) : (_jsx("span", { className: "text-foreground text-sm font-medium", children: pub.initials })) }) }), _jsx(PreviewTile, { label: "Favicon", children: _jsx("div", { className: "border-border bg-muted flex h-14 w-14 items-center justify-center rounded-md border p-2", children: faviconUrl ? (_jsx("img", { src: faviconUrl, alt: "Favicon preview", className: "h-8 w-8 object-contain" })) : (_jsx("span", { className: "text-muted-foreground text-xs", children: "None" })) }) })] })] }));
16
+ return (_jsxs("section", { className: "border-border bg-card rounded-lg border p-6", children: [_jsxs("header", { className: "mb-4 flex items-center justify-between gap-2", children: [_jsxs("div", { children: [_jsx("h3", { className: "text-foreground text-lg font-medium", children: "Brand preview" }), _jsx("p", { className: "text-muted-foreground mt-0.5 text-sm", children: "How your brand renders across the admin and public site." })] }), s.dirty && (_jsx("span", { className: "text-warning bg-warning/10 border-warning/30 rounded-md border px-2 py-0.5 text-xs", children: "Unsaved" }))] }), _jsxs("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3", children: [_jsx(PreviewTile, { label: "Admin sidebar", children: _jsx(SidebarPreview, { admin: admin }) }), _jsx(PreviewTile, { label: "Collapsed sidebar", children: _jsx("div", { className: "bg-sidebar border-sidebar-border flex h-14 w-14 items-center justify-center rounded-md border", children: admin.mark ? (_jsx("img", { src: admin.mark.url, alt: admin.mark.alt, className: "h-8 w-8 object-contain" })) : (_jsx(Initials, { initials: admin.initials })) }) }), _jsx(PreviewTile, { label: "Dark mode", children: _jsx(SidebarPreview, { admin: admin, dark: true }) }), _jsx(PreviewTile, { label: "Public header", children: _jsx("div", { className: "border-border bg-background flex h-14 items-center gap-2.5 rounded-md border px-3", children: pub.primary ? (_jsx("img", { src: pub.primary.url, alt: pub.primary.alt, className: "h-8 w-auto object-contain" })) : pub.mark ? (_jsxs(_Fragment, { children: [_jsx("img", { src: pub.mark.url, alt: pub.mark.alt, className: "h-8 w-8 object-contain" }), _jsx("span", { className: "text-foreground text-sm", children: pub.initials })] })) : (_jsx("span", { className: "text-foreground text-sm font-medium", children: pub.initials })) }) }), _jsx(PreviewTile, { label: "Favicon", children: _jsx("div", { className: "border-border bg-muted flex h-14 w-14 items-center justify-center rounded-md border p-2", children: faviconUrl ? (_jsx("img", { src: faviconUrl, alt: "Favicon preview", className: "h-8 w-8 object-contain" })) : (_jsx("span", { className: "text-muted-foreground text-xs", children: "None" })) }) })] })] }));
17
17
  }
18
18
  //# sourceMappingURL=BrandPreviewCard.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BrandingCard.d.ts","sourceRoot":"","sources":["../../../src/views/settings/BrandingCard.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAmB,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AA2HxF,wBAAgB,YAAY,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE;IAAE,CAAC,EAAE,qBAAqB,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,2CAmM1F"}
1
+ {"version":3,"file":"BrandingCard.d.ts","sourceRoot":"","sources":["../../../src/views/settings/BrandingCard.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAmB,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AA4KxF,wBAAgB,YAAY,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE;IAAE,CAAC,EAAE,qBAAqB,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,2CAgJ1F"}
@@ -1,7 +1,8 @@
1
1
  'use client';
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
3
  import { AlertTriangle, ChevronDown, ChevronRight, ImageIcon, Loader2, Trash2, Upload, } from 'lucide-react';
4
4
  import { useRef } from 'react';
5
+ import { SettingsCard, SettingsControlRow, SettingsSubsection } from './components.js';
5
6
  const LOGO_ACCEPT = 'image/svg+xml,image/png';
6
7
  function previewSurface(dark) {
7
8
  return dark ? 'bg-foreground border-border' : 'bg-muted border-border';
@@ -12,27 +13,41 @@ function LogoField({ label, helper, field, accept, square, darkSurface, brand, a
12
13
  const asset = assetId ? assets[assetId] : undefined;
13
14
  const uploading = uploadingField === field;
14
15
  const inputId = `brand-${field}`;
15
- return (_jsxs("div", { className: "flex items-start gap-4", children: [_jsx("div", { className: `flex shrink-0 items-center justify-center overflow-hidden rounded-md border p-2 ${previewSurface(Boolean(darkSurface))} ${square ? 'h-12 w-12' : 'h-12 w-20'}`, "aria-hidden": !asset, children: asset?.url ? (
16
- // Never stretch/crop — contain preserves aspect ratio + transparency.
17
- _jsx("img", { src: asset.url, alt: `${label} preview`, className: "max-h-full max-w-full object-contain" })) : (_jsx(ImageIcon, { size: 18, className: "text-muted-foreground", "aria-hidden": "true" })) }), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsx("label", { htmlFor: inputId, className: "text-foreground block text-base font-medium", children: label }), _jsx("p", { className: "text-muted-foreground mt-0.5 text-sm", children: helper }), _jsxs("div", { className: "mt-2 flex items-center gap-2", children: [_jsx("input", { ref: inputRef, id: inputId, type: "file", accept: accept, className: "sr-only", disabled: !canEdit || uploading, onChange: (e) => {
18
- const file = e.target.files?.[0];
19
- if (file)
20
- onUpload(field, file);
21
- if (inputRef.current)
22
- inputRef.current.value = '';
23
- } }), _jsxs("button", { type: "button", onClick: () => inputRef.current?.click(), disabled: !canEdit || uploading, className: "border-border text-foreground hover:bg-accent inline-flex items-center gap-2 rounded-md border px-3 py-1.5 text-sm transition-colors disabled:cursor-not-allowed disabled:opacity-50", children: [uploading ? (_jsx(Loader2, { size: 14, className: "animate-spin", "aria-hidden": "true" })) : (_jsx(Upload, { size: 14, "aria-hidden": "true" })), asset ? 'Replace' : `Upload ${label.toLowerCase()}`] }), asset && (_jsxs("button", { type: "button", onClick: () => onRemove(field), disabled: !canEdit, className: "text-muted-foreground hover:text-destructive inline-flex items-center gap-1.5 rounded-md px-2 py-1.5 text-sm transition-colors disabled:cursor-not-allowed disabled:opacity-50", "aria-label": `Remove ${label}`, children: [_jsx(Trash2, { size: 14, "aria-hidden": "true" }), " Remove"] }))] }), warning && (_jsxs("p", { className: "text-warning mt-2 flex items-start gap-1.5 text-sm", role: "status", "aria-live": "polite", children: [_jsx(AlertTriangle, { size: 14, className: "mt-0.5 shrink-0", "aria-hidden": "true" }), " ", warning] }))] })] }));
16
+ const thumbnail = (_jsx("div", { className: `flex shrink-0 items-center justify-center overflow-hidden rounded-md border p-2 ${previewSurface(Boolean(darkSurface))} ${square ? 'h-12 w-12' : 'h-12 w-20'}`, "aria-hidden": !asset, children: asset?.url ? (
17
+ // Never stretch/crop — contain preserves aspect ratio + transparency.
18
+ _jsx("img", { src: asset.url, alt: `${label} preview`, className: "max-h-full max-w-full object-contain" })) : (_jsx(ImageIcon, { size: 18, className: "text-muted-foreground", "aria-hidden": "true" })) }));
19
+ const controls = (_jsxs(_Fragment, { children: [_jsx("input", { ref: inputRef, id: inputId, type: "file", accept: accept, "aria-label": label, className: "sr-only", disabled: !canEdit || uploading, onChange: (e) => {
20
+ const file = e.target.files?.[0];
21
+ if (file)
22
+ onUpload(field, file);
23
+ if (inputRef.current)
24
+ inputRef.current.value = '';
25
+ } }), asset && (_jsxs("button", { type: "button", onClick: () => onRemove(field), disabled: !canEdit, className: "text-muted-foreground hover:text-destructive inline-flex items-center gap-1.5 rounded-md px-2 py-1.5 text-sm transition-colors disabled:cursor-not-allowed disabled:opacity-50", "aria-label": `Remove ${label.toLowerCase()}`, children: [_jsx(Trash2, { size: 14, "aria-hidden": "true" }), " Remove"] })), _jsxs("button", { type: "button", onClick: () => inputRef.current?.click(), disabled: !canEdit || uploading, "aria-label": `${asset ? 'Replace' : 'Upload'} ${label.toLowerCase()}`, className: "border-border text-foreground hover:bg-accent inline-flex items-center gap-2 rounded-md border px-3 py-1.5 text-sm transition-colors disabled:cursor-not-allowed disabled:opacity-50", children: [uploading ? (_jsx(Loader2, { size: 14, className: "animate-spin", "aria-hidden": "true" })) : (_jsx(Upload, { size: 14, "aria-hidden": "true" })), asset ? 'Replace' : 'Upload'] })] }));
26
+ return (_jsxs("div", { children: [_jsx(SettingsControlRow, { leading: thumbnail, label: label, description: helper, control: controls }), warning && (_jsxs("p", { className: "text-warning mt-2 flex items-start gap-1.5 text-sm", role: "status", "aria-live": "polite", children: [_jsx(AlertTriangle, { size: 14, className: "mt-0.5 shrink-0", "aria-hidden": "true" }), " ", warning] }))] }));
27
+ }
28
+ function AdminBrandSourceToggle({ mode, canEdit, onChange, }) {
29
+ return (_jsx("div", { role: "radiogroup", "aria-label": "Brand source", className: "border-border bg-muted inline-flex rounded-md border p-0.5", children: [
30
+ ['inheritPublicBrand', 'Inherit public brand'],
31
+ ['customAdminBrand', 'Custom admin logo'],
32
+ ].map(([value, text]) => {
33
+ const active = mode === value;
34
+ return (_jsx("button", { type: "button", role: "radio", "aria-checked": active, disabled: !canEdit, onClick: () => onChange(value), className: `rounded px-3 py-1.5 text-sm transition-colors disabled:cursor-not-allowed disabled:opacity-50 ${active
35
+ ? 'bg-card text-foreground shadow-sm'
36
+ : 'text-muted-foreground hover:text-foreground'}`, children: text }, value));
37
+ }) }));
24
38
  }
25
39
  export function BrandingCard({ s, canEdit }) {
26
40
  const warningFor = (field) => s.issues.find((i) => i.field === field && i.severity === 'warning')?.message;
27
41
  const custom = s.brand.mode === 'customAdminBrand';
28
- return (_jsxs("section", { className: "border-border bg-card rounded-lg border p-6", children: [_jsxs("header", { className: "mb-4", children: [_jsx("h3", { className: "text-foreground text-lg font-medium", children: "Branding" }), _jsx("p", { className: "text-muted-foreground mt-0.5 text-sm", children: "Logos shown in the admin sidebar and on the public site." })] }), _jsxs("div", { className: "space-y-5", children: [_jsx(LogoField, { label: "Primary Logo", helper: "SVG or PNG, up to 1MB. Best for the public header and full admin sidebar.", field: "publicPrimaryLogoAssetId", accept: LOGO_ACCEPT, brand: s.brand, assets: s.assets, uploadingField: s.uploadingField, canEdit: canEdit, warning: warningFor('publicPrimaryLogoAssetId'), onUpload: s.uploadAsset, onRemove: s.removeAsset }), _jsx(LogoField, { label: "Favicon / App Icon Source", helper: "32\u00D732 PNG or SVG. A larger square image is fine \u2014 it scales down cleanly.", field: "faviconSourceAssetId", accept: LOGO_ACCEPT, square: true, brand: s.brand, assets: s.assets, uploadingField: s.uploadingField, canEdit: canEdit, warning: warningFor('faviconSourceAssetId'), onUpload: s.uploadAsset, onRemove: s.removeAsset }), _jsxs("div", { className: "border-border border-t pt-4", children: [_jsxs("button", { type: "button", onClick: () => s.setShowAdvanced(!s.showAdvanced), "aria-expanded": s.showAdvanced, className: "text-foreground hover:text-brand inline-flex items-center gap-1.5 text-sm font-medium transition-colors", children: [s.showAdvanced ? (_jsx(ChevronDown, { size: 16, "aria-hidden": "true" })) : (_jsx(ChevronRight, { size: 16, "aria-hidden": "true" })), "Advanced logo variants"] }), s.showAdvanced && (_jsxs("div", { className: "mt-4 space-y-5", children: [_jsx(LogoField, { label: "Logo Mark", helper: "Square icon or mark. Used for the collapsed sidebar, compact UI, and app icons.", field: "publicLogoMarkAssetId", accept: LOGO_ACCEPT, square: true, brand: s.brand, assets: s.assets, uploadingField: s.uploadingField, canEdit: canEdit, warning: warningFor('publicLogoMarkAssetId'), onUpload: s.uploadAsset, onRemove: s.removeAsset }), _jsx(LogoField, { label: "Dark Mode Logo", helper: "Optional. Used on dark backgrounds or the dark admin theme.", field: "publicDarkLogoAssetId", accept: LOGO_ACCEPT, darkSurface: true, brand: s.brand, assets: s.assets, uploadingField: s.uploadingField, canEdit: canEdit, warning: warningFor('publicDarkLogoAssetId'), onUpload: s.uploadAsset, onRemove: s.removeAsset })] }))] }), _jsxs("div", { className: "border-border border-t pt-4", children: [_jsx("div", { className: "flex items-center gap-2", children: _jsx("span", { className: "text-foreground text-base font-medium", children: "Admin branding" }) }), _jsx("p", { className: "text-muted-foreground mt-0.5 text-sm", children: "Admin uses the public brand by default." }), _jsx("div", { role: "radiogroup", "aria-label": "Admin branding mode", className: "border-border bg-muted mt-2 inline-flex rounded-md border p-0.5", children: [
29
- ['inheritPublicBrand', 'Inherit public brand'],
30
- ['customAdminBrand', 'Custom admin logo'],
31
- ].map(([value, text]) => {
32
- const active = s.brand.mode === value;
33
- return (_jsx("button", { type: "button", role: "radio", "aria-checked": active, disabled: !canEdit, onClick: () => s.setBrandingMode(value), className: `rounded px-3 py-1.5 text-sm transition-colors disabled:cursor-not-allowed disabled:opacity-50 ${active
34
- ? 'bg-card text-foreground shadow-sm'
35
- : 'text-muted-foreground hover:text-foreground'}`, children: text }, value));
36
- }) }), custom && (_jsxs("div", { className: "mt-4 space-y-5", children: [_jsx(LogoField, { label: "Admin Primary Logo", helper: "Shown in the admin sidebar instead of the public logo.", field: "adminPrimaryLogoAssetId", accept: LOGO_ACCEPT, brand: s.brand, assets: s.assets, uploadingField: s.uploadingField, canEdit: canEdit, warning: warningFor('adminPrimaryLogoAssetId'), onUpload: s.uploadAsset, onRemove: s.removeAsset }), _jsx(LogoField, { label: "Admin Logo Mark", helper: "Square mark for the collapsed admin sidebar.", field: "adminLogoMarkAssetId", accept: LOGO_ACCEPT, square: true, brand: s.brand, assets: s.assets, uploadingField: s.uploadingField, canEdit: canEdit, warning: warningFor('adminLogoMarkAssetId'), onUpload: s.uploadAsset, onRemove: s.removeAsset })] }))] }), _jsxs("div", { className: "border-border border-t pt-4", children: [_jsx("label", { htmlFor: "brand-alt", className: "text-foreground block text-base font-medium", children: "Logo alt text" }), _jsx("p", { className: "text-muted-foreground mt-0.5 mb-2 text-sm", children: "Used by screen readers on the public site. Defaults to the Site Title when empty." }), _jsx("input", { id: "brand-alt", type: "text", value: s.brand.defaultLogoAltText ?? '', disabled: !canEdit, onChange: (e) => s.setAltText(e.target.value), placeholder: "Site Title", className: "border-border bg-input-background text-foreground focus-visible:ring-ring w-full max-w-md rounded-md border px-3 py-2 text-base focus-visible:ring-2 focus-visible:outline-none disabled:opacity-50" })] })] }), s.saveError && (_jsx("p", { className: "text-destructive mt-4 text-sm", role: "alert", children: s.saveError }))] }));
42
+ const logoFieldProps = {
43
+ accept: LOGO_ACCEPT,
44
+ brand: s.brand,
45
+ assets: s.assets,
46
+ uploadingField: s.uploadingField,
47
+ canEdit,
48
+ onUpload: s.uploadAsset,
49
+ onRemove: s.removeAsset,
50
+ };
51
+ return (_jsxs(SettingsCard, { title: "Branding", description: "Logos shown in the admin sidebar and on the public site.", children: [_jsxs("div", { className: "space-y-5", children: [_jsx(LogoField, { label: "Primary logo", helper: "SVG or PNG, up to 1MB. Best for the public header and full admin sidebar.", field: "publicPrimaryLogoAssetId", warning: warningFor('publicPrimaryLogoAssetId'), ...logoFieldProps }), _jsx(LogoField, { label: "Favicon / app icon source", helper: "32\u00D732 PNG or SVG. A larger square image is fine \u2014 it scales down cleanly.", field: "faviconSourceAssetId", square: true, warning: warningFor('faviconSourceAssetId'), ...logoFieldProps }), _jsxs("div", { className: "border-border border-t pt-4", children: [_jsxs("button", { type: "button", onClick: () => s.setShowAdvanced(!s.showAdvanced), "aria-expanded": s.showAdvanced, className: "text-foreground hover:text-brand inline-flex items-center gap-1.5 text-sm font-medium transition-colors", children: [s.showAdvanced ? (_jsx(ChevronDown, { size: 16, "aria-hidden": "true" })) : (_jsx(ChevronRight, { size: 16, "aria-hidden": "true" })), "Advanced logo variants"] }), s.showAdvanced && (_jsxs("div", { className: "mt-4 space-y-5", children: [_jsx(LogoField, { label: "Logo mark", helper: "Square icon or mark. Used for the collapsed sidebar, compact UI, and app icons.", field: "publicLogoMarkAssetId", square: true, warning: warningFor('publicLogoMarkAssetId'), ...logoFieldProps }), _jsx(LogoField, { label: "Dark mode logo", helper: "Optional. Used on dark backgrounds or the dark admin theme.", field: "publicDarkLogoAssetId", darkSurface: true, warning: warningFor('publicDarkLogoAssetId'), ...logoFieldProps })] }))] }), _jsx(SettingsSubsection, { title: "Admin branding", description: "By default the admin reuses your public brand. Override it for a distinct internal look.", children: _jsxs("div", { className: "mt-4 space-y-5", children: [_jsx(SettingsControlRow, { label: "Brand source", description: "Choose whether the admin inherits the public brand or uses a custom logo.", control: _jsx(AdminBrandSourceToggle, { mode: s.brand.mode, canEdit: canEdit, onChange: s.setBrandingMode }) }), custom && (_jsxs("div", { className: "space-y-5", children: [_jsx(LogoField, { label: "Admin primary logo", helper: "Shown in the admin sidebar instead of the public logo.", field: "adminPrimaryLogoAssetId", warning: warningFor('adminPrimaryLogoAssetId'), ...logoFieldProps }), _jsx(LogoField, { label: "Admin logo mark", helper: "Square mark for the collapsed admin sidebar.", field: "adminLogoMarkAssetId", square: true, warning: warningFor('adminLogoMarkAssetId'), ...logoFieldProps })] }))] }) }), _jsxs("div", { className: "border-border border-t pt-4", children: [_jsx("label", { htmlFor: "brand-alt", className: "text-foreground block text-base font-medium", children: "Logo alt text" }), _jsx("p", { className: "text-muted-foreground mt-0.5 mb-2 text-sm", children: "Used by screen readers on the public site. Defaults to the Site Title when empty." }), _jsx("input", { id: "brand-alt", type: "text", value: s.brand.defaultLogoAltText ?? '', disabled: !canEdit, onChange: (e) => s.setAltText(e.target.value), placeholder: "Site Title", className: "border-border bg-input-background text-foreground focus-visible:ring-ring w-full max-w-md rounded-md border px-3 py-2 text-base focus-visible:ring-2 focus-visible:outline-none disabled:opacity-50" })] })] }), s.saveError && (_jsx("p", { className: "text-destructive mt-4 text-sm", role: "alert", children: s.saveError }))] }));
37
52
  }
38
53
  //# sourceMappingURL=BrandingCard.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BrandingCard.js","sourceRoot":"","sources":["../../../src/views/settings/BrandingCard.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BrandingCard.js","sourceRoot":"","sources":["../../../src/views/settings/BrandingCard.tsx"],"names":[],"mappings":"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"}
@@ -3,6 +3,6 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { SettingsToggleRow } from './components.js';
4
4
  import { AVAILABLE_FONTS } from '../../components/ThemeProvider.js';
5
5
  export function TypographyMotionCard({ s, canEdit, }) {
6
- return (_jsxs("section", { className: "border-border bg-card rounded-lg border p-6", children: [_jsxs("header", { className: "mb-4", children: [_jsx("h3", { className: "text-foreground text-lg font-medium", children: "Typography & Motion" }), _jsx("p", { className: "text-muted-foreground mt-0.5 text-sm", children: "Admin UI font and motion preferences." })] }), _jsxs("div", { className: "space-y-5", children: [_jsxs("div", { children: [_jsx("label", { htmlFor: "content-font", className: "text-foreground mb-1 block text-base font-medium", children: "Content font" }), _jsx("p", { className: "text-muted-foreground mb-2 text-sm", children: "Applies to the admin UI. Falls back to the system font if not installed." }), _jsxs("select", { id: "content-font", value: s.appearance.font, disabled: !canEdit, onChange: (e) => s.setFont(e.target.value), className: "border-border bg-input-background text-foreground focus-visible:ring-ring w-full max-w-md rounded-md border px-3 py-2 text-base focus-visible:ring-2 focus-visible:outline-none disabled:opacity-50", children: [AVAILABLE_FONTS.map((font) => (_jsx("option", { value: font, children: font }, font))), !AVAILABLE_FONTS.includes(s.appearance.font) && (_jsx("option", { value: s.appearance.font, children: s.appearance.font }))] })] }), _jsx("div", { className: "border-border border-t pt-4", children: _jsx(SettingsToggleRow, { label: "Reduce motion", description: "Minimize animations and transitions across the admin. Focus and state changes are preserved.", checked: s.appearance.reduceMotion, onChange: s.setReduceMotion, disabled: !canEdit }) })] })] }));
6
+ return (_jsxs("section", { className: "border-border bg-card rounded-lg border p-6", children: [_jsxs("header", { className: "mb-4", children: [_jsx("h3", { className: "text-foreground text-lg font-medium", children: "Typography & motion" }), _jsx("p", { className: "text-muted-foreground mt-0.5 text-sm", children: "Admin UI font and motion preferences." })] }), _jsxs("div", { className: "space-y-5", children: [_jsxs("div", { children: [_jsx("label", { htmlFor: "content-font", className: "text-foreground mb-1 block text-base font-medium", children: "Content font" }), _jsx("p", { className: "text-muted-foreground mb-2 text-sm", children: "Applies to the admin UI. Falls back to the system font if not installed." }), _jsxs("select", { id: "content-font", value: s.appearance.font, disabled: !canEdit, onChange: (e) => s.setFont(e.target.value), className: "border-border bg-input-background text-foreground focus-visible:ring-ring w-full max-w-md rounded-md border px-3 py-2 text-base focus-visible:ring-2 focus-visible:outline-none disabled:opacity-50", children: [AVAILABLE_FONTS.map((font) => (_jsx("option", { value: font, children: font }, font))), !AVAILABLE_FONTS.includes(s.appearance.font) && (_jsx("option", { value: s.appearance.font, children: s.appearance.font }))] })] }), _jsx("div", { className: "border-border border-t pt-4", children: _jsx(SettingsToggleRow, { label: "Reduce motion", description: "Minimize animations and transitions across the admin. Focus and state changes are preserved.", checked: s.appearance.reduceMotion, onChange: s.setReduceMotion, disabled: !canEdit }) })] })] }));
7
7
  }
8
8
  //# sourceMappingURL=TypographyMotionCard.js.map
@@ -0,0 +1,6 @@
1
+ export interface UpdatesTabProps {
2
+ /** Current admin role — gates the write actions (config + Create PR). */
3
+ role?: string;
4
+ }
5
+ export declare function UpdatesTab({ role }: UpdatesTabProps): import("react/jsx-runtime").JSX.Element;
6
+ //# sourceMappingURL=UpdatesTab.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UpdatesTab.d.ts","sourceRoot":"","sources":["../../../src/views/settings/UpdatesTab.tsx"],"names":[],"mappings":"AA2HA,MAAM,WAAW,eAAe;IAC9B,yEAAyE;IACzE,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,wBAAgB,UAAU,CAAC,EAAE,IAAI,EAAE,EAAE,eAAe,2CAganD"}
@@ -0,0 +1,80 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { AlertTriangle, ArrowUpCircle, CheckCircle2, Database, ExternalLink, Eye, EyeOff, GitPullRequest, Loader2, Lock, Puzzle, RefreshCw, ShieldAlert, } from 'lucide-react';
4
+ import { useState } from 'react';
5
+ import { SettingsCard, SettingsControlRow, SettingsSaveBar } from './components.js';
6
+ import { useUpdates, } from './useUpdates.js';
7
+ const SEVERITY = {
8
+ patch: { banner: 'border-brand/30 bg-brand/10', text: 'text-brand', label: 'Patch' },
9
+ minor: { banner: 'border-warning/30 bg-warning/10', text: 'text-warning', label: 'Minor' },
10
+ major: {
11
+ banner: 'border-destructive/30 bg-destructive/10',
12
+ text: 'text-destructive',
13
+ label: 'Major',
14
+ },
15
+ security: {
16
+ banner: 'border-destructive/40 bg-destructive/15',
17
+ text: 'text-destructive',
18
+ label: 'Security',
19
+ },
20
+ };
21
+ const CHANGE_TYPE = {
22
+ feature: { label: 'Feature', className: 'border-brand/30 bg-brand/10 text-brand' },
23
+ improvement: {
24
+ label: 'Improvement',
25
+ className: 'border-border bg-muted text-muted-foreground',
26
+ },
27
+ fix: { label: 'Fix', className: 'border-border bg-muted text-muted-foreground' },
28
+ breaking: {
29
+ label: 'Breaking',
30
+ className: 'border-destructive/30 bg-destructive/10 text-destructive',
31
+ },
32
+ security: {
33
+ label: 'Security',
34
+ className: 'border-destructive/40 bg-destructive/15 text-destructive',
35
+ },
36
+ deprecation: { label: 'Deprecated', className: 'border-warning/30 bg-warning/10 text-warning' },
37
+ };
38
+ const ghInputClass = 'w-full rounded-md border border-border bg-input-background px-3 py-2 text-base text-foreground focus-visible:ring-2 focus-visible:ring-ring focus-visible:outline-none';
39
+ /** Group a flat changelog list into per-version buckets (order preserved). */
40
+ function groupByVersion(changelog) {
41
+ const groups = [];
42
+ for (const item of changelog) {
43
+ const last = groups[groups.length - 1];
44
+ if (last && last.version === item.version) {
45
+ last.items.push(item);
46
+ }
47
+ else {
48
+ groups.push({ version: item.version, date: item.date, items: [item] });
49
+ }
50
+ }
51
+ return groups;
52
+ }
53
+ function ChangeTypeBadge({ type }) {
54
+ if (!type)
55
+ return null;
56
+ const meta = CHANGE_TYPE[type];
57
+ return (_jsx("span", { className: `inline-flex shrink-0 items-center rounded border px-1.5 py-0.5 text-xs font-medium ${meta.className}`, children: meta.label }));
58
+ }
59
+ /** A bordered notice row used for migration / breaking-change callouts. */
60
+ function Notice({ tone, icon, title, children, }) {
61
+ const toneClass = tone === 'destructive'
62
+ ? 'border-destructive/30 bg-destructive/10 text-destructive'
63
+ : 'border-warning/30 bg-warning/10 text-warning';
64
+ return (_jsxs("div", { className: `mt-3 flex items-start gap-2.5 rounded-md border p-3 ${toneClass}`, children: [_jsx("span", { className: "mt-0.5 shrink-0", "aria-hidden": "true", children: icon }), _jsxs("div", { className: "min-w-0 text-sm", children: [_jsx("p", { className: "font-medium", children: title }), children && _jsx("div", { className: "text-foreground/80 mt-1 space-y-1", children: children })] })] }));
65
+ }
66
+ export function UpdatesTab({ role }) {
67
+ const { info, checking, hasChecked, error, applying, prResult, canManage, form, setField, dirty, repoError, hasErrors, saveState, save, reset, check, apply, } = useUpdates({ role });
68
+ const [showToken, setShowToken] = useState(false);
69
+ const severity = info?.updateAvailable ? SEVERITY[info.severity ?? 'patch'] : null;
70
+ const changelogGroups = info?.changelog ? groupByVersion(info.changelog) : [];
71
+ return (_jsxs(_Fragment, { children: [_jsx(SettingsCard, { title: "Actuate CMS", description: "Keep your CMS up to date with the latest features and security patches.", actions: _jsxs("button", { type: "button", onClick: check, disabled: checking, className: "border-border text-foreground hover:bg-accent inline-flex items-center gap-2 rounded-md border px-4 py-2 text-sm font-medium transition-colors disabled:opacity-50", children: [_jsx(RefreshCw, { size: 16, className: checking ? 'animate-spin' : '', "aria-hidden": "true" }), checking ? 'Checking…' : 'Check for Updates'] }), children: _jsxs("p", { className: "text-muted-foreground text-sm", children: ["Current version:", ' ', _jsx("span", { className: "text-foreground font-mono font-medium", children: info?.current ?? '…' })] }) }), error && (_jsxs("div", { role: "alert", className: "border-destructive/30 bg-destructive/10 text-destructive flex items-center gap-3 rounded-lg border p-3 text-sm", children: [_jsx(AlertTriangle, { size: 20, className: "shrink-0", "aria-hidden": "true" }), _jsx("span", { className: "flex-1", children: error }), _jsx("button", { type: "button", onClick: check, className: "border-destructive/40 rounded-md border px-3 py-1 transition-colors hover:opacity-80", children: "Retry" })] })), hasChecked && info && !info.updateAvailable && !error && (_jsxs("div", { className: "border-success/30 bg-success/10 flex items-center gap-3 rounded-lg border p-4", children: [_jsx(CheckCircle2, { size: 24, className: "text-success shrink-0", "aria-hidden": "true" }), _jsxs("div", { children: [_jsx("h3", { className: "text-foreground font-medium", children: "You're up to date!" }), _jsxs("p", { className: "text-muted-foreground mt-0.5 text-sm", children: ["Actuate CMS ", _jsx("span", { className: "font-mono", children: info.current }), " is the latest version."] })] })] })), info?.updateAvailable && severity && (_jsxs("div", { className: `rounded-lg border p-4 ${severity.banner}`, children: [_jsxs("div", { className: "flex items-start gap-3", children: [info.severity === 'security' ? (_jsx(ShieldAlert, { size: 24, className: `mt-0.5 shrink-0 ${severity.text}`, "aria-hidden": "true" })) : (_jsx(ArrowUpCircle, { size: 24, className: `mt-0.5 shrink-0 ${severity.text}`, "aria-hidden": "true" })), _jsxs("div", { className: "flex-1", children: [_jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [_jsx("h3", { className: `font-medium ${severity.text}`, children: info.severity === 'security' ? 'Security update available' : 'Update available' }), _jsx("span", { className: `inline-flex items-center rounded border px-2 py-0.5 text-xs font-medium ${severity.banner} ${severity.text}`, children: severity.label })] }), _jsxs("p", { className: "text-muted-foreground mt-1 text-sm", children: [_jsx("span", { className: "font-mono", children: info.current }), " \u2192", ' ', _jsx("span", { className: "text-foreground font-mono font-medium", children: info.latest }), info.releaseDate && (_jsxs("span", { className: "ml-2 text-xs opacity-70", children: ["Released ", info.releaseDate] }))] })] })] }), info.hasMigrations && (_jsx(Notice, { tone: "warning", icon: _jsx(Database, { size: 16 }), title: "Database migrations required", children: _jsxs("p", { children: ["Run", ' ', _jsx("code", { className: "bg-muted rounded px-1 font-mono text-xs", children: "npx prisma migrate deploy" }), ' ', "after upgrading. On Vercel this runs automatically at build time."] }) })), info.breakingChanges && info.breakingChanges.length > 0 && (_jsx(Notice, { tone: "destructive", icon: _jsx(AlertTriangle, { size: 16 }), title: "Breaking changes in this release", children: _jsx("ul", { className: "list-disc space-y-1 pl-4", children: info.breakingChanges.map((c, i) => (_jsx("li", { children: c }, i))) }) })), _jsxs("div", { className: "mt-4 flex flex-wrap items-center gap-3", children: [canManage ? (_jsx("button", { type: "button", onClick: apply, disabled: applying, className: "bg-brand text-brand-foreground inline-flex items-center gap-2 rounded-md px-4 py-2 text-sm font-medium transition-opacity hover:opacity-90 disabled:opacity-50", children: applying ? (_jsxs(_Fragment, { children: [_jsx(Loader2, { size: 16, className: "animate-spin", "aria-hidden": "true" }), "Creating PR\u2026"] })) : (_jsxs(_Fragment, { children: [_jsx(GitPullRequest, { size: 16, "aria-hidden": "true" }), "Create Update PR"] })) })) : (_jsxs("span", { className: "text-muted-foreground inline-flex items-center gap-1.5 text-xs", children: [_jsx(Lock, { size: 14, "aria-hidden": "true" }), "Ask an administrator to apply this update."] })), canManage && (_jsx("span", { className: "text-muted-foreground text-xs", children: "Opens a pull request on your repository" }))] }), info.updateCommand && (_jsxs("div", { className: "border-border bg-card mt-3 rounded-md border p-3", children: [_jsx("p", { className: "text-muted-foreground mb-1 text-xs", children: "Or update manually:" }), _jsx("code", { className: "bg-muted text-foreground block rounded px-2 py-1.5 font-mono text-xs select-all", children: info.updateCommand })] }))] })), info?.updateAvailable && changelogGroups.length > 0 && (_jsx(SettingsCard, { title: "Changelog", description: info.source === 'npm'
72
+ ? 'Version history from npm. Connect the update server for full release notes.'
73
+ : "What's new since your current version.", children: _jsx("div", { className: "max-h-80 space-y-4 overflow-y-auto pr-1", children: changelogGroups.map((group) => (_jsxs("div", { className: "border-border border-b pb-3 last:border-0 last:pb-0", children: [_jsxs("div", { className: "mb-1.5 flex items-baseline gap-3", children: [_jsx("span", { className: "text-foreground font-mono text-sm font-medium", children: group.version }), group.date && (_jsx("span", { className: "text-muted-foreground text-xs", children: group.date }))] }), _jsx("ul", { className: "space-y-1.5", children: group.items.map((item, i) => (_jsxs("li", { className: "flex items-start gap-2 text-sm", children: [_jsx(ChangeTypeBadge, { type: item.type }), _jsx("span", { className: "text-muted-foreground min-w-0", children: item.summary })] }, i))) })] }, group.version))) }) })), info?.updateAvailable && info.pluginCompatibility && info.pluginCompatibility.length > 0 && (_jsx(SettingsCard, { title: "Plugin compatibility", description: "Latest published versions of the official plugins for this release.", children: _jsx("ul", { className: "grid gap-2 sm:grid-cols-2", children: info.pluginCompatibility.map((plugin) => (_jsxs("li", { className: "border-border flex items-center justify-between gap-3 rounded-md border px-3 py-2 text-sm", children: [_jsxs("span", { className: "text-foreground inline-flex min-w-0 items-center gap-2", children: [_jsx(Puzzle, { size: 14, className: "text-muted-foreground shrink-0", "aria-hidden": "true" }), _jsx("span", { className: "truncate font-mono text-xs", children: plugin.name.replace('@actuate-media/', '') })] }), _jsxs("span", { className: "text-muted-foreground inline-flex shrink-0 items-center gap-1.5", children: [plugin.minVersion && (_jsx("span", { className: "font-mono text-xs", children: plugin.minVersion })), _jsx(CheckCircle2, { size: 14, className: "text-success", "aria-hidden": "true" })] })] }, plugin.name))) }) })), prResult && (_jsx("div", { className: "border-success/30 bg-success/10 rounded-lg border p-4", children: _jsxs("div", { className: "flex items-start gap-3", children: [_jsx(GitPullRequest, { size: 20, className: "text-success mt-0.5 shrink-0", "aria-hidden": "true" }), _jsxs("div", { children: [_jsx("h3", { className: "text-foreground font-medium", children: "Pull Request Created" }), _jsxs("p", { className: "text-muted-foreground mt-1 text-sm", children: ["PR #", prResult.prNumber, " has been created on your repository. Review and merge it to apply the update, then run", ' ', _jsx("code", { className: "bg-muted rounded px-1 font-mono text-xs", children: "npx prisma migrate deploy" }), "."] }), _jsxs("a", { href: prResult.prUrl, target: "_blank", rel: "noopener noreferrer", className: "text-brand mt-2 inline-flex items-center gap-1.5 text-sm font-medium hover:underline", children: [_jsx(ExternalLink, { size: 16, "aria-hidden": "true" }), "View Pull Request"] })] })] }) })), canManage && (_jsxs(SettingsCard, { title: "GitHub Integration", description: "Connect your repository to enable one-click update PRs. Credentials are encrypted at rest (AES-256-GCM).", children: [_jsxs("div", { className: "space-y-4", children: [_jsx(SettingsControlRow, { label: "Repository", htmlFor: "updates-gh-repo", align: "start", description: _jsxs(_Fragment, { children: ["e.g.", ' ', _jsx("code", { className: "bg-muted rounded px-1 font-mono", children: "actuate-media/my-client-site" })] }), control: _jsxs("div", { className: "w-72 max-w-full", children: [_jsx("input", { id: "updates-gh-repo", type: "text", value: form.githubRepo, onChange: (e) => setField('githubRepo', e.target.value), placeholder: "owner/repo", "aria-invalid": Boolean(repoError), "aria-describedby": repoError ? 'updates-gh-repo-error' : undefined, className: ghInputClass }), repoError && (_jsx("p", { id: "updates-gh-repo-error", className: "text-destructive mt-1 text-xs", children: repoError }))] }) }), _jsx(SettingsControlRow, { label: _jsxs("span", { className: "inline-flex items-center gap-2", children: ["GitHub token", info?.hasGithubToken && !form.githubToken && (_jsx("span", { className: "text-success text-xs font-normal", children: "Saved" }))] }), htmlFor: "updates-gh-token", align: "start", description: _jsxs(_Fragment, { children: ["Needs ", _jsx("code", { className: "bg-muted rounded px-1 font-mono", children: "repo" }), " scope. Create one at", ' ', _jsx("a", { href: "https://github.com/settings/tokens", target: "_blank", rel: "noopener noreferrer", className: "text-brand hover:underline", children: "github.com/settings/tokens" }), "."] }), control: _jsxs("div", { className: "relative w-72 max-w-full", children: [_jsx("input", { id: "updates-gh-token", type: showToken ? 'text' : 'password', value: form.githubToken, onChange: (e) => setField('githubToken', e.target.value), placeholder: info?.hasGithubToken ? '••••••••••••••••' : 'ghp_… or github_pat_…', className: `${ghInputClass} pr-10` }), _jsx("button", { type: "button", onClick: () => setShowToken((s) => !s), "aria-label": showToken ? 'Hide token' : 'Show token', className: "text-muted-foreground hover:text-foreground absolute top-1/2 right-2 -translate-y-1/2 p-1", children: showToken ? (_jsx(EyeOff, { size: 16, "aria-hidden": "true" })) : (_jsx(Eye, { size: 16, "aria-hidden": "true" })) })] }) })] }), _jsx(SettingsSaveBar, { dirty: dirty, canEdit: canManage, hasErrors: hasErrors, saveState: saveState, onSave: save, onReset: reset })] })), _jsx(SettingsCard, { title: "How Updates Work", children: _jsx("ol", { className: "text-muted-foreground space-y-1.5 text-sm", children: [
74
+ 'Click “Check for Updates” to see if a new version is available.',
75
+ 'Add your GitHub token and repository above (admins only). They’re encrypted at rest — never stored in plaintext.',
76
+ 'Click “Create Update PR” to open a pull request that bumps your CMS packages automatically.',
77
+ 'Review and merge the PR, then deploy. Database migrations run automatically via prisma migrate deploy.',
78
+ ].map((step, i) => (_jsxs("li", { className: "flex items-start gap-2", children: [_jsx("span", { className: "bg-brand/10 text-brand mt-0.5 flex h-4 w-4 shrink-0 items-center justify-center rounded-full text-[10px] font-medium", children: i + 1 }), _jsx("span", { children: step })] }, i))) }) })] }));
79
+ }
80
+ //# sourceMappingURL=UpdatesTab.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UpdatesTab.js","sourceRoot":"","sources":["../../../src/views/settings/UpdatesTab.tsx"],"names":[],"mappings":"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"}