blume 2.1.2 → 2.2.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 (377) hide show
  1. package/AGENTS.md +1 -1
  2. package/CHANGELOG.md +133 -0
  3. package/README.md +4 -4
  4. package/dist/cli/{chunk-74wfhv79.js → chunk-05f21r8h.js} +1 -1
  5. package/dist/cli/{chunk-9qzgg6mj.js → chunk-1cm0h819.js} +3 -3
  6. package/dist/cli/{chunk-nbyvgnnm.js → chunk-1rkxzg3n.js} +104 -47
  7. package/dist/cli/chunk-1rkxzg3n.js.map +36 -0
  8. package/dist/cli/{chunk-desvm72z.js → chunk-2nr29y95.js} +22 -26
  9. package/dist/cli/chunk-2nr29y95.js.map +13 -0
  10. package/dist/cli/{chunk-32khwcb6.js → chunk-49r370mb.js} +42 -69
  11. package/dist/cli/{chunk-32khwcb6.js.map → chunk-49r370mb.js.map} +9 -10
  12. package/dist/cli/{chunk-ms9z66nz.js → chunk-4rftmttv.js} +2 -2
  13. package/dist/cli/{chunk-s0bdnc7v.js → chunk-79bzzkx4.js} +5 -4
  14. package/dist/cli/chunk-79bzzkx4.js.map +10 -0
  15. package/dist/cli/{chunk-hvcxng5f.js → chunk-7tekknev.js} +6 -6
  16. package/dist/cli/{chunk-dv2z0rzf.js → chunk-8b489v1b.js} +38 -13
  17. package/dist/cli/{chunk-dv2z0rzf.js.map → chunk-8b489v1b.js.map} +5 -4
  18. package/dist/cli/{chunk-0pmb4tr4.js → chunk-8f8xw4x2.js} +1195 -222
  19. package/dist/cli/chunk-8f8xw4x2.js.map +44 -0
  20. package/dist/cli/chunk-96snx8yy.js +329 -0
  21. package/dist/cli/chunk-96snx8yy.js.map +13 -0
  22. package/dist/cli/{chunk-ckrcm08h.js → chunk-a3ydrqny.js} +48 -62
  23. package/dist/cli/{chunk-ckrcm08h.js.map → chunk-a3ydrqny.js.map} +4 -5
  24. package/dist/cli/{chunk-bxwhtvw8.js → chunk-ahc5gc9h.js} +5 -5
  25. package/dist/cli/{chunk-dpy8qdjf.js → chunk-as09pafp.js} +73 -182
  26. package/dist/cli/chunk-as09pafp.js.map +18 -0
  27. package/dist/cli/{chunk-tfycddbt.js → chunk-bjk964fp.js} +2 -2
  28. package/dist/cli/{chunk-gfc5fqvf.js → chunk-br0n8n3e.js} +18 -18
  29. package/dist/cli/{chunk-gfc5fqvf.js.map → chunk-br0n8n3e.js.map} +1 -1
  30. package/dist/cli/{chunk-297ajdcv.js → chunk-c69tw29j.js} +6 -6
  31. package/dist/cli/{chunk-297ajdcv.js.map → chunk-c69tw29j.js.map} +3 -3
  32. package/dist/cli/chunk-cn3dy3hz.js +146 -0
  33. package/dist/cli/chunk-cn3dy3hz.js.map +11 -0
  34. package/dist/cli/{chunk-124fvmzq.js → chunk-dm4mg9bj.js} +11064 -8742
  35. package/dist/cli/{chunk-124fvmzq.js.map → chunk-dm4mg9bj.js.map} +78 -64
  36. package/dist/cli/{chunk-dqhg54mr.js → chunk-dmx6cezx.js} +1 -1
  37. package/dist/cli/{chunk-60hz265r.js → chunk-dpcahcrb.js} +24 -11
  38. package/dist/cli/chunk-dpcahcrb.js.map +10 -0
  39. package/dist/cli/{chunk-a57yh0h9.js → chunk-dyk3r7jw.js} +7 -7
  40. package/dist/cli/{chunk-a57yh0h9.js.map → chunk-dyk3r7jw.js.map} +1 -1
  41. package/dist/cli/{chunk-twy7psdz.js → chunk-enk76qd5.js} +14 -10
  42. package/dist/cli/chunk-enk76qd5.js.map +10 -0
  43. package/dist/cli/{chunk-k3gr1nm9.js → chunk-fqy4n3q2.js} +13 -16
  44. package/dist/cli/{chunk-k3gr1nm9.js.map → chunk-fqy4n3q2.js.map} +3 -3
  45. package/dist/cli/{chunk-sc93apfs.js → chunk-frk2wdq1.js} +17 -17
  46. package/dist/cli/{chunk-sc93apfs.js.map → chunk-frk2wdq1.js.map} +2 -2
  47. package/dist/cli/{chunk-kdpzw38a.js → chunk-gprwej7h.js} +95 -7
  48. package/dist/cli/chunk-gprwej7h.js.map +11 -0
  49. package/dist/cli/chunk-kkrteb15.js +157 -0
  50. package/dist/cli/chunk-kkrteb15.js.map +10 -0
  51. package/dist/cli/{chunk-ave1wcbr.js → chunk-m9bp2hc1.js} +1 -1
  52. package/dist/cli/{chunk-58bt3hag.js → chunk-mrvh4c88.js} +4 -4
  53. package/dist/cli/{chunk-5cmts6dv.js → chunk-p8zg3a2h.js} +7 -7
  54. package/dist/cli/{chunk-5cmts6dv.js.map → chunk-p8zg3a2h.js.map} +1 -1
  55. package/dist/cli/{chunk-0w6hs479.js → chunk-rkqae7kh.js} +30 -18
  56. package/dist/cli/chunk-rkqae7kh.js.map +10 -0
  57. package/dist/cli/{chunk-bqxaqn5p.js → chunk-t5xx74rd.js} +8 -8
  58. package/dist/cli/{chunk-bqxaqn5p.js.map → chunk-t5xx74rd.js.map} +1 -1
  59. package/dist/cli/{chunk-1f882900.js → chunk-th0pgaj5.js} +2 -2
  60. package/dist/cli/{chunk-dhwtqnnd.js → chunk-vnbvhgmd.js} +2 -2
  61. package/dist/cli/{chunk-gxtg6ed2.js → chunk-vzy9rh6y.js} +21 -21
  62. package/dist/cli/{chunk-gxtg6ed2.js.map → chunk-vzy9rh6y.js.map} +3 -3
  63. package/dist/cli/{chunk-j1x92mx9.js → chunk-w6e455pz.js} +1 -1
  64. package/dist/cli/chunk-wehv26ry.js +155 -0
  65. package/dist/cli/chunk-wehv26ry.js.map +11 -0
  66. package/dist/cli/{chunk-y4msrwm9.js → chunk-xgq4eytj.js} +15 -15
  67. package/dist/cli/{chunk-36bxs9c7.js → chunk-xt0qvz1t.js} +27 -23
  68. package/dist/cli/chunk-xt0qvz1t.js.map +10 -0
  69. package/dist/cli/index.js +78 -42
  70. package/dist/cli/index.js.map +7 -6
  71. package/dist/types/ai/changelog-components.d.ts +18 -0
  72. package/dist/types/ai/changelog-markdown.d.ts +12 -0
  73. package/dist/types/ai/openapi-components.d.ts +7 -7
  74. package/dist/types/ai/operation-details.d.ts +39 -0
  75. package/dist/types/ai/relative-links.d.ts +3 -1
  76. package/dist/types/ai/serializers.d.ts +6 -4
  77. package/dist/types/analytics/head.d.ts +4 -2
  78. package/dist/types/analytics/script.d.ts +8 -2
  79. package/dist/types/components/content/youtube.d.ts +20 -0
  80. package/dist/types/components/layout/nav-utils.d.ts +8 -0
  81. package/dist/types/components/openapi/example-panels.d.ts +33 -0
  82. package/dist/types/components/openapi/helpers.d.ts +53 -11
  83. package/dist/types/components/openapi/snippets.d.ts +7 -1
  84. package/dist/types/core/alert-diagnostics.d.ts +10 -0
  85. package/dist/types/core/builtin-tags.d.ts +16 -0
  86. package/dist/types/core/changelog-list.d.ts +48 -0
  87. package/dist/types/core/closest-match.d.ts +6 -0
  88. package/dist/types/core/code-fence-diagnostics.d.ts +18 -0
  89. package/dist/types/core/code-fences.d.ts +8 -1
  90. package/dist/types/core/config-input.d.ts +1 -1
  91. package/dist/types/core/content-assets.d.ts +16 -18
  92. package/dist/types/core/diagnostics.d.ts +14 -0
  93. package/dist/types/core/directive-diagnostics.d.ts +22 -8
  94. package/dist/types/core/former-routes.d.ts +14 -0
  95. package/dist/types/core/github.d.ts +5 -4
  96. package/dist/types/core/heading-markers.d.ts +65 -2
  97. package/dist/types/core/hidden-pages.d.ts +3 -0
  98. package/dist/types/core/includes.d.ts +23 -0
  99. package/dist/types/core/last-modified.d.ts +18 -6
  100. package/dist/types/core/links.d.ts +42 -2
  101. package/dist/types/core/load-module.d.ts +19 -4
  102. package/dist/types/core/manifest.d.ts +14 -1
  103. package/dist/types/core/markdown-mirrors.d.ts +22 -0
  104. package/dist/types/core/mdx-elements.d.ts +32 -0
  105. package/dist/types/core/mdx-syntax.d.ts +100 -0
  106. package/dist/types/core/meta-diagnostics.d.ts +7 -0
  107. package/dist/types/core/meta.d.ts +32 -5
  108. package/dist/types/core/nav-diagnostics.d.ts +9 -2
  109. package/dist/types/core/navigation.d.ts +13 -0
  110. package/dist/types/core/ordering-prefix.d.ts +6 -0
  111. package/dist/types/core/pinned-ids.d.ts +23 -0
  112. package/dist/types/core/project-graph.d.ts +9 -1
  113. package/dist/types/core/redirect-patterns.d.ts +18 -0
  114. package/dist/types/core/relative-files.d.ts +31 -0
  115. package/dist/types/core/schema.d.ts +267 -7
  116. package/dist/types/core/sources/normalize.d.ts +101 -9
  117. package/dist/types/core/sources/types.d.ts +16 -0
  118. package/dist/types/core/static-files.d.ts +10 -0
  119. package/dist/types/core/static-host.d.ts +42 -0
  120. package/dist/types/core/svg-images.d.ts +26 -0
  121. package/dist/types/core/syntax-diagnostics.d.ts +14 -0
  122. package/dist/types/core/types.d.ts +42 -1
  123. package/dist/types/deploy/generated-files.d.ts +41 -0
  124. package/dist/types/deploy/redirects.d.ts +21 -7
  125. package/dist/types/markdown/code-title.d.ts +9 -5
  126. package/dist/types/markdown/directives.d.ts +8 -0
  127. package/dist/types/markdown/fence-language.d.ts +51 -0
  128. package/dist/types/markdown/fence-meta.d.ts +5 -0
  129. package/dist/types/markdown/github-alerts.d.ts +35 -0
  130. package/dist/types/openapi/asyncapi.d.ts +6 -5
  131. package/dist/types/openapi/checks.d.ts +10 -5
  132. package/dist/types/openapi/model.d.ts +55 -8
  133. package/dist/types/openapi/parse.d.ts +4 -1
  134. package/dist/types/sources/filesystem.d.ts +14 -4
  135. package/dist/types/sources/mdx-remote.d.ts +6 -3
  136. package/dist/types/sources/registry.d.ts +3 -3
  137. package/dist/types/theme/color.d.ts +33 -0
  138. package/dist/types/theme/palette.d.ts +122 -0
  139. package/docs/01-quickstart.mdx +1 -1
  140. package/docs/02-deployment.mdx +23 -8
  141. package/docs/04-migrating.mdx +16 -4
  142. package/docs/advanced/changelog.mdx +27 -1
  143. package/docs/advanced/skills.mdx +1 -1
  144. package/docs/cli/audit.mdx +1 -1
  145. package/docs/cli/doctor.mdx +2 -2
  146. package/docs/cli/evals.mdx +1 -1
  147. package/docs/cli/index.mdx +4 -2
  148. package/docs/cli/validate.mdx +10 -7
  149. package/docs/configuration/analytics.mdx +2 -0
  150. package/docs/configuration/customization.mdx +3 -1
  151. package/docs/configuration/index.mdx +2 -2
  152. package/docs/configuration/theming.mdx +5 -1
  153. package/docs/content/components.mdx +26 -6
  154. package/docs/content/frontmatter.mdx +1 -1
  155. package/docs/content/includes.mdx +6 -2
  156. package/docs/content/index.mdx +11 -1
  157. package/docs/content/islands.mdx +2 -0
  158. package/docs/content/meta.mdx +9 -3
  159. package/docs/content/navigation.mdx +14 -6
  160. package/docs/content/sources/obsidian.mdx +1 -1
  161. package/docs/content/sources/remote-mdx.mdx +3 -1
  162. package/docs/content/syntax.mdx +76 -8
  163. package/docs/content/variables.mdx +3 -1
  164. package/docs/discoverability/agent-discovery.mdx +1 -1
  165. package/docs/discoverability/json-api.mdx +1 -1
  166. package/docs/discoverability/llms-txt.mdx +1 -1
  167. package/docs/discoverability/markdown.mdx +2 -2
  168. package/docs/discoverability/open-graph.mdx +1 -1
  169. package/docs/discoverability/sitemap-and-robots.mdx +1 -1
  170. package/docs/references/graphql.mdx +2 -0
  171. package/docs/references/openapi.mdx +45 -7
  172. package/package.json +10 -9
  173. package/skills/blume/SKILL.md +2 -2
  174. package/skills/blume-migrate/SKILL.md +49 -27
  175. package/skills/blume-migrate/references/docsify.md +262 -0
  176. package/skills/blume-migrate/references/docus.md +298 -0
  177. package/skills/blume-migrate/references/docusaurus.md +3 -3
  178. package/skills/blume-migrate/references/fern.md +327 -0
  179. package/skills/blume-migrate/references/fumadocs.md +1 -1
  180. package/skills/blume-migrate/references/gitbook.md +267 -0
  181. package/skills/blume-migrate/references/github-wiki.md +259 -0
  182. package/skills/blume-migrate/references/jekyll.md +253 -0
  183. package/skills/blume-migrate/references/mdbook.md +256 -0
  184. package/skills/blume-migrate/references/mintlify.md +5 -5
  185. package/skills/blume-migrate/references/mkdocs.md +236 -0
  186. package/skills/blume-migrate/references/monorepo.md +20 -8
  187. package/skills/blume-migrate/references/nextra.md +2 -2
  188. package/skills/blume-migrate/references/readme.md +257 -0
  189. package/skills/blume-migrate/references/redocly.md +198 -0
  190. package/skills/blume-migrate/references/starlight.md +3 -3
  191. package/skills/blume-migrate/references/vitepress.md +204 -0
  192. package/skills/blume-migrate/references/vuepress.md +271 -0
  193. package/skills/blume-migrate/scripts/docsify-codemod.mjs +2387 -0
  194. package/skills/blume-migrate/scripts/docus-codemod.mjs +2542 -0
  195. package/skills/blume-migrate/scripts/fern-codemod.mjs +2633 -0
  196. package/skills/blume-migrate/scripts/github-wiki-codemod.mjs +2808 -0
  197. package/skills/blume-migrate/scripts/include-excerpts.mjs +649 -0
  198. package/skills/blume-migrate/scripts/jekyll-codemod.mjs +3649 -0
  199. package/skills/blume-migrate/scripts/mintlify-codemod.mjs +17 -13
  200. package/skills/blume-migrate/scripts/mkdocs-codemod.mjs +2526 -0
  201. package/skills/blume-migrate/scripts/operation-routes.mjs +508 -0
  202. package/skills/blume-migrate/scripts/pin-heading-ids.mjs +1049 -0
  203. package/skills/blume-migrate/scripts/readme-codemod.mjs +4139 -0
  204. package/skills/blume-migrate/scripts/vitepress-codemod.mjs +1511 -0
  205. package/src/ai/changelog-components.ts +24 -0
  206. package/src/ai/changelog-markdown.ts +45 -41
  207. package/src/ai/component-markdown.ts +22 -9
  208. package/src/ai/llms.ts +36 -5
  209. package/src/ai/markdown.ts +2 -2
  210. package/src/ai/openapi-components.ts +25 -9
  211. package/src/ai/operation-details.ts +208 -0
  212. package/src/ai/relative-links.ts +48 -8
  213. package/src/ai/serializers.ts +7 -6
  214. package/src/ai/site-skill.ts +6 -2
  215. package/src/analytics/head.ts +11 -5
  216. package/src/analytics/script.ts +13 -3
  217. package/src/astro/generate.ts +32 -6
  218. package/src/astro/index.ts +1 -0
  219. package/src/astro/integration.ts +27 -1
  220. package/src/astro/mdx-source-errors.ts +46 -0
  221. package/src/astro/templates.ts +89 -185
  222. package/src/audit/checks/redirects.ts +5 -1
  223. package/src/audit/redirects.ts +36 -19
  224. package/src/audit/report.ts +22 -9
  225. package/src/audit/run.ts +12 -28
  226. package/src/audit/terms.ts +23 -0
  227. package/src/audit/url.ts +2 -2
  228. package/src/cli/build-failure.ts +256 -7
  229. package/src/cli/command-meta.ts +1 -1
  230. package/src/cli/commands/audit.ts +1 -1
  231. package/src/cli/commands/build.ts +12 -3
  232. package/src/cli/commands/check.ts +13 -2
  233. package/src/cli/commands/dev.ts +1 -1
  234. package/src/cli/commands/doctor.ts +4 -2
  235. package/src/cli/commands/init.ts +3 -3
  236. package/src/cli/commands/preview.ts +17 -1
  237. package/src/cli/commands/validate.ts +22 -10
  238. package/src/cli/prepare.ts +1 -1
  239. package/src/cli/preview-pages.ts +161 -0
  240. package/src/cli/unknown-flags.ts +1 -42
  241. package/src/components/code-copy.ts +51 -0
  242. package/src/components/code-language.ts +75 -0
  243. package/src/components/content/AccordionItem.astro +16 -1
  244. package/src/components/content/Callout.astro +11 -1
  245. package/src/components/content/Changelog.astro +189 -0
  246. package/src/components/content/CodeBlock.astro +8 -11
  247. package/src/components/content/Tabs.astro +16 -2
  248. package/src/components/content/YouTube.astro +6 -4
  249. package/src/components/content/code-block.ts +33 -0
  250. package/src/components/content/content-strings.ts +5 -1
  251. package/src/components/content/inline-markdown.ts +35 -8
  252. package/src/components/content/youtube.ts +49 -7
  253. package/src/components/layout/Analytics.astro +5 -1
  254. package/src/components/layout/NavTree.astro +8 -3
  255. package/src/components/layout/RootLayout.astro +18 -31
  256. package/src/components/layout/nav-utils.ts +14 -0
  257. package/src/components/layout/search/pagefind.ts +2 -1
  258. package/src/components/openapi/Operation.astro +4 -0
  259. package/src/components/openapi/PanelTabs.astro +9 -3
  260. package/src/components/openapi/RequestBody.astro +42 -8
  261. package/src/components/openapi/RequestPanel.astro +34 -53
  262. package/src/components/openapi/example-panels.ts +110 -0
  263. package/src/components/openapi/helpers.ts +195 -20
  264. package/src/components/openapi/operation-model.ts +63 -26
  265. package/src/components/openapi/request.ts +13 -0
  266. package/src/components/openapi/snippets.ts +14 -2
  267. package/src/core/alert-diagnostics.ts +89 -0
  268. package/src/core/builtin-tags.ts +76 -0
  269. package/src/core/changelog-list.ts +87 -0
  270. package/src/core/closest-match.ts +41 -0
  271. package/src/core/code-fence-diagnostics.ts +267 -0
  272. package/src/core/code-fences.ts +43 -7
  273. package/src/core/component-diagnostics.ts +65 -12
  274. package/src/core/config-input.ts +1 -1
  275. package/src/core/config.ts +46 -1
  276. package/src/core/content-assets.ts +64 -144
  277. package/src/core/diagnostics.ts +36 -3
  278. package/src/core/directive-diagnostics.ts +265 -47
  279. package/src/core/former-routes.ts +46 -0
  280. package/src/core/git-ignored.ts +53 -0
  281. package/src/core/github.ts +5 -4
  282. package/src/core/heading-markers.ts +156 -2
  283. package/src/core/hidden-pages.ts +64 -0
  284. package/src/core/includes.ts +181 -41
  285. package/src/core/last-modified.ts +47 -10
  286. package/src/core/links.ts +438 -83
  287. package/src/core/load-module.ts +98 -9
  288. package/src/core/manifest.ts +12 -9
  289. package/src/core/markdown-mirrors.ts +52 -0
  290. package/src/core/mdx-elements.ts +153 -0
  291. package/src/core/mdx-syntax.ts +377 -0
  292. package/src/core/meta-diagnostics.ts +134 -0
  293. package/src/core/meta.ts +154 -55
  294. package/src/core/nav-diagnostics.ts +16 -4
  295. package/src/core/navigation.ts +70 -10
  296. package/src/core/ordering-prefix.ts +22 -2
  297. package/src/core/pinned-ids.ts +141 -0
  298. package/src/core/project-graph.ts +221 -29
  299. package/src/core/redirect-patterns.ts +41 -0
  300. package/src/core/relative-files.ts +145 -0
  301. package/src/core/schema.ts +17 -3
  302. package/src/core/sources/mdx-remote.ts +75 -14
  303. package/src/core/sources/normalize.ts +885 -179
  304. package/src/core/sources/notion.ts +5 -4
  305. package/src/core/sources/obsidian.ts +2 -5
  306. package/src/core/sources/types.ts +17 -0
  307. package/src/core/static-files.ts +40 -0
  308. package/src/core/static-host.ts +125 -0
  309. package/src/core/svg-images.ts +98 -0
  310. package/src/core/syntax-diagnostics.ts +491 -0
  311. package/src/core/types.ts +43 -1
  312. package/src/deploy/artifacts.ts +2 -28
  313. package/src/deploy/generated-files.ts +128 -0
  314. package/src/deploy/platforms/vercel.ts +25 -1
  315. package/src/deploy/redirects.ts +43 -16
  316. package/src/deploy/sitemap.ts +2 -1
  317. package/src/markdown/base-links.ts +87 -6
  318. package/src/markdown/code-title.ts +29 -13
  319. package/src/markdown/content-assets.ts +210 -0
  320. package/src/markdown/directives.ts +69 -5
  321. package/src/markdown/fence-language.ts +106 -0
  322. package/src/markdown/fence-meta.ts +42 -0
  323. package/src/markdown/github-alerts.ts +172 -0
  324. package/src/markdown/heading-anchors.ts +265 -56
  325. package/src/markdown/include.ts +30 -3
  326. package/src/markdown/index.ts +145 -40
  327. package/src/markdown/prompt-text.ts +95 -0
  328. package/src/markdown/relative-links.ts +37 -2
  329. package/src/markdown/route-snapshot.ts +22 -12
  330. package/src/markdown/svg-fallback.ts +51 -0
  331. package/src/markdown/title-heading.ts +134 -0
  332. package/src/migrate/migrate.ts +127 -2
  333. package/src/og/card.ts +14 -4
  334. package/src/openapi/asyncapi.ts +14 -6
  335. package/src/openapi/checks.ts +160 -15
  336. package/src/openapi/model.ts +172 -33
  337. package/src/openapi/parse.ts +13 -4
  338. package/src/openapi/render-mdx.ts +55 -9
  339. package/src/openapi/source.ts +87 -6
  340. package/src/registry/eject.ts +0 -1
  341. package/src/search/documents.ts +10 -2
  342. package/src/sources/filesystem.ts +28 -3
  343. package/src/sources/mdx-remote.ts +7 -15
  344. package/src/theme/color.ts +14 -0
  345. package/src/theme/entry.ts +22 -1
  346. package/src/theme/palette.ts +74 -1
  347. package/dist/cli/chunk-0pmb4tr4.js.map +0 -35
  348. package/dist/cli/chunk-0w6hs479.js.map +0 -10
  349. package/dist/cli/chunk-150jk7km.js +0 -52
  350. package/dist/cli/chunk-150jk7km.js.map +0 -10
  351. package/dist/cli/chunk-36bxs9c7.js.map +0 -10
  352. package/dist/cli/chunk-53jqw8z0.js +0 -89
  353. package/dist/cli/chunk-53jqw8z0.js.map +0 -10
  354. package/dist/cli/chunk-60hz265r.js.map +0 -10
  355. package/dist/cli/chunk-desvm72z.js.map +0 -14
  356. package/dist/cli/chunk-dpy8qdjf.js.map +0 -17
  357. package/dist/cli/chunk-es8h0v3j.js +0 -441
  358. package/dist/cli/chunk-es8h0v3j.js.map +0 -11
  359. package/dist/cli/chunk-kdpzw38a.js.map +0 -11
  360. package/dist/cli/chunk-nbyvgnnm.js.map +0 -36
  361. package/dist/cli/chunk-s0bdnc7v.js.map +0 -10
  362. package/dist/cli/chunk-twy7psdz.js.map +0 -10
  363. package/dist/cli/chunk-ydp3065p.js +0 -64
  364. package/dist/cli/chunk-ydp3065p.js.map +0 -10
  365. /package/dist/cli/{chunk-74wfhv79.js.map → chunk-05f21r8h.js.map} +0 -0
  366. /package/dist/cli/{chunk-9qzgg6mj.js.map → chunk-1cm0h819.js.map} +0 -0
  367. /package/dist/cli/{chunk-ms9z66nz.js.map → chunk-4rftmttv.js.map} +0 -0
  368. /package/dist/cli/{chunk-hvcxng5f.js.map → chunk-7tekknev.js.map} +0 -0
  369. /package/dist/cli/{chunk-bxwhtvw8.js.map → chunk-ahc5gc9h.js.map} +0 -0
  370. /package/dist/cli/{chunk-tfycddbt.js.map → chunk-bjk964fp.js.map} +0 -0
  371. /package/dist/cli/{chunk-dqhg54mr.js.map → chunk-dmx6cezx.js.map} +0 -0
  372. /package/dist/cli/{chunk-ave1wcbr.js.map → chunk-m9bp2hc1.js.map} +0 -0
  373. /package/dist/cli/{chunk-58bt3hag.js.map → chunk-mrvh4c88.js.map} +0 -0
  374. /package/dist/cli/{chunk-1f882900.js.map → chunk-th0pgaj5.js.map} +0 -0
  375. /package/dist/cli/{chunk-dhwtqnnd.js.map → chunk-vnbvhgmd.js.map} +0 -0
  376. /package/dist/cli/{chunk-j1x92mx9.js.map → chunk-w6e455pz.js.map} +0 -0
  377. /package/dist/cli/{chunk-y4msrwm9.js.map → chunk-xgq4eytj.js.map} +0 -0
@@ -29,6 +29,7 @@ import {
29
29
  MARKDOWN_BODY_FEATURES,
30
30
  MDX_BODY_FEATURES,
31
31
  } from "../markdown/features.ts";
32
+ import { normalizeFence } from "../markdown/fence-language.ts";
32
33
  import { pageFacets } from "./facets.ts";
33
34
 
34
35
  /** A document indexed by the client-side search providers (Orama, FlexSearch). */
@@ -177,7 +178,13 @@ const collectCode = (
177
178
  if (!walk.includeCodeBlocks) {
178
179
  return;
179
180
  }
180
- const title = parseCodeTitle(node.meta ?? undefined);
181
+ // The fence as the page renders it (`[file.ts]{2}` splits, `JSON`
182
+ // lowercases), so the indexed title is the one the page shows.
183
+ const fence = normalizeFence(node.lang, node.meta) ?? node;
184
+ const title = parseCodeTitle(
185
+ fence.meta ?? undefined,
186
+ fence.lang ?? undefined
187
+ );
181
188
  if (title) {
182
189
  out.push(title, " ");
183
190
  }
@@ -504,7 +511,8 @@ export const buildSearchDocuments = async (
504
511
  return false;
505
512
  }
506
513
  const page = pageById.get(route.id);
507
- return page ? contentIndexable(page, project.config) : false;
514
+ const { config, graph } = project;
515
+ return page ? contentIndexable(page, config, graph) : false;
508
516
  });
509
517
 
510
518
  // Built once — `downlevelComponents` rebuilds its registry per call
@@ -7,12 +7,37 @@ import { DEFAULT_CONTENT_GLOB, sharedSourceOptionsSchema } from "./shared.ts";
7
7
 
8
8
  /** What `include` defaults to: every Markdown/MDX file under the root. */
9
9
  export const DEFAULT_CONTENT_INCLUDE = [DEFAULT_CONTENT_GLOB];
10
- /** What `exclude` defaults to: underscore- and dot-prefixed paths. */
10
+ /** What `exclude` always holds: underscore- and dot-prefixed paths. */
11
11
  export const DEFAULT_CONTENT_EXCLUDE = ["**/_*", "**/.*"];
12
12
 
13
+ /**
14
+ * A source's `exclude` as the scan applies it: the defaults, plus the
15
+ * author's patterns. A `!pattern` entry takes that exact pattern back out, a
16
+ * default included, so `["!**\/_*"]` publishes `_`-prefixed files. The glob
17
+ * library can't negate an ignore pattern itself.
18
+ */
19
+ export const resolveContentExclude = (
20
+ patterns: readonly string[]
21
+ ): string[] => {
22
+ const kept = new Set(
23
+ patterns.flatMap((pattern) =>
24
+ pattern.startsWith("!") ? [pattern.slice(1)] : []
25
+ )
26
+ );
27
+ return [
28
+ ...new Set([
29
+ ...DEFAULT_CONTENT_EXCLUDE,
30
+ ...patterns.filter((pattern) => !pattern.startsWith("!")),
31
+ ]),
32
+ ].filter((pattern) => !kept.has(pattern));
33
+ };
34
+
13
35
  /** Options for {@link filesystem}. */
14
36
  export interface FilesystemOptions extends SharedSourceOptions {
15
- /** Glob patterns to ignore. Defaults to `["**\/_*", "**\/.*"]`. */
37
+ /**
38
+ * Glob patterns to ignore, on top of `["**\/_*", "**\/.*"]`. A `!pattern`
39
+ * entry stops ignoring that pattern, a default included.
40
+ */
16
41
  exclude?: string[];
17
42
  /** Glob patterns to include. Defaults to `["**\/*.{md,mdx}"]`. */
18
43
  include?: string[];
@@ -21,7 +46,7 @@ export interface FilesystemOptions extends SharedSourceOptions {
21
46
  }
22
47
 
23
48
  export const filesystemOptionsSchema = sharedSourceOptionsSchema.extend({
24
- exclude: z.array(z.string()).default(DEFAULT_CONTENT_EXCLUDE),
49
+ exclude: z.array(z.string()).default([]).transform(resolveContentExclude),
25
50
  include: z.array(z.string()).default(DEFAULT_CONTENT_INCLUDE),
26
51
  root: z.string().default("docs"),
27
52
  });
@@ -50,27 +50,19 @@ export const mdxRemoteAdapterSchema = adapterDescriptorSchema(
50
50
  mdxRemoteOptionsSchema
51
51
  );
52
52
 
53
- // The hosts the source ever sends `GITHUB_TOKEN` to (the same set the fetch
54
- // in core/sources/mdx-remote.ts checks), so only an adapter reading from
55
- // GitHub declares the variable.
56
- const GITHUB_HOSTS = new Set(["api.github.com", "raw.githubusercontent.com"]);
57
-
58
- const readsFromGithub = (options: MdxRemoteOptions): boolean =>
59
- options.github !== undefined ||
60
- (options.url !== undefined &&
61
- URL.canParse(options.url) &&
62
- GITHUB_HOSTS.has(new URL(options.url).hostname));
63
-
64
53
  /**
65
54
  * Remote Markdown/MDX fetched over HTTP. Enumerate files explicitly against a
66
55
  * raw `url` base, or from a GitHub repo subtree via `github`. A private repo's
67
- * token comes from `GITHUB_TOKEN` — never inline it here. The adapter declares
68
- * the variable only when it reads from GitHub, since a `url` on any other host
69
- * is never sent the token.
56
+ * token comes from `GITHUB_TOKEN` — never inline it here. Only `github`
57
+ * declares the variable: it lists files through GitHub's API, whose
58
+ * unauthenticated rate limit a build can run into even for a public
59
+ * repository. A raw `url` needs no token for a public repository, so a fetch
60
+ * that fails for want of one names the variable instead (see
61
+ * core/sources/mdx-remote.ts).
70
62
  */
71
63
  export const mdxRemote = (options: MdxRemoteOptions): MdxRemoteAdapter => ({
72
64
  kind: "mdx-remote",
73
65
  options,
74
- requiredSecrets: readsFromGithub(options) ? ["GITHUB_TOKEN"] : [],
66
+ requiredSecrets: options.github ? ["GITHUB_TOKEN"] : [],
75
67
  runtimeDeps: [],
76
68
  });
@@ -470,6 +470,20 @@ export const parseColor = (value: string): Rgba | null => {
470
470
  : null;
471
471
  };
472
472
 
473
+ // Color syntax `parseColor` leaves unread but a browser takes: a custom
474
+ // property, `color-mix()`, `color()`, `light-dark()`, a relative color
475
+ // (`oklch(from var(--x) l c h)`), and the `currentcolor` keyword.
476
+ const UNREAD_COLOR =
477
+ /^(?:currentcolor|(?:color|color-mix|hsla?|hwb|lab|lch|light-dark|oklab|oklch|rgba?|var)\(.*\))$/isu;
478
+
479
+ /**
480
+ * Whether `value` is a CSS color: one `parseColor` reads, or a color function
481
+ * or keyword it leaves unread. Words that name no color (`deep purple`), and
482
+ * hex values with a wrong digit count or no `#`, are not.
483
+ */
484
+ export const isCssColor = (value: string): boolean =>
485
+ parseColor(value) !== null || UNREAD_COLOR.test(value.trim());
486
+
473
487
  /** `color` painted over an opaque `backdrop`. */
474
488
  export const composite = (color: Rgba, backdrop: Rgba): Rgba => {
475
489
  const mix = (top: number, bottom: number): number =>
@@ -63,13 +63,18 @@ const TOKEN_DEFAULTS = `:root {
63
63
  --blume-action: var(--blume-accent);
64
64
  --blume-action-foreground: var(--blume-accent-foreground);
65
65
  --blume-code-background: oklch(0.99 0 0);
66
- /* Shiki notation transformers: line/word highlight, diff add/remove. */
66
+ /* Shiki notation transformers: line/word highlight, diff add/remove, and
67
+ error/warning lines. */
67
68
  --blume-code-highlight: oklch(0.55 0.16 255 / 0.1);
68
69
  --blume-code-highlight-border: oklch(0.55 0.16 255 / 0.55);
69
70
  --blume-code-add: oklch(0.72 0.16 150 / 0.16);
70
71
  --blume-code-add-border: oklch(0.52 0.15 150 / 0.7);
71
72
  --blume-code-remove: oklch(0.66 0.21 22 / 0.16);
72
73
  --blume-code-remove-border: oklch(0.55 0.2 22 / 0.7);
74
+ --blume-code-error: oklch(0.66 0.21 22 / 0.16);
75
+ --blume-code-error-border: oklch(0.55 0.2 22 / 0.7);
76
+ --blume-code-warning: oklch(0.8 0.16 80 / 0.2);
77
+ --blume-code-warning-border: oklch(0.66 0.15 70 / 0.75);
73
78
  --blume-code-word: oklch(0.55 0.16 255 / 0.16);
74
79
  --blume-code-word-border: oklch(0.55 0.16 255 / 0.5);
75
80
  --blume-radius: 0.75rem;
@@ -129,6 +134,10 @@ const TOKEN_DEFAULTS = `:root {
129
134
  --blume-code-add-border: oklch(0.72 0.16 150 / 0.7);
130
135
  --blume-code-remove: oklch(0.72 0.21 22 / 0.22);
131
136
  --blume-code-remove-border: oklch(0.7 0.2 22 / 0.7);
137
+ --blume-code-error: oklch(0.72 0.21 22 / 0.22);
138
+ --blume-code-error-border: oklch(0.7 0.2 22 / 0.7);
139
+ --blume-code-warning: oklch(0.82 0.16 80 / 0.18);
140
+ --blume-code-warning-border: oklch(0.82 0.16 80 / 0.7);
132
141
  --blume-code-word: oklch(0.7 0.14 255 / 0.22);
133
142
  --blume-code-word-border: oklch(0.7 0.14 255 / 0.55);
134
143
  }`;
@@ -866,6 +875,18 @@ pre[data-line-numbers] .line::before {
866
875
  box-shadow: inset 2px 0 0 0 var(--blume-code-remove-border);
867
876
  }
868
877
 
878
+ /* Error and warning lines (\`// [!code error]\`, \`// [!code warning]\`) are
879
+ highlighted lines with a level class, tinted red and amber. */
880
+ .line.highlighted.error {
881
+ background-color: var(--blume-code-error) !important;
882
+ box-shadow: inset 2px 0 0 0 var(--blume-code-error-border);
883
+ }
884
+
885
+ .line.highlighted.warning {
886
+ background-color: var(--blume-code-warning) !important;
887
+ box-shadow: inset 2px 0 0 0 var(--blume-code-warning-border);
888
+ }
889
+
869
890
  /* Word highlight (\`// [!code word:x]\`) wraps matches in an inline span. The
870
891
  element selector keeps it ahead of the transparent token-span rule. */
871
892
  span.highlighted-word {
@@ -1,5 +1,5 @@
1
1
  import type { ResolvedConfig } from "../core/schema.ts";
2
- import { composite, contrastRatio, parseColor } from "./color.ts";
2
+ import { composite, contrastRatio, isCssColor, parseColor } from "./color.ts";
3
3
  import type { Rgba } from "./color.ts";
4
4
 
5
5
  /** Per-mode CSS colors. */
@@ -243,3 +243,76 @@ ${root}
243
243
  }
244
244
  ${dark}`;
245
245
  };
246
+
247
+ /** A configured color: where the config sets it, and its value. */
248
+ export interface ColorSetting {
249
+ /** The config path, e.g. `["theme", "accent", "dark"]`. */
250
+ path: string[];
251
+ /** Whether the field also takes an accent preset name (`teal`). */
252
+ presets: boolean;
253
+ value: string;
254
+ }
255
+
256
+ const MODES = ["light", "dark"] as const;
257
+
258
+ /**
259
+ * A per-mode field's settings. Both modes holding one value (a string, which
260
+ * the schema copies into each) is one setting at the field itself, so a
261
+ * mistake is reported once, at the key that set it.
262
+ */
263
+ const modeSettings = (
264
+ path: string[],
265
+ value: { dark?: string; light?: string } | undefined,
266
+ presets: boolean
267
+ ): ColorSetting[] => {
268
+ if (value?.light !== undefined && value.light === value.dark) {
269
+ return [{ path, presets, value: value.light }];
270
+ }
271
+ return MODES.flatMap((mode) => {
272
+ const color = value?.[mode];
273
+ return color === undefined
274
+ ? []
275
+ : [{ path: [...path, mode], presets, value: color }];
276
+ });
277
+ };
278
+
279
+ const OG_PALETTE_KEYS = [
280
+ "accent",
281
+ "background",
282
+ "border",
283
+ "foreground",
284
+ "muted",
285
+ ] as const;
286
+
287
+ /**
288
+ * The configured colors that aren't CSS colors (`"deep purple"`, a hex value
289
+ * missing its `#`): `theme.accent`, `theme.action`, and `theme.background`,
290
+ * and the OG card's `seo.og.palette`. The schema takes any string, so a
291
+ * mistake would otherwise reach the stylesheet, where browsers drop it, or
292
+ * the card renderer, which rejects it. Preset names are CSS color names too.
293
+ */
294
+ export const invalidColorSettings = (
295
+ config: ResolvedConfig
296
+ ): ColorSetting[] => {
297
+ const { theme } = config;
298
+ const palette = config.seo.og.palette ?? {};
299
+ return [
300
+ ...modeSettings(["theme", "accent"], theme.accent, true),
301
+ ...(theme.action === undefined
302
+ ? []
303
+ : [{ path: ["theme", "action"], presets: true, value: theme.action }]),
304
+ ...modeSettings(["theme", "background"], theme.background, false),
305
+ ...OG_PALETTE_KEYS.flatMap((key) => {
306
+ const value = palette[key];
307
+ return value === undefined
308
+ ? []
309
+ : [
310
+ {
311
+ path: ["seo", "og", "palette", key],
312
+ presets: key === "accent",
313
+ value,
314
+ },
315
+ ];
316
+ }),
317
+ ].filter((setting) => !isCssColor(setting.value));
318
+ };