boltdocs 3.3.6 → 3.4.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 (116) hide show
  1. package/dist/{adapters-BKzKe2mO.mjs → adapters-BXiBWAKs.mjs} +1 -1
  2. package/dist/{adapters-DwDTQoCG.cjs → adapters-Czl3WtQt.cjs} +1 -1
  3. package/dist/{build-CxT38vPv.cjs → build-CNkXRdk8.cjs} +1 -1
  4. package/dist/{build-BJnL-FHG.mjs → build-CqUBsXVC.mjs} +1 -1
  5. package/dist/client/index.cjs +223 -51
  6. package/dist/client/index.d.cts +3 -3
  7. package/dist/client/index.d.ts +3 -3
  8. package/dist/client/index.js +226 -56
  9. package/dist/client/mdx.cjs +1 -1
  10. package/dist/client/mdx.js +1 -1
  11. package/dist/client/primitives.cjs +5 -5
  12. package/dist/client/primitives.d.cts +53 -34
  13. package/dist/client/primitives.d.ts +62 -43
  14. package/dist/client/primitives.js +4 -4
  15. package/dist/client/router.cjs +1 -1
  16. package/dist/client/router.d.cts +1 -1
  17. package/dist/client/router.d.ts +1 -1
  18. package/dist/client/router.js +1 -1
  19. package/dist/client/theme/reset.css +41 -0
  20. package/dist/{config-BJp3lGzE.cjs → config-B3SEoVjG.cjs} +2 -2
  21. package/dist/{config-BC_qhXws.cjs → config-Bfakeadu.cjs} +1 -1
  22. package/dist/{config-B3_iVsbi.mjs → config-CTcfF-0c.mjs} +2 -2
  23. package/dist/dev-D1DmOSjn.mjs +6 -0
  24. package/dist/dev-DH6cSge8.cjs +6 -0
  25. package/dist/{docs-layout-D3Fmb0Wd.js → docs-layout-CmntYM6p.js} +33 -33
  26. package/dist/{docs-layout-SgphExoE.cjs → docs-layout-DIgxJ5c7.cjs} +9 -9
  27. package/dist/{doctor-BqxOFRt3.cjs → doctor-BLxm2alc.cjs} +1 -1
  28. package/dist/{doctor-TS3JGNEU.cjs → doctor-Dd-JMTRo.cjs} +1 -1
  29. package/dist/{doctor-Cv5lXnay.mjs → doctor-DogHujrP.mjs} +1 -1
  30. package/dist/{image-Bkx85rsq.cjs → image-Bke2ojW1.cjs} +3 -3
  31. package/dist/{image-BAiDReNd.js → image-CaY2w0ua.js} +2 -1
  32. package/dist/index--xbYbT8N.d.ts +343 -0
  33. package/dist/{index-B1Mx0dHl.d.ts → index-B_o5y34l.d.cts} +89 -10
  34. package/dist/{index-DLaHgD-i.d.cts → index-Bx0CUd7Q.d.ts} +89 -10
  35. package/dist/index-RK7W_Fxy.d.cts +343 -0
  36. package/dist/{link-q1qHNGK_.js → link-CSe_oD8Y.js} +86 -113
  37. package/dist/{link-hLWOsx0x.cjs → link-Xb69Oy2F.cjs} +87 -143
  38. package/dist/{mdx-Qi0DmaY8.cjs → mdx-BCOrMd-P.cjs} +68 -16
  39. package/dist/{mdx-CJGWzBGy.js → mdx-BijiEbkp.js} +62 -15
  40. package/dist/{native-nLA4Jr0T.cjs → native-BbtRkce5.cjs} +1 -1
  41. package/dist/node/cli-entry.cjs +1 -1
  42. package/dist/node/cli-entry.mjs +1 -1
  43. package/dist/node/highlight.d.cts +2 -2
  44. package/dist/node/highlight.d.mts +2 -2
  45. package/dist/node/index.cjs +1 -1
  46. package/dist/node/index.d.cts +18 -39
  47. package/dist/node/index.d.mts +19 -40
  48. package/dist/node/index.mjs +1 -1
  49. package/dist/node/mdx/shiki-adapter.d.cts +1 -1
  50. package/dist/node/mdx/shiki-adapter.d.mts +1 -1
  51. package/dist/node-BgiLCa0I.cjs +39 -0
  52. package/dist/node-Da3tYBHo.mjs +39 -0
  53. package/dist/{package-Bah2tHjK.cjs → package-D1gVs5gQ.cjs} +1 -1
  54. package/dist/{package-D6bf68FR.mjs → package-YgQJn3Yh.mjs} +1 -1
  55. package/dist/pages-external-B_r6gvqP.cjs +6 -0
  56. package/dist/pages-external-jmK7AHaO.mjs +6 -0
  57. package/dist/{parser-CD8Oo8qh.mjs → parser-CvNZc5s3.mjs} +1 -1
  58. package/dist/{parser-vPaKvzLp.cjs → parser-DJLWTiO-.cjs} +1 -1
  59. package/dist/plugin-DW9K2fW5.mjs +69 -0
  60. package/dist/plugin-NwGKyTJX.cjs +69 -0
  61. package/dist/{plugin-context-b5qVVQSU.mjs → plugin-context-COh-cbsW.mjs} +1 -1
  62. package/dist/{plugin-context-BZs5lvDu.cjs → plugin-context-FIHaWn6r.cjs} +1 -1
  63. package/dist/{plugin-lifecycle-s89gzTlh.cjs → plugin-lifecycle-D9fTRaWY.cjs} +1 -1
  64. package/dist/{registry-B8pt41zj.d.cts → registry-BFmzj1yg.d.mts} +1 -1
  65. package/dist/{registry-BrrH2X9c.d.mts → registry-BoswPzYV.d.cts} +1 -1
  66. package/dist/{resolve-C5rT6B21.mjs → resolve-5puUe7eS.mjs} +1 -1
  67. package/dist/{resolve-BelytNYR.cjs → resolve-CF4ZLfqx.cjs} +1 -1
  68. package/dist/route-paths-B6ocUfNY.cjs +6 -0
  69. package/dist/route-paths-DyDji4bX.mjs +6 -0
  70. package/dist/{router-CZBxMRAH.js → router-B5e8k4qK.js} +175 -10
  71. package/dist/{router-C3kygdRK.cjs → router-DKC0Lu0n.cjs} +204 -9
  72. package/dist/{routes-Dq_2EUIB.cjs → routes-D55M8UrH.cjs} +1 -1
  73. package/dist/{routes-CzhKOw67.cjs → routes-DdE6Lfcl.cjs} +1 -1
  74. package/dist/{routes-Dw6g0bfF.mjs → routes-_I_8PQYF.mjs} +1 -1
  75. package/dist/{search-dialog-CguKVtUu.cjs → search-dialog-BOQRHKTb.cjs} +53 -20
  76. package/dist/{search-dialog-mYnqU4v7.js → search-dialog-BXil4_7P.js} +57 -24
  77. package/dist/{search-dialog-BYZS9aeO.cjs → search-dialog-CwlBd-Mu.cjs} +5 -5
  78. package/dist/{search-dialog-DQwod5Xc.js → search-dialog-D3Obh3eA.js} +1 -1
  79. package/dist/{search-dialog-DzObE-Ar.js → search-dialog-DeplpVEB.js} +3 -3
  80. package/dist/{search-dialog-QgKRRbsI.cjs → search-dialog-cHXR5zhL.cjs} +1 -1
  81. package/dist/server/index.cjs +1 -1
  82. package/dist/server/index.d.mts +1 -1
  83. package/dist/server/index.mjs +1 -1
  84. package/dist/ssg-static-options-Br1_u9qp.mjs +6 -0
  85. package/dist/ssg-static-options-CVvGKM8i.cjs +6 -0
  86. package/dist/types-58Ac3UGI.d.cts +114 -0
  87. package/dist/types-BwnGf-1E.d.mts +114 -0
  88. package/dist/{virtual-modules-C3S3Nz8r.cjs → virtual-modules-C4-qxFlL.cjs} +1 -1
  89. package/dist/{virtual-modules-CaxqrFd6.mjs → virtual-modules-DiWUKJGP.mjs} +1 -1
  90. package/package.json +5 -3
  91. package/src/shared/types.ts +133 -987
  92. package/dist/dev-46NiL0MC.cjs +0 -6
  93. package/dist/dev-C4kjO5xs.mjs +0 -6
  94. package/dist/index-CgWkOCCn.d.cts +0 -1193
  95. package/dist/index-CuNSD3E2.d.ts +0 -1193
  96. package/dist/node-7Cfw6nMr.cjs +0 -23
  97. package/dist/node-CT2E84nY.mjs +0 -23
  98. package/dist/pages-external-BBw8ObVK.mjs +0 -6
  99. package/dist/pages-external-DPiPFxxP.cjs +0 -6
  100. package/dist/plugin-AgNI3ktz.cjs +0 -69
  101. package/dist/plugin-BAv_pYLt.mjs +0 -69
  102. package/dist/types-74i_xUe2.d.mts +0 -975
  103. package/dist/types-X_Pwk8Cg.d.cts +0 -975
  104. /package/dist/{audit-CMc_ydRr.mjs → audit-CYAkXXvP.mjs} +0 -0
  105. /package/dist/{audit-CHkGiV3c.cjs → audit-DxCZZTuX.cjs} +0 -0
  106. /package/dist/{csp-BiGAG8aF.cjs → csp-B-gc2Iha.cjs} +0 -0
  107. /package/dist/{csp-D0BOH8ae.mjs → csp-f8DOcI_7.mjs} +0 -0
  108. /package/dist/{generator-BCrZL53x.cjs → generator-CBAPKY6r.cjs} +0 -0
  109. /package/dist/{generator-CFukoGa0.mjs → generator-MRpn-yp6.mjs} +0 -0
  110. /package/dist/{handler-Lex5DbvG.mjs → handler-DBZqoWt2.mjs} +0 -0
  111. /package/dist/{handler-Ch-Q9NAB.cjs → handler-ryZR9Q41.cjs} +0 -0
  112. /package/dist/{index-HAwIo4nZ.d.mts → index-CPr34I2C.d.mts} +0 -0
  113. /package/dist/{native-BYKMke79.mjs → native-DZ6WMwjG.mjs} +0 -0
  114. /package/dist/{native-BOet8hpE.cjs → native-DeKxny_T.cjs} +0 -0
  115. /package/dist/{update-check-BXD1atVv.mjs → update-check-BXx8te9F.mjs} +0 -0
  116. /package/dist/{update-check-DFQZyoSU.cjs → update-check-CiIeC7CX.cjs} +0 -0
@@ -3,4 +3,4 @@
3
3
  * Copyright (c) 2026 Jesus Alcala
4
4
  * Licensed under the MIT License.
5
5
  */
6
- import{t as e}from"./handler-Lex5DbvG.mjs";const t={"Access-Control-Allow-Origin":`*`,"Access-Control-Allow-Methods":`POST, OPTIONS`,"Access-Control-Allow-Headers":`Content-Type`,"Content-Type":`application/json`};async function n(n,r){if(Object.entries(t).forEach(([e,t])=>{r.setHeader(e,t)}),n.method===`OPTIONS`){r.status(200).end();return}if(n.method!==`POST`){r.status(405).json({error:`Method Not Allowed`});return}try{let t=await e(n.body,process.env);r.status(200).json(t)}catch(e){let t=e instanceof Error?e.message:`Failed to submit feedback`;return r.status(500).json({error:t})}}async function r(n,r=process.env){let i=(e,n=200)=>({statusCode:n,headers:t,body:e?JSON.stringify(e):``});if(n.httpMethod===`OPTIONS`)return i(null,200);if(n.httpMethod!==`POST`)return i({error:`Method Not Allowed`},405);try{return i(await e(n.body?JSON.parse(n.body):{},r))}catch(e){return i({error:e instanceof Error?e.message:`Failed to submit feedback`},500)}}async function i(n,r={}){let i=(e,n=200)=>new Response(e?JSON.stringify(e):null,{status:n,headers:t});if(n.method===`OPTIONS`)return i(null);if(n.method!==`POST`)return i({error:`Method Not Allowed`},405);try{return i(await e(await n.json(),{...process.env,...r}))}catch(e){return i({error:e instanceof Error?e.message:`Failed to submit feedback`},500)}}async function a(n,r=process.env){let i=(e,n=200)=>({statusCode:n,headers:t,body:e?JSON.stringify(e):``});if(n.httpMethod===`OPTIONS`)return i(null,200);if(n.httpMethod!==`POST`)return i({error:`Method Not Allowed`},405);try{return i(await e(n.body?JSON.parse(n.body):{},r))}catch(e){return i({error:e instanceof Error?e.message:`Failed to submit feedback`},500)}}export{n as i,i as n,r,a as t};
6
+ import{t as e}from"./handler-DBZqoWt2.mjs";const t={"Access-Control-Allow-Origin":`*`,"Access-Control-Allow-Methods":`POST, OPTIONS`,"Access-Control-Allow-Headers":`Content-Type`,"Content-Type":`application/json`};async function n(n,r){if(Object.entries(t).forEach(([e,t])=>{r.setHeader(e,t)}),n.method===`OPTIONS`){r.status(200).end();return}if(n.method!==`POST`){r.status(405).json({error:`Method Not Allowed`});return}try{let t=await e(n.body,process.env);r.status(200).json(t)}catch(e){let t=e instanceof Error?e.message:`Failed to submit feedback`;return r.status(500).json({error:t})}}async function r(n,r=process.env){let i=(e,n=200)=>({statusCode:n,headers:t,body:e?JSON.stringify(e):``});if(n.httpMethod===`OPTIONS`)return i(null,200);if(n.httpMethod!==`POST`)return i({error:`Method Not Allowed`},405);try{return i(await e(n.body?JSON.parse(n.body):{},r))}catch(e){return i({error:e instanceof Error?e.message:`Failed to submit feedback`},500)}}async function i(n,r={}){let i=(e,n=200)=>new Response(e?JSON.stringify(e):null,{status:n,headers:t});if(n.method===`OPTIONS`)return i(null);if(n.method!==`POST`)return i({error:`Method Not Allowed`},405);try{return i(await e(await n.json(),{...process.env,...r}))}catch(e){return i({error:e instanceof Error?e.message:`Failed to submit feedback`},500)}}async function a(n,r=process.env){let i=(e,n=200)=>({statusCode:n,headers:t,body:e?JSON.stringify(e):``});if(n.httpMethod===`OPTIONS`)return i(null,200);if(n.httpMethod!==`POST`)return i({error:`Method Not Allowed`},405);try{return i(await e(n.body?JSON.parse(n.body):{},r))}catch(e){return i({error:e instanceof Error?e.message:`Failed to submit feedback`},500)}}export{n as i,i as n,r,a as t};
@@ -3,4 +3,4 @@
3
3
  * Copyright (c) 2026 Jesus Alcala
4
4
  * Licensed under the MIT License.
5
5
  */
6
- const e=require(`./handler-Ch-Q9NAB.cjs`),t={"Access-Control-Allow-Origin":`*`,"Access-Control-Allow-Methods":`POST, OPTIONS`,"Access-Control-Allow-Headers":`Content-Type`,"Content-Type":`application/json`};async function n(n,r){if(Object.entries(t).forEach(([e,t])=>{r.setHeader(e,t)}),n.method===`OPTIONS`){r.status(200).end();return}if(n.method!==`POST`){r.status(405).json({error:`Method Not Allowed`});return}try{let t=await e.t(n.body,process.env);r.status(200).json(t)}catch(e){let t=e instanceof Error?e.message:`Failed to submit feedback`;return r.status(500).json({error:t})}}async function r(n,r=process.env){let i=(e,n=200)=>({statusCode:n,headers:t,body:e?JSON.stringify(e):``});if(n.httpMethod===`OPTIONS`)return i(null,200);if(n.httpMethod!==`POST`)return i({error:`Method Not Allowed`},405);try{return i(await e.t(n.body?JSON.parse(n.body):{},r))}catch(e){return i({error:e instanceof Error?e.message:`Failed to submit feedback`},500)}}async function i(n,r={}){let i=(e,n=200)=>new Response(e?JSON.stringify(e):null,{status:n,headers:t});if(n.method===`OPTIONS`)return i(null);if(n.method!==`POST`)return i({error:`Method Not Allowed`},405);try{return i(await e.t(await n.json(),{...process.env,...r}))}catch(e){return i({error:e instanceof Error?e.message:`Failed to submit feedback`},500)}}async function a(n,r=process.env){let i=(e,n=200)=>({statusCode:n,headers:t,body:e?JSON.stringify(e):``});if(n.httpMethod===`OPTIONS`)return i(null,200);if(n.httpMethod!==`POST`)return i({error:`Method Not Allowed`},405);try{return i(await e.t(n.body?JSON.parse(n.body):{},r))}catch(e){return i({error:e instanceof Error?e.message:`Failed to submit feedback`},500)}}Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return n}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return r}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return a}});
6
+ const e=require(`./handler-ryZR9Q41.cjs`),t={"Access-Control-Allow-Origin":`*`,"Access-Control-Allow-Methods":`POST, OPTIONS`,"Access-Control-Allow-Headers":`Content-Type`,"Content-Type":`application/json`};async function n(n,r){if(Object.entries(t).forEach(([e,t])=>{r.setHeader(e,t)}),n.method===`OPTIONS`){r.status(200).end();return}if(n.method!==`POST`){r.status(405).json({error:`Method Not Allowed`});return}try{let t=await e.t(n.body,process.env);r.status(200).json(t)}catch(e){let t=e instanceof Error?e.message:`Failed to submit feedback`;return r.status(500).json({error:t})}}async function r(n,r=process.env){let i=(e,n=200)=>({statusCode:n,headers:t,body:e?JSON.stringify(e):``});if(n.httpMethod===`OPTIONS`)return i(null,200);if(n.httpMethod!==`POST`)return i({error:`Method Not Allowed`},405);try{return i(await e.t(n.body?JSON.parse(n.body):{},r))}catch(e){return i({error:e instanceof Error?e.message:`Failed to submit feedback`},500)}}async function i(n,r={}){let i=(e,n=200)=>new Response(e?JSON.stringify(e):null,{status:n,headers:t});if(n.method===`OPTIONS`)return i(null);if(n.method!==`POST`)return i({error:`Method Not Allowed`},405);try{return i(await e.t(await n.json(),{...process.env,...r}))}catch(e){return i({error:e instanceof Error?e.message:`Failed to submit feedback`},500)}}async function a(n,r=process.env){let i=(e,n=200)=>({statusCode:n,headers:t,body:e?JSON.stringify(e):``});if(n.httpMethod===`OPTIONS`)return i(null,200);if(n.httpMethod!==`POST`)return i({error:`Method Not Allowed`},405);try{return i(await e.t(n.body?JSON.parse(n.body):{},r))}catch(e){return i({error:e instanceof Error?e.message:`Failed to submit feedback`},500)}}Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return n}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return r}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return a}});
@@ -3,4 +3,4 @@
3
3
  * Copyright (c) 2026 Jesus Alcala
4
4
  * Licensed under the MIT License.
5
5
  */
6
- const e=require(`./chunk-D1Md3oWO.cjs`),t=require(`./node-7Cfw6nMr.cjs`),n=require(`./node/cache.cjs`),r=require(`./update-check-DFQZyoSU.cjs`);let i=require(`node:path`);i=e.r(i);let a=require(`node:fs`);a=e.r(a);let o=require(`@bdocs/dui`),s=require(`vite`);const c=new Set([`Client build`,`Server build`,`Render pages`,`Static loader data`,`Build metrics`]);function l(e,t){let n=i.default.join(e,`.boltdocs`,`benchmarks`);a.default.existsSync(n)||a.default.mkdirSync(n,{recursive:!0});let r=i.default.join(n,`phases-report-${new Date().toISOString().replace(/[:.]/g,`-`).slice(0,19)}.json`),o={timestamp:new Date().toISOString(),root:e,...t,error:t.error?.message||t.error?.toString()};return a.default.writeFileSync(r,JSON.stringify(o,null,2)),r}async function u(e=process.cwd(),i={}){process.env.NODE_ENV=`production`,r.t();let a=process.env.BOLTDOCS_BENCHMARK_PHASES===`true`;try{let i=await t.u().run({root:e,timing:{}});if(a&&console.log(`[boltdocs] ${JSON.stringify({name:`Build pipeline`,success:i.success,steps:i.stepResults.map(e=>({name:e.name,duration:Math.round(e.duration),success:e.success,...e.details?{details:e.details}:{}}))})}`),!i.success){if((0,o.error)(`Build failed at step "${i.failedStep}":`,i.error),a){let t=l(e,i);console.log(`[benchmark] failure report written to ${t}`)}await n.flushCache(),process.exit(1)}if(a){let t=l(e,i);console.log(`[benchmark] phase report written to ${t}`),await n.flushCache(),process.exit(0)}let s=i.stepResults.filter(e=>!c.has(e.name)),u=i.stepResults.find(e=>e.name===`Build metrics`)?.metrics,d=e=>(e/1024).toFixed(0),f=e=>(e/1024/1024).toFixed(1),p=e=>e>1024*1024?`${f(e)} MB`:`${d(e)} kB`;console.log(r.a({totalMs:i.timing.total,steps:s.map(e=>({name:e.name,success:e.success,duration:e.duration,details:e.details})),pages:u?.totalPages,jsSize:typeof u?.jsSize==`number`?p(u.jsSize):void 0,cssSize:typeof u?.cssSize==`number`?p(u.cssSize):void 0,outDir:`dist/`})),await n.flushCache(),process.exit(0)}catch(e){(0,o.error)(`Build failed:`,e),await n.flushCache(),process.exit(1)}}async function d(e=process.cwd(),n={}){try{let i=await t.n(e,`production`,void 0,{skipTypes:!0,skipLinkTree:!0});i.logLevel=`warn`,i.clearScreen=!1,n.port!==void 0&&(i.preview=i.preview||{},i.preview.port=Number(n.port)),n.host!==void 0&&(i.preview=i.preview||{},i.preview.host=n.host);let a=performance.now(),o=(await(0,s.preview)(i)).resolvedUrls;console.log(r.c(o?.local?.[0]??`http://localhost:${n.port??4173}`,o?.network?.[0]??null,{readyIn:performance.now()-a}))}catch(e){(0,o.error)(`Failed to start preview server:`,e),process.exit(1)}}exports.buildAction=u,exports.previewAction=d;
6
+ const e=require(`./chunk-D1Md3oWO.cjs`),t=require(`./node-BgiLCa0I.cjs`),n=require(`./node/cache.cjs`),r=require(`./update-check-CiIeC7CX.cjs`);let i=require(`node:path`);i=e.r(i);let a=require(`node:fs`);a=e.r(a);let o=require(`@bdocs/dui`),s=require(`vite`);const c=new Set([`Client build`,`Server build`,`Render pages`,`Static loader data`,`Build metrics`]);function l(e,t){let n=i.default.join(e,`.boltdocs`,`benchmarks`);a.default.existsSync(n)||a.default.mkdirSync(n,{recursive:!0});let r=i.default.join(n,`phases-report-${new Date().toISOString().replace(/[:.]/g,`-`).slice(0,19)}.json`),o={timestamp:new Date().toISOString(),root:e,...t,error:t.error?.message||t.error?.toString()};return a.default.writeFileSync(r,JSON.stringify(o,null,2)),r}async function u(e=process.cwd(),i={}){process.env.NODE_ENV=`production`,r.t();let a=process.env.BOLTDOCS_BENCHMARK_PHASES===`true`;try{let i=await t.u().run({root:e,timing:{}});if(a&&console.log(`[boltdocs] ${JSON.stringify({name:`Build pipeline`,success:i.success,steps:i.stepResults.map(e=>({name:e.name,duration:Math.round(e.duration),success:e.success,...e.details?{details:e.details}:{}}))})}`),!i.success){if((0,o.error)(`Build failed at step "${i.failedStep}":`,i.error),a){let t=l(e,i);console.log(`[benchmark] failure report written to ${t}`)}await n.flushCache(),process.exit(1)}if(a){let t=l(e,i);console.log(`[benchmark] phase report written to ${t}`),await n.flushCache(),process.exit(0)}let s=i.stepResults.filter(e=>!c.has(e.name)),u=i.stepResults.find(e=>e.name===`Build metrics`)?.metrics,d=e=>(e/1024).toFixed(0),f=e=>(e/1024/1024).toFixed(1),p=e=>e>1024*1024?`${f(e)} MB`:`${d(e)} kB`;console.log(r.a({totalMs:i.timing.total,steps:s.map(e=>({name:e.name,success:e.success,duration:e.duration,details:e.details})),pages:u?.totalPages,jsSize:typeof u?.jsSize==`number`?p(u.jsSize):void 0,cssSize:typeof u?.cssSize==`number`?p(u.cssSize):void 0,outDir:`dist/`})),await n.flushCache(),process.exit(0)}catch(e){(0,o.error)(`Build failed:`,e),await n.flushCache(),process.exit(1)}}async function d(e=process.cwd(),n={}){try{let i=await t.n(e,`production`,void 0,{skipTypes:!0,skipLinkTree:!0});i.logLevel=`warn`,i.clearScreen=!1,n.port!==void 0&&(i.preview=i.preview||{},i.preview.port=Number(n.port)),n.host!==void 0&&(i.preview=i.preview||{},i.preview.host=n.host);let a=performance.now(),o=(await(0,s.preview)(i)).resolvedUrls;console.log(r.c(o?.local?.[0]??`http://localhost:${n.port??4173}`,o?.network?.[0]??null,{readyIn:performance.now()-a}))}catch(e){(0,o.error)(`Failed to start preview server:`,e),process.exit(1)}}exports.buildAction=u,exports.previewAction=d;
@@ -3,4 +3,4 @@
3
3
  * Copyright (c) 2026 Jesus Alcala
4
4
  * Licensed under the MIT License.
5
5
  */
6
- import{d as e,n as t}from"./node-CT2E84nY.mjs";import{flushCache as n}from"./node/cache.mjs";import{a as r,c as i,t as a}from"./update-check-BXD1atVv.mjs";import o from"node:path";import s from"node:fs";import{error as c}from"@bdocs/dui";import{preview as l}from"vite";const u=new Set([`Client build`,`Server build`,`Render pages`,`Static loader data`,`Build metrics`]);function d(e,t){let n=o.join(e,`.boltdocs`,`benchmarks`);s.existsSync(n)||s.mkdirSync(n,{recursive:!0});let r=o.join(n,`phases-report-${new Date().toISOString().replace(/[:.]/g,`-`).slice(0,19)}.json`),i={timestamp:new Date().toISOString(),root:e,...t,error:t.error?.message||t.error?.toString()};return s.writeFileSync(r,JSON.stringify(i,null,2)),r}async function f(t=process.cwd(),i={}){process.env.NODE_ENV=`production`,a();let o=process.env.BOLTDOCS_BENCHMARK_PHASES===`true`;try{let i=await e().run({root:t,timing:{}});if(o&&console.log(`[boltdocs] ${JSON.stringify({name:`Build pipeline`,success:i.success,steps:i.stepResults.map(e=>({name:e.name,duration:Math.round(e.duration),success:e.success,...e.details?{details:e.details}:{}}))})}`),!i.success){if(c(`Build failed at step "${i.failedStep}":`,i.error),o){let e=d(t,i);console.log(`[benchmark] failure report written to ${e}`)}await n(),process.exit(1)}if(o){let e=d(t,i);console.log(`[benchmark] phase report written to ${e}`),await n(),process.exit(0)}let a=i.stepResults.filter(e=>!u.has(e.name)),s=i.stepResults.find(e=>e.name===`Build metrics`)?.metrics,l=e=>(e/1024).toFixed(0),f=e=>(e/1024/1024).toFixed(1),p=e=>e>1024*1024?`${f(e)} MB`:`${l(e)} kB`;console.log(r({totalMs:i.timing.total,steps:a.map(e=>({name:e.name,success:e.success,duration:e.duration,details:e.details})),pages:s?.totalPages,jsSize:typeof s?.jsSize==`number`?p(s.jsSize):void 0,cssSize:typeof s?.cssSize==`number`?p(s.cssSize):void 0,outDir:`dist/`})),await n(),process.exit(0)}catch(e){c(`Build failed:`,e),await n(),process.exit(1)}}async function p(e=process.cwd(),n={}){try{let r=await t(e,`production`,void 0,{skipTypes:!0,skipLinkTree:!0});r.logLevel=`warn`,r.clearScreen=!1,n.port!==void 0&&(r.preview=r.preview||{},r.preview.port=Number(n.port)),n.host!==void 0&&(r.preview=r.preview||{},r.preview.host=n.host);let a=performance.now(),o=(await l(r)).resolvedUrls;console.log(i(o?.local?.[0]??`http://localhost:${n.port??4173}`,o?.network?.[0]??null,{readyIn:performance.now()-a}))}catch(e){c(`Failed to start preview server:`,e),process.exit(1)}}export{f as buildAction,p as previewAction};
6
+ import{d as e,n as t}from"./node-Da3tYBHo.mjs";import{flushCache as n}from"./node/cache.mjs";import{a as r,c as i,t as a}from"./update-check-BXx8te9F.mjs";import o from"node:path";import s from"node:fs";import{error as c}from"@bdocs/dui";import{preview as l}from"vite";const u=new Set([`Client build`,`Server build`,`Render pages`,`Static loader data`,`Build metrics`]);function d(e,t){let n=o.join(e,`.boltdocs`,`benchmarks`);s.existsSync(n)||s.mkdirSync(n,{recursive:!0});let r=o.join(n,`phases-report-${new Date().toISOString().replace(/[:.]/g,`-`).slice(0,19)}.json`),i={timestamp:new Date().toISOString(),root:e,...t,error:t.error?.message||t.error?.toString()};return s.writeFileSync(r,JSON.stringify(i,null,2)),r}async function f(t=process.cwd(),i={}){process.env.NODE_ENV=`production`,a();let o=process.env.BOLTDOCS_BENCHMARK_PHASES===`true`;try{let i=await e().run({root:t,timing:{}});if(o&&console.log(`[boltdocs] ${JSON.stringify({name:`Build pipeline`,success:i.success,steps:i.stepResults.map(e=>({name:e.name,duration:Math.round(e.duration),success:e.success,...e.details?{details:e.details}:{}}))})}`),!i.success){if(c(`Build failed at step "${i.failedStep}":`,i.error),o){let e=d(t,i);console.log(`[benchmark] failure report written to ${e}`)}await n(),process.exit(1)}if(o){let e=d(t,i);console.log(`[benchmark] phase report written to ${e}`),await n(),process.exit(0)}let a=i.stepResults.filter(e=>!u.has(e.name)),s=i.stepResults.find(e=>e.name===`Build metrics`)?.metrics,l=e=>(e/1024).toFixed(0),f=e=>(e/1024/1024).toFixed(1),p=e=>e>1024*1024?`${f(e)} MB`:`${l(e)} kB`;console.log(r({totalMs:i.timing.total,steps:a.map(e=>({name:e.name,success:e.success,duration:e.duration,details:e.details})),pages:s?.totalPages,jsSize:typeof s?.jsSize==`number`?p(s.jsSize):void 0,cssSize:typeof s?.cssSize==`number`?p(s.cssSize):void 0,outDir:`dist/`})),await n(),process.exit(0)}catch(e){c(`Build failed:`,e),await n(),process.exit(1)}}async function p(e=process.cwd(),n={}){try{let r=await t(e,`production`,void 0,{skipTypes:!0,skipLinkTree:!0});r.logLevel=`warn`,r.clearScreen=!1,n.port!==void 0&&(r.preview=r.preview||{},r.preview.port=Number(n.port)),n.host!==void 0&&(r.preview=r.preview||{},r.preview.host=n.host);let a=performance.now(),o=(await l(r)).resolvedUrls;console.log(i(o?.local?.[0]??`http://localhost:${n.port??4173}`,o?.network?.[0]??null,{readyIn:performance.now()-a}))}catch(e){c(`Failed to start preview server:`,e),process.exit(1)}}export{f as buildAction,p as previewAction};
@@ -4,13 +4,13 @@
4
4
  * Licensed under the MIT License.
5
5
  */
6
6
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
7
- const require_router = require('../router-C3kygdRK.cjs');
8
- const require_link = require('../link-hLWOsx0x.cjs');
9
- const require_image = require('../image-Bkx85rsq.cjs');
10
- const require_mdx = require('../mdx-Qi0DmaY8.cjs');
11
- const require_docs_layout = require('../docs-layout-SgphExoE.cjs');
12
- const require_search_dialog = require('../search-dialog-BYZS9aeO.cjs');
13
- const require_search_dialog$1 = require('../search-dialog-CguKVtUu.cjs');
7
+ const require_router = require('../router-DKC0Lu0n.cjs');
8
+ const require_link = require('../link-Xb69Oy2F.cjs');
9
+ const require_image = require('../image-Bke2ojW1.cjs');
10
+ const require_mdx = require('../mdx-BCOrMd-P.cjs');
11
+ const require_docs_layout = require('../docs-layout-DIgxJ5c7.cjs');
12
+ const require_search_dialog = require('../search-dialog-CwlBd-Mu.cjs');
13
+ const require_search_dialog$1 = require('../search-dialog-BOQRHKTb.cjs');
14
14
  let react = require("react");
15
15
  let react_jsx_runtime = require("react/jsx-runtime");
16
16
  let react_aria_components = require("react-aria-components");
@@ -311,7 +311,7 @@ function stringifyMetaValue(value) {
311
311
  }
312
312
  function Head({ siteTitle, siteDescription, routes }) {
313
313
  const location = require_router.useLocation();
314
- const config = require_link.useConfig();
314
+ const config = require_router.useConfig();
315
315
  const { currentLocale, currentRoute } = require_search_dialog.useRoutes();
316
316
  const route = (0, react.useMemo)(() => {
317
317
  if (currentRoute) return currentRoute;
@@ -581,7 +581,7 @@ function BoltdocsShell({ config, routes, components = {}, collectionsData, conte
581
581
  routes,
582
582
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_image.ThemeProvider, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_docs_layout.UIProvider, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MdxComponentsProvider, {
583
583
  components: allComponents,
584
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_link.ConfigContext.Provider, {
584
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_router.ConfigContext.Provider, {
585
585
  value: config,
586
586
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(CollectionsProvider, {
587
587
  collectionsData: collectionsData || {},
@@ -657,12 +657,12 @@ function DocPage({ route, content: Content, mdxComponents: propComponents }) {
657
657
  /**
658
658
  * Renders an MDX page by consuming pre-loaded route data.
659
659
  *
660
- * - If the route belongs to a collection (`data.collection` is set), wraps
661
- * the content with `CurrentPostProvider` so that `usePost()` (called without
662
- * a slug) can read the current post's data from context.
660
+ * - If the route belongs to a collection, wraps the content with
661
+ * `CurrentPostProvider` so that `usePost()` (called without a slug) can read
662
+ * the current post's data from context.
663
663
  * - Otherwise, renders the standard `DocPage` layout.
664
664
  */
665
- function MdxPage({ MDXComponent, mdxComponents: propComponents, collectionPostComponent: CollectionPost }) {
665
+ function MdxPage({ MDXComponent, mdxComponents: propComponents, collectionPostComponent: CollectionPost, collection, route: routeProp }) {
666
666
  const data = require_router.useLoaderData();
667
667
  const mdxComponents = {
668
668
  ...useMdxComponents(),
@@ -670,30 +670,37 @@ function MdxPage({ MDXComponent, mdxComponents: propComponents, collectionPostCo
670
670
  };
671
671
  if (!MDXComponent) return null;
672
672
  const collectionData = data || {};
673
- if (!!collectionData?.collection && !!collectionData?.route) {
673
+ const isCollection = collection ? true : !!collectionData?.collection && !!collectionData?.route;
674
+ /**
675
+ * The loader's own copy of the route, falling back to the route table so the
676
+ * first client render has the same metadata the server used.
677
+ */
678
+ const postRoute = collectionData.route ?? routeProp;
679
+ const postHeadings = collectionData.headings ?? routeProp?.headings ?? [];
680
+ if (isCollection) {
674
681
  const postElement = CollectionPost ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(CollectionPost, {
675
682
  MDXComponent,
676
683
  mdxComponents
677
684
  }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DocPage, {
678
685
  route: {
679
- path: collectionData.route?.path || "",
680
- filePath: collectionData.route?.filePath || "",
681
- title: collectionData.route?.title,
682
- description: collectionData.route?.description,
683
- headings: collectionData.headings || [],
684
- locale: collectionData.route?.locale,
685
- version: collectionData.route?.version,
686
- lastUpdated: collectionData.route?.lastUpdated,
687
- frontmatter: collectionData.route?.frontmatter
686
+ path: postRoute?.path || "",
687
+ filePath: postRoute?.filePath || "",
688
+ title: postRoute?.title,
689
+ description: postRoute?.description,
690
+ headings: postHeadings,
691
+ locale: postRoute?.locale,
692
+ version: postRoute?.version,
693
+ lastUpdated: postRoute?.lastUpdated,
694
+ frontmatter: postRoute?.frontmatter
688
695
  },
689
696
  content: MDXComponent,
690
697
  mdxComponents
691
698
  });
692
699
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(CurrentPostProvider, {
693
700
  value: {
694
- route: collectionData.route,
695
- headings: collectionData.headings,
696
- collection: collectionData.collection
701
+ route: postRoute,
702
+ headings: postHeadings,
703
+ collection: collection ?? collectionData.collection
697
704
  },
698
705
  children: postElement
699
706
  });
@@ -943,7 +950,7 @@ function GithubStars({ repo, className }) {
943
950
  //#endregion
944
951
  //#region src/client/hooks/use-navbar.ts
945
952
  function useNavbar() {
946
- const config = require_link.useConfig();
953
+ const config = require_router.useConfig();
947
954
  const { theme, resolvedTheme } = require_image.useTheme();
948
955
  const location = require_router.useLocation();
949
956
  const { currentLocale } = require_search_dialog.useRoutes();
@@ -1005,7 +1012,13 @@ function useNavbar() {
1005
1012
  return {
1006
1013
  links,
1007
1014
  title,
1008
- logo: !logo ? null : typeof logo === "string" ? logo : resolvedTheme === "dark" ? logo.dark : logo.light,
1015
+ logo: !logo ? null : typeof logo === "string" ? {
1016
+ light: logo,
1017
+ dark: null
1018
+ } : {
1019
+ light: logo.light,
1020
+ dark: logo.dark
1021
+ },
1009
1022
  logoProps: {
1010
1023
  alt: (logo && typeof logo === "object" ? logo.alt : void 0) || title,
1011
1024
  width: logo && typeof logo === "object" ? logo.width : void 0,
@@ -1212,7 +1225,7 @@ function getBaseFilePath(filePath, version, locale) {
1212
1225
  */
1213
1226
  function useVersion() {
1214
1227
  const navigate = require_router.useNavigate();
1215
- const config = require_link.useConfig();
1228
+ const config = require_router.useConfig();
1216
1229
  const { allRoutes, currentRoute, currentVersion, currentLocale } = require_search_dialog.useRoutes();
1217
1230
  const versions = config.versions;
1218
1231
  const { setVersion } = require_link.useBoltdocsContext();
@@ -1281,7 +1294,7 @@ function VersionSelector({ className }) {
1281
1294
  function useI18n() {
1282
1295
  const navigate = require_router.useNavigate();
1283
1296
  const location = require_router.useLocation();
1284
- const config = require_link.useConfig();
1297
+ const config = require_router.useConfig();
1285
1298
  const { allRoutes, currentRoute, currentLocale, isCollectionPage } = require_search_dialog.useRoutes();
1286
1299
  const i18n = config.i18n;
1287
1300
  const { setLocale } = require_link.useBoltdocsContext();
@@ -1644,7 +1657,7 @@ function useHeadings() {
1644
1657
  * Resets automatically when navigating to a new page.
1645
1658
  */
1646
1659
  function useFeedback(options = {}) {
1647
- const config = require_link.useConfig();
1660
+ const config = require_router.useConfig();
1648
1661
  const { currentRoute } = require_search_dialog.useRoutes();
1649
1662
  const [rating, setRating] = (0, react.useState)(null);
1650
1663
  const [comment, setComment] = (0, react.useState)("");
@@ -1736,7 +1749,7 @@ function I18nSelector({ className }) {
1736
1749
 
1737
1750
  //#endregion
1738
1751
  //#region src/client/components/ui-base/navbar.tsx
1739
- const SearchDialog$1 = (0, react.lazy)(() => Promise.resolve().then(() => require("../search-dialog-QgKRRbsI.cjs")).then((m) => ({ default: m.SearchDialog })));
1752
+ const SearchDialog$1 = (0, react.lazy)(() => Promise.resolve().then(() => require("../search-dialog-cHXR5zhL.cjs")).then((m) => ({ default: m.SearchDialog })));
1740
1753
  function Navbar({ className }) {
1741
1754
  const { links, title, logo, logoProps, github, social, config } = useNavbar();
1742
1755
  const { routes, allRoutes, currentRoute, isCollectionPage, currentVersion, currentLocale } = require_search_dialog.useRoutes();
@@ -1757,7 +1770,9 @@ function Navbar({ className }) {
1757
1770
  children: isSidebarOpen ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_link.X, { className: "w-5 h-5 text-body" }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_link.Menu, { className: "w-5 h-5 text-body" })
1758
1771
  }),
1759
1772
  logo && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_search_dialog$1.Navbar.Logo, {
1760
- src: logo,
1773
+ src: logo.light,
1774
+ srcLight: logo.light,
1775
+ srcDark: logo.dark,
1761
1776
  alt: logoProps?.alt || title,
1762
1777
  width: logoProps?.width ?? 24,
1763
1778
  height: logoProps?.height ?? 24,
@@ -2008,8 +2023,30 @@ const mergeSlots = (defaults, overrides) => {
2008
2023
  function SidebarMain({ routes, config, className }) {
2009
2024
  const { logo, title, logoProps } = useNavbar();
2010
2025
  const { closeSidebar } = require_docs_layout.useUI();
2011
- const SidebarLogo = logo ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("img", {
2012
- src: require_link.resolvePublicAssetUrl(logo, config.base),
2026
+ /**
2027
+ * Both logo variants are rendered and CSS selects the visible one.
2028
+ *
2029
+ * Resolving the source from the theme would make the server and the browser
2030
+ * emit different `src` values, which is a hydration mismatch. The `dark`
2031
+ * class on `<html>` is set before first paint, so there is no flash.
2032
+ */
2033
+ const SidebarLogo = logo ? logo.dark && logo.dark !== logo.light ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("img", {
2034
+ src: require_link.resolvePublicAssetUrl(logo.light, config.base),
2035
+ alt: logoProps?.alt || title,
2036
+ width: 24,
2037
+ height: 24,
2038
+ "data-logo-theme": "light",
2039
+ className: "rounded-xl dark:hidden"
2040
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("img", {
2041
+ src: require_link.resolvePublicAssetUrl(logo.dark, config.base),
2042
+ alt: logoProps?.alt || title,
2043
+ width: 24,
2044
+ height: 24,
2045
+ "data-logo-theme": "dark",
2046
+ "aria-hidden": "true",
2047
+ className: "hidden rounded-xl dark:block"
2048
+ })] }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("img", {
2049
+ src: require_link.resolvePublicAssetUrl(logo.light, config.base),
2013
2050
  alt: logoProps?.alt || title,
2014
2051
  width: 24,
2015
2052
  height: 24,
@@ -2116,7 +2153,7 @@ function Banner({ children, className = "", dismissible = false, id = "boltdocs-
2116
2153
  //#endregion
2117
2154
  //#region src/client/components/ui-base/feedback.tsx
2118
2155
  function Feedback({ className }) {
2119
- if (!(require_link.useConfig().integrations?.feedback?.custom)?.enabled) return null;
2156
+ if (!(require_router.useConfig().integrations?.feedback?.custom)?.enabled) return null;
2120
2157
  const { rating, setRating, comment, setComment, loading, submitted, error, submit } = useFeedback();
2121
2158
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
2122
2159
  className: require_link.cn("w-full max-w-2xl mt-12 mb-6 p-6 rounded-2xl border border-subtle bg-surface/50 backdrop-blur-xs select-none", className),
@@ -2200,7 +2237,7 @@ function Feedback({ className }) {
2200
2237
  //#endregion
2201
2238
  //#region src/client/components/ui-base/giscus.tsx
2202
2239
  function Giscus({ className }) {
2203
- const config = require_link.useConfig();
2240
+ const config = require_router.useConfig();
2204
2241
  const { resolvedTheme } = require_image.useTheme();
2205
2242
  const ref = (0, react.useRef)(null);
2206
2243
  const initializedRef = (0, react.useRef)(false);
@@ -2326,7 +2363,9 @@ const EagerMdxElement = ({ moduleLoader, moduleKey, route, components, collectio
2326
2363
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MdxPage, {
2327
2364
  MDXComponent,
2328
2365
  mdxComponents: components ?? {},
2329
- collectionPostComponent
2366
+ collectionPostComponent,
2367
+ collection: route.collection,
2368
+ route
2330
2369
  });
2331
2370
  };
2332
2371
  const NotFoundWrapper = () => {
@@ -2373,7 +2412,7 @@ function DocsLayout({ collectionsData }) {
2373
2412
 
2374
2413
  //#endregion
2375
2414
  //#region src/client/ssg/create-routes.utils.ts
2376
- function withBase(path, config) {
2415
+ function withBase$1(path, config) {
2377
2416
  const base = config.base || "/";
2378
2417
  if (path.startsWith(base)) return path;
2379
2418
  return `${base === "/" ? "" : base.replace(/\/$/, "")}${path.startsWith("/") ? path : `/${path}`}` || "/";
@@ -2469,7 +2508,7 @@ function buildDocRoutes(options) {
2469
2508
  const docRoutes = docMetadata.map((route) => {
2470
2509
  const moduleKey = resolveModuleKey(route.filePath, moduleMap);
2471
2510
  const moduleLoader = moduleKey ? mdxModules[moduleKey] : null;
2472
- const fullPath = withBase(route.path === "" ? "/" : route.path, config);
2511
+ const fullPath = withBase$1(route.path === "" ? "/" : route.path, config);
2473
2512
  const path = fullPath === baseDocsPath ? "." : fullPath.startsWith(baseDocsPath + "/") ? fullPath.slice(baseDocsPath.length + 1) : fullPath;
2474
2513
  const routeRecord = {
2475
2514
  path,
@@ -2596,7 +2635,7 @@ function buildDocRoutes(options) {
2596
2635
  fallback: true,
2597
2636
  seo: {
2598
2637
  ...matchedMetaObj.seo,
2599
- canonical: config.siteUrl ? `${config.siteUrl.replace(/\/$/, "")}${withBase(bPath, config)}` : withBase(bPath, config)
2638
+ canonical: config.siteUrl ? `${config.siteUrl.replace(/\/$/, "")}${withBase$1(bPath, config)}` : withBase$1(bPath, config)
2600
2639
  }
2601
2640
  } : {
2602
2641
  path: bPath,
@@ -2671,16 +2710,33 @@ function ExternalPageWrapper({ children }) {
2671
2710
 
2672
2711
  //#endregion
2673
2712
  //#region src/client/ssg/create-routes.external.tsx
2674
- function getLocales(config) {
2713
+ function getLocales$1(config) {
2675
2714
  if (!config.i18n) return [];
2676
2715
  return Array.isArray(config.i18n.locales) ? config.i18n.locales : Object.keys(config.i18n.locales);
2677
2716
  }
2717
+ /**
2718
+ * Lists the locale-prefixed variants of a path.
2719
+ *
2720
+ * The default locale is skipped on purpose. It is already the unprefixed path,
2721
+ * so prefixing it would mint a second URL for the same page: a site with
2722
+ * `defaultLocale: 'en'` would serve both `/about` and `/en/about`. That is not
2723
+ * a harmless duplicate. The docs site is served under a base, and the SSG path
2724
+ * collector prepends the base to the prefixed variant, so it emitted
2725
+ * `/docs/en/about` — a URL the client router never learns about, because the
2726
+ * base is not part of the route. Visitors landing there got a 404 on a page
2727
+ * the build had itself written.
2728
+ *
2729
+ * A developer configuring a second locale should not have to know this, so the
2730
+ * redundant variant is never generated in the first place.
2731
+ */
2678
2732
  function getLocalizedPaths(pathname, config) {
2679
2733
  const paths = [{
2680
2734
  path: pathname,
2681
2735
  locale: config.i18n?.defaultLocale
2682
2736
  }];
2683
- for (const locale of getLocales(config)) {
2737
+ const defaultLocale = config.i18n?.defaultLocale;
2738
+ for (const locale of getLocales$1(config)) {
2739
+ if (locale === defaultLocale) continue;
2684
2740
  const localizedPath = pathname === "/" ? `/${locale}` : `/${locale}${pathname}`;
2685
2741
  if (!paths.some((entry) => entry.path === localizedPath)) paths.push({
2686
2742
  path: localizedPath,
@@ -2804,7 +2860,7 @@ function buildExternalFileRoutes(options) {
2804
2860
  metadata
2805
2861
  };
2806
2862
  const EffectiveExternalLayout = externalLayout || (({ children }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_jsx_runtime.Fragment, { children }));
2807
- const locales = getLocales(config);
2863
+ const locales = getLocales$1(config);
2808
2864
  const isLocalizedPath = (pathname) => locales.some((locale) => pathname === `/${locale}` || pathname.startsWith(`/${locale}/`));
2809
2865
  const localeOfPath = (pathname) => {
2810
2866
  const first = pathname.split("/").filter(Boolean)[0];
@@ -2859,7 +2915,7 @@ function getPostTimestamp(date) {
2859
2915
  function usePosts(collection = DEFAULT_COLLECTION, options) {
2860
2916
  const data = useCollectionsData();
2861
2917
  const { currentLocale, currentVersion } = require_search_dialog.useRoutes();
2862
- const config = require_link.useConfig();
2918
+ const config = require_router.useConfig();
2863
2919
  const posts = data[collection] || [];
2864
2920
  const defaultLocale = config.i18n?.defaultLocale;
2865
2921
  const defaultVersion = config.versions?.defaultVersion;
@@ -2962,7 +3018,7 @@ function getCollectionModule(route, moduleMap, mdxModules) {
2962
3018
  }
2963
3019
  function DefaultCollectionList() {
2964
3020
  const location = require_router.useLocation();
2965
- const config = require_link.useConfig();
3021
+ const config = require_router.useConfig();
2966
3022
  const loaderData = require_router.useLoaderData();
2967
3023
  const postsPerPage = config.collections?.postsPerPage ?? 10;
2968
3024
  const basePath = location.pathname.replace(/\/page\/\d+\/?$/, "").replace(/\/$/, "");
@@ -2999,7 +3055,7 @@ function DefaultCollectionList() {
2999
3055
  }),
3000
3056
  post.date && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("time", {
3001
3057
  className: "text-xs text-muted block mb-2",
3002
- children: new Date(post.date).toLocaleDateString()
3058
+ children: require_mdx.formatDeterministicDate(post.date, { month: "short" })
3003
3059
  }),
3004
3060
  post.excerpt && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
3005
3061
  className: "text-sm text-body",
@@ -3241,6 +3297,106 @@ function buildCollectionRoutes(options) {
3241
3297
  };
3242
3298
  }
3243
3299
 
3300
+ //#endregion
3301
+ //#region src/client/ssg/create-routes.redirect.tsx
3302
+ function normalize(value) {
3303
+ const [withoutHash] = value.split("#");
3304
+ const queryIndex = withoutHash.indexOf("?");
3305
+ const rawPath = queryIndex === -1 ? withoutHash : withoutHash.slice(0, queryIndex);
3306
+ const query = queryIndex === -1 ? "" : withoutHash.slice(queryIndex);
3307
+ const collapsed = `/${rawPath}`.replace(/\/{2,}/g, "/");
3308
+ return `${collapsed === "/" ? "/" : collapsed.replace(/\/+$/, "")}${query}`;
3309
+ }
3310
+ function isExternalTarget(to) {
3311
+ return /^[a-z][a-z0-9+.-]*:/i.test(to) || to.startsWith("//");
3312
+ }
3313
+ function getLocales(config) {
3314
+ const locales = config.i18n?.locales;
3315
+ if (!locales) return [];
3316
+ return Array.isArray(locales) ? locales : Object.keys(locales);
3317
+ }
3318
+ function withBase(pathname, base) {
3319
+ if (base === "/" || !base) return pathname;
3320
+ const normalizedBase = `/${base.replace(/^\/+|\/+$/g, "")}`;
3321
+ if (pathname === "/") return normalizedBase;
3322
+ return `${normalizedBase}${pathname}`;
3323
+ }
3324
+ /**
3325
+ * Collapses redirect chains and rejects cycles in the browser as well, so a
3326
+ * misconfigured site fails visibly instead of trapping the visitor.
3327
+ */
3328
+ function buildRedirectMap(config) {
3329
+ const map = /* @__PURE__ */ new Map();
3330
+ const entries = config.redirects ?? [];
3331
+ for (const entry of entries) {
3332
+ const from = normalize(entry.from);
3333
+ const sources = entry.locale ? getLocales(config).map((locale) => from === `/${locale}` || from.startsWith(`/${locale}/`) ? from : from === "/" ? `/${locale}` : `/${locale}${from}`) : [from];
3334
+ for (const source of sources) {
3335
+ const to = isExternalTarget(entry.to) ? entry.to : withBase(normalize(entry.to), config.base ?? "/");
3336
+ map.set(source, to);
3337
+ }
3338
+ }
3339
+ for (const [source, direct] of map) {
3340
+ let current = direct;
3341
+ const seen = new Set([source]);
3342
+ for (let depth = 0; depth < 10; depth++) {
3343
+ const nextPath = current.split("?")[0];
3344
+ const next = map.get(nextPath);
3345
+ if (!next || seen.has(nextPath)) break;
3346
+ seen.add(nextPath);
3347
+ current = next;
3348
+ }
3349
+ map.set(source, current);
3350
+ }
3351
+ return map;
3352
+ }
3353
+ /**
3354
+ * Performs the redirect during render effects. A short delay lets the static
3355
+ * host serve the prerendered redirect document first on a cold load, while a
3356
+ * client-side navigation never flashes the destination page.
3357
+ */
3358
+ function RedirectBoundary({ to }) {
3359
+ const navigate = require_router.useNavigate();
3360
+ (0, react.useEffect)(() => {
3361
+ if (isExternalTarget(to)) {
3362
+ window.location.replace(to);
3363
+ return;
3364
+ }
3365
+ navigate(to, { replace: true });
3366
+ }, [navigate, to]);
3367
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("main", {
3368
+ className: "boltdocs-page w-full pt-4 pb-20 px-4 sm:px-8",
3369
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
3370
+ className: "mx-auto w-full max-w-3xl sm:max-w-4xl",
3371
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("p", {
3372
+ className: "text-paragraph",
3373
+ children: [
3374
+ "Redirecting to ",
3375
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("a", {
3376
+ href: to,
3377
+ children: to
3378
+ }),
3379
+ "…"
3380
+ ]
3381
+ })
3382
+ })
3383
+ });
3384
+ }
3385
+ /**
3386
+ * Builds client-side redirect routes from `config.redirects`.
3387
+ *
3388
+ * Redirect sources are appended after the real routes so an existing page always
3389
+ * wins, and before the catch-all so a redirect is never shadowed by the 404.
3390
+ */
3391
+ function buildRedirectRoutes({ config }) {
3392
+ const map = buildRedirectMap(config);
3393
+ if (map.size === 0) return [];
3394
+ return [...map.entries()].sort(([a], [b]) => a.localeCompare(b)).map(([from, to]) => ({
3395
+ path: from,
3396
+ element: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RedirectBoundary, { to })
3397
+ }));
3398
+ }
3399
+
3244
3400
  //#endregion
3245
3401
  //#region src/client/ssg/create-routes.tsx
3246
3402
  function createRoutes(options) {
@@ -3266,6 +3422,7 @@ function createRoutes(options) {
3266
3422
  };
3267
3423
  filteredExternalFileRoutes.children = externalFileRoutes.children.filter((route) => !route.path || acceptedExternalFilePaths.has(route.path));
3268
3424
  const collectionRoutes = buildCollectionRoutes(options);
3425
+ const redirectRoutes = buildRedirectRoutes({ config });
3269
3426
  const children = [
3270
3427
  {
3271
3428
  path: baseDocsPath,
@@ -3275,6 +3432,7 @@ function createRoutes(options) {
3275
3432
  ...externalRoutes.children,
3276
3433
  ...filteredExternalFileRoutes.children,
3277
3434
  ...collectionRoutes.children,
3435
+ ...redirectRoutes,
3278
3436
  {
3279
3437
  path: "*",
3280
3438
  element: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ExternalPageWrapper, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(EffectiveExternalLayout, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(NotFoundWrapper, {}) }) })
@@ -3309,6 +3467,18 @@ function createRoutes(options) {
3309
3467
  };
3310
3468
  }
3311
3469
 
3470
+ //#endregion
3471
+ //#region src/client/collections/utils.ts
3472
+ /**
3473
+ * Formats a date to a human-readable string.
3474
+ *
3475
+ * Locale and time zone are pinned so the server and the browser produce
3476
+ * identical text during hydration. See `formatDeterministicDate`.
3477
+ */
3478
+ function formatDate(date, options = {}) {
3479
+ return require_mdx.formatDeterministicDate(date, options);
3480
+ }
3481
+
3312
3482
  //#endregion
3313
3483
  //#region src/client/components/docs-layout-default.tsx
3314
3484
  /**
@@ -3321,7 +3491,7 @@ function createRoutes(options) {
3321
3491
  */
3322
3492
  function DocsLayoutComponent({ children }) {
3323
3493
  const { routes: filteredRoutes, currentRoute, isCollectionPage } = require_search_dialog.useRoutes();
3324
- const config = require_link.useConfig();
3494
+ const config = require_router.useConfig();
3325
3495
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_docs_layout.DocsLayout, {
3326
3496
  className: "selection:bg-primary-500/10 selection:text-primary-500",
3327
3497
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(Navbar, {}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_docs_layout.DocsLayout.Body, {
@@ -3479,6 +3649,8 @@ exports.createStructuredData = createStructuredData;
3479
3649
  exports.createWebSiteStructuredData = createWebSiteStructuredData;
3480
3650
  exports.defaultNavigate = require_router.defaultNavigate;
3481
3651
  exports.defineStructuredData = defineStructuredData;
3652
+ exports.formatDate = formatDate;
3653
+ exports.formatDeterministicDate = require_mdx.formatDeterministicDate;
3482
3654
  exports.getConfiguredLocales = require_router.getConfiguredLocales;
3483
3655
  exports.getConfiguredVersions = require_router.getConfiguredVersions;
3484
3656
  exports.getStarsRepo = getStarsRepo;
@@ -3501,7 +3673,7 @@ exports.resolvePublicAssetUrl = require_link.resolvePublicAssetUrl;
3501
3673
  exports.resolveRouteBranch = require_router.resolveRouteBranch;
3502
3674
  exports.resolveUrlReference = require_router.resolveUrlReference;
3503
3675
  exports.splitUrlReference = require_router.splitUrlReference;
3504
- exports.startViewTransition = require_link.startViewTransition;
3676
+ exports.startViewTransition = require_router.startViewTransition;
3505
3677
  exports.stripBasename = require_router.stripBasename;
3506
3678
  exports.stripSiteProtocol = require_router.stripSiteProtocol;
3507
3679
  exports.stripUrlBase = require_router.stripUrlBase;
@@ -3509,7 +3681,7 @@ exports.useAnalytics = useAnalytics;
3509
3681
  exports.useBreadcrumbs = useBreadcrumbs;
3510
3682
  exports.useCodeBlock = useCodeBlock;
3511
3683
  exports.useCodeBlockFeedback = require_mdx.useCodeBlockFeedback;
3512
- exports.useConfig = require_link.useConfig;
3684
+ exports.useConfig = require_router.useConfig;
3513
3685
  exports.useCopyButton = require_mdx.useCopyButton;
3514
3686
  exports.useExpandable = require_mdx.useExpandable;
3515
3687
  exports.useFeedback = useFeedback;
@@ -3539,4 +3711,4 @@ exports.useTrackEvent = useTrackEvent;
3539
3711
  exports.useTrackPageView = useTrackPageView;
3540
3712
  exports.useUI = require_docs_layout.useUI;
3541
3713
  exports.useVersion = useVersion;
3542
- exports.useViewTransition = require_link.useViewTransition;
3714
+ exports.useViewTransition = require_router.useViewTransition;
@@ -1,4 +1,4 @@
1
1
 
2
- import { $ as LazyRouteResult, A as matchRouteBranch, B as useRouteData, C as stripSiteProtocol, D as normalizeBasename, E as hasBasename, F as useLoaderData, G as MatchesContext, H as LocationProvider, I as useLocation, J as PrefetchContext, K as NavigateContext, L as useMatches, M as resolveRouteBranch, N as Outlet, O as stripBasename, P as OutletContext, Q as CreateRoutesResult, R as useNavigate, S as splitUrlReference, T as addBasename, U as LocationProviderProps, V as LocationContext, W as LocationState, X as RouteDataContext, Y as PrefetchFunction, Z as defaultNavigate, _ as isConfiguredVersion, a as UrlRouteHint, at as RouterOptions, b as parseUrlReference, c as buildUrl, d as getConfiguredVersions, dt as BoltdocsRoutePath, et as LoaderFunction, f as getVersionPrefixSegments, ft as BoltdocsRoutePathWithFallback, g as isConfiguredLocale, h as hasUrlBase, ht as BoltdocsVersion, i as UrlContractConfig, it as RouteRendererProps, j as matchRouteBranchWithParams, k as RouteRenderer, l as classifyUrlPath, lt as BoltdocsLocale, m as hasUriScheme, mt as BoltdocsTypes, n as ParsedUrl, nt as RouteMatch, o as UrlRouteKind, p as getVersionSegments, q as NavigateFunction, r as ResolveUrlOptions, rt as RouteRecord, s as addUrlBase, st as BoltdocsConfig, t as BuildUrlOptions, tt as LoaderFunctionArgs, u as getConfiguredLocales, v as normalizeUrlBase, w as stripUrlBase, x as resolveUrlReference, y as normalizeUrlPath, z as usePrefetch } from "../index-CgWkOCCn.cjs";
3
- import { A as cn, At as useUI, B as NotFound, Bt as CollectionsData, C as createArticleStructuredData, Ct as usePageNav, D as defineStructuredData, Dt as useSearch, E as createWebSiteStructuredData, Et as useTabs, F as TimelineVariant, Ft as BoltdocsShell, G as Breadcrumbs, Gt as ComponentRoute, H as CopyMarkdown, Ht as BoltdocsTab, I as usePost, It as MdxPage, Jt as OnThisPageProps, K as OnThisPage, Kt as LayoutProps, L as usePosts, Lt as createRoutes, M as TimelineBadgeConfig, Mt as useTheme, N as TimelineItemProps, Nt as useConfig, O as getTranslated, Ot as useSidebar, P as TimelineProps, Pt as ViteReactSSG, R as useRecentPosts, Rt as CollectionPost, S as WebSiteStructuredDataOptions, St as useBreadcrumbs, T as createStructuredData, Tt as useVersion, U as ErrorBoundary, Ut as CollectionListLoaderData, V as SearchDialog, Vt as CurrentPostProvider, W as PageNav, Wt as CollectionPostLoaderData, Xt as SiteConfig, Yt as SidebarProps, Zt as TabsProps, _ as StructuredData, _t as useTrackEvent, a as useExpandable, b as BreadcrumbStructuredDataItem, bt as useLocalizedTo, c as getStarsRepo, d as ViewTransitionHandle, dt as Navbar, f as ViewTransitionOptions, ft as DocsLayoutComponent, g as useViewTransition, gt as useAnalytics, h as startViewTransition, ht as useHeadings, i as UseExpandableOptions, j as Timeline, jt as useMdxComponents, k as resolvePublicAssetUrl, kt as useNavbar, l as copyToClipboard, m as ViewTransitionUpdate, mt as useMergedComponents, n as UseCodeBlockFeedbackOptions, o as useCopyButton, p as ViewTransitionRunner, pt as useFeedback, q as Sidebar, qt as NavbarLink, r as useCodeBlockFeedback, s as useCodeBlock, t as CodeBlockFeedbackPayload, u as reactToText, v as StructuredDataProps, vt as useTrackPageView, w as createBreadcrumbStructuredData, wt as useI18n, x as StructuredDataFactoryOptions, xt as useRoutes, y as ArticleStructuredDataOptions, yt as useSearchHighlight, z as Banner, zt as CollectionsContext } from "../index-DLaHgD-i.cjs";
4
- export { ArticleStructuredDataOptions, Banner, BoltdocsConfig, BoltdocsLocale, BoltdocsRoutePath, BoltdocsRoutePathWithFallback, BoltdocsShell, BoltdocsTab, BoltdocsTypes, BoltdocsVersion, BreadcrumbStructuredDataItem, Breadcrumbs, BuildUrlOptions, CodeBlockFeedbackPayload, CollectionListLoaderData, CollectionPost, CollectionPostLoaderData, CollectionsContext, CollectionsData, ComponentRoute, CopyMarkdown, CreateRoutesResult, CurrentPostProvider, DocsLayoutComponent as DocsLayout, ErrorBoundary, LayoutProps, LazyRouteResult, LoaderFunction, LoaderFunctionArgs, LocationContext, LocationProvider, LocationProviderProps, LocationState, MatchesContext, MdxPage, Navbar, NavbarLink, NavigateContext, NavigateFunction, NotFound, OnThisPage, OnThisPageProps, Outlet, OutletContext, PageNav, ParsedUrl, PrefetchContext, PrefetchFunction, ResolveUrlOptions, RouteDataContext, RouteMatch, RouteRecord, RouteRenderer, RouteRendererProps, RouterOptions, SearchDialog, Sidebar, SidebarProps, SiteConfig, StructuredData, StructuredDataFactoryOptions, StructuredDataProps, TabsProps, Timeline, TimelineBadgeConfig, TimelineItemProps, TimelineProps, TimelineVariant, UrlContractConfig, UrlRouteHint, UrlRouteKind, UseCodeBlockFeedbackOptions, UseExpandableOptions, ViewTransitionHandle, ViewTransitionOptions, ViewTransitionRunner, ViewTransitionUpdate, ViteReactSSG, WebSiteStructuredDataOptions, addBasename, addUrlBase, buildUrl, classifyUrlPath, cn, copyToClipboard, createArticleStructuredData, createBreadcrumbStructuredData, createRoutes, createStructuredData, createWebSiteStructuredData, defaultNavigate, defineStructuredData, getConfiguredLocales, getConfiguredVersions, getStarsRepo, getTranslated, getVersionPrefixSegments, getVersionSegments, hasBasename, hasUriScheme, hasUrlBase, isConfiguredLocale, isConfiguredVersion, matchRouteBranch, matchRouteBranchWithParams, normalizeBasename, normalizeUrlBase, normalizeUrlPath, parseUrlReference, reactToText, resolvePublicAssetUrl, resolveRouteBranch, resolveUrlReference, splitUrlReference, startViewTransition, stripBasename, stripSiteProtocol, stripUrlBase, useAnalytics, useBreadcrumbs, useCodeBlock, useCodeBlockFeedback, useConfig, useCopyButton, useExpandable, useFeedback, useHeadings, useI18n, useLoaderData, useLocalizedTo, useLocation, useMatches, useMdxComponents, useMergedComponents, useNavbar, useNavigate, usePageNav, usePost, usePosts, usePrefetch, useRecentPosts, useRouteData, useRoutes, useSearch, useSearchHighlight, useSidebar, useTabs, useTheme, useTrackEvent, useTrackPageView, useUI, useVersion, useViewTransition };
2
+ import { $ as LazyRouteResult, A as matchRouteBranch, B as useRouteData, C as stripSiteProtocol, D as normalizeBasename, E as hasBasename, F as useLoaderData, G as MatchesContext, H as LocationProvider, I as useLocation, J as PrefetchContext, K as NavigateContext, L as useMatches, M as resolveRouteBranch, N as Outlet, O as stripBasename, P as OutletContext, Q as CreateRoutesResult, R as useNavigate, S as splitUrlReference, T as addBasename, U as LocationProviderProps, V as LocationContext, W as LocationState, X as RouteDataContext, Y as PrefetchFunction, Z as defaultNavigate, _ as isConfiguredVersion, _t as RedirectConfig, a as UrlRouteHint, at as RouterOptions, b as parseUrlReference, c as buildUrl, d as getConfiguredVersions, dt as BoltdocsRoutePath, et as LoaderFunction, f as getVersionPrefixSegments, ft as BoltdocsRoutePathWithFallback, g as isConfiguredLocale, h as hasUrlBase, ht as BoltdocsVersion, i as UrlContractConfig, it as RouteRendererProps, j as matchRouteBranchWithParams, k as RouteRenderer, l as classifyUrlPath, lt as BoltdocsLocale, m as hasUriScheme, mt as BoltdocsTypes, n as ParsedUrl, nt as RouteMatch, o as UrlRouteKind, p as getVersionSegments, q as NavigateFunction, r as ResolveUrlOptions, rt as RouteRecord, s as addUrlBase, st as BoltdocsConfig, t as BuildUrlOptions, tt as LoaderFunctionArgs, u as getConfiguredLocales, v as normalizeUrlBase, vt as RedirectStatus, w as stripUrlBase, x as resolveUrlReference, y as normalizeUrlPath, z as usePrefetch } from "../index-RK7W_Fxy.cjs";
3
+ import { $t as TabsProps, A as cn, At as useUI, B as NotFound, Bt as CollectionPost, C as createArticleStructuredData, Ct as usePageNav, D as defineStructuredData, Dt as useSearch, E as createWebSiteStructuredData, Et as useTabs, F as TimelineVariant, Ft as formatDate, G as Breadcrumbs, Gt as CollectionListLoaderData, H as CopyMarkdown, Ht as CollectionsData, I as usePost, It as ViteReactSSG, Jt as LayoutProps, K as OnThisPage, Kt as CollectionPostLoaderData, L as usePosts, Lt as BoltdocsShell, M as TimelineBadgeConfig, Mt as useTheme, N as TimelineItemProps, Nt as useConfig, O as getTranslated, Ot as useSidebar, P as TimelineProps, Pt as formatDeterministicDate, Qt as SiteConfig, R as useRecentPosts, Rt as MdxPage, S as WebSiteStructuredDataOptions, St as useBreadcrumbs, T as createStructuredData, Tt as useVersion, U as ErrorBoundary, Ut as CurrentPostProvider, V as SearchDialog, Vt as CollectionsContext, W as PageNav, Wt as BoltdocsTab, Xt as OnThisPageProps, Yt as NavbarLink, Zt as SidebarProps, _ as StructuredData, _t as useTrackEvent, a as useExpandable, b as BreadcrumbStructuredDataItem, bt as useLocalizedTo, c as getStarsRepo, d as ViewTransitionHandle, dt as Navbar, f as ViewTransitionOptions, ft as DocsLayoutComponent, g as useViewTransition, gt as useAnalytics, h as startViewTransition, ht as useHeadings, i as UseExpandableOptions, j as Timeline, jt as useMdxComponents, k as resolvePublicAssetUrl, kt as useNavbar, l as copyToClipboard, m as ViewTransitionUpdate, mt as useMergedComponents, n as UseCodeBlockFeedbackOptions, o as useCopyButton, p as ViewTransitionRunner, pt as useFeedback, q as Sidebar, qt as ComponentRoute, r as useCodeBlockFeedback, s as useCodeBlock, t as CodeBlockFeedbackPayload, u as reactToText, v as StructuredDataProps, vt as useTrackPageView, w as createBreadcrumbStructuredData, wt as useI18n, x as StructuredDataFactoryOptions, xt as useRoutes, y as ArticleStructuredDataOptions, yt as useSearchHighlight, z as Banner, zt as createRoutes } from "../index-B_o5y34l.cjs";
4
+ export { ArticleStructuredDataOptions, Banner, BoltdocsConfig, BoltdocsLocale, BoltdocsRoutePath, BoltdocsRoutePathWithFallback, BoltdocsShell, BoltdocsTab, BoltdocsTypes, BoltdocsVersion, BreadcrumbStructuredDataItem, Breadcrumbs, BuildUrlOptions, CodeBlockFeedbackPayload, CollectionListLoaderData, CollectionPost, CollectionPostLoaderData, CollectionsContext, CollectionsData, ComponentRoute, CopyMarkdown, CreateRoutesResult, CurrentPostProvider, DocsLayoutComponent as DocsLayout, ErrorBoundary, LayoutProps, LazyRouteResult, LoaderFunction, LoaderFunctionArgs, LocationContext, LocationProvider, LocationProviderProps, LocationState, MatchesContext, MdxPage, Navbar, NavbarLink, NavigateContext, NavigateFunction, NotFound, OnThisPage, OnThisPageProps, Outlet, OutletContext, PageNav, ParsedUrl, PrefetchContext, PrefetchFunction, RedirectConfig, RedirectStatus, ResolveUrlOptions, RouteDataContext, RouteMatch, RouteRecord, RouteRenderer, RouteRendererProps, RouterOptions, SearchDialog, Sidebar, SidebarProps, SiteConfig, StructuredData, StructuredDataFactoryOptions, StructuredDataProps, TabsProps, Timeline, TimelineBadgeConfig, TimelineItemProps, TimelineProps, TimelineVariant, UrlContractConfig, UrlRouteHint, UrlRouteKind, UseCodeBlockFeedbackOptions, UseExpandableOptions, ViewTransitionHandle, ViewTransitionOptions, ViewTransitionRunner, ViewTransitionUpdate, ViteReactSSG, WebSiteStructuredDataOptions, addBasename, addUrlBase, buildUrl, classifyUrlPath, cn, copyToClipboard, createArticleStructuredData, createBreadcrumbStructuredData, createRoutes, createStructuredData, createWebSiteStructuredData, defaultNavigate, defineStructuredData, formatDate, formatDeterministicDate, getConfiguredLocales, getConfiguredVersions, getStarsRepo, getTranslated, getVersionPrefixSegments, getVersionSegments, hasBasename, hasUriScheme, hasUrlBase, isConfiguredLocale, isConfiguredVersion, matchRouteBranch, matchRouteBranchWithParams, normalizeBasename, normalizeUrlBase, normalizeUrlPath, parseUrlReference, reactToText, resolvePublicAssetUrl, resolveRouteBranch, resolveUrlReference, splitUrlReference, startViewTransition, stripBasename, stripSiteProtocol, stripUrlBase, useAnalytics, useBreadcrumbs, useCodeBlock, useCodeBlockFeedback, useConfig, useCopyButton, useExpandable, useFeedback, useHeadings, useI18n, useLoaderData, useLocalizedTo, useLocation, useMatches, useMdxComponents, useMergedComponents, useNavbar, useNavigate, usePageNav, usePost, usePosts, usePrefetch, useRecentPosts, useRouteData, useRoutes, useSearch, useSearchHighlight, useSidebar, useTabs, useTheme, useTrackEvent, useTrackPageView, useUI, useVersion, useViewTransition };
@@ -1,4 +1,4 @@
1
1
 
2
- import { $ as LazyRouteResult, A as matchRouteBranch, B as useRouteData, C as stripSiteProtocol, D as normalizeBasename, E as hasBasename, F as useLoaderData, G as MatchesContext, H as LocationProvider, I as useLocation, J as PrefetchContext, K as NavigateContext, L as useMatches, M as resolveRouteBranch, N as Outlet, O as stripBasename, P as OutletContext, Q as CreateRoutesResult, R as useNavigate, S as splitUrlReference, T as addBasename, U as LocationProviderProps, V as LocationContext, W as LocationState, X as RouteDataContext, Y as PrefetchFunction, Z as defaultNavigate, _ as isConfiguredVersion, a as UrlRouteHint, at as RouterOptions, b as parseUrlReference, c as buildUrl, d as getConfiguredVersions, dt as BoltdocsRoutePath, et as LoaderFunction, f as getVersionPrefixSegments, ft as BoltdocsRoutePathWithFallback, g as isConfiguredLocale, h as hasUrlBase, ht as BoltdocsVersion, i as UrlContractConfig, it as RouteRendererProps, j as matchRouteBranchWithParams, k as RouteRenderer, l as classifyUrlPath, lt as BoltdocsLocale, m as hasUriScheme, mt as BoltdocsTypes, n as ParsedUrl, nt as RouteMatch, o as UrlRouteKind, p as getVersionSegments, q as NavigateFunction, r as ResolveUrlOptions, rt as RouteRecord, s as addUrlBase, st as BoltdocsConfig, t as BuildUrlOptions, tt as LoaderFunctionArgs, u as getConfiguredLocales, v as normalizeUrlBase, w as stripUrlBase, x as resolveUrlReference, y as normalizeUrlPath, z as usePrefetch } from "../index-CuNSD3E2.js";
3
- import { A as cn, At as useUI, B as NotFound, Bt as CollectionsData, C as createArticleStructuredData, Ct as usePageNav, D as defineStructuredData, Dt as useSearch, E as createWebSiteStructuredData, Et as useTabs, F as TimelineVariant, Ft as BoltdocsShell, G as Breadcrumbs, Gt as ComponentRoute, H as CopyMarkdown, Ht as BoltdocsTab, I as usePost, It as MdxPage, Jt as OnThisPageProps, K as OnThisPage, Kt as LayoutProps, L as usePosts, Lt as createRoutes, M as TimelineBadgeConfig, Mt as useTheme, N as TimelineItemProps, Nt as useConfig, O as getTranslated, Ot as useSidebar, P as TimelineProps, Pt as ViteReactSSG, R as useRecentPosts, Rt as CollectionPost, S as WebSiteStructuredDataOptions, St as useBreadcrumbs, T as createStructuredData, Tt as useVersion, U as ErrorBoundary, Ut as CollectionListLoaderData, V as SearchDialog, Vt as CurrentPostProvider, W as PageNav, Wt as CollectionPostLoaderData, Xt as SiteConfig, Yt as SidebarProps, Zt as TabsProps, _ as StructuredData, _t as useTrackEvent, a as useExpandable, b as BreadcrumbStructuredDataItem, bt as useLocalizedTo, c as getStarsRepo, d as ViewTransitionHandle, dt as Navbar, f as ViewTransitionOptions, ft as DocsLayoutComponent, g as useViewTransition, gt as useAnalytics, h as startViewTransition, ht as useHeadings, i as UseExpandableOptions, j as Timeline, jt as useMdxComponents, k as resolvePublicAssetUrl, kt as useNavbar, l as copyToClipboard, m as ViewTransitionUpdate, mt as useMergedComponents, n as UseCodeBlockFeedbackOptions, o as useCopyButton, p as ViewTransitionRunner, pt as useFeedback, q as Sidebar, qt as NavbarLink, r as useCodeBlockFeedback, s as useCodeBlock, t as CodeBlockFeedbackPayload, u as reactToText, v as StructuredDataProps, vt as useTrackPageView, w as createBreadcrumbStructuredData, wt as useI18n, x as StructuredDataFactoryOptions, xt as useRoutes, y as ArticleStructuredDataOptions, yt as useSearchHighlight, z as Banner, zt as CollectionsContext } from "../index-B1Mx0dHl.js";
4
- export { ArticleStructuredDataOptions, Banner, BoltdocsConfig, BoltdocsLocale, BoltdocsRoutePath, BoltdocsRoutePathWithFallback, BoltdocsShell, BoltdocsTab, BoltdocsTypes, BoltdocsVersion, BreadcrumbStructuredDataItem, Breadcrumbs, BuildUrlOptions, CodeBlockFeedbackPayload, CollectionListLoaderData, CollectionPost, CollectionPostLoaderData, CollectionsContext, CollectionsData, ComponentRoute, CopyMarkdown, CreateRoutesResult, CurrentPostProvider, DocsLayoutComponent as DocsLayout, ErrorBoundary, LayoutProps, LazyRouteResult, LoaderFunction, LoaderFunctionArgs, LocationContext, LocationProvider, LocationProviderProps, LocationState, MatchesContext, MdxPage, Navbar, NavbarLink, NavigateContext, NavigateFunction, NotFound, OnThisPage, OnThisPageProps, Outlet, OutletContext, PageNav, ParsedUrl, PrefetchContext, PrefetchFunction, ResolveUrlOptions, RouteDataContext, RouteMatch, RouteRecord, RouteRenderer, RouteRendererProps, RouterOptions, SearchDialog, Sidebar, SidebarProps, SiteConfig, StructuredData, StructuredDataFactoryOptions, StructuredDataProps, TabsProps, Timeline, TimelineBadgeConfig, TimelineItemProps, TimelineProps, TimelineVariant, UrlContractConfig, UrlRouteHint, UrlRouteKind, UseCodeBlockFeedbackOptions, UseExpandableOptions, ViewTransitionHandle, ViewTransitionOptions, ViewTransitionRunner, ViewTransitionUpdate, ViteReactSSG, WebSiteStructuredDataOptions, addBasename, addUrlBase, buildUrl, classifyUrlPath, cn, copyToClipboard, createArticleStructuredData, createBreadcrumbStructuredData, createRoutes, createStructuredData, createWebSiteStructuredData, defaultNavigate, defineStructuredData, getConfiguredLocales, getConfiguredVersions, getStarsRepo, getTranslated, getVersionPrefixSegments, getVersionSegments, hasBasename, hasUriScheme, hasUrlBase, isConfiguredLocale, isConfiguredVersion, matchRouteBranch, matchRouteBranchWithParams, normalizeBasename, normalizeUrlBase, normalizeUrlPath, parseUrlReference, reactToText, resolvePublicAssetUrl, resolveRouteBranch, resolveUrlReference, splitUrlReference, startViewTransition, stripBasename, stripSiteProtocol, stripUrlBase, useAnalytics, useBreadcrumbs, useCodeBlock, useCodeBlockFeedback, useConfig, useCopyButton, useExpandable, useFeedback, useHeadings, useI18n, useLoaderData, useLocalizedTo, useLocation, useMatches, useMdxComponents, useMergedComponents, useNavbar, useNavigate, usePageNav, usePost, usePosts, usePrefetch, useRecentPosts, useRouteData, useRoutes, useSearch, useSearchHighlight, useSidebar, useTabs, useTheme, useTrackEvent, useTrackPageView, useUI, useVersion, useViewTransition };
2
+ import { $ as LazyRouteResult, A as matchRouteBranch, B as useRouteData, C as stripSiteProtocol, D as normalizeBasename, E as hasBasename, F as useLoaderData, G as MatchesContext, H as LocationProvider, I as useLocation, J as PrefetchContext, K as NavigateContext, L as useMatches, M as resolveRouteBranch, N as Outlet, O as stripBasename, P as OutletContext, Q as CreateRoutesResult, R as useNavigate, S as splitUrlReference, T as addBasename, U as LocationProviderProps, V as LocationContext, W as LocationState, X as RouteDataContext, Y as PrefetchFunction, Z as defaultNavigate, _ as isConfiguredVersion, _t as RedirectConfig, a as UrlRouteHint, at as RouterOptions, b as parseUrlReference, c as buildUrl, d as getConfiguredVersions, dt as BoltdocsRoutePath, et as LoaderFunction, f as getVersionPrefixSegments, ft as BoltdocsRoutePathWithFallback, g as isConfiguredLocale, h as hasUrlBase, ht as BoltdocsVersion, i as UrlContractConfig, it as RouteRendererProps, j as matchRouteBranchWithParams, k as RouteRenderer, l as classifyUrlPath, lt as BoltdocsLocale, m as hasUriScheme, mt as BoltdocsTypes, n as ParsedUrl, nt as RouteMatch, o as UrlRouteKind, p as getVersionSegments, q as NavigateFunction, r as ResolveUrlOptions, rt as RouteRecord, s as addUrlBase, st as BoltdocsConfig, t as BuildUrlOptions, tt as LoaderFunctionArgs, u as getConfiguredLocales, v as normalizeUrlBase, vt as RedirectStatus, w as stripUrlBase, x as resolveUrlReference, y as normalizeUrlPath, z as usePrefetch } from "../index--xbYbT8N.js";
3
+ import { $t as TabsProps, A as cn, At as useUI, B as NotFound, Bt as CollectionPost, C as createArticleStructuredData, Ct as usePageNav, D as defineStructuredData, Dt as useSearch, E as createWebSiteStructuredData, Et as useTabs, F as TimelineVariant, Ft as formatDate, G as Breadcrumbs, Gt as CollectionListLoaderData, H as CopyMarkdown, Ht as CollectionsData, I as usePost, It as ViteReactSSG, Jt as LayoutProps, K as OnThisPage, Kt as CollectionPostLoaderData, L as usePosts, Lt as BoltdocsShell, M as TimelineBadgeConfig, Mt as useTheme, N as TimelineItemProps, Nt as useConfig, O as getTranslated, Ot as useSidebar, P as TimelineProps, Pt as formatDeterministicDate, Qt as SiteConfig, R as useRecentPosts, Rt as MdxPage, S as WebSiteStructuredDataOptions, St as useBreadcrumbs, T as createStructuredData, Tt as useVersion, U as ErrorBoundary, Ut as CurrentPostProvider, V as SearchDialog, Vt as CollectionsContext, W as PageNav, Wt as BoltdocsTab, Xt as OnThisPageProps, Yt as NavbarLink, Zt as SidebarProps, _ as StructuredData, _t as useTrackEvent, a as useExpandable, b as BreadcrumbStructuredDataItem, bt as useLocalizedTo, c as getStarsRepo, d as ViewTransitionHandle, dt as Navbar, f as ViewTransitionOptions, ft as DocsLayoutComponent, g as useViewTransition, gt as useAnalytics, h as startViewTransition, ht as useHeadings, i as UseExpandableOptions, j as Timeline, jt as useMdxComponents, k as resolvePublicAssetUrl, kt as useNavbar, l as copyToClipboard, m as ViewTransitionUpdate, mt as useMergedComponents, n as UseCodeBlockFeedbackOptions, o as useCopyButton, p as ViewTransitionRunner, pt as useFeedback, q as Sidebar, qt as ComponentRoute, r as useCodeBlockFeedback, s as useCodeBlock, t as CodeBlockFeedbackPayload, u as reactToText, v as StructuredDataProps, vt as useTrackPageView, w as createBreadcrumbStructuredData, wt as useI18n, x as StructuredDataFactoryOptions, xt as useRoutes, y as ArticleStructuredDataOptions, yt as useSearchHighlight, z as Banner, zt as createRoutes } from "../index-Bx0CUd7Q.js";
4
+ export { ArticleStructuredDataOptions, Banner, BoltdocsConfig, BoltdocsLocale, BoltdocsRoutePath, BoltdocsRoutePathWithFallback, BoltdocsShell, BoltdocsTab, BoltdocsTypes, BoltdocsVersion, BreadcrumbStructuredDataItem, Breadcrumbs, BuildUrlOptions, CodeBlockFeedbackPayload, CollectionListLoaderData, CollectionPost, CollectionPostLoaderData, CollectionsContext, CollectionsData, ComponentRoute, CopyMarkdown, CreateRoutesResult, CurrentPostProvider, DocsLayoutComponent as DocsLayout, ErrorBoundary, LayoutProps, LazyRouteResult, LoaderFunction, LoaderFunctionArgs, LocationContext, LocationProvider, LocationProviderProps, LocationState, MatchesContext, MdxPage, Navbar, NavbarLink, NavigateContext, NavigateFunction, NotFound, OnThisPage, OnThisPageProps, Outlet, OutletContext, PageNav, ParsedUrl, PrefetchContext, PrefetchFunction, RedirectConfig, RedirectStatus, ResolveUrlOptions, RouteDataContext, RouteMatch, RouteRecord, RouteRenderer, RouteRendererProps, RouterOptions, SearchDialog, Sidebar, SidebarProps, SiteConfig, StructuredData, StructuredDataFactoryOptions, StructuredDataProps, TabsProps, Timeline, TimelineBadgeConfig, TimelineItemProps, TimelineProps, TimelineVariant, UrlContractConfig, UrlRouteHint, UrlRouteKind, UseCodeBlockFeedbackOptions, UseExpandableOptions, ViewTransitionHandle, ViewTransitionOptions, ViewTransitionRunner, ViewTransitionUpdate, ViteReactSSG, WebSiteStructuredDataOptions, addBasename, addUrlBase, buildUrl, classifyUrlPath, cn, copyToClipboard, createArticleStructuredData, createBreadcrumbStructuredData, createRoutes, createStructuredData, createWebSiteStructuredData, defaultNavigate, defineStructuredData, formatDate, formatDeterministicDate, getConfiguredLocales, getConfiguredVersions, getStarsRepo, getTranslated, getVersionPrefixSegments, getVersionSegments, hasBasename, hasUriScheme, hasUrlBase, isConfiguredLocale, isConfiguredVersion, matchRouteBranch, matchRouteBranchWithParams, normalizeBasename, normalizeUrlBase, normalizeUrlPath, parseUrlReference, reactToText, resolvePublicAssetUrl, resolveRouteBranch, resolveUrlReference, splitUrlReference, startViewTransition, stripBasename, stripSiteProtocol, stripUrlBase, useAnalytics, useBreadcrumbs, useCodeBlock, useCodeBlockFeedback, useConfig, useCopyButton, useExpandable, useFeedback, useHeadings, useI18n, useLoaderData, useLocalizedTo, useLocation, useMatches, useMdxComponents, useMergedComponents, useNavbar, useNavigate, usePageNav, usePost, usePosts, usePrefetch, useRecentPosts, useRouteData, useRoutes, useSearch, useSearchHighlight, useSidebar, useTabs, useTheme, useTrackEvent, useTrackPageView, useUI, useVersion, useViewTransition };