@highjumpdigitalsoftware/blog-kit 0.6.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/INTEGRATION.md +76 -0
- package/LICENSE +74 -0
- package/README.md +102 -0
- package/astro/AdPreview.astro +64 -0
- package/astro/AdPreviewPair.astro +10 -0
- package/astro/AuditFindings.astro +29 -0
- package/astro/AuditScores.astro +60 -0
- package/astro/AuthorCard.astro +32 -0
- package/astro/BeforeAfter.astro +26 -0
- package/astro/BlogBehaviors.astro +15 -0
- package/astro/CTABanner.astro +28 -0
- package/astro/CalloutBox.astro +28 -0
- package/astro/CaseStudyHero.astro +45 -0
- package/astro/ChannelMixBars.astro +33 -0
- package/astro/Checklist.astro +24 -0
- package/astro/ChecklistItem.astro +15 -0
- package/astro/CodeSnippet.astro +20 -0
- package/astro/ComparisonTable.astro +103 -0
- package/astro/Definition.astro +30 -0
- package/astro/DeliveryComparison.astro +40 -0
- package/astro/FAQList.astro +43 -0
- package/astro/FurtherReading.astro +34 -0
- package/astro/ImageFeature.astro +22 -0
- package/astro/Infographic.astro +12 -0
- package/astro/KeyMetric.astro +40 -0
- package/astro/KeywordTable.astro +69 -0
- package/astro/List.astro +46 -0
- package/astro/MetricHighlight.astro +77 -0
- package/astro/NewsletterCTA.astro +40 -0
- package/astro/NumberedCard.astro +6 -0
- package/astro/ProConBlock.astro +38 -0
- package/astro/ProseList.astro +46 -0
- package/astro/QuoteBlock.astro +72 -0
- package/astro/RegionCallout.astro +24 -0
- package/astro/RelatedPosts.astro +47 -0
- package/astro/ResultsStrip.astro +59 -0
- package/astro/ScoreBar.astro +19 -0
- package/astro/SerpPreview.astro +35 -0
- package/astro/ServicePromoCard.astro +21 -0
- package/astro/StatCard.astro +48 -0
- package/astro/StepBlock.astro +5 -0
- package/astro/TableOfContents.astro +12 -0
- package/astro/TimelineBlock.astro +30 -0
- package/astro/TipBox.astro +14 -0
- package/astro/TrafficChart.astro +61 -0
- package/astro/VerdictCard.astro +48 -0
- package/astro/blogkit/Article.astro +63 -0
- package/astro/blogkit/BlogIndex.astro +144 -0
- package/core/behaviors/code.js +78 -0
- package/core/behaviors/comparison.js +52 -0
- package/core/behaviors/delivery-comparison.js +52 -0
- package/core/behaviors/faq.js +61 -0
- package/core/behaviors/index.d.ts +3 -0
- package/core/behaviors/index.js +35 -0
- package/core/behaviors/keyword-table.js +52 -0
- package/core/behaviors/toc.js +130 -0
- package/core/css/base.css +146 -0
- package/core/css/components.css +2632 -0
- package/core/css/index-listing.css +207 -0
- package/core/css/index.css +13 -0
- package/core/css/tokens.css +127 -0
- package/core/icons.ts +20 -0
- package/core/lib.ts +70 -0
- package/core/manifest/components.json +573 -0
- package/core/manifest/frontmatter.json +19 -0
- package/core/manifest/templates.json +77 -0
- package/dist/core/behaviors/code.js +78 -0
- package/dist/core/behaviors/comparison.js +52 -0
- package/dist/core/behaviors/delivery-comparison.js +52 -0
- package/dist/core/behaviors/faq.js +61 -0
- package/dist/core/behaviors/index.d.ts +3 -0
- package/dist/core/behaviors/index.js +35 -0
- package/dist/core/behaviors/keyword-table.js +52 -0
- package/dist/core/behaviors/toc.js +130 -0
- package/dist/core/css/base.css +146 -0
- package/dist/core/css/components.css +2632 -0
- package/dist/core/css/index-listing.css +207 -0
- package/dist/core/css/index.css +13 -0
- package/dist/core/css/tokens.css +127 -0
- package/dist/core/icons.d.ts +2 -0
- package/dist/core/icons.d.ts.map +1 -0
- package/dist/core/icons.js +20 -0
- package/dist/core/icons.js.map +1 -0
- package/dist/core/lib.d.ts +21 -0
- package/dist/core/lib.d.ts.map +1 -0
- package/dist/core/lib.js +57 -0
- package/dist/core/lib.js.map +1 -0
- package/dist/core/manifest/components.json +573 -0
- package/dist/core/manifest/frontmatter.json +19 -0
- package/dist/core/manifest/templates.json +77 -0
- package/dist/package/adapters/hjd-api.d.ts +14 -0
- package/dist/package/adapters/hjd-api.d.ts.map +1 -0
- package/dist/package/adapters/hjd-api.js +57 -0
- package/dist/package/adapters/hjd-api.js.map +1 -0
- package/dist/package/adapters/index.d.ts +13 -0
- package/dist/package/adapters/index.d.ts.map +1 -0
- package/dist/package/adapters/index.js +16 -0
- package/dist/package/adapters/index.js.map +1 -0
- package/dist/package/adapters/local.d.ts +13 -0
- package/dist/package/adapters/local.d.ts.map +1 -0
- package/dist/package/adapters/local.js +72 -0
- package/dist/package/adapters/local.js.map +1 -0
- package/dist/package/adapters/source.d.ts +39 -0
- package/dist/package/adapters/source.d.ts.map +1 -0
- package/dist/package/adapters/source.js +19 -0
- package/dist/package/adapters/source.js.map +1 -0
- package/dist/package/article.d.ts +17 -0
- package/dist/package/article.d.ts.map +1 -0
- package/dist/package/article.js +37 -0
- package/dist/package/article.js.map +1 -0
- package/dist/package/astro/data.d.ts +45 -0
- package/dist/package/astro/data.d.ts.map +1 -0
- package/dist/package/astro/data.js +81 -0
- package/dist/package/astro/data.js.map +1 -0
- package/dist/package/astro/freshness.d.ts +11 -0
- package/dist/package/astro/freshness.d.ts.map +1 -0
- package/dist/package/astro/freshness.js +48 -0
- package/dist/package/astro/freshness.js.map +1 -0
- package/dist/package/astro/index.d.ts +12 -0
- package/dist/package/astro/index.d.ts.map +1 -0
- package/dist/package/astro/index.js +31 -0
- package/dist/package/astro/index.js.map +1 -0
- package/dist/package/blog-index.d.ts +10 -0
- package/dist/package/blog-index.d.ts.map +1 -0
- package/dist/package/blog-index.js +27 -0
- package/dist/package/blog-index.js.map +1 -0
- package/dist/package/cli/exchange.d.ts +27 -0
- package/dist/package/cli/exchange.d.ts.map +1 -0
- package/dist/package/cli/exchange.js +94 -0
- package/dist/package/cli/exchange.js.map +1 -0
- package/dist/package/cli/index.d.ts +3 -0
- package/dist/package/cli/index.d.ts.map +1 -0
- package/dist/package/cli/index.js +301 -0
- package/dist/package/cli/index.js.map +1 -0
- package/dist/package/config/define.d.ts +13 -0
- package/dist/package/config/define.d.ts.map +1 -0
- package/dist/package/config/define.js +14 -0
- package/dist/package/config/define.js.map +1 -0
- package/dist/package/config/resolve.d.ts +11 -0
- package/dist/package/config/resolve.d.ts.map +1 -0
- package/dist/package/config/resolve.js +43 -0
- package/dist/package/config/resolve.js.map +1 -0
- package/dist/package/config/types.d.ts +74 -0
- package/dist/package/config/types.d.ts.map +1 -0
- package/dist/package/config/types.js +13 -0
- package/dist/package/config/types.js.map +1 -0
- package/dist/package/index-core.d.ts +28 -0
- package/dist/package/index-core.d.ts.map +1 -0
- package/dist/package/index-core.js +102 -0
- package/dist/package/index-core.js.map +1 -0
- package/dist/package/index.d.ts +13 -0
- package/dist/package/index.d.ts.map +1 -0
- package/dist/package/index.js +25 -0
- package/dist/package/index.js.map +1 -0
- package/dist/package/mdx/render-astro.d.ts +18 -0
- package/dist/package/mdx/render-astro.d.ts.map +1 -0
- package/dist/package/mdx/render-astro.js +75 -0
- package/dist/package/mdx/render-astro.js.map +1 -0
- package/dist/package/mdx/render.d.ts +13 -0
- package/dist/package/mdx/render.d.ts.map +1 -0
- package/dist/package/mdx/render.js +37 -0
- package/dist/package/mdx/render.js.map +1 -0
- package/dist/react/AdPreview.d.ts +26 -0
- package/dist/react/AdPreview.d.ts.map +1 -0
- package/dist/react/AdPreview.js +8 -0
- package/dist/react/AdPreview.js.map +1 -0
- package/dist/react/AdPreviewPair.d.ts +7 -0
- package/dist/react/AdPreviewPair.d.ts.map +1 -0
- package/dist/react/AdPreviewPair.js +5 -0
- package/dist/react/AdPreviewPair.js.map +1 -0
- package/dist/react/AuditFindings.d.ts +14 -0
- package/dist/react/AuditFindings.d.ts.map +1 -0
- package/dist/react/AuditFindings.js +5 -0
- package/dist/react/AuditFindings.js.map +1 -0
- package/dist/react/AuditScores.d.ts +12 -0
- package/dist/react/AuditScores.d.ts.map +1 -0
- package/dist/react/AuditScores.js +25 -0
- package/dist/react/AuditScores.js.map +1 -0
- package/dist/react/AuthorCard.d.ts +10 -0
- package/dist/react/AuthorCard.d.ts.map +1 -0
- package/dist/react/AuthorCard.js +6 -0
- package/dist/react/AuthorCard.js.map +1 -0
- package/dist/react/BeforeAfter.d.ts +12 -0
- package/dist/react/BeforeAfter.d.ts.map +1 -0
- package/dist/react/BeforeAfter.js +7 -0
- package/dist/react/BeforeAfter.js.map +1 -0
- package/dist/react/BlogBehaviors.d.ts +10 -0
- package/dist/react/BlogBehaviors.d.ts.map +1 -0
- package/dist/react/BlogBehaviors.js +20 -0
- package/dist/react/BlogBehaviors.js.map +1 -0
- package/dist/react/CTABanner.d.ts +8 -0
- package/dist/react/CTABanner.d.ts.map +1 -0
- package/dist/react/CTABanner.js +9 -0
- package/dist/react/CTABanner.js.map +1 -0
- package/dist/react/CalloutBox.d.ts +13 -0
- package/dist/react/CalloutBox.d.ts.map +1 -0
- package/dist/react/CalloutBox.js +9 -0
- package/dist/react/CalloutBox.js.map +1 -0
- package/dist/react/CaseStudyHero.d.ts +20 -0
- package/dist/react/CaseStudyHero.d.ts.map +1 -0
- package/dist/react/CaseStudyHero.js +7 -0
- package/dist/react/CaseStudyHero.js.map +1 -0
- package/dist/react/ChannelMixBars.d.ts +18 -0
- package/dist/react/ChannelMixBars.d.ts.map +1 -0
- package/dist/react/ChannelMixBars.js +6 -0
- package/dist/react/ChannelMixBars.js.map +1 -0
- package/dist/react/Checklist.d.ts +10 -0
- package/dist/react/Checklist.d.ts.map +1 -0
- package/dist/react/Checklist.js +7 -0
- package/dist/react/Checklist.js.map +1 -0
- package/dist/react/ChecklistItem.d.ts +7 -0
- package/dist/react/ChecklistItem.d.ts.map +1 -0
- package/dist/react/ChecklistItem.js +5 -0
- package/dist/react/ChecklistItem.js.map +1 -0
- package/dist/react/CodeSnippet.d.ts +17 -0
- package/dist/react/CodeSnippet.d.ts.map +1 -0
- package/dist/react/CodeSnippet.js +14 -0
- package/dist/react/CodeSnippet.js.map +1 -0
- package/dist/react/ComparisonTable.d.ts +22 -0
- package/dist/react/ComparisonTable.d.ts.map +1 -0
- package/dist/react/ComparisonTable.js +35 -0
- package/dist/react/ComparisonTable.js.map +1 -0
- package/dist/react/Definition.d.ts +9 -0
- package/dist/react/Definition.d.ts.map +1 -0
- package/dist/react/Definition.js +19 -0
- package/dist/react/Definition.js.map +1 -0
- package/dist/react/DeliveryComparison.d.ts +16 -0
- package/dist/react/DeliveryComparison.d.ts.map +1 -0
- package/dist/react/DeliveryComparison.js +7 -0
- package/dist/react/DeliveryComparison.js.map +1 -0
- package/dist/react/FAQList.d.ts +20 -0
- package/dist/react/FAQList.d.ts.map +1 -0
- package/dist/react/FAQList.js +19 -0
- package/dist/react/FAQList.js.map +1 -0
- package/dist/react/FurtherReading.d.ts +21 -0
- package/dist/react/FurtherReading.d.ts.map +1 -0
- package/dist/react/FurtherReading.js +13 -0
- package/dist/react/FurtherReading.js.map +1 -0
- package/dist/react/ImageFeature.d.ts +9 -0
- package/dist/react/ImageFeature.d.ts.map +1 -0
- package/dist/react/ImageFeature.js +6 -0
- package/dist/react/ImageFeature.js.map +1 -0
- package/dist/react/Infographic.d.ts +6 -0
- package/dist/react/Infographic.d.ts.map +1 -0
- package/dist/react/Infographic.js +7 -0
- package/dist/react/Infographic.js.map +1 -0
- package/dist/react/KeyMetric.d.ts +16 -0
- package/dist/react/KeyMetric.d.ts.map +1 -0
- package/dist/react/KeyMetric.js +15 -0
- package/dist/react/KeyMetric.js.map +1 -0
- package/dist/react/KeywordTable.d.ts +18 -0
- package/dist/react/KeywordTable.d.ts.map +1 -0
- package/dist/react/KeywordTable.js +23 -0
- package/dist/react/KeywordTable.js.map +1 -0
- package/dist/react/List.d.ts +11 -0
- package/dist/react/List.d.ts.map +1 -0
- package/dist/react/List.js +21 -0
- package/dist/react/List.js.map +1 -0
- package/dist/react/MetricHighlight.d.ts +15 -0
- package/dist/react/MetricHighlight.d.ts.map +1 -0
- package/dist/react/MetricHighlight.js +26 -0
- package/dist/react/MetricHighlight.js.map +1 -0
- package/dist/react/NewsletterCTA.d.ts +9 -0
- package/dist/react/NewsletterCTA.d.ts.map +1 -0
- package/dist/react/NewsletterCTA.js +5 -0
- package/dist/react/NewsletterCTA.js.map +1 -0
- package/dist/react/NumberedCard.d.ts +9 -0
- package/dist/react/NumberedCard.d.ts.map +1 -0
- package/dist/react/NumberedCard.js +7 -0
- package/dist/react/NumberedCard.js.map +1 -0
- package/dist/react/ProConBlock.d.ts +6 -0
- package/dist/react/ProConBlock.d.ts.map +1 -0
- package/dist/react/ProConBlock.js +7 -0
- package/dist/react/ProConBlock.js.map +1 -0
- package/dist/react/ProseList.d.ts +17 -0
- package/dist/react/ProseList.d.ts.map +1 -0
- package/dist/react/ProseList.js +26 -0
- package/dist/react/ProseList.js.map +1 -0
- package/dist/react/QuoteBlock.d.ts +17 -0
- package/dist/react/QuoteBlock.d.ts.map +1 -0
- package/dist/react/QuoteBlock.js +26 -0
- package/dist/react/QuoteBlock.js.map +1 -0
- package/dist/react/RegionCallout.d.ts +13 -0
- package/dist/react/RegionCallout.d.ts.map +1 -0
- package/dist/react/RegionCallout.js +5 -0
- package/dist/react/RegionCallout.js.map +1 -0
- package/dist/react/RelatedPosts.d.ts +20 -0
- package/dist/react/RelatedPosts.d.ts.map +1 -0
- package/dist/react/RelatedPosts.js +7 -0
- package/dist/react/RelatedPosts.js.map +1 -0
- package/dist/react/ResultsStrip.d.ts +18 -0
- package/dist/react/ResultsStrip.d.ts.map +1 -0
- package/dist/react/ResultsStrip.js +22 -0
- package/dist/react/ResultsStrip.js.map +1 -0
- package/dist/react/ScoreBar.d.ts +8 -0
- package/dist/react/ScoreBar.d.ts.map +1 -0
- package/dist/react/ScoreBar.js +6 -0
- package/dist/react/ScoreBar.js.map +1 -0
- package/dist/react/SerpPreview.d.ts +18 -0
- package/dist/react/SerpPreview.d.ts.map +1 -0
- package/dist/react/SerpPreview.js +13 -0
- package/dist/react/SerpPreview.js.map +1 -0
- package/dist/react/ServicePromoCard.d.ts +14 -0
- package/dist/react/ServicePromoCard.d.ts.map +1 -0
- package/dist/react/ServicePromoCard.js +12 -0
- package/dist/react/ServicePromoCard.js.map +1 -0
- package/dist/react/StatCard.d.ts +13 -0
- package/dist/react/StatCard.d.ts.map +1 -0
- package/dist/react/StatCard.js +20 -0
- package/dist/react/StatCard.js.map +1 -0
- package/dist/react/StepBlock.d.ts +8 -0
- package/dist/react/StepBlock.d.ts.map +1 -0
- package/dist/react/StepBlock.js +5 -0
- package/dist/react/StepBlock.js.map +1 -0
- package/dist/react/TableOfContents.d.ts +14 -0
- package/dist/react/TableOfContents.d.ts.map +1 -0
- package/dist/react/TableOfContents.js +12 -0
- package/dist/react/TableOfContents.js.map +1 -0
- package/dist/react/TimelineBlock.d.ts +14 -0
- package/dist/react/TimelineBlock.d.ts.map +1 -0
- package/dist/react/TimelineBlock.js +8 -0
- package/dist/react/TimelineBlock.js.map +1 -0
- package/dist/react/TipBox.d.ts +6 -0
- package/dist/react/TipBox.d.ts.map +1 -0
- package/dist/react/TipBox.js +5 -0
- package/dist/react/TipBox.js.map +1 -0
- package/dist/react/TrafficChart.d.ts +16 -0
- package/dist/react/TrafficChart.d.ts.map +1 -0
- package/dist/react/TrafficChart.js +14 -0
- package/dist/react/TrafficChart.js.map +1 -0
- package/dist/react/VerdictCard.d.ts +15 -0
- package/dist/react/VerdictCard.d.ts.map +1 -0
- package/dist/react/VerdictCard.js +5 -0
- package/dist/react/VerdictCard.js.map +1 -0
- package/dist/react/components-map.d.ts +133 -0
- package/dist/react/components-map.d.ts.map +1 -0
- package/dist/react/components-map.js +120 -0
- package/dist/react/components-map.js.map +1 -0
- package/dist/react/index.d.ts +5 -0
- package/dist/react/index.d.ts.map +1 -0
- package/dist/react/index.js +13 -0
- package/dist/react/index.js.map +1 -0
- package/package.json +116 -0
- package/react/AdPreview.tsx +94 -0
- package/react/AdPreviewPair.tsx +16 -0
- package/react/AuditFindings.tsx +43 -0
- package/react/AuditScores.tsx +73 -0
- package/react/AuthorCard.tsx +35 -0
- package/react/BeforeAfter.tsx +27 -0
- package/react/BlogBehaviors.tsx +21 -0
- package/react/CTABanner.tsx +32 -0
- package/react/CalloutBox.tsx +31 -0
- package/react/CaseStudyHero.tsx +71 -0
- package/react/ChannelMixBars.tsx +50 -0
- package/react/Checklist.tsx +31 -0
- package/react/ChecklistItem.tsx +19 -0
- package/react/CodeSnippet.tsx +36 -0
- package/react/ComparisonTable.tsx +114 -0
- package/react/Definition.tsx +36 -0
- package/react/DeliveryComparison.tsx +62 -0
- package/react/FAQList.tsx +61 -0
- package/react/FurtherReading.tsx +46 -0
- package/react/ImageFeature.tsx +26 -0
- package/react/Infographic.tsx +18 -0
- package/react/KeyMetric.tsx +61 -0
- package/react/KeywordTable.tsx +92 -0
- package/react/List.tsx +58 -0
- package/react/MetricHighlight.tsx +86 -0
- package/react/NewsletterCTA.tsx +48 -0
- package/react/NumberedCard.tsx +7 -0
- package/react/ProConBlock.tsx +42 -0
- package/react/ProseList.tsx +72 -0
- package/react/QuoteBlock.tsx +89 -0
- package/react/RegionCallout.tsx +38 -0
- package/react/RelatedPosts.tsx +58 -0
- package/react/ResultsStrip.tsx +77 -0
- package/react/ScoreBar.tsx +27 -0
- package/react/SerpPreview.tsx +59 -0
- package/react/ServicePromoCard.tsx +43 -0
- package/react/StatCard.tsx +62 -0
- package/react/StepBlock.tsx +5 -0
- package/react/TableOfContents.tsx +27 -0
- package/react/TimelineBlock.tsx +35 -0
- package/react/TipBox.tsx +16 -0
- package/react/TrafficChart.tsx +79 -0
- package/react/VerdictCard.tsx +60 -0
- package/react/components-map.ts +122 -0
- package/react/index.ts +13 -0
- package/templates/blogkit/app/api/blogkit/revalidate/route.ts.tmpl +32 -0
- package/templates/blogkit/app/blog/[slug]/page.tsx.tmpl +41 -0
- package/templates/blogkit/app/blog/page.tsx.tmpl +18 -0
- package/templates/blogkit/blogkit.config.ts.tmpl +23 -0
- package/templates/blogkit-astro/BLOGKIT_ASTRO_SETUP.md.tmpl +49 -0
- package/templates/blogkit-astro/src/blogkit.config.ts.tmpl +29 -0
- package/templates/blogkit-astro/src/pages/api/blogkit/revalidate.ts.tmpl +46 -0
- package/templates/blogkit-astro/src/pages/blog/[slug].astro.tmpl +39 -0
- package/templates/blogkit-astro/src/pages/blog/index.astro.tmpl +29 -0
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface AuditScoreItem {
|
|
2
|
+
label: string;
|
|
3
|
+
/** Optional secondary line under the label. */
|
|
4
|
+
sub?: string;
|
|
5
|
+
/** 0–100. */
|
|
6
|
+
score: number;
|
|
7
|
+
}
|
|
8
|
+
export interface AuditScoresProps {
|
|
9
|
+
items?: AuditScoreItem[];
|
|
10
|
+
}
|
|
11
|
+
export declare function AuditScores({ items }: AuditScoresProps): import("react").JSX.Element;
|
|
12
|
+
//# sourceMappingURL=AuditScores.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AuditScores.d.ts","sourceRoot":"","sources":["../../react/AuditScores.tsx"],"names":[],"mappings":"AAUA,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,+CAA+C;IAC/C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,aAAa;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,cAAc,EAAE,CAAC;CAC1B;AAoBD,wBAAgB,WAAW,CAAC,EAAE,KAAU,EAAE,EAAE,gBAAgB,+BAgC3D"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/** Threshold ladder ported verbatim from the hjd source. */
|
|
3
|
+
function scoreTone(score) {
|
|
4
|
+
if (score >= 80)
|
|
5
|
+
return "good";
|
|
6
|
+
if (score >= 50)
|
|
7
|
+
return "warn";
|
|
8
|
+
return "bad";
|
|
9
|
+
}
|
|
10
|
+
/** End point of the progress arc along the semicircle (r=40, cx=50, cy=50). */
|
|
11
|
+
function arcEnd(score) {
|
|
12
|
+
const angle = Math.PI * (1 - score / 100);
|
|
13
|
+
return {
|
|
14
|
+
x: (50 - 40 * Math.cos(angle)).toFixed(2),
|
|
15
|
+
y: (50 - 40 * Math.sin(angle)).toFixed(2),
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
export function AuditScores({ items = [] }) {
|
|
19
|
+
return (_jsx("div", { className: "bk-audit-scores", children: items.map((it, i) => {
|
|
20
|
+
const tone = scoreTone(it.score);
|
|
21
|
+
const { x, y } = arcEnd(it.score);
|
|
22
|
+
return (_jsxs("div", { className: `bk-audit-scores__card bk-audit-scores__card--${tone}`, children: [_jsxs("svg", { className: "bk-audit-scores__gauge", viewBox: "0 0 100 60", "aria-hidden": "true", children: [_jsx("path", { className: "bk-audit-scores__track", d: "M10 50 A 40 40 0 0 1 90 50", fill: "none", strokeWidth: "8", strokeLinecap: "round" }), _jsx("path", { className: "bk-audit-scores__arc", d: `M10 50 A 40 40 0 0 1 ${x} ${y}`, fill: "none", strokeWidth: "8", strokeLinecap: "round" })] }), _jsx("div", { className: "bk-audit-scores__num", children: it.score }), _jsx("div", { className: "bk-audit-scores__label", children: it.label }), it.sub && _jsx("div", { className: "bk-audit-scores__sub", children: it.sub })] }, i));
|
|
23
|
+
}) }));
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=AuditScores.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AuditScores.js","sourceRoot":"","sources":["../../react/AuditScores.tsx"],"names":[],"mappings":";AAwBA,4DAA4D;AAC5D,SAAS,SAAS,CAAC,KAAa;IAC9B,IAAI,KAAK,IAAI,EAAE;QAAE,OAAO,MAAM,CAAC;IAC/B,IAAI,KAAK,IAAI,EAAE;QAAE,OAAO,MAAM,CAAC;IAC/B,OAAO,KAAK,CAAC;AACf,CAAC;AAED,+EAA+E;AAC/E,SAAS,MAAM,CAAC,KAAa;IAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC;IAC1C,OAAO;QACL,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;QACzC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;KAC1C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,EAAE,KAAK,GAAG,EAAE,EAAoB;IAC1D,OAAO,CACL,cAAK,SAAS,EAAC,iBAAiB,YAC7B,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;YACnB,MAAM,IAAI,GAAG,SAAS,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;YACjC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;YAClC,OAAO,CACL,eAAa,SAAS,EAAE,gDAAgD,IAAI,EAAE,aAC5E,eAAK,SAAS,EAAC,wBAAwB,EAAC,OAAO,EAAC,YAAY,iBAAa,MAAM,aAC7E,eACE,SAAS,EAAC,wBAAwB,EAClC,CAAC,EAAC,4BAA4B,EAC9B,IAAI,EAAC,MAAM,EACX,WAAW,EAAC,GAAG,EACf,aAAa,EAAC,OAAO,GACrB,EACF,eACE,SAAS,EAAC,sBAAsB,EAChC,CAAC,EAAE,wBAAwB,CAAC,IAAI,CAAC,EAAE,EACnC,IAAI,EAAC,MAAM,EACX,WAAW,EAAC,GAAG,EACf,aAAa,EAAC,OAAO,GACrB,IACE,EACN,cAAK,SAAS,EAAC,sBAAsB,YAAE,EAAE,CAAC,KAAK,GAAO,EACtD,cAAK,SAAS,EAAC,wBAAwB,YAAE,EAAE,CAAC,KAAK,GAAO,EACvD,EAAE,CAAC,GAAG,IAAI,cAAK,SAAS,EAAC,sBAAsB,YAAE,EAAE,CAAC,GAAG,GAAO,KAnBvD,CAAC,CAoBL,CACP,CAAC;QACJ,CAAC,CAAC,GACE,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type AuthorLink } from "../core/lib";
|
|
2
|
+
export interface AuthorCardProps {
|
|
3
|
+
name: string;
|
|
4
|
+
role?: string;
|
|
5
|
+
avatar?: string;
|
|
6
|
+
bio?: string;
|
|
7
|
+
links?: AuthorLink[];
|
|
8
|
+
}
|
|
9
|
+
export declare function AuthorCard({ name, role, avatar, bio, links }: AuthorCardProps): import("react").JSX.Element;
|
|
10
|
+
//# sourceMappingURL=AuthorCard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AuthorCard.d.ts","sourceRoot":"","sources":["../../react/AuthorCard.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9D,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;CACtB;AAED,wBAAgB,UAAU,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,eAAe,+BAwB7E"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { authorInitials } from "../core/lib.js";
|
|
3
|
+
export function AuthorCard({ name, role, avatar, bio, links }) {
|
|
4
|
+
return (_jsxs("div", { className: "bk-author", children: [_jsx("div", { className: "bk-author__media", children: avatar ? (_jsx("img", { className: "bk-author__avatar", src: avatar, alt: name })) : (_jsx("span", { className: "bk-author__avatar bk-author__avatar--fallback", "aria-hidden": "true", children: authorInitials(name) })) }), _jsxs("div", { className: "bk-author__body", children: [_jsx("p", { className: "bk-author__name", children: name }), role && _jsx("p", { className: "bk-author__role", children: role }), bio && _jsx("p", { className: "bk-author__bio", children: bio }), links && links.length > 0 && (_jsx("div", { className: "bk-author__links", children: links.map((l, i) => (_jsxs("a", { className: "bk-author__link", href: l.href, children: [l.label, " \u2192"] }, i))) }))] })] }));
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=AuthorCard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AuthorCard.js","sourceRoot":"","sources":["../../react/AuthorCard.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,cAAc,EAAmB,MAAM,aAAa,CAAC;AAU9D,MAAM,UAAU,UAAU,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAmB;IAC5E,OAAO,CACL,eAAK,SAAS,EAAC,WAAW,aACxB,cAAK,SAAS,EAAC,kBAAkB,YAC9B,MAAM,CAAC,CAAC,CAAC,CACR,cAAK,SAAS,EAAC,mBAAmB,EAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,GAAI,CAC9D,CAAC,CAAC,CAAC,CACF,eAAM,SAAS,EAAC,+CAA+C,iBAAa,MAAM,YAAE,cAAc,CAAC,IAAI,CAAC,GAAQ,CACjH,GACG,EACN,eAAK,SAAS,EAAC,iBAAiB,aAC9B,YAAG,SAAS,EAAC,iBAAiB,YAAE,IAAI,GAAK,EACxC,IAAI,IAAI,YAAG,SAAS,EAAC,iBAAiB,YAAE,IAAI,GAAK,EACjD,GAAG,IAAI,YAAG,SAAS,EAAC,gBAAgB,YAAE,GAAG,GAAK,EAC9C,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAC5B,cAAK,SAAS,EAAC,kBAAkB,YAC9B,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CACnB,aAAW,SAAS,EAAC,iBAAiB,EAAC,IAAI,EAAE,CAAC,CAAC,IAAI,aAAG,CAAC,CAAC,KAAK,gBAArD,CAAC,CAAgE,CAC1E,CAAC,GACE,CACP,IACG,IACF,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface BeforeAfterSide {
|
|
2
|
+
title: string;
|
|
3
|
+
content: string;
|
|
4
|
+
/** Optional big number shown between title and content. */
|
|
5
|
+
value?: string;
|
|
6
|
+
}
|
|
7
|
+
export interface BeforeAfterProps {
|
|
8
|
+
before: BeforeAfterSide;
|
|
9
|
+
after: BeforeAfterSide;
|
|
10
|
+
}
|
|
11
|
+
export declare function BeforeAfter({ before, after }: BeforeAfterProps): import("react").JSX.Element | null;
|
|
12
|
+
//# sourceMappingURL=BeforeAfter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BeforeAfter.d.ts","sourceRoot":"","sources":["../../react/BeforeAfter.tsx"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,2DAA2D;IAC3D,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AACD,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,eAAe,CAAC;IACxB,KAAK,EAAE,eAAe,CAAC;CACxB;AACD,wBAAgB,WAAW,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,gBAAgB,sCAgB9D"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
export function BeforeAfter({ before, after }) {
|
|
3
|
+
if (!before || !after)
|
|
4
|
+
return null;
|
|
5
|
+
return (_jsxs("div", { className: "bk-before-after", children: [_jsxs("div", { className: "bk-before-after__card bk-before-after__card--before", children: [_jsx("div", { className: "bk-before-after__label", children: before.title }), before.value && _jsx("div", { className: "bk-before-after__value", children: before.value }), _jsx("p", { className: "bk-before-after__body", children: before.content })] }), _jsxs("div", { className: "bk-before-after__card bk-before-after__card--after", children: [_jsx("div", { className: "bk-before-after__label", children: after.title }), after.value && _jsx("div", { className: "bk-before-after__value", children: after.value }), _jsx("p", { className: "bk-before-after__body", children: after.content })] })] }));
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=BeforeAfter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BeforeAfter.js","sourceRoot":"","sources":["../../react/BeforeAfter.tsx"],"names":[],"mappings":";AAUA,MAAM,UAAU,WAAW,CAAC,EAAE,MAAM,EAAE,KAAK,EAAoB;IAC7D,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACnC,OAAO,CACL,eAAK,SAAS,EAAC,iBAAiB,aAC9B,eAAK,SAAS,EAAC,qDAAqD,aAClE,cAAK,SAAS,EAAC,wBAAwB,YAAE,MAAM,CAAC,KAAK,GAAO,EAC3D,MAAM,CAAC,KAAK,IAAI,cAAK,SAAS,EAAC,wBAAwB,YAAE,MAAM,CAAC,KAAK,GAAO,EAC7E,YAAG,SAAS,EAAC,uBAAuB,YAAE,MAAM,CAAC,OAAO,GAAK,IACrD,EACN,eAAK,SAAS,EAAC,oDAAoD,aACjE,cAAK,SAAS,EAAC,wBAAwB,YAAE,KAAK,CAAC,KAAK,GAAO,EAC1D,KAAK,CAAC,KAAK,IAAI,cAAK,SAAS,EAAC,wBAAwB,YAAE,KAAK,CAAC,KAAK,GAAO,EAC3E,YAAG,SAAS,EAAC,uBAAuB,YAAE,KAAK,CAAC,OAAO,GAAK,IACpD,IACF,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Activates the kit's interactive components (TableOfContents scrollspy,
|
|
3
|
+
* FAQ JSON-LD, table scroll hints, code copy). Drop it once inside the
|
|
4
|
+
* `.blog-root` of the post route — it renders nothing. It re-runs the
|
|
5
|
+
* behaviours after every client-side navigation (keyed on the pathname)
|
|
6
|
+
* so a freshly mounted post gets wired; each behaviour is idempotent, so
|
|
7
|
+
* re-running never double-binds an already-enhanced element.
|
|
8
|
+
*/
|
|
9
|
+
export declare function BlogBehaviors(): null;
|
|
10
|
+
//# sourceMappingURL=BlogBehaviors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BlogBehaviors.d.ts","sourceRoot":"","sources":["../../react/BlogBehaviors.tsx"],"names":[],"mappings":"AAMA;;;;;;;GAOG;AACH,wBAAgB,aAAa,SAM5B"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useEffect } from "react";
|
|
3
|
+
import { usePathname } from "next/navigation";
|
|
4
|
+
import { initBlogBehaviors } from "../core/behaviors/index.js";
|
|
5
|
+
/**
|
|
6
|
+
* Activates the kit's interactive components (TableOfContents scrollspy,
|
|
7
|
+
* FAQ JSON-LD, table scroll hints, code copy). Drop it once inside the
|
|
8
|
+
* `.blog-root` of the post route — it renders nothing. It re-runs the
|
|
9
|
+
* behaviours after every client-side navigation (keyed on the pathname)
|
|
10
|
+
* so a freshly mounted post gets wired; each behaviour is idempotent, so
|
|
11
|
+
* re-running never double-binds an already-enhanced element.
|
|
12
|
+
*/
|
|
13
|
+
export function BlogBehaviors() {
|
|
14
|
+
const pathname = usePathname();
|
|
15
|
+
useEffect(() => {
|
|
16
|
+
initBlogBehaviors();
|
|
17
|
+
}, [pathname]);
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=BlogBehaviors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BlogBehaviors.js","sourceRoot":"","sources":["../../react/BlogBehaviors.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAE/D;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa;IAC3B,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,SAAS,CAAC,GAAG,EAAE;QACb,iBAAiB,EAAE,CAAC;IACtB,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IACf,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export interface CTABannerProps {
|
|
2
|
+
heading?: string;
|
|
3
|
+
description?: string;
|
|
4
|
+
ctaText?: string;
|
|
5
|
+
ctaHref?: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function CTABanner({ heading, description, ctaText, ctaHref, }: CTABannerProps): import("react").JSX.Element;
|
|
8
|
+
//# sourceMappingURL=CTABanner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CTABanner.d.ts","sourceRoot":"","sources":["../../react/CTABanner.tsx"],"names":[],"mappings":"AAIA,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AACD,wBAAgB,SAAS,CAAC,EACxB,OAAmC,EACnC,WAA+G,EAC/G,OAAuB,EACvB,OAAsB,GACvB,EAAE,cAAc,+BAgBhB"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/* blog-kit React adapter — CTABanner
|
|
3
|
+
Thin wrapper: all styling lives in core/css/components.css (.bk-cta-banner).
|
|
4
|
+
Dark banner with a brand radial glow, heading, description, and a CTA link. */
|
|
5
|
+
import { ICONS } from "../core/icons.js";
|
|
6
|
+
export function CTABanner({ heading = "See it on your own site", description = "Capture AI deploys in under ten minutes — paste a tag, point at your content, watch leads land.", ctaText = "Book a demo", ctaHref = "/book-demo", }) {
|
|
7
|
+
return (_jsxs("div", { className: "bk-cta-banner", children: [_jsx("span", { className: "bk-cta-banner__glow", "aria-hidden": "true" }), _jsxs("div", { className: "bk-cta-banner__inner", children: [_jsxs("div", { className: "bk-cta-banner__copy", children: [_jsx("h3", { className: "bk-cta-banner__heading", children: heading }), _jsx("p", { className: "bk-cta-banner__desc", children: description })] }), _jsxs("a", { className: "bk-cta-banner__cta", href: ctaHref, children: [_jsx("span", { className: "bk-cta-banner__cta-label", children: ctaText }), _jsx("span", { className: "bk-cta-banner__cta-icon", "aria-hidden": "true", dangerouslySetInnerHTML: { __html: ICONS["arrowRight"] } })] })] })] }));
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=CTABanner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CTABanner.js","sourceRoot":"","sources":["../../react/CTABanner.tsx"],"names":[],"mappings":";AAAA;;iFAEiF;AACjF,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAOtC,MAAM,UAAU,SAAS,CAAC,EACxB,OAAO,GAAG,yBAAyB,EACnC,WAAW,GAAG,iGAAiG,EAC/G,OAAO,GAAG,aAAa,EACvB,OAAO,GAAG,YAAY,GACP;IACf,OAAO,CACL,eAAK,SAAS,EAAC,eAAe,aAC5B,eAAM,SAAS,EAAC,qBAAqB,iBAAa,MAAM,GAAG,EAC3D,eAAK,SAAS,EAAC,sBAAsB,aACnC,eAAK,SAAS,EAAC,qBAAqB,aAClC,aAAI,SAAS,EAAC,wBAAwB,YAAE,OAAO,GAAM,EACrD,YAAG,SAAS,EAAC,qBAAqB,YAAE,WAAW,GAAK,IAChD,EACN,aAAG,SAAS,EAAC,oBAAoB,EAAC,IAAI,EAAE,OAAO,aAC7C,eAAM,SAAS,EAAC,0BAA0B,YAAE,OAAO,GAAQ,EAC3D,eAAM,SAAS,EAAC,yBAAyB,iBAAa,MAAM,EAAC,uBAAuB,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,YAAY,CAAC,EAAE,GAAI,IACvH,IACA,IACF,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
export interface CalloutBoxProps {
|
|
3
|
+
/** Canonical. info | tip | success | warn | danger (+ aliases like note/warning). */
|
|
4
|
+
tone?: string;
|
|
5
|
+
/** Alias accepted from existing HJD posts. */
|
|
6
|
+
type?: string;
|
|
7
|
+
/** Alias accepted from existing Capture AI posts. */
|
|
8
|
+
variant?: string;
|
|
9
|
+
title?: string;
|
|
10
|
+
children?: ReactNode;
|
|
11
|
+
}
|
|
12
|
+
export declare function CalloutBox({ tone, type, variant, title, children }: CalloutBoxProps): import("react").JSX.Element;
|
|
13
|
+
//# sourceMappingURL=CalloutBox.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CalloutBox.d.ts","sourceRoot":"","sources":["../../react/CalloutBox.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvC,MAAM,WAAW,eAAe;IAC9B,qFAAqF;IACrF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8CAA8C;IAC9C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qDAAqD;IACrD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,wBAAgB,UAAU,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,eAAe,+BAYnF"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { ICONS } from "../core/icons.js";
|
|
3
|
+
import { resolveCalloutTone, CALLOUT_DEFAULT_TITLE } from "../core/lib.js";
|
|
4
|
+
export function CalloutBox({ tone, type, variant, title, children }) {
|
|
5
|
+
const t = resolveCalloutTone(tone ?? type ?? variant);
|
|
6
|
+
const heading = title ?? CALLOUT_DEFAULT_TITLE[t];
|
|
7
|
+
return (_jsxs("aside", { className: `bk-callout bk-callout--${t}`, children: [_jsxs("p", { className: "bk-callout__title", children: [_jsx("span", { className: "bk-callout__icon", dangerouslySetInnerHTML: { __html: ICONS[t] } }), heading] }), _jsx("div", { className: "bk-callout__body", children: children })] }));
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=CalloutBox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CalloutBox.js","sourceRoot":"","sources":["../../react/CalloutBox.tsx"],"names":[],"mappings":";AAIA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAaxE,MAAM,UAAU,UAAU,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAmB;IAClF,MAAM,CAAC,GAAG,kBAAkB,CAAC,IAAI,IAAI,IAAI,IAAI,OAAO,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,KAAK,IAAI,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAClD,OAAO,CACL,iBAAO,SAAS,EAAE,0BAA0B,CAAC,EAAE,aAC7C,aAAG,SAAS,EAAC,mBAAmB,aAC9B,eAAM,SAAS,EAAC,kBAAkB,EAAC,uBAAuB,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,GAAI,EACnF,OAAO,IACN,EACJ,cAAK,SAAS,EAAC,kBAAkB,YAAE,QAAQ,GAAO,IAC5C,CACT,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export interface CaseStudyResult {
|
|
2
|
+
num: string;
|
|
3
|
+
label: string;
|
|
4
|
+
}
|
|
5
|
+
export interface CaseStudyHeroProps {
|
|
6
|
+
/** Client logo URL — preferred plate content. */
|
|
7
|
+
logoImage?: string;
|
|
8
|
+
/** HTML/text wordmark (supports <br/>) — used when no logoImage. */
|
|
9
|
+
logo?: string;
|
|
10
|
+
/** Client name — auto-broken at spaces as a last-resort plate. */
|
|
11
|
+
client?: string;
|
|
12
|
+
/** Uppercase tag chips shown above the headline. */
|
|
13
|
+
chips?: string[];
|
|
14
|
+
title?: string;
|
|
15
|
+
sub?: string;
|
|
16
|
+
/** Result tiles — each a big number + uppercase label. */
|
|
17
|
+
results?: CaseStudyResult[];
|
|
18
|
+
}
|
|
19
|
+
export declare function CaseStudyHero({ logoImage, logo, client, chips, title, sub, results, }: CaseStudyHeroProps): import("react").JSX.Element;
|
|
20
|
+
//# sourceMappingURL=CaseStudyHero.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CaseStudyHero.d.ts","sourceRoot":"","sources":["../../react/CaseStudyHero.tsx"],"names":[],"mappings":"AAOA,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,kBAAkB;IACjC,iDAAiD;IACjD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oEAAoE;IACpE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kEAAkE;IAClE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oDAAoD;IACpD,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,0DAA0D;IAC1D,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;CAC7B;AAED,wBAAgB,aAAa,CAAC,EAC5B,SAAS,EACT,IAAI,EACJ,MAAM,EACN,KAAU,EACV,KAAK,EACL,GAAG,EACH,OAAY,GACb,EAAE,kBAAkB,+BAmCpB"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
export function CaseStudyHero({ logoImage, logo, client, chips = [], title, sub, results = [], }) {
|
|
3
|
+
return (_jsxs("div", { className: "bk-case-study-hero", children: [_jsx("div", { className: "bk-case-study-hero__logo", children: logoImage ? (_jsx("img", { src: logoImage, alt: client ? `${client} logo` : "Client logo" })) : (_jsx("strong", { dangerouslySetInnerHTML: {
|
|
4
|
+
__html: logo || client?.replace(/ /g, "<br/>") || "",
|
|
5
|
+
} })) }), _jsxs("div", { className: "bk-case-study-hero__body", children: [_jsx("div", { className: "bk-case-study-hero__chips", children: chips.map((c) => (_jsx("span", { className: "bk-case-study-hero__chip", children: c }, c))) }), _jsx("h2", { className: "bk-case-study-hero__heading", children: title }), _jsx("p", { className: "bk-case-study-hero__sub", children: sub }), _jsx("div", { className: "bk-case-study-hero__results", children: results.map((r, i) => (_jsxs("div", { className: "bk-case-study-hero__result", children: [_jsx("div", { className: "bk-case-study-hero__result-num", children: r.num }), _jsx("div", { className: "bk-case-study-hero__result-label", children: r.label })] }, i))) })] })] }));
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=CaseStudyHero.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CaseStudyHero.js","sourceRoot":"","sources":["../../react/CaseStudyHero.tsx"],"names":[],"mappings":";AA2BA,MAAM,UAAU,aAAa,CAAC,EAC5B,SAAS,EACT,IAAI,EACJ,MAAM,EACN,KAAK,GAAG,EAAE,EACV,KAAK,EACL,GAAG,EACH,OAAO,GAAG,EAAE,GACO;IACnB,OAAO,CACL,eAAK,SAAS,EAAC,oBAAoB,aACjC,cAAK,SAAS,EAAC,0BAA0B,YACtC,SAAS,CAAC,CAAC,CAAC,CACX,cAAK,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,OAAO,CAAC,CAAC,CAAC,aAAa,GAAI,CACxE,CAAC,CAAC,CAAC,CACF,iBACE,uBAAuB,EAAE;wBACvB,MAAM,EAAE,IAAI,IAAI,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE;qBACrD,GACD,CACH,GACG,EACN,eAAK,SAAS,EAAC,0BAA0B,aACvC,cAAK,SAAS,EAAC,2BAA2B,YACvC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAChB,eAAc,SAAS,EAAC,0BAA0B,YAC/C,CAAC,IADO,CAAC,CAEL,CACR,CAAC,GACE,EACN,aAAI,SAAS,EAAC,6BAA6B,YAAE,KAAK,GAAM,EACxD,YAAG,SAAS,EAAC,yBAAyB,YAAE,GAAG,GAAK,EAChD,cAAK,SAAS,EAAC,6BAA6B,YACzC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CACrB,eAAa,SAAS,EAAC,4BAA4B,aACjD,cAAK,SAAS,EAAC,gCAAgC,YAAE,CAAC,CAAC,GAAG,GAAO,EAC7D,cAAK,SAAS,EAAC,kCAAkC,YAAE,CAAC,CAAC,KAAK,GAAO,KAFzD,CAAC,CAGL,CACP,CAAC,GACE,IACF,IACF,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export interface ChannelMixRow {
|
|
2
|
+
/** Channel name (rendered uppercase as the row label). */
|
|
3
|
+
name: string;
|
|
4
|
+
/** Numeric magnitude used to compute the bar width. */
|
|
5
|
+
value: number;
|
|
6
|
+
/** Optional pre-formatted value shown on the right (falls back to value). */
|
|
7
|
+
display?: string;
|
|
8
|
+
}
|
|
9
|
+
export interface ChannelMixBarsProps {
|
|
10
|
+
/** One entry per channel. Renders nothing meaningful if empty. */
|
|
11
|
+
rows?: ChannelMixRow[];
|
|
12
|
+
/** Optional total, shown in the header after "Total · ". */
|
|
13
|
+
total?: string;
|
|
14
|
+
/** Optional header label (defaults to "Channel split"). */
|
|
15
|
+
period?: string;
|
|
16
|
+
}
|
|
17
|
+
export declare function ChannelMixBars({ rows, total, period }: ChannelMixBarsProps): import("react").JSX.Element;
|
|
18
|
+
//# sourceMappingURL=ChannelMixBars.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChannelMixBars.d.ts","sourceRoot":"","sources":["../../react/ChannelMixBars.tsx"],"names":[],"mappings":"AAQA,MAAM,WAAW,aAAa;IAC5B,0DAA0D;IAC1D,IAAI,EAAE,MAAM,CAAC;IACb,uDAAuD;IACvD,KAAK,EAAE,MAAM,CAAC;IACd,6EAA6E;IAC7E,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,kEAAkE;IAClE,IAAI,CAAC,EAAE,aAAa,EAAE,CAAC;IACvB,4DAA4D;IAC5D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2DAA2D;IAC3D,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,cAAc,CAAC,EAAE,IAAS,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,mBAAmB,+BAuB/E"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
export function ChannelMixBars({ rows = [], total, period }) {
|
|
3
|
+
const max = Math.max(...rows.map((r) => Number(r.value) || 0), 1);
|
|
4
|
+
return (_jsxs("div", { className: "bk-channel-mix", children: [_jsxs("div", { className: "bk-channel-mix__head", children: [_jsx("div", { className: "bk-channel-mix__title", children: period || "Channel split" }), total && _jsxs("div", { className: "bk-channel-mix__total", children: ["Total \u00B7 ", total] })] }), rows.map((r, i) => (_jsxs("div", { className: "bk-channel-mix__row", children: [_jsx("div", { className: "bk-channel-mix__name", children: r.name }), _jsx("div", { className: "bk-channel-mix__bar", children: _jsx("div", { className: `bk-channel-mix__fill${i > 0 ? ` bk-channel-mix__fill--${Math.min(i + 1, 5)}` : ""}`, style: { width: `${(Number(r.value) / max) * 100}%` } }) }), _jsx("div", { className: "bk-channel-mix__val", children: r.display || r.value })] }, i)))] }));
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=ChannelMixBars.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChannelMixBars.js","sourceRoot":"","sources":["../../react/ChannelMixBars.tsx"],"names":[],"mappings":";AA0BA,MAAM,UAAU,cAAc,CAAC,EAAE,IAAI,GAAG,EAAE,EAAE,KAAK,EAAE,MAAM,EAAuB;IAC9E,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAElE,OAAO,CACL,eAAK,SAAS,EAAC,gBAAgB,aAC7B,eAAK,SAAS,EAAC,sBAAsB,aACnC,cAAK,SAAS,EAAC,uBAAuB,YAAE,MAAM,IAAI,eAAe,GAAO,EACvE,KAAK,IAAI,eAAK,SAAS,EAAC,uBAAuB,8BAAU,KAAK,IAAO,IAClE,EACL,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAClB,eAAa,SAAS,EAAC,qBAAqB,aAC1C,cAAK,SAAS,EAAC,sBAAsB,YAAE,CAAC,CAAC,IAAI,GAAO,EACpD,cAAK,SAAS,EAAC,qBAAqB,YAClC,cACE,SAAS,EAAE,uBAAuB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,0BAA0B,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAC/F,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,EAAE,GACrD,GACE,EACN,cAAK,SAAS,EAAC,qBAAqB,YAAE,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,KAAK,GAAO,KARzD,CAAC,CASL,CACP,CAAC,IACE,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface ChecklistEntry {
|
|
2
|
+
title: string;
|
|
3
|
+
sub?: string;
|
|
4
|
+
done?: boolean;
|
|
5
|
+
}
|
|
6
|
+
export interface ChecklistProps {
|
|
7
|
+
items: ChecklistEntry[];
|
|
8
|
+
}
|
|
9
|
+
export declare function Checklist({ items }: ChecklistProps): import("react").JSX.Element | null;
|
|
10
|
+
//# sourceMappingURL=Checklist.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Checklist.d.ts","sourceRoot":"","sources":["../../react/Checklist.tsx"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,cAAc,EAAE,CAAC;CACzB;AAED,wBAAgB,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE,cAAc,sCAoBlD"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
export function Checklist({ items }) {
|
|
3
|
+
if (!items || items.length === 0)
|
|
4
|
+
return null;
|
|
5
|
+
return (_jsx("ul", { className: "bk-checklist", children: items.map((it, i) => (_jsxs("li", { className: `bk-checklist__item${it.done ? " bk-checklist__item--done" : ""}`, children: [_jsx("span", { className: "bk-checklist__box", "aria-hidden": "true", children: it.done ? "✓" : "" }), _jsxs("span", { className: "bk-checklist__text", children: [_jsx("span", { className: "bk-checklist__title", children: it.title }), it.sub && _jsx("span", { className: "bk-checklist__sub", children: it.sub })] })] }, i))) }));
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=Checklist.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Checklist.js","sourceRoot":"","sources":["../../react/Checklist.tsx"],"names":[],"mappings":";AAUA,MAAM,UAAU,SAAS,CAAC,EAAE,KAAK,EAAkB;IACjD,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC9C,OAAO,CACL,aAAI,SAAS,EAAC,cAAc,YACzB,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CACpB,cAEE,SAAS,EAAE,qBAAqB,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,EAAE,EAAE,aAE5E,eAAM,SAAS,EAAC,mBAAmB,iBAAa,MAAM,YACnD,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GACd,EACP,gBAAM,SAAS,EAAC,oBAAoB,aAClC,eAAM,SAAS,EAAC,qBAAqB,YAAE,EAAE,CAAC,KAAK,GAAQ,EACtD,EAAE,CAAC,GAAG,IAAI,eAAM,SAAS,EAAC,mBAAmB,YAAE,EAAE,CAAC,GAAG,GAAQ,IACzD,KATF,CAAC,CAUH,CACN,CAAC,GACC,CACN,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export interface ChecklistItemProps {
|
|
2
|
+
checked: boolean;
|
|
3
|
+
label: string;
|
|
4
|
+
description?: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function ChecklistItem({ checked, label, description }: ChecklistItemProps): import("react").JSX.Element;
|
|
7
|
+
//# sourceMappingURL=ChecklistItem.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChecklistItem.d.ts","sourceRoot":"","sources":["../../react/ChecklistItem.tsx"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,aAAa,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,kBAAkB,+BAYhF"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
export function ChecklistItem({ checked, label, description }) {
|
|
3
|
+
return (_jsxs("div", { className: `bk-checklist-item${checked ? " bk-checklist-item--checked" : ""}`, children: [_jsx("span", { className: "bk-checklist-item__box", "aria-hidden": !checked, children: checked ? "✓" : "" }), _jsxs("span", { className: "bk-checklist-item__text", children: [_jsx("span", { className: "bk-checklist-item__label", children: label }), description && _jsx("span", { className: "bk-checklist-item__desc", children: description })] })] }));
|
|
4
|
+
}
|
|
5
|
+
//# sourceMappingURL=ChecklistItem.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChecklistItem.js","sourceRoot":"","sources":["../../react/ChecklistItem.tsx"],"names":[],"mappings":";AAMA,MAAM,UAAU,aAAa,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAsB;IAC/E,OAAO,CACL,eAAK,SAAS,EAAE,oBAAoB,OAAO,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,EAAE,EAAE,aAChF,eAAM,SAAS,EAAC,wBAAwB,iBAAc,CAAC,OAAO,YAC3D,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GACd,EACP,gBAAM,SAAS,EAAC,yBAAyB,aACvC,eAAM,SAAS,EAAC,0BAA0B,YAAE,KAAK,GAAQ,EACxD,WAAW,IAAI,eAAM,SAAS,EAAC,yBAAyB,YAAE,WAAW,GAAQ,IACzE,IACH,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export interface CodeSnippetProps {
|
|
2
|
+
/** The raw code to display and copy. */
|
|
3
|
+
code: string;
|
|
4
|
+
/** Language hint, used for the label and the `language-*` class. */
|
|
5
|
+
language?: string;
|
|
6
|
+
/** Optional filename shown in the header instead of the language. */
|
|
7
|
+
filename?: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* A dark, framework-agnostic code block with a header bar and a
|
|
11
|
+
* copy-to-clipboard button. The copy interaction is handled by the
|
|
12
|
+
* shared vanilla-JS behaviour, which attaches via the [data-bk-code]
|
|
13
|
+
* hook on load — no framework state. The raw source is carried in a
|
|
14
|
+
* hidden <template> so the script can copy the exact text.
|
|
15
|
+
*/
|
|
16
|
+
export declare function CodeSnippet({ code, language, filename }: CodeSnippetProps): import("react").JSX.Element;
|
|
17
|
+
//# sourceMappingURL=CodeSnippet.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CodeSnippet.d.ts","sourceRoot":"","sources":["../../react/CodeSnippet.tsx"],"names":[],"mappings":"AAEA,MAAM,WAAW,gBAAgB;IAC/B,wCAAwC;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,oEAAoE;IACpE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qEAAqE;IACrE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,EAAE,IAAI,EAAE,QAAiB,EAAE,QAAQ,EAAE,EAAE,gBAAgB,+BAiBlF"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { ICONS } from "../core/icons.js";
|
|
3
|
+
/**
|
|
4
|
+
* A dark, framework-agnostic code block with a header bar and a
|
|
5
|
+
* copy-to-clipboard button. The copy interaction is handled by the
|
|
6
|
+
* shared vanilla-JS behaviour, which attaches via the [data-bk-code]
|
|
7
|
+
* hook on load — no framework state. The raw source is carried in a
|
|
8
|
+
* hidden <template> so the script can copy the exact text.
|
|
9
|
+
*/
|
|
10
|
+
export function CodeSnippet({ code, language = "text", filename }) {
|
|
11
|
+
const label = filename || (language !== "text" ? language : "code");
|
|
12
|
+
return (_jsxs("div", { className: "bk-code", "data-bk-code": true, children: [_jsxs("div", { className: "bk-code__bar", children: [_jsx("span", { className: "bk-code__label", children: label }), _jsxs("button", { type: "button", className: "bk-code__copy", "data-bk-code-copy": true, children: [_jsx("span", { className: "bk-code__copy-icon", dangerouslySetInnerHTML: { __html: ICONS.copy } }), _jsx("span", { className: "bk-code__copy-label", children: "Copy" })] })] }), _jsx("pre", { className: "bk-code__pre", children: _jsx("code", { className: `bk-code__code language-${language}`, children: code }) })] }));
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=CodeSnippet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CodeSnippet.js","sourceRoot":"","sources":["../../react/CodeSnippet.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAWtC;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,EAAE,IAAI,EAAE,QAAQ,GAAG,MAAM,EAAE,QAAQ,EAAoB;IACjF,MAAM,KAAK,GAAG,QAAQ,IAAI,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAEpE,OAAO,CACL,eAAK,SAAS,EAAC,SAAS,mCACtB,eAAK,SAAS,EAAC,cAAc,aAC3B,eAAM,SAAS,EAAC,gBAAgB,YAAE,KAAK,GAAQ,EAC/C,kBAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,eAAe,wCAC7C,eAAM,SAAS,EAAC,oBAAoB,EAAC,uBAAuB,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,GAAI,EACxF,eAAM,SAAS,EAAC,qBAAqB,qBAAY,IAC1C,IACL,EACN,cAAK,SAAS,EAAC,cAAc,YAC3B,eAAM,SAAS,EAAE,0BAA0B,QAAQ,EAAE,YAAG,IAAI,GAAQ,GAChE,IACF,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export interface ComparisonItem {
|
|
2
|
+
feature: string;
|
|
3
|
+
optionA: string;
|
|
4
|
+
optionB: string;
|
|
5
|
+
/** Which column wins this row, if any. */
|
|
6
|
+
winner?: "a" | "b" | "tie";
|
|
7
|
+
}
|
|
8
|
+
export interface ComparisonTableProps {
|
|
9
|
+
/** Optional heading rendered above the table. */
|
|
10
|
+
title?: string;
|
|
11
|
+
optionALabel: string;
|
|
12
|
+
optionBLabel: string;
|
|
13
|
+
items?: ComparisonItem[];
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Side-by-side comparison of two options across a set of features.
|
|
17
|
+
* Renders twice: stacked cards on mobile (avoids the hidden-horizontal-
|
|
18
|
+
* scroll trap) and a table on tablet/desktop. The behaviour script adds a
|
|
19
|
+
* scroll-edge hint to the table when it overflows its container.
|
|
20
|
+
*/
|
|
21
|
+
export declare function ComparisonTable({ title, optionALabel, optionBLabel, items, }: ComparisonTableProps): import("react").JSX.Element | null;
|
|
22
|
+
//# sourceMappingURL=ComparisonTable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ComparisonTable.d.ts","sourceRoot":"","sources":["../../react/ComparisonTable.tsx"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,0CAA0C;IAC1C,MAAM,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,KAAK,CAAC;CAC5B;AAED,MAAM,WAAW,oBAAoB;IACnC,iDAAiD;IACjD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,cAAc,EAAE,CAAC;CAC1B;AAgBD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,EAC9B,KAAK,EACL,YAAY,EACZ,YAAY,EACZ,KAAU,GACX,EAAE,oBAAoB,sCA6DtB"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
const TICK = "✓";
|
|
3
|
+
const CROSS = "✕";
|
|
4
|
+
/** Normalise a cell value: tick/"yes" and cross/"no" become glyph marks. */
|
|
5
|
+
function resolveCell(text) {
|
|
6
|
+
const v = String(text ?? "").trim();
|
|
7
|
+
const lower = v.toLowerCase();
|
|
8
|
+
if (v === TICK || lower === "yes")
|
|
9
|
+
return { kind: "yes", text: TICK };
|
|
10
|
+
if (v === CROSS || lower === "no")
|
|
11
|
+
return { kind: "no", text: CROSS };
|
|
12
|
+
return { kind: "text", text: v };
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Side-by-side comparison of two options across a set of features.
|
|
16
|
+
* Renders twice: stacked cards on mobile (avoids the hidden-horizontal-
|
|
17
|
+
* scroll trap) and a table on tablet/desktop. The behaviour script adds a
|
|
18
|
+
* scroll-edge hint to the table when it overflows its container.
|
|
19
|
+
*/
|
|
20
|
+
export function ComparisonTable({ title, optionALabel, optionBLabel, items = [], }) {
|
|
21
|
+
if (!items || items.length === 0)
|
|
22
|
+
return null;
|
|
23
|
+
return (_jsxs("div", { className: "bk-comparison", children: [title && _jsx("h3", { className: "bk-comparison__title", children: title }), _jsx("div", { className: "bk-comparison__cards", children: items.map((item, i) => (_jsxs("div", { className: "bk-comparison__card", children: [_jsx("div", { className: "bk-comparison__card-feature", children: item.feature }), _jsxs("div", { className: `bk-comparison__card-row${item.winner === "a" ? " bk-comparison__card-row--best" : ""}`, children: [_jsx("span", { className: "bk-comparison__card-label", children: optionALabel }), _jsx(ComparisonValue, { text: item.optionA, best: item.winner === "a" })] }), _jsxs("div", { className: `bk-comparison__card-row${item.winner === "b" ? " bk-comparison__card-row--best" : ""}`, children: [_jsx("span", { className: "bk-comparison__card-label", children: optionBLabel }), _jsx(ComparisonValue, { text: item.optionB, best: item.winner === "b" })] })] }, i))) }), _jsx("div", { className: "bk-comparison__table-wrap", "data-bk-comparison": true, children: _jsx("div", { className: "bk-comparison__scroll", children: _jsxs("table", { className: "bk-comparison__table", children: [_jsx("thead", { children: _jsxs("tr", { children: [_jsx("th", { className: "bk-comparison__th", children: "Feature" }), _jsx("th", { className: "bk-comparison__th", children: optionALabel }), _jsx("th", { className: "bk-comparison__th", children: optionBLabel })] }) }), _jsx("tbody", { children: items.map((item, i) => (_jsxs("tr", { className: "bk-comparison__tr", children: [_jsx("td", { className: "bk-comparison__td bk-comparison__td--feature", children: item.feature }), _jsx("td", { className: `bk-comparison__td${item.winner === "a" ? " bk-comparison__td--best" : ""}`, children: _jsx(ComparisonValue, { text: item.optionA, best: item.winner === "a" }) }), _jsx("td", { className: `bk-comparison__td${item.winner === "b" ? " bk-comparison__td--best" : ""}`, children: _jsx(ComparisonValue, { text: item.optionB, best: item.winner === "b" }) })] }, i))) })] }) }) })] }));
|
|
24
|
+
}
|
|
25
|
+
function ComparisonValue({ text, best }) {
|
|
26
|
+
const cell = resolveCell(text);
|
|
27
|
+
if (cell.kind === "yes") {
|
|
28
|
+
return _jsx("span", { className: "bk-comparison__mark bk-comparison__mark--yes", children: cell.text });
|
|
29
|
+
}
|
|
30
|
+
if (cell.kind === "no") {
|
|
31
|
+
return _jsx("span", { className: "bk-comparison__mark bk-comparison__mark--no", children: cell.text });
|
|
32
|
+
}
|
|
33
|
+
return _jsx("span", { className: best ? "bk-comparison__value--best" : undefined, children: cell.text });
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=ComparisonTable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ComparisonTable.js","sourceRoot":"","sources":["../../react/ComparisonTable.tsx"],"names":[],"mappings":";AAgBA,MAAM,IAAI,GAAG,GAAG,CAAC;AACjB,MAAM,KAAK,GAAG,GAAG,CAAC;AAIlB,4EAA4E;AAC5E,SAAS,WAAW,CAAC,IAAY;IAC/B,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACpC,MAAM,KAAK,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IAC9B,IAAI,CAAC,KAAK,IAAI,IAAI,KAAK,KAAK,KAAK;QAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACtE,IAAI,CAAC,KAAK,KAAK,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IACtE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AACnC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,EAC9B,KAAK,EACL,YAAY,EACZ,YAAY,EACZ,KAAK,GAAG,EAAE,GACW;IACrB,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAE9C,OAAO,CACL,eAAK,SAAS,EAAC,eAAe,aAC3B,KAAK,IAAI,aAAI,SAAS,EAAC,sBAAsB,YAAE,KAAK,GAAM,EAE3D,cAAK,SAAS,EAAC,sBAAsB,YAClC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CACtB,eAAK,SAAS,EAAC,qBAAqB,aAClC,cAAK,SAAS,EAAC,6BAA6B,YAAE,IAAI,CAAC,OAAO,GAAO,EACjE,eACE,SAAS,EAAE,0BAA0B,IAAI,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,gCAAgC,CAAC,CAAC,CAAC,EAAE,EAAE,aAElG,eAAM,SAAS,EAAC,2BAA2B,YAAE,YAAY,GAAQ,EACjE,KAAC,eAAe,IAAC,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,KAAK,GAAG,GAAI,IAC9D,EACN,eACE,SAAS,EAAE,0BAA0B,IAAI,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,gCAAgC,CAAC,CAAC,CAAC,EAAE,EAAE,aAElG,eAAM,SAAS,EAAC,2BAA2B,YAAE,YAAY,GAAQ,EACjE,KAAC,eAAe,IAAC,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,KAAK,GAAG,GAAI,IAC9D,KAbkC,CAAC,CAcrC,CACP,CAAC,GACE,EAEN,cAAK,SAAS,EAAC,2BAA2B,wCACxC,cAAK,SAAS,EAAC,uBAAuB,YACpC,iBAAO,SAAS,EAAC,sBAAsB,aACrC,0BACE,yBACE,aAAI,SAAS,EAAC,mBAAmB,wBAAa,EAC9C,aAAI,SAAS,EAAC,mBAAmB,YAAE,YAAY,GAAM,EACrD,aAAI,SAAS,EAAC,mBAAmB,YAAE,YAAY,GAAM,IAClD,GACC,EACR,0BACG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CACtB,cAAI,SAAS,EAAC,mBAAmB,aAC/B,aAAI,SAAS,EAAC,8CAA8C,YACzD,IAAI,CAAC,OAAO,GACV,EACL,aACE,SAAS,EAAE,oBAAoB,IAAI,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,EAAE,EAAE,YAEtF,KAAC,eAAe,IAAC,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,KAAK,GAAG,GAAI,GAC/D,EACL,aACE,SAAS,EAAE,oBAAoB,IAAI,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,EAAE,EAAE,YAEtF,KAAC,eAAe,IAAC,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,KAAK,GAAG,GAAI,GAC/D,KAbgC,CAAC,CAcnC,CACN,CAAC,GACI,IACF,GACJ,GACF,IACF,CACP,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,EAAE,IAAI,EAAE,IAAI,EAAoC;IACvE,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QACxB,OAAO,eAAM,SAAS,EAAC,8CAA8C,YAAE,IAAI,CAAC,IAAI,GAAQ,CAAC;IAC3F,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;QACvB,OAAO,eAAM,SAAS,EAAC,6CAA6C,YAAE,IAAI,CAAC,IAAI,GAAQ,CAAC;IAC1F,CAAC;IACD,OAAO,eAAM,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,SAAS,YAAG,IAAI,CAAC,IAAI,GAAQ,CAAC;AAC9F,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
export interface DefinitionProps {
|
|
3
|
+
term: string;
|
|
4
|
+
name?: string;
|
|
5
|
+
pronunciation?: string;
|
|
6
|
+
children?: ReactNode;
|
|
7
|
+
}
|
|
8
|
+
export declare function Definition({ term, name, pronunciation, children }: DefinitionProps): import("react").JSX.Element;
|
|
9
|
+
//# sourceMappingURL=Definition.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Definition.d.ts","sourceRoot":"","sources":["../../react/Definition.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,wBAAgB,UAAU,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,EAAE,eAAe,+BA0BlF"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
export function Definition({ term, name, pronunciation, children }) {
|
|
3
|
+
// `term` is meant to be a 2-3 char monogram. If an author passes a full
|
|
4
|
+
// phrase, derive initials so the tile doesn't overflow.
|
|
5
|
+
const rawTerm = String(term ?? "").trim();
|
|
6
|
+
const looksLikePhrase = rawTerm.length > 4 || /\s|-/.test(rawTerm);
|
|
7
|
+
const monogram = looksLikePhrase
|
|
8
|
+
? rawTerm
|
|
9
|
+
.split(/[\s-]+/)
|
|
10
|
+
.map((w) => w[0])
|
|
11
|
+
.filter(Boolean)
|
|
12
|
+
.join("")
|
|
13
|
+
.slice(0, 3)
|
|
14
|
+
.toUpperCase()
|
|
15
|
+
: rawTerm.toUpperCase();
|
|
16
|
+
const resolvedName = name ?? (looksLikePhrase ? rawTerm : undefined);
|
|
17
|
+
return (_jsxs("div", { className: "bk-definition", children: [_jsx("div", { className: "bk-definition__monogram", "aria-hidden": "true", children: monogram }), _jsxs("div", { className: "bk-definition__content", children: [resolvedName && _jsx("p", { className: "bk-definition__name", children: resolvedName }), pronunciation && _jsx("p", { className: "bk-definition__pronunciation", children: pronunciation }), _jsx("p", { className: "bk-definition__body", children: children })] })] }));
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=Definition.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Definition.js","sourceRoot":"","sources":["../../react/Definition.tsx"],"names":[],"mappings":";AASA,MAAM,UAAU,UAAU,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAmB;IACjF,wEAAwE;IACxE,wDAAwD;IACxD,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC1C,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACnE,MAAM,QAAQ,GAAG,eAAe;QAC9B,CAAC,CAAC,OAAO;aACJ,KAAK,CAAC,QAAQ,CAAC;aACf,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aAChB,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,CAAC,EAAE,CAAC;aACR,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;aACX,WAAW,EAAE;QAClB,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;IAC1B,MAAM,YAAY,GAAG,IAAI,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAErE,OAAO,CACL,eAAK,SAAS,EAAC,eAAe,aAC5B,cAAK,SAAS,EAAC,yBAAyB,iBAAa,MAAM,YAAE,QAAQ,GAAO,EAC5E,eAAK,SAAS,EAAC,wBAAwB,aACpC,YAAY,IAAI,YAAG,SAAS,EAAC,qBAAqB,YAAE,YAAY,GAAK,EACrE,aAAa,IAAI,YAAG,SAAS,EAAC,8BAA8B,YAAE,aAAa,GAAK,EACjF,YAAG,SAAS,EAAC,qBAAqB,YAAE,QAAQ,GAAK,IAC7C,IACF,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface DeliveryComparisonRow {
|
|
2
|
+
/** Bold row label (the left-hand criterion name). */
|
|
3
|
+
label: string;
|
|
4
|
+
/** Optional secondary line shown under the label. */
|
|
5
|
+
sub?: string;
|
|
6
|
+
/** One value per column, in the same order as `columns`. */
|
|
7
|
+
values: string[];
|
|
8
|
+
}
|
|
9
|
+
export interface DeliveryComparisonProps {
|
|
10
|
+
/** Column headers. The matrix renders a blank header above the label column. */
|
|
11
|
+
columns?: string[];
|
|
12
|
+
/** One entry per criterion row. Renders nothing if empty. */
|
|
13
|
+
rows?: DeliveryComparisonRow[];
|
|
14
|
+
}
|
|
15
|
+
export declare function DeliveryComparison({ columns, rows }: DeliveryComparisonProps): import("react").JSX.Element | null;
|
|
16
|
+
//# sourceMappingURL=DeliveryComparison.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DeliveryComparison.d.ts","sourceRoot":"","sources":["../../react/DeliveryComparison.tsx"],"names":[],"mappings":"AASA,MAAM,WAAW,qBAAqB;IACpC,qDAAqD;IACrD,KAAK,EAAE,MAAM,CAAC;IACd,qDAAqD;IACrD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,4DAA4D;IAC5D,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,uBAAuB;IACtC,gFAAgF;IAChF,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,6DAA6D;IAC7D,IAAI,CAAC,EAAE,qBAAqB,EAAE,CAAC;CAChC;AAED,wBAAgB,kBAAkB,CAAC,EAAE,OAAY,EAAE,IAAS,EAAE,EAAE,uBAAuB,sCAoCtF"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
export function DeliveryComparison({ columns = [], rows = [] }) {
|
|
3
|
+
if (!rows || rows.length === 0)
|
|
4
|
+
return null;
|
|
5
|
+
return (_jsx("div", { className: "bk-delivery-comparison", "data-bk-delivery-comparison": true, children: _jsx("div", { className: "bk-delivery-comparison__scroll", children: _jsxs("table", { className: "bk-delivery-comparison__table", children: [_jsx("thead", { children: _jsxs("tr", { children: [_jsx("th", { className: "bk-delivery-comparison__th" }), columns.map((c, i) => (_jsx("th", { className: "bk-delivery-comparison__th", children: c }, i)))] }) }), _jsx("tbody", { children: rows.map((r, i) => (_jsxs("tr", { className: "bk-delivery-comparison__tr", children: [_jsxs("td", { className: "bk-delivery-comparison__td bk-delivery-comparison__td--label", children: [_jsx("strong", { className: "bk-delivery-comparison__label", children: r.label }), r.sub] }), r.values.map((v, j) => (_jsx("td", { className: "bk-delivery-comparison__td", children: v }, j)))] }, i))) })] }) }) }));
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=DeliveryComparison.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DeliveryComparison.js","sourceRoot":"","sources":["../../react/DeliveryComparison.tsx"],"names":[],"mappings":";AAyBA,MAAM,UAAU,kBAAkB,CAAC,EAAE,OAAO,GAAG,EAAE,EAAE,IAAI,GAAG,EAAE,EAA2B;IACrF,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAE5C,OAAO,CACL,cAAK,SAAS,EAAC,wBAAwB,iDACrC,cAAK,SAAS,EAAC,gCAAgC,YAC7C,iBAAO,SAAS,EAAC,+BAA+B,aAC9C,0BACE,yBACE,aAAI,SAAS,EAAC,4BAA4B,GAAG,EAC5C,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CACrB,aAAI,SAAS,EAAC,4BAA4B,YACvC,CAAC,IAD4C,CAAC,CAE5C,CACN,CAAC,IACC,GACC,EACR,0BACG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAClB,cAAI,SAAS,EAAC,4BAA4B,aACxC,cAAI,SAAS,EAAC,8DAA8D,aAC1E,iBAAQ,SAAS,EAAC,+BAA+B,YAAE,CAAC,CAAC,KAAK,GAAU,EACnE,CAAC,CAAC,GAAG,IACH,EACJ,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CACtB,aAAI,SAAS,EAAC,4BAA4B,YACvC,CAAC,IAD4C,CAAC,CAE5C,CACN,CAAC,KAT4C,CAAC,CAU5C,CACN,CAAC,GACI,IACF,GACJ,GACF,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
export interface FAQItem {
|
|
3
|
+
q: string;
|
|
4
|
+
/** Body text. Split into paragraphs on blank lines. Inline HTML is rendered. */
|
|
5
|
+
a: string;
|
|
6
|
+
}
|
|
7
|
+
export interface FAQListProps {
|
|
8
|
+
/** Q&A pairs. Optional — children may carry the body instead (MDX). */
|
|
9
|
+
items?: FAQItem[];
|
|
10
|
+
/** Optional heading rendered above the list. */
|
|
11
|
+
heading?: string;
|
|
12
|
+
children?: ReactNode;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Expandable Q&A list built on native <details> for accessibility and SEO.
|
|
16
|
+
* The first item is open by default to signal interaction. The behaviour
|
|
17
|
+
* script lifts every rendered Q&A pair into FAQPage JSON-LD on load.
|
|
18
|
+
*/
|
|
19
|
+
export declare function FAQList({ items, heading, children }: FAQListProps): import("react").JSX.Element;
|
|
20
|
+
//# sourceMappingURL=FAQList.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FAQList.d.ts","sourceRoot":"","sources":["../../react/FAQList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,MAAM,WAAW,OAAO;IACtB,CAAC,EAAE,MAAM,CAAC;IACV,gFAAgF;IAChF,CAAC,EAAE,MAAM,CAAC;CACX;AAED,MAAM,WAAW,YAAY;IAC3B,uEAAuE;IACvE,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;IAClB,gDAAgD;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AASD;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,YAAY,+BAgCjE"}
|