@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/ui/ScoreRing.js
CHANGED
|
@@ -6,11 +6,21 @@ function ScoreRing({ score, status }) {
|
|
|
6
6
|
return /* @__PURE__ */ jsx(
|
|
7
7
|
"div",
|
|
8
8
|
{
|
|
9
|
-
className: cn(
|
|
9
|
+
className: cn(
|
|
10
|
+
"w-[60px] h-[60px] rounded-full flex-none grid place-items-center",
|
|
11
|
+
statusVar({ status })
|
|
12
|
+
),
|
|
10
13
|
style: {
|
|
11
14
|
background: `conic-gradient(var(--seo-c) ${score}%, var(--theme-elevation-150) 0)`
|
|
12
15
|
},
|
|
13
|
-
children: /* @__PURE__ */ jsx(
|
|
16
|
+
children: /* @__PURE__ */ jsx(
|
|
17
|
+
"div",
|
|
18
|
+
{
|
|
19
|
+
className: "w-[48px] h-[48px] rounded-full bg-neutral-0 grid place-items-center font-bold text-[18px]",
|
|
20
|
+
style: { color: "var(--seo-c)" },
|
|
21
|
+
children: score
|
|
22
|
+
}
|
|
23
|
+
)
|
|
14
24
|
}
|
|
15
25
|
);
|
|
16
26
|
}
|
package/dist/ui/ScoreRing.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/ui/ScoreRing.tsx"],"sourcesContent":["\"use client\";\n\nimport type { Status } from \"../engine/types/analysis\";\nimport { cn } from \"../utils/style\";\nimport { statusVar } from \"../components/SeoDrawer/variants\";\n\ninterface ScoreRingProps {\n score: number;\n status: Status;\n}\n\nexport function ScoreRing({ score, status }: ScoreRingProps) {\n return (\n <div\n className={cn(\"w-[60px] h-[60px] rounded-full flex-none grid place-items-center\"
|
|
1
|
+
{"version":3,"sources":["../../src/ui/ScoreRing.tsx"],"sourcesContent":["\"use client\";\n\nimport type { Status } from \"../engine/types/analysis\";\nimport { cn } from \"../utils/style\";\nimport { statusVar } from \"../components/SeoDrawer/variants\";\n\ninterface ScoreRingProps {\n score: number;\n status: Status;\n}\n\nexport function ScoreRing({ score, status }: ScoreRingProps) {\n return (\n <div\n className={cn(\n \"w-[60px] h-[60px] rounded-full flex-none grid place-items-center\",\n statusVar({ status })\n )}\n style={{\n background: `conic-gradient(var(--seo-c) ${score}%, var(--theme-elevation-150) 0)`,\n }}\n >\n <div\n className=\"w-[48px] h-[48px] rounded-full bg-neutral-0 grid place-items-center font-bold text-[18px]\"\n style={{ color: \"var(--seo-c)\" }}\n >\n {score}\n </div>\n </div>\n );\n}\n"],"mappings":";AAsBM;AAnBN,SAAS,UAAU;AACnB,SAAS,iBAAiB;AAOnB,SAAS,UAAU,EAAE,OAAO,OAAO,GAAmB;AAC3D,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA,UAAU,EAAE,OAAO,CAAC;AAAA,MACtB;AAAA,MACA,OAAO;AAAA,QACL,YAAY,+BAA+B,KAAK;AAAA,MAClD;AAAA,MAEA;AAAA,QAAC;AAAA;AAAA,UACC,WAAU;AAAA,UACV,OAAO,EAAE,OAAO,eAAe;AAAA,UAE9B;AAAA;AAAA,MACH;AAAA;AAAA,EACF;AAEJ;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SectionWrapper.d.ts","sourceRoot":"","sources":["../../src/ui/SectionWrapper.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,UAAU,mBAAmB;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,wBAAgB,cAAc,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,mBAAmB,
|
|
1
|
+
{"version":3,"file":"SectionWrapper.d.ts","sourceRoot":"","sources":["../../src/ui/SectionWrapper.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,UAAU,mBAAmB;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,wBAAgB,cAAc,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,mBAAmB,2CAM1E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/ui/SectionWrapper.tsx"],"sourcesContent":["\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport { cn } from \"../utils/style\";\n\ninterface SectionWrapperProps {\n className?: string;\n children: ReactNode;\n}\n\nexport function SectionWrapper({ className, children }: SectionWrapperProps) {\n return <div className={cn(\"bg-neutral-0 border border-neutral-200 rounded-rm\", className)}
|
|
1
|
+
{"version":3,"sources":["../../src/ui/SectionWrapper.tsx"],"sourcesContent":["\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport { cn } from \"../utils/style\";\n\ninterface SectionWrapperProps {\n className?: string;\n children: ReactNode;\n}\n\nexport function SectionWrapper({ className, children }: SectionWrapperProps) {\n return (\n <div className={cn(\"bg-neutral-0 border border-neutral-200 rounded-rm\", className)}>\n {children}\n </div>\n );\n}\n"],"mappings":";AAYI;AATJ,SAAS,UAAU;AAOZ,SAAS,eAAe,EAAE,WAAW,SAAS,GAAwB;AAC3E,SACE,oBAAC,SAAI,WAAW,GAAG,qDAAqD,SAAS,GAC9E,UACH;AAEJ;","names":[]}
|
|
@@ -10,6 +10,6 @@ interface SegmentedControlProps<T extends string> {
|
|
|
10
10
|
onChange: (value: T) => void;
|
|
11
11
|
label: string;
|
|
12
12
|
}
|
|
13
|
-
export declare function SegmentedControl<T extends string>({ options, value, onChange, label }: SegmentedControlProps<T>): import("react/jsx-runtime").JSX.Element;
|
|
13
|
+
export declare function SegmentedControl<T extends string>({ options, value, onChange, label, }: SegmentedControlProps<T>): import("react/jsx-runtime").JSX.Element;
|
|
14
14
|
export {};
|
|
15
15
|
//# sourceMappingURL=SegmentedControl.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SegmentedControl.d.ts","sourceRoot":"","sources":["../../src/ui/SegmentedControl.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"SegmentedControl.d.ts","sourceRoot":"","sources":["../../src/ui/SegmentedControl.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAevC,UAAU,sBAAsB,CAAC,CAAC,SAAS,MAAM;IAC/C,KAAK,EAAE,CAAC,CAAC;IACT,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB;AAED,UAAU,qBAAqB,CAAC,CAAC,SAAS,MAAM;IAC9C,OAAO,EAAE,sBAAsB,CAAC,CAAC,CAAC,EAAE,CAAC;IACrC,KAAK,EAAE,CAAC,CAAC;IACT,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,EAAE,EACjD,OAAO,EACP,KAAK,EACL,QAAQ,EACR,KAAK,GACN,EAAE,qBAAqB,CAAC,CAAC,CAAC,2CAoE1B"}
|
|
@@ -2,16 +2,24 @@
|
|
|
2
2
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { cva } from "class-variance-authority";
|
|
4
4
|
import { useRef } from "react";
|
|
5
|
-
const segmentVariants = cva(
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
}
|
|
14
|
-
|
|
5
|
+
const segmentVariants = cva(
|
|
6
|
+
"inline-flex items-center gap-[5px] px-[11px] py-[4px] rounded-rs text-[11px] font-medium border-0 cursor-pointer",
|
|
7
|
+
{
|
|
8
|
+
variants: {
|
|
9
|
+
active: {
|
|
10
|
+
true: "bg-neutral-0 text-neutral-1000",
|
|
11
|
+
false: "bg-transparent text-neutral-600"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
defaultVariants: { active: false }
|
|
15
|
+
}
|
|
16
|
+
);
|
|
17
|
+
function SegmentedControl({
|
|
18
|
+
options,
|
|
19
|
+
value,
|
|
20
|
+
onChange,
|
|
21
|
+
label
|
|
22
|
+
}) {
|
|
15
23
|
const refs = useRef([]);
|
|
16
24
|
const selectIndex = (index) => {
|
|
17
25
|
const next = options[index];
|
|
@@ -45,29 +53,37 @@ function SegmentedControl({ options, value, onChange, label }) {
|
|
|
45
53
|
break;
|
|
46
54
|
}
|
|
47
55
|
};
|
|
48
|
-
return /* @__PURE__ */ jsx(
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
"
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
56
|
+
return /* @__PURE__ */ jsx(
|
|
57
|
+
"div",
|
|
58
|
+
{
|
|
59
|
+
role: "radiogroup",
|
|
60
|
+
"aria-label": label,
|
|
61
|
+
className: "inline-flex bg-neutral-100 rounded-rm p-[2px] gap-[2px]",
|
|
62
|
+
children: options.map((option, index) => {
|
|
63
|
+
const isActive = option.value === value;
|
|
64
|
+
return /* @__PURE__ */ jsxs(
|
|
65
|
+
"button",
|
|
66
|
+
{
|
|
67
|
+
ref: (node) => {
|
|
68
|
+
refs.current[index] = node;
|
|
69
|
+
},
|
|
70
|
+
type: "button",
|
|
71
|
+
role: "radio",
|
|
72
|
+
"aria-checked": isActive,
|
|
73
|
+
tabIndex: isActive ? 0 : -1,
|
|
74
|
+
className: segmentVariants({ active: isActive }),
|
|
75
|
+
onClick: () => selectIndex(index),
|
|
76
|
+
onKeyDown: (event) => handleKeyDown(event, index),
|
|
77
|
+
children: [
|
|
78
|
+
option.icon,
|
|
79
|
+
option.label
|
|
80
|
+
]
|
|
81
|
+
},
|
|
82
|
+
option.value
|
|
83
|
+
);
|
|
84
|
+
})
|
|
85
|
+
}
|
|
86
|
+
);
|
|
71
87
|
}
|
|
72
88
|
export {
|
|
73
89
|
SegmentedControl
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/ui/SegmentedControl.tsx"],"sourcesContent":["\"use client\";\n\nimport { cva } from \"class-variance-authority\";\nimport { useRef } from \"react\";\nimport type { ReactNode } from \"react\";\n\nconst segmentVariants = cva(\"inline-flex items-center gap-[5px] px-[11px] py-[4px] rounded-rs text-[11px] font-medium border-0 cursor-pointer\"
|
|
1
|
+
{"version":3,"sources":["../../src/ui/SegmentedControl.tsx"],"sourcesContent":["\"use client\";\n\nimport { cva } from \"class-variance-authority\";\nimport { useRef } from \"react\";\nimport type { ReactNode } from \"react\";\n\nconst segmentVariants = cva(\n \"inline-flex items-center gap-[5px] px-[11px] py-[4px] rounded-rs text-[11px] font-medium border-0 cursor-pointer\",\n {\n variants: {\n active: {\n true: \"bg-neutral-0 text-neutral-1000\",\n false: \"bg-transparent text-neutral-600\",\n },\n },\n defaultVariants: { active: false },\n }\n);\n\ninterface SegmentedControlOption<T extends string> {\n value: T;\n label: string;\n icon?: ReactNode;\n}\n\ninterface SegmentedControlProps<T extends string> {\n options: SegmentedControlOption<T>[];\n value: T;\n onChange: (value: T) => void;\n label: string;\n}\n\nexport function SegmentedControl<T extends string>({\n options,\n value,\n onChange,\n label,\n}: SegmentedControlProps<T>) {\n const refs = useRef<(HTMLButtonElement | null)[]>([]);\n\n const selectIndex = (index: number) => {\n const next = options[index];\n if (!next) return;\n\n onChange(next.value);\n refs.current[index]?.focus();\n };\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLButtonElement>, index: number) => {\n const last = options.length - 1;\n\n switch (event.key) {\n case \"ArrowRight\":\n case \"ArrowDown\":\n event.preventDefault();\n selectIndex(index === last ? 0 : index + 1);\n break;\n case \"ArrowLeft\":\n case \"ArrowUp\":\n event.preventDefault();\n selectIndex(index === 0 ? last : index - 1);\n break;\n case \"Home\":\n event.preventDefault();\n selectIndex(0);\n break;\n case \"End\":\n event.preventDefault();\n selectIndex(last);\n break;\n default:\n break;\n }\n };\n\n return (\n <div\n role=\"radiogroup\"\n aria-label={label}\n className=\"inline-flex bg-neutral-100 rounded-rm p-[2px] gap-[2px]\"\n >\n {options.map((option, index) => {\n const isActive = option.value === value;\n\n return (\n <button\n key={option.value}\n ref={(node) => {\n refs.current[index] = node;\n }}\n type=\"button\"\n role=\"radio\"\n aria-checked={isActive}\n tabIndex={isActive ? 0 : -1}\n className={segmentVariants({ active: isActive })}\n onClick={() => selectIndex(index)}\n onKeyDown={(event) => handleKeyDown(event, index)}\n >\n {option.icon}\n {option.label}\n </button>\n );\n })}\n </div>\n );\n}\n"],"mappings":";AA4EI,cASM,YATN;AA1EJ,SAAS,WAAW;AACpB,SAAS,cAAc;AAGvB,MAAM,kBAAkB;AAAA,EACtB;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;AAeO,SAAS,iBAAmC;AAAA,EACjD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA6B;AAC3B,QAAM,OAAO,OAAqC,CAAC,CAAC;AAEpD,QAAM,cAAc,CAAC,UAAkB;AACrC,UAAM,OAAO,QAAQ,KAAK;AAC1B,QAAI,CAAC;AAAM;AAEX,aAAS,KAAK,KAAK;AACnB,SAAK,QAAQ,KAAK,GAAG,MAAM;AAAA,EAC7B;AAEA,QAAM,gBAAgB,CAAC,OAA+C,UAAkB;AACtF,UAAM,OAAO,QAAQ,SAAS;AAE9B,YAAQ,MAAM,KAAK;AAAA,MACjB,KAAK;AAAA,MACL,KAAK;AACH,cAAM,eAAe;AACrB,oBAAY,UAAU,OAAO,IAAI,QAAQ,CAAC;AAC1C;AAAA,MACF,KAAK;AAAA,MACL,KAAK;AACH,cAAM,eAAe;AACrB,oBAAY,UAAU,IAAI,OAAO,QAAQ,CAAC;AAC1C;AAAA,MACF,KAAK;AACH,cAAM,eAAe;AACrB,oBAAY,CAAC;AACb;AAAA,MACF,KAAK;AACH,cAAM,eAAe;AACrB,oBAAY,IAAI;AAChB;AAAA,MACF;AACE;AAAA,IACJ;AAAA,EACF;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,cAAY;AAAA,MACZ,WAAU;AAAA,MAET,kBAAQ,IAAI,CAAC,QAAQ,UAAU;AAC9B,cAAM,WAAW,OAAO,UAAU;AAElC,eACE;AAAA,UAAC;AAAA;AAAA,YAEC,KAAK,CAAC,SAAS;AACb,mBAAK,QAAQ,KAAK,IAAI;AAAA,YACxB;AAAA,YACA,MAAK;AAAA,YACL,MAAK;AAAA,YACL,gBAAc;AAAA,YACd,UAAU,WAAW,IAAI;AAAA,YACzB,WAAW,gBAAgB,EAAE,QAAQ,SAAS,CAAC;AAAA,YAC/C,SAAS,MAAM,YAAY,KAAK;AAAA,YAChC,WAAW,CAAC,UAAU,cAAc,OAAO,KAAK;AAAA,YAE/C;AAAA,qBAAO;AAAA,cACP,OAAO;AAAA;AAAA;AAAA,UAbH,OAAO;AAAA,QAcd;AAAA,MAEJ,CAAC;AAAA;AAAA,EACH;AAEJ;","names":[]}
|
package/dist/ui/Tooltip.d.ts
CHANGED
|
@@ -7,7 +7,7 @@ export interface TooltipProps {
|
|
|
7
7
|
width?: number;
|
|
8
8
|
className?: string;
|
|
9
9
|
}
|
|
10
|
-
export declare function Tooltip({ content, children, side, align, width, className }: TooltipProps): import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
export declare function Tooltip({ content, children, side, align, width, className, }: TooltipProps): import("react/jsx-runtime").JSX.Element;
|
|
11
11
|
export declare function TooltipTitle({ children }: {
|
|
12
12
|
children: ReactNode;
|
|
13
13
|
}): import("react/jsx-runtime").JSX.Element;
|
package/dist/ui/Tooltip.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tooltip.d.ts","sourceRoot":"","sources":["../../src/ui/Tooltip.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"Tooltip.d.ts","sourceRoot":"","sources":["../../src/ui/Tooltip.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAiCvC,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,SAAS,CAAC;IACnB,QAAQ,EAAE,SAAS,CAAC;IACpB,IAAI,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC;IACxB,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,OAAO,CAAC,EACtB,OAAO,EACP,QAAQ,EACR,IAAe,EACf,KAAe,EACf,KAAW,EACX,SAAS,GACV,EAAE,YAAY,2CA6Dd;AAED,wBAAgB,YAAY,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,2CAEjE;AAED,wBAAgB,WAAW,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,2CAEhE"}
|
package/dist/ui/Tooltip.js
CHANGED
|
@@ -10,7 +10,14 @@ function computeCoords(rect, side, align, width) {
|
|
|
10
10
|
left = Math.max(GAP, Math.min(left, maxLeft));
|
|
11
11
|
return side === "top" ? { top: rect.top - GAP, left, transform: "translateY(-100%)" } : { top: rect.bottom + GAP, left, transform: "none" };
|
|
12
12
|
}
|
|
13
|
-
function Tooltip({
|
|
13
|
+
function Tooltip({
|
|
14
|
+
content,
|
|
15
|
+
children,
|
|
16
|
+
side = "bottom",
|
|
17
|
+
align = "start",
|
|
18
|
+
width = 290,
|
|
19
|
+
className
|
|
20
|
+
}) {
|
|
14
21
|
const tooltipId = useId();
|
|
15
22
|
const triggerRef = useRef(null);
|
|
16
23
|
const [coords, setCoords] = useState(null);
|
package/dist/ui/Tooltip.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/ui/Tooltip.tsx"],"sourcesContent":["\"use client\";\n\nimport { useCallback, useEffect, useId, useRef, useState } from \"react\";\nimport type { ReactNode } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { cn } from \"../utils/style\";\n\nconst GAP = 8;\n\ninterface Coords {\n top: number;\n left: number;\n transform: string;\n}\n\nfunction computeCoords(rect: DOMRect
|
|
1
|
+
{"version":3,"sources":["../../src/ui/Tooltip.tsx"],"sourcesContent":["\"use client\";\n\nimport { useCallback, useEffect, useId, useRef, useState } from \"react\";\nimport type { ReactNode } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { cn } from \"../utils/style\";\n\nconst GAP = 8;\n\ninterface Coords {\n top: number;\n left: number;\n transform: string;\n}\n\nfunction computeCoords(\n rect: DOMRect,\n side: NonNullable<TooltipProps[\"side\"]>,\n align: NonNullable<TooltipProps[\"align\"]>,\n width: number\n): Coords {\n let left =\n align === \"start\"\n ? rect.left\n : align === \"end\"\n ? rect.right - width\n : rect.left + rect.width / 2 - width / 2;\n\n const maxLeft = Math.max(GAP, window.innerWidth - width - GAP);\n left = Math.max(GAP, Math.min(left, maxLeft));\n\n return side === \"top\"\n ? { top: rect.top - GAP, left, transform: \"translateY(-100%)\" }\n : { top: rect.bottom + GAP, left, transform: \"none\" };\n}\n\nexport interface TooltipProps {\n content: ReactNode;\n children: ReactNode;\n side?: \"top\" | \"bottom\";\n align?: \"start\" | \"center\" | \"end\";\n width?: number;\n className?: string;\n}\n\nexport function Tooltip({\n content,\n children,\n side = \"bottom\",\n align = \"start\",\n width = 290,\n className,\n}: TooltipProps) {\n const tooltipId = useId();\n const triggerRef = useRef<HTMLSpanElement>(null);\n const [coords, setCoords] = useState<Coords | null>(null);\n const isOpen = coords != null;\n\n const open = useCallback(() => {\n const el = triggerRef.current;\n\n if (el) {\n setCoords(computeCoords(el.getBoundingClientRect(), side, align, width));\n }\n }, [side, align, width]);\n\n const close = useCallback(() => setCoords(null), []);\n\n useEffect(() => {\n if (!isOpen) return;\n\n window.addEventListener(\"scroll\", close, true);\n window.addEventListener(\"resize\", close);\n\n return () => {\n window.removeEventListener(\"scroll\", close, true);\n window.removeEventListener(\"resize\", close);\n };\n }, [isOpen, close]);\n\n return (\n <span\n ref={triggerRef}\n className={cn(\"relative inline-flex cursor-help outline-none\", className)}\n tabIndex={0}\n aria-describedby={isOpen ? tooltipId : undefined}\n onMouseEnter={open}\n onMouseLeave={close}\n onFocus={open}\n onBlur={close}\n >\n {children}\n\n {isOpen &&\n typeof document !== \"undefined\" &&\n createPortal(\n <span\n id={tooltipId}\n role=\"tooltip\"\n className=\"pointer-events-none fixed z-[100] flex cursor-default flex-col gap-[7px] rounded-rs bg-neutral-1000 px-[13px] py-[11px] text-left font-normal normal-case tracking-normal text-neutral-0 shadow-popover animate-seo-fade-in motion-reduce:animate-none\"\n style={{\n top: coords.top,\n left: coords.left,\n width,\n transform: coords.transform,\n }}\n >\n {content}\n </span>,\n document.body\n )}\n </span>\n );\n}\n\nexport function TooltipTitle({ children }: { children: ReactNode }) {\n return <span className=\"text-[12px] font-semibold\">{children}</span>;\n}\n\nexport function TooltipText({ children }: { children: ReactNode }) {\n return <span className=\"text-[11.5px] leading-[1.45] text-neutral-300\">{children}</span>;\n}\n"],"mappings":";AAiFI,SAeM,KAfN;AA/EJ,SAAS,aAAa,WAAW,OAAO,QAAQ,gBAAgB;AAEhE,SAAS,oBAAoB;AAC7B,SAAS,UAAU;AAEnB,MAAM,MAAM;AAQZ,SAAS,cACP,MACA,MACA,OACA,OACQ;AACR,MAAI,OACF,UAAU,UACN,KAAK,OACL,UAAU,QACR,KAAK,QAAQ,QACb,KAAK,OAAO,KAAK,QAAQ,IAAI,QAAQ;AAE7C,QAAM,UAAU,KAAK,IAAI,KAAK,OAAO,aAAa,QAAQ,GAAG;AAC7D,SAAO,KAAK,IAAI,KAAK,KAAK,IAAI,MAAM,OAAO,CAAC;AAE5C,SAAO,SAAS,QACZ,EAAE,KAAK,KAAK,MAAM,KAAK,MAAM,WAAW,oBAAoB,IAC5D,EAAE,KAAK,KAAK,SAAS,KAAK,MAAM,WAAW,OAAO;AACxD;AAWO,SAAS,QAAQ;AAAA,EACtB;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR;AACF,GAAiB;AACf,QAAM,YAAY,MAAM;AACxB,QAAM,aAAa,OAAwB,IAAI;AAC/C,QAAM,CAAC,QAAQ,SAAS,IAAI,SAAwB,IAAI;AACxD,QAAM,SAAS,UAAU;AAEzB,QAAM,OAAO,YAAY,MAAM;AAC7B,UAAM,KAAK,WAAW;AAEtB,QAAI,IAAI;AACN,gBAAU,cAAc,GAAG,sBAAsB,GAAG,MAAM,OAAO,KAAK,CAAC;AAAA,IACzE;AAAA,EACF,GAAG,CAAC,MAAM,OAAO,KAAK,CAAC;AAEvB,QAAM,QAAQ,YAAY,MAAM,UAAU,IAAI,GAAG,CAAC,CAAC;AAEnD,YAAU,MAAM;AACd,QAAI,CAAC;AAAQ;AAEb,WAAO,iBAAiB,UAAU,OAAO,IAAI;AAC7C,WAAO,iBAAiB,UAAU,KAAK;AAEvC,WAAO,MAAM;AACX,aAAO,oBAAoB,UAAU,OAAO,IAAI;AAChD,aAAO,oBAAoB,UAAU,KAAK;AAAA,IAC5C;AAAA,EACF,GAAG,CAAC,QAAQ,KAAK,CAAC;AAElB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,KAAK;AAAA,MACL,WAAW,GAAG,iDAAiD,SAAS;AAAA,MACxE,UAAU;AAAA,MACV,oBAAkB,SAAS,YAAY;AAAA,MACvC,cAAc;AAAA,MACd,cAAc;AAAA,MACd,SAAS;AAAA,MACT,QAAQ;AAAA,MAEP;AAAA;AAAA,QAEA,UACC,OAAO,aAAa,eACpB;AAAA,UACE;AAAA,YAAC;AAAA;AAAA,cACC,IAAI;AAAA,cACJ,MAAK;AAAA,cACL,WAAU;AAAA,cACV,OAAO;AAAA,gBACL,KAAK,OAAO;AAAA,gBACZ,MAAM,OAAO;AAAA,gBACb;AAAA,gBACA,WAAW,OAAO;AAAA,cACpB;AAAA,cAEC;AAAA;AAAA,UACH;AAAA,UACA,SAAS;AAAA,QACX;AAAA;AAAA;AAAA,EACJ;AAEJ;AAEO,SAAS,aAAa,EAAE,SAAS,GAA4B;AAClE,SAAO,oBAAC,UAAK,WAAU,6BAA6B,UAAS;AAC/D;AAEO,SAAS,YAAY,EAAE,SAAS,GAA4B;AACjE,SAAO,oBAAC,UAAK,WAAU,iDAAiD,UAAS;AACnF;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"overrideAdmin.d.ts","sourceRoot":"","sources":["../../../src/utils/config/overrideAdmin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEtC,OAAO,KAAK,EAAE,eAAe,EAAiB,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"overrideAdmin.d.ts","sourceRoot":"","sources":["../../../src/utils/config/overrideAdmin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEtC,OAAO,KAAK,EAAE,eAAe,EAAiB,MAAM,oBAAoB,CAAC;AAQzE,wBAAgB,aAAa,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,MAAM,CA4CrF"}
|
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
import { getComponentPath } from "./getComponentPath";
|
|
2
|
+
function normalizeDepth(depth) {
|
|
3
|
+
if (depth === void 0)
|
|
4
|
+
return 2;
|
|
5
|
+
return Number.isFinite(depth) && depth >= 0 ? Math.floor(depth) : 0;
|
|
6
|
+
}
|
|
2
7
|
function overrideAdmin(incomingConfig, config) {
|
|
3
8
|
const bySlug = new Map(config.collections.map((c) => [c.slug, c]));
|
|
4
9
|
const site = config.site ?? {};
|
|
10
|
+
const slugPaths = Object.fromEntries(config.collections.map((c) => [c.slug, c.fields?.slug ?? "slug"]));
|
|
5
11
|
const collections = (incomingConfig.collections ?? []).map((collection) => {
|
|
6
12
|
const seoCfg = bySlug.get(collection.slug);
|
|
7
13
|
if (!seoCfg)
|
|
@@ -17,7 +23,9 @@ function overrideAdmin(incomingConfig, config) {
|
|
|
17
23
|
baseUrl: site.baseUrl ?? "",
|
|
18
24
|
faviconUrl: site.faviconUrl ?? ""
|
|
19
25
|
},
|
|
20
|
-
supportedLocales: config.supportedLocales ?? ["en"]
|
|
26
|
+
supportedLocales: config.supportedLocales ?? ["en"],
|
|
27
|
+
resolveDepth: normalizeDepth(seoCfg.resolveDepth),
|
|
28
|
+
slugPaths
|
|
21
29
|
}
|
|
22
30
|
};
|
|
23
31
|
const existing = collection.admin?.components?.edit?.beforeDocumentControls ?? [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/utils/config/overrideAdmin.ts"],"sourcesContent":["import type { Config } from \"payload\";\nimport { getComponentPath } from \"./getComponentPath\";\nimport type { SeoPluginConfig, SeoSiteConfig } from \"../../types/config\";\n\nexport function overrideAdmin(incomingConfig: Config, config: SeoPluginConfig): Config {\n const bySlug = new Map(config.collections.map((c) => [c.slug, c]));\n const site: SeoSiteConfig = config.site ?? {};\n\n const collections = (incomingConfig.collections ?? []).map((collection) => {\n const seoCfg = bySlug.get(collection.slug);\n if (!seoCfg) return collection;\n\n const buttonEntry = {\n path: getComponentPath(\"components/SeoButton\"),\n clientProps: {\n collectionSlug: collection.slug,\n fields: seoCfg.fields ?? {},\n extractContentPath: seoCfg.extractContentPath ?? null,\n site: {\n name: site.name ?? \"\",\n baseUrl: site.baseUrl ?? \"\",\n faviconUrl: site.faviconUrl ?? \"\",\n },\n supportedLocales: config.supportedLocales ?? [\"en\"],\n },\n };\n\n const existing = collection.admin?.components?.edit?.beforeDocumentControls ?? [];\n\n return {\n ...collection,\n admin: {\n ...collection.admin,\n components: {\n ...collection.admin?.components,\n edit: {\n ...collection.admin?.components?.edit,\n beforeDocumentControls: [...existing, buttonEntry],\n },\n },\n },\n };\n });\n\n return { ...incomingConfig, collections };\n}\n"],"mappings":"AACA,SAAS,wBAAwB;
|
|
1
|
+
{"version":3,"sources":["../../../src/utils/config/overrideAdmin.ts"],"sourcesContent":["import type { Config } from \"payload\";\nimport { getComponentPath } from \"./getComponentPath\";\nimport type { SeoPluginConfig, SeoSiteConfig } from \"../../types/config\";\n\nfunction normalizeDepth(depth: number | undefined): number {\n if (depth === undefined) return 2;\n\n return Number.isFinite(depth) && depth >= 0 ? Math.floor(depth) : 0;\n}\n\nexport function overrideAdmin(incomingConfig: Config, config: SeoPluginConfig): Config {\n const bySlug = new Map(config.collections.map((c) => [c.slug, c]));\n const site: SeoSiteConfig = config.site ?? {};\n const slugPaths = Object.fromEntries(config.collections.map((c) => [c.slug, c.fields?.slug ?? \"slug\"]));\n\n const collections = (incomingConfig.collections ?? []).map((collection) => {\n const seoCfg = bySlug.get(collection.slug);\n if (!seoCfg) return collection;\n\n const buttonEntry = {\n path: getComponentPath(\"components/SeoButton\"),\n clientProps: {\n collectionSlug: collection.slug,\n fields: seoCfg.fields ?? {},\n extractContentPath: seoCfg.extractContentPath ?? null,\n site: {\n name: site.name ?? \"\",\n baseUrl: site.baseUrl ?? \"\",\n faviconUrl: site.faviconUrl ?? \"\",\n },\n supportedLocales: config.supportedLocales ?? [\"en\"],\n resolveDepth: normalizeDepth(seoCfg.resolveDepth),\n slugPaths,\n },\n };\n\n const existing = collection.admin?.components?.edit?.beforeDocumentControls ?? [];\n\n return {\n ...collection,\n admin: {\n ...collection.admin,\n components: {\n ...collection.admin?.components,\n edit: {\n ...collection.admin?.components?.edit,\n beforeDocumentControls: [...existing, buttonEntry],\n },\n },\n },\n };\n });\n\n return { ...incomingConfig, collections };\n}\n"],"mappings":"AACA,SAAS,wBAAwB;AAGjC,SAAS,eAAe,OAAmC;AACzD,MAAI,UAAU;AAAW,WAAO;AAEhC,SAAO,OAAO,SAAS,KAAK,KAAK,SAAS,IAAI,KAAK,MAAM,KAAK,IAAI;AACpE;AAEO,SAAS,cAAc,gBAAwB,QAAiC;AACrF,QAAM,SAAS,IAAI,IAAI,OAAO,YAAY,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AACjE,QAAM,OAAsB,OAAO,QAAQ,CAAC;AAC5C,QAAM,YAAY,OAAO,YAAY,OAAO,YAAY,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,QAAQ,QAAQ,MAAM,CAAC,CAAC;AAEtG,QAAM,eAAe,eAAe,eAAe,CAAC,GAAG,IAAI,CAAC,eAAe;AACzE,UAAM,SAAS,OAAO,IAAI,WAAW,IAAI;AACzC,QAAI,CAAC;AAAQ,aAAO;AAEpB,UAAM,cAAc;AAAA,MAClB,MAAM,iBAAiB,sBAAsB;AAAA,MAC7C,aAAa;AAAA,QACX,gBAAgB,WAAW;AAAA,QAC3B,QAAQ,OAAO,UAAU,CAAC;AAAA,QAC1B,oBAAoB,OAAO,sBAAsB;AAAA,QACjD,MAAM;AAAA,UACJ,MAAM,KAAK,QAAQ;AAAA,UACnB,SAAS,KAAK,WAAW;AAAA,UACzB,YAAY,KAAK,cAAc;AAAA,QACjC;AAAA,QACA,kBAAkB,OAAO,oBAAoB,CAAC,IAAI;AAAA,QAClD,cAAc,eAAe,OAAO,YAAY;AAAA,QAChD;AAAA,MACF;AAAA,IACF;AAEA,UAAM,WAAW,WAAW,OAAO,YAAY,MAAM,0BAA0B,CAAC;AAEhF,WAAO;AAAA,MACL,GAAG;AAAA,MACH,OAAO;AAAA,QACL,GAAG,WAAW;AAAA,QACd,YAAY;AAAA,UACV,GAAG,WAAW,OAAO;AAAA,UACrB,MAAM;AAAA,YACJ,GAAG,WAAW,OAAO,YAAY;AAAA,YACjC,wBAAwB,CAAC,GAAG,UAAU,WAAW;AAAA,UACnD;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AAED,SAAO,EAAE,GAAG,gBAAgB,YAAY;AAC1C;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"style.d.ts","sourceRoot":"","sources":["../../src/utils/style.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAEvC,wBAAgB,EAAE,CAAC,GAAG,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,CAElD;AAED,eAAO,MAAM,aAAa,
|
|
1
|
+
{"version":3,"file":"style.d.ts","sourceRoot":"","sources":["../../src/utils/style.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAEvC,wBAAgB,EAAE,CAAC,GAAG,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,CAElD;AAED,eAAO,MAAM,aAAa,gKACqI,CAAC"}
|
package/dist/utils/style.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/style.ts"],"sourcesContent":["import { clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\nimport type { ClassValue } from \"clsx\";\n\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n\nexport const ROW_SEPARATOR
|
|
1
|
+
{"version":3,"sources":["../../src/utils/style.ts"],"sourcesContent":["import { clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\nimport type { ClassValue } from \"clsx\";\n\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n\nexport const ROW_SEPARATOR =\n \"not-last:after:content-[''] not-last:after:absolute not-last:after:inset-x-[15px] not-last:after:bottom-0 not-last:after:h-px not-last:after:bg-neutral-200\";\n"],"mappings":"AAAA,SAAS,YAAY;AACrB,SAAS,eAAe;AAGjB,SAAS,MAAM,QAA8B;AAClD,SAAO,QAAQ,KAAK,MAAM,CAAC;AAC7B;AAEO,MAAM,gBACX;","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@focus-reactive/payload-plugin-seo",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.4.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"author": "FocusReactive <ship@focusreactive.com>",
|
|
6
6
|
"keywords": [
|
|
@@ -37,6 +37,10 @@
|
|
|
37
37
|
"import": "./dist/index.js",
|
|
38
38
|
"types": "./dist/index.d.ts"
|
|
39
39
|
},
|
|
40
|
+
"./content": {
|
|
41
|
+
"import": "./dist/content/index.js",
|
|
42
|
+
"types": "./dist/content/index.d.ts"
|
|
43
|
+
},
|
|
40
44
|
"./admin.css": "./dist/admin.css",
|
|
41
45
|
"./components/SeoButton": {
|
|
42
46
|
"import": "./dist/components/SeoButton/index.js",
|
|
@@ -46,8 +50,10 @@
|
|
|
46
50
|
"scripts": {
|
|
47
51
|
"build": "tsup && tsc --emitDeclarationOnly --declarationMap",
|
|
48
52
|
"dev": "tsup --watch",
|
|
49
|
-
"lint": "
|
|
50
|
-
"lint:fix": "
|
|
53
|
+
"lint": "ultracite check",
|
|
54
|
+
"lint:fix": "ultracite fix",
|
|
55
|
+
"format": "ultracite fix",
|
|
56
|
+
"format:check": "ultracite check",
|
|
51
57
|
"test": "vitest run",
|
|
52
58
|
"test:watch": "vitest"
|
|
53
59
|
},
|
|
@@ -87,20 +93,16 @@
|
|
|
87
93
|
"@types/node": "^25.7.0",
|
|
88
94
|
"@types/react": "19.2.9",
|
|
89
95
|
"@types/react-dom": "19.2.3",
|
|
90
|
-
"eslint": "^9.18.0",
|
|
91
|
-
"eslint-config-prettier": "9.0.0",
|
|
92
96
|
"lucide-react": "^0.469.0",
|
|
93
97
|
"next": "15.4.10",
|
|
94
98
|
"payload": "3.84.1",
|
|
95
99
|
"postcss": "^8.5.1",
|
|
96
100
|
"postcss-cli": "^11.0.0",
|
|
97
|
-
"prettier": "3.0.0",
|
|
98
101
|
"react": "^19.0.0",
|
|
99
102
|
"react-dom": "^19.0.0",
|
|
100
103
|
"tailwindcss": "^4.0.0",
|
|
101
104
|
"tsup": "8.0.0",
|
|
102
105
|
"typescript": "5.7.3",
|
|
103
|
-
"typescript-eslint": "^8.20.0",
|
|
104
106
|
"vitest": "^2.1.8"
|
|
105
107
|
}
|
|
106
108
|
}
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,31 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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":[]}
|
|
@@ -1,5 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,19 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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":[]}
|
|
@@ -1,5 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,15 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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":[]}
|
|
@@ -1,7 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/content/uploads/media-resolver.ts"],"sourcesContent":["import { uploadKey } from \"./types\";\nimport type { ResolvedUploadDoc, UploadRef } from \"./types\";\n\nexport interface MediaResolver {\n resolve: (refs: UploadRef[], locale: string | undefined) => Promise<Map<string, ResolvedUploadDoc>>;\n invalidate: () => void;\n}\n\ninterface FindResponse {\n docs?: Array<ResolvedUploadDoc & { id?: unknown }>;\n}\n\nasync function fetchDocs(apiRoute: string, collection: string, ids: Array<string | number>, locale: string | undefined): Promise<Map<string, ResolvedUploadDoc>> {\n const params = new URLSearchParams({ depth: \"0\", limit: String(ids.length) });\n if (locale) params.set(\"locale\", locale);\n ids.forEach((id, i) => params.set(`where[id][in][${i}]`, String(id)));\n\n try {\n const res = await fetch(`${apiRoute}/${collection}?${params.toString()}`, {\n credentials: \"include\",\n });\n if (!res.ok) return new Map();\n const body = (await res.json()) as FindResponse;\n\n return new Map((body.docs ?? []).filter((d) => d.id !== undefined && d.id !== null).map((d) => [String(d.id), d]));\n } catch {\n return new Map();\n }\n}\n\nexport function createMediaResolver(apiRoute: string): MediaResolver {\n const cache = new Map<string, ResolvedUploadDoc | null>();\n const cacheKey = (ref: UploadRef, locale: string | undefined) => `${uploadKey(ref)}:${locale ?? \"\"}`;\n\n return {\n async resolve(refs, locale) {\n const missing = refs.filter((ref) => !cache.has(cacheKey(ref, locale)));\n\n const byCollection = new Map<string, UploadRef[]>();\n for (const ref of missing) {\n const group = byCollection.get(ref.collection) ?? [];\n group.push(ref);\n byCollection.set(ref.collection, group);\n }\n\n await Promise.all(\n [...byCollection.entries()].map(async ([collection, group]) => {\n const docs = await fetchDocs(\n apiRoute,\n collection,\n group.map((r) => r.id),\n locale\n );\n for (const ref of group) {\n cache.set(cacheKey(ref, locale), docs.get(String(ref.id)) ?? null);\n }\n })\n );\n\n const out = new Map<string, ResolvedUploadDoc>();\n for (const ref of refs) {\n const doc = cache.get(cacheKey(ref, locale));\n if (doc) out.set(uploadKey(ref), doc);\n }\n\n return out;\n },\n invalidate() {\n cache.clear();\n },\n };\n}\n"],"mappings":"AAAA,SAAS,iBAAiB;AAY1B,eAAe,UAAU,UAAkB,YAAoB,KAA6B,QAAqE;AAC/J,QAAM,SAAS,IAAI,gBAAgB,EAAE,OAAO,KAAK,OAAO,OAAO,IAAI,MAAM,EAAE,CAAC;AAC5E,MAAI;AAAQ,WAAO,IAAI,UAAU,MAAM;AACvC,MAAI,QAAQ,CAAC,IAAI,MAAM,OAAO,IAAI,iBAAiB,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC;AAEpE,MAAI;AACF,UAAM,MAAM,MAAM,MAAM,GAAG,QAAQ,IAAI,UAAU,IAAI,OAAO,SAAS,CAAC,IAAI;AAAA,MACxE,aAAa;AAAA,IACf,CAAC;AACD,QAAI,CAAC,IAAI;AAAI,aAAO,oBAAI,IAAI;AAC5B,UAAM,OAAQ,MAAM,IAAI,KAAK;AAE7B,WAAO,IAAI,KAAK,KAAK,QAAQ,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,OAAO,UAAa,EAAE,OAAO,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;AAAA,EACnH,QAAQ;AACN,WAAO,oBAAI,IAAI;AAAA,EACjB;AACF;AAEO,SAAS,oBAAoB,UAAiC;AACnE,QAAM,QAAQ,oBAAI,IAAsC;AACxD,QAAM,WAAW,CAAC,KAAgB,WAA+B,GAAG,UAAU,GAAG,CAAC,IAAI,UAAU,EAAE;AAElG,SAAO;AAAA,IACL,MAAM,QAAQ,MAAM,QAAQ;AAC1B,YAAM,UAAU,KAAK,OAAO,CAAC,QAAQ,CAAC,MAAM,IAAI,SAAS,KAAK,MAAM,CAAC,CAAC;AAEtE,YAAM,eAAe,oBAAI,IAAyB;AAClD,iBAAW,OAAO,SAAS;AACzB,cAAM,QAAQ,aAAa,IAAI,IAAI,UAAU,KAAK,CAAC;AACnD,cAAM,KAAK,GAAG;AACd,qBAAa,IAAI,IAAI,YAAY,KAAK;AAAA,MACxC;AAEA,YAAM,QAAQ;AAAA,QACZ,CAAC,GAAG,aAAa,QAAQ,CAAC,EAAE,IAAI,OAAO,CAAC,YAAY,KAAK,MAAM;AAC7D,gBAAM,OAAO,MAAM;AAAA,YACjB;AAAA,YACA;AAAA,YACA,MAAM,IAAI,CAAC,MAAM,EAAE,EAAE;AAAA,YACrB;AAAA,UACF;AACA,qBAAW,OAAO,OAAO;AACvB,kBAAM,IAAI,SAAS,KAAK,MAAM,GAAG,KAAK,IAAI,OAAO,IAAI,EAAE,CAAC,KAAK,IAAI;AAAA,UACnE;AAAA,QACF,CAAC;AAAA,MACH;AAEA,YAAM,MAAM,oBAAI,IAA+B;AAC/C,iBAAW,OAAO,MAAM;AACtB,cAAM,MAAM,MAAM,IAAI,SAAS,KAAK,MAAM,CAAC;AAC3C,YAAI;AAAK,cAAI,IAAI,UAAU,GAAG,GAAG,GAAG;AAAA,MACtC;AAEA,aAAO;AAAA,IACT;AAAA,IACA,aAAa;AACX,YAAM,MAAM;AAAA,IACd;AAAA,EACF;AACF;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"transform-lexical-uploads.d.ts","sourceRoot":"","sources":["../../../src/content/uploads/transform-lexical-uploads.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAa,eAAe,EAAE,MAAM,SAAS,CAAC;AAwC1D,wBAAgB,uBAAuB,CAAC,CAAC,SAAS;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,eAAe,GAAG,CAAC,CAI7G"}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
function isNode(v) {
|
|
2
|
-
return typeof v === "object" && v !== null;
|
|
3
|
-
}
|
|
4
|
-
function uploadRefOf(node) {
|
|
5
|
-
if (node.type !== "upload" || typeof node.relationTo !== "string")
|
|
6
|
-
return void 0;
|
|
7
|
-
if (typeof node.value === "string" || typeof node.value === "number") {
|
|
8
|
-
return { collection: node.relationTo, id: node.value };
|
|
9
|
-
}
|
|
10
|
-
return void 0;
|
|
11
|
-
}
|
|
12
|
-
function transformNode(node, transform) {
|
|
13
|
-
const ref = uploadRefOf(node);
|
|
14
|
-
if (ref) {
|
|
15
|
-
const replaced = transform(ref);
|
|
16
|
-
return replaced === void 0 ? node : { ...node, value: replaced };
|
|
17
|
-
}
|
|
18
|
-
if (Array.isArray(node.children)) {
|
|
19
|
-
return {
|
|
20
|
-
...node,
|
|
21
|
-
children: node.children.map((child) => isNode(child) ? transformNode(child, transform) : child)
|
|
22
|
-
};
|
|
23
|
-
}
|
|
24
|
-
return node;
|
|
25
|
-
}
|
|
26
|
-
function transformLexicalUploads(value, transform) {
|
|
27
|
-
if (!isNode(value.root))
|
|
28
|
-
return value;
|
|
29
|
-
return { ...value, root: transformNode(value.root, transform) };
|
|
30
|
-
}
|
|
31
|
-
export {
|
|
32
|
-
transformLexicalUploads
|
|
33
|
-
};
|
|
34
|
-
//# sourceMappingURL=transform-lexical-uploads.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/content/uploads/transform-lexical-uploads.ts"],"sourcesContent":["import type { UploadRef, UploadTransform } from \"./types\";\n\ninterface LexicalNode {\n type?: unknown;\n children?: unknown;\n relationTo?: unknown;\n value?: unknown;\n [key: string]: unknown;\n}\n\nfunction isNode(v: unknown): v is LexicalNode {\n return typeof v === \"object\" && v !== null;\n}\n\nfunction uploadRefOf(node: LexicalNode): UploadRef | undefined {\n if (node.type !== \"upload\" || typeof node.relationTo !== \"string\") return undefined;\n if (typeof node.value === \"string\" || typeof node.value === \"number\") {\n return { collection: node.relationTo, id: node.value };\n }\n\n return undefined;\n}\n\nfunction transformNode(node: LexicalNode, transform: UploadTransform): LexicalNode {\n const ref = uploadRefOf(node);\n if (ref) {\n const replaced = transform(ref);\n\n return replaced === undefined ? node : { ...node, value: replaced };\n }\n if (Array.isArray(node.children)) {\n return {\n ...node,\n children: node.children.map((child) => (isNode(child) ? transformNode(child, transform) : child)),\n };\n }\n\n return node;\n}\n\nexport function transformLexicalUploads<T extends { root?: unknown }>(value: T, transform: UploadTransform): T {\n if (!isNode(value.root)) return value;\n\n return { ...value, root: transformNode(value.root, transform) };\n}\n"],"mappings":"AAUA,SAAS,OAAO,GAA8B;AAC5C,SAAO,OAAO,MAAM,YAAY,MAAM;AACxC;AAEA,SAAS,YAAY,MAA0C;AAC7D,MAAI,KAAK,SAAS,YAAY,OAAO,KAAK,eAAe;AAAU,WAAO;AAC1E,MAAI,OAAO,KAAK,UAAU,YAAY,OAAO,KAAK,UAAU,UAAU;AACpE,WAAO,EAAE,YAAY,KAAK,YAAY,IAAI,KAAK,MAAM;AAAA,EACvD;AAEA,SAAO;AACT;AAEA,SAAS,cAAc,MAAmB,WAAyC;AACjF,QAAM,MAAM,YAAY,IAAI;AAC5B,MAAI,KAAK;AACP,UAAM,WAAW,UAAU,GAAG;AAE9B,WAAO,aAAa,SAAY,OAAO,EAAE,GAAG,MAAM,OAAO,SAAS;AAAA,EACpE;AACA,MAAI,MAAM,QAAQ,KAAK,QAAQ,GAAG;AAChC,WAAO;AAAA,MACL,GAAG;AAAA,MACH,UAAU,KAAK,SAAS,IAAI,CAAC,UAAW,OAAO,KAAK,IAAI,cAAc,OAAO,SAAS,IAAI,KAAM;AAAA,IAClG;AAAA,EACF;AAEA,SAAO;AACT;AAEO,SAAS,wBAAsD,OAAU,WAA+B;AAC7G,MAAI,CAAC,OAAO,MAAM,IAAI;AAAG,WAAO;AAEhC,SAAO,EAAE,GAAG,OAAO,MAAM,cAAc,MAAM,MAAM,SAAS,EAAE;AAChE;","names":[]}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import type { ClientBlock, ClientField } from "payload";
|
|
2
|
-
import type { UploadTransform } from "./types";
|
|
3
|
-
export interface UploadWalkContext {
|
|
4
|
-
isUploadCollection: (slug: string) => boolean;
|
|
5
|
-
blocksBySlug: Record<string, ClientBlock>;
|
|
6
|
-
}
|
|
7
|
-
type Values = Record<string, unknown>;
|
|
8
|
-
export declare function transformUploadValues(values: Values, fields: ClientField[], ctx: UploadWalkContext, transform: UploadTransform): Values;
|
|
9
|
-
export {};
|
|
10
|
-
//# sourceMappingURL=transform-upload-values.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"transform-upload-values.d.ts","sourceRoot":"","sources":["../../../src/content/uploads/transform-upload-values.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAExD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE/C,MAAM,WAAW,iBAAiB;IAChC,kBAAkB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IAC9C,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;CAC3C;AAED,KAAK,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AA2CtC,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE,iBAAiB,EAAE,SAAS,EAAE,eAAe,GAAG,MAAM,CAkEvI"}
|