@actuate-media/cms-admin 0.19.0 → 0.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/dist/AdminRoot.d.ts.map +1 -1
  2. package/dist/AdminRoot.js +9 -5
  3. package/dist/AdminRoot.js.map +1 -1
  4. package/dist/actuate-admin.css +1 -1
  5. package/dist/components/seo/Drawer.d.ts +11 -0
  6. package/dist/components/seo/Drawer.d.ts.map +1 -0
  7. package/dist/components/seo/Drawer.js +13 -0
  8. package/dist/components/seo/Drawer.js.map +1 -0
  9. package/dist/components/seo/RedirectEditorDrawer.d.ts +9 -0
  10. package/dist/components/seo/RedirectEditorDrawer.d.ts.map +1 -0
  11. package/dist/components/seo/RedirectEditorDrawer.js +94 -0
  12. package/dist/components/seo/RedirectEditorDrawer.js.map +1 -0
  13. package/dist/components/seo/SeoCopilotDrawer.d.ts +10 -0
  14. package/dist/components/seo/SeoCopilotDrawer.d.ts.map +1 -0
  15. package/dist/components/seo/SeoCopilotDrawer.js +34 -0
  16. package/dist/components/seo/SeoCopilotDrawer.js.map +1 -0
  17. package/dist/components/seo/SeoEditorDrawer.d.ts +8 -0
  18. package/dist/components/seo/SeoEditorDrawer.d.ts.map +1 -0
  19. package/dist/components/seo/SeoEditorDrawer.js +111 -0
  20. package/dist/components/seo/SeoEditorDrawer.js.map +1 -0
  21. package/dist/components/seo/SeoIssueFixDrawer.d.ts +8 -0
  22. package/dist/components/seo/SeoIssueFixDrawer.d.ts.map +1 -0
  23. package/dist/components/seo/SeoIssueFixDrawer.js +111 -0
  24. package/dist/components/seo/SeoIssueFixDrawer.js.map +1 -0
  25. package/dist/components/seo/primitives.d.ts +53 -0
  26. package/dist/components/seo/primitives.d.ts.map +1 -0
  27. package/dist/components/seo/primitives.js +100 -0
  28. package/dist/components/seo/primitives.js.map +1 -0
  29. package/dist/layout/Sidebar.d.ts.map +1 -1
  30. package/dist/layout/Sidebar.js +3 -0
  31. package/dist/layout/Sidebar.js.map +1 -1
  32. package/dist/lib/seo-service.d.ts +322 -0
  33. package/dist/lib/seo-service.d.ts.map +1 -0
  34. package/dist/lib/seo-service.js +295 -0
  35. package/dist/lib/seo-service.js.map +1 -0
  36. package/dist/router/index.d.ts.map +1 -1
  37. package/dist/router/index.js +4 -1
  38. package/dist/router/index.js.map +1 -1
  39. package/dist/views/MediaBrowser.d.ts.map +1 -1
  40. package/dist/views/MediaBrowser.js +36 -25
  41. package/dist/views/MediaBrowser.js.map +1 -1
  42. package/dist/views/Posts/NewPostTypeInstructions.js +2 -2
  43. package/dist/views/Posts/post-type-presets.d.ts +5 -0
  44. package/dist/views/Posts/post-type-presets.d.ts.map +1 -1
  45. package/dist/views/Posts/post-type-presets.js +10 -64
  46. package/dist/views/Posts/post-type-presets.js.map +1 -1
  47. package/dist/views/SEO.d.ts.map +1 -1
  48. package/dist/views/SEO.js +89 -132
  49. package/dist/views/SEO.js.map +1 -1
  50. package/dist/views/seo/AuditTab.d.ts +6 -0
  51. package/dist/views/seo/AuditTab.d.ts.map +1 -0
  52. package/dist/views/seo/AuditTab.js +57 -0
  53. package/dist/views/seo/AuditTab.js.map +1 -0
  54. package/dist/views/seo/ContentTab.d.ts +5 -0
  55. package/dist/views/seo/ContentTab.d.ts.map +1 -0
  56. package/dist/views/seo/ContentTab.js +27 -0
  57. package/dist/views/seo/ContentTab.js.map +1 -0
  58. package/dist/views/seo/OverviewTab.d.ts +8 -0
  59. package/dist/views/seo/OverviewTab.d.ts.map +1 -0
  60. package/dist/views/seo/OverviewTab.js +35 -0
  61. package/dist/views/seo/OverviewTab.js.map +1 -0
  62. package/dist/views/seo/RedirectsTab.d.ts +2 -0
  63. package/dist/views/seo/RedirectsTab.d.ts.map +1 -0
  64. package/dist/views/seo/RedirectsTab.js +124 -0
  65. package/dist/views/seo/RedirectsTab.js.map +1 -0
  66. package/dist/views/seo/TechnicalTab.d.ts +2 -0
  67. package/dist/views/seo/TechnicalTab.d.ts.map +1 -0
  68. package/dist/views/seo/TechnicalTab.js +102 -0
  69. package/dist/views/seo/TechnicalTab.js.map +1 -0
  70. package/dist/views/seo/useSeoResource.d.ts +8 -0
  71. package/dist/views/seo/useSeoResource.d.ts.map +1 -0
  72. package/dist/views/seo/useSeoResource.js +42 -0
  73. package/dist/views/seo/useSeoResource.js.map +1 -0
  74. package/package.json +2 -2
  75. package/src/AdminRoot.tsx +9 -5
  76. package/src/components/seo/Drawer.tsx +61 -0
  77. package/src/components/seo/RedirectEditorDrawer.tsx +235 -0
  78. package/src/components/seo/SeoCopilotDrawer.tsx +76 -0
  79. package/src/components/seo/SeoEditorDrawer.tsx +347 -0
  80. package/src/components/seo/SeoIssueFixDrawer.tsx +244 -0
  81. package/src/components/seo/primitives.tsx +237 -0
  82. package/src/layout/Sidebar.tsx +3 -0
  83. package/src/lib/seo-service.ts +623 -0
  84. package/src/router/index.ts +4 -1
  85. package/src/views/MediaBrowser.tsx +89 -67
  86. package/src/views/Posts/NewPostTypeInstructions.tsx +2 -2
  87. package/src/views/Posts/post-type-presets.ts +15 -64
  88. package/src/views/SEO.tsx +186 -863
  89. package/src/views/seo/AuditTab.tsx +229 -0
  90. package/src/views/seo/ContentTab.tsx +164 -0
  91. package/src/views/seo/OverviewTab.tsx +257 -0
  92. package/src/views/seo/RedirectsTab.tsx +392 -0
  93. package/src/views/seo/TechnicalTab.tsx +303 -0
  94. package/src/views/seo/useSeoResource.ts +52 -0
@@ -1 +1 @@
1
- {"version":3,"file":"SEO.js","sourceRoot":"","sources":["../../src/views/SEO.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SEO.js","sourceRoot":"","sources":["../../src/views/SEO.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export declare function AuditTab({ refetchKey, initialIssueId, onNavigate, }: {
2
+ refetchKey?: number;
3
+ initialIssueId?: string | null;
4
+ onNavigate?: (path: string) => void;
5
+ }): import("react/jsx-runtime").JSX.Element;
6
+ //# sourceMappingURL=AuditTab.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuditTab.d.ts","sourceRoot":"","sources":["../../../src/views/seo/AuditTab.tsx"],"names":[],"mappings":"AAsFA,wBAAgB,QAAQ,CAAC,EACvB,UAAc,EACd,cAAc,EACd,UAAU,GACX,EAAE;IACD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;CACpC,2CAsIA"}
@@ -0,0 +1,57 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useMemo, useState } from 'react';
4
+ import { ClipboardCheck, Clock, CheckCircle2 } from 'lucide-react';
5
+ import { fetchSeoIssues, fetchSeoAuditRuns, } from '../../lib/seo-service.js';
6
+ import { SectionCard, SeoLoading, SeoEmptyState, SeoErrorState, severityMeta, SeoStatusBadge, } from '../../components/seo/primitives.js';
7
+ import { SeoIssueFixDrawer } from '../../components/seo/SeoIssueFixDrawer.js';
8
+ import { useSeoResource } from './useSeoResource.js';
9
+ const SEVERITY_FILTERS = [
10
+ { id: 'all', label: 'All' },
11
+ { id: 'critical', label: 'Critical' },
12
+ { id: 'warning', label: 'Warnings' },
13
+ { id: 'info', label: 'Info' },
14
+ ];
15
+ const STATUS_FILTERS = [
16
+ { id: 'open', label: 'Open' },
17
+ { id: 'recurring', label: 'Recurring' },
18
+ { id: 'ignored', label: 'Ignored' },
19
+ { id: 'resolved', label: 'Resolved' },
20
+ { id: 'all', label: 'All' },
21
+ ];
22
+ function issueStatusTone(status) {
23
+ switch (status) {
24
+ case 'resolved':
25
+ return 'good';
26
+ case 'ignored':
27
+ return 'neutral';
28
+ case 'recurring':
29
+ return 'fair';
30
+ default:
31
+ return 'critical';
32
+ }
33
+ }
34
+ function AuditSummaryCards({ refetchKey }) {
35
+ const { data, loading } = useSeoResource(fetchSeoAuditRuns, [refetchKey]);
36
+ const last = (data ?? [])[0];
37
+ return (_jsxs("div", { className: "grid grid-cols-2 gap-4 lg:grid-cols-4", children: [_jsxs("div", { className: "border-border bg-card rounded-lg border p-4", children: [_jsxs("p", { className: "text-muted-foreground flex items-center gap-1.5 text-sm", children: [_jsx(Clock, { className: "h-3.5 w-3.5", "aria-hidden": true }), " Last audit"] }), _jsx("p", { className: "text-foreground mt-1 text-sm font-medium", children: loading ? '…' : last ? new Date(last.startedAt).toLocaleString() : 'Never' })] }), _jsxs("div", { className: "border-border bg-card rounded-lg border p-4", children: [_jsx("p", { className: "text-muted-foreground text-sm", children: "Pages scanned" }), _jsx("p", { className: "text-foreground mt-1 text-2xl font-medium tabular-nums", children: last?.pagesScanned ?? 0 })] }), _jsxs("div", { className: "border-border bg-card rounded-lg border p-4", children: [_jsx("p", { className: "text-muted-foreground text-sm", children: "Issues found" }), _jsx("p", { className: "text-foreground mt-1 text-2xl font-medium tabular-nums", children: last?.issuesFound ?? 0 })] }), _jsxs("div", { className: "border-border bg-card rounded-lg border p-4", children: [_jsx("p", { className: "text-muted-foreground text-sm", children: "Site score" }), _jsx("p", { className: "text-foreground mt-1 text-2xl font-medium tabular-nums", children: last?.siteScoreAfter ?? '—' })] })] }));
38
+ }
39
+ export function AuditTab({ refetchKey = 0, initialIssueId, onNavigate, }) {
40
+ const [severity, setSeverity] = useState('all');
41
+ const [status, setStatus] = useState('open');
42
+ const [openIssue, setOpenIssue] = useState(initialIssueId ?? null);
43
+ const query = useMemo(() => ({ severity, status }), [severity, status]);
44
+ const { data, loading, error, refetch } = useSeoResource(() => fetchSeoIssues(query), [severity, status, refetchKey]);
45
+ const issues = data ?? [];
46
+ return (_jsxs("div", { className: "space-y-4", children: [_jsx(AuditSummaryCards, { refetchKey: refetchKey }), _jsxs(SectionCard, { children: [_jsxs("div", { className: "mb-4 flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between", children: [_jsx("div", { className: "flex flex-wrap gap-1", role: "tablist", "aria-label": "Filter by severity", children: SEVERITY_FILTERS.map((f) => (_jsx("button", { role: "tab", "aria-selected": severity === f.id, onClick: () => setSeverity(f.id), className: `focus-visible:ring-ring rounded-md px-3 py-1.5 text-sm font-medium transition-colors focus-visible:ring-2 focus-visible:outline-none ${severity === f.id
47
+ ? 'bg-primary text-primary-foreground'
48
+ : 'text-muted-foreground hover:bg-accent hover:text-foreground'}`, children: f.label }, f.id))) }), _jsx("div", { className: "flex flex-wrap gap-1", role: "tablist", "aria-label": "Filter by status", children: STATUS_FILTERS.map((f) => (_jsx("button", { role: "tab", "aria-selected": status === f.id, onClick: () => setStatus(f.id), className: `focus-visible:ring-ring rounded-md px-3 py-1.5 text-sm font-medium transition-colors focus-visible:ring-2 focus-visible:outline-none ${status === f.id
49
+ ? 'bg-accent text-foreground'
50
+ : 'text-muted-foreground hover:bg-accent hover:text-foreground'}`, children: f.label }, f.id))) })] }), loading ? (_jsx(SeoLoading, { label: "Loading issues\u2026" })) : error ? (_jsx(SeoErrorState, { message: error, onRetry: refetch })) : issues.length === 0 ? (_jsx(SeoEmptyState, { icon: status === 'open' ? _jsx(CheckCircle2, { size: 24 }) : _jsx(ClipboardCheck, { size: 24 }), title: status === 'open' ? 'No open issues' : 'No issues match', description: status === 'open'
51
+ ? 'Run an audit to scan for new issues, or adjust the filters.'
52
+ : 'Try a different severity or status filter.' })) : (_jsx("div", { className: "overflow-x-auto", children: _jsxs("table", { className: "w-full text-sm", "aria-label": "SEO issues", 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: "Severity" }), _jsx("th", { className: "py-2 pr-4 font-medium", children: "Issue" }), _jsx("th", { className: "py-2 pr-4 font-medium", children: "Page" }), _jsx("th", { className: "py-2 pr-4 font-medium", children: "Status" }), _jsx("th", { className: "py-2 text-right font-medium", children: _jsx("span", { className: "sr-only", children: "Actions" }) })] }) }), _jsx("tbody", { className: "divide-border divide-y", children: issues.map((issue) => {
53
+ const meta = severityMeta(issue.severity);
54
+ return (_jsxs("tr", { className: "hover:bg-accent/40", children: [_jsx("td", { className: "py-2.5 pr-4", children: _jsxs("span", { className: `inline-flex items-center gap-1.5 text-sm ${meta.text}`, children: [_jsx("span", { className: `h-1.5 w-1.5 rounded-full ${meta.dot}`, "aria-hidden": true }), meta.label] }) }), _jsxs("td", { className: "py-2.5 pr-4", children: [_jsx("span", { className: "text-foreground block font-medium", children: issue.title }), _jsx("span", { className: "text-muted-foreground block capitalize", children: issue.category })] }), _jsx("td", { className: "text-muted-foreground py-2.5 pr-4", children: _jsx("span", { className: "block truncate", children: issue.entityTitle || issue.url || '—' }) }), _jsx("td", { className: "py-2.5 pr-4", children: _jsx(SeoStatusBadge, { label: issue.status, tone: issueStatusTone(issue.status) }) }), _jsx("td", { className: "py-2.5 text-right", children: _jsx("button", { onClick: () => setOpenIssue(issue.id), className: "text-primary hover:bg-accent focus-visible:ring-ring rounded-md px-2 py-1 text-sm focus-visible:ring-2 focus-visible:outline-none", children: issue.fixable ? 'Fix' : 'View' }) })] }, issue.id));
55
+ }) })] }) }))] }), _jsx(SeoIssueFixDrawer, { open: openIssue !== null, onOpenChange: (o) => !o && setOpenIssue(null), issueId: openIssue, onChanged: refetch, onNavigate: onNavigate })] }));
56
+ }
57
+ //# sourceMappingURL=AuditTab.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuditTab.js","sourceRoot":"","sources":["../../../src/views/seo/AuditTab.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare function ContentTab({ initialEntityType, initialEntityId, }: {
2
+ initialEntityType?: string | null;
3
+ initialEntityId?: string | null;
4
+ }): import("react/jsx-runtime").JSX.Element;
5
+ //# sourceMappingURL=ContentTab.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContentTab.d.ts","sourceRoot":"","sources":["../../../src/views/seo/ContentTab.tsx"],"names":[],"mappings":"AA6BA,wBAAgB,UAAU,CAAC,EACzB,iBAAiB,EACjB,eAAe,GAChB,EAAE;IACD,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAChC,2CAgIA"}
@@ -0,0 +1,27 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useMemo, useState } from 'react';
4
+ import { Search, FileText, Pencil } from 'lucide-react';
5
+ import { fetchSeoContentRecords, applyContentSeoQuery, } from '../../lib/seo-service.js';
6
+ import { SectionCard, SeoLoading, SeoEmptyState, SeoErrorState, ScorePill, SeoStatusBadge, } from '../../components/seo/primitives.js';
7
+ import { SeoEditorDrawer } from '../../components/seo/SeoEditorDrawer.js';
8
+ import { useSeoResource } from './useSeoResource.js';
9
+ const FILTERS = [
10
+ { id: 'all', label: 'All' },
11
+ { id: 'pages', label: 'Pages' },
12
+ { id: 'posts', label: 'Posts' },
13
+ ];
14
+ const inputCls = 'w-full rounded-md border border-border bg-input-background py-2 pl-9 pr-3 text-base text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring';
15
+ export function ContentTab({ initialEntityType, initialEntityId, }) {
16
+ const { data, loading, error, refetch } = useSeoResource(fetchSeoContentRecords, []);
17
+ const [search, setSearch] = useState('');
18
+ const [filter, setFilter] = useState('all');
19
+ const [editor, setEditor] = useState(initialEntityType && initialEntityId ? { type: initialEntityType, id: initialEntityId } : null);
20
+ const rows = useMemo(() => applyContentSeoQuery(data ?? [], { search, filter }), [data, search, filter]);
21
+ return (_jsxs("div", { className: "space-y-4", children: [_jsxs("div", { className: "flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between", children: [_jsxs("div", { className: "relative max-w-sm flex-1", children: [_jsx(Search, { className: "text-muted-foreground pointer-events-none absolute top-1/2 left-3 h-4 w-4 -translate-y-1/2", "aria-hidden": true }), _jsx("input", { className: inputCls, placeholder: "Search content\u2026", value: search, onChange: (e) => setSearch(e.target.value), "aria-label": "Search content" })] }), _jsx("div", { className: "flex gap-1", role: "tablist", "aria-label": "Content type filter", children: FILTERS.map((f) => (_jsx("button", { role: "tab", "aria-selected": filter === f.id, onClick: () => setFilter(f.id), className: `focus-visible:ring-ring rounded-md px-3 py-1.5 text-sm font-medium transition-colors focus-visible:ring-2 focus-visible:outline-none ${filter === f.id
22
+ ? 'bg-primary text-primary-foreground'
23
+ : 'text-muted-foreground hover:bg-accent hover:text-foreground'}`, children: f.label }, f.id))) })] }), _jsx(SectionCard, { children: loading ? (_jsx(SeoLoading, { label: "Loading content\u2026" })) : error ? (_jsx(SeoErrorState, { message: error, onRetry: refetch })) : rows.length === 0 ? (_jsx(SeoEmptyState, { icon: _jsx(FileText, { size: 24 }), title: search || filter !== 'all' ? 'No matching content' : 'No content yet', description: search || filter !== 'all'
24
+ ? 'Try adjusting your search or filter.'
25
+ : 'Publish pages or posts to manage their SEO here.' })) : (_jsx("div", { className: "overflow-x-auto", children: _jsxs("table", { className: "w-full text-sm", "aria-label": "Content SEO", 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: "Title" }), _jsx("th", { className: "py-2 pr-4 font-medium", children: "Type" }), _jsx("th", { className: "py-2 pr-4 font-medium", children: "Meta" }), _jsx("th", { className: "py-2 pr-4 text-right font-medium", children: "Score" }), _jsx("th", { className: "py-2 text-right font-medium", children: _jsx("span", { className: "sr-only", children: "Actions" }) })] }) }), _jsx("tbody", { className: "divide-border divide-y", children: rows.map((r) => (_jsxs("tr", { className: "hover:bg-accent/40", children: [_jsxs("td", { className: "py-2.5 pr-4", children: [_jsx("span", { className: "text-foreground block font-medium", children: r.title }), _jsx("span", { className: "text-muted-foreground block truncate", children: r.url })] }), _jsx("td", { className: "py-2.5 pr-4 capitalize", children: _jsx("span", { className: "text-muted-foreground", children: r.entityType }) }), _jsx("td", { className: "py-2.5 pr-4", children: _jsxs("span", { className: "flex flex-wrap gap-1.5", children: [_jsx(SeoStatusBadge, { label: r.metaTitle ? 'Title' : 'No title', tone: r.metaTitle ? 'good' : 'critical' }), _jsx(SeoStatusBadge, { label: r.metaDescription ? 'Desc' : 'No desc', tone: r.metaDescription ? 'good' : 'critical' }), r.noindex && _jsx(SeoStatusBadge, { label: "No-index", tone: "fair" })] }) }), _jsx("td", { className: "py-2.5 pr-4 text-right", children: _jsx(ScorePill, { score: r.seoScore }) }), _jsx("td", { className: "py-2.5 text-right", children: _jsxs("button", { onClick: () => setEditor({ type: r.entityType, id: r.entityId }), 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: [_jsx(Pencil, { className: "h-3.5 w-3.5", "aria-hidden": true }), " Edit"] }) })] }, `${r.entityType}-${r.entityId}`))) })] }) })) }), _jsx(SeoEditorDrawer, { open: editor !== null, onOpenChange: (o) => !o && setEditor(null), entityType: editor?.type ?? null, entityId: editor?.id ?? null, onSaved: refetch })] }));
26
+ }
27
+ //# sourceMappingURL=ContentTab.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContentTab.js","sourceRoot":"","sources":["../../../src/views/seo/ContentTab.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { SeoOverview } from '../../lib/seo-service.js';
2
+ import type { SeoResource } from './useSeoResource.js';
3
+ export declare function OverviewTab({ resource, onOpenIssue, onConnectSearchConsole, }: {
4
+ resource: SeoResource<SeoOverview>;
5
+ onOpenIssue?: (issueId: string) => void;
6
+ onConnectSearchConsole?: () => void;
7
+ }): import("react/jsx-runtime").JSX.Element;
8
+ //# sourceMappingURL=OverviewTab.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OverviewTab.d.ts","sourceRoot":"","sources":["../../../src/views/seo/OverviewTab.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAuB,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAUhF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAYtD,wBAAgB,WAAW,CAAC,EAC1B,QAAQ,EACR,WAAW,EACX,sBAAsB,GACvB,EAAE;IACD,QAAQ,EAAE,WAAW,CAAC,WAAW,CAAC,CAAA;IAClC,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IACvC,sBAAsB,CAAC,EAAE,MAAM,IAAI,CAAA;CACpC,2CAqNA"}
@@ -0,0 +1,35 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { TrendingUp, TrendingDown, Minus, AlertOctagon, AlertTriangle, Info, Zap, BarChart3, ArrowRight, } from 'lucide-react';
4
+ import { SectionCard, SeoScoreBar, SeoLoading, SeoEmptyState, SeoErrorState, gradeMeta, btnSecondary, } from '../../components/seo/primitives.js';
5
+ function TrendIcon({ trend }) {
6
+ if (trend === 'up')
7
+ return _jsx(TrendingUp, { className: "text-success h-4 w-4", "aria-hidden": true });
8
+ if (trend === 'down')
9
+ return _jsx(TrendingDown, { className: "text-destructive h-4 w-4", "aria-hidden": true });
10
+ return _jsx(Minus, { className: "text-muted-foreground h-4 w-4", "aria-hidden": true });
11
+ }
12
+ function impactTone(impact) {
13
+ return impact === 'High' ? 'poor' : impact === 'Medium' ? 'fair' : 'good';
14
+ }
15
+ export function OverviewTab({ resource, onOpenIssue, onConnectSearchConsole, }) {
16
+ const { data, loading, error, refetch } = resource;
17
+ if (loading)
18
+ return _jsx(SeoLoading, { label: "Loading SEO overview\u2026" });
19
+ if (error)
20
+ return _jsx(SeoErrorState, { message: error, onRetry: refetch });
21
+ if (!data)
22
+ return _jsx(SeoEmptyState, { title: "No overview data" });
23
+ const { siteScore, metrics, issuesSummary, quickWins, searchPerformance, searchConsoleConnected, } = data;
24
+ const grade = gradeMeta(siteScore.grade);
25
+ return (_jsxs("div", { className: "space-y-6", children: [_jsxs("div", { className: "grid grid-cols-1 gap-4 lg:grid-cols-3", children: [_jsxs(SectionCard, { title: "Site SEO Score", className: "lg:col-span-1", children: [_jsxs("div", { className: "flex items-center gap-4", children: [_jsxs("div", { className: "flex flex-col", children: [_jsx("span", { className: "text-foreground text-4xl font-medium tabular-nums", children: siteScore.score }), _jsx("span", { className: `text-sm font-medium ${grade.text}`, children: grade.label })] }), siteScore.delta !== null && (_jsxs("span", { className: `inline-flex items-center gap-1 text-sm ${siteScore.delta >= 0 ? 'text-success' : 'text-destructive'}`, children: [siteScore.delta >= 0 ? (_jsx(TrendingUp, { className: "h-4 w-4", "aria-hidden": true })) : (_jsx(TrendingDown, { className: "h-4 w-4", "aria-hidden": true })), siteScore.delta >= 0 ? '+' : '', siteScore.delta, " pts"] }))] }), _jsx(SeoScoreBar, { score: siteScore.score, className: "mt-4" }), siteScore.breakdown.length > 0 && (_jsx("dl", { className: "mt-4 space-y-2", children: siteScore.breakdown.map((b) => (_jsxs("div", { className: "flex items-center justify-between text-sm", children: [_jsx("dt", { className: "text-muted-foreground capitalize", children: b.category }), _jsxs("dd", { className: "text-foreground tabular-nums", children: [b.score, "/", 100, " ", _jsxs("span", { className: "text-muted-foreground", children: ["(", b.weight, "%)"] })] })] }, b.category))) }))] }), _jsx("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:col-span-2", children: metrics.length === 0 ? (_jsx("div", { className: "sm:col-span-2", children: _jsx(SeoEmptyState, { title: "No metrics yet", description: "Run an audit to populate site metrics." }) })) : (metrics.map((m) => (_jsxs("div", { className: "border-border bg-card rounded-lg border p-4", children: [_jsx("p", { className: "text-muted-foreground text-sm", children: m.label }), _jsx("p", { className: "text-foreground mt-1 text-2xl font-medium tabular-nums", children: m.value }), _jsxs("p", { className: "text-muted-foreground mt-1 flex items-center gap-1.5 text-sm", children: [_jsx(TrendIcon, { trend: m.trend }), m.helper] })] }, m.label)))) })] }), _jsxs("div", { className: "grid grid-cols-1 gap-4 lg:grid-cols-2", children: [_jsx(SectionCard, { title: "Issues Found", children: _jsxs("ul", { className: "space-y-3", children: [_jsxs("li", { className: "flex items-center justify-between", children: [_jsxs("span", { className: "text-foreground flex items-center gap-2 text-sm", children: [_jsx(AlertOctagon, { className: "text-destructive h-4 w-4", "aria-hidden": true }), " Critical"] }), _jsx("span", { className: "text-foreground font-medium tabular-nums", children: issuesSummary.critical })] }), _jsxs("li", { className: "flex items-center justify-between", children: [_jsxs("span", { className: "text-foreground flex items-center gap-2 text-sm", children: [_jsx(AlertTriangle, { className: "text-warning h-4 w-4", "aria-hidden": true }), " Warnings"] }), _jsx("span", { className: "text-foreground font-medium tabular-nums", children: issuesSummary.warning })] }), _jsxs("li", { className: "flex items-center justify-between", children: [_jsxs("span", { className: "text-foreground flex items-center gap-2 text-sm", children: [_jsx(Info, { className: "text-muted-foreground h-4 w-4", "aria-hidden": true }), " Info"] }), _jsx("span", { className: "text-foreground font-medium tabular-nums", children: issuesSummary.info })] })] }) }), _jsx(SectionCard, { title: "Quick Wins", description: "High-impact fixes ranked by priority", children: quickWins.length === 0 ? (_jsx(SeoEmptyState, { icon: _jsx(Zap, { size: 24 }), title: "No quick wins", description: "Great \u2014 no high-impact issues are waiting." })) : (_jsx("ul", { className: "divide-border divide-y", children: quickWins.map((w) => {
26
+ const tone = impactTone(w.impact);
27
+ const toneCls = tone === 'poor'
28
+ ? 'bg-destructive/10 text-destructive'
29
+ : tone === 'fair'
30
+ ? 'bg-warning/10 text-warning'
31
+ : 'bg-success/10 text-success';
32
+ return (_jsxs("li", { className: "flex items-start justify-between gap-3 py-3 first:pt-0", 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
+ }) })) })] }), _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 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
+ }
35
+ //# sourceMappingURL=OverviewTab.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OverviewTab.js","sourceRoot":"","sources":["../../../src/views/seo/OverviewTab.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function RedirectsTab(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=RedirectsTab.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RedirectsTab.d.ts","sourceRoot":"","sources":["../../../src/views/seo/RedirectsTab.tsx"],"names":[],"mappings":"AAwNA,wBAAgB,YAAY,4CA+K3B"}
@@ -0,0 +1,124 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useRef, useState } from 'react';
4
+ import { Plus, Pencil, Trash2, Upload, Download, Sparkles, ArrowRight, GitBranch, Check, X, Link2, } from 'lucide-react';
5
+ import { toast } from 'sonner';
6
+ import { fetchRedirectOverview, fetchRedirectRules, fetchRedirectChains, fetchRedirectSuggestions, deleteRedirectRule, flattenRedirectChain, generate404RecoverySuggestions, acceptRedirectSuggestion, dismissRedirectSuggestion, exportRedirectsCsv, importRedirectsCsv, } from '../../lib/seo-service.js';
7
+ import { SectionCard, SeoLoading, SeoEmptyState, SeoErrorState, SeoStatusBadge, btnPrimary, btnSecondary, btnGhostIcon, } from '../../components/seo/primitives.js';
8
+ import { RedirectEditorDrawer } from '../../components/seo/RedirectEditorDrawer.js';
9
+ import { ConfirmDialog } from '../../components/ui/ConfirmDialog.js';
10
+ import { useSeoResource } from './useSeoResource.js';
11
+ function OverviewCards({ onRefetchKey }) {
12
+ const { data, loading, error, refetch } = useSeoResource(fetchRedirectOverview, [onRefetchKey]);
13
+ if (loading)
14
+ return _jsx(SeoLoading, { label: "Loading redirect overview\u2026" });
15
+ if (error)
16
+ return _jsx(SeoErrorState, { message: error, onRetry: refetch });
17
+ if (!data)
18
+ return null;
19
+ const cards = [
20
+ { label: 'Active redirects', value: data.activeRedirects },
21
+ { label: 'Stale redirects', value: data.staleRedirects },
22
+ { label: '404s tracked', value: data.notFoundCount },
23
+ { label: 'Chains & loops', value: data.chainsAndLoops },
24
+ ];
25
+ 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))) }));
26
+ }
27
+ function Ai404RecoveryCard({ onApplied }) {
28
+ const { data, loading, error, refetch } = useSeoResource(fetchRedirectSuggestions, []);
29
+ const [generating, setGenerating] = useState(false);
30
+ async function handleGenerate() {
31
+ setGenerating(true);
32
+ const res = await generate404RecoverySuggestions();
33
+ setGenerating(false);
34
+ if (res.error) {
35
+ toast.error(res.error);
36
+ return;
37
+ }
38
+ toast.success('Generated 404 recovery suggestions.');
39
+ refetch();
40
+ }
41
+ async function handleAccept(id) {
42
+ const res = await acceptRedirectSuggestion(id);
43
+ if (res.error)
44
+ return toast.error(res.error);
45
+ toast.success('Redirect created from suggestion.');
46
+ refetch();
47
+ onApplied();
48
+ }
49
+ async function handleDismiss(id) {
50
+ const res = await dismissRedirectSuggestion(id);
51
+ if (res.error)
52
+ return toast.error(res.error);
53
+ refetch();
54
+ }
55
+ 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 first:pt-0", 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))) })) }));
56
+ }
57
+ function ChainMapCard({ onFlattened }) {
58
+ const { data, loading, error, refetch } = useSeoResource(fetchRedirectChains, []);
59
+ async function handleFlatten(id) {
60
+ const res = await flattenRedirectChain(id);
61
+ if (res.error)
62
+ return toast.error(res.error);
63
+ toast.success('Chain flattened.');
64
+ refetch();
65
+ onFlattened();
66
+ }
67
+ if (loading)
68
+ return null;
69
+ if (error)
70
+ return null;
71
+ if (!data || data.length === 0)
72
+ return null;
73
+ 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-3", 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))) }) }));
74
+ }
75
+ export function RedirectsTab() {
76
+ const [refetchKey, setRefetchKey] = useState(0);
77
+ const { data, loading, error, refetch } = useSeoResource(fetchRedirectRules, [refetchKey]);
78
+ const [editor, setEditor] = useState(null);
79
+ const [confirmDelete, setConfirmDelete] = useState(null);
80
+ const fileRef = useRef(null);
81
+ const bump = () => setRefetchKey((k) => k + 1);
82
+ const refetchAll = () => {
83
+ refetch();
84
+ bump();
85
+ };
86
+ async function handleDelete(rule) {
87
+ const res = await deleteRedirectRule(rule.id);
88
+ if (res.error)
89
+ return toast.error(res.error);
90
+ toast.success('Redirect deleted.');
91
+ refetchAll();
92
+ }
93
+ async function handleExport() {
94
+ const res = await exportRedirectsCsv();
95
+ if (res.error || !res.csv)
96
+ return toast.error(res.error ?? 'Export failed.');
97
+ const blob = new Blob([res.csv], { type: 'text/csv' });
98
+ const link = document.createElement('a');
99
+ link.href = URL.createObjectURL(blob);
100
+ link.download = 'redirects.csv';
101
+ link.click();
102
+ URL.revokeObjectURL(link.href);
103
+ }
104
+ async function handleImportFile(file) {
105
+ const csv = await file.text();
106
+ const res = await importRedirectsCsv(csv);
107
+ if (res.error)
108
+ return toast.error(res.error);
109
+ if (res.errors && res.errors.length > 0) {
110
+ toast.error(`Imported ${res.imported ?? 0}, ${res.errors.length} row(s) skipped.`);
111
+ }
112
+ else {
113
+ toast.success(`Imported ${res.imported ?? 0} redirect(s).`);
114
+ }
115
+ refetchAll();
116
+ }
117
+ 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 })] }), _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) => {
118
+ const f = e.target.files?.[0];
119
+ if (f)
120
+ handleImportFile(f);
121
+ e.target.value = '';
122
+ } }), _jsxs("button", { className: btnSecondary, onClick: () => fileRef.current?.click(), children: [_jsx(Upload, { className: "h-4 w-4", "aria-hidden": true }), " Import"] }), _jsxs("button", { className: btnSecondary, onClick: handleExport, children: [_jsx(Download, { className: "h-4 w-4", "aria-hidden": true }), " Export"] }), _jsxs("button", { className: btnPrimary, onClick: () => setEditor({ rule: null }), children: [_jsx(Plus, { className: "h-4 w-4", "aria-hidden": true }), " New redirect"] })] }), children: loading ? (_jsx(SeoLoading, { label: "Loading redirects\u2026" })) : error ? (_jsx(SeoErrorState, { message: error, onRetry: refetch })) : (data ?? []).length === 0 ? (_jsx(SeoEmptyState, { icon: _jsx(Link2, { size: 24 }), title: "No redirects yet", description: "Create a redirect or import a CSV to get started.", action: _jsxs("button", { className: btnPrimary, onClick: () => setEditor({ rule: null }), children: [_jsx(Plus, { className: "h-4 w-4", "aria-hidden": true }), " New redirect"] }) })) : (_jsx("div", { className: "overflow-x-auto", children: _jsxs("table", { className: "w-full text-sm", "aria-label": "Redirect rules", 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: "Source" }), _jsx("th", { className: "py-2 pr-4 font-medium", children: "Destination" }), _jsx("th", { className: "py-2 pr-4 font-medium", children: "Type" }), _jsx("th", { className: "py-2 pr-4 text-right font-medium", children: "Hits" }), _jsx("th", { className: "py-2 pr-4 font-medium", children: "Status" }), _jsx("th", { className: "py-2 text-right font-medium", children: _jsx("span", { className: "sr-only", children: "Actions" }) })] }) }), _jsx("tbody", { className: "divide-border divide-y", children: data.map((r) => (_jsxs("tr", { className: "hover:bg-accent/40", children: [_jsx("td", { className: "text-foreground py-2.5 pr-4 font-mono", children: r.fromPath }), _jsx("td", { className: "text-muted-foreground py-2.5 pr-4 font-mono", children: r.type === 410 ? _jsx("span", { className: "italic", children: "\u2014 (gone)" }) : r.toPath }), _jsx("td", { className: "text-foreground py-2.5 pr-4 tabular-nums", children: r.type }), _jsx("td", { className: "text-foreground py-2.5 pr-4 text-right tabular-nums", children: r.hits }), _jsx("td", { className: "py-2.5 pr-4", children: _jsxs("span", { className: "flex flex-wrap gap-1.5", children: [_jsx(SeoStatusBadge, { label: r.enabled ? 'Enabled' : 'Disabled', tone: r.enabled ? 'good' : 'neutral' }), r.stale && _jsx(SeoStatusBadge, { label: "Stale", tone: "fair" })] }) }), _jsx("td", { className: "py-2.5 text-right", children: _jsxs("div", { className: "flex justify-end gap-1", children: [_jsx("button", { className: btnGhostIcon, onClick: () => setEditor({ rule: r }), "aria-label": `Edit redirect ${r.fromPath}`, children: _jsx(Pencil, { className: "h-4 w-4", "aria-hidden": true }) }), _jsx("button", { className: btnGhostIcon, onClick: () => setConfirmDelete(r), "aria-label": `Delete redirect ${r.fromPath}`, children: _jsx(Trash2, { className: "h-4 w-4", "aria-hidden": true }) })] }) })] }, r.id))) })] }) })) }), _jsx(RedirectEditorDrawer, { open: editor !== null, onOpenChange: (o) => !o && setEditor(null), rule: editor?.rule ?? null, onSaved: refetchAll }), _jsx(ConfirmDialog, { open: confirmDelete !== null, onClose: () => setConfirmDelete(null), onConfirm: () => confirmDelete && handleDelete(confirmDelete), title: "Delete redirect", description: `Delete the redirect from "${confirmDelete?.fromPath}"? This cannot be undone.`, confirmLabel: "Delete", destructive: true })] }));
123
+ }
124
+ //# sourceMappingURL=RedirectsTab.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RedirectsTab.js","sourceRoot":"","sources":["../../../src/views/seo/RedirectsTab.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function TechnicalTab(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=TechnicalTab.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TechnicalTab.d.ts","sourceRoot":"","sources":["../../../src/views/seo/TechnicalTab.tsx"],"names":[],"mappings":"AAoSA,wBAAgB,YAAY,4CAU3B"}
@@ -0,0 +1,102 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useEffect, useState } from 'react';
4
+ import { RefreshCw, Map, AlertTriangle, CheckCircle2, ExternalLink } from 'lucide-react';
5
+ import { toast } from 'sonner';
6
+ import { fetchSitemapStatus, regenerateSitemap, fetchCrawlSettings, updateCrawlSettings, fetchRobotsTxt, updateRobotsTxt, validateRobotsTxt, } from '../../lib/seo-service.js';
7
+ import { SectionCard, SeoLoading, SeoErrorState, btnPrimary, btnSecondary, } from '../../components/seo/primitives.js';
8
+ import { useSeoResource } from './useSeoResource.js';
9
+ const CRAWL_TOGGLES = [
10
+ {
11
+ key: 'indexEntireSite',
12
+ label: 'Index entire site',
13
+ help: 'Allow search engines to index all public pages.',
14
+ },
15
+ {
16
+ key: 'includeImagesInSitemap',
17
+ label: 'Include images in sitemap',
18
+ help: 'Add image entries to the XML sitemap.',
19
+ },
20
+ {
21
+ key: 'includePostsInSitemap',
22
+ label: 'Include posts in sitemap',
23
+ help: 'Add published posts to the sitemap.',
24
+ },
25
+ {
26
+ key: 'noindexPaginatedArchives',
27
+ label: 'No-index paginated archives',
28
+ help: 'Avoid duplicate-content penalties on page 2+.',
29
+ },
30
+ {
31
+ key: 'noindexTagPages',
32
+ label: 'No-index tag pages',
33
+ help: 'Keep thin tag archives out of the index.',
34
+ },
35
+ ];
36
+ function Toggle({ checked, onChange, label, help, }) {
37
+ return (_jsxs("label", { className: "flex items-center justify-between gap-3 py-2.5", children: [_jsxs("span", { className: "min-w-0", children: [_jsx("span", { className: "text-foreground block text-sm font-medium", children: label }), _jsx("span", { className: "text-muted-foreground block text-sm", children: help })] }), _jsx("input", { type: "checkbox", role: "switch", "aria-checked": checked, checked: checked, onChange: (e) => onChange(e.target.checked), className: "accent-primary h-4 w-4 shrink-0" })] }));
38
+ }
39
+ function SitemapCard() {
40
+ const { data, loading, error, refetch } = useSeoResource(fetchSitemapStatus, []);
41
+ const [busy, setBusy] = useState(false);
42
+ async function handleRegenerate() {
43
+ setBusy(true);
44
+ const res = await regenerateSitemap();
45
+ setBusy(false);
46
+ if (res.error) {
47
+ toast.error(res.error);
48
+ return;
49
+ }
50
+ toast.success('Sitemap regenerated.');
51
+ refetch();
52
+ }
53
+ return (_jsx(SectionCard, { title: "Sitemap", action: _jsxs("button", { className: btnSecondary, onClick: handleRegenerate, disabled: busy || loading, children: [_jsx(RefreshCw, { className: `h-4 w-4 ${busy ? 'animate-spin' : ''}`, "aria-hidden": true }), "Regenerate"] }), children: loading ? (_jsx(SeoLoading, { label: "Loading sitemap status\u2026" })) : error ? (_jsx(SeoErrorState, { message: error, onRetry: refetch })) : !data ? (_jsx("p", { className: "text-muted-foreground text-sm", children: "Sitemap status unavailable." })) : (_jsxs("div", { className: "space-y-3", children: [_jsxs("a", { href: data.sitemapUrl, target: "_blank", rel: "noopener noreferrer", className: "text-primary inline-flex items-center gap-1 text-sm hover:underline", children: [_jsx(Map, { className: "h-4 w-4", "aria-hidden": true }), data.sitemapUrl, _jsx(ExternalLink, { className: "h-3.5 w-3.5", "aria-hidden": true })] }), _jsxs("dl", { className: "grid grid-cols-2 gap-3 text-sm", children: [_jsxs("div", { children: [_jsx("dt", { className: "text-muted-foreground", children: "Pages included" }), _jsx("dd", { className: "text-foreground font-medium tabular-nums", children: data.pagesIncluded })] }), _jsxs("div", { children: [_jsx("dt", { className: "text-muted-foreground", children: "Pages excluded" }), _jsx("dd", { className: "text-foreground font-medium tabular-nums", children: data.pagesExcluded })] }), _jsxs("div", { className: "col-span-2", children: [_jsx("dt", { className: "text-muted-foreground", children: "Last generated" }), _jsx("dd", { className: "text-foreground", children: data.lastGeneratedAt ? new Date(data.lastGeneratedAt).toLocaleString() : 'Never' })] })] }), data.warnings.length > 0 && (_jsx("ul", { className: "space-y-1", children: data.warnings.map((w, i) => (_jsxs("li", { 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))) }))] })) }));
54
+ }
55
+ function CrawlCard() {
56
+ const { data, loading, error, refetch } = useSeoResource(fetchCrawlSettings, []);
57
+ const [settings, setSettings] = useState(null);
58
+ const [saving, setSaving] = useState(false);
59
+ useEffect(() => {
60
+ if (data)
61
+ setSettings(data);
62
+ }, [data]);
63
+ async function save(next, changed) {
64
+ setSettings(next);
65
+ setSaving(true);
66
+ const res = await updateCrawlSettings({ [changed]: next[changed] });
67
+ setSaving(false);
68
+ if (res.error) {
69
+ toast.error(res.error);
70
+ refetch();
71
+ }
72
+ }
73
+ return (_jsx(SectionCard, { title: "Crawl Settings", children: loading ? (_jsx(SeoLoading, { label: "Loading crawl settings\u2026" })) : error ? (_jsx(SeoErrorState, { message: error, onRetry: refetch })) : !settings ? (_jsx("p", { className: "text-muted-foreground text-sm", children: "Crawl settings unavailable." })) : (_jsx("div", { className: "divide-border divide-y", "aria-busy": saving, children: CRAWL_TOGGLES.map((t) => (_jsx(Toggle, { label: t.label, help: t.help, checked: settings[t.key], onChange: (v) => save({ ...settings, [t.key]: v }, t.key) }, t.key))) })) }));
74
+ }
75
+ function RobotsCard() {
76
+ const { data, loading, error, refetch } = useSeoResource(fetchRobotsTxt, []);
77
+ const [body, setBody] = useState('');
78
+ const [saving, setSaving] = useState(false);
79
+ useEffect(() => {
80
+ if (data)
81
+ setBody(data.body);
82
+ }, [data]);
83
+ const validation = validateRobotsTxt(body);
84
+ async function handleSave() {
85
+ setSaving(true);
86
+ const res = await updateRobotsTxt(body);
87
+ setSaving(false);
88
+ if (res.error) {
89
+ toast.error(res.error);
90
+ return;
91
+ }
92
+ toast.success('robots.txt saved.');
93
+ refetch();
94
+ }
95
+ 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-3", 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
96
+ .filter((w) => !validation.blocksEntireSite || !w.includes('blocks the entire site'))
97
+ .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)))] })) }));
98
+ }
99
+ export function TechnicalTab() {
100
+ return (_jsxs("div", { className: "space-y-4", children: [_jsxs("div", { className: "grid grid-cols-1 gap-4 lg:grid-cols-2", children: [_jsx(SitemapCard, {}), _jsx(CrawlCard, {})] }), _jsx(RobotsCard, {})] }));
101
+ }
102
+ //# sourceMappingURL=TechnicalTab.js.map