@actuate-media/cms-admin 0.24.0 → 0.26.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AdminRoot.d.ts.map +1 -1
- package/dist/AdminRoot.js +3 -3
- package/dist/AdminRoot.js.map +1 -1
- package/dist/__tests__/views/general-settings.render.test.d.ts +2 -0
- package/dist/__tests__/views/general-settings.render.test.d.ts.map +1 -0
- package/dist/__tests__/views/general-settings.render.test.js +105 -0
- package/dist/__tests__/views/general-settings.render.test.js.map +1 -0
- package/dist/__tests__/views/page-builder-block-renderer.render.test.d.ts +2 -0
- package/dist/__tests__/views/page-builder-block-renderer.render.test.d.ts.map +1 -0
- package/dist/__tests__/views/page-builder-block-renderer.render.test.js +48 -0
- package/dist/__tests__/views/page-builder-block-renderer.render.test.js.map +1 -0
- package/dist/__tests__/views/page-builder-form-picker.render.test.d.ts +2 -0
- package/dist/__tests__/views/page-builder-form-picker.render.test.d.ts.map +1 -0
- package/dist/__tests__/views/page-builder-form-picker.render.test.js +44 -0
- package/dist/__tests__/views/page-builder-form-picker.render.test.js.map +1 -0
- package/dist/actuate-admin.css +1 -1
- package/dist/views/Settings.d.ts +3 -1
- package/dist/views/Settings.d.ts.map +1 -1
- package/dist/views/Settings.js +9 -28
- package/dist/views/Settings.js.map +1 -1
- package/dist/views/page-builder/BlockEditor.d.ts.map +1 -1
- package/dist/views/page-builder/BlockEditor.js +2 -1
- package/dist/views/page-builder/BlockEditor.js.map +1 -1
- package/dist/views/page-builder/RelationshipField.d.ts +15 -0
- package/dist/views/page-builder/RelationshipField.d.ts.map +1 -0
- package/dist/views/page-builder/RelationshipField.js +65 -0
- package/dist/views/page-builder/RelationshipField.js.map +1 -0
- package/dist/views/page-builder/block-renderers/FormPreview.d.ts +6 -0
- package/dist/views/page-builder/block-renderers/FormPreview.d.ts.map +1 -1
- package/dist/views/page-builder/block-renderers/FormPreview.js +44 -6
- package/dist/views/page-builder/block-renderers/FormPreview.js.map +1 -1
- package/dist/views/page-builder/canvas/BlockRenderer.d.ts.map +1 -1
- package/dist/views/page-builder/canvas/BlockRenderer.js +3 -9
- package/dist/views/page-builder/canvas/BlockRenderer.js.map +1 -1
- package/dist/views/settings/GeneralSettingsTab.d.ts +7 -0
- package/dist/views/settings/GeneralSettingsTab.d.ts.map +1 -0
- package/dist/views/settings/GeneralSettingsTab.js +19 -0
- package/dist/views/settings/GeneralSettingsTab.js.map +1 -0
- package/dist/views/settings/LanguageRegionCard.d.ts +10 -0
- package/dist/views/settings/LanguageRegionCard.d.ts.map +1 -0
- package/dist/views/settings/LanguageRegionCard.js +48 -0
- package/dist/views/settings/LanguageRegionCard.js.map +1 -0
- package/dist/views/settings/SeoRobotsDefaultsCard.d.ts +12 -0
- package/dist/views/settings/SeoRobotsDefaultsCard.d.ts.map +1 -0
- package/dist/views/settings/SeoRobotsDefaultsCard.js +45 -0
- package/dist/views/settings/SeoRobotsDefaultsCard.js.map +1 -0
- package/dist/views/settings/SiteIndexStatusCard.d.ts +12 -0
- package/dist/views/settings/SiteIndexStatusCard.d.ts.map +1 -0
- package/dist/views/settings/SiteIndexStatusCard.js +51 -0
- package/dist/views/settings/SiteIndexStatusCard.js.map +1 -0
- package/dist/views/settings/SiteInformationCard.d.ts +11 -0
- package/dist/views/settings/SiteInformationCard.d.ts.map +1 -0
- package/dist/views/settings/SiteInformationCard.js +21 -0
- package/dist/views/settings/SiteInformationCard.js.map +1 -0
- package/dist/views/settings/components.d.ts +38 -0
- package/dist/views/settings/components.d.ts.map +1 -0
- package/dist/views/settings/components.js +43 -0
- package/dist/views/settings/components.js.map +1 -0
- package/dist/views/settings/useGeneralSettings.d.ts +79 -0
- package/dist/views/settings/useGeneralSettings.d.ts.map +1 -0
- package/dist/views/settings/useGeneralSettings.js +286 -0
- package/dist/views/settings/useGeneralSettings.js.map +1 -0
- package/package.json +3 -3
- package/src/AdminRoot.tsx +5 -3
- package/src/__tests__/views/general-settings.render.test.tsx +135 -0
- package/src/__tests__/views/page-builder-block-renderer.render.test.tsx +66 -0
- package/src/__tests__/views/page-builder-form-picker.render.test.tsx +54 -0
- package/src/views/Settings.tsx +17 -120
- package/src/views/page-builder/BlockEditor.tsx +7 -10
- package/src/views/page-builder/RelationshipField.tsx +113 -0
- package/src/views/page-builder/block-renderers/FormPreview.tsx +85 -33
- package/src/views/page-builder/canvas/BlockRenderer.tsx +10 -12
- package/src/views/settings/GeneralSettingsTab.tsx +126 -0
- package/src/views/settings/LanguageRegionCard.tsx +119 -0
- package/src/views/settings/SeoRobotsDefaultsCard.tsx +149 -0
- package/src/views/settings/SiteIndexStatusCard.tsx +184 -0
- package/src/views/settings/SiteInformationCard.tsx +122 -0
- package/src/views/settings/components.tsx +198 -0
- package/src/views/settings/useGeneralSettings.ts +376 -0
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useId, useState } from 'react';
|
|
4
|
+
import { ConfirmDangerousSettingDialog, SettingsToggleRow } from './components.js';
|
|
5
|
+
export function SeoRobotsDefaultsCard({ form, setField, isProduction, indexStatus, canEdit, onNavigate, }) {
|
|
6
|
+
const headingId = useId();
|
|
7
|
+
const [pending, setPending] = useState(null);
|
|
8
|
+
// Some toggles can take the whole production site out of search results, so
|
|
9
|
+
// they route through a confirmation step before being applied.
|
|
10
|
+
function requestToggle(field, value) {
|
|
11
|
+
if (field === 'defaultNoIndex' && value && isProduction) {
|
|
12
|
+
setPending({
|
|
13
|
+
field,
|
|
14
|
+
value,
|
|
15
|
+
title: 'Block this production site from search engines?',
|
|
16
|
+
description: 'This may prevent search engines from indexing your production site. Pages will be served with a noindex directive unless they explicitly opt in.',
|
|
17
|
+
confirmLabel: 'Enable No Index',
|
|
18
|
+
});
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
if (field === 'noIndexNonProduction' && !value) {
|
|
22
|
+
setPending({
|
|
23
|
+
field,
|
|
24
|
+
value,
|
|
25
|
+
title: 'Allow non-production environments to be indexed?',
|
|
26
|
+
description: 'Preview and staging environments may become indexable if publicly accessible. Search engines could index unfinished content.',
|
|
27
|
+
confirmLabel: 'Turn Off',
|
|
28
|
+
});
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
setField(field, value);
|
|
32
|
+
}
|
|
33
|
+
const effectiveProd = form.defaultNoIndex ? 'Blocked' : 'Indexable';
|
|
34
|
+
const sitemapCheck = indexStatus?.checks.find((c) => c.key === 'sitemap');
|
|
35
|
+
const sitemapStatus = sitemapCheck ? (sitemapCheck.value === 'Yes' ? 'Enabled' : 'Disabled') : '—';
|
|
36
|
+
return (_jsxs("section", { "aria-labelledby": headingId, className: "border-border bg-card rounded-lg border p-4", children: [_jsx("h3", { id: headingId, className: "text-foreground mb-1 text-base font-medium", children: "SEO & Robots Defaults" }), _jsx("p", { className: "text-muted-foreground mb-4 text-sm", children: "Set the site-wide default for search engine indexing. Individual pages can inherit or override these rules in their SEO panel. These share the same configuration as the SEO section." }), _jsxs("div", { className: "space-y-4", children: [_jsx(SettingsToggleRow, { label: "Default No Index", description: "Ask search engines not to index pages unless a page explicitly allows indexing.", checked: form.defaultNoIndex, disabled: !canEdit, onChange: (v) => requestToggle('defaultNoIndex', v) }), _jsx(SettingsToggleRow, { label: "Default No Follow", description: "Ask search engines not to follow page links unless a page explicitly allows following.", checked: form.defaultNoFollow, disabled: !canEdit, onChange: (v) => requestToggle('defaultNoFollow', v) }), _jsx(SettingsToggleRow, { label: "Noindex Non-Production Environments", description: "Force noindex when the deployed environment is not production.", checked: form.noIndexNonProduction, disabled: !canEdit, onChange: (v) => requestToggle('noIndexNonProduction', v) })] }), _jsxs("div", { className: "border-border mt-4 space-y-2 border-t pt-4", children: [_jsx(SummaryRow, { label: "Effective production indexing", value: effectiveProd, danger: form.defaultNoIndex }), _jsx(SummaryRow, { label: "Effective current environment", value: indexStatus?.label ?? '—', danger: indexStatus?.severity === 'danger' }), _jsx(SummaryRow, { label: "Sitemap status", value: sitemapStatus }), onNavigate && (_jsx("button", { type: "button", onClick: () => onNavigate('/seo?tab=technical'), className: "text-brand mt-1 text-sm hover:underline", children: "Manage advanced robots.txt & sitemap in SEO \u2192" }))] }), _jsx(ConfirmDangerousSettingDialog, { open: pending !== null, title: pending?.title ?? '', description: pending?.description ?? '', confirmLabel: pending?.confirmLabel, onConfirm: () => {
|
|
37
|
+
if (pending)
|
|
38
|
+
setField(pending.field, pending.value);
|
|
39
|
+
setPending(null);
|
|
40
|
+
}, onCancel: () => setPending(null) })] }));
|
|
41
|
+
}
|
|
42
|
+
function SummaryRow({ label, value, danger }) {
|
|
43
|
+
return (_jsxs("div", { className: "flex items-center justify-between gap-2 text-sm", children: [_jsx("span", { className: "text-muted-foreground", children: label }), _jsx("span", { className: danger ? 'text-destructive font-medium' : 'text-foreground font-medium', children: value })] }));
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=SeoRobotsDefaultsCard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SeoRobotsDefaultsCard.js","sourceRoot":"","sources":["../../../src/views/settings/SeoRobotsDefaultsCard.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { SiteIndexStatus } from './useGeneralSettings.js';
|
|
2
|
+
interface SiteIndexStatusCardProps {
|
|
3
|
+
status: SiteIndexStatus | null;
|
|
4
|
+
loading: boolean;
|
|
5
|
+
/** Resolve an action href relative to the admin (e.g. /seo?tab=audit). */
|
|
6
|
+
onNavigate?: (path: string) => void;
|
|
7
|
+
/** Trigger the SEO audit flow when an action declares `action: run_seo_audit`. */
|
|
8
|
+
onRunAudit?: () => void;
|
|
9
|
+
}
|
|
10
|
+
export declare function SiteIndexStatusCard({ status, loading, onNavigate, onRunAudit, }: SiteIndexStatusCardProps): import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=SiteIndexStatusCard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SiteIndexStatusCard.d.ts","sourceRoot":"","sources":["../../../src/views/settings/SiteIndexStatusCard.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAE9D,UAAU,wBAAwB;IAChC,MAAM,EAAE,eAAe,GAAG,IAAI,CAAA;IAC9B,OAAO,EAAE,OAAO,CAAA;IAChB,0EAA0E;IAC1E,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IACnC,kFAAkF;IAClF,UAAU,CAAC,EAAE,MAAM,IAAI,CAAA;CACxB;AAmCD,wBAAgB,mBAAmB,CAAC,EAClC,MAAM,EACN,OAAO,EACP,UAAU,EACV,UAAU,GACX,EAAE,wBAAwB,2CAuE1B"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import { CheckCircle2, XCircle, AlertTriangle, HelpCircle, ShieldCheck, ExternalLink, Search, } from 'lucide-react';
|
|
4
|
+
const SEVERITY_STYLES = {
|
|
5
|
+
success: {
|
|
6
|
+
pill: 'bg-success/15 text-success border-success/30',
|
|
7
|
+
icon: _jsx(CheckCircle2, { size: 14, "aria-hidden": "true" }),
|
|
8
|
+
},
|
|
9
|
+
warning: {
|
|
10
|
+
pill: 'bg-warning/15 text-warning border-warning/30',
|
|
11
|
+
icon: _jsx(AlertTriangle, { size: 14, "aria-hidden": "true" }),
|
|
12
|
+
},
|
|
13
|
+
danger: {
|
|
14
|
+
pill: 'bg-destructive/10 text-destructive border-destructive/30',
|
|
15
|
+
icon: _jsx(XCircle, { size: 14, "aria-hidden": "true" }),
|
|
16
|
+
},
|
|
17
|
+
neutral: {
|
|
18
|
+
pill: 'bg-muted text-muted-foreground border-border',
|
|
19
|
+
icon: _jsx(HelpCircle, { size: 14, "aria-hidden": "true" }),
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
const CHECK_ICON = {
|
|
23
|
+
pass: _jsx(CheckCircle2, { size: 14, className: "text-success", "aria-hidden": "true" }),
|
|
24
|
+
warning: _jsx(AlertTriangle, { size: 14, className: "text-warning", "aria-hidden": "true" }),
|
|
25
|
+
fail: _jsx(XCircle, { size: 14, className: "text-destructive", "aria-hidden": "true" }),
|
|
26
|
+
unknown: _jsx(HelpCircle, { size: 14, className: "text-muted-foreground", "aria-hidden": "true" }),
|
|
27
|
+
};
|
|
28
|
+
const CHECK_SR = {
|
|
29
|
+
pass: 'OK',
|
|
30
|
+
warning: 'Warning',
|
|
31
|
+
fail: 'Problem',
|
|
32
|
+
unknown: 'Unknown',
|
|
33
|
+
};
|
|
34
|
+
export function SiteIndexStatusCard({ status, loading, onNavigate, onRunAudit, }) {
|
|
35
|
+
return (_jsxs("section", { "aria-labelledby": "site-index-status-heading", className: "border-border bg-card rounded-lg border p-4", children: [_jsxs("div", { className: "mb-3 flex items-start justify-between gap-3", children: [_jsxs("div", { className: "flex items-start gap-2", children: [_jsx(ShieldCheck, { size: 18, className: "text-muted-foreground mt-0.5", "aria-hidden": "true" }), _jsxs("div", { children: [_jsx("h3", { id: "site-index-status-heading", className: "text-foreground text-base font-medium", children: "Site Index Status" }), _jsx("p", { className: "text-muted-foreground text-sm", children: "Current effective crawl and indexing state" })] })] }), status && (_jsxs("span", { className: `inline-flex items-center gap-1.5 rounded-full border px-2.5 py-1 text-xs font-medium ${SEVERITY_STYLES[status.severity].pill}`, children: [SEVERITY_STYLES[status.severity].icon, _jsx("span", { className: "sr-only", children: "Status: " }), status.label] }))] }), loading && !status ? (_jsxs("div", { className: "space-y-2", "aria-hidden": "true", children: [_jsx("div", { className: "bg-muted h-4 w-2/3 animate-pulse rounded" }), _jsx("div", { className: "bg-muted h-20 w-full animate-pulse rounded" })] })) : !status ? (_jsx("p", { className: "text-muted-foreground text-sm", children: "Index status is unavailable." })) : (_jsxs(_Fragment, { children: [_jsx("p", { className: "text-muted-foreground mb-3 text-sm", children: status.description }), _jsx("dl", { className: "border-border grid grid-cols-1 gap-x-6 gap-y-2 rounded-md border p-3 sm:grid-cols-2", children: status.checks.map((check) => (_jsxs("div", { className: "flex items-center justify-between gap-2 text-sm", children: [_jsx("dt", { className: "text-muted-foreground", children: check.label }), _jsxs("dd", { className: "text-foreground flex items-center gap-1.5 font-medium", children: [_jsxs("span", { className: "sr-only", children: [CHECK_SR[check.status], ": "] }), CHECK_ICON[check.status], check.value] })] }, check.key))) }), status.actions.length > 0 && (_jsx("div", { className: "mt-3 flex flex-wrap gap-2", children: status.actions.map((action) => (_jsx(SiteIndexAction, { label: action.label, href: action.href, action: action.action, onNavigate: onNavigate, onRunAudit: onRunAudit }, action.label))) }))] }))] }));
|
|
36
|
+
}
|
|
37
|
+
function SiteIndexAction({ label, href, action, onNavigate, onRunAudit, }) {
|
|
38
|
+
const className = 'border-border text-foreground hover:bg-accent inline-flex items-center gap-1.5 rounded-md border px-2.5 py-1.5 text-sm transition-colors';
|
|
39
|
+
// The audit action stays in-app; robots/sitemap are real public URLs.
|
|
40
|
+
const isAudit = action === 'run_seo_audit';
|
|
41
|
+
const isAdminRoute = href?.startsWith('/seo');
|
|
42
|
+
const icon = isAudit ? (_jsx(Search, { size: 14, "aria-hidden": "true" })) : (_jsx(ExternalLink, { size: 14, "aria-hidden": "true" }));
|
|
43
|
+
if (isAudit && onRunAudit) {
|
|
44
|
+
return (_jsxs("button", { type: "button", onClick: onRunAudit, className: className, children: [icon, label] }));
|
|
45
|
+
}
|
|
46
|
+
if (isAdminRoute && onNavigate) {
|
|
47
|
+
return (_jsxs("button", { type: "button", onClick: () => onNavigate(href), className: className, children: [icon, label] }));
|
|
48
|
+
}
|
|
49
|
+
return (_jsxs("a", { href: href, target: "_blank", rel: "noopener noreferrer", className: className, children: [icon, label] }));
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=SiteIndexStatusCard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SiteIndexStatusCard.js","sourceRoot":"","sources":["../../../src/views/settings/SiteIndexStatusCard.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { GeneralSettingsForm, SettingsSourceMetadata, ValidationIssue } from './useGeneralSettings.js';
|
|
2
|
+
interface SiteInformationCardProps {
|
|
3
|
+
form: GeneralSettingsForm;
|
|
4
|
+
setField: <K extends keyof GeneralSettingsForm>(key: K, value: GeneralSettingsForm[K]) => void;
|
|
5
|
+
sources: Record<string, SettingsSourceMetadata>;
|
|
6
|
+
issues: ValidationIssue[];
|
|
7
|
+
canEdit: boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare function SiteInformationCard({ form, setField, sources, issues, canEdit, }: SiteInformationCardProps): import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=SiteInformationCard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SiteInformationCard.d.ts","sourceRoot":"","sources":["../../../src/views/settings/SiteInformationCard.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,mBAAmB,EACnB,sBAAsB,EACtB,eAAe,EAChB,MAAM,yBAAyB,CAAA;AAMhC,UAAU,wBAAwB;IAChC,IAAI,EAAE,mBAAmB,CAAA;IACzB,QAAQ,EAAE,CAAC,CAAC,SAAS,MAAM,mBAAmB,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,mBAAmB,CAAC,CAAC,CAAC,KAAK,IAAI,CAAA;IAC9F,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAA;IAC/C,MAAM,EAAE,eAAe,EAAE,CAAA;IACzB,OAAO,EAAE,OAAO,CAAA;CACjB;AAED,wBAAgB,mBAAmB,CAAC,EAClC,IAAI,EACJ,QAAQ,EACR,OAAO,EACP,MAAM,EACN,OAAO,GACR,EAAE,wBAAwB,2CA4F1B"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useId } from 'react';
|
|
4
|
+
import { CheckCircle2 } from 'lucide-react';
|
|
5
|
+
import { SettingsSourceBadge } from './components.js';
|
|
6
|
+
const INPUT_CLASS = '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 disabled:cursor-not-allowed disabled:opacity-60';
|
|
7
|
+
const LABEL_CLASS = 'mb-1 flex items-center gap-2 text-sm font-medium text-foreground';
|
|
8
|
+
export function SiteInformationCard({ form, setField, sources, issues, canEdit, }) {
|
|
9
|
+
const titleId = useId();
|
|
10
|
+
const taglineId = useId();
|
|
11
|
+
const urlId = useId();
|
|
12
|
+
const urlErrId = useId();
|
|
13
|
+
const titleIssue = issues.find((i) => i.field === 'siteTitle');
|
|
14
|
+
const urlIssue = issues.find((i) => i.field === 'siteUrl');
|
|
15
|
+
const urlEditable = sources.siteUrl?.editable !== false && canEdit;
|
|
16
|
+
const urlValid = !urlIssue && form.siteUrl.trim().length > 0;
|
|
17
|
+
return (_jsxs("section", { "aria-labelledby": `${titleId}-heading`, className: "border-border bg-card rounded-lg border p-4", children: [_jsx("h3", { id: `${titleId}-heading`, className: "text-foreground mb-4 text-base font-medium", children: "Site Information" }), _jsxs("div", { className: "space-y-4", children: [_jsxs("div", { children: [_jsx("label", { htmlFor: titleId, className: LABEL_CLASS, children: "Site Title" }), _jsx("input", { id: titleId, type: "text", value: form.siteTitle, disabled: !canEdit, "aria-invalid": titleIssue?.severity === 'error', onChange: (e) => setField('siteTitle', e.target.value), className: INPUT_CLASS }), titleIssue && _jsx("p", { className: "text-destructive mt-1 text-sm", children: titleIssue.message })] }), _jsxs("div", { children: [_jsx("label", { htmlFor: taglineId, className: LABEL_CLASS, children: "Tagline" }), _jsx("input", { id: taglineId, type: "text", value: form.tagline, disabled: !canEdit, onChange: (e) => setField('tagline', e.target.value), className: INPUT_CLASS })] }), _jsxs("div", { children: [_jsxs("label", { htmlFor: urlId, className: LABEL_CLASS, children: ["Site URL", _jsx(SettingsSourceBadge, { meta: sources.siteUrl })] }), _jsx("input", { id: urlId, type: "url", inputMode: "url", placeholder: "https://example.com", value: form.siteUrl, disabled: !urlEditable, "aria-invalid": urlIssue?.severity === 'error', "aria-describedby": urlIssue ? urlErrId : undefined, onChange: (e) => setField('siteUrl', e.target.value), className: INPUT_CLASS }), urlIssue ? (_jsx("p", { id: urlErrId, className: urlIssue.severity === 'error'
|
|
18
|
+
? 'text-destructive mt-1 text-sm'
|
|
19
|
+
: 'text-warning mt-1 text-sm', children: urlIssue.message })) : urlValid ? (_jsxs("p", { className: "text-muted-foreground mt-1 flex items-center gap-1.5 text-sm", children: [_jsx(CheckCircle2, { size: 13, className: "text-success", "aria-hidden": "true" }), "Valid \u2014 used for canonical URLs, sitemap, robots.txt, and Open Graph."] })) : (_jsx("p", { className: "text-muted-foreground mt-1 text-sm", children: "Used for canonical URLs, sitemap, robots.txt, and Open Graph fallbacks." }))] })] })] }));
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=SiteInformationCard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SiteInformationCard.js","sourceRoot":"","sources":["../../../src/views/settings/SiteInformationCard.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
import type { SettingsSourceMetadata, ValidationIssue } from './useGeneralSettings.js';
|
|
3
|
+
/** Small badge showing where a setting's value comes from. */
|
|
4
|
+
export declare function SettingsSourceBadge({ meta }: {
|
|
5
|
+
meta?: SettingsSourceMetadata;
|
|
6
|
+
}): import("react/jsx-runtime").JSX.Element | null;
|
|
7
|
+
/** A labelled switch row with description, used for the SEO defaults. */
|
|
8
|
+
export declare function SettingsToggleRow({ label, description, checked, onChange, disabled, badge, }: {
|
|
9
|
+
label: string;
|
|
10
|
+
description: string;
|
|
11
|
+
checked: boolean;
|
|
12
|
+
onChange: (value: boolean) => void;
|
|
13
|
+
disabled?: boolean;
|
|
14
|
+
badge?: ReactNode;
|
|
15
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
16
|
+
/** Aggregated validation messages shown above the cards. */
|
|
17
|
+
export declare function SettingsValidationSummary({ issues }: {
|
|
18
|
+
issues: ValidationIssue[];
|
|
19
|
+
}): import("react/jsx-runtime").JSX.Element | null;
|
|
20
|
+
/** Sticky footer with Reset + Save, gated on dirty state. */
|
|
21
|
+
export declare function SettingsSaveBar({ dirty, canEdit, hasErrors, saveState, onSave, onReset, }: {
|
|
22
|
+
dirty: boolean;
|
|
23
|
+
canEdit: boolean;
|
|
24
|
+
hasErrors: boolean;
|
|
25
|
+
saveState: 'idle' | 'saving' | 'success' | 'error';
|
|
26
|
+
onSave: () => void;
|
|
27
|
+
onReset: () => void;
|
|
28
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
29
|
+
/** Confirmation dialog for dangerous indexing changes. */
|
|
30
|
+
export declare function ConfirmDangerousSettingDialog({ open, title, description, confirmLabel, onConfirm, onCancel, }: {
|
|
31
|
+
open: boolean;
|
|
32
|
+
title: string;
|
|
33
|
+
description: string;
|
|
34
|
+
confirmLabel?: string;
|
|
35
|
+
onConfirm: () => void;
|
|
36
|
+
onCancel: () => void;
|
|
37
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
38
|
+
//# sourceMappingURL=components.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../../../src/views/settings/components.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACtC,OAAO,KAAK,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAUtF,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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import * as Dialog from '@radix-ui/react-dialog';
|
|
4
|
+
import { AlertTriangle, Check, Loader2, Lock } from 'lucide-react';
|
|
5
|
+
const SOURCE_LABEL = {
|
|
6
|
+
config: 'Config-managed',
|
|
7
|
+
environment: 'Environment-managed',
|
|
8
|
+
database: 'Editable',
|
|
9
|
+
plugin: 'Plugin setting',
|
|
10
|
+
computed: 'Computed',
|
|
11
|
+
};
|
|
12
|
+
/** Small badge showing where a setting's value comes from. */
|
|
13
|
+
export function SettingsSourceBadge({ meta }) {
|
|
14
|
+
if (!meta || (meta.source === 'database' && meta.editable))
|
|
15
|
+
return null;
|
|
16
|
+
const locked = !meta.editable;
|
|
17
|
+
return (_jsxs("span", { className: "text-muted-foreground border-border bg-muted inline-flex items-center gap-1 rounded-md border px-1.5 py-0.5 text-xs", title: meta.reason, children: [locked && _jsx(Lock, { size: 11, "aria-hidden": "true" }), SOURCE_LABEL[meta.source]] }));
|
|
18
|
+
}
|
|
19
|
+
/** A labelled switch row with description, used for the SEO defaults. */
|
|
20
|
+
export function SettingsToggleRow({ label, description, checked, onChange, disabled = false, badge, }) {
|
|
21
|
+
return (_jsxs("div", { className: "flex items-start justify-between gap-4", children: [_jsxs("div", { className: "flex-1", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: "text-foreground text-base font-medium", children: label }), badge] }), _jsx("p", { className: "text-muted-foreground mt-0.5 text-sm", children: description })] }), _jsx("button", { type: "button", role: "switch", "aria-checked": checked, "aria-label": label, disabled: disabled, onClick: () => onChange(!checked), className: `focus-visible:ring-ring relative mt-0.5 h-6 w-11 shrink-0 rounded-full transition-colors focus-visible:ring-2 focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50 ${checked ? 'bg-brand' : 'bg-switch-background'}`, children: _jsx("span", { className: `absolute top-0.5 block h-5 w-5 rounded-full bg-white shadow-sm transition-transform ${checked ? 'translate-x-[22px]' : 'translate-x-0.5'}` }) })] }));
|
|
22
|
+
}
|
|
23
|
+
/** Aggregated validation messages shown above the cards. */
|
|
24
|
+
export function SettingsValidationSummary({ issues }) {
|
|
25
|
+
if (issues.length === 0)
|
|
26
|
+
return null;
|
|
27
|
+
const errors = issues.filter((i) => i.severity === 'error');
|
|
28
|
+
const warnings = issues.filter((i) => i.severity === 'warning');
|
|
29
|
+
const isError = errors.length > 0;
|
|
30
|
+
return (_jsxs("div", { role: "alert", "aria-live": "polite", className: `flex items-start gap-3 rounded-lg border p-3 text-sm ${isError
|
|
31
|
+
? 'border-destructive/30 bg-destructive/10 text-destructive'
|
|
32
|
+
: 'border-warning/30 bg-warning/10 text-warning'}`, children: [_jsx(AlertTriangle, { size: 16, className: "mt-0.5 shrink-0", "aria-hidden": "true" }), _jsx("div", { className: "space-y-1", children: [...errors, ...warnings].map((issue, i) => (_jsx("p", { children: issue.message }, `${issue.field}-${i}`))) })] }));
|
|
33
|
+
}
|
|
34
|
+
/** Sticky footer with Reset + Save, gated on dirty state. */
|
|
35
|
+
export function SettingsSaveBar({ dirty, canEdit, hasErrors, saveState, onSave, onReset, }) {
|
|
36
|
+
const saving = saveState === 'saving';
|
|
37
|
+
return (_jsxs("div", { className: "border-border bg-background/80 sticky bottom-0 z-10 flex items-center justify-end gap-4 border-t py-3 backdrop-blur", children: [saveState === 'success' && !dirty && (_jsxs("span", { className: "text-success flex items-center gap-1.5 text-sm", "aria-live": "polite", children: [_jsx(Check, { size: 16, "aria-hidden": "true" }), " Saved"] })), _jsx("button", { type: "button", onClick: onReset, disabled: !dirty || saving, className: "text-muted-foreground hover:text-foreground rounded-md px-3 py-2 text-base transition-colors disabled:cursor-not-allowed disabled:opacity-40", children: "Reset" }), _jsxs("button", { type: "button", onClick: onSave, disabled: !canEdit || !dirty || hasErrors || saving, className: "bg-brand text-brand-foreground focus-visible:ring-ring inline-flex items-center gap-2 rounded-md px-5 py-2 text-base font-medium transition-opacity hover:opacity-90 focus-visible:ring-2 focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50", children: [saving && _jsx(Loader2, { size: 16, className: "animate-spin", "aria-hidden": "true" }), saving ? 'Saving…' : 'Save Changes'] })] }));
|
|
38
|
+
}
|
|
39
|
+
/** Confirmation dialog for dangerous indexing changes. */
|
|
40
|
+
export function ConfirmDangerousSettingDialog({ open, title, description, confirmLabel = 'Continue', onConfirm, onCancel, }) {
|
|
41
|
+
return (_jsx(Dialog.Root, { open: open, onOpenChange: (o) => !o && onCancel(), children: _jsxs(Dialog.Portal, { children: [_jsx(Dialog.Overlay, { className: "fixed inset-0 z-50 bg-black/50" }), _jsxs(Dialog.Content, { className: "bg-card text-card-foreground fixed top-1/2 left-1/2 z-50 w-full max-w-md -translate-x-1/2 -translate-y-1/2 rounded-lg p-6 shadow-lg", children: [_jsxs("div", { className: "mb-3 flex items-center gap-2", children: [_jsx("span", { className: "bg-warning/15 text-warning flex h-9 w-9 items-center justify-center rounded-full", children: _jsx(AlertTriangle, { size: 20, "aria-hidden": "true" }) }), _jsx(Dialog.Title, { className: "text-foreground text-lg font-medium", children: title })] }), _jsx(Dialog.Description, { className: "text-muted-foreground mb-5 text-sm", children: description }), _jsxs("div", { className: "flex items-center justify-end gap-3", children: [_jsx("button", { type: "button", onClick: onCancel, className: "border-border text-foreground hover:bg-accent rounded-md border px-4 py-2 text-base transition-colors", children: "Cancel" }), _jsx("button", { type: "button", onClick: onConfirm, className: "bg-destructive text-destructive-foreground rounded-md px-4 py-2 text-base font-medium transition-opacity hover:opacity-90", children: confirmLabel })] })] })] }) }));
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=components.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components.js","sourceRoot":"","sources":["../../../src/views/settings/components.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/** Editable + computed shape of the General tab form. */
|
|
2
|
+
export interface GeneralSettingsForm {
|
|
3
|
+
siteTitle: string;
|
|
4
|
+
tagline: string;
|
|
5
|
+
siteUrl: string;
|
|
6
|
+
language: string;
|
|
7
|
+
timezone: string;
|
|
8
|
+
defaultNoIndex: boolean;
|
|
9
|
+
defaultNoFollow: boolean;
|
|
10
|
+
noIndexNonProduction: boolean;
|
|
11
|
+
}
|
|
12
|
+
export type SettingsSource = 'config' | 'environment' | 'database' | 'plugin' | 'computed';
|
|
13
|
+
export interface SettingsSourceMetadata {
|
|
14
|
+
source: SettingsSource;
|
|
15
|
+
editable: boolean;
|
|
16
|
+
reason?: string;
|
|
17
|
+
}
|
|
18
|
+
export type IndexStatusLevel = 'indexable' | 'protected' | 'blocked' | 'partially_blocked' | 'unknown';
|
|
19
|
+
export interface SiteIndexStatus {
|
|
20
|
+
status: IndexStatusLevel;
|
|
21
|
+
severity: 'success' | 'warning' | 'danger' | 'neutral';
|
|
22
|
+
label: string;
|
|
23
|
+
description: string;
|
|
24
|
+
environment: string;
|
|
25
|
+
checks: Array<{
|
|
26
|
+
key: string;
|
|
27
|
+
label: string;
|
|
28
|
+
value: string;
|
|
29
|
+
status: 'pass' | 'warning' | 'fail' | 'unknown';
|
|
30
|
+
}>;
|
|
31
|
+
actions: Array<{
|
|
32
|
+
label: string;
|
|
33
|
+
href?: string;
|
|
34
|
+
action?: string;
|
|
35
|
+
}>;
|
|
36
|
+
lastAuditAt: string | null;
|
|
37
|
+
}
|
|
38
|
+
export interface ValidationIssue {
|
|
39
|
+
field: keyof GeneralSettingsForm;
|
|
40
|
+
message: string;
|
|
41
|
+
severity: 'error' | 'warning';
|
|
42
|
+
}
|
|
43
|
+
/** Validate a site URL: absolute http(s), no trailing slash, parseable. */
|
|
44
|
+
export declare function validateSiteUrl(value: string): {
|
|
45
|
+
valid: boolean;
|
|
46
|
+
error?: string;
|
|
47
|
+
};
|
|
48
|
+
/** Best-effort IANA timezone check using the Intl API. */
|
|
49
|
+
export declare function isValidTimeZone(tz: string): boolean;
|
|
50
|
+
/** Best-effort BCP 47 locale check. */
|
|
51
|
+
export declare function isValidLocale(locale: string): boolean;
|
|
52
|
+
type SaveState = 'idle' | 'saving' | 'success' | 'error';
|
|
53
|
+
export interface UseGeneralSettings {
|
|
54
|
+
loading: boolean;
|
|
55
|
+
loadError: string | null;
|
|
56
|
+
form: GeneralSettingsForm;
|
|
57
|
+
setField: <K extends keyof GeneralSettingsForm>(key: K, value: GeneralSettingsForm[K]) => void;
|
|
58
|
+
dirty: boolean;
|
|
59
|
+
issues: ValidationIssue[];
|
|
60
|
+
hasErrors: boolean;
|
|
61
|
+
indexStatus: SiteIndexStatus | null;
|
|
62
|
+
sources: Record<string, SettingsSourceMetadata>;
|
|
63
|
+
isProduction: boolean;
|
|
64
|
+
saveState: SaveState;
|
|
65
|
+
saveError: string | null;
|
|
66
|
+
save: () => Promise<void>;
|
|
67
|
+
reset: () => void;
|
|
68
|
+
refetch: () => void;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Loads the General tab from its three real backends — the `settings` global
|
|
72
|
+
* (site info / locale), the shared `/seo/config` (site URL + robots defaults),
|
|
73
|
+
* and the computed `/seo/index-status` — tracks a dirty diff, and on save
|
|
74
|
+
* writes each field back to its OWNING store (never a duplicate), preserving
|
|
75
|
+
* unrelated keys.
|
|
76
|
+
*/
|
|
77
|
+
export declare function useGeneralSettings(canEdit: boolean): UseGeneralSettings;
|
|
78
|
+
export {};
|
|
79
|
+
//# sourceMappingURL=useGeneralSettings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useGeneralSettings.d.ts","sourceRoot":"","sources":["../../../src/views/settings/useGeneralSettings.ts"],"names":[],"mappings":"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"}
|