@actuate-media/cms-admin 0.36.1 → 0.37.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.
Files changed (69) hide show
  1. package/dist/__tests__/layout/sidebar-brand.render.test.d.ts +2 -0
  2. package/dist/__tests__/layout/sidebar-brand.render.test.d.ts.map +1 -0
  3. package/dist/__tests__/layout/sidebar-brand.render.test.js +44 -0
  4. package/dist/__tests__/layout/sidebar-brand.render.test.js.map +1 -0
  5. package/dist/__tests__/views/appearance-settings.render.test.js +4 -4
  6. package/dist/__tests__/views/login-branding.render.test.d.ts +2 -0
  7. package/dist/__tests__/views/login-branding.render.test.d.ts.map +1 -0
  8. package/dist/__tests__/views/login-branding.render.test.js +80 -0
  9. package/dist/__tests__/views/login-branding.render.test.js.map +1 -0
  10. package/dist/__tests__/views/login-mfa.render.test.js +6 -0
  11. package/dist/__tests__/views/login-mfa.render.test.js.map +1 -1
  12. package/dist/__tests__/views/updates-tab.render.test.d.ts +2 -0
  13. package/dist/__tests__/views/updates-tab.render.test.d.ts.map +1 -0
  14. package/dist/__tests__/views/updates-tab.render.test.js +132 -0
  15. package/dist/__tests__/views/updates-tab.render.test.js.map +1 -0
  16. package/dist/actuate-admin.css +1 -1
  17. package/dist/components/LogoPlaceholder.d.ts +17 -0
  18. package/dist/components/LogoPlaceholder.d.ts.map +1 -0
  19. package/dist/components/LogoPlaceholder.js +13 -0
  20. package/dist/components/LogoPlaceholder.js.map +1 -0
  21. package/dist/components/ui/Badge.d.ts +1 -1
  22. package/dist/components/ui/Button.d.ts +1 -1
  23. package/dist/components/ui/Card.d.ts +2 -2
  24. package/dist/components/ui/Input.d.ts +1 -1
  25. package/dist/components/ui/Select.d.ts +1 -1
  26. package/dist/layout/Sidebar.d.ts.map +1 -1
  27. package/dist/layout/Sidebar.js +13 -10
  28. package/dist/layout/Sidebar.js.map +1 -1
  29. package/dist/views/Login.d.ts.map +1 -1
  30. package/dist/views/Login.js +66 -8
  31. package/dist/views/Login.js.map +1 -1
  32. package/dist/views/Settings.d.ts.map +1 -1
  33. package/dist/views/Settings.js +4 -112
  34. package/dist/views/Settings.js.map +1 -1
  35. package/dist/views/settings/AdminThemeCard.js +1 -1
  36. package/dist/views/settings/BrandPreviewCard.js +1 -1
  37. package/dist/views/settings/BrandingCard.d.ts.map +1 -1
  38. package/dist/views/settings/BrandingCard.js +34 -19
  39. package/dist/views/settings/BrandingCard.js.map +1 -1
  40. package/dist/views/settings/TypographyMotionCard.js +1 -1
  41. package/dist/views/settings/UpdatesTab.d.ts +6 -0
  42. package/dist/views/settings/UpdatesTab.d.ts.map +1 -0
  43. package/dist/views/settings/UpdatesTab.js +80 -0
  44. package/dist/views/settings/UpdatesTab.js.map +1 -0
  45. package/dist/views/settings/components.d.ts +20 -0
  46. package/dist/views/settings/components.d.ts.map +1 -1
  47. package/dist/views/settings/components.js +11 -0
  48. package/dist/views/settings/components.js.map +1 -1
  49. package/dist/views/settings/useUpdates.d.ts +67 -0
  50. package/dist/views/settings/useUpdates.d.ts.map +1 -0
  51. package/dist/views/settings/useUpdates.js +127 -0
  52. package/dist/views/settings/useUpdates.js.map +1 -0
  53. package/package.json +2 -2
  54. package/src/__tests__/layout/sidebar-brand.render.test.tsx +58 -0
  55. package/src/__tests__/views/appearance-settings.render.test.tsx +4 -4
  56. package/src/__tests__/views/login-branding.render.test.tsx +96 -0
  57. package/src/__tests__/views/login-mfa.render.test.tsx +7 -0
  58. package/src/__tests__/views/updates-tab.render.test.tsx +161 -0
  59. package/src/components/LogoPlaceholder.tsx +55 -0
  60. package/src/layout/Sidebar.tsx +14 -24
  61. package/src/views/Login.tsx +70 -9
  62. package/src/views/Settings.tsx +2 -438
  63. package/src/views/settings/AdminThemeCard.tsx +1 -1
  64. package/src/views/settings/BrandPreviewCard.tsx +1 -1
  65. package/src/views/settings/BrandingCard.tsx +179 -180
  66. package/src/views/settings/TypographyMotionCard.tsx +1 -1
  67. package/src/views/settings/UpdatesTab.tsx +545 -0
  68. package/src/views/settings/components.tsx +51 -0
  69. package/src/views/settings/useUpdates.ts +183 -0
@@ -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":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EACL,aAAa,EACb,WAAW,EACX,YAAY,EACZ,SAAS,EACT,OAAO,EACP,MAAM,EACN,MAAM,GACP,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AAE9B,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AAGtF,MAAM,WAAW,GAAG,yBAAyB,CAAA;AAE7C,SAAS,cAAc,CAAC,IAAa;IACnC,OAAO,IAAI,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,wBAAwB,CAAA;AACxE,CAAC;AAED,SAAS,SAAS,CAAC,EACjB,KAAK,EACL,MAAM,EACN,KAAK,EACL,MAAM,EACN,MAAM,EACN,WAAW,EACX,KAAK,EACL,MAAM,EACN,cAAc,EACd,OAAO,EACP,OAAO,EACP,QAAQ,EACR,QAAQ,GAeT;IACC,MAAM,QAAQ,GAAG,MAAM,CAAmB,IAAI,CAAC,CAAA;IAC/C,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAA;IAC5B,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IACnD,MAAM,SAAS,GAAG,cAAc,KAAK,KAAK,CAAA;IAC1C,MAAM,OAAO,GAAG,SAAS,KAAK,EAAE,CAAA;IAEhC,MAAM,SAAS,GAAG,CAChB,cACE,SAAS,EAAE,mFAAmF,cAAc,CAC1G,OAAO,CAAC,WAAW,CAAC,CACrB,IAAI,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,EAAE,iBAC5B,CAAC,KAAK,YAElB,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;QACZ,sEAAsE;QACtE,cACE,GAAG,EAAE,KAAK,CAAC,GAAG,EACd,GAAG,EAAE,GAAG,KAAK,UAAU,EACvB,SAAS,EAAC,sCAAsC,GAChD,CACH,CAAC,CAAC,CAAC,CACF,KAAC,SAAS,IAAC,IAAI,EAAE,EAAE,EAAE,SAAS,EAAC,uBAAuB,iBAAa,MAAM,GAAG,CAC7E,GACG,CACP,CAAA;IAED,MAAM,QAAQ,GAAG,CACf,8BACE,gBACE,GAAG,EAAE,QAAQ,EACb,EAAE,EAAE,OAAO,EACX,IAAI,EAAC,MAAM,EACX,MAAM,EAAE,MAAM,gBACF,KAAK,EACjB,SAAS,EAAC,SAAS,EACnB,QAAQ,EAAE,CAAC,OAAO,IAAI,SAAS,EAC/B,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;oBACd,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAA;oBAChC,IAAI,IAAI;wBAAE,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;oBAC/B,IAAI,QAAQ,CAAC,OAAO;wBAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,GAAG,EAAE,CAAA;gBACnD,CAAC,GACD,EACD,KAAK,IAAI,CACR,kBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAC9B,QAAQ,EAAE,CAAC,OAAO,EAClB,SAAS,EAAC,gLAAgL,gBAC9K,UAAU,KAAK,CAAC,WAAW,EAAE,EAAE,aAE3C,KAAC,MAAM,IAAC,IAAI,EAAE,EAAE,iBAAc,MAAM,GAAG,eAChC,CACV,EACD,kBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,EAAE,EACxC,QAAQ,EAAE,CAAC,OAAO,IAAI,SAAS,gBACnB,GAAG,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,EACpE,SAAS,EAAC,sLAAsL,aAE/L,SAAS,CAAC,CAAC,CAAC,CACX,KAAC,OAAO,IAAC,IAAI,EAAE,EAAE,EAAE,SAAS,EAAC,cAAc,iBAAa,MAAM,GAAG,CAClE,CAAC,CAAC,CAAC,CACF,KAAC,MAAM,IAAC,IAAI,EAAE,EAAE,iBAAc,MAAM,GAAG,CACxC,EACA,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,IACtB,IACR,CACJ,CAAA;IAED,OAAO,CACL,0BACE,KAAC,kBAAkB,IACjB,OAAO,EAAE,SAAS,EAClB,KAAK,EAAE,KAAK,EACZ,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,QAAQ,GACjB,EACD,OAAO,IAAI,CACV,aACE,SAAS,EAAC,oDAAoD,EAC9D,IAAI,EAAC,QAAQ,eACH,QAAQ,aAElB,KAAC,aAAa,IAAC,IAAI,EAAE,EAAE,EAAE,SAAS,EAAC,iBAAiB,iBAAa,MAAM,GAAG,OAAE,OAAO,IACjF,CACL,IACG,CACP,CAAA;AACH,CAAC;AAED,SAAS,sBAAsB,CAAC,EAC9B,IAAI,EACJ,OAAO,EACP,QAAQ,GAKT;IACC,OAAO,CACL,cACE,IAAI,EAAC,YAAY,gBACN,cAAc,EACzB,SAAS,EAAC,4DAA4D,YAGpE;YACE,CAAC,oBAAoB,EAAE,sBAAsB,CAAC;YAC9C,CAAC,kBAAkB,EAAE,mBAAmB,CAAC;SAE5C,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE;YACtB,MAAM,MAAM,GAAG,IAAI,KAAK,KAAK,CAAA;YAC7B,OAAO,CACL,iBAEE,IAAI,EAAC,QAAQ,EACb,IAAI,EAAC,OAAO,kBACE,MAAM,EACpB,QAAQ,EAAE,CAAC,OAAO,EAClB,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAC9B,SAAS,EAAE,iGACT,MAAM;oBACJ,CAAC,CAAC,mCAAmC;oBACrC,CAAC,CAAC,6CACN,EAAE,YAED,IAAI,IAZA,KAAK,CAaH,CACV,CAAA;QACH,CAAC,CAAC,GACE,CACP,CAAA;AACH,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,EAAE,CAAC,EAAE,OAAO,EAAkD;IACzF,MAAM,UAAU,GAAG,CAAC,KAAsB,EAAsB,EAAE,CAChE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,IAAI,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,EAAE,OAAO,CAAA;IAE9E,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,kBAAkB,CAAA;IAElD,MAAM,cAAc,GAAG;QACrB,MAAM,EAAE,WAAW;QACnB,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,cAAc,EAAE,CAAC,CAAC,cAAc;QAChC,OAAO;QACP,QAAQ,EAAE,CAAC,CAAC,WAAW;QACvB,QAAQ,EAAE,CAAC,CAAC,WAAW;KACxB,CAAA;IAED,OAAO,CACL,MAAC,YAAY,IACX,KAAK,EAAC,UAAU,EAChB,WAAW,EAAC,0DAA0D,aAEtE,eAAK,SAAS,EAAC,WAAW,aACxB,KAAC,SAAS,IACR,KAAK,EAAC,cAAc,EACpB,MAAM,EAAC,2EAA2E,EAClF,KAAK,EAAC,0BAA0B,EAChC,OAAO,EAAE,UAAU,CAAC,0BAA0B,CAAC,KAC3C,cAAc,GAClB,EAEF,KAAC,SAAS,IACR,KAAK,EAAC,2BAA2B,EACjC,MAAM,EAAC,qFAA2E,EAClF,KAAK,EAAC,sBAAsB,EAC5B,MAAM,QACN,OAAO,EAAE,UAAU,CAAC,sBAAsB,CAAC,KACvC,cAAc,GAClB,EAGF,eAAK,SAAS,EAAC,6BAA6B,aAC1C,kBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,mBAClC,CAAC,CAAC,YAAY,EAC7B,SAAS,EAAC,yGAAyG,aAElH,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAChB,KAAC,WAAW,IAAC,IAAI,EAAE,EAAE,iBAAc,MAAM,GAAG,CAC7C,CAAC,CAAC,CAAC,CACF,KAAC,YAAY,IAAC,IAAI,EAAE,EAAE,iBAAc,MAAM,GAAG,CAC9C,8BAEM,EAER,CAAC,CAAC,YAAY,IAAI,CACjB,eAAK,SAAS,EAAC,gBAAgB,aAC7B,KAAC,SAAS,IACR,KAAK,EAAC,WAAW,EACjB,MAAM,EAAC,iFAAiF,EACxF,KAAK,EAAC,uBAAuB,EAC7B,MAAM,QACN,OAAO,EAAE,UAAU,CAAC,uBAAuB,CAAC,KACxC,cAAc,GAClB,EACF,KAAC,SAAS,IACR,KAAK,EAAC,gBAAgB,EACtB,MAAM,EAAC,6DAA6D,EACpE,KAAK,EAAC,uBAAuB,EAC7B,WAAW,QACX,OAAO,EAAE,UAAU,CAAC,uBAAuB,CAAC,KACxC,cAAc,GAClB,IACE,CACP,IACG,EAGN,KAAC,kBAAkB,IACjB,KAAK,EAAC,gBAAgB,EACtB,WAAW,EAAC,0FAA0F,YAEtG,eAAK,SAAS,EAAC,gBAAgB,aAC7B,KAAC,kBAAkB,IACjB,KAAK,EAAC,cAAc,EACpB,WAAW,EAAC,2EAA2E,EACvF,OAAO,EACL,KAAC,sBAAsB,IACrB,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,EAClB,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,CAAC,CAAC,eAAe,GAC3B,GAEJ,EAED,MAAM,IAAI,CACT,eAAK,SAAS,EAAC,WAAW,aACxB,KAAC,SAAS,IACR,KAAK,EAAC,oBAAoB,EAC1B,MAAM,EAAC,wDAAwD,EAC/D,KAAK,EAAC,yBAAyB,EAC/B,OAAO,EAAE,UAAU,CAAC,yBAAyB,CAAC,KAC1C,cAAc,GAClB,EACF,KAAC,SAAS,IACR,KAAK,EAAC,iBAAiB,EACvB,MAAM,EAAC,8CAA8C,EACrD,KAAK,EAAC,sBAAsB,EAC5B,MAAM,QACN,OAAO,EAAE,UAAU,CAAC,sBAAsB,CAAC,KACvC,cAAc,GAClB,IACE,CACP,IACG,GACa,EAGrB,eAAK,SAAS,EAAC,6BAA6B,aAC1C,gBAAO,OAAO,EAAC,WAAW,EAAC,SAAS,EAAC,6CAA6C,8BAE1E,EACR,YAAG,SAAS,EAAC,2CAA2C,kGAEpD,EACJ,gBACE,EAAE,EAAC,WAAW,EACd,IAAI,EAAC,MAAM,EACX,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,kBAAkB,IAAI,EAAE,EACvC,QAAQ,EAAE,CAAC,OAAO,EAClB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAC7C,WAAW,EAAC,YAAY,EACxB,SAAS,EAAC,qMAAqM,GAC/M,IACE,IACF,EAEL,CAAC,CAAC,SAAS,IAAI,CACd,YAAG,SAAS,EAAC,+BAA+B,EAAC,IAAI,EAAC,OAAO,YACtD,CAAC,CAAC,SAAS,GACV,CACL,IACY,CAChB,CAAA;AACH,CAAC"}
@@ -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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"}
@@ -30,6 +30,26 @@ export declare function SettingsSubsection({ title, description, children, class
30
30
  children?: ReactNode;
31
31
  className?: string;
32
32
  }): import("react/jsx-runtime").JSX.Element;
33
+ /**
34
+ * A single setting row: an optional leading visual plus a label and
35
+ * description on the left, and a control aligned to the right edge. This is the
36
+ * uniform rhythm for compact controls (upload buttons, segmented toggles)
37
+ * inside a {@link SettingsCard} — mirror it everywhere so rows line up instead
38
+ * of stacking controls beneath their copy.
39
+ */
40
+ export declare function SettingsControlRow({ label, description, control, leading, htmlFor, align, className, }: {
41
+ label: ReactNode;
42
+ description?: ReactNode;
43
+ /** Right-aligned control(s) for this row. */
44
+ control: ReactNode;
45
+ /** Optional visual (e.g. a logo thumbnail) shown before the label. */
46
+ leading?: ReactNode;
47
+ /** When set, the label renders as a `<label>` bound to this control id. */
48
+ htmlFor?: string;
49
+ /** Vertical alignment of the two columns. Defaults to centered. */
50
+ align?: 'center' | 'start';
51
+ className?: string;
52
+ }): import("react/jsx-runtime").JSX.Element;
33
53
  /** Small badge showing where a setting's value comes from. */
34
54
  export declare function SettingsSourceBadge({ meta }: {
35
55
  meta?: SettingsSourceMetadata;
@@ -1 +1 @@
1
- {"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../../../src/views/settings/components.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAS,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAC7C,OAAO,KAAK,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAEtF;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,WAAW,EACX,OAAO,EACP,QAAQ,EACR,SAAS,EACT,YAAY,EAAE,OAAc,GAC7B,EAAE;IACD,KAAK,EAAE,SAAS,CAAA;IAChB,WAAW,CAAC,EAAE,SAAS,CAAA;IACvB,2EAA2E;IAC3E,OAAO,CAAC,EAAE,SAAS,CAAA;IACnB,QAAQ,EAAE,SAAS,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,yEAAyE;IACzE,YAAY,CAAC,EAAE,IAAI,GAAG,IAAI,CAAA;CAC3B,2CAmBA;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,KAAK,EACL,WAAW,EACX,QAAQ,EACR,SAAS,GACV,EAAE;IACD,KAAK,EAAE,SAAS,CAAA;IAChB,WAAW,CAAC,EAAE,SAAS,CAAA;IACvB,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,2CAQA;AAUD,8DAA8D;AAC9D,wBAAgB,mBAAmB,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,CAAC,EAAE,sBAAsB,CAAA;CAAE,kDAY9E;AAED,yEAAyE;AACzE,wBAAgB,iBAAiB,CAAC,EAChC,KAAK,EACL,WAAW,EACX,OAAO,EACP,QAAQ,EACR,QAAgB,EAChB,KAAK,GACN,EAAE;IACD,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,OAAO,CAAA;IAChB,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;IAClC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,KAAK,CAAC,EAAE,SAAS,CAAA;CAClB,2CA6BA;AAED,4DAA4D;AAC5D,wBAAgB,yBAAyB,CAAC,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,EAAE,eAAe,EAAE,CAAA;CAAE,kDAuBlF;AAED,6DAA6D;AAC7D,wBAAgB,eAAe,CAAC,EAC9B,KAAK,EACL,OAAO,EACP,SAAS,EACT,SAAS,EACT,MAAM,EACN,OAAO,GACR,EAAE;IACD,KAAK,EAAE,OAAO,CAAA;IACd,OAAO,EAAE,OAAO,CAAA;IAChB,SAAS,EAAE,OAAO,CAAA;IAClB,SAAS,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,CAAA;IAClD,MAAM,EAAE,MAAM,IAAI,CAAA;IAClB,OAAO,EAAE,MAAM,IAAI,CAAA;CACpB,2CA4BA;AAED,0DAA0D;AAC1D,wBAAgB,6BAA6B,CAAC,EAC5C,IAAI,EACJ,KAAK,EACL,WAAW,EACX,YAAyB,EACzB,SAAS,EACT,QAAQ,GACT,EAAE;IACD,IAAI,EAAE,OAAO,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,SAAS,EAAE,MAAM,IAAI,CAAA;IACrB,QAAQ,EAAE,MAAM,IAAI,CAAA;CACrB,2CAmCA"}
1
+ {"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../../../src/views/settings/components.tsx"],"names":[],"mappings":"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"}
@@ -24,6 +24,17 @@ export function SettingsCard({ title, description, actions, children, className,
24
24
  export function SettingsSubsection({ title, description, children, className, }) {
25
25
  return (_jsxs("div", { className: `border-border border-t pt-4 ${className ?? ''}`, children: [_jsx("div", { className: "text-foreground text-base font-medium", children: title }), description && _jsx("p", { className: "text-muted-foreground mt-0.5 text-sm", children: description }), children] }));
26
26
  }
27
+ /**
28
+ * A single setting row: an optional leading visual plus a label and
29
+ * description on the left, and a control aligned to the right edge. This is the
30
+ * uniform rhythm for compact controls (upload buttons, segmented toggles)
31
+ * inside a {@link SettingsCard} — mirror it everywhere so rows line up instead
32
+ * of stacking controls beneath their copy.
33
+ */
34
+ export function SettingsControlRow({ label, description, control, leading, htmlFor, align = 'center', className, }) {
35
+ const labelClass = 'text-foreground block text-base font-medium';
36
+ return (_jsxs("div", { className: `flex justify-between gap-4 ${align === 'center' ? 'items-center' : 'items-start'} ${className ?? ''}`, children: [_jsxs("div", { className: "flex min-w-0 items-center gap-4", children: [leading, _jsxs("div", { className: "min-w-0", children: [htmlFor ? (_jsx("label", { htmlFor: htmlFor, className: labelClass, children: label })) : (_jsx("span", { className: labelClass, children: label })), description && _jsx("p", { className: "text-muted-foreground mt-0.5 text-sm", children: description })] })] }), _jsx("div", { className: "flex shrink-0 items-center gap-2", children: control })] }));
37
+ }
27
38
  const SOURCE_LABEL = {
28
39
  config: 'Config-managed',
29
40
  environment: 'Environment-managed',
@@ -1 +1 @@
1
- {"version":3,"file":"components.js","sourceRoot":"","sources":["../../../src/views/settings/components.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"components.js","sourceRoot":"","sources":["../../../src/views/settings/components.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ export type UpdateChangeType = 'feature' | 'fix' | 'improvement' | 'breaking' | 'security' | 'deprecation';
2
+ export interface UpdateChangelogItem {
3
+ version: string;
4
+ date: string;
5
+ summary: string;
6
+ type?: UpdateChangeType;
7
+ }
8
+ export interface UpdatePluginCompatibility {
9
+ name: string;
10
+ compatible: boolean;
11
+ minVersion?: string;
12
+ }
13
+ export interface UpdateInfo {
14
+ current: string;
15
+ latest: string;
16
+ updateAvailable: boolean;
17
+ severity?: 'patch' | 'minor' | 'major' | 'security';
18
+ releaseDate?: string;
19
+ changelog?: UpdateChangelogItem[];
20
+ updateCommand?: string;
21
+ breakingChanges?: string[];
22
+ hasMigrations?: boolean;
23
+ pluginCompatibility?: UpdatePluginCompatibility[];
24
+ source?: 'update-server' | 'npm';
25
+ /** Whether the current session may manage updates (admin/owner). */
26
+ canManage?: boolean;
27
+ hasGithubToken?: boolean;
28
+ githubRepo?: string;
29
+ }
30
+ interface GithubForm {
31
+ githubRepo: string;
32
+ githubToken: string;
33
+ }
34
+ /** Admin/Owner may manage updates (matches the server's `requireAdminScope`). */
35
+ export declare function canManageUpdates(role: string | null | undefined): boolean;
36
+ /**
37
+ * State + actions for the Settings → Updates tab. Owns the update-status check,
38
+ * the GitHub-integration config form (with dirty tracking for the shared save
39
+ * bar), and the "Create Update PR" action. All writes are gated on `canManage`,
40
+ * which the server confirms in the check response.
41
+ */
42
+ export declare function useUpdates({ role }: {
43
+ role?: string;
44
+ }): {
45
+ info: UpdateInfo | null;
46
+ checking: boolean;
47
+ hasChecked: boolean;
48
+ error: string;
49
+ applying: boolean;
50
+ prResult: {
51
+ prUrl: string;
52
+ prNumber: number;
53
+ } | null;
54
+ canManage: boolean;
55
+ form: GithubForm;
56
+ setField: (key: keyof GithubForm, value: string) => void;
57
+ dirty: boolean;
58
+ repoError: string;
59
+ hasErrors: boolean;
60
+ saveState: "error" | "success" | "idle" | "saving";
61
+ save: () => Promise<void>;
62
+ reset: () => void;
63
+ check: () => Promise<void>;
64
+ apply: () => Promise<void>;
65
+ };
66
+ export {};
67
+ //# sourceMappingURL=useUpdates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useUpdates.d.ts","sourceRoot":"","sources":["../../../src/views/settings/useUpdates.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,gBAAgB,GACxB,SAAS,GACT,KAAK,GACL,aAAa,GACb,UAAU,GACV,UAAU,GACV,aAAa,CAAA;AAEjB,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,gBAAgB,CAAA;CACxB;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,OAAO,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,eAAe,EAAE,OAAO,CAAA;IACxB,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,CAAA;IACnD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,mBAAmB,EAAE,CAAA;IACjC,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;IAC1B,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,mBAAmB,CAAC,EAAE,yBAAyB,EAAE,CAAA;IACjD,MAAM,CAAC,EAAE,eAAe,GAAG,KAAK,CAAA;IAChC,oEAAoE;IACpE,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,UAAU,UAAU;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;CACpB;AAID,iFAAiF;AACjF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAGzE;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE;;;;;;;eAMF,MAAM;kBAAY,MAAM;;;;oBAqCvC,MAAM,UAAU,SAAS,MAAM;;;;;;;;;EA0EnE"}
@@ -0,0 +1,127 @@
1
+ 'use client';
2
+ import { useCallback, useEffect, useState } from 'react';
3
+ import { toast } from 'sonner';
4
+ import { cmsApi } from '../../lib/api.js';
5
+ const REPO_PATTERN = /^[a-zA-Z0-9._-]+\/[a-zA-Z0-9._-]+$/;
6
+ /** Admin/Owner may manage updates (matches the server's `requireAdminScope`). */
7
+ export function canManageUpdates(role) {
8
+ const r = (role ?? '').toUpperCase();
9
+ return r === 'ADMIN' || r === 'OWNER';
10
+ }
11
+ /**
12
+ * State + actions for the Settings → Updates tab. Owns the update-status check,
13
+ * the GitHub-integration config form (with dirty tracking for the shared save
14
+ * bar), and the "Create Update PR" action. All writes are gated on `canManage`,
15
+ * which the server confirms in the check response.
16
+ */
17
+ export function useUpdates({ role }) {
18
+ const [info, setInfo] = useState(null);
19
+ const [checking, setChecking] = useState(false);
20
+ const [hasChecked, setHasChecked] = useState(false);
21
+ const [error, setError] = useState('');
22
+ const [applying, setApplying] = useState(false);
23
+ const [prResult, setPrResult] = useState(null);
24
+ const [form, setForm] = useState({ githubRepo: '', githubToken: '' });
25
+ const [baseline, setBaseline] = useState({ githubRepo: '', githubToken: '' });
26
+ const [saveState, setSaveState] = useState('idle');
27
+ // Optimistic until the check response confirms the server-side permission.
28
+ const canManage = info?.canManage ?? canManageUpdates(role);
29
+ const check = useCallback(async () => {
30
+ setChecking(true);
31
+ setError('');
32
+ setPrResult(null);
33
+ const res = await cmsApi('/updates/check');
34
+ if (res.error) {
35
+ setError(res.error);
36
+ }
37
+ else if (res.data) {
38
+ setInfo(res.data);
39
+ const repo = res.data.githubRepo ?? '';
40
+ setForm({ githubRepo: repo, githubToken: '' });
41
+ setBaseline({ githubRepo: repo, githubToken: '' });
42
+ }
43
+ setChecking(false);
44
+ setHasChecked(true);
45
+ }, []);
46
+ useEffect(() => {
47
+ check();
48
+ }, [check]);
49
+ const repoError = form.githubRepo.trim() && !REPO_PATTERN.test(form.githubRepo.trim())
50
+ ? 'Use the owner/repo format (e.g. actuate-media/my-site).'
51
+ : '';
52
+ const hasErrors = Boolean(repoError);
53
+ const dirty = form.githubRepo !== baseline.githubRepo || form.githubToken.trim() !== '';
54
+ const setField = useCallback((key, value) => {
55
+ setForm((f) => ({ ...f, [key]: value }));
56
+ setSaveState('idle');
57
+ }, []);
58
+ const save = useCallback(async () => {
59
+ if (hasErrors || !dirty)
60
+ return;
61
+ setSaveState('saving');
62
+ const body = {};
63
+ if (form.githubToken.trim())
64
+ body.githubToken = form.githubToken.trim();
65
+ if (form.githubRepo.trim())
66
+ body.githubRepo = form.githubRepo.trim();
67
+ const res = await cmsApi('/updates/config', { method: 'PUT', body: JSON.stringify(body) });
68
+ if (res.error) {
69
+ setSaveState('error');
70
+ toast.error(res.error);
71
+ return;
72
+ }
73
+ setSaveState('success');
74
+ toast.success('GitHub configuration saved and encrypted.');
75
+ const savedRepo = form.githubRepo.trim();
76
+ setBaseline({ githubRepo: savedRepo, githubToken: '' });
77
+ setForm({ githubRepo: savedRepo, githubToken: '' });
78
+ setInfo((prev) => prev
79
+ ? {
80
+ ...prev,
81
+ githubRepo: savedRepo,
82
+ hasGithubToken: prev.hasGithubToken || Boolean(body.githubToken),
83
+ }
84
+ : prev);
85
+ }, [dirty, form.githubRepo, form.githubToken, hasErrors]);
86
+ const reset = useCallback(() => {
87
+ setForm({ ...baseline });
88
+ setSaveState('idle');
89
+ }, [baseline]);
90
+ const apply = useCallback(async () => {
91
+ if (!info?.latest || !canManage)
92
+ return;
93
+ setApplying(true);
94
+ const res = await cmsApi('/updates/apply', {
95
+ method: 'POST',
96
+ body: JSON.stringify({ targetVersion: info.latest }),
97
+ });
98
+ if (res.error) {
99
+ toast.error(res.error);
100
+ }
101
+ else if (res.data) {
102
+ setPrResult(res.data);
103
+ toast.success('Update PR created.');
104
+ }
105
+ setApplying(false);
106
+ }, [info, canManage]);
107
+ return {
108
+ info,
109
+ checking,
110
+ hasChecked,
111
+ error,
112
+ applying,
113
+ prResult,
114
+ canManage,
115
+ form,
116
+ setField,
117
+ dirty,
118
+ repoError,
119
+ hasErrors,
120
+ saveState,
121
+ save,
122
+ reset,
123
+ check,
124
+ apply,
125
+ };
126
+ }
127
+ //# sourceMappingURL=useUpdates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useUpdates.js","sourceRoot":"","sources":["../../../src/views/settings/useUpdates.ts"],"names":[],"mappings":"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"}