@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 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/SeoDrawer/tabs/VitalsTab.tsx"],"sourcesContent":["\"use client\";\n\nimport type { VitalsResult } from \"../../../engine/types/analysis\";\nimport { cn, ROW_SEPARATOR } from \"../../../utils/style\";\nimport { KpiCard } from \"../../../ui/KpiCard\";\nimport { SectionCard } from \"../../../ui/SectionCard\";\nimport { Pill } from \"../../../ui/Pill\";\n\nexport interface VitalsTabProps {\n data: VitalsResult;\n onRequestKeyphrase: () => void;\n}\n\nexport function VitalsTab({ data, onRequestKeyphrase }: VitalsTabProps) {\n const max = Math.max(1, ...data.prominentWords.map((w) => w.count));\n const noKeyphraseMatch = data.prominentWords.every((w) => !w.isKeyphrase);\n\n return (\n <section className=\"flex flex-col gap-[13px]\">\n <div className=\"grid grid-cols-3 gap-[9px]\">\n <KpiCard label=\"Words\" value={data.words.toLocaleString()} />\n <KpiCard label=\"Sentences\" value={data.sentences} />\n <KpiCard label=\"Paragraphs\" value={data.paragraphs} />\n <KpiCard label=\"Images\" value={data.images} />\n <KpiCard label=\"Videos\" value={data.videos} />\n <KpiCard label=\"Reading time\" value={data.readingTimeMinutes} suffix=\"min\" />\n </div>\n\n <SectionCard title=\"Prominent words\" widget={<Pill variant=\"neutral\">{data.prominentWords.length}</Pill>}>\n {data.prominentWords.map((w) => (\n <div className={cn(\"relative flex items-center gap-[12px] px-[15px] py-[9px]\", ROW_SEPARATOR)} key={w.word}>\n <div className=\"w-[120px] flex-none text-[12px] font-medium flex items-center gap-[6px]\">\n {w.word} {w.isKeyphrase && <span className=\"text-[9px] font-bold uppercase tracking-[0.04em] text-neutral-1000 bg-neutral-150 rounded-[3px] px-[5px] py-[1px]\">Key</span>}\n </div>\n <div className=\"flex-1 h-[6px] rounded-[3px] bg-neutral-100 overflow-hidden\">\n <i className={cn(\"block h-full\", w.isKeyphrase ? \"bg-neutral-1000\" : \"bg-neutral-400\")} style={{ width: `${(w.count / max) * 100}%` }} />\n </div>\n <div className=\"w-[30px] text-right font-mono text-[11px] font-semibold text-neutral-700\">{w.count}</div>\n </div>\n ))}\n </SectionCard>\n\n {noKeyphraseMatch && (\n <button\n type=\"button\"\n onClick={onRequestKeyphrase}\n className=\"self-start text-[12px] text-neutral-600 underline underline-offset-2 hover:text-neutral-800 cursor-pointer bg-transparent border-0 p-0\"\n >\n Set a focus keyphrase to see which prominent words match it\n </button>\n )}\n </section>\n );\n}\n"],"mappings":";AAmBM,SACE,KADF;AAhBN,SAAS,IAAI,qBAAqB;AAClC,SAAS,eAAe;AACxB,SAAS,mBAAmB;AAC5B,SAAS,YAAY;AAOd,SAAS,UAAU,EAAE,MAAM,mBAAmB,GAAmB;AACtE,QAAM,MAAM,KAAK,IAAI,GAAG,GAAG,KAAK,eAAe,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC;AAClE,QAAM,mBAAmB,KAAK,eAAe,MAAM,CAAC,MAAM,CAAC,EAAE,WAAW;AAExE,SACE,qBAAC,aAAQ,WAAU,4BACjB;AAAA,yBAAC,SAAI,WAAU,8BACb;AAAA,0BAAC,WAAQ,OAAM,SAAQ,OAAO,KAAK,MAAM,eAAe,GAAG;AAAA,MAC3D,oBAAC,WAAQ,OAAM,aAAY,OAAO,KAAK,WAAW;AAAA,MAClD,oBAAC,WAAQ,OAAM,cAAa,OAAO,KAAK,YAAY;AAAA,MACpD,oBAAC,WAAQ,OAAM,UAAS,OAAO,KAAK,QAAQ;AAAA,MAC5C,oBAAC,WAAQ,OAAM,UAAS,OAAO,KAAK,QAAQ;AAAA,MAC5C,oBAAC,WAAQ,OAAM,gBAAe,OAAO,KAAK,oBAAoB,QAAO,OAAM;AAAA,OAC7E;AAAA,IAEA,oBAAC,eAAY,OAAM,mBAAkB,QAAQ,oBAAC,QAAK,SAAQ,WAAW,eAAK,eAAe,QAAO,GAC9F,eAAK,eAAe,IAAI,CAAC,MACxB,qBAAC,SAAI,WAAW,GAAG,4DAA4D,aAAa,GAC1F;AAAA,2BAAC,SAAI,WAAU,2EACZ;AAAA,UAAE;AAAA,QAAK;AAAA,QAAE,EAAE,eAAe,oBAAC,UAAK,WAAU,qHAAoH,iBAAG;AAAA,SACpK;AAAA,MACA,oBAAC,SAAI,WAAU,+DACb,8BAAC,OAAE,WAAW,GAAG,gBAAgB,EAAE,cAAc,oBAAoB,gBAAgB,GAAG,OAAO,EAAE,OAAO,GAAI,EAAE,QAAQ,MAAO,GAAG,IAAI,GAAG,GACzI;AAAA,MACA,oBAAC,SAAI,WAAU,4EAA4E,YAAE,OAAM;AAAA,SAPD,EAAE,IAQtG,CACD,GACH;AAAA,IAEC,oBACC;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,SAAS;AAAA,QACT,WAAU;AAAA,QACX;AAAA;AAAA,IAED;AAAA,KAEJ;AAEJ;","names":[]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { AnalysisInput, AnalysisResult } from "../../engine/types/analysis";
|
|
2
|
+
export interface UseAnalysisArgs {
|
|
3
|
+
getInput: (opts?: {
|
|
4
|
+
live?: boolean;
|
|
5
|
+
}) => Promise<AnalysisInput>;
|
|
6
|
+
signature: string;
|
|
7
|
+
supportedLocales: string[];
|
|
8
|
+
enabled?: boolean;
|
|
9
|
+
}
|
|
10
|
+
export interface UseAnalysisResult {
|
|
11
|
+
result: AnalysisResult | null;
|
|
12
|
+
analyzing: boolean;
|
|
13
|
+
analyzedKeyphrase: string | null;
|
|
14
|
+
analyzeNow: () => void;
|
|
15
|
+
}
|
|
16
|
+
export declare function useAnalysis({ getInput, signature, supportedLocales, enabled }: UseAnalysisArgs): UseAnalysisResult;
|
|
17
|
+
//# sourceMappingURL=useAnalysis.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useAnalysis.d.ts","sourceRoot":"","sources":["../../../src/components/SeoDrawer/useAnalysis.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAIjF,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;IAChE,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,cAAc,GAAG,IAAI,CAAC;IAC9B,SAAS,EAAE,OAAO,CAAC;IACnB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,UAAU,EAAE,MAAM,IAAI,CAAC;CACxB;AAED,wBAAgB,WAAW,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,gBAAgB,EAAE,OAAc,EAAE,EAAE,eAAe,GAAG,iBAAiB,CAuDzH"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useCallback, useEffect, useRef, useState } from "react";
|
|
3
|
+
import { runAnalysis } from "../../engine/runAnalysis";
|
|
4
|
+
import { decideAutoAction } from "./analysisDecision";
|
|
5
|
+
import { ensureLanguagePack } from "./languagePacks";
|
|
6
|
+
function useAnalysis({ getInput, signature, supportedLocales, enabled = true }) {
|
|
7
|
+
const [result, setResult] = useState(null);
|
|
8
|
+
const [analyzing, setAnalyzing] = useState(false);
|
|
9
|
+
const [analyzedKeyphrase, setAnalyzedKeyphrase] = useState(null);
|
|
10
|
+
const getInputRef = useRef(getInput);
|
|
11
|
+
getInputRef.current = getInput;
|
|
12
|
+
const signatureRef = useRef(signature);
|
|
13
|
+
signatureRef.current = signature;
|
|
14
|
+
const localesRef = useRef(supportedLocales);
|
|
15
|
+
localesRef.current = supportedLocales;
|
|
16
|
+
const lastSignature = useRef(null);
|
|
17
|
+
const runSeq = useRef(0);
|
|
18
|
+
const run = useCallback(async (live) => {
|
|
19
|
+
const runId = ++runSeq.current;
|
|
20
|
+
lastSignature.current = signatureRef.current;
|
|
21
|
+
setAnalyzing(true);
|
|
22
|
+
try {
|
|
23
|
+
const input = await getInputRef.current({ live });
|
|
24
|
+
await ensureLanguagePack(input.locale, localesRef.current);
|
|
25
|
+
if (runId !== runSeq.current)
|
|
26
|
+
return;
|
|
27
|
+
setResult(runAnalysis(input));
|
|
28
|
+
setAnalyzedKeyphrase(input.keyphrase);
|
|
29
|
+
} finally {
|
|
30
|
+
if (runId === runSeq.current)
|
|
31
|
+
setAnalyzing(false);
|
|
32
|
+
}
|
|
33
|
+
}, []);
|
|
34
|
+
const analyzeNow = useCallback(() => {
|
|
35
|
+
void run(true);
|
|
36
|
+
}, [run]);
|
|
37
|
+
useEffect(() => {
|
|
38
|
+
const action = decideAutoAction({
|
|
39
|
+
enabled,
|
|
40
|
+
signature,
|
|
41
|
+
lastSignature: lastSignature.current
|
|
42
|
+
});
|
|
43
|
+
if (action === "skip")
|
|
44
|
+
return;
|
|
45
|
+
void run(false);
|
|
46
|
+
}, [signature, run, enabled]);
|
|
47
|
+
return {
|
|
48
|
+
result,
|
|
49
|
+
analyzing,
|
|
50
|
+
analyzedKeyphrase,
|
|
51
|
+
analyzeNow
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
export {
|
|
55
|
+
useAnalysis
|
|
56
|
+
};
|
|
57
|
+
//# sourceMappingURL=useAnalysis.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/SeoDrawer/useAnalysis.ts"],"sourcesContent":["\"use client\";\n\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport { runAnalysis } from \"../../engine/runAnalysis\";\nimport type { AnalysisInput, AnalysisResult } from \"../../engine/types/analysis\";\nimport { decideAutoAction } from \"./analysisDecision\";\nimport { ensureLanguagePack } from \"./languagePacks\";\n\nexport interface UseAnalysisArgs {\n getInput: (opts?: { live?: boolean }) => Promise<AnalysisInput>;\n signature: string;\n supportedLocales: string[];\n enabled?: boolean;\n}\n\nexport interface UseAnalysisResult {\n result: AnalysisResult | null;\n analyzing: boolean;\n analyzedKeyphrase: string | null;\n analyzeNow: () => void;\n}\n\nexport function useAnalysis({ getInput, signature, supportedLocales, enabled = true }: UseAnalysisArgs): UseAnalysisResult {\n const [result, setResult] = useState<AnalysisResult | null>(null);\n const [analyzing, setAnalyzing] = useState(false);\n const [analyzedKeyphrase, setAnalyzedKeyphrase] = useState<string | null>(null);\n\n const getInputRef = useRef(getInput);\n getInputRef.current = getInput;\n const signatureRef = useRef(signature);\n signatureRef.current = signature;\n const localesRef = useRef(supportedLocales);\n localesRef.current = supportedLocales;\n\n const lastSignature = useRef<string | null>(null);\n const runSeq = useRef(0);\n\n const run = useCallback(async (live: boolean) => {\n const runId = ++runSeq.current;\n\n lastSignature.current = signatureRef.current;\n setAnalyzing(true);\n\n try {\n const input = await getInputRef.current({ live });\n await ensureLanguagePack(input.locale, localesRef.current);\n if (runId !== runSeq.current) return;\n\n setResult(runAnalysis(input));\n setAnalyzedKeyphrase(input.keyphrase);\n } finally {\n if (runId === runSeq.current) setAnalyzing(false);\n }\n }, []);\n\n const analyzeNow = useCallback(() => {\n void run(true);\n }, [run]);\n\n useEffect(() => {\n const action = decideAutoAction({\n enabled,\n signature,\n lastSignature: lastSignature.current,\n });\n\n if (action === \"skip\") return;\n\n void run(false);\n }, [signature, run, enabled]);\n\n return {\n result,\n analyzing,\n analyzedKeyphrase,\n analyzeNow,\n };\n}\n"],"mappings":";AAEA,SAAS,aAAa,WAAW,QAAQ,gBAAgB;AACzD,SAAS,mBAAmB;AAE5B,SAAS,wBAAwB;AACjC,SAAS,0BAA0B;AAgB5B,SAAS,YAAY,EAAE,UAAU,WAAW,kBAAkB,UAAU,KAAK,GAAuC;AACzH,QAAM,CAAC,QAAQ,SAAS,IAAI,SAAgC,IAAI;AAChE,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,KAAK;AAChD,QAAM,CAAC,mBAAmB,oBAAoB,IAAI,SAAwB,IAAI;AAE9E,QAAM,cAAc,OAAO,QAAQ;AACnC,cAAY,UAAU;AACtB,QAAM,eAAe,OAAO,SAAS;AACrC,eAAa,UAAU;AACvB,QAAM,aAAa,OAAO,gBAAgB;AAC1C,aAAW,UAAU;AAErB,QAAM,gBAAgB,OAAsB,IAAI;AAChD,QAAM,SAAS,OAAO,CAAC;AAEvB,QAAM,MAAM,YAAY,OAAO,SAAkB;AAC/C,UAAM,QAAQ,EAAE,OAAO;AAEvB,kBAAc,UAAU,aAAa;AACrC,iBAAa,IAAI;AAEjB,QAAI;AACF,YAAM,QAAQ,MAAM,YAAY,QAAQ,EAAE,KAAK,CAAC;AAChD,YAAM,mBAAmB,MAAM,QAAQ,WAAW,OAAO;AACzD,UAAI,UAAU,OAAO;AAAS;AAE9B,gBAAU,YAAY,KAAK,CAAC;AAC5B,2BAAqB,MAAM,SAAS;AAAA,IACtC,UAAE;AACA,UAAI,UAAU,OAAO;AAAS,qBAAa,KAAK;AAAA,IAClD;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,aAAa,YAAY,MAAM;AACnC,SAAK,IAAI,IAAI;AAAA,EACf,GAAG,CAAC,GAAG,CAAC;AAER,YAAU,MAAM;AACd,UAAM,SAAS,iBAAiB;AAAA,MAC9B;AAAA,MACA;AAAA,MACA,eAAe,cAAc;AAAA,IAC/B,CAAC;AAED,QAAI,WAAW;AAAQ;AAEvB,SAAK,IAAI,KAAK;AAAA,EAChB,GAAG,CAAC,WAAW,KAAK,OAAO,CAAC;AAE5B,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;","names":[]}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { AnalysisInput } from "../../engine/types/analysis";
|
|
2
|
+
import type { ExtractorFn, SeoFieldPaths } from "../../types/config";
|
|
3
|
+
export interface LiveDocArgs {
|
|
4
|
+
collectionSlug: string;
|
|
5
|
+
fields: SeoFieldPaths;
|
|
6
|
+
site: {
|
|
7
|
+
name: string;
|
|
8
|
+
baseUrl: string;
|
|
9
|
+
};
|
|
10
|
+
keyphrase: string;
|
|
11
|
+
enabled?: boolean;
|
|
12
|
+
override?: ExtractorFn;
|
|
13
|
+
}
|
|
14
|
+
export interface UseLiveDocumentResult {
|
|
15
|
+
signature: string;
|
|
16
|
+
getInput: (opts?: {
|
|
17
|
+
live?: boolean;
|
|
18
|
+
}) => Promise<AnalysisInput>;
|
|
19
|
+
invalidateMedia: () => void;
|
|
20
|
+
}
|
|
21
|
+
export declare function useLiveDocument({ collectionSlug, fields, site, keyphrase, enabled, override }: LiveDocArgs): UseLiveDocumentResult;
|
|
22
|
+
//# sourceMappingURL=useLiveDocument.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useLiveDocument.d.ts","sourceRoot":"","sources":["../../../src/components/SeoDrawer/useLiveDocument.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAKrE,MAAM,WAAW,WAAW;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,aAAa,CAAC;IACtB,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,WAAW,CAAC;CACxB;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;IAChE,eAAe,EAAE,MAAM,IAAI,CAAC;CAC7B;AAED,wBAAgB,eAAe,CAAC,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,OAAc,EAAE,QAAQ,EAAE,EAAE,WAAW,GAAG,qBAAqB,CAsFzI"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useAllFormFields, useConfig, useDebounce, useLocale } from "@payloadcms/ui";
|
|
3
|
+
import { reduceFieldsToValues } from "payload/shared";
|
|
4
|
+
import { useCallback, useMemo, useRef } from "react";
|
|
5
|
+
import { createMediaResolver } from "../../content/uploads/media-resolver";
|
|
6
|
+
import { buildAnalysisInput } from "./build-analysis-input";
|
|
7
|
+
const DEBOUNCE_MS = 1e3;
|
|
8
|
+
function useLiveDocument({ collectionSlug, fields, site, keyphrase, enabled = true, override }) {
|
|
9
|
+
const [formFields] = useAllFormFields();
|
|
10
|
+
const locale = useLocale();
|
|
11
|
+
const { config, getEntityConfig } = useConfig();
|
|
12
|
+
const debouncedFields = useDebounce(formFields, DEBOUNCE_MS);
|
|
13
|
+
const debouncedKeyphrase = useDebounce(keyphrase, DEBOUNCE_MS);
|
|
14
|
+
const resolver = useMemo(() => createMediaResolver(config.routes.api), [config.routes.api]);
|
|
15
|
+
const schemaFields = useMemo(() => {
|
|
16
|
+
const entity = getEntityConfig({
|
|
17
|
+
collectionSlug
|
|
18
|
+
});
|
|
19
|
+
return entity?.fields ?? [];
|
|
20
|
+
}, [getEntityConfig, collectionSlug]);
|
|
21
|
+
const walkCtx = useMemo(
|
|
22
|
+
() => ({
|
|
23
|
+
isUploadCollection: (slug) => Boolean(config.collections?.find((c) => c.slug === slug)?.upload),
|
|
24
|
+
blocksBySlug: { ...config.blocksMap }
|
|
25
|
+
}),
|
|
26
|
+
[config]
|
|
27
|
+
);
|
|
28
|
+
const values = useMemo(() => enabled ? reduceFieldsToValues(debouncedFields, true) : {}, [enabled, debouncedFields]);
|
|
29
|
+
const signature = useMemo(
|
|
30
|
+
() => JSON.stringify({
|
|
31
|
+
values,
|
|
32
|
+
keyphrase: debouncedKeyphrase,
|
|
33
|
+
locale: locale?.code ?? null
|
|
34
|
+
}),
|
|
35
|
+
[values, debouncedKeyphrase, locale]
|
|
36
|
+
);
|
|
37
|
+
const liveRef = useRef({
|
|
38
|
+
formFields,
|
|
39
|
+
values,
|
|
40
|
+
keyphrase,
|
|
41
|
+
debouncedKeyphrase,
|
|
42
|
+
locale,
|
|
43
|
+
fields,
|
|
44
|
+
site,
|
|
45
|
+
override,
|
|
46
|
+
schemaFields,
|
|
47
|
+
walkCtx,
|
|
48
|
+
resolver
|
|
49
|
+
});
|
|
50
|
+
liveRef.current = {
|
|
51
|
+
formFields,
|
|
52
|
+
values,
|
|
53
|
+
keyphrase,
|
|
54
|
+
debouncedKeyphrase,
|
|
55
|
+
locale,
|
|
56
|
+
fields,
|
|
57
|
+
site,
|
|
58
|
+
override,
|
|
59
|
+
schemaFields,
|
|
60
|
+
walkCtx,
|
|
61
|
+
resolver
|
|
62
|
+
};
|
|
63
|
+
const getInput = useCallback(async ({ live = false } = {}) => {
|
|
64
|
+
const s = liveRef.current;
|
|
65
|
+
const inputValues = live ? reduceFieldsToValues(s.formFields, true) : s.values;
|
|
66
|
+
return buildAnalysisInput({
|
|
67
|
+
values: inputValues,
|
|
68
|
+
locale: s.locale,
|
|
69
|
+
payloadLocale: s.locale?.code,
|
|
70
|
+
keyphrase: live ? s.keyphrase : s.debouncedKeyphrase,
|
|
71
|
+
fields: s.fields,
|
|
72
|
+
site: s.site,
|
|
73
|
+
schemaFields: s.schemaFields,
|
|
74
|
+
walkCtx: s.walkCtx,
|
|
75
|
+
resolver: s.resolver,
|
|
76
|
+
override: s.override
|
|
77
|
+
});
|
|
78
|
+
}, []);
|
|
79
|
+
const invalidateMedia = useCallback(() => liveRef.current.resolver.invalidate(), []);
|
|
80
|
+
return { signature, getInput, invalidateMedia };
|
|
81
|
+
}
|
|
82
|
+
export {
|
|
83
|
+
useLiveDocument
|
|
84
|
+
};
|
|
85
|
+
//# sourceMappingURL=useLiveDocument.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/SeoDrawer/useLiveDocument.ts"],"sourcesContent":["\"use client\";\n\nimport { useAllFormFields, useConfig, useDebounce, useLocale } from \"@payloadcms/ui\";\nimport type { ClientField } from \"payload\";\nimport { reduceFieldsToValues } from \"payload/shared\";\nimport { useCallback, useMemo, useRef } from \"react\";\nimport { createMediaResolver } from \"../../content/uploads/media-resolver\";\nimport type { UploadWalkContext } from \"../../content/uploads/transform-upload-values\";\nimport type { AnalysisInput } from \"../../engine/types/analysis\";\nimport type { ExtractorFn, SeoFieldPaths } from \"../../types/config\";\nimport { buildAnalysisInput } from \"./build-analysis-input\";\n\nconst DEBOUNCE_MS = 1000;\n\nexport interface LiveDocArgs {\n collectionSlug: string;\n fields: SeoFieldPaths;\n site: { name: string; baseUrl: string };\n keyphrase: string;\n enabled?: boolean;\n override?: ExtractorFn;\n}\n\nexport interface UseLiveDocumentResult {\n signature: string;\n getInput: (opts?: { live?: boolean }) => Promise<AnalysisInput>;\n invalidateMedia: () => void;\n}\n\nexport function useLiveDocument({ collectionSlug, fields, site, keyphrase, enabled = true, override }: LiveDocArgs): UseLiveDocumentResult {\n const [formFields] = useAllFormFields();\n const locale = useLocale();\n const { config, getEntityConfig } = useConfig();\n\n const debouncedFields = useDebounce(formFields, DEBOUNCE_MS);\n const debouncedKeyphrase = useDebounce(keyphrase, DEBOUNCE_MS);\n\n const resolver = useMemo(() => createMediaResolver(config.routes.api), [config.routes.api]);\n\n const schemaFields = useMemo<ClientField[]>(() => {\n const entity = getEntityConfig({\n collectionSlug: collectionSlug as never,\n }) as { fields?: ClientField[] } | undefined;\n\n return entity?.fields ?? [];\n }, [getEntityConfig, collectionSlug]);\n\n const walkCtx = useMemo<UploadWalkContext>(\n () => ({\n isUploadCollection: (slug) => Boolean(config.collections?.find((c) => c.slug === slug)?.upload),\n blocksBySlug: { ...config.blocksMap },\n }),\n [config]\n );\n\n const values = useMemo<Record<string, unknown>>(() => (enabled ? (reduceFieldsToValues(debouncedFields, true) as Record<string, unknown>) : {}), [enabled, debouncedFields]);\n\n const signature = useMemo(\n () =>\n JSON.stringify({\n values,\n keyphrase: debouncedKeyphrase,\n locale: locale?.code ?? null,\n }),\n [values, debouncedKeyphrase, locale]\n );\n\n const liveRef = useRef({\n formFields,\n values,\n keyphrase,\n debouncedKeyphrase,\n locale,\n fields,\n site,\n override,\n schemaFields,\n walkCtx,\n resolver,\n });\n liveRef.current = {\n formFields,\n values,\n keyphrase,\n debouncedKeyphrase,\n locale,\n fields,\n site,\n override,\n schemaFields,\n walkCtx,\n resolver,\n };\n\n const getInput = useCallback(async ({ live = false }: { live?: boolean } = {}): Promise<AnalysisInput> => {\n const s = liveRef.current;\n const inputValues = live ? (reduceFieldsToValues(s.formFields, true) as Record<string, unknown>) : s.values;\n\n return buildAnalysisInput({\n values: inputValues,\n locale: s.locale,\n payloadLocale: s.locale?.code,\n keyphrase: live ? s.keyphrase : s.debouncedKeyphrase,\n fields: s.fields,\n site: s.site,\n schemaFields: s.schemaFields,\n walkCtx: s.walkCtx,\n resolver: s.resolver,\n override: s.override,\n });\n }, []);\n\n const invalidateMedia = useCallback(() => liveRef.current.resolver.invalidate(), []);\n\n return { signature, getInput, invalidateMedia };\n}\n"],"mappings":";AAEA,SAAS,kBAAkB,WAAW,aAAa,iBAAiB;AAEpE,SAAS,4BAA4B;AACrC,SAAS,aAAa,SAAS,cAAc;AAC7C,SAAS,2BAA2B;AAIpC,SAAS,0BAA0B;AAEnC,MAAM,cAAc;AAiBb,SAAS,gBAAgB,EAAE,gBAAgB,QAAQ,MAAM,WAAW,UAAU,MAAM,SAAS,GAAuC;AACzI,QAAM,CAAC,UAAU,IAAI,iBAAiB;AACtC,QAAM,SAAS,UAAU;AACzB,QAAM,EAAE,QAAQ,gBAAgB,IAAI,UAAU;AAE9C,QAAM,kBAAkB,YAAY,YAAY,WAAW;AAC3D,QAAM,qBAAqB,YAAY,WAAW,WAAW;AAE7D,QAAM,WAAW,QAAQ,MAAM,oBAAoB,OAAO,OAAO,GAAG,GAAG,CAAC,OAAO,OAAO,GAAG,CAAC;AAE1F,QAAM,eAAe,QAAuB,MAAM;AAChD,UAAM,SAAS,gBAAgB;AAAA,MAC7B;AAAA,IACF,CAAC;AAED,WAAO,QAAQ,UAAU,CAAC;AAAA,EAC5B,GAAG,CAAC,iBAAiB,cAAc,CAAC;AAEpC,QAAM,UAAU;AAAA,IACd,OAAO;AAAA,MACL,oBAAoB,CAAC,SAAS,QAAQ,OAAO,aAAa,KAAK,CAAC,MAAM,EAAE,SAAS,IAAI,GAAG,MAAM;AAAA,MAC9F,cAAc,EAAE,GAAG,OAAO,UAAU;AAAA,IACtC;AAAA,IACA,CAAC,MAAM;AAAA,EACT;AAEA,QAAM,SAAS,QAAiC,MAAO,UAAW,qBAAqB,iBAAiB,IAAI,IAAgC,CAAC,GAAI,CAAC,SAAS,eAAe,CAAC;AAE3K,QAAM,YAAY;AAAA,IAChB,MACE,KAAK,UAAU;AAAA,MACb;AAAA,MACA,WAAW;AAAA,MACX,QAAQ,QAAQ,QAAQ;AAAA,IAC1B,CAAC;AAAA,IACH,CAAC,QAAQ,oBAAoB,MAAM;AAAA,EACrC;AAEA,QAAM,UAAU,OAAO;AAAA,IACrB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACD,UAAQ,UAAU;AAAA,IAChB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,QAAM,WAAW,YAAY,OAAO,EAAE,OAAO,MAAM,IAAwB,CAAC,MAA8B;AACxG,UAAM,IAAI,QAAQ;AAClB,UAAM,cAAc,OAAQ,qBAAqB,EAAE,YAAY,IAAI,IAAgC,EAAE;AAErG,WAAO,mBAAmB;AAAA,MACxB,QAAQ;AAAA,MACR,QAAQ,EAAE;AAAA,MACV,eAAe,EAAE,QAAQ;AAAA,MACzB,WAAW,OAAO,EAAE,YAAY,EAAE;AAAA,MAClC,QAAQ,EAAE;AAAA,MACV,MAAM,EAAE;AAAA,MACR,cAAc,EAAE;AAAA,MAChB,SAAS,EAAE;AAAA,MACX,UAAU,EAAE;AAAA,MACZ,UAAU,EAAE;AAAA,IACd,CAAC;AAAA,EACH,GAAG,CAAC,CAAC;AAEL,QAAM,kBAAkB,YAAY,MAAM,QAAQ,QAAQ,SAAS,WAAW,GAAG,CAAC,CAAC;AAEnF,SAAO,EAAE,WAAW,UAAU,gBAAgB;AAChD;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"variants.d.ts","sourceRoot":"","sources":["../../../src/components/SeoDrawer/variants.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,SAAS;;8EAQpB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { cva } from "class-variance-authority";
|
|
2
|
+
const statusVar = cva("", {
|
|
3
|
+
variants: {
|
|
4
|
+
status: {
|
|
5
|
+
good: "[--seo-c:var(--color-seo-good)]",
|
|
6
|
+
warn: "[--seo-c:var(--color-seo-warn)]",
|
|
7
|
+
bad: "[--seo-c:var(--color-seo-bad)]"
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
export {
|
|
12
|
+
statusVar
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=variants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/SeoDrawer/variants.ts"],"sourcesContent":["import { cva } from \"class-variance-authority\";\n\nexport const statusVar = cva(\"\", {\n variants: {\n status: {\n good: \"[--seo-c:var(--color-seo-good)]\",\n warn: \"[--seo-c:var(--color-seo-warn)]\",\n bad: \"[--seo-c:var(--color-seo-bad)]\",\n },\n },\n});\n"],"mappings":"AAAA,SAAS,WAAW;AAEb,MAAM,YAAY,IAAI,IAAI;AAAA,EAC/B,UAAU;AAAA,IACR,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,MACN,KAAK;AAAA,IACP;AAAA,EACF;AACF,CAAC;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"icons.d.ts","sourceRoot":"","sources":["../../src/components/icons.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,KAAK,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG;IAChD,QAAQ,EAAE,UAAU,CAAC;CACtB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,aAiCzB,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { AlignLeft, Crosshair, Mail, Link2, BarChart3, Type, ArrowRight, Image as ImageIcon, Heading1, Ruler, ListOrdered, Clock, FileText, Film } from "lucide-react";
|
|
3
|
+
const CHECK_ICONS = {
|
|
4
|
+
// keyphrase (SeoAssessor)
|
|
5
|
+
introductionKeyword: AlignLeft,
|
|
6
|
+
keyphraseLength: Crosshair,
|
|
7
|
+
keyphraseDensity: Crosshair,
|
|
8
|
+
metaDescriptionKeyword: Mail,
|
|
9
|
+
subheadingsKeyword: Type,
|
|
10
|
+
textCompetingLinks: Link2,
|
|
11
|
+
imageKeyphrase: ImageIcon,
|
|
12
|
+
keyphraseInSEOTitle: Type,
|
|
13
|
+
slugKeyword: ArrowRight,
|
|
14
|
+
keyphraseDistribution: BarChart3,
|
|
15
|
+
// on-page (SeoAssessor)
|
|
16
|
+
textLength: AlignLeft,
|
|
17
|
+
metaDescriptionLength: Mail,
|
|
18
|
+
titleWidth: Ruler,
|
|
19
|
+
images: ImageIcon,
|
|
20
|
+
externalLinks: Link2,
|
|
21
|
+
internalLinks: Link2,
|
|
22
|
+
singleH1: Heading1,
|
|
23
|
+
// readability (ContentAssessor)
|
|
24
|
+
fleschReadingEase: FileText,
|
|
25
|
+
subheadingsTooLong: Heading1,
|
|
26
|
+
textParagraphTooLong: AlignLeft,
|
|
27
|
+
textSentenceLength: AlignLeft,
|
|
28
|
+
textTransitionWords: ArrowRight,
|
|
29
|
+
passiveVoice: FileText,
|
|
30
|
+
sentenceBeginnings: AlignLeft,
|
|
31
|
+
listPresence: ListOrdered,
|
|
32
|
+
// vitals
|
|
33
|
+
readingTime: Clock,
|
|
34
|
+
videoCount: Film,
|
|
35
|
+
_default: FileText
|
|
36
|
+
};
|
|
37
|
+
export {
|
|
38
|
+
CHECK_ICONS
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=icons.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/components/icons.tsx"],"sourcesContent":["\"use client\";\n\nimport { AlignLeft, Crosshair, Mail, Link2, BarChart3, Type, ArrowRight, Image as ImageIcon, Heading1, Ruler, ListOrdered, Clock, FileText, Film } from \"lucide-react\";\nimport type { LucideIcon } from \"lucide-react\";\n\ntype CheckIconsMap = Record<string, LucideIcon> & {\n _default: LucideIcon;\n};\n\nexport const CHECK_ICONS: CheckIconsMap = {\n // keyphrase (SeoAssessor)\n introductionKeyword: AlignLeft,\n keyphraseLength: Crosshair,\n keyphraseDensity: Crosshair,\n metaDescriptionKeyword: Mail,\n subheadingsKeyword: Type,\n textCompetingLinks: Link2,\n imageKeyphrase: ImageIcon,\n keyphraseInSEOTitle: Type,\n slugKeyword: ArrowRight,\n keyphraseDistribution: BarChart3,\n // on-page (SeoAssessor)\n textLength: AlignLeft,\n metaDescriptionLength: Mail,\n titleWidth: Ruler,\n images: ImageIcon,\n externalLinks: Link2,\n internalLinks: Link2,\n singleH1: Heading1,\n // readability (ContentAssessor)\n fleschReadingEase: FileText,\n subheadingsTooLong: Heading1,\n textParagraphTooLong: AlignLeft,\n textSentenceLength: AlignLeft,\n textTransitionWords: ArrowRight,\n passiveVoice: FileText,\n sentenceBeginnings: AlignLeft,\n listPresence: ListOrdered,\n // vitals\n readingTime: Clock,\n videoCount: Film,\n _default: FileText,\n};\n"],"mappings":";AAEA,SAAS,WAAW,WAAW,MAAM,OAAO,WAAW,MAAM,YAAY,SAAS,WAAW,UAAU,OAAO,aAAa,OAAO,UAAU,YAAY;AAOjJ,MAAM,cAA6B;AAAA;AAAA,EAExC,qBAAqB;AAAA,EACrB,iBAAiB;AAAA,EACjB,kBAAkB;AAAA,EAClB,wBAAwB;AAAA,EACxB,oBAAoB;AAAA,EACpB,oBAAoB;AAAA,EACpB,gBAAgB;AAAA,EAChB,qBAAqB;AAAA,EACrB,aAAa;AAAA,EACb,uBAAuB;AAAA;AAAA,EAEvB,YAAY;AAAA,EACZ,uBAAuB;AAAA,EACvB,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR,eAAe;AAAA,EACf,eAAe;AAAA,EACf,UAAU;AAAA;AAAA,EAEV,mBAAmB;AAAA,EACnB,oBAAoB;AAAA,EACpB,sBAAsB;AAAA,EACtB,oBAAoB;AAAA,EACpB,qBAAqB;AAAA,EACrB,cAAc;AAAA,EACd,oBAAoB;AAAA,EACpB,cAAc;AAAA;AAAA,EAEd,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,UAAU;AACZ;","names":[]}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAItD,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI,CAE7D;AACD,wBAAgB,eAAe,IAAI,eAAe,CAIjD"}
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { PLUGIN_NAME } from "./constants";
|
|
2
|
+
let pluginConfig = null;
|
|
3
|
+
function setPluginConfig(config) {
|
|
4
|
+
pluginConfig = config;
|
|
5
|
+
}
|
|
6
|
+
function getPluginConfig() {
|
|
7
|
+
if (!pluginConfig)
|
|
8
|
+
throw new Error(`[${PLUGIN_NAME}] config accessed before initialization`);
|
|
9
|
+
return pluginConfig;
|
|
10
|
+
}
|
|
11
|
+
export {
|
|
12
|
+
getPluginConfig,
|
|
13
|
+
setPluginConfig
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/config.ts"],"sourcesContent":["import { PLUGIN_NAME } from \"./constants\";\nimport type { SeoPluginConfig } from \"./types/config\";\n\nlet pluginConfig: SeoPluginConfig | null = null;\n\nexport function setPluginConfig(config: SeoPluginConfig): void {\n pluginConfig = config;\n}\nexport function getPluginConfig(): SeoPluginConfig {\n if (!pluginConfig) throw new Error(`[${PLUGIN_NAME}] config accessed before initialization`);\n\n return pluginConfig;\n}\n"],"mappings":"AAAA,SAAS,mBAAmB;AAG5B,IAAI,eAAuC;AAEpC,SAAS,gBAAgB,QAA+B;AAC7D,iBAAe;AACjB;AACO,SAAS,kBAAmC;AACjD,MAAI,CAAC;AAAc,UAAM,IAAI,MAAM,IAAI,WAAW,yCAAyC;AAE3F,SAAO;AACT;","names":[]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare const CHECK_IDS: {
|
|
2
|
+
readonly keyphrase: readonly ["introductionKeyword", "keyphraseLength", "keyphraseDensity", "metaDescriptionKeyword", "subheadingsKeyword", "textCompetingLinks", "imageKeyphrase", "keyphraseInSEOTitle", "slugKeyword", "functionWordsInKeyphrase", "keyphraseDistribution"];
|
|
3
|
+
readonly onPage: readonly ["textLength", "metaDescriptionLength", "titleWidth", "images", "externalLinks", "internalLinks", "singleH1"];
|
|
4
|
+
readonly readability: readonly ["subheadingsTooLong", "textParagraphTooLong", "textSentenceLength", "textTransitionWords", "passiveVoice", "sentenceBeginnings", "fleschReadingEase"];
|
|
5
|
+
};
|
|
6
|
+
export type CheckTab = keyof typeof CHECK_IDS;
|
|
7
|
+
export type CheckId = (typeof CHECK_IDS)[CheckTab][number];
|
|
8
|
+
//# sourceMappingURL=checkIds.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkIds.d.ts","sourceRoot":"","sources":["../../src/constants/checkIds.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS;;;;CAgBZ,CAAC;AAEX,MAAM,MAAM,QAAQ,GAAG,MAAM,OAAO,SAAS,CAAC;AAC9C,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
const CHECK_IDS = {
|
|
2
|
+
keyphrase: [
|
|
3
|
+
"introductionKeyword",
|
|
4
|
+
"keyphraseLength",
|
|
5
|
+
"keyphraseDensity",
|
|
6
|
+
"metaDescriptionKeyword",
|
|
7
|
+
"subheadingsKeyword",
|
|
8
|
+
"textCompetingLinks",
|
|
9
|
+
"imageKeyphrase",
|
|
10
|
+
"keyphraseInSEOTitle",
|
|
11
|
+
"slugKeyword",
|
|
12
|
+
"functionWordsInKeyphrase",
|
|
13
|
+
"keyphraseDistribution"
|
|
14
|
+
],
|
|
15
|
+
onPage: ["textLength", "metaDescriptionLength", "titleWidth", "images", "externalLinks", "internalLinks", "singleH1"],
|
|
16
|
+
readability: ["subheadingsTooLong", "textParagraphTooLong", "textSentenceLength", "textTransitionWords", "passiveVoice", "sentenceBeginnings", "fleschReadingEase"]
|
|
17
|
+
};
|
|
18
|
+
export {
|
|
19
|
+
CHECK_IDS
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=checkIds.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/constants/checkIds.ts"],"sourcesContent":["export const CHECK_IDS = {\n keyphrase: [\n \"introductionKeyword\",\n \"keyphraseLength\",\n \"keyphraseDensity\",\n \"metaDescriptionKeyword\",\n \"subheadingsKeyword\",\n \"textCompetingLinks\",\n \"imageKeyphrase\",\n \"keyphraseInSEOTitle\",\n \"slugKeyword\",\n \"functionWordsInKeyphrase\",\n \"keyphraseDistribution\",\n ],\n onPage: [\"textLength\", \"metaDescriptionLength\", \"titleWidth\", \"images\", \"externalLinks\", \"internalLinks\", \"singleH1\"],\n readability: [\"subheadingsTooLong\", \"textParagraphTooLong\", \"textSentenceLength\", \"textTransitionWords\", \"passiveVoice\", \"sentenceBeginnings\", \"fleschReadingEase\"],\n} as const;\n\nexport type CheckTab = keyof typeof CHECK_IDS;\nexport type CheckId = (typeof CHECK_IDS)[CheckTab][number];\n"],"mappings":"AAAO,MAAM,YAAY;AAAA,EACvB,WAAW;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,QAAQ,CAAC,cAAc,yBAAyB,cAAc,UAAU,iBAAiB,iBAAiB,UAAU;AAAA,EACpH,aAAa,CAAC,sBAAsB,wBAAwB,sBAAsB,uBAAuB,gBAAgB,sBAAsB,mBAAmB;AACpK;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,uBAAuB,CAAC;AAChD,eAAO,MAAM,GAAG,uCAAuC,CAAC;AAExD,eAAO,MAAM,eAAe,iBAAkB,CAAC;AAE/C,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/constants/index.ts"],"sourcesContent":["export const PLUGIN_NAME = \"payload-plugin-seo\";\nexport const PKG = \"@focus-reactive/payload-plugin-seo\";\n\nexport const DEFAULT_LOCALES = [\"en\"] as const;\n\nexport * from \"./statuses\";\n"],"mappings":"AAAO,MAAM,cAAc;AACpB,MAAM,MAAM;AAEZ,MAAM,kBAAkB,CAAC,IAAI;AAEpC,cAAc;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"statuses.d.ts","sourceRoot":"","sources":["../../src/constants/statuses.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAEvD,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAIpD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/constants/statuses.ts"],"sourcesContent":["import type { Status } from \"../engine/types/analysis\";\n\nexport const STATUS_PILL_LABEL: Record<Status, string> = {\n good: \"Good\",\n warn: \"Needs work\",\n bad: \"Problem\",\n};\n"],"mappings":"AAEO,MAAM,oBAA4C;AAAA,EACvD,MAAM;AAAA,EACN,MAAM;AAAA,EACN,KAAK;AACP;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extractContent.d.ts","sourceRoot":"","sources":["../../src/content/extractContent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAkBrD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,aAAa,GAAG,MAAM,CAe3F"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { lexicalToHtml } from "./lexicalToHtml";
|
|
2
|
+
import { walkValue } from "./walkValue";
|
|
3
|
+
function getByPath(data, path) {
|
|
4
|
+
return path.split(".").reduce((acc, key) => {
|
|
5
|
+
if (acc && typeof acc === "object" && key in acc) {
|
|
6
|
+
return acc[key];
|
|
7
|
+
}
|
|
8
|
+
return void 0;
|
|
9
|
+
}, data);
|
|
10
|
+
}
|
|
11
|
+
function escapeHtml(s) {
|
|
12
|
+
return s.replace(/&/gu, "&").replace(/</gu, "<").replace(/>/gu, ">");
|
|
13
|
+
}
|
|
14
|
+
function extractContent(data, fields) {
|
|
15
|
+
if (!fields.content)
|
|
16
|
+
return "";
|
|
17
|
+
const value = getByPath(data, fields.content);
|
|
18
|
+
if (value === void 0 || value === null)
|
|
19
|
+
return "";
|
|
20
|
+
return walkValue(value).map((fragment) => {
|
|
21
|
+
if (fragment.kind === "lexical")
|
|
22
|
+
return lexicalToHtml(fragment.value);
|
|
23
|
+
if (fragment.kind === "html")
|
|
24
|
+
return fragment.value;
|
|
25
|
+
return `<p>${escapeHtml(fragment.value)}</p>`;
|
|
26
|
+
}).filter(Boolean).join("\n");
|
|
27
|
+
}
|
|
28
|
+
export {
|
|
29
|
+
extractContent
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=extractContent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/content/extractContent.ts"],"sourcesContent":["import type { SeoFieldPaths } from \"../types/config\";\nimport { lexicalToHtml } from \"./lexicalToHtml\";\nimport { walkValue } from \"./walkValue\";\n\nfunction getByPath(data: Record<string, unknown>, path: string): unknown {\n return path.split(\".\").reduce<unknown>((acc, key) => {\n if (acc && typeof acc === \"object\" && key in (acc as Record<string, unknown>)) {\n return (acc as Record<string, unknown>)[key];\n }\n\n return undefined;\n }, data);\n}\n\nfunction escapeHtml(s: string): string {\n return s.replace(/&/gu, \"&\").replace(/</gu, \"<\").replace(/>/gu, \">\");\n}\n\nexport function extractContent(data: Record<string, unknown>, fields: SeoFieldPaths): string {\n if (!fields.content) return \"\";\n\n const value = getByPath(data, fields.content);\n if (value === undefined || value === null) return \"\";\n\n return walkValue(value)\n .map((fragment) => {\n if (fragment.kind === \"lexical\") return lexicalToHtml(fragment.value);\n if (fragment.kind === \"html\") return fragment.value;\n\n return `<p>${escapeHtml(fragment.value)}</p>`;\n })\n .filter(Boolean)\n .join(\"\\n\");\n}\n"],"mappings":"AACA,SAAS,qBAAqB;AAC9B,SAAS,iBAAiB;AAE1B,SAAS,UAAU,MAA+B,MAAuB;AACvE,SAAO,KAAK,MAAM,GAAG,EAAE,OAAgB,CAAC,KAAK,QAAQ;AACnD,QAAI,OAAO,OAAO,QAAQ,YAAY,OAAQ,KAAiC;AAC7E,aAAQ,IAAgC,GAAG;AAAA,IAC7C;AAEA,WAAO;AAAA,EACT,GAAG,IAAI;AACT;AAEA,SAAS,WAAW,GAAmB;AACrC,SAAO,EAAE,QAAQ,OAAO,OAAO,EAAE,QAAQ,OAAO,MAAM,EAAE,QAAQ,OAAO,MAAM;AAC/E;AAEO,SAAS,eAAe,MAA+B,QAA+B;AAC3F,MAAI,CAAC,OAAO;AAAS,WAAO;AAE5B,QAAM,QAAQ,UAAU,MAAM,OAAO,OAAO;AAC5C,MAAI,UAAU,UAAa,UAAU;AAAM,WAAO;AAElD,SAAO,UAAU,KAAK,EACnB,IAAI,CAAC,aAAa;AACjB,QAAI,SAAS,SAAS;AAAW,aAAO,cAAc,SAAS,KAAK;AACpE,QAAI,SAAS,SAAS;AAAQ,aAAO,SAAS;AAE9C,WAAO,MAAM,WAAW,SAAS,KAAK,CAAC;AAAA,EACzC,CAAC,EACA,OAAO,OAAO,EACd,KAAK,IAAI;AACd;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lexicalToHtml.d.ts","sourceRoot":"","sources":["../../src/content/lexicalToHtml.ts"],"names":[],"mappings":"AAEA,KAAK,YAAY,GAAG;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,CAAC;AAE1D,wBAAgB,aAAa,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAUzD"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { convertLexicalToHTML } from "@payloadcms/richtext-lexical/html";
|
|
2
|
+
function lexicalToHtml(value) {
|
|
3
|
+
if (!value || typeof value !== "object" || !("root" in value) || !value.root) {
|
|
4
|
+
return "";
|
|
5
|
+
}
|
|
6
|
+
try {
|
|
7
|
+
return convertLexicalToHTML({ data: value });
|
|
8
|
+
} catch {
|
|
9
|
+
return "";
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export {
|
|
13
|
+
lexicalToHtml
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=lexicalToHtml.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/content/lexicalToHtml.ts"],"sourcesContent":["import { convertLexicalToHTML } from \"@payloadcms/richtext-lexical/html\";\n\ntype LexicalValue = { root?: unknown } | null | undefined;\n\nexport function lexicalToHtml(value: LexicalValue): string {\n if (!value || typeof value !== \"object\" || !(\"root\" in value) || !value.root) {\n return \"\";\n }\n\n try {\n return convertLexicalToHTML({ data: value as { root: never } });\n } catch {\n return \"\";\n }\n}\n"],"mappings":"AAAA,SAAS,4BAA4B;AAI9B,SAAS,cAAc,OAA6B;AACzD,MAAI,CAAC,SAAS,OAAO,UAAU,YAAY,EAAE,UAAU,UAAU,CAAC,MAAM,MAAM;AAC5E,WAAO;AAAA,EACT;AAEA,MAAI;AACF,WAAO,qBAAqB,EAAE,MAAM,MAAyB,CAAC;AAAA,EAChE,QAAQ;AACN,WAAO;AAAA,EACT;AACF;","names":[]}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { ClientField } from "payload";
|
|
2
|
+
import type { UploadWalkContext } from "./transform-upload-values";
|
|
3
|
+
import type { UploadRef } from "./types";
|
|
4
|
+
export declare function collectUploadRefs(values: Record<string, unknown>, fields: ClientField[], ctx: UploadWalkContext): UploadRef[];
|
|
5
|
+
//# sourceMappingURL=collect-upload-refs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collect-upload-refs.d.ts","sourceRoot":"","sources":["../../../src/content/uploads/collect-upload-refs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAEnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEzC,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE,iBAAiB,GAAG,SAAS,EAAE,CAe7H"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { transformUploadValues } from "./transform-upload-values";
|
|
2
|
+
import { uploadKey } from "./types";
|
|
3
|
+
function collectUploadRefs(values, fields, ctx) {
|
|
4
|
+
const refs = [];
|
|
5
|
+
const seen = /* @__PURE__ */ new Set();
|
|
6
|
+
transformUploadValues(values, fields, ctx, (ref) => {
|
|
7
|
+
const key = uploadKey(ref);
|
|
8
|
+
if (!seen.has(key)) {
|
|
9
|
+
seen.add(key);
|
|
10
|
+
refs.push(ref);
|
|
11
|
+
}
|
|
12
|
+
return void 0;
|
|
13
|
+
});
|
|
14
|
+
return refs;
|
|
15
|
+
}
|
|
16
|
+
export {
|
|
17
|
+
collectUploadRefs
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=collect-upload-refs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/content/uploads/collect-upload-refs.ts"],"sourcesContent":["import type { ClientField } from \"payload\";\nimport { transformUploadValues } from \"./transform-upload-values\";\nimport type { UploadWalkContext } from \"./transform-upload-values\";\nimport { uploadKey } from \"./types\";\nimport type { UploadRef } from \"./types\";\n\nexport function collectUploadRefs(values: Record<string, unknown>, fields: ClientField[], ctx: UploadWalkContext): UploadRef[] {\n const refs: UploadRef[] = [];\n const seen = new Set<string>();\n\n transformUploadValues(values, fields, ctx, (ref) => {\n const key = uploadKey(ref);\n if (!seen.has(key)) {\n seen.add(key);\n refs.push(ref);\n }\n\n return undefined;\n });\n\n return refs;\n}\n"],"mappings":"AACA,SAAS,6BAA6B;AAEtC,SAAS,iBAAiB;AAGnB,SAAS,kBAAkB,QAAiC,QAAuB,KAAqC;AAC7H,QAAM,OAAoB,CAAC;AAC3B,QAAM,OAAO,oBAAI,IAAY;AAE7B,wBAAsB,QAAQ,QAAQ,KAAK,CAAC,QAAQ;AAClD,UAAM,MAAM,UAAU,GAAG;AACzB,QAAI,CAAC,KAAK,IAAI,GAAG,GAAG;AAClB,WAAK,IAAI,GAAG;AACZ,WAAK,KAAK,GAAG;AAAA,IACf;AAEA,WAAO;AAAA,EACT,CAAC;AAED,SAAO;AACT;","names":[]}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { ClientField } from "payload";
|
|
2
|
+
import type { UploadWalkContext } from "./transform-upload-values";
|
|
3
|
+
import type { ResolvedUploadDoc } from "./types";
|
|
4
|
+
export declare function hydrateUploadValues(values: Record<string, unknown>, fields: ClientField[], ctx: UploadWalkContext, resolved: Map<string, ResolvedUploadDoc>): Record<string, unknown>;
|
|
5
|
+
//# sourceMappingURL=hydrate-values.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hydrate-values.d.ts","sourceRoot":"","sources":["../../../src/content/uploads/hydrate-values.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAEnE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAMjD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE,iBAAiB,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAMrL"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { transformUploadValues } from "./transform-upload-values";
|
|
2
|
+
import { uploadKey } from "./types";
|
|
3
|
+
function isRenderable(doc) {
|
|
4
|
+
return typeof doc.url === "string" && typeof doc.mimeType === "string";
|
|
5
|
+
}
|
|
6
|
+
function hydrateUploadValues(values, fields, ctx, resolved) {
|
|
7
|
+
return transformUploadValues(values, fields, ctx, (ref) => {
|
|
8
|
+
const doc = resolved.get(uploadKey(ref));
|
|
9
|
+
return doc && isRenderable(doc) ? doc : null;
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
export {
|
|
13
|
+
hydrateUploadValues
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=hydrate-values.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/content/uploads/hydrate-values.ts"],"sourcesContent":["import type { ClientField } from \"payload\";\nimport { transformUploadValues } from \"./transform-upload-values\";\nimport type { UploadWalkContext } from \"./transform-upload-values\";\nimport { uploadKey } from \"./types\";\nimport type { ResolvedUploadDoc } from \"./types\";\n\nfunction isRenderable(doc: ResolvedUploadDoc): boolean {\n return typeof doc.url === \"string\" && typeof doc.mimeType === \"string\";\n}\n\nexport function hydrateUploadValues(values: Record<string, unknown>, fields: ClientField[], ctx: UploadWalkContext, resolved: Map<string, ResolvedUploadDoc>): Record<string, unknown> {\n return transformUploadValues(values, fields, ctx, (ref) => {\n const doc = resolved.get(uploadKey(ref));\n\n return doc && isRenderable(doc) ? doc : null;\n });\n}\n"],"mappings":"AACA,SAAS,6BAA6B;AAEtC,SAAS,iBAAiB;AAG1B,SAAS,aAAa,KAAiC;AACrD,SAAO,OAAO,IAAI,QAAQ,YAAY,OAAO,IAAI,aAAa;AAChE;AAEO,SAAS,oBAAoB,QAAiC,QAAuB,KAAwB,UAAmE;AACrL,SAAO,sBAAsB,QAAQ,QAAQ,KAAK,CAAC,QAAQ;AACzD,UAAM,MAAM,SAAS,IAAI,UAAU,GAAG,CAAC;AAEvC,WAAO,OAAO,aAAa,GAAG,IAAI,MAAM;AAAA,EAC1C,CAAC;AACH;","names":[]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ResolvedUploadDoc, UploadRef } from "./types";
|
|
2
|
+
export interface MediaResolver {
|
|
3
|
+
resolve: (refs: UploadRef[], locale: string | undefined) => Promise<Map<string, ResolvedUploadDoc>>;
|
|
4
|
+
invalidate: () => void;
|
|
5
|
+
}
|
|
6
|
+
export declare function createMediaResolver(apiRoute: string): MediaResolver;
|
|
7
|
+
//# sourceMappingURL=media-resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media-resolver.d.ts","sourceRoot":"","sources":["../../../src/content/uploads/media-resolver.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAE5D,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,KAAK,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC;IACpG,UAAU,EAAE,MAAM,IAAI,CAAC;CACxB;AAwBD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,CAyCnE"}
|