@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.
- package/dist/admin.css +1214 -0
- package/dist/components/SeoButton/index.d.ts +14 -0
- package/dist/components/SeoButton/index.d.ts.map +1 -0
- package/dist/components/SeoButton/index.js +81 -0
- package/dist/components/SeoButton/index.js.map +1 -0
- package/dist/components/SeoDrawer/TabsNav/constants.d.ts +3 -0
- package/dist/components/SeoDrawer/TabsNav/constants.d.ts.map +1 -0
- package/dist/components/SeoDrawer/TabsNav/constants.js +13 -0
- package/dist/components/SeoDrawer/TabsNav/constants.js.map +1 -0
- package/dist/components/SeoDrawer/TabsNav/index.d.ts +8 -0
- package/dist/components/SeoDrawer/TabsNav/index.d.ts.map +1 -0
- package/dist/components/SeoDrawer/TabsNav/index.js +14 -0
- package/dist/components/SeoDrawer/TabsNav/index.js.map +1 -0
- package/dist/components/SeoDrawer/TabsNav/types.d.ts +8 -0
- package/dist/components/SeoDrawer/TabsNav/types.d.ts.map +1 -0
- package/dist/components/SeoDrawer/TabsNav/types.js +1 -0
- package/dist/components/SeoDrawer/TabsNav/types.js.map +1 -0
- package/dist/components/SeoDrawer/TabsNav/variants.d.ts +4 -0
- package/dist/components/SeoDrawer/TabsNav/variants.d.ts.map +1 -0
- package/dist/components/SeoDrawer/TabsNav/variants.js +14 -0
- package/dist/components/SeoDrawer/TabsNav/variants.js.map +1 -0
- package/dist/components/SeoDrawer/analysisDecision.d.ts +7 -0
- package/dist/components/SeoDrawer/analysisDecision.d.ts.map +1 -0
- package/dist/components/SeoDrawer/analysisDecision.js +12 -0
- package/dist/components/SeoDrawer/analysisDecision.js.map +1 -0
- package/dist/components/SeoDrawer/build-analysis-input.d.ts +24 -0
- package/dist/components/SeoDrawer/build-analysis-input.d.ts.map +1 -0
- package/dist/components/SeoDrawer/build-analysis-input.js +27 -0
- package/dist/components/SeoDrawer/build-analysis-input.js.map +1 -0
- package/dist/components/SeoDrawer/buildInput.d.ts +17 -0
- package/dist/components/SeoDrawer/buildInput.d.ts.map +1 -0
- package/dist/components/SeoDrawer/buildInput.js +32 -0
- package/dist/components/SeoDrawer/buildInput.js.map +1 -0
- package/dist/components/SeoDrawer/components/Header.d.ts +9 -0
- package/dist/components/SeoDrawer/components/Header.d.ts.map +1 -0
- package/dist/components/SeoDrawer/components/Header.js +21 -0
- package/dist/components/SeoDrawer/components/Header.js.map +1 -0
- package/dist/components/SeoDrawer/components/SerpPreview/highlight-keyphrase.d.ts +3 -0
- package/dist/components/SeoDrawer/components/SerpPreview/highlight-keyphrase.d.ts.map +1 -0
- package/dist/components/SeoDrawer/components/SerpPreview/highlight-keyphrase.js +14 -0
- package/dist/components/SeoDrawer/components/SerpPreview/highlight-keyphrase.js.map +1 -0
- package/dist/components/SeoDrawer/components/SerpPreview/index.d.ts +12 -0
- package/dist/components/SeoDrawer/components/SerpPreview/index.d.ts.map +1 -0
- package/dist/components/SeoDrawer/components/SerpPreview/index.js +23 -0
- package/dist/components/SeoDrawer/components/SerpPreview/index.js.map +1 -0
- package/dist/components/SeoDrawer/components/SerpPreview/serp-favicon.d.ts +8 -0
- package/dist/components/SeoDrawer/components/SerpPreview/serp-favicon.d.ts.map +1 -0
- package/dist/components/SeoDrawer/components/SerpPreview/serp-favicon.js +8 -0
- package/dist/components/SeoDrawer/components/SerpPreview/serp-favicon.js.map +1 -0
- package/dist/components/SeoDrawer/components/SerpPreview/truncate-description.d.ts +3 -0
- package/dist/components/SeoDrawer/components/SerpPreview/truncate-description.d.ts.map +1 -0
- package/dist/components/SeoDrawer/components/SerpPreview/truncate-description.js +16 -0
- package/dist/components/SeoDrawer/components/SerpPreview/truncate-description.js.map +1 -0
- package/dist/components/SeoDrawer/components/SerpPreview/variants.d.ts +19 -0
- package/dist/components/SeoDrawer/components/SerpPreview/variants.d.ts.map +1 -0
- package/dist/components/SeoDrawer/components/SerpPreview/variants.js +58 -0
- package/dist/components/SeoDrawer/components/SerpPreview/variants.js.map +1 -0
- package/dist/components/SeoDrawer/index.d.ts +18 -0
- package/dist/components/SeoDrawer/index.d.ts.map +1 -0
- package/dist/components/SeoDrawer/index.js +37 -0
- package/dist/components/SeoDrawer/index.js.map +1 -0
- package/dist/components/SeoDrawer/keyphrasePending.d.ts +2 -0
- package/dist/components/SeoDrawer/keyphrasePending.d.ts.map +1 -0
- package/dist/components/SeoDrawer/keyphrasePending.js +9 -0
- package/dist/components/SeoDrawer/keyphrasePending.js.map +1 -0
- package/dist/components/SeoDrawer/languagePacks.d.ts +2 -0
- package/dist/components/SeoDrawer/languagePacks.d.ts.map +1 -0
- package/dist/components/SeoDrawer/languagePacks.js +19 -0
- package/dist/components/SeoDrawer/languagePacks.js.map +1 -0
- package/dist/components/SeoDrawer/tabs/InclusiveTab.d.ts +5 -0
- package/dist/components/SeoDrawer/tabs/InclusiveTab.d.ts.map +1 -0
- package/dist/components/SeoDrawer/tabs/InclusiveTab.js +46 -0
- package/dist/components/SeoDrawer/tabs/InclusiveTab.js.map +1 -0
- package/dist/components/SeoDrawer/tabs/KeyphraseTab.d.ts +11 -0
- package/dist/components/SeoDrawer/tabs/KeyphraseTab.d.ts.map +1 -0
- package/dist/components/SeoDrawer/tabs/KeyphraseTab.js +72 -0
- package/dist/components/SeoDrawer/tabs/KeyphraseTab.js.map +1 -0
- package/dist/components/SeoDrawer/tabs/OnPageTab.d.ts +5 -0
- package/dist/components/SeoDrawer/tabs/OnPageTab.d.ts.map +1 -0
- package/dist/components/SeoDrawer/tabs/OnPageTab.js +37 -0
- package/dist/components/SeoDrawer/tabs/OnPageTab.js.map +1 -0
- package/dist/components/SeoDrawer/tabs/ReadabilityTab.d.ts +5 -0
- package/dist/components/SeoDrawer/tabs/ReadabilityTab.d.ts.map +1 -0
- package/dist/components/SeoDrawer/tabs/ReadabilityTab.js +37 -0
- package/dist/components/SeoDrawer/tabs/ReadabilityTab.js.map +1 -0
- package/dist/components/SeoDrawer/tabs/SerpTab.d.ts +7 -0
- package/dist/components/SeoDrawer/tabs/SerpTab.d.ts.map +1 -0
- package/dist/components/SeoDrawer/tabs/SerpTab.js +41 -0
- package/dist/components/SeoDrawer/tabs/SerpTab.js.map +1 -0
- package/dist/components/SeoDrawer/tabs/VitalsTab.d.ts +7 -0
- package/dist/components/SeoDrawer/tabs/VitalsTab.d.ts.map +1 -0
- package/dist/components/SeoDrawer/tabs/VitalsTab.js +42 -0
- package/dist/components/SeoDrawer/tabs/VitalsTab.js.map +1 -0
- package/dist/components/SeoDrawer/useAnalysis.d.ts +17 -0
- package/dist/components/SeoDrawer/useAnalysis.d.ts.map +1 -0
- package/dist/components/SeoDrawer/useAnalysis.js +57 -0
- package/dist/components/SeoDrawer/useAnalysis.js.map +1 -0
- package/dist/components/SeoDrawer/useLiveDocument.d.ts +22 -0
- package/dist/components/SeoDrawer/useLiveDocument.d.ts.map +1 -0
- package/dist/components/SeoDrawer/useLiveDocument.js +85 -0
- package/dist/components/SeoDrawer/useLiveDocument.js.map +1 -0
- package/dist/components/SeoDrawer/variants.d.ts +4 -0
- package/dist/components/SeoDrawer/variants.d.ts.map +1 -0
- package/dist/components/SeoDrawer/variants.js +14 -0
- package/dist/components/SeoDrawer/variants.js.map +1 -0
- package/dist/components/icons.d.ts +7 -0
- package/dist/components/icons.d.ts.map +1 -0
- package/dist/components/icons.js +40 -0
- package/dist/components/icons.js.map +1 -0
- package/dist/config.d.ts +4 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +15 -0
- package/dist/config.js.map +1 -0
- package/dist/constants/checkIds.d.ts +8 -0
- package/dist/constants/checkIds.d.ts.map +1 -0
- package/dist/constants/checkIds.js +21 -0
- package/dist/constants/checkIds.js.map +1 -0
- package/dist/constants/index.d.ts +5 -0
- package/dist/constants/index.d.ts.map +1 -0
- package/dist/constants/index.js +10 -0
- package/dist/constants/index.js.map +1 -0
- package/dist/constants/statuses.d.ts +3 -0
- package/dist/constants/statuses.d.ts.map +1 -0
- package/dist/constants/statuses.js +9 -0
- package/dist/constants/statuses.js.map +1 -0
- package/dist/content/extractContent.d.ts +3 -0
- package/dist/content/extractContent.d.ts.map +1 -0
- package/dist/content/extractContent.js +31 -0
- package/dist/content/extractContent.js.map +1 -0
- package/dist/content/lexicalToHtml.d.ts +6 -0
- package/dist/content/lexicalToHtml.d.ts.map +1 -0
- package/dist/content/lexicalToHtml.js +15 -0
- package/dist/content/lexicalToHtml.js.map +1 -0
- package/dist/content/uploads/collect-upload-refs.d.ts +5 -0
- package/dist/content/uploads/collect-upload-refs.d.ts.map +1 -0
- package/dist/content/uploads/collect-upload-refs.js +19 -0
- package/dist/content/uploads/collect-upload-refs.js.map +1 -0
- package/dist/content/uploads/hydrate-values.d.ts +5 -0
- package/dist/content/uploads/hydrate-values.d.ts.map +1 -0
- package/dist/content/uploads/hydrate-values.js +15 -0
- package/dist/content/uploads/hydrate-values.js.map +1 -0
- package/dist/content/uploads/media-resolver.d.ts +7 -0
- package/dist/content/uploads/media-resolver.d.ts.map +1 -0
- package/dist/content/uploads/media-resolver.js +60 -0
- package/dist/content/uploads/media-resolver.js.map +1 -0
- package/dist/content/uploads/transform-lexical-uploads.d.ts +5 -0
- package/dist/content/uploads/transform-lexical-uploads.d.ts.map +1 -0
- package/dist/content/uploads/transform-lexical-uploads.js +34 -0
- package/dist/content/uploads/transform-lexical-uploads.js.map +1 -0
- package/dist/content/uploads/transform-upload-values.d.ts +10 -0
- package/dist/content/uploads/transform-upload-values.d.ts.map +1 -0
- package/dist/content/uploads/transform-upload-values.js +108 -0
- package/dist/content/uploads/transform-upload-values.js.map +1 -0
- package/dist/content/uploads/types.d.ts +8 -0
- package/dist/content/uploads/types.d.ts.map +1 -0
- package/dist/content/uploads/types.js +7 -0
- package/dist/content/uploads/types.js.map +1 -0
- package/dist/content/walkValue.d.ts +14 -0
- package/dist/content/walkValue.d.ts.map +1 -0
- package/dist/content/walkValue.js +62 -0
- package/dist/content/walkValue.js.map +1 -0
- package/dist/css.d.js +1 -0
- package/dist/css.d.js.map +1 -0
- package/dist/engine/assessorAdapter.d.ts +14 -0
- package/dist/engine/assessorAdapter.d.ts.map +1 -0
- package/dist/engine/assessorAdapter.js +23 -0
- package/dist/engine/assessorAdapter.js.map +1 -0
- package/dist/engine/buildPaper.d.ts +4 -0
- package/dist/engine/buildPaper.d.ts.map +1 -0
- package/dist/engine/buildPaper.js +16 -0
- package/dist/engine/buildPaper.js.map +1 -0
- package/dist/engine/extractCheckData.d.ts +4 -0
- package/dist/engine/extractCheckData.d.ts.map +1 -0
- package/dist/engine/extractCheckData.js +162 -0
- package/dist/engine/extractCheckData.js.map +1 -0
- package/dist/engine/helpers/has-keyphrase.d.ts +2 -0
- package/dist/engine/helpers/has-keyphrase.d.ts.map +1 -0
- package/dist/engine/helpers/has-keyphrase.js +7 -0
- package/dist/engine/helpers/has-keyphrase.js.map +1 -0
- package/dist/engine/helpers/title-progress.d.ts +5 -0
- package/dist/engine/helpers/title-progress.d.ts.map +1 -0
- package/dist/engine/helpers/title-progress.js +21 -0
- package/dist/engine/helpers/title-progress.js.map +1 -0
- package/dist/engine/inclusiveScore.d.ts +15 -0
- package/dist/engine/inclusiveScore.d.ts.map +1 -0
- package/dist/engine/inclusiveScore.js +25 -0
- package/dist/engine/inclusiveScore.js.map +1 -0
- package/dist/engine/recommendations.d.ts +7 -0
- package/dist/engine/recommendations.d.ts.map +1 -0
- package/dist/engine/recommendations.js +53 -0
- package/dist/engine/recommendations.js.map +1 -0
- package/dist/engine/researcherAdapter.d.ts +6 -0
- package/dist/engine/researcherAdapter.d.ts.map +1 -0
- package/dist/engine/researcherAdapter.js +16 -0
- package/dist/engine/researcherAdapter.js.map +1 -0
- package/dist/engine/runAnalysis/index.d.ts +3 -0
- package/dist/engine/runAnalysis/index.d.ts.map +1 -0
- package/dist/engine/runAnalysis/index.js +24 -0
- package/dist/engine/runAnalysis/index.js.map +1 -0
- package/dist/engine/runAnalysis/services/derive-inclusive.d.ts +4 -0
- package/dist/engine/runAnalysis/services/derive-inclusive.d.ts.map +1 -0
- package/dist/engine/runAnalysis/services/derive-inclusive.js +47 -0
- package/dist/engine/runAnalysis/services/derive-inclusive.js.map +1 -0
- package/dist/engine/runAnalysis/services/derive-readability.d.ts +4 -0
- package/dist/engine/runAnalysis/services/derive-readability.d.ts.map +1 -0
- package/dist/engine/runAnalysis/services/derive-readability.js +32 -0
- package/dist/engine/runAnalysis/services/derive-readability.js.map +1 -0
- package/dist/engine/runAnalysis/services/derive-seo.d.ts +18 -0
- package/dist/engine/runAnalysis/services/derive-seo.d.ts.map +1 -0
- package/dist/engine/runAnalysis/services/derive-seo.js +40 -0
- package/dist/engine/runAnalysis/services/derive-seo.js.map +1 -0
- package/dist/engine/runAnalysis/services/derive-serp.d.ts +3 -0
- package/dist/engine/runAnalysis/services/derive-serp.d.ts.map +1 -0
- package/dist/engine/runAnalysis/services/derive-serp.js +13 -0
- package/dist/engine/runAnalysis/services/derive-serp.js.map +1 -0
- package/dist/engine/runAnalysis/services/derive-vitals/index.d.ts +4 -0
- package/dist/engine/runAnalysis/services/derive-vitals/index.d.ts.map +1 -0
- package/dist/engine/runAnalysis/services/derive-vitals/index.js +19 -0
- package/dist/engine/runAnalysis/services/derive-vitals/index.js.map +1 -0
- package/dist/engine/runAnalysis/services/derive-vitals/researches.d.ts +19 -0
- package/dist/engine/runAnalysis/services/derive-vitals/researches.d.ts.map +1 -0
- package/dist/engine/runAnalysis/services/derive-vitals/researches.js +47 -0
- package/dist/engine/runAnalysis/services/derive-vitals/researches.js.map +1 -0
- package/dist/engine/runAnalysis/utils/enrich.d.ts +5 -0
- package/dist/engine/runAnalysis/utils/enrich.d.ts.map +1 -0
- package/dist/engine/runAnalysis/utils/enrich.js +16 -0
- package/dist/engine/runAnalysis/utils/enrich.js.map +1 -0
- package/dist/engine/runAnalysis/utils/toCategory.d.ts +3 -0
- package/dist/engine/runAnalysis/utils/toCategory.d.ts.map +1 -0
- package/dist/engine/runAnalysis/utils/toCategory.js +13 -0
- package/dist/engine/runAnalysis/utils/toCategory.js.map +1 -0
- package/dist/engine/scoreStatus.d.ts +8 -0
- package/dist/engine/scoreStatus.d.ts.map +1 -0
- package/dist/engine/scoreStatus.js +35 -0
- package/dist/engine/scoreStatus.js.map +1 -0
- package/dist/engine/types/analysis.d.ts +81 -0
- package/dist/engine/types/analysis.d.ts.map +1 -0
- package/dist/engine/types/analysis.js +1 -0
- package/dist/engine/types/analysis.js.map +1 -0
- package/dist/engine/types/paper.d.ts +8 -0
- package/dist/engine/types/paper.d.ts.map +1 -0
- package/dist/engine/types/paper.js +1 -0
- package/dist/engine/types/paper.js.map +1 -0
- package/dist/engine/types/visualization.d.ts +73 -0
- package/dist/engine/types/visualization.d.ts.map +1 -0
- package/dist/engine/types/visualization.js +1 -0
- package/dist/engine/types/visualization.js.map +1 -0
- package/dist/engine/visualization/buildGauge.d.ts +3 -0
- package/dist/engine/visualization/buildGauge.d.ts.map +1 -0
- package/dist/engine/visualization/buildGauge.js +62 -0
- package/dist/engine/visualization/buildGauge.js.map +1 -0
- package/dist/engine/visualization/formatGaugeValue.d.ts +3 -0
- package/dist/engine/visualization/formatGaugeValue.d.ts.map +1 -0
- package/dist/engine/visualization/formatGaugeValue.js +16 -0
- package/dist/engine/visualization/formatGaugeValue.js.map +1 -0
- package/dist/engine/visualization/gaugeSpecs.d.ts +4 -0
- package/dist/engine/visualization/gaugeSpecs.d.ts.map +1 -0
- package/dist/engine/visualization/gaugeSpecs.js +78 -0
- package/dist/engine/visualization/gaugeSpecs.js.map +1 -0
- package/dist/engine/visualization/resolveVisualization/constants.d.ts +4 -0
- package/dist/engine/visualization/resolveVisualization/constants.d.ts.map +1 -0
- package/dist/engine/visualization/resolveVisualization/constants.js +17 -0
- package/dist/engine/visualization/resolveVisualization/constants.js.map +1 -0
- package/dist/engine/visualization/resolveVisualization/index.d.ts +4 -0
- package/dist/engine/visualization/resolveVisualization/index.d.ts.map +1 -0
- package/dist/engine/visualization/resolveVisualization/index.js +43 -0
- package/dist/engine/visualization/resolveVisualization/index.js.map +1 -0
- package/dist/engine/visualization/resolveVisualization/resolves/resolveDrilldown.d.ts +3 -0
- package/dist/engine/visualization/resolveVisualization/resolves/resolveDrilldown.d.ts.map +1 -0
- package/dist/engine/visualization/resolveVisualization/resolves/resolveDrilldown.js +19 -0
- package/dist/engine/visualization/resolveVisualization/resolves/resolveDrilldown.js.map +1 -0
- package/dist/engine/visualization/resolveVisualization/resolves/resolveLinks.d.ts +4 -0
- package/dist/engine/visualization/resolveVisualization/resolves/resolveLinks.d.ts.map +1 -0
- package/dist/engine/visualization/resolveVisualization/resolves/resolveLinks.js +24 -0
- package/dist/engine/visualization/resolveVisualization/resolves/resolveLinks.js.map +1 -0
- package/dist/engine/visualization/resolveVisualization/resolves/resolvePresence.d.ts +4 -0
- package/dist/engine/visualization/resolveVisualization/resolves/resolvePresence.d.ts.map +1 -0
- package/dist/engine/visualization/resolveVisualization/resolves/resolvePresence.js +7 -0
- package/dist/engine/visualization/resolveVisualization/resolves/resolvePresence.js.map +1 -0
- package/dist/engine/visualization/resolveVisualization/resolves/resolveProportionCount.d.ts +4 -0
- package/dist/engine/visualization/resolveVisualization/resolves/resolveProportionCount.d.ts.map +1 -0
- package/dist/engine/visualization/resolveVisualization/resolves/resolveProportionCount.js +20 -0
- package/dist/engine/visualization/resolveVisualization/resolves/resolveProportionCount.js.map +1 -0
- package/dist/engine/visualization/resolveVisualization/resolves/resolveValueRange.d.ts +4 -0
- package/dist/engine/visualization/resolveVisualization/resolves/resolveValueRange.d.ts.map +1 -0
- package/dist/engine/visualization/resolveVisualization/resolves/resolveValueRange.js +28 -0
- package/dist/engine/visualization/resolveVisualization/resolves/resolveValueRange.js.map +1 -0
- package/dist/engine/visualization/resolveVisualization/utils/pluralize.d.ts +2 -0
- package/dist/engine/visualization/resolveVisualization/utils/pluralize.d.ts.map +1 -0
- package/dist/engine/visualization/resolveVisualization/utils/pluralize.js +5 -0
- package/dist/engine/visualization/resolveVisualization/utils/pluralize.js.map +1 -0
- package/dist/engine/visualization/resolveVisualization/utils/readDrilldownItems.d.ts +5 -0
- package/dist/engine/visualization/resolveVisualization/utils/readDrilldownItems.d.ts.map +1 -0
- package/dist/engine/visualization/resolveVisualization/utils/readDrilldownItems.js +8 -0
- package/dist/engine/visualization/resolveVisualization/utils/readDrilldownItems.js.map +1 -0
- package/dist/engine/visualization/resolveVisualization/utils/readNumber.d.ts +2 -0
- package/dist/engine/visualization/resolveVisualization/utils/readNumber.d.ts.map +1 -0
- package/dist/engine/visualization/resolveVisualization/utils/readNumber.js +8 -0
- package/dist/engine/visualization/resolveVisualization/utils/readNumber.js.map +1 -0
- package/dist/engine/visualization/resolveVisualization/utils/readPositions.d.ts +2 -0
- package/dist/engine/visualization/resolveVisualization/utils/readPositions.d.ts.map +1 -0
- package/dist/engine/visualization/resolveVisualization/utils/readPositions.js +8 -0
- package/dist/engine/visualization/resolveVisualization/utils/readPositions.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/plugin.d.ts +4 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +23 -0
- package/dist/plugin.js.map +1 -0
- package/dist/translations/en.d.ts +3 -0
- package/dist/translations/en.d.ts.map +1 -0
- package/dist/translations/en.js +17 -0
- package/dist/translations/en.js.map +1 -0
- package/dist/translations/types.d.ts +2 -0
- package/dist/translations/types.d.ts.map +1 -0
- package/dist/translations/types.js +1 -0
- package/dist/translations/types.js.map +1 -0
- package/dist/types/config.d.ts +39 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +1 -0
- package/dist/types/config.js.map +1 -0
- package/dist/ui/CheckRow/CheckVisualization/index.d.ts +5 -0
- package/dist/ui/CheckRow/CheckVisualization/index.d.ts.map +1 -0
- package/dist/ui/CheckRow/CheckVisualization/index.js +27 -0
- package/dist/ui/CheckRow/CheckVisualization/index.js.map +1 -0
- package/dist/ui/CheckRow/CheckVisualization/visualizations/DensityGauge.d.ts +3 -0
- package/dist/ui/CheckRow/CheckVisualization/visualizations/DensityGauge.d.ts.map +1 -0
- package/dist/ui/CheckRow/CheckVisualization/visualizations/DensityGauge.js +70 -0
- package/dist/ui/CheckRow/CheckVisualization/visualizations/DensityGauge.js.map +1 -0
- package/dist/ui/CheckRow/CheckVisualization/visualizations/DistributionBar.d.ts +3 -0
- package/dist/ui/CheckRow/CheckVisualization/visualizations/DistributionBar.d.ts.map +1 -0
- package/dist/ui/CheckRow/CheckVisualization/visualizations/DistributionBar.js +16 -0
- package/dist/ui/CheckRow/CheckVisualization/visualizations/DistributionBar.js.map +1 -0
- package/dist/ui/CheckRow/CheckVisualization/visualizations/DrillDown.d.ts +3 -0
- package/dist/ui/CheckRow/CheckVisualization/visualizations/DrillDown.d.ts.map +1 -0
- package/dist/ui/CheckRow/CheckVisualization/visualizations/DrillDown.js +36 -0
- package/dist/ui/CheckRow/CheckVisualization/visualizations/DrillDown.js.map +1 -0
- package/dist/ui/CheckRow/CheckVisualization/visualizations/SegmentBar.d.ts +3 -0
- package/dist/ui/CheckRow/CheckVisualization/visualizations/SegmentBar.d.ts.map +1 -0
- package/dist/ui/CheckRow/CheckVisualization/visualizations/SegmentBar.js +32 -0
- package/dist/ui/CheckRow/CheckVisualization/visualizations/SegmentBar.js.map +1 -0
- package/dist/ui/CheckRow/constants/labels.d.ts +6 -0
- package/dist/ui/CheckRow/constants/labels.d.ts.map +1 -0
- package/dist/ui/CheckRow/constants/labels.js +103 -0
- package/dist/ui/CheckRow/constants/labels.js.map +1 -0
- package/dist/ui/CheckRow/index.d.ts +7 -0
- package/dist/ui/CheckRow/index.d.ts.map +1 -0
- package/dist/ui/CheckRow/index.js +29 -0
- package/dist/ui/CheckRow/index.js.map +1 -0
- package/dist/ui/FilterPills.d.ts +10 -0
- package/dist/ui/FilterPills.d.ts.map +1 -0
- package/dist/ui/FilterPills.js +37 -0
- package/dist/ui/FilterPills.js.map +1 -0
- package/dist/ui/KpiCard.d.ts +9 -0
- package/dist/ui/KpiCard.d.ts.map +1 -0
- package/dist/ui/KpiCard.js +19 -0
- package/dist/ui/KpiCard.js.map +1 -0
- package/dist/ui/Pill.d.ts +9 -0
- package/dist/ui/Pill.d.ts.map +1 -0
- package/dist/ui/Pill.js +20 -0
- package/dist/ui/Pill.js.map +1 -0
- package/dist/ui/ScoreRing.d.ts +8 -0
- package/dist/ui/ScoreRing.d.ts.map +1 -0
- package/dist/ui/ScoreRing.js +20 -0
- package/dist/ui/ScoreRing.js.map +1 -0
- package/dist/ui/SectionCard.d.ts +9 -0
- package/dist/ui/SectionCard.d.ts.map +1 -0
- package/dist/ui/SectionCard.js +16 -0
- package/dist/ui/SectionCard.js.map +1 -0
- package/dist/ui/SectionWrapper.d.ts +8 -0
- package/dist/ui/SectionWrapper.d.ts.map +1 -0
- package/dist/ui/SectionWrapper.js +10 -0
- package/dist/ui/SectionWrapper.js.map +1 -0
- package/dist/ui/SegmentedControl.d.ts +15 -0
- package/dist/ui/SegmentedControl.d.ts.map +1 -0
- package/dist/ui/SegmentedControl.js +75 -0
- package/dist/ui/SegmentedControl.js.map +1 -0
- package/dist/ui/TabHeader.d.ts +12 -0
- package/dist/ui/TabHeader.d.ts.map +1 -0
- package/dist/ui/TabHeader.js +22 -0
- package/dist/ui/TabHeader.js.map +1 -0
- package/dist/ui/Tooltip.d.ts +17 -0
- package/dist/ui/Tooltip.d.ts.map +1 -0
- package/dist/ui/Tooltip.js +81 -0
- package/dist/ui/Tooltip.js.map +1 -0
- package/dist/utils/config/getComponentPath.d.ts +2 -0
- package/dist/utils/config/getComponentPath.d.ts.map +1 -0
- package/dist/utils/config/getComponentPath.js +8 -0
- package/dist/utils/config/getComponentPath.js.map +1 -0
- package/dist/utils/config/mergeTranslations.d.ts +3 -0
- package/dist/utils/config/mergeTranslations.d.ts.map +1 -0
- package/dist/utils/config/mergeTranslations.js +11 -0
- package/dist/utils/config/mergeTranslations.js.map +1 -0
- package/dist/utils/config/overrideAdmin.d.ts +4 -0
- package/dist/utils/config/overrideAdmin.d.ts.map +1 -0
- package/dist/utils/config/overrideAdmin.js +43 -0
- package/dist/utils/config/overrideAdmin.js.map +1 -0
- package/dist/utils/style.d.ts +4 -0
- package/dist/utils/style.d.ts.map +1 -0
- package/dist/utils/style.js +11 -0
- package/dist/utils/style.js.map +1 -0
- package/dist/yoastseo.d.js +1 -0
- package/dist/yoastseo.d.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,70 @@
|
|
|
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
|
+
useLayoutEffect(() => {
|
|
14
|
+
const bar = barRef.current;
|
|
15
|
+
const label = labelRef.current;
|
|
16
|
+
if (!(bar && label))
|
|
17
|
+
return;
|
|
18
|
+
const measure = () => setDims({ bar: bar.offsetWidth, label: label.offsetWidth });
|
|
19
|
+
const observer = new ResizeObserver(measure);
|
|
20
|
+
measure();
|
|
21
|
+
observer.observe(bar);
|
|
22
|
+
observer.observe(label);
|
|
23
|
+
return () => observer.disconnect();
|
|
24
|
+
}, []);
|
|
25
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
26
|
+
/* @__PURE__ */ jsxs("div", { ref: barRef, className: "relative h-[6px] rounded-[3px] mt-[24px] mb-[14px]", children: [
|
|
27
|
+
bands.map((band, i) => /* @__PURE__ */ jsx(
|
|
28
|
+
"i",
|
|
29
|
+
{
|
|
30
|
+
className: cn("absolute inset-y-0", statusVar({ status: band.status }), i === 0 && "rounded-l-[3px]", i === bands.length - 1 && "rounded-r-[3px]"),
|
|
31
|
+
style: {
|
|
32
|
+
left: `${band.startPct}%`,
|
|
33
|
+
width: `${band.endPct - band.startPct}%`,
|
|
34
|
+
background: "var(--seo-c)"
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
`${band.status}-${i}`
|
|
38
|
+
)),
|
|
39
|
+
/* @__PURE__ */ jsx(
|
|
40
|
+
"span",
|
|
41
|
+
{
|
|
42
|
+
ref: labelRef,
|
|
43
|
+
className: cn("absolute bottom-[13px] font-mono font-bold text-[11px] whitespace-nowrap", statusVar({ status: markerStatus }), labelAlign),
|
|
44
|
+
style: { left: `${markerPct}%`, color: "var(--seo-c)" },
|
|
45
|
+
children: markerLabel
|
|
46
|
+
}
|
|
47
|
+
),
|
|
48
|
+
/* @__PURE__ */ jsx(
|
|
49
|
+
"span",
|
|
50
|
+
{
|
|
51
|
+
className: cn("absolute -top-[3px] -translate-x-1/2 block w-[12px] h-[12px] rounded-full bg-neutral-0 border-2", statusVar({ status: markerStatus })),
|
|
52
|
+
style: { left: `${markerPct}%`, borderColor: "var(--seo-c)" }
|
|
53
|
+
}
|
|
54
|
+
)
|
|
55
|
+
] }),
|
|
56
|
+
/* @__PURE__ */ jsx("div", { className: "relative h-[14px] text-[10px] text-neutral-500", children: labels.map((label, i) => /* @__PURE__ */ jsx(
|
|
57
|
+
"span",
|
|
58
|
+
{
|
|
59
|
+
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"),
|
|
60
|
+
style: { left: `${label.pct}%` },
|
|
61
|
+
children: label.text
|
|
62
|
+
},
|
|
63
|
+
`${label.text}-${i}`
|
|
64
|
+
)) })
|
|
65
|
+
] });
|
|
66
|
+
}
|
|
67
|
+
export {
|
|
68
|
+
DensityGauge
|
|
69
|
+
};
|
|
70
|
+
//# 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 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 === 0 && \"rounded-l-[3px]\", i === bands.length - 1 && \"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":";AAkCI,mBAGM,KAFJ,YADF;AAhCJ,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,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,KAAK,mBAAmB,MAAM,MAAM,SAAS,KAAK,iBAAiB;AAAA,UACjJ,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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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"}
|
package/dist/ui/Pill.js
ADDED
|
@@ -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"}
|