@focus-reactive/payload-plugin-seo 1.3.0 → 1.4.0
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/README.md +210 -43
- package/dist/admin.css +2 -3
- package/dist/components/SeoButton/ScoreBadge.d.ts.map +1 -1
- package/dist/components/SeoButton/ScoreBadge.js +10 -7
- package/dist/components/SeoButton/ScoreBadge.js.map +1 -1
- package/dist/components/SeoButton/SeoButtonInner.d.ts +3 -1
- package/dist/components/SeoButton/SeoButtonInner.d.ts.map +1 -1
- package/dist/components/SeoButton/SeoButtonInner.js +5 -2
- package/dist/components/SeoButton/SeoButtonInner.js.map +1 -1
- package/dist/components/SeoDrawer/TabsNav/index.d.ts.map +1 -1
- package/dist/components/SeoDrawer/TabsNav/index.js +15 -4
- package/dist/components/SeoDrawer/TabsNav/index.js.map +1 -1
- package/dist/components/SeoDrawer/TabsNav/variants.d.ts.map +1 -1
- package/dist/components/SeoDrawer/TabsNav/variants.js +12 -9
- package/dist/components/SeoDrawer/TabsNav/variants.js.map +1 -1
- package/dist/components/SeoDrawer/analysisDecision.d.ts.map +1 -1
- package/dist/components/SeoDrawer/analysisDecision.js.map +1 -1
- package/dist/components/SeoDrawer/build-analysis-input.d.ts +9 -7
- package/dist/components/SeoDrawer/build-analysis-input.d.ts.map +1 -1
- package/dist/components/SeoDrawer/build-analysis-input.js +39 -11
- package/dist/components/SeoDrawer/build-analysis-input.js.map +1 -1
- package/dist/components/SeoDrawer/buildInput.d.ts +1 -1
- package/dist/components/SeoDrawer/buildInput.d.ts.map +1 -1
- package/dist/components/SeoDrawer/buildInput.js +12 -2
- package/dist/components/SeoDrawer/buildInput.js.map +1 -1
- package/dist/components/SeoDrawer/components/Header.d.ts.map +1 -1
- package/dist/components/SeoDrawer/components/Header.js +20 -2
- package/dist/components/SeoDrawer/components/Header.js.map +1 -1
- package/dist/components/SeoDrawer/components/HeadingsSection/HeadingLevelTiles.d.ts.map +1 -1
- package/dist/components/SeoDrawer/components/HeadingsSection/HeadingLevelTiles.js +23 -5
- package/dist/components/SeoDrawer/components/HeadingsSection/HeadingLevelTiles.js.map +1 -1
- package/dist/components/SeoDrawer/components/HeadingsSection/HeadingTree/Chevron.d.ts.map +1 -1
- package/dist/components/SeoDrawer/components/HeadingsSection/HeadingTree/Chevron.js +12 -1
- package/dist/components/SeoDrawer/components/HeadingsSection/HeadingTree/Chevron.js.map +1 -1
- package/dist/components/SeoDrawer/components/HeadingsSection/HeadingTree/HeadingTreeGroup.d.ts.map +1 -1
- package/dist/components/SeoDrawer/components/HeadingsSection/HeadingTree/HeadingTreeGroup.js +43 -4
- package/dist/components/SeoDrawer/components/HeadingsSection/HeadingTree/HeadingTreeGroup.js.map +1 -1
- package/dist/components/SeoDrawer/components/HeadingsSection/HeadingTree/HeadingTreeRow.d.ts +1 -1
- package/dist/components/SeoDrawer/components/HeadingsSection/HeadingTree/HeadingTreeRow.d.ts.map +1 -1
- package/dist/components/SeoDrawer/components/HeadingsSection/HeadingTree/HeadingTreeRow.js +45 -10
- package/dist/components/SeoDrawer/components/HeadingsSection/HeadingTree/HeadingTreeRow.js.map +1 -1
- package/dist/components/SeoDrawer/components/HeadingsSection/HeadingTree/index.d.ts.map +1 -1
- package/dist/components/SeoDrawer/components/HeadingsSection/HeadingTree/index.js.map +1 -1
- package/dist/components/SeoDrawer/components/HeadingsSection/HeadingTree/useHeadingRails.d.ts +1 -1
- package/dist/components/SeoDrawer/components/HeadingsSection/HeadingTree/useHeadingRails.d.ts.map +1 -1
- package/dist/components/SeoDrawer/components/HeadingsSection/HeadingTree/useHeadingRails.js +6 -1
- package/dist/components/SeoDrawer/components/HeadingsSection/HeadingTree/useHeadingRails.js.map +1 -1
- package/dist/components/SeoDrawer/components/HeadingsSection/index.d.ts.map +1 -1
- package/dist/components/SeoDrawer/components/HeadingsSection/index.js.map +1 -1
- package/dist/components/SeoDrawer/components/SerpPreview/highlight-keyphrase.d.ts.map +1 -1
- package/dist/components/SeoDrawer/components/SerpPreview/highlight-keyphrase.js +3 -1
- package/dist/components/SeoDrawer/components/SerpPreview/highlight-keyphrase.js.map +1 -1
- package/dist/components/SeoDrawer/components/SerpPreview/index.d.ts.map +1 -1
- package/dist/components/SeoDrawer/components/SerpPreview/index.js +8 -1
- package/dist/components/SeoDrawer/components/SerpPreview/index.js.map +1 -1
- package/dist/components/SeoDrawer/components/SerpPreview/serp-favicon.d.ts.map +1 -1
- package/dist/components/SeoDrawer/components/SerpPreview/serp-favicon.js.map +1 -1
- package/dist/components/SeoDrawer/components/SerpPreview/variants.d.ts.map +1 -1
- package/dist/components/SeoDrawer/components/SerpPreview/variants.js +9 -6
- package/dist/components/SeoDrawer/components/SerpPreview/variants.js.map +1 -1
- package/dist/components/SeoDrawer/index.d.ts.map +1 -1
- package/dist/components/SeoDrawer/index.js +50 -15
- package/dist/components/SeoDrawer/index.js.map +1 -1
- package/dist/components/SeoDrawer/keyphrasePending.d.ts.map +1 -1
- package/dist/components/SeoDrawer/keyphrasePending.js.map +1 -1
- package/dist/components/SeoDrawer/languagePacks.d.ts.map +1 -1
- package/dist/components/SeoDrawer/languagePacks.js.map +1 -1
- package/dist/components/SeoDrawer/tabs/InclusiveTab.d.ts.map +1 -1
- package/dist/components/SeoDrawer/tabs/InclusiveTab.js +31 -10
- package/dist/components/SeoDrawer/tabs/InclusiveTab.js.map +1 -1
- package/dist/components/SeoDrawer/tabs/KeyphraseTab.d.ts +1 -1
- package/dist/components/SeoDrawer/tabs/KeyphraseTab.d.ts.map +1 -1
- package/dist/components/SeoDrawer/tabs/KeyphraseTab.js +8 -1
- package/dist/components/SeoDrawer/tabs/KeyphraseTab.js.map +1 -1
- package/dist/components/SeoDrawer/tabs/SerpTab.d.ts +1 -1
- package/dist/components/SeoDrawer/tabs/SerpTab.d.ts.map +1 -1
- package/dist/components/SeoDrawer/tabs/SerpTab.js +5 -1
- package/dist/components/SeoDrawer/tabs/SerpTab.js.map +1 -1
- package/dist/components/SeoDrawer/tabs/VitalsTab.d.ts.map +1 -1
- package/dist/components/SeoDrawer/tabs/VitalsTab.js +32 -9
- package/dist/components/SeoDrawer/tabs/VitalsTab.js.map +1 -1
- package/dist/components/SeoDrawer/useAnalysis.d.ts +1 -1
- package/dist/components/SeoDrawer/useAnalysis.d.ts.map +1 -1
- package/dist/components/SeoDrawer/useAnalysis.js +6 -1
- package/dist/components/SeoDrawer/useAnalysis.js.map +1 -1
- package/dist/components/SeoDrawer/useLiveDocument.d.ts +5 -3
- package/dist/components/SeoDrawer/useLiveDocument.d.ts.map +1 -1
- package/dist/components/SeoDrawer/useLiveDocument.js +82 -37
- package/dist/components/SeoDrawer/useLiveDocument.js.map +1 -1
- package/dist/components/icons.d.ts.map +1 -1
- package/dist/components/icons.js +16 -1
- package/dist/components/icons.js.map +1 -1
- package/dist/constants/checkIds.d.ts.map +1 -1
- package/dist/constants/checkIds.js +18 -2
- package/dist/constants/checkIds.js.map +1 -1
- package/dist/content/extract/context.d.ts +11 -0
- package/dist/content/extract/context.d.ts.map +1 -0
- package/dist/content/extract/context.js +1 -0
- package/dist/content/extract/context.js.map +1 -0
- package/dist/content/extract/extract.d.ts +18 -0
- package/dist/content/extract/extract.d.ts.map +1 -0
- package/dist/content/extract/extract.js +211 -0
- package/dist/content/extract/extract.js.map +1 -0
- package/dist/content/extract/selection.d.ts +3 -0
- package/dist/content/extract/selection.d.ts.map +1 -0
- package/dist/content/extract/selection.js +32 -0
- package/dist/content/extract/selection.js.map +1 -0
- package/dist/content/index.d.ts +5 -0
- package/dist/content/index.d.ts.map +1 -0
- package/dist/content/index.js +14 -0
- package/dist/content/index.js.map +1 -0
- package/dist/content/lexical/transform.d.ts +5 -0
- package/dist/content/lexical/transform.d.ts.map +1 -0
- package/dist/content/lexical/transform.js +56 -0
- package/dist/content/lexical/transform.js.map +1 -0
- package/dist/content/registry.d.ts +4 -0
- package/dist/content/registry.d.ts.map +1 -0
- package/dist/content/registry.js +22 -0
- package/dist/content/registry.js.map +1 -0
- package/dist/content/resolve/collect-refs.d.ts +8 -0
- package/dist/content/resolve/collect-refs.d.ts.map +1 -0
- package/dist/content/resolve/collect-refs.js +79 -0
- package/dist/content/resolve/collect-refs.js.map +1 -0
- package/dist/content/resolve/hydrate.d.ts +7 -0
- package/dist/content/resolve/hydrate.d.ts.map +1 -0
- package/dist/content/resolve/hydrate.js +123 -0
- package/dist/content/resolve/hydrate.js.map +1 -0
- package/dist/content/resolve/resolver.d.ts +7 -0
- package/dist/content/resolve/resolver.d.ts.map +1 -0
- package/dist/content/{uploads/media-resolver.js → resolve/resolver.js} +21 -16
- package/dist/content/resolve/resolver.js.map +1 -0
- package/dist/content/resolve/types.d.ts +12 -0
- package/dist/content/resolve/types.d.ts.map +1 -0
- package/dist/content/resolve/types.js +7 -0
- package/dist/content/resolve/types.js.map +1 -0
- package/dist/content/schema/helpers.d.ts +9 -0
- package/dist/content/schema/helpers.d.ts.map +1 -0
- package/dist/content/schema/helpers.js +60 -0
- package/dist/content/schema/helpers.js.map +1 -0
- package/dist/content/schema/nodes.d.ts +26 -0
- package/dist/content/schema/nodes.d.ts.map +1 -0
- package/dist/content/schema/nodes.js +8 -0
- package/dist/content/schema/nodes.js.map +1 -0
- package/dist/content/schema/serialize.d.ts +3 -0
- package/dist/content/schema/serialize.d.ts.map +1 -0
- package/dist/content/schema/serialize.js +31 -0
- package/dist/content/schema/serialize.js.map +1 -0
- package/dist/content/walk/walkFields.d.ts +17 -0
- package/dist/content/walk/walkFields.d.ts.map +1 -0
- package/dist/content/walk/walkFields.js +88 -0
- package/dist/content/walk/walkFields.js.map +1 -0
- package/dist/engine/assessorAdapter.d.ts.map +1 -1
- package/dist/engine/assessorAdapter.js.map +1 -1
- package/dist/engine/extractCheckData.d.ts.map +1 -1
- package/dist/engine/extractCheckData.js +19 -5
- package/dist/engine/extractCheckData.js.map +1 -1
- package/dist/engine/helpers/title-progress.d.ts +1 -1
- package/dist/engine/helpers/title-progress.js.map +1 -1
- package/dist/engine/inclusiveScore.d.ts.map +1 -1
- package/dist/engine/inclusiveScore.js.map +1 -1
- package/dist/engine/recommendations.d.ts.map +1 -1
- package/dist/engine/recommendations.js.map +1 -1
- package/dist/engine/runAnalysis/services/derive-inclusive.js.map +1 -1
- package/dist/engine/runAnalysis/services/derive-readability.d.ts.map +1 -1
- package/dist/engine/runAnalysis/services/derive-readability.js +5 -1
- package/dist/engine/runAnalysis/services/derive-readability.js.map +1 -1
- package/dist/engine/runAnalysis/services/derive-vitals/heading-tree.d.ts.map +1 -1
- package/dist/engine/runAnalysis/services/derive-vitals/heading-tree.js.map +1 -1
- package/dist/engine/runAnalysis/services/derive-vitals/index.d.ts.map +1 -1
- package/dist/engine/runAnalysis/services/derive-vitals/index.js +9 -1
- package/dist/engine/runAnalysis/services/derive-vitals/index.js.map +1 -1
- package/dist/engine/runAnalysis/services/derive-vitals/researches.d.ts +1 -1
- package/dist/engine/runAnalysis/services/derive-vitals/researches.d.ts.map +1 -1
- package/dist/engine/runAnalysis/services/derive-vitals/researches.js +8 -2
- package/dist/engine/runAnalysis/services/derive-vitals/researches.js.map +1 -1
- package/dist/engine/runAnalysis/utils/enrich.d.ts.map +1 -1
- package/dist/engine/runAnalysis/utils/enrich.js.map +1 -1
- package/dist/engine/visualization/resolveVisualization/constants.d.ts.map +1 -1
- package/dist/engine/visualization/resolveVisualization/constants.js +9 -1
- package/dist/engine/visualization/resolveVisualization/constants.js.map +1 -1
- package/dist/engine/visualization/resolveVisualization/index.d.ts.map +1 -1
- package/dist/engine/visualization/resolveVisualization/index.js.map +1 -1
- package/dist/engine/visualization/resolveVisualization/resolves/resolveDrilldown.d.ts.map +1 -1
- package/dist/engine/visualization/resolveVisualization/resolves/resolveDrilldown.js.map +1 -1
- package/dist/engine/visualization/resolveVisualization/resolves/resolveLinks.d.ts.map +1 -1
- package/dist/engine/visualization/resolveVisualization/resolves/resolveLinks.js.map +1 -1
- package/dist/engine/visualization/resolveVisualization/resolves/resolveProportionCount.d.ts.map +1 -1
- package/dist/engine/visualization/resolveVisualization/resolves/resolveProportionCount.js.map +1 -1
- package/dist/engine/visualization/resolveVisualization/resolves/resolveValueRange.d.ts.map +1 -1
- package/dist/engine/visualization/resolveVisualization/resolves/resolveValueRange.js.map +1 -1
- package/dist/engine/visualization/resolveVisualization/utils/pluralize.d.ts.map +1 -1
- package/dist/engine/visualization/resolveVisualization/utils/pluralize.js.map +1 -1
- package/dist/engine/visualization/resolveVisualization/utils/readDrilldownItems.d.ts.map +1 -1
- package/dist/engine/visualization/resolveVisualization/utils/readDrilldownItems.js.map +1 -1
- package/dist/engine/visualization/resolveVisualization/utils/readNumber.d.ts.map +1 -1
- package/dist/engine/visualization/resolveVisualization/utils/readNumber.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +7 -2
- package/dist/plugin.js.map +1 -1
- package/dist/types/config.d.ts +30 -7
- package/dist/types/config.d.ts.map +1 -1
- package/dist/ui/CheckRow/CheckVisualization/visualizations/DensityGauge.d.ts.map +1 -1
- package/dist/ui/CheckRow/CheckVisualization/visualizations/DensityGauge.js +24 -5
- package/dist/ui/CheckRow/CheckVisualization/visualizations/DensityGauge.js.map +1 -1
- package/dist/ui/CheckRow/CheckVisualization/visualizations/DistributionBar.d.ts.map +1 -1
- package/dist/ui/CheckRow/CheckVisualization/visualizations/DistributionBar.js +8 -1
- package/dist/ui/CheckRow/CheckVisualization/visualizations/DistributionBar.js.map +1 -1
- package/dist/ui/CheckRow/CheckVisualization/visualizations/DrillDown.d.ts.map +1 -1
- package/dist/ui/CheckRow/CheckVisualization/visualizations/DrillDown.js +11 -4
- package/dist/ui/CheckRow/CheckVisualization/visualizations/DrillDown.js.map +1 -1
- package/dist/ui/CheckRow/CheckVisualization/visualizations/SegmentBar.d.ts.map +1 -1
- package/dist/ui/CheckRow/CheckVisualization/visualizations/SegmentBar.js +7 -1
- package/dist/ui/CheckRow/CheckVisualization/visualizations/SegmentBar.js.map +1 -1
- package/dist/ui/CheckRow/index.d.ts.map +1 -1
- package/dist/ui/CheckRow/index.js +23 -9
- package/dist/ui/CheckRow/index.js.map +1 -1
- package/dist/ui/FilterPills.d.ts.map +1 -1
- package/dist/ui/FilterPills.js +78 -19
- package/dist/ui/FilterPills.js.map +1 -1
- package/dist/ui/KpiCard.d.ts.map +1 -1
- package/dist/ui/KpiCard.js.map +1 -1
- package/dist/ui/Pill.d.ts.map +1 -1
- package/dist/ui/Pill.js +11 -8
- package/dist/ui/Pill.js.map +1 -1
- package/dist/ui/ScoreRing.d.ts.map +1 -1
- package/dist/ui/ScoreRing.js +12 -2
- package/dist/ui/ScoreRing.js.map +1 -1
- package/dist/ui/SectionWrapper.d.ts.map +1 -1
- package/dist/ui/SectionWrapper.js.map +1 -1
- package/dist/ui/SegmentedControl.d.ts +1 -1
- package/dist/ui/SegmentedControl.d.ts.map +1 -1
- package/dist/ui/SegmentedControl.js +49 -33
- package/dist/ui/SegmentedControl.js.map +1 -1
- package/dist/ui/Tooltip.d.ts +1 -1
- package/dist/ui/Tooltip.d.ts.map +1 -1
- package/dist/ui/Tooltip.js +8 -1
- package/dist/ui/Tooltip.js.map +1 -1
- package/dist/utils/config/overrideAdmin.d.ts.map +1 -1
- package/dist/utils/config/overrideAdmin.js +9 -1
- package/dist/utils/config/overrideAdmin.js.map +1 -1
- package/dist/utils/style.d.ts.map +1 -1
- package/dist/utils/style.js.map +1 -1
- package/package.json +9 -7
- package/dist/content/extractContent.d.ts +0 -3
- package/dist/content/extractContent.d.ts.map +0 -1
- package/dist/content/extractContent.js +0 -31
- package/dist/content/extractContent.js.map +0 -1
- package/dist/content/uploads/collect-upload-refs.d.ts +0 -5
- package/dist/content/uploads/collect-upload-refs.d.ts.map +0 -1
- package/dist/content/uploads/collect-upload-refs.js +0 -19
- package/dist/content/uploads/collect-upload-refs.js.map +0 -1
- package/dist/content/uploads/hydrate-values.d.ts +0 -5
- package/dist/content/uploads/hydrate-values.d.ts.map +0 -1
- package/dist/content/uploads/hydrate-values.js +0 -15
- package/dist/content/uploads/hydrate-values.js.map +0 -1
- package/dist/content/uploads/media-resolver.d.ts +0 -7
- package/dist/content/uploads/media-resolver.d.ts.map +0 -1
- package/dist/content/uploads/media-resolver.js.map +0 -1
- package/dist/content/uploads/transform-lexical-uploads.d.ts +0 -5
- package/dist/content/uploads/transform-lexical-uploads.d.ts.map +0 -1
- package/dist/content/uploads/transform-lexical-uploads.js +0 -34
- package/dist/content/uploads/transform-lexical-uploads.js.map +0 -1
- package/dist/content/uploads/transform-upload-values.d.ts +0 -10
- package/dist/content/uploads/transform-upload-values.d.ts.map +0 -1
- package/dist/content/uploads/transform-upload-values.js +0 -108
- package/dist/content/uploads/transform-upload-values.js.map +0 -1
- package/dist/content/uploads/types.d.ts +0 -8
- package/dist/content/uploads/types.d.ts.map +0 -1
- package/dist/content/uploads/types.js +0 -7
- package/dist/content/uploads/types.js.map +0 -1
- package/dist/content/walkValue.d.ts +0 -14
- package/dist/content/walkValue.d.ts.map +0 -1
- package/dist/content/walkValue.js +0 -62
- package/dist/content/walkValue.js.map +0 -1
package/dist/plugin.js
CHANGED
|
@@ -8,11 +8,16 @@ const seoPlugin = (config) => (incomingConfig) => {
|
|
|
8
8
|
if (config.disabled)
|
|
9
9
|
return incomingConfig;
|
|
10
10
|
if (!config.collections?.length) {
|
|
11
|
-
console.warn(
|
|
11
|
+
console.warn(
|
|
12
|
+
`${PREFIX} Disabled: config.collections must list at least one collection slug. Plugin not registered.`
|
|
13
|
+
);
|
|
12
14
|
return incomingConfig;
|
|
13
15
|
}
|
|
14
16
|
setPluginConfig(config);
|
|
15
|
-
const merged = mergeTranslations(
|
|
17
|
+
const merged = mergeTranslations(
|
|
18
|
+
incomingConfig.i18n?.translations ?? {},
|
|
19
|
+
mergeTranslations(en, config.translations ?? {})
|
|
20
|
+
);
|
|
16
21
|
const withTranslations = {
|
|
17
22
|
...incomingConfig,
|
|
18
23
|
i18n: { ...incomingConfig.i18n, translations: merged }
|
package/dist/plugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/plugin.ts"],"sourcesContent":["import type { Config, Plugin } from \"payload\";\nimport { setPluginConfig } from \"./config\";\nimport { PLUGIN_NAME } from \"./constants\";\nimport type { SeoPluginConfig } from \"./types/config\";\nimport { overrideAdmin } from \"./utils/config/overrideAdmin\";\nimport { mergeTranslations } from \"./utils/config/mergeTranslations\";\nimport { en } from \"./translations/en\";\n\nconst PREFIX = `[${PLUGIN_NAME}]`;\n\nexport const seoPlugin =\n (config: SeoPluginConfig): Plugin =>\n (incomingConfig: Config): Config => {\n if (config.disabled) return incomingConfig;\n\n if (!config.collections?.length) {\n console.warn(`${PREFIX} Disabled: config.collections must list at least one collection slug. Plugin not registered
|
|
1
|
+
{"version":3,"sources":["../src/plugin.ts"],"sourcesContent":["import type { Config, Plugin } from \"payload\";\nimport { setPluginConfig } from \"./config\";\nimport { PLUGIN_NAME } from \"./constants\";\nimport type { SeoPluginConfig } from \"./types/config\";\nimport { overrideAdmin } from \"./utils/config/overrideAdmin\";\nimport { mergeTranslations } from \"./utils/config/mergeTranslations\";\nimport { en } from \"./translations/en\";\n\nconst PREFIX = `[${PLUGIN_NAME}]`;\n\nexport const seoPlugin =\n (config: SeoPluginConfig): Plugin =>\n (incomingConfig: Config): Config => {\n if (config.disabled) return incomingConfig;\n\n if (!config.collections?.length) {\n console.warn(\n `${PREFIX} Disabled: config.collections must list at least one collection slug. Plugin not registered.`\n );\n return incomingConfig;\n }\n\n setPluginConfig(config);\n\n const merged = mergeTranslations(\n (incomingConfig.i18n?.translations as never) ?? {},\n mergeTranslations(en, config.translations ?? {})\n );\n\n const withTranslations: Config = {\n ...incomingConfig,\n i18n: { ...incomingConfig.i18n, translations: merged as never },\n };\n\n return overrideAdmin(withTranslations, config);\n };\n"],"mappings":"AACA,SAAS,uBAAuB;AAChC,SAAS,mBAAmB;AAE5B,SAAS,qBAAqB;AAC9B,SAAS,yBAAyB;AAClC,SAAS,UAAU;AAEnB,MAAM,SAAS,IAAI,WAAW;AAEvB,MAAM,YACX,CAAC,WACD,CAAC,mBAAmC;AAClC,MAAI,OAAO;AAAU,WAAO;AAE5B,MAAI,CAAC,OAAO,aAAa,QAAQ;AAC/B,YAAQ;AAAA,MACN,GAAG,MAAM;AAAA,IACX;AACA,WAAO;AAAA,EACT;AAEA,kBAAgB,MAAM;AAEtB,QAAM,SAAS;AAAA,IACZ,eAAe,MAAM,gBAA0B,CAAC;AAAA,IACjD,kBAAkB,IAAI,OAAO,gBAAgB,CAAC,CAAC;AAAA,EACjD;AAEA,QAAM,mBAA2B;AAAA,IAC/B,GAAG;AAAA,IACH,MAAM,EAAE,GAAG,eAAe,MAAM,cAAc,OAAgB;AAAA,EAChE;AAEA,SAAO,cAAc,kBAAkB,MAAM;AAC/C;","names":[]}
|
package/dist/types/config.d.ts
CHANGED
|
@@ -1,6 +1,21 @@
|
|
|
1
|
+
import type { ContentNode } from "../content/schema/nodes";
|
|
1
2
|
import type { Translations } from "../translations/types";
|
|
2
|
-
/**
|
|
3
|
-
export
|
|
3
|
+
/** Runtime context handed to a content extractor so it can resolve references and locale-correct hrefs. */
|
|
4
|
+
export interface ExtractContext {
|
|
5
|
+
/** Payload locale code (e.g. "en", "es"); absent → extractor falls back to its own default. */
|
|
6
|
+
locale?: string;
|
|
7
|
+
/** Payload REST API route (e.g. "/api") for client-side reference fetches. */
|
|
8
|
+
apiRoute?: string;
|
|
9
|
+
}
|
|
10
|
+
/** Client extractor: receives hydrated, unflattened form values + runtime context, returns the content schema (Intermediate Representation). */
|
|
11
|
+
export type ContentExtractor = (values: Record<string, unknown>, ctx?: ExtractContext) => ContentNode[] | Promise<ContentNode[]>;
|
|
12
|
+
/** Which parts of the document the built-in extractor walks. */
|
|
13
|
+
export interface ContentSelection {
|
|
14
|
+
/** Dot-paths to walk, in order. Omitted or empty = whole document root. */
|
|
15
|
+
include?: string[];
|
|
16
|
+
/** Dot-paths to skip (merged with auto-excluded seoTitle/metaDescription/slug). */
|
|
17
|
+
exclude?: string[];
|
|
18
|
+
}
|
|
4
19
|
export interface SeoFieldPaths {
|
|
5
20
|
/** Dot-path to the SEO title. Falls back to the collection useAsTitle / `title` if absent. */
|
|
6
21
|
seoTitle?: string;
|
|
@@ -11,18 +26,26 @@ export interface SeoFieldPaths {
|
|
|
11
26
|
* @default "slug"
|
|
12
27
|
*/
|
|
13
28
|
slug?: string;
|
|
14
|
-
/**
|
|
15
|
-
|
|
29
|
+
/**
|
|
30
|
+
* Built-in content selection. A string is a single field path.
|
|
31
|
+
* An object selects include/exclude paths over the whole document.
|
|
32
|
+
* Ignored when `extractContentPath` is set and registered.
|
|
33
|
+
*/
|
|
34
|
+
content?: string | ContentSelection;
|
|
16
35
|
}
|
|
17
36
|
export interface SeoCollectionConfig {
|
|
18
37
|
slug: string;
|
|
19
38
|
fields?: SeoFieldPaths;
|
|
20
39
|
/**
|
|
21
|
-
* importMap
|
|
22
|
-
*
|
|
23
|
-
* @default built-in smart extractor
|
|
40
|
+
* importMap path string used as the lookup key for a registered ContentExtractor (returns ContentNode[]).
|
|
41
|
+
* Register the function via registerContentExtractors from "@focus-reactive/payload-plugin-seo/content".
|
|
24
42
|
*/
|
|
25
43
|
extractContentPath?: string;
|
|
44
|
+
/**
|
|
45
|
+
* Depth of nested relation/upload resolution for the built-in extractor.
|
|
46
|
+
* @default 2
|
|
47
|
+
*/
|
|
48
|
+
resolveDepth?: number;
|
|
26
49
|
}
|
|
27
50
|
export interface SeoSiteConfig {
|
|
28
51
|
name?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE1D,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE1D,2GAA2G;AAC3G,MAAM,WAAW,cAAc;IAC7B,+FAA+F;IAC/F,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,gJAAgJ;AAChJ,MAAM,MAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,CAAC,EAAE,cAAc,KAAK,WAAW,EAAE,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;AAEjI,gEAAgE;AAChE,MAAM,WAAW,gBAAgB;IAC/B,2EAA2E;IAC3E,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,mFAAmF;IACnF,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,8FAA8F;IAC9F,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yGAAyG;IACzG,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAAC;CACrC;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,mBAAmB,EAAE,CAAC;IACnC,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DensityGauge.d.ts","sourceRoot":"","sources":["../../../../../src/ui/CheckRow/CheckVisualization/visualizations/DensityGauge.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wCAAwC,CAAC;AAEzE,wBAAgB,YAAY,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"DensityGauge.d.ts","sourceRoot":"","sources":["../../../../../src/ui/CheckRow/CheckVisualization/visualizations/DensityGauge.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wCAAwC,CAAC;AAEzE,wBAAgB,YAAY,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,UAAU,2CAkG/F"}
|
|
@@ -11,7 +11,10 @@ function DensityGauge({ bands, markerPct, markerLabel, markerStatus, labels }) {
|
|
|
11
11
|
const halfLabel = dims.label / 2;
|
|
12
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
13
|
const firstVisibleBand = bands.findIndex((band) => band.endPct > band.startPct);
|
|
14
|
-
const lastVisibleBand = bands.reduce(
|
|
14
|
+
const lastVisibleBand = bands.reduce(
|
|
15
|
+
(acc, band, i) => band.endPct > band.startPct ? i : acc,
|
|
16
|
+
-1
|
|
17
|
+
);
|
|
15
18
|
useLayoutEffect(() => {
|
|
16
19
|
const bar = barRef.current;
|
|
17
20
|
const label = labelRef.current;
|
|
@@ -29,7 +32,12 @@ function DensityGauge({ bands, markerPct, markerLabel, markerStatus, labels }) {
|
|
|
29
32
|
bands.map((band, i) => /* @__PURE__ */ jsx(
|
|
30
33
|
"i",
|
|
31
34
|
{
|
|
32
|
-
className: cn(
|
|
35
|
+
className: cn(
|
|
36
|
+
"absolute inset-y-0",
|
|
37
|
+
statusVar({ status: band.status }),
|
|
38
|
+
i === firstVisibleBand && "rounded-l-[3px]",
|
|
39
|
+
i === lastVisibleBand && "rounded-r-[3px]"
|
|
40
|
+
),
|
|
33
41
|
style: {
|
|
34
42
|
left: `${band.startPct}%`,
|
|
35
43
|
width: `${band.endPct - band.startPct}%`,
|
|
@@ -42,7 +50,11 @@ function DensityGauge({ bands, markerPct, markerLabel, markerStatus, labels }) {
|
|
|
42
50
|
"span",
|
|
43
51
|
{
|
|
44
52
|
ref: labelRef,
|
|
45
|
-
className: cn(
|
|
53
|
+
className: cn(
|
|
54
|
+
"absolute bottom-[13px] font-mono font-bold text-[11px] whitespace-nowrap",
|
|
55
|
+
statusVar({ status: markerStatus }),
|
|
56
|
+
labelAlign
|
|
57
|
+
),
|
|
46
58
|
style: { left: `${markerPct}%`, color: "var(--seo-c)" },
|
|
47
59
|
children: markerLabel
|
|
48
60
|
}
|
|
@@ -50,7 +62,10 @@ function DensityGauge({ bands, markerPct, markerLabel, markerStatus, labels }) {
|
|
|
50
62
|
/* @__PURE__ */ jsx(
|
|
51
63
|
"span",
|
|
52
64
|
{
|
|
53
|
-
className: cn(
|
|
65
|
+
className: cn(
|
|
66
|
+
"absolute -top-[3px] -translate-x-1/2 block w-[12px] h-[12px] rounded-full bg-neutral-0 border-2",
|
|
67
|
+
statusVar({ status: markerStatus })
|
|
68
|
+
),
|
|
54
69
|
style: { left: `${markerPct}%`, borderColor: "var(--seo-c)" }
|
|
55
70
|
}
|
|
56
71
|
)
|
|
@@ -58,7 +73,11 @@ function DensityGauge({ bands, markerPct, markerLabel, markerStatus, labels }) {
|
|
|
58
73
|
/* @__PURE__ */ jsx("div", { className: "relative h-[14px] text-[10px] text-neutral-500", children: labels.map((label, i) => /* @__PURE__ */ jsx(
|
|
59
74
|
"span",
|
|
60
75
|
{
|
|
61
|
-
className: cn(
|
|
76
|
+
className: cn(
|
|
77
|
+
"absolute whitespace-nowrap",
|
|
78
|
+
label.pct <= 0 ? "translate-x-0" : label.pct >= 100 ? "-translate-x-full" : "-translate-x-1/2",
|
|
79
|
+
label.emphasis === "good" && "text-seo-good"
|
|
80
|
+
),
|
|
62
81
|
style: { left: `${label.pct}%` },
|
|
63
82
|
children: label.text
|
|
64
83
|
},
|
|
@@ -1 +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
|
|
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 =\n dims.label === 0\n ? \"-translate-x-1/2\"\n : markerPx < halfLabel\n ? \"translate-x-0\"\n : markerPx > dims.bar - halfLabel\n ? \"-translate-x-full\"\n : \"-translate-x-1/2\";\n\n const firstVisibleBand = bands.findIndex((band) => band.endPct > band.startPct);\n const lastVisibleBand = bands.reduce(\n (acc, band, i) => (band.endPct > band.startPct ? i : acc),\n -1\n );\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(\n \"absolute inset-y-0\",\n statusVar({ status: band.status }),\n i === firstVisibleBand && \"rounded-l-[3px]\",\n i === lastVisibleBand && \"rounded-r-[3px]\"\n )}\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(\n \"absolute bottom-[13px] font-mono font-bold text-[11px] whitespace-nowrap\",\n statusVar({ status: markerStatus }),\n labelAlign\n )}\n style={{ left: `${markerPct}%`, color: \"var(--seo-c)\" }}\n >\n {markerLabel}\n </span>\n <span\n className={cn(\n \"absolute -top-[3px] -translate-x-1/2 block w-[12px] h-[12px] rounded-full bg-neutral-0 border-2\",\n statusVar({ status: markerStatus })\n )}\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(\n \"absolute whitespace-nowrap\",\n label.pct <= 0\n ? \"translate-x-0\"\n : label.pct >= 100\n ? \"-translate-x-full\"\n : \"-translate-x-1/2\",\n label.emphasis === \"good\" && \"text-seo-good\"\n )}\n style={{ left: `${label.pct}%` }}\n >\n {label.text}\n </span>\n ))}\n </div>\n </>\n );\n}\n"],"mappings":";AA+CI,mBAGM,KAFJ,YADF;AA7CJ,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,aACJ,KAAK,UAAU,IACX,qBACA,WAAW,YACT,kBACA,WAAW,KAAK,MAAM,YACpB,sBACA;AAEV,QAAM,mBAAmB,MAAM,UAAU,CAAC,SAAS,KAAK,SAAS,KAAK,QAAQ;AAC9E,QAAM,kBAAkB,MAAM;AAAA,IAC5B,CAAC,KAAK,MAAM,MAAO,KAAK,SAAS,KAAK,WAAW,IAAI;AAAA,IACrD;AAAA,EACF;AAEA,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;AAAA,YACT;AAAA,YACA,UAAU,EAAE,QAAQ,KAAK,OAAO,CAAC;AAAA,YACjC,MAAM,oBAAoB;AAAA,YAC1B,MAAM,mBAAmB;AAAA,UAC3B;AAAA,UACA,OAAO;AAAA,YACL,MAAM,GAAG,KAAK,QAAQ;AAAA,YACtB,OAAO,GAAG,KAAK,SAAS,KAAK,QAAQ;AAAA,YACrC,YAAY;AAAA,UACd;AAAA;AAAA,QAXK,GAAG,KAAK,MAAM,IAAI,CAAC;AAAA,MAY1B,CACD;AAAA,MACD;AAAA,QAAC;AAAA;AAAA,UACC,KAAK;AAAA,UACL,WAAW;AAAA,YACT;AAAA,YACA,UAAU,EAAE,QAAQ,aAAa,CAAC;AAAA,YAClC;AAAA,UACF;AAAA,UACA,OAAO,EAAE,MAAM,GAAG,SAAS,KAAK,OAAO,eAAe;AAAA,UAErD;AAAA;AAAA,MACH;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACC,WAAW;AAAA,YACT;AAAA,YACA,UAAU,EAAE,QAAQ,aAAa,CAAC;AAAA,UACpC;AAAA,UACA,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;AAAA,UACT;AAAA,UACA,MAAM,OAAO,IACT,kBACA,MAAM,OAAO,MACX,sBACA;AAAA,UACN,MAAM,aAAa,UAAU;AAAA,QAC/B;AAAA,QACA,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;AAAA,QAE9B,gBAAM;AAAA;AAAA,MAZF,GAAG,MAAM,IAAI,IAAI,CAAC;AAAA,IAazB,CACD,GACH;AAAA,KACF;AAEJ;","names":[]}
|
|
@@ -1 +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,
|
|
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,2CAoB/D"}
|
|
@@ -2,7 +2,14 @@
|
|
|
2
2
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
3
3
|
function DistributionBar({ positions }) {
|
|
4
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(
|
|
5
|
+
/* @__PURE__ */ jsx("div", { className: "seo-docbar relative h-[24px] rounded-rs border border-neutral-200", children: positions.map((p, i) => /* @__PURE__ */ jsx(
|
|
6
|
+
"i",
|
|
7
|
+
{
|
|
8
|
+
className: "absolute top-[3px] bottom-[3px] w-[3px] rounded-[2px] bg-neutral-800",
|
|
9
|
+
style: { left: `${p}%` }
|
|
10
|
+
},
|
|
11
|
+
`${p}-${i}`
|
|
12
|
+
)) }),
|
|
6
13
|
/* @__PURE__ */ jsxs("div", { className: "flex justify-between text-[10px] text-neutral-500 mt-[5px]", children: [
|
|
7
14
|
/* @__PURE__ */ jsx("span", { children: "start" }),
|
|
8
15
|
/* @__PURE__ */ jsx("span", { children: "middle" }),
|
|
@@ -1 +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
|
|
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\n key={`${p}-${i}`}\n className=\"absolute top-[3px] bottom-[3px] w-[3px] rounded-[2px] bg-neutral-800\"\n style={{ left: `${p}%` }}\n />\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,KAQJ,YAXF;AAFG,SAAS,gBAAgB,EAAE,UAAU,GAAsB;AAChE,SACE,iCACE;AAAA,wBAAC,SAAI,WAAU,qEACZ,oBAAU,IAAI,CAAC,GAAG,MACjB;AAAA,MAAC;AAAA;AAAA,QAEC,WAAU;AAAA,QACV,OAAO,EAAE,MAAM,GAAG,CAAC,IAAI;AAAA;AAAA,MAFlB,GAAG,CAAC,IAAI,CAAC;AAAA,IAGhB,CACD,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":[]}
|
|
@@ -1 +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,
|
|
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,kDAoCzD"}
|
|
@@ -24,10 +24,17 @@ function DrillDown({ items, label }) {
|
|
|
24
24
|
] })
|
|
25
25
|
}
|
|
26
26
|
),
|
|
27
|
-
/* @__PURE__ */ jsx("div", { className: cn("mt-[8px] flex-col gap-[4px]", open ? "flex" : "hidden"), children: items.map((it, i) => /* @__PURE__ */ jsxs(
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
27
|
+
/* @__PURE__ */ jsx("div", { className: cn("mt-[8px] flex-col gap-[4px]", open ? "flex" : "hidden"), children: items.map((it, i) => /* @__PURE__ */ jsxs(
|
|
28
|
+
"div",
|
|
29
|
+
{
|
|
30
|
+
className: "flex justify-between text-[11px] text-neutral-700 bg-neutral-50 rounded-rs px-[9px] py-[4px]",
|
|
31
|
+
children: [
|
|
32
|
+
/* @__PURE__ */ jsx("span", { children: it.left }),
|
|
33
|
+
/* @__PURE__ */ jsx("span", { className: "text-neutral-1000", children: it.right })
|
|
34
|
+
]
|
|
35
|
+
},
|
|
36
|
+
`${it.left}-${i}`
|
|
37
|
+
)) })
|
|
31
38
|
] });
|
|
32
39
|
}
|
|
33
40
|
export {
|
|
@@ -1 +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
|
|
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\n className=\"flex justify-between text-[11px] text-neutral-700 bg-neutral-50 rounded-rs px-[9px] py-[4px]\"\n key={`${it.left}-${i}`}\n >\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;AAAA,MAAC;AAAA;AAAA,QACC,WAAU;AAAA,QAGV;AAAA,8BAAC,UAAM,aAAG,MAAK;AAAA,UACf,oBAAC,UAAK,WAAU,qBAAqB,aAAG,OAAM;AAAA;AAAA;AAAA,MAHzC,GAAG,GAAG,IAAI,IAAI,CAAC;AAAA,IAItB,CACD,GACH;AAAA,KACF;AAEJ;","names":[]}
|
|
@@ -1 +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,
|
|
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,2CA6BvF"}
|
|
@@ -17,7 +17,13 @@ function SegmentBar({ countLabel, filledPct, filledStatus, legend }) {
|
|
|
17
17
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
18
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
19
|
/* @__PURE__ */ jsxs("div", { className: "flex h-[6px] rounded-[3px] overflow-hidden", children: [
|
|
20
|
-
/* @__PURE__ */ jsx(
|
|
20
|
+
/* @__PURE__ */ jsx(
|
|
21
|
+
"i",
|
|
22
|
+
{
|
|
23
|
+
className: cn("block h-full", statusVar({ status: filledStatus })),
|
|
24
|
+
style: { width: `${filledPct}%`, background: "var(--seo-c)" }
|
|
25
|
+
}
|
|
26
|
+
),
|
|
21
27
|
/* @__PURE__ */ jsx("i", { className: "block h-full bg-neutral-150", style: { width: `${100 - filledPct}%` } })
|
|
22
28
|
] }),
|
|
23
29
|
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: [
|
|
@@ -1 +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
|
|
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\n className={cn(\"block h-full\", statusVar({ status: filledStatus }))}\n style={{ width: `${filledPct}%`, background: \"var(--seo-c)\" }}\n />\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;AAAA,QAAC;AAAA;AAAA,UACC,WAAW,GAAG,gBAAgB,UAAU,EAAE,QAAQ,aAAa,CAAC,CAAC;AAAA,UACjE,OAAO,EAAE,OAAO,GAAG,SAAS,KAAK,YAAY,eAAe;AAAA;AAAA,MAC9D;AAAA,MACA,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":[]}
|
|
@@ -1 +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,
|
|
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,2CAoChD"}
|
|
@@ -13,15 +13,29 @@ function CheckRow({ check }) {
|
|
|
13
13
|
tip: ""
|
|
14
14
|
};
|
|
15
15
|
const Icon = CHECK_ICONS[check.id] ?? CHECK_ICONS._default;
|
|
16
|
-
return /* @__PURE__ */ jsxs(
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
16
|
+
return /* @__PURE__ */ jsxs(
|
|
17
|
+
"div",
|
|
18
|
+
{
|
|
19
|
+
className: cn("relative px-[15px] py-[13px] overflow-visible", ROW_SEPARATOR),
|
|
20
|
+
"data-status": check.status,
|
|
21
|
+
children: [
|
|
22
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-[9px] mb-[7px]", children: [
|
|
23
|
+
/* @__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 }) }),
|
|
24
|
+
/* @__PURE__ */ jsx("span", { className: "flex-1 font-semibold text-[12.5px]", children: /* @__PURE__ */ jsx(
|
|
25
|
+
Tooltip,
|
|
26
|
+
{
|
|
27
|
+
content: meta.tip,
|
|
28
|
+
className: "border-0 border-b border-dotted border-neutral-400",
|
|
29
|
+
children: meta.name
|
|
30
|
+
}
|
|
31
|
+
) }),
|
|
32
|
+
/* @__PURE__ */ jsx(Pill, { variant: check.status, children: STATUS_PILL_LABEL[check.status] })
|
|
33
|
+
] }),
|
|
34
|
+
/* @__PURE__ */ jsx(CheckVisualization, { check }),
|
|
35
|
+
check.recommendation && /* @__PURE__ */ jsx("div", { className: "text-neutral-600 text-[11.5px]", children: check.recommendation })
|
|
36
|
+
]
|
|
37
|
+
}
|
|
38
|
+
);
|
|
25
39
|
}
|
|
26
40
|
export {
|
|
27
41
|
CheckRow
|
|
@@ -1 +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
|
|
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\n className={cn(\"relative px-[15px] py-[13px] overflow-visible\", ROW_SEPARATOR)}\n data-status={check.status}\n >\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\n content={meta.tip}\n className=\"border-0 border-b border-dotted border-neutral-400\"\n >\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 && (\n <div className=\"text-neutral-600 text-[11.5px]\">{check.recommendation}</div>\n )}\n </div>\n );\n}\n"],"mappings":";AA2BM,SAEI,KAFJ;AAzBN,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;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,GAAG,iDAAiD,aAAa;AAAA,MAC5E,eAAa,MAAM;AAAA,MAEnB;AAAA,6BAAC,SAAI,WAAU,wCACb;AAAA,8BAAC,UAAK,WAAU,sHACd,8BAAC,QAAK,MAAM,IAAI,GAClB;AAAA,UAEA,oBAAC,UAAK,WAAU,sCACd;AAAA,YAAC;AAAA;AAAA,cACC,SAAS,KAAK;AAAA,cACd,WAAU;AAAA,cAET,eAAK;AAAA;AAAA,UACR,GACF;AAAA,UAEA,oBAAC,QAAK,SAAS,MAAM,QAAS,4BAAkB,MAAM,MAAM,GAAE;AAAA,WAChE;AAAA,QAEA,oBAAC,sBAAmB,OAAc;AAAA,QAEjC,MAAM,kBACL,oBAAC,SAAI,WAAU,kCAAkC,gBAAM,gBAAe;AAAA;AAAA;AAAA,EAE1E;AAEJ;","names":[]}
|
|
@@ -1 +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;
|
|
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;AAiDpC,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,2CAoCxE"}
|
package/dist/ui/FilterPills.js
CHANGED
|
@@ -3,32 +3,91 @@ import { jsx, jsxs } from "react/jsx-runtime";
|
|
|
3
3
|
import { cva } from "class-variance-authority";
|
|
4
4
|
import { cn } from "../utils/style";
|
|
5
5
|
import { statusVar } from "../components/SeoDrawer/variants";
|
|
6
|
-
const filterPillVariants = cva(
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
}
|
|
6
|
+
const filterPillVariants = cva(
|
|
7
|
+
"inline-flex items-center gap-[5px] px-[10px] py-[4px] rounded-[20px] border text-[11px] font-medium cursor-pointer",
|
|
8
|
+
{
|
|
9
|
+
variants: {
|
|
10
|
+
active: {
|
|
11
|
+
true: "bg-neutral-1000 text-neutral-0 border-neutral-1000",
|
|
12
|
+
false: "border-neutral-200 bg-neutral-0 text-neutral-700"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
defaultVariants: { active: false }
|
|
16
|
+
}
|
|
17
|
+
);
|
|
15
18
|
function Pill({ filter, label, count, active, onSelect, dotStatus }) {
|
|
16
|
-
return /* @__PURE__ */ jsxs(
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
19
|
+
return /* @__PURE__ */ jsxs(
|
|
20
|
+
"button",
|
|
21
|
+
{
|
|
22
|
+
type: "button",
|
|
23
|
+
className: filterPillVariants({ active }),
|
|
24
|
+
onClick: () => onSelect(filter),
|
|
25
|
+
children: [
|
|
26
|
+
dotStatus && /* @__PURE__ */ jsx(
|
|
27
|
+
"span",
|
|
28
|
+
{
|
|
29
|
+
className: cn(
|
|
30
|
+
"w-[6px] h-[6px] rounded-full inline-block",
|
|
31
|
+
statusVar({ status: dotStatus })
|
|
32
|
+
),
|
|
33
|
+
style: { background: "var(--seo-c)" }
|
|
34
|
+
}
|
|
35
|
+
),
|
|
36
|
+
label,
|
|
37
|
+
" ",
|
|
38
|
+
/* @__PURE__ */ jsx("span", { className: "font-mono font-bold", children: count })
|
|
39
|
+
]
|
|
40
|
+
}
|
|
41
|
+
);
|
|
22
42
|
}
|
|
23
43
|
function countByStatus(checks, status) {
|
|
24
44
|
return checks.filter((c) => c.status === status).length;
|
|
25
45
|
}
|
|
26
46
|
function FilterPills({ checks, value, onChange }) {
|
|
27
47
|
return /* @__PURE__ */ jsxs("div", { className: "flex gap-[6px] flex-wrap px-[15px] py-[11px]", children: [
|
|
28
|
-
/* @__PURE__ */ jsx(
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
48
|
+
/* @__PURE__ */ jsx(
|
|
49
|
+
Pill,
|
|
50
|
+
{
|
|
51
|
+
filter: "all",
|
|
52
|
+
label: "All",
|
|
53
|
+
count: checks.length,
|
|
54
|
+
active: value === "all",
|
|
55
|
+
onSelect: onChange
|
|
56
|
+
}
|
|
57
|
+
),
|
|
58
|
+
/* @__PURE__ */ jsx(
|
|
59
|
+
Pill,
|
|
60
|
+
{
|
|
61
|
+
filter: "bad",
|
|
62
|
+
label: "Problems",
|
|
63
|
+
count: countByStatus(checks, "bad"),
|
|
64
|
+
active: value === "bad",
|
|
65
|
+
onSelect: onChange,
|
|
66
|
+
dotStatus: "bad"
|
|
67
|
+
}
|
|
68
|
+
),
|
|
69
|
+
/* @__PURE__ */ jsx(
|
|
70
|
+
Pill,
|
|
71
|
+
{
|
|
72
|
+
filter: "warn",
|
|
73
|
+
label: "Needs work",
|
|
74
|
+
count: countByStatus(checks, "warn"),
|
|
75
|
+
active: value === "warn",
|
|
76
|
+
onSelect: onChange,
|
|
77
|
+
dotStatus: "warn"
|
|
78
|
+
}
|
|
79
|
+
),
|
|
80
|
+
/* @__PURE__ */ jsx(
|
|
81
|
+
Pill,
|
|
82
|
+
{
|
|
83
|
+
filter: "good",
|
|
84
|
+
label: "Good",
|
|
85
|
+
count: countByStatus(checks, "good"),
|
|
86
|
+
active: value === "good",
|
|
87
|
+
onSelect: onChange,
|
|
88
|
+
dotStatus: "good"
|
|
89
|
+
}
|
|
90
|
+
)
|
|
32
91
|
] });
|
|
33
92
|
}
|
|
34
93
|
export {
|
|
@@ -1 +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\"
|
|
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(\n \"inline-flex items-center gap-[5px] px-[10px] py-[4px] rounded-[20px] border text-[11px] font-medium cursor-pointer\",\n {\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);\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\n type=\"button\"\n className={filterPillVariants({ active })}\n onClick={() => onSelect(filter)}\n >\n {dotStatus && (\n <span\n className={cn(\n \"w-[6px] h-[6px] rounded-full inline-block\",\n statusVar({ status: dotStatus })\n )}\n style={{ background: \"var(--seo-c)\" }}\n />\n )}\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\n filter=\"all\"\n label=\"All\"\n count={checks.length}\n active={value === \"all\"}\n onSelect={onChange}\n />\n <Pill\n filter=\"bad\"\n label=\"Problems\"\n count={countByStatus(checks, \"bad\")}\n active={value === \"bad\"}\n onSelect={onChange}\n dotStatus=\"bad\"\n />\n <Pill\n filter=\"warn\"\n label=\"Needs work\"\n count={countByStatus(checks, \"warn\")}\n active={value === \"warn\"}\n onSelect={onChange}\n dotStatus=\"warn\"\n />\n <Pill\n filter=\"good\"\n label=\"Good\"\n count={countByStatus(checks, \"good\")}\n active={value === \"good\"}\n onSelect={onChange}\n dotStatus=\"good\"\n />\n </div>\n );\n}\n"],"mappings":";AAiCI,SAMI,KANJ;AA/BJ,SAAS,WAAW;AACpB,SAAS,UAAU;AAEnB,SAAS,iBAAiB;AAI1B,MAAM,qBAAqB;AAAA,EACzB;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,QAAQ;AAAA,QACN,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA,iBAAiB,EAAE,QAAQ,MAAM;AAAA,EACnC;AACF;AAWA,SAAS,KAAK,EAAE,QAAQ,OAAO,OAAO,QAAQ,UAAU,UAAU,GAAc;AAC9E,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,WAAW,mBAAmB,EAAE,OAAO,CAAC;AAAA,MACxC,SAAS,MAAM,SAAS,MAAM;AAAA,MAE7B;AAAA,qBACC;AAAA,UAAC;AAAA;AAAA,YACC,WAAW;AAAA,cACT;AAAA,cACA,UAAU,EAAE,QAAQ,UAAU,CAAC;AAAA,YACjC;AAAA,YACA,OAAO,EAAE,YAAY,eAAe;AAAA;AAAA,QACtC;AAAA,QAED;AAAA,QAAM;AAAA,QAAC,oBAAC,UAAK,WAAU,uBAAuB,iBAAM;AAAA;AAAA;AAAA,EACvD;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;AAAA,MAAC;AAAA;AAAA,QACC,QAAO;AAAA,QACP,OAAM;AAAA,QACN,OAAO,OAAO;AAAA,QACd,QAAQ,UAAU;AAAA,QAClB,UAAU;AAAA;AAAA,IACZ;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC,QAAO;AAAA,QACP,OAAM;AAAA,QACN,OAAO,cAAc,QAAQ,KAAK;AAAA,QAClC,QAAQ,UAAU;AAAA,QAClB,UAAU;AAAA,QACV,WAAU;AAAA;AAAA,IACZ;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC,QAAO;AAAA,QACP,OAAM;AAAA,QACN,OAAO,cAAc,QAAQ,MAAM;AAAA,QACnC,QAAQ,UAAU;AAAA,QAClB,UAAU;AAAA,QACV,WAAU;AAAA;AAAA,IACZ;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC,QAAO;AAAA,QACP,OAAM;AAAA,QACN,OAAO,cAAc,QAAQ,MAAM;AAAA,QACnC,QAAQ,UAAU;AAAA,QAClB,UAAU;AAAA,QACV,WAAU;AAAA;AAAA,IACZ;AAAA,KACF;AAEJ;","names":[]}
|
package/dist/ui/KpiCard.d.ts.map
CHANGED
|
@@ -1 +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,
|
|
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,2CAe7D"}
|
package/dist/ui/KpiCard.js.map
CHANGED
|
@@ -1 +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\"
|
|
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\">\n {label}\n </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,cAOW,YAPX;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,2EACb,iBACH,GACF;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":[]}
|
package/dist/ui/Pill.d.ts.map
CHANGED
|
@@ -1 +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;
|
|
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;AAiBvD,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
CHANGED
|
@@ -1,16 +1,19 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx } from "react/jsx-runtime";
|
|
3
3
|
import { cva } from "class-variance-authority";
|
|
4
|
-
const pillVariants = cva(
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
4
|
+
const pillVariants = cva(
|
|
5
|
+
"inline-flex items-center gap-[4px] px-[14px] py-[1px] rounded-[20px] text-[11px] font-semibold",
|
|
6
|
+
{
|
|
7
|
+
variants: {
|
|
8
|
+
variant: {
|
|
9
|
+
good: "bg-seo-good-100 text-seo-good",
|
|
10
|
+
warn: "bg-seo-warn-100 text-seo-warn",
|
|
11
|
+
bad: "bg-seo-bad-100 text-seo-bad",
|
|
12
|
+
neutral: "bg-neutral-100 text-neutral-500"
|
|
13
|
+
}
|
|
11
14
|
}
|
|
12
15
|
}
|
|
13
|
-
|
|
16
|
+
);
|
|
14
17
|
function Pill({ variant, children }) {
|
|
15
18
|
return /* @__PURE__ */ jsx("span", { className: pillVariants({ variant }), children });
|
|
16
19
|
}
|
package/dist/ui/Pill.js.map
CHANGED
|
@@ -1 +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\"
|
|
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(\n \"inline-flex items-center gap-[4px] px-[14px] py-[1px] rounded-[20px] text-[11px] font-semibold\",\n {\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);\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":";AA0BS;AAtBT,SAAS,WAAW;AAEpB,MAAM,eAAe;AAAA,EACnB;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,MAAM;AAAA,QACN,MAAM;AAAA,QACN,KAAK;AAAA,QACL,SAAS;AAAA,MACX;AAAA,IACF;AAAA,EACF;AACF;AAOO,SAAS,KAAK,EAAE,SAAS,SAAS,GAAc;AACrD,SAAO,oBAAC,UAAK,WAAW,aAAa,EAAE,QAAQ,CAAC,GAAI,UAAS;AAC/D;","names":[]}
|
|
@@ -1 +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,
|
|
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,2CAmB1D"}
|