@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,72 @@
1
+ "use client";
2
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
3
+ import { useLayoutEffect, useRef, useState } from "react";
4
+ import { cn } from "../../../../utils/style";
5
+ import { statusVar } from "../../../../components/SeoDrawer/variants";
6
+ function DensityGauge({ bands, markerPct, markerLabel, markerStatus, labels }) {
7
+ const barRef = useRef(null);
8
+ const labelRef = useRef(null);
9
+ const [dims, setDims] = useState({ bar: 0, label: 0 });
10
+ const markerPx = markerPct / 100 * dims.bar;
11
+ const halfLabel = dims.label / 2;
12
+ const labelAlign = dims.label === 0 ? "-translate-x-1/2" : markerPx < halfLabel ? "translate-x-0" : markerPx > dims.bar - halfLabel ? "-translate-x-full" : "-translate-x-1/2";
13
+ const firstVisibleBand = bands.findIndex((band) => band.endPct > band.startPct);
14
+ const lastVisibleBand = bands.reduce((acc, band, i) => band.endPct > band.startPct ? i : acc, -1);
15
+ useLayoutEffect(() => {
16
+ const bar = barRef.current;
17
+ const label = labelRef.current;
18
+ if (!(bar && label))
19
+ return;
20
+ const measure = () => setDims({ bar: bar.offsetWidth, label: label.offsetWidth });
21
+ const observer = new ResizeObserver(measure);
22
+ measure();
23
+ observer.observe(bar);
24
+ observer.observe(label);
25
+ return () => observer.disconnect();
26
+ }, []);
27
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
28
+ /* @__PURE__ */ jsxs("div", { ref: barRef, className: "relative h-[6px] rounded-[3px] mt-[24px] mb-[14px]", children: [
29
+ bands.map((band, i) => /* @__PURE__ */ jsx(
30
+ "i",
31
+ {
32
+ className: cn("absolute inset-y-0", statusVar({ status: band.status }), i === firstVisibleBand && "rounded-l-[3px]", i === lastVisibleBand && "rounded-r-[3px]"),
33
+ style: {
34
+ left: `${band.startPct}%`,
35
+ width: `${band.endPct - band.startPct}%`,
36
+ background: "var(--seo-c)"
37
+ }
38
+ },
39
+ `${band.status}-${i}`
40
+ )),
41
+ /* @__PURE__ */ jsx(
42
+ "span",
43
+ {
44
+ ref: labelRef,
45
+ className: cn("absolute bottom-[13px] font-mono font-bold text-[11px] whitespace-nowrap", statusVar({ status: markerStatus }), labelAlign),
46
+ style: { left: `${markerPct}%`, color: "var(--seo-c)" },
47
+ children: markerLabel
48
+ }
49
+ ),
50
+ /* @__PURE__ */ jsx(
51
+ "span",
52
+ {
53
+ className: cn("absolute -top-[3px] -translate-x-1/2 block w-[12px] h-[12px] rounded-full bg-neutral-0 border-2", statusVar({ status: markerStatus })),
54
+ style: { left: `${markerPct}%`, borderColor: "var(--seo-c)" }
55
+ }
56
+ )
57
+ ] }),
58
+ /* @__PURE__ */ jsx("div", { className: "relative h-[14px] text-[10px] text-neutral-500", children: labels.map((label, i) => /* @__PURE__ */ jsx(
59
+ "span",
60
+ {
61
+ className: cn("absolute whitespace-nowrap", label.pct <= 0 ? "translate-x-0" : label.pct >= 100 ? "-translate-x-full" : "-translate-x-1/2", label.emphasis === "good" && "text-seo-good"),
62
+ style: { left: `${label.pct}%` },
63
+ children: label.text
64
+ },
65
+ `${label.text}-${i}`
66
+ )) })
67
+ ] });
68
+ }
69
+ export {
70
+ DensityGauge
71
+ };
72
+ //# sourceMappingURL=DensityGauge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/ui/CheckRow/CheckVisualization/visualizations/DensityGauge.tsx"],"sourcesContent":["\"use client\";\n\nimport { useLayoutEffect, useRef, useState } from \"react\";\nimport { cn } from \"../../../../utils/style\";\nimport { statusVar } from \"../../../../components/SeoDrawer/variants\";\nimport type { GaugeModel } from \"../../../../engine/types/visualization\";\n\nexport function DensityGauge({ bands, markerPct, markerLabel, markerStatus, labels }: GaugeModel) {\n const barRef = useRef<HTMLDivElement>(null);\n const labelRef = useRef<HTMLSpanElement>(null);\n const [dims, setDims] = useState({ bar: 0, label: 0 });\n\n const markerPx = (markerPct / 100) * dims.bar;\n const halfLabel = dims.label / 2;\n const labelAlign = dims.label === 0 ? \"-translate-x-1/2\" : markerPx < halfLabel ? \"translate-x-0\" : markerPx > dims.bar - halfLabel ? \"-translate-x-full\" : \"-translate-x-1/2\";\n\n const firstVisibleBand = bands.findIndex((band) => band.endPct > band.startPct);\n const lastVisibleBand = bands.reduce((acc, band, i) => (band.endPct > band.startPct ? i : acc), -1);\n\n useLayoutEffect(() => {\n const bar = barRef.current;\n const label = labelRef.current;\n\n if (!(bar && label)) return;\n\n const measure = () => setDims({ bar: bar.offsetWidth, label: label.offsetWidth });\n\n const observer = new ResizeObserver(measure);\n\n measure();\n observer.observe(bar);\n observer.observe(label);\n\n return () => observer.disconnect();\n }, []);\n\n return (\n <>\n <div ref={barRef} className=\"relative h-[6px] rounded-[3px] mt-[24px] mb-[14px]\">\n {bands.map((band, i) => (\n <i\n key={`${band.status}-${i}`}\n className={cn(\"absolute inset-y-0\", statusVar({ status: band.status }), i === firstVisibleBand && \"rounded-l-[3px]\", i === lastVisibleBand && \"rounded-r-[3px]\")}\n style={{\n left: `${band.startPct}%`,\n width: `${band.endPct - band.startPct}%`,\n background: \"var(--seo-c)\",\n }}\n />\n ))}\n <span\n ref={labelRef}\n className={cn(\"absolute bottom-[13px] font-mono font-bold text-[11px] whitespace-nowrap\", statusVar({ status: markerStatus }), labelAlign)}\n style={{ left: `${markerPct}%`, color: \"var(--seo-c)\" }}\n >\n {markerLabel}\n </span>\n <span\n className={cn(\"absolute -top-[3px] -translate-x-1/2 block w-[12px] h-[12px] rounded-full bg-neutral-0 border-2\", statusVar({ status: markerStatus }))}\n style={{ left: `${markerPct}%`, borderColor: \"var(--seo-c)\" }}\n />\n </div>\n <div className=\"relative h-[14px] text-[10px] text-neutral-500\">\n {labels.map((label, i) => (\n <span\n key={`${label.text}-${i}`}\n className={cn(\"absolute whitespace-nowrap\", label.pct <= 0 ? \"translate-x-0\" : label.pct >= 100 ? \"-translate-x-full\" : \"-translate-x-1/2\", label.emphasis === \"good\" && \"text-seo-good\")}\n style={{ left: `${label.pct}%` }}\n >\n {label.text}\n </span>\n ))}\n </div>\n </>\n );\n}\n"],"mappings":";AAqCI,mBAGM,KAFJ,YADF;AAnCJ,SAAS,iBAAiB,QAAQ,gBAAgB;AAClD,SAAS,UAAU;AACnB,SAAS,iBAAiB;AAGnB,SAAS,aAAa,EAAE,OAAO,WAAW,aAAa,cAAc,OAAO,GAAe;AAChG,QAAM,SAAS,OAAuB,IAAI;AAC1C,QAAM,WAAW,OAAwB,IAAI;AAC7C,QAAM,CAAC,MAAM,OAAO,IAAI,SAAS,EAAE,KAAK,GAAG,OAAO,EAAE,CAAC;AAErD,QAAM,WAAY,YAAY,MAAO,KAAK;AAC1C,QAAM,YAAY,KAAK,QAAQ;AAC/B,QAAM,aAAa,KAAK,UAAU,IAAI,qBAAqB,WAAW,YAAY,kBAAkB,WAAW,KAAK,MAAM,YAAY,sBAAsB;AAE5J,QAAM,mBAAmB,MAAM,UAAU,CAAC,SAAS,KAAK,SAAS,KAAK,QAAQ;AAC9E,QAAM,kBAAkB,MAAM,OAAO,CAAC,KAAK,MAAM,MAAO,KAAK,SAAS,KAAK,WAAW,IAAI,KAAM,EAAE;AAElG,kBAAgB,MAAM;AACpB,UAAM,MAAM,OAAO;AACnB,UAAM,QAAQ,SAAS;AAEvB,QAAI,EAAE,OAAO;AAAQ;AAErB,UAAM,UAAU,MAAM,QAAQ,EAAE,KAAK,IAAI,aAAa,OAAO,MAAM,YAAY,CAAC;AAEhF,UAAM,WAAW,IAAI,eAAe,OAAO;AAE3C,YAAQ;AACR,aAAS,QAAQ,GAAG;AACpB,aAAS,QAAQ,KAAK;AAEtB,WAAO,MAAM,SAAS,WAAW;AAAA,EACnC,GAAG,CAAC,CAAC;AAEL,SACE,iCACE;AAAA,yBAAC,SAAI,KAAK,QAAQ,WAAU,sDACzB;AAAA,YAAM,IAAI,CAAC,MAAM,MAChB;AAAA,QAAC;AAAA;AAAA,UAEC,WAAW,GAAG,sBAAsB,UAAU,EAAE,QAAQ,KAAK,OAAO,CAAC,GAAG,MAAM,oBAAoB,mBAAmB,MAAM,mBAAmB,iBAAiB;AAAA,UAC/J,OAAO;AAAA,YACL,MAAM,GAAG,KAAK,QAAQ;AAAA,YACtB,OAAO,GAAG,KAAK,SAAS,KAAK,QAAQ;AAAA,YACrC,YAAY;AAAA,UACd;AAAA;AAAA,QANK,GAAG,KAAK,MAAM,IAAI,CAAC;AAAA,MAO1B,CACD;AAAA,MACD;AAAA,QAAC;AAAA;AAAA,UACC,KAAK;AAAA,UACL,WAAW,GAAG,4EAA4E,UAAU,EAAE,QAAQ,aAAa,CAAC,GAAG,UAAU;AAAA,UACzI,OAAO,EAAE,MAAM,GAAG,SAAS,KAAK,OAAO,eAAe;AAAA,UAErD;AAAA;AAAA,MACH;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACC,WAAW,GAAG,mGAAmG,UAAU,EAAE,QAAQ,aAAa,CAAC,CAAC;AAAA,UACpJ,OAAO,EAAE,MAAM,GAAG,SAAS,KAAK,aAAa,eAAe;AAAA;AAAA,MAC9D;AAAA,OACF;AAAA,IACA,oBAAC,SAAI,WAAU,kDACZ,iBAAO,IAAI,CAAC,OAAO,MAClB;AAAA,MAAC;AAAA;AAAA,QAEC,WAAW,GAAG,8BAA8B,MAAM,OAAO,IAAI,kBAAkB,MAAM,OAAO,MAAM,sBAAsB,oBAAoB,MAAM,aAAa,UAAU,eAAe;AAAA,QACxL,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;AAAA,QAE9B,gBAAM;AAAA;AAAA,MAJF,GAAG,MAAM,IAAI,IAAI,CAAC;AAAA,IAKzB,CACD,GACH;AAAA,KACF;AAEJ;","names":[]}
@@ -0,0 +1,3 @@
1
+ import type { DistributionModel } from "../../../../engine/types/visualization";
2
+ export declare function DistributionBar({ positions }: DistributionModel): import("react/jsx-runtime").JSX.Element;
3
+ //# sourceMappingURL=DistributionBar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DistributionBar.d.ts","sourceRoot":"","sources":["../../../../../src/ui/CheckRow/CheckVisualization/visualizations/DistributionBar.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAEhF,wBAAgB,eAAe,CAAC,EAAE,SAAS,EAAE,EAAE,iBAAiB,2CAgB/D"}
@@ -0,0 +1,16 @@
1
+ "use client";
2
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
3
+ function DistributionBar({ positions }) {
4
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
5
+ /* @__PURE__ */ jsx("div", { className: "seo-docbar relative h-[24px] rounded-rs border border-neutral-200", children: positions.map((p, i) => /* @__PURE__ */ jsx("i", { className: "absolute top-[3px] bottom-[3px] w-[3px] rounded-[2px] bg-neutral-800", style: { left: `${p}%` } }, `${p}-${i}`)) }),
6
+ /* @__PURE__ */ jsxs("div", { className: "flex justify-between text-[10px] text-neutral-500 mt-[5px]", children: [
7
+ /* @__PURE__ */ jsx("span", { children: "start" }),
8
+ /* @__PURE__ */ jsx("span", { children: "middle" }),
9
+ /* @__PURE__ */ jsx("span", { children: "end" })
10
+ ] })
11
+ ] });
12
+ }
13
+ export {
14
+ DistributionBar
15
+ };
16
+ //# sourceMappingURL=DistributionBar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/ui/CheckRow/CheckVisualization/visualizations/DistributionBar.tsx"],"sourcesContent":["\"use client\";\n\nimport type { DistributionModel } from \"../../../../engine/types/visualization\";\n\nexport function DistributionBar({ positions }: DistributionModel) {\n return (\n <>\n <div className=\"seo-docbar relative h-[24px] rounded-rs border border-neutral-200\">\n {positions.map((p, i) => (\n <i key={`${p}-${i}`} className=\"absolute top-[3px] bottom-[3px] w-[3px] rounded-[2px] bg-neutral-800\" style={{ left: `${p}%` }} />\n ))}\n </div>\n\n <div className=\"flex justify-between text-[10px] text-neutral-500 mt-[5px]\">\n <span>start</span>\n <span>middle</span>\n <span>end</span>\n </div>\n </>\n );\n}\n"],"mappings":";AAMI,mBAGM,KAIJ,YAPF;AAFG,SAAS,gBAAgB,EAAE,UAAU,GAAsB;AAChE,SACE,iCACE;AAAA,wBAAC,SAAI,WAAU,qEACZ,oBAAU,IAAI,CAAC,GAAG,MACjB,oBAAC,OAAoB,WAAU,wEAAuE,OAAO,EAAE,MAAM,GAAG,CAAC,IAAI,KAArH,GAAG,CAAC,IAAI,CAAC,EAA+G,CACjI,GACH;AAAA,IAEA,qBAAC,SAAI,WAAU,8DACb;AAAA,0BAAC,UAAK,mBAAK;AAAA,MACX,oBAAC,UAAK,oBAAM;AAAA,MACZ,oBAAC,UAAK,iBAAG;AAAA,OACX;AAAA,KACF;AAEJ;","names":[]}
@@ -0,0 +1,3 @@
1
+ import type { DrilldownModel } from "../../../../engine/types/visualization";
2
+ export declare function DrillDown({ items, label }: DrilldownModel): import("react/jsx-runtime").JSX.Element | null;
3
+ //# sourceMappingURL=DrillDown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DrillDown.d.ts","sourceRoot":"","sources":["../../../../../src/ui/CheckRow/CheckVisualization/visualizations/DrillDown.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AAE7E,wBAAgB,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,cAAc,kDAiCzD"}
@@ -0,0 +1,36 @@
1
+ "use client";
2
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
3
+ import { ChevronDown, ChevronUp } from "lucide-react";
4
+ import { useState } from "react";
5
+ import { cn } from "../../../../utils/style";
6
+ function DrillDown({ items, label }) {
7
+ const [open, setOpen] = useState(false);
8
+ if (!items.length)
9
+ return null;
10
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
11
+ /* @__PURE__ */ jsx(
12
+ "button",
13
+ {
14
+ type: "button",
15
+ className: "mt-[8px] text-[11px] text-neutral-700 bg-neutral-100 border border-neutral-200 rounded-rs px-[9px] py-[4px] cursor-pointer inline-flex items-center gap-[4px]",
16
+ onClick: () => setOpen((o) => !o),
17
+ children: open ? /* @__PURE__ */ jsxs(Fragment, { children: [
18
+ "Hide ",
19
+ /* @__PURE__ */ jsx(ChevronUp, { size: 14 })
20
+ ] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
21
+ label,
22
+ " ",
23
+ /* @__PURE__ */ jsx(ChevronDown, { size: 14 })
24
+ ] })
25
+ }
26
+ ),
27
+ /* @__PURE__ */ jsx("div", { className: cn("mt-[8px] flex-col gap-[4px]", open ? "flex" : "hidden"), children: items.map((it, i) => /* @__PURE__ */ jsxs("div", { className: "flex justify-between text-[11px] text-neutral-700 bg-neutral-50 rounded-rs px-[9px] py-[4px]", children: [
28
+ /* @__PURE__ */ jsx("span", { children: it.left }),
29
+ /* @__PURE__ */ jsx("span", { className: "text-neutral-1000", children: it.right })
30
+ ] }, `${it.left}-${i}`)) })
31
+ ] });
32
+ }
33
+ export {
34
+ DrillDown
35
+ };
36
+ //# sourceMappingURL=DrillDown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/ui/CheckRow/CheckVisualization/visualizations/DrillDown.tsx"],"sourcesContent":["\"use client\";\n\nimport { ChevronDown, ChevronUp } from \"lucide-react\";\nimport { useState } from \"react\";\nimport { cn } from \"../../../../utils/style\";\nimport type { DrilldownModel } from \"../../../../engine/types/visualization\";\n\nexport function DrillDown({ items, label }: DrilldownModel) {\n const [open, setOpen] = useState(false);\n\n if (!items.length) return null;\n\n return (\n <>\n <button\n type=\"button\"\n className=\"mt-[8px] text-[11px] text-neutral-700 bg-neutral-100 border border-neutral-200 rounded-rs px-[9px] py-[4px] cursor-pointer inline-flex items-center gap-[4px]\"\n onClick={() => setOpen((o) => !o)}\n >\n {open ? (\n <>\n Hide <ChevronUp size={14} />\n </>\n ) : (\n <>\n {label} <ChevronDown size={14} />\n </>\n )}\n </button>\n\n <div className={cn(\"mt-[8px] flex-col gap-[4px]\", open ? \"flex\" : \"hidden\")}>\n {items.map((it, i) => (\n <div className=\"flex justify-between text-[11px] text-neutral-700 bg-neutral-50 rounded-rs px-[9px] py-[4px]\" key={`${it.left}-${i}`}>\n <span>{it.left}</span>\n <span className=\"text-neutral-1000\">{it.right}</span>\n </div>\n ))}\n </div>\n </>\n );\n}\n"],"mappings":";AAoBU,mBACO,KADP;AAlBV,SAAS,aAAa,iBAAiB;AACvC,SAAS,gBAAgB;AACzB,SAAS,UAAU;AAGZ,SAAS,UAAU,EAAE,OAAO,MAAM,GAAmB;AAC1D,QAAM,CAAC,MAAM,OAAO,IAAI,SAAS,KAAK;AAEtC,MAAI,CAAC,MAAM;AAAQ,WAAO;AAE1B,SACE,iCACE;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,WAAU;AAAA,QACV,SAAS,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC;AAAA,QAE/B,iBACC,iCAAE;AAAA;AAAA,UACK,oBAAC,aAAU,MAAM,IAAI;AAAA,WAC5B,IAEA,iCACG;AAAA;AAAA,UAAM;AAAA,UAAC,oBAAC,eAAY,MAAM,IAAI;AAAA,WACjC;AAAA;AAAA,IAEJ;AAAA,IAEA,oBAAC,SAAI,WAAW,GAAG,+BAA+B,OAAO,SAAS,QAAQ,GACvE,gBAAM,IAAI,CAAC,IAAI,MACd,qBAAC,SAAI,WAAU,gGACb;AAAA,0BAAC,UAAM,aAAG,MAAK;AAAA,MACf,oBAAC,UAAK,WAAU,qBAAqB,aAAG,OAAM;AAAA,SAFmE,GAAG,GAAG,IAAI,IAAI,CAAC,EAGlI,CACD,GACH;AAAA,KACF;AAEJ;","names":[]}
@@ -0,0 +1,3 @@
1
+ import type { SegmentModel } from "../../../../engine/types/visualization";
2
+ export declare function SegmentBar({ countLabel, filledPct, filledStatus, legend }: SegmentModel): import("react/jsx-runtime").JSX.Element;
3
+ //# sourceMappingURL=SegmentBar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SegmentBar.d.ts","sourceRoot":"","sources":["../../../../../src/ui/CheckRow/CheckVisualization/visualizations/SegmentBar.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAC;AAc3E,wBAAgB,UAAU,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,YAAY,2CA0BvF"}
@@ -0,0 +1,32 @@
1
+ "use client";
2
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
3
+ import { cva } from "class-variance-authority";
4
+ import { cn } from "../../../../utils/style";
5
+ import { statusVar } from "../../../../components/SeoDrawer/variants";
6
+ const swatchVariants = cva("w-[8px] h-[8px] rounded-[2px] inline-block", {
7
+ variants: {
8
+ tone: {
9
+ good: "bg-seo-good",
10
+ warn: "bg-seo-warn",
11
+ bad: "bg-seo-bad",
12
+ muted: "bg-neutral-300"
13
+ }
14
+ }
15
+ });
16
+ function SegmentBar({ countLabel, filledPct, filledStatus, legend }) {
17
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
18
+ countLabel && /* @__PURE__ */ jsx("div", { className: "text-[10px] text-neutral-500 font-mono mb-[4px] flex justify-end", children: /* @__PURE__ */ jsx("span", { children: countLabel }) }),
19
+ /* @__PURE__ */ jsxs("div", { className: "flex h-[6px] rounded-[3px] overflow-hidden", children: [
20
+ /* @__PURE__ */ jsx("i", { className: cn("block h-full", statusVar({ status: filledStatus })), style: { width: `${filledPct}%`, background: "var(--seo-c)" } }),
21
+ /* @__PURE__ */ jsx("i", { className: "block h-full bg-neutral-150", style: { width: `${100 - filledPct}%` } })
22
+ ] }),
23
+ legend && /* @__PURE__ */ jsx("div", { className: "flex gap-[14px] text-[11px] mt-[6px]", children: legend.map((l) => /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-[5px] text-neutral-700", children: [
24
+ /* @__PURE__ */ jsx("span", { className: swatchVariants({ tone: l.tone }) }),
25
+ l.label
26
+ ] }, l.label)) })
27
+ ] });
28
+ }
29
+ export {
30
+ SegmentBar
31
+ };
32
+ //# sourceMappingURL=SegmentBar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/ui/CheckRow/CheckVisualization/visualizations/SegmentBar.tsx"],"sourcesContent":["\"use client\";\n\nimport { cva } from \"class-variance-authority\";\nimport { cn } from \"../../../../utils/style\";\nimport type { SegmentModel } from \"../../../../engine/types/visualization\";\nimport { statusVar } from \"../../../../components/SeoDrawer/variants\";\n\nconst swatchVariants = cva(\"w-[8px] h-[8px] rounded-[2px] inline-block\", {\n variants: {\n tone: {\n good: \"bg-seo-good\",\n warn: \"bg-seo-warn\",\n bad: \"bg-seo-bad\",\n muted: \"bg-neutral-300\",\n },\n },\n});\n\nexport function SegmentBar({ countLabel, filledPct, filledStatus, legend }: SegmentModel) {\n return (\n <>\n {countLabel && (\n <div className=\"text-[10px] text-neutral-500 font-mono mb-[4px] flex justify-end\">\n <span>{countLabel}</span>\n </div>\n )}\n\n <div className=\"flex h-[6px] rounded-[3px] overflow-hidden\">\n <i className={cn(\"block h-full\", statusVar({ status: filledStatus }))} style={{ width: `${filledPct}%`, background: \"var(--seo-c)\" }} />\n <i className=\"block h-full bg-neutral-150\" style={{ width: `${100 - filledPct}%` }} />\n </div>\n\n {legend && (\n <div className=\"flex gap-[14px] text-[11px] mt-[6px]\">\n {legend.map((l) => (\n <span key={l.label} className=\"inline-flex items-center gap-[5px] text-neutral-700\">\n <span className={swatchVariants({ tone: l.tone })} />\n {l.label}\n </span>\n ))}\n </div>\n )}\n </>\n );\n}\n"],"mappings":";AAoBI,mBAGM,KAIJ,YAPF;AAlBJ,SAAS,WAAW;AACpB,SAAS,UAAU;AAEnB,SAAS,iBAAiB;AAE1B,MAAM,iBAAiB,IAAI,8CAA8C;AAAA,EACvE,UAAU;AAAA,IACR,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,MAAM;AAAA,MACN,KAAK;AAAA,MACL,OAAO;AAAA,IACT;AAAA,EACF;AACF,CAAC;AAEM,SAAS,WAAW,EAAE,YAAY,WAAW,cAAc,OAAO,GAAiB;AACxF,SACE,iCACG;AAAA,kBACC,oBAAC,SAAI,WAAU,oEACb,8BAAC,UAAM,sBAAW,GACpB;AAAA,IAGF,qBAAC,SAAI,WAAU,8CACb;AAAA,0BAAC,OAAE,WAAW,GAAG,gBAAgB,UAAU,EAAE,QAAQ,aAAa,CAAC,CAAC,GAAG,OAAO,EAAE,OAAO,GAAG,SAAS,KAAK,YAAY,eAAe,GAAG;AAAA,MACtI,oBAAC,OAAE,WAAU,+BAA8B,OAAO,EAAE,OAAO,GAAG,MAAM,SAAS,IAAI,GAAG;AAAA,OACtF;AAAA,IAEC,UACC,oBAAC,SAAI,WAAU,wCACZ,iBAAO,IAAI,CAAC,MACX,qBAAC,UAAmB,WAAU,uDAC5B;AAAA,0BAAC,UAAK,WAAW,eAAe,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG;AAAA,MAClD,EAAE;AAAA,SAFM,EAAE,KAGb,CACD,GACH;AAAA,KAEJ;AAEJ;","names":[]}
@@ -0,0 +1,6 @@
1
+ import type { CheckId } from "../../../constants/checkIds";
2
+ export declare const LABELS: Record<CheckId, {
3
+ name: string;
4
+ tip: string;
5
+ }>;
6
+ //# sourceMappingURL=labels.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"labels.d.ts","sourceRoot":"","sources":["../../../../src/ui/CheckRow/constants/labels.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAE3D,eAAO,MAAM,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAkGjE,CAAC"}
@@ -0,0 +1,103 @@
1
+ const LABELS = {
2
+ introductionKeyword: {
3
+ name: "Keyphrase in introduction",
4
+ tip: "Whether the focus keyphrase appears in the first paragraph."
5
+ },
6
+ keyphraseLength: {
7
+ name: "Keyphrase length",
8
+ tip: "Word count of the keyphrase itself."
9
+ },
10
+ keyphraseDensity: {
11
+ name: "Keyphrase density",
12
+ tip: "Occurrences relative to total words. Ideal 0.5\u20132.5%."
13
+ },
14
+ metaDescriptionKeyword: {
15
+ name: "Keyphrase in meta description",
16
+ tip: "Whether the keyphrase appears in the meta description."
17
+ },
18
+ subheadingsKeyword: {
19
+ name: "Keyphrase in subheadings",
20
+ tip: "Whether subheadings (H2+) use the keyphrase."
21
+ },
22
+ textCompetingLinks: {
23
+ name: "Competing links",
24
+ tip: "Links that use your keyphrase as anchor text."
25
+ },
26
+ imageKeyphrase: {
27
+ name: "Keyphrase in image alts",
28
+ tip: "How many images reference the keyphrase in alt text."
29
+ },
30
+ keyphraseInSEOTitle: {
31
+ name: "Keyphrase in SEO title",
32
+ tip: "Whether the keyphrase is in the SEO title, and where."
33
+ },
34
+ slugKeyword: {
35
+ name: "Keyphrase in slug",
36
+ tip: "Whether the keyphrase appears in the URL slug."
37
+ },
38
+ functionWordsInKeyphrase: {
39
+ name: "Function words in keyphrase",
40
+ tip: "Your keyphrase is made up only of function words."
41
+ },
42
+ keyphraseDistribution: {
43
+ name: "Keyphrase distribution",
44
+ tip: "Where the keyphrase occurs across the document."
45
+ },
46
+ textLength: {
47
+ name: "Total word count",
48
+ tip: "Total words vs the recommended minimum (300)."
49
+ },
50
+ metaDescriptionLength: {
51
+ name: "Meta description length",
52
+ tip: "Ideal 120\u2013158 characters."
53
+ },
54
+ titleWidth: {
55
+ name: "SEO title width",
56
+ tip: "Pixel width; over ~580px truncates."
57
+ },
58
+ images: { name: "Images", tip: "Whether the text contains images." },
59
+ externalLinks: {
60
+ name: "Outbound links",
61
+ tip: "Follow / nofollow mix of outbound links."
62
+ },
63
+ internalLinks: {
64
+ name: "Internal links",
65
+ tip: "Follow / nofollow mix of internal links."
66
+ },
67
+ singleH1: {
68
+ name: "Exactly one H1",
69
+ tip: "There is one H1, correctly positioned."
70
+ },
71
+ subheadingsTooLong: {
72
+ name: "Subheading distribution",
73
+ tip: "Long sections without a subheading."
74
+ },
75
+ textParagraphTooLong: {
76
+ name: "Paragraph length",
77
+ tip: "Paragraphs over the recommended length."
78
+ },
79
+ textSentenceLength: {
80
+ name: "Sentence length",
81
+ tip: "Share of sentences over the recommended length."
82
+ },
83
+ textTransitionWords: {
84
+ name: "Transition words",
85
+ tip: "Share of sentences using transition words."
86
+ },
87
+ passiveVoice: {
88
+ name: "Passive voice",
89
+ tip: "Share of sentences in passive voice."
90
+ },
91
+ sentenceBeginnings: {
92
+ name: "Consecutive sentences",
93
+ tip: "Repetitive sentence beginnings."
94
+ },
95
+ fleschReadingEase: {
96
+ name: "Reading ease",
97
+ tip: "Flesch Reading Ease (0\u2013100); higher is easier. Aim for 60+."
98
+ }
99
+ };
100
+ export {
101
+ LABELS
102
+ };
103
+ //# sourceMappingURL=labels.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/ui/CheckRow/constants/labels.ts"],"sourcesContent":["import type { CheckId } from \"../../../constants/checkIds\";\n\nexport const LABELS: Record<CheckId, { name: string; tip: string }> = {\n introductionKeyword: {\n name: \"Keyphrase in introduction\",\n tip: \"Whether the focus keyphrase appears in the first paragraph.\",\n },\n keyphraseLength: {\n name: \"Keyphrase length\",\n tip: \"Word count of the keyphrase itself.\",\n },\n keyphraseDensity: {\n name: \"Keyphrase density\",\n tip: \"Occurrences relative to total words. Ideal 0.5–2.5%.\",\n },\n metaDescriptionKeyword: {\n name: \"Keyphrase in meta description\",\n tip: \"Whether the keyphrase appears in the meta description.\",\n },\n subheadingsKeyword: {\n name: \"Keyphrase in subheadings\",\n tip: \"Whether subheadings (H2+) use the keyphrase.\",\n },\n textCompetingLinks: {\n name: \"Competing links\",\n tip: \"Links that use your keyphrase as anchor text.\",\n },\n imageKeyphrase: {\n name: \"Keyphrase in image alts\",\n tip: \"How many images reference the keyphrase in alt text.\",\n },\n keyphraseInSEOTitle: {\n name: \"Keyphrase in SEO title\",\n tip: \"Whether the keyphrase is in the SEO title, and where.\",\n },\n slugKeyword: {\n name: \"Keyphrase in slug\",\n tip: \"Whether the keyphrase appears in the URL slug.\",\n },\n functionWordsInKeyphrase: {\n name: \"Function words in keyphrase\",\n tip: \"Your keyphrase is made up only of function words.\",\n },\n keyphraseDistribution: {\n name: \"Keyphrase distribution\",\n tip: \"Where the keyphrase occurs across the document.\",\n },\n textLength: {\n name: \"Total word count\",\n tip: \"Total words vs the recommended minimum (300).\",\n },\n metaDescriptionLength: {\n name: \"Meta description length\",\n tip: \"Ideal 120–158 characters.\",\n },\n titleWidth: {\n name: \"SEO title width\",\n tip: \"Pixel width; over ~580px truncates.\",\n },\n images: { name: \"Images\", tip: \"Whether the text contains images.\" },\n externalLinks: {\n name: \"Outbound links\",\n tip: \"Follow / nofollow mix of outbound links.\",\n },\n internalLinks: {\n name: \"Internal links\",\n tip: \"Follow / nofollow mix of internal links.\",\n },\n singleH1: {\n name: \"Exactly one H1\",\n tip: \"There is one H1, correctly positioned.\",\n },\n subheadingsTooLong: {\n name: \"Subheading distribution\",\n tip: \"Long sections without a subheading.\",\n },\n textParagraphTooLong: {\n name: \"Paragraph length\",\n tip: \"Paragraphs over the recommended length.\",\n },\n textSentenceLength: {\n name: \"Sentence length\",\n tip: \"Share of sentences over the recommended length.\",\n },\n textTransitionWords: {\n name: \"Transition words\",\n tip: \"Share of sentences using transition words.\",\n },\n passiveVoice: {\n name: \"Passive voice\",\n tip: \"Share of sentences in passive voice.\",\n },\n sentenceBeginnings: {\n name: \"Consecutive sentences\",\n tip: \"Repetitive sentence beginnings.\",\n },\n fleschReadingEase: {\n name: \"Reading ease\",\n tip: \"Flesch Reading Ease (0–100); higher is easier. Aim for 60+.\",\n },\n};\n"],"mappings":"AAEO,MAAM,SAAyD;AAAA,EACpE,qBAAqB;AAAA,IACnB,MAAM;AAAA,IACN,KAAK;AAAA,EACP;AAAA,EACA,iBAAiB;AAAA,IACf,MAAM;AAAA,IACN,KAAK;AAAA,EACP;AAAA,EACA,kBAAkB;AAAA,IAChB,MAAM;AAAA,IACN,KAAK;AAAA,EACP;AAAA,EACA,wBAAwB;AAAA,IACtB,MAAM;AAAA,IACN,KAAK;AAAA,EACP;AAAA,EACA,oBAAoB;AAAA,IAClB,MAAM;AAAA,IACN,KAAK;AAAA,EACP;AAAA,EACA,oBAAoB;AAAA,IAClB,MAAM;AAAA,IACN,KAAK;AAAA,EACP;AAAA,EACA,gBAAgB;AAAA,IACd,MAAM;AAAA,IACN,KAAK;AAAA,EACP;AAAA,EACA,qBAAqB;AAAA,IACnB,MAAM;AAAA,IACN,KAAK;AAAA,EACP;AAAA,EACA,aAAa;AAAA,IACX,MAAM;AAAA,IACN,KAAK;AAAA,EACP;AAAA,EACA,0BAA0B;AAAA,IACxB,MAAM;AAAA,IACN,KAAK;AAAA,EACP;AAAA,EACA,uBAAuB;AAAA,IACrB,MAAM;AAAA,IACN,KAAK;AAAA,EACP;AAAA,EACA,YAAY;AAAA,IACV,MAAM;AAAA,IACN,KAAK;AAAA,EACP;AAAA,EACA,uBAAuB;AAAA,IACrB,MAAM;AAAA,IACN,KAAK;AAAA,EACP;AAAA,EACA,YAAY;AAAA,IACV,MAAM;AAAA,IACN,KAAK;AAAA,EACP;AAAA,EACA,QAAQ,EAAE,MAAM,UAAU,KAAK,oCAAoC;AAAA,EACnE,eAAe;AAAA,IACb,MAAM;AAAA,IACN,KAAK;AAAA,EACP;AAAA,EACA,eAAe;AAAA,IACb,MAAM;AAAA,IACN,KAAK;AAAA,EACP;AAAA,EACA,UAAU;AAAA,IACR,MAAM;AAAA,IACN,KAAK;AAAA,EACP;AAAA,EACA,oBAAoB;AAAA,IAClB,MAAM;AAAA,IACN,KAAK;AAAA,EACP;AAAA,EACA,sBAAsB;AAAA,IACpB,MAAM;AAAA,IACN,KAAK;AAAA,EACP;AAAA,EACA,oBAAoB;AAAA,IAClB,MAAM;AAAA,IACN,KAAK;AAAA,EACP;AAAA,EACA,qBAAqB;AAAA,IACnB,MAAM;AAAA,IACN,KAAK;AAAA,EACP;AAAA,EACA,cAAc;AAAA,IACZ,MAAM;AAAA,IACN,KAAK;AAAA,EACP;AAAA,EACA,oBAAoB;AAAA,IAClB,MAAM;AAAA,IACN,KAAK;AAAA,EACP;AAAA,EACA,mBAAmB;AAAA,IACjB,MAAM;AAAA,IACN,KAAK;AAAA,EACP;AACF;","names":[]}
@@ -0,0 +1,7 @@
1
+ import type { CheckResult } from "../../engine/types/analysis";
2
+ interface CheckRowProps {
3
+ check: CheckResult;
4
+ }
5
+ export declare function CheckRow({ check }: CheckRowProps): import("react/jsx-runtime").JSX.Element;
6
+ export {};
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/CheckRow/index.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAG/D,UAAU,aAAa;IACrB,KAAK,EAAE,WAAW,CAAC;CACpB;AAED,wBAAgB,QAAQ,CAAC,EAAE,KAAK,EAAE,EAAE,aAAa,2CA4BhD"}
@@ -0,0 +1,29 @@
1
+ "use client";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import { CHECK_ICONS } from "../../components/icons";
4
+ import { CheckVisualization } from "./CheckVisualization";
5
+ import { LABELS } from "./constants/labels";
6
+ import { Pill } from "../Pill";
7
+ import { STATUS_PILL_LABEL } from "../../constants";
8
+ import { Tooltip } from "../Tooltip";
9
+ import { cn, ROW_SEPARATOR } from "../../utils/style";
10
+ function CheckRow({ check }) {
11
+ const meta = LABELS[check.id] ?? {
12
+ name: check.id,
13
+ tip: ""
14
+ };
15
+ const Icon = CHECK_ICONS[check.id] ?? CHECK_ICONS._default;
16
+ return /* @__PURE__ */ jsxs("div", { className: cn("relative px-[15px] py-[13px] overflow-visible", ROW_SEPARATOR), "data-status": check.status, children: [
17
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-[9px] mb-[7px]", children: [
18
+ /* @__PURE__ */ jsx("span", { className: "w-[26px] h-[26px] rounded-rs bg-neutral-100 text-neutral-600 grid place-items-center flex-none [&_svg]:size-[15px]", children: /* @__PURE__ */ jsx(Icon, { size: 15 }) }),
19
+ /* @__PURE__ */ jsx("span", { className: "flex-1 font-semibold text-[12.5px]", children: /* @__PURE__ */ jsx(Tooltip, { content: meta.tip, className: "border-0 border-b border-dotted border-neutral-400", children: meta.name }) }),
20
+ /* @__PURE__ */ jsx(Pill, { variant: check.status, children: STATUS_PILL_LABEL[check.status] })
21
+ ] }),
22
+ /* @__PURE__ */ jsx(CheckVisualization, { check }),
23
+ check.recommendation && /* @__PURE__ */ jsx("div", { className: "text-neutral-600 text-[11.5px]", children: check.recommendation })
24
+ ] });
25
+ }
26
+ export {
27
+ CheckRow
28
+ };
29
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/ui/CheckRow/index.tsx"],"sourcesContent":["\"use client\";\n\nimport { CHECK_ICONS } from \"../../components/icons\";\nimport { CheckVisualization } from \"./CheckVisualization\";\nimport { LABELS } from \"./constants/labels\";\nimport { Pill } from \"../Pill\";\nimport { STATUS_PILL_LABEL } from \"../../constants\";\nimport { Tooltip } from \"../Tooltip\";\nimport type { CheckResult } from \"../../engine/types/analysis\";\nimport { cn, ROW_SEPARATOR } from \"../../utils/style\";\n\ninterface CheckRowProps {\n check: CheckResult;\n}\n\nexport function CheckRow({ check }: CheckRowProps) {\n const meta = LABELS[check.id as keyof typeof LABELS] ?? {\n name: check.id,\n tip: \"\",\n };\n const Icon = CHECK_ICONS[check.id] ?? CHECK_ICONS._default;\n\n return (\n <div className={cn(\"relative px-[15px] py-[13px] overflow-visible\", ROW_SEPARATOR)} data-status={check.status}>\n <div className=\"flex items-center gap-[9px] mb-[7px]\">\n <span className=\"w-[26px] h-[26px] rounded-rs bg-neutral-100 text-neutral-600 grid place-items-center flex-none [&_svg]:size-[15px]\">\n <Icon size={15} />\n </span>\n\n <span className=\"flex-1 font-semibold text-[12.5px]\">\n <Tooltip content={meta.tip} className=\"border-0 border-b border-dotted border-neutral-400\">\n {meta.name}\n </Tooltip>\n </span>\n\n <Pill variant={check.status}>{STATUS_PILL_LABEL[check.status]}</Pill>\n </div>\n\n <CheckVisualization check={check} />\n\n {check.recommendation && <div className=\"text-neutral-600 text-[11.5px]\">{check.recommendation}</div>}\n </div>\n );\n}\n"],"mappings":";AAwBM,SAEI,KAFJ;AAtBN,SAAS,mBAAmB;AAC5B,SAAS,0BAA0B;AACnC,SAAS,cAAc;AACvB,SAAS,YAAY;AACrB,SAAS,yBAAyB;AAClC,SAAS,eAAe;AAExB,SAAS,IAAI,qBAAqB;AAM3B,SAAS,SAAS,EAAE,MAAM,GAAkB;AACjD,QAAM,OAAO,OAAO,MAAM,EAAyB,KAAK;AAAA,IACtD,MAAM,MAAM;AAAA,IACZ,KAAK;AAAA,EACP;AACA,QAAM,OAAO,YAAY,MAAM,EAAE,KAAK,YAAY;AAElD,SACE,qBAAC,SAAI,WAAW,GAAG,iDAAiD,aAAa,GAAG,eAAa,MAAM,QACrG;AAAA,yBAAC,SAAI,WAAU,wCACb;AAAA,0BAAC,UAAK,WAAU,sHACd,8BAAC,QAAK,MAAM,IAAI,GAClB;AAAA,MAEA,oBAAC,UAAK,WAAU,sCACd,8BAAC,WAAQ,SAAS,KAAK,KAAK,WAAU,sDACnC,eAAK,MACR,GACF;AAAA,MAEA,oBAAC,QAAK,SAAS,MAAM,QAAS,4BAAkB,MAAM,MAAM,GAAE;AAAA,OAChE;AAAA,IAEA,oBAAC,sBAAmB,OAAc;AAAA,IAEjC,MAAM,kBAAkB,oBAAC,SAAI,WAAU,kCAAkC,gBAAM,gBAAe;AAAA,KACjG;AAEJ;","names":[]}
@@ -0,0 +1,10 @@
1
+ import type { CheckResult, Status } from "../engine/types/analysis";
2
+ export type Filter = "all" | Status;
3
+ interface FilterPillsProps {
4
+ checks: CheckResult[];
5
+ value: Filter;
6
+ onChange: (f: Filter) => void;
7
+ }
8
+ export declare function FilterPills({ checks, value, onChange }: FilterPillsProps): import("react/jsx-runtime").JSX.Element;
9
+ export {};
10
+ //# sourceMappingURL=FilterPills.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilterPills.d.ts","sourceRoot":"","sources":["../../src/ui/FilterPills.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAGpE,MAAM,MAAM,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;AAkCpC,UAAU,gBAAgB;IACxB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/B;AAED,wBAAgB,WAAW,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,gBAAgB,2CASxE"}
@@ -0,0 +1,37 @@
1
+ "use client";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import { cva } from "class-variance-authority";
4
+ import { cn } from "../utils/style";
5
+ import { statusVar } from "../components/SeoDrawer/variants";
6
+ const filterPillVariants = cva("inline-flex items-center gap-[5px] px-[10px] py-[4px] rounded-[20px] border text-[11px] font-medium cursor-pointer", {
7
+ variants: {
8
+ active: {
9
+ true: "bg-neutral-1000 text-neutral-0 border-neutral-1000",
10
+ false: "border-neutral-200 bg-neutral-0 text-neutral-700"
11
+ }
12
+ },
13
+ defaultVariants: { active: false }
14
+ });
15
+ function Pill({ filter, label, count, active, onSelect, dotStatus }) {
16
+ return /* @__PURE__ */ jsxs("button", { type: "button", className: filterPillVariants({ active }), onClick: () => onSelect(filter), children: [
17
+ dotStatus && /* @__PURE__ */ jsx("span", { className: cn("w-[6px] h-[6px] rounded-full inline-block", statusVar({ status: dotStatus })), style: { background: "var(--seo-c)" } }),
18
+ label,
19
+ " ",
20
+ /* @__PURE__ */ jsx("span", { className: "font-mono font-bold", children: count })
21
+ ] });
22
+ }
23
+ function countByStatus(checks, status) {
24
+ return checks.filter((c) => c.status === status).length;
25
+ }
26
+ function FilterPills({ checks, value, onChange }) {
27
+ return /* @__PURE__ */ jsxs("div", { className: "flex gap-[6px] flex-wrap px-[15px] py-[11px]", children: [
28
+ /* @__PURE__ */ jsx(Pill, { filter: "all", label: "All", count: checks.length, active: value === "all", onSelect: onChange }),
29
+ /* @__PURE__ */ jsx(Pill, { filter: "bad", label: "Problems", count: countByStatus(checks, "bad"), active: value === "bad", onSelect: onChange, dotStatus: "bad" }),
30
+ /* @__PURE__ */ jsx(Pill, { filter: "warn", label: "Needs work", count: countByStatus(checks, "warn"), active: value === "warn", onSelect: onChange, dotStatus: "warn" }),
31
+ /* @__PURE__ */ jsx(Pill, { filter: "good", label: "Good", count: countByStatus(checks, "good"), active: value === "good", onSelect: onChange, dotStatus: "good" })
32
+ ] });
33
+ }
34
+ export {
35
+ FilterPills
36
+ };
37
+ //# sourceMappingURL=FilterPills.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/ui/FilterPills.tsx"],"sourcesContent":["\"use client\";\n\nimport { cva } from \"class-variance-authority\";\nimport { cn } from \"../utils/style\";\nimport type { CheckResult, Status } from \"../engine/types/analysis\";\nimport { statusVar } from \"../components/SeoDrawer/variants\";\n\nexport type Filter = \"all\" | Status;\n\nconst filterPillVariants = cva(\"inline-flex items-center gap-[5px] px-[10px] py-[4px] rounded-[20px] border text-[11px] font-medium cursor-pointer\", {\n variants: {\n active: {\n true: \"bg-neutral-1000 text-neutral-0 border-neutral-1000\",\n false: \"border-neutral-200 bg-neutral-0 text-neutral-700\",\n },\n },\n defaultVariants: { active: false },\n});\n\ninterface PillProps {\n filter: Filter;\n label: string;\n count: number;\n active: boolean;\n onSelect: (f: Filter) => void;\n dotStatus?: Status;\n}\n\nfunction Pill({ filter, label, count, active, onSelect, dotStatus }: PillProps) {\n return (\n <button type=\"button\" className={filterPillVariants({ active })} onClick={() => onSelect(filter)}>\n {dotStatus && <span className={cn(\"w-[6px] h-[6px] rounded-full inline-block\", statusVar({ status: dotStatus }))} style={{ background: \"var(--seo-c)\" }} />}\n {label} <span className=\"font-mono font-bold\">{count}</span>\n </button>\n );\n}\n\nfunction countByStatus(checks: CheckResult[], status: Status) {\n return checks.filter((c) => c.status === status).length;\n}\n\ninterface FilterPillsProps {\n checks: CheckResult[];\n value: Filter;\n onChange: (f: Filter) => void;\n}\n\nexport function FilterPills({ checks, value, onChange }: FilterPillsProps) {\n return (\n <div className=\"flex gap-[6px] flex-wrap px-[15px] py-[11px]\">\n <Pill filter=\"all\" label=\"All\" count={checks.length} active={value === \"all\"} onSelect={onChange} />\n <Pill filter=\"bad\" label=\"Problems\" count={countByStatus(checks, \"bad\")} active={value === \"bad\"} onSelect={onChange} dotStatus=\"bad\" />\n <Pill filter=\"warn\" label=\"Needs work\" count={countByStatus(checks, \"warn\")} active={value === \"warn\"} onSelect={onChange} dotStatus=\"warn\" />\n <Pill filter=\"good\" label=\"Good\" count={countByStatus(checks, \"good\")} active={value === \"good\"} onSelect={onChange} dotStatus=\"good\" />\n </div>\n );\n}\n"],"mappings":";AA8BI,SACgB,KADhB;AA5BJ,SAAS,WAAW;AACpB,SAAS,UAAU;AAEnB,SAAS,iBAAiB;AAI1B,MAAM,qBAAqB,IAAI,sHAAsH;AAAA,EACnJ,UAAU;AAAA,IACR,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,OAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA,iBAAiB,EAAE,QAAQ,MAAM;AACnC,CAAC;AAWD,SAAS,KAAK,EAAE,QAAQ,OAAO,OAAO,QAAQ,UAAU,UAAU,GAAc;AAC9E,SACE,qBAAC,YAAO,MAAK,UAAS,WAAW,mBAAmB,EAAE,OAAO,CAAC,GAAG,SAAS,MAAM,SAAS,MAAM,GAC5F;AAAA,iBAAa,oBAAC,UAAK,WAAW,GAAG,6CAA6C,UAAU,EAAE,QAAQ,UAAU,CAAC,CAAC,GAAG,OAAO,EAAE,YAAY,eAAe,GAAG;AAAA,IACxJ;AAAA,IAAM;AAAA,IAAC,oBAAC,UAAK,WAAU,uBAAuB,iBAAM;AAAA,KACvD;AAEJ;AAEA,SAAS,cAAc,QAAuB,QAAgB;AAC5D,SAAO,OAAO,OAAO,CAAC,MAAM,EAAE,WAAW,MAAM,EAAE;AACnD;AAQO,SAAS,YAAY,EAAE,QAAQ,OAAO,SAAS,GAAqB;AACzE,SACE,qBAAC,SAAI,WAAU,gDACb;AAAA,wBAAC,QAAK,QAAO,OAAM,OAAM,OAAM,OAAO,OAAO,QAAQ,QAAQ,UAAU,OAAO,UAAU,UAAU;AAAA,IAClG,oBAAC,QAAK,QAAO,OAAM,OAAM,YAAW,OAAO,cAAc,QAAQ,KAAK,GAAG,QAAQ,UAAU,OAAO,UAAU,UAAU,WAAU,OAAM;AAAA,IACtI,oBAAC,QAAK,QAAO,QAAO,OAAM,cAAa,OAAO,cAAc,QAAQ,MAAM,GAAG,QAAQ,UAAU,QAAQ,UAAU,UAAU,WAAU,QAAO;AAAA,IAC5I,oBAAC,QAAK,QAAO,QAAO,OAAM,QAAO,OAAO,cAAc,QAAQ,MAAM,GAAG,QAAQ,UAAU,QAAQ,UAAU,UAAU,WAAU,QAAO;AAAA,KACxI;AAEJ;","names":[]}
@@ -0,0 +1,9 @@
1
+ import type { ReactNode } from "react";
2
+ interface KpiCardProps {
3
+ label: string;
4
+ value: ReactNode;
5
+ suffix?: string;
6
+ }
7
+ export declare function KpiCard({ label, value, suffix }: KpiCardProps): import("react/jsx-runtime").JSX.Element;
8
+ export {};
9
+ //# sourceMappingURL=KpiCard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KpiCard.d.ts","sourceRoot":"","sources":["../../src/ui/KpiCard.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,UAAU,YAAY;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,SAAS,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,OAAO,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,YAAY,2CAa7D"}
@@ -0,0 +1,19 @@
1
+ "use client";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import { SectionWrapper } from "./SectionWrapper";
4
+ function KpiCard({ label, value, suffix }) {
5
+ return /* @__PURE__ */ jsxs(SectionWrapper, { className: "px-[13px] py-[12px]", children: [
6
+ /* @__PURE__ */ jsx("div", { className: "flex items-center gap-[6px]", children: /* @__PURE__ */ jsx("span", { className: "text-[9.5px] uppercase tracking-[0.05em] text-neutral-500 font-semibold", children: label }) }),
7
+ /* @__PURE__ */ jsxs("div", { className: "text-[23px] font-bold mt-[5px] leading-none", children: [
8
+ value,
9
+ suffix && /* @__PURE__ */ jsxs("small", { className: "text-[11px] font-medium text-neutral-500", children: [
10
+ " ",
11
+ suffix
12
+ ] })
13
+ ] })
14
+ ] });
15
+ }
16
+ export {
17
+ KpiCard
18
+ };
19
+ //# sourceMappingURL=KpiCard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/ui/KpiCard.tsx"],"sourcesContent":["\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport { SectionWrapper } from \"./SectionWrapper\";\n\ninterface KpiCardProps {\n label: string;\n value: ReactNode;\n suffix?: string;\n}\n\nexport function KpiCard({ label, value, suffix }: KpiCardProps) {\n return (\n <SectionWrapper className=\"px-[13px] py-[12px]\">\n <div className=\"flex items-center gap-[6px]\">\n <span className=\"text-[9.5px] uppercase tracking-[0.05em] text-neutral-500 font-semibold\">{label}</span>\n </div>\n\n <div className=\"text-[23px] font-bold mt-[5px] leading-none\">\n {value}\n {suffix && <small className=\"text-[11px] font-medium text-neutral-500\"> {suffix}</small>}\n </div>\n </SectionWrapper>\n );\n}\n"],"mappings":";AAeQ,cAKW,YALX;AAZR,SAAS,sBAAsB;AAQxB,SAAS,QAAQ,EAAE,OAAO,OAAO,OAAO,GAAiB;AAC9D,SACE,qBAAC,kBAAe,WAAU,uBACxB;AAAA,wBAAC,SAAI,WAAU,+BACb,8BAAC,UAAK,WAAU,2EAA2E,iBAAM,GACnG;AAAA,IAEA,qBAAC,SAAI,WAAU,+CACZ;AAAA;AAAA,MACA,UAAU,qBAAC,WAAM,WAAU,4CAA2C;AAAA;AAAA,QAAE;AAAA,SAAO;AAAA,OAClF;AAAA,KACF;AAEJ;","names":[]}
@@ -0,0 +1,9 @@
1
+ import type { ReactNode } from "react";
2
+ import type { Status } from "../engine/types/analysis";
3
+ interface PillProps {
4
+ variant: Status | "neutral";
5
+ children: ReactNode;
6
+ }
7
+ export declare function Pill({ variant, children }: PillProps): import("react/jsx-runtime").JSX.Element;
8
+ export {};
9
+ //# sourceMappingURL=Pill.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Pill.d.ts","sourceRoot":"","sources":["../../src/ui/Pill.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAcvD,UAAU,SAAS;IACjB,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,wBAAgB,IAAI,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,SAAS,2CAEpD"}
@@ -0,0 +1,20 @@
1
+ "use client";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import { cva } from "class-variance-authority";
4
+ const pillVariants = cva("inline-flex items-center gap-[4px] px-[14px] py-[1px] rounded-[20px] text-[11px] font-semibold", {
5
+ variants: {
6
+ variant: {
7
+ good: "bg-seo-good-100 text-seo-good",
8
+ warn: "bg-seo-warn-100 text-seo-warn",
9
+ bad: "bg-seo-bad-100 text-seo-bad",
10
+ neutral: "bg-neutral-100 text-neutral-500"
11
+ }
12
+ }
13
+ });
14
+ function Pill({ variant, children }) {
15
+ return /* @__PURE__ */ jsx("span", { className: pillVariants({ variant }), children });
16
+ }
17
+ export {
18
+ Pill
19
+ };
20
+ //# sourceMappingURL=Pill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/ui/Pill.tsx"],"sourcesContent":["\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport type { Status } from \"../engine/types/analysis\";\nimport { cva } from \"class-variance-authority\";\n\nconst pillVariants = cva(\"inline-flex items-center gap-[4px] px-[14px] py-[1px] rounded-[20px] text-[11px] font-semibold\", {\n variants: {\n variant: {\n good: \"bg-seo-good-100 text-seo-good\",\n warn: \"bg-seo-warn-100 text-seo-warn\",\n bad: \"bg-seo-bad-100 text-seo-bad\",\n neutral: \"bg-neutral-100 text-neutral-500\",\n },\n },\n});\n\ninterface PillProps {\n variant: Status | \"neutral\";\n children: ReactNode;\n}\n\nexport function Pill({ variant, children }: PillProps) {\n return <span className={pillVariants({ variant })}>{children}</span>;\n}\n"],"mappings":";AAuBS;AAnBT,SAAS,WAAW;AAEpB,MAAM,eAAe,IAAI,kGAAkG;AAAA,EACzH,UAAU;AAAA,IACR,SAAS;AAAA,MACP,MAAM;AAAA,MACN,MAAM;AAAA,MACN,KAAK;AAAA,MACL,SAAS;AAAA,IACX;AAAA,EACF;AACF,CAAC;AAOM,SAAS,KAAK,EAAE,SAAS,SAAS,GAAc;AACrD,SAAO,oBAAC,UAAK,WAAW,aAAa,EAAE,QAAQ,CAAC,GAAI,UAAS;AAC/D;","names":[]}
@@ -0,0 +1,8 @@
1
+ import type { Status } from "../engine/types/analysis";
2
+ interface ScoreRingProps {
3
+ score: number;
4
+ status: Status;
5
+ }
6
+ export declare function ScoreRing({ score, status }: ScoreRingProps): import("react/jsx-runtime").JSX.Element;
7
+ export {};
8
+ //# sourceMappingURL=ScoreRing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScoreRing.d.ts","sourceRoot":"","sources":["../../src/ui/ScoreRing.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAIvD,UAAU,cAAc;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,SAAS,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,cAAc,2CAa1D"}
@@ -0,0 +1,20 @@
1
+ "use client";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import { cn } from "../utils/style";
4
+ import { statusVar } from "../components/SeoDrawer/variants";
5
+ function ScoreRing({ score, status }) {
6
+ return /* @__PURE__ */ jsx(
7
+ "div",
8
+ {
9
+ className: cn("w-[60px] h-[60px] rounded-full flex-none grid place-items-center", statusVar({ status })),
10
+ style: {
11
+ background: `conic-gradient(var(--seo-c) ${score}%, var(--theme-elevation-150) 0)`
12
+ },
13
+ children: /* @__PURE__ */ jsx("div", { className: "w-[48px] h-[48px] rounded-full bg-neutral-0 grid place-items-center font-bold text-[18px]", style: { color: "var(--seo-c)" }, children: score })
14
+ }
15
+ );
16
+ }
17
+ export {
18
+ ScoreRing
19
+ };
20
+ //# sourceMappingURL=ScoreRing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/ui/ScoreRing.tsx"],"sourcesContent":["\"use client\";\n\nimport type { Status } from \"../engine/types/analysis\";\nimport { cn } from \"../utils/style\";\nimport { statusVar } from \"../components/SeoDrawer/variants\";\n\ninterface ScoreRingProps {\n score: number;\n status: Status;\n}\n\nexport function ScoreRing({ score, status }: ScoreRingProps) {\n return (\n <div\n className={cn(\"w-[60px] h-[60px] rounded-full flex-none grid place-items-center\", statusVar({ status }))}\n style={{\n background: `conic-gradient(var(--seo-c) ${score}%, var(--theme-elevation-150) 0)`,\n }}\n >\n <div className=\"w-[48px] h-[48px] rounded-full bg-neutral-0 grid place-items-center font-bold text-[18px]\" style={{ color: \"var(--seo-c)\" }}>\n {score}\n </div>\n </div>\n );\n}\n"],"mappings":";AAmBM;AAhBN,SAAS,UAAU;AACnB,SAAS,iBAAiB;AAOnB,SAAS,UAAU,EAAE,OAAO,OAAO,GAAmB;AAC3D,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,GAAG,oEAAoE,UAAU,EAAE,OAAO,CAAC,CAAC;AAAA,MACvG,OAAO;AAAA,QACL,YAAY,+BAA+B,KAAK;AAAA,MAClD;AAAA,MAEA,8BAAC,SAAI,WAAU,6FAA4F,OAAO,EAAE,OAAO,eAAe,GACvI,iBACH;AAAA;AAAA,EACF;AAEJ;","names":[]}
@@ -0,0 +1,9 @@
1
+ import type { ReactNode } from "react";
2
+ interface SectionCardProps {
3
+ title: string;
4
+ widget?: ReactNode;
5
+ children: ReactNode;
6
+ }
7
+ export declare function SectionCard({ title, widget, children }: SectionCardProps): import("react/jsx-runtime").JSX.Element;
8
+ export {};
9
+ //# sourceMappingURL=SectionCard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SectionCard.d.ts","sourceRoot":"","sources":["../../src/ui/SectionCard.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,UAAU,gBAAgB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,gBAAgB,2CAUxE"}