@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.
Files changed (397) hide show
  1. package/INTEGRATION.md +76 -0
  2. package/LICENSE +74 -0
  3. package/README.md +102 -0
  4. package/astro/AdPreview.astro +64 -0
  5. package/astro/AdPreviewPair.astro +10 -0
  6. package/astro/AuditFindings.astro +29 -0
  7. package/astro/AuditScores.astro +60 -0
  8. package/astro/AuthorCard.astro +32 -0
  9. package/astro/BeforeAfter.astro +26 -0
  10. package/astro/BlogBehaviors.astro +15 -0
  11. package/astro/CTABanner.astro +28 -0
  12. package/astro/CalloutBox.astro +28 -0
  13. package/astro/CaseStudyHero.astro +45 -0
  14. package/astro/ChannelMixBars.astro +33 -0
  15. package/astro/Checklist.astro +24 -0
  16. package/astro/ChecklistItem.astro +15 -0
  17. package/astro/CodeSnippet.astro +20 -0
  18. package/astro/ComparisonTable.astro +103 -0
  19. package/astro/Definition.astro +30 -0
  20. package/astro/DeliveryComparison.astro +40 -0
  21. package/astro/FAQList.astro +43 -0
  22. package/astro/FurtherReading.astro +34 -0
  23. package/astro/ImageFeature.astro +22 -0
  24. package/astro/Infographic.astro +12 -0
  25. package/astro/KeyMetric.astro +40 -0
  26. package/astro/KeywordTable.astro +69 -0
  27. package/astro/List.astro +46 -0
  28. package/astro/MetricHighlight.astro +77 -0
  29. package/astro/NewsletterCTA.astro +40 -0
  30. package/astro/NumberedCard.astro +6 -0
  31. package/astro/ProConBlock.astro +38 -0
  32. package/astro/ProseList.astro +46 -0
  33. package/astro/QuoteBlock.astro +72 -0
  34. package/astro/RegionCallout.astro +24 -0
  35. package/astro/RelatedPosts.astro +47 -0
  36. package/astro/ResultsStrip.astro +59 -0
  37. package/astro/ScoreBar.astro +19 -0
  38. package/astro/SerpPreview.astro +35 -0
  39. package/astro/ServicePromoCard.astro +21 -0
  40. package/astro/StatCard.astro +48 -0
  41. package/astro/StepBlock.astro +5 -0
  42. package/astro/TableOfContents.astro +12 -0
  43. package/astro/TimelineBlock.astro +30 -0
  44. package/astro/TipBox.astro +14 -0
  45. package/astro/TrafficChart.astro +61 -0
  46. package/astro/VerdictCard.astro +48 -0
  47. package/astro/blogkit/Article.astro +63 -0
  48. package/astro/blogkit/BlogIndex.astro +144 -0
  49. package/core/behaviors/code.js +78 -0
  50. package/core/behaviors/comparison.js +52 -0
  51. package/core/behaviors/delivery-comparison.js +52 -0
  52. package/core/behaviors/faq.js +61 -0
  53. package/core/behaviors/index.d.ts +3 -0
  54. package/core/behaviors/index.js +35 -0
  55. package/core/behaviors/keyword-table.js +52 -0
  56. package/core/behaviors/toc.js +130 -0
  57. package/core/css/base.css +146 -0
  58. package/core/css/components.css +2632 -0
  59. package/core/css/index-listing.css +207 -0
  60. package/core/css/index.css +13 -0
  61. package/core/css/tokens.css +127 -0
  62. package/core/icons.ts +20 -0
  63. package/core/lib.ts +70 -0
  64. package/core/manifest/components.json +573 -0
  65. package/core/manifest/frontmatter.json +19 -0
  66. package/core/manifest/templates.json +77 -0
  67. package/dist/core/behaviors/code.js +78 -0
  68. package/dist/core/behaviors/comparison.js +52 -0
  69. package/dist/core/behaviors/delivery-comparison.js +52 -0
  70. package/dist/core/behaviors/faq.js +61 -0
  71. package/dist/core/behaviors/index.d.ts +3 -0
  72. package/dist/core/behaviors/index.js +35 -0
  73. package/dist/core/behaviors/keyword-table.js +52 -0
  74. package/dist/core/behaviors/toc.js +130 -0
  75. package/dist/core/css/base.css +146 -0
  76. package/dist/core/css/components.css +2632 -0
  77. package/dist/core/css/index-listing.css +207 -0
  78. package/dist/core/css/index.css +13 -0
  79. package/dist/core/css/tokens.css +127 -0
  80. package/dist/core/icons.d.ts +2 -0
  81. package/dist/core/icons.d.ts.map +1 -0
  82. package/dist/core/icons.js +20 -0
  83. package/dist/core/icons.js.map +1 -0
  84. package/dist/core/lib.d.ts +21 -0
  85. package/dist/core/lib.d.ts.map +1 -0
  86. package/dist/core/lib.js +57 -0
  87. package/dist/core/lib.js.map +1 -0
  88. package/dist/core/manifest/components.json +573 -0
  89. package/dist/core/manifest/frontmatter.json +19 -0
  90. package/dist/core/manifest/templates.json +77 -0
  91. package/dist/package/adapters/hjd-api.d.ts +14 -0
  92. package/dist/package/adapters/hjd-api.d.ts.map +1 -0
  93. package/dist/package/adapters/hjd-api.js +57 -0
  94. package/dist/package/adapters/hjd-api.js.map +1 -0
  95. package/dist/package/adapters/index.d.ts +13 -0
  96. package/dist/package/adapters/index.d.ts.map +1 -0
  97. package/dist/package/adapters/index.js +16 -0
  98. package/dist/package/adapters/index.js.map +1 -0
  99. package/dist/package/adapters/local.d.ts +13 -0
  100. package/dist/package/adapters/local.d.ts.map +1 -0
  101. package/dist/package/adapters/local.js +72 -0
  102. package/dist/package/adapters/local.js.map +1 -0
  103. package/dist/package/adapters/source.d.ts +39 -0
  104. package/dist/package/adapters/source.d.ts.map +1 -0
  105. package/dist/package/adapters/source.js +19 -0
  106. package/dist/package/adapters/source.js.map +1 -0
  107. package/dist/package/article.d.ts +17 -0
  108. package/dist/package/article.d.ts.map +1 -0
  109. package/dist/package/article.js +37 -0
  110. package/dist/package/article.js.map +1 -0
  111. package/dist/package/astro/data.d.ts +45 -0
  112. package/dist/package/astro/data.d.ts.map +1 -0
  113. package/dist/package/astro/data.js +81 -0
  114. package/dist/package/astro/data.js.map +1 -0
  115. package/dist/package/astro/freshness.d.ts +11 -0
  116. package/dist/package/astro/freshness.d.ts.map +1 -0
  117. package/dist/package/astro/freshness.js +48 -0
  118. package/dist/package/astro/freshness.js.map +1 -0
  119. package/dist/package/astro/index.d.ts +12 -0
  120. package/dist/package/astro/index.d.ts.map +1 -0
  121. package/dist/package/astro/index.js +31 -0
  122. package/dist/package/astro/index.js.map +1 -0
  123. package/dist/package/blog-index.d.ts +10 -0
  124. package/dist/package/blog-index.d.ts.map +1 -0
  125. package/dist/package/blog-index.js +27 -0
  126. package/dist/package/blog-index.js.map +1 -0
  127. package/dist/package/cli/exchange.d.ts +27 -0
  128. package/dist/package/cli/exchange.d.ts.map +1 -0
  129. package/dist/package/cli/exchange.js +94 -0
  130. package/dist/package/cli/exchange.js.map +1 -0
  131. package/dist/package/cli/index.d.ts +3 -0
  132. package/dist/package/cli/index.d.ts.map +1 -0
  133. package/dist/package/cli/index.js +301 -0
  134. package/dist/package/cli/index.js.map +1 -0
  135. package/dist/package/config/define.d.ts +13 -0
  136. package/dist/package/config/define.d.ts.map +1 -0
  137. package/dist/package/config/define.js +14 -0
  138. package/dist/package/config/define.js.map +1 -0
  139. package/dist/package/config/resolve.d.ts +11 -0
  140. package/dist/package/config/resolve.d.ts.map +1 -0
  141. package/dist/package/config/resolve.js +43 -0
  142. package/dist/package/config/resolve.js.map +1 -0
  143. package/dist/package/config/types.d.ts +74 -0
  144. package/dist/package/config/types.d.ts.map +1 -0
  145. package/dist/package/config/types.js +13 -0
  146. package/dist/package/config/types.js.map +1 -0
  147. package/dist/package/index-core.d.ts +28 -0
  148. package/dist/package/index-core.d.ts.map +1 -0
  149. package/dist/package/index-core.js +102 -0
  150. package/dist/package/index-core.js.map +1 -0
  151. package/dist/package/index.d.ts +13 -0
  152. package/dist/package/index.d.ts.map +1 -0
  153. package/dist/package/index.js +25 -0
  154. package/dist/package/index.js.map +1 -0
  155. package/dist/package/mdx/render-astro.d.ts +18 -0
  156. package/dist/package/mdx/render-astro.d.ts.map +1 -0
  157. package/dist/package/mdx/render-astro.js +75 -0
  158. package/dist/package/mdx/render-astro.js.map +1 -0
  159. package/dist/package/mdx/render.d.ts +13 -0
  160. package/dist/package/mdx/render.d.ts.map +1 -0
  161. package/dist/package/mdx/render.js +37 -0
  162. package/dist/package/mdx/render.js.map +1 -0
  163. package/dist/react/AdPreview.d.ts +26 -0
  164. package/dist/react/AdPreview.d.ts.map +1 -0
  165. package/dist/react/AdPreview.js +8 -0
  166. package/dist/react/AdPreview.js.map +1 -0
  167. package/dist/react/AdPreviewPair.d.ts +7 -0
  168. package/dist/react/AdPreviewPair.d.ts.map +1 -0
  169. package/dist/react/AdPreviewPair.js +5 -0
  170. package/dist/react/AdPreviewPair.js.map +1 -0
  171. package/dist/react/AuditFindings.d.ts +14 -0
  172. package/dist/react/AuditFindings.d.ts.map +1 -0
  173. package/dist/react/AuditFindings.js +5 -0
  174. package/dist/react/AuditFindings.js.map +1 -0
  175. package/dist/react/AuditScores.d.ts +12 -0
  176. package/dist/react/AuditScores.d.ts.map +1 -0
  177. package/dist/react/AuditScores.js +25 -0
  178. package/dist/react/AuditScores.js.map +1 -0
  179. package/dist/react/AuthorCard.d.ts +10 -0
  180. package/dist/react/AuthorCard.d.ts.map +1 -0
  181. package/dist/react/AuthorCard.js +6 -0
  182. package/dist/react/AuthorCard.js.map +1 -0
  183. package/dist/react/BeforeAfter.d.ts +12 -0
  184. package/dist/react/BeforeAfter.d.ts.map +1 -0
  185. package/dist/react/BeforeAfter.js +7 -0
  186. package/dist/react/BeforeAfter.js.map +1 -0
  187. package/dist/react/BlogBehaviors.d.ts +10 -0
  188. package/dist/react/BlogBehaviors.d.ts.map +1 -0
  189. package/dist/react/BlogBehaviors.js +20 -0
  190. package/dist/react/BlogBehaviors.js.map +1 -0
  191. package/dist/react/CTABanner.d.ts +8 -0
  192. package/dist/react/CTABanner.d.ts.map +1 -0
  193. package/dist/react/CTABanner.js +9 -0
  194. package/dist/react/CTABanner.js.map +1 -0
  195. package/dist/react/CalloutBox.d.ts +13 -0
  196. package/dist/react/CalloutBox.d.ts.map +1 -0
  197. package/dist/react/CalloutBox.js +9 -0
  198. package/dist/react/CalloutBox.js.map +1 -0
  199. package/dist/react/CaseStudyHero.d.ts +20 -0
  200. package/dist/react/CaseStudyHero.d.ts.map +1 -0
  201. package/dist/react/CaseStudyHero.js +7 -0
  202. package/dist/react/CaseStudyHero.js.map +1 -0
  203. package/dist/react/ChannelMixBars.d.ts +18 -0
  204. package/dist/react/ChannelMixBars.d.ts.map +1 -0
  205. package/dist/react/ChannelMixBars.js +6 -0
  206. package/dist/react/ChannelMixBars.js.map +1 -0
  207. package/dist/react/Checklist.d.ts +10 -0
  208. package/dist/react/Checklist.d.ts.map +1 -0
  209. package/dist/react/Checklist.js +7 -0
  210. package/dist/react/Checklist.js.map +1 -0
  211. package/dist/react/ChecklistItem.d.ts +7 -0
  212. package/dist/react/ChecklistItem.d.ts.map +1 -0
  213. package/dist/react/ChecklistItem.js +5 -0
  214. package/dist/react/ChecklistItem.js.map +1 -0
  215. package/dist/react/CodeSnippet.d.ts +17 -0
  216. package/dist/react/CodeSnippet.d.ts.map +1 -0
  217. package/dist/react/CodeSnippet.js +14 -0
  218. package/dist/react/CodeSnippet.js.map +1 -0
  219. package/dist/react/ComparisonTable.d.ts +22 -0
  220. package/dist/react/ComparisonTable.d.ts.map +1 -0
  221. package/dist/react/ComparisonTable.js +35 -0
  222. package/dist/react/ComparisonTable.js.map +1 -0
  223. package/dist/react/Definition.d.ts +9 -0
  224. package/dist/react/Definition.d.ts.map +1 -0
  225. package/dist/react/Definition.js +19 -0
  226. package/dist/react/Definition.js.map +1 -0
  227. package/dist/react/DeliveryComparison.d.ts +16 -0
  228. package/dist/react/DeliveryComparison.d.ts.map +1 -0
  229. package/dist/react/DeliveryComparison.js +7 -0
  230. package/dist/react/DeliveryComparison.js.map +1 -0
  231. package/dist/react/FAQList.d.ts +20 -0
  232. package/dist/react/FAQList.d.ts.map +1 -0
  233. package/dist/react/FAQList.js +19 -0
  234. package/dist/react/FAQList.js.map +1 -0
  235. package/dist/react/FurtherReading.d.ts +21 -0
  236. package/dist/react/FurtherReading.d.ts.map +1 -0
  237. package/dist/react/FurtherReading.js +13 -0
  238. package/dist/react/FurtherReading.js.map +1 -0
  239. package/dist/react/ImageFeature.d.ts +9 -0
  240. package/dist/react/ImageFeature.d.ts.map +1 -0
  241. package/dist/react/ImageFeature.js +6 -0
  242. package/dist/react/ImageFeature.js.map +1 -0
  243. package/dist/react/Infographic.d.ts +6 -0
  244. package/dist/react/Infographic.d.ts.map +1 -0
  245. package/dist/react/Infographic.js +7 -0
  246. package/dist/react/Infographic.js.map +1 -0
  247. package/dist/react/KeyMetric.d.ts +16 -0
  248. package/dist/react/KeyMetric.d.ts.map +1 -0
  249. package/dist/react/KeyMetric.js +15 -0
  250. package/dist/react/KeyMetric.js.map +1 -0
  251. package/dist/react/KeywordTable.d.ts +18 -0
  252. package/dist/react/KeywordTable.d.ts.map +1 -0
  253. package/dist/react/KeywordTable.js +23 -0
  254. package/dist/react/KeywordTable.js.map +1 -0
  255. package/dist/react/List.d.ts +11 -0
  256. package/dist/react/List.d.ts.map +1 -0
  257. package/dist/react/List.js +21 -0
  258. package/dist/react/List.js.map +1 -0
  259. package/dist/react/MetricHighlight.d.ts +15 -0
  260. package/dist/react/MetricHighlight.d.ts.map +1 -0
  261. package/dist/react/MetricHighlight.js +26 -0
  262. package/dist/react/MetricHighlight.js.map +1 -0
  263. package/dist/react/NewsletterCTA.d.ts +9 -0
  264. package/dist/react/NewsletterCTA.d.ts.map +1 -0
  265. package/dist/react/NewsletterCTA.js +5 -0
  266. package/dist/react/NewsletterCTA.js.map +1 -0
  267. package/dist/react/NumberedCard.d.ts +9 -0
  268. package/dist/react/NumberedCard.d.ts.map +1 -0
  269. package/dist/react/NumberedCard.js +7 -0
  270. package/dist/react/NumberedCard.js.map +1 -0
  271. package/dist/react/ProConBlock.d.ts +6 -0
  272. package/dist/react/ProConBlock.d.ts.map +1 -0
  273. package/dist/react/ProConBlock.js +7 -0
  274. package/dist/react/ProConBlock.js.map +1 -0
  275. package/dist/react/ProseList.d.ts +17 -0
  276. package/dist/react/ProseList.d.ts.map +1 -0
  277. package/dist/react/ProseList.js +26 -0
  278. package/dist/react/ProseList.js.map +1 -0
  279. package/dist/react/QuoteBlock.d.ts +17 -0
  280. package/dist/react/QuoteBlock.d.ts.map +1 -0
  281. package/dist/react/QuoteBlock.js +26 -0
  282. package/dist/react/QuoteBlock.js.map +1 -0
  283. package/dist/react/RegionCallout.d.ts +13 -0
  284. package/dist/react/RegionCallout.d.ts.map +1 -0
  285. package/dist/react/RegionCallout.js +5 -0
  286. package/dist/react/RegionCallout.js.map +1 -0
  287. package/dist/react/RelatedPosts.d.ts +20 -0
  288. package/dist/react/RelatedPosts.d.ts.map +1 -0
  289. package/dist/react/RelatedPosts.js +7 -0
  290. package/dist/react/RelatedPosts.js.map +1 -0
  291. package/dist/react/ResultsStrip.d.ts +18 -0
  292. package/dist/react/ResultsStrip.d.ts.map +1 -0
  293. package/dist/react/ResultsStrip.js +22 -0
  294. package/dist/react/ResultsStrip.js.map +1 -0
  295. package/dist/react/ScoreBar.d.ts +8 -0
  296. package/dist/react/ScoreBar.d.ts.map +1 -0
  297. package/dist/react/ScoreBar.js +6 -0
  298. package/dist/react/ScoreBar.js.map +1 -0
  299. package/dist/react/SerpPreview.d.ts +18 -0
  300. package/dist/react/SerpPreview.d.ts.map +1 -0
  301. package/dist/react/SerpPreview.js +13 -0
  302. package/dist/react/SerpPreview.js.map +1 -0
  303. package/dist/react/ServicePromoCard.d.ts +14 -0
  304. package/dist/react/ServicePromoCard.d.ts.map +1 -0
  305. package/dist/react/ServicePromoCard.js +12 -0
  306. package/dist/react/ServicePromoCard.js.map +1 -0
  307. package/dist/react/StatCard.d.ts +13 -0
  308. package/dist/react/StatCard.d.ts.map +1 -0
  309. package/dist/react/StatCard.js +20 -0
  310. package/dist/react/StatCard.js.map +1 -0
  311. package/dist/react/StepBlock.d.ts +8 -0
  312. package/dist/react/StepBlock.d.ts.map +1 -0
  313. package/dist/react/StepBlock.js +5 -0
  314. package/dist/react/StepBlock.js.map +1 -0
  315. package/dist/react/TableOfContents.d.ts +14 -0
  316. package/dist/react/TableOfContents.d.ts.map +1 -0
  317. package/dist/react/TableOfContents.js +12 -0
  318. package/dist/react/TableOfContents.js.map +1 -0
  319. package/dist/react/TimelineBlock.d.ts +14 -0
  320. package/dist/react/TimelineBlock.d.ts.map +1 -0
  321. package/dist/react/TimelineBlock.js +8 -0
  322. package/dist/react/TimelineBlock.js.map +1 -0
  323. package/dist/react/TipBox.d.ts +6 -0
  324. package/dist/react/TipBox.d.ts.map +1 -0
  325. package/dist/react/TipBox.js +5 -0
  326. package/dist/react/TipBox.js.map +1 -0
  327. package/dist/react/TrafficChart.d.ts +16 -0
  328. package/dist/react/TrafficChart.d.ts.map +1 -0
  329. package/dist/react/TrafficChart.js +14 -0
  330. package/dist/react/TrafficChart.js.map +1 -0
  331. package/dist/react/VerdictCard.d.ts +15 -0
  332. package/dist/react/VerdictCard.d.ts.map +1 -0
  333. package/dist/react/VerdictCard.js +5 -0
  334. package/dist/react/VerdictCard.js.map +1 -0
  335. package/dist/react/components-map.d.ts +133 -0
  336. package/dist/react/components-map.d.ts.map +1 -0
  337. package/dist/react/components-map.js +120 -0
  338. package/dist/react/components-map.js.map +1 -0
  339. package/dist/react/index.d.ts +5 -0
  340. package/dist/react/index.d.ts.map +1 -0
  341. package/dist/react/index.js +13 -0
  342. package/dist/react/index.js.map +1 -0
  343. package/package.json +116 -0
  344. package/react/AdPreview.tsx +94 -0
  345. package/react/AdPreviewPair.tsx +16 -0
  346. package/react/AuditFindings.tsx +43 -0
  347. package/react/AuditScores.tsx +73 -0
  348. package/react/AuthorCard.tsx +35 -0
  349. package/react/BeforeAfter.tsx +27 -0
  350. package/react/BlogBehaviors.tsx +21 -0
  351. package/react/CTABanner.tsx +32 -0
  352. package/react/CalloutBox.tsx +31 -0
  353. package/react/CaseStudyHero.tsx +71 -0
  354. package/react/ChannelMixBars.tsx +50 -0
  355. package/react/Checklist.tsx +31 -0
  356. package/react/ChecklistItem.tsx +19 -0
  357. package/react/CodeSnippet.tsx +36 -0
  358. package/react/ComparisonTable.tsx +114 -0
  359. package/react/Definition.tsx +36 -0
  360. package/react/DeliveryComparison.tsx +62 -0
  361. package/react/FAQList.tsx +61 -0
  362. package/react/FurtherReading.tsx +46 -0
  363. package/react/ImageFeature.tsx +26 -0
  364. package/react/Infographic.tsx +18 -0
  365. package/react/KeyMetric.tsx +61 -0
  366. package/react/KeywordTable.tsx +92 -0
  367. package/react/List.tsx +58 -0
  368. package/react/MetricHighlight.tsx +86 -0
  369. package/react/NewsletterCTA.tsx +48 -0
  370. package/react/NumberedCard.tsx +7 -0
  371. package/react/ProConBlock.tsx +42 -0
  372. package/react/ProseList.tsx +72 -0
  373. package/react/QuoteBlock.tsx +89 -0
  374. package/react/RegionCallout.tsx +38 -0
  375. package/react/RelatedPosts.tsx +58 -0
  376. package/react/ResultsStrip.tsx +77 -0
  377. package/react/ScoreBar.tsx +27 -0
  378. package/react/SerpPreview.tsx +59 -0
  379. package/react/ServicePromoCard.tsx +43 -0
  380. package/react/StatCard.tsx +62 -0
  381. package/react/StepBlock.tsx +5 -0
  382. package/react/TableOfContents.tsx +27 -0
  383. package/react/TimelineBlock.tsx +35 -0
  384. package/react/TipBox.tsx +16 -0
  385. package/react/TrafficChart.tsx +79 -0
  386. package/react/VerdictCard.tsx +60 -0
  387. package/react/components-map.ts +122 -0
  388. package/react/index.ts +13 -0
  389. package/templates/blogkit/app/api/blogkit/revalidate/route.ts.tmpl +32 -0
  390. package/templates/blogkit/app/blog/[slug]/page.tsx.tmpl +41 -0
  391. package/templates/blogkit/app/blog/page.tsx.tmpl +18 -0
  392. package/templates/blogkit/blogkit.config.ts.tmpl +23 -0
  393. package/templates/blogkit-astro/BLOGKIT_ASTRO_SETUP.md.tmpl +49 -0
  394. package/templates/blogkit-astro/src/blogkit.config.ts.tmpl +29 -0
  395. package/templates/blogkit-astro/src/pages/api/blogkit/revalidate.ts.tmpl +46 -0
  396. package/templates/blogkit-astro/src/pages/blog/[slug].astro.tmpl +39 -0
  397. 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":"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"}
@@ -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"}