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

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 +70 -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,14 @@
1
+ export interface SeoButtonProps {
2
+ collectionSlug: string;
3
+ fields: Record<string, string>;
4
+ extractContentPath: string | null;
5
+ site: {
6
+ name: string;
7
+ baseUrl: string;
8
+ faviconUrl: string;
9
+ };
10
+ supportedLocales: string[];
11
+ }
12
+ export declare function SeoButton({ collectionSlug, fields, site, supportedLocales }: SeoButtonProps): import("react/jsx-runtime").JSX.Element;
13
+ export default SeoButton;
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/SeoButton/index.tsx"],"names":[],"mappings":"AAUA,MAAM,WAAW,cAAc;IAC7B,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5D,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B;AAcD,wBAAgB,SAAS,CAAC,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,EAAE,EAAE,cAAc,2CAuD3F;AAED,eAAe,SAAS,CAAC"}
@@ -0,0 +1,81 @@
1
+ "use client";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import { Button, useModal } from "@payloadcms/ui";
4
+ import { cva } from "class-variance-authority";
5
+ import { Gauge } from "lucide-react";
6
+ import { useCallback, useState } from "react";
7
+ import { SeoDrawer } from "../SeoDrawer";
8
+ import { isKeyphrasePending } from "../SeoDrawer/keyphrasePending";
9
+ import { useAnalysis } from "../SeoDrawer/useAnalysis";
10
+ import { useLiveDocument } from "../SeoDrawer/useLiveDocument";
11
+ const DRAWER_SLUG = "seo-analytics-drawer";
12
+ const dotVariants = cva("absolute -top-[2px] -right-[2px] w-[8px] h-[8px] rounded-full border-[1.5px] border-[var(--theme-bg)] pointer-events-none", {
13
+ variants: {
14
+ status: {
15
+ good: "bg-seo-good",
16
+ warn: "bg-seo-warn",
17
+ bad: "bg-seo-bad"
18
+ }
19
+ }
20
+ });
21
+ function SeoButton({ collectionSlug, fields, site, supportedLocales }) {
22
+ const { openModal } = useModal();
23
+ const [keyphrase, setKeyphrase] = useState("");
24
+ const [activated, setActivated] = useState(false);
25
+ const { signature, getInput, invalidateMedia } = useLiveDocument({
26
+ collectionSlug,
27
+ fields,
28
+ site: { name: site.name, baseUrl: site.baseUrl },
29
+ keyphrase,
30
+ enabled: activated
31
+ });
32
+ const { result, analyzing, analyzedKeyphrase, analyzeNow } = useAnalysis({ getInput, signature, supportedLocales, enabled: activated });
33
+ const keyphrasePending = isKeyphrasePending(keyphrase, analyzedKeyphrase);
34
+ const status = result?.overall.status ?? null;
35
+ const open = useCallback(() => {
36
+ invalidateMedia();
37
+ if (activated) {
38
+ analyzeNow();
39
+ } else {
40
+ setActivated(true);
41
+ }
42
+ openModal(DRAWER_SLUG);
43
+ }, [activated, analyzeNow, invalidateMedia, openModal]);
44
+ return /* @__PURE__ */ jsxs("span", { className: "relative inline-flex", children: [
45
+ /* @__PURE__ */ jsx(
46
+ Button,
47
+ {
48
+ "aria-label": "SEO Analytics",
49
+ buttonStyle: "none",
50
+ 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",
51
+ extraButtonProps: { title: void 0 },
52
+ icon: /* @__PURE__ */ jsx(Gauge, {}),
53
+ iconStyle: "without-border",
54
+ margin: false,
55
+ onClick: open,
56
+ size: "small",
57
+ tooltip: "SEO Analytics"
58
+ }
59
+ ),
60
+ status ? /* @__PURE__ */ jsx("span", { "aria-hidden": "true", className: dotVariants({ status }) }) : null,
61
+ /* @__PURE__ */ jsx(
62
+ SeoDrawer,
63
+ {
64
+ analyzeNow,
65
+ analyzing,
66
+ drawerSlug: DRAWER_SLUG,
67
+ keyphrase,
68
+ keyphrasePending,
69
+ result,
70
+ setKeyphrase,
71
+ site
72
+ }
73
+ )
74
+ ] });
75
+ }
76
+ var SeoButton_default = SeoButton;
77
+ export {
78
+ SeoButton,
79
+ SeoButton_default as default
80
+ };
81
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/SeoButton/index.tsx"],"sourcesContent":["\"use client\";\nimport { Button, useModal } from \"@payloadcms/ui\";\nimport { cva } from \"class-variance-authority\";\nimport { Gauge } from \"lucide-react\";\nimport { useCallback, useState } from \"react\";\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\nconst dotVariants = cva(\"absolute -top-[2px] -right-[2px] w-[8px] h-[8px] rounded-full border-[1.5px] border-[var(--theme-bg)] pointer-events-none\", {\n variants: {\n status: {\n good: \"bg-seo-good\",\n warn: \"bg-seo-warn\",\n bad: \"bg-seo-bad\",\n },\n },\n});\n\nexport function SeoButton({ collectionSlug, fields, site, supportedLocales }: SeoButtonProps) {\n const { openModal } = useModal();\n const [keyphrase, setKeyphrase] = useState(\"\");\n const [activated, setActivated] = useState(false);\n\n const { signature, getInput, invalidateMedia } = useLiveDocument({\n collectionSlug,\n fields,\n site: { name: site.name, baseUrl: site.baseUrl },\n keyphrase,\n enabled: activated,\n });\n const { result, analyzing, analyzedKeyphrase, analyzeNow } = useAnalysis({ getInput, signature, supportedLocales, enabled: activated });\n\n const keyphrasePending = isKeyphrasePending(keyphrase, analyzedKeyphrase);\n\n const status = result?.overall.status ?? null;\n\n const open = useCallback(() => {\n invalidateMedia();\n if (activated) {\n analyzeNow();\n } else {\n setActivated(true);\n }\n openModal(DRAWER_SLUG);\n }, [activated, 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 {status ? <span aria-hidden=\"true\" className={dotVariants({ status })} /> : null}\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\nexport default SeoButton;\n"],"mappings":";AA2DI,SAMU,KANV;AA1DJ,SAAS,QAAQ,gBAAgB;AACjC,SAAS,WAAW;AACpB,SAAS,aAAa;AACtB,SAAS,aAAa,gBAAgB;AACtC,SAAS,iBAAiB;AAC1B,SAAS,0BAA0B;AACnC,SAAS,mBAAmB;AAC5B,SAAS,uBAAuB;AAUhC,MAAM,cAAc;AAEpB,MAAM,cAAc,IAAI,6HAA6H;AAAA,EACnJ,UAAU;AAAA,IACR,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,MACN,KAAK;AAAA,IACP;AAAA,EACF;AACF,CAAC;AAEM,SAAS,UAAU,EAAE,gBAAgB,QAAQ,MAAM,iBAAiB,GAAmB;AAC5F,QAAM,EAAE,UAAU,IAAI,SAAS;AAC/B,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,EAAE;AAC7C,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,KAAK;AAEhD,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,SAAS;AAAA,EACX,CAAC;AACD,QAAM,EAAE,QAAQ,WAAW,mBAAmB,WAAW,IAAI,YAAY,EAAE,UAAU,WAAW,kBAAkB,SAAS,UAAU,CAAC;AAEtI,QAAM,mBAAmB,mBAAmB,WAAW,iBAAiB;AAExE,QAAM,SAAS,QAAQ,QAAQ,UAAU;AAEzC,QAAM,OAAO,YAAY,MAAM;AAC7B,oBAAgB;AAChB,QAAI,WAAW;AACb,iBAAW;AAAA,IACb,OAAO;AACL,mBAAa,IAAI;AAAA,IACnB;AACA,cAAU,WAAW;AAAA,EACvB,GAAG,CAAC,WAAW,YAAY,iBAAiB,SAAS,CAAC;AAEtD,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,SAAS,oBAAC,UAAK,eAAY,QAAO,WAAW,YAAY,EAAE,OAAO,CAAC,GAAG,IAAK;AAAA,IAC5E;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;AAEA,IAAO,oBAAQ;","names":[]}
@@ -0,0 +1,3 @@
1
+ import type { Tab } from "./types";
2
+ export declare const TABS: Tab[];
3
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../src/components/SeoDrawer/TabsNav/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,SAAS,CAAC;AAGnC,eAAO,MAAM,IAAI,EAAE,GAAG,EAOrB,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { BarChart3, BookOpen, Crosshair, FileText, Search, Users } from "lucide-react";
2
+ const TABS = [
3
+ { key: "keyphrase", label: "Keyphrase", icon: Crosshair },
4
+ { key: "onpage", label: "On-page SEO", icon: FileText },
5
+ { key: "readability", label: "Readability", icon: BookOpen },
6
+ { key: "inclusive", label: "Inclusive", icon: Users },
7
+ { key: "vitals", label: "Content vitals", icon: BarChart3 },
8
+ { key: "serp", label: "Search result preview", icon: Search }
9
+ ];
10
+ export {
11
+ TABS
12
+ };
13
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/SeoDrawer/TabsNav/constants.ts"],"sourcesContent":["import type { Tab } from \"./types\";\nimport { BarChart3, BookOpen, Crosshair, FileText, Search, Users } from \"lucide-react\";\n\nexport const TABS: Tab[] = [\n { key: \"keyphrase\", label: \"Keyphrase\", icon: Crosshair },\n { key: \"onpage\", label: \"On-page SEO\", icon: FileText },\n { key: \"readability\", label: \"Readability\", icon: BookOpen },\n { key: \"inclusive\", label: \"Inclusive\", icon: Users },\n { key: \"vitals\", label: \"Content vitals\", icon: BarChart3 },\n { key: \"serp\", label: \"Search result preview\", icon: Search },\n];\n"],"mappings":"AACA,SAAS,WAAW,UAAU,WAAW,UAAU,QAAQ,aAAa;AAEjE,MAAM,OAAc;AAAA,EACzB,EAAE,KAAK,aAAa,OAAO,aAAa,MAAM,UAAU;AAAA,EACxD,EAAE,KAAK,UAAU,OAAO,eAAe,MAAM,SAAS;AAAA,EACtD,EAAE,KAAK,eAAe,OAAO,eAAe,MAAM,SAAS;AAAA,EAC3D,EAAE,KAAK,aAAa,OAAO,aAAa,MAAM,MAAM;AAAA,EACpD,EAAE,KAAK,UAAU,OAAO,kBAAkB,MAAM,UAAU;AAAA,EAC1D,EAAE,KAAK,QAAQ,OAAO,yBAAyB,MAAM,OAAO;AAC9D;","names":[]}
@@ -0,0 +1,8 @@
1
+ import type { TabKey } from "./types";
2
+ export type { TabKey } from "./types";
3
+ export interface TabsNavProps {
4
+ active: TabKey;
5
+ onChange: (next: TabKey) => void;
6
+ }
7
+ export declare function TabsNav({ active, onChange }: TabsNavProps): import("react/jsx-runtime").JSX.Element;
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,14 @@
1
+ "use client";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import { TABS } from "./constants";
4
+ import { tabVariants } from "./variants";
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)) });
10
+ }
11
+ export {
12
+ TabsNav
13
+ };
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +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":[]}
@@ -0,0 +1,8 @@
1
+ import type { LucideIcon } from "lucide-react";
2
+ export type TabKey = "keyphrase" | "onpage" | "readability" | "inclusive" | "vitals" | "serp";
3
+ export interface Tab {
4
+ key: TabKey;
5
+ label: string;
6
+ icon: LucideIcon;
7
+ }
8
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/components/SeoDrawer/TabsNav/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,MAAM,MAAM,MAAM,GAAG,WAAW,GAAG,QAAQ,GAAG,aAAa,GAAG,WAAW,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE9F,MAAM,WAAW,GAAG;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,UAAU,CAAC;CAClB"}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,4 @@
1
+ export declare const tabVariants: (props?: ({
2
+ active?: boolean | 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/TabsNav/variants.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,WAAW;;8EAQtB,CAAC"}
@@ -0,0 +1,14 @@
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
+ });
11
+ export {
12
+ tabVariants
13
+ };
14
+ //# sourceMappingURL=variants.js.map
@@ -0,0 +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":[]}
@@ -0,0 +1,7 @@
1
+ export type AutoAction = "skip" | "run";
2
+ export declare function decideAutoAction(args: {
3
+ enabled: boolean;
4
+ signature: string;
5
+ lastSignature: string | null;
6
+ }): AutoAction;
7
+ //# sourceMappingURL=analysisDecision.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,12 @@
1
+ function decideAutoAction(args) {
2
+ const { enabled, signature, lastSignature } = args;
3
+ if (!enabled)
4
+ return "skip";
5
+ if (signature === lastSignature)
6
+ return "skip";
7
+ return "run";
8
+ }
9
+ export {
10
+ decideAutoAction
11
+ };
12
+ //# sourceMappingURL=analysisDecision.js.map
@@ -0,0 +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":[]}
@@ -0,0 +1,24 @@
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";
4
+ import type { AnalysisInput } from "../../engine/types/analysis";
5
+ import type { ExtractorFn, SeoFieldPaths } from "../../types/config";
6
+ export interface BuildAnalysisInputArgs {
7
+ values: Record<string, unknown>;
8
+ locale: string | {
9
+ code?: string;
10
+ } | null | undefined;
11
+ payloadLocale: string | undefined;
12
+ keyphrase: string;
13
+ fields: SeoFieldPaths;
14
+ site: {
15
+ name: string;
16
+ baseUrl: string;
17
+ };
18
+ schemaFields: ClientField[];
19
+ walkCtx: UploadWalkContext;
20
+ resolver: MediaResolver;
21
+ override?: ExtractorFn;
22
+ }
23
+ export declare function buildAnalysisInput(args: BuildAnalysisInputArgs): Promise<AnalysisInput>;
24
+ //# sourceMappingURL=build-analysis-input.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,27 @@
1
+ import { extractContent } from "../../content/extractContent";
2
+ import { collectUploadRefs } from "../../content/uploads/collect-upload-refs";
3
+ import { hydrateUploadValues } from "../../content/uploads/hydrate-values";
4
+ 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);
12
+ }
13
+ async function buildAnalysisInput(args) {
14
+ const contentHtml = args.override ? await args.override(args.values) : await extractWithUploads(args);
15
+ return buildInput({
16
+ values: args.values,
17
+ contentHtml,
18
+ locale: args.locale,
19
+ keyphrase: args.keyphrase,
20
+ fields: args.fields,
21
+ site: args.site
22
+ });
23
+ }
24
+ export {
25
+ buildAnalysisInput
26
+ };
27
+ //# sourceMappingURL=build-analysis-input.js.map
@@ -0,0 +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":[]}
@@ -0,0 +1,17 @@
1
+ import type { AnalysisInput } from "../../engine/types/analysis";
2
+ import type { SeoFieldPaths } from "../../types/config";
3
+ export interface BuildInputArgs {
4
+ values: Record<string, unknown>;
5
+ contentHtml: string;
6
+ locale: string | {
7
+ code?: string;
8
+ } | null | undefined;
9
+ keyphrase: string;
10
+ fields: SeoFieldPaths;
11
+ site: {
12
+ name: string;
13
+ baseUrl: string;
14
+ };
15
+ }
16
+ export declare function buildInput({ values, contentHtml, locale, keyphrase, fields, site }: BuildInputArgs): AnalysisInput;
17
+ //# sourceMappingURL=buildInput.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,32 @@
1
+ function valueAt(values, path) {
2
+ if (!path)
3
+ return "";
4
+ const v = path.split(".").reduce((acc, k) => acc && typeof acc === "object" ? acc[k] : void 0, values);
5
+ return typeof v === "string" ? v : "";
6
+ }
7
+ function normalizeLocale(locale) {
8
+ const code = (typeof locale === "object" && locale ? locale.code : locale != null ? String(locale) : void 0) ?? "en";
9
+ return code.includes("_") ? code : `${code}_${code.toUpperCase()}`;
10
+ }
11
+ function buildInput({ values, contentHtml, locale, keyphrase, fields, site }) {
12
+ const title = valueAt(values, fields.seoTitle) || valueAt(values, "title");
13
+ return {
14
+ title,
15
+ slug: valueAt(values, fields.slug ?? "slug"),
16
+ description: valueAt(values, fields.metaDescription),
17
+ contentHtml,
18
+ keyphrase,
19
+ locale: normalizeLocale(locale),
20
+ site,
21
+ has: {
22
+ seoTitle: Boolean(fields.seoTitle && valueAt(values, fields.seoTitle)),
23
+ metaDescription: Boolean(fields.metaDescription),
24
+ slug: Boolean(fields.slug ?? "slug"),
25
+ content: Boolean(fields.content)
26
+ }
27
+ };
28
+ }
29
+ export {
30
+ buildInput
31
+ };
32
+ //# sourceMappingURL=buildInput.js.map
@@ -0,0 +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":[]}
@@ -0,0 +1,9 @@
1
+ import type { TotalStatus } from "../../../engine/types/analysis";
2
+ interface HeaderProps {
3
+ drawerSlug: string;
4
+ total: number;
5
+ totalStatus: TotalStatus;
6
+ }
7
+ export declare function Header({ drawerSlug, total, totalStatus }: HeaderProps): import("react/jsx-runtime").JSX.Element;
8
+ export {};
9
+ //# sourceMappingURL=Header.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,21 @@
1
+ "use client";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import { useModal, XIcon } from "@payloadcms/ui";
4
+ import { cn } from "../../../utils/style";
5
+ import { statusVar } from "../variants";
6
+ import { Pill } from "../../../ui/Pill";
7
+ function Header({ drawerSlug, total, totalStatus }) {
8
+ const { closeModal } = useModal();
9
+ return /* @__PURE__ */ jsxs("div", { className: "relative flex items-center justify-between px-[4px] py-[16px]", children: [
10
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-[11px]", children: [
11
+ /* @__PURE__ */ jsx("h2", { className: "text-[16px] font-semibold m-0", children: "SEO Analytics" }),
12
+ totalStatus === "idle" ? null : /* @__PURE__ */ jsx(Pill, { variant: totalStatus, children: total })
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)" } }) })
16
+ ] });
17
+ }
18
+ export {
19
+ Header
20
+ };
21
+ //# sourceMappingURL=Header.js.map
@@ -0,0 +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":[]}
@@ -0,0 +1,3 @@
1
+ import type { ReactNode } from "react";
2
+ export declare function highlightKeyphrase(text: string, keyphrase: string): ReactNode[];
3
+ //# sourceMappingURL=highlight-keyphrase.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"highlight-keyphrase.d.ts","sourceRoot":"","sources":["../../../../../src/components/SeoDrawer/components/SerpPreview/highlight-keyphrase.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAMvC,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,CAM/E"}
@@ -0,0 +1,14 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ function escapeRegex(value) {
3
+ return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
4
+ }
5
+ function highlightKeyphrase(text, keyphrase) {
6
+ if (!keyphrase.trim())
7
+ return [text];
8
+ const segments = text.split(new RegExp(`(${escapeRegex(keyphrase)})`, "gi"));
9
+ return segments.map((segment, index) => index % 2 === 1 ? /* @__PURE__ */ jsx("strong", { children: segment }, index) : segment);
10
+ }
11
+ export {
12
+ highlightKeyphrase
13
+ };
14
+ //# sourceMappingURL=highlight-keyphrase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/components/SeoDrawer/components/SerpPreview/highlight-keyphrase.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\n\nfunction escapeRegex(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\nexport function highlightKeyphrase(text: string, keyphrase: string): ReactNode[] {\n if (!keyphrase.trim()) return [text];\n\n const segments = text.split(new RegExp(`(${escapeRegex(keyphrase)})`, \"gi\"));\n\n return segments.map((segment, index) => (index % 2 === 1 ? <strong key={index}>{segment}</strong> : segment));\n}\n"],"mappings":"AAW6D;AAT7D,SAAS,YAAY,OAAuB;AAC1C,SAAO,MAAM,QAAQ,uBAAuB,MAAM;AACpD;AAEO,SAAS,mBAAmB,MAAc,WAAgC;AAC/E,MAAI,CAAC,UAAU,KAAK;AAAG,WAAO,CAAC,IAAI;AAEnC,QAAM,WAAW,KAAK,MAAM,IAAI,OAAO,IAAI,YAAY,SAAS,CAAC,KAAK,IAAI,CAAC;AAE3E,SAAO,SAAS,IAAI,CAAC,SAAS,UAAW,QAAQ,MAAM,IAAI,oBAAC,YAAoB,qBAAR,KAAgB,IAAY,OAAQ;AAC9G;","names":[]}
@@ -0,0 +1,12 @@
1
+ import type { ReactElement } from "react";
2
+ import type { SerpResult } from "../../../../engine/types/analysis";
3
+ export type SerpMode = "mobile" | "desktop";
4
+ interface SerpPreviewProps {
5
+ data: SerpResult;
6
+ keyphrase: string;
7
+ faviconUrl: string;
8
+ mode: SerpMode;
9
+ }
10
+ export declare function SerpPreview({ data, keyphrase, faviconUrl, mode }: SerpPreviewProps): ReactElement;
11
+ export {};
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/SeoDrawer/components/SerpPreview/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AAMpE,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE5C,UAAU,gBAAgB;IACxB,IAAI,EAAE,UAAU,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,QAAQ,CAAC;CAChB;AAED,wBAAgB,WAAW,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,gBAAgB,GAAG,YAAY,CAmBjG"}
@@ -0,0 +1,23 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { highlightKeyphrase } from "./highlight-keyphrase";
3
+ import { SerpFavicon } from "./serp-favicon";
4
+ import { serpContainer, serpDescription, serpHostname, serpSiteName, serpTitle, serpUrlRow } from "./variants";
5
+ import { truncateDescription } from "./truncate-description";
6
+ function SerpPreview({ data, keyphrase, faviconUrl, mode }) {
7
+ const result = /* @__PURE__ */ jsxs("div", { className: serpContainer({ mode }), children: [
8
+ /* @__PURE__ */ jsxs("div", { className: serpUrlRow({ mode }), children: [
9
+ /* @__PURE__ */ jsx(SerpFavicon, { faviconUrl, siteName: data.siteName }),
10
+ /* @__PURE__ */ jsxs("div", { className: "overflow-hidden", children: [
11
+ /* @__PURE__ */ jsx("div", { className: serpSiteName({ mode }), children: data.siteName }),
12
+ /* @__PURE__ */ jsx("div", { className: serpHostname({ mode }), children: data.url })
13
+ ] })
14
+ ] }),
15
+ /* @__PURE__ */ jsx("div", { className: serpTitle({ mode }), children: data.title }),
16
+ /* @__PURE__ */ jsx("div", { className: serpDescription({ mode }), children: highlightKeyphrase(truncateDescription(data.description), keyphrase) })
17
+ ] });
18
+ return mode === "desktop" ? /* @__PURE__ */ jsx("div", { className: "overflow-x-auto", children: result }) : result;
19
+ }
20
+ export {
21
+ SerpPreview
22
+ };
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/components/SeoDrawer/components/SerpPreview/index.tsx"],"sourcesContent":["import type { ReactElement } from \"react\";\nimport type { SerpResult } from \"../../../../engine/types/analysis\";\nimport { highlightKeyphrase } from \"./highlight-keyphrase\";\nimport { SerpFavicon } from \"./serp-favicon\";\nimport { serpContainer, serpDescription, serpHostname, serpSiteName, serpTitle, serpUrlRow } from \"./variants\";\nimport { truncateDescription } from \"./truncate-description\";\n\nexport type SerpMode = \"mobile\" | \"desktop\";\n\ninterface SerpPreviewProps {\n data: SerpResult;\n keyphrase: string;\n faviconUrl: string;\n mode: SerpMode;\n}\n\nexport function SerpPreview({ data, keyphrase, faviconUrl, mode }: SerpPreviewProps): ReactElement {\n const result = (\n <div className={serpContainer({ mode })}>\n <div className={serpUrlRow({ mode })}>\n <SerpFavicon faviconUrl={faviconUrl} siteName={data.siteName} />\n\n <div className=\"overflow-hidden\">\n <div className={serpSiteName({ mode })}>{data.siteName}</div>\n <div className={serpHostname({ mode })}>{data.url}</div>\n </div>\n </div>\n\n <div className={serpTitle({ mode })}>{data.title}</div>\n\n <div className={serpDescription({ mode })}>{highlightKeyphrase(truncateDescription(data.description), keyphrase)}</div>\n </div>\n );\n\n return mode === \"desktop\" ? <div className=\"overflow-x-auto\">{result}</div> : result;\n}\n"],"mappings":"AAoBQ,cAEA,YAFA;AAlBR,SAAS,0BAA0B;AACnC,SAAS,mBAAmB;AAC5B,SAAS,eAAe,iBAAiB,cAAc,cAAc,WAAW,kBAAkB;AAClG,SAAS,2BAA2B;AAW7B,SAAS,YAAY,EAAE,MAAM,WAAW,YAAY,KAAK,GAAmC;AACjG,QAAM,SACJ,qBAAC,SAAI,WAAW,cAAc,EAAE,KAAK,CAAC,GACpC;AAAA,yBAAC,SAAI,WAAW,WAAW,EAAE,KAAK,CAAC,GACjC;AAAA,0BAAC,eAAY,YAAwB,UAAU,KAAK,UAAU;AAAA,MAE9D,qBAAC,SAAI,WAAU,mBACb;AAAA,4BAAC,SAAI,WAAW,aAAa,EAAE,KAAK,CAAC,GAAI,eAAK,UAAS;AAAA,QACvD,oBAAC,SAAI,WAAW,aAAa,EAAE,KAAK,CAAC,GAAI,eAAK,KAAI;AAAA,SACpD;AAAA,OACF;AAAA,IAEA,oBAAC,SAAI,WAAW,UAAU,EAAE,KAAK,CAAC,GAAI,eAAK,OAAM;AAAA,IAEjD,oBAAC,SAAI,WAAW,gBAAgB,EAAE,KAAK,CAAC,GAAI,6BAAmB,oBAAoB,KAAK,WAAW,GAAG,SAAS,GAAE;AAAA,KACnH;AAGF,SAAO,SAAS,YAAY,oBAAC,SAAI,WAAU,mBAAmB,kBAAO,IAAS;AAChF;","names":[]}
@@ -0,0 +1,8 @@
1
+ import type { ReactElement } from "react";
2
+ interface SerpFaviconProps {
3
+ faviconUrl: string;
4
+ siteName: string;
5
+ }
6
+ export declare function SerpFavicon({ faviconUrl, siteName }: SerpFaviconProps): ReactElement;
7
+ export {};
8
+ //# sourceMappingURL=serp-favicon.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serp-favicon.d.ts","sourceRoot":"","sources":["../../../../../src/components/SeoDrawer/components/SerpPreview/serp-favicon.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAE1C,UAAU,gBAAgB;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,WAAW,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,gBAAgB,GAAG,YAAY,CAMpF"}
@@ -0,0 +1,8 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ function SerpFavicon({ faviconUrl, siteName }) {
3
+ return /* @__PURE__ */ jsx("div", { className: "grid h-[28px] w-[28px] min-w-[28px] flex-none place-items-center rounded-[50px] bg-serp-favicon-bg", children: faviconUrl ? /* @__PURE__ */ jsx("img", { alt: "", className: "mx-[5px] h-[18px] w-[18px]", src: faviconUrl }) : /* @__PURE__ */ jsx("span", { className: "text-[12px] text-neutral-600", children: siteName.charAt(0).toUpperCase() }) });
4
+ }
5
+ export {
6
+ SerpFavicon
7
+ };
8
+ //# sourceMappingURL=serp-favicon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/components/SeoDrawer/components/SerpPreview/serp-favicon.tsx"],"sourcesContent":["import type { ReactElement } from \"react\";\n\ninterface SerpFaviconProps {\n faviconUrl: string;\n siteName: string;\n}\n\nexport function SerpFavicon({ faviconUrl, siteName }: SerpFaviconProps): ReactElement {\n return (\n <div className=\"grid h-[28px] w-[28px] min-w-[28px] flex-none place-items-center rounded-[50px] bg-serp-favicon-bg\">\n {faviconUrl ? <img alt=\"\" className=\"mx-[5px] h-[18px] w-[18px]\" src={faviconUrl} /> : <span className=\"text-[12px] text-neutral-600\">{siteName.charAt(0).toUpperCase()}</span>}\n </div>\n );\n}\n"],"mappings":"AAUoB;AAHb,SAAS,YAAY,EAAE,YAAY,SAAS,GAAmC;AACpF,SACE,oBAAC,SAAI,WAAU,sGACZ,uBAAa,oBAAC,SAAI,KAAI,IAAG,WAAU,8BAA6B,KAAK,YAAY,IAAK,oBAAC,UAAK,WAAU,gCAAgC,mBAAS,OAAO,CAAC,EAAE,YAAY,GAAE,GAC1K;AAEJ;","names":[]}
@@ -0,0 +1,3 @@
1
+ export declare const SERP_DESCRIPTION_MAX = 156;
2
+ export declare function truncateDescription(text: string, max?: number): string;
3
+ //# sourceMappingURL=truncate-description.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"truncate-description.d.ts","sourceRoot":"","sources":["../../../../../src/components/SeoDrawer/components/SerpPreview/truncate-description.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,oBAAoB,MAAM,CAAC;AAIxC,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,SAAuB,GAAG,MAAM,CAUpF"}
@@ -0,0 +1,16 @@
1
+ const SERP_DESCRIPTION_MAX = 156;
2
+ const OMISSION = " \u2026";
3
+ function truncateDescription(text, max = SERP_DESCRIPTION_MAX) {
4
+ if (text.length <= max)
5
+ return text;
6
+ const budget = max - OMISSION.length;
7
+ const candidate = text.slice(0, budget);
8
+ const lastSpace = candidate.search(/\s+(?=\S*$)/);
9
+ const cut = lastSpace > 0 ? candidate.slice(0, lastSpace) : candidate;
10
+ return cut.trimEnd() + OMISSION;
11
+ }
12
+ export {
13
+ SERP_DESCRIPTION_MAX,
14
+ truncateDescription
15
+ };
16
+ //# sourceMappingURL=truncate-description.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/components/SeoDrawer/components/SerpPreview/truncate-description.ts"],"sourcesContent":["export const SERP_DESCRIPTION_MAX = 156;\n\nconst OMISSION = \" …\";\n\nexport function truncateDescription(text: string, max = SERP_DESCRIPTION_MAX): string {\n if (text.length <= max) return text;\n\n const budget = max - OMISSION.length;\n const candidate = text.slice(0, budget);\n\n const lastSpace = candidate.search(/\\s+(?=\\S*$)/);\n const cut = lastSpace > 0 ? candidate.slice(0, lastSpace) : candidate;\n\n return cut.trimEnd() + OMISSION;\n}\n"],"mappings":"AAAO,MAAM,uBAAuB;AAEpC,MAAM,WAAW;AAEV,SAAS,oBAAoB,MAAc,MAAM,sBAA8B;AACpF,MAAI,KAAK,UAAU;AAAK,WAAO;AAE/B,QAAM,SAAS,MAAM,SAAS;AAC9B,QAAM,YAAY,KAAK,MAAM,GAAG,MAAM;AAEtC,QAAM,YAAY,UAAU,OAAO,aAAa;AAChD,QAAM,MAAM,YAAY,IAAI,UAAU,MAAM,GAAG,SAAS,IAAI;AAE5D,SAAO,IAAI,QAAQ,IAAI;AACzB;","names":[]}
@@ -0,0 +1,19 @@
1
+ export declare const serpContainer: (props?: ({
2
+ mode?: "desktop" | "mobile" | null | undefined;
3
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
4
+ export declare const serpUrlRow: (props?: ({
5
+ mode?: "desktop" | "mobile" | null | undefined;
6
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
7
+ export declare const serpSiteName: (props?: ({
8
+ mode?: "desktop" | "mobile" | null | undefined;
9
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
10
+ export declare const serpHostname: (props?: ({
11
+ mode?: "desktop" | "mobile" | null | undefined;
12
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
13
+ export declare const serpTitle: (props?: ({
14
+ mode?: "desktop" | "mobile" | null | undefined;
15
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
16
+ export declare const serpDescription: (props?: ({
17
+ mode?: "desktop" | "mobile" | null | undefined;
18
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
19
+ //# sourceMappingURL=variants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"variants.d.ts","sourceRoot":"","sources":["../../../../../src/components/SeoDrawer/components/SerpPreview/variants.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,aAAa;;8EAOxB,CAAC;AAEH,eAAO,MAAM,UAAU;;8EAOrB,CAAC;AAEH,eAAO,MAAM,YAAY;;8EAOvB,CAAC;AAEH,eAAO,MAAM,YAAY;;8EAOvB,CAAC;AAEH,eAAO,MAAM,SAAS;;8EAOpB,CAAC;AAEH,eAAO,MAAM,eAAe;;8EAO1B,CAAC"}