@focus-reactive/payload-plugin-seo 1.3.0 → 1.4.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 (277) hide show
  1. package/README.md +210 -43
  2. package/dist/admin.css +2 -3
  3. package/dist/components/SeoButton/ScoreBadge.d.ts.map +1 -1
  4. package/dist/components/SeoButton/ScoreBadge.js +10 -7
  5. package/dist/components/SeoButton/ScoreBadge.js.map +1 -1
  6. package/dist/components/SeoButton/SeoButtonInner.d.ts +3 -1
  7. package/dist/components/SeoButton/SeoButtonInner.d.ts.map +1 -1
  8. package/dist/components/SeoButton/SeoButtonInner.js +5 -2
  9. package/dist/components/SeoButton/SeoButtonInner.js.map +1 -1
  10. package/dist/components/SeoDrawer/TabsNav/index.d.ts.map +1 -1
  11. package/dist/components/SeoDrawer/TabsNav/index.js +15 -4
  12. package/dist/components/SeoDrawer/TabsNav/index.js.map +1 -1
  13. package/dist/components/SeoDrawer/TabsNav/variants.d.ts.map +1 -1
  14. package/dist/components/SeoDrawer/TabsNav/variants.js +12 -9
  15. package/dist/components/SeoDrawer/TabsNav/variants.js.map +1 -1
  16. package/dist/components/SeoDrawer/analysisDecision.d.ts.map +1 -1
  17. package/dist/components/SeoDrawer/analysisDecision.js.map +1 -1
  18. package/dist/components/SeoDrawer/build-analysis-input.d.ts +9 -7
  19. package/dist/components/SeoDrawer/build-analysis-input.d.ts.map +1 -1
  20. package/dist/components/SeoDrawer/build-analysis-input.js +39 -11
  21. package/dist/components/SeoDrawer/build-analysis-input.js.map +1 -1
  22. package/dist/components/SeoDrawer/buildInput.d.ts +1 -1
  23. package/dist/components/SeoDrawer/buildInput.d.ts.map +1 -1
  24. package/dist/components/SeoDrawer/buildInput.js +12 -2
  25. package/dist/components/SeoDrawer/buildInput.js.map +1 -1
  26. package/dist/components/SeoDrawer/components/Header.d.ts.map +1 -1
  27. package/dist/components/SeoDrawer/components/Header.js +20 -2
  28. package/dist/components/SeoDrawer/components/Header.js.map +1 -1
  29. package/dist/components/SeoDrawer/components/HeadingsSection/HeadingLevelTiles.d.ts.map +1 -1
  30. package/dist/components/SeoDrawer/components/HeadingsSection/HeadingLevelTiles.js +23 -5
  31. package/dist/components/SeoDrawer/components/HeadingsSection/HeadingLevelTiles.js.map +1 -1
  32. package/dist/components/SeoDrawer/components/HeadingsSection/HeadingTree/Chevron.d.ts.map +1 -1
  33. package/dist/components/SeoDrawer/components/HeadingsSection/HeadingTree/Chevron.js +12 -1
  34. package/dist/components/SeoDrawer/components/HeadingsSection/HeadingTree/Chevron.js.map +1 -1
  35. package/dist/components/SeoDrawer/components/HeadingsSection/HeadingTree/HeadingTreeGroup.d.ts.map +1 -1
  36. package/dist/components/SeoDrawer/components/HeadingsSection/HeadingTree/HeadingTreeGroup.js +43 -4
  37. package/dist/components/SeoDrawer/components/HeadingsSection/HeadingTree/HeadingTreeGroup.js.map +1 -1
  38. package/dist/components/SeoDrawer/components/HeadingsSection/HeadingTree/HeadingTreeRow.d.ts +1 -1
  39. package/dist/components/SeoDrawer/components/HeadingsSection/HeadingTree/HeadingTreeRow.d.ts.map +1 -1
  40. package/dist/components/SeoDrawer/components/HeadingsSection/HeadingTree/HeadingTreeRow.js +45 -10
  41. package/dist/components/SeoDrawer/components/HeadingsSection/HeadingTree/HeadingTreeRow.js.map +1 -1
  42. package/dist/components/SeoDrawer/components/HeadingsSection/HeadingTree/index.d.ts.map +1 -1
  43. package/dist/components/SeoDrawer/components/HeadingsSection/HeadingTree/index.js.map +1 -1
  44. package/dist/components/SeoDrawer/components/HeadingsSection/HeadingTree/useHeadingRails.d.ts +1 -1
  45. package/dist/components/SeoDrawer/components/HeadingsSection/HeadingTree/useHeadingRails.d.ts.map +1 -1
  46. package/dist/components/SeoDrawer/components/HeadingsSection/HeadingTree/useHeadingRails.js +6 -1
  47. package/dist/components/SeoDrawer/components/HeadingsSection/HeadingTree/useHeadingRails.js.map +1 -1
  48. package/dist/components/SeoDrawer/components/HeadingsSection/index.d.ts.map +1 -1
  49. package/dist/components/SeoDrawer/components/HeadingsSection/index.js.map +1 -1
  50. package/dist/components/SeoDrawer/components/SerpPreview/highlight-keyphrase.d.ts.map +1 -1
  51. package/dist/components/SeoDrawer/components/SerpPreview/highlight-keyphrase.js +3 -1
  52. package/dist/components/SeoDrawer/components/SerpPreview/highlight-keyphrase.js.map +1 -1
  53. package/dist/components/SeoDrawer/components/SerpPreview/index.d.ts.map +1 -1
  54. package/dist/components/SeoDrawer/components/SerpPreview/index.js +8 -1
  55. package/dist/components/SeoDrawer/components/SerpPreview/index.js.map +1 -1
  56. package/dist/components/SeoDrawer/components/SerpPreview/serp-favicon.d.ts.map +1 -1
  57. package/dist/components/SeoDrawer/components/SerpPreview/serp-favicon.js.map +1 -1
  58. package/dist/components/SeoDrawer/components/SerpPreview/variants.d.ts.map +1 -1
  59. package/dist/components/SeoDrawer/components/SerpPreview/variants.js +9 -6
  60. package/dist/components/SeoDrawer/components/SerpPreview/variants.js.map +1 -1
  61. package/dist/components/SeoDrawer/index.d.ts.map +1 -1
  62. package/dist/components/SeoDrawer/index.js +50 -15
  63. package/dist/components/SeoDrawer/index.js.map +1 -1
  64. package/dist/components/SeoDrawer/keyphrasePending.d.ts.map +1 -1
  65. package/dist/components/SeoDrawer/keyphrasePending.js.map +1 -1
  66. package/dist/components/SeoDrawer/languagePacks.d.ts.map +1 -1
  67. package/dist/components/SeoDrawer/languagePacks.js.map +1 -1
  68. package/dist/components/SeoDrawer/tabs/InclusiveTab.d.ts.map +1 -1
  69. package/dist/components/SeoDrawer/tabs/InclusiveTab.js +31 -10
  70. package/dist/components/SeoDrawer/tabs/InclusiveTab.js.map +1 -1
  71. package/dist/components/SeoDrawer/tabs/KeyphraseTab.d.ts +1 -1
  72. package/dist/components/SeoDrawer/tabs/KeyphraseTab.d.ts.map +1 -1
  73. package/dist/components/SeoDrawer/tabs/KeyphraseTab.js +8 -1
  74. package/dist/components/SeoDrawer/tabs/KeyphraseTab.js.map +1 -1
  75. package/dist/components/SeoDrawer/tabs/SerpTab.d.ts +1 -1
  76. package/dist/components/SeoDrawer/tabs/SerpTab.d.ts.map +1 -1
  77. package/dist/components/SeoDrawer/tabs/SerpTab.js +5 -1
  78. package/dist/components/SeoDrawer/tabs/SerpTab.js.map +1 -1
  79. package/dist/components/SeoDrawer/tabs/VitalsTab.d.ts.map +1 -1
  80. package/dist/components/SeoDrawer/tabs/VitalsTab.js +32 -9
  81. package/dist/components/SeoDrawer/tabs/VitalsTab.js.map +1 -1
  82. package/dist/components/SeoDrawer/useAnalysis.d.ts +1 -1
  83. package/dist/components/SeoDrawer/useAnalysis.d.ts.map +1 -1
  84. package/dist/components/SeoDrawer/useAnalysis.js +6 -1
  85. package/dist/components/SeoDrawer/useAnalysis.js.map +1 -1
  86. package/dist/components/SeoDrawer/useLiveDocument.d.ts +5 -3
  87. package/dist/components/SeoDrawer/useLiveDocument.d.ts.map +1 -1
  88. package/dist/components/SeoDrawer/useLiveDocument.js +82 -37
  89. package/dist/components/SeoDrawer/useLiveDocument.js.map +1 -1
  90. package/dist/components/icons.d.ts.map +1 -1
  91. package/dist/components/icons.js +16 -1
  92. package/dist/components/icons.js.map +1 -1
  93. package/dist/constants/checkIds.d.ts.map +1 -1
  94. package/dist/constants/checkIds.js +18 -2
  95. package/dist/constants/checkIds.js.map +1 -1
  96. package/dist/content/extract/context.d.ts +11 -0
  97. package/dist/content/extract/context.d.ts.map +1 -0
  98. package/dist/content/extract/context.js +1 -0
  99. package/dist/content/extract/context.js.map +1 -0
  100. package/dist/content/extract/extract.d.ts +18 -0
  101. package/dist/content/extract/extract.d.ts.map +1 -0
  102. package/dist/content/extract/extract.js +211 -0
  103. package/dist/content/extract/extract.js.map +1 -0
  104. package/dist/content/extract/selection.d.ts +3 -0
  105. package/dist/content/extract/selection.d.ts.map +1 -0
  106. package/dist/content/extract/selection.js +32 -0
  107. package/dist/content/extract/selection.js.map +1 -0
  108. package/dist/content/index.d.ts +5 -0
  109. package/dist/content/index.d.ts.map +1 -0
  110. package/dist/content/index.js +14 -0
  111. package/dist/content/index.js.map +1 -0
  112. package/dist/content/lexical/transform.d.ts +5 -0
  113. package/dist/content/lexical/transform.d.ts.map +1 -0
  114. package/dist/content/lexical/transform.js +56 -0
  115. package/dist/content/lexical/transform.js.map +1 -0
  116. package/dist/content/registry.d.ts +4 -0
  117. package/dist/content/registry.d.ts.map +1 -0
  118. package/dist/content/registry.js +22 -0
  119. package/dist/content/registry.js.map +1 -0
  120. package/dist/content/resolve/collect-refs.d.ts +8 -0
  121. package/dist/content/resolve/collect-refs.d.ts.map +1 -0
  122. package/dist/content/resolve/collect-refs.js +79 -0
  123. package/dist/content/resolve/collect-refs.js.map +1 -0
  124. package/dist/content/resolve/hydrate.d.ts +7 -0
  125. package/dist/content/resolve/hydrate.d.ts.map +1 -0
  126. package/dist/content/resolve/hydrate.js +123 -0
  127. package/dist/content/resolve/hydrate.js.map +1 -0
  128. package/dist/content/resolve/resolver.d.ts +7 -0
  129. package/dist/content/resolve/resolver.d.ts.map +1 -0
  130. package/dist/content/{uploads/media-resolver.js → resolve/resolver.js} +21 -16
  131. package/dist/content/resolve/resolver.js.map +1 -0
  132. package/dist/content/resolve/types.d.ts +12 -0
  133. package/dist/content/resolve/types.d.ts.map +1 -0
  134. package/dist/content/resolve/types.js +7 -0
  135. package/dist/content/resolve/types.js.map +1 -0
  136. package/dist/content/schema/helpers.d.ts +9 -0
  137. package/dist/content/schema/helpers.d.ts.map +1 -0
  138. package/dist/content/schema/helpers.js +60 -0
  139. package/dist/content/schema/helpers.js.map +1 -0
  140. package/dist/content/schema/nodes.d.ts +26 -0
  141. package/dist/content/schema/nodes.d.ts.map +1 -0
  142. package/dist/content/schema/nodes.js +8 -0
  143. package/dist/content/schema/nodes.js.map +1 -0
  144. package/dist/content/schema/serialize.d.ts +3 -0
  145. package/dist/content/schema/serialize.d.ts.map +1 -0
  146. package/dist/content/schema/serialize.js +31 -0
  147. package/dist/content/schema/serialize.js.map +1 -0
  148. package/dist/content/walk/walkFields.d.ts +17 -0
  149. package/dist/content/walk/walkFields.d.ts.map +1 -0
  150. package/dist/content/walk/walkFields.js +88 -0
  151. package/dist/content/walk/walkFields.js.map +1 -0
  152. package/dist/engine/assessorAdapter.d.ts.map +1 -1
  153. package/dist/engine/assessorAdapter.js.map +1 -1
  154. package/dist/engine/extractCheckData.d.ts.map +1 -1
  155. package/dist/engine/extractCheckData.js +19 -5
  156. package/dist/engine/extractCheckData.js.map +1 -1
  157. package/dist/engine/helpers/title-progress.d.ts +1 -1
  158. package/dist/engine/helpers/title-progress.js.map +1 -1
  159. package/dist/engine/inclusiveScore.d.ts.map +1 -1
  160. package/dist/engine/inclusiveScore.js.map +1 -1
  161. package/dist/engine/recommendations.d.ts.map +1 -1
  162. package/dist/engine/recommendations.js.map +1 -1
  163. package/dist/engine/runAnalysis/services/derive-inclusive.js.map +1 -1
  164. package/dist/engine/runAnalysis/services/derive-readability.d.ts.map +1 -1
  165. package/dist/engine/runAnalysis/services/derive-readability.js +5 -1
  166. package/dist/engine/runAnalysis/services/derive-readability.js.map +1 -1
  167. package/dist/engine/runAnalysis/services/derive-vitals/heading-tree.d.ts.map +1 -1
  168. package/dist/engine/runAnalysis/services/derive-vitals/heading-tree.js.map +1 -1
  169. package/dist/engine/runAnalysis/services/derive-vitals/index.d.ts.map +1 -1
  170. package/dist/engine/runAnalysis/services/derive-vitals/index.js +9 -1
  171. package/dist/engine/runAnalysis/services/derive-vitals/index.js.map +1 -1
  172. package/dist/engine/runAnalysis/services/derive-vitals/researches.d.ts +1 -1
  173. package/dist/engine/runAnalysis/services/derive-vitals/researches.d.ts.map +1 -1
  174. package/dist/engine/runAnalysis/services/derive-vitals/researches.js +8 -2
  175. package/dist/engine/runAnalysis/services/derive-vitals/researches.js.map +1 -1
  176. package/dist/engine/runAnalysis/utils/enrich.d.ts.map +1 -1
  177. package/dist/engine/runAnalysis/utils/enrich.js.map +1 -1
  178. package/dist/engine/visualization/resolveVisualization/constants.d.ts.map +1 -1
  179. package/dist/engine/visualization/resolveVisualization/constants.js +9 -1
  180. package/dist/engine/visualization/resolveVisualization/constants.js.map +1 -1
  181. package/dist/engine/visualization/resolveVisualization/index.d.ts.map +1 -1
  182. package/dist/engine/visualization/resolveVisualization/index.js.map +1 -1
  183. package/dist/engine/visualization/resolveVisualization/resolves/resolveDrilldown.d.ts.map +1 -1
  184. package/dist/engine/visualization/resolveVisualization/resolves/resolveDrilldown.js.map +1 -1
  185. package/dist/engine/visualization/resolveVisualization/resolves/resolveLinks.d.ts.map +1 -1
  186. package/dist/engine/visualization/resolveVisualization/resolves/resolveLinks.js.map +1 -1
  187. package/dist/engine/visualization/resolveVisualization/resolves/resolveProportionCount.d.ts.map +1 -1
  188. package/dist/engine/visualization/resolveVisualization/resolves/resolveProportionCount.js.map +1 -1
  189. package/dist/engine/visualization/resolveVisualization/resolves/resolveValueRange.d.ts.map +1 -1
  190. package/dist/engine/visualization/resolveVisualization/resolves/resolveValueRange.js.map +1 -1
  191. package/dist/engine/visualization/resolveVisualization/utils/pluralize.d.ts.map +1 -1
  192. package/dist/engine/visualization/resolveVisualization/utils/pluralize.js.map +1 -1
  193. package/dist/engine/visualization/resolveVisualization/utils/readDrilldownItems.d.ts.map +1 -1
  194. package/dist/engine/visualization/resolveVisualization/utils/readDrilldownItems.js.map +1 -1
  195. package/dist/engine/visualization/resolveVisualization/utils/readNumber.d.ts.map +1 -1
  196. package/dist/engine/visualization/resolveVisualization/utils/readNumber.js.map +1 -1
  197. package/dist/index.d.ts +1 -1
  198. package/dist/index.d.ts.map +1 -1
  199. package/dist/index.js.map +1 -1
  200. package/dist/plugin.d.ts.map +1 -1
  201. package/dist/plugin.js +7 -2
  202. package/dist/plugin.js.map +1 -1
  203. package/dist/types/config.d.ts +30 -7
  204. package/dist/types/config.d.ts.map +1 -1
  205. package/dist/ui/CheckRow/CheckVisualization/visualizations/DensityGauge.d.ts.map +1 -1
  206. package/dist/ui/CheckRow/CheckVisualization/visualizations/DensityGauge.js +24 -5
  207. package/dist/ui/CheckRow/CheckVisualization/visualizations/DensityGauge.js.map +1 -1
  208. package/dist/ui/CheckRow/CheckVisualization/visualizations/DistributionBar.d.ts.map +1 -1
  209. package/dist/ui/CheckRow/CheckVisualization/visualizations/DistributionBar.js +8 -1
  210. package/dist/ui/CheckRow/CheckVisualization/visualizations/DistributionBar.js.map +1 -1
  211. package/dist/ui/CheckRow/CheckVisualization/visualizations/DrillDown.d.ts.map +1 -1
  212. package/dist/ui/CheckRow/CheckVisualization/visualizations/DrillDown.js +11 -4
  213. package/dist/ui/CheckRow/CheckVisualization/visualizations/DrillDown.js.map +1 -1
  214. package/dist/ui/CheckRow/CheckVisualization/visualizations/SegmentBar.d.ts.map +1 -1
  215. package/dist/ui/CheckRow/CheckVisualization/visualizations/SegmentBar.js +7 -1
  216. package/dist/ui/CheckRow/CheckVisualization/visualizations/SegmentBar.js.map +1 -1
  217. package/dist/ui/CheckRow/index.d.ts.map +1 -1
  218. package/dist/ui/CheckRow/index.js +23 -9
  219. package/dist/ui/CheckRow/index.js.map +1 -1
  220. package/dist/ui/FilterPills.d.ts.map +1 -1
  221. package/dist/ui/FilterPills.js +78 -19
  222. package/dist/ui/FilterPills.js.map +1 -1
  223. package/dist/ui/KpiCard.d.ts.map +1 -1
  224. package/dist/ui/KpiCard.js.map +1 -1
  225. package/dist/ui/Pill.d.ts.map +1 -1
  226. package/dist/ui/Pill.js +11 -8
  227. package/dist/ui/Pill.js.map +1 -1
  228. package/dist/ui/ScoreRing.d.ts.map +1 -1
  229. package/dist/ui/ScoreRing.js +12 -2
  230. package/dist/ui/ScoreRing.js.map +1 -1
  231. package/dist/ui/SectionWrapper.d.ts.map +1 -1
  232. package/dist/ui/SectionWrapper.js.map +1 -1
  233. package/dist/ui/SegmentedControl.d.ts +1 -1
  234. package/dist/ui/SegmentedControl.d.ts.map +1 -1
  235. package/dist/ui/SegmentedControl.js +49 -33
  236. package/dist/ui/SegmentedControl.js.map +1 -1
  237. package/dist/ui/Tooltip.d.ts +1 -1
  238. package/dist/ui/Tooltip.d.ts.map +1 -1
  239. package/dist/ui/Tooltip.js +8 -1
  240. package/dist/ui/Tooltip.js.map +1 -1
  241. package/dist/utils/config/overrideAdmin.d.ts.map +1 -1
  242. package/dist/utils/config/overrideAdmin.js +9 -1
  243. package/dist/utils/config/overrideAdmin.js.map +1 -1
  244. package/dist/utils/style.d.ts.map +1 -1
  245. package/dist/utils/style.js.map +1 -1
  246. package/package.json +9 -7
  247. package/dist/content/extractContent.d.ts +0 -3
  248. package/dist/content/extractContent.d.ts.map +0 -1
  249. package/dist/content/extractContent.js +0 -31
  250. package/dist/content/extractContent.js.map +0 -1
  251. package/dist/content/uploads/collect-upload-refs.d.ts +0 -5
  252. package/dist/content/uploads/collect-upload-refs.d.ts.map +0 -1
  253. package/dist/content/uploads/collect-upload-refs.js +0 -19
  254. package/dist/content/uploads/collect-upload-refs.js.map +0 -1
  255. package/dist/content/uploads/hydrate-values.d.ts +0 -5
  256. package/dist/content/uploads/hydrate-values.d.ts.map +0 -1
  257. package/dist/content/uploads/hydrate-values.js +0 -15
  258. package/dist/content/uploads/hydrate-values.js.map +0 -1
  259. package/dist/content/uploads/media-resolver.d.ts +0 -7
  260. package/dist/content/uploads/media-resolver.d.ts.map +0 -1
  261. package/dist/content/uploads/media-resolver.js.map +0 -1
  262. package/dist/content/uploads/transform-lexical-uploads.d.ts +0 -5
  263. package/dist/content/uploads/transform-lexical-uploads.d.ts.map +0 -1
  264. package/dist/content/uploads/transform-lexical-uploads.js +0 -34
  265. package/dist/content/uploads/transform-lexical-uploads.js.map +0 -1
  266. package/dist/content/uploads/transform-upload-values.d.ts +0 -10
  267. package/dist/content/uploads/transform-upload-values.d.ts.map +0 -1
  268. package/dist/content/uploads/transform-upload-values.js +0 -108
  269. package/dist/content/uploads/transform-upload-values.js.map +0 -1
  270. package/dist/content/uploads/types.d.ts +0 -8
  271. package/dist/content/uploads/types.d.ts.map +0 -1
  272. package/dist/content/uploads/types.js +0 -7
  273. package/dist/content/uploads/types.js.map +0 -1
  274. package/dist/content/walkValue.d.ts +0 -14
  275. package/dist/content/walkValue.d.ts.map +0 -1
  276. package/dist/content/walkValue.js +0 -62
  277. package/dist/content/walkValue.js.map +0 -1
@@ -9,14 +9,17 @@ import { isKeyphrasePending } from "../SeoDrawer/keyphrasePending";
9
9
  import { useAnalysis } from "../SeoDrawer/useAnalysis";
10
10
  import { useLiveDocument } from "../SeoDrawer/useLiveDocument";
11
11
  const DRAWER_SLUG = "seo-analytics-drawer";
12
- function SeoButtonInner({ collectionSlug, fields, site, supportedLocales }) {
12
+ function SeoButtonInner({ collectionSlug, fields, site, supportedLocales, extractContentPath, resolveDepth, slugPaths }) {
13
13
  const { openModal } = useModal();
14
14
  const [keyphrase, setKeyphrase] = useState("");
15
15
  const { signature, getInput, invalidateMedia } = useLiveDocument({
16
16
  collectionSlug,
17
17
  fields,
18
18
  site: { name: site.name, baseUrl: site.baseUrl },
19
- keyphrase
19
+ keyphrase,
20
+ extractContentPath,
21
+ resolveDepth,
22
+ slugPaths
20
23
  });
21
24
  const { result, analyzing, analyzedKeyphrase, analyzeNow } = useAnalysis({
22
25
  getInput,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/SeoButton/SeoButtonInner.tsx"],"sourcesContent":["\"use client\";\n\nimport { Button, useModal } from \"@payloadcms/ui\";\nimport { Gauge } from \"lucide-react\";\nimport { useCallback, useState } from \"react\";\nimport { ScoreBadge } from \"./ScoreBadge\";\nimport { SeoDrawer } from \"../SeoDrawer\";\nimport { isKeyphrasePending } from \"../SeoDrawer/keyphrasePending\";\nimport { useAnalysis } from \"../SeoDrawer/useAnalysis\";\nimport { useLiveDocument } from \"../SeoDrawer/useLiveDocument\";\n\nexport interface SeoButtonProps {\n collectionSlug: string;\n fields: Record<string, string>;\n extractContentPath: string | null;\n site: { name: string; baseUrl: string; faviconUrl: string };\n supportedLocales: string[];\n}\n\nconst DRAWER_SLUG = \"seo-analytics-drawer\";\n\nexport function SeoButtonInner({ collectionSlug, fields, site, supportedLocales }: SeoButtonProps) {\n const { openModal } = useModal();\n const [keyphrase, setKeyphrase] = useState(\"\");\n\n const { signature, getInput, invalidateMedia } = useLiveDocument({\n collectionSlug,\n fields,\n site: { name: site.name, baseUrl: site.baseUrl },\n keyphrase,\n });\n const { result, analyzing, analyzedKeyphrase, analyzeNow } = useAnalysis({\n getInput,\n signature,\n supportedLocales,\n });\n\n const keyphrasePending = isKeyphrasePending(keyphrase, analyzedKeyphrase);\n const overall = result?.overall ?? null;\n\n const open = useCallback(() => {\n invalidateMedia();\n analyzeNow();\n openModal(DRAWER_SLUG);\n }, [analyzeNow, invalidateMedia, openModal]);\n\n return (\n <span className=\"relative inline-flex\">\n <Button\n aria-label=\"SEO Analytics\"\n buttonStyle=\"none\"\n className=\"seo-doc-btn m-0 w-[calc(var(--base)*1.6)] h-[calc(var(--base)*1.6)] inline-flex items-center justify-center border border-[var(--theme-elevation-100)] rounded-rs bg-transparent text-neutral-800 transition-[border-color,background-color] duration-100 hover:border-neutral-300 hover:bg-neutral-100\"\n extraButtonProps={{ title: undefined }}\n icon={<Gauge />}\n iconStyle=\"without-border\"\n margin={false}\n onClick={open}\n size=\"small\"\n tooltip=\"SEO Analytics\"\n />\n {overall && <ScoreBadge score={overall.seoScore} status={overall.status} />}\n\n <SeoDrawer\n analyzeNow={analyzeNow}\n analyzing={analyzing}\n drawerSlug={DRAWER_SLUG}\n keyphrase={keyphrase}\n keyphrasePending={keyphrasePending}\n result={result}\n setKeyphrase={setKeyphrase}\n site={site}\n />\n </span>\n );\n}\n"],"mappings":";AA+CI,SAMU,KANV;AA7CJ,SAAS,QAAQ,gBAAgB;AACjC,SAAS,aAAa;AACtB,SAAS,aAAa,gBAAgB;AACtC,SAAS,kBAAkB;AAC3B,SAAS,iBAAiB;AAC1B,SAAS,0BAA0B;AACnC,SAAS,mBAAmB;AAC5B,SAAS,uBAAuB;AAUhC,MAAM,cAAc;AAEb,SAAS,eAAe,EAAE,gBAAgB,QAAQ,MAAM,iBAAiB,GAAmB;AACjG,QAAM,EAAE,UAAU,IAAI,SAAS;AAC/B,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,EAAE;AAE7C,QAAM,EAAE,WAAW,UAAU,gBAAgB,IAAI,gBAAgB;AAAA,IAC/D;AAAA,IACA;AAAA,IACA,MAAM,EAAE,MAAM,KAAK,MAAM,SAAS,KAAK,QAAQ;AAAA,IAC/C;AAAA,EACF,CAAC;AACD,QAAM,EAAE,QAAQ,WAAW,mBAAmB,WAAW,IAAI,YAAY;AAAA,IACvE;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,QAAM,mBAAmB,mBAAmB,WAAW,iBAAiB;AACxE,QAAM,UAAU,QAAQ,WAAW;AAEnC,QAAM,OAAO,YAAY,MAAM;AAC7B,oBAAgB;AAChB,eAAW;AACX,cAAU,WAAW;AAAA,EACvB,GAAG,CAAC,YAAY,iBAAiB,SAAS,CAAC;AAE3C,SACE,qBAAC,UAAK,WAAU,wBACd;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,cAAW;AAAA,QACX,aAAY;AAAA,QACZ,WAAU;AAAA,QACV,kBAAkB,EAAE,OAAO,OAAU;AAAA,QACrC,MAAM,oBAAC,SAAM;AAAA,QACb,WAAU;AAAA,QACV,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,MAAK;AAAA,QACL,SAAQ;AAAA;AAAA,IACV;AAAA,IACC,WAAW,oBAAC,cAAW,OAAO,QAAQ,UAAU,QAAQ,QAAQ,QAAQ;AAAA,IAEzE;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA,YAAY;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA;AAAA,IACF;AAAA,KACF;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../src/components/SeoButton/SeoButtonInner.tsx"],"sourcesContent":["\"use client\";\n\nimport { Button, useModal } from \"@payloadcms/ui\";\nimport { Gauge } from \"lucide-react\";\nimport { useCallback, useState } from \"react\";\nimport { ScoreBadge } from \"./ScoreBadge\";\nimport { SeoDrawer } from \"../SeoDrawer\";\nimport { isKeyphrasePending } from \"../SeoDrawer/keyphrasePending\";\nimport { useAnalysis } from \"../SeoDrawer/useAnalysis\";\nimport { useLiveDocument } from \"../SeoDrawer/useLiveDocument\";\n\nexport interface SeoButtonProps {\n collectionSlug: string;\n fields: Record<string, string>;\n extractContentPath: string | null;\n site: { name: string; baseUrl: string; faviconUrl: string };\n supportedLocales: string[];\n resolveDepth: number;\n slugPaths: Record<string, string>;\n}\n\nconst DRAWER_SLUG = \"seo-analytics-drawer\";\n\nexport function SeoButtonInner({ collectionSlug, fields, site, supportedLocales, extractContentPath, resolveDepth, slugPaths }: SeoButtonProps) {\n const { openModal } = useModal();\n const [keyphrase, setKeyphrase] = useState(\"\");\n\n const { signature, getInput, invalidateMedia } = useLiveDocument({\n collectionSlug,\n fields,\n site: { name: site.name, baseUrl: site.baseUrl },\n keyphrase,\n extractContentPath,\n resolveDepth,\n slugPaths,\n });\n const { result, analyzing, analyzedKeyphrase, analyzeNow } = useAnalysis({\n getInput,\n signature,\n supportedLocales,\n });\n\n const keyphrasePending = isKeyphrasePending(keyphrase, analyzedKeyphrase);\n const overall = result?.overall ?? null;\n\n const open = useCallback(() => {\n invalidateMedia();\n analyzeNow();\n openModal(DRAWER_SLUG);\n }, [analyzeNow, invalidateMedia, openModal]);\n\n return (\n <span className=\"relative inline-flex\">\n <Button\n aria-label=\"SEO Analytics\"\n buttonStyle=\"none\"\n className=\"seo-doc-btn m-0 w-[calc(var(--base)*1.6)] h-[calc(var(--base)*1.6)] inline-flex items-center justify-center border border-[var(--theme-elevation-100)] rounded-rs bg-transparent text-neutral-800 transition-[border-color,background-color] duration-100 hover:border-neutral-300 hover:bg-neutral-100\"\n extraButtonProps={{ title: undefined }}\n icon={<Gauge />}\n iconStyle=\"without-border\"\n margin={false}\n onClick={open}\n size=\"small\"\n tooltip=\"SEO Analytics\"\n />\n {overall && <ScoreBadge score={overall.seoScore} status={overall.status} />}\n\n <SeoDrawer\n analyzeNow={analyzeNow}\n analyzing={analyzing}\n drawerSlug={DRAWER_SLUG}\n keyphrase={keyphrase}\n keyphrasePending={keyphrasePending}\n result={result}\n setKeyphrase={setKeyphrase}\n site={site}\n />\n </span>\n );\n}\n"],"mappings":";AAoDI,SAMU,KANV;AAlDJ,SAAS,QAAQ,gBAAgB;AACjC,SAAS,aAAa;AACtB,SAAS,aAAa,gBAAgB;AACtC,SAAS,kBAAkB;AAC3B,SAAS,iBAAiB;AAC1B,SAAS,0BAA0B;AACnC,SAAS,mBAAmB;AAC5B,SAAS,uBAAuB;AAYhC,MAAM,cAAc;AAEb,SAAS,eAAe,EAAE,gBAAgB,QAAQ,MAAM,kBAAkB,oBAAoB,cAAc,UAAU,GAAmB;AAC9I,QAAM,EAAE,UAAU,IAAI,SAAS;AAC/B,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,EAAE;AAE7C,QAAM,EAAE,WAAW,UAAU,gBAAgB,IAAI,gBAAgB;AAAA,IAC/D;AAAA,IACA;AAAA,IACA,MAAM,EAAE,MAAM,KAAK,MAAM,SAAS,KAAK,QAAQ;AAAA,IAC/C;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACD,QAAM,EAAE,QAAQ,WAAW,mBAAmB,WAAW,IAAI,YAAY;AAAA,IACvE;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,QAAM,mBAAmB,mBAAmB,WAAW,iBAAiB;AACxE,QAAM,UAAU,QAAQ,WAAW;AAEnC,QAAM,OAAO,YAAY,MAAM;AAC7B,oBAAgB;AAChB,eAAW;AACX,cAAU,WAAW;AAAA,EACvB,GAAG,CAAC,YAAY,iBAAiB,SAAS,CAAC;AAE3C,SACE,qBAAC,UAAK,WAAU,wBACd;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,cAAW;AAAA,QACX,aAAY;AAAA,QACZ,WAAU;AAAA,QACV,kBAAkB,EAAE,OAAO,OAAU;AAAA,QACrC,MAAM,oBAAC,SAAM;AAAA,QACb,WAAU;AAAA,QACV,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,MAAK;AAAA,QACL,SAAQ;AAAA;AAAA,IACV;AAAA,IACC,WAAW,oBAAC,cAAW,OAAO,QAAQ,UAAU,QAAQ,QAAQ,QAAQ;AAAA,IAEzE;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA,YAAY;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA;AAAA,IACF;AAAA,KACF;AAEJ;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/SeoDrawer/TabsNav/index.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAGtC,YAAY,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEtC,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAClC;AAED,wBAAgB,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,YAAY,2CAWzD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/SeoDrawer/TabsNav/index.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAGtC,YAAY,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEtC,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAClC;AAED,wBAAgB,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,YAAY,2CAkBzD"}
@@ -3,10 +3,21 @@ import { jsx, jsxs } from "react/jsx-runtime";
3
3
  import { TABS } from "./constants";
4
4
  import { tabVariants } from "./variants";
5
5
  function TabsNav({ active, onChange }) {
6
- return /* @__PURE__ */ jsx("nav", { role: "tablist", className: "flex gap-[20px] border-b border-neutral-200 overflow-x-auto", children: TABS.map(({ key, label, icon: Icon }) => /* @__PURE__ */ jsxs("button", { type: "button", role: "tab", "aria-selected": active === key, className: tabVariants({ active: active === key }), onClick: () => onChange(key), children: [
7
- /* @__PURE__ */ jsx(Icon, { size: 14, "aria-hidden": "true" }),
8
- /* @__PURE__ */ jsx("span", { children: label })
9
- ] }, key)) });
6
+ return /* @__PURE__ */ jsx("nav", { role: "tablist", className: "flex gap-[20px] border-b border-neutral-200 overflow-x-auto", children: TABS.map(({ key, label, icon: Icon }) => /* @__PURE__ */ jsxs(
7
+ "button",
8
+ {
9
+ type: "button",
10
+ role: "tab",
11
+ "aria-selected": active === key,
12
+ className: tabVariants({ active: active === key }),
13
+ onClick: () => onChange(key),
14
+ children: [
15
+ /* @__PURE__ */ jsx(Icon, { size: 14, "aria-hidden": "true" }),
16
+ /* @__PURE__ */ jsx("span", { children: label })
17
+ ]
18
+ },
19
+ key
20
+ )) });
10
21
  }
11
22
  export {
12
23
  TabsNav
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/SeoDrawer/TabsNav/index.tsx"],"sourcesContent":["\"use client\";\n\nimport { TABS } from \"./constants\";\nimport type { TabKey } from \"./types\";\nimport { tabVariants } from \"./variants\";\n\nexport type { TabKey } from \"./types\";\n\nexport interface TabsNavProps {\n active: TabKey;\n onChange: (next: TabKey) => void;\n}\n\nexport function TabsNav({ active, onChange }: TabsNavProps) {\n return (\n <nav role=\"tablist\" className=\"flex gap-[20px] border-b border-neutral-200 overflow-x-auto\">\n {TABS.map(({ key, label, icon: Icon }) => (\n <button key={key} type=\"button\" role=\"tab\" aria-selected={active === key} className={tabVariants({ active: active === key })} onClick={() => onChange(key)}>\n <Icon size={14} aria-hidden=\"true\" />\n <span>{label}</span>\n </button>\n ))}\n </nav>\n );\n}\n"],"mappings":";AAiBQ,SACE,KADF;AAfR,SAAS,YAAY;AAErB,SAAS,mBAAmB;AASrB,SAAS,QAAQ,EAAE,QAAQ,SAAS,GAAiB;AAC1D,SACE,oBAAC,SAAI,MAAK,WAAU,WAAU,+DAC3B,eAAK,IAAI,CAAC,EAAE,KAAK,OAAO,MAAM,KAAK,MAClC,qBAAC,YAAiB,MAAK,UAAS,MAAK,OAAM,iBAAe,WAAW,KAAK,WAAW,YAAY,EAAE,QAAQ,WAAW,IAAI,CAAC,GAAG,SAAS,MAAM,SAAS,GAAG,GACvJ;AAAA,wBAAC,QAAK,MAAM,IAAI,eAAY,QAAO;AAAA,IACnC,oBAAC,UAAM,iBAAM;AAAA,OAFF,GAGb,CACD,GACH;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../../src/components/SeoDrawer/TabsNav/index.tsx"],"sourcesContent":["\"use client\";\n\nimport { TABS } from \"./constants\";\nimport type { TabKey } from \"./types\";\nimport { tabVariants } from \"./variants\";\n\nexport type { TabKey } from \"./types\";\n\nexport interface TabsNavProps {\n active: TabKey;\n onChange: (next: TabKey) => void;\n}\n\nexport function TabsNav({ active, onChange }: TabsNavProps) {\n return (\n <nav role=\"tablist\" className=\"flex gap-[20px] border-b border-neutral-200 overflow-x-auto\">\n {TABS.map(({ key, label, icon: Icon }) => (\n <button\n key={key}\n type=\"button\"\n role=\"tab\"\n aria-selected={active === key}\n className={tabVariants({ active: active === key })}\n onClick={() => onChange(key)}\n >\n <Icon size={14} aria-hidden=\"true\" />\n <span>{label}</span>\n </button>\n ))}\n </nav>\n );\n}\n"],"mappings":";AAiBQ,SAQE,KARF;AAfR,SAAS,YAAY;AAErB,SAAS,mBAAmB;AASrB,SAAS,QAAQ,EAAE,QAAQ,SAAS,GAAiB;AAC1D,SACE,oBAAC,SAAI,MAAK,WAAU,WAAU,+DAC3B,eAAK,IAAI,CAAC,EAAE,KAAK,OAAO,MAAM,KAAK,MAClC;AAAA,IAAC;AAAA;AAAA,MAEC,MAAK;AAAA,MACL,MAAK;AAAA,MACL,iBAAe,WAAW;AAAA,MAC1B,WAAW,YAAY,EAAE,QAAQ,WAAW,IAAI,CAAC;AAAA,MACjD,SAAS,MAAM,SAAS,GAAG;AAAA,MAE3B;AAAA,4BAAC,QAAK,MAAM,IAAI,eAAY,QAAO;AAAA,QACnC,oBAAC,UAAM,iBAAM;AAAA;AAAA;AAAA,IARR;AAAA,EASP,CACD,GACH;AAEJ;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"variants.d.ts","sourceRoot":"","sources":["../../../../src/components/SeoDrawer/TabsNav/variants.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,WAAW;;8EAQtB,CAAC"}
1
+ {"version":3,"file":"variants.d.ts","sourceRoot":"","sources":["../../../../src/components/SeoDrawer/TabsNav/variants.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,WAAW;;8EAWvB,CAAC"}
@@ -1,13 +1,16 @@
1
1
  import { cva } from "class-variance-authority";
2
- const tabVariants = cva("inline-flex items-center gap-[6px] py-[11px] bg-transparent whitespace-nowrap text-[12.5px] cursor-pointer", {
3
- variants: {
4
- active: {
5
- true: "text-neutral-1000 font-medium",
6
- false: "text-neutral-500 hover:text-neutral-800"
7
- }
8
- },
9
- defaultVariants: { active: false }
10
- });
2
+ const tabVariants = cva(
3
+ "inline-flex items-center gap-[6px] py-[11px] bg-transparent whitespace-nowrap text-[12.5px] cursor-pointer",
4
+ {
5
+ variants: {
6
+ active: {
7
+ true: "text-neutral-1000 font-medium",
8
+ false: "text-neutral-500 hover:text-neutral-800"
9
+ }
10
+ },
11
+ defaultVariants: { active: false }
12
+ }
13
+ );
11
14
  export {
12
15
  tabVariants
13
16
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/SeoDrawer/TabsNav/variants.ts"],"sourcesContent":["import { cva } from \"class-variance-authority\";\n\nexport const tabVariants = cva(\"inline-flex items-center gap-[6px] py-[11px] bg-transparent whitespace-nowrap text-[12.5px] cursor-pointer\", {\n variants: {\n active: {\n true: \"text-neutral-1000 font-medium\",\n false: \"text-neutral-500 hover:text-neutral-800\",\n },\n },\n defaultVariants: { active: false },\n});\n"],"mappings":"AAAA,SAAS,WAAW;AAEb,MAAM,cAAc,IAAI,8GAA8G;AAAA,EAC3I,UAAU;AAAA,IACR,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,OAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA,iBAAiB,EAAE,QAAQ,MAAM;AACnC,CAAC;","names":[]}
1
+ {"version":3,"sources":["../../../../src/components/SeoDrawer/TabsNav/variants.ts"],"sourcesContent":["import { cva } from \"class-variance-authority\";\n\nexport const tabVariants = cva(\n \"inline-flex items-center gap-[6px] py-[11px] bg-transparent whitespace-nowrap text-[12.5px] cursor-pointer\",\n {\n variants: {\n active: {\n true: \"text-neutral-1000 font-medium\",\n false: \"text-neutral-500 hover:text-neutral-800\",\n },\n },\n defaultVariants: { active: false },\n }\n);\n"],"mappings":"AAAA,SAAS,WAAW;AAEb,MAAM,cAAc;AAAA,EACzB;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,QAAQ;AAAA,QACN,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA,iBAAiB,EAAE,QAAQ,MAAM;AAAA,EACnC;AACF;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"analysisDecision.d.ts","sourceRoot":"","sources":["../../../src/components/SeoDrawer/analysisDecision.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,KAAK,CAAC;AAExC,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,UAAU,CAMxH"}
1
+ {"version":3,"file":"analysisDecision.d.ts","sourceRoot":"","sources":["../../../src/components/SeoDrawer/analysisDecision.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,KAAK,CAAC;AAExC,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B,GAAG,UAAU,CAMb"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/SeoDrawer/analysisDecision.ts"],"sourcesContent":["export type AutoAction = \"skip\" | \"run\";\n\nexport function decideAutoAction(args: { enabled: boolean; signature: string; lastSignature: string | null }): AutoAction {\n const { enabled, signature, lastSignature } = args;\n\n if (!enabled) return \"skip\";\n if (signature === lastSignature) return \"skip\";\n return \"run\";\n}\n"],"mappings":"AAEO,SAAS,iBAAiB,MAAyF;AACxH,QAAM,EAAE,SAAS,WAAW,cAAc,IAAI;AAE9C,MAAI,CAAC;AAAS,WAAO;AACrB,MAAI,cAAc;AAAe,WAAO;AACxC,SAAO;AACT;","names":[]}
1
+ {"version":3,"sources":["../../../src/components/SeoDrawer/analysisDecision.ts"],"sourcesContent":["export type AutoAction = \"skip\" | \"run\";\n\nexport function decideAutoAction(args: {\n enabled: boolean;\n signature: string;\n lastSignature: string | null;\n}): AutoAction {\n const { enabled, signature, lastSignature } = args;\n\n if (!enabled) return \"skip\";\n if (signature === lastSignature) return \"skip\";\n return \"run\";\n}\n"],"mappings":"AAEO,SAAS,iBAAiB,MAIlB;AACb,QAAM,EAAE,SAAS,WAAW,cAAc,IAAI;AAE9C,MAAI,CAAC;AAAS,WAAO;AACrB,MAAI,cAAc;AAAe,WAAO;AACxC,SAAO;AACT;","names":[]}
@@ -1,24 +1,26 @@
1
1
  import type { ClientField } from "payload";
2
- import type { MediaResolver } from "../../content/uploads/media-resolver";
3
- import type { UploadWalkContext } from "../../content/uploads/transform-upload-values";
2
+ import type { ExtractContext } from "../../content/extract/context";
3
+ import type { DocResolver } from "../../content/resolve/resolver";
4
4
  import type { AnalysisInput } from "../../engine/types/analysis";
5
- import type { ExtractorFn, SeoFieldPaths } from "../../types/config";
5
+ import type { ContentExtractor, SeoFieldPaths } from "../../types/config";
6
6
  export interface BuildAnalysisInputArgs {
7
7
  values: Record<string, unknown>;
8
8
  locale: string | {
9
9
  code?: string;
10
10
  } | null | undefined;
11
11
  payloadLocale: string | undefined;
12
+ apiRoute?: string;
12
13
  keyphrase: string;
13
14
  fields: SeoFieldPaths;
14
15
  site: {
15
16
  name: string;
16
17
  baseUrl: string;
17
18
  };
18
- schemaFields: ClientField[];
19
- walkCtx: UploadWalkContext;
20
- resolver: MediaResolver;
21
- override?: ExtractorFn;
19
+ hostFields: ClientField[];
20
+ ctx: ExtractContext;
21
+ resolver: DocResolver;
22
+ resolveDepth: number;
23
+ override?: ContentExtractor;
22
24
  }
23
25
  export declare function buildAnalysisInput(args: BuildAnalysisInputArgs): Promise<AnalysisInput>;
24
26
  //# sourceMappingURL=build-analysis-input.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"build-analysis-input.d.ts","sourceRoot":"","sources":["../../../src/components/SeoDrawer/build-analysis-input.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAI3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AACvF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGrE,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,MAAM,EAAE,MAAM,GAAG;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,GAAG,SAAS,CAAC;IACtD,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,aAAa,CAAC;IACtB,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IACxC,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,OAAO,EAAE,iBAAiB,CAAC;IAC3B,QAAQ,EAAE,aAAa,CAAC;IACxB,QAAQ,CAAC,EAAE,WAAW,CAAC;CACxB;AAYD,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,sBAAsB,GAAG,OAAO,CAAC,aAAa,CAAC,CAW7F"}
1
+ {"version":3,"file":"build-analysis-input.d.ts","sourceRoot":"","sources":["../../../src/components/SeoDrawer/build-analysis-input.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAI3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAGpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAGlE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,KAAK,EAAE,gBAAgB,EAAoB,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAG5F,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,MAAM,EAAE,MAAM,GAAG;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,GAAG,SAAS,CAAC;IACtD,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,aAAa,CAAC;IACtB,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IACxC,UAAU,EAAE,WAAW,EAAE,CAAC;IAC1B,GAAG,EAAE,cAAc,CAAC;IACpB,QAAQ,EAAE,WAAW,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,gBAAgB,CAAC;CAC7B;AAgBD,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,sBAAsB,GAAG,OAAO,CAAC,aAAa,CAAC,CAY7F"}
@@ -1,17 +1,23 @@
1
- import { extractContent } from "../../content/extractContent";
2
- import { collectUploadRefs } from "../../content/uploads/collect-upload-refs";
3
- import { hydrateUploadValues } from "../../content/uploads/hydrate-values";
1
+ import { serialize } from "../../content/schema/serialize";
2
+ import { extractContent } from "../../content/extract/extract";
3
+ import { collectRefs } from "../../content/resolve/collect-refs";
4
+ import { hydrate } from "../../content/resolve/hydrate";
5
+ import { makeExcluded, makeIncluded } from "../../content/extract/selection";
4
6
  import { buildInput } from "./buildInput";
5
- async function extractWithUploads(args) {
6
- const refs = collectUploadRefs(args.values, args.schemaFields, args.walkCtx);
7
- if (refs.length === 0)
8
- return extractContent(args.values, args.fields);
9
- const resolved = await args.resolver.resolve(refs, args.payloadLocale);
10
- const hydrated = hydrateUploadValues(args.values, args.schemaFields, args.walkCtx, resolved);
11
- return extractContent(hydrated, args.fields);
7
+ function normalizeSelection(content) {
8
+ if (content == null)
9
+ return { include: [], exclude: [] };
10
+ if (typeof content === "string")
11
+ return { include: [content], exclude: [] };
12
+ const sel = content;
13
+ return { include: sel.include ?? [], exclude: sel.exclude ?? [] };
14
+ }
15
+ function metadataPaths(fields) {
16
+ return [fields.seoTitle, fields.metaDescription, fields.slug ?? "slug"].filter((p) => p !== void 0);
12
17
  }
13
18
  async function buildAnalysisInput(args) {
14
- const contentHtml = args.override ? await args.override(args.values) : await extractWithUploads(args);
19
+ const ir = await extractIntermediateRepresentation(args);
20
+ const contentHtml = serialize(ir);
15
21
  return buildInput({
16
22
  values: args.values,
17
23
  contentHtml,
@@ -21,6 +27,28 @@ async function buildAnalysisInput(args) {
21
27
  site: args.site
22
28
  });
23
29
  }
30
+ async function extractIntermediateRepresentation(args) {
31
+ const selection = normalizeSelection(args.fields.content);
32
+ const meta = metadataPaths(args.fields);
33
+ if (args.fields.content == null)
34
+ return [];
35
+ const excluded = makeExcluded(meta, selection.exclude);
36
+ const included = makeIncluded(selection.include);
37
+ const prune = (path) => excluded(path) || !included(path);
38
+ const refs = args.resolveDepth >= 1 ? collectRefs(args.values, args.hostFields, args.ctx, prune) : [];
39
+ const resolved = refs.length > 0 ? await args.resolver.resolve(refs, args.payloadLocale, args.resolveDepth - 1) : /* @__PURE__ */ new Map();
40
+ const ctx = { ...args.ctx, resolved };
41
+ if (args.override)
42
+ return await args.override(hydrate(args.values, args.hostFields, ctx, resolved), { locale: args.payloadLocale, apiRoute: args.apiRoute });
43
+ return extractContent({
44
+ values: args.values,
45
+ fields: args.hostFields,
46
+ ctx,
47
+ selection,
48
+ metadataPaths: meta,
49
+ depth: args.resolveDepth
50
+ });
51
+ }
24
52
  export {
25
53
  buildAnalysisInput
26
54
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/SeoDrawer/build-analysis-input.ts"],"sourcesContent":["import type { ClientField } from \"payload\";\nimport { extractContent } from \"../../content/extractContent\";\nimport { collectUploadRefs } from \"../../content/uploads/collect-upload-refs\";\nimport { hydrateUploadValues } from \"../../content/uploads/hydrate-values\";\nimport type { MediaResolver } from \"../../content/uploads/media-resolver\";\nimport type { UploadWalkContext } from \"../../content/uploads/transform-upload-values\";\nimport type { AnalysisInput } from \"../../engine/types/analysis\";\nimport type { ExtractorFn, SeoFieldPaths } from \"../../types/config\";\nimport { buildInput } from \"./buildInput\";\n\nexport interface BuildAnalysisInputArgs {\n values: Record<string, unknown>;\n locale: string | { code?: string } | null | undefined;\n payloadLocale: string | undefined;\n keyphrase: string;\n fields: SeoFieldPaths;\n site: { name: string; baseUrl: string };\n schemaFields: ClientField[];\n walkCtx: UploadWalkContext;\n resolver: MediaResolver;\n override?: ExtractorFn;\n}\n\nasync function extractWithUploads(args: BuildAnalysisInputArgs): Promise<string> {\n const refs = collectUploadRefs(args.values, args.schemaFields, args.walkCtx);\n if (refs.length === 0) return extractContent(args.values, args.fields);\n\n const resolved = await args.resolver.resolve(refs, args.payloadLocale);\n const hydrated = hydrateUploadValues(args.values, args.schemaFields, args.walkCtx, resolved);\n\n return extractContent(hydrated, args.fields);\n}\n\nexport async function buildAnalysisInput(args: BuildAnalysisInputArgs): Promise<AnalysisInput> {\n const contentHtml = args.override ? await args.override(args.values) : await extractWithUploads(args);\n\n return buildInput({\n values: args.values,\n contentHtml,\n locale: args.locale,\n keyphrase: args.keyphrase,\n fields: args.fields,\n site: args.site,\n });\n}\n"],"mappings":"AACA,SAAS,sBAAsB;AAC/B,SAAS,yBAAyB;AAClC,SAAS,2BAA2B;AAKpC,SAAS,kBAAkB;AAe3B,eAAe,mBAAmB,MAA+C;AAC/E,QAAM,OAAO,kBAAkB,KAAK,QAAQ,KAAK,cAAc,KAAK,OAAO;AAC3E,MAAI,KAAK,WAAW;AAAG,WAAO,eAAe,KAAK,QAAQ,KAAK,MAAM;AAErE,QAAM,WAAW,MAAM,KAAK,SAAS,QAAQ,MAAM,KAAK,aAAa;AACrE,QAAM,WAAW,oBAAoB,KAAK,QAAQ,KAAK,cAAc,KAAK,SAAS,QAAQ;AAE3F,SAAO,eAAe,UAAU,KAAK,MAAM;AAC7C;AAEA,eAAsB,mBAAmB,MAAsD;AAC7F,QAAM,cAAc,KAAK,WAAW,MAAM,KAAK,SAAS,KAAK,MAAM,IAAI,MAAM,mBAAmB,IAAI;AAEpG,SAAO,WAAW;AAAA,IAChB,QAAQ,KAAK;AAAA,IACb;AAAA,IACA,QAAQ,KAAK;AAAA,IACb,WAAW,KAAK;AAAA,IAChB,QAAQ,KAAK;AAAA,IACb,MAAM,KAAK;AAAA,EACb,CAAC;AACH;","names":[]}
1
+ {"version":3,"sources":["../../../src/components/SeoDrawer/build-analysis-input.ts"],"sourcesContent":["import type { ClientField } from \"payload\";\nimport type { ContentNode } from \"../../content/schema/nodes\";\nimport { serialize } from \"../../content/schema/serialize\";\nimport { extractContent } from \"../../content/extract/extract\";\nimport type { ExtractContext } from \"../../content/extract/context\";\nimport { collectRefs } from \"../../content/resolve/collect-refs\";\nimport { hydrate } from \"../../content/resolve/hydrate\";\nimport type { DocResolver } from \"../../content/resolve/resolver\";\nimport type { ResolvedDoc } from \"../../content/resolve/types\";\nimport { makeExcluded, makeIncluded } from \"../../content/extract/selection\";\nimport type { AnalysisInput } from \"../../engine/types/analysis\";\nimport type { ContentExtractor, ContentSelection, SeoFieldPaths } from \"../../types/config\";\nimport { buildInput } from \"./buildInput\";\n\nexport interface BuildAnalysisInputArgs {\n values: Record<string, unknown>;\n locale: string | { code?: string } | null | undefined;\n payloadLocale: string | undefined;\n apiRoute?: string;\n keyphrase: string;\n fields: SeoFieldPaths;\n site: { name: string; baseUrl: string };\n hostFields: ClientField[];\n ctx: ExtractContext;\n resolver: DocResolver;\n resolveDepth: number;\n override?: ContentExtractor;\n}\n\nfunction normalizeSelection(content: SeoFieldPaths[\"content\"]): {\n include: string[];\n exclude: string[];\n} {\n if (content == null) return { include: [], exclude: [] };\n if (typeof content === \"string\") return { include: [content], exclude: [] };\n const sel = content as ContentSelection;\n return { include: sel.include ?? [], exclude: sel.exclude ?? [] };\n}\n\nfunction metadataPaths(fields: SeoFieldPaths): string[] {\n return [fields.seoTitle, fields.metaDescription, fields.slug ?? \"slug\"].filter((p): p is string => p !== undefined);\n}\n\nexport async function buildAnalysisInput(args: BuildAnalysisInputArgs): Promise<AnalysisInput> {\n const ir = await extractIntermediateRepresentation(args);\n const contentHtml = serialize(ir);\n\n return buildInput({\n values: args.values,\n contentHtml,\n locale: args.locale,\n keyphrase: args.keyphrase,\n fields: args.fields,\n site: args.site,\n });\n}\n\nasync function extractIntermediateRepresentation(args: BuildAnalysisInputArgs): Promise<ContentNode[]> {\n const selection = normalizeSelection(args.fields.content);\n const meta = metadataPaths(args.fields);\n\n if (args.fields.content == null) return [];\n\n const excluded = makeExcluded(meta, selection.exclude);\n const included = makeIncluded(selection.include);\n const prune = (path: string) => excluded(path) || !included(path);\n\n const refs = args.resolveDepth >= 1 ? collectRefs(args.values, args.hostFields, args.ctx, prune) : [];\n const resolved = refs.length > 0 ? await args.resolver.resolve(refs, args.payloadLocale, args.resolveDepth - 1) : new Map<string, ResolvedDoc>();\n\n const ctx: ExtractContext = { ...args.ctx, resolved };\n\n if (args.override) return await args.override(hydrate(args.values, args.hostFields, ctx, resolved), { locale: args.payloadLocale, apiRoute: args.apiRoute });\n\n return extractContent({\n values: args.values,\n fields: args.hostFields,\n ctx,\n selection,\n metadataPaths: meta,\n depth: args.resolveDepth,\n });\n}\n"],"mappings":"AAEA,SAAS,iBAAiB;AAC1B,SAAS,sBAAsB;AAE/B,SAAS,mBAAmB;AAC5B,SAAS,eAAe;AAGxB,SAAS,cAAc,oBAAoB;AAG3C,SAAS,kBAAkB;AAiB3B,SAAS,mBAAmB,SAG1B;AACA,MAAI,WAAW;AAAM,WAAO,EAAE,SAAS,CAAC,GAAG,SAAS,CAAC,EAAE;AACvD,MAAI,OAAO,YAAY;AAAU,WAAO,EAAE,SAAS,CAAC,OAAO,GAAG,SAAS,CAAC,EAAE;AAC1E,QAAM,MAAM;AACZ,SAAO,EAAE,SAAS,IAAI,WAAW,CAAC,GAAG,SAAS,IAAI,WAAW,CAAC,EAAE;AAClE;AAEA,SAAS,cAAc,QAAiC;AACtD,SAAO,CAAC,OAAO,UAAU,OAAO,iBAAiB,OAAO,QAAQ,MAAM,EAAE,OAAO,CAAC,MAAmB,MAAM,MAAS;AACpH;AAEA,eAAsB,mBAAmB,MAAsD;AAC7F,QAAM,KAAK,MAAM,kCAAkC,IAAI;AACvD,QAAM,cAAc,UAAU,EAAE;AAEhC,SAAO,WAAW;AAAA,IAChB,QAAQ,KAAK;AAAA,IACb;AAAA,IACA,QAAQ,KAAK;AAAA,IACb,WAAW,KAAK;AAAA,IAChB,QAAQ,KAAK;AAAA,IACb,MAAM,KAAK;AAAA,EACb,CAAC;AACH;AAEA,eAAe,kCAAkC,MAAsD;AACrG,QAAM,YAAY,mBAAmB,KAAK,OAAO,OAAO;AACxD,QAAM,OAAO,cAAc,KAAK,MAAM;AAEtC,MAAI,KAAK,OAAO,WAAW;AAAM,WAAO,CAAC;AAEzC,QAAM,WAAW,aAAa,MAAM,UAAU,OAAO;AACrD,QAAM,WAAW,aAAa,UAAU,OAAO;AAC/C,QAAM,QAAQ,CAAC,SAAiB,SAAS,IAAI,KAAK,CAAC,SAAS,IAAI;AAEhE,QAAM,OAAO,KAAK,gBAAgB,IAAI,YAAY,KAAK,QAAQ,KAAK,YAAY,KAAK,KAAK,KAAK,IAAI,CAAC;AACpG,QAAM,WAAW,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,QAAQ,MAAM,KAAK,eAAe,KAAK,eAAe,CAAC,IAAI,oBAAI,IAAyB;AAE/I,QAAM,MAAsB,EAAE,GAAG,KAAK,KAAK,SAAS;AAEpD,MAAI,KAAK;AAAU,WAAO,MAAM,KAAK,SAAS,QAAQ,KAAK,QAAQ,KAAK,YAAY,KAAK,QAAQ,GAAG,EAAE,QAAQ,KAAK,eAAe,UAAU,KAAK,SAAS,CAAC;AAE3J,SAAO,eAAe;AAAA,IACpB,QAAQ,KAAK;AAAA,IACb,QAAQ,KAAK;AAAA,IACb;AAAA,IACA;AAAA,IACA,eAAe;AAAA,IACf,OAAO,KAAK;AAAA,EACd,CAAC;AACH;","names":[]}
@@ -13,5 +13,5 @@ export interface BuildInputArgs {
13
13
  baseUrl: string;
14
14
  };
15
15
  }
16
- export declare function buildInput({ values, contentHtml, locale, keyphrase, fields, site }: BuildInputArgs): AnalysisInput;
16
+ export declare function buildInput({ values, contentHtml, locale, keyphrase, fields, site, }: BuildInputArgs): AnalysisInput;
17
17
  //# sourceMappingURL=buildInput.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"buildInput.d.ts","sourceRoot":"","sources":["../../../src/components/SeoDrawer/buildInput.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAgBxD,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,GAAG;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,GAAG,SAAS,CAAC;IACtD,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,aAAa,CAAC;IACtB,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CACzC;AAED,wBAAgB,UAAU,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,cAAc,GAAG,aAAa,CAkBlH"}
1
+ {"version":3,"file":"buildInput.d.ts","sourceRoot":"","sources":["../../../src/components/SeoDrawer/buildInput.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AA2BxD,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,GAAG;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,GAAG,SAAS,CAAC;IACtD,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,aAAa,CAAC;IACtB,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CACzC;AAED,wBAAgB,UAAU,CAAC,EACzB,MAAM,EACN,WAAW,EACX,MAAM,EACN,SAAS,EACT,MAAM,EACN,IAAI,GACL,EAAE,cAAc,GAAG,aAAa,CAkBhC"}
@@ -1,14 +1,24 @@
1
1
  function valueAt(values, path) {
2
2
  if (!path)
3
3
  return "";
4
- const v = path.split(".").reduce((acc, k) => acc && typeof acc === "object" ? acc[k] : void 0, values);
4
+ const v = path.split(".").reduce(
5
+ (acc, k) => acc && typeof acc === "object" ? acc[k] : void 0,
6
+ values
7
+ );
5
8
  return typeof v === "string" ? v : "";
6
9
  }
7
10
  function normalizeLocale(locale) {
8
11
  const code = (typeof locale === "object" && locale ? locale.code : locale != null ? String(locale) : void 0) ?? "en";
9
12
  return code.includes("_") ? code : `${code}_${code.toUpperCase()}`;
10
13
  }
11
- function buildInput({ values, contentHtml, locale, keyphrase, fields, site }) {
14
+ function buildInput({
15
+ values,
16
+ contentHtml,
17
+ locale,
18
+ keyphrase,
19
+ fields,
20
+ site
21
+ }) {
12
22
  const title = valueAt(values, fields.seoTitle) || valueAt(values, "title");
13
23
  return {
14
24
  title,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/SeoDrawer/buildInput.ts"],"sourcesContent":["import type { AnalysisInput } from \"../../engine/types/analysis\";\nimport type { SeoFieldPaths } from \"../../types/config\";\n\nfunction valueAt(values: Record<string, unknown>, path?: string): string {\n if (!path) return \"\";\n\n const v = path.split(\".\").reduce<unknown>((acc, k) => (acc && typeof acc === \"object\" ? (acc as Record<string, unknown>)[k] : undefined), values);\n\n return typeof v === \"string\" ? v : \"\";\n}\n\nfunction normalizeLocale(locale: string | { code?: string } | null | undefined): string {\n const code = (typeof locale === \"object\" && locale ? locale.code : locale != null ? String(locale) : undefined) ?? \"en\";\n\n return code.includes(\"_\") ? code : `${code}_${code.toUpperCase()}`;\n}\n\nexport interface BuildInputArgs {\n values: Record<string, unknown>;\n contentHtml: string;\n locale: string | { code?: string } | null | undefined;\n keyphrase: string;\n fields: SeoFieldPaths;\n site: { name: string; baseUrl: string };\n}\n\nexport function buildInput({ values, contentHtml, locale, keyphrase, fields, site }: BuildInputArgs): AnalysisInput {\n const title = valueAt(values, fields.seoTitle) || valueAt(values, \"title\");\n\n return {\n title,\n slug: valueAt(values, fields.slug ?? \"slug\"),\n description: valueAt(values, fields.metaDescription),\n contentHtml,\n keyphrase,\n locale: normalizeLocale(locale),\n site,\n has: {\n seoTitle: Boolean(fields.seoTitle && valueAt(values, fields.seoTitle)),\n metaDescription: Boolean(fields.metaDescription),\n slug: Boolean(fields.slug ?? \"slug\"),\n content: Boolean(fields.content),\n },\n };\n}\n"],"mappings":"AAGA,SAAS,QAAQ,QAAiC,MAAuB;AACvE,MAAI,CAAC;AAAM,WAAO;AAElB,QAAM,IAAI,KAAK,MAAM,GAAG,EAAE,OAAgB,CAAC,KAAK,MAAO,OAAO,OAAO,QAAQ,WAAY,IAAgC,CAAC,IAAI,QAAY,MAAM;AAEhJ,SAAO,OAAO,MAAM,WAAW,IAAI;AACrC;AAEA,SAAS,gBAAgB,QAA+D;AACtF,QAAM,QAAQ,OAAO,WAAW,YAAY,SAAS,OAAO,OAAO,UAAU,OAAO,OAAO,MAAM,IAAI,WAAc;AAEnH,SAAO,KAAK,SAAS,GAAG,IAAI,OAAO,GAAG,IAAI,IAAI,KAAK,YAAY,CAAC;AAClE;AAWO,SAAS,WAAW,EAAE,QAAQ,aAAa,QAAQ,WAAW,QAAQ,KAAK,GAAkC;AAClH,QAAM,QAAQ,QAAQ,QAAQ,OAAO,QAAQ,KAAK,QAAQ,QAAQ,OAAO;AAEzE,SAAO;AAAA,IACL;AAAA,IACA,MAAM,QAAQ,QAAQ,OAAO,QAAQ,MAAM;AAAA,IAC3C,aAAa,QAAQ,QAAQ,OAAO,eAAe;AAAA,IACnD;AAAA,IACA;AAAA,IACA,QAAQ,gBAAgB,MAAM;AAAA,IAC9B;AAAA,IACA,KAAK;AAAA,MACH,UAAU,QAAQ,OAAO,YAAY,QAAQ,QAAQ,OAAO,QAAQ,CAAC;AAAA,MACrE,iBAAiB,QAAQ,OAAO,eAAe;AAAA,MAC/C,MAAM,QAAQ,OAAO,QAAQ,MAAM;AAAA,MACnC,SAAS,QAAQ,OAAO,OAAO;AAAA,IACjC;AAAA,EACF;AACF;","names":[]}
1
+ {"version":3,"sources":["../../../src/components/SeoDrawer/buildInput.ts"],"sourcesContent":["import type { AnalysisInput } from \"../../engine/types/analysis\";\nimport type { SeoFieldPaths } from \"../../types/config\";\n\nfunction valueAt(values: Record<string, unknown>, path?: string): string {\n if (!path) return \"\";\n\n const v = path\n .split(\".\")\n .reduce<unknown>(\n (acc, k) =>\n acc && typeof acc === \"object\" ? (acc as Record<string, unknown>)[k] : undefined,\n values\n );\n\n return typeof v === \"string\" ? v : \"\";\n}\n\nfunction normalizeLocale(locale: string | { code?: string } | null | undefined): string {\n const code =\n (typeof locale === \"object\" && locale\n ? locale.code\n : locale != null\n ? String(locale)\n : undefined) ?? \"en\";\n\n return code.includes(\"_\") ? code : `${code}_${code.toUpperCase()}`;\n}\n\nexport interface BuildInputArgs {\n values: Record<string, unknown>;\n contentHtml: string;\n locale: string | { code?: string } | null | undefined;\n keyphrase: string;\n fields: SeoFieldPaths;\n site: { name: string; baseUrl: string };\n}\n\nexport function buildInput({\n values,\n contentHtml,\n locale,\n keyphrase,\n fields,\n site,\n}: BuildInputArgs): AnalysisInput {\n const title = valueAt(values, fields.seoTitle) || valueAt(values, \"title\");\n\n return {\n title,\n slug: valueAt(values, fields.slug ?? \"slug\"),\n description: valueAt(values, fields.metaDescription),\n contentHtml,\n keyphrase,\n locale: normalizeLocale(locale),\n site,\n has: {\n seoTitle: Boolean(fields.seoTitle && valueAt(values, fields.seoTitle)),\n metaDescription: Boolean(fields.metaDescription),\n slug: Boolean(fields.slug ?? \"slug\"),\n content: Boolean(fields.content),\n },\n };\n}\n"],"mappings":"AAGA,SAAS,QAAQ,QAAiC,MAAuB;AACvE,MAAI,CAAC;AAAM,WAAO;AAElB,QAAM,IAAI,KACP,MAAM,GAAG,EACT;AAAA,IACC,CAAC,KAAK,MACJ,OAAO,OAAO,QAAQ,WAAY,IAAgC,CAAC,IAAI;AAAA,IACzE;AAAA,EACF;AAEF,SAAO,OAAO,MAAM,WAAW,IAAI;AACrC;AAEA,SAAS,gBAAgB,QAA+D;AACtF,QAAM,QACH,OAAO,WAAW,YAAY,SAC3B,OAAO,OACP,UAAU,OACR,OAAO,MAAM,IACb,WAAc;AAEtB,SAAO,KAAK,SAAS,GAAG,IAAI,OAAO,GAAG,IAAI,IAAI,KAAK,YAAY,CAAC;AAClE;AAWO,SAAS,WAAW;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAkC;AAChC,QAAM,QAAQ,QAAQ,QAAQ,OAAO,QAAQ,KAAK,QAAQ,QAAQ,OAAO;AAEzE,SAAO;AAAA,IACL;AAAA,IACA,MAAM,QAAQ,QAAQ,OAAO,QAAQ,MAAM;AAAA,IAC3C,aAAa,QAAQ,QAAQ,OAAO,eAAe;AAAA,IACnD;AAAA,IACA;AAAA,IACA,QAAQ,gBAAgB,MAAM;AAAA,IAC9B;AAAA,IACA,KAAK;AAAA,MACH,UAAU,QAAQ,OAAO,YAAY,QAAQ,QAAQ,OAAO,QAAQ,CAAC;AAAA,MACrE,iBAAiB,QAAQ,OAAO,eAAe;AAAA,MAC/C,MAAM,QAAQ,OAAO,QAAQ,MAAM;AAAA,MACnC,SAAS,QAAQ,OAAO,OAAO;AAAA,IACjC;AAAA,EACF;AACF;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"Header.d.ts","sourceRoot":"","sources":["../../../../src/components/SeoDrawer/components/Header.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAKlE,UAAU,WAAW;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,WAAW,CAAC;CAC1B;AAED,wBAAgB,MAAM,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,WAAW,2CAoBrE"}
1
+ {"version":3,"file":"Header.d.ts","sourceRoot":"","sources":["../../../../src/components/SeoDrawer/components/Header.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAKlE,UAAU,WAAW;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,WAAW,CAAC;CAC1B;AAED,wBAAgB,MAAM,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,WAAW,2CA+BrE"}
@@ -11,8 +11,26 @@ function Header({ drawerSlug, total, totalStatus }) {
11
11
  /* @__PURE__ */ jsx("h2", { className: "text-[16px] font-semibold m-0", children: "SEO Analytics" }),
12
12
  totalStatus === "idle" ? null : /* @__PURE__ */ jsx(Pill, { variant: totalStatus, children: total })
13
13
  ] }),
14
- /* @__PURE__ */ jsx("button", { "aria-label": "Close", className: "drawer__header__close", onClick: () => closeModal(drawerSlug), type: "button", children: /* @__PURE__ */ jsx(XIcon, {}) }),
15
- /* @__PURE__ */ jsx("div", { className: "absolute inset-x-0 bottom-0 h-[2px] bg-neutral-150", children: /* @__PURE__ */ jsx("i", { className: cn("block h-full", totalStatus === "idle" ? void 0 : statusVar({ status: totalStatus })), style: { width: `${total}%`, background: "var(--seo-c)" } }) })
14
+ /* @__PURE__ */ jsx(
15
+ "button",
16
+ {
17
+ "aria-label": "Close",
18
+ className: "drawer__header__close",
19
+ onClick: () => closeModal(drawerSlug),
20
+ type: "button",
21
+ children: /* @__PURE__ */ jsx(XIcon, {})
22
+ }
23
+ ),
24
+ /* @__PURE__ */ jsx("div", { className: "absolute inset-x-0 bottom-0 h-[2px] bg-neutral-150", children: /* @__PURE__ */ jsx(
25
+ "i",
26
+ {
27
+ className: cn(
28
+ "block h-full",
29
+ totalStatus === "idle" ? void 0 : statusVar({ status: totalStatus })
30
+ ),
31
+ style: { width: `${total}%`, background: "var(--seo-c)" }
32
+ }
33
+ ) })
16
34
  ] });
17
35
  }
18
36
  export {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/SeoDrawer/components/Header.tsx"],"sourcesContent":["\"use client\";\n\nimport { useModal, XIcon } from \"@payloadcms/ui\";\nimport type { TotalStatus } from \"../../../engine/types/analysis\";\nimport { cn } from \"../../../utils/style\";\nimport { statusVar } from \"../variants\";\nimport { Pill } from \"../../../ui/Pill\";\n\ninterface HeaderProps {\n drawerSlug: string;\n total: number;\n totalStatus: TotalStatus;\n}\n\nexport function Header({ drawerSlug, total, totalStatus }: HeaderProps) {\n const { closeModal } = useModal();\n\n return (\n <div className=\"relative flex items-center justify-between px-[4px] py-[16px]\">\n <div className=\"flex items-center gap-[11px]\">\n <h2 className=\"text-[16px] font-semibold m-0\">SEO Analytics</h2>\n\n {totalStatus === \"idle\" ? null : <Pill variant={totalStatus}>{total}</Pill>}\n </div>\n\n <button aria-label=\"Close\" className=\"drawer__header__close\" onClick={() => closeModal(drawerSlug)} type=\"button\">\n <XIcon />\n </button>\n\n <div className=\"absolute inset-x-0 bottom-0 h-[2px] bg-neutral-150\">\n <i className={cn(\"block h-full\", totalStatus === \"idle\" ? undefined : statusVar({ status: totalStatus }))} style={{ width: `${total}%`, background: \"var(--seo-c)\" }} />\n </div>\n </div>\n );\n}\n"],"mappings":";AAmBM,SACE,KADF;AAjBN,SAAS,UAAU,aAAa;AAEhC,SAAS,UAAU;AACnB,SAAS,iBAAiB;AAC1B,SAAS,YAAY;AAQd,SAAS,OAAO,EAAE,YAAY,OAAO,YAAY,GAAgB;AACtE,QAAM,EAAE,WAAW,IAAI,SAAS;AAEhC,SACE,qBAAC,SAAI,WAAU,iEACb;AAAA,yBAAC,SAAI,WAAU,gCACb;AAAA,0BAAC,QAAG,WAAU,iCAAgC,2BAAa;AAAA,MAE1D,gBAAgB,SAAS,OAAO,oBAAC,QAAK,SAAS,aAAc,iBAAM;AAAA,OACtE;AAAA,IAEA,oBAAC,YAAO,cAAW,SAAQ,WAAU,yBAAwB,SAAS,MAAM,WAAW,UAAU,GAAG,MAAK,UACvG,8BAAC,SAAM,GACT;AAAA,IAEA,oBAAC,SAAI,WAAU,sDACb,8BAAC,OAAE,WAAW,GAAG,gBAAgB,gBAAgB,SAAS,SAAY,UAAU,EAAE,QAAQ,YAAY,CAAC,CAAC,GAAG,OAAO,EAAE,OAAO,GAAG,KAAK,KAAK,YAAY,eAAe,GAAG,GACxK;AAAA,KACF;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../../src/components/SeoDrawer/components/Header.tsx"],"sourcesContent":["\"use client\";\n\nimport { useModal, XIcon } from \"@payloadcms/ui\";\nimport type { TotalStatus } from \"../../../engine/types/analysis\";\nimport { cn } from \"../../../utils/style\";\nimport { statusVar } from \"../variants\";\nimport { Pill } from \"../../../ui/Pill\";\n\ninterface HeaderProps {\n drawerSlug: string;\n total: number;\n totalStatus: TotalStatus;\n}\n\nexport function Header({ drawerSlug, total, totalStatus }: HeaderProps) {\n const { closeModal } = useModal();\n\n return (\n <div className=\"relative flex items-center justify-between px-[4px] py-[16px]\">\n <div className=\"flex items-center gap-[11px]\">\n <h2 className=\"text-[16px] font-semibold m-0\">SEO Analytics</h2>\n\n {totalStatus === \"idle\" ? null : <Pill variant={totalStatus}>{total}</Pill>}\n </div>\n\n <button\n aria-label=\"Close\"\n className=\"drawer__header__close\"\n onClick={() => closeModal(drawerSlug)}\n type=\"button\"\n >\n <XIcon />\n </button>\n\n <div className=\"absolute inset-x-0 bottom-0 h-[2px] bg-neutral-150\">\n <i\n className={cn(\n \"block h-full\",\n totalStatus === \"idle\" ? undefined : statusVar({ status: totalStatus })\n )}\n style={{ width: `${total}%`, background: \"var(--seo-c)\" }}\n />\n </div>\n </div>\n );\n}\n"],"mappings":";AAmBM,SACE,KADF;AAjBN,SAAS,UAAU,aAAa;AAEhC,SAAS,UAAU;AACnB,SAAS,iBAAiB;AAC1B,SAAS,YAAY;AAQd,SAAS,OAAO,EAAE,YAAY,OAAO,YAAY,GAAgB;AACtE,QAAM,EAAE,WAAW,IAAI,SAAS;AAEhC,SACE,qBAAC,SAAI,WAAU,iEACb;AAAA,yBAAC,SAAI,WAAU,gCACb;AAAA,0BAAC,QAAG,WAAU,iCAAgC,2BAAa;AAAA,MAE1D,gBAAgB,SAAS,OAAO,oBAAC,QAAK,SAAS,aAAc,iBAAM;AAAA,OACtE;AAAA,IAEA;AAAA,MAAC;AAAA;AAAA,QACC,cAAW;AAAA,QACX,WAAU;AAAA,QACV,SAAS,MAAM,WAAW,UAAU;AAAA,QACpC,MAAK;AAAA,QAEL,8BAAC,SAAM;AAAA;AAAA,IACT;AAAA,IAEA,oBAAC,SAAI,WAAU,sDACb;AAAA,MAAC;AAAA;AAAA,QACC,WAAW;AAAA,UACT;AAAA,UACA,gBAAgB,SAAS,SAAY,UAAU,EAAE,QAAQ,YAAY,CAAC;AAAA,QACxE;AAAA,QACA,OAAO,EAAE,OAAO,GAAG,KAAK,KAAK,YAAY,eAAe;AAAA;AAAA,IAC1D,GACF;AAAA,KACF;AAEJ;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"HeadingLevelTiles.d.ts","sourceRoot":"","sources":["../../../../../src/components/SeoDrawer/components/HeadingsSection/HeadingLevelTiles.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAG3E,UAAU,sBAAsB;IAC9B,MAAM,EAAE,iBAAiB,EAAE,CAAC;CAC7B;AAED,wBAAgB,iBAAiB,CAAC,EAAE,MAAM,EAAE,EAAE,sBAAsB,2CAqBnE"}
1
+ {"version":3,"file":"HeadingLevelTiles.d.ts","sourceRoot":"","sources":["../../../../../src/components/SeoDrawer/components/HeadingsSection/HeadingLevelTiles.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAG3E,UAAU,sBAAsB;IAC9B,MAAM,EAAE,iBAAiB,EAAE,CAAC;CAC7B;AAED,wBAAgB,iBAAiB,CAAC,EAAE,MAAM,EAAE,EAAE,sBAAsB,2CAqCnE"}
@@ -12,11 +12,29 @@ function HeadingLevelTiles({ levels }) {
12
12
  zero ? "border-dashed border-neutral-300 bg-neutral-50" : "border-neutral-200 bg-neutral-0"
13
13
  ),
14
14
  children: [
15
- /* @__PURE__ */ jsxs("span", { className: cn("font-mono text-[12px] font-semibold", zero ? "text-neutral-400" : "text-neutral-500"), children: [
16
- "H",
17
- level
18
- ] }),
19
- /* @__PURE__ */ jsx("span", { className: cn("font-mono text-[12px] font-bold", zero ? "text-neutral-300" : "text-neutral-1000"), children: count })
15
+ /* @__PURE__ */ jsxs(
16
+ "span",
17
+ {
18
+ className: cn(
19
+ "font-mono text-[12px] font-semibold",
20
+ zero ? "text-neutral-400" : "text-neutral-500"
21
+ ),
22
+ children: [
23
+ "H",
24
+ level
25
+ ]
26
+ }
27
+ ),
28
+ /* @__PURE__ */ jsx(
29
+ "span",
30
+ {
31
+ className: cn(
32
+ "font-mono text-[12px] font-bold",
33
+ zero ? "text-neutral-300" : "text-neutral-1000"
34
+ ),
35
+ children: count
36
+ }
37
+ )
20
38
  ]
21
39
  },
22
40
  level
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/components/SeoDrawer/components/HeadingsSection/HeadingLevelTiles.tsx"],"sourcesContent":["\"use client\";\n\nimport type { HeadingLevelCount } from \"../../../../engine/types/analysis\";\nimport { cn } from \"../../../../utils/style\";\n\ninterface HeadingLevelTilesProps {\n levels: HeadingLevelCount[];\n}\n\nexport function HeadingLevelTiles({ levels }: HeadingLevelTilesProps) {\n return (\n <div className=\"grid grid-cols-6 gap-[6px] px-[15px] pt-[8px] pb-[12px]\">\n {levels.map(({ level, count }) => {\n const zero = count === 0;\n\n return (\n <div\n key={level}\n className={cn(\n \"flex items-baseline justify-center gap-[5px] rounded-rs border px-[2px] py-[7px]\",\n zero ? \"border-dashed border-neutral-300 bg-neutral-50\" : \"border-neutral-200 bg-neutral-0\"\n )}\n >\n <span className={cn(\"font-mono text-[12px] font-semibold\", zero ? \"text-neutral-400\" : \"text-neutral-500\")}>H{level}</span>\n <span className={cn(\"font-mono text-[12px] font-bold\", zero ? \"text-neutral-300\" : \"text-neutral-1000\")}>{count}</span>\n </div>\n );\n })}\n </div>\n );\n}\n"],"mappings":";AAuBY,SACA,KADA;AApBZ,SAAS,UAAU;AAMZ,SAAS,kBAAkB,EAAE,OAAO,GAA2B;AACpE,SACE,oBAAC,SAAI,WAAU,2DACZ,iBAAO,IAAI,CAAC,EAAE,OAAO,MAAM,MAAM;AAChC,UAAM,OAAO,UAAU;AAEvB,WACE;AAAA,MAAC;AAAA;AAAA,QAEC,WAAW;AAAA,UACT;AAAA,UACA,OAAO,mDAAmD;AAAA,QAC5D;AAAA,QAEA;AAAA,+BAAC,UAAK,WAAW,GAAG,uCAAuC,OAAO,qBAAqB,kBAAkB,GAAG;AAAA;AAAA,YAAE;AAAA,aAAM;AAAA,UACpH,oBAAC,UAAK,WAAW,GAAG,mCAAmC,OAAO,qBAAqB,mBAAmB,GAAI,iBAAM;AAAA;AAAA;AAAA,MAP3G;AAAA,IAQP;AAAA,EAEJ,CAAC,GACH;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../../../src/components/SeoDrawer/components/HeadingsSection/HeadingLevelTiles.tsx"],"sourcesContent":["\"use client\";\n\nimport type { HeadingLevelCount } from \"../../../../engine/types/analysis\";\nimport { cn } from \"../../../../utils/style\";\n\ninterface HeadingLevelTilesProps {\n levels: HeadingLevelCount[];\n}\n\nexport function HeadingLevelTiles({ levels }: HeadingLevelTilesProps) {\n return (\n <div className=\"grid grid-cols-6 gap-[6px] px-[15px] pt-[8px] pb-[12px]\">\n {levels.map(({ level, count }) => {\n const zero = count === 0;\n\n return (\n <div\n key={level}\n className={cn(\n \"flex items-baseline justify-center gap-[5px] rounded-rs border px-[2px] py-[7px]\",\n zero\n ? \"border-dashed border-neutral-300 bg-neutral-50\"\n : \"border-neutral-200 bg-neutral-0\"\n )}\n >\n <span\n className={cn(\n \"font-mono text-[12px] font-semibold\",\n zero ? \"text-neutral-400\" : \"text-neutral-500\"\n )}\n >\n H{level}\n </span>\n <span\n className={cn(\n \"font-mono text-[12px] font-bold\",\n zero ? \"text-neutral-300\" : \"text-neutral-1000\"\n )}\n >\n {count}\n </span>\n </div>\n );\n })}\n </div>\n );\n}\n"],"mappings":";AAyBY,SAQA,KARA;AAtBZ,SAAS,UAAU;AAMZ,SAAS,kBAAkB,EAAE,OAAO,GAA2B;AACpE,SACE,oBAAC,SAAI,WAAU,2DACZ,iBAAO,IAAI,CAAC,EAAE,OAAO,MAAM,MAAM;AAChC,UAAM,OAAO,UAAU;AAEvB,WACE;AAAA,MAAC;AAAA;AAAA,QAEC,WAAW;AAAA,UACT;AAAA,UACA,OACI,mDACA;AAAA,QACN;AAAA,QAEA;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,WAAW;AAAA,gBACT;AAAA,gBACA,OAAO,qBAAqB;AAAA,cAC9B;AAAA,cACD;AAAA;AAAA,gBACG;AAAA;AAAA;AAAA,UACJ;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,WAAW;AAAA,gBACT;AAAA,gBACA,OAAO,qBAAqB;AAAA,cAC9B;AAAA,cAEC;AAAA;AAAA,UACH;AAAA;AAAA;AAAA,MAvBK;AAAA,IAwBP;AAAA,EAEJ,CAAC,GACH;AAEJ;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"Chevron.d.ts","sourceRoot":"","sources":["../../../../../../src/components/SeoDrawer/components/HeadingsSection/HeadingTree/Chevron.tsx"],"names":[],"mappings":"AAGA,wBAAgB,OAAO,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,2CAElD"}
1
+ {"version":3,"file":"Chevron.d.ts","sourceRoot":"","sources":["../../../../../../src/components/SeoDrawer/components/HeadingsSection/HeadingTree/Chevron.tsx"],"names":[],"mappings":"AAGA,wBAAgB,OAAO,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,2CAYlD"}
@@ -2,7 +2,18 @@ import { jsx } from "react/jsx-runtime";
2
2
  import { ChevronDown } from "lucide-react";
3
3
  import { cn } from "../../../../../utils/style";
4
4
  function Chevron({ open }) {
5
- return /* @__PURE__ */ jsx(ChevronDown, { size: 13, strokeWidth: 2.2, "aria-hidden": "true", className: cn("flex-none text-neutral-500 transition-transform duration-150", !open && "-rotate-90") });
5
+ return /* @__PURE__ */ jsx(
6
+ ChevronDown,
7
+ {
8
+ size: 13,
9
+ strokeWidth: 2.2,
10
+ "aria-hidden": "true",
11
+ className: cn(
12
+ "flex-none text-neutral-500 transition-transform duration-150",
13
+ !open && "-rotate-90"
14
+ )
15
+ }
16
+ );
6
17
  }
7
18
  export {
8
19
  Chevron
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../src/components/SeoDrawer/components/HeadingsSection/HeadingTree/Chevron.tsx"],"sourcesContent":["import { ChevronDown } from \"lucide-react\";\nimport { cn } from \"../../../../../utils/style\";\n\nexport function Chevron({ open }: { open: boolean }) {\n return <ChevronDown size={13} strokeWidth={2.2} aria-hidden=\"true\" className={cn(\"flex-none text-neutral-500 transition-transform duration-150\", !open && \"-rotate-90\")} />;\n}\n"],"mappings":"AAIS;AAJT,SAAS,mBAAmB;AAC5B,SAAS,UAAU;AAEZ,SAAS,QAAQ,EAAE,KAAK,GAAsB;AACnD,SAAO,oBAAC,eAAY,MAAM,IAAI,aAAa,KAAK,eAAY,QAAO,WAAW,GAAG,gEAAgE,CAAC,QAAQ,YAAY,GAAG;AAC3K;","names":[]}
1
+ {"version":3,"sources":["../../../../../../src/components/SeoDrawer/components/HeadingsSection/HeadingTree/Chevron.tsx"],"sourcesContent":["import { ChevronDown } from \"lucide-react\";\nimport { cn } from \"../../../../../utils/style\";\n\nexport function Chevron({ open }: { open: boolean }) {\n return (\n <ChevronDown\n size={13}\n strokeWidth={2.2}\n aria-hidden=\"true\"\n className={cn(\n \"flex-none text-neutral-500 transition-transform duration-150\",\n !open && \"-rotate-90\"\n )}\n />\n );\n}\n"],"mappings":"AAKI;AALJ,SAAS,mBAAmB;AAC5B,SAAS,UAAU;AAEZ,SAAS,QAAQ,EAAE,KAAK,GAAsB;AACnD,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAM;AAAA,MACN,aAAa;AAAA,MACb,eAAY;AAAA,MACZ,WAAW;AAAA,QACT;AAAA,QACA,CAAC,QAAQ;AAAA,MACX;AAAA;AAAA,EACF;AAEJ;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"HeadingTreeGroup.d.ts","sourceRoot":"","sources":["../../../../../../src/components/SeoDrawer/components/HeadingsSection/HeadingTree/HeadingTreeGroup.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AAgExE,UAAU,qBAAqB;IAC7B,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC/B,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;CAChC;AAED,wBAAgB,gBAAgB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,qBAAqB,2CAQ5F"}
1
+ {"version":3,"file":"HeadingTreeGroup.d.ts","sourceRoot":"","sources":["../../../../../../src/components/SeoDrawer/components/HeadingsSection/HeadingTree/HeadingTreeGroup.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AAuFxE,UAAU,qBAAqB;IAC7B,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC/B,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;CAChC;AAED,wBAAgB,gBAAgB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,qBAAqB,2CAe5F"}
@@ -2,7 +2,14 @@
2
2
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
3
3
  import { HeadingTreeRow } from "./HeadingTreeRow";
4
4
  import { useHeadingRails } from "./useHeadingRails";
5
- function HeadingTreeNode({ node, depth, globalFirst, collapsed, onToggle, onBadgeMount }) {
5
+ function HeadingTreeNode({
6
+ node,
7
+ depth,
8
+ globalFirst,
9
+ collapsed,
10
+ onToggle,
11
+ onBadgeMount
12
+ }) {
6
13
  const hasKids = node.children.length > 0;
7
14
  const isOpen = hasKids && !collapsed.has(node.id);
8
15
  const { containerRef, setBadgeRef, registerChildBadge, rails } = useHeadingRails({
@@ -37,12 +44,44 @@ function HeadingTreeNode({ node, depth, globalFirst, collapsed, onToggle, onBadg
37
44
  elbow.id
38
45
  ))
39
46
  ] }) : null,
40
- /* @__PURE__ */ jsx(HeadingTreeRow, { node, depth, hasKids, isOpen, globalFirst, onToggle, badgeRef: setBadgeRef }),
41
- isOpen ? /* @__PURE__ */ jsx("div", { children: node.children.map((child) => /* @__PURE__ */ jsx(HeadingTreeNode, { node: child, depth: depth + 1, globalFirst: false, collapsed, onToggle, onBadgeMount: registerChildBadge(child.id) }, child.id)) }) : null
47
+ /* @__PURE__ */ jsx(
48
+ HeadingTreeRow,
49
+ {
50
+ node,
51
+ depth,
52
+ hasKids,
53
+ isOpen,
54
+ globalFirst,
55
+ onToggle,
56
+ badgeRef: setBadgeRef
57
+ }
58
+ ),
59
+ isOpen ? /* @__PURE__ */ jsx("div", { children: node.children.map((child) => /* @__PURE__ */ jsx(
60
+ HeadingTreeNode,
61
+ {
62
+ node: child,
63
+ depth: depth + 1,
64
+ globalFirst: false,
65
+ collapsed,
66
+ onToggle,
67
+ onBadgeMount: registerChildBadge(child.id)
68
+ },
69
+ child.id
70
+ )) }) : null
42
71
  ] });
43
72
  }
44
73
  function HeadingTreeGroup({ nodes, depth, collapsed, onToggle }) {
45
- return /* @__PURE__ */ jsx(Fragment, { children: nodes.map((node, i) => /* @__PURE__ */ jsx(HeadingTreeNode, { node, depth, globalFirst: depth === 0 && i === 0, collapsed, onToggle }, node.id)) });
74
+ return /* @__PURE__ */ jsx(Fragment, { children: nodes.map((node, i) => /* @__PURE__ */ jsx(
75
+ HeadingTreeNode,
76
+ {
77
+ node,
78
+ depth,
79
+ globalFirst: depth === 0 && i === 0,
80
+ collapsed,
81
+ onToggle
82
+ },
83
+ node.id
84
+ )) });
46
85
  }
47
86
  export {
48
87
  HeadingTreeGroup
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../src/components/SeoDrawer/components/HeadingsSection/HeadingTree/HeadingTreeGroup.tsx"],"sourcesContent":["\"use client\";\n\nimport type { HeadingNode } from \"../../../../../engine/types/analysis\";\nimport { HeadingTreeRow } from \"./HeadingTreeRow\";\nimport { useHeadingRails } from \"./useHeadingRails\";\n\ninterface HeadingTreeNodeProps {\n node: HeadingNode;\n depth: number;\n globalFirst: boolean;\n collapsed: ReadonlySet<string>;\n onToggle: (id: string) => void;\n onBadgeMount?: (el: HTMLSpanElement | null) => void;\n}\n\nfunction HeadingTreeNode({ node, depth, globalFirst, collapsed, onToggle, onBadgeMount }: HeadingTreeNodeProps) {\n const hasKids = node.children.length > 0;\n const isOpen = hasKids && !collapsed.has(node.id);\n\n const { containerRef, setBadgeRef, registerChildBadge, rails } = useHeadingRails({\n node,\n isOpen,\n collapsed,\n onBadgeMount,\n });\n\n return (\n <div ref={containerRef} className=\"relative\">\n {rails ? (\n <>\n <span\n className=\"absolute w-[1.1px] bg-neutral-150\"\n style={{\n left: rails.vertical.left,\n top: rails.vertical.top,\n height: rails.vertical.height,\n }}\n />\n\n {rails.elbows.map((elbow) => (\n <span\n key={elbow.id}\n className=\"absolute h-[1.1px] bg-neutral-150\"\n style={{\n left: elbow.left,\n top: elbow.top,\n width: elbow.width,\n }}\n />\n ))}\n </>\n ) : null}\n\n <HeadingTreeRow node={node} depth={depth} hasKids={hasKids} isOpen={isOpen} globalFirst={globalFirst} onToggle={onToggle} badgeRef={setBadgeRef} />\n\n {isOpen ? (\n <div>\n {node.children.map((child) => (\n <HeadingTreeNode key={child.id} node={child} depth={depth + 1} globalFirst={false} collapsed={collapsed} onToggle={onToggle} onBadgeMount={registerChildBadge(child.id)} />\n ))}\n </div>\n ) : null}\n </div>\n );\n}\n\ninterface HeadingTreeGroupProps {\n nodes: HeadingNode[];\n depth: number;\n collapsed: ReadonlySet<string>;\n onToggle: (id: string) => void;\n}\n\nexport function HeadingTreeGroup({ nodes, depth, collapsed, onToggle }: HeadingTreeGroupProps) {\n return (\n <>\n {nodes.map((node, i) => (\n <HeadingTreeNode key={node.id} node={node} depth={depth} globalFirst={depth === 0 && i === 0} collapsed={collapsed} onToggle={onToggle} />\n ))}\n </>\n );\n}\n"],"mappings":";AA6BQ,mBACE,KADF;AA1BR,SAAS,sBAAsB;AAC/B,SAAS,uBAAuB;AAWhC,SAAS,gBAAgB,EAAE,MAAM,OAAO,aAAa,WAAW,UAAU,aAAa,GAAyB;AAC9G,QAAM,UAAU,KAAK,SAAS,SAAS;AACvC,QAAM,SAAS,WAAW,CAAC,UAAU,IAAI,KAAK,EAAE;AAEhD,QAAM,EAAE,cAAc,aAAa,oBAAoB,MAAM,IAAI,gBAAgB;AAAA,IAC/E;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,SACE,qBAAC,SAAI,KAAK,cAAc,WAAU,YAC/B;AAAA,YACC,iCACE;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,WAAU;AAAA,UACV,OAAO;AAAA,YACL,MAAM,MAAM,SAAS;AAAA,YACrB,KAAK,MAAM,SAAS;AAAA,YACpB,QAAQ,MAAM,SAAS;AAAA,UACzB;AAAA;AAAA,MACF;AAAA,MAEC,MAAM,OAAO,IAAI,CAAC,UACjB;AAAA,QAAC;AAAA;AAAA,UAEC,WAAU;AAAA,UACV,OAAO;AAAA,YACL,MAAM,MAAM;AAAA,YACZ,KAAK,MAAM;AAAA,YACX,OAAO,MAAM;AAAA,UACf;AAAA;AAAA,QANK,MAAM;AAAA,MAOb,CACD;AAAA,OACH,IACE;AAAA,IAEJ,oBAAC,kBAAe,MAAY,OAAc,SAAkB,QAAgB,aAA0B,UAAoB,UAAU,aAAa;AAAA,IAEhJ,SACC,oBAAC,SACE,eAAK,SAAS,IAAI,CAAC,UAClB,oBAAC,mBAA+B,MAAM,OAAO,OAAO,QAAQ,GAAG,aAAa,OAAO,WAAsB,UAAoB,cAAc,mBAAmB,MAAM,EAAE,KAAhJ,MAAM,EAA6I,CAC1K,GACH,IACE;AAAA,KACN;AAEJ;AASO,SAAS,iBAAiB,EAAE,OAAO,OAAO,WAAW,SAAS,GAA0B;AAC7F,SACE,gCACG,gBAAM,IAAI,CAAC,MAAM,MAChB,oBAAC,mBAA8B,MAAY,OAAc,aAAa,UAAU,KAAK,MAAM,GAAG,WAAsB,YAA9F,KAAK,EAA6G,CACzI,GACH;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../../../../src/components/SeoDrawer/components/HeadingsSection/HeadingTree/HeadingTreeGroup.tsx"],"sourcesContent":["\"use client\";\n\nimport type { HeadingNode } from \"../../../../../engine/types/analysis\";\nimport { HeadingTreeRow } from \"./HeadingTreeRow\";\nimport { useHeadingRails } from \"./useHeadingRails\";\n\ninterface HeadingTreeNodeProps {\n node: HeadingNode;\n depth: number;\n globalFirst: boolean;\n collapsed: ReadonlySet<string>;\n onToggle: (id: string) => void;\n onBadgeMount?: (el: HTMLSpanElement | null) => void;\n}\n\nfunction HeadingTreeNode({\n node,\n depth,\n globalFirst,\n collapsed,\n onToggle,\n onBadgeMount,\n}: HeadingTreeNodeProps) {\n const hasKids = node.children.length > 0;\n const isOpen = hasKids && !collapsed.has(node.id);\n\n const { containerRef, setBadgeRef, registerChildBadge, rails } = useHeadingRails({\n node,\n isOpen,\n collapsed,\n onBadgeMount,\n });\n\n return (\n <div ref={containerRef} className=\"relative\">\n {rails ? (\n <>\n <span\n className=\"absolute w-[1.1px] bg-neutral-150\"\n style={{\n left: rails.vertical.left,\n top: rails.vertical.top,\n height: rails.vertical.height,\n }}\n />\n\n {rails.elbows.map((elbow) => (\n <span\n key={elbow.id}\n className=\"absolute h-[1.1px] bg-neutral-150\"\n style={{\n left: elbow.left,\n top: elbow.top,\n width: elbow.width,\n }}\n />\n ))}\n </>\n ) : null}\n\n <HeadingTreeRow\n node={node}\n depth={depth}\n hasKids={hasKids}\n isOpen={isOpen}\n globalFirst={globalFirst}\n onToggle={onToggle}\n badgeRef={setBadgeRef}\n />\n\n {isOpen ? (\n <div>\n {node.children.map((child) => (\n <HeadingTreeNode\n key={child.id}\n node={child}\n depth={depth + 1}\n globalFirst={false}\n collapsed={collapsed}\n onToggle={onToggle}\n onBadgeMount={registerChildBadge(child.id)}\n />\n ))}\n </div>\n ) : null}\n </div>\n );\n}\n\ninterface HeadingTreeGroupProps {\n nodes: HeadingNode[];\n depth: number;\n collapsed: ReadonlySet<string>;\n onToggle: (id: string) => void;\n}\n\nexport function HeadingTreeGroup({ nodes, depth, collapsed, onToggle }: HeadingTreeGroupProps) {\n return (\n <>\n {nodes.map((node, i) => (\n <HeadingTreeNode\n key={node.id}\n node={node}\n depth={depth}\n globalFirst={depth === 0 && i === 0}\n collapsed={collapsed}\n onToggle={onToggle}\n />\n ))}\n </>\n );\n}\n"],"mappings":";AAoCQ,mBACE,KADF;AAjCR,SAAS,sBAAsB;AAC/B,SAAS,uBAAuB;AAWhC,SAAS,gBAAgB;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAyB;AACvB,QAAM,UAAU,KAAK,SAAS,SAAS;AACvC,QAAM,SAAS,WAAW,CAAC,UAAU,IAAI,KAAK,EAAE;AAEhD,QAAM,EAAE,cAAc,aAAa,oBAAoB,MAAM,IAAI,gBAAgB;AAAA,IAC/E;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,SACE,qBAAC,SAAI,KAAK,cAAc,WAAU,YAC/B;AAAA,YACC,iCACE;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,WAAU;AAAA,UACV,OAAO;AAAA,YACL,MAAM,MAAM,SAAS;AAAA,YACrB,KAAK,MAAM,SAAS;AAAA,YACpB,QAAQ,MAAM,SAAS;AAAA,UACzB;AAAA;AAAA,MACF;AAAA,MAEC,MAAM,OAAO,IAAI,CAAC,UACjB;AAAA,QAAC;AAAA;AAAA,UAEC,WAAU;AAAA,UACV,OAAO;AAAA,YACL,MAAM,MAAM;AAAA,YACZ,KAAK,MAAM;AAAA,YACX,OAAO,MAAM;AAAA,UACf;AAAA;AAAA,QANK,MAAM;AAAA,MAOb,CACD;AAAA,OACH,IACE;AAAA,IAEJ;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,UAAU;AAAA;AAAA,IACZ;AAAA,IAEC,SACC,oBAAC,SACE,eAAK,SAAS,IAAI,CAAC,UAClB;AAAA,MAAC;AAAA;AAAA,QAEC,MAAM;AAAA,QACN,OAAO,QAAQ;AAAA,QACf,aAAa;AAAA,QACb;AAAA,QACA;AAAA,QACA,cAAc,mBAAmB,MAAM,EAAE;AAAA;AAAA,MANpC,MAAM;AAAA,IAOb,CACD,GACH,IACE;AAAA,KACN;AAEJ;AASO,SAAS,iBAAiB,EAAE,OAAO,OAAO,WAAW,SAAS,GAA0B;AAC7F,SACE,gCACG,gBAAM,IAAI,CAAC,MAAM,MAChB;AAAA,IAAC;AAAA;AAAA,MAEC;AAAA,MACA;AAAA,MACA,aAAa,UAAU,KAAK,MAAM;AAAA,MAClC;AAAA,MACA;AAAA;AAAA,IALK,KAAK;AAAA,EAMZ,CACD,GACH;AAEJ;","names":[]}
@@ -10,6 +10,6 @@ interface HeadingTreeRowProps {
10
10
  rowRef?: Ref<HTMLDivElement>;
11
11
  badgeRef?: Ref<HTMLSpanElement>;
12
12
  }
13
- export declare function HeadingTreeRow({ node, depth, hasKids, isOpen, globalFirst, onToggle, rowRef, badgeRef }: HeadingTreeRowProps): import("react/jsx-runtime").JSX.Element;
13
+ export declare function HeadingTreeRow({ node, depth, hasKids, isOpen, globalFirst, onToggle, rowRef, badgeRef, }: HeadingTreeRowProps): import("react/jsx-runtime").JSX.Element;
14
14
  export {};
15
15
  //# sourceMappingURL=HeadingTreeRow.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"HeadingTreeRow.d.ts","sourceRoot":"","sources":["../../../../../../src/components/SeoDrawer/components/HeadingsSection/HeadingTree/HeadingTreeRow.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AAIxE,UAAU,mBAAmB;IAC3B,IAAI,EAAE,WAAW,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,MAAM,CAAC,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;IAC7B,QAAQ,CAAC,EAAE,GAAG,CAAC,eAAe,CAAC,CAAC;CACjC;AAED,wBAAgB,cAAc,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,mBAAmB,2CAuC5H"}
1
+ {"version":3,"file":"HeadingTreeRow.d.ts","sourceRoot":"","sources":["../../../../../../src/components/SeoDrawer/components/HeadingsSection/HeadingTree/HeadingTreeRow.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AAIxE,UAAU,mBAAmB;IAC3B,IAAI,EAAE,WAAW,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,MAAM,CAAC,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;IAC7B,QAAQ,CAAC,EAAE,GAAG,CAAC,eAAe,CAAC,CAAC;CACjC;AAED,wBAAgB,cAAc,CAAC,EAC7B,IAAI,EACJ,KAAK,EACL,OAAO,EACP,MAAM,EACN,WAAW,EACX,QAAQ,EACR,MAAM,EACN,QAAQ,GACT,EAAE,mBAAmB,2CAwDrB"}