@actuate-media/cms-admin 0.73.0 → 0.75.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/CHANGELOG.md +28 -0
- package/dist/AdminRoot.d.ts.map +1 -1
- package/dist/AdminRoot.js +3 -2
- package/dist/AdminRoot.js.map +1 -1
- package/dist/LoginRoot.d.ts.map +1 -1
- package/dist/LoginRoot.js +2 -1
- package/dist/LoginRoot.js.map +1 -1
- package/dist/__tests__/components/theme-provider-accent.test.d.ts +2 -0
- package/dist/__tests__/components/theme-provider-accent.test.d.ts.map +1 -0
- package/dist/__tests__/components/theme-provider-accent.test.js +64 -0
- package/dist/__tests__/components/theme-provider-accent.test.js.map +1 -0
- package/dist/__tests__/views/portal-container.test.js +13 -0
- package/dist/__tests__/views/portal-container.test.js.map +1 -1
- package/dist/__tests__/views/post-fields-modal.render.test.js +3 -6
- package/dist/__tests__/views/post-fields-modal.render.test.js.map +1 -1
- package/dist/__tests__/views/redirects-pane.render.test.js +6 -0
- package/dist/__tests__/views/redirects-pane.render.test.js.map +1 -1
- package/dist/__tests__/views/seo-content-pane.render.test.js +15 -4
- package/dist/__tests__/views/seo-content-pane.render.test.js.map +1 -1
- package/dist/actuate-admin.css +1 -1
- package/dist/components/CoauthorResultPopover.js +1 -1
- package/dist/components/EditorSeoAside.d.ts +23 -0
- package/dist/components/EditorSeoAside.d.ts.map +1 -0
- package/dist/components/EditorSeoAside.js +21 -0
- package/dist/components/EditorSeoAside.js.map +1 -0
- package/dist/components/MediaPickerModal.js +1 -1
- package/dist/components/SEOConfigPanel.js +1 -1
- package/dist/components/SchedulePublishDialog.js +1 -1
- package/dist/components/SharePreviewLinkDialog.js +1 -1
- package/dist/components/ThemeProvider.d.ts.map +1 -1
- package/dist/components/ThemeProvider.js +2 -1
- package/dist/components/ThemeProvider.js.map +1 -1
- package/dist/components/VersionHistory.js +1 -1
- package/dist/components/seo/EditorSeoScoreBadge.d.ts +7 -0
- package/dist/components/seo/EditorSeoScoreBadge.d.ts.map +1 -0
- package/dist/components/seo/EditorSeoScoreBadge.js +9 -0
- package/dist/components/seo/EditorSeoScoreBadge.js.map +1 -0
- package/dist/components/seo/SeoAccordion.d.ts +16 -0
- package/dist/components/seo/SeoAccordion.d.ts.map +1 -0
- package/dist/components/seo/SeoAccordion.js +21 -0
- package/dist/components/seo/SeoAccordion.js.map +1 -0
- package/dist/components/seo/SeoAnalysisList.d.ts +7 -0
- package/dist/components/seo/SeoAnalysisList.d.ts.map +1 -0
- package/dist/components/seo/SeoAnalysisList.js +32 -0
- package/dist/components/seo/SeoAnalysisList.js.map +1 -0
- package/dist/components/seo/SeoEditorPane.d.ts +15 -4
- package/dist/components/seo/SeoEditorPane.d.ts.map +1 -1
- package/dist/components/seo/SeoEditorPane.js +155 -35
- package/dist/components/seo/SeoEditorPane.js.map +1 -1
- package/dist/components/seo/SeoInsightsMetrics.d.ts +6 -0
- package/dist/components/seo/SeoInsightsMetrics.d.ts.map +1 -0
- package/dist/components/seo/SeoInsightsMetrics.js +16 -0
- package/dist/components/seo/SeoInsightsMetrics.js.map +1 -0
- package/dist/components/seo/SeoIssueFixPanel.d.ts.map +1 -1
- package/dist/components/seo/SeoIssueFixPanel.js +13 -3
- package/dist/components/seo/SeoIssueFixPanel.js.map +1 -1
- package/dist/components/seo/SeoLinkingSection.d.ts +9 -0
- package/dist/components/seo/SeoLinkingSection.d.ts.map +1 -0
- package/dist/components/seo/SeoLinkingSection.js +44 -0
- package/dist/components/seo/SeoLinkingSection.js.map +1 -0
- package/dist/components/seo/primitives.d.ts.map +1 -1
- package/dist/components/seo/primitives.js +3 -3
- package/dist/components/seo/primitives.js.map +1 -1
- package/dist/components/ui/Card.js +5 -5
- package/dist/components/ui/Card.js.map +1 -1
- package/dist/components/ui/InspectorPane.js +3 -3
- package/dist/components/ui/InspectorPane.js.map +1 -1
- package/dist/components/ui/PanelSection.d.ts +16 -0
- package/dist/components/ui/PanelSection.d.ts.map +1 -0
- package/dist/components/ui/PanelSection.js +15 -0
- package/dist/components/ui/PanelSection.js.map +1 -0
- package/dist/lib/admin-root-element.d.ts +9 -0
- package/dist/lib/admin-root-element.d.ts.map +1 -0
- package/dist/lib/admin-root-element.js +14 -0
- package/dist/lib/admin-root-element.js.map +1 -0
- package/dist/lib/editor-seo-content.d.ts +16 -0
- package/dist/lib/editor-seo-content.d.ts.map +1 -0
- package/dist/lib/editor-seo-content.js +139 -0
- package/dist/lib/editor-seo-content.js.map +1 -0
- package/dist/lib/portal-container.d.ts.map +1 -1
- package/dist/lib/portal-container.js +2 -3
- package/dist/lib/portal-container.js.map +1 -1
- package/dist/lib/seo-service.d.ts +91 -0
- package/dist/lib/seo-service.d.ts.map +1 -1
- package/dist/lib/seo-service.js +55 -2
- package/dist/lib/seo-service.js.map +1 -1
- package/dist/views/ApiKeys.js +2 -2
- package/dist/views/Dashboard.d.ts.map +1 -1
- package/dist/views/Dashboard.js +12 -14
- package/dist/views/Dashboard.js.map +1 -1
- package/dist/views/MediaBrowser.d.ts.map +1 -1
- package/dist/views/MediaBrowser.js +35 -6
- package/dist/views/MediaBrowser.js.map +1 -1
- package/dist/views/PageEditor.js +1 -1
- package/dist/views/Posts/PostTypeEditor.js +3 -3
- package/dist/views/SEO.d.ts.map +1 -1
- package/dist/views/SEO.js +4 -2
- package/dist/views/SEO.js.map +1 -1
- package/dist/views/ScriptTags.js +1 -1
- package/dist/views/ScriptTags.js.map +1 -1
- package/dist/views/Users.js +1 -1
- package/dist/views/page-editor/EditorTopBar.d.ts +6 -1
- package/dist/views/page-editor/EditorTopBar.d.ts.map +1 -1
- package/dist/views/page-editor/EditorTopBar.js +5 -2
- package/dist/views/page-editor/EditorTopBar.js.map +1 -1
- package/dist/views/page-editor/PageSectionEditor.d.ts.map +1 -1
- package/dist/views/page-editor/PageSectionEditor.js +36 -1
- package/dist/views/page-editor/PageSectionEditor.js.map +1 -1
- package/dist/views/page-editor/PageSettingsModal.d.ts +1 -1
- package/dist/views/page-editor/PageSettingsModal.d.ts.map +1 -1
- package/dist/views/page-editor/PageSettingsModal.js +2 -13
- package/dist/views/page-editor/PageSettingsModal.js.map +1 -1
- package/dist/views/page-editor/SectionInspector.js +2 -2
- package/dist/views/page-editor/SectionsPanel.js +1 -1
- package/dist/views/post-editor/PostFieldsModal.d.ts +1 -1
- package/dist/views/post-editor/PostFieldsModal.d.ts.map +1 -1
- package/dist/views/post-editor/PostFieldsModal.js +17 -79
- package/dist/views/post-editor/PostFieldsModal.js.map +1 -1
- package/dist/views/post-editor/PostHeaderPanel.js +1 -1
- package/dist/views/post-editor/PostSectionEditor.d.ts.map +1 -1
- package/dist/views/post-editor/PostSectionEditor.js +37 -1
- package/dist/views/post-editor/PostSectionEditor.js.map +1 -1
- package/dist/views/seo/ContentTab.d.ts.map +1 -1
- package/dist/views/seo/ContentTab.js +7 -1
- package/dist/views/seo/ContentTab.js.map +1 -1
- package/dist/views/seo/LinksTab.d.ts +4 -0
- package/dist/views/seo/LinksTab.d.ts.map +1 -0
- package/dist/views/seo/LinksTab.js +111 -0
- package/dist/views/seo/LinksTab.js.map +1 -0
- package/dist/views/seo/OverviewTab.js +1 -1
- package/dist/views/seo/OverviewTab.js.map +1 -1
- package/dist/views/seo/RedirectsTab.d.ts.map +1 -1
- package/dist/views/seo/RedirectsTab.js +39 -6
- package/dist/views/seo/RedirectsTab.js.map +1 -1
- package/dist/views/seo/TechnicalTab.js +2 -2
- package/dist/views/settings/AISettingsTab.js +1 -1
- package/dist/views/settings/AiFeaturesCard.js +1 -1
- package/dist/views/settings/AiFeaturesCard.js.map +1 -1
- package/dist/views/settings/AppearanceTab.js +1 -1
- package/dist/views/settings/BrandVoiceCard.js +1 -1
- package/dist/views/settings/EmailSettingsTab.js +2 -2
- package/dist/views/settings/GeneralSettingsTab.js +1 -1
- package/dist/views/settings/SecurityStatusCard.js +1 -1
- package/dist/views/settings/SeoSettingsTab.js +4 -4
- package/dist/views/settings/UpdatesTab.js +2 -2
- package/dist/views/settings/components.js +3 -3
- package/dist/views/settings/components.js.map +1 -1
- package/package.json +2 -2
- package/src/AdminRoot.tsx +3 -2
- package/src/LoginRoot.tsx +2 -1
- package/src/__tests__/components/theme-provider-accent.test.tsx +84 -0
- package/src/__tests__/views/portal-container.test.tsx +14 -0
- package/src/__tests__/views/post-fields-modal.render.test.tsx +3 -9
- package/src/__tests__/views/redirects-pane.render.test.tsx +6 -0
- package/src/__tests__/views/seo-content-pane.render.test.tsx +16 -4
- package/src/components/CoauthorResultPopover.tsx +1 -1
- package/src/components/EditorSeoAside.tsx +68 -0
- package/src/components/MediaPickerModal.tsx +1 -1
- package/src/components/SEOConfigPanel.tsx +2 -2
- package/src/components/SchedulePublishDialog.tsx +1 -1
- package/src/components/SharePreviewLinkDialog.tsx +1 -1
- package/src/components/ThemeProvider.tsx +3 -1
- package/src/components/VersionHistory.tsx +1 -1
- package/src/components/seo/EditorSeoScoreBadge.tsx +26 -0
- package/src/components/seo/SeoAccordion.tsx +76 -0
- package/src/components/seo/SeoAnalysisList.tsx +113 -0
- package/src/components/seo/SeoEditorPane.tsx +532 -250
- package/src/components/seo/SeoInsightsMetrics.tsx +109 -0
- package/src/components/seo/SeoIssueFixPanel.tsx +16 -4
- package/src/components/seo/SeoLinkingSection.tsx +151 -0
- package/src/components/seo/primitives.tsx +7 -3
- package/src/components/ui/Card.tsx +5 -5
- package/src/components/ui/InspectorPane.tsx +3 -3
- package/src/components/ui/PanelSection.tsx +53 -0
- package/src/lib/admin-root-element.ts +15 -0
- package/src/lib/editor-seo-content.ts +144 -0
- package/src/lib/portal-container.ts +3 -2
- package/src/lib/seo-service.ts +150 -2
- package/src/views/ApiKeys.tsx +2 -2
- package/src/views/Dashboard.tsx +40 -53
- package/src/views/MediaBrowser.tsx +62 -12
- package/src/views/PageEditor.tsx +1 -1
- package/src/views/Posts/PostTypeEditor.tsx +3 -3
- package/src/views/SEO.tsx +6 -0
- package/src/views/ScriptTags.tsx +2 -2
- package/src/views/Users.tsx +1 -1
- package/src/views/page-editor/EditorTopBar.tsx +27 -0
- package/src/views/page-editor/PageSectionEditor.tsx +58 -3
- package/src/views/page-editor/PageSettingsModal.tsx +1 -45
- package/src/views/page-editor/SectionInspector.tsx +2 -2
- package/src/views/page-editor/SectionsPanel.tsx +1 -1
- package/src/views/post-editor/PostFieldsModal.tsx +19 -138
- package/src/views/post-editor/PostHeaderPanel.tsx +1 -1
- package/src/views/post-editor/PostSectionEditor.tsx +60 -3
- package/src/views/seo/ContentTab.tsx +11 -5
- package/src/views/seo/LinksTab.tsx +462 -0
- package/src/views/seo/OverviewTab.tsx +1 -1
- package/src/views/seo/RedirectsTab.tsx +97 -4
- package/src/views/seo/TechnicalTab.tsx +2 -2
- package/src/views/settings/AISettingsTab.tsx +3 -3
- package/src/views/settings/AiFeaturesCard.tsx +1 -1
- package/src/views/settings/AppearanceTab.tsx +1 -1
- package/src/views/settings/BrandVoiceCard.tsx +2 -2
- package/src/views/settings/EmailSettingsTab.tsx +2 -2
- package/src/views/settings/GeneralSettingsTab.tsx +3 -3
- package/src/views/settings/SecurityStatusCard.tsx +1 -1
- package/src/views/settings/SeoSettingsTab.tsx +6 -6
- package/src/views/settings/UpdatesTab.tsx +3 -3
- package/src/views/settings/components.tsx +3 -3
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
/**
|
|
4
|
+
* Links tab — internal / external link tracking with AI-powered suggestions
|
|
5
|
+
* (orphan recovery, under-linked coverage). Backed by `/seo/links/*` APIs.
|
|
6
|
+
*/
|
|
7
|
+
import { useCallback, useMemo, useState } from 'react';
|
|
8
|
+
import { Link2, Sparkles, AlertTriangle, CheckCircle2, Loader2, RefreshCw, ExternalLink, Bot, } from 'lucide-react';
|
|
9
|
+
import { toast } from 'sonner';
|
|
10
|
+
import { fetchLinkGraphSnapshot, fetchLinkHealthIssues, fetchLinkSuggestions, runLinkAiIndex, } from '../../lib/seo-service.js';
|
|
11
|
+
import { editPathForDoc } from '../../lib/collection-routes.js';
|
|
12
|
+
import { SectionCard, SeoLoading, SeoErrorState, SeoEmptyState, btnPrimary, btnSecondary, gradeMeta, } from '../../components/seo/primitives.js';
|
|
13
|
+
import { useSeoResource } from './useSeoResource.js';
|
|
14
|
+
function scoreFromCoverage(coverage, orphanCount, broken) {
|
|
15
|
+
let score = coverage;
|
|
16
|
+
score -= Math.min(30, orphanCount * 0.5);
|
|
17
|
+
score -= Math.min(20, broken * 2);
|
|
18
|
+
return Math.max(0, Math.min(100, Math.round(score)));
|
|
19
|
+
}
|
|
20
|
+
function ActionCard({ icon: Icon, title, description, impact, actionLabel, onAction, busy, disabled, }) {
|
|
21
|
+
const impactTone = impact === 'High' ? 'text-destructive' : 'text-warning';
|
|
22
|
+
return (_jsxs("div", { className: "border-border bg-card flex flex-col gap-4 rounded-xl border p-5 shadow-sm sm:flex-row sm:items-center sm:justify-between", children: [_jsxs("div", { className: "flex min-w-0 gap-4", children: [_jsx("div", { className: "bg-primary/10 text-primary flex h-11 w-11 shrink-0 items-center justify-center rounded-lg", children: _jsx(Icon, { className: "h-5 w-5", "aria-hidden": true }) }), _jsxs("div", { className: "min-w-0", children: [_jsx("h3", { className: "text-foreground text-sm font-medium", children: title }), _jsx("p", { className: "text-muted-foreground mt-1 text-sm", children: description }), _jsx("div", { className: "mt-2 flex flex-wrap items-center gap-2", children: _jsxs("span", { className: `text-xs font-medium ${impactTone}`, children: ["Impact: ", impact] }) })] })] }), _jsxs("button", { type: "button", className: btnPrimary, onClick: onAction, disabled: disabled || busy, children: [busy ? _jsx(Loader2, { className: "h-4 w-4 animate-spin", "aria-hidden": true }) : null, actionLabel] })] }));
|
|
23
|
+
}
|
|
24
|
+
function SuggestionList({ suggestions, loading, }) {
|
|
25
|
+
if (loading) {
|
|
26
|
+
return (_jsxs("p", { className: "text-muted-foreground flex items-center gap-2 text-sm", children: [_jsx(Loader2, { className: "h-4 w-4 animate-spin", "aria-hidden": true }), "Finding AI link opportunities\u2026"] }));
|
|
27
|
+
}
|
|
28
|
+
if (suggestions.length === 0) {
|
|
29
|
+
return (_jsx("p", { className: "text-muted-foreground text-sm", children: "No suggestions yet. Run AI indexing first, or add more published content." }));
|
|
30
|
+
}
|
|
31
|
+
return (_jsx("ul", { className: "divide-border divide-y rounded-lg border", children: suggestions.map((s) => (_jsxs("li", { className: "px-4 py-3", children: [_jsx("p", { className: "text-foreground text-sm font-medium", children: s.sourceTitle }), _jsxs("p", { className: "text-muted-foreground mt-0.5 text-xs", children: ["Link \u201C", s.anchorText, "\u201D \u2192 ", s.sourceUrl || 'target page', ' ', _jsxs("span", { className: "text-muted-foreground/80 tabular-nums", children: ["(", Math.round(s.confidence * 100), "% match)"] })] }), s.excerpt && (_jsx("p", { className: "text-muted-foreground mt-1 line-clamp-2 text-xs", children: s.excerpt }))] }, `${s.sourceEntityId}-${s.anchorText}`))) }));
|
|
32
|
+
}
|
|
33
|
+
export function LinksTab({ onNavigate }) {
|
|
34
|
+
const { data, loading, error, refetch } = useSeoResource(fetchLinkGraphSnapshot, []);
|
|
35
|
+
const [indexing, setIndexing] = useState(false);
|
|
36
|
+
const [healthLoading, setHealthLoading] = useState(false);
|
|
37
|
+
const [healthIssues, setHealthIssues] = useState(null);
|
|
38
|
+
const [selectedOrphan, setSelectedOrphan] = useState(null);
|
|
39
|
+
const [suggestions, setSuggestions] = useState([]);
|
|
40
|
+
const [suggestLoading, setSuggestLoading] = useState(false);
|
|
41
|
+
const totalLinks = (data?.internalLinks ?? 0) + (data?.externalLinks ?? 0);
|
|
42
|
+
const internalPct = totalLinks > 0 ? Math.round((data.internalLinks / totalLinks) * 100) : 0;
|
|
43
|
+
const externalPct = totalLinks > 0 ? 100 - internalPct : 0;
|
|
44
|
+
const healthScore = useMemo(() => data
|
|
45
|
+
? scoreFromCoverage(data.linkCoveragePercent, data.orphanCount, data.brokenLinkCount)
|
|
46
|
+
: null, [data]);
|
|
47
|
+
const healthGrade = healthScore !== null
|
|
48
|
+
? gradeMeta(healthScore >= 80
|
|
49
|
+
? 'good'
|
|
50
|
+
: healthScore >= 60
|
|
51
|
+
? 'fair'
|
|
52
|
+
: healthScore >= 40
|
|
53
|
+
? 'poor'
|
|
54
|
+
: 'critical')
|
|
55
|
+
: null;
|
|
56
|
+
const handleAiIndex = useCallback(async () => {
|
|
57
|
+
setIndexing(true);
|
|
58
|
+
const res = await runLinkAiIndex();
|
|
59
|
+
setIndexing(false);
|
|
60
|
+
if (res.error) {
|
|
61
|
+
toast.error(res.error);
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
toast.success(res.data?.message ?? 'Link index updated.');
|
|
65
|
+
refetch();
|
|
66
|
+
}, [refetch]);
|
|
67
|
+
const handleLinkHealthScan = useCallback(async () => {
|
|
68
|
+
setHealthLoading(true);
|
|
69
|
+
const res = await fetchLinkHealthIssues();
|
|
70
|
+
setHealthLoading(false);
|
|
71
|
+
if (res.error) {
|
|
72
|
+
toast.error(res.error);
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
setHealthIssues(res.data ?? null);
|
|
76
|
+
toast.success(`Checked ${res.data?.checked ?? 0} links.`);
|
|
77
|
+
}, []);
|
|
78
|
+
const loadSuggestions = useCallback(async (orphan) => {
|
|
79
|
+
setSelectedOrphan(orphan);
|
|
80
|
+
setSuggestLoading(true);
|
|
81
|
+
setSuggestions([]);
|
|
82
|
+
const res = await fetchLinkSuggestions({
|
|
83
|
+
targetEntityId: orphan.id,
|
|
84
|
+
targetEntityType: orphan.entityType,
|
|
85
|
+
});
|
|
86
|
+
setSuggestLoading(false);
|
|
87
|
+
if (res.error) {
|
|
88
|
+
toast.error(res.error);
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
setSuggestions(res.data?.suggestions ?? []);
|
|
92
|
+
}, []);
|
|
93
|
+
const openEditor = (ref) => {
|
|
94
|
+
const path = editPathForDoc({ type: ref.entityType === 'post' ? 'post' : 'page' }, ref.collection, ref.id);
|
|
95
|
+
onNavigate?.(path);
|
|
96
|
+
};
|
|
97
|
+
if (loading)
|
|
98
|
+
return _jsx(SeoLoading, { label: "Analyzing link graph\u2026" });
|
|
99
|
+
if (error)
|
|
100
|
+
return _jsx(SeoErrorState, { message: error, onRetry: refetch });
|
|
101
|
+
if (!data)
|
|
102
|
+
return _jsx(SeoEmptyState, { title: "No link data", description: "Publish content to track links." });
|
|
103
|
+
return (_jsxs("div", { className: "space-y-6", children: [_jsxs("div", { children: [_jsx("h2", { className: "text-foreground text-lg font-medium", children: "Internal linking snapshot" }), _jsx("p", { className: "text-muted-foreground mt-1 text-sm", children: "Track internal and external links across published pages and posts. Use AI to recover orphaned content and improve link coverage." })] }), _jsx(SectionCard, { title: "Link distribution", description: "Published content only", children: _jsxs("div", { className: "space-y-3", children: [_jsxs("div", { className: "flex h-3 overflow-hidden rounded-full", children: [_jsx("div", { className: "bg-primary motion-safe:transition-all", style: { width: `${internalPct}%` }, title: `Internal ${internalPct}%` }), _jsx("div", { className: "bg-success motion-safe:transition-all", style: { width: `${externalPct}%` }, title: `External ${externalPct}%` })] }), _jsxs("div", { className: "flex flex-wrap gap-6 text-sm", children: [_jsxs("span", { className: "text-foreground", children: [_jsx("span", { className: "bg-primary mr-2 inline-block h-2 w-2 rounded-full", "aria-hidden": true }), "Internal: ", data.internalLinks.toLocaleString(), " (", internalPct, "%)"] }), _jsxs("span", { className: "text-foreground", children: [_jsx("span", { className: "bg-success mr-2 inline-block h-2 w-2 rounded-full", "aria-hidden": true }), "External: ", data.externalLinks.toLocaleString(), " (", externalPct, "%)"] })] }), externalPct > 0 && externalPct < 15 && (_jsxs("p", { className: "border-info/30 bg-info/10 text-info flex items-start gap-2 rounded-lg border p-4 text-sm", children: [_jsx(AlertTriangle, { className: "mt-0.5 h-4 w-4 shrink-0", "aria-hidden": true }), "External ratio is low. Consider citing relevant high-authority sources where appropriate."] }))] }) }), _jsxs("div", { className: "grid grid-cols-2 gap-4 lg:grid-cols-4", children: [_jsx(SectionCard, { title: "Site link health", children: healthScore !== null && healthGrade && (_jsxs("div", { children: [_jsx("span", { className: `text-3xl font-medium tabular-nums ${healthGrade.text}`, children: healthScore }), _jsx("p", { className: "text-muted-foreground mt-1 text-xs", children: healthGrade.label })] })) }), _jsxs(SectionCard, { title: "Link coverage", children: [_jsxs("span", { className: "text-foreground text-3xl font-medium tabular-nums", children: [data.linkCoveragePercent, "%"] }), _jsx("p", { className: "text-muted-foreground mt-1 text-xs", children: "Pages with inbound internal links" })] }), _jsxs(SectionCard, { title: "Orphaned pages", children: [_jsx("span", { className: `text-3xl font-medium tabular-nums ${data.orphanCount > 0 ? 'text-destructive' : 'text-success'}`, children: data.orphanCount }), _jsx("p", { className: "text-muted-foreground mt-1 text-xs", children: "No inbound internal links" })] }), _jsxs(SectionCard, { title: "Broken links", children: [_jsx("span", { className: `text-3xl font-medium tabular-nums ${data.brokenLinkCount > 0 ? 'text-warning' : 'text-success'}`, children: data.brokenLinkCount }), _jsx("p", { className: "text-muted-foreground mt-1 text-xs", children: "From latest SEO audit" })] })] }), _jsxs("div", { className: "space-y-4", children: [_jsx(ActionCard, { icon: Bot, title: "Perform basic AI scanning", description: "Index published content so AI can suggest which pages should link to each other. Re-run after publishing a significant batch of content.", impact: "High", actionLabel: indexing ? 'Indexing…' : 'Run AI index', onAction: handleAiIndex, busy: indexing }), data.aiIndexLastRunAt && (_jsxs("p", { className: "text-muted-foreground -mt-2 text-xs", children: ["Last indexed ", new Date(data.aiIndexLastRunAt).toLocaleString(), data.aiIndexReady ? ' · AI ready' : ''] })), _jsx(ActionCard, { icon: Link2, title: "Orphaned posts & pages", description: "These published URLs have no inbound internal links. Add links from related content so visitors and search engines can find them.", impact: "High", actionLabel: "Review list below", onAction: () => {
|
|
104
|
+
document.getElementById('orphan-list')?.scrollIntoView({ behavior: 'smooth' });
|
|
105
|
+
} }), _jsx(ActionCard, { icon: Sparkles, title: "Link coverage", description: "Pages with fewer than two outbound internal links. Strengthen topical clusters by linking to related content.", impact: "High", actionLabel: "Review under-linked", onAction: () => {
|
|
106
|
+
document.getElementById('under-linked-list')?.scrollIntoView({ behavior: 'smooth' });
|
|
107
|
+
} })] }), _jsx(SectionCard, { title: "Orphaned content", description: `${data.orphanCount} published item${data.orphanCount === 1 ? '' : 's'} with no inbound internal links`, children: _jsxs("div", { id: "orphan-list", className: "space-y-4", children: [data.orphaned.length === 0 ? (_jsxs("p", { className: "text-muted-foreground flex items-center gap-2 text-sm", children: [_jsx(CheckCircle2, { className: "text-success h-4 w-4", "aria-hidden": true }), "No orphaned pages detected."] })) : (_jsx("ul", { className: "divide-border divide-y rounded-lg border", children: data.orphaned.map((row) => (_jsxs("li", { className: "flex flex-wrap items-center justify-between gap-3 px-4 py-3", children: [_jsxs("div", { className: "min-w-0", children: [_jsx("p", { className: "text-foreground truncate text-sm font-medium", children: row.title }), _jsx("p", { className: "text-muted-foreground truncate text-xs", children: row.url || row.path })] }), _jsxs("div", { className: "flex shrink-0 flex-wrap gap-2", children: [_jsx("button", { type: "button", className: btnSecondary, onClick: () => openEditor(row), children: "Edit" }), _jsxs("button", { type: "button", className: btnPrimary, onClick: () => void loadSuggestions(row), children: [_jsx(Sparkles, { className: "h-3.5 w-3.5", "aria-hidden": true }), "AI suggest"] })] })] }, row.id))) })), selectedOrphan && (_jsxs("div", { className: "border-border bg-muted/30 rounded-lg border p-4", children: [_jsxs("p", { className: "text-foreground mb-2 text-sm font-medium", children: ["AI suggestions for \u201C", selectedOrphan.title, "\u201D"] }), _jsx(SuggestionList, { suggestions: suggestions, loading: suggestLoading })] }))] }) }), _jsx(SectionCard, { title: "Under-linked pages", description: "Fewer than 2 outbound internal links", children: _jsx("div", { id: "under-linked-list", children: data.underLinked.length === 0 ? (_jsx("p", { className: "text-muted-foreground text-sm", children: "All crawled pages have adequate outbound links." })) : (_jsx("ul", { className: "divide-border max-h-80 divide-y overflow-y-auto rounded-lg border", children: data.underLinked.map((row) => (_jsxs("li", { className: "flex items-center justify-between gap-3 px-4 py-3 text-sm", children: [_jsx("span", { className: "text-foreground min-w-0 truncate font-medium", children: row.title }), _jsxs("span", { className: "text-muted-foreground shrink-0 tabular-nums", children: [row.outboundInternal, " outbound"] })] }, row.id))) })) }) }), _jsx(SectionCard, { title: "Live link health scan", description: "Probe outbound URLs (rate-limited). Complements audit broken-link issues.", action: _jsxs("button", { type: "button", className: btnSecondary, onClick: () => void handleLinkHealthScan(), disabled: healthLoading, children: [healthLoading ? (_jsx(Loader2, { className: "h-4 w-4 animate-spin", "aria-hidden": true })) : (_jsx(RefreshCw, { className: "h-4 w-4", "aria-hidden": true })), "Scan now"] }), children: healthIssues && healthIssues.issues.length > 0 ? (_jsx("ul", { className: "divide-border max-h-64 divide-y overflow-y-auto rounded-lg border", children: healthIssues.issues.map((issue) => (_jsxs("li", { className: "px-4 py-3 text-sm", children: [_jsx("p", { className: "text-foreground font-medium", children: issue.page }), _jsxs("p", { className: "text-muted-foreground mt-0.5 flex items-center gap-1 truncate text-xs", children: [_jsx(ExternalLink, { className: "h-3 w-3 shrink-0", "aria-hidden": true }), issue.url, _jsxs("span", { className: "text-destructive ml-1", children: ["HTTP ", issue.status || 'error'] }), _jsxs("span", { className: "text-muted-foreground", children: ["\u00B7 ", issue.type] })] })] }, issue.id))) })) : (_jsx("p", { className: "text-muted-foreground text-sm", children: healthIssues
|
|
108
|
+
? 'No failing links in the last scan.'
|
|
109
|
+
: 'Run a scan to check live URL responses across published content.' })) }), _jsxs("p", { className: "text-muted-foreground text-xs", children: ["Crawled ", data.postsCrawled.toLocaleString(), " published documents \u00B7 Updated", ' ', new Date(data.scannedAt).toLocaleString()] })] }));
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=LinksTab.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LinksTab.js","sourceRoot":"","sources":["../../../src/views/seo/LinksTab.tsx"],"names":[],"mappings":"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"}
|
|
@@ -29,7 +29,7 @@ export function OverviewTab({ resource, onOpenIssue, onConnectSearchConsole, })
|
|
|
29
29
|
: tone === 'fair'
|
|
30
30
|
? 'bg-warning/10 text-warning'
|
|
31
31
|
: 'bg-success/10 text-success';
|
|
32
|
-
return (_jsxs("li", { className: "flex items-start justify-between gap-3 py-3
|
|
32
|
+
return (_jsxs("li", { className: "flex items-start justify-between gap-3 py-3", children: [_jsxs("div", { className: "min-w-0", children: [_jsx("p", { className: "text-foreground text-sm font-medium", children: w.title }), _jsx("p", { className: "text-muted-foreground mt-0.5 text-sm", children: w.explanation })] }), _jsxs("div", { className: "flex shrink-0 items-center gap-2", children: [_jsx("span", { className: `rounded-full px-2 py-0.5 text-xs font-medium ${toneCls}`, children: w.impact }), w.issueId && onOpenIssue && (_jsxs("button", { onClick: () => onOpenIssue(w.issueId), className: "text-primary hover:bg-accent focus-visible:ring-ring inline-flex items-center gap-1 rounded-md px-2 py-1 text-sm focus-visible:ring-2 focus-visible:outline-none", children: ["Fix ", _jsx(ArrowRight, { className: "h-3.5 w-3.5", "aria-hidden": true })] }))] })] }, w.id));
|
|
33
33
|
}) })) })] }), _jsx(SectionCard, { title: "Search Performance", description: "Top pages by impressions (last 28 days)", children: !searchConsoleConnected ? (_jsx(SeoEmptyState, { icon: _jsx(BarChart3, { size: 24 }), title: "Search Console not connected", description: "Connect Google Search Console to see real impressions, clicks, CTR, and average position.", action: onConnectSearchConsole ? (_jsx("button", { className: btnSecondary, onClick: onConnectSearchConsole, children: "Connect Search Console" })) : undefined })) : searchPerformance.length === 0 ? (_jsx(SeoEmptyState, { title: "No search performance data" })) : (_jsx("div", { className: "overflow-x-auto", children: _jsxs("table", { className: "w-full min-w-[640px] text-sm", "aria-label": "Search performance", children: [_jsx("thead", { children: _jsxs("tr", { className: "text-muted-foreground border-border border-b text-left", children: [_jsx("th", { className: "py-2 pr-4 font-medium", children: "Page" }), _jsx("th", { className: "py-2 pr-4 text-right font-medium", children: "Impressions" }), _jsx("th", { className: "py-2 pr-4 text-right font-medium", children: "Clicks" }), _jsx("th", { className: "py-2 pr-4 text-right font-medium", children: "CTR" }), _jsx("th", { className: "py-2 text-right font-medium", children: "Avg. Position" })] }) }), _jsx("tbody", { className: "divide-border divide-y", children: searchPerformance.map((row) => (_jsxs("tr", { children: [_jsxs("td", { className: "py-2 pr-4", children: [_jsx("span", { className: "text-foreground block font-medium", children: row.title }), _jsx("span", { className: "text-muted-foreground block truncate", children: row.url })] }), _jsx("td", { className: "text-foreground py-2 pr-4 text-right tabular-nums", children: row.impressions.toLocaleString() }), _jsx("td", { className: "text-foreground py-2 pr-4 text-right tabular-nums", children: row.clicks.toLocaleString() }), _jsxs("td", { className: "text-foreground py-2 pr-4 text-right tabular-nums", children: [(row.ctr * 100).toFixed(1), "%"] }), _jsx("td", { className: "text-foreground py-2 text-right tabular-nums", children: row.averagePosition.toFixed(1) })] }, row.url))) })] }) })) })] }));
|
|
34
34
|
}
|
|
35
35
|
//# sourceMappingURL=OverviewTab.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OverviewTab.js","sourceRoot":"","sources":["../../../src/views/seo/OverviewTab.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"OverviewTab.js","sourceRoot":"","sources":["../../../src/views/seo/OverviewTab.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RedirectsTab.d.ts","sourceRoot":"","sources":["../../../src/views/seo/RedirectsTab.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"RedirectsTab.d.ts","sourceRoot":"","sources":["../../../src/views/seo/RedirectsTab.tsx"],"names":[],"mappings":"AAoTA,wBAAgB,YAAY,4CA0N3B"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { useRef, useState } from 'react';
|
|
3
|
+
import { useEffect, useRef, useState } from 'react';
|
|
4
4
|
import { Plus, Trash2, Upload, Download, Sparkles, ArrowRight, GitBranch, Check, X, Link2, } from 'lucide-react';
|
|
5
5
|
import { toast } from 'sonner';
|
|
6
|
-
import { fetchRedirectOverview, fetchRedirectRules, fetchRedirectChains, fetchRedirectSuggestions, deleteRedirectRule, flattenRedirectChain, generate404RecoverySuggestions, acceptRedirectSuggestion, dismissRedirectSuggestion, exportRedirectsCsv, importRedirectsCsv, } from '../../lib/seo-service.js';
|
|
6
|
+
import { fetchRedirectOverview, fetchRedirectRules, fetchRedirectChains, fetchRedirectSuggestions, deleteRedirectRule, flattenRedirectChain, generate404RecoverySuggestions, fetchRedirectRecoverySettings, saveRedirectRecoverySettings, acceptRedirectSuggestion, dismissRedirectSuggestion, exportRedirectsCsv, importRedirectsCsv, } from '../../lib/seo-service.js';
|
|
7
7
|
import { SectionCard, SeoLoading, SeoEmptyState, SeoErrorState, SeoStatusBadge, btnPrimary, btnSecondary, btnGhostIcon, } from '../../components/seo/primitives.js';
|
|
8
8
|
import { RedirectEditorPane } from '../../components/seo/RedirectEditorPane.js';
|
|
9
9
|
import { InspectorPane, SplitPaneLayout, SplitPaneList } from '../../components/ui/InspectorPane.js';
|
|
@@ -25,6 +25,36 @@ function OverviewCards({ onRefetchKey }) {
|
|
|
25
25
|
];
|
|
26
26
|
return (_jsx("div", { className: "grid grid-cols-2 gap-4 lg:grid-cols-4", children: cards.map((c) => (_jsxs("div", { className: "border-border bg-card rounded-lg border p-4", children: [_jsx("p", { className: "text-muted-foreground text-sm", children: c.label }), _jsx("p", { className: "text-foreground mt-1 text-2xl font-medium tabular-nums", children: c.value })] }, c.label))) }));
|
|
27
27
|
}
|
|
28
|
+
function RecoverySettingsCard() {
|
|
29
|
+
const { data, loading, error, refetch } = useSeoResource(fetchRedirectRecoverySettings, []);
|
|
30
|
+
const [saving, setSaving] = useState(false);
|
|
31
|
+
const [local, setLocal] = useState(null);
|
|
32
|
+
useEffect(() => {
|
|
33
|
+
if (data)
|
|
34
|
+
setLocal(data);
|
|
35
|
+
}, [data]);
|
|
36
|
+
async function handleSave() {
|
|
37
|
+
if (!local)
|
|
38
|
+
return;
|
|
39
|
+
setSaving(true);
|
|
40
|
+
const res = await saveRedirectRecoverySettings(local);
|
|
41
|
+
setSaving(false);
|
|
42
|
+
if (res.error)
|
|
43
|
+
return toast.error(res.error);
|
|
44
|
+
toast.success('Recovery settings saved.');
|
|
45
|
+
refetch();
|
|
46
|
+
}
|
|
47
|
+
if (loading)
|
|
48
|
+
return null;
|
|
49
|
+
if (error)
|
|
50
|
+
return null;
|
|
51
|
+
if (!local)
|
|
52
|
+
return null;
|
|
53
|
+
return (_jsx(SectionCard, { title: "404 recovery settings", description: "Control AI re-ranking and optional auto-redirect for high-confidence matches", children: _jsxs("div", { className: "space-y-4", children: [_jsxs("label", { className: "flex items-start gap-3", children: [_jsx("input", { type: "checkbox", className: "border-border mt-1 h-4 w-4 rounded", checked: local.aiRerank, onChange: (e) => setLocal({ ...local, aiRerank: e.target.checked }) }), _jsxs("span", { children: [_jsx("span", { className: "text-foreground text-sm font-medium", children: "AI re-ranking" }), _jsx("span", { className: "text-muted-foreground block text-sm", children: "Use semantic search to resolve ambiguous matches (40\u201384% heuristic confidence)." })] })] }), _jsxs("label", { className: "flex items-start gap-3", children: [_jsx("input", { type: "checkbox", className: "border-border mt-1 h-4 w-4 rounded", checked: local.autoApply, onChange: (e) => setLocal({ ...local, autoApply: e.target.checked }) }), _jsxs("span", { children: [_jsx("span", { className: "text-foreground text-sm font-medium", children: "Auto-apply high-confidence redirects" }), _jsx("span", { className: "text-muted-foreground block text-sm", children: "Create 301 redirects automatically when confidence meets the threshold (off by default)." })] })] }), _jsxs("label", { className: "block max-w-xs", children: [_jsx("span", { className: "text-foreground text-sm font-medium", children: "Auto-apply minimum confidence" }), _jsx("input", { type: "number", min: 50, max: 100, value: local.autoApplyMinConfidence, disabled: !local.autoApply, onChange: (e) => setLocal({
|
|
54
|
+
...local,
|
|
55
|
+
autoApplyMinConfidence: Math.max(50, Math.min(100, Number(e.target.value) || 85)),
|
|
56
|
+
}), className: "border-border bg-input-background text-foreground focus-visible:ring-ring mt-1 w-full rounded-md border px-3 py-2 text-sm focus-visible:ring-2 focus-visible:outline-none disabled:opacity-50" })] }), _jsx("button", { className: btnSecondary, onClick: handleSave, disabled: saving, children: saving ? 'Saving…' : 'Save settings' })] }) }));
|
|
57
|
+
}
|
|
28
58
|
function Ai404RecoveryCard({ onApplied }) {
|
|
29
59
|
const { data, loading, error, refetch } = useSeoResource(fetchRedirectSuggestions, []);
|
|
30
60
|
const [generating, setGenerating] = useState(false);
|
|
@@ -36,7 +66,10 @@ function Ai404RecoveryCard({ onApplied }) {
|
|
|
36
66
|
toast.error(res.error);
|
|
37
67
|
return;
|
|
38
68
|
}
|
|
39
|
-
|
|
69
|
+
const autoMsg = res.autoApplied && res.autoApplied > 0
|
|
70
|
+
? ` ${res.autoApplied} high-confidence redirect${res.autoApplied === 1 ? '' : 's'} applied automatically.`
|
|
71
|
+
: '';
|
|
72
|
+
toast.success(`Generated 404 recovery suggestions.${autoMsg}`);
|
|
40
73
|
refetch();
|
|
41
74
|
}
|
|
42
75
|
async function handleAccept(id) {
|
|
@@ -53,7 +86,7 @@ function Ai404RecoveryCard({ onApplied }) {
|
|
|
53
86
|
return toast.error(res.error);
|
|
54
87
|
refetch();
|
|
55
88
|
}
|
|
56
|
-
return (_jsx(SectionCard, { title: "AI 404 Recovery", description: "Suggested redirects for paths returning 404s", action: _jsxs("button", { className: btnSecondary, onClick: handleGenerate, disabled: generating, children: [_jsx(Sparkles, { className: `h-4 w-4 ${generating ? 'animate-pulse' : ''}`, "aria-hidden": true }), generating ? 'Analyzing…' : 'Generate suggestions'] }), children: loading ? (_jsx(SeoLoading, {})) : error ? (_jsx(SeoErrorState, { message: error, onRetry: refetch })) : (data ?? []).length === 0 ? (_jsx(SeoEmptyState, { icon: _jsx(Sparkles, { size: 24 }), title: "No suggestions", description: "Generate suggestions to recover traffic from broken URLs." })) : (_jsx("ul", { className: "divide-border divide-y", children: data.map((s) => (_jsxs("li", { className: "flex items-center justify-between gap-3 py-3
|
|
89
|
+
return (_jsx(SectionCard, { title: "AI 404 Recovery", description: "Suggested redirects for paths returning 404s", action: _jsxs("button", { className: btnSecondary, onClick: handleGenerate, disabled: generating, children: [_jsx(Sparkles, { className: `h-4 w-4 ${generating ? 'animate-pulse' : ''}`, "aria-hidden": true }), generating ? 'Analyzing…' : 'Generate suggestions'] }), children: loading ? (_jsx(SeoLoading, {})) : error ? (_jsx(SeoErrorState, { message: error, onRetry: refetch })) : (data ?? []).length === 0 ? (_jsx(SeoEmptyState, { icon: _jsx(Sparkles, { size: 24 }), title: "No suggestions", description: "Generate suggestions to recover traffic from broken URLs." })) : (_jsx("ul", { className: "divide-border divide-y", children: data.map((s) => (_jsxs("li", { className: "flex items-center justify-between gap-3 py-3", children: [_jsxs("div", { className: "min-w-0", children: [_jsxs("p", { className: "text-foreground flex items-center gap-2 text-sm", children: [_jsx("span", { className: "truncate font-medium", children: s.fromPath }), _jsx(ArrowRight, { className: "text-muted-foreground h-3.5 w-3.5 shrink-0", "aria-hidden": true }), _jsx("span", { className: "text-muted-foreground truncate", children: s.toPath })] }), s.reason && _jsx("p", { className: "text-muted-foreground mt-0.5 text-sm", children: s.reason })] }), _jsxs("div", { className: "flex shrink-0 items-center gap-2", children: [_jsx(SeoStatusBadge, { label: `${Math.round(s.confidence * 100)}%`, tone: s.confidence >= 0.7 ? 'good' : s.confidence >= 0.4 ? 'fair' : 'poor' }), _jsx("button", { onClick: () => handleAccept(s.id), className: "text-success hover:bg-accent focus-visible:ring-ring rounded-md p-1.5 focus-visible:ring-2 focus-visible:outline-none", "aria-label": `Accept redirect from ${s.fromPath}`, children: _jsx(Check, { className: "h-4 w-4", "aria-hidden": true }) }), _jsx("button", { onClick: () => handleDismiss(s.id), className: "text-muted-foreground hover:bg-accent focus-visible:ring-ring rounded-md p-1.5 focus-visible:ring-2 focus-visible:outline-none", "aria-label": `Dismiss suggestion for ${s.fromPath}`, children: _jsx(X, { className: "h-4 w-4", "aria-hidden": true }) })] })] }, s.id))) })) }));
|
|
57
90
|
}
|
|
58
91
|
function ChainMapCard({ onFlattened }) {
|
|
59
92
|
const { data, loading, error, refetch } = useSeoResource(fetchRedirectChains, []);
|
|
@@ -71,7 +104,7 @@ function ChainMapCard({ onFlattened }) {
|
|
|
71
104
|
return null;
|
|
72
105
|
if (!data || data.length === 0)
|
|
73
106
|
return null;
|
|
74
|
-
return (_jsx(SectionCard, { title: "Redirect Chains & Loops", description: "Multi-hop redirects slow crawlers and lose link equity", children: _jsx("ul", { className: "space-y-3", children: data.map((chain) => (_jsxs("li", { className: "border-border flex items-center justify-between gap-3 rounded-md border p-
|
|
107
|
+
return (_jsx(SectionCard, { title: "Redirect Chains & Loops", description: "Multi-hop redirects slow crawlers and lose link equity", children: _jsx("ul", { className: "space-y-3", children: data.map((chain) => (_jsxs("li", { className: "border-border flex items-center justify-between gap-3 rounded-md border p-4", children: [_jsxs("div", { className: "min-w-0", children: [_jsxs("div", { className: "mb-1 flex items-center gap-2", children: [_jsx(GitBranch, { className: "text-muted-foreground h-4 w-4", "aria-hidden": true }), _jsx(SeoStatusBadge, { label: chain.kind === 'loop' ? 'Loop' : 'Chain', tone: chain.kind === 'loop' ? 'critical' : 'fair' })] }), _jsx("p", { className: "text-foreground flex flex-wrap items-center gap-1 text-sm", children: chain.hops.map((hop, i) => (_jsxs("span", { className: "flex items-center gap-1", children: [_jsx("span", { className: "truncate", children: hop }), i < chain.hops.length - 1 && (_jsx(ArrowRight, { className: "text-muted-foreground h-3 w-3", "aria-hidden": true }))] }, i))) })] }), chain.kind === 'chain' && (_jsx("button", { className: btnSecondary, onClick: () => handleFlatten(chain.id), children: "Flatten" }))] }, chain.id))) }) }));
|
|
75
108
|
}
|
|
76
109
|
export function RedirectsTab() {
|
|
77
110
|
const [refetchKey, setRefetchKey] = useState(0);
|
|
@@ -123,7 +156,7 @@ export function RedirectsTab() {
|
|
|
123
156
|
}
|
|
124
157
|
refetchAll();
|
|
125
158
|
}
|
|
126
|
-
return (_jsxs("div", { className: "space-y-4", children: [_jsx(OverviewCards, { onRefetchKey: refetchKey }), _jsxs("div", { className: "grid grid-cols-1 gap-4 xl:grid-cols-2", children: [_jsx(Ai404RecoveryCard, { onApplied: refetchAll }), _jsx(ChainMapCard, { onFlattened: refetchAll })] }), _jsxs(SplitPaneLayout, { className: "h-[calc(100vh-280px)] min-h-[440px]", children: [_jsx(SplitPaneList, { children: _jsx(SectionCard, { title: "Redirect Rules", action: _jsxs("div", { className: "flex flex-wrap gap-2", children: [_jsx("input", { ref: fileRef, type: "file", accept: ".csv,text/csv", className: "sr-only", "aria-hidden": true, tabIndex: -1, onChange: (e) => {
|
|
159
|
+
return (_jsxs("div", { className: "space-y-4", children: [_jsx(OverviewCards, { onRefetchKey: refetchKey }), _jsxs("div", { className: "grid grid-cols-1 gap-4 xl:grid-cols-2", children: [_jsx(RecoverySettingsCard, {}), _jsx(Ai404RecoveryCard, { onApplied: refetchAll }), _jsx(ChainMapCard, { onFlattened: refetchAll })] }), _jsxs(SplitPaneLayout, { className: "h-[calc(100vh-280px)] min-h-[440px]", children: [_jsx(SplitPaneList, { children: _jsx(SectionCard, { title: "Redirect Rules", action: _jsxs("div", { className: "flex flex-wrap gap-2", children: [_jsx("input", { ref: fileRef, type: "file", accept: ".csv,text/csv", className: "sr-only", "aria-hidden": true, tabIndex: -1, onChange: (e) => {
|
|
127
160
|
const f = e.target.files?.[0];
|
|
128
161
|
if (f)
|
|
129
162
|
handleImportFile(f);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RedirectsTab.js","sourceRoot":"","sources":["../../../src/views/seo/RedirectsTab.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"RedirectsTab.js","sourceRoot":"","sources":["../../../src/views/seo/RedirectsTab.tsx"],"names":[],"mappings":"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"}
|
|
@@ -42,7 +42,7 @@ const CRAWL_TOGGLES = [
|
|
|
42
42
|
function Toggle({ checked, onChange, label, help, disabled, }) {
|
|
43
43
|
const labelId = useId();
|
|
44
44
|
const helpId = useId();
|
|
45
|
-
return (_jsxs("div", { className: "flex items-center justify-between gap-3 py-
|
|
45
|
+
return (_jsxs("div", { className: "flex items-center justify-between gap-3 py-3.5", children: [_jsxs("span", { className: "min-w-0", children: [_jsx("span", { id: labelId, className: "text-foreground block text-sm font-medium", children: label }), _jsx("span", { id: helpId, className: "text-muted-foreground block text-sm", children: help })] }), _jsx(UiToggle, { checked: checked, onCheckedChange: onChange, disabled: disabled, "aria-labelledby": labelId, "aria-describedby": helpId })] }));
|
|
46
46
|
}
|
|
47
47
|
function SitemapCard() {
|
|
48
48
|
const { data, loading, error, refetch } = useSeoResource(fetchSitemapStatus, []);
|
|
@@ -100,7 +100,7 @@ function RobotsCard() {
|
|
|
100
100
|
toast.success('robots.txt saved.');
|
|
101
101
|
refetch();
|
|
102
102
|
}
|
|
103
|
-
return (_jsx(SectionCard, { title: "robots.txt", description: "Controls which crawlers can access your site.", action: _jsx("button", { className: btnPrimary, onClick: handleSave, disabled: saving || loading || !validation.valid, children: saving ? 'Saving…' : 'Save' }), children: loading ? (_jsx(SeoLoading, { label: "Loading robots.txt\u2026" })) : error ? (_jsx(SeoErrorState, { message: error, onRetry: refetch })) : (_jsxs("div", { className: "space-y-3", children: [validation.blocksEntireSite && (_jsxs("div", { className: "border-destructive/30 bg-destructive/10 flex items-start gap-2 rounded-md border p-
|
|
103
|
+
return (_jsx(SectionCard, { title: "robots.txt", description: "Controls which crawlers can access your site.", action: _jsx("button", { className: btnPrimary, onClick: handleSave, disabled: saving || loading || !validation.valid, children: saving ? 'Saving…' : 'Save' }), children: loading ? (_jsx(SeoLoading, { label: "Loading robots.txt\u2026" })) : error ? (_jsx(SeoErrorState, { message: error, onRetry: refetch })) : (_jsxs("div", { className: "space-y-3", children: [validation.blocksEntireSite && (_jsxs("div", { className: "border-destructive/30 bg-destructive/10 flex items-start gap-2 rounded-md border p-4", role: "alert", children: [_jsx(AlertTriangle, { className: "text-destructive mt-0.5 h-4 w-4 shrink-0", "aria-hidden": true }), _jsx("p", { className: "text-destructive text-sm", children: "This configuration blocks your entire site from all search engines. Pages will be removed from search results." })] })), _jsx("label", { className: "sr-only", htmlFor: "robots-editor", children: "robots.txt contents" }), _jsx("textarea", { id: "robots-editor", value: body, onChange: (e) => setBody(e.target.value), spellCheck: false, className: "border-border bg-input-background text-foreground focus-visible:ring-ring min-h-48 w-full rounded-md border p-3 font-mono text-sm focus-visible:ring-2 focus-visible:outline-none" }), validation.errors.length > 0 ? (_jsx("ul", { className: "space-y-1", children: validation.errors.map((e, i) => (_jsxs("li", { className: "text-destructive flex items-center gap-1.5 text-sm", children: [_jsx(AlertTriangle, { className: "h-3.5 w-3.5", "aria-hidden": true }), " ", e] }, i))) })) : (_jsxs("p", { className: "text-success flex items-center gap-1.5 text-sm", children: [_jsx(CheckCircle2, { className: "h-3.5 w-3.5", "aria-hidden": true }), " Valid robots.txt"] })), validation.warnings
|
|
104
104
|
.filter((w) => !validation.blocksEntireSite || !w.includes('blocks the entire site'))
|
|
105
105
|
.map((w, i) => (_jsxs("p", { className: "text-warning flex items-center gap-1.5 text-sm", children: [_jsx(AlertTriangle, { className: "h-3.5 w-3.5", "aria-hidden": true }), " ", w] }, i)))] })) }));
|
|
106
106
|
}
|
|
@@ -52,7 +52,7 @@ export function AISettingsTab({ role, config }) {
|
|
|
52
52
|
if (ai.loading) {
|
|
53
53
|
return (_jsxs("div", { className: "space-y-4", "aria-busy": "true", "aria-live": "polite", children: [_jsx("span", { className: "sr-only", children: "Loading AI settings\u2026" }), [0, 1, 2].map((i) => (_jsxs("div", { className: "border-border bg-card rounded-lg border p-6", children: [_jsx("div", { className: "bg-muted mb-4 h-4 w-40 animate-pulse rounded" }), _jsxs("div", { className: "space-y-3", children: [_jsx("div", { className: "bg-muted h-9 w-full animate-pulse rounded" }), _jsx("div", { className: "bg-muted h-9 w-full animate-pulse rounded" })] })] }, i)))] }));
|
|
54
54
|
}
|
|
55
|
-
return (_jsxs("div", { className: "space-y-4", children: [ai.loadError && (_jsxs("div", { role: "alert", className: "border-destructive/30 bg-destructive/10 text-destructive flex items-center gap-3 rounded-lg border p-
|
|
55
|
+
return (_jsxs("div", { className: "space-y-4", children: [ai.loadError && (_jsxs("div", { role: "alert", className: "border-destructive/30 bg-destructive/10 text-destructive flex items-center gap-3 rounded-lg border p-4 text-sm", children: [_jsx(AlertTriangle, { size: 16, className: "shrink-0", "aria-hidden": "true" }), _jsx("span", { className: "flex-1", children: ai.loadError }), _jsx("button", { type: "button", onClick: ai.refetch, className: "border-destructive/40 rounded-md border px-3 py-1 transition-colors hover:opacity-80", children: "Retry" })] })), !canEdit && (_jsxs("div", { className: "border-border bg-muted text-muted-foreground flex items-center gap-2 rounded-lg border p-4 text-sm", children: [_jsx(Info, { size: 16, className: "shrink-0", "aria-hidden": "true" }), "You have read-only access to AI settings. Only administrators can make changes."] })), _jsx(AssistantCard, { ai: ai, canEdit: canEdit }), _jsx(ProviderConnectionsSection, { ai: ai, canEdit: canEdit }), _jsx(AiFeaturesCard, { features: ai.form.features, models: ai.models, defaultModelId: ai.form.defaultModelId, canEdit: canEdit, onToggle: ai.toggleFeature, onSetFeatureModel: ai.setFeatureModel }), _jsx(BrandVoiceCard, { value: ai.form.brandVoice, canEdit: canEdit, onChange: ai.setBrandVoice, config: config, onAnalyze: canEdit ? ai.analyzeBrandVoice : undefined, onScore: canEdit ? ai.scoreBrandVoice : undefined, editMode: ai.brandVoiceEditMode, onEditModeChange: ai.setBrandVoiceEditMode, aiReadiness: brandVoiceAiReadiness }), _jsx(MonthlyUsageCard, { usage: ai.usage, monthlyTokenLimit: ai.form.monthlyTokenLimit, onChangeLimit: ai.setMonthlyTokenLimit, budgetError: ai.budgetError, canEdit: canEdit }), ai.saveState === 'error' && ai.saveError && (_jsxs("div", { role: "alert", className: "border-destructive/30 bg-destructive/10 text-destructive flex items-center gap-3 rounded-lg border p-4 text-sm", children: [_jsx(AlertTriangle, { size: 16, className: "shrink-0", "aria-hidden": "true" }), _jsx("span", { className: "flex-1", children: ai.saveError })] })), _jsx(SettingsSaveBar, { dirty: ai.dirty, canEdit: canEdit, hasErrors: Boolean(ai.budgetError), saveState: ai.saveState, onSave: ai.save, onReset: ai.reset })] }));
|
|
56
56
|
}
|
|
57
57
|
// ---------------------------------------------------------------------------
|
|
58
58
|
// AI Assistant — default provider + default model
|
|
@@ -24,7 +24,7 @@ function FeatureRow({ feature, models, defaultModelId, canEdit, onToggle, onSetF
|
|
|
24
24
|
const defaultLabel = defaultModel
|
|
25
25
|
? `Use default (${defaultModel.displayName})`
|
|
26
26
|
: 'Use default model';
|
|
27
|
-
return (_jsxs("div", { className: "py-4
|
|
27
|
+
return (_jsxs("div", { className: "py-4", children: [_jsx(SettingsToggleRow, { label: feature.label, description: feature.description, checked: feature.enabled, disabled: !canEdit, onChange: (v) => onToggle(feature.key, v) }), feature.enabled && (_jsxs("div", { className: "mt-3 pl-0", children: [_jsx("label", { htmlFor: selectId, className: "text-muted-foreground mb-1 block text-sm", children: "Model" }), hasModels ? (_jsxs("select", { id: selectId, value: feature.modelId ?? '', disabled: !canEdit, onChange: (e) => onSetFeatureModel(feature.key, e.target.value), className: SELECT_CLASS, children: [_jsx("option", { value: "", children: defaultLabel }), models.map((m) => {
|
|
28
28
|
const compatible = isModelCompatible(m, required);
|
|
29
29
|
return (_jsxs("option", { value: m.id, disabled: !compatible, children: [m.displayName, m.status === 'unavailable' ? ' (unavailable)' : '', m.status !== 'unavailable' && !compatible ? ' (incompatible)' : ''] }, m.id));
|
|
30
30
|
})] })) : (_jsx("p", { className: "text-muted-foreground text-sm", children: "Connect a provider and refresh models to route this feature." })), hasModels && !effective.isOverride && (_jsx("p", { className: "text-muted-foreground mt-1 text-sm", children: effective.model
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AiFeaturesCard.js","sourceRoot":"","sources":["../../../src/views/settings/AiFeaturesCard.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAA;AAC7B,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AACjE,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAG7F,MAAM,YAAY,GAChB,sNAAsN,CAAA;AAExN;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,EAC7B,QAAQ,EACR,MAAM,EACN,cAAc,EACd,OAAO,EACP,QAAQ,EACR,iBAAiB,GAQlB;IACC,OAAO,CACL,KAAC,YAAY,IACX,KAAK,EAAC,aAAa,EACnB,WAAW,EAAC,+FAA+F,YAE1G,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CACvB,YAAG,SAAS,EAAC,+BAA+B,8CAAkC,CAC/E,CAAC,CAAC,CAAC,CACF,cAAK,SAAS,EAAC,wBAAwB,YACpC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACnB,KAAC,UAAU,IAET,OAAO,EAAE,CAAC,EACV,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,cAAc,EAC9B,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,QAAQ,EAClB,iBAAiB,EAAE,iBAAiB,IAN/B,CAAC,CAAC,GAAG,CAOV,CACH,CAAC,GACE,CACP,GACY,CAChB,CAAA;AACH,CAAC;AAED,SAAS,UAAU,CAAC,EAClB,OAAO,EACP,MAAM,EACN,cAAc,EACd,OAAO,EACP,QAAQ,EACR,iBAAiB,GAQlB;IACC,MAAM,QAAQ,GAAG,KAAK,EAAE,CAAA;IACxB,MAAM,QAAQ,GAAG,OAAO,CAAC,oBAAoB,IAAI,EAAE,CAAA;IACnD,MAAM,SAAS,GAAG,qBAAqB,CAAC,OAAO,CAAC,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAA;IAC1F,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAC9B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,cAAc,IAAI,CAAC,CAAC,eAAe,KAAK,cAAc,CACvE,CAAA;IAED,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAA;IACnC,MAAM,YAAY,GAAG,YAAY;QAC/B,CAAC,CAAC,gBAAgB,YAAY,CAAC,WAAW,GAAG;QAC7C,CAAC,CAAC,mBAAmB,CAAA;IAEvB,OAAO,CACL,eAAK,SAAS,EAAC,
|
|
1
|
+
{"version":3,"file":"AiFeaturesCard.js","sourceRoot":"","sources":["../../../src/views/settings/AiFeaturesCard.tsx"],"names":[],"mappings":"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"}
|
|
@@ -19,6 +19,6 @@ export function AppearanceTab({ role, config }) {
|
|
|
19
19
|
if (s.loadError) {
|
|
20
20
|
return (_jsxs("div", { role: "alert", className: "border-destructive/30 bg-destructive/10 text-destructive flex items-center justify-between gap-4 rounded-lg border p-4 text-sm", children: [_jsxs("span", { className: "flex items-center gap-2", children: [_jsx(AlertTriangle, { size: 16, "aria-hidden": "true" }), " ", s.loadError] }), _jsxs("button", { type: "button", onClick: s.reload, className: "border-destructive/40 text-destructive hover:bg-destructive/10 inline-flex items-center gap-1.5 rounded-md border px-3 py-1.5", children: [_jsx(Loader2, { size: 14, "aria-hidden": "true" }), " Retry"] })] }));
|
|
21
21
|
}
|
|
22
|
-
return (_jsxs("div", { className: "space-y-4", children: [!canEdit && (_jsx("p", { className: "text-muted-foreground border-border bg-muted rounded-lg border p-
|
|
22
|
+
return (_jsxs("div", { className: "space-y-4", children: [!canEdit && (_jsx("p", { className: "text-muted-foreground border-border bg-muted rounded-lg border p-4 text-sm", children: "You have read-only access to appearance settings." })), _jsx(SettingsValidationSummary, { issues: s.issues }), _jsx(BrandingCard, { s: s, canEdit: canEdit }), _jsx(AdminThemeCard, { s: s, canEdit: canEdit }), _jsx(TypographyMotionCard, { s: s, canEdit: canEdit }), _jsx(BrandPreviewCard, { s: s }), _jsx(SettingsSaveBar, { dirty: s.dirty, canEdit: canEdit, hasErrors: s.issues.some((i) => i.severity === 'error'), saveState: s.saveState, onSave: s.save, onReset: s.reset })] }));
|
|
23
23
|
}
|
|
24
24
|
//# sourceMappingURL=AppearanceTab.js.map
|
|
@@ -220,7 +220,7 @@ export function BrandVoiceCard({ value, canEdit, onChange, config, onAnalyze, on
|
|
|
220
220
|
setUploads((prev) => [...prev, ...next].slice(0, 5));
|
|
221
221
|
toast.success(`Added ${next.length} upload${next.length === 1 ? '' : 's'}.`);
|
|
222
222
|
}, []);
|
|
223
|
-
return (_jsx(SettingsCard, { title: "Brand voice", description: "Teach the AI how your brand sounds. Applied to content writing and SEO copy.", children: _jsxs("div", { className: "space-y-4", children: [_jsx(SettingsToggleRow, { label: "Apply brand voice", description: "When on, generated copy follows the tone and guidelines below.", checked: value.enabled, disabled: disabled, onChange: (v) => onChange({ enabled: v }) }), aiReadiness && !aiReadiness.ready && aiReadiness.message && (_jsxs("div", { role: "status", className: "border-warning/40 bg-warning/10 text-foreground flex items-start gap-3 rounded-lg border p-
|
|
223
|
+
return (_jsx(SettingsCard, { title: "Brand voice", description: "Teach the AI how your brand sounds. Applied to content writing and SEO copy.", children: _jsxs("div", { className: "space-y-4", children: [_jsx(SettingsToggleRow, { label: "Apply brand voice", description: "When on, generated copy follows the tone and guidelines below.", checked: value.enabled, disabled: disabled, onChange: (v) => onChange({ enabled: v }) }), aiReadiness && !aiReadiness.ready && aiReadiness.message && (_jsxs("div", { role: "status", className: "border-warning/40 bg-warning/10 text-foreground flex items-start gap-3 rounded-lg border p-4 text-sm", children: [_jsx(AlertTriangle, { size: 16, className: "text-warning mt-0.5 shrink-0", "aria-hidden": "true" }), _jsx("p", { children: aiReadiness.message })] })), _jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [_jsxs("button", { type: "button", onClick: handleExport, disabled: disabled, className: "border-border text-foreground hover:bg-accent inline-flex items-center gap-1.5 rounded-md border px-3 py-1.5 text-sm transition-colors disabled:cursor-not-allowed disabled:opacity-50", children: [_jsx(Download, { size: 14, "aria-hidden": "true" }), "Export .md"] }), _jsxs("button", { type: "button", onClick: () => importRef.current?.click(), disabled: disabled, className: "border-border text-foreground hover:bg-accent inline-flex items-center gap-1.5 rounded-md border px-3 py-1.5 text-sm transition-colors disabled:cursor-not-allowed disabled:opacity-50", children: [_jsx(FileUp, { size: 14, "aria-hidden": "true" }), "Import .md"] }), _jsx("input", { ref: importRef, id: importInputId, type: "file", accept: ".md,text/markdown,text/plain", className: "sr-only", disabled: disabled, onChange: (e) => void handleImportFile(e.target.files?.[0]) }), !showAdvanced ? (_jsx("button", { type: "button", onClick: openAdvanced, disabled: disabled, className: "text-primary hover:text-primary/80 text-sm transition-colors disabled:cursor-not-allowed disabled:opacity-50", children: "Advanced profile document" })) : (_jsx("button", { type: "button", onClick: () => onEditModeChange('form'), disabled: disabled, className: "text-primary hover:text-primary/80 text-sm transition-colors disabled:cursor-not-allowed disabled:opacity-50", children: "Back to quick edit" }))] }), importError && (_jsx("div", { role: "alert", className: "border-destructive/30 bg-destructive/10 text-destructive rounded-md border p-4 text-sm", children: importError })), onAnalyze && (_jsxs("div", { id: generatePanelId, className: "border-border space-y-3 rounded-md border border-dashed p-4", children: [_jsxs("div", { children: [_jsx("p", { className: "text-foreground text-base font-medium", children: "Generate from content" }), _jsx("p", { className: "text-muted-foreground mt-1 text-sm", children: "Scan published pages and posts, public URLs, or uploaded text files to draft a profile you can edit before saving." })] }), collections.length > 0 && (_jsxs("fieldset", { className: "space-y-2", disabled: disabled || analyzing, children: [_jsx("legend", { className: "text-foreground mb-1 text-sm font-medium", children: "CMS collections" }), collections.map((col) => {
|
|
224
224
|
const inputId = `${generatePanelId}-${col.slug}`;
|
|
225
225
|
const checked = selectedCollections.includes(col.slug);
|
|
226
226
|
return (_jsxs("label", { htmlFor: inputId, className: "text-foreground flex cursor-pointer items-center gap-2 text-sm", children: [_jsx("input", { id: inputId, type: "checkbox", checked: checked, disabled: disabled || analyzing, onChange: (e) => toggleCollection(col.slug, e.target.checked), className: "border-border text-primary focus-visible:ring-ring size-4 rounded border focus-visible:ring-2 focus-visible:outline-none" }), col.label] }, col.slug));
|
|
@@ -30,7 +30,7 @@ function Notice({ tone, children, }) {
|
|
|
30
30
|
? 'border-destructive/30 bg-destructive/10 text-destructive'
|
|
31
31
|
: 'border-border bg-muted text-muted-foreground';
|
|
32
32
|
const Icon = tone === 'success' ? CheckCircle2 : tone === 'info' ? Info : AlertTriangle;
|
|
33
|
-
return (_jsxs("div", { role: "status", "aria-live": "polite", className: `flex items-start gap-2.5 rounded-lg border p-
|
|
33
|
+
return (_jsxs("div", { role: "status", "aria-live": "polite", className: `flex items-start gap-2.5 rounded-lg border p-4 text-sm ${toneClass}`, children: [_jsx(Icon, { size: 16, className: "mt-0.5 shrink-0", "aria-hidden": "true" }), _jsx("div", { className: "min-w-0", children: children })] }));
|
|
34
34
|
}
|
|
35
35
|
function ProviderFields({ s, canEdit }) {
|
|
36
36
|
const ids = {
|
|
@@ -60,7 +60,7 @@ export function EmailSettingsTab({ role }) {
|
|
|
60
60
|
return (_jsx("div", { className: "flex h-48 items-center justify-center", "aria-label": "Loading email settings", children: _jsx(Loader2, { className: "text-brand h-6 w-6 animate-spin", "aria-hidden": "true" }) }));
|
|
61
61
|
}
|
|
62
62
|
if (s.loadError) {
|
|
63
|
-
return (_jsxs("div", { role: "alert", className: "border-destructive/30 bg-destructive/10 text-destructive flex items-center gap-3 rounded-lg border p-
|
|
63
|
+
return (_jsxs("div", { role: "alert", className: "border-destructive/30 bg-destructive/10 text-destructive flex items-center gap-3 rounded-lg border p-4 text-sm", children: [_jsx(AlertTriangle, { size: 20, className: "shrink-0", "aria-hidden": "true" }), _jsx("span", { className: "flex-1", children: s.loadError }), _jsx("button", { onClick: s.reload, className: "border-destructive/40 rounded-md border px-3 py-1 transition-colors hover:opacity-80", children: "Retry" })] }));
|
|
64
64
|
}
|
|
65
65
|
const configured = s.form.provider !== '';
|
|
66
66
|
return (_jsxs("div", { className: "space-y-4", children: [!canEdit && (_jsx(Notice, { tone: "info", children: "You have read-only access to email settings. Ask an administrator to make changes." })), s.platformAdapter && (_jsxs(Notice, { tone: "info", children: ["A platform email adapter is configured in code (", _jsx("code", { children: "platform.email" }), "); it takes precedence over the settings on this page."] })), !s.platformAdapter && s.env.provider && (_jsxs(Notice, { tone: "info", children: ["Environment variables currently configure", ' ', _jsx("strong", { children: PROVIDER_LABEL[s.env.provider] }), ". Settings saved here take precedence over the environment configuration."] })), configured && !s.factoryAvailable && (_jsxs(Notice, { tone: "warning", children: ["Sending with these settings requires the email plugin. Add ", _jsx("code", { children: "emailPlugin()" }), " from", ' ', _jsx("code", { children: "@actuate-media/plugin-email" }), " to your ", _jsx("code", { children: "actuate.config.ts" }), "."] })), _jsxs(SettingsCard, { title: "Email delivery", description: "Transactional email provider for invitations, password resets, and form notifications. Credentials are encrypted at rest.", actions: _jsxs("button", { type: "button", onClick: () => void s.sendTest(), disabled: s.testing || s.dirty || (!configured && !s.env.senderActive), title: s.dirty ? 'Save your changes before sending a test.' : undefined, 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: [s.testing ? (_jsx(Loader2, { size: 14, className: "animate-spin", "aria-hidden": "true" })) : (_jsx(Send, { size: 14, "aria-hidden": "true" })), "Send test email"] }), children: [_jsxs("div", { className: "space-y-5", children: [_jsxs("div", { children: [_jsx("span", { id: providerGroupId, className: LABEL_CLASS, children: "Provider" }), _jsx("div", { role: "radiogroup", "aria-labelledby": providerGroupId, className: "flex flex-wrap gap-2", children: [{ value: '', label: 'None' }, ...EMAIL_PROVIDER_OPTIONS].map((opt) => {
|
|
@@ -14,6 +14,6 @@ export function GeneralSettingsTab({ onNavigate, role }) {
|
|
|
14
14
|
if (settings.loading) {
|
|
15
15
|
return (_jsxs("div", { className: "space-y-4", "aria-busy": "true", "aria-live": "polite", children: [_jsx("span", { className: "sr-only", children: "Loading settings\u2026" }), [0, 1, 2, 3].map((i) => (_jsxs("div", { className: "border-border bg-card rounded-lg border p-6", children: [_jsx("div", { className: "bg-muted mb-4 h-4 w-40 animate-pulse rounded" }), _jsxs("div", { className: "space-y-3", children: [_jsx("div", { className: "bg-muted h-9 w-full animate-pulse rounded" }), _jsx("div", { className: "bg-muted h-9 w-full animate-pulse rounded" })] })] }, i)))] }));
|
|
16
16
|
}
|
|
17
|
-
return (_jsxs("div", { className: "space-y-4", children: [settings.loadError && (_jsxs("div", { role: "alert", className: "border-destructive/30 bg-destructive/10 text-destructive flex items-center gap-3 rounded-lg border p-
|
|
17
|
+
return (_jsxs("div", { className: "space-y-4", children: [settings.loadError && (_jsxs("div", { role: "alert", className: "border-destructive/30 bg-destructive/10 text-destructive flex items-center gap-3 rounded-lg border p-4 text-sm", children: [_jsx(AlertTriangle, { size: 16, className: "shrink-0", "aria-hidden": "true" }), _jsx("span", { className: "flex-1", children: settings.loadError }), _jsx("button", { type: "button", onClick: settings.refetch, className: "border-destructive/40 rounded-md border px-3 py-1 transition-colors hover:opacity-80", children: "Retry" })] })), !canEdit && (_jsxs("div", { className: "border-border bg-muted text-muted-foreground flex items-center gap-2 rounded-lg border p-4 text-sm", children: [_jsx(Info, { size: 16, className: "shrink-0", "aria-hidden": "true" }), "You have read-only access to settings. Only administrators can make changes."] })), _jsx(SettingsValidationSummary, { issues: settings.issues }), _jsx(SiteIndexStatusCard, { status: settings.indexStatus, loading: settings.loading, onNavigate: onNavigate, onRunAudit: runAudit }), _jsx(SiteInformationCard, { form: settings.form, setField: settings.setField, sources: settings.sources, issues: settings.issues, canEdit: canEdit }), _jsx(LanguageRegionCard, { form: settings.form, setField: settings.setField, issues: settings.issues, canEdit: canEdit }), _jsx(SeoRobotsDefaultsCard, { form: settings.form, setField: settings.setField, isProduction: settings.isProduction, indexStatus: settings.indexStatus, canEdit: canEdit, onNavigate: onNavigate }), settings.saveState === 'error' && settings.saveError && (_jsxs("div", { role: "alert", className: "border-destructive/30 bg-destructive/10 text-destructive flex items-center gap-3 rounded-lg border p-4 text-sm", children: [_jsx(AlertTriangle, { size: 16, className: "shrink-0", "aria-hidden": "true" }), _jsx("span", { className: "flex-1", children: settings.saveError }), _jsx("button", { type: "button", onClick: settings.save, className: "border-destructive/40 rounded-md border px-3 py-1 transition-colors hover:opacity-80", children: "Retry" })] })), _jsx(SettingsSaveBar, { dirty: settings.dirty, canEdit: canEdit, hasErrors: settings.hasErrors, saveState: settings.saveState, onSave: settings.save, onReset: settings.reset })] }));
|
|
18
18
|
}
|
|
19
19
|
//# sourceMappingURL=GeneralSettingsTab.js.map
|
|
@@ -29,6 +29,6 @@ const SEVERITY_STYLES = {
|
|
|
29
29
|
export function SecurityStatusCard({ status, onNavigate, }) {
|
|
30
30
|
const style = LEVEL_STYLES[status.status];
|
|
31
31
|
const { Icon } = style;
|
|
32
|
-
return (_jsxs(SettingsCard, { title: "Security Status", description: status.description, actions: _jsxs("span", { className: `inline-flex items-center gap-1.5 rounded-full border px-2.5 py-1 text-sm font-medium ${style.pill}`, children: [_jsx(Icon, { size: 15, "aria-hidden": "true" }), style.word] }), children: [_jsx("div", { className: "grid grid-cols-1 gap-x-6 gap-y-1 sm:grid-cols-2", children: status.checks.map((check) => (_jsxs("button", { type: "button", disabled: !check.actionHref || !onNavigate, onClick: () => check.actionHref && onNavigate?.(check.actionHref), className: "enabled:hover:bg-accent/50 flex items-center justify-between gap-3 rounded-md py-1.5 text-left text-sm disabled:cursor-default", children: [_jsxs("span", { className: "flex items-center gap-2", children: [_jsx(CheckIcon, { status: check.status }), _jsx("span", { className: "text-foreground", children: check.label })] }), check.value !== undefined && (_jsx("span", { className: "text-muted-foreground text-right", children: check.value }))] }, check.key))) }), status.warnings.length > 0 && (_jsx("div", { className: "mt-4 space-y-2", "aria-live": "polite", children: status.warnings.map((w) => (_jsxs("div", { role: "note", className: `flex items-start justify-between gap-3 rounded-lg border p-
|
|
32
|
+
return (_jsxs(SettingsCard, { title: "Security Status", description: status.description, actions: _jsxs("span", { className: `inline-flex items-center gap-1.5 rounded-full border px-2.5 py-1 text-sm font-medium ${style.pill}`, children: [_jsx(Icon, { size: 15, "aria-hidden": "true" }), style.word] }), children: [_jsx("div", { className: "grid grid-cols-1 gap-x-6 gap-y-1 sm:grid-cols-2", children: status.checks.map((check) => (_jsxs("button", { type: "button", disabled: !check.actionHref || !onNavigate, onClick: () => check.actionHref && onNavigate?.(check.actionHref), className: "enabled:hover:bg-accent/50 flex items-center justify-between gap-3 rounded-md py-1.5 text-left text-sm disabled:cursor-default", children: [_jsxs("span", { className: "flex items-center gap-2", children: [_jsx(CheckIcon, { status: check.status }), _jsx("span", { className: "text-foreground", children: check.label })] }), check.value !== undefined && (_jsx("span", { className: "text-muted-foreground text-right", children: check.value }))] }, check.key))) }), status.warnings.length > 0 && (_jsx("div", { className: "mt-4 space-y-2", "aria-live": "polite", children: status.warnings.map((w) => (_jsxs("div", { role: "note", className: `flex items-start justify-between gap-3 rounded-lg border p-4 text-sm ${SEVERITY_STYLES[w.severity]}`, children: [_jsxs("div", { children: [_jsx("p", { className: "font-medium", children: w.title }), _jsx("p", { className: "mt-0.5 opacity-90", children: w.description })] }), w.actionHref && w.actionLabel && onNavigate && (_jsx("button", { type: "button", onClick: () => onNavigate(w.actionHref), className: "shrink-0 self-center rounded-md border border-current/30 px-2.5 py-1 text-xs font-medium hover:opacity-80", children: w.actionLabel }))] }, w.id))) }))] }));
|
|
33
33
|
}
|
|
34
34
|
//# sourceMappingURL=SecurityStatusCard.js.map
|