blume 2.0.2 → 2.1.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 (601) hide show
  1. package/AGENTS.md +1 -0
  2. package/CHANGELOG.md +113 -0
  3. package/README.md +1 -1
  4. package/dist/cli/{chunk-6k4ftwze.js → chunk-0gz36akr.js} +18 -2
  5. package/dist/cli/{chunk-6k4ftwze.js.map → chunk-0gz36akr.js.map} +3 -3
  6. package/dist/cli/{chunk-zp79m0ts.js → chunk-1n228xqb.js} +2 -2
  7. package/dist/cli/{chunk-ddndchfr.js → chunk-2f3ndkpw.js} +57 -29
  8. package/dist/cli/chunk-2f3ndkpw.js.map +14 -0
  9. package/dist/cli/{chunk-fsmrqk8a.js → chunk-2f7n4qzt.js} +8 -2
  10. package/dist/cli/{chunk-fsmrqk8a.js.map → chunk-2f7n4qzt.js.map} +3 -3
  11. package/dist/cli/{chunk-ppzjqwx2.js → chunk-2n4ps1b3.js} +17 -18
  12. package/dist/cli/{chunk-ppzjqwx2.js.map → chunk-2n4ps1b3.js.map} +3 -3
  13. package/dist/cli/{chunk-5r8g91qn.js → chunk-43zcf4gz.js} +398 -159
  14. package/dist/cli/chunk-43zcf4gz.js.map +36 -0
  15. package/dist/cli/chunk-4ejxbzee.js +39 -0
  16. package/dist/cli/chunk-4ejxbzee.js.map +10 -0
  17. package/dist/cli/{chunk-hr8ne106.js → chunk-4h8z9vv5.js} +296 -77
  18. package/dist/cli/chunk-4h8z9vv5.js.map +16 -0
  19. package/dist/cli/{chunk-k7pj68a8.js → chunk-5cg2rzgf.js} +18 -16
  20. package/dist/cli/{chunk-k7pj68a8.js.map → chunk-5cg2rzgf.js.map} +2 -2
  21. package/dist/cli/{chunk-h2ez8dzb.js → chunk-5ffywsmb.js} +4 -4
  22. package/dist/cli/{chunk-g698a744.js → chunk-5wj2qwn2.js} +5 -5
  23. package/dist/cli/chunk-6bm0xpgd.js +18 -0
  24. package/dist/cli/chunk-6bm0xpgd.js.map +10 -0
  25. package/dist/cli/{chunk-3yce002v.js → chunk-713mngdq.js} +15 -8
  26. package/dist/cli/chunk-713mngdq.js.map +14 -0
  27. package/dist/cli/{chunk-91ws1n6j.js → chunk-9geymqns.js} +17 -15
  28. package/dist/cli/{chunk-91ws1n6j.js.map → chunk-9geymqns.js.map} +2 -2
  29. package/dist/cli/{chunk-6dtt0zfn.js → chunk-9xr4dgee.js} +27 -18
  30. package/dist/cli/chunk-9xr4dgee.js.map +10 -0
  31. package/dist/cli/{chunk-sqw4ekg1.js → chunk-amrb6hgh.js} +2 -2
  32. package/dist/cli/chunk-cm89scdv.js +443 -0
  33. package/dist/cli/chunk-cm89scdv.js.map +11 -0
  34. package/dist/cli/{chunk-wdrt2k2v.js → chunk-cmtcnh9f.js} +90 -26
  35. package/dist/cli/chunk-cmtcnh9f.js.map +10 -0
  36. package/dist/cli/chunk-cy5bm0j0.js +104 -0
  37. package/dist/cli/chunk-cy5bm0j0.js.map +11 -0
  38. package/dist/cli/{chunk-7mbqtmgb.js → chunk-e7vvk5ya.js} +21 -12
  39. package/dist/cli/chunk-e7vvk5ya.js.map +10 -0
  40. package/dist/cli/{chunk-qkb5a8sa.js → chunk-g2z9x01v.js} +6 -98
  41. package/dist/cli/chunk-g2z9x01v.js.map +10 -0
  42. package/dist/cli/{chunk-273ygyr4.js → chunk-ga0pf4aj.js} +7 -7
  43. package/dist/cli/{chunk-273ygyr4.js.map → chunk-ga0pf4aj.js.map} +3 -3
  44. package/dist/cli/{chunk-h7k3nq3v.js → chunk-gp84za0h.js} +2 -2
  45. package/dist/cli/{chunk-hqp2ajnh.js → chunk-h2a48yhd.js} +195 -73
  46. package/dist/cli/chunk-h2a48yhd.js.map +36 -0
  47. package/dist/cli/{chunk-pbg5a4s3.js → chunk-jnwj5kjj.js} +71 -47
  48. package/dist/cli/chunk-jnwj5kjj.js.map +19 -0
  49. package/dist/cli/chunk-kwrg63tm.js +31 -0
  50. package/dist/cli/chunk-kwrg63tm.js.map +10 -0
  51. package/dist/cli/{chunk-8g8ytmgx.js → chunk-nd1821sk.js} +21 -19
  52. package/dist/cli/{chunk-8g8ytmgx.js.map → chunk-nd1821sk.js.map} +2 -2
  53. package/dist/cli/{chunk-w4bxdvsa.js → chunk-ntv4qrt7.js} +17 -15
  54. package/dist/cli/{chunk-w4bxdvsa.js.map → chunk-ntv4qrt7.js.map} +2 -2
  55. package/dist/cli/{chunk-bfwp9vp6.js → chunk-p804f3pe.js} +7 -7
  56. package/dist/cli/{chunk-4e9b9ra6.js → chunk-py62fewh.js} +6 -6
  57. package/dist/cli/{chunk-4e9b9ra6.js.map → chunk-py62fewh.js.map} +1 -1
  58. package/dist/cli/chunk-q3wxxq39.js +126 -0
  59. package/dist/cli/chunk-q3wxxq39.js.map +11 -0
  60. package/dist/cli/{chunk-j85scx15.js → chunk-rekqz4qg.js} +142 -46
  61. package/dist/cli/chunk-rekqz4qg.js.map +10 -0
  62. package/dist/cli/{chunk-00gs3wqs.js → chunk-ta27feev.js} +1 -1
  63. package/dist/cli/{chunk-v6ya5kcb.js → chunk-xkz5xbtv.js} +4031 -1132
  64. package/dist/cli/chunk-xkz5xbtv.js.map +213 -0
  65. package/dist/cli/{chunk-bbnwccaz.js → chunk-y4ykbark.js} +2 -2
  66. package/dist/cli/{chunk-n1yg3tj3.js → chunk-y5h4r2y0.js} +6 -6
  67. package/dist/cli/{chunk-n1yg3tj3.js.map → chunk-y5h4r2y0.js.map} +3 -3
  68. package/dist/cli/{chunk-nfcyttvj.js → chunk-yj17vs39.js} +9 -9
  69. package/dist/cli/{chunk-nfcyttvj.js.map → chunk-yj17vs39.js.map} +1 -1
  70. package/dist/cli/{chunk-7vtckvaw.js → chunk-yxmk4pec.js} +16 -14
  71. package/dist/cli/{chunk-7vtckvaw.js.map → chunk-yxmk4pec.js.map} +2 -2
  72. package/dist/cli/{chunk-gs7r695n.js → chunk-zccbjcj0.js} +22 -8
  73. package/dist/cli/{chunk-gs7r695n.js.map → chunk-zccbjcj0.js.map} +3 -3
  74. package/dist/cli/{chunk-xh43dwgw.js → chunk-zf748avv.js} +415 -225
  75. package/dist/cli/chunk-zf748avv.js.map +37 -0
  76. package/dist/cli/{chunk-d1v5rhy0.js → chunk-zhvd6adm.js} +16 -14
  77. package/dist/cli/{chunk-d1v5rhy0.js.map → chunk-zhvd6adm.js.map} +2 -2
  78. package/dist/cli/index.js +28 -20
  79. package/dist/cli/index.js.map +5 -5
  80. package/dist/types/ai/agent-surface.d.ts +8 -7
  81. package/dist/types/ai/ai-catalog.d.ts +7 -0
  82. package/dist/types/ai/ask-context.d.ts +22 -0
  83. package/dist/types/ai/ask.d.ts +271 -58
  84. package/dist/types/ai/index.d.ts +2 -2
  85. package/dist/types/ai/link-headers.d.ts +8 -1
  86. package/dist/types/ai/openapi-components.d.ts +5 -2
  87. package/dist/types/ai/relative-links.d.ts +9 -7
  88. package/dist/types/ai/site-skill.d.ts +26 -0
  89. package/dist/types/ai/skills.d.ts +20 -1
  90. package/dist/types/ai/tar.d.ts +1 -3
  91. package/dist/types/analytics/index.d.ts +2 -0
  92. package/dist/types/analytics/one-dollar-stats.d.ts +48 -0
  93. package/dist/types/analytics/schema.d.ts +14 -0
  94. package/dist/types/astro/integration.d.ts +11 -2
  95. package/dist/types/captcha/hcaptcha.d.ts +27 -0
  96. package/dist/types/captcha/index.d.ts +28 -0
  97. package/dist/types/captcha/schema.d.ts +29 -0
  98. package/dist/types/captcha/turnstile.d.ts +28 -0
  99. package/dist/types/components/content/api-field.d.ts +59 -0
  100. package/dist/types/components/content/api-page.d.ts +95 -0
  101. package/dist/types/components/layout/nav-utils.d.ts +26 -0
  102. package/dist/types/components/openapi/helpers.d.ts +137 -0
  103. package/dist/types/components/openapi/security.d.ts +85 -0
  104. package/dist/types/consent/ethyca.d.ts +48 -0
  105. package/dist/types/consent/index.d.ts +37 -0
  106. package/dist/types/consent/native.d.ts +28 -0
  107. package/dist/types/consent/osano.d.ts +42 -0
  108. package/dist/types/consent/schema.d.ts +110 -0
  109. package/dist/types/core/base-path.d.ts +21 -7
  110. package/dist/types/core/config-input.d.ts +196 -27
  111. package/dist/types/core/data.d.ts +49 -4
  112. package/dist/types/core/directive-diagnostics.d.ts +12 -0
  113. package/dist/types/core/footer.d.ts +8 -0
  114. package/dist/types/core/heading-markers.d.ts +5 -7
  115. package/dist/types/core/i18n-ui.d.ts +86 -0
  116. package/dist/types/core/i18n.d.ts +2 -0
  117. package/dist/types/core/includes.d.ts +8 -2
  118. package/dist/types/core/last-modified.d.ts +10 -0
  119. package/dist/types/core/localizable.d.ts +7 -0
  120. package/dist/types/core/meta.d.ts +8 -0
  121. package/dist/types/core/page-modes.d.ts +29 -0
  122. package/dist/types/core/redirect-patterns.d.ts +144 -0
  123. package/dist/types/core/related.d.ts +40 -0
  124. package/dist/types/core/schema.d.ts +558 -56
  125. package/dist/types/core/sources/lower.d.ts +29 -16
  126. package/dist/types/core/sources/normalize.d.ts +13 -1
  127. package/dist/types/core/sources/read.d.ts +5 -0
  128. package/dist/types/core/sources/watch.d.ts +12 -5
  129. package/dist/types/core/standard-schema.d.ts +5 -0
  130. package/dist/types/core/types.d.ts +1 -1
  131. package/dist/types/core/variables.d.ts +42 -0
  132. package/dist/types/deploy/artifacts.d.ts +6 -4
  133. package/dist/types/deploy/headers.d.ts +5 -0
  134. package/dist/types/deploy/node-headers.d.ts +13 -2
  135. package/dist/types/deploy/platforms/cloudflare.d.ts +5 -0
  136. package/dist/types/deploy/platforms/netlify.d.ts +7 -0
  137. package/dist/types/deploy/platforms/types.d.ts +8 -0
  138. package/dist/types/deploy/platforms/vercel.d.ts +6 -0
  139. package/dist/types/deploy/redirects.d.ts +61 -22
  140. package/dist/types/deploy/vercel-negotiation.d.ts +9 -0
  141. package/dist/types/markdown/code-title.d.ts +17 -0
  142. package/dist/types/markdown/directives.d.ts +62 -0
  143. package/dist/types/markdown/features.d.ts +24 -2
  144. package/dist/types/markdown/mdast.d.ts +63 -0
  145. package/dist/types/narration/build.d.ts +70 -0
  146. package/dist/types/narration/provider.d.ts +26 -0
  147. package/dist/types/narration/script.d.ts +154 -0
  148. package/dist/types/openapi/asyncapi.d.ts +4 -2
  149. package/dist/types/openapi/model.d.ts +12 -6
  150. package/dist/types/openapi/overlay.d.ts +54 -0
  151. package/dist/types/openapi/parse.d.ts +13 -0
  152. package/dist/types/openapi/references.d.ts +14 -4
  153. package/dist/types/ratelimit/cloudflare.d.ts +39 -0
  154. package/dist/types/ratelimit/index.d.ts +27 -0
  155. package/dist/types/ratelimit/memory.d.ts +36 -0
  156. package/dist/types/ratelimit/schema.d.ts +111 -0
  157. package/dist/types/ratelimit/upstash.d.ts +21 -0
  158. package/dist/types/ratelimit/wrangler.d.ts +23 -0
  159. package/dist/types/reference/asyncapi.d.ts +10 -10
  160. package/dist/types/reference/graphql.d.ts +13 -10
  161. package/dist/types/reference/openapi.d.ts +33 -12
  162. package/dist/types/reference/options.d.ts +45 -5
  163. package/dist/types/reference/scalar.d.ts +13 -0
  164. package/dist/types/reference/schema.d.ts +60 -36
  165. package/dist/types/search/documents.d.ts +12 -1
  166. package/dist/types/search/orama-index.d.ts +4 -0
  167. package/dist/types/seo/metatags.d.ts +20 -0
  168. package/docs/02-deployment.mdx +44 -6
  169. package/docs/03-upgrading.mdx +4 -4
  170. package/docs/04-migrating.mdx +1 -1
  171. package/docs/08-faq.mdx +1 -1
  172. package/docs/advanced/changelog.mdx +2 -2
  173. package/docs/advanced/custom-pages.mdx +3 -3
  174. package/docs/advanced/skills.mdx +14 -0
  175. package/docs/cli/audit.mdx +38 -2
  176. package/docs/cli/evals.mdx +3 -3
  177. package/docs/cli/index.mdx +1 -0
  178. package/docs/cli/translate.mdx +3 -3
  179. package/docs/cli/version.mdx +1 -1
  180. package/docs/configuration/analytics.mdx +22 -1
  181. package/docs/configuration/assistant.mdx +188 -36
  182. package/docs/configuration/consent.mdx +100 -0
  183. package/docs/configuration/customization.mdx +6 -4
  184. package/docs/configuration/index.mdx +63 -5
  185. package/docs/configuration/meta.ts +3 -0
  186. package/docs/configuration/narration.mdx +119 -0
  187. package/docs/configuration/rate-limiting.mdx +69 -0
  188. package/docs/configuration/search.mdx +30 -2
  189. package/docs/configuration/theming.mdx +3 -1
  190. package/docs/content/components.mdx +107 -1
  191. package/docs/content/frontmatter.mdx +77 -1
  192. package/docs/content/i18n.mdx +40 -3
  193. package/docs/content/includes.mdx +16 -0
  194. package/docs/content/index.mdx +4 -2
  195. package/docs/content/islands.mdx +1 -1
  196. package/docs/content/meta.mdx +4 -1
  197. package/docs/content/meta.ts +1 -0
  198. package/docs/content/navigation.mdx +28 -6
  199. package/docs/content/sources/contentful.mdx +32 -0
  200. package/docs/content/sources/custom.mdx +39 -0
  201. package/docs/content/sources/github-releases.mdx +31 -0
  202. package/docs/content/sources/index.mdx +91 -0
  203. package/docs/content/sources/meta.ts +16 -0
  204. package/docs/content/sources/notion.mdx +32 -0
  205. package/docs/content/sources/obsidian.mdx +37 -0
  206. package/docs/content/sources/payload.mdx +30 -0
  207. package/docs/content/sources/remote-mdx.mdx +40 -0
  208. package/docs/content/sources/sanity.mdx +29 -0
  209. package/docs/content/sources/strapi.mdx +31 -0
  210. package/docs/content/syntax.mdx +81 -2
  211. package/docs/content/variables.mdx +41 -0
  212. package/docs/content/versioning.mdx +1 -1
  213. package/docs/discoverability/agent-discovery.mdx +30 -3
  214. package/docs/discoverability/index.mdx +3 -2
  215. package/docs/discoverability/llms-txt.mdx +1 -1
  216. package/docs/discoverability/markdown.mdx +2 -2
  217. package/docs/discoverability/metadata.mdx +17 -0
  218. package/docs/discoverability/open-graph.mdx +5 -3
  219. package/docs/discoverability/rss.mdx +1 -1
  220. package/docs/references/api-pages.mdx +74 -0
  221. package/docs/references/asyncapi.mdx +2 -2
  222. package/docs/references/graphql.mdx +3 -3
  223. package/docs/references/meta.ts +1 -1
  224. package/docs/references/openapi.mdx +106 -5
  225. package/docs/references/scalar.mdx +3 -1
  226. package/package.json +36 -1
  227. package/skills/blume/SKILL.md +3 -0
  228. package/skills/blume-migrate/SKILL.md +5 -5
  229. package/skills/blume-migrate/references/docusaurus.md +3 -3
  230. package/skills/blume-migrate/references/fumadocs.md +1 -1
  231. package/skills/blume-migrate/references/mintlify.md +37 -19
  232. package/skills/blume-migrate/references/nextra.md +3 -3
  233. package/skills/blume-migrate/references/starlight.md +2 -1
  234. package/skills/blume-migrate/scripts/mintlify-codemod.mjs +67 -16
  235. package/skills/blume-write-skill/SKILL.md +82 -0
  236. package/src/ai/agent-readability.ts +4 -3
  237. package/src/ai/agent-surface.ts +9 -7
  238. package/src/ai/ai-catalog.ts +12 -5
  239. package/src/ai/api/handlers.ts +2 -2
  240. package/src/ai/api/spec.ts +2 -2
  241. package/src/ai/api-catalog.ts +6 -2
  242. package/src/ai/ask-context.ts +73 -20
  243. package/src/ai/ask-data.ts +6 -0
  244. package/src/ai/ask-tools.ts +142 -0
  245. package/src/ai/ask.ts +354 -76
  246. package/src/ai/changelog-markdown.ts +2 -2
  247. package/src/ai/component-markdown.ts +75 -0
  248. package/src/ai/cors.ts +2 -0
  249. package/src/ai/index.ts +12 -0
  250. package/src/ai/link-headers.ts +14 -5
  251. package/src/ai/llms.ts +24 -9
  252. package/src/ai/markdown.ts +2 -1
  253. package/src/ai/mcp/data.ts +6 -0
  254. package/src/ai/mcp/discovery.ts +2 -2
  255. package/src/ai/mcp/query.ts +2 -2
  256. package/src/ai/mcp/server.ts +2 -2
  257. package/src/ai/openapi-components.ts +31 -9
  258. package/src/ai/relative-links.ts +42 -26
  259. package/src/ai/serializers.ts +2 -1
  260. package/src/ai/site-skill.ts +274 -0
  261. package/src/ai/skills.ts +49 -3
  262. package/src/ai/tar.ts +139 -12
  263. package/src/ai/write-skill.ts +97 -0
  264. package/src/analytics/head.ts +4 -0
  265. package/src/analytics/index.ts +5 -0
  266. package/src/analytics/one-dollar-stats.ts +86 -0
  267. package/src/analytics/schema.ts +2 -0
  268. package/src/astro/generate.ts +133 -19
  269. package/src/astro/include-hmr.ts +31 -12
  270. package/src/astro/include-refresh.ts +19 -8
  271. package/src/astro/index.ts +1 -0
  272. package/src/astro/integration.ts +143 -14
  273. package/src/astro/module-types.ts +6 -0
  274. package/src/astro/runtime-modules.ts +28 -13
  275. package/src/astro/templates.ts +364 -67
  276. package/src/astro/variables.ts +31 -0
  277. package/src/audit/catalog.ts +19 -0
  278. package/src/audit/checks/contrast.ts +183 -0
  279. package/src/audit/checks/i18n.ts +2 -3
  280. package/src/audit/checks/indexability.ts +2 -3
  281. package/src/audit/checks/links.ts +13 -13
  282. package/src/audit/checks/sitemap.ts +2 -3
  283. package/src/audit/graph.ts +3 -1
  284. package/src/audit/redirects.ts +46 -15
  285. package/src/audit/run.ts +14 -9
  286. package/src/audit/snapshot.ts +5 -0
  287. package/src/audit/types.ts +2 -1
  288. package/src/blume-modules.d.ts +7 -0
  289. package/src/captcha/client.ts +152 -0
  290. package/src/captcha/hcaptcha.ts +36 -0
  291. package/src/captcha/index.ts +28 -0
  292. package/src/captcha/schema.ts +32 -0
  293. package/src/captcha/turnstile.ts +38 -0
  294. package/src/captcha/verify.ts +71 -0
  295. package/src/cli/args.ts +32 -0
  296. package/src/cli/command-meta.ts +5 -0
  297. package/src/cli/commands/audit.ts +4 -1
  298. package/src/cli/commands/doctor.ts +25 -17
  299. package/src/cli/commands/eval.ts +19 -11
  300. package/src/cli/commands/skill.ts +96 -0
  301. package/src/cli/commands/translate.ts +9 -12
  302. package/src/cli/commands/validate.ts +3 -1
  303. package/src/cli/dev-lock.ts +157 -37
  304. package/src/cli/index.ts +5 -0
  305. package/src/cli/report-format.ts +11 -6
  306. package/src/cli/required-secrets.ts +71 -29
  307. package/src/components/BlumePage.astro +2 -0
  308. package/src/components/colors.ts +19 -0
  309. package/src/components/content/ApiEndpoint.astro +18 -0
  310. package/src/components/content/ApiField.astro +79 -0
  311. package/src/components/content/ApiPlayground.astro +62 -0
  312. package/src/components/content/ApiRail.astro +19 -0
  313. package/src/components/content/Badge.astro +5 -3
  314. package/src/components/content/Color.astro +1 -0
  315. package/src/components/content/Component.astro +2 -2
  316. package/src/components/content/FileTree.astro +1 -0
  317. package/src/components/content/GithubInfo.astro +1 -0
  318. package/src/components/content/Panel.astro +1 -0
  319. package/src/components/content/ParamField.astro +25 -0
  320. package/src/components/content/RequestExample.astro +17 -0
  321. package/src/components/content/ResponseExample.astro +17 -0
  322. package/src/components/content/ResponseField.astro +32 -0
  323. package/src/components/content/Step.astro +1 -0
  324. package/src/components/content/Tab.astro +0 -1
  325. package/src/components/content/Tabs.astro +4 -0
  326. package/src/components/content/Tile.astro +1 -0
  327. package/src/components/content/Tooltip.astro +1 -0
  328. package/src/components/content/Tree.astro +1 -0
  329. package/src/components/content/TypeTable.astro +4 -1
  330. package/src/components/content/View.astro +21 -0
  331. package/src/components/content/ViewSwitcher.astro +168 -0
  332. package/src/components/content/api-field.ts +100 -0
  333. package/src/components/content/api-page.ts +224 -0
  334. package/src/components/content/badge-color.ts +5 -2
  335. package/src/components/content/base-href.ts +13 -36
  336. package/src/components/content/view-switcher.ts +71 -0
  337. package/src/components/index.ts +2 -0
  338. package/src/components/islands/Assistant.astro +10 -1
  339. package/src/components/islands/assistant.tsx +125 -18
  340. package/src/components/islands/base-path.ts +47 -10
  341. package/src/components/islands/code-question.ts +62 -0
  342. package/src/components/islands/hooks.ts +145 -40
  343. package/src/components/islands/support-link.ts +68 -0
  344. package/src/components/islands/webmcp.ts +4 -2
  345. package/src/components/layout/Analytics.astro +11 -2
  346. package/src/components/layout/Banner.astro +14 -10
  347. package/src/components/layout/Breadcrumbs.astro +11 -4
  348. package/src/components/layout/ConsentBanner.astro +62 -0
  349. package/src/components/layout/ConsentHead.astro +38 -0
  350. package/src/components/layout/Directory.astro +94 -0
  351. package/src/components/layout/DiscoveryLinks.astro +9 -5
  352. package/src/components/layout/DrawerSwitchers.astro +51 -0
  353. package/src/components/layout/Empty.astro +2 -2
  354. package/src/components/layout/Header.astro +124 -82
  355. package/src/components/layout/LanguageSwitcher.astro +50 -17
  356. package/src/components/layout/NarrationPlayer.astro +1085 -0
  357. package/src/components/layout/NavSelector.astro +35 -9
  358. package/src/components/layout/NavTabMenu.astro +3 -3
  359. package/src/components/layout/NavTree.astro +16 -6
  360. package/src/components/layout/PageActions.astro +4 -3
  361. package/src/components/layout/PageFeedback.astro +54 -49
  362. package/src/components/layout/PageLayout.astro +78 -9
  363. package/src/components/layout/Pagination.astro +3 -3
  364. package/src/components/layout/ReferenceLayout.astro +17 -6
  365. package/src/components/layout/RelatedPages.astro +42 -0
  366. package/src/components/layout/RootLayout.astro +313 -50
  367. package/src/components/layout/Search.astro +64 -30
  368. package/src/components/layout/SiteFooter.astro +124 -0
  369. package/src/components/layout/SiteMetatags.astro +16 -0
  370. package/src/components/layout/VersionBanner.astro +2 -2
  371. package/src/components/layout/analytics-client.ts +12 -0
  372. package/src/components/layout/consent/native.ts +79 -0
  373. package/src/components/layout/consent/types.ts +37 -0
  374. package/src/components/layout/footer-links.ts +53 -0
  375. package/src/components/layout/footer-socials.ts +87 -0
  376. package/src/components/layout/locale-redirect.ts +107 -0
  377. package/src/components/layout/nav-utils.ts +83 -0
  378. package/src/components/layout/page-feedback.ts +96 -0
  379. package/src/components/layout/search/analytics.ts +98 -0
  380. package/src/components/layout/search/flexsearch.ts +17 -5
  381. package/src/components/layout/search/orama-cloud.ts +26 -14
  382. package/src/components/layout/search/types.ts +20 -0
  383. package/src/components/layout/search/typesense.ts +5 -1
  384. package/src/components/layout/toc-active.ts +41 -0
  385. package/src/components/layout/toc-element.ts +8 -14
  386. package/src/components/openapi/ApiTagOperations.astro +2 -2
  387. package/src/components/openapi/AsyncApiOperation.astro +7 -4
  388. package/src/components/openapi/GraphqlChip.astro +2 -2
  389. package/src/components/openapi/Operation.astro +163 -13
  390. package/src/components/openapi/Playground.astro +4 -4
  391. package/src/components/openapi/RequestBody.astro +6 -4
  392. package/src/components/openapi/RequestPanel.astro +63 -8
  393. package/src/components/openapi/Responses.astro +6 -4
  394. package/src/components/openapi/SchemaTable.astro +7 -0
  395. package/src/components/openapi/async-snippets.ts +4 -4
  396. package/src/components/openapi/async.ts +38 -6
  397. package/src/components/openapi/code-samples.ts +97 -0
  398. package/src/components/openapi/helpers.ts +19 -9
  399. package/src/components/openapi/message-composer.ts +6 -1
  400. package/src/components/openapi/message.ts +17 -2
  401. package/src/components/openapi/operation-model.ts +81 -11
  402. package/src/components/openapi/panel.ts +4 -2
  403. package/src/components/openapi/param-style.ts +181 -0
  404. package/src/components/openapi/playground-client.ts +73 -16
  405. package/src/components/openapi/request.ts +190 -26
  406. package/src/components/openapi/schema-tree.ts +30 -24
  407. package/src/components/openapi/security.ts +6 -3
  408. package/src/components/openapi/snippets.ts +953 -13
  409. package/src/components/openapi/ws-client.ts +18 -2
  410. package/src/components/props.ts +6 -0
  411. package/src/consent/client.ts +95 -0
  412. package/src/consent/clients.ts +19 -0
  413. package/src/consent/ethyca.ts +71 -0
  414. package/src/consent/head.ts +24 -0
  415. package/src/consent/index.ts +37 -0
  416. package/src/consent/init.ts +29 -0
  417. package/src/consent/native.ts +36 -0
  418. package/src/consent/osano.ts +59 -0
  419. package/src/consent/schema.ts +30 -0
  420. package/src/core/base-path.ts +62 -16
  421. package/src/core/builtin-tags.ts +5 -0
  422. package/src/core/client-address.ts +19 -0
  423. package/src/core/config-input.ts +203 -27
  424. package/src/core/data.ts +44 -4
  425. package/src/core/diagnostics.ts +5 -2
  426. package/src/core/directive-diagnostics.ts +99 -0
  427. package/src/core/footer.ts +26 -0
  428. package/src/core/frontmatter.ts +21 -18
  429. package/src/core/graph.ts +39 -36
  430. package/src/core/heading-markers.ts +5 -18
  431. package/src/core/i18n-ui.ts +82 -2
  432. package/src/core/i18n.ts +31 -3
  433. package/src/core/includes.ts +20 -3
  434. package/src/core/last-modified.ts +25 -3
  435. package/src/core/links.ts +16 -2
  436. package/src/core/locale-links.ts +5 -1
  437. package/src/core/localizable.ts +26 -0
  438. package/src/core/meta.ts +33 -19
  439. package/src/core/navigation.ts +71 -20
  440. package/src/core/page-modes.ts +56 -0
  441. package/src/core/project-graph.ts +138 -10
  442. package/src/core/redirect-patterns.ts +491 -0
  443. package/src/core/related.ts +131 -0
  444. package/src/core/schema.ts +342 -68
  445. package/src/core/sources/contentful-rich-text.ts +27 -20
  446. package/src/core/sources/filesystem.ts +20 -2
  447. package/src/core/sources/github-releases.ts +25 -6
  448. package/src/core/sources/lexical.ts +23 -18
  449. package/src/core/sources/lower.ts +201 -34
  450. package/src/core/sources/mdx-remote.ts +51 -16
  451. package/src/core/sources/normalize.ts +327 -91
  452. package/src/core/sources/notion.ts +52 -25
  453. package/src/core/sources/obsidian.ts +23 -6
  454. package/src/core/sources/portable-text.ts +38 -21
  455. package/src/core/sources/read.ts +8 -3
  456. package/src/core/sources/strapi-blocks.ts +20 -16
  457. package/src/core/sources/watch.ts +20 -7
  458. package/src/core/standard-schema.ts +10 -6
  459. package/src/core/types.ts +1 -1
  460. package/src/core/ui-packs/ar.ts +43 -0
  461. package/src/core/ui-packs/bg.ts +45 -0
  462. package/src/core/ui-packs/bn.ts +43 -0
  463. package/src/core/ui-packs/ca.ts +46 -0
  464. package/src/core/ui-packs/cs.ts +44 -0
  465. package/src/core/ui-packs/da.ts +45 -0
  466. package/src/core/ui-packs/de.ts +46 -0
  467. package/src/core/ui-packs/el.ts +45 -0
  468. package/src/core/ui-packs/es.ts +46 -0
  469. package/src/core/ui-packs/fa.ts +45 -0
  470. package/src/core/ui-packs/fi.ts +45 -0
  471. package/src/core/ui-packs/fr.ts +46 -0
  472. package/src/core/ui-packs/he.ts +43 -0
  473. package/src/core/ui-packs/hi.ts +44 -0
  474. package/src/core/ui-packs/hr.ts +45 -0
  475. package/src/core/ui-packs/hu.ts +44 -0
  476. package/src/core/ui-packs/id.ts +45 -0
  477. package/src/core/ui-packs/it.ts +45 -0
  478. package/src/core/ui-packs/ja.ts +45 -0
  479. package/src/core/ui-packs/ko.ts +44 -0
  480. package/src/core/ui-packs/nl.ts +46 -0
  481. package/src/core/ui-packs/no.ts +44 -0
  482. package/src/core/ui-packs/pl.ts +45 -0
  483. package/src/core/ui-packs/pt-br.ts +46 -0
  484. package/src/core/ui-packs/pt.ts +45 -0
  485. package/src/core/ui-packs/ro.ts +45 -0
  486. package/src/core/ui-packs/ru.ts +45 -0
  487. package/src/core/ui-packs/sk.ts +44 -0
  488. package/src/core/ui-packs/sr.ts +45 -0
  489. package/src/core/ui-packs/sv.ts +44 -0
  490. package/src/core/ui-packs/th.ts +43 -0
  491. package/src/core/ui-packs/tr.ts +45 -0
  492. package/src/core/ui-packs/uk.ts +45 -0
  493. package/src/core/ui-packs/vi.ts +45 -0
  494. package/src/core/ui-packs/zh-tw.ts +43 -0
  495. package/src/core/ui-packs/zh.ts +43 -0
  496. package/src/core/variables.ts +103 -0
  497. package/src/core/version-cut.ts +52 -15
  498. package/src/deploy/artifacts.ts +104 -14
  499. package/src/deploy/cloudflare-negotiation.ts +39 -17
  500. package/src/deploy/headers.ts +10 -5
  501. package/src/deploy/node-headers.ts +64 -10
  502. package/src/deploy/platforms/cloudflare.ts +44 -3
  503. package/src/deploy/platforms/netlify.ts +34 -1
  504. package/src/deploy/platforms/node.ts +1 -0
  505. package/src/deploy/platforms/static.ts +1 -0
  506. package/src/deploy/platforms/types.ts +8 -0
  507. package/src/deploy/platforms/vercel.ts +38 -2
  508. package/src/deploy/redirects.ts +139 -36
  509. package/src/deploy/robots.ts +2 -2
  510. package/src/deploy/rss.ts +4 -3
  511. package/src/deploy/sitemap.ts +7 -5
  512. package/src/deploy/vercel-negotiation.ts +36 -0
  513. package/src/markdown/api-rail.ts +259 -0
  514. package/src/markdown/base-links.ts +34 -36
  515. package/src/markdown/code-title.ts +35 -9
  516. package/src/markdown/directives.ts +242 -36
  517. package/src/markdown/features.ts +20 -2
  518. package/src/markdown/fence-meta.ts +2 -0
  519. package/src/markdown/include.ts +11 -1
  520. package/src/markdown/index.ts +35 -11
  521. package/src/markdown/math.ts +4 -4
  522. package/src/markdown/mdast.ts +5 -2
  523. package/src/markdown/relative-links.ts +12 -4
  524. package/src/markdown/variables.ts +56 -0
  525. package/src/markdown/views.ts +82 -0
  526. package/src/narration/build.ts +412 -0
  527. package/src/narration/player.ts +249 -0
  528. package/src/narration/provider.ts +29 -0
  529. package/src/narration/script.ts +592 -0
  530. package/src/og/card.ts +136 -11
  531. package/src/og/derive.ts +41 -31
  532. package/src/og/index.ts +1 -0
  533. package/src/openapi/asyncapi.ts +4 -2
  534. package/src/openapi/model.ts +77 -36
  535. package/src/openapi/overlay.ts +256 -0
  536. package/src/openapi/parse.ts +55 -2
  537. package/src/openapi/proxy.ts +63 -10
  538. package/src/openapi/references.ts +21 -5
  539. package/src/openapi/render-mdx.ts +46 -3
  540. package/src/openapi/scalar.ts +40 -6
  541. package/src/openapi/source.ts +1 -1
  542. package/src/ratelimit/cloudflare.ts +54 -0
  543. package/src/ratelimit/index.ts +30 -0
  544. package/src/ratelimit/memory.ts +45 -0
  545. package/src/ratelimit/runtime.ts +229 -0
  546. package/src/ratelimit/schema.ts +28 -0
  547. package/src/ratelimit/upstash.ts +30 -0
  548. package/src/ratelimit/wrangler.ts +70 -0
  549. package/src/reference/asyncapi.ts +2 -2
  550. package/src/reference/graphql.ts +5 -2
  551. package/src/reference/openapi.ts +21 -7
  552. package/src/reference/options.ts +51 -7
  553. package/src/reference/scalar.ts +33 -8
  554. package/src/registry/eject.ts +201 -28
  555. package/src/registry/registry.ts +7 -0
  556. package/src/search/adapters/version-scope.ts +30 -0
  557. package/src/search/documents.ts +93 -28
  558. package/src/search/orama-index.ts +28 -3
  559. package/src/search/pagefind-ranking.ts +39 -0
  560. package/src/search/popular.ts +2 -1
  561. package/src/search/sync/algolia.ts +15 -4
  562. package/src/search/sync/orama-cloud.ts +3 -0
  563. package/src/search/sync/typesense.ts +5 -0
  564. package/src/seo/jsonld.ts +7 -3
  565. package/src/seo/metatags.ts +67 -0
  566. package/src/theme/chrome-icons.ts +1 -0
  567. package/src/theme/color.ts +500 -0
  568. package/src/theme/entry.ts +56 -3
  569. package/src/theme/palette.ts +121 -45
  570. package/src/translate/meta.ts +68 -24
  571. package/src/translate/prompts.ts +1 -0
  572. package/src/translate/run.ts +3 -3
  573. package/src/translate/validate.ts +12 -3
  574. package/src/translate/work-list.ts +56 -17
  575. package/src/upgrade/upgrade.ts +4 -171
  576. package/dist/cli/chunk-3yce002v.js.map +0 -14
  577. package/dist/cli/chunk-5r8g91qn.js.map +0 -34
  578. package/dist/cli/chunk-6dtt0zfn.js.map +0 -10
  579. package/dist/cli/chunk-7mbqtmgb.js.map +0 -10
  580. package/dist/cli/chunk-ddndchfr.js.map +0 -14
  581. package/dist/cli/chunk-esh98wmb.js +0 -23
  582. package/dist/cli/chunk-esh98wmb.js.map +0 -10
  583. package/dist/cli/chunk-hqp2ajnh.js.map +0 -35
  584. package/dist/cli/chunk-hr8ne106.js.map +0 -13
  585. package/dist/cli/chunk-j85scx15.js.map +0 -10
  586. package/dist/cli/chunk-mqc662a6.js +0 -75
  587. package/dist/cli/chunk-mqc662a6.js.map +0 -11
  588. package/dist/cli/chunk-pbg5a4s3.js.map +0 -19
  589. package/dist/cli/chunk-qkb5a8sa.js.map +0 -10
  590. package/dist/cli/chunk-v6ya5kcb.js.map +0 -189
  591. package/dist/cli/chunk-wdrt2k2v.js.map +0 -10
  592. package/dist/cli/chunk-xh43dwgw.js.map +0 -36
  593. package/docs/content/sources.mdx +0 -338
  594. /package/dist/cli/{chunk-zp79m0ts.js.map → chunk-1n228xqb.js.map} +0 -0
  595. /package/dist/cli/{chunk-h2ez8dzb.js.map → chunk-5ffywsmb.js.map} +0 -0
  596. /package/dist/cli/{chunk-g698a744.js.map → chunk-5wj2qwn2.js.map} +0 -0
  597. /package/dist/cli/{chunk-sqw4ekg1.js.map → chunk-amrb6hgh.js.map} +0 -0
  598. /package/dist/cli/{chunk-h7k3nq3v.js.map → chunk-gp84za0h.js.map} +0 -0
  599. /package/dist/cli/{chunk-bfwp9vp6.js.map → chunk-p804f3pe.js.map} +0 -0
  600. /package/dist/cli/{chunk-00gs3wqs.js.map → chunk-ta27feev.js.map} +0 -0
  601. /package/dist/cli/{chunk-bbnwccaz.js.map → chunk-y4ykbark.js.map} +0 -0
@@ -5,6 +5,7 @@ export const th: UIStringsOverride = {
5
5
  actions: {
6
6
  addToCursor: "เพิ่มไปยัง Cursor",
7
7
  addToVscode: "เพิ่มไปยัง VS Code",
8
+ askAboutCode: "ถามเกี่ยวกับโค้ดนี้",
8
9
  connectMcp: "เชื่อมต่อกับ MCP",
9
10
  copied: "คัดลอกแล้ว!",
10
11
  copyClaudeCode: "คัดลอกคำสั่ง Claude Code",
@@ -30,11 +31,18 @@ export const th: UIStringsOverride = {
30
31
  copy: "คัดลอกการสนทนา",
31
32
  empty: "ถามคำถามเกี่ยวกับเอกสาร",
32
33
  error: "ขออภัย เกิดข้อผิดพลาดบางอย่าง",
34
+ explainCode: "อธิบายโค้ดนี้",
33
35
  label: "ถามคำถาม",
36
+ open: "เปิดผู้ช่วย",
34
37
  placeholder: "ถามคำถาม…",
38
+ rateLimited: "คุณถามคำถามจำนวนมากแล้ว โปรดลองอีกครั้งในอีกไม่กี่นาที",
39
+ removeCode: "นำโค้ดออก",
35
40
  send: "ส่ง",
41
+ support: "ติดต่อฝ่ายสนับสนุน",
42
+ supportSubject: "คำถามจากเอกสาร",
36
43
  tip: "เคล็ดลับ: คุณสามารถเปิดและปิดแชทได้ด้วย",
37
44
  title: "ผู้ช่วย",
45
+ verifyFailed: "เราไม่สามารถยืนยันได้ว่าคุณเป็นมนุษย์ โปรดลองอีกครั้ง",
38
46
  you: "คุณ",
39
47
  },
40
48
  banner: { dismiss: "ปิดประกาศ" },
@@ -42,6 +50,14 @@ export const th: UIStringsOverride = {
42
50
  description: "อัปเดตผลิตภัณฑ์และบันทึกประจำรุ่น",
43
51
  title: "บันทึกการเปลี่ยนแปลง",
44
52
  },
53
+ consent: {
54
+ accept: "ยอมรับ",
55
+ decline: "ปฏิเสธ",
56
+ label: "ความยินยอมคุกกี้",
57
+ message: "เราต้องการใช้คุกกี้เพื่อทำความเข้าใจว่าเอกสารนี้ถูกใช้งานอย่างไร",
58
+ policy: "นโยบายความเป็นส่วนตัว",
59
+ settings: "การตั้งค่าคุกกี้",
60
+ },
45
61
  content: {
46
62
  code: "โค้ด",
47
63
  copyColor: "คัดลอกสี {name} {value}",
@@ -52,6 +68,8 @@ export const th: UIStringsOverride = {
52
68
  preview: "ตัวอย่าง",
53
69
  prop: "คุณสมบัติ",
54
70
  selectTab: "เลือกแท็บ",
71
+ selectView: "เลือกมุมมอง",
72
+ showLess: "แสดงน้อยลง",
55
73
  showMore: "แสดงเพิ่มเติม",
56
74
  stars: "ดาว",
57
75
  tab: "แท็บ {n}",
@@ -59,12 +77,36 @@ export const th: UIStringsOverride = {
59
77
  update: "อัปเดต",
60
78
  },
61
79
  feedback: {
80
+ comment: "บอกเราเพิ่มเติม (ไม่บังคับ)",
62
81
  no: "ไม่",
63
82
  question: "หน้านี้มีประโยชน์หรือไม่?",
83
+ send: "ส่ง",
64
84
  thanks: "ขอบคุณสำหรับความคิดเห็นของคุณ!",
65
85
  yes: "ใช่",
66
86
  },
67
87
  languageSwitcher: { label: "ภาษา", untranslated: "ยังไม่ได้แปล" },
88
+ narration: {
89
+ cueDanger: "อันตราย",
90
+ cueInfo: "ข้อมูล",
91
+ cueNote: "หมายเหตุ",
92
+ cueSection: "ส่วนที่ขยายได้",
93
+ cueStep: "ขั้นตอนที่ {n}",
94
+ cueSuccess: "สำเร็จ",
95
+ cueTab: "แท็บ {title}",
96
+ cueTip: "เคล็ดลับ",
97
+ cueWarning: "คำเตือน",
98
+ error: "ไม่สามารถโหลดเสียงบรรยายได้",
99
+ follow: "ติดตามการอ่าน",
100
+ label: "ฟังหน้านี้",
101
+ minutes: "{n} นาที",
102
+ next: "ประโยคถัดไป",
103
+ pause: "หยุดชั่วคราว",
104
+ play: "เล่น",
105
+ previous: "ประโยคก่อนหน้า",
106
+ progress: "ความคืบหน้าการบรรยาย",
107
+ speed: "ความเร็วในการเล่น",
108
+ stop: "หยุดฟัง",
109
+ },
68
110
  nav: {
69
111
  back: "ย้อนกลับ",
70
112
  breadcrumb: "เส้นทางนำทาง",
@@ -89,6 +131,7 @@ export const th: UIStringsOverride = {
89
131
  next: "ถัดไป",
90
132
  pagination: "การแบ่งหน้า",
91
133
  previous: "ก่อนหน้า",
134
+ related: "หน้าที่เกี่ยวข้อง",
92
135
  skipToContent: "ข้ามไปยังเนื้อหา",
93
136
  },
94
137
  search: {
@@ -5,6 +5,7 @@ export const tr: UIStringsOverride = {
5
5
  actions: {
6
6
  addToCursor: "Cursor'a ekle",
7
7
  addToVscode: "VS Code'a ekle",
8
+ askAboutCode: "Bu kod hakkında sor",
8
9
  connectMcp: "MCP'ye bağlan",
9
10
  copied: "Kopyalandı!",
10
11
  copyClaudeCode: "Claude Code komutunu kopyala",
@@ -31,11 +32,19 @@ export const tr: UIStringsOverride = {
31
32
  copy: "Konuşmayı kopyala",
32
33
  empty: "Belgeler hakkında bir soru sorun.",
33
34
  error: "Üzgünüz, bir şeyler ters gitti.",
35
+ explainCode: "Bu kodu açıkla.",
34
36
  label: "Bir soru sorun",
37
+ open: "Asistanı aç",
35
38
  placeholder: "Bir soru sorun…",
39
+ rateLimited:
40
+ "Çok sayıda soru sordunuz. Birkaç dakika sonra yeniden deneyin.",
41
+ removeCode: "Kodu kaldır",
36
42
  send: "Gönder",
43
+ support: "Destekle iletişime geç",
44
+ supportSubject: "Belgelerden soru",
37
45
  tip: "İpucu: Sohbeti şu tuşla açıp kapatabilirsiniz:",
38
46
  title: "Asistan",
47
+ verifyFailed: "İnsan olduğunuzu doğrulayamadık. Yeniden deneyin.",
39
48
  you: "Siz",
40
49
  },
41
50
  banner: { dismiss: "Duyuruyu kapat" },
@@ -43,6 +52,15 @@ export const tr: UIStringsOverride = {
43
52
  description: "Ürün güncellemeleri ve sürüm notları.",
44
53
  title: "Değişiklik günlüğü",
45
54
  },
55
+ consent: {
56
+ accept: "Kabul et",
57
+ decline: "Reddet",
58
+ label: "Çerez onayı",
59
+ message:
60
+ "Bu belgelerin nasıl kullanıldığını anlamak için çerez kullanmak istiyoruz.",
61
+ policy: "Gizlilik politikası",
62
+ settings: "Çerez ayarları",
63
+ },
46
64
  content: {
47
65
  code: "Kod",
48
66
  copyColor: "Rengi kopyala: {name} {value}",
@@ -53,6 +71,8 @@ export const tr: UIStringsOverride = {
53
71
  preview: "Önizleme",
54
72
  prop: "Özellik",
55
73
  selectTab: "Sekme seç",
74
+ selectView: "Görünüm seç",
75
+ showLess: "Daha az göster",
56
76
  showMore: "Daha fazla göster",
57
77
  stars: "Yıldızlar",
58
78
  tab: "Sekme {n}",
@@ -60,12 +80,36 @@ export const tr: UIStringsOverride = {
60
80
  update: "Güncelleme",
61
81
  },
62
82
  feedback: {
83
+ comment: "Bize daha fazlasını anlatın (isteğe bağlı)",
63
84
  no: "Hayır",
64
85
  question: "Bu sayfa yardımcı oldu mu?",
86
+ send: "Gönder",
65
87
  thanks: "Geri bildiriminiz için teşekkürler!",
66
88
  yes: "Evet",
67
89
  },
68
90
  languageSwitcher: { label: "Dil", untranslated: "Çevrilmemiş" },
91
+ narration: {
92
+ cueDanger: "Tehlike.",
93
+ cueInfo: "Bilgi.",
94
+ cueNote: "Not.",
95
+ cueSection: "Genişletilebilir bölüm.",
96
+ cueStep: "Adım {n}.",
97
+ cueSuccess: "Başarılı.",
98
+ cueTab: "{title} sekmesi.",
99
+ cueTip: "İpucu.",
100
+ cueWarning: "Uyarı.",
101
+ error: "Seslendirme yüklenemedi.",
102
+ follow: "Okumayı takip et",
103
+ label: "Bu sayfayı dinle",
104
+ minutes: "{n} dk",
105
+ next: "Sonraki cümle",
106
+ pause: "Duraklat",
107
+ play: "Oynat",
108
+ previous: "Önceki cümle",
109
+ progress: "Seslendirme ilerlemesi",
110
+ speed: "Oynatma hızı",
111
+ stop: "Dinlemeyi durdur",
112
+ },
69
113
  nav: {
70
114
  back: "Geri",
71
115
  breadcrumb: "Gezinme yolu",
@@ -90,6 +134,7 @@ export const tr: UIStringsOverride = {
90
134
  next: "Sonraki",
91
135
  pagination: "Sayfalama",
92
136
  previous: "Önceki",
137
+ related: "İlgili sayfalar",
93
138
  skipToContent: "İçeriğe geç",
94
139
  },
95
140
  search: {
@@ -5,6 +5,7 @@ export const uk: UIStringsOverride = {
5
5
  actions: {
6
6
  addToCursor: "Додати до Cursor",
7
7
  addToVscode: "Додати до VS Code",
8
+ askAboutCode: "Запитати про цей код",
8
9
  connectMcp: "Підключитися до MCP",
9
10
  copied: "Скопійовано!",
10
11
  copyClaudeCode: "Скопіювати команду Claude Code",
@@ -31,11 +32,19 @@ export const uk: UIStringsOverride = {
31
32
  copy: "Скопіювати бесіду",
32
33
  empty: "Поставте запитання щодо документації.",
33
34
  error: "Вибачте, щось пішло не так.",
35
+ explainCode: "Поясни цей код.",
34
36
  label: "Поставити запитання",
37
+ open: "Відкрити асистента",
35
38
  placeholder: "Поставте запитання…",
39
+ rateLimited:
40
+ "Ви поставили багато запитань. Спробуйте знову за кілька хвилин.",
41
+ removeCode: "Прибрати код",
36
42
  send: "Надіслати",
43
+ support: "Зв'язатися з підтримкою",
44
+ supportSubject: "Питання з документації",
37
45
  tip: "Порада: чат можна відкрити й закрити за допомогою",
38
46
  title: "Асистент",
47
+ verifyFailed: "Не вдалося підтвердити, що ви людина. Спробуйте знову.",
39
48
  you: "Ви",
40
49
  },
41
50
  banner: { dismiss: "Закрити оголошення" },
@@ -43,6 +52,15 @@ export const uk: UIStringsOverride = {
43
52
  description: "Оновлення продукту та примітки до випусків.",
44
53
  title: "Журнал змін",
45
54
  },
55
+ consent: {
56
+ accept: "Прийняти",
57
+ decline: "Відхилити",
58
+ label: "Згода на cookie",
59
+ message:
60
+ "Ми хотіли б використовувати файли cookie, щоб розуміти, як використовується ця документація.",
61
+ policy: "Політика конфіденційності",
62
+ settings: "Налаштування cookie",
63
+ },
46
64
  content: {
47
65
  code: "Код",
48
66
  copyColor: "Скопіювати колір {name} {value}",
@@ -53,6 +71,8 @@ export const uk: UIStringsOverride = {
53
71
  preview: "Попередній перегляд",
54
72
  prop: "Властивість",
55
73
  selectTab: "Вибрати вкладку",
74
+ selectView: "Вибрати подання",
75
+ showLess: "Показати менше",
56
76
  showMore: "Показати більше",
57
77
  stars: "Зірки",
58
78
  tab: "Вкладка {n}",
@@ -60,12 +80,36 @@ export const uk: UIStringsOverride = {
60
80
  update: "Оновлення",
61
81
  },
62
82
  feedback: {
83
+ comment: "Розкажіть докладніше (необов'язково)",
63
84
  no: "Ні",
64
85
  question: "Чи була ця сторінка корисною?",
86
+ send: "Надіслати",
65
87
  thanks: "Дякуємо за ваш відгук!",
66
88
  yes: "Так",
67
89
  },
68
90
  languageSwitcher: { label: "Мова", untranslated: "Не перекладено" },
91
+ narration: {
92
+ cueDanger: "Небезпека.",
93
+ cueInfo: "Інформація.",
94
+ cueNote: "Примітка.",
95
+ cueSection: "Розгортуваний розділ.",
96
+ cueStep: "Крок {n}.",
97
+ cueSuccess: "Успіх.",
98
+ cueTab: "Вкладка {title}.",
99
+ cueTip: "Порада.",
100
+ cueWarning: "Попередження.",
101
+ error: "Не вдалося завантажити озвучення.",
102
+ follow: "Стежити за читанням",
103
+ label: "Прослухати сторінку",
104
+ minutes: "{n} хв",
105
+ next: "Наступне речення",
106
+ pause: "Пауза",
107
+ play: "Відтворити",
108
+ previous: "Попереднє речення",
109
+ progress: "Хід відтворення",
110
+ speed: "Швидкість відтворення",
111
+ stop: "Зупинити прослуховування",
112
+ },
69
113
  nav: {
70
114
  back: "Назад",
71
115
  breadcrumb: "Навігаційний ланцюжок",
@@ -90,6 +134,7 @@ export const uk: UIStringsOverride = {
90
134
  next: "Далі",
91
135
  pagination: "Пагінація",
92
136
  previous: "Назад",
137
+ related: "Пов'язані сторінки",
93
138
  skipToContent: "Перейти до вмісту",
94
139
  },
95
140
  search: {
@@ -5,6 +5,7 @@ export const vi: UIStringsOverride = {
5
5
  actions: {
6
6
  addToCursor: "Thêm vào Cursor",
7
7
  addToVscode: "Thêm vào VS Code",
8
+ askAboutCode: "Hỏi về đoạn mã này",
8
9
  connectMcp: "Kết nối với MCP",
9
10
  copied: "Đã sao chép!",
10
11
  copyClaudeCode: "Sao chép lệnh Claude Code",
@@ -30,11 +31,19 @@ export const vi: UIStringsOverride = {
30
31
  copy: "Sao chép cuộc trò chuyện",
31
32
  empty: "Đặt câu hỏi về tài liệu.",
32
33
  error: "Xin lỗi, đã xảy ra sự cố.",
34
+ explainCode: "Giải thích đoạn mã này.",
33
35
  label: "Đặt câu hỏi",
36
+ open: "Mở trợ lý",
34
37
  placeholder: "Đặt câu hỏi…",
38
+ rateLimited: "Bạn đã hỏi rất nhiều câu hỏi. Hãy thử lại sau vài phút.",
39
+ removeCode: "Xóa mã",
35
40
  send: "Gửi",
41
+ support: "Liên hệ hỗ trợ",
42
+ supportSubject: "Câu hỏi từ tài liệu",
36
43
  tip: "Mẹo: Bạn có thể mở và đóng trò chuyện bằng",
37
44
  title: "Trợ lý",
45
+ verifyFailed:
46
+ "Chúng tôi không thể xác minh bạn là người thật. Hãy thử lại.",
38
47
  you: "Bạn",
39
48
  },
40
49
  banner: { dismiss: "Đóng thông báo" },
@@ -42,6 +51,15 @@ export const vi: UIStringsOverride = {
42
51
  description: "Cập nhật sản phẩm và ghi chú phát hành.",
43
52
  title: "Nhật ký thay đổi",
44
53
  },
54
+ consent: {
55
+ accept: "Chấp nhận",
56
+ decline: "Từ chối",
57
+ label: "Đồng ý cookie",
58
+ message:
59
+ "Chúng tôi muốn sử dụng cookie để hiểu cách tài liệu này được sử dụng.",
60
+ policy: "Chính sách quyền riêng tư",
61
+ settings: "Cài đặt cookie",
62
+ },
45
63
  content: {
46
64
  code: "Mã",
47
65
  copyColor: "Sao chép màu {name} {value}",
@@ -52,6 +70,8 @@ export const vi: UIStringsOverride = {
52
70
  preview: "Xem trước",
53
71
  prop: "Thuộc tính",
54
72
  selectTab: "Chọn tab",
73
+ selectView: "Chọn chế độ xem",
74
+ showLess: "Ẩn bớt",
55
75
  showMore: "Hiển thị thêm",
56
76
  stars: "Sao",
57
77
  tab: "Tab {n}",
@@ -59,12 +79,36 @@ export const vi: UIStringsOverride = {
59
79
  update: "Cập nhật",
60
80
  },
61
81
  feedback: {
82
+ comment: "Cho chúng tôi biết thêm (không bắt buộc)",
62
83
  no: "Không",
63
84
  question: "Trang này có hữu ích không?",
85
+ send: "Gửi",
64
86
  thanks: "Cảm ơn phản hồi của bạn!",
65
87
  yes: "Có",
66
88
  },
67
89
  languageSwitcher: { label: "Ngôn ngữ", untranslated: "Chưa dịch" },
90
+ narration: {
91
+ cueDanger: "Nguy hiểm.",
92
+ cueInfo: "Thông tin.",
93
+ cueNote: "Ghi chú.",
94
+ cueSection: "Mục có thể mở rộng.",
95
+ cueStep: "Bước {n}.",
96
+ cueSuccess: "Thành công.",
97
+ cueTab: "Tab {title}.",
98
+ cueTip: "Mẹo.",
99
+ cueWarning: "Cảnh báo.",
100
+ error: "Không thể tải âm thanh.",
101
+ follow: "Theo dõi lời đọc",
102
+ label: "Nghe trang này",
103
+ minutes: "{n} phút",
104
+ next: "Câu tiếp theo",
105
+ pause: "Tạm dừng",
106
+ play: "Phát",
107
+ previous: "Câu trước",
108
+ progress: "Tiến độ đọc",
109
+ speed: "Tốc độ phát",
110
+ stop: "Dừng nghe",
111
+ },
68
112
  nav: {
69
113
  back: "Quay lại",
70
114
  breadcrumb: "Đường dẫn điều hướng",
@@ -89,6 +133,7 @@ export const vi: UIStringsOverride = {
89
133
  next: "Tiếp theo",
90
134
  pagination: "Phân trang",
91
135
  previous: "Trước",
136
+ related: "Trang liên quan",
92
137
  skipToContent: "Chuyển đến nội dung",
93
138
  },
94
139
  search: {
@@ -5,6 +5,7 @@ export const zhTW: UIStringsOverride = {
5
5
  actions: {
6
6
  addToCursor: "新增至 Cursor",
7
7
  addToVscode: "新增至 VS Code",
8
+ askAboutCode: "詢問這段程式碼",
8
9
  connectMcp: "連線至 MCP",
9
10
  copied: "已複製!",
10
11
  copyClaudeCode: "複製 Claude Code 指令",
@@ -30,11 +31,18 @@ export const zhTW: UIStringsOverride = {
30
31
  copy: "複製對話",
31
32
  empty: "針對文件提出問題。",
32
33
  error: "抱歉,發生了一些問題。",
34
+ explainCode: "解釋這段程式碼。",
33
35
  label: "提出問題",
36
+ open: "開啟助理",
34
37
  placeholder: "提出問題…",
38
+ rateLimited: "你提出的問題太多了,請幾分鐘後再試。",
39
+ removeCode: "移除程式碼",
35
40
  send: "傳送",
41
+ support: "聯絡支援團隊",
42
+ supportSubject: "來自文件的問題",
36
43
  tip: "提示:可透過以下快捷鍵開啟和關閉聊天",
37
44
  title: "助理",
45
+ verifyFailed: "無法確認你是真人,請再試一次。",
38
46
  you: "你",
39
47
  },
40
48
  banner: { dismiss: "關閉公告" },
@@ -42,6 +50,14 @@ export const zhTW: UIStringsOverride = {
42
50
  description: "產品更新與版本說明。",
43
51
  title: "更新日誌",
44
52
  },
53
+ consent: {
54
+ accept: "接受",
55
+ decline: "拒絕",
56
+ label: "Cookie 同意",
57
+ message: "我們希望使用 Cookie 來了解這份文件的使用情況。",
58
+ policy: "隱私權政策",
59
+ settings: "Cookie 設定",
60
+ },
45
61
  content: {
46
62
  code: "程式碼",
47
63
  copyColor: "複製顏色 {name} {value}",
@@ -52,6 +68,8 @@ export const zhTW: UIStringsOverride = {
52
68
  preview: "預覽",
53
69
  prop: "屬性",
54
70
  selectTab: "選擇分頁",
71
+ selectView: "選擇檢視",
72
+ showLess: "顯示較少",
55
73
  showMore: "顯示更多",
56
74
  stars: "星標",
57
75
  tab: "分頁 {n}",
@@ -59,12 +77,36 @@ export const zhTW: UIStringsOverride = {
59
77
  update: "更新",
60
78
  },
61
79
  feedback: {
80
+ comment: "告訴我們更多(選填)",
62
81
  no: "沒有幫助",
63
82
  question: "這個頁面有幫助嗎?",
83
+ send: "送出",
64
84
  thanks: "感謝你的意見回饋!",
65
85
  yes: "有幫助",
66
86
  },
67
87
  languageSwitcher: { label: "語言", untranslated: "未翻譯" },
88
+ narration: {
89
+ cueDanger: "危險。",
90
+ cueInfo: "資訊。",
91
+ cueNote: "備註。",
92
+ cueSection: "可展開區段。",
93
+ cueStep: "第 {n} 步。",
94
+ cueSuccess: "成功。",
95
+ cueTab: "{title} 分頁。",
96
+ cueTip: "提示。",
97
+ cueWarning: "警告。",
98
+ error: "無法載入朗讀音訊。",
99
+ follow: "跟隨朗讀",
100
+ label: "收聽此頁面",
101
+ minutes: "{n} 分鐘",
102
+ next: "下一句",
103
+ pause: "暫停",
104
+ play: "播放",
105
+ previous: "上一句",
106
+ progress: "朗讀進度",
107
+ speed: "播放速度",
108
+ stop: "停止收聽",
109
+ },
68
110
  nav: {
69
111
  back: "返回",
70
112
  breadcrumb: "麵包屑導覽",
@@ -89,6 +131,7 @@ export const zhTW: UIStringsOverride = {
89
131
  next: "下一頁",
90
132
  pagination: "分頁",
91
133
  previous: "上一頁",
134
+ related: "相關頁面",
92
135
  skipToContent: "跳至內容",
93
136
  },
94
137
  search: {
@@ -5,6 +5,7 @@ export const zh: UIStringsOverride = {
5
5
  actions: {
6
6
  addToCursor: "添加到 Cursor",
7
7
  addToVscode: "添加到 VS Code",
8
+ askAboutCode: "询问这段代码",
8
9
  connectMcp: "连接到 MCP",
9
10
  copied: "已复制!",
10
11
  copyClaudeCode: "复制 Claude Code 命令",
@@ -30,11 +31,18 @@ export const zh: UIStringsOverride = {
30
31
  copy: "复制对话",
31
32
  empty: "就文档提出问题。",
32
33
  error: "抱歉,出了点问题。",
34
+ explainCode: "解释这段代码。",
33
35
  label: "提出问题",
36
+ open: "打开助手",
34
37
  placeholder: "提出问题…",
38
+ rateLimited: "你提的问题太多了,请几分钟后再试。",
39
+ removeCode: "移除代码",
35
40
  send: "发送",
41
+ support: "联系支持团队",
42
+ supportSubject: "来自文档的问题",
36
43
  tip: "提示:可通过以下快捷键打开和关闭聊天",
37
44
  title: "助手",
45
+ verifyFailed: "无法确认你是真人,请重试。",
38
46
  you: "你",
39
47
  },
40
48
  banner: { dismiss: "关闭公告" },
@@ -42,6 +50,14 @@ export const zh: UIStringsOverride = {
42
50
  description: "产品更新与版本说明。",
43
51
  title: "更新日志",
44
52
  },
53
+ consent: {
54
+ accept: "接受",
55
+ decline: "拒绝",
56
+ label: "Cookie 同意",
57
+ message: "我们希望使用 Cookie 来了解本文档的使用情况。",
58
+ policy: "隐私政策",
59
+ settings: "Cookie 设置",
60
+ },
45
61
  content: {
46
62
  code: "代码",
47
63
  copyColor: "复制颜色 {name} {value}",
@@ -52,6 +68,8 @@ export const zh: UIStringsOverride = {
52
68
  preview: "预览",
53
69
  prop: "属性",
54
70
  selectTab: "选择标签页",
71
+ selectView: "选择视图",
72
+ showLess: "显示更少",
55
73
  showMore: "显示更多",
56
74
  stars: "星标",
57
75
  tab: "标签页 {n}",
@@ -59,12 +77,36 @@ export const zh: UIStringsOverride = {
59
77
  update: "更新",
60
78
  },
61
79
  feedback: {
80
+ comment: "告诉我们更多(选填)",
62
81
  no: "没有帮助",
63
82
  question: "这个页面有帮助吗?",
83
+ send: "发送",
64
84
  thanks: "感谢你的反馈!",
65
85
  yes: "有帮助",
66
86
  },
67
87
  languageSwitcher: { label: "语言", untranslated: "未翻译" },
88
+ narration: {
89
+ cueDanger: "危险。",
90
+ cueInfo: "信息。",
91
+ cueNote: "备注。",
92
+ cueSection: "可展开部分。",
93
+ cueStep: "第 {n} 步。",
94
+ cueSuccess: "成功。",
95
+ cueTab: "{title} 标签页。",
96
+ cueTip: "提示。",
97
+ cueWarning: "警告。",
98
+ error: "无法加载朗读音频。",
99
+ follow: "跟随朗读",
100
+ label: "收听此页面",
101
+ minutes: "{n} 分钟",
102
+ next: "下一句",
103
+ pause: "暂停",
104
+ play: "播放",
105
+ previous: "上一句",
106
+ progress: "朗读进度",
107
+ speed: "播放速度",
108
+ stop: "停止收听",
109
+ },
68
110
  nav: {
69
111
  back: "返回",
70
112
  breadcrumb: "面包屑导航",
@@ -89,6 +131,7 @@ export const zh: UIStringsOverride = {
89
131
  next: "下一页",
90
132
  pagination: "分页",
91
133
  previous: "上一页",
134
+ related: "相关页面",
92
135
  skipToContent: "跳到内容",
93
136
  },
94
137
  search: {
@@ -0,0 +1,103 @@
1
+ import { nextFenceState } from "./code-fences.ts";
2
+ import type { FenceState } from "./code-fences.ts";
3
+
4
+ /**
5
+ * Content variables: `variables: { version: "2.1.0" }` in `blume.config.ts`
6
+ * makes `{{version}}` in a page read `2.1.0` wherever it appears in the body,
7
+ * code and links included. The syntax is Mintlify's, so migrated pages keep
8
+ * working.
9
+ *
10
+ * Substitution is textual, before any parsing, so a page's HTML, its search
11
+ * entry, its `.md` mirror, and `llms-full.txt` all agree: the MDX pipeline
12
+ * substitutes in a Vite transform ahead of the compiler (an MDX parser would
13
+ * read `{{version}}` as a JavaScript expression), the Markdown pipeline in a
14
+ * plugin over the parsed text, includes as their files are read, and the raw
15
+ * readers through {@link substituteVariables}. Only defined names are
16
+ * replaced; an undefined one in prose is a build error
17
+ * (`BLUME_UNDEFINED_VARIABLE`), and inside code it is left alone, since
18
+ * templating examples (`{{name}}` in a Handlebars snippet) are common there.
19
+ */
20
+
21
+ /** The variables a site defines, name to value. */
22
+ export type ContentVariables = Readonly<Record<string, string>>;
23
+
24
+ /** A variable name: letters, digits, `_`, and `-` (Mintlify's `api-url`). */
25
+ export const VARIABLE_NAME = /^[\w-]+$/u;
26
+
27
+ /** A `{{name}}` reference, spaces inside the braces allowed. */
28
+ const REFERENCE = /\{\{\s*(?<name>[\w-]+)\s*\}\}/gu;
29
+
30
+ /** Whether a site defines any variables, so the rest can be skipped. */
31
+ export const hasVariables = (
32
+ variables?: ContentVariables
33
+ ): variables is ContentVariables =>
34
+ variables !== undefined && Object.keys(variables).length > 0;
35
+
36
+ /** `text` with every reference to a defined variable replaced by its value. */
37
+ export const substituteVariables = (
38
+ text: string,
39
+ variables?: ContentVariables
40
+ ): string => {
41
+ if (!(hasVariables(variables) && text.includes("{{"))) {
42
+ return text;
43
+ }
44
+ return text.replaceAll(REFERENCE, (match, name: string) =>
45
+ Object.hasOwn(variables, name) ? (variables[name] ?? match) : match
46
+ );
47
+ };
48
+
49
+ // A leading front matter block: variables apply to the body, not to it.
50
+ const FRONT_MATTER = /^---\r?\n[\s\S]*?\r?\n---(?:\r?\n|$)/u;
51
+
52
+ /**
53
+ * {@link substituteVariables} over a page's raw source, leaving its front
54
+ * matter as written: the rendered page reads its title and description from
55
+ * the unsubstituted front matter, so the other surfaces must too.
56
+ */
57
+ export const substituteVariablesInBody = (
58
+ source: string,
59
+ variables?: ContentVariables
60
+ ): string => {
61
+ const head = FRONT_MATTER.exec(source)?.[0] ?? "";
62
+ return head + substituteVariables(source.slice(head.length), variables);
63
+ };
64
+
65
+ /** An undefined variable referenced in prose, with its 1-based line. */
66
+ export interface UndefinedVariable {
67
+ line: number;
68
+ name: string;
69
+ }
70
+
71
+ // A backtick code span: the same run of backticks opens and closes it.
72
+ const CODE_SPAN = /(?<ticks>`+)[^`][\s\S]*?\k<ticks>/gu;
73
+
74
+ /**
75
+ * The undefined variables `text` references outside code: fenced blocks and
76
+ * inline code spans are skipped, so a templating example never fails a
77
+ * build. Empty when the site defines no variables at all, so a page that
78
+ * shows `{{…}}` literally keeps working until the site opts in.
79
+ */
80
+ export const undefinedVariables = (
81
+ text: string,
82
+ variables?: ContentVariables
83
+ ): UndefinedVariable[] => {
84
+ if (!(hasVariables(variables) && text.includes("{{"))) {
85
+ return [];
86
+ }
87
+ const found: UndefinedVariable[] = [];
88
+ let fence: FenceState = null;
89
+ for (const [index, line] of text.split("\n").entries()) {
90
+ const wasInFence = fence !== null;
91
+ fence = nextFenceState(line, fence);
92
+ if (wasInFence || fence !== null) {
93
+ continue;
94
+ }
95
+ for (const match of line.replaceAll(CODE_SPAN, "").matchAll(REFERENCE)) {
96
+ const name = match.groups?.name ?? "";
97
+ if (!Object.hasOwn(variables, name)) {
98
+ found.push({ line: index + 1, name });
99
+ }
100
+ }
101
+ }
102
+ return found;
103
+ };