@focus-reactive/payload-plugin-seo 1.0.0 → 1.0.2

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 (406) hide show
  1. package/dist/admin.css +1214 -0
  2. package/dist/components/SeoButton/index.d.ts +14 -0
  3. package/dist/components/SeoButton/index.d.ts.map +1 -0
  4. package/dist/components/SeoButton/index.js +81 -0
  5. package/dist/components/SeoButton/index.js.map +1 -0
  6. package/dist/components/SeoDrawer/TabsNav/constants.d.ts +3 -0
  7. package/dist/components/SeoDrawer/TabsNav/constants.d.ts.map +1 -0
  8. package/dist/components/SeoDrawer/TabsNav/constants.js +13 -0
  9. package/dist/components/SeoDrawer/TabsNav/constants.js.map +1 -0
  10. package/dist/components/SeoDrawer/TabsNav/index.d.ts +8 -0
  11. package/dist/components/SeoDrawer/TabsNav/index.d.ts.map +1 -0
  12. package/dist/components/SeoDrawer/TabsNav/index.js +14 -0
  13. package/dist/components/SeoDrawer/TabsNav/index.js.map +1 -0
  14. package/dist/components/SeoDrawer/TabsNav/types.d.ts +8 -0
  15. package/dist/components/SeoDrawer/TabsNav/types.d.ts.map +1 -0
  16. package/dist/components/SeoDrawer/TabsNav/types.js +1 -0
  17. package/dist/components/SeoDrawer/TabsNav/types.js.map +1 -0
  18. package/dist/components/SeoDrawer/TabsNav/variants.d.ts +4 -0
  19. package/dist/components/SeoDrawer/TabsNav/variants.d.ts.map +1 -0
  20. package/dist/components/SeoDrawer/TabsNav/variants.js +14 -0
  21. package/dist/components/SeoDrawer/TabsNav/variants.js.map +1 -0
  22. package/dist/components/SeoDrawer/analysisDecision.d.ts +7 -0
  23. package/dist/components/SeoDrawer/analysisDecision.d.ts.map +1 -0
  24. package/dist/components/SeoDrawer/analysisDecision.js +12 -0
  25. package/dist/components/SeoDrawer/analysisDecision.js.map +1 -0
  26. package/dist/components/SeoDrawer/build-analysis-input.d.ts +24 -0
  27. package/dist/components/SeoDrawer/build-analysis-input.d.ts.map +1 -0
  28. package/dist/components/SeoDrawer/build-analysis-input.js +27 -0
  29. package/dist/components/SeoDrawer/build-analysis-input.js.map +1 -0
  30. package/dist/components/SeoDrawer/buildInput.d.ts +17 -0
  31. package/dist/components/SeoDrawer/buildInput.d.ts.map +1 -0
  32. package/dist/components/SeoDrawer/buildInput.js +32 -0
  33. package/dist/components/SeoDrawer/buildInput.js.map +1 -0
  34. package/dist/components/SeoDrawer/components/Header.d.ts +9 -0
  35. package/dist/components/SeoDrawer/components/Header.d.ts.map +1 -0
  36. package/dist/components/SeoDrawer/components/Header.js +21 -0
  37. package/dist/components/SeoDrawer/components/Header.js.map +1 -0
  38. package/dist/components/SeoDrawer/components/SerpPreview/highlight-keyphrase.d.ts +3 -0
  39. package/dist/components/SeoDrawer/components/SerpPreview/highlight-keyphrase.d.ts.map +1 -0
  40. package/dist/components/SeoDrawer/components/SerpPreview/highlight-keyphrase.js +14 -0
  41. package/dist/components/SeoDrawer/components/SerpPreview/highlight-keyphrase.js.map +1 -0
  42. package/dist/components/SeoDrawer/components/SerpPreview/index.d.ts +12 -0
  43. package/dist/components/SeoDrawer/components/SerpPreview/index.d.ts.map +1 -0
  44. package/dist/components/SeoDrawer/components/SerpPreview/index.js +23 -0
  45. package/dist/components/SeoDrawer/components/SerpPreview/index.js.map +1 -0
  46. package/dist/components/SeoDrawer/components/SerpPreview/serp-favicon.d.ts +8 -0
  47. package/dist/components/SeoDrawer/components/SerpPreview/serp-favicon.d.ts.map +1 -0
  48. package/dist/components/SeoDrawer/components/SerpPreview/serp-favicon.js +8 -0
  49. package/dist/components/SeoDrawer/components/SerpPreview/serp-favicon.js.map +1 -0
  50. package/dist/components/SeoDrawer/components/SerpPreview/truncate-description.d.ts +3 -0
  51. package/dist/components/SeoDrawer/components/SerpPreview/truncate-description.d.ts.map +1 -0
  52. package/dist/components/SeoDrawer/components/SerpPreview/truncate-description.js +16 -0
  53. package/dist/components/SeoDrawer/components/SerpPreview/truncate-description.js.map +1 -0
  54. package/dist/components/SeoDrawer/components/SerpPreview/variants.d.ts +19 -0
  55. package/dist/components/SeoDrawer/components/SerpPreview/variants.d.ts.map +1 -0
  56. package/dist/components/SeoDrawer/components/SerpPreview/variants.js +58 -0
  57. package/dist/components/SeoDrawer/components/SerpPreview/variants.js.map +1 -0
  58. package/dist/components/SeoDrawer/index.d.ts +18 -0
  59. package/dist/components/SeoDrawer/index.d.ts.map +1 -0
  60. package/dist/components/SeoDrawer/index.js +37 -0
  61. package/dist/components/SeoDrawer/index.js.map +1 -0
  62. package/dist/components/SeoDrawer/keyphrasePending.d.ts +2 -0
  63. package/dist/components/SeoDrawer/keyphrasePending.d.ts.map +1 -0
  64. package/dist/components/SeoDrawer/keyphrasePending.js +9 -0
  65. package/dist/components/SeoDrawer/keyphrasePending.js.map +1 -0
  66. package/dist/components/SeoDrawer/languagePacks.d.ts +2 -0
  67. package/dist/components/SeoDrawer/languagePacks.d.ts.map +1 -0
  68. package/dist/components/SeoDrawer/languagePacks.js +19 -0
  69. package/dist/components/SeoDrawer/languagePacks.js.map +1 -0
  70. package/dist/components/SeoDrawer/tabs/InclusiveTab.d.ts +5 -0
  71. package/dist/components/SeoDrawer/tabs/InclusiveTab.d.ts.map +1 -0
  72. package/dist/components/SeoDrawer/tabs/InclusiveTab.js +46 -0
  73. package/dist/components/SeoDrawer/tabs/InclusiveTab.js.map +1 -0
  74. package/dist/components/SeoDrawer/tabs/KeyphraseTab.d.ts +11 -0
  75. package/dist/components/SeoDrawer/tabs/KeyphraseTab.d.ts.map +1 -0
  76. package/dist/components/SeoDrawer/tabs/KeyphraseTab.js +72 -0
  77. package/dist/components/SeoDrawer/tabs/KeyphraseTab.js.map +1 -0
  78. package/dist/components/SeoDrawer/tabs/OnPageTab.d.ts +5 -0
  79. package/dist/components/SeoDrawer/tabs/OnPageTab.d.ts.map +1 -0
  80. package/dist/components/SeoDrawer/tabs/OnPageTab.js +37 -0
  81. package/dist/components/SeoDrawer/tabs/OnPageTab.js.map +1 -0
  82. package/dist/components/SeoDrawer/tabs/ReadabilityTab.d.ts +5 -0
  83. package/dist/components/SeoDrawer/tabs/ReadabilityTab.d.ts.map +1 -0
  84. package/dist/components/SeoDrawer/tabs/ReadabilityTab.js +37 -0
  85. package/dist/components/SeoDrawer/tabs/ReadabilityTab.js.map +1 -0
  86. package/dist/components/SeoDrawer/tabs/SerpTab.d.ts +7 -0
  87. package/dist/components/SeoDrawer/tabs/SerpTab.d.ts.map +1 -0
  88. package/dist/components/SeoDrawer/tabs/SerpTab.js +41 -0
  89. package/dist/components/SeoDrawer/tabs/SerpTab.js.map +1 -0
  90. package/dist/components/SeoDrawer/tabs/VitalsTab.d.ts +7 -0
  91. package/dist/components/SeoDrawer/tabs/VitalsTab.d.ts.map +1 -0
  92. package/dist/components/SeoDrawer/tabs/VitalsTab.js +42 -0
  93. package/dist/components/SeoDrawer/tabs/VitalsTab.js.map +1 -0
  94. package/dist/components/SeoDrawer/useAnalysis.d.ts +17 -0
  95. package/dist/components/SeoDrawer/useAnalysis.d.ts.map +1 -0
  96. package/dist/components/SeoDrawer/useAnalysis.js +57 -0
  97. package/dist/components/SeoDrawer/useAnalysis.js.map +1 -0
  98. package/dist/components/SeoDrawer/useLiveDocument.d.ts +22 -0
  99. package/dist/components/SeoDrawer/useLiveDocument.d.ts.map +1 -0
  100. package/dist/components/SeoDrawer/useLiveDocument.js +85 -0
  101. package/dist/components/SeoDrawer/useLiveDocument.js.map +1 -0
  102. package/dist/components/SeoDrawer/variants.d.ts +4 -0
  103. package/dist/components/SeoDrawer/variants.d.ts.map +1 -0
  104. package/dist/components/SeoDrawer/variants.js +14 -0
  105. package/dist/components/SeoDrawer/variants.js.map +1 -0
  106. package/dist/components/icons.d.ts +7 -0
  107. package/dist/components/icons.d.ts.map +1 -0
  108. package/dist/components/icons.js +40 -0
  109. package/dist/components/icons.js.map +1 -0
  110. package/dist/config.d.ts +4 -0
  111. package/dist/config.d.ts.map +1 -0
  112. package/dist/config.js +15 -0
  113. package/dist/config.js.map +1 -0
  114. package/dist/constants/checkIds.d.ts +8 -0
  115. package/dist/constants/checkIds.d.ts.map +1 -0
  116. package/dist/constants/checkIds.js +21 -0
  117. package/dist/constants/checkIds.js.map +1 -0
  118. package/dist/constants/index.d.ts +5 -0
  119. package/dist/constants/index.d.ts.map +1 -0
  120. package/dist/constants/index.js +10 -0
  121. package/dist/constants/index.js.map +1 -0
  122. package/dist/constants/statuses.d.ts +3 -0
  123. package/dist/constants/statuses.d.ts.map +1 -0
  124. package/dist/constants/statuses.js +9 -0
  125. package/dist/constants/statuses.js.map +1 -0
  126. package/dist/content/extractContent.d.ts +3 -0
  127. package/dist/content/extractContent.d.ts.map +1 -0
  128. package/dist/content/extractContent.js +31 -0
  129. package/dist/content/extractContent.js.map +1 -0
  130. package/dist/content/lexicalToHtml.d.ts +6 -0
  131. package/dist/content/lexicalToHtml.d.ts.map +1 -0
  132. package/dist/content/lexicalToHtml.js +15 -0
  133. package/dist/content/lexicalToHtml.js.map +1 -0
  134. package/dist/content/uploads/collect-upload-refs.d.ts +5 -0
  135. package/dist/content/uploads/collect-upload-refs.d.ts.map +1 -0
  136. package/dist/content/uploads/collect-upload-refs.js +19 -0
  137. package/dist/content/uploads/collect-upload-refs.js.map +1 -0
  138. package/dist/content/uploads/hydrate-values.d.ts +5 -0
  139. package/dist/content/uploads/hydrate-values.d.ts.map +1 -0
  140. package/dist/content/uploads/hydrate-values.js +15 -0
  141. package/dist/content/uploads/hydrate-values.js.map +1 -0
  142. package/dist/content/uploads/media-resolver.d.ts +7 -0
  143. package/dist/content/uploads/media-resolver.d.ts.map +1 -0
  144. package/dist/content/uploads/media-resolver.js +60 -0
  145. package/dist/content/uploads/media-resolver.js.map +1 -0
  146. package/dist/content/uploads/transform-lexical-uploads.d.ts +5 -0
  147. package/dist/content/uploads/transform-lexical-uploads.d.ts.map +1 -0
  148. package/dist/content/uploads/transform-lexical-uploads.js +34 -0
  149. package/dist/content/uploads/transform-lexical-uploads.js.map +1 -0
  150. package/dist/content/uploads/transform-upload-values.d.ts +10 -0
  151. package/dist/content/uploads/transform-upload-values.d.ts.map +1 -0
  152. package/dist/content/uploads/transform-upload-values.js +108 -0
  153. package/dist/content/uploads/transform-upload-values.js.map +1 -0
  154. package/dist/content/uploads/types.d.ts +8 -0
  155. package/dist/content/uploads/types.d.ts.map +1 -0
  156. package/dist/content/uploads/types.js +7 -0
  157. package/dist/content/uploads/types.js.map +1 -0
  158. package/dist/content/walkValue.d.ts +14 -0
  159. package/dist/content/walkValue.d.ts.map +1 -0
  160. package/dist/content/walkValue.js +62 -0
  161. package/dist/content/walkValue.js.map +1 -0
  162. package/dist/css.d.js +1 -0
  163. package/dist/css.d.js.map +1 -0
  164. package/dist/engine/assessorAdapter.d.ts +14 -0
  165. package/dist/engine/assessorAdapter.d.ts.map +1 -0
  166. package/dist/engine/assessorAdapter.js +23 -0
  167. package/dist/engine/assessorAdapter.js.map +1 -0
  168. package/dist/engine/buildPaper.d.ts +4 -0
  169. package/dist/engine/buildPaper.d.ts.map +1 -0
  170. package/dist/engine/buildPaper.js +16 -0
  171. package/dist/engine/buildPaper.js.map +1 -0
  172. package/dist/engine/extractCheckData.d.ts +4 -0
  173. package/dist/engine/extractCheckData.d.ts.map +1 -0
  174. package/dist/engine/extractCheckData.js +162 -0
  175. package/dist/engine/extractCheckData.js.map +1 -0
  176. package/dist/engine/helpers/has-keyphrase.d.ts +2 -0
  177. package/dist/engine/helpers/has-keyphrase.d.ts.map +1 -0
  178. package/dist/engine/helpers/has-keyphrase.js +7 -0
  179. package/dist/engine/helpers/has-keyphrase.js.map +1 -0
  180. package/dist/engine/helpers/title-progress.d.ts +5 -0
  181. package/dist/engine/helpers/title-progress.d.ts.map +1 -0
  182. package/dist/engine/helpers/title-progress.js +21 -0
  183. package/dist/engine/helpers/title-progress.js.map +1 -0
  184. package/dist/engine/inclusiveScore.d.ts +15 -0
  185. package/dist/engine/inclusiveScore.d.ts.map +1 -0
  186. package/dist/engine/inclusiveScore.js +25 -0
  187. package/dist/engine/inclusiveScore.js.map +1 -0
  188. package/dist/engine/recommendations.d.ts +7 -0
  189. package/dist/engine/recommendations.d.ts.map +1 -0
  190. package/dist/engine/recommendations.js +53 -0
  191. package/dist/engine/recommendations.js.map +1 -0
  192. package/dist/engine/researcherAdapter.d.ts +6 -0
  193. package/dist/engine/researcherAdapter.d.ts.map +1 -0
  194. package/dist/engine/researcherAdapter.js +16 -0
  195. package/dist/engine/researcherAdapter.js.map +1 -0
  196. package/dist/engine/runAnalysis/index.d.ts +3 -0
  197. package/dist/engine/runAnalysis/index.d.ts.map +1 -0
  198. package/dist/engine/runAnalysis/index.js +24 -0
  199. package/dist/engine/runAnalysis/index.js.map +1 -0
  200. package/dist/engine/runAnalysis/services/derive-inclusive.d.ts +4 -0
  201. package/dist/engine/runAnalysis/services/derive-inclusive.d.ts.map +1 -0
  202. package/dist/engine/runAnalysis/services/derive-inclusive.js +47 -0
  203. package/dist/engine/runAnalysis/services/derive-inclusive.js.map +1 -0
  204. package/dist/engine/runAnalysis/services/derive-readability.d.ts +4 -0
  205. package/dist/engine/runAnalysis/services/derive-readability.d.ts.map +1 -0
  206. package/dist/engine/runAnalysis/services/derive-readability.js +32 -0
  207. package/dist/engine/runAnalysis/services/derive-readability.js.map +1 -0
  208. package/dist/engine/runAnalysis/services/derive-seo.d.ts +18 -0
  209. package/dist/engine/runAnalysis/services/derive-seo.d.ts.map +1 -0
  210. package/dist/engine/runAnalysis/services/derive-seo.js +40 -0
  211. package/dist/engine/runAnalysis/services/derive-seo.js.map +1 -0
  212. package/dist/engine/runAnalysis/services/derive-serp.d.ts +3 -0
  213. package/dist/engine/runAnalysis/services/derive-serp.d.ts.map +1 -0
  214. package/dist/engine/runAnalysis/services/derive-serp.js +13 -0
  215. package/dist/engine/runAnalysis/services/derive-serp.js.map +1 -0
  216. package/dist/engine/runAnalysis/services/derive-vitals/index.d.ts +4 -0
  217. package/dist/engine/runAnalysis/services/derive-vitals/index.d.ts.map +1 -0
  218. package/dist/engine/runAnalysis/services/derive-vitals/index.js +19 -0
  219. package/dist/engine/runAnalysis/services/derive-vitals/index.js.map +1 -0
  220. package/dist/engine/runAnalysis/services/derive-vitals/researches.d.ts +19 -0
  221. package/dist/engine/runAnalysis/services/derive-vitals/researches.d.ts.map +1 -0
  222. package/dist/engine/runAnalysis/services/derive-vitals/researches.js +47 -0
  223. package/dist/engine/runAnalysis/services/derive-vitals/researches.js.map +1 -0
  224. package/dist/engine/runAnalysis/utils/enrich.d.ts +5 -0
  225. package/dist/engine/runAnalysis/utils/enrich.d.ts.map +1 -0
  226. package/dist/engine/runAnalysis/utils/enrich.js +16 -0
  227. package/dist/engine/runAnalysis/utils/enrich.js.map +1 -0
  228. package/dist/engine/runAnalysis/utils/toCategory.d.ts +3 -0
  229. package/dist/engine/runAnalysis/utils/toCategory.d.ts.map +1 -0
  230. package/dist/engine/runAnalysis/utils/toCategory.js +13 -0
  231. package/dist/engine/runAnalysis/utils/toCategory.js.map +1 -0
  232. package/dist/engine/scoreStatus.d.ts +8 -0
  233. package/dist/engine/scoreStatus.d.ts.map +1 -0
  234. package/dist/engine/scoreStatus.js +35 -0
  235. package/dist/engine/scoreStatus.js.map +1 -0
  236. package/dist/engine/types/analysis.d.ts +81 -0
  237. package/dist/engine/types/analysis.d.ts.map +1 -0
  238. package/dist/engine/types/analysis.js +1 -0
  239. package/dist/engine/types/analysis.js.map +1 -0
  240. package/dist/engine/types/paper.d.ts +8 -0
  241. package/dist/engine/types/paper.d.ts.map +1 -0
  242. package/dist/engine/types/paper.js +1 -0
  243. package/dist/engine/types/paper.js.map +1 -0
  244. package/dist/engine/types/visualization.d.ts +73 -0
  245. package/dist/engine/types/visualization.d.ts.map +1 -0
  246. package/dist/engine/types/visualization.js +1 -0
  247. package/dist/engine/types/visualization.js.map +1 -0
  248. package/dist/engine/visualization/buildGauge.d.ts +3 -0
  249. package/dist/engine/visualization/buildGauge.d.ts.map +1 -0
  250. package/dist/engine/visualization/buildGauge.js +62 -0
  251. package/dist/engine/visualization/buildGauge.js.map +1 -0
  252. package/dist/engine/visualization/formatGaugeValue.d.ts +3 -0
  253. package/dist/engine/visualization/formatGaugeValue.d.ts.map +1 -0
  254. package/dist/engine/visualization/formatGaugeValue.js +16 -0
  255. package/dist/engine/visualization/formatGaugeValue.js.map +1 -0
  256. package/dist/engine/visualization/gaugeSpecs.d.ts +4 -0
  257. package/dist/engine/visualization/gaugeSpecs.d.ts.map +1 -0
  258. package/dist/engine/visualization/gaugeSpecs.js +78 -0
  259. package/dist/engine/visualization/gaugeSpecs.js.map +1 -0
  260. package/dist/engine/visualization/resolveVisualization/constants.d.ts +4 -0
  261. package/dist/engine/visualization/resolveVisualization/constants.d.ts.map +1 -0
  262. package/dist/engine/visualization/resolveVisualization/constants.js +17 -0
  263. package/dist/engine/visualization/resolveVisualization/constants.js.map +1 -0
  264. package/dist/engine/visualization/resolveVisualization/index.d.ts +4 -0
  265. package/dist/engine/visualization/resolveVisualization/index.d.ts.map +1 -0
  266. package/dist/engine/visualization/resolveVisualization/index.js +43 -0
  267. package/dist/engine/visualization/resolveVisualization/index.js.map +1 -0
  268. package/dist/engine/visualization/resolveVisualization/resolves/resolveDrilldown.d.ts +3 -0
  269. package/dist/engine/visualization/resolveVisualization/resolves/resolveDrilldown.d.ts.map +1 -0
  270. package/dist/engine/visualization/resolveVisualization/resolves/resolveDrilldown.js +19 -0
  271. package/dist/engine/visualization/resolveVisualization/resolves/resolveDrilldown.js.map +1 -0
  272. package/dist/engine/visualization/resolveVisualization/resolves/resolveLinks.d.ts +4 -0
  273. package/dist/engine/visualization/resolveVisualization/resolves/resolveLinks.d.ts.map +1 -0
  274. package/dist/engine/visualization/resolveVisualization/resolves/resolveLinks.js +24 -0
  275. package/dist/engine/visualization/resolveVisualization/resolves/resolveLinks.js.map +1 -0
  276. package/dist/engine/visualization/resolveVisualization/resolves/resolvePresence.d.ts +4 -0
  277. package/dist/engine/visualization/resolveVisualization/resolves/resolvePresence.d.ts.map +1 -0
  278. package/dist/engine/visualization/resolveVisualization/resolves/resolvePresence.js +7 -0
  279. package/dist/engine/visualization/resolveVisualization/resolves/resolvePresence.js.map +1 -0
  280. package/dist/engine/visualization/resolveVisualization/resolves/resolveProportionCount.d.ts +4 -0
  281. package/dist/engine/visualization/resolveVisualization/resolves/resolveProportionCount.d.ts.map +1 -0
  282. package/dist/engine/visualization/resolveVisualization/resolves/resolveProportionCount.js +20 -0
  283. package/dist/engine/visualization/resolveVisualization/resolves/resolveProportionCount.js.map +1 -0
  284. package/dist/engine/visualization/resolveVisualization/resolves/resolveValueRange.d.ts +4 -0
  285. package/dist/engine/visualization/resolveVisualization/resolves/resolveValueRange.d.ts.map +1 -0
  286. package/dist/engine/visualization/resolveVisualization/resolves/resolveValueRange.js +28 -0
  287. package/dist/engine/visualization/resolveVisualization/resolves/resolveValueRange.js.map +1 -0
  288. package/dist/engine/visualization/resolveVisualization/utils/pluralize.d.ts +2 -0
  289. package/dist/engine/visualization/resolveVisualization/utils/pluralize.d.ts.map +1 -0
  290. package/dist/engine/visualization/resolveVisualization/utils/pluralize.js +5 -0
  291. package/dist/engine/visualization/resolveVisualization/utils/pluralize.js.map +1 -0
  292. package/dist/engine/visualization/resolveVisualization/utils/readDrilldownItems.d.ts +5 -0
  293. package/dist/engine/visualization/resolveVisualization/utils/readDrilldownItems.d.ts.map +1 -0
  294. package/dist/engine/visualization/resolveVisualization/utils/readDrilldownItems.js +8 -0
  295. package/dist/engine/visualization/resolveVisualization/utils/readDrilldownItems.js.map +1 -0
  296. package/dist/engine/visualization/resolveVisualization/utils/readNumber.d.ts +2 -0
  297. package/dist/engine/visualization/resolveVisualization/utils/readNumber.d.ts.map +1 -0
  298. package/dist/engine/visualization/resolveVisualization/utils/readNumber.js +8 -0
  299. package/dist/engine/visualization/resolveVisualization/utils/readNumber.js.map +1 -0
  300. package/dist/engine/visualization/resolveVisualization/utils/readPositions.d.ts +2 -0
  301. package/dist/engine/visualization/resolveVisualization/utils/readPositions.d.ts.map +1 -0
  302. package/dist/engine/visualization/resolveVisualization/utils/readPositions.js +8 -0
  303. package/dist/engine/visualization/resolveVisualization/utils/readPositions.js.map +1 -0
  304. package/dist/index.d.ts +3 -0
  305. package/dist/index.d.ts.map +1 -0
  306. package/dist/index.js +5 -0
  307. package/dist/index.js.map +1 -0
  308. package/dist/plugin.d.ts +4 -0
  309. package/dist/plugin.d.ts.map +1 -0
  310. package/dist/plugin.js +23 -0
  311. package/dist/plugin.js.map +1 -0
  312. package/dist/translations/en.d.ts +3 -0
  313. package/dist/translations/en.d.ts.map +1 -0
  314. package/dist/translations/en.js +17 -0
  315. package/dist/translations/en.js.map +1 -0
  316. package/dist/translations/types.d.ts +2 -0
  317. package/dist/translations/types.d.ts.map +1 -0
  318. package/dist/translations/types.js +1 -0
  319. package/dist/translations/types.js.map +1 -0
  320. package/dist/types/config.d.ts +39 -0
  321. package/dist/types/config.d.ts.map +1 -0
  322. package/dist/types/config.js +1 -0
  323. package/dist/types/config.js.map +1 -0
  324. package/dist/ui/CheckRow/CheckVisualization/index.d.ts +5 -0
  325. package/dist/ui/CheckRow/CheckVisualization/index.d.ts.map +1 -0
  326. package/dist/ui/CheckRow/CheckVisualization/index.js +27 -0
  327. package/dist/ui/CheckRow/CheckVisualization/index.js.map +1 -0
  328. package/dist/ui/CheckRow/CheckVisualization/visualizations/DensityGauge.d.ts +3 -0
  329. package/dist/ui/CheckRow/CheckVisualization/visualizations/DensityGauge.d.ts.map +1 -0
  330. package/dist/ui/CheckRow/CheckVisualization/visualizations/DensityGauge.js +72 -0
  331. package/dist/ui/CheckRow/CheckVisualization/visualizations/DensityGauge.js.map +1 -0
  332. package/dist/ui/CheckRow/CheckVisualization/visualizations/DistributionBar.d.ts +3 -0
  333. package/dist/ui/CheckRow/CheckVisualization/visualizations/DistributionBar.d.ts.map +1 -0
  334. package/dist/ui/CheckRow/CheckVisualization/visualizations/DistributionBar.js +16 -0
  335. package/dist/ui/CheckRow/CheckVisualization/visualizations/DistributionBar.js.map +1 -0
  336. package/dist/ui/CheckRow/CheckVisualization/visualizations/DrillDown.d.ts +3 -0
  337. package/dist/ui/CheckRow/CheckVisualization/visualizations/DrillDown.d.ts.map +1 -0
  338. package/dist/ui/CheckRow/CheckVisualization/visualizations/DrillDown.js +36 -0
  339. package/dist/ui/CheckRow/CheckVisualization/visualizations/DrillDown.js.map +1 -0
  340. package/dist/ui/CheckRow/CheckVisualization/visualizations/SegmentBar.d.ts +3 -0
  341. package/dist/ui/CheckRow/CheckVisualization/visualizations/SegmentBar.d.ts.map +1 -0
  342. package/dist/ui/CheckRow/CheckVisualization/visualizations/SegmentBar.js +32 -0
  343. package/dist/ui/CheckRow/CheckVisualization/visualizations/SegmentBar.js.map +1 -0
  344. package/dist/ui/CheckRow/constants/labels.d.ts +6 -0
  345. package/dist/ui/CheckRow/constants/labels.d.ts.map +1 -0
  346. package/dist/ui/CheckRow/constants/labels.js +103 -0
  347. package/dist/ui/CheckRow/constants/labels.js.map +1 -0
  348. package/dist/ui/CheckRow/index.d.ts +7 -0
  349. package/dist/ui/CheckRow/index.d.ts.map +1 -0
  350. package/dist/ui/CheckRow/index.js +29 -0
  351. package/dist/ui/CheckRow/index.js.map +1 -0
  352. package/dist/ui/FilterPills.d.ts +10 -0
  353. package/dist/ui/FilterPills.d.ts.map +1 -0
  354. package/dist/ui/FilterPills.js +37 -0
  355. package/dist/ui/FilterPills.js.map +1 -0
  356. package/dist/ui/KpiCard.d.ts +9 -0
  357. package/dist/ui/KpiCard.d.ts.map +1 -0
  358. package/dist/ui/KpiCard.js +19 -0
  359. package/dist/ui/KpiCard.js.map +1 -0
  360. package/dist/ui/Pill.d.ts +9 -0
  361. package/dist/ui/Pill.d.ts.map +1 -0
  362. package/dist/ui/Pill.js +20 -0
  363. package/dist/ui/Pill.js.map +1 -0
  364. package/dist/ui/ScoreRing.d.ts +8 -0
  365. package/dist/ui/ScoreRing.d.ts.map +1 -0
  366. package/dist/ui/ScoreRing.js +20 -0
  367. package/dist/ui/ScoreRing.js.map +1 -0
  368. package/dist/ui/SectionCard.d.ts +9 -0
  369. package/dist/ui/SectionCard.d.ts.map +1 -0
  370. package/dist/ui/SectionCard.js +16 -0
  371. package/dist/ui/SectionCard.js.map +1 -0
  372. package/dist/ui/SectionWrapper.d.ts +8 -0
  373. package/dist/ui/SectionWrapper.d.ts.map +1 -0
  374. package/dist/ui/SectionWrapper.js +10 -0
  375. package/dist/ui/SectionWrapper.js.map +1 -0
  376. package/dist/ui/SegmentedControl.d.ts +15 -0
  377. package/dist/ui/SegmentedControl.d.ts.map +1 -0
  378. package/dist/ui/SegmentedControl.js +75 -0
  379. package/dist/ui/SegmentedControl.js.map +1 -0
  380. package/dist/ui/TabHeader.d.ts +12 -0
  381. package/dist/ui/TabHeader.d.ts.map +1 -0
  382. package/dist/ui/TabHeader.js +22 -0
  383. package/dist/ui/TabHeader.js.map +1 -0
  384. package/dist/ui/Tooltip.d.ts +17 -0
  385. package/dist/ui/Tooltip.d.ts.map +1 -0
  386. package/dist/ui/Tooltip.js +81 -0
  387. package/dist/ui/Tooltip.js.map +1 -0
  388. package/dist/utils/config/getComponentPath.d.ts +2 -0
  389. package/dist/utils/config/getComponentPath.d.ts.map +1 -0
  390. package/dist/utils/config/getComponentPath.js +8 -0
  391. package/dist/utils/config/getComponentPath.js.map +1 -0
  392. package/dist/utils/config/mergeTranslations.d.ts +3 -0
  393. package/dist/utils/config/mergeTranslations.d.ts.map +1 -0
  394. package/dist/utils/config/mergeTranslations.js +11 -0
  395. package/dist/utils/config/mergeTranslations.js.map +1 -0
  396. package/dist/utils/config/overrideAdmin.d.ts +4 -0
  397. package/dist/utils/config/overrideAdmin.d.ts.map +1 -0
  398. package/dist/utils/config/overrideAdmin.js +43 -0
  399. package/dist/utils/config/overrideAdmin.js.map +1 -0
  400. package/dist/utils/style.d.ts +4 -0
  401. package/dist/utils/style.d.ts.map +1 -0
  402. package/dist/utils/style.js +11 -0
  403. package/dist/utils/style.js.map +1 -0
  404. package/dist/yoastseo.d.js +1 -0
  405. package/dist/yoastseo.d.js.map +1 -0
  406. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/SeoDrawer/tabs/VitalsTab.tsx"],"sourcesContent":["\"use client\";\n\nimport type { VitalsResult } from \"../../../engine/types/analysis\";\nimport { cn, ROW_SEPARATOR } from \"../../../utils/style\";\nimport { KpiCard } from \"../../../ui/KpiCard\";\nimport { SectionCard } from \"../../../ui/SectionCard\";\nimport { Pill } from \"../../../ui/Pill\";\n\nexport interface VitalsTabProps {\n data: VitalsResult;\n onRequestKeyphrase: () => void;\n}\n\nexport function VitalsTab({ data, onRequestKeyphrase }: VitalsTabProps) {\n const max = Math.max(1, ...data.prominentWords.map((w) => w.count));\n const noKeyphraseMatch = data.prominentWords.every((w) => !w.isKeyphrase);\n\n return (\n <section className=\"flex flex-col gap-[13px]\">\n <div className=\"grid grid-cols-3 gap-[9px]\">\n <KpiCard label=\"Words\" value={data.words.toLocaleString()} />\n <KpiCard label=\"Sentences\" value={data.sentences} />\n <KpiCard label=\"Paragraphs\" value={data.paragraphs} />\n <KpiCard label=\"Images\" value={data.images} />\n <KpiCard label=\"Videos\" value={data.videos} />\n <KpiCard label=\"Reading time\" value={data.readingTimeMinutes} suffix=\"min\" />\n </div>\n\n <SectionCard title=\"Prominent words\" widget={<Pill variant=\"neutral\">{data.prominentWords.length}</Pill>}>\n {data.prominentWords.map((w) => (\n <div className={cn(\"relative flex items-center gap-[12px] px-[15px] py-[9px]\", ROW_SEPARATOR)} key={w.word}>\n <div className=\"w-[120px] flex-none text-[12px] font-medium flex items-center gap-[6px]\">\n {w.word} {w.isKeyphrase && <span className=\"text-[9px] font-bold uppercase tracking-[0.04em] text-neutral-1000 bg-neutral-150 rounded-[3px] px-[5px] py-[1px]\">Key</span>}\n </div>\n <div className=\"flex-1 h-[6px] rounded-[3px] bg-neutral-100 overflow-hidden\">\n <i className={cn(\"block h-full\", w.isKeyphrase ? \"bg-neutral-1000\" : \"bg-neutral-400\")} style={{ width: `${(w.count / max) * 100}%` }} />\n </div>\n <div className=\"w-[30px] text-right font-mono text-[11px] font-semibold text-neutral-700\">{w.count}</div>\n </div>\n ))}\n </SectionCard>\n\n {noKeyphraseMatch && (\n <button\n type=\"button\"\n onClick={onRequestKeyphrase}\n className=\"self-start text-[12px] text-neutral-600 underline underline-offset-2 hover:text-neutral-800 cursor-pointer bg-transparent border-0 p-0\"\n >\n Set a focus keyphrase to see which prominent words match it\n </button>\n )}\n </section>\n );\n}\n"],"mappings":";AAmBM,SACE,KADF;AAhBN,SAAS,IAAI,qBAAqB;AAClC,SAAS,eAAe;AACxB,SAAS,mBAAmB;AAC5B,SAAS,YAAY;AAOd,SAAS,UAAU,EAAE,MAAM,mBAAmB,GAAmB;AACtE,QAAM,MAAM,KAAK,IAAI,GAAG,GAAG,KAAK,eAAe,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC;AAClE,QAAM,mBAAmB,KAAK,eAAe,MAAM,CAAC,MAAM,CAAC,EAAE,WAAW;AAExE,SACE,qBAAC,aAAQ,WAAU,4BACjB;AAAA,yBAAC,SAAI,WAAU,8BACb;AAAA,0BAAC,WAAQ,OAAM,SAAQ,OAAO,KAAK,MAAM,eAAe,GAAG;AAAA,MAC3D,oBAAC,WAAQ,OAAM,aAAY,OAAO,KAAK,WAAW;AAAA,MAClD,oBAAC,WAAQ,OAAM,cAAa,OAAO,KAAK,YAAY;AAAA,MACpD,oBAAC,WAAQ,OAAM,UAAS,OAAO,KAAK,QAAQ;AAAA,MAC5C,oBAAC,WAAQ,OAAM,UAAS,OAAO,KAAK,QAAQ;AAAA,MAC5C,oBAAC,WAAQ,OAAM,gBAAe,OAAO,KAAK,oBAAoB,QAAO,OAAM;AAAA,OAC7E;AAAA,IAEA,oBAAC,eAAY,OAAM,mBAAkB,QAAQ,oBAAC,QAAK,SAAQ,WAAW,eAAK,eAAe,QAAO,GAC9F,eAAK,eAAe,IAAI,CAAC,MACxB,qBAAC,SAAI,WAAW,GAAG,4DAA4D,aAAa,GAC1F;AAAA,2BAAC,SAAI,WAAU,2EACZ;AAAA,UAAE;AAAA,QAAK;AAAA,QAAE,EAAE,eAAe,oBAAC,UAAK,WAAU,qHAAoH,iBAAG;AAAA,SACpK;AAAA,MACA,oBAAC,SAAI,WAAU,+DACb,8BAAC,OAAE,WAAW,GAAG,gBAAgB,EAAE,cAAc,oBAAoB,gBAAgB,GAAG,OAAO,EAAE,OAAO,GAAI,EAAE,QAAQ,MAAO,GAAG,IAAI,GAAG,GACzI;AAAA,MACA,oBAAC,SAAI,WAAU,4EAA4E,YAAE,OAAM;AAAA,SAPD,EAAE,IAQtG,CACD,GACH;AAAA,IAEC,oBACC;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,SAAS;AAAA,QACT,WAAU;AAAA,QACX;AAAA;AAAA,IAED;AAAA,KAEJ;AAEJ;","names":[]}
@@ -0,0 +1,17 @@
1
+ import type { AnalysisInput, AnalysisResult } from "../../engine/types/analysis";
2
+ export interface UseAnalysisArgs {
3
+ getInput: (opts?: {
4
+ live?: boolean;
5
+ }) => Promise<AnalysisInput>;
6
+ signature: string;
7
+ supportedLocales: string[];
8
+ enabled?: boolean;
9
+ }
10
+ export interface UseAnalysisResult {
11
+ result: AnalysisResult | null;
12
+ analyzing: boolean;
13
+ analyzedKeyphrase: string | null;
14
+ analyzeNow: () => void;
15
+ }
16
+ export declare function useAnalysis({ getInput, signature, supportedLocales, enabled }: UseAnalysisArgs): UseAnalysisResult;
17
+ //# sourceMappingURL=useAnalysis.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAnalysis.d.ts","sourceRoot":"","sources":["../../../src/components/SeoDrawer/useAnalysis.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAIjF,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;IAChE,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,cAAc,GAAG,IAAI,CAAC;IAC9B,SAAS,EAAE,OAAO,CAAC;IACnB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,UAAU,EAAE,MAAM,IAAI,CAAC;CACxB;AAED,wBAAgB,WAAW,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,gBAAgB,EAAE,OAAc,EAAE,EAAE,eAAe,GAAG,iBAAiB,CAuDzH"}
@@ -0,0 +1,57 @@
1
+ "use client";
2
+ import { useCallback, useEffect, useRef, useState } from "react";
3
+ import { runAnalysis } from "../../engine/runAnalysis";
4
+ import { decideAutoAction } from "./analysisDecision";
5
+ import { ensureLanguagePack } from "./languagePacks";
6
+ function useAnalysis({ getInput, signature, supportedLocales, enabled = true }) {
7
+ const [result, setResult] = useState(null);
8
+ const [analyzing, setAnalyzing] = useState(false);
9
+ const [analyzedKeyphrase, setAnalyzedKeyphrase] = useState(null);
10
+ const getInputRef = useRef(getInput);
11
+ getInputRef.current = getInput;
12
+ const signatureRef = useRef(signature);
13
+ signatureRef.current = signature;
14
+ const localesRef = useRef(supportedLocales);
15
+ localesRef.current = supportedLocales;
16
+ const lastSignature = useRef(null);
17
+ const runSeq = useRef(0);
18
+ const run = useCallback(async (live) => {
19
+ const runId = ++runSeq.current;
20
+ lastSignature.current = signatureRef.current;
21
+ setAnalyzing(true);
22
+ try {
23
+ const input = await getInputRef.current({ live });
24
+ await ensureLanguagePack(input.locale, localesRef.current);
25
+ if (runId !== runSeq.current)
26
+ return;
27
+ setResult(runAnalysis(input));
28
+ setAnalyzedKeyphrase(input.keyphrase);
29
+ } finally {
30
+ if (runId === runSeq.current)
31
+ setAnalyzing(false);
32
+ }
33
+ }, []);
34
+ const analyzeNow = useCallback(() => {
35
+ void run(true);
36
+ }, [run]);
37
+ useEffect(() => {
38
+ const action = decideAutoAction({
39
+ enabled,
40
+ signature,
41
+ lastSignature: lastSignature.current
42
+ });
43
+ if (action === "skip")
44
+ return;
45
+ void run(false);
46
+ }, [signature, run, enabled]);
47
+ return {
48
+ result,
49
+ analyzing,
50
+ analyzedKeyphrase,
51
+ analyzeNow
52
+ };
53
+ }
54
+ export {
55
+ useAnalysis
56
+ };
57
+ //# sourceMappingURL=useAnalysis.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/SeoDrawer/useAnalysis.ts"],"sourcesContent":["\"use client\";\n\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport { runAnalysis } from \"../../engine/runAnalysis\";\nimport type { AnalysisInput, AnalysisResult } from \"../../engine/types/analysis\";\nimport { decideAutoAction } from \"./analysisDecision\";\nimport { ensureLanguagePack } from \"./languagePacks\";\n\nexport interface UseAnalysisArgs {\n getInput: (opts?: { live?: boolean }) => Promise<AnalysisInput>;\n signature: string;\n supportedLocales: string[];\n enabled?: boolean;\n}\n\nexport interface UseAnalysisResult {\n result: AnalysisResult | null;\n analyzing: boolean;\n analyzedKeyphrase: string | null;\n analyzeNow: () => void;\n}\n\nexport function useAnalysis({ getInput, signature, supportedLocales, enabled = true }: UseAnalysisArgs): UseAnalysisResult {\n const [result, setResult] = useState<AnalysisResult | null>(null);\n const [analyzing, setAnalyzing] = useState(false);\n const [analyzedKeyphrase, setAnalyzedKeyphrase] = useState<string | null>(null);\n\n const getInputRef = useRef(getInput);\n getInputRef.current = getInput;\n const signatureRef = useRef(signature);\n signatureRef.current = signature;\n const localesRef = useRef(supportedLocales);\n localesRef.current = supportedLocales;\n\n const lastSignature = useRef<string | null>(null);\n const runSeq = useRef(0);\n\n const run = useCallback(async (live: boolean) => {\n const runId = ++runSeq.current;\n\n lastSignature.current = signatureRef.current;\n setAnalyzing(true);\n\n try {\n const input = await getInputRef.current({ live });\n await ensureLanguagePack(input.locale, localesRef.current);\n if (runId !== runSeq.current) return;\n\n setResult(runAnalysis(input));\n setAnalyzedKeyphrase(input.keyphrase);\n } finally {\n if (runId === runSeq.current) setAnalyzing(false);\n }\n }, []);\n\n const analyzeNow = useCallback(() => {\n void run(true);\n }, [run]);\n\n useEffect(() => {\n const action = decideAutoAction({\n enabled,\n signature,\n lastSignature: lastSignature.current,\n });\n\n if (action === \"skip\") return;\n\n void run(false);\n }, [signature, run, enabled]);\n\n return {\n result,\n analyzing,\n analyzedKeyphrase,\n analyzeNow,\n };\n}\n"],"mappings":";AAEA,SAAS,aAAa,WAAW,QAAQ,gBAAgB;AACzD,SAAS,mBAAmB;AAE5B,SAAS,wBAAwB;AACjC,SAAS,0BAA0B;AAgB5B,SAAS,YAAY,EAAE,UAAU,WAAW,kBAAkB,UAAU,KAAK,GAAuC;AACzH,QAAM,CAAC,QAAQ,SAAS,IAAI,SAAgC,IAAI;AAChE,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,KAAK;AAChD,QAAM,CAAC,mBAAmB,oBAAoB,IAAI,SAAwB,IAAI;AAE9E,QAAM,cAAc,OAAO,QAAQ;AACnC,cAAY,UAAU;AACtB,QAAM,eAAe,OAAO,SAAS;AACrC,eAAa,UAAU;AACvB,QAAM,aAAa,OAAO,gBAAgB;AAC1C,aAAW,UAAU;AAErB,QAAM,gBAAgB,OAAsB,IAAI;AAChD,QAAM,SAAS,OAAO,CAAC;AAEvB,QAAM,MAAM,YAAY,OAAO,SAAkB;AAC/C,UAAM,QAAQ,EAAE,OAAO;AAEvB,kBAAc,UAAU,aAAa;AACrC,iBAAa,IAAI;AAEjB,QAAI;AACF,YAAM,QAAQ,MAAM,YAAY,QAAQ,EAAE,KAAK,CAAC;AAChD,YAAM,mBAAmB,MAAM,QAAQ,WAAW,OAAO;AACzD,UAAI,UAAU,OAAO;AAAS;AAE9B,gBAAU,YAAY,KAAK,CAAC;AAC5B,2BAAqB,MAAM,SAAS;AAAA,IACtC,UAAE;AACA,UAAI,UAAU,OAAO;AAAS,qBAAa,KAAK;AAAA,IAClD;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,aAAa,YAAY,MAAM;AACnC,SAAK,IAAI,IAAI;AAAA,EACf,GAAG,CAAC,GAAG,CAAC;AAER,YAAU,MAAM;AACd,UAAM,SAAS,iBAAiB;AAAA,MAC9B;AAAA,MACA;AAAA,MACA,eAAe,cAAc;AAAA,IAC/B,CAAC;AAED,QAAI,WAAW;AAAQ;AAEvB,SAAK,IAAI,KAAK;AAAA,EAChB,GAAG,CAAC,WAAW,KAAK,OAAO,CAAC;AAE5B,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;","names":[]}
@@ -0,0 +1,22 @@
1
+ import type { AnalysisInput } from "../../engine/types/analysis";
2
+ import type { ExtractorFn, SeoFieldPaths } from "../../types/config";
3
+ export interface LiveDocArgs {
4
+ collectionSlug: string;
5
+ fields: SeoFieldPaths;
6
+ site: {
7
+ name: string;
8
+ baseUrl: string;
9
+ };
10
+ keyphrase: string;
11
+ enabled?: boolean;
12
+ override?: ExtractorFn;
13
+ }
14
+ export interface UseLiveDocumentResult {
15
+ signature: string;
16
+ getInput: (opts?: {
17
+ live?: boolean;
18
+ }) => Promise<AnalysisInput>;
19
+ invalidateMedia: () => void;
20
+ }
21
+ export declare function useLiveDocument({ collectionSlug, fields, site, keyphrase, enabled, override }: LiveDocArgs): UseLiveDocumentResult;
22
+ //# sourceMappingURL=useLiveDocument.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useLiveDocument.d.ts","sourceRoot":"","sources":["../../../src/components/SeoDrawer/useLiveDocument.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAKrE,MAAM,WAAW,WAAW;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,aAAa,CAAC;IACtB,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,WAAW,CAAC;CACxB;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;IAChE,eAAe,EAAE,MAAM,IAAI,CAAC;CAC7B;AAED,wBAAgB,eAAe,CAAC,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,OAAc,EAAE,QAAQ,EAAE,EAAE,WAAW,GAAG,qBAAqB,CAsFzI"}
@@ -0,0 +1,85 @@
1
+ "use client";
2
+ import { useAllFormFields, useConfig, useDebounce, useLocale } from "@payloadcms/ui";
3
+ import { reduceFieldsToValues } from "payload/shared";
4
+ import { useCallback, useMemo, useRef } from "react";
5
+ import { createMediaResolver } from "../../content/uploads/media-resolver";
6
+ import { buildAnalysisInput } from "./build-analysis-input";
7
+ const DEBOUNCE_MS = 1e3;
8
+ function useLiveDocument({ collectionSlug, fields, site, keyphrase, enabled = true, override }) {
9
+ const [formFields] = useAllFormFields();
10
+ const locale = useLocale();
11
+ const { config, getEntityConfig } = useConfig();
12
+ const debouncedFields = useDebounce(formFields, DEBOUNCE_MS);
13
+ const debouncedKeyphrase = useDebounce(keyphrase, DEBOUNCE_MS);
14
+ const resolver = useMemo(() => createMediaResolver(config.routes.api), [config.routes.api]);
15
+ const schemaFields = useMemo(() => {
16
+ const entity = getEntityConfig({
17
+ collectionSlug
18
+ });
19
+ return entity?.fields ?? [];
20
+ }, [getEntityConfig, collectionSlug]);
21
+ const walkCtx = useMemo(
22
+ () => ({
23
+ isUploadCollection: (slug) => Boolean(config.collections?.find((c) => c.slug === slug)?.upload),
24
+ blocksBySlug: { ...config.blocksMap }
25
+ }),
26
+ [config]
27
+ );
28
+ const values = useMemo(() => enabled ? reduceFieldsToValues(debouncedFields, true) : {}, [enabled, debouncedFields]);
29
+ const signature = useMemo(
30
+ () => JSON.stringify({
31
+ values,
32
+ keyphrase: debouncedKeyphrase,
33
+ locale: locale?.code ?? null
34
+ }),
35
+ [values, debouncedKeyphrase, locale]
36
+ );
37
+ const liveRef = useRef({
38
+ formFields,
39
+ values,
40
+ keyphrase,
41
+ debouncedKeyphrase,
42
+ locale,
43
+ fields,
44
+ site,
45
+ override,
46
+ schemaFields,
47
+ walkCtx,
48
+ resolver
49
+ });
50
+ liveRef.current = {
51
+ formFields,
52
+ values,
53
+ keyphrase,
54
+ debouncedKeyphrase,
55
+ locale,
56
+ fields,
57
+ site,
58
+ override,
59
+ schemaFields,
60
+ walkCtx,
61
+ resolver
62
+ };
63
+ const getInput = useCallback(async ({ live = false } = {}) => {
64
+ const s = liveRef.current;
65
+ const inputValues = live ? reduceFieldsToValues(s.formFields, true) : s.values;
66
+ return buildAnalysisInput({
67
+ values: inputValues,
68
+ locale: s.locale,
69
+ payloadLocale: s.locale?.code,
70
+ keyphrase: live ? s.keyphrase : s.debouncedKeyphrase,
71
+ fields: s.fields,
72
+ site: s.site,
73
+ schemaFields: s.schemaFields,
74
+ walkCtx: s.walkCtx,
75
+ resolver: s.resolver,
76
+ override: s.override
77
+ });
78
+ }, []);
79
+ const invalidateMedia = useCallback(() => liveRef.current.resolver.invalidate(), []);
80
+ return { signature, getInput, invalidateMedia };
81
+ }
82
+ export {
83
+ useLiveDocument
84
+ };
85
+ //# sourceMappingURL=useLiveDocument.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/SeoDrawer/useLiveDocument.ts"],"sourcesContent":["\"use client\";\n\nimport { useAllFormFields, useConfig, useDebounce, useLocale } from \"@payloadcms/ui\";\nimport type { ClientField } from \"payload\";\nimport { reduceFieldsToValues } from \"payload/shared\";\nimport { useCallback, useMemo, useRef } from \"react\";\nimport { createMediaResolver } 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 { buildAnalysisInput } from \"./build-analysis-input\";\n\nconst DEBOUNCE_MS = 1000;\n\nexport interface LiveDocArgs {\n collectionSlug: string;\n fields: SeoFieldPaths;\n site: { name: string; baseUrl: string };\n keyphrase: string;\n enabled?: boolean;\n override?: ExtractorFn;\n}\n\nexport interface UseLiveDocumentResult {\n signature: string;\n getInput: (opts?: { live?: boolean }) => Promise<AnalysisInput>;\n invalidateMedia: () => void;\n}\n\nexport function useLiveDocument({ collectionSlug, fields, site, keyphrase, enabled = true, override }: LiveDocArgs): UseLiveDocumentResult {\n const [formFields] = useAllFormFields();\n const locale = useLocale();\n const { config, getEntityConfig } = useConfig();\n\n const debouncedFields = useDebounce(formFields, DEBOUNCE_MS);\n const debouncedKeyphrase = useDebounce(keyphrase, DEBOUNCE_MS);\n\n const resolver = useMemo(() => createMediaResolver(config.routes.api), [config.routes.api]);\n\n const schemaFields = useMemo<ClientField[]>(() => {\n const entity = getEntityConfig({\n collectionSlug: collectionSlug as never,\n }) as { fields?: ClientField[] } | undefined;\n\n return entity?.fields ?? [];\n }, [getEntityConfig, collectionSlug]);\n\n const walkCtx = useMemo<UploadWalkContext>(\n () => ({\n isUploadCollection: (slug) => Boolean(config.collections?.find((c) => c.slug === slug)?.upload),\n blocksBySlug: { ...config.blocksMap },\n }),\n [config]\n );\n\n const values = useMemo<Record<string, unknown>>(() => (enabled ? (reduceFieldsToValues(debouncedFields, true) as Record<string, unknown>) : {}), [enabled, debouncedFields]);\n\n const signature = useMemo(\n () =>\n JSON.stringify({\n values,\n keyphrase: debouncedKeyphrase,\n locale: locale?.code ?? null,\n }),\n [values, debouncedKeyphrase, locale]\n );\n\n const liveRef = useRef({\n formFields,\n values,\n keyphrase,\n debouncedKeyphrase,\n locale,\n fields,\n site,\n override,\n schemaFields,\n walkCtx,\n resolver,\n });\n liveRef.current = {\n formFields,\n values,\n keyphrase,\n debouncedKeyphrase,\n locale,\n fields,\n site,\n override,\n schemaFields,\n walkCtx,\n resolver,\n };\n\n const getInput = useCallback(async ({ live = false }: { live?: boolean } = {}): Promise<AnalysisInput> => {\n const s = liveRef.current;\n const inputValues = live ? (reduceFieldsToValues(s.formFields, true) as Record<string, unknown>) : s.values;\n\n return buildAnalysisInput({\n values: inputValues,\n locale: s.locale,\n payloadLocale: s.locale?.code,\n keyphrase: live ? s.keyphrase : s.debouncedKeyphrase,\n fields: s.fields,\n site: s.site,\n schemaFields: s.schemaFields,\n walkCtx: s.walkCtx,\n resolver: s.resolver,\n override: s.override,\n });\n }, []);\n\n const invalidateMedia = useCallback(() => liveRef.current.resolver.invalidate(), []);\n\n return { signature, getInput, invalidateMedia };\n}\n"],"mappings":";AAEA,SAAS,kBAAkB,WAAW,aAAa,iBAAiB;AAEpE,SAAS,4BAA4B;AACrC,SAAS,aAAa,SAAS,cAAc;AAC7C,SAAS,2BAA2B;AAIpC,SAAS,0BAA0B;AAEnC,MAAM,cAAc;AAiBb,SAAS,gBAAgB,EAAE,gBAAgB,QAAQ,MAAM,WAAW,UAAU,MAAM,SAAS,GAAuC;AACzI,QAAM,CAAC,UAAU,IAAI,iBAAiB;AACtC,QAAM,SAAS,UAAU;AACzB,QAAM,EAAE,QAAQ,gBAAgB,IAAI,UAAU;AAE9C,QAAM,kBAAkB,YAAY,YAAY,WAAW;AAC3D,QAAM,qBAAqB,YAAY,WAAW,WAAW;AAE7D,QAAM,WAAW,QAAQ,MAAM,oBAAoB,OAAO,OAAO,GAAG,GAAG,CAAC,OAAO,OAAO,GAAG,CAAC;AAE1F,QAAM,eAAe,QAAuB,MAAM;AAChD,UAAM,SAAS,gBAAgB;AAAA,MAC7B;AAAA,IACF,CAAC;AAED,WAAO,QAAQ,UAAU,CAAC;AAAA,EAC5B,GAAG,CAAC,iBAAiB,cAAc,CAAC;AAEpC,QAAM,UAAU;AAAA,IACd,OAAO;AAAA,MACL,oBAAoB,CAAC,SAAS,QAAQ,OAAO,aAAa,KAAK,CAAC,MAAM,EAAE,SAAS,IAAI,GAAG,MAAM;AAAA,MAC9F,cAAc,EAAE,GAAG,OAAO,UAAU;AAAA,IACtC;AAAA,IACA,CAAC,MAAM;AAAA,EACT;AAEA,QAAM,SAAS,QAAiC,MAAO,UAAW,qBAAqB,iBAAiB,IAAI,IAAgC,CAAC,GAAI,CAAC,SAAS,eAAe,CAAC;AAE3K,QAAM,YAAY;AAAA,IAChB,MACE,KAAK,UAAU;AAAA,MACb;AAAA,MACA,WAAW;AAAA,MACX,QAAQ,QAAQ,QAAQ;AAAA,IAC1B,CAAC;AAAA,IACH,CAAC,QAAQ,oBAAoB,MAAM;AAAA,EACrC;AAEA,QAAM,UAAU,OAAO;AAAA,IACrB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACD,UAAQ,UAAU;AAAA,IAChB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,QAAM,WAAW,YAAY,OAAO,EAAE,OAAO,MAAM,IAAwB,CAAC,MAA8B;AACxG,UAAM,IAAI,QAAQ;AAClB,UAAM,cAAc,OAAQ,qBAAqB,EAAE,YAAY,IAAI,IAAgC,EAAE;AAErG,WAAO,mBAAmB;AAAA,MACxB,QAAQ;AAAA,MACR,QAAQ,EAAE;AAAA,MACV,eAAe,EAAE,QAAQ;AAAA,MACzB,WAAW,OAAO,EAAE,YAAY,EAAE;AAAA,MAClC,QAAQ,EAAE;AAAA,MACV,MAAM,EAAE;AAAA,MACR,cAAc,EAAE;AAAA,MAChB,SAAS,EAAE;AAAA,MACX,UAAU,EAAE;AAAA,MACZ,UAAU,EAAE;AAAA,IACd,CAAC;AAAA,EACH,GAAG,CAAC,CAAC;AAEL,QAAM,kBAAkB,YAAY,MAAM,QAAQ,QAAQ,SAAS,WAAW,GAAG,CAAC,CAAC;AAEnF,SAAO,EAAE,WAAW,UAAU,gBAAgB;AAChD;","names":[]}
@@ -0,0 +1,4 @@
1
+ export declare const statusVar: (props?: ({
2
+ status?: "good" | "warn" | "bad" | null | undefined;
3
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
4
+ //# sourceMappingURL=variants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"variants.d.ts","sourceRoot":"","sources":["../../../src/components/SeoDrawer/variants.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,SAAS;;8EAQpB,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { cva } from "class-variance-authority";
2
+ const statusVar = cva("", {
3
+ variants: {
4
+ status: {
5
+ good: "[--seo-c:var(--color-seo-good)]",
6
+ warn: "[--seo-c:var(--color-seo-warn)]",
7
+ bad: "[--seo-c:var(--color-seo-bad)]"
8
+ }
9
+ }
10
+ });
11
+ export {
12
+ statusVar
13
+ };
14
+ //# sourceMappingURL=variants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/SeoDrawer/variants.ts"],"sourcesContent":["import { cva } from \"class-variance-authority\";\n\nexport const statusVar = cva(\"\", {\n variants: {\n status: {\n good: \"[--seo-c:var(--color-seo-good)]\",\n warn: \"[--seo-c:var(--color-seo-warn)]\",\n bad: \"[--seo-c:var(--color-seo-bad)]\",\n },\n },\n});\n"],"mappings":"AAAA,SAAS,WAAW;AAEb,MAAM,YAAY,IAAI,IAAI;AAAA,EAC/B,UAAU;AAAA,IACR,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,MACN,KAAK;AAAA,IACP;AAAA,EACF;AACF,CAAC;","names":[]}
@@ -0,0 +1,7 @@
1
+ import type { LucideIcon } from "lucide-react";
2
+ type CheckIconsMap = Record<string, LucideIcon> & {
3
+ _default: LucideIcon;
4
+ };
5
+ export declare const CHECK_ICONS: CheckIconsMap;
6
+ export {};
7
+ //# sourceMappingURL=icons.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icons.d.ts","sourceRoot":"","sources":["../../src/components/icons.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,KAAK,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG;IAChD,QAAQ,EAAE,UAAU,CAAC;CACtB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,aAiCzB,CAAC"}
@@ -0,0 +1,40 @@
1
+ "use client";
2
+ import { AlignLeft, Crosshair, Mail, Link2, BarChart3, Type, ArrowRight, Image as ImageIcon, Heading1, Ruler, ListOrdered, Clock, FileText, Film } from "lucide-react";
3
+ const CHECK_ICONS = {
4
+ // keyphrase (SeoAssessor)
5
+ introductionKeyword: AlignLeft,
6
+ keyphraseLength: Crosshair,
7
+ keyphraseDensity: Crosshair,
8
+ metaDescriptionKeyword: Mail,
9
+ subheadingsKeyword: Type,
10
+ textCompetingLinks: Link2,
11
+ imageKeyphrase: ImageIcon,
12
+ keyphraseInSEOTitle: Type,
13
+ slugKeyword: ArrowRight,
14
+ keyphraseDistribution: BarChart3,
15
+ // on-page (SeoAssessor)
16
+ textLength: AlignLeft,
17
+ metaDescriptionLength: Mail,
18
+ titleWidth: Ruler,
19
+ images: ImageIcon,
20
+ externalLinks: Link2,
21
+ internalLinks: Link2,
22
+ singleH1: Heading1,
23
+ // readability (ContentAssessor)
24
+ fleschReadingEase: FileText,
25
+ subheadingsTooLong: Heading1,
26
+ textParagraphTooLong: AlignLeft,
27
+ textSentenceLength: AlignLeft,
28
+ textTransitionWords: ArrowRight,
29
+ passiveVoice: FileText,
30
+ sentenceBeginnings: AlignLeft,
31
+ listPresence: ListOrdered,
32
+ // vitals
33
+ readingTime: Clock,
34
+ videoCount: Film,
35
+ _default: FileText
36
+ };
37
+ export {
38
+ CHECK_ICONS
39
+ };
40
+ //# sourceMappingURL=icons.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components/icons.tsx"],"sourcesContent":["\"use client\";\n\nimport { AlignLeft, Crosshair, Mail, Link2, BarChart3, Type, ArrowRight, Image as ImageIcon, Heading1, Ruler, ListOrdered, Clock, FileText, Film } from \"lucide-react\";\nimport type { LucideIcon } from \"lucide-react\";\n\ntype CheckIconsMap = Record<string, LucideIcon> & {\n _default: LucideIcon;\n};\n\nexport const CHECK_ICONS: CheckIconsMap = {\n // keyphrase (SeoAssessor)\n introductionKeyword: AlignLeft,\n keyphraseLength: Crosshair,\n keyphraseDensity: Crosshair,\n metaDescriptionKeyword: Mail,\n subheadingsKeyword: Type,\n textCompetingLinks: Link2,\n imageKeyphrase: ImageIcon,\n keyphraseInSEOTitle: Type,\n slugKeyword: ArrowRight,\n keyphraseDistribution: BarChart3,\n // on-page (SeoAssessor)\n textLength: AlignLeft,\n metaDescriptionLength: Mail,\n titleWidth: Ruler,\n images: ImageIcon,\n externalLinks: Link2,\n internalLinks: Link2,\n singleH1: Heading1,\n // readability (ContentAssessor)\n fleschReadingEase: FileText,\n subheadingsTooLong: Heading1,\n textParagraphTooLong: AlignLeft,\n textSentenceLength: AlignLeft,\n textTransitionWords: ArrowRight,\n passiveVoice: FileText,\n sentenceBeginnings: AlignLeft,\n listPresence: ListOrdered,\n // vitals\n readingTime: Clock,\n videoCount: Film,\n _default: FileText,\n};\n"],"mappings":";AAEA,SAAS,WAAW,WAAW,MAAM,OAAO,WAAW,MAAM,YAAY,SAAS,WAAW,UAAU,OAAO,aAAa,OAAO,UAAU,YAAY;AAOjJ,MAAM,cAA6B;AAAA;AAAA,EAExC,qBAAqB;AAAA,EACrB,iBAAiB;AAAA,EACjB,kBAAkB;AAAA,EAClB,wBAAwB;AAAA,EACxB,oBAAoB;AAAA,EACpB,oBAAoB;AAAA,EACpB,gBAAgB;AAAA,EAChB,qBAAqB;AAAA,EACrB,aAAa;AAAA,EACb,uBAAuB;AAAA;AAAA,EAEvB,YAAY;AAAA,EACZ,uBAAuB;AAAA,EACvB,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR,eAAe;AAAA,EACf,eAAe;AAAA,EACf,UAAU;AAAA;AAAA,EAEV,mBAAmB;AAAA,EACnB,oBAAoB;AAAA,EACpB,sBAAsB;AAAA,EACtB,oBAAoB;AAAA,EACpB,qBAAqB;AAAA,EACrB,cAAc;AAAA,EACd,oBAAoB;AAAA,EACpB,cAAc;AAAA;AAAA,EAEd,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,UAAU;AACZ;","names":[]}
@@ -0,0 +1,4 @@
1
+ import type { SeoPluginConfig } from "./types/config";
2
+ export declare function setPluginConfig(config: SeoPluginConfig): void;
3
+ export declare function getPluginConfig(): SeoPluginConfig;
4
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAItD,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI,CAE7D;AACD,wBAAgB,eAAe,IAAI,eAAe,CAIjD"}
package/dist/config.js ADDED
@@ -0,0 +1,15 @@
1
+ import { PLUGIN_NAME } from "./constants";
2
+ let pluginConfig = null;
3
+ function setPluginConfig(config) {
4
+ pluginConfig = config;
5
+ }
6
+ function getPluginConfig() {
7
+ if (!pluginConfig)
8
+ throw new Error(`[${PLUGIN_NAME}] config accessed before initialization`);
9
+ return pluginConfig;
10
+ }
11
+ export {
12
+ getPluginConfig,
13
+ setPluginConfig
14
+ };
15
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/config.ts"],"sourcesContent":["import { PLUGIN_NAME } from \"./constants\";\nimport type { SeoPluginConfig } from \"./types/config\";\n\nlet pluginConfig: SeoPluginConfig | null = null;\n\nexport function setPluginConfig(config: SeoPluginConfig): void {\n pluginConfig = config;\n}\nexport function getPluginConfig(): SeoPluginConfig {\n if (!pluginConfig) throw new Error(`[${PLUGIN_NAME}] config accessed before initialization`);\n\n return pluginConfig;\n}\n"],"mappings":"AAAA,SAAS,mBAAmB;AAG5B,IAAI,eAAuC;AAEpC,SAAS,gBAAgB,QAA+B;AAC7D,iBAAe;AACjB;AACO,SAAS,kBAAmC;AACjD,MAAI,CAAC;AAAc,UAAM,IAAI,MAAM,IAAI,WAAW,yCAAyC;AAE3F,SAAO;AACT;","names":[]}
@@ -0,0 +1,8 @@
1
+ export declare const CHECK_IDS: {
2
+ readonly keyphrase: readonly ["introductionKeyword", "keyphraseLength", "keyphraseDensity", "metaDescriptionKeyword", "subheadingsKeyword", "textCompetingLinks", "imageKeyphrase", "keyphraseInSEOTitle", "slugKeyword", "functionWordsInKeyphrase", "keyphraseDistribution"];
3
+ readonly onPage: readonly ["textLength", "metaDescriptionLength", "titleWidth", "images", "externalLinks", "internalLinks", "singleH1"];
4
+ readonly readability: readonly ["subheadingsTooLong", "textParagraphTooLong", "textSentenceLength", "textTransitionWords", "passiveVoice", "sentenceBeginnings", "fleschReadingEase"];
5
+ };
6
+ export type CheckTab = keyof typeof CHECK_IDS;
7
+ export type CheckId = (typeof CHECK_IDS)[CheckTab][number];
8
+ //# sourceMappingURL=checkIds.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkIds.d.ts","sourceRoot":"","sources":["../../src/constants/checkIds.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS;;;;CAgBZ,CAAC;AAEX,MAAM,MAAM,QAAQ,GAAG,MAAM,OAAO,SAAS,CAAC;AAC9C,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC"}
@@ -0,0 +1,21 @@
1
+ const CHECK_IDS = {
2
+ keyphrase: [
3
+ "introductionKeyword",
4
+ "keyphraseLength",
5
+ "keyphraseDensity",
6
+ "metaDescriptionKeyword",
7
+ "subheadingsKeyword",
8
+ "textCompetingLinks",
9
+ "imageKeyphrase",
10
+ "keyphraseInSEOTitle",
11
+ "slugKeyword",
12
+ "functionWordsInKeyphrase",
13
+ "keyphraseDistribution"
14
+ ],
15
+ onPage: ["textLength", "metaDescriptionLength", "titleWidth", "images", "externalLinks", "internalLinks", "singleH1"],
16
+ readability: ["subheadingsTooLong", "textParagraphTooLong", "textSentenceLength", "textTransitionWords", "passiveVoice", "sentenceBeginnings", "fleschReadingEase"]
17
+ };
18
+ export {
19
+ CHECK_IDS
20
+ };
21
+ //# sourceMappingURL=checkIds.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/constants/checkIds.ts"],"sourcesContent":["export const CHECK_IDS = {\n keyphrase: [\n \"introductionKeyword\",\n \"keyphraseLength\",\n \"keyphraseDensity\",\n \"metaDescriptionKeyword\",\n \"subheadingsKeyword\",\n \"textCompetingLinks\",\n \"imageKeyphrase\",\n \"keyphraseInSEOTitle\",\n \"slugKeyword\",\n \"functionWordsInKeyphrase\",\n \"keyphraseDistribution\",\n ],\n onPage: [\"textLength\", \"metaDescriptionLength\", \"titleWidth\", \"images\", \"externalLinks\", \"internalLinks\", \"singleH1\"],\n readability: [\"subheadingsTooLong\", \"textParagraphTooLong\", \"textSentenceLength\", \"textTransitionWords\", \"passiveVoice\", \"sentenceBeginnings\", \"fleschReadingEase\"],\n} as const;\n\nexport type CheckTab = keyof typeof CHECK_IDS;\nexport type CheckId = (typeof CHECK_IDS)[CheckTab][number];\n"],"mappings":"AAAO,MAAM,YAAY;AAAA,EACvB,WAAW;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,QAAQ,CAAC,cAAc,yBAAyB,cAAc,UAAU,iBAAiB,iBAAiB,UAAU;AAAA,EACpH,aAAa,CAAC,sBAAsB,wBAAwB,sBAAsB,uBAAuB,gBAAgB,sBAAsB,mBAAmB;AACpK;","names":[]}
@@ -0,0 +1,5 @@
1
+ export declare const PLUGIN_NAME = "payload-plugin-seo";
2
+ export declare const PKG = "@focus-reactive/payload-plugin-seo";
3
+ export declare const DEFAULT_LOCALES: readonly ["en"];
4
+ export * from "./statuses";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,uBAAuB,CAAC;AAChD,eAAO,MAAM,GAAG,uCAAuC,CAAC;AAExD,eAAO,MAAM,eAAe,iBAAkB,CAAC;AAE/C,cAAc,YAAY,CAAC"}
@@ -0,0 +1,10 @@
1
+ const PLUGIN_NAME = "payload-plugin-seo";
2
+ const PKG = "@focus-reactive/payload-plugin-seo";
3
+ const DEFAULT_LOCALES = ["en"];
4
+ export * from "./statuses";
5
+ export {
6
+ DEFAULT_LOCALES,
7
+ PKG,
8
+ PLUGIN_NAME
9
+ };
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/constants/index.ts"],"sourcesContent":["export const PLUGIN_NAME = \"payload-plugin-seo\";\nexport const PKG = \"@focus-reactive/payload-plugin-seo\";\n\nexport const DEFAULT_LOCALES = [\"en\"] as const;\n\nexport * from \"./statuses\";\n"],"mappings":"AAAO,MAAM,cAAc;AACpB,MAAM,MAAM;AAEZ,MAAM,kBAAkB,CAAC,IAAI;AAEpC,cAAc;","names":[]}
@@ -0,0 +1,3 @@
1
+ import type { Status } from "../engine/types/analysis";
2
+ export declare const STATUS_PILL_LABEL: Record<Status, string>;
3
+ //# sourceMappingURL=statuses.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"statuses.d.ts","sourceRoot":"","sources":["../../src/constants/statuses.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAEvD,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAIpD,CAAC"}
@@ -0,0 +1,9 @@
1
+ const STATUS_PILL_LABEL = {
2
+ good: "Good",
3
+ warn: "Needs work",
4
+ bad: "Problem"
5
+ };
6
+ export {
7
+ STATUS_PILL_LABEL
8
+ };
9
+ //# sourceMappingURL=statuses.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/constants/statuses.ts"],"sourcesContent":["import type { Status } from \"../engine/types/analysis\";\n\nexport const STATUS_PILL_LABEL: Record<Status, string> = {\n good: \"Good\",\n warn: \"Needs work\",\n bad: \"Problem\",\n};\n"],"mappings":"AAEO,MAAM,oBAA4C;AAAA,EACvD,MAAM;AAAA,EACN,MAAM;AAAA,EACN,KAAK;AACP;","names":[]}
@@ -0,0 +1,3 @@
1
+ import type { SeoFieldPaths } from "../types/config";
2
+ export declare function extractContent(data: Record<string, unknown>, fields: SeoFieldPaths): string;
3
+ //# sourceMappingURL=extractContent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extractContent.d.ts","sourceRoot":"","sources":["../../src/content/extractContent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAkBrD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,aAAa,GAAG,MAAM,CAe3F"}
@@ -0,0 +1,31 @@
1
+ import { lexicalToHtml } from "./lexicalToHtml";
2
+ import { walkValue } from "./walkValue";
3
+ function getByPath(data, path) {
4
+ return path.split(".").reduce((acc, key) => {
5
+ if (acc && typeof acc === "object" && key in acc) {
6
+ return acc[key];
7
+ }
8
+ return void 0;
9
+ }, data);
10
+ }
11
+ function escapeHtml(s) {
12
+ return s.replace(/&/gu, "&amp;").replace(/</gu, "&lt;").replace(/>/gu, "&gt;");
13
+ }
14
+ function extractContent(data, fields) {
15
+ if (!fields.content)
16
+ return "";
17
+ const value = getByPath(data, fields.content);
18
+ if (value === void 0 || value === null)
19
+ return "";
20
+ return walkValue(value).map((fragment) => {
21
+ if (fragment.kind === "lexical")
22
+ return lexicalToHtml(fragment.value);
23
+ if (fragment.kind === "html")
24
+ return fragment.value;
25
+ return `<p>${escapeHtml(fragment.value)}</p>`;
26
+ }).filter(Boolean).join("\n");
27
+ }
28
+ export {
29
+ extractContent
30
+ };
31
+ //# sourceMappingURL=extractContent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/content/extractContent.ts"],"sourcesContent":["import type { SeoFieldPaths } from \"../types/config\";\nimport { lexicalToHtml } from \"./lexicalToHtml\";\nimport { walkValue } from \"./walkValue\";\n\nfunction getByPath(data: Record<string, unknown>, path: string): unknown {\n return path.split(\".\").reduce<unknown>((acc, key) => {\n if (acc && typeof acc === \"object\" && key in (acc as Record<string, unknown>)) {\n return (acc as Record<string, unknown>)[key];\n }\n\n return undefined;\n }, data);\n}\n\nfunction escapeHtml(s: string): string {\n return s.replace(/&/gu, \"&amp;\").replace(/</gu, \"&lt;\").replace(/>/gu, \"&gt;\");\n}\n\nexport function extractContent(data: Record<string, unknown>, fields: SeoFieldPaths): string {\n if (!fields.content) return \"\";\n\n const value = getByPath(data, fields.content);\n if (value === undefined || value === null) return \"\";\n\n return walkValue(value)\n .map((fragment) => {\n if (fragment.kind === \"lexical\") return lexicalToHtml(fragment.value);\n if (fragment.kind === \"html\") return fragment.value;\n\n return `<p>${escapeHtml(fragment.value)}</p>`;\n })\n .filter(Boolean)\n .join(\"\\n\");\n}\n"],"mappings":"AACA,SAAS,qBAAqB;AAC9B,SAAS,iBAAiB;AAE1B,SAAS,UAAU,MAA+B,MAAuB;AACvE,SAAO,KAAK,MAAM,GAAG,EAAE,OAAgB,CAAC,KAAK,QAAQ;AACnD,QAAI,OAAO,OAAO,QAAQ,YAAY,OAAQ,KAAiC;AAC7E,aAAQ,IAAgC,GAAG;AAAA,IAC7C;AAEA,WAAO;AAAA,EACT,GAAG,IAAI;AACT;AAEA,SAAS,WAAW,GAAmB;AACrC,SAAO,EAAE,QAAQ,OAAO,OAAO,EAAE,QAAQ,OAAO,MAAM,EAAE,QAAQ,OAAO,MAAM;AAC/E;AAEO,SAAS,eAAe,MAA+B,QAA+B;AAC3F,MAAI,CAAC,OAAO;AAAS,WAAO;AAE5B,QAAM,QAAQ,UAAU,MAAM,OAAO,OAAO;AAC5C,MAAI,UAAU,UAAa,UAAU;AAAM,WAAO;AAElD,SAAO,UAAU,KAAK,EACnB,IAAI,CAAC,aAAa;AACjB,QAAI,SAAS,SAAS;AAAW,aAAO,cAAc,SAAS,KAAK;AACpE,QAAI,SAAS,SAAS;AAAQ,aAAO,SAAS;AAE9C,WAAO,MAAM,WAAW,SAAS,KAAK,CAAC;AAAA,EACzC,CAAC,EACA,OAAO,OAAO,EACd,KAAK,IAAI;AACd;","names":[]}
@@ -0,0 +1,6 @@
1
+ type LexicalValue = {
2
+ root?: unknown;
3
+ } | null | undefined;
4
+ export declare function lexicalToHtml(value: LexicalValue): string;
5
+ export {};
6
+ //# sourceMappingURL=lexicalToHtml.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lexicalToHtml.d.ts","sourceRoot":"","sources":["../../src/content/lexicalToHtml.ts"],"names":[],"mappings":"AAEA,KAAK,YAAY,GAAG;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,CAAC;AAE1D,wBAAgB,aAAa,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAUzD"}
@@ -0,0 +1,15 @@
1
+ import { convertLexicalToHTML } from "@payloadcms/richtext-lexical/html";
2
+ function lexicalToHtml(value) {
3
+ if (!value || typeof value !== "object" || !("root" in value) || !value.root) {
4
+ return "";
5
+ }
6
+ try {
7
+ return convertLexicalToHTML({ data: value });
8
+ } catch {
9
+ return "";
10
+ }
11
+ }
12
+ export {
13
+ lexicalToHtml
14
+ };
15
+ //# sourceMappingURL=lexicalToHtml.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/content/lexicalToHtml.ts"],"sourcesContent":["import { convertLexicalToHTML } from \"@payloadcms/richtext-lexical/html\";\n\ntype LexicalValue = { root?: unknown } | null | undefined;\n\nexport function lexicalToHtml(value: LexicalValue): string {\n if (!value || typeof value !== \"object\" || !(\"root\" in value) || !value.root) {\n return \"\";\n }\n\n try {\n return convertLexicalToHTML({ data: value as { root: never } });\n } catch {\n return \"\";\n }\n}\n"],"mappings":"AAAA,SAAS,4BAA4B;AAI9B,SAAS,cAAc,OAA6B;AACzD,MAAI,CAAC,SAAS,OAAO,UAAU,YAAY,EAAE,UAAU,UAAU,CAAC,MAAM,MAAM;AAC5E,WAAO;AAAA,EACT;AAEA,MAAI;AACF,WAAO,qBAAqB,EAAE,MAAM,MAAyB,CAAC;AAAA,EAChE,QAAQ;AACN,WAAO;AAAA,EACT;AACF;","names":[]}
@@ -0,0 +1,5 @@
1
+ import type { ClientField } from "payload";
2
+ import type { UploadWalkContext } from "./transform-upload-values";
3
+ import type { UploadRef } from "./types";
4
+ export declare function collectUploadRefs(values: Record<string, unknown>, fields: ClientField[], ctx: UploadWalkContext): UploadRef[];
5
+ //# sourceMappingURL=collect-upload-refs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collect-upload-refs.d.ts","sourceRoot":"","sources":["../../../src/content/uploads/collect-upload-refs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAEnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEzC,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE,iBAAiB,GAAG,SAAS,EAAE,CAe7H"}
@@ -0,0 +1,19 @@
1
+ import { transformUploadValues } from "./transform-upload-values";
2
+ import { uploadKey } from "./types";
3
+ function collectUploadRefs(values, fields, ctx) {
4
+ const refs = [];
5
+ const seen = /* @__PURE__ */ new Set();
6
+ transformUploadValues(values, fields, ctx, (ref) => {
7
+ const key = uploadKey(ref);
8
+ if (!seen.has(key)) {
9
+ seen.add(key);
10
+ refs.push(ref);
11
+ }
12
+ return void 0;
13
+ });
14
+ return refs;
15
+ }
16
+ export {
17
+ collectUploadRefs
18
+ };
19
+ //# sourceMappingURL=collect-upload-refs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/content/uploads/collect-upload-refs.ts"],"sourcesContent":["import type { ClientField } from \"payload\";\nimport { transformUploadValues } from \"./transform-upload-values\";\nimport type { UploadWalkContext } from \"./transform-upload-values\";\nimport { uploadKey } from \"./types\";\nimport type { UploadRef } from \"./types\";\n\nexport function collectUploadRefs(values: Record<string, unknown>, fields: ClientField[], ctx: UploadWalkContext): UploadRef[] {\n const refs: UploadRef[] = [];\n const seen = new Set<string>();\n\n transformUploadValues(values, fields, ctx, (ref) => {\n const key = uploadKey(ref);\n if (!seen.has(key)) {\n seen.add(key);\n refs.push(ref);\n }\n\n return undefined;\n });\n\n return refs;\n}\n"],"mappings":"AACA,SAAS,6BAA6B;AAEtC,SAAS,iBAAiB;AAGnB,SAAS,kBAAkB,QAAiC,QAAuB,KAAqC;AAC7H,QAAM,OAAoB,CAAC;AAC3B,QAAM,OAAO,oBAAI,IAAY;AAE7B,wBAAsB,QAAQ,QAAQ,KAAK,CAAC,QAAQ;AAClD,UAAM,MAAM,UAAU,GAAG;AACzB,QAAI,CAAC,KAAK,IAAI,GAAG,GAAG;AAClB,WAAK,IAAI,GAAG;AACZ,WAAK,KAAK,GAAG;AAAA,IACf;AAEA,WAAO;AAAA,EACT,CAAC;AAED,SAAO;AACT;","names":[]}
@@ -0,0 +1,5 @@
1
+ import type { ClientField } from "payload";
2
+ import type { UploadWalkContext } from "./transform-upload-values";
3
+ import type { ResolvedUploadDoc } from "./types";
4
+ export declare function hydrateUploadValues(values: Record<string, unknown>, fields: ClientField[], ctx: UploadWalkContext, resolved: Map<string, ResolvedUploadDoc>): Record<string, unknown>;
5
+ //# sourceMappingURL=hydrate-values.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hydrate-values.d.ts","sourceRoot":"","sources":["../../../src/content/uploads/hydrate-values.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAEnE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAMjD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE,iBAAiB,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAMrL"}
@@ -0,0 +1,15 @@
1
+ import { transformUploadValues } from "./transform-upload-values";
2
+ import { uploadKey } from "./types";
3
+ function isRenderable(doc) {
4
+ return typeof doc.url === "string" && typeof doc.mimeType === "string";
5
+ }
6
+ function hydrateUploadValues(values, fields, ctx, resolved) {
7
+ return transformUploadValues(values, fields, ctx, (ref) => {
8
+ const doc = resolved.get(uploadKey(ref));
9
+ return doc && isRenderable(doc) ? doc : null;
10
+ });
11
+ }
12
+ export {
13
+ hydrateUploadValues
14
+ };
15
+ //# sourceMappingURL=hydrate-values.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/content/uploads/hydrate-values.ts"],"sourcesContent":["import type { ClientField } from \"payload\";\nimport { transformUploadValues } from \"./transform-upload-values\";\nimport type { UploadWalkContext } from \"./transform-upload-values\";\nimport { uploadKey } from \"./types\";\nimport type { ResolvedUploadDoc } from \"./types\";\n\nfunction isRenderable(doc: ResolvedUploadDoc): boolean {\n return typeof doc.url === \"string\" && typeof doc.mimeType === \"string\";\n}\n\nexport function hydrateUploadValues(values: Record<string, unknown>, fields: ClientField[], ctx: UploadWalkContext, resolved: Map<string, ResolvedUploadDoc>): Record<string, unknown> {\n return transformUploadValues(values, fields, ctx, (ref) => {\n const doc = resolved.get(uploadKey(ref));\n\n return doc && isRenderable(doc) ? doc : null;\n });\n}\n"],"mappings":"AACA,SAAS,6BAA6B;AAEtC,SAAS,iBAAiB;AAG1B,SAAS,aAAa,KAAiC;AACrD,SAAO,OAAO,IAAI,QAAQ,YAAY,OAAO,IAAI,aAAa;AAChE;AAEO,SAAS,oBAAoB,QAAiC,QAAuB,KAAwB,UAAmE;AACrL,SAAO,sBAAsB,QAAQ,QAAQ,KAAK,CAAC,QAAQ;AACzD,UAAM,MAAM,SAAS,IAAI,UAAU,GAAG,CAAC;AAEvC,WAAO,OAAO,aAAa,GAAG,IAAI,MAAM;AAAA,EAC1C,CAAC;AACH;","names":[]}
@@ -0,0 +1,7 @@
1
+ import type { ResolvedUploadDoc, UploadRef } from "./types";
2
+ export interface MediaResolver {
3
+ resolve: (refs: UploadRef[], locale: string | undefined) => Promise<Map<string, ResolvedUploadDoc>>;
4
+ invalidate: () => void;
5
+ }
6
+ export declare function createMediaResolver(apiRoute: string): MediaResolver;
7
+ //# sourceMappingURL=media-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media-resolver.d.ts","sourceRoot":"","sources":["../../../src/content/uploads/media-resolver.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAE5D,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,KAAK,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC;IACpG,UAAU,EAAE,MAAM,IAAI,CAAC;CACxB;AAwBD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,CAyCnE"}