blume 2.1.0 → 2.1.2

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 (450) hide show
  1. package/CHANGELOG.md +110 -0
  2. package/dist/cli/{chunk-ga0pf4aj.js → chunk-0n9xkp3d.js} +12 -3
  3. package/dist/cli/{chunk-ga0pf4aj.js.map → chunk-0n9xkp3d.js.map} +3 -3
  4. package/dist/cli/{chunk-43zcf4gz.js → chunk-0pmb4tr4.js} +541 -368
  5. package/dist/cli/chunk-0pmb4tr4.js.map +35 -0
  6. package/dist/cli/{chunk-9geymqns.js → chunk-0w6hs479.js} +15 -15
  7. package/dist/cli/{chunk-xkz5xbtv.js → chunk-124fvmzq.js} +2802 -1422
  8. package/dist/cli/chunk-124fvmzq.js.map +220 -0
  9. package/dist/cli/chunk-150jk7km.js +52 -0
  10. package/dist/cli/chunk-150jk7km.js.map +10 -0
  11. package/dist/cli/{chunk-y4ykbark.js → chunk-1f882900.js} +2 -2
  12. package/dist/cli/{chunk-5ffywsmb.js → chunk-297ajdcv.js} +8 -6
  13. package/dist/cli/{chunk-5ffywsmb.js.map → chunk-297ajdcv.js.map} +3 -3
  14. package/dist/cli/{chunk-h2a48yhd.js → chunk-32khwcb6.js} +120 -16
  15. package/dist/cli/{chunk-h2a48yhd.js.map → chunk-32khwcb6.js.map} +10 -10
  16. package/dist/cli/{chunk-5cg2rzgf.js → chunk-36bxs9c7.js} +20 -49
  17. package/dist/cli/{chunk-5cg2rzgf.js.map → chunk-36bxs9c7.js.map} +4 -5
  18. package/dist/cli/{chunk-py62fewh.js → chunk-53jqw8z0.js} +3 -3
  19. package/dist/cli/{chunk-5wj2qwn2.js → chunk-58bt3hag.js} +4 -4
  20. package/dist/cli/{chunk-e7vvk5ya.js → chunk-5cmts6dv.js} +3 -3
  21. package/dist/cli/{chunk-y5h4r2y0.js → chunk-60hz265r.js} +15 -5
  22. package/dist/cli/chunk-60hz265r.js.map +10 -0
  23. package/dist/cli/chunk-74wfhv79.js +65 -0
  24. package/dist/cli/chunk-74wfhv79.js.map +10 -0
  25. package/dist/cli/{chunk-g2z9x01v.js → chunk-9qzgg6mj.js} +3 -3
  26. package/dist/cli/{chunk-q3wxxq39.js → chunk-a57yh0h9.js} +5 -5
  27. package/dist/cli/{chunk-713mngdq.js → chunk-ave1wcbr.js} +76 -10
  28. package/dist/cli/chunk-ave1wcbr.js.map +14 -0
  29. package/dist/cli/{chunk-2n4ps1b3.js → chunk-bqxaqn5p.js} +40 -22
  30. package/dist/cli/chunk-bqxaqn5p.js.map +15 -0
  31. package/dist/cli/{chunk-jnwj5kjj.js → chunk-bxwhtvw8.js} +20 -7
  32. package/dist/cli/{chunk-jnwj5kjj.js.map → chunk-bxwhtvw8.js.map} +3 -3
  33. package/dist/cli/chunk-ckrcm08h.js +324 -0
  34. package/dist/cli/chunk-ckrcm08h.js.map +14 -0
  35. package/dist/cli/{chunk-2f3ndkpw.js → chunk-desvm72z.js} +3 -3
  36. package/dist/cli/{chunk-gp84za0h.js → chunk-dhwtqnnd.js} +2 -2
  37. package/dist/cli/{chunk-4h8z9vv5.js → chunk-dpy8qdjf.js} +93 -47
  38. package/dist/cli/chunk-dpy8qdjf.js.map +17 -0
  39. package/dist/cli/{chunk-2f7n4qzt.js → chunk-dqhg54mr.js} +1 -1
  40. package/dist/cli/{chunk-0gz36akr.js → chunk-dv2z0rzf.js} +21 -5
  41. package/dist/cli/chunk-dv2z0rzf.js.map +12 -0
  42. package/dist/cli/{chunk-cm89scdv.js → chunk-es8h0v3j.js} +9 -11
  43. package/dist/cli/{chunk-cm89scdv.js.map → chunk-es8h0v3j.js.map} +3 -3
  44. package/dist/cli/{chunk-zhvd6adm.js → chunk-gfc5fqvf.js} +14 -14
  45. package/dist/cli/{chunk-nd1821sk.js → chunk-gxtg6ed2.js} +33 -19
  46. package/dist/cli/chunk-gxtg6ed2.js.map +10 -0
  47. package/dist/cli/{chunk-p804f3pe.js → chunk-hvcxng5f.js} +6 -6
  48. package/dist/cli/{chunk-ta27feev.js → chunk-j1x92mx9.js} +21 -2
  49. package/dist/cli/chunk-j1x92mx9.js.map +10 -0
  50. package/dist/cli/{chunk-rekqz4qg.js → chunk-k3gr1nm9.js} +19 -16
  51. package/dist/cli/chunk-k3gr1nm9.js.map +10 -0
  52. package/dist/cli/{chunk-1n228xqb.js → chunk-kdpzw38a.js} +2 -2
  53. package/dist/cli/{chunk-cy5bm0j0.js → chunk-ms9z66nz.js} +2 -2
  54. package/dist/cli/{chunk-cy5bm0j0.js.map → chunk-ms9z66nz.js.map} +2 -2
  55. package/dist/cli/{chunk-zf748avv.js → chunk-nbyvgnnm.js} +193 -286
  56. package/dist/cli/chunk-nbyvgnnm.js.map +36 -0
  57. package/dist/cli/{chunk-6bm0xpgd.js → chunk-s0bdnc7v.js} +2 -2
  58. package/dist/cli/{chunk-yxmk4pec.js → chunk-sc93apfs.js} +17 -16
  59. package/dist/cli/{chunk-yxmk4pec.js.map → chunk-sc93apfs.js.map} +3 -3
  60. package/dist/cli/{chunk-cmtcnh9f.js → chunk-tfycddbt.js} +2 -2
  61. package/dist/cli/{chunk-9xr4dgee.js → chunk-twy7psdz.js} +29 -16
  62. package/dist/cli/chunk-twy7psdz.js.map +10 -0
  63. package/dist/cli/{chunk-ntv4qrt7.js → chunk-y4msrwm9.js} +15 -15
  64. package/dist/cli/{chunk-yj17vs39.js → chunk-ydp3065p.js} +5 -5
  65. package/dist/cli/index.js +24 -19
  66. package/dist/cli/index.js.map +3 -3
  67. package/dist/types/ai/ask-context.d.ts +6 -2
  68. package/dist/types/ai/ask.d.ts +24 -5
  69. package/dist/types/ai/component-markdown.d.ts +2 -0
  70. package/dist/types/ai/openapi-components.d.ts +4 -1
  71. package/dist/types/analytics/clics.d.ts +37 -0
  72. package/dist/types/analytics/index.d.ts +2 -0
  73. package/dist/types/analytics/schema.d.ts +18 -0
  74. package/dist/types/astro/integration.d.ts +11 -4
  75. package/dist/types/astro/markdown-negotiation.d.ts +3 -0
  76. package/dist/types/astro/pages.d.ts +10 -0
  77. package/dist/types/cli/init/scaffold.d.ts +1 -1
  78. package/dist/types/components/content/api-field.d.ts +4 -1
  79. package/dist/types/components/content/api-page.d.ts +6 -1
  80. package/dist/types/components/openapi/code-samples.d.ts +29 -0
  81. package/dist/types/components/openapi/helpers.d.ts +22 -1
  82. package/dist/types/components/openapi/security.d.ts +10 -0
  83. package/dist/types/components/openapi/snippets.d.ts +60 -0
  84. package/dist/types/core/changelog-index.d.ts +8 -0
  85. package/dist/types/core/config-input.d.ts +37 -6
  86. package/dist/types/core/data.d.ts +4 -0
  87. package/dist/types/core/i18n-ui.d.ts +2 -0
  88. package/dist/types/core/links.d.ts +8 -0
  89. package/dist/types/core/powered-by.d.ts +12 -0
  90. package/dist/types/core/probe.d.ts +2 -0
  91. package/dist/types/core/project-graph.d.ts +6 -0
  92. package/dist/types/core/redirect-patterns.d.ts +11 -3
  93. package/dist/types/core/schema.d.ts +228 -3
  94. package/dist/types/core/sources/cache.d.ts +3 -0
  95. package/dist/types/core/sources/contentful-rich-text.d.ts +11 -2
  96. package/dist/types/core/sources/contentful.d.ts +17 -1
  97. package/dist/types/core/sources/lexical.d.ts +5 -0
  98. package/dist/types/core/sources/lower.d.ts +10 -2
  99. package/dist/types/core/sources/normalize.d.ts +20 -1
  100. package/dist/types/core/sources/notion.d.ts +8 -0
  101. package/dist/types/core/sources/remote.d.ts +37 -10
  102. package/dist/types/core/sources/sanity.d.ts +1 -1
  103. package/dist/types/core/types.d.ts +17 -0
  104. package/dist/types/deploy/adapter-output.d.ts +2 -1
  105. package/dist/types/deploy/adapters/cloudflare.d.ts +7 -5
  106. package/dist/types/deploy/adapters/node.d.ts +58 -23
  107. package/dist/types/deploy/adapters/registry.d.ts +10 -0
  108. package/dist/types/deploy/adapters/types.d.ts +3 -2
  109. package/dist/types/deploy/cloudflare-negotiation.d.ts +5 -2
  110. package/dist/types/deploy/node-headers.d.ts +12 -4
  111. package/dist/types/deploy/platforms/cloudflare.d.ts +10 -7
  112. package/dist/types/deploy/platforms/node.d.ts +3 -1
  113. package/dist/types/deploy/platforms/types.d.ts +18 -7
  114. package/dist/types/deploy/platforms/vercel.d.ts +21 -2
  115. package/dist/types/deploy/redirects.d.ts +17 -1
  116. package/dist/types/deploy/sitemap.d.ts +2 -1
  117. package/dist/types/deploy/vercel-negotiation.d.ts +44 -21
  118. package/dist/types/narration/build.d.ts +34 -12
  119. package/dist/types/narration/provider.d.ts +96 -8
  120. package/dist/types/openapi/checks.d.ts +27 -0
  121. package/dist/types/openapi/graphql.d.ts +6 -0
  122. package/dist/types/openapi/model.d.ts +15 -4
  123. package/dist/types/openapi/parse.d.ts +3 -0
  124. package/dist/types/openapi/references.d.ts +16 -0
  125. package/dist/types/openapi/sentence.d.ts +11 -1
  126. package/dist/types/ratelimit/index.d.ts +1 -1
  127. package/dist/types/ratelimit/schema.d.ts +8 -0
  128. package/dist/types/ratelimit/upstash.d.ts +39 -14
  129. package/dist/types/reference/graphql.d.ts +76 -1
  130. package/dist/types/reference/index.d.ts +1 -1
  131. package/dist/types/reference/openapi.d.ts +2 -2
  132. package/dist/types/reference/options.d.ts +37 -1
  133. package/dist/types/reference/schema.d.ts +84 -0
  134. package/dist/types/search/adapters/registry.d.ts +3 -0
  135. package/dist/types/search/adapters/typesense.d.ts +14 -4
  136. package/dist/types/search/build.d.ts +3 -1
  137. package/dist/types/search/orama-index.d.ts +9 -9
  138. package/dist/types/search/sync/algolia.d.ts +5 -2
  139. package/dist/types/search/sync/index.d.ts +3 -1
  140. package/dist/types/search/sync/typesense.d.ts +11 -7
  141. package/dist/types/seo/jsonld.d.ts +11 -6
  142. package/dist/types/sources/contentful.d.ts +16 -0
  143. package/dist/types/sources/github-releases.d.ts +8 -1
  144. package/dist/types/sources/notion.d.ts +8 -0
  145. package/dist/types/sources/payload.d.ts +2 -0
  146. package/dist/types/sources/registry.d.ts +63 -0
  147. package/dist/types/sources/shared.d.ts +3 -0
  148. package/dist/types/sources/strapi.d.ts +2 -0
  149. package/docs/01-quickstart.mdx +4 -2
  150. package/docs/02-deployment.mdx +59 -13
  151. package/docs/03-upgrading.mdx +2 -1
  152. package/docs/04-migrating.mdx +9 -9
  153. package/docs/08-faq.mdx +12 -12
  154. package/docs/advanced/changelog.mdx +30 -2
  155. package/docs/advanced/custom-pages.mdx +1 -1
  156. package/docs/advanced/skills.mdx +1 -1
  157. package/docs/cli/audit.mdx +30 -7
  158. package/docs/cli/doctor.mdx +6 -2
  159. package/docs/cli/evals.mdx +4 -4
  160. package/docs/cli/translate.mdx +1 -0
  161. package/docs/cli/validate.mdx +4 -3
  162. package/docs/configuration/analytics.mdx +19 -1
  163. package/docs/configuration/assistant.mdx +6 -2
  164. package/docs/configuration/customization.mdx +4 -2
  165. package/docs/configuration/export.mdx +5 -3
  166. package/docs/configuration/index.mdx +4 -2
  167. package/docs/configuration/narration.mdx +43 -6
  168. package/docs/configuration/rate-limiting.mdx +23 -2
  169. package/docs/configuration/search.mdx +37 -14
  170. package/docs/content/components.mdx +2 -2
  171. package/docs/content/frontmatter.mdx +5 -3
  172. package/docs/content/i18n.mdx +2 -2
  173. package/docs/content/includes.mdx +1 -1
  174. package/docs/content/navigation.mdx +8 -6
  175. package/docs/content/sources/contentful.mdx +9 -4
  176. package/docs/content/sources/custom.mdx +7 -3
  177. package/docs/content/sources/github-releases.mdx +12 -2
  178. package/docs/content/sources/index.mdx +3 -3
  179. package/docs/content/sources/notion.mdx +17 -2
  180. package/docs/content/sources/obsidian.mdx +3 -1
  181. package/docs/content/sources/payload.mdx +5 -2
  182. package/docs/content/sources/remote-mdx.mdx +6 -0
  183. package/docs/content/sources/sanity.mdx +4 -2
  184. package/docs/content/sources/strapi.mdx +5 -2
  185. package/docs/content/syntax.mdx +2 -2
  186. package/docs/discoverability/agent-discovery.mdx +1 -1
  187. package/docs/discoverability/index.mdx +1 -1
  188. package/docs/discoverability/json-api.mdx +2 -0
  189. package/docs/discoverability/llms-txt.mdx +1 -1
  190. package/docs/discoverability/markdown.mdx +3 -1
  191. package/docs/discoverability/mcp.mdx +6 -0
  192. package/docs/discoverability/sitemap-and-robots.mdx +1 -1
  193. package/docs/discoverability/structured-data.mdx +8 -6
  194. package/docs/references/api-pages.mdx +1 -1
  195. package/docs/references/asyncapi.mdx +5 -1
  196. package/docs/references/graphql.mdx +15 -1
  197. package/docs/references/openapi.mdx +64 -8
  198. package/package.json +9 -9
  199. package/skills/blume/SKILL.md +1 -1
  200. package/skills/blume-migrate/SKILL.md +2 -2
  201. package/skills/blume-migrate/assets/{oxfmt@0.67.0.patch → oxfmt@0.71.0.patch} +7 -7
  202. package/skills/blume-migrate/references/docusaurus.md +4 -4
  203. package/skills/blume-migrate/references/fumadocs.md +17 -13
  204. package/skills/blume-migrate/references/monorepo.md +5 -5
  205. package/skills/blume-migrate/references/nextra.md +8 -5
  206. package/skills/blume-migrate/references/starlight.md +9 -7
  207. package/src/ai/ask-context.ts +33 -3
  208. package/src/ai/ask-limits.ts +13 -0
  209. package/src/ai/ask.ts +24 -6
  210. package/src/ai/changelog-markdown.ts +11 -6
  211. package/src/ai/component-markdown.ts +1 -1
  212. package/src/ai/cors.ts +12 -3
  213. package/src/ai/mcp/query.ts +14 -6
  214. package/src/ai/openapi-components.ts +28 -4
  215. package/src/ai/relative-links.ts +4 -38
  216. package/src/analytics/clics.ts +58 -0
  217. package/src/analytics/head.ts +5 -0
  218. package/src/analytics/index.ts +2 -0
  219. package/src/analytics/schema.ts +2 -0
  220. package/src/astro/generate.ts +91 -56
  221. package/src/astro/integration.ts +72 -22
  222. package/src/astro/markdown-negotiation.ts +3 -0
  223. package/src/astro/module-types.ts +3 -1
  224. package/src/astro/pages.ts +23 -0
  225. package/src/astro/render-deps.ts +10 -5
  226. package/src/astro/runtime-deps.ts +23 -2
  227. package/src/astro/templates.ts +129 -81
  228. package/src/audit/catalog.ts +19 -3
  229. package/src/audit/checks/links.ts +14 -1
  230. package/src/audit/checks/network.ts +110 -6
  231. package/src/audit/checks/redirects.ts +6 -4
  232. package/src/audit/checks/robots.ts +58 -2
  233. package/src/audit/run.ts +3 -0
  234. package/src/audit/types.ts +2 -0
  235. package/src/audit/url.ts +14 -5
  236. package/src/blume-modules.d.ts +5 -1
  237. package/src/cli/args.ts +51 -0
  238. package/src/cli/build-failure.ts +23 -0
  239. package/src/cli/commands/audit.ts +10 -1
  240. package/src/cli/commands/dev.ts +18 -2
  241. package/src/cli/commands/doctor.ts +45 -12
  242. package/src/cli/commands/eval.ts +36 -4
  243. package/src/cli/commands/init.ts +6 -4
  244. package/src/cli/commands/validate.ts +10 -1
  245. package/src/cli/init/scaffold.ts +9 -6
  246. package/src/cli/prepare.ts +6 -3
  247. package/src/cli/required-secrets.ts +3 -2
  248. package/src/components/content/ApiPlayground.astro +6 -2
  249. package/src/components/content/api-field.ts +4 -1
  250. package/src/components/content/api-page.ts +31 -7
  251. package/src/components/content/mermaid-element.ts +15 -1
  252. package/src/components/content/view-switcher.ts +7 -4
  253. package/src/components/islands/hooks.ts +27 -1
  254. package/src/components/layout/NavTree.astro +49 -5
  255. package/src/components/layout/NavTreeScript.astro +18 -0
  256. package/src/components/layout/PageActions.astro +139 -24
  257. package/src/components/layout/PageLayout.astro +13 -3
  258. package/src/components/layout/RootLayout.astro +27 -14
  259. package/src/components/layout/Search.astro +17 -3
  260. package/src/components/layout/TableOfContents.astro +24 -17
  261. package/src/components/layout/analytics-client.ts +8 -8
  262. package/src/components/layout/head-scripts.ts +6 -1
  263. package/src/components/layout/search/algolia.ts +10 -1
  264. package/src/components/layout/search/analytics.ts +42 -14
  265. package/src/components/layout/search/endpoint.ts +48 -5
  266. package/src/components/layout/search/pagefind.ts +114 -5
  267. package/src/components/layout/search/types.ts +12 -0
  268. package/src/components/layout/search/typesense.ts +18 -6
  269. package/src/components/openapi/AsyncApiOperation.astro +14 -7
  270. package/src/components/openapi/Authorization.astro +10 -0
  271. package/src/components/openapi/GraphqlOperation.astro +5 -0
  272. package/src/components/openapi/Operation.astro +24 -1
  273. package/src/components/openapi/ParametersTable.astro +8 -4
  274. package/src/components/openapi/Playground.astro +7 -1
  275. package/src/components/openapi/RequestBody.astro +19 -2
  276. package/src/components/openapi/Responses.astro +1 -0
  277. package/src/components/openapi/SchemaTable.astro +15 -3
  278. package/src/components/openapi/async-snippets.ts +61 -5
  279. package/src/components/openapi/async.ts +123 -29
  280. package/src/components/openapi/graphql-helpers.ts +35 -12
  281. package/src/components/openapi/helpers.ts +36 -2
  282. package/src/components/openapi/message-model.ts +54 -11
  283. package/src/components/openapi/message.ts +14 -4
  284. package/src/components/openapi/operation-model.ts +16 -7
  285. package/src/components/openapi/playground-client.ts +77 -58
  286. package/src/components/openapi/playground-schema.ts +1 -1
  287. package/src/components/openapi/schema-tree.ts +44 -14
  288. package/src/components/openapi/security.ts +10 -0
  289. package/src/components/openapi/snippets.ts +5 -3
  290. package/src/components/openapi/validate-json.ts +4 -3
  291. package/src/components/powered-by-middleware.ts +33 -0
  292. package/src/core/changelog-index.ts +31 -1
  293. package/src/core/component-diagnostics.ts +53 -0
  294. package/src/core/component-overrides.ts +32 -0
  295. package/src/core/config-input.ts +42 -6
  296. package/src/core/data.ts +2 -0
  297. package/src/core/diagnostics.ts +5 -0
  298. package/src/core/i18n-ui.ts +2 -0
  299. package/src/core/includes.ts +1 -1
  300. package/src/core/links.ts +47 -17
  301. package/src/core/powered-by.ts +12 -0
  302. package/src/core/probe.ts +26 -6
  303. package/src/core/project-graph.ts +59 -18
  304. package/src/core/redirect-patterns.ts +36 -7
  305. package/src/core/schema.ts +26 -6
  306. package/src/core/sources/cache.ts +6 -0
  307. package/src/core/sources/contentful-rich-text.ts +29 -6
  308. package/src/core/sources/contentful.ts +135 -25
  309. package/src/core/sources/filesystem.ts +26 -4
  310. package/src/core/sources/github-releases.ts +12 -1
  311. package/src/core/sources/lexical.ts +15 -10
  312. package/src/core/sources/lower.ts +19 -3
  313. package/src/core/sources/mdx-remote.ts +62 -10
  314. package/src/core/sources/normalize.ts +227 -41
  315. package/src/core/sources/notion.ts +34 -10
  316. package/src/core/sources/obsidian.ts +16 -3
  317. package/src/core/sources/payload.ts +38 -15
  318. package/src/core/sources/remote.ts +72 -15
  319. package/src/core/sources/resolve.ts +11 -1
  320. package/src/core/sources/sanity.ts +43 -25
  321. package/src/core/sources/strapi.ts +2 -2
  322. package/src/core/types.ts +18 -0
  323. package/src/core/ui-packs/ar.ts +1 -0
  324. package/src/core/ui-packs/bg.ts +1 -0
  325. package/src/core/ui-packs/bn.ts +1 -0
  326. package/src/core/ui-packs/ca.ts +1 -0
  327. package/src/core/ui-packs/cs.ts +1 -0
  328. package/src/core/ui-packs/da.ts +1 -0
  329. package/src/core/ui-packs/de.ts +1 -0
  330. package/src/core/ui-packs/el.ts +1 -0
  331. package/src/core/ui-packs/es.ts +1 -0
  332. package/src/core/ui-packs/fa.ts +1 -0
  333. package/src/core/ui-packs/fi.ts +1 -0
  334. package/src/core/ui-packs/fr.ts +1 -0
  335. package/src/core/ui-packs/he.ts +1 -0
  336. package/src/core/ui-packs/hi.ts +1 -0
  337. package/src/core/ui-packs/hr.ts +1 -0
  338. package/src/core/ui-packs/hu.ts +1 -0
  339. package/src/core/ui-packs/id.ts +1 -0
  340. package/src/core/ui-packs/it.ts +1 -0
  341. package/src/core/ui-packs/ja.ts +1 -0
  342. package/src/core/ui-packs/ko.ts +1 -0
  343. package/src/core/ui-packs/nl.ts +1 -0
  344. package/src/core/ui-packs/no.ts +1 -0
  345. package/src/core/ui-packs/pl.ts +1 -0
  346. package/src/core/ui-packs/pt-br.ts +1 -0
  347. package/src/core/ui-packs/pt.ts +1 -0
  348. package/src/core/ui-packs/ro.ts +1 -0
  349. package/src/core/ui-packs/ru.ts +1 -0
  350. package/src/core/ui-packs/sk.ts +1 -0
  351. package/src/core/ui-packs/sr.ts +1 -0
  352. package/src/core/ui-packs/sv.ts +1 -0
  353. package/src/core/ui-packs/th.ts +1 -0
  354. package/src/core/ui-packs/tr.ts +1 -0
  355. package/src/core/ui-packs/uk.ts +1 -0
  356. package/src/core/ui-packs/vi.ts +1 -0
  357. package/src/core/ui-packs/zh-tw.ts +1 -0
  358. package/src/core/ui-packs/zh.ts +1 -0
  359. package/src/deploy/adapter-output.ts +7 -2
  360. package/src/deploy/adapters/cloudflare.ts +7 -5
  361. package/src/deploy/adapters/node.ts +47 -9
  362. package/src/deploy/adapters/types.ts +7 -3
  363. package/src/deploy/artifacts.ts +2 -1
  364. package/src/deploy/cloudflare-negotiation.ts +36 -7
  365. package/src/deploy/headers.ts +15 -1
  366. package/src/deploy/node-headers.ts +32 -20
  367. package/src/deploy/platforms/cloudflare.ts +14 -9
  368. package/src/deploy/platforms/netlify.ts +2 -1
  369. package/src/deploy/platforms/node.ts +12 -2
  370. package/src/deploy/platforms/types.ts +21 -7
  371. package/src/deploy/platforms/vercel.ts +115 -17
  372. package/src/deploy/redirects.ts +66 -6
  373. package/src/deploy/rss.ts +3 -1
  374. package/src/deploy/sitemap.ts +39 -5
  375. package/src/deploy/vercel-negotiation.ts +325 -103
  376. package/src/eval/agents.ts +18 -1
  377. package/src/eval/prompts.ts +6 -3
  378. package/src/eval/report.ts +34 -13
  379. package/src/eval/run.ts +5 -0
  380. package/src/markdown/base-links.ts +15 -14
  381. package/src/markdown/package-commands.ts +9 -8
  382. package/src/markdown/relative-links.ts +3 -2
  383. package/src/narration/build.ts +218 -40
  384. package/src/narration/provider.ts +89 -9
  385. package/src/openapi/checks.ts +273 -0
  386. package/src/openapi/graphql-build.ts +21 -0
  387. package/src/openapi/graphql.ts +11 -0
  388. package/src/openapi/model.ts +15 -3
  389. package/src/openapi/parse.ts +127 -2
  390. package/src/openapi/references.ts +43 -3
  391. package/src/openapi/render-mdx.ts +68 -8
  392. package/src/openapi/sentence.ts +29 -2
  393. package/src/openapi/source.ts +39 -14
  394. package/src/ratelimit/index.ts +1 -1
  395. package/src/ratelimit/runtime.ts +37 -19
  396. package/src/ratelimit/upstash.ts +40 -10
  397. package/src/reference/graphql.ts +15 -1
  398. package/src/reference/index.ts +1 -0
  399. package/src/reference/openapi.ts +2 -2
  400. package/src/reference/options.ts +29 -1
  401. package/src/registry/eject.ts +8 -2
  402. package/src/search/adapters/locale-scope.ts +30 -0
  403. package/src/search/adapters/typesense.ts +14 -4
  404. package/src/search/build.ts +21 -3
  405. package/src/search/orama-index.ts +163 -31
  406. package/src/search/source-pages.ts +29 -0
  407. package/src/search/sync/algolia.ts +99 -9
  408. package/src/search/sync/index.ts +52 -13
  409. package/src/search/sync/typesense.ts +72 -27
  410. package/src/seo/jsonld.ts +38 -20
  411. package/src/sources/contentful.ts +12 -0
  412. package/src/sources/github-releases.ts +7 -1
  413. package/src/sources/notion.ts +7 -0
  414. package/src/sources/shared.ts +3 -0
  415. package/src/theme/color.ts +9 -10
  416. package/src/theme/entry.ts +43 -6
  417. package/src/translate/validate.ts +23 -1
  418. package/dist/cli/chunk-0gz36akr.js.map +0 -12
  419. package/dist/cli/chunk-2n4ps1b3.js.map +0 -15
  420. package/dist/cli/chunk-43zcf4gz.js.map +0 -36
  421. package/dist/cli/chunk-4ejxbzee.js +0 -39
  422. package/dist/cli/chunk-4ejxbzee.js.map +0 -10
  423. package/dist/cli/chunk-4h8z9vv5.js.map +0 -16
  424. package/dist/cli/chunk-713mngdq.js.map +0 -14
  425. package/dist/cli/chunk-9xr4dgee.js.map +0 -10
  426. package/dist/cli/chunk-amrb6hgh.js +0 -145
  427. package/dist/cli/chunk-amrb6hgh.js.map +0 -11
  428. package/dist/cli/chunk-nd1821sk.js.map +0 -10
  429. package/dist/cli/chunk-rekqz4qg.js.map +0 -10
  430. package/dist/cli/chunk-ta27feev.js.map +0 -10
  431. package/dist/cli/chunk-xkz5xbtv.js.map +0 -213
  432. package/dist/cli/chunk-y5h4r2y0.js.map +0 -10
  433. package/dist/cli/chunk-zf748avv.js.map +0 -37
  434. /package/dist/cli/{chunk-9geymqns.js.map → chunk-0w6hs479.js.map} +0 -0
  435. /package/dist/cli/{chunk-y4ykbark.js.map → chunk-1f882900.js.map} +0 -0
  436. /package/dist/cli/{chunk-py62fewh.js.map → chunk-53jqw8z0.js.map} +0 -0
  437. /package/dist/cli/{chunk-5wj2qwn2.js.map → chunk-58bt3hag.js.map} +0 -0
  438. /package/dist/cli/{chunk-e7vvk5ya.js.map → chunk-5cmts6dv.js.map} +0 -0
  439. /package/dist/cli/{chunk-g2z9x01v.js.map → chunk-9qzgg6mj.js.map} +0 -0
  440. /package/dist/cli/{chunk-q3wxxq39.js.map → chunk-a57yh0h9.js.map} +0 -0
  441. /package/dist/cli/{chunk-2f3ndkpw.js.map → chunk-desvm72z.js.map} +0 -0
  442. /package/dist/cli/{chunk-gp84za0h.js.map → chunk-dhwtqnnd.js.map} +0 -0
  443. /package/dist/cli/{chunk-2f7n4qzt.js.map → chunk-dqhg54mr.js.map} +0 -0
  444. /package/dist/cli/{chunk-zhvd6adm.js.map → chunk-gfc5fqvf.js.map} +0 -0
  445. /package/dist/cli/{chunk-p804f3pe.js.map → chunk-hvcxng5f.js.map} +0 -0
  446. /package/dist/cli/{chunk-1n228xqb.js.map → chunk-kdpzw38a.js.map} +0 -0
  447. /package/dist/cli/{chunk-6bm0xpgd.js.map → chunk-s0bdnc7v.js.map} +0 -0
  448. /package/dist/cli/{chunk-cmtcnh9f.js.map → chunk-tfycddbt.js.map} +0 -0
  449. /package/dist/cli/{chunk-ntv4qrt7.js.map → chunk-y4msrwm9.js.map} +0 -0
  450. /package/dist/cli/{chunk-yj17vs39.js.map → chunk-ydp3065p.js.map} +0 -0
@@ -8,14 +8,15 @@ import {
8
8
  fontLocaleCodes,
9
9
  buildFontEntries,
10
10
  isPatternPath,
11
- compileRedirects,
11
+ compileEveryRedirect,
12
12
  hasVariables,
13
13
  SVG_ASSET_HEADERS,
14
14
  applyBaseToAstroRedirects,
15
+ withMirrorRedirects,
15
16
  distDir,
16
17
  adapterRoot,
17
18
  deployPlatform
18
- } from "./chunk-xkz5xbtv.js";
19
+ } from "./chunk-124fvmzq.js";
19
20
  import {
20
21
  trimChar,
21
22
  normalizeBasePath
@@ -34,7 +35,7 @@ var deployOutputDir = (config, context) => {
34
35
  };
35
36
  var deployStaticDir = (config, context) => {
36
37
  const { deployment } = config;
37
- return deployment.options.output === "server" ? deployPlatform(deployment).serverStaticDir(context) : distDir(context);
38
+ return deployment.options.output === "server" ? deployPlatform(deployment).serverStaticDir(context, normalizeBasePath(deployment.options.base)) : distDir(context);
38
39
  };
39
40
  var surfaceAdapterOutput = async (config, context) => {
40
41
  const { deployment } = config;
@@ -219,6 +220,10 @@ import { existsSync as existsSync2, readFileSync } from "node:fs";
219
220
  import { pathToFileURL } from "node:url";
220
221
  import { dirname as dirname2, isAbsolute as isAbsolute2, join as join3, relative as relative2 } from "pathe";
221
222
 
223
+ // src/ai/ask-limits.ts
224
+ var ASK_MAX_MESSAGES = 40;
225
+ var ASK_MAX_MESSAGES_CHARS = 24000;
226
+
222
227
  // src/consent/clients.ts
223
228
  var CONSENT_CLIENT_MODULES = new Map([
224
229
  ["native", "blume/components/layout/consent/native.ts"]
@@ -273,13 +278,13 @@ var renderAstroAdapter = (deployment, context, ejected) => {
273
278
  const { astro } = platform;
274
279
  const args = {
275
280
  ...astro.options(context),
276
- ...deployPassthrough(deployment.options)
281
+ ...deployPassthrough(deployment.options, astro.configOptions)
277
282
  };
278
283
  const argsLiteral = Object.keys(args).length > 0 ? JSON.stringify(args) : "";
279
284
  const construct = `adapter(${argsLiteral})`;
280
285
  const expression = platform.hiddenRuntime.showProjectRoot && !ejected ? `withAdapterRoot(${construct}, ${JSON.stringify(adapterRoot(context))})` : construct;
281
286
  return {
282
- configEntries: Object.entries(astro.config).map(([key, value]) => `
287
+ configEntries: Object.entries(astro.config(deployment.options)).map(([key, value]) => `
283
288
  ${key}: ${JSON.stringify(value)},`).join(""),
284
289
  importLine: `import adapter from "${astro.package}";
285
290
  `,
@@ -338,7 +343,7 @@ var RENDER_EXTERNAL_DEPS = [
338
343
  ];
339
344
  var renderUserAliases = (aliases) => Object.entries(aliases ?? {}).toSorted(([a], [b]) => b.length - a.length).map(([find, replacement]) => `
340
345
  ${JSON.stringify(find)}: ${JSON.stringify(replacement)},`).join("");
341
- var REACT_EXCLUDE = String.raw`exclude: [/\/node_modules\/\.vite\//, /\/\.cache\/vite\//]`;
346
+ var REACT_EXCLUDE = String.raw`exclude: [/\/\.cache\/vite\//]`;
342
347
  var runtimeCacheOptions = (context, generatedModulesDir) => {
343
348
  if (generatedModulesDir !== undefined) {
344
349
  return { astro: "", vite: "" };
@@ -350,7 +355,7 @@ var runtimeCacheOptions = (context, generatedModulesDir) => {
350
355
  cacheDir: ${JSON.stringify(`${context.outDir}/.cache/vite`)},`
351
356
  };
352
357
  };
353
- var reactIntegration = (compilerPath) => compilerPath ? `react({ babel: { plugins: [[${JSON.stringify(compilerPath)}, { target: "19" }]] }, ${REACT_EXCLUDE} })` : `react({ ${REACT_EXCLUDE} })`;
358
+ var reactIntegration = (compiler) => compiler ? `react({ compiler: true, ${REACT_EXCLUDE} })` : `react({ ${REACT_EXCLUDE} })`;
354
359
  var renderIntegrationBridge = (bridge) => {
355
360
  if (!bridge) {
356
361
  return {
@@ -396,7 +401,7 @@ var resolveOptimizeDeps = (options) => {
396
401
  ...features.mermaid ? ["blume > mermaid"] : [],
397
402
  ...features.epub ? ["blume > epub-gen-memory/bundle"] : [],
398
403
  ...searchDep ? [`blume > ${searchDep}`] : [],
399
- ...options.needsReact && options.reactCompilerPath ? ["react/compiler-runtime"] : []
404
+ ...options.needsReact && options.reactCompiler ? ["react/compiler-runtime"] : []
400
405
  ];
401
406
  return { optimizeDepsEntries, optimizeDepsInclude };
402
407
  };
@@ -424,7 +429,10 @@ var renderRuntimeModuleWiring = (generatedModulesDir) => {
424
429
  return { aliasLines, imports: [], pluginEntry: "" };
425
430
  };
426
431
  var blumeIntegrationOptions = (options) => {
427
- const shared = { pages: options.pages };
432
+ const shared = {
433
+ pages: options.pages,
434
+ poweredBy: options.config.poweredBy
435
+ };
428
436
  if (options.redirects.length > 0) {
429
437
  shared.redirects = options.redirects;
430
438
  }
@@ -465,7 +473,7 @@ var astroConfigTemplate = (options) => {
465
473
  context,
466
474
  features,
467
475
  needsReact,
468
- reactCompilerPath: options.reactCompilerPath,
476
+ reactCompiler: options.reactCompiler,
469
477
  searchKind: config.search.provider.kind
470
478
  });
471
479
  const {
@@ -486,7 +494,8 @@ var astroConfigTemplate = (options) => {
486
494
  prefixDefaultLocale: !config.i18n.hideDefaultLocalePrefix
487
495
  }
488
496
  })},` : "";
489
- const basedRedirects = applyBaseToAstroRedirects(config.redirects, config.basePath, deployment.options.base ?? "", new Set(contentRoutes));
497
+ const redirectPages = new Set(contentRoutes);
498
+ const basedRedirects = withMirrorRedirects(applyBaseToAstroRedirects(config.redirects, config.basePath, deployment.options.base ?? "", redirectPages), redirectPages, { from: "", to: normalizeBasePath(deployment.options.base) });
490
499
  const exactRedirects = basedRedirects.filter((redirect) => !isPatternPath(redirect.from));
491
500
  const redirectsOption = exactRedirects.length > 0 ? `
492
501
  redirects: ${JSON.stringify(Object.fromEntries(exactRedirects.map((redirect) => [
@@ -547,7 +556,7 @@ var astroConfigTemplate = (options) => {
547
556
  `mdx({ processor: blumeMdxProcessor(${processorOptions}) })`
548
557
  ];
549
558
  if (needsReact) {
550
- integrations.push(reactIntegration(options.reactCompilerPath));
559
+ integrations.push(reactIntegration(options.reactCompiler));
551
560
  }
552
561
  if (needsVue) {
553
562
  integrations.push("vue()");
@@ -560,7 +569,7 @@ var astroConfigTemplate = (options) => {
560
569
  contentRoutes,
561
570
  ejected,
562
571
  pages,
563
- redirects: compileRedirects(basedRedirects)
572
+ redirects: compileEveryRedirect(basedRedirects)
564
573
  }))})`);
565
574
  const {
566
575
  configSourceMarker,
@@ -625,8 +634,8 @@ ${userConfigSetup}export default defineConfig({
625
634
  // Everything hydration can reach must be part of the dev dep optimizer's
626
635
  // FIRST run. The Vite root is the generated runtime, so user pages,
627
636
  // islands, and aliased components live outside it and are only crawled
628
- // when first requested — and \`react/compiler-runtime\` is Babel-injected,
629
- // so no source scan can ever see it. A dependency discovered after
637
+ // when first requested — and \`react/compiler-runtime\` is injected by the
638
+ // React Compiler, so no source scan can ever see it. A dependency discovered after
630
639
  // hydration begins triggers a mid-session re-optimization whose new
631
640
  // generation imports React through new \`?v=\` URLs; the browser then
632
641
  // evaluates a second React copy and every island tears down with
@@ -880,7 +889,7 @@ ${limit.check} const text = await readCappedText(request, ${ASK_BODY_LIMIT_BYTE
880
889
  const valid =
881
890
  Array.isArray(raw) &&
882
891
  raw.length > 0 &&
883
- raw.length <= 40 &&
892
+ raw.length <= ${ASK_MAX_MESSAGES} &&
884
893
  raw.every(
885
894
  (m: unknown) =>
886
895
  typeof m === "object" &&
@@ -888,10 +897,10 @@ ${limit.check} const text = await readCappedText(request, ${ASK_BODY_LIMIT_BYTE
888
897
  ("role" in m && (m.role === "user" || m.role === "assistant")) &&
889
898
  ("content" in m && typeof m.content === "string")
890
899
  ) &&
891
- JSON.stringify(raw).length <= 24_000;
900
+ JSON.stringify(raw).length <= ${ASK_MAX_MESSAGES_CHARS};
892
901
  if (!valid) {
893
902
  return new Response(
894
- "Invalid request: send 1-40 user/assistant messages with string content.",
903
+ "Invalid request: send 1-${ASK_MAX_MESSAGES} user/assistant messages with string content.",
895
904
  { status: 400 }
896
905
  );
897
906
  }
@@ -1034,10 +1043,11 @@ var searchClientTemplate = (config) => {
1034
1043
  return hostedSearchClient(provider);
1035
1044
  }
1036
1045
  case "server": {
1037
- return `${SEARCH_CLIENT_HEADER}${searchClientImport("endpoint")}${SEARCH_BASE_IMPORT}
1046
+ return `${SEARCH_CLIENT_HEADER}${searchClientImport("endpoint")}${SEARCH_BASE_IMPORT}import type { SearchClientOptions } from "blume/components/layout/search/types.ts";
1038
1047
  const api = joinBase(import.meta.env.BASE_URL, "api/search");
1039
1048
 
1040
- export const createSearch = () => create({ api });
1049
+ export const createSearch = (options: SearchClientOptions = {}) =>
1050
+ create({ ...options, api });
1041
1051
  `;
1042
1052
  }
1043
1053
  case "pagefind": {
@@ -1054,7 +1064,8 @@ export const createSearch = () => create({ url });
1054
1064
  }
1055
1065
  }
1056
1066
  };
1057
- var mixedbreadSearchEndpointTemplate = (options, rateLimit) => {
1067
+ var mixedbreadSearchEndpointTemplate = (options, pages, rateLimit) => {
1068
+ const { search_options: tuning, storeId, ...searchOptions } = options;
1058
1069
  const limit = rateLimitTemplate(rateLimit, "search");
1059
1070
  const imports = [
1060
1071
  'import type { APIRoute } from "astro";',
@@ -1070,9 +1081,26 @@ ${imports.join(`
1070
1081
  export const prerender = false;
1071
1082
 
1072
1083
  const client = new Mixedbread({ apiKey: getSecret("MIXEDBREAD_API_KEY") ?? "" });
1073
- const OPTIONS = ${JSON.stringify(options)};
1074
- // Every option besides the store reaches the search call verbatim.
1075
- const { storeId: STORE_ID, ...SEARCH_OPTIONS } = OPTIONS;
1084
+ const STORE_ID = ${JSON.stringify(storeId)};
1085
+ // Every other option reaches the search call verbatim.
1086
+ const SEARCH_OPTIONS = ${JSON.stringify(searchOptions)};
1087
+ const SEARCH_TUNING = ${JSON.stringify(tuning ?? {})};
1088
+ // Each page's source file, relative to the project root, and the page it renders.
1089
+ const PAGES = new Map<string, { title: string; url: string }>(${JSON.stringify(pages)});
1090
+
1091
+ // The page a synced file renders. \`mxbai store sync\` records the path
1092
+ // relative to where it ran (the project root, or a monorepo root above it), so
1093
+ // the longest trailing run of that path that names a page's file wins.
1094
+ const pageFor = (path: string) => {
1095
+ const segments = path.replaceAll("\\\\", "/").split("/");
1096
+ for (let start = 0; start < segments.length; start += 1) {
1097
+ const page = PAGES.get(segments.slice(start).join("/"));
1098
+ if (page) {
1099
+ return page;
1100
+ }
1101
+ }
1102
+ return undefined;
1103
+ };
1076
1104
  ${limit.setup}
1077
1105
  export const POST: APIRoute = async (context) => {
1078
1106
  const { request } = context;
@@ -1098,23 +1126,32 @@ ${limit.check} // A search body is one short query: read it under a 16 KB cap,
1098
1126
  });
1099
1127
  }
1100
1128
  // \`top_k\` defaults to 8 unless an option sets it; the query and store
1101
- // always come from the request and \`storeId\`.
1129
+ // always come from the request and \`storeId\`. File metadata is always
1130
+ // returned: it holds the path \`mxbai store sync\` recorded for the file.
1102
1131
  const response = await client.stores.search({
1103
1132
  top_k: 8,
1104
1133
  ...SEARCH_OPTIONS,
1105
1134
  query,
1135
+ search_options: { ...SEARCH_TUNING, return_metadata: true },
1106
1136
  store_identifiers: [STORE_ID],
1107
1137
  });
1108
- const hits = (response.data ?? []).map((chunk) => {
1138
+ const seen = new Set<string>();
1139
+ const hits = (response.data ?? []).flatMap((chunk) => {
1140
+ const { file_path: path } = (chunk.metadata ?? {}) as { file_path?: unknown };
1141
+ const page = typeof path === "string" ? pageFor(path) : undefined;
1142
+ // A file no page renders has nowhere to link, and a page's later chunks
1143
+ // would repeat it: one hit per page, at its best chunk.
1144
+ if (!page || seen.has(page.url)) {
1145
+ return [];
1146
+ }
1147
+ seen.add(page.url);
1109
1148
  const meta = chunk.generated_metadata ?? {};
1110
1149
  // Only a text chunk carries \`text\`; image, audio, and video chunks fall
1111
1150
  // back to the excerpt the store generated for them.
1112
1151
  const text = "text" in chunk ? chunk.text : undefined;
1113
- return {
1114
- excerpt: text ?? meta.excerpt ?? "",
1115
- title: meta.title ?? chunk.filename ?? "",
1116
- url: meta.url ?? "",
1117
- };
1152
+ return [
1153
+ { excerpt: text ?? meta.excerpt ?? "", title: page.title, url: page.url },
1154
+ ];
1118
1155
  });
1119
1156
  return new Response(JSON.stringify(hits), {
1120
1157
  headers: { "Content-Type": "application/json" },
@@ -1629,6 +1666,7 @@ import type { CollectionKey } from "astro:content";
1629
1666
  import RootLayout from "blume/components/layout/RootLayout.astro";
1630
1667
  import { withBase, withMountedBase } from "blume/components/islands/base-path.ts";
1631
1668
  import { mountBasePath, stripBasePath } from "blume/core/base-path.ts";
1669
+ import { routeSetFor, servesRoute } from "blume/core/locale-links.ts";
1632
1670
  import { resolveSlot } from "blume/components/layout/overrides.ts";
1633
1671
  ${componentImports}
1634
1672
  import data from "blume:data";
@@ -1832,18 +1870,24 @@ const logicalRoute = i18n
1832
1870
  ? stripLocale(stripBasePath(data.config.basePath, route), locale)
1833
1871
  : route;
1834
1872
  // A page from a one-language source (GitHub Releases) gets no switcher: every
1835
- // other locale would only repeat the same text.
1873
+ // other locale would only repeat the same text. A locale with no real
1874
+ // translation links the page's fallback copy, which exists only while
1875
+ // fallbacks are on; where nothing is served at that URL (\`fallbackLocale:
1876
+ // null\`), the locale is left out rather than linked to a 404.
1836
1877
  const localeSwitch = i18n && !monolingual
1837
- ? i18n.locales.map((l) => {
1878
+ ? i18n.locales.flatMap((l) => {
1838
1879
  const alt = (alternates ?? []).find((x) => x.locale === l.code);
1839
- return {
1840
- code: l.code,
1841
- current: l.code === locale,
1842
- dir: l.dir,
1843
- href: alt ? alt.path : mountLocalized(logicalRoute, l.code),
1844
- label: l.label,
1845
- untranslated: !alt,
1846
- };
1880
+ const href = alt ? alt.path : mountLocalized(logicalRoute, l.code);
1881
+ return alt || servesRoute(routeSetFor(data.routes), href)
1882
+ ? [{
1883
+ code: l.code,
1884
+ current: l.code === locale,
1885
+ dir: l.dir,
1886
+ href,
1887
+ label: l.label,
1888
+ untranslated: !alt,
1889
+ }]
1890
+ : [];
1847
1891
  })
1848
1892
  : [];
1849
1893
 
@@ -2143,13 +2187,15 @@ const canonical = base ? base + basedRoute : null;
2143
2187
  const ogPath = data.config.og.enabled ? withMountedBase("/og/changelog.png") : null;
2144
2188
  const ogImage = ogPath && base ? base + ogPath : ogPath;
2145
2189
 
2146
- // The page chrome (h1, title, description) comes from the translatable
2147
- // \`changelog\` group; optional chaining tolerates a not-yet-regenerated data
2148
- // snapshot from before these keys existed.
2190
+ // The page chrome (h1, title, description, empty state) comes from the
2191
+ // translatable \`changelog\` group, which carries the \`changelog\` config's title and
2192
+ // description when it sets them; optional chaining tolerates a
2193
+ // not-yet-regenerated data snapshot from before these keys existed.
2149
2194
  const changelogTitle = data.ui.changelog?.title ?? "Changelog";
2150
2195
  const changelogDescription =
2151
2196
  data.ui.changelog?.description ??
2152
2197
  "Product updates, new features, and fixes from every release.";
2198
+ const changelogEmpty = data.ui.changelog?.empty ?? "No changelog entries yet.";
2153
2199
  // The layout suffixes "- {site title}" itself, so the page title is just the
2154
2200
  // changelog's own name — prefixing the site title too would double it
2155
2201
  // ("Acme Changelog - Acme").
@@ -2202,7 +2248,7 @@ const LayoutComponent = resolveSlot(layoutOverrides.Layout, RootLayout);
2202
2248
  <p class="text-lg text-muted-foreground">{changelogDescription}</p>
2203
2249
  {
2204
2250
  items.length === 0 ? (
2205
- <p>No changelog entries yet.</p>
2251
+ <p>{changelogEmpty}</p>
2206
2252
  ) : (
2207
2253
  <div class="not-prose mt-10 divide-y divide-border border-border border-y">
2208
2254
  {groups.map((group) => (
@@ -2755,5 +2801,5 @@ var runtimeTsconfigTemplate = () => `${JSON.stringify({
2755
2801
 
2756
2802
  export { deployOutputDir, deployStaticDir, surfaceAdapterOutput, planComponentSlots, publishRuntimeModules, runtimeDependencies, EJECTED_CONFIG_HEADER, astroConfigTemplate, stagedContentDir, contentConfigTemplate, askEndpointTemplate, askComponentTemplate, searchEndpointTemplate, featuresTemplate, consentClientTemplate, searchClientTemplate, mixedbreadSearchEndpointTemplate, rawMarkdownEndpointTemplate, contentAssetsEndpointTemplate, mcpPageFile, mcpEndpointTemplate, playgroundProxyTemplate, staticJsonEndpointTemplate, rssEndpointTemplate, navFragmentTemplate, ogEndpointTemplate, scalarReferenceTemplate, catchAllPageTemplate, changelogIndexTemplate, notFoundPageTemplate, notFoundMarkdownTemplate, notFoundJsonTemplate, apiPagesIndexTemplate, apiPageTemplate, apiNavigationTemplate, apiSearchTemplate, apiNotFoundTemplate, exampleSlug, exampleWrapperTemplate, examplesRouteBase, exampleMapTemplate, examplesPageTemplate, runtimePackageTemplate, runtimeTsconfigTemplate };
2757
2803
 
2758
- //# debugId=F21B5F971981289464756E2164756E21
2759
- //# sourceMappingURL=chunk-4h8z9vv5.js.map
2804
+ //# debugId=FCEABB4236B6B32C64756E2164756E21
2805
+ //# sourceMappingURL=chunk-dpy8qdjf.js.map