@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.
Files changed (209) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/dist/AdminRoot.d.ts.map +1 -1
  3. package/dist/AdminRoot.js +3 -2
  4. package/dist/AdminRoot.js.map +1 -1
  5. package/dist/LoginRoot.d.ts.map +1 -1
  6. package/dist/LoginRoot.js +2 -1
  7. package/dist/LoginRoot.js.map +1 -1
  8. package/dist/__tests__/components/theme-provider-accent.test.d.ts +2 -0
  9. package/dist/__tests__/components/theme-provider-accent.test.d.ts.map +1 -0
  10. package/dist/__tests__/components/theme-provider-accent.test.js +64 -0
  11. package/dist/__tests__/components/theme-provider-accent.test.js.map +1 -0
  12. package/dist/__tests__/views/portal-container.test.js +13 -0
  13. package/dist/__tests__/views/portal-container.test.js.map +1 -1
  14. package/dist/__tests__/views/post-fields-modal.render.test.js +3 -6
  15. package/dist/__tests__/views/post-fields-modal.render.test.js.map +1 -1
  16. package/dist/__tests__/views/redirects-pane.render.test.js +6 -0
  17. package/dist/__tests__/views/redirects-pane.render.test.js.map +1 -1
  18. package/dist/__tests__/views/seo-content-pane.render.test.js +15 -4
  19. package/dist/__tests__/views/seo-content-pane.render.test.js.map +1 -1
  20. package/dist/actuate-admin.css +1 -1
  21. package/dist/components/CoauthorResultPopover.js +1 -1
  22. package/dist/components/EditorSeoAside.d.ts +23 -0
  23. package/dist/components/EditorSeoAside.d.ts.map +1 -0
  24. package/dist/components/EditorSeoAside.js +21 -0
  25. package/dist/components/EditorSeoAside.js.map +1 -0
  26. package/dist/components/MediaPickerModal.js +1 -1
  27. package/dist/components/SEOConfigPanel.js +1 -1
  28. package/dist/components/SchedulePublishDialog.js +1 -1
  29. package/dist/components/SharePreviewLinkDialog.js +1 -1
  30. package/dist/components/ThemeProvider.d.ts.map +1 -1
  31. package/dist/components/ThemeProvider.js +2 -1
  32. package/dist/components/ThemeProvider.js.map +1 -1
  33. package/dist/components/VersionHistory.js +1 -1
  34. package/dist/components/seo/EditorSeoScoreBadge.d.ts +7 -0
  35. package/dist/components/seo/EditorSeoScoreBadge.d.ts.map +1 -0
  36. package/dist/components/seo/EditorSeoScoreBadge.js +9 -0
  37. package/dist/components/seo/EditorSeoScoreBadge.js.map +1 -0
  38. package/dist/components/seo/SeoAccordion.d.ts +16 -0
  39. package/dist/components/seo/SeoAccordion.d.ts.map +1 -0
  40. package/dist/components/seo/SeoAccordion.js +21 -0
  41. package/dist/components/seo/SeoAccordion.js.map +1 -0
  42. package/dist/components/seo/SeoAnalysisList.d.ts +7 -0
  43. package/dist/components/seo/SeoAnalysisList.d.ts.map +1 -0
  44. package/dist/components/seo/SeoAnalysisList.js +32 -0
  45. package/dist/components/seo/SeoAnalysisList.js.map +1 -0
  46. package/dist/components/seo/SeoEditorPane.d.ts +15 -4
  47. package/dist/components/seo/SeoEditorPane.d.ts.map +1 -1
  48. package/dist/components/seo/SeoEditorPane.js +155 -35
  49. package/dist/components/seo/SeoEditorPane.js.map +1 -1
  50. package/dist/components/seo/SeoInsightsMetrics.d.ts +6 -0
  51. package/dist/components/seo/SeoInsightsMetrics.d.ts.map +1 -0
  52. package/dist/components/seo/SeoInsightsMetrics.js +16 -0
  53. package/dist/components/seo/SeoInsightsMetrics.js.map +1 -0
  54. package/dist/components/seo/SeoIssueFixPanel.d.ts.map +1 -1
  55. package/dist/components/seo/SeoIssueFixPanel.js +13 -3
  56. package/dist/components/seo/SeoIssueFixPanel.js.map +1 -1
  57. package/dist/components/seo/SeoLinkingSection.d.ts +9 -0
  58. package/dist/components/seo/SeoLinkingSection.d.ts.map +1 -0
  59. package/dist/components/seo/SeoLinkingSection.js +44 -0
  60. package/dist/components/seo/SeoLinkingSection.js.map +1 -0
  61. package/dist/components/seo/primitives.d.ts.map +1 -1
  62. package/dist/components/seo/primitives.js +3 -3
  63. package/dist/components/seo/primitives.js.map +1 -1
  64. package/dist/components/ui/Card.js +5 -5
  65. package/dist/components/ui/Card.js.map +1 -1
  66. package/dist/components/ui/InspectorPane.js +3 -3
  67. package/dist/components/ui/InspectorPane.js.map +1 -1
  68. package/dist/components/ui/PanelSection.d.ts +16 -0
  69. package/dist/components/ui/PanelSection.d.ts.map +1 -0
  70. package/dist/components/ui/PanelSection.js +15 -0
  71. package/dist/components/ui/PanelSection.js.map +1 -0
  72. package/dist/lib/admin-root-element.d.ts +9 -0
  73. package/dist/lib/admin-root-element.d.ts.map +1 -0
  74. package/dist/lib/admin-root-element.js +14 -0
  75. package/dist/lib/admin-root-element.js.map +1 -0
  76. package/dist/lib/editor-seo-content.d.ts +16 -0
  77. package/dist/lib/editor-seo-content.d.ts.map +1 -0
  78. package/dist/lib/editor-seo-content.js +139 -0
  79. package/dist/lib/editor-seo-content.js.map +1 -0
  80. package/dist/lib/portal-container.d.ts.map +1 -1
  81. package/dist/lib/portal-container.js +2 -3
  82. package/dist/lib/portal-container.js.map +1 -1
  83. package/dist/lib/seo-service.d.ts +91 -0
  84. package/dist/lib/seo-service.d.ts.map +1 -1
  85. package/dist/lib/seo-service.js +55 -2
  86. package/dist/lib/seo-service.js.map +1 -1
  87. package/dist/views/ApiKeys.js +2 -2
  88. package/dist/views/Dashboard.d.ts.map +1 -1
  89. package/dist/views/Dashboard.js +12 -14
  90. package/dist/views/Dashboard.js.map +1 -1
  91. package/dist/views/MediaBrowser.d.ts.map +1 -1
  92. package/dist/views/MediaBrowser.js +35 -6
  93. package/dist/views/MediaBrowser.js.map +1 -1
  94. package/dist/views/PageEditor.js +1 -1
  95. package/dist/views/Posts/PostTypeEditor.js +3 -3
  96. package/dist/views/SEO.d.ts.map +1 -1
  97. package/dist/views/SEO.js +4 -2
  98. package/dist/views/SEO.js.map +1 -1
  99. package/dist/views/ScriptTags.js +1 -1
  100. package/dist/views/ScriptTags.js.map +1 -1
  101. package/dist/views/Users.js +1 -1
  102. package/dist/views/page-editor/EditorTopBar.d.ts +6 -1
  103. package/dist/views/page-editor/EditorTopBar.d.ts.map +1 -1
  104. package/dist/views/page-editor/EditorTopBar.js +5 -2
  105. package/dist/views/page-editor/EditorTopBar.js.map +1 -1
  106. package/dist/views/page-editor/PageSectionEditor.d.ts.map +1 -1
  107. package/dist/views/page-editor/PageSectionEditor.js +36 -1
  108. package/dist/views/page-editor/PageSectionEditor.js.map +1 -1
  109. package/dist/views/page-editor/PageSettingsModal.d.ts +1 -1
  110. package/dist/views/page-editor/PageSettingsModal.d.ts.map +1 -1
  111. package/dist/views/page-editor/PageSettingsModal.js +2 -13
  112. package/dist/views/page-editor/PageSettingsModal.js.map +1 -1
  113. package/dist/views/page-editor/SectionInspector.js +2 -2
  114. package/dist/views/page-editor/SectionsPanel.js +1 -1
  115. package/dist/views/post-editor/PostFieldsModal.d.ts +1 -1
  116. package/dist/views/post-editor/PostFieldsModal.d.ts.map +1 -1
  117. package/dist/views/post-editor/PostFieldsModal.js +17 -79
  118. package/dist/views/post-editor/PostFieldsModal.js.map +1 -1
  119. package/dist/views/post-editor/PostHeaderPanel.js +1 -1
  120. package/dist/views/post-editor/PostSectionEditor.d.ts.map +1 -1
  121. package/dist/views/post-editor/PostSectionEditor.js +37 -1
  122. package/dist/views/post-editor/PostSectionEditor.js.map +1 -1
  123. package/dist/views/seo/ContentTab.d.ts.map +1 -1
  124. package/dist/views/seo/ContentTab.js +7 -1
  125. package/dist/views/seo/ContentTab.js.map +1 -1
  126. package/dist/views/seo/LinksTab.d.ts +4 -0
  127. package/dist/views/seo/LinksTab.d.ts.map +1 -0
  128. package/dist/views/seo/LinksTab.js +111 -0
  129. package/dist/views/seo/LinksTab.js.map +1 -0
  130. package/dist/views/seo/OverviewTab.js +1 -1
  131. package/dist/views/seo/OverviewTab.js.map +1 -1
  132. package/dist/views/seo/RedirectsTab.d.ts.map +1 -1
  133. package/dist/views/seo/RedirectsTab.js +39 -6
  134. package/dist/views/seo/RedirectsTab.js.map +1 -1
  135. package/dist/views/seo/TechnicalTab.js +2 -2
  136. package/dist/views/settings/AISettingsTab.js +1 -1
  137. package/dist/views/settings/AiFeaturesCard.js +1 -1
  138. package/dist/views/settings/AiFeaturesCard.js.map +1 -1
  139. package/dist/views/settings/AppearanceTab.js +1 -1
  140. package/dist/views/settings/BrandVoiceCard.js +1 -1
  141. package/dist/views/settings/EmailSettingsTab.js +2 -2
  142. package/dist/views/settings/GeneralSettingsTab.js +1 -1
  143. package/dist/views/settings/SecurityStatusCard.js +1 -1
  144. package/dist/views/settings/SeoSettingsTab.js +4 -4
  145. package/dist/views/settings/UpdatesTab.js +2 -2
  146. package/dist/views/settings/components.js +3 -3
  147. package/dist/views/settings/components.js.map +1 -1
  148. package/package.json +2 -2
  149. package/src/AdminRoot.tsx +3 -2
  150. package/src/LoginRoot.tsx +2 -1
  151. package/src/__tests__/components/theme-provider-accent.test.tsx +84 -0
  152. package/src/__tests__/views/portal-container.test.tsx +14 -0
  153. package/src/__tests__/views/post-fields-modal.render.test.tsx +3 -9
  154. package/src/__tests__/views/redirects-pane.render.test.tsx +6 -0
  155. package/src/__tests__/views/seo-content-pane.render.test.tsx +16 -4
  156. package/src/components/CoauthorResultPopover.tsx +1 -1
  157. package/src/components/EditorSeoAside.tsx +68 -0
  158. package/src/components/MediaPickerModal.tsx +1 -1
  159. package/src/components/SEOConfigPanel.tsx +2 -2
  160. package/src/components/SchedulePublishDialog.tsx +1 -1
  161. package/src/components/SharePreviewLinkDialog.tsx +1 -1
  162. package/src/components/ThemeProvider.tsx +3 -1
  163. package/src/components/VersionHistory.tsx +1 -1
  164. package/src/components/seo/EditorSeoScoreBadge.tsx +26 -0
  165. package/src/components/seo/SeoAccordion.tsx +76 -0
  166. package/src/components/seo/SeoAnalysisList.tsx +113 -0
  167. package/src/components/seo/SeoEditorPane.tsx +532 -250
  168. package/src/components/seo/SeoInsightsMetrics.tsx +109 -0
  169. package/src/components/seo/SeoIssueFixPanel.tsx +16 -4
  170. package/src/components/seo/SeoLinkingSection.tsx +151 -0
  171. package/src/components/seo/primitives.tsx +7 -3
  172. package/src/components/ui/Card.tsx +5 -5
  173. package/src/components/ui/InspectorPane.tsx +3 -3
  174. package/src/components/ui/PanelSection.tsx +53 -0
  175. package/src/lib/admin-root-element.ts +15 -0
  176. package/src/lib/editor-seo-content.ts +144 -0
  177. package/src/lib/portal-container.ts +3 -2
  178. package/src/lib/seo-service.ts +150 -2
  179. package/src/views/ApiKeys.tsx +2 -2
  180. package/src/views/Dashboard.tsx +40 -53
  181. package/src/views/MediaBrowser.tsx +62 -12
  182. package/src/views/PageEditor.tsx +1 -1
  183. package/src/views/Posts/PostTypeEditor.tsx +3 -3
  184. package/src/views/SEO.tsx +6 -0
  185. package/src/views/ScriptTags.tsx +2 -2
  186. package/src/views/Users.tsx +1 -1
  187. package/src/views/page-editor/EditorTopBar.tsx +27 -0
  188. package/src/views/page-editor/PageSectionEditor.tsx +58 -3
  189. package/src/views/page-editor/PageSettingsModal.tsx +1 -45
  190. package/src/views/page-editor/SectionInspector.tsx +2 -2
  191. package/src/views/page-editor/SectionsPanel.tsx +1 -1
  192. package/src/views/post-editor/PostFieldsModal.tsx +19 -138
  193. package/src/views/post-editor/PostHeaderPanel.tsx +1 -1
  194. package/src/views/post-editor/PostSectionEditor.tsx +60 -3
  195. package/src/views/seo/ContentTab.tsx +11 -5
  196. package/src/views/seo/LinksTab.tsx +462 -0
  197. package/src/views/seo/OverviewTab.tsx +1 -1
  198. package/src/views/seo/RedirectsTab.tsx +97 -4
  199. package/src/views/seo/TechnicalTab.tsx +2 -2
  200. package/src/views/settings/AISettingsTab.tsx +3 -3
  201. package/src/views/settings/AiFeaturesCard.tsx +1 -1
  202. package/src/views/settings/AppearanceTab.tsx +1 -1
  203. package/src/views/settings/BrandVoiceCard.tsx +2 -2
  204. package/src/views/settings/EmailSettingsTab.tsx +2 -2
  205. package/src/views/settings/GeneralSettingsTab.tsx +3 -3
  206. package/src/views/settings/SecurityStatusCard.tsx +1 -1
  207. package/src/views/settings/SeoSettingsTab.tsx +6 -6
  208. package/src/views/settings/UpdatesTab.tsx +3 -3
  209. package/src/views/settings/components.tsx +3 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SeoLinkingSection.d.ts","sourceRoot":"","sources":["../../../src/components/seo/SeoLinkingSection.tsx"],"names":[],"mappings":"AAMA,wBAAgB,iBAAiB,CAAC,EAChC,UAAU,EACV,QAAQ,EACR,aAAa,EACb,aAAa,EACb,cAAc,EACd,cAAc,GACf,EAAE;IACD,UAAU,EAAE,MAAM,GAAG,MAAM,CAAA;IAC3B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,aAAa,EAAE,MAAM,CAAA;IACrB,aAAa,EAAE,MAAM,CAAA;IACrB,cAAc,EAAE,OAAO,CAAA;IACvB,cAAc,EAAE,OAAO,CAAA;CACxB,2CA0GA"}
@@ -0,0 +1,44 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useEffect, useState } from 'react';
4
+ import { Link2, Loader2, Sparkles } from 'lucide-react';
5
+ import { fetchLinkSuggestions } from '../../lib/seo-service.js';
6
+ export function SeoLinkingSection({ entityType, entityId, internalLinks, externalLinks, internalLinkOk, externalLinkOk, }) {
7
+ const [loading, setLoading] = useState(false);
8
+ const [suggestions, setSuggestions] = useState([]);
9
+ const [error, setError] = useState(null);
10
+ useEffect(() => {
11
+ if (!entityId) {
12
+ setSuggestions([]);
13
+ setError(null);
14
+ return;
15
+ }
16
+ let alive = true;
17
+ setLoading(true);
18
+ setError(null);
19
+ fetchLinkSuggestions({ targetEntityType: entityType, targetEntityId: entityId, limit: 5 })
20
+ .then((res) => {
21
+ if (!alive)
22
+ return;
23
+ if (res.error) {
24
+ setError(res.error);
25
+ setSuggestions([]);
26
+ return;
27
+ }
28
+ setSuggestions(res.data?.suggestions ?? []);
29
+ })
30
+ .finally(() => alive && setLoading(false));
31
+ return () => {
32
+ alive = false;
33
+ };
34
+ }, [entityType, entityId]);
35
+ return (_jsxs("div", { className: "space-y-4", children: [_jsxs("div", { className: "grid grid-cols-2 gap-3", children: [_jsx(LinkCountCard, { label: "Internal links", count: internalLinks, ok: internalLinkOk, hint: internalLinkOk
36
+ ? 'Links to other pages on your site.'
37
+ : 'Add links to related content — aim for at least one.' }), _jsx(LinkCountCard, { label: "Outbound links", count: externalLinks, ok: externalLinkOk, hint: externalLinkOk
38
+ ? 'Links to external sources.'
39
+ : 'Consider linking to authoritative external sources.' })] }), !entityId ? (_jsx("p", { className: "rounded-[7px] border border-[var(--bdr)] bg-[var(--bg)] p-3 text-[11.5px] text-[var(--sub)]", children: "Save a draft first to load AI link opportunities for this page." })) : loading ? (_jsxs("div", { className: "flex items-center gap-2 text-[12px] text-[var(--muted)]", children: [_jsx(Loader2, { className: "h-4 w-4 animate-spin", "aria-hidden": true }), "Finding link opportunities\u2026"] })) : error ? (_jsx("p", { className: "text-[11.5px] text-[var(--err)]", children: error })) : suggestions.length > 0 ? (_jsxs("div", { children: [_jsxs("div", { className: "mb-2 flex items-center gap-1.5 text-[12px] font-medium text-[var(--txt)]", children: [_jsx(Sparkles, { className: "h-3.5 w-3.5 text-[var(--acc)]", "aria-hidden": true }), "Link opportunities"] }), _jsx("ul", { className: "space-y-2", children: suggestions.map((s) => (_jsxs("li", { className: "rounded-[7px] border border-[var(--bdr)] bg-[var(--card)] p-2.5", children: [_jsx("div", { className: "text-[12.5px] font-medium text-[var(--txt)]", children: s.sourceTitle }), _jsx("p", { className: "mt-0.5 text-[11px] text-[var(--muted)]", children: s.sourceUrl }), _jsxs("p", { className: "mt-1 text-[11.5px] text-[var(--sub)]", children: ["Suggested anchor: ", _jsx("span", { className: "text-[var(--txt)]", children: s.anchorText })] }), s.excerpt && (_jsx("p", { className: "mt-1 line-clamp-2 text-[11px] text-[var(--muted)]", children: s.excerpt }))] }, `${s.sourceEntityId}-${s.anchorText}`))) })] })) : (_jsx("p", { className: "text-[11.5px] text-[var(--sub)]", children: "No inbound link suggestions yet. Run the site link index from SEO \u2192 Links to improve AI recommendations." })), _jsxs("div", { className: "flex items-start gap-2 rounded-[7px] border border-[var(--bdr)] bg-[var(--bg)] p-2.5 text-[11px] text-[var(--sub)]", children: [_jsx(Link2, { className: "mt-0.5 h-3.5 w-3.5 shrink-0 text-[var(--acc)]", "aria-hidden": true }), _jsx("span", { children: "Best practice: mix internal links (site structure + crawl paths) with selective outbound links (trust signals). We flag counts here; apply links in the content editor." })] })] }));
40
+ }
41
+ function LinkCountCard({ label, count, ok, hint, }) {
42
+ return (_jsxs("div", { className: "rounded-[7px] border border-[var(--bdr)] bg-[var(--card)] p-3", children: [_jsxs("div", { className: "flex items-center justify-between gap-2", children: [_jsx("span", { className: "text-[11.5px] font-medium text-[var(--sub)]", children: label }), _jsx("span", { className: `text-lg font-medium ${ok ? 'text-[var(--suc)]' : 'text-[var(--warn)]'}`, children: count })] }), _jsx("p", { className: "mt-1 text-[10.5px] text-[var(--muted)]", children: hint })] }));
43
+ }
44
+ //# sourceMappingURL=SeoLinkingSection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SeoLinkingSection.js","sourceRoot":"","sources":["../../../src/components/seo/SeoLinkingSection.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"primitives.d.ts","sourceRoot":"","sources":["../../../src/components/seo/primitives.tsx"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAItC,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAIrE,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,MAAM,CAAA;IACV,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,QAAQ,GAAG,SAAS,CAqBpD;AAED,6CAA6C;AAC7C,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,CAKtD;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,WAAW,GAAG,SAAS,CAmB7D;AAYD,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,IAAI,GACL,EAAE;IACD,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,CAAA;CACxD,2CAEA;AAED,yDAAyD;AACzD,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,SAAc,EAAE,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,2CAoB3F;AAED,wBAAgB,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,2CAUrD;AAID,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,WAAW,EACX,MAAM,EACN,QAAQ,EACR,SAAc,GACf,EAAE;IACD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,SAAS,CAAA;IAClB,QAAQ,EAAE,SAAS,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,2CAeA;AAED,wBAAgB,UAAU,CAAC,EAAE,KAAkB,EAAE,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,2CAOpE;AAED,wBAAgB,aAAa,CAAC,EAC5B,IAAI,EACJ,KAAK,EACL,WAAW,EACX,MAAM,GACP,EAAE;IACD,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,SAAS,CAAA;CACnB,2CAaA;AAED,wBAAgB,aAAa,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;CAAE,2CAkB5F;AAID,eAAO,MAAM,UAAU,kQAC0O,CAAA;AAEjQ,eAAO,MAAM,YAAY,wQAC8O,CAAA;AAEvQ,eAAO,MAAM,YAAY,iNACuL,CAAA"}
1
+ {"version":3,"file":"primitives.d.ts","sourceRoot":"","sources":["../../../src/components/seo/primitives.tsx"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAItC,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAIrE,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,MAAM,CAAA;IACV,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,QAAQ,GAAG,SAAS,CAqBpD;AAED,6CAA6C;AAC7C,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,CAKtD;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,WAAW,GAAG,SAAS,CAmB7D;AAYD,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,IAAI,GACL,EAAE;IACD,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,CAAA;CACxD,2CAEA;AAED,yDAAyD;AACzD,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,SAAc,EAAE,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,2CAoB3F;AAED,wBAAgB,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,2CAUrD;AAID,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,WAAW,EACX,MAAM,EACN,QAAQ,EACR,SAAc,GACf,EAAE;IACD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,SAAS,CAAA;IAClB,QAAQ,EAAE,SAAS,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,2CAeA;AAED,wBAAgB,UAAU,CAAC,EAAE,KAAkB,EAAE,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,2CAWpE;AAED,wBAAgB,aAAa,CAAC,EAC5B,IAAI,EACJ,KAAK,EACL,WAAW,EACX,MAAM,GACP,EAAE;IACD,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,SAAS,CAAA;CACnB,2CAaA;AAED,wBAAgB,aAAa,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;CAAE,2CAkB5F;AAID,eAAO,MAAM,UAAU,kQAC0O,CAAA;AAEjQ,eAAO,MAAM,YAAY,wQAC8O,CAAA;AAEvQ,eAAO,MAAM,YAAY,iNACuL,CAAA"}
@@ -79,16 +79,16 @@ export function ScorePill({ score }) {
79
79
  }
80
80
  // ─── Layout cards + states ───────────────────────────────────────────
81
81
  export function SectionCard({ title, description, action, children, className = '', }) {
82
- return (_jsxs(Card, { padding: "none", className: className, role: "region", children: [(title || action) && (_jsxs(CardHeader, { className: "flex items-center justify-between gap-3", children: [_jsxs("div", { className: "min-w-0", children: [title && _jsx(CardTitle, { children: title }), description && _jsx(CardDescription, { children: description })] }), action] })), _jsx(CardContent, { className: title || action ? 'pt-0' : '', children: children })] }));
82
+ return (_jsxs(Card, { padding: "none", className: className, role: "region", children: [(title || action) && (_jsxs(CardHeader, { className: "flex items-center justify-between gap-3", children: [_jsxs("div", { className: "min-w-0", children: [title && _jsx(CardTitle, { children: title }), description && _jsx(CardDescription, { children: description })] }), action] })), _jsx(CardContent, { className: title || action ? '' : 'pt-6!', children: children })] }));
83
83
  }
84
84
  export function SeoLoading({ label = 'Loading…' }) {
85
- return (_jsxs("div", { className: "flex h-64 items-center justify-center", role: "status", "aria-live": "polite", children: [_jsx(Loader2, { className: "text-muted-foreground h-6 w-6 animate-spin", "aria-hidden": true }), _jsx("span", { className: "sr-only", children: label })] }));
85
+ return (_jsxs("div", { className: "flex min-h-32 items-center justify-center py-12", role: "status", "aria-live": "polite", children: [_jsx(Loader2, { className: "text-muted-foreground h-6 w-6 animate-spin", "aria-hidden": true }), _jsx("span", { className: "sr-only", children: label })] }));
86
86
  }
87
87
  export function SeoEmptyState({ icon, title, description, action, }) {
88
88
  return (_jsxs("div", { className: "border-border flex flex-col items-center justify-center rounded-lg border border-dashed px-6 py-12 text-center", children: [icon && (_jsx("div", { className: "text-muted-foreground mb-3", "aria-hidden": true, children: icon })), _jsx("h3", { className: "text-foreground text-base font-medium", children: title }), description && _jsx("p", { className: "text-muted-foreground mt-1 max-w-md text-sm", children: description }), action && _jsx("div", { className: "mt-4", children: action })] }));
89
89
  }
90
90
  export function SeoErrorState({ message, onRetry }) {
91
- return (_jsxs("div", { className: "border-destructive/30 bg-destructive/5 flex items-center gap-3 rounded-lg border p-3", role: "alert", children: [_jsx(AlertTriangle, { className: "text-destructive h-5 w-5 shrink-0", "aria-hidden": true }), _jsx("span", { className: "text-destructive flex-1 text-sm", children: message }), onRetry && (_jsx("button", { onClick: onRetry, className: "border-border text-foreground hover:bg-accent rounded-md border px-3 py-1 text-sm transition-colors", children: "Retry" }))] }));
91
+ return (_jsxs("div", { className: "border-destructive/30 bg-destructive/5 flex items-center gap-3 rounded-lg border p-4", role: "alert", children: [_jsx(AlertTriangle, { className: "text-destructive h-5 w-5 shrink-0", "aria-hidden": true }), _jsx("span", { className: "text-destructive flex-1 text-sm", children: message }), onRetry && (_jsx("button", { onClick: onRetry, className: "border-border text-foreground hover:bg-accent rounded-md border px-3 py-1 text-sm transition-colors", children: "Retry" }))] }));
92
92
  }
93
93
  // ─── Button helpers (token-only) ─────────────────────────────────────
94
94
  export const btnPrimary = 'inline-flex items-center justify-center gap-2 rounded-md bg-primary px-4 py-2 text-base font-medium text-primary-foreground transition-colors hover:bg-primary/90 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:opacity-60';
@@ -1 +1 @@
1
- {"version":3,"file":"primitives.js","sourceRoot":"","sources":["../../../src/components/seo/primitives.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"primitives.js","sourceRoot":"","sources":["../../../src/components/seo/primitives.tsx"],"names":[],"mappings":"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"}
@@ -8,8 +8,8 @@ const card = cv('overflow-hidden rounded-[var(--r)] border border-[var(--bdr)] b
8
8
  /** Stat / compact surfaces (`.dstat`). */
9
9
  sm: 'px-4 py-3.5',
10
10
  /** Simple padded panel (`.dcard-b`). */
11
- md: 'px-[18px] py-4',
12
- lg: 'px-[18px] py-6',
11
+ md: 'px-6 py-4',
12
+ lg: 'px-6 py-6',
13
13
  },
14
14
  elevation: {
15
15
  flat: 'shadow-none',
@@ -26,7 +26,7 @@ export const Card = forwardRef(function Card({ padding, elevation, interactive,
26
26
  });
27
27
  /** Header slot — `.dcard-h` in the design system handoff. */
28
28
  export function CardHeader({ className = '', bordered = true, children, ...rest }) {
29
- return (_jsx("div", { className: [bordered ? 'border-b border-[var(--bdr)] px-[18px] py-[14px]' : '', className]
29
+ return (_jsx("div", { className: [bordered ? 'border-b border-[var(--bdr)] px-6 pt-6 pb-4' : '', className]
30
30
  .filter(Boolean)
31
31
  .join(' '), ...rest, children: children }));
32
32
  }
@@ -38,10 +38,10 @@ export function CardDescription({ className = '', children, ...rest }) {
38
38
  }
39
39
  /** Body slot — `.dcard-b` in the design system handoff. */
40
40
  export function CardContent({ className = '', children, ...rest }) {
41
- return (_jsx("div", { className: `px-[18px] py-4 text-[length:var(--fs-body)] leading-[1.55] text-[var(--sub)] ${className}`, ...rest, children: children }));
41
+ return (_jsx("div", { className: `px-6 pt-4 pb-6 text-[length:var(--fs-body)] leading-[1.55] text-[var(--sub)] ${className}`, ...rest, children: children }));
42
42
  }
43
43
  export function CardFooter({ className = '', children, ...rest }) {
44
- return (_jsx("div", { className: `flex items-center justify-end gap-2 border-t border-[var(--bdr)] px-[18px] py-3 ${className}`, ...rest, children: children }));
44
+ return (_jsx("div", { className: `flex items-center justify-end gap-2 border-t border-[var(--bdr)] px-6 py-4 ${className}`, ...rest, children: children }));
45
45
  }
46
46
  export { card as cardVariants };
47
47
  //# sourceMappingURL=Card.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Card.js","sourceRoot":"","sources":["../../../src/components/ui/Card.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAuC,MAAM,OAAO,CAAA;AACvE,OAAO,EAAE,EAAE,EAAqB,MAAM,iBAAiB,CAAA;AAEvD,MAAM,IAAI,GAAG,EAAE,CACb,kGAAkG,EAClG;IACE,QAAQ,EAAE;QACR,OAAO,EAAE;YACP,IAAI,EAAE,KAAK;YACX,0CAA0C;YAC1C,EAAE,EAAE,aAAa;YACjB,wCAAwC;YACxC,EAAE,EAAE,gBAAgB;YACpB,EAAE,EAAE,gBAAgB;SACrB;QACD,SAAS,EAAE;YACT,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,qBAAqB;YAC9B,QAAQ,EAAE,sBAAsB;SACjC;KACF;IACD,eAAe,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE;CAC3D,CACF,CAAA;AAID,MAAM,iBAAiB,GACrB,sIAAsI,CAAA;AAQxI,MAAM,CAAC,MAAM,IAAI,GAAG,UAAU,CAA4B,SAAS,IAAI,CACrE,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,EACjE,GAAG;IAEH,MAAM,MAAM,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC1F,OAAO,CACL,cAAK,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,KAAM,IAAI,YAC5E,QAAQ,GACL,CACP,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,6DAA6D;AAC7D,MAAM,UAAU,UAAU,CAAC,EACzB,SAAS,GAAG,EAAE,EACd,QAAQ,GAAG,IAAI,EACf,QAAQ,EACR,GAAG,IAAI,EACiD;IACxD,OAAO,CACL,cACE,SAAS,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,kDAAkD,CAAC,CAAC,CAAC,EAAE,EAAE,SAAS,CAAC;aACvF,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,CAAC,GAAG,CAAC,KACR,IAAI,YAEP,QAAQ,GACL,CACP,CAAA;AACH,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,EACxB,SAAS,GAAG,EAAE,EACd,QAAQ,EACR,GAAG,IAAI,EAC4B;IACnC,OAAO,CACL,aACE,SAAS,EAAE,gEAAgE,SAAS,EAAE,KAClF,IAAI,YAEP,QAAQ,GACN,CACN,CAAA;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,EAC9B,SAAS,GAAG,EAAE,EACd,QAAQ,EACR,GAAG,IAAI,EAC8B;IACrC,OAAO,CACL,YAAG,SAAS,EAAE,0DAA0D,SAAS,EAAE,KAAM,IAAI,YAC1F,QAAQ,GACP,CACL,CAAA;AACH,CAAC;AAED,2DAA2D;AAC3D,MAAM,UAAU,WAAW,CAAC,EAAE,SAAS,GAAG,EAAE,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAkC;IAC/F,OAAO,CACL,cACE,SAAS,EAAE,gFAAgF,SAAS,EAAE,KAClG,IAAI,YAEP,QAAQ,GACL,CACP,CAAA;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,EAAE,SAAS,GAAG,EAAE,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAkC;IAC9F,OAAO,CACL,cACE,SAAS,EAAE,mFAAmF,SAAS,EAAE,KACrG,IAAI,YAEP,QAAQ,GACL,CACP,CAAA;AACH,CAAC;AAED,OAAO,EAAE,IAAI,IAAI,YAAY,EAAE,CAAA"}
1
+ {"version":3,"file":"Card.js","sourceRoot":"","sources":["../../../src/components/ui/Card.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAuC,MAAM,OAAO,CAAA;AACvE,OAAO,EAAE,EAAE,EAAqB,MAAM,iBAAiB,CAAA;AAEvD,MAAM,IAAI,GAAG,EAAE,CACb,kGAAkG,EAClG;IACE,QAAQ,EAAE;QACR,OAAO,EAAE;YACP,IAAI,EAAE,KAAK;YACX,0CAA0C;YAC1C,EAAE,EAAE,aAAa;YACjB,wCAAwC;YACxC,EAAE,EAAE,WAAW;YACf,EAAE,EAAE,WAAW;SAChB;QACD,SAAS,EAAE;YACT,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,qBAAqB;YAC9B,QAAQ,EAAE,sBAAsB;SACjC;KACF;IACD,eAAe,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE;CAC3D,CACF,CAAA;AAID,MAAM,iBAAiB,GACrB,sIAAsI,CAAA;AAQxI,MAAM,CAAC,MAAM,IAAI,GAAG,UAAU,CAA4B,SAAS,IAAI,CACrE,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,EACjE,GAAG;IAEH,MAAM,MAAM,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC1F,OAAO,CACL,cAAK,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,KAAM,IAAI,YAC5E,QAAQ,GACL,CACP,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,6DAA6D;AAC7D,MAAM,UAAU,UAAU,CAAC,EACzB,SAAS,GAAG,EAAE,EACd,QAAQ,GAAG,IAAI,EACf,QAAQ,EACR,GAAG,IAAI,EACiD;IACxD,OAAO,CACL,cACE,SAAS,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,6CAA6C,CAAC,CAAC,CAAC,EAAE,EAAE,SAAS,CAAC;aAClF,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,CAAC,GAAG,CAAC,KACR,IAAI,YAEP,QAAQ,GACL,CACP,CAAA;AACH,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,EACxB,SAAS,GAAG,EAAE,EACd,QAAQ,EACR,GAAG,IAAI,EAC4B;IACnC,OAAO,CACL,aACE,SAAS,EAAE,gEAAgE,SAAS,EAAE,KAClF,IAAI,YAEP,QAAQ,GACN,CACN,CAAA;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,EAC9B,SAAS,GAAG,EAAE,EACd,QAAQ,EACR,GAAG,IAAI,EAC8B;IACrC,OAAO,CACL,YAAG,SAAS,EAAE,0DAA0D,SAAS,EAAE,KAAM,IAAI,YAC1F,QAAQ,GACP,CACL,CAAA;AACH,CAAC;AAED,2DAA2D;AAC3D,MAAM,UAAU,WAAW,CAAC,EAAE,SAAS,GAAG,EAAE,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAkC;IAC/F,OAAO,CACL,cACE,SAAS,EAAE,gFAAgF,SAAS,EAAE,KAClG,IAAI,YAEP,QAAQ,GACL,CACP,CAAA;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,EAAE,SAAS,GAAG,EAAE,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAkC;IAC9F,OAAO,CACL,cACE,SAAS,EAAE,8EAA8E,SAAS,EAAE,KAChG,IAAI,YAEP,QAAQ,GACL,CACP,CAAA;AACH,CAAC;AAED,OAAO,EAAE,IAAI,IAAI,YAAY,EAAE,CAAA"}
@@ -32,16 +32,16 @@ export function InspectorPane({ open, width, children, 'aria-label': ariaLabel,
32
32
  return (_jsx("div", { className: "shrink-0 overflow-hidden bg-[var(--bg)] motion-safe:transition-[width] motion-safe:duration-200", style: { width: open ? `min(${width}px, 100%)` : 0 }, "aria-hidden": !open, children: _jsx("div", { role: "region", "aria-label": ariaLabel, className: "my-3 mr-3 ml-4 flex h-[calc(100%-24px)] flex-col overflow-hidden rounded-[var(--r)] border border-[var(--bdr)] bg-[var(--sb)] shadow-[var(--shd2)]", style: { width: `min(${width - 28}px, calc(100% - 28px))` }, children: open ? children : null }) }));
33
33
  }
34
34
  export function InspectorPaneHeader({ children, onClose, closeLabel = 'Close panel', }) {
35
- return (_jsxs("div", { className: "flex items-start gap-2 border-b border-[var(--bdr)] px-4 py-3.5", children: [_jsx("div", { className: "min-w-0 flex-1", children: children }), _jsx("button", { type: "button", onClick: onClose, "aria-label": closeLabel, className: "flex h-7 w-7 shrink-0 items-center justify-center rounded-[6px] text-[var(--muted)] transition-colors duration-[var(--motion-fast)] hover:bg-[var(--bg)] hover:text-[var(--txt)] focus-visible:ring-2 focus-visible:ring-[var(--ring)] focus-visible:outline-none", children: _jsx(X, { size: 16 }) })] }));
35
+ return (_jsxs("div", { className: "flex items-start gap-2 border-b border-[var(--bdr)] px-5 py-4", children: [_jsx("div", { className: "min-w-0 flex-1", children: children }), _jsx("button", { type: "button", onClick: onClose, "aria-label": closeLabel, className: "flex h-7 w-7 shrink-0 items-center justify-center rounded-[6px] text-[var(--muted)] transition-colors duration-[var(--motion-fast)] hover:bg-[var(--bg)] hover:text-[var(--txt)] focus-visible:ring-2 focus-visible:ring-[var(--ring)] focus-visible:outline-none", children: _jsx(X, { size: 16 }) })] }));
36
36
  }
37
37
  export function InspectorPaneBody({ children }) {
38
38
  return _jsx("div", { className: "min-h-0 flex-1 overflow-y-auto", children: children });
39
39
  }
40
40
  /** Bordered section with the design's uppercase 10.5px section title. */
41
41
  export function InspectorPaneSection({ title, subtitle, children, }) {
42
- return (_jsxs("div", { className: "border-b border-[var(--bdr)] px-4 py-3.5 last:border-b-0", children: [title && (_jsxs("div", { className: "mb-2.5 flex items-baseline gap-2", children: [_jsx("span", { className: "text-[10.5px] font-semibold tracking-[0.6px] text-[var(--muted)] uppercase", children: title }), subtitle && _jsx("span", { className: "text-[11px] text-[var(--muted)]", children: subtitle })] })), children] }));
42
+ return (_jsxs("div", { className: "border-b border-[var(--bdr)] px-5 py-4 last:border-b-0", children: [title && (_jsxs("div", { className: "mb-2.5 flex items-baseline gap-2", children: [_jsx("span", { className: "text-[10.5px] font-semibold tracking-[0.6px] text-[var(--muted)] uppercase", children: title }), subtitle && _jsx("span", { className: "text-[11px] text-[var(--muted)]", children: subtitle })] })), children] }));
43
43
  }
44
44
  export function InspectorPaneFooter({ children }) {
45
- return _jsx("div", { className: "border-t border-[var(--bdr)] px-4 py-3.5", children: children });
45
+ return _jsx("div", { className: "border-t border-[var(--bdr)] px-5 py-4", children: children });
46
46
  }
47
47
  //# sourceMappingURL=InspectorPane.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"InspectorPane.js","sourceRoot":"","sources":["../../../src/components/ui/InspectorPane.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAGZ,OAAO,EAAE,CAAC,EAAE,MAAM,cAAc,CAAA;AAEhC;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,eAAe,CAAC,EAC9B,QAAQ,EACR,SAAS,GAIV;IACC,OAAO,cAAK,SAAS,EAAE,uCAAuC,SAAS,IAAI,EAAE,EAAE,YAAG,QAAQ,GAAO,CAAA;AACnG,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,EAC5B,QAAQ,EACR,SAAS,GAIV;IACC,OAAO,cAAK,SAAS,EAAE,kCAAkC,SAAS,IAAI,EAAE,EAAE,YAAG,QAAQ,GAAO,CAAA;AAC9F,CAAC;AAUD,MAAM,UAAU,aAAa,CAAC,EAC5B,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,YAAY,EAAE,SAAS,GACJ;IACnB,wEAAwE;IACxE,uEAAuE;IACvE,wEAAwE;IACxE,uEAAuE;IACvE,yBAAyB;IACzB,OAAO,CACL,cACE,SAAS,EAAC,iGAAiG,EAC3G,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,OAAO,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,iBACvC,CAAC,IAAI,YAElB,cACE,IAAI,EAAC,QAAQ,gBACD,SAAS,EACrB,SAAS,EAAC,oJAAoJ,EAC9J,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,KAAK,GAAG,EAAE,wBAAwB,EAAE,YAE1D,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,GACnB,GACF,CACP,CAAA;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,EAClC,QAAQ,EACR,OAAO,EACP,UAAU,GAAG,aAAa,GAK3B;IACC,OAAO,CACL,eAAK,SAAS,EAAC,iEAAiE,aAC9E,cAAK,SAAS,EAAC,gBAAgB,YAAE,QAAQ,GAAO,EAChD,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,OAAO,gBACJ,UAAU,EACtB,SAAS,EAAC,mQAAmQ,YAE7Q,KAAC,CAAC,IAAC,IAAI,EAAE,EAAE,GAAI,GACR,IACL,CACP,CAAA;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,EAAE,QAAQ,EAA2B;IACrE,OAAO,cAAK,SAAS,EAAC,gCAAgC,YAAE,QAAQ,GAAO,CAAA;AACzE,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,oBAAoB,CAAC,EACnC,KAAK,EACL,QAAQ,EACR,QAAQ,GAKT;IACC,OAAO,CACL,eAAK,SAAS,EAAC,0DAA0D,aACtE,KAAK,IAAI,CACR,eAAK,SAAS,EAAC,kCAAkC,aAC/C,eAAM,SAAS,EAAC,4EAA4E,YACzF,KAAK,GACD,EACN,QAAQ,IAAI,eAAM,SAAS,EAAC,iCAAiC,YAAE,QAAQ,GAAQ,IAC5E,CACP,EACA,QAAQ,IACL,CACP,CAAA;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,EAAE,QAAQ,EAA2B;IACvE,OAAO,cAAK,SAAS,EAAC,0CAA0C,YAAE,QAAQ,GAAO,CAAA;AACnF,CAAC"}
1
+ {"version":3,"file":"InspectorPane.js","sourceRoot":"","sources":["../../../src/components/ui/InspectorPane.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAGZ,OAAO,EAAE,CAAC,EAAE,MAAM,cAAc,CAAA;AAEhC;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,eAAe,CAAC,EAC9B,QAAQ,EACR,SAAS,GAIV;IACC,OAAO,cAAK,SAAS,EAAE,uCAAuC,SAAS,IAAI,EAAE,EAAE,YAAG,QAAQ,GAAO,CAAA;AACnG,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,EAC5B,QAAQ,EACR,SAAS,GAIV;IACC,OAAO,cAAK,SAAS,EAAE,kCAAkC,SAAS,IAAI,EAAE,EAAE,YAAG,QAAQ,GAAO,CAAA;AAC9F,CAAC;AAUD,MAAM,UAAU,aAAa,CAAC,EAC5B,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,YAAY,EAAE,SAAS,GACJ;IACnB,wEAAwE;IACxE,uEAAuE;IACvE,wEAAwE;IACxE,uEAAuE;IACvE,yBAAyB;IACzB,OAAO,CACL,cACE,SAAS,EAAC,iGAAiG,EAC3G,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,OAAO,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,iBACvC,CAAC,IAAI,YAElB,cACE,IAAI,EAAC,QAAQ,gBACD,SAAS,EACrB,SAAS,EAAC,oJAAoJ,EAC9J,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,KAAK,GAAG,EAAE,wBAAwB,EAAE,YAE1D,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,GACnB,GACF,CACP,CAAA;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,EAClC,QAAQ,EACR,OAAO,EACP,UAAU,GAAG,aAAa,GAK3B;IACC,OAAO,CACL,eAAK,SAAS,EAAC,+DAA+D,aAC5E,cAAK,SAAS,EAAC,gBAAgB,YAAE,QAAQ,GAAO,EAChD,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,OAAO,gBACJ,UAAU,EACtB,SAAS,EAAC,mQAAmQ,YAE7Q,KAAC,CAAC,IAAC,IAAI,EAAE,EAAE,GAAI,GACR,IACL,CACP,CAAA;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,EAAE,QAAQ,EAA2B;IACrE,OAAO,cAAK,SAAS,EAAC,gCAAgC,YAAE,QAAQ,GAAO,CAAA;AACzE,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,oBAAoB,CAAC,EACnC,KAAK,EACL,QAAQ,EACR,QAAQ,GAKT;IACC,OAAO,CACL,eAAK,SAAS,EAAC,wDAAwD,aACpE,KAAK,IAAI,CACR,eAAK,SAAS,EAAC,kCAAkC,aAC/C,eAAM,SAAS,EAAC,4EAA4E,YACzF,KAAK,GACD,EACN,QAAQ,IAAI,eAAM,SAAS,EAAC,iCAAiC,YAAE,QAAQ,GAAQ,IAC5E,CACP,EACA,QAAQ,IACL,CACP,CAAA;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,EAAE,QAAQ,EAA2B;IACvE,OAAO,cAAK,SAAS,EAAC,wCAAwC,YAAE,QAAQ,GAAO,CAAA;AACjF,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { ReactNode } from 'react';
2
+ /**
3
+ * Bordered panel with a header divider — Dashboard, modals, and list-heavy views.
4
+ * Matches Settings/Section card rhythm: `px-6` gutters, `py-4` header, body flush
5
+ * below the divider with its own padding.
6
+ */
7
+ export declare function PanelSection({ title, description, action, children, className, }: {
8
+ title?: ReactNode;
9
+ description?: ReactNode;
10
+ action?: ReactNode;
11
+ children: ReactNode;
12
+ className?: string;
13
+ }): import("react/jsx-runtime").JSX.Element;
14
+ /** Standard inset for list rows / table bodies inside a {@link PanelSection}. */
15
+ export declare const PANEL_LIST_ROW_CLASS = "hover:bg-accent/50 focus-visible:bg-accent/50 w-full px-6 py-4 text-left transition-colors";
16
+ //# sourceMappingURL=PanelSection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PanelSection.d.ts","sourceRoot":"","sources":["../../../src/components/ui/PanelSection.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEtC;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,WAAW,EACX,MAAM,EACN,QAAQ,EACR,SAAc,GACf,EAAE;IACD,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,WAAW,CAAC,EAAE,SAAS,CAAA;IACvB,MAAM,CAAC,EAAE,SAAS,CAAA;IAClB,QAAQ,EAAE,SAAS,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,2CA2BA;AAED,iFAAiF;AACjF,eAAO,MAAM,oBAAoB,+FAC6D,CAAA"}
@@ -0,0 +1,15 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ /**
4
+ * Bordered panel with a header divider — Dashboard, modals, and list-heavy views.
5
+ * Matches Settings/Section card rhythm: `px-6` gutters, `py-4` header, body flush
6
+ * below the divider with its own padding.
7
+ */
8
+ export function PanelSection({ title, description, action, children, className = '', }) {
9
+ return (_jsxs("section", { className: `bg-card border-border overflow-hidden rounded-xl border shadow-sm ${className}`, children: [(title || action) && (_jsxs("header", { className: "border-border flex items-center justify-between gap-3 border-b px-6 py-4", children: [_jsxs("div", { className: "min-w-0", children: [title &&
10
+ (typeof title === 'string' ? (_jsx("h2", { className: "text-foreground text-sm font-medium", children: title })) : (title)), description &&
11
+ (typeof description === 'string' ? (_jsx("p", { className: "text-muted-foreground mt-0.5 text-xs", children: description })) : (description))] }), action] })), children] }));
12
+ }
13
+ /** Standard inset for list rows / table bodies inside a {@link PanelSection}. */
14
+ export const PANEL_LIST_ROW_CLASS = 'hover:bg-accent/50 focus-visible:bg-accent/50 w-full px-6 py-4 text-left transition-colors';
15
+ //# sourceMappingURL=PanelSection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PanelSection.js","sourceRoot":"","sources":["../../../src/components/ui/PanelSection.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAIZ;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,EAC3B,KAAK,EACL,WAAW,EACX,MAAM,EACN,QAAQ,EACR,SAAS,GAAG,EAAE,GAOf;IACC,OAAO,CACL,mBACE,SAAS,EAAE,qEAAqE,SAAS,EAAE,aAE1F,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,CACpB,kBAAQ,SAAS,EAAC,0EAA0E,aAC1F,eAAK,SAAS,EAAC,SAAS,aACrB,KAAK;gCACJ,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAC3B,aAAI,SAAS,EAAC,qCAAqC,YAAE,KAAK,GAAM,CACjE,CAAC,CAAC,CAAC,CACF,KAAK,CACN,CAAC,EACH,WAAW;gCACV,CAAC,OAAO,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,CACjC,YAAG,SAAS,EAAC,sCAAsC,YAAE,WAAW,GAAK,CACtE,CAAC,CAAC,CAAC,CACF,WAAW,CACZ,CAAC,IACA,EACL,MAAM,IACA,CACV,EACA,QAAQ,IACD,CACX,CAAA;AACH,CAAC;AAED,iFAAiF;AACjF,MAAM,CAAC,MAAM,oBAAoB,GAC/B,4FAA4F,CAAA"}
@@ -0,0 +1,9 @@
1
+ /** Marks the canonical admin shell root (AdminRoot / LoginRoot). */
2
+ export declare const ADMIN_ROOT_ATTR = "data-actuate-admin-root";
3
+ /**
4
+ * Resolve the element that owns admin theme tokens (accent, color mode, density).
5
+ * Prefer the marked shell root so a consumer wrapper `.actuate-admin` does not
6
+ * steal runtime overrides from the inner AdminRoot.
7
+ */
8
+ export declare function getAdminRootElement(): HTMLElement | null;
9
+ //# sourceMappingURL=admin-root-element.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-root-element.d.ts","sourceRoot":"","sources":["../../src/lib/admin-root-element.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,eAAO,MAAM,eAAe,4BAA4B,CAAA;AAExD;;;;GAIG;AACH,wBAAgB,mBAAmB,IAAI,WAAW,GAAG,IAAI,CAMxD"}
@@ -0,0 +1,14 @@
1
+ /** Marks the canonical admin shell root (AdminRoot / LoginRoot). */
2
+ export const ADMIN_ROOT_ATTR = 'data-actuate-admin-root';
3
+ /**
4
+ * Resolve the element that owns admin theme tokens (accent, color mode, density).
5
+ * Prefer the marked shell root so a consumer wrapper `.actuate-admin` does not
6
+ * steal runtime overrides from the inner AdminRoot.
7
+ */
8
+ export function getAdminRootElement() {
9
+ if (typeof document === 'undefined')
10
+ return null;
11
+ return (document.querySelector(`[${ADMIN_ROOT_ATTR}]`) ??
12
+ document.querySelector('.actuate-admin'));
13
+ }
14
+ //# sourceMappingURL=admin-root-element.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-root-element.js","sourceRoot":"","sources":["../../src/lib/admin-root-element.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,MAAM,CAAC,MAAM,eAAe,GAAG,yBAAyB,CAAA;AAExD;;;;GAIG;AACH,MAAM,UAAU,mBAAmB;IACjC,IAAI,OAAO,QAAQ,KAAK,WAAW;QAAE,OAAO,IAAI,CAAA;IAChD,OAAO,CACL,QAAQ,CAAC,aAAa,CAAc,IAAI,eAAe,GAAG,CAAC;QAC3D,QAAQ,CAAC,aAAa,CAAc,gBAAgB,CAAC,CACtD,CAAA;AACH,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { type PageSection } from '@actuate-media/cms-core/page-sections';
2
+ /** Build an HTML-ish string from editor sections (+ optional post body) for SEO analysis. */
3
+ export declare function buildEditorContentHtml(sections: PageSection[], body?: string): string;
4
+ /** Live 0–100 SEO score from the current in-editor document state. */
5
+ export declare function computeLiveSeoScore(input: {
6
+ title: string;
7
+ slug: string;
8
+ seoTitle: string;
9
+ seoDescription: string;
10
+ focusKeyword?: string;
11
+ sections: PageSection[];
12
+ bodyHtml?: string;
13
+ }): number;
14
+ /** Top content words for the Insights accordion (excluding common stop words). */
15
+ export declare function prominentWordsFromText(plainText: string, limit?: number): string[];
16
+ //# sourceMappingURL=editor-seo-content.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editor-seo-content.d.ts","sourceRoot":"","sources":["../../src/lib/editor-seo-content.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,WAAW,EAAE,MAAM,uCAAuC,CAAA;AAKxF,6FAA6F;AAC7F,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,IAAI,SAAK,GAAG,MAAM,CASjF;AAED,sEAAsE;AACtE,wBAAgB,mBAAmB,CAAC,KAAK,EAAE;IACzC,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,cAAc,EAAE,MAAM,CAAA;IACtB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,EAAE,WAAW,EAAE,CAAA;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,GAAG,MAAM,CAUT;AA+FD,kFAAkF;AAClF,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,SAAI,GAAG,MAAM,EAAE,CAW7E"}
@@ -0,0 +1,139 @@
1
+ import { getSectionType } from '@actuate-media/cms-core/page-sections';
2
+ import { analyzeContent } from '@actuate-media/cms-core/seo/analysis';
3
+ const HTML_LIKE = /<\/?[a-z][\s\S]*>/i;
4
+ /** Build an HTML-ish string from editor sections (+ optional post body) for SEO analysis. */
5
+ export function buildEditorContentHtml(sections, body = '') {
6
+ const parts = [];
7
+ if (body.trim())
8
+ parts.push(body);
9
+ for (const section of sections) {
10
+ if (section.visible === false)
11
+ continue;
12
+ const chunk = extractSectionContentHtml(section);
13
+ if (chunk)
14
+ parts.push(chunk);
15
+ }
16
+ return parts.join('\n');
17
+ }
18
+ /** Live 0–100 SEO score from the current in-editor document state. */
19
+ export function computeLiveSeoScore(input) {
20
+ const content = buildEditorContentHtml(input.sections, input.bodyHtml ?? '');
21
+ return analyzeContent({
22
+ title: input.title,
23
+ slug: input.slug,
24
+ content,
25
+ metaTitle: input.seoTitle,
26
+ metaDescription: input.seoDescription,
27
+ focusKeyphrase: input.focusKeyword,
28
+ }).score;
29
+ }
30
+ function extractSectionContentHtml(section) {
31
+ const content = section.content;
32
+ if (!content || typeof content !== 'object')
33
+ return '';
34
+ const def = getSectionType(section.sectionType);
35
+ const chunks = [];
36
+ if (def) {
37
+ for (const field of def.fields) {
38
+ const val = content[field.key];
39
+ if (typeof val !== 'string' || !val.trim())
40
+ continue;
41
+ if (field.type === 'richText' || HTML_LIKE.test(val)) {
42
+ chunks.push(val);
43
+ }
44
+ else if (/heading|title|subtitle|eyebrow/i.test(field.key)) {
45
+ chunks.push(`<h2>${escapeHtml(val.trim())}</h2>`);
46
+ }
47
+ else if (/body|content|text|copy|description|excerpt|quote|answer/i.test(field.key)) {
48
+ chunks.push(`<p>${escapeHtml(val.trim())}</p>`);
49
+ }
50
+ }
51
+ }
52
+ else {
53
+ collectStringValues(content, chunks, 0);
54
+ }
55
+ return chunks.join('\n');
56
+ }
57
+ function collectStringValues(obj, chunks, depth) {
58
+ if (depth > 6)
59
+ return;
60
+ for (const value of Object.values(obj)) {
61
+ if (typeof value === 'string' && value.trim()) {
62
+ chunks.push(HTML_LIKE.test(value) ? value : `<p>${escapeHtml(value.trim())}</p>`);
63
+ }
64
+ else if (Array.isArray(value)) {
65
+ for (const item of value) {
66
+ if (item && typeof item === 'object') {
67
+ collectStringValues(item, chunks, depth + 1);
68
+ }
69
+ }
70
+ }
71
+ else if (value && typeof value === 'object') {
72
+ collectStringValues(value, chunks, depth + 1);
73
+ }
74
+ }
75
+ }
76
+ function escapeHtml(text) {
77
+ return text
78
+ .replace(/&/g, '&amp;')
79
+ .replace(/</g, '&lt;')
80
+ .replace(/>/g, '&gt;')
81
+ .replace(/"/g, '&quot;');
82
+ }
83
+ const STOP_WORDS = new Set([
84
+ 'about',
85
+ 'after',
86
+ 'also',
87
+ 'been',
88
+ 'before',
89
+ 'being',
90
+ 'between',
91
+ 'both',
92
+ 'could',
93
+ 'each',
94
+ 'from',
95
+ 'have',
96
+ 'into',
97
+ 'more',
98
+ 'most',
99
+ 'other',
100
+ 'over',
101
+ 'some',
102
+ 'such',
103
+ 'than',
104
+ 'that',
105
+ 'their',
106
+ 'them',
107
+ 'then',
108
+ 'there',
109
+ 'these',
110
+ 'they',
111
+ 'this',
112
+ 'through',
113
+ 'under',
114
+ 'very',
115
+ 'were',
116
+ 'what',
117
+ 'when',
118
+ 'where',
119
+ 'which',
120
+ 'while',
121
+ 'with',
122
+ 'would',
123
+ 'your',
124
+ ]);
125
+ /** Top content words for the Insights accordion (excluding common stop words). */
126
+ export function prominentWordsFromText(plainText, limit = 8) {
127
+ const counts = new Map();
128
+ for (const raw of plainText.toLowerCase().split(/\s+/)) {
129
+ const word = raw.replace(/[^a-z0-9'-]/g, '');
130
+ if (word.length < 4 || STOP_WORDS.has(word))
131
+ continue;
132
+ counts.set(word, (counts.get(word) ?? 0) + 1);
133
+ }
134
+ return [...counts.entries()]
135
+ .sort((a, b) => b[1] - a[1])
136
+ .slice(0, limit)
137
+ .map(([word]) => word);
138
+ }
139
+ //# sourceMappingURL=editor-seo-content.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editor-seo-content.js","sourceRoot":"","sources":["../../src/lib/editor-seo-content.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"portal-container.d.ts","sourceRoot":"","sources":["../../src/lib/portal-container.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,IAAI,WAAW,GAAG,SAAS,CAG9D"}
1
+ {"version":3,"file":"portal-container.d.ts","sourceRoot":"","sources":["../../src/lib/portal-container.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,IAAI,WAAW,GAAG,SAAS,CAE9D"}
@@ -1,3 +1,4 @@
1
+ import { getAdminRootElement } from './admin-root-element.js';
1
2
  /**
2
3
  * Admin theme tokens are scoped under `.actuate-admin` (styles/theme.css),
3
4
  * and dark mode / accent / density are applied as classes-attributes on that
@@ -9,8 +10,6 @@
9
10
  * Returns `undefined` during SSR (portals only materialize client-side).
10
11
  */
11
12
  export function adminPortalContainer() {
12
- if (typeof document === 'undefined')
13
- return undefined;
14
- return document.querySelector('.actuate-admin') ?? undefined;
13
+ return getAdminRootElement() ?? undefined;
15
14
  }
16
15
  //# sourceMappingURL=portal-container.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"portal-container.js","sourceRoot":"","sources":["../../src/lib/portal-container.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,UAAU,oBAAoB;IAClC,IAAI,OAAO,QAAQ,KAAK,WAAW;QAAE,OAAO,SAAS,CAAA;IACrD,OAAO,QAAQ,CAAC,aAAa,CAAc,gBAAgB,CAAC,IAAI,SAAS,CAAA;AAC3E,CAAC"}
1
+ {"version":3,"file":"portal-container.js","sourceRoot":"","sources":["../../src/lib/portal-container.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAA;AAE7D;;;;;;;;;GASG;AACH,MAAM,UAAU,oBAAoB;IAClC,OAAO,mBAAmB,EAAE,IAAI,SAAS,CAAA;AAC3C,CAAC"}
@@ -9,6 +9,7 @@
9
9
  * `packages/cms-core/src/api/handlers.ts` across phases 2-3 and 6.
10
10
  */
11
11
  import type { BrandAlignmentScoreResult } from '@actuate-media/cms-core/brand-voice';
12
+ import type { SEOAnalysisResult } from '@actuate-media/cms-core/seo/analysis';
12
13
  export type SeoGrade = 'good' | 'fair' | 'poor' | 'critical';
13
14
  export type SeoSeverity = 'critical' | 'warning' | 'info';
14
15
  export type SeoIssueStatus = 'open' | 'ignored' | 'resolved' | 'recurring';
@@ -101,7 +102,12 @@ export interface SeoContentRecord {
101
102
  title: string;
102
103
  url: string;
103
104
  canonicalUrl: string | null;
105
+ /** Rendered public title (after site title template). */
104
106
  metaTitle: string | null;
107
+ /** Stored page-specific portion for the `%page%` token. */
108
+ metaTitlePage?: string | null;
109
+ siteName?: string | null;
110
+ titleTemplate?: string | null;
105
111
  metaDescription: string | null;
106
112
  focusKeyword: string | null;
107
113
  keyTakeaway: string | null;
@@ -153,6 +159,7 @@ export interface SeoFieldPayload {
153
159
  llmsSection?: string;
154
160
  llmsOptional?: boolean;
155
161
  }
162
+ export declare function fetchDocumentSeoAnalysis(documentId: string): Promise<SEOAnalysisResult>;
156
163
  export declare function updateSeoFields(entityType: string, entityId: string, payload: SeoFieldPayload): Promise<{
157
164
  error?: string;
158
165
  }>;
@@ -209,6 +216,7 @@ export interface SeoFixFieldChange {
209
216
  export interface SeoIssueFixSuggestion {
210
217
  autoFixable: boolean;
211
218
  source?: 'deterministic' | 'ai';
219
+ fixStrategy?: 'redirect' | 'fix-link';
212
220
  aiUnavailable?: boolean;
213
221
  fingerprint: string;
214
222
  patch: Record<string, unknown>;
@@ -462,8 +470,18 @@ export declare function flattenRedirectChain(chainId: string): Promise<{
462
470
  error?: string;
463
471
  }>;
464
472
  export declare function fetchRedirectSuggestions(): Promise<RedirectSuggestion[]>;
473
+ export interface RedirectRecoverySettings {
474
+ aiRerank: boolean;
475
+ autoApply: boolean;
476
+ autoApplyMinConfidence: number;
477
+ }
478
+ export declare function fetchRedirectRecoverySettings(): Promise<RedirectRecoverySettings | null>;
479
+ export declare function saveRedirectRecoverySettings(settings: Partial<RedirectRecoverySettings>): Promise<{
480
+ error?: string;
481
+ }>;
465
482
  export declare function generate404RecoverySuggestions(): Promise<{
466
483
  error?: string;
484
+ autoApplied?: number;
467
485
  }>;
468
486
  export declare function acceptRedirectSuggestion(suggestionId: string): Promise<{
469
487
  error?: string;
@@ -499,4 +517,77 @@ export declare function generateStructuredData(context: {
499
517
  schemaType: string;
500
518
  }): Promise<SeoAiResult>;
501
519
  export declare function summarizeSeoAudit(): Promise<SeoAiResult>;
520
+ export interface LinkGraphEntityRef {
521
+ id: string;
522
+ title: string;
523
+ url: string;
524
+ path: string;
525
+ collection: string;
526
+ entityType: 'page' | 'post';
527
+ isHome: boolean;
528
+ }
529
+ export interface LinkGraphSnapshot {
530
+ scannedAt: string;
531
+ postsCrawled: number;
532
+ internalLinks: number;
533
+ externalLinks: number;
534
+ internalRatio: number;
535
+ orphanCount: number;
536
+ orphaned: LinkGraphEntityRef[];
537
+ linkCoveragePercent: number;
538
+ underLinked: Array<LinkGraphEntityRef & {
539
+ outboundInternal: number;
540
+ }>;
541
+ brokenLinkCount: number;
542
+ aiIndexLastRunAt: string | null;
543
+ aiIndexReady: boolean;
544
+ }
545
+ export interface LinkHealthIssue {
546
+ id: string;
547
+ page: string;
548
+ url: string;
549
+ status: number;
550
+ type: string;
551
+ }
552
+ export interface LinkSuggestion {
553
+ sourceEntityId: string;
554
+ sourceTitle: string;
555
+ sourceUrl: string;
556
+ anchorText: string;
557
+ confidence: number;
558
+ excerpt: string;
559
+ }
560
+ export declare function fetchLinkGraphSnapshot(): Promise<LinkGraphSnapshot>;
561
+ export declare function runLinkAiIndex(): Promise<{
562
+ data?: {
563
+ indexedAt: string;
564
+ entitiesIndexed: number;
565
+ aiAvailable: boolean;
566
+ message: string;
567
+ };
568
+ error?: string;
569
+ }>;
570
+ export declare function fetchLinkSuggestions(input: {
571
+ targetEntityId: string;
572
+ targetEntityType: 'page' | 'post';
573
+ limit?: number;
574
+ }): Promise<{
575
+ data?: {
576
+ target: {
577
+ id: string;
578
+ title: string;
579
+ url: string;
580
+ };
581
+ suggestions: LinkSuggestion[];
582
+ };
583
+ error?: string;
584
+ }>;
585
+ export declare function fetchLinkHealthIssues(): Promise<{
586
+ data?: {
587
+ issues: LinkHealthIssue[];
588
+ checked: number;
589
+ truncated: boolean;
590
+ };
591
+ error?: string;
592
+ }>;
502
593
  //# sourceMappingURL=seo-service.d.ts.map