@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,19 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/** Split an answer body into paragraphs on blank lines. */
|
|
3
|
+
function toParagraphs(a) {
|
|
4
|
+
return String(a ?? "")
|
|
5
|
+
.split(/\n{2,}/)
|
|
6
|
+
.filter(Boolean);
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Expandable Q&A list built on native <details> for accessibility and SEO.
|
|
10
|
+
* The first item is open by default to signal interaction. The behaviour
|
|
11
|
+
* script lifts every rendered Q&A pair into FAQPage JSON-LD on load.
|
|
12
|
+
*/
|
|
13
|
+
export function FAQList({ items, heading, children }) {
|
|
14
|
+
const list = items ?? [];
|
|
15
|
+
return (_jsxs("div", { className: "bk-faq", "data-bk-faq": true, children: [heading && _jsx("p", { className: "bk-faq__heading", children: heading }), _jsx("div", { className: "bk-faq__list", children: list.length > 0
|
|
16
|
+
? list.map((it, i) => (_jsxs("details", { className: "bk-faq__item", open: i === 0, children: [_jsxs("summary", { className: "bk-faq__summary", children: [_jsx("span", { className: "bk-faq__question", children: it.q }), _jsxs("span", { className: "bk-faq__toggle", "aria-hidden": "true", children: [_jsx("span", { className: "bk-faq__bar bk-faq__bar--h" }), _jsx("span", { className: "bk-faq__bar bk-faq__bar--v" })] })] }), _jsx("div", { className: "bk-faq__answer", children: toParagraphs(it.a).map((p, j) => (_jsx("p", { className: "bk-faq__para", dangerouslySetInnerHTML: { __html: p } }, j))) })] }, i)))
|
|
17
|
+
: children })] }));
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=FAQList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FAQList.js","sourceRoot":"","sources":["../../react/FAQList.tsx"],"names":[],"mappings":";AAgBA,2DAA2D;AAC3D,SAAS,YAAY,CAAC,CAAS;IAC7B,OAAO,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;SACnB,KAAK,CAAC,QAAQ,CAAC;SACf,MAAM,CAAC,OAAO,CAAC,CAAC;AACrB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,OAAO,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAgB;IAChE,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;IAEzB,OAAO,CACL,eAAK,SAAS,EAAC,QAAQ,kCACpB,OAAO,IAAI,YAAG,SAAS,EAAC,iBAAiB,YAAE,OAAO,GAAK,EACxD,cAAK,SAAS,EAAC,cAAc,YAC1B,IAAI,CAAC,MAAM,GAAG,CAAC;oBACd,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAClB,mBAAS,SAAS,EAAC,cAAc,EAAS,IAAI,EAAE,CAAC,KAAK,CAAC,aACrD,mBAAS,SAAS,EAAC,iBAAiB,aAClC,eAAM,SAAS,EAAC,kBAAkB,YAAE,EAAE,CAAC,CAAC,GAAQ,EAChD,gBAAM,SAAS,EAAC,gBAAgB,iBAAa,MAAM,aACjD,eAAM,SAAS,EAAC,4BAA4B,GAAG,EAC/C,eAAM,SAAS,EAAC,4BAA4B,GAAG,IAC1C,IACC,EACV,cAAK,SAAS,EAAC,gBAAgB,YAC5B,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAChC,YACE,SAAS,EAAC,cAAc,EAExB,uBAAuB,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,IADjC,CAAC,CAEN,CACH,CAAC,GACE,KAhB+B,CAAC,CAiB9B,CACX,CAAC;oBACJ,CAAC,CAAC,QAAQ,GACR,IACF,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export interface FurtherReadingSource {
|
|
2
|
+
/** Display title of the linked resource. */
|
|
3
|
+
title: string;
|
|
4
|
+
/** Short source/publisher label shown on the right. */
|
|
5
|
+
source: string;
|
|
6
|
+
/** Destination URL (opens in a new tab, rel=nofollow). */
|
|
7
|
+
url: string;
|
|
8
|
+
}
|
|
9
|
+
export interface FurtherReadingProps {
|
|
10
|
+
/** List of external resources. Renders nothing when empty. */
|
|
11
|
+
sources?: FurtherReadingSource[];
|
|
12
|
+
/** Optional heading override (default "Further reading"). */
|
|
13
|
+
heading?: string;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Card listing external resources for further reading. Each row is a
|
|
17
|
+
* title linking out (new tab, nofollow) with a source label on the right.
|
|
18
|
+
* Rows are dashed-separated; the last row has no separator.
|
|
19
|
+
*/
|
|
20
|
+
export declare function FurtherReading({ sources, heading }: FurtherReadingProps): import("react").JSX.Element | null;
|
|
21
|
+
//# sourceMappingURL=FurtherReading.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FurtherReading.d.ts","sourceRoot":"","sources":["../../react/FurtherReading.tsx"],"names":[],"mappings":"AAAA,MAAM,WAAW,oBAAoB;IACnC,4CAA4C;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,uDAAuD;IACvD,MAAM,EAAE,MAAM,CAAC;IACf,0DAA0D;IAC1D,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,mBAAmB;IAClC,8DAA8D;IAC9D,OAAO,CAAC,EAAE,oBAAoB,EAAE,CAAC;IACjC,6DAA6D;IAC7D,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,mBAAmB,sCAwBvE"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* Card listing external resources for further reading. Each row is a
|
|
4
|
+
* title linking out (new tab, nofollow) with a source label on the right.
|
|
5
|
+
* Rows are dashed-separated; the last row has no separator.
|
|
6
|
+
*/
|
|
7
|
+
export function FurtherReading({ sources, heading }) {
|
|
8
|
+
const list = sources ?? [];
|
|
9
|
+
if (list.length === 0)
|
|
10
|
+
return null;
|
|
11
|
+
return (_jsxs("div", { className: "bk-further-reading", children: [_jsx("p", { className: "bk-further-reading__title", children: heading ?? "Further reading" }), _jsx("ul", { className: "bk-further-reading__list", children: list.map((s, i) => (_jsxs("li", { className: "bk-further-reading__item", children: [_jsx("a", { className: "bk-further-reading__link", href: s.url, target: "_blank", rel: "nofollow noopener noreferrer", children: s.title }), _jsx("span", { className: "bk-further-reading__source", children: s.source })] }, i))) })] }));
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=FurtherReading.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FurtherReading.js","sourceRoot":"","sources":["../../react/FurtherReading.tsx"],"names":[],"mappings":";AAgBA;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,EAAE,OAAO,EAAE,OAAO,EAAuB;IACtE,MAAM,IAAI,GAAG,OAAO,IAAI,EAAE,CAAC;IAC3B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEnC,OAAO,CACL,eAAK,SAAS,EAAC,oBAAoB,aACjC,YAAG,SAAS,EAAC,2BAA2B,YAAE,OAAO,IAAI,iBAAiB,GAAK,EAC3E,aAAI,SAAS,EAAC,0BAA0B,YACrC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAClB,cAAI,SAAS,EAAC,0BAA0B,aACtC,YACE,SAAS,EAAC,0BAA0B,EACpC,IAAI,EAAE,CAAC,CAAC,GAAG,EACX,MAAM,EAAC,QAAQ,EACf,GAAG,EAAC,8BAA8B,YAEjC,CAAC,CAAC,KAAK,GACN,EACJ,eAAM,SAAS,EAAC,4BAA4B,YAAE,CAAC,CAAC,MAAM,GAAQ,KATlB,CAAC,CAU1C,CACN,CAAC,GACC,IACD,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export interface ImageFeatureProps {
|
|
2
|
+
src: string;
|
|
3
|
+
alt: string;
|
|
4
|
+
caption?: string;
|
|
5
|
+
credit?: string;
|
|
6
|
+
position?: "left" | "right" | "full";
|
|
7
|
+
}
|
|
8
|
+
export declare function ImageFeature({ src, alt, caption, credit, position }: ImageFeatureProps): import("react").JSX.Element;
|
|
9
|
+
//# sourceMappingURL=ImageFeature.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ImageFeature.d.ts","sourceRoot":"","sources":["../../react/ImageFeature.tsx"],"names":[],"mappings":"AAGA,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;CACtC;AACD,wBAAgB,YAAY,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,QAAiB,EAAE,EAAE,iBAAiB,+BAe/F"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
export function ImageFeature({ src, alt, caption, credit, position = "full" }) {
|
|
3
|
+
const pos = position === "left" || position === "right" ? position : "full";
|
|
4
|
+
return (_jsxs("figure", { className: `bk-image-feature bk-image-feature--${pos}`, children: [_jsx("div", { className: "bk-image-feature__frame", children: _jsx("img", { className: "bk-image-feature__img", src: src, alt: alt, loading: "lazy", decoding: "async" }) }), (caption || credit) && (_jsxs("figcaption", { className: "bk-image-feature__caption", children: [caption && _jsx("span", { className: "bk-image-feature__text", children: caption }), credit && _jsx("span", { className: "bk-image-feature__credit", children: credit })] }))] }));
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=ImageFeature.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ImageFeature.js","sourceRoot":"","sources":["../../react/ImageFeature.tsx"],"names":[],"mappings":";AAUA,MAAM,UAAU,YAAY,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,GAAG,MAAM,EAAqB;IAC9F,MAAM,GAAG,GAAG,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;IAC5E,OAAO,CACL,kBAAQ,SAAS,EAAE,sCAAsC,GAAG,EAAE,aAC5D,cAAK,SAAS,EAAC,yBAAyB,YACtC,cAAK,SAAS,EAAC,uBAAuB,EAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAC,MAAM,EAAC,QAAQ,EAAC,OAAO,GAAG,GACzF,EACL,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CACtB,sBAAY,SAAS,EAAC,2BAA2B,aAC9C,OAAO,IAAI,eAAM,SAAS,EAAC,wBAAwB,YAAE,OAAO,GAAQ,EACpE,MAAM,IAAI,eAAM,SAAS,EAAC,0BAA0B,YAAE,MAAM,GAAQ,IAC1D,CACd,IACM,CACV,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Infographic.d.ts","sourceRoot":"","sources":["../../react/Infographic.tsx"],"names":[],"mappings":"AAMA,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACb;AACD,wBAAgB,WAAW,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,gBAAgB,sCAOzD"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
export function Infographic({ src, alt }) {
|
|
3
|
+
if (!src)
|
|
4
|
+
return null;
|
|
5
|
+
return (_jsx("figure", { className: "bk-infographic", children: _jsx("img", { className: "bk-infographic__img", src: src, alt: alt, loading: "lazy", decoding: "async" }) }));
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=Infographic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Infographic.js","sourceRoot":"","sources":["../../react/Infographic.tsx"],"names":[],"mappings":";AAUA,MAAM,UAAU,WAAW,CAAC,EAAE,GAAG,EAAE,GAAG,EAAoB;IACxD,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,OAAO,CACL,iBAAQ,SAAS,EAAC,gBAAgB,YAChC,cAAK,SAAS,EAAC,qBAAqB,EAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAC,MAAM,EAAC,QAAQ,EAAC,OAAO,GAAG,GACpF,CACV,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface KeyMetricProps {
|
|
2
|
+
/** The oversized headline figure, e.g. "3.2×" or "87%". */
|
|
3
|
+
number: string;
|
|
4
|
+
/** Short uppercase caption above the title. */
|
|
5
|
+
label?: string;
|
|
6
|
+
/** Rich-text headline; accepts inline HTML (rendered as markup). */
|
|
7
|
+
title?: string;
|
|
8
|
+
/** Supporting line under the title. */
|
|
9
|
+
sub?: string;
|
|
10
|
+
/** Optional source attribution, shown below in a dashed-divider row. */
|
|
11
|
+
source?: string;
|
|
12
|
+
/** Optional URL — when set alongside `source`, the row becomes a link. */
|
|
13
|
+
sourceUrl?: string;
|
|
14
|
+
}
|
|
15
|
+
export declare function KeyMetric({ number, label, title, sub, source, sourceUrl }: KeyMetricProps): import("react").JSX.Element;
|
|
16
|
+
//# sourceMappingURL=KeyMetric.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KeyMetric.d.ts","sourceRoot":"","sources":["../../react/KeyMetric.tsx"],"names":[],"mappings":"AAUA,MAAM,WAAW,cAAc;IAC7B,2DAA2D;IAC3D,MAAM,EAAE,MAAM,CAAC;IACf,+CAA+C;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oEAAoE;IACpE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uCAAuC;IACvC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,wEAAwE;IACxE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0EAA0E;IAC1E,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,SAAS,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,cAAc,+BAmCzF"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/* blog-kit React adapter — KeyMetric
|
|
3
|
+
Thin wrapper: all styling lives in core/css/components.css (.bk-key-metric).
|
|
4
|
+
A dark, full-width hero metric panel: one oversized brand-coloured number on
|
|
5
|
+
the left, and a copy column on the right (optional uppercase label, an
|
|
6
|
+
optional rich-text title that accepts inline HTML, an optional sub-line, and
|
|
7
|
+
an optional dashed-divider "SOURCE" attribution row that links out when a URL
|
|
8
|
+
is given). Ported from hjd's blog KeyMetric (+ inlined _StatSourceRow);
|
|
9
|
+
cyan/dark mapped to neutral tokens. */
|
|
10
|
+
import { ICONS } from "../core/icons.js";
|
|
11
|
+
export function KeyMetric({ number, label, title, sub, source, sourceUrl }) {
|
|
12
|
+
return (_jsxs("div", { className: "bk-key-metric", children: [_jsx("div", { className: "bk-key-metric__num", children: number }), _jsxs("div", { className: "bk-key-metric__copy", children: [label && _jsx("div", { className: "bk-key-metric__label", children: label }), title && (_jsx("p", { className: "bk-key-metric__title", dangerouslySetInnerHTML: { __html: title } })), sub && _jsx("p", { className: "bk-key-metric__sub", children: sub }), source &&
|
|
13
|
+
(sourceUrl ? (_jsxs("a", { className: "bk-key-metric__source bk-key-metric__source--link", href: sourceUrl, target: "_blank", rel: "nofollow noopener noreferrer", children: [_jsx("span", { className: "bk-key-metric__source-kicker", children: "Source" }), source, _jsx("span", { className: "bk-key-metric__source-icon", "aria-hidden": "true", dangerouslySetInnerHTML: { __html: ICONS["external"] } })] })) : (_jsxs("div", { className: "bk-key-metric__source", children: [_jsx("span", { className: "bk-key-metric__source-kicker", children: "Source" }), source] })))] })] }));
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=KeyMetric.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KeyMetric.js","sourceRoot":"","sources":["../../react/KeyMetric.tsx"],"names":[],"mappings":";AAAA;;;;;;;yCAOyC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAiBtC,MAAM,UAAU,SAAS,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAkB;IACxF,OAAO,CACL,eAAK,SAAS,EAAC,eAAe,aAC5B,cAAK,SAAS,EAAC,oBAAoB,YAAE,MAAM,GAAO,EAClD,eAAK,SAAS,EAAC,qBAAqB,aACjC,KAAK,IAAI,cAAK,SAAS,EAAC,sBAAsB,YAAE,KAAK,GAAO,EAC5D,KAAK,IAAI,CACR,YAAG,SAAS,EAAC,sBAAsB,EAAC,uBAAuB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,GAAI,CACnF,EACA,GAAG,IAAI,YAAG,SAAS,EAAC,oBAAoB,YAAE,GAAG,GAAK,EAClD,MAAM;wBACL,CAAC,SAAS,CAAC,CAAC,CAAC,CACX,aACE,SAAS,EAAC,mDAAmD,EAC7D,IAAI,EAAE,SAAS,EACf,MAAM,EAAC,QAAQ,EACf,GAAG,EAAC,8BAA8B,aAElC,eAAM,SAAS,EAAC,8BAA8B,uBAAc,EAC3D,MAAM,EACP,eACE,SAAS,EAAC,4BAA4B,iBAC1B,MAAM,EAClB,uBAAuB,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,EAAE,GACtD,IACA,CACL,CAAC,CAAC,CAAC,CACF,eAAK,SAAS,EAAC,uBAAuB,aACpC,eAAM,SAAS,EAAC,8BAA8B,uBAAc,EAC3D,MAAM,IACH,CACP,CAAC,IACA,IACF,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export interface KeywordRow {
|
|
2
|
+
keyword: string;
|
|
3
|
+
/** Monthly search volume, pre-formatted (e.g. "1.2k"). */
|
|
4
|
+
volume: string;
|
|
5
|
+
/** Keyword difficulty 0–100; bucketed low (<40) / med (<60) / high. */
|
|
6
|
+
difficulty: number;
|
|
7
|
+
/** Previous rank position; falls back to an em dash when absent. */
|
|
8
|
+
was?: number | string;
|
|
9
|
+
/** Current rank position. */
|
|
10
|
+
now: number | string;
|
|
11
|
+
/** Signed rank change; negative renders as a red down-arrow. */
|
|
12
|
+
delta: number | string;
|
|
13
|
+
}
|
|
14
|
+
export interface KeywordTableProps {
|
|
15
|
+
rows?: KeywordRow[];
|
|
16
|
+
}
|
|
17
|
+
export declare function KeywordTable({ rows }: KeywordTableProps): import("react").JSX.Element | null;
|
|
18
|
+
//# sourceMappingURL=KeywordTable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KeywordTable.d.ts","sourceRoot":"","sources":["../../react/KeywordTable.tsx"],"names":[],"mappings":"AAOA,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,0DAA0D;IAC1D,MAAM,EAAE,MAAM,CAAC;IACf,uEAAuE;IACvE,UAAU,EAAE,MAAM,CAAC;IACnB,oEAAoE;IACpE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,6BAA6B;IAC7B,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,gEAAgE;IAChE,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,UAAU,EAAE,CAAC;CACrB;AAiBD,wBAAgB,YAAY,CAAC,EAAE,IAAS,EAAE,EAAE,iBAAiB,sCAmD5D"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/** Bucket a 0–100 difficulty score into low / med / high. */
|
|
3
|
+
function difficultyBucket(difficulty) {
|
|
4
|
+
return difficulty < 40 ? "low" : difficulty < 60 ? "med" : "high";
|
|
5
|
+
}
|
|
6
|
+
/** A negative delta means the rank dropped (down); anything else is up. */
|
|
7
|
+
function deltaDirection(delta) {
|
|
8
|
+
return delta && String(delta).startsWith("-") ? "down" : "up";
|
|
9
|
+
}
|
|
10
|
+
/** Show the magnitude when numeric, else the raw value. */
|
|
11
|
+
function deltaDisplay(delta) {
|
|
12
|
+
return Math.abs(Number(delta)) || delta;
|
|
13
|
+
}
|
|
14
|
+
export function KeywordTable({ rows = [] }) {
|
|
15
|
+
if (!rows || rows.length === 0)
|
|
16
|
+
return null;
|
|
17
|
+
return (_jsx("div", { className: "bk-keyword-table", "data-bk-keyword-table": true, children: _jsx("div", { className: "bk-keyword-table__scroll", children: _jsxs("table", { className: "bk-keyword-table__table", children: [_jsx("thead", { children: _jsxs("tr", { children: [_jsx("th", { className: "bk-keyword-table__th", children: "Keyword" }), _jsx("th", { className: "bk-keyword-table__th bk-keyword-table__th--r", children: "Volume" }), _jsx("th", { className: "bk-keyword-table__th", children: "Difficulty" }), _jsx("th", { className: "bk-keyword-table__th bk-keyword-table__th--r", children: "Was" }), _jsx("th", { className: "bk-keyword-table__th bk-keyword-table__th--r", children: "Now" }), _jsx("th", { className: "bk-keyword-table__th bk-keyword-table__th--r", children: "\u0394" })] }) }), _jsx("tbody", { children: rows.map((r, i) => {
|
|
18
|
+
const diff = difficultyBucket(r.difficulty);
|
|
19
|
+
const direction = deltaDirection(r.delta);
|
|
20
|
+
return (_jsxs("tr", { className: "bk-keyword-table__tr", children: [_jsx("td", { className: "bk-keyword-table__td bk-keyword-table__td--kw", children: r.keyword }), _jsx("td", { className: "bk-keyword-table__td bk-keyword-table__td--r", children: r.volume }), _jsx("td", { className: "bk-keyword-table__td", children: _jsx("span", { className: `bk-keyword-table__diff bk-keyword-table__diff--${diff}`, children: r.difficulty }) }), _jsx("td", { className: "bk-keyword-table__td bk-keyword-table__td--r bk-keyword-table__rank", children: r.was ?? "—" }), _jsx("td", { className: "bk-keyword-table__td bk-keyword-table__td--r bk-keyword-table__rank", children: r.now }), _jsx("td", { className: "bk-keyword-table__td bk-keyword-table__td--r", children: _jsx("span", { className: `bk-keyword-table__delta bk-keyword-table__delta--${direction}`, children: deltaDisplay(r.delta) }) })] }, i));
|
|
21
|
+
}) })] }) }) }));
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=KeywordTable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KeywordTable.js","sourceRoot":"","sources":["../../react/KeywordTable.tsx"],"names":[],"mappings":";AAyBA,6DAA6D;AAC7D,SAAS,gBAAgB,CAAC,UAAkB;IAC1C,OAAO,UAAU,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;AACpE,CAAC;AAED,2EAA2E;AAC3E,SAAS,cAAc,CAAC,KAAsB;IAC5C,OAAO,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;AAChE,CAAC;AAED,2DAA2D;AAC3D,SAAS,YAAY,CAAC,KAAsB;IAC1C,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,EAAE,IAAI,GAAG,EAAE,EAAqB;IAC3D,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAE5C,OAAO,CACL,cAAK,SAAS,EAAC,kBAAkB,2CAC/B,cAAK,SAAS,EAAC,0BAA0B,YACvC,iBAAO,SAAS,EAAC,yBAAyB,aACxC,0BACE,yBACE,aAAI,SAAS,EAAC,sBAAsB,wBAAa,EACjD,aAAI,SAAS,EAAC,8CAA8C,uBAAY,EACxE,aAAI,SAAS,EAAC,sBAAsB,2BAAgB,EACpD,aAAI,SAAS,EAAC,8CAA8C,oBAAS,EACrE,aAAI,SAAS,EAAC,8CAA8C,oBAAS,EACrE,aAAI,SAAS,EAAC,8CAA8C,uBAAO,IAChE,GACC,EACR,0BACG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;4BACjB,MAAM,IAAI,GAAG,gBAAgB,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;4BAC5C,MAAM,SAAS,GAAG,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;4BAC1C,OAAO,CACL,cAAI,SAAS,EAAC,sBAAsB,aAClC,aAAI,SAAS,EAAC,+CAA+C,YAAE,CAAC,CAAC,OAAO,GAAM,EAC9E,aAAI,SAAS,EAAC,8CAA8C,YAAE,CAAC,CAAC,MAAM,GAAM,EAC5E,aAAI,SAAS,EAAC,sBAAsB,YAClC,eAAM,SAAS,EAAE,kDAAkD,IAAI,EAAE,YACtE,CAAC,CAAC,UAAU,GACR,GACJ,EACL,aAAI,SAAS,EAAC,qEAAqE,YAChF,CAAC,CAAC,GAAG,IAAI,GAAG,GACV,EACL,aAAI,SAAS,EAAC,qEAAqE,YAChF,CAAC,CAAC,GAAG,GACH,EACL,aAAI,SAAS,EAAC,8CAA8C,YAC1D,eACE,SAAS,EAAE,oDAAoD,SAAS,EAAE,YAEzE,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,GACjB,GACJ,KApBmC,CAAC,CAqBtC,CACN,CAAC;wBACJ,CAAC,CAAC,GACI,IACF,GACJ,GACF,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export type ListVariant = "ordered" | "bullet" | "check";
|
|
2
|
+
export interface ListProps {
|
|
3
|
+
/** "ordered" — zero-padded counters (01, 02, …); "bullet" — dot markers; "check" — tick marks. */
|
|
4
|
+
variant?: ListVariant;
|
|
5
|
+
/** Each item is an HTML string — use <strong>…</strong> for a bold lead-in. */
|
|
6
|
+
items: string[];
|
|
7
|
+
/** Optional uppercase heading rendered above the list. */
|
|
8
|
+
heading?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare function List({ variant, items, heading }: ListProps): import("react").JSX.Element | null;
|
|
11
|
+
//# sourceMappingURL=List.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"List.d.ts","sourceRoot":"","sources":["../../react/List.tsx"],"names":[],"mappings":"AAEA,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEzD,MAAM,WAAW,SAAS;IACxB,kGAAkG;IAClG,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,+EAA+E;IAC/E,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,0DAA0D;IAC1D,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAcD,wBAAgB,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,SAAS,sCAgC1D"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { ICONS } from "../core/icons.js";
|
|
3
|
+
const VARIANTS = {
|
|
4
|
+
ordered: "ordered",
|
|
5
|
+
numbered: "ordered",
|
|
6
|
+
number: "ordered",
|
|
7
|
+
bullet: "bullet",
|
|
8
|
+
bulleted: "bullet",
|
|
9
|
+
dot: "bullet",
|
|
10
|
+
check: "check",
|
|
11
|
+
checked: "check",
|
|
12
|
+
checklist: "check",
|
|
13
|
+
};
|
|
14
|
+
export function List({ variant, items, heading }) {
|
|
15
|
+
if (!Array.isArray(items) || items.length === 0)
|
|
16
|
+
return null;
|
|
17
|
+
const v = VARIANTS[(variant ?? "bullet").toLowerCase().trim()] ?? "bullet";
|
|
18
|
+
const Tag = v === "ordered" ? "ol" : "ul";
|
|
19
|
+
return (_jsxs("div", { className: `bk-list bk-list--${v}`, children: [heading && _jsx("p", { className: "bk-list__heading", children: heading }), _jsx(Tag, { className: "bk-list__items", children: items.map((item, i) => (_jsxs("li", { className: "bk-list__item", children: [v === "ordered" ? (_jsx("span", { className: "bk-list__marker", "aria-hidden": "true", children: String(i + 1).padStart(2, "0") })) : v === "check" ? (_jsx("span", { className: "bk-list__marker", "aria-hidden": "true", dangerouslySetInnerHTML: { __html: ICONS["check-tick"] } })) : (_jsx("span", { className: "bk-list__marker", "aria-hidden": "true" })), _jsx("span", { className: "bk-list__text", dangerouslySetInnerHTML: { __html: item } })] }, i))) })] }));
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=List.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"List.js","sourceRoot":"","sources":["../../react/List.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAatC,MAAM,QAAQ,GAAgC;IAC5C,OAAO,EAAE,SAAS;IAClB,QAAQ,EAAE,SAAS;IACnB,MAAM,EAAE,SAAS;IACjB,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,QAAQ;IAClB,GAAG,EAAE,QAAQ;IACb,KAAK,EAAE,OAAO;IACd,OAAO,EAAE,OAAO;IAChB,SAAS,EAAE,OAAO;CACnB,CAAC;AAEF,MAAM,UAAU,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAa;IACzD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7D,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,OAAO,IAAI,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,QAAQ,CAAC;IAC3E,MAAM,GAAG,GAAG,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1C,OAAO,CACL,eAAK,SAAS,EAAE,oBAAoB,CAAC,EAAE,aACpC,OAAO,IAAI,YAAG,SAAS,EAAC,kBAAkB,YAAE,OAAO,GAAK,EACzD,KAAC,GAAG,IAAC,SAAS,EAAC,gBAAgB,YAC5B,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CACtB,cAAI,SAAS,EAAC,eAAe,aAC1B,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CACjB,eAAM,SAAS,EAAC,iBAAiB,iBAAa,MAAM,YACjD,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,GAC1B,CACR,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAClB,eACE,SAAS,EAAC,iBAAiB,iBACf,MAAM,EAClB,uBAAuB,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,YAAY,CAAC,EAAE,GACxD,CACH,CAAC,CAAC,CAAC,CACF,eAAM,SAAS,EAAC,iBAAiB,iBAAa,MAAM,GAAG,CACxD,EACD,eACE,SAAS,EAAC,eAAe,EACzB,uBAAuB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,GACzC,KAjB+B,CAAC,CAkB/B,CACN,CAAC,GACE,IACF,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
interface Metric {
|
|
2
|
+
value: string;
|
|
3
|
+
label: string;
|
|
4
|
+
change?: string;
|
|
5
|
+
/** Optional source attribution, e.g. "Zuko form benchmarks, 2026". */
|
|
6
|
+
source?: string;
|
|
7
|
+
/** Optional URL — when set alongside `source`, the row becomes a link. */
|
|
8
|
+
sourceUrl?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface MetricHighlightProps {
|
|
11
|
+
metrics?: Metric[];
|
|
12
|
+
}
|
|
13
|
+
export declare function MetricHighlight({ metrics }: MetricHighlightProps): import("react").JSX.Element | null;
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=MetricHighlight.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MetricHighlight.d.ts","sourceRoot":"","sources":["../../react/MetricHighlight.tsx"],"names":[],"mappings":"AAQA,UAAU,MAAM;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sEAAsE;IACtE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0EAA0E;IAC1E,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AA8BD,wBAAgB,eAAe,CAAC,EAAE,OAAY,EAAE,EAAE,oBAAoB,sCAmCrE"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/* blog-kit React adapter — MetricHighlight
|
|
3
|
+
Thin wrapper: all styling lives in core/css/components.css (.bk-metric-highlight).
|
|
4
|
+
One or more headline metrics. A single metric renders as a big brand-filled
|
|
5
|
+
hero (giant value + label + optional change + optional SOURCE row); two or
|
|
6
|
+
more render as a responsive grid of bordered cards. The grid column count is
|
|
7
|
+
driven by a --metric-highlight--<n> modifier (2 | 3 | 4+). */
|
|
8
|
+
import { ICONS } from "../core/icons.js";
|
|
9
|
+
function SourceRow({ source, sourceUrl, dark }) {
|
|
10
|
+
const cls = `bk-metric-highlight__source${dark ? " bk-metric-highlight__source--dark" : ""}`;
|
|
11
|
+
if (sourceUrl) {
|
|
12
|
+
return (_jsxs("a", { className: `${cls} bk-metric-highlight__source--link`, href: sourceUrl, target: "_blank", rel: "nofollow noopener noreferrer", children: [_jsx("span", { className: "bk-metric-highlight__source-kicker", children: "Source" }), source, _jsx("span", { className: "bk-metric-highlight__source-icon", "aria-hidden": "true", dangerouslySetInnerHTML: { __html: ICONS["external"] } })] }));
|
|
13
|
+
}
|
|
14
|
+
return (_jsxs("div", { className: cls, children: [_jsx("span", { className: "bk-metric-highlight__source-kicker", children: "Source" }), source] }));
|
|
15
|
+
}
|
|
16
|
+
export function MetricHighlight({ metrics = [] }) {
|
|
17
|
+
if (!metrics || metrics.length === 0)
|
|
18
|
+
return null;
|
|
19
|
+
if (metrics.length === 1) {
|
|
20
|
+
const m = metrics[0];
|
|
21
|
+
return (_jsxs("div", { className: "bk-metric-highlight bk-metric-highlight--hero", children: [_jsx("div", { className: "bk-metric-highlight__hero-value", children: m.value }), _jsxs("div", { className: "bk-metric-highlight__hero-body", children: [m.change && _jsx("div", { className: "bk-metric-highlight__hero-change", children: m.change }), _jsx("div", { className: "bk-metric-highlight__hero-label", children: m.label }), m.source && _jsx(SourceRow, { source: m.source, sourceUrl: m.sourceUrl, dark: true })] })] }));
|
|
22
|
+
}
|
|
23
|
+
const cols = metrics.length === 2 ? 2 : metrics.length === 3 ? 3 : 4;
|
|
24
|
+
return (_jsx("div", { className: `bk-metric-highlight bk-metric-highlight--grid bk-metric-highlight--${cols}`, children: metrics.map((metric, i) => (_jsxs("div", { className: "bk-metric-highlight__card", children: [_jsx("div", { className: "bk-metric-highlight__value", children: metric.value }), _jsx("div", { className: "bk-metric-highlight__label", children: metric.label }), metric.change && _jsx("div", { className: "bk-metric-highlight__change", children: metric.change }), metric.source && (_jsx("div", { className: "bk-metric-highlight__source-wrap", children: _jsx(SourceRow, { source: metric.source, sourceUrl: metric.sourceUrl }) }))] }, i))) }));
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=MetricHighlight.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MetricHighlight.js","sourceRoot":"","sources":["../../react/MetricHighlight.tsx"],"names":[],"mappings":";AAAA;;;;;gEAKgE;AAChE,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAgBtC,SAAS,SAAS,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAA0D;IACpG,MAAM,GAAG,GAAG,8BAA8B,IAAI,CAAC,CAAC,CAAC,oCAAoC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IAC7F,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,CACL,aACE,SAAS,EAAE,GAAG,GAAG,oCAAoC,EACrD,IAAI,EAAE,SAAS,EACf,MAAM,EAAC,QAAQ,EACf,GAAG,EAAC,8BAA8B,aAElC,eAAM,SAAS,EAAC,oCAAoC,uBAAc,EACjE,MAAM,EACP,eACE,SAAS,EAAC,kCAAkC,iBAChC,MAAM,EAClB,uBAAuB,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,EAAE,GACtD,IACA,CACL,CAAC;IACJ,CAAC;IACD,OAAO,CACL,eAAK,SAAS,EAAE,GAAG,aACjB,eAAM,SAAS,EAAC,oCAAoC,uBAAc,EACjE,MAAM,IACH,CACP,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,EAAE,OAAO,GAAG,EAAE,EAAwB;IACpE,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAElD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACrB,OAAO,CACL,eAAK,SAAS,EAAC,+CAA+C,aAC5D,cAAK,SAAS,EAAC,iCAAiC,YAAE,CAAC,CAAC,KAAK,GAAO,EAChE,eAAK,SAAS,EAAC,gCAAgC,aAC5C,CAAC,CAAC,MAAM,IAAI,cAAK,SAAS,EAAC,kCAAkC,YAAE,CAAC,CAAC,MAAM,GAAO,EAC/E,cAAK,SAAS,EAAC,iCAAiC,YAAE,CAAC,CAAC,KAAK,GAAO,EAC/D,CAAC,CAAC,MAAM,IAAI,KAAC,SAAS,IAAC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,IAAI,SAAG,IACrE,IACF,CACP,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAErE,OAAO,CACL,cAAK,SAAS,EAAE,sEAAsE,IAAI,EAAE,YACzF,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAC1B,eAAK,SAAS,EAAC,2BAA2B,aACxC,cAAK,SAAS,EAAC,4BAA4B,YAAE,MAAM,CAAC,KAAK,GAAO,EAChE,cAAK,SAAS,EAAC,4BAA4B,YAAE,MAAM,CAAC,KAAK,GAAO,EAC/D,MAAM,CAAC,MAAM,IAAI,cAAK,SAAS,EAAC,6BAA6B,YAAE,MAAM,CAAC,MAAM,GAAO,EACnF,MAAM,CAAC,MAAM,IAAI,CAChB,cAAK,SAAS,EAAC,kCAAkC,YAC/C,KAAC,SAAS,IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,GAAI,GAC7D,CACP,KAR6C,CAAC,CAS3C,CACP,CAAC,GACE,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export interface NewsletterCTAProps {
|
|
2
|
+
heading?: string;
|
|
3
|
+
description?: string;
|
|
4
|
+
action?: string;
|
|
5
|
+
placeholder?: string;
|
|
6
|
+
buttonText?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function NewsletterCTA({ heading, description, action, placeholder, buttonText, }: NewsletterCTAProps): import("react").JSX.Element;
|
|
9
|
+
//# sourceMappingURL=NewsletterCTA.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NewsletterCTA.d.ts","sourceRoot":"","sources":["../../react/NewsletterCTA.tsx"],"names":[],"mappings":"AAKA,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AACD,wBAAgB,aAAa,CAAC,EAC5B,OAAmC,EACnC,WAAoF,EACpF,MAA0B,EAC1B,WAA8B,EAC9B,UAAwB,GACzB,EAAE,kBAAkB,+BA6BpB"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
export function NewsletterCTA({ heading = "One email, once a week.", description = "Field-tested ideas for turning chat traffic into revenue. No filler.", action = "/api/newsletter", placeholder = "you@studio.com", buttonText = "Subscribe", }) {
|
|
3
|
+
return (_jsxs("div", { className: "bk-newsletter", children: [_jsx("span", { className: "bk-newsletter__glow", "aria-hidden": "true" }), _jsxs("div", { className: "bk-newsletter__copy", children: [_jsx("h3", { className: "bk-newsletter__heading", children: heading }), _jsx("p", { className: "bk-newsletter__desc", children: description })] }), _jsx("div", { className: "bk-newsletter__action", children: _jsxs("form", { className: "bk-newsletter__form", action: action, method: "post", children: [_jsxs("label", { className: "bk-newsletter__honeypot", "aria-hidden": "true", children: ["Leave this field empty", _jsx("input", { type: "text", name: "website", tabIndex: -1, autoComplete: "off" })] }), _jsx("input", { className: "bk-newsletter__input", type: "email", name: "email", required: true, placeholder: placeholder, autoComplete: "email" }), _jsx("button", { className: "bk-newsletter__button", type: "submit", children: buttonText })] }) })] }));
|
|
4
|
+
}
|
|
5
|
+
//# sourceMappingURL=NewsletterCTA.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NewsletterCTA.js","sourceRoot":"","sources":["../../react/NewsletterCTA.tsx"],"names":[],"mappings":";AAYA,MAAM,UAAU,aAAa,CAAC,EAC5B,OAAO,GAAG,yBAAyB,EACnC,WAAW,GAAG,sEAAsE,EACpF,MAAM,GAAG,iBAAiB,EAC1B,WAAW,GAAG,gBAAgB,EAC9B,UAAU,GAAG,WAAW,GACL;IACnB,OAAO,CACL,eAAK,SAAS,EAAC,eAAe,aAC5B,eAAM,SAAS,EAAC,qBAAqB,iBAAa,MAAM,GAAG,EAC3D,eAAK,SAAS,EAAC,qBAAqB,aAClC,aAAI,SAAS,EAAC,wBAAwB,YAAE,OAAO,GAAM,EACrD,YAAG,SAAS,EAAC,qBAAqB,YAAE,WAAW,GAAK,IAChD,EACN,cAAK,SAAS,EAAC,uBAAuB,YACpC,gBAAM,SAAS,EAAC,qBAAqB,EAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAC,MAAM,aACjE,iBAAO,SAAS,EAAC,yBAAyB,iBAAa,MAAM,uCAE3D,gBAAO,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,SAAS,EAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,YAAY,EAAC,KAAK,GAAG,IAC/D,EACR,gBACE,SAAS,EAAC,sBAAsB,EAChC,IAAI,EAAC,OAAO,EACZ,IAAI,EAAC,OAAO,EACZ,QAAQ,QACR,WAAW,EAAE,WAAW,EACxB,YAAY,EAAC,OAAO,GACpB,EACF,iBAAQ,SAAS,EAAC,uBAAuB,EAAC,IAAI,EAAC,QAAQ,YACpD,UAAU,GACJ,IACJ,GACH,IACF,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
export interface NumberedCardProps {
|
|
3
|
+
number?: number | string;
|
|
4
|
+
title?: string;
|
|
5
|
+
description?: ReactNode;
|
|
6
|
+
children?: ReactNode;
|
|
7
|
+
}
|
|
8
|
+
export declare function NumberedCard({ number, title, description, children }: NumberedCardProps): import("react").JSX.Element;
|
|
9
|
+
//# sourceMappingURL=NumberedCard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NumberedCard.d.ts","sourceRoot":"","sources":["../../react/NumberedCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,MAAM,WAAW,iBAAiB;IAAG,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,EAAE,SAAS,CAAC;CAAE;AAC/H,wBAAgB,YAAY,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE,iBAAiB,+BAIvF"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
export function NumberedCard({ number, title, description, children }) {
|
|
3
|
+
const n = String(number ?? "").padStart(2, "0");
|
|
4
|
+
const body = description ?? children;
|
|
5
|
+
return (_jsxs("div", { className: "bk-numbered-card", children: [_jsx("span", { className: "bk-numbered-card__badge", children: n }), title ? _jsx("h4", { className: "bk-numbered-card__title", children: title }) : null, body ? _jsx("p", { className: "bk-numbered-card__body", children: body }) : null] }));
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=NumberedCard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NumberedCard.js","sourceRoot":"","sources":["../../react/NumberedCard.tsx"],"names":[],"mappings":";AAEA,MAAM,UAAU,YAAY,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAqB;IACtF,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,WAAW,IAAI,QAAQ,CAAC;IACrC,OAAO,CAAC,eAAK,SAAS,EAAC,kBAAkB,aAAC,eAAM,SAAS,EAAC,yBAAyB,YAAE,CAAC,GAAQ,EAAC,KAAK,CAAC,CAAC,CAAC,aAAI,SAAS,EAAC,yBAAyB,YAAE,KAAK,GAAM,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,YAAG,SAAS,EAAC,wBAAwB,YAAE,IAAI,GAAK,CAAC,CAAC,CAAC,IAAI,IAAO,CAAC,CAAC;AAC7O,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProConBlock.d.ts","sourceRoot":"","sources":["../../react/ProConBlock.tsx"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,wBAAgB,WAAW,CAAC,EAAE,IAAS,EAAE,IAAS,EAAE,EAAE,gBAAgB,sCAoCrE"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
export function ProConBlock({ pros = [], cons = [] }) {
|
|
3
|
+
if (!pros?.length && !cons?.length)
|
|
4
|
+
return null;
|
|
5
|
+
return (_jsxs("div", { className: "bk-procon", children: [pros.length > 0 && (_jsxs("div", { className: "bk-procon__card bk-procon__card--pro", "data-kind": "pro", children: [_jsx("h4", { className: "bk-procon__heading", children: "Pros" }), _jsx("ul", { className: "bk-procon__list", children: pros.map((item, i) => (_jsxs("li", { className: "bk-procon__item", children: [_jsx("span", { className: "bk-procon__mark", "aria-hidden": "true", children: "\u2713" }), _jsx("span", { className: "bk-procon__text", children: item })] }, i))) })] })), cons.length > 0 && (_jsxs("div", { className: "bk-procon__card bk-procon__card--con", "data-kind": "con", children: [_jsx("h4", { className: "bk-procon__heading", children: "Cons" }), _jsx("ul", { className: "bk-procon__list", children: cons.map((item, i) => (_jsxs("li", { className: "bk-procon__item", children: [_jsx("span", { className: "bk-procon__mark", "aria-hidden": "true", children: "\u2715" }), _jsx("span", { className: "bk-procon__text", children: item })] }, i))) })] }))] }));
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=ProConBlock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProConBlock.js","sourceRoot":"","sources":["../../react/ProConBlock.tsx"],"names":[],"mappings":";AAKA,MAAM,UAAU,WAAW,CAAC,EAAE,IAAI,GAAG,EAAE,EAAE,IAAI,GAAG,EAAE,EAAoB;IACpE,IAAI,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC,IAAI,EAAE,MAAM;QAAE,OAAO,IAAI,CAAC;IAChD,OAAO,CACL,eAAK,SAAS,EAAC,WAAW,aACvB,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAClB,eAAK,SAAS,EAAC,sCAAsC,eAAW,KAAK,aACnE,aAAI,SAAS,EAAC,oBAAoB,qBAAU,EAC5C,aAAI,SAAS,EAAC,iBAAiB,YAC5B,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CACrB,cAAY,SAAS,EAAC,iBAAiB,aACrC,eAAM,SAAS,EAAC,iBAAiB,iBAAa,MAAM,uBAE7C,EACP,eAAM,SAAS,EAAC,iBAAiB,YAAE,IAAI,GAAQ,KAJxC,CAAC,CAKL,CACN,CAAC,GACC,IACD,CACP,EACA,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAClB,eAAK,SAAS,EAAC,sCAAsC,eAAW,KAAK,aACnE,aAAI,SAAS,EAAC,oBAAoB,qBAAU,EAC5C,aAAI,SAAS,EAAC,iBAAiB,YAC5B,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CACrB,cAAY,SAAS,EAAC,iBAAiB,aACrC,eAAM,SAAS,EAAC,iBAAiB,iBAAa,MAAM,uBAE7C,EACP,eAAM,SAAS,EAAC,iBAAiB,YAAE,IAAI,GAAQ,KAJxC,CAAC,CAKL,CACN,CAAC,GACC,IACD,CACP,IACG,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export type ProseListVariant = "ul" | "ol";
|
|
2
|
+
export interface ProseListItem {
|
|
3
|
+
/** Bold lead-in (HTML allowed). */
|
|
4
|
+
title?: string;
|
|
5
|
+
/** Supporting copy (HTML allowed). */
|
|
6
|
+
description?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface ProseListProps {
|
|
9
|
+
/** "ul" — dash markers; "ol" — zero-padded counters (01, 02, …). */
|
|
10
|
+
variant?: ProseListVariant;
|
|
11
|
+
/** Plain HTML strings, or {title, description} objects (triggers grid mode). */
|
|
12
|
+
items?: Array<string | ProseListItem>;
|
|
13
|
+
/** Dashed divider between items. */
|
|
14
|
+
divided?: boolean;
|
|
15
|
+
}
|
|
16
|
+
export declare function ProseList({ variant, items, divided }: ProseListProps): import("react").JSX.Element | null;
|
|
17
|
+
//# sourceMappingURL=ProseList.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProseList.d.ts","sourceRoot":"","sources":["../../react/ProseList.tsx"],"names":[],"mappings":"AAQA,MAAM,MAAM,gBAAgB,GAAG,IAAI,GAAG,IAAI,CAAC;AAE3C,MAAM,WAAW,aAAa;IAC5B,mCAAmC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sCAAsC;IACtC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,oEAAoE;IACpE,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAC3B,gFAAgF;IAChF,KAAK,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,aAAa,CAAC,CAAC;IACtC,oCAAoC;IACpC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,SAAS,CAAC,EAAE,OAAc,EAAE,KAAU,EAAE,OAAe,EAAE,EAAE,cAAc,sCA6CxF"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/* blog-kit React adapter — ProseList
|
|
3
|
+
Thin wrapper: all styling lives in core/css/components.css (.bk-prose-list).
|
|
4
|
+
Body-copy bullet (ul) or zero-padded ordered (ol) list. Items may be plain
|
|
5
|
+
HTML strings, or {title, description} objects — any title/description object
|
|
6
|
+
flips the whole list into a two-column grid so titles and descriptions align
|
|
7
|
+
across rows. Add `divided` for dashed-divider breathing room between items. */
|
|
8
|
+
import { cx } from "../core/lib.js";
|
|
9
|
+
export function ProseList({ variant = "ul", items = [], divided = false }) {
|
|
10
|
+
if (!Array.isArray(items) || items.length === 0)
|
|
11
|
+
return null;
|
|
12
|
+
const v = variant === "ol" ? "ol" : "ul";
|
|
13
|
+
const Tag = v === "ol" ? "ol" : "ul";
|
|
14
|
+
// Grid layout kicks in when any item is an object with title+description, so
|
|
15
|
+
// titles and descriptions align into consistent columns across every row.
|
|
16
|
+
const isGrid = items.some((it) => it && typeof it === "object" && (it.title || it.description));
|
|
17
|
+
const cls = cx("bk-prose-list", `bk-prose-list--${v}`, divided && "bk-prose-list--divided", isGrid && "bk-prose-list--grid");
|
|
18
|
+
return (_jsx(Tag, { className: cls, children: items.map((item, i) => {
|
|
19
|
+
if (isGrid) {
|
|
20
|
+
const obj = item && typeof item === "object" ? item : { description: String(item ?? "") };
|
|
21
|
+
return (_jsxs("li", { className: "bk-prose-list__item", children: [_jsx("span", { className: "bk-prose-list__marker", "aria-hidden": "true" }), _jsx("span", { className: "bk-prose-list__title", dangerouslySetInnerHTML: { __html: obj.title || "" } }), _jsx("span", { className: "bk-prose-list__desc", dangerouslySetInnerHTML: { __html: obj.description || "" } })] }, i));
|
|
22
|
+
}
|
|
23
|
+
return (_jsx("li", { className: "bk-prose-list__item", dangerouslySetInnerHTML: { __html: typeof item === "string" ? item : "" } }, i));
|
|
24
|
+
}) }));
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=ProseList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProseList.js","sourceRoot":"","sources":["../../react/ProseList.tsx"],"names":[],"mappings":";AAAA;;;;;iFAKiF;AACjF,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAoBjC,MAAM,UAAU,SAAS,CAAC,EAAE,OAAO,GAAG,IAAI,EAAE,KAAK,GAAG,EAAE,EAAE,OAAO,GAAG,KAAK,EAAkB;IACvF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7D,MAAM,CAAC,GAAqB,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IAC3D,MAAM,GAAG,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IACrC,6EAA6E;IAC7E,0EAA0E;IAC1E,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CACvB,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,WAAW,CAAC,CACrE,CAAC;IACF,MAAM,GAAG,GAAG,EAAE,CACZ,eAAe,EACf,kBAAkB,CAAC,EAAE,EACrB,OAAO,IAAI,wBAAwB,EACnC,MAAM,IAAI,qBAAqB,CAChC,CAAC;IACF,OAAO,CACL,KAAC,GAAG,IAAC,SAAS,EAAE,GAAG,YAChB,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;YACrB,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,GAAG,GACP,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC;gBAChF,OAAO,CACL,cAAY,SAAS,EAAC,qBAAqB,aACzC,eAAM,SAAS,EAAC,uBAAuB,iBAAa,MAAM,GAAG,EAC7D,eACE,SAAS,EAAC,sBAAsB,EAChC,uBAAuB,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,KAAK,IAAI,EAAE,EAAE,GACpD,EACF,eACE,SAAS,EAAC,qBAAqB,EAC/B,uBAAuB,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,WAAW,IAAI,EAAE,EAAE,GAC1D,KATK,CAAC,CAUL,CACN,CAAC;YACJ,CAAC;YACD,OAAO,CACL,aAEE,SAAS,EAAC,qBAAqB,EAC/B,uBAAuB,EAAE,EAAE,MAAM,EAAE,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,IAFpE,CAAC,CAGN,CACH,CAAC;QACJ,CAAC,CAAC,GACE,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
export interface QuoteBlockProps {
|
|
3
|
+
/** The quote text. Optional — children may carry the body instead (MDX). */
|
|
4
|
+
quote?: string;
|
|
5
|
+
author?: string;
|
|
6
|
+
role?: string;
|
|
7
|
+
company?: string;
|
|
8
|
+
/** Source attribution text, e.g. "Forrester AI Study, 2024". */
|
|
9
|
+
source?: string;
|
|
10
|
+
/** When set alongside `source`, the attribution row links to the original. */
|
|
11
|
+
sourceUrl?: string;
|
|
12
|
+
/** Explicit avatar URL — overrides the favicon-from-sourceUrl default. */
|
|
13
|
+
avatarUrl?: string;
|
|
14
|
+
children?: ReactNode;
|
|
15
|
+
}
|
|
16
|
+
export declare function QuoteBlock({ quote, author, role, company, source, sourceUrl, avatarUrl, children, }: QuoteBlockProps): import("react").JSX.Element;
|
|
17
|
+
//# sourceMappingURL=QuoteBlock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QuoteBlock.d.ts","sourceRoot":"","sources":["../../react/QuoteBlock.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,MAAM,WAAW,eAAe;IAC9B,4EAA4E;IAC5E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gEAAgE;IAChE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8EAA8E;IAC9E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0EAA0E;IAC1E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAiBD,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,MAAM,EACN,IAAI,EACJ,OAAO,EACP,MAAM,EACN,SAAS,EACT,SAAS,EACT,QAAQ,GACT,EAAE,eAAe,+BA8CjB"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { ICONS } from "../core/icons.js";
|
|
3
|
+
/**
|
|
4
|
+
* Google's public favicon-resolver URL for the source URL's host, or null when
|
|
5
|
+
* the URL is missing/unparseable so the avatar slot can be dropped entirely.
|
|
6
|
+
*/
|
|
7
|
+
function deriveFaviconUrl(sourceUrl) {
|
|
8
|
+
if (!sourceUrl)
|
|
9
|
+
return null;
|
|
10
|
+
try {
|
|
11
|
+
const host = new URL(sourceUrl).hostname;
|
|
12
|
+
if (!host)
|
|
13
|
+
return null;
|
|
14
|
+
return `https://www.google.com/s2/favicons?domain=${encodeURIComponent(host)}&sz=64`;
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
export function QuoteBlock({ quote, author, role, company, source, sourceUrl, avatarUrl, children, }) {
|
|
21
|
+
const subtitle = [role, company].filter(Boolean).join(" · ");
|
|
22
|
+
const avatarSrc = avatarUrl ?? deriveFaviconUrl(sourceUrl);
|
|
23
|
+
return (_jsxs("figure", { className: "bk-quote", children: [_jsx("span", { className: "bk-quote__mark", "aria-hidden": true, children: "\u201C" }), _jsx("blockquote", { className: "bk-quote__body", children: quote ?? children }), (author || subtitle) && (_jsxs("figcaption", { className: "bk-quote__cite", children: [avatarSrc && (_jsx("img", { className: "bk-quote__avatar", src: avatarSrc, alt: "", "aria-hidden": true, width: 40, height: 40 })), _jsxs("span", { className: "bk-quote__who", children: [author && _jsx("cite", { className: "bk-quote__author", children: author }), subtitle && _jsx("span", { className: "bk-quote__role", children: subtitle })] })] })), source &&
|
|
24
|
+
(sourceUrl ? (_jsxs("a", { className: "bk-quote__source bk-quote__source--link", href: sourceUrl, target: "_blank", rel: "nofollow noopener noreferrer", children: [_jsx("span", { className: "bk-quote__source-kicker", children: "Source" }), source, _jsx("span", { className: "bk-quote__source-icon", dangerouslySetInnerHTML: { __html: ICONS["external"] } })] })) : (_jsxs("div", { className: "bk-quote__source", children: [_jsx("span", { className: "bk-quote__source-kicker", children: "Source" }), source] })))] }));
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=QuoteBlock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QuoteBlock.js","sourceRoot":"","sources":["../../react/QuoteBlock.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAiBtC;;;GAGG;AACH,SAAS,gBAAgB,CAAC,SAAkB;IAC1C,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAC5B,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC;QACzC,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QACvB,OAAO,6CAA6C,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC;IACvF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,EACzB,KAAK,EACL,MAAM,EACN,IAAI,EACJ,OAAO,EACP,MAAM,EACN,SAAS,EACT,SAAS,EACT,QAAQ,GACQ;IAChB,MAAM,QAAQ,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7D,MAAM,SAAS,GAAG,SAAS,IAAI,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAE3D,OAAO,CACL,kBAAQ,SAAS,EAAC,UAAU,aAC1B,eAAM,SAAS,EAAC,gBAAgB,4CAA2B,EAC3D,qBAAY,SAAS,EAAC,gBAAgB,YAAE,KAAK,IAAI,QAAQ,GAAc,EACtE,CAAC,MAAM,IAAI,QAAQ,CAAC,IAAI,CACvB,sBAAY,SAAS,EAAC,gBAAgB,aACnC,SAAS,IAAI,CACZ,cACE,SAAS,EAAC,kBAAkB,EAC5B,GAAG,EAAE,SAAS,EACd,GAAG,EAAC,EAAE,uBAEN,KAAK,EAAE,EAAE,EACT,MAAM,EAAE,EAAE,GACV,CACH,EACD,gBAAM,SAAS,EAAC,eAAe,aAC5B,MAAM,IAAI,eAAM,SAAS,EAAC,kBAAkB,YAAE,MAAM,GAAQ,EAC5D,QAAQ,IAAI,eAAM,SAAS,EAAC,gBAAgB,YAAE,QAAQ,GAAQ,IAC1D,IACI,CACd,EACA,MAAM;gBACL,CAAC,SAAS,CAAC,CAAC,CAAC,CACX,aACE,SAAS,EAAC,yCAAyC,EACnD,IAAI,EAAE,SAAS,EACf,MAAM,EAAC,QAAQ,EACf,GAAG,EAAC,8BAA8B,aAElC,eAAM,SAAS,EAAC,yBAAyB,uBAAc,EACtD,MAAM,EACP,eAAM,SAAS,EAAC,uBAAuB,EAAC,uBAAuB,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,EAAE,GAAI,IAChG,CACL,CAAC,CAAC,CAAC,CACF,eAAK,SAAS,EAAC,kBAAkB,aAC/B,eAAM,SAAS,EAAC,yBAAyB,uBAAc,EACtD,MAAM,IACH,CACP,CAAC,IACG,CACV,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface RegionCalloutOffice {
|
|
2
|
+
/** Office / region name, rendered uppercase. */
|
|
3
|
+
name: string;
|
|
4
|
+
/** Phone number, shown in brand-coloured monospace. */
|
|
5
|
+
phone?: string;
|
|
6
|
+
/** Optional CSS background for the swatch (colour, gradient, or url()). */
|
|
7
|
+
flag?: string;
|
|
8
|
+
}
|
|
9
|
+
export interface RegionCalloutProps {
|
|
10
|
+
offices?: RegionCalloutOffice[];
|
|
11
|
+
}
|
|
12
|
+
export declare function RegionCallout({ offices }: RegionCalloutProps): import("react").JSX.Element;
|
|
13
|
+
//# sourceMappingURL=RegionCallout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RegionCallout.d.ts","sourceRoot":"","sources":["../../react/RegionCallout.tsx"],"names":[],"mappings":"AAOA,MAAM,WAAW,mBAAmB;IAClC,gDAAgD;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,uDAAuD;IACvD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2EAA2E;IAC3E,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,mBAAmB,EAAE,CAAC;CACjC;AAED,wBAAgB,aAAa,CAAC,EAAE,OAAY,EAAE,EAAE,kBAAkB,+BAiBjE"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
export function RegionCallout({ offices = [] }) {
|
|
3
|
+
return (_jsx("div", { className: "bk-region-callout", children: offices.map((o, i) => (_jsxs("div", { className: "bk-region-callout__cell", children: [_jsx("div", { className: "bk-region-callout__flag", ...(o.flag ? { style: { background: o.flag } } : {}) }), _jsxs("div", { className: "bk-region-callout__info", children: [_jsx("div", { className: "bk-region-callout__name", children: o.name }), o.phone && _jsx("div", { className: "bk-region-callout__phone", children: o.phone })] })] }, i))) }));
|
|
4
|
+
}
|
|
5
|
+
//# sourceMappingURL=RegionCallout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RegionCallout.js","sourceRoot":"","sources":["../../react/RegionCallout.tsx"],"names":[],"mappings":";AAoBA,MAAM,UAAU,aAAa,CAAC,EAAE,OAAO,GAAG,EAAE,EAAsB;IAChE,OAAO,CACL,cAAK,SAAS,EAAC,mBAAmB,YAC/B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CACrB,eAAa,SAAS,EAAC,yBAAyB,aAC9C,cACE,SAAS,EAAC,yBAAyB,KAC/B,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GACrD,EACF,eAAK,SAAS,EAAC,yBAAyB,aACtC,cAAK,SAAS,EAAC,yBAAyB,YAAE,CAAC,CAAC,IAAI,GAAO,EACtD,CAAC,CAAC,KAAK,IAAI,cAAK,SAAS,EAAC,0BAA0B,YAAE,CAAC,CAAC,KAAK,GAAO,IACjE,KARE,CAAC,CASL,CACP,CAAC,GACE,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export interface RelatedPost {
|
|
2
|
+
slug: string;
|
|
3
|
+
title: string;
|
|
4
|
+
excerpt?: string;
|
|
5
|
+
date?: string;
|
|
6
|
+
/** Optional category pill shown above the title. */
|
|
7
|
+
category?: string;
|
|
8
|
+
/** Featured image URL; renders as the thumbnail when present. */
|
|
9
|
+
featuredImage?: string;
|
|
10
|
+
featuredImageAlt?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface RelatedPostsProps {
|
|
13
|
+
posts: RelatedPost[];
|
|
14
|
+
/** Section heading. */
|
|
15
|
+
heading?: string;
|
|
16
|
+
/** Optional override for the per-card link href; receives the slug. */
|
|
17
|
+
hrefBase?: string;
|
|
18
|
+
}
|
|
19
|
+
export declare function RelatedPosts({ posts, heading, hrefBase }: RelatedPostsProps): import("react").JSX.Element | null;
|
|
20
|
+
//# sourceMappingURL=RelatedPosts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RelatedPosts.d.ts","sourceRoot":"","sources":["../../react/RelatedPosts.tsx"],"names":[],"mappings":"AAKA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iEAAiE;IACjE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,uBAAuB;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uEAAuE;IACvE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,YAAY,CAAC,EAAE,KAAK,EAAE,OAAwB,EAAE,QAAmB,EAAE,EAAE,iBAAiB,sCAgCvG"}
|