boltdocs 3.2.1 → 3.3.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 (155) hide show
  1. package/bin/boltdocs.js +20 -1
  2. package/bin/preloader.mjs +28 -0
  3. package/dist/{adapters-ByYY44Zy.mjs → adapters-BmB4TKCc.mjs} +1 -1
  4. package/dist/{adapters-DvmtpdSF.cjs → adapters-Cp1Maurn.cjs} +1 -1
  5. package/dist/audit-CLXjMzwQ.mjs +11 -0
  6. package/dist/audit-COgjnQ5n.cjs +11 -0
  7. package/dist/build-BS2hefiL.cjs +6 -0
  8. package/dist/build-C5mNh9D-.mjs +6 -0
  9. package/dist/cache-CJE9nWLE.cjs +6 -0
  10. package/dist/cache-OY4HzIXl.mjs +6 -0
  11. package/dist/callout-oI_LCbxS.d.ts +71 -0
  12. package/dist/callout-plqx9Dw-.d.cts +71 -0
  13. package/dist/client/index.cjs +1265 -569
  14. package/dist/client/index.d.cts +3 -542
  15. package/dist/client/index.d.ts +3 -542
  16. package/dist/client/index.js +1167 -521
  17. package/dist/client/mdx.cjs +1 -1
  18. package/dist/client/mdx.d.cts +24 -2
  19. package/dist/client/mdx.d.ts +24 -2
  20. package/dist/client/mdx.js +1 -1
  21. package/dist/client/primitives.cjs +14 -4
  22. package/dist/client/primitives.d.cts +281 -38
  23. package/dist/client/primitives.d.ts +281 -38
  24. package/dist/client/primitives.js +5 -5
  25. package/dist/client/router.cjs +49 -0
  26. package/dist/client/router.d.cts +3 -0
  27. package/dist/client/router.d.ts +3 -0
  28. package/dist/client/router.js +8 -0
  29. package/dist/client/theme/reset.css +40 -4
  30. package/dist/{config-BpzaPsJj.d.cts → config-BoRlz0Ca.d.mts} +157 -14
  31. package/dist/{config-xtS0ZkMm.d.mts → config-CTsX_tGM.d.cts} +157 -14
  32. package/dist/config-Ceib-AOH.cjs +7 -0
  33. package/dist/config-DGLQsy7y.mjs +7 -0
  34. package/dist/{package-BcISI5-P.cjs → config-files-BYHDOrKn.mjs} +1 -1
  35. package/dist/config-files-D9cdBMl2.cjs +6 -0
  36. package/dist/config-jJh8WYJI.cjs +6 -0
  37. package/dist/csp-C4LmN1ko.cjs +6 -0
  38. package/dist/csp-D6JEOqKh.mjs +6 -0
  39. package/dist/dev-Ch3hEe5Y.cjs +6 -0
  40. package/dist/dev-QPNxysrd.mjs +6 -0
  41. package/dist/{docs-layout-BdtZ9z6s.js → docs-layout-CbZ7LDRe.js} +504 -249
  42. package/dist/{docs-layout-CFWI15Id.cjs → docs-layout-vzfXed1Q.cjs} +516 -254
  43. package/dist/{doctor-BBtmNJE0.cjs → doctor-B1_YL0Wt.cjs} +1 -1
  44. package/dist/doctor-C7whl4ED.cjs +6 -0
  45. package/dist/doctor-DmQnml2k.mjs +6 -0
  46. package/dist/{generator-COepVWGi.cjs → generator-BlW45ST7.cjs} +5 -3
  47. package/dist/{generator-CcOBN5vI.mjs → generator-BwknNejd.mjs} +5 -3
  48. package/dist/{handler-XX7cLTqe.cjs → handler-CDEoKARD.cjs} +2 -2
  49. package/dist/{handler-DzQae4eA.mjs → handler-D7UyZlPm.mjs} +2 -2
  50. package/dist/{image-Bz87fCla.js → image-B-NDSDuY.js} +129 -11
  51. package/dist/{image-C4TlpMHn.cjs → image-Hnaa2bJd.cjs} +175 -9
  52. package/dist/index-C56bL-A-.d.cts +1344 -0
  53. package/dist/{sidebar-COTaMHR-.d.ts → index-CPUUKzxD.d.cts} +344 -327
  54. package/dist/{sidebar-CrEdJuHX.d.cts → index-Ci4kfOHF.d.ts} +344 -327
  55. package/dist/index-Cu9H6CRa.d.ts +1344 -0
  56. package/dist/link-CgdI6O2o.js +872 -0
  57. package/dist/{link-D1Gjkb-2.cjs → link-vZjmD-es.cjs} +406 -223
  58. package/dist/{mdx-BuO6a1f7.js → mdx-BRT71V5Q.js} +211 -168
  59. package/dist/{mdx-CD-tSjRG.cjs → mdx-D0Absdq5.cjs} +225 -169
  60. package/dist/native-BNCY7PRF.cjs +6 -0
  61. package/dist/native-Di9Fnfrv.mjs +6 -0
  62. package/dist/native-Kre2T5eS.cjs +6 -0
  63. package/dist/node/cache.cjs +1 -1
  64. package/dist/node/cache.d.cts +19 -3
  65. package/dist/node/cache.d.mts +19 -3
  66. package/dist/node/cache.mjs +1 -1
  67. package/dist/node/cli-entry.cjs +1 -9
  68. package/dist/node/cli-entry.mjs +1 -9
  69. package/dist/node/index.cjs +1 -1
  70. package/dist/node/index.d.cts +245 -17
  71. package/dist/node/index.d.mts +246 -18
  72. package/dist/node/index.mjs +1 -1
  73. package/dist/node/mdx/shiki-adapter.cjs +1 -1
  74. package/dist/node/mdx/shiki-adapter.d.cts +24 -3
  75. package/dist/node/mdx/shiki-adapter.d.mts +24 -2
  76. package/dist/node/mdx/shiki-adapter.mjs +1 -1
  77. package/dist/node-Du5UL5wo.mjs +23 -0
  78. package/dist/node-DunuGqyp.cjs +23 -0
  79. package/dist/{package-CCYEAYeA.mjs → package-DA848keM.mjs} +1 -1
  80. package/dist/package-wplzySjz.cjs +6 -0
  81. package/dist/pages-external-BBw8ObVK.mjs +6 -0
  82. package/dist/pages-external-DPiPFxxP.cjs +6 -0
  83. package/dist/parser-BqTOsEUa.cjs +6 -0
  84. package/dist/parser-CGMY2lJ7.mjs +6 -0
  85. package/dist/plugin-BcTzvHAJ.mjs +69 -0
  86. package/dist/plugin-TulVMt1z.cjs +69 -0
  87. package/dist/plugin-context-C-l90hFt.cjs +15 -0
  88. package/dist/plugin-context-wqHNSZum.mjs +15 -0
  89. package/dist/plugin-lifecycle-B1BzSHdn.cjs +6 -0
  90. package/dist/resolve-B7vWOd8R.cjs +6 -0
  91. package/dist/resolve-C2kKnk_5.mjs +6 -0
  92. package/dist/resolve-It1Iug83.cjs +6 -0
  93. package/dist/resolve-YdTrt_FG.mjs +6 -0
  94. package/dist/router-C3kygdRK.cjs +1285 -0
  95. package/dist/router-CZBxMRAH.js +987 -0
  96. package/dist/routes-BL4y79tb.mjs +6 -0
  97. package/dist/routes-C2nPecwu.cjs +6 -0
  98. package/dist/routes-U9L8psZ9.cjs +6 -0
  99. package/dist/{search-dialog-DHqwjJuG.cjs → search-dialog-BCOHQGSt.cjs} +1 -1
  100. package/dist/search-dialog-Bp_P1MPP.js +481 -0
  101. package/dist/{search-dialog-DFnlx8LO.js → search-dialog-BqkzDTq2.js} +107 -57
  102. package/dist/{search-dialog-BRFno7HD.cjs → search-dialog-CIeIUhAn.cjs} +218 -43
  103. package/dist/{search-dialog-D6TvjcuV.js → search-dialog-DtmxmfEu.js} +1 -1
  104. package/dist/{search-dialog-B1NERUNx.cjs → search-dialog-x_qHU8ty.cjs} +107 -58
  105. package/dist/server/index.cjs +1 -1
  106. package/dist/server/index.d.mts +1 -1
  107. package/dist/server/index.mjs +1 -1
  108. package/dist/update-check-BKqmYfwT.cjs +11 -0
  109. package/dist/update-check-QnrVR3q1.mjs +11 -0
  110. package/dist/utils-8lzafE49.mjs +7 -0
  111. package/dist/utils-ej6_SjIZ.cjs +7 -0
  112. package/dist/virtual-modules-Ca5tHk1X.cjs +30 -0
  113. package/dist/virtual-modules-Dlgt1fP0.mjs +30 -0
  114. package/package.json +18 -16
  115. package/src/shared/mdx-path.ts +12 -0
  116. package/src/shared/structured-data.ts +145 -0
  117. package/src/shared/types.ts +220 -16
  118. package/dist/banner-BMop1KLF.d.ts +0 -100
  119. package/dist/banner-CVD0GugR.d.cts +0 -100
  120. package/dist/cache-CO4Dy2uQ.cjs +0 -6
  121. package/dist/cache-Dk53iOo6.mjs +0 -6
  122. package/dist/config-CCXp3aXO.mjs +0 -7
  123. package/dist/config-CMd4XoFq.cjs +0 -6
  124. package/dist/config-DlGoEM9D.cjs +0 -7
  125. package/dist/csp-CRp_3U7a.cjs +0 -6
  126. package/dist/csp-oTC2ygvF.mjs +0 -6
  127. package/dist/doctor-Bv16QSrI.cjs +0 -7
  128. package/dist/doctor-DOAbSaiL.mjs +0 -7
  129. package/dist/headers-Ddwek8K7.mjs +0 -6
  130. package/dist/headers-dg4SDrjY.cjs +0 -6
  131. package/dist/link-2PzgTnaP.js +0 -673
  132. package/dist/meta-loader-C4Hu9RN9.mjs +0 -6
  133. package/dist/meta-loader-Dq1zcFnh.cjs +0 -6
  134. package/dist/node-BXtqM1uH.mjs +0 -6
  135. package/dist/node-BlVk4EVg.cjs +0 -104
  136. package/dist/node-DOf4zhWc.mjs +0 -104
  137. package/dist/node-aD1eisrR.cjs +0 -6
  138. package/dist/pages-external-BYa4JSda.mjs +0 -6
  139. package/dist/pages-external-XkYIs-d5.cjs +0 -6
  140. package/dist/parser-DCiEWkSk.cjs +0 -8
  141. package/dist/parser-qk9FIHJ7.mjs +0 -8
  142. package/dist/plugin-C95kvu6h.mjs +0 -73
  143. package/dist/plugin-DM3u2bVj.cjs +0 -73
  144. package/dist/routes-BW6zsk7Z.mjs +0 -6
  145. package/dist/routes-BgoIB5wb.cjs +0 -6
  146. package/dist/routes-CORVxc02.cjs +0 -6
  147. package/dist/search-dialog-BmxHiKwt.js +0 -312
  148. package/dist/shiki-adapter-CoQ6jyJ4.cjs +0 -6
  149. package/dist/shiki-adapter-D-aKw7PP.mjs +0 -6
  150. package/dist/utils-Crm9oPcV.mjs +0 -7
  151. package/dist/utils-D6Xtj0FZ.cjs +0 -7
  152. /package/dist/{errors-0zGHRLue.mjs → errors-N-b6Sn2G.mjs} +0 -0
  153. /package/dist/{index-1KsTDq4o.d.mts → index-lFoyzCXy.d.mts} +0 -0
  154. /package/dist/{types-generator-BXhv7Ill.cjs → types-generator-DDSA93P3.cjs} +0 -0
  155. /package/dist/{types-generator-bDPvUztF.mjs → types-generator-DG1GX1EZ.mjs} +0 -0
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Boltdocs - https://boltdocs.vercel.app
3
+ * Copyright (c) 2026 Jesus Alcala
4
+ * Licensed under the MIT License.
5
+ */
6
+ import{t as e}from"./chunk-BFSpntXv.mjs";import{o as t,t as n}from"./utils-8lzafE49.mjs";import{n as r}from"./pages-external-BBw8ObVK.mjs";import{FileCache as i}from"./node/cache.mjs";import{t as a}from"./cache-OY4HzIXl.mjs";import o from"node:path";import s from"node:fs";import c from"node:crypto";import{warn as l}from"@bdocs/dui";import u from"node:fs/promises";import{fdir as d}from"fdir";function f(e){return o.resolve(e)}function p(e,t){return c.createHash(`sha1`).update(`${f(e)}:${t}`).digest(`hex`).slice(0,16)}function m(e,n,r){let s=p(e,r),c=t();return{fingerprint:r,docCache:new i({name:`routes-${s}`,root:n}),parserCache:new a(n,s),cachedFileList:null,localizedPathCache:new Map,cachedNativeDocs:null,frontmatterHashes:new Map,directoryMeta:null,cachedDirectoryMetaFiles:null,directoryMetaEntries:new Map,discoverySnapshot:null,discoverySnapshotLoaded:!1,discoverySnapshotPath:o.resolve(n,c.dir,`route-discovery-${s}.json`)}}function h(e,t=o.dirname(o.resolve(e))){let n=f(e),r=o.resolve(t),i=m(n,r,`legacy`);return{docsDir:n,cacheRoot:r,docCache:i.docCache,parserCache:i.parserCache,cachedFileList:i.cachedFileList,localizedPathCache:i.localizedPathCache,cachedNativeDocs:i.cachedNativeDocs,frontmatterHashes:i.frontmatterHashes,directoryMeta:i.directoryMeta,cachedDirectoryMetaFiles:i.cachedDirectoryMetaFiles,variants:new Map([[`legacy`,i]]),activeVariant:i,activeGenerations:new Map,generationEpoch:0,disposed:!1}}const g=new Map;function _(e,t,n=!1){if(e.disposed)throw Error(`[boltdocs] Route cache context has been disposed.`);let r=e.variants.get(t);if(!r&&(r=m(e.docsDir,e.cacheRoot,t),e.variants.set(t,r),e.variants.size>8)){for(let[n,r]of e.variants)if(!(n===t||r===e.activeVariant)&&!e.activeGenerations.has(n)){e.variants.delete(n);break}}return n&&(e.activeVariant=r,e.docCache=r.docCache,e.parserCache=r.parserCache,e.cachedFileList=r.cachedFileList,e.localizedPathCache=r.localizedPathCache,e.cachedNativeDocs=r.cachedNativeDocs,e.frontmatterHashes=r.frontmatterHashes,e.directoryMeta=r.directoryMeta,e.cachedDirectoryMetaFiles=r.cachedDirectoryMetaFiles),r}function v(e,t){e.activeVariant===t&&(e.cachedFileList=t.cachedFileList,e.cachedNativeDocs=t.cachedNativeDocs,e.frontmatterHashes=t.frontmatterHashes,e.directoryMeta=t.directoryMeta,e.cachedDirectoryMetaFiles=t.cachedDirectoryMetaFiles)}function y(e,t){return c.createHash(`sha1`).update(JSON.stringify({basePath:t||e?.base||`/docs`,i18n:e?.i18n,versions:e?.versions,drafts:e?.drafts,featureFlags:e?.featureFlags,sidebarGroups:e?.theme?.sidebarGroups})).digest(`hex`)}function b(e,t){let n=f(e),r=g.get(n),i=t??r;(!i||r===i)&&g.delete(n),i&&(i.disposed=!0,i.generationEpoch++,i.activeGenerations.clear(),i.variants.clear(),i.activeVariant=null,i.cachedFileList=null,i.localizedPathCache.clear(),i.cachedNativeDocs=null,i.frontmatterHashes.clear(),i.directoryMeta=null,i.cachedDirectoryMetaFiles=null)}function x(e){let t=f(e),n=g.get(t);return n||(n=h(t),g.set(t,n)),n}const S=h(o.resolve(process.cwd(),`docs`)),C=S.docCache;function w(e){try{s.rmSync(e.discoverySnapshotPath,{force:!0})}catch{}}function T(e){let t=typeof e==`string`?x(e):e??S;for(let e of t.variants.values())e.cachedFileList=null,e.localizedPathCache.clear(),e.cachedNativeDocs=null,e.frontmatterHashes.clear(),e.directoryMeta=null,e.cachedDirectoryMetaFiles=null,e.discoverySnapshot=null,e.discoverySnapshotLoaded=!1,w(e),e.docCache.invalidateAll(),e.parserCache.clear();t.cachedFileList=null,t.localizedPathCache.clear(),t.cachedNativeDocs=null,t.frontmatterHashes.clear(),t.directoryMeta=null,t.cachedDirectoryMetaFiles=null,t.generationEpoch++}function E(e,t){let n=typeof t==`string`?x(t):t??S,r=o.resolve(e);for(let e of n.variants.values()){for(let t of e.directoryMetaEntries.keys())o.resolve(t)===r&&e.directoryMetaEntries.delete(t);e.directoryMeta=null,e.cachedDirectoryMetaFiles=null,e.discoverySnapshot=null,e.discoverySnapshotLoaded=!1,w(e)}n.directoryMeta=null,n.cachedDirectoryMetaFiles=null,n.generationEpoch++}function D(e,t){let n=typeof t==`string`?x(t):t??S;for(let t of n.variants.values())t.docCache.invalidate(e),t.parserCache.invalidate(e),t.cachedNativeDocs?.[e.replace(/\\/g,`/`)]&&delete t.cachedNativeDocs[e.replace(/\\/g,`/`)],t.frontmatterHashes.delete(e);n.cachedNativeDocs=n.activeVariant?.cachedNativeDocs??null,n.frontmatterHashes.delete(e),n.generationEpoch++}function O(e){return e.sort((e,t)=>{let n=e.group?e.groupPosition??999:e.sidebarPosition??999,r=t.group?t.groupPosition??999:t.sidebarPosition??999;return n===r?!e.group&&t.group?-1:e.group&&!t.group?1:e.group&&t.group&&e.group!==t.group?(e.groupTitle||e.group).localeCompare(t.groupTitle||t.group):k(e,t):n-r})}function k(e,t){if(e.sidebarPosition!==void 0&&t.sidebarPosition!==void 0){let n=e.sidebarPosition-t.sidebarPosition;if(n!==0)return n}else if(e.sidebarPosition!==void 0)return-1;else if(t.sidebarPosition!==void 0)return 1;let n=e.title.localeCompare(t.title);return n===0?e.path.localeCompare(t.path):n}var A=e({generateRoutes:()=>B,getExternalRoutePaths:()=>r,invalidateDirectoryMetaFile:()=>L,invalidateFile:()=>R,invalidateRouteCache:()=>z});const j=Symbol(`route-generation-invalidated`);async function M(e,t,n){let r=[...t].sort((e,t)=>{if(o.dirname(e)===o.dirname(t)){let n=o.basename(e),r=o.basename(t);if(n===`_meta.json`&&r===`meta.json`)return-1;if(n===`meta.json`&&r===`_meta.json`)return 1}return e.localeCompare(t)}),i=new Set(r),a=n.directoryMetaEntries;for(let e of a.keys())i.has(e)||a.delete(e);await Promise.all(r.map(async e=>{let t;try{t=await u.stat(e)}catch(t){a.delete(e),l(`Failed to stat meta.json: ${t instanceof Error?t.message:String(t)}`);return}let n=a.get(e);if(!(n&&n.mtimeMs===t.mtimeMs&&n.size===t.size))try{let n=await u.readFile(e,`utf8`);a.set(e,{mtimeMs:t.mtimeMs,size:t.size,content:JSON.parse(n)})}catch(t){a.delete(e),l(`Failed to read meta.json: ${t instanceof Error?t.message:String(t)}`)}}));let s={};for(let t of r){let n=a.get(t);if(!n)continue;let r=o.relative(e,o.dirname(t)).replace(/\\/g,`/`);s[r||`.`]=n.content}return s}async function N(e,n){if(!n.discoverySnapshotPath||t().noCache)return null;if(n.discoverySnapshotLoaded)return n.discoverySnapshot;n.discoverySnapshotLoaded=!0;try{let t=await u.readFile(n.discoverySnapshotPath,`utf8`),r=JSON.parse(t),i=e=>Array.isArray(e)&&e.every(e=>typeof e==`string`),a=r.files,s=r.directoryMetaFiles,c=r.directories&&typeof r.directories==`object`?Object.entries(r.directories):[],l=o.resolve(e),d=await u.realpath(l),f=e=>{let t=o.resolve(e);return t===l||t.startsWith(`${l}${o.sep}`)},p=e=>/\.(?:md|mdx)$/i.test(e),m=e=>{let t=o.basename(e);return t===`meta.json`||t===`_meta.json`};if(r.version!==1||!i(a)||!i(s)||!r.directories||typeof r.directories!=`object`||Array.isArray(r.directories)||a.some(e=>!f(e)||!p(e))||s.some(e=>!f(e)||!m(e))||c.some(([e,t])=>!f(e)||typeof t!=`number`||!Number.isFinite(t)))return null;let h=e=>{let t=o.resolve(e);return t===d||t.startsWith(`${d}${o.sep}`)},g=await Promise.all([...a,...s].map(async e=>{try{return(await u.lstat(e)).isFile()?h(await u.realpath(e)):!1}catch{return!1}})),_=await Promise.all(c.map(async([e,t])=>{try{let n=await u.stat(e);return n.isDirectory()&&n.mtimeMs===t&&h(await u.realpath(e))}catch{return!1}}));if(g.every(Boolean)&&_.every(Boolean)){let e={version:1,files:a,directoryMetaFiles:s,directories:Object.fromEntries(c)};return n.discoverySnapshot=e,e}}catch{}return null}async function P(e,n){if(t().noCache){e.discoverySnapshot=null,e.discoverySnapshotLoaded=!1;return}e.discoverySnapshot=n,e.discoverySnapshotLoaded=!0;try{await u.mkdir(o.dirname(e.discoverySnapshotPath),{recursive:!0}),await u.writeFile(e.discoverySnapshotPath,JSON.stringify(n))}catch{}}async function F(e,t,n){if(!n){let n=await N(e,t);if(n)return n}let r=await new d({excludeSymlinks:!0}).withFullPaths().filter(t=>{let n=o.basename(t),r=n===`meta.json`||n===`_meta.json`;return!(t.endsWith(`.md`)||t.endsWith(`.mdx`))&&!r?!1:!o.relative(e,t).replace(/\\/g,`/`).split(`/`).some(e=>e.startsWith(`_`)&&e!==`_index.md`&&e!==`_index.mdx`&&e!==`_meta.json`)}).crawl(e).withPromise(),i=r.filter(e=>{let t=o.basename(e);return t===`meta.json`||t===`_meta.json`}).sort((e,t)=>e.localeCompare(t)),a=r.filter(e=>e.endsWith(`.md`)||e.endsWith(`.mdx`)),s=[/index\./i,/intro/i,/getting-started/i,/readme/i],c=a.map(e=>{let t=s.findIndex(t=>t.test(o.basename(e)));return{file:e,score:t===-1?2**53-1:t}});c.sort((e,t)=>e.score-t.score||e.file.localeCompare(t.file));let l=c.map(({file:e})=>e),f=[...l,...i],p=new Set([o.resolve(e)]);for(let t of f){let n=o.dirname(t);for(;n.startsWith(o.resolve(e))&&(p.add(n),n!==o.resolve(e));)n=o.dirname(n)}let m=await Promise.all([...p].sort().map(async e=>{try{return[e,(await u.stat(e)).mtimeMs]}catch{return null}})),h={version:1,files:l,directoryMetaFiles:i,directories:Object.fromEntries(m.filter(e=>e!==null))};return await P(t,h),h}async function I(e,t,n){let r=Array(e.length),i=0;async function a(){for(;i<e.length;){let t=i++;r[t]=await n(e[t])}}return await Promise.all(Array.from({length:Math.min(t,e.length)},()=>a())),r}function L(e,t){E(e,t)}function R(e,t){let n=typeof t==`string`?x(t):t;if(n){let t=e.replace(/\\/g,`/`);(o.basename(t)===`meta.json`||o.basename(t)===`_meta.json`)&&E(e,n),n.cachedNativeDocs?.[t]&&delete n.cachedNativeDocs[t],D(e,n);return}D(e)}function z(e){if(e){T(e);return}T()}async function B(e,r,i,a=!1,s,c){let l=s??x(e);if(l.disposed)throw Error(`[boltdocs] Route cache context has been disposed.`);let u=y(r,i);if(c&&c.fingerprint!==u)throw Error(`[boltdocs] Route cache variant does not match the requested route configuration fingerprint.`);if(c&&l.variants.get(u)!==c)throw Error(`[boltdocs] Route cache variant does not belong to the requested route cache context.`);let d=l.activeGenerations.get(u);if(d)return d;let f=c??_(l,u),p=l.generationEpoch,m=(async()=>{let s=i||r?.base||`/docs`;await f.docCache.load();let c,u,d=await F(e,f,a||t().noCache);c=d.files.filter(t=>r?.experimental?.fileRouting?!o.relative(e,t).replace(/\\\\/g,`/`).split(`/`).includes(`pages-external`):!0),u=d.directoryMetaFiles,f.cachedFileList=c,f.cachedDirectoryMetaFiles=u,f.directoryMeta=await M(e,u,f),v(l,f),f.docCache.pruneStale(new Set(c));let m=process.env.NODE_ENV===`test`||process.env.VITEST===`true`,h,g=!0;for(let e of c)if(!f.docCache.get(e)){g=!1;break}if(g)h=c.map(e=>{let t=f.docCache.get(e);if(!t)throw Error(`[boltdocs] Route cache entry disappeared for ${e}`);return t});else{if(!m&&!f.cachedNativeDocs)try{let{runParser:t}=await import(`@bdocs/parser`);f.cachedNativeDocs=await t(e,!0)}catch{}if(!m&&f.cachedNativeDocs!==null&&f.cachedNativeDocs){let{parseDocFileWithNative:t}=await import(`./native-Di9Fnfrv.mjs`).then(e=>e.t),n=c.filter(e=>!f.cachedNativeDocs?.[e.replace(/\\/g,`/`)]);if(n.length>0)try{let{runParserFiles:t}=await import(`@bdocs/parser`),r=await t(e,n,!0);f.cachedNativeDocs={...f.cachedNativeDocs,...r}}catch{}let i=c.some(e=>!f.cachedNativeDocs?.[e.replace(/\\/g,`/`)])?(await import(`./parser-CGMY2lJ7.mjs`)).parseDocFile:void 0;h=await I(c,32,async n=>{let a=f.docCache.get(n);if(a)return a;let o=n.replace(/\\/g,`/`),c=f.cachedNativeDocs[o];if(c){let i=await t(n,c,e,s,r,f.parserCache);return f.docCache.set(n,i),i}else{if(!i)throw Error(`[boltdocs] Native parser did not return a document for ${n}`);let t=await i(n,e,s,r,f.parserCache);return f.docCache.set(n,t),t}})}else{let{parseDocFile:t}=await import(`./parser-CGMY2lJ7.mjs`);h=await I(c,32,async n=>{let i=f.docCache.get(n);if(i)return i;let a=await t(n,e,s,r,f.parserCache);return f.docCache.set(n,a),a})}}if(l.generationEpoch!==p)throw j;f.docCache.save();let _=[],y=new Map,b=process.env.NODE_ENV||`development`,x=r?.drafts?.visible||process.env.BOLTDOCS_DRAFTS===`true`||(r?.drafts?.environments?.includes(b)??!1);for(let e of h)if(!(e.route.draft&&!x)){if(e.route.featureFlags&&r?.featureFlags){if(!e.route.featureFlags.every(e=>{let t=r.featureFlags?.[e];return t===!0||t===b}))continue}else if(e.route.featureFlags&&!r?.featureFlags)continue;if(e.inferredCollection){let t=e.inferredCollection;y.has(t)||y.set(t,[]),y.get(t).push(e)}else _.push(e)}let S=new Map,C=[],w=r?.i18n?.defaultLocale||``;for(let e of _)if(e.isGroupIndex&&e.relativeDir&&C.push(e),e.relativeDir){let t=`${e.route.locale||w}:${e.relativeDir}`,r=S.get(t);r?r.position===void 0&&e.inferredGroupPosition!==void 0&&(r.position=e.inferredGroupPosition):(r={title:n(e.relativeDir),position:e.inferredGroupPosition},S.set(t,r))}for(let e of C){let t=`${e.route.locale||w}:${e.relativeDir}`,n=S.get(t);e.groupMeta&&(n.title=e.groupMeta.title,e.groupMeta.position!==void 0&&(n.position=e.groupMeta.position),e.groupMeta.icon&&(n.icon=e.groupMeta.icon))}if(r?.theme?.sidebarGroups){let e=r.i18n?Object.keys(r.i18n.locales):[w];for(let[t,i]of Object.entries(r.theme.sidebarGroups))for(let r of e){let e=`${r}:${t}`,a=S.get(e),o;typeof i.title==`string`?o=i.title:i.title&&(o=i.title[r]||i.title[w]),a?(o&&(a.title=o),i.icon&&(a.icon=i.icon)):S.set(e,{title:o||n(t),icon:i.icon})}}let T=Array(_.length);for(let e=0;e<_.length;e++){let t=_[e],r=t.relativeDir,i=t.route.locale||w,a=r?`${i}:${r}`:void 0,o=a?S.get(a):void 0,s;o&&(s=typeof o.title==`string`?o.title:o.title[i]||o.title[w]),T[e]={...t.route,group:r,groupTitle:s||(r?n(r):void 0),groupPosition:o?.position,groupIcon:o?.icon}}let E=[];for(let[,e]of y)for(let t of e)E.push({...t.route,collection:t.inferredCollection});E.sort((e,t)=>{let n=e=>{if(!e)return-1/0;let t=new Date(e).getTime();return Number.isFinite(t)?t:-1/0},r=n(e.date),i=n(t.date)-r;return i===0?e.path.localeCompare(t.path):i});let D=T;if(r?.i18n){let e=V(T,r,s,f.localizedPathCache);D=[...T,...e]}let k=[...O(D),...E];if(l.generationEpoch!==p)throw j;return k})();l.activeGenerations.set(u,m);try{return await m}catch(t){if(t!==j)throw t;if(l.disposed)throw Error(`[boltdocs] Route cache context was disposed during generation.`);f.docCache.invalidateAll(),f.parserCache.clear(),l.activeGenerations.get(u)===m&&l.activeGenerations.delete(u);let n=0;for(;n<10;)try{return await B(e,r,i,a,l)}catch(e){if(e!==j)throw e;if(l.disposed)throw Error(`[boltdocs] Route cache context was disposed during generation.`);n++}throw Error(`[boltdocs] Route generation was repeatedly invalidated by concurrent file changes.`)}finally{l.activeGenerations.get(u)===m&&l.activeGenerations.delete(u)}}function V(e,t,n,r){let i=t.i18n.defaultLocale,a=Object.keys(t.i18n.locales),o=[],s=new Map,c=[];for(let t of e){let e=t.locale||i;s.has(e)||s.set(e,new Set),s.get(e).add(t.path),e===i&&c.push(t)}for(let e of a){if(e===i)continue;let a=s.get(e)||new Set;for(let s of c){let c=H(s.path,i,e,n,t,r);c!==s.path&&(a.has(c)||o.push({...s,path:c,locale:e}))}}return o}function H(e,t,n,r,i,a){let o=`${e}:${n}`,s=a.get(o);if(s)return s;let c=r.startsWith(`/`)?r:`/`+r,l=c;if(i?.versions){let t=i.versions.prefix||``;for(let n of i.versions.versions){let r=`${c}/${t+n.path}`;if(e.startsWith(r)){l=r;break}let i=`${c}/${n.path}`;if(e.startsWith(i)){l=i;break}}}let u=e.substring(l.length),d=`/${t}`;if(u.startsWith(d+`/`))u=`/`+n+`/`+u.substring(d.length+1);else if(u===d)u=`/`+n;else if(u===`/`||u===``)u=`/`+n;else{let e=u.startsWith(`/`)?``:`/`;u=`/`+n+e+u}let f=l+u;return a.size>2e3&&a.clear(),a.set(o,f),f}export{b as a,_ as c,A as i,y as l,R as n,C as o,z as r,x as s,B as t,E as u};
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Boltdocs - https://boltdocs.vercel.app
3
+ * Copyright (c) 2026 Jesus Alcala
4
+ * Licensed under the MIT License.
5
+ */
6
+ const e=require(`./pages-external-DPiPFxxP.cjs`),t=require(`./routes-U9L8psZ9.cjs`);exports.generateRoutes=t.t,exports.getExternalRoutePaths=e.n,exports.invalidateDirectoryMetaFile=t.n,exports.invalidateFile=t.r,exports.invalidateRouteCache=t.i;
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Boltdocs - https://boltdocs.vercel.app
3
+ * Copyright (c) 2026 Jesus Alcala
4
+ * Licensed under the MIT License.
5
+ */
6
+ const e=require(`./chunk-D1Md3oWO.cjs`),t=require(`./utils-ej6_SjIZ.cjs`),n=require(`./node/cache.cjs`),r=require(`./cache-CJE9nWLE.cjs`);let i=require(`node:path`);i=e.r(i);let a=require(`node:fs`);a=e.r(a);let o=require(`node:crypto`);o=e.r(o);let s=require(`@bdocs/dui`),c=require(`node:fs/promises`);c=e.r(c);let l=require(`fdir`);function u(e){return i.default.resolve(e)}function d(e,t){return o.default.createHash(`sha1`).update(`${u(e)}:${t}`).digest(`hex`).slice(0,16)}function f(e,a,o){let s=d(e,o),c=t.o();return{fingerprint:o,docCache:new n.FileCache({name:`routes-${s}`,root:a}),parserCache:new r.t(a,s),cachedFileList:null,localizedPathCache:new Map,cachedNativeDocs:null,frontmatterHashes:new Map,directoryMeta:null,cachedDirectoryMetaFiles:null,directoryMetaEntries:new Map,discoverySnapshot:null,discoverySnapshotLoaded:!1,discoverySnapshotPath:i.default.resolve(a,c.dir,`route-discovery-${s}.json`)}}function p(e,t=i.default.dirname(i.default.resolve(e))){let n=u(e),r=i.default.resolve(t),a=f(n,r,`legacy`);return{docsDir:n,cacheRoot:r,docCache:a.docCache,parserCache:a.parserCache,cachedFileList:a.cachedFileList,localizedPathCache:a.localizedPathCache,cachedNativeDocs:a.cachedNativeDocs,frontmatterHashes:a.frontmatterHashes,directoryMeta:a.directoryMeta,cachedDirectoryMetaFiles:a.cachedDirectoryMetaFiles,variants:new Map([[`legacy`,a]]),activeVariant:a,activeGenerations:new Map,generationEpoch:0,disposed:!1}}const m=new Map;function h(e,t,n=!1){if(e.disposed)throw Error(`[boltdocs] Route cache context has been disposed.`);let r=e.variants.get(t);if(!r&&(r=f(e.docsDir,e.cacheRoot,t),e.variants.set(t,r),e.variants.size>8)){for(let[n,r]of e.variants)if(!(n===t||r===e.activeVariant)&&!e.activeGenerations.has(n)){e.variants.delete(n);break}}return n&&(e.activeVariant=r,e.docCache=r.docCache,e.parserCache=r.parserCache,e.cachedFileList=r.cachedFileList,e.localizedPathCache=r.localizedPathCache,e.cachedNativeDocs=r.cachedNativeDocs,e.frontmatterHashes=r.frontmatterHashes,e.directoryMeta=r.directoryMeta,e.cachedDirectoryMetaFiles=r.cachedDirectoryMetaFiles),r}function g(e,t){e.activeVariant===t&&(e.cachedFileList=t.cachedFileList,e.cachedNativeDocs=t.cachedNativeDocs,e.frontmatterHashes=t.frontmatterHashes,e.directoryMeta=t.directoryMeta,e.cachedDirectoryMetaFiles=t.cachedDirectoryMetaFiles)}function _(e,t){return o.default.createHash(`sha1`).update(JSON.stringify({basePath:t||e?.base||`/docs`,i18n:e?.i18n,versions:e?.versions,drafts:e?.drafts,featureFlags:e?.featureFlags,sidebarGroups:e?.theme?.sidebarGroups})).digest(`hex`)}function v(e,t){let n=u(e),r=m.get(n),i=t??r;(!i||r===i)&&m.delete(n),i&&(i.disposed=!0,i.generationEpoch++,i.activeGenerations.clear(),i.variants.clear(),i.activeVariant=null,i.cachedFileList=null,i.localizedPathCache.clear(),i.cachedNativeDocs=null,i.frontmatterHashes.clear(),i.directoryMeta=null,i.cachedDirectoryMetaFiles=null)}function y(e){let t=u(e),n=m.get(t);return n||(n=p(t),m.set(t,n)),n}const b=p(i.default.resolve(process.cwd(),`docs`)),x=b.docCache;function S(e){try{a.default.rmSync(e.discoverySnapshotPath,{force:!0})}catch{}}function C(e){let t=typeof e==`string`?y(e):e??b;for(let e of t.variants.values())e.cachedFileList=null,e.localizedPathCache.clear(),e.cachedNativeDocs=null,e.frontmatterHashes.clear(),e.directoryMeta=null,e.cachedDirectoryMetaFiles=null,e.discoverySnapshot=null,e.discoverySnapshotLoaded=!1,S(e),e.docCache.invalidateAll(),e.parserCache.clear();t.cachedFileList=null,t.localizedPathCache.clear(),t.cachedNativeDocs=null,t.frontmatterHashes.clear(),t.directoryMeta=null,t.cachedDirectoryMetaFiles=null,t.generationEpoch++}function w(e,t){let n=typeof t==`string`?y(t):t??b,r=i.default.resolve(e);for(let e of n.variants.values()){for(let t of e.directoryMetaEntries.keys())i.default.resolve(t)===r&&e.directoryMetaEntries.delete(t);e.directoryMeta=null,e.cachedDirectoryMetaFiles=null,e.discoverySnapshot=null,e.discoverySnapshotLoaded=!1,S(e)}n.directoryMeta=null,n.cachedDirectoryMetaFiles=null,n.generationEpoch++}function T(e,t){let n=typeof t==`string`?y(t):t??b;for(let t of n.variants.values())t.docCache.invalidate(e),t.parserCache.invalidate(e),t.cachedNativeDocs?.[e.replace(/\\/g,`/`)]&&delete t.cachedNativeDocs[e.replace(/\\/g,`/`)],t.frontmatterHashes.delete(e);n.cachedNativeDocs=n.activeVariant?.cachedNativeDocs??null,n.frontmatterHashes.delete(e),n.generationEpoch++}function E(e){return e.sort((e,t)=>{let n=e.group?e.groupPosition??999:e.sidebarPosition??999,r=t.group?t.groupPosition??999:t.sidebarPosition??999;return n===r?!e.group&&t.group?-1:e.group&&!t.group?1:e.group&&t.group&&e.group!==t.group?(e.groupTitle||e.group).localeCompare(t.groupTitle||t.group):D(e,t):n-r})}function D(e,t){if(e.sidebarPosition!==void 0&&t.sidebarPosition!==void 0){let n=e.sidebarPosition-t.sidebarPosition;if(n!==0)return n}else if(e.sidebarPosition!==void 0)return-1;else if(t.sidebarPosition!==void 0)return 1;let n=e.title.localeCompare(t.title);return n===0?e.path.localeCompare(t.path):n}const O=Symbol(`route-generation-invalidated`);async function k(e,t,n){let r=[...t].sort((e,t)=>{if(i.default.dirname(e)===i.default.dirname(t)){let n=i.default.basename(e),r=i.default.basename(t);if(n===`_meta.json`&&r===`meta.json`)return-1;if(n===`meta.json`&&r===`_meta.json`)return 1}return e.localeCompare(t)}),a=new Set(r),o=n.directoryMetaEntries;for(let e of o.keys())a.has(e)||o.delete(e);await Promise.all(r.map(async e=>{let t;try{t=await c.default.stat(e)}catch(t){o.delete(e),(0,s.warn)(`Failed to stat meta.json: ${t instanceof Error?t.message:String(t)}`);return}let n=o.get(e);if(!(n&&n.mtimeMs===t.mtimeMs&&n.size===t.size))try{let n=await c.default.readFile(e,`utf8`);o.set(e,{mtimeMs:t.mtimeMs,size:t.size,content:JSON.parse(n)})}catch(t){o.delete(e),(0,s.warn)(`Failed to read meta.json: ${t instanceof Error?t.message:String(t)}`)}}));let l={};for(let t of r){let n=o.get(t);if(!n)continue;let r=i.default.relative(e,i.default.dirname(t)).replace(/\\/g,`/`);l[r||`.`]=n.content}return l}async function A(e,n){if(!n.discoverySnapshotPath||t.o().noCache)return null;if(n.discoverySnapshotLoaded)return n.discoverySnapshot;n.discoverySnapshotLoaded=!0;try{let t=await c.default.readFile(n.discoverySnapshotPath,`utf8`),r=JSON.parse(t),a=e=>Array.isArray(e)&&e.every(e=>typeof e==`string`),o=r.files,s=r.directoryMetaFiles,l=r.directories&&typeof r.directories==`object`?Object.entries(r.directories):[],u=i.default.resolve(e),d=await c.default.realpath(u),f=e=>{let t=i.default.resolve(e);return t===u||t.startsWith(`${u}${i.default.sep}`)},p=e=>/\.(?:md|mdx)$/i.test(e),m=e=>{let t=i.default.basename(e);return t===`meta.json`||t===`_meta.json`};if(r.version!==1||!a(o)||!a(s)||!r.directories||typeof r.directories!=`object`||Array.isArray(r.directories)||o.some(e=>!f(e)||!p(e))||s.some(e=>!f(e)||!m(e))||l.some(([e,t])=>!f(e)||typeof t!=`number`||!Number.isFinite(t)))return null;let h=e=>{let t=i.default.resolve(e);return t===d||t.startsWith(`${d}${i.default.sep}`)},g=await Promise.all([...o,...s].map(async e=>{try{return(await c.default.lstat(e)).isFile()?h(await c.default.realpath(e)):!1}catch{return!1}})),_=await Promise.all(l.map(async([e,t])=>{try{let n=await c.default.stat(e);return n.isDirectory()&&n.mtimeMs===t&&h(await c.default.realpath(e))}catch{return!1}}));if(g.every(Boolean)&&_.every(Boolean)){let e={version:1,files:o,directoryMetaFiles:s,directories:Object.fromEntries(l)};return n.discoverySnapshot=e,e}}catch{}return null}async function j(e,n){if(t.o().noCache){e.discoverySnapshot=null,e.discoverySnapshotLoaded=!1;return}e.discoverySnapshot=n,e.discoverySnapshotLoaded=!0;try{await c.default.mkdir(i.default.dirname(e.discoverySnapshotPath),{recursive:!0}),await c.default.writeFile(e.discoverySnapshotPath,JSON.stringify(n))}catch{}}async function M(e,t,n){if(!n){let n=await A(e,t);if(n)return n}let r=await new l.fdir({excludeSymlinks:!0}).withFullPaths().filter(t=>{let n=i.default.basename(t),r=n===`meta.json`||n===`_meta.json`;return!(t.endsWith(`.md`)||t.endsWith(`.mdx`))&&!r?!1:!i.default.relative(e,t).replace(/\\/g,`/`).split(`/`).some(e=>e.startsWith(`_`)&&e!==`_index.md`&&e!==`_index.mdx`&&e!==`_meta.json`)}).crawl(e).withPromise(),a=r.filter(e=>{let t=i.default.basename(e);return t===`meta.json`||t===`_meta.json`}).sort((e,t)=>e.localeCompare(t)),o=r.filter(e=>e.endsWith(`.md`)||e.endsWith(`.mdx`)),s=[/index\./i,/intro/i,/getting-started/i,/readme/i],u=o.map(e=>{let t=s.findIndex(t=>t.test(i.default.basename(e)));return{file:e,score:t===-1?2**53-1:t}});u.sort((e,t)=>e.score-t.score||e.file.localeCompare(t.file));let d=u.map(({file:e})=>e),f=[...d,...a],p=new Set([i.default.resolve(e)]);for(let t of f){let n=i.default.dirname(t);for(;n.startsWith(i.default.resolve(e))&&(p.add(n),n!==i.default.resolve(e));)n=i.default.dirname(n)}let m=await Promise.all([...p].sort().map(async e=>{try{return[e,(await c.default.stat(e)).mtimeMs]}catch{return null}})),h={version:1,files:d,directoryMetaFiles:a,directories:Object.fromEntries(m.filter(e=>e!==null))};return await j(t,h),h}async function N(e,t,n){let r=Array(e.length),i=0;async function a(){for(;i<e.length;){let t=i++;r[t]=await n(e[t])}}return await Promise.all(Array.from({length:Math.min(t,e.length)},()=>a())),r}function P(e,t){w(e,t)}function F(e,t){let n=typeof t==`string`?y(t):t;if(n){let t=e.replace(/\\/g,`/`);(i.default.basename(t)===`meta.json`||i.default.basename(t)===`_meta.json`)&&w(e,n),n.cachedNativeDocs?.[t]&&delete n.cachedNativeDocs[t],T(e,n);return}T(e)}function I(e){if(e){C(e);return}C()}async function L(e,n,r,a=!1,o,s){let c=o??y(e);if(c.disposed)throw Error(`[boltdocs] Route cache context has been disposed.`);let l=_(n,r);if(s&&s.fingerprint!==l)throw Error(`[boltdocs] Route cache variant does not match the requested route configuration fingerprint.`);if(s&&c.variants.get(l)!==s)throw Error(`[boltdocs] Route cache variant does not belong to the requested route cache context.`);let u=c.activeGenerations.get(l);if(u)return u;let d=s??h(c,l),f=c.generationEpoch,p=(async()=>{let o=r||n?.base||`/docs`;await d.docCache.load();let s,l,u=await M(e,d,a||t.o().noCache);s=u.files.filter(t=>n?.experimental?.fileRouting?!i.default.relative(e,t).replace(/\\\\/g,`/`).split(`/`).includes(`pages-external`):!0),l=u.directoryMetaFiles,d.cachedFileList=s,d.cachedDirectoryMetaFiles=l,d.directoryMeta=await k(e,l,d),g(c,d),d.docCache.pruneStale(new Set(s));let p=process.env.NODE_ENV===`test`||process.env.VITEST===`true`,m,h=!0;for(let e of s)if(!d.docCache.get(e)){h=!1;break}if(h)m=s.map(e=>{let t=d.docCache.get(e);if(!t)throw Error(`[boltdocs] Route cache entry disappeared for ${e}`);return t});else{if(!p&&!d.cachedNativeDocs)try{let{runParser:t}=await import(`@bdocs/parser`);d.cachedNativeDocs=await t(e,!0)}catch{}if(!p&&d.cachedNativeDocs!==null&&d.cachedNativeDocs){let{parseDocFileWithNative:t}=await Promise.resolve().then(()=>require(`./native-Kre2T5eS.cjs`)),r=s.filter(e=>!d.cachedNativeDocs?.[e.replace(/\\/g,`/`)]);if(r.length>0)try{let{runParserFiles:t}=await import(`@bdocs/parser`),n=await t(e,r,!0);d.cachedNativeDocs={...d.cachedNativeDocs,...n}}catch{}let i=s.some(e=>!d.cachedNativeDocs?.[e.replace(/\\/g,`/`)])?(await Promise.resolve().then(()=>require(`./parser-BqTOsEUa.cjs`))).parseDocFile:void 0;m=await N(s,32,async r=>{let a=d.docCache.get(r);if(a)return a;let s=r.replace(/\\/g,`/`),c=d.cachedNativeDocs[s];if(c){let i=await t(r,c,e,o,n,d.parserCache);return d.docCache.set(r,i),i}else{if(!i)throw Error(`[boltdocs] Native parser did not return a document for ${r}`);let t=await i(r,e,o,n,d.parserCache);return d.docCache.set(r,t),t}})}else{let{parseDocFile:t}=await Promise.resolve().then(()=>require(`./parser-BqTOsEUa.cjs`));m=await N(s,32,async r=>{let i=d.docCache.get(r);if(i)return i;let a=await t(r,e,o,n,d.parserCache);return d.docCache.set(r,a),a})}}if(c.generationEpoch!==f)throw O;d.docCache.save();let _=[],v=new Map,y=process.env.NODE_ENV||`development`,b=n?.drafts?.visible||process.env.BOLTDOCS_DRAFTS===`true`||(n?.drafts?.environments?.includes(y)??!1);for(let e of m)if(!(e.route.draft&&!b)){if(e.route.featureFlags&&n?.featureFlags){if(!e.route.featureFlags.every(e=>{let t=n.featureFlags?.[e];return t===!0||t===y}))continue}else if(e.route.featureFlags&&!n?.featureFlags)continue;if(e.inferredCollection){let t=e.inferredCollection;v.has(t)||v.set(t,[]),v.get(t).push(e)}else _.push(e)}let x=new Map,S=[],C=n?.i18n?.defaultLocale||``;for(let e of _)if(e.isGroupIndex&&e.relativeDir&&S.push(e),e.relativeDir){let n=`${e.route.locale||C}:${e.relativeDir}`,r=x.get(n);r?r.position===void 0&&e.inferredGroupPosition!==void 0&&(r.position=e.inferredGroupPosition):(r={title:t.t(e.relativeDir),position:e.inferredGroupPosition},x.set(n,r))}for(let e of S){let t=`${e.route.locale||C}:${e.relativeDir}`,n=x.get(t);e.groupMeta&&(n.title=e.groupMeta.title,e.groupMeta.position!==void 0&&(n.position=e.groupMeta.position),e.groupMeta.icon&&(n.icon=e.groupMeta.icon))}if(n?.theme?.sidebarGroups){let e=n.i18n?Object.keys(n.i18n.locales):[C];for(let[r,i]of Object.entries(n.theme.sidebarGroups))for(let n of e){let e=`${n}:${r}`,a=x.get(e),o;typeof i.title==`string`?o=i.title:i.title&&(o=i.title[n]||i.title[C]),a?(o&&(a.title=o),i.icon&&(a.icon=i.icon)):x.set(e,{title:o||t.t(r),icon:i.icon})}}let w=Array(_.length);for(let e=0;e<_.length;e++){let n=_[e],r=n.relativeDir,i=n.route.locale||C,a=r?`${i}:${r}`:void 0,o=a?x.get(a):void 0,s;o&&(s=typeof o.title==`string`?o.title:o.title[i]||o.title[C]),w[e]={...n.route,group:r,groupTitle:s||(r?t.t(r):void 0),groupPosition:o?.position,groupIcon:o?.icon}}let T=[];for(let[,e]of v)for(let t of e)T.push({...t.route,collection:t.inferredCollection});T.sort((e,t)=>{let n=e=>{if(!e)return-1/0;let t=new Date(e).getTime();return Number.isFinite(t)?t:-1/0},r=n(e.date),i=n(t.date)-r;return i===0?e.path.localeCompare(t.path):i});let D=w;if(n?.i18n){let e=R(w,n,o,d.localizedPathCache);D=[...w,...e]}let A=[...E(D),...T];if(c.generationEpoch!==f)throw O;return A})();c.activeGenerations.set(l,p);try{return await p}catch(t){if(t!==O)throw t;if(c.disposed)throw Error(`[boltdocs] Route cache context was disposed during generation.`);d.docCache.invalidateAll(),d.parserCache.clear(),c.activeGenerations.get(l)===p&&c.activeGenerations.delete(l);let i=0;for(;i<10;)try{return await L(e,n,r,a,c)}catch(e){if(e!==O)throw e;if(c.disposed)throw Error(`[boltdocs] Route cache context was disposed during generation.`);i++}throw Error(`[boltdocs] Route generation was repeatedly invalidated by concurrent file changes.`)}finally{c.activeGenerations.get(l)===p&&c.activeGenerations.delete(l)}}function R(e,t,n,r){let i=t.i18n.defaultLocale,a=Object.keys(t.i18n.locales),o=[],s=new Map,c=[];for(let t of e){let e=t.locale||i;s.has(e)||s.set(e,new Set),s.get(e).add(t.path),e===i&&c.push(t)}for(let e of a){if(e===i)continue;let a=s.get(e)||new Set;for(let s of c){let c=z(s.path,i,e,n,t,r);c!==s.path&&(a.has(c)||o.push({...s,path:c,locale:e}))}}return o}function z(e,t,n,r,i,a){let o=`${e}:${n}`,s=a.get(o);if(s)return s;let c=r.startsWith(`/`)?r:`/`+r,l=c;if(i?.versions){let t=i.versions.prefix||``;for(let n of i.versions.versions){let r=`${c}/${t+n.path}`;if(e.startsWith(r)){l=r;break}let i=`${c}/${n.path}`;if(e.startsWith(i)){l=i;break}}}let u=e.substring(l.length),d=`/${t}`;if(u.startsWith(d+`/`))u=`/`+n+`/`+u.substring(d.length+1);else if(u===d)u=`/`+n;else if(u===`/`||u===``)u=`/`+n;else{let e=u.startsWith(`/`)?``:`/`;u=`/`+n+e+u}let f=l+u;return a.size>2e3&&a.clear(),a.set(o,f),f}Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return v}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return I}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return P}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return x}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return F}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return y}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return L}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return w}});
@@ -3,6 +3,6 @@
3
3
  * Copyright (c) 2026 Jesus Alcala
4
4
  * Licensed under the MIT License.
5
5
  */
6
- const require_search_dialog = require('./search-dialog-BRFno7HD.cjs');
6
+ const require_search_dialog = require('./search-dialog-CIeIUhAn.cjs');
7
7
 
8
8
  exports.SearchDialog = require_search_dialog.SearchDialog;
@@ -0,0 +1,481 @@
1
+ /**
2
+ * Boltdocs - https://boltdocs.vercel.app
3
+ * Copyright (c) 2026 Jesus Alcala
4
+ * Licensed under the MIT License.
5
+ */
6
+ import { R as Search, V as X, W as useConfig, l as useRoutesContext, o as cn, q as useBoltdocsContext, u as normalizePath } from "./link-CgdI6O2o.js";
7
+ import { E as useLocation, O as useNavigate } from "./router-CZBxMRAH.js";
8
+ import { i as ErrorBoundary, n as Navbar, t as SearchDialog$1 } from "./search-dialog-BqkzDTq2.js";
9
+ import { useCallback, useEffect, useMemo, useRef, useState } from "react";
10
+ import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
11
+ import { Index } from "flexsearch";
12
+ import fetchSearchData from "virtual:boltdocs-search";
13
+
14
+ //#region src/client/hooks/use-routes.ts
15
+ /**
16
+ * Hook to access the framework's routing state.
17
+ * Returns both the complete set of routes and a filtered list based on the current
18
+ * version and locale.
19
+ */
20
+ function useRoutes() {
21
+ const routeContext = useRoutesContext();
22
+ const allRoutes = routeContext.routes;
23
+ const routeIndex = routeContext.index || {
24
+ byPath: new Map(allRoutes.map((route) => [normalizePath(route.path), route])),
25
+ hintsByPath: /* @__PURE__ */ new Map(),
26
+ collectionNames: []
27
+ };
28
+ const config = useConfig();
29
+ const location = useLocation();
30
+ const { pathname } = location;
31
+ const { currentLocale: currentLocaleStore, currentVersion: currentVersionStore } = useBoltdocsContext();
32
+ const currentPath = normalizePath(pathname);
33
+ const currentRoute = routeIndex.byPath.get(currentPath);
34
+ const pathParts = pathname.split("/").filter(Boolean);
35
+ const urlLocale = config.i18n ? pathParts.find((part) => Array.isArray(config.i18n?.locales) ? config.i18n?.locales.includes(part) : part in (config.i18n?.locales || {})) : void 0;
36
+ const currentLocale = config.i18n ? urlLocale || currentLocaleStore || config.i18n.defaultLocale : void 0;
37
+ const configuredVersions = config.versions?.versions || [];
38
+ const currentVersion = config.versions ? configuredVersions.some((version) => version.path === currentVersionStore) ? currentVersionStore : config.versions.defaultVersion : void 0;
39
+ const routes = useMemo(() => {
40
+ if (!allRoutes) return [];
41
+ const alternateCounts = /* @__PURE__ */ new Map();
42
+ const defaultLocale = config.i18n?.defaultLocale || "";
43
+ const defaultVersion = config.versions?.defaultVersion || "";
44
+ for (const r of allRoutes) {
45
+ const locale = r.locale || defaultLocale;
46
+ const version = r.version || defaultVersion;
47
+ const key = `${r.filePath}::${locale}::${version}`;
48
+ alternateCounts.set(key, (alternateCounts.get(key) || 0) + 1);
49
+ }
50
+ return allRoutes.filter((r) => {
51
+ const localeMatch = config.i18n ? (r.locale || config.i18n.defaultLocale) === currentLocale : true;
52
+ const versionMatch = config.versions ? (r.version || config.versions.defaultVersion) === currentVersion : true;
53
+ if (!(localeMatch && versionMatch)) return false;
54
+ const pathParts = pathname.split("/").filter(Boolean);
55
+ const isCurrentLocalePrefixed = !!(config.i18n && pathParts.includes(currentLocaleStore || config.i18n.defaultLocale));
56
+ const isCurrentVersionPrefixed = !!(config.versions && !!currentVersion && pathParts.includes(currentVersion));
57
+ const isRouteLocalePrefixed = !!r.locale;
58
+ const isRouteVersionPrefixed = !!r.version;
59
+ const locale = r.locale || defaultLocale;
60
+ const version = r.version || defaultVersion;
61
+ const key = `${r.filePath}::${locale}::${version}`;
62
+ if ((alternateCounts.get(key) || 0) > 1) {
63
+ const localeMismatch = config.i18n && isCurrentLocalePrefixed !== isRouteLocalePrefixed;
64
+ const versionMismatch = config.versions && isCurrentVersionPrefixed !== isRouteVersionPrefixed;
65
+ if (localeMismatch || versionMismatch) return false;
66
+ }
67
+ return true;
68
+ });
69
+ }, [
70
+ allRoutes,
71
+ config,
72
+ pathname,
73
+ currentLocale,
74
+ currentVersion,
75
+ currentLocaleStore
76
+ ]);
77
+ const collections = useMemo(() => new Set(routeIndex.collectionNames), [routeIndex.collectionNames]);
78
+ return {
79
+ routes,
80
+ allRoutes,
81
+ currentRoute,
82
+ isCollectionPage: !!currentRoute?.collection || location.pathname.split("/").filter(Boolean).some((segment) => collections.has(segment.toLowerCase())),
83
+ currentLocale,
84
+ currentVersion
85
+ };
86
+ }
87
+
88
+ //#endregion
89
+ //#region src/client/components/internal/error-boundary.tsx
90
+ function InternalFallback({ error, resetErrorBoundary, className }) {
91
+ return /* @__PURE__ */ jsxs("div", {
92
+ className: cn("p-2 font-mono flex flex-col items-center justify-between min-h-[30vh]", className),
93
+ children: [
94
+ /* @__PURE__ */ jsx("p", {
95
+ className: "text-lg font-semibold text-danger-500",
96
+ children: "Something went wrong"
97
+ }),
98
+ error?.message && /* @__PURE__ */ jsx("pre", {
99
+ className: "text-sm mt-2 max-w-md overflow-auto whitespace-pre-wrap break-word",
100
+ children: error.message
101
+ }),
102
+ /* @__PURE__ */ jsx("button", {
103
+ type: "button",
104
+ onClick: resetErrorBoundary,
105
+ className: "px-2 py-3 mt-2 bg-soft rounded border-subtle border font-mono font-semibold text-body hover:scale-105 transition-transform active:scale-95 cursor-pointer",
106
+ children: "Try again"
107
+ })
108
+ ]
109
+ });
110
+ }
111
+ function InternalErrorBoundary({ children, fallback }) {
112
+ return /* @__PURE__ */ jsx(ErrorBoundary, {
113
+ fallback,
114
+ FallbackComponent: !fallback ? InternalFallback : void 0,
115
+ children
116
+ });
117
+ }
118
+
119
+ //#endregion
120
+ //#region src/client/hooks/use-search.ts
121
+ function useSearch(routes) {
122
+ const { currentLocale, currentVersion } = useRoutes();
123
+ const config = useConfig();
124
+ const algoliaConfig = config.integrations?.search?.algolia;
125
+ const [isOpen, setIsOpen] = useState(false);
126
+ const [query, setQuery] = useState("");
127
+ const [index, setIndex] = useState(null);
128
+ const [algoliaResults, setAlgoliaResults] = useState([]);
129
+ const [searchData, setSearchData] = useState([]);
130
+ const [searchDataLoading, setSearchDataLoading] = useState(false);
131
+ const [searchDataError, setSearchDataError] = useState(null);
132
+ const searchGeneration = useRef(0);
133
+ const loadingGeneration = useRef(null);
134
+ const navigate = useNavigate();
135
+ useEffect(() => {
136
+ if (algoliaConfig || !isOpen) return;
137
+ if (searchData.length > 0) return;
138
+ setSearchDataLoading(true);
139
+ setSearchDataError(null);
140
+ let active = true;
141
+ const generation = ++searchGeneration.current;
142
+ loadingGeneration.current = generation;
143
+ fetchSearchData().then((data) => {
144
+ if (!active || generation !== searchGeneration.current) return;
145
+ setSearchData(data || []);
146
+ if (loadingGeneration.current === generation) {
147
+ loadingGeneration.current = null;
148
+ setSearchDataLoading(false);
149
+ }
150
+ }).catch((err) => {
151
+ if (!active || generation !== searchGeneration.current) return;
152
+ console.error("[boltdocs] Failed to load search index:", err);
153
+ setSearchDataError(err);
154
+ if (loadingGeneration.current === generation) {
155
+ loadingGeneration.current = null;
156
+ setSearchDataLoading(false);
157
+ }
158
+ });
159
+ return () => {
160
+ active = false;
161
+ };
162
+ }, [
163
+ isOpen,
164
+ algoliaConfig,
165
+ searchData.length
166
+ ]);
167
+ useEffect(() => {
168
+ if (!import.meta.hot) return;
169
+ const applyFrontmatterDelta = (payload) => {
170
+ const updated = payload.search?.updated ?? [];
171
+ const deleted = new Set(payload.search?.deleted ?? []);
172
+ searchGeneration.current += 1;
173
+ if (loadingGeneration.current !== null) {
174
+ loadingGeneration.current = null;
175
+ setSearchDataLoading(false);
176
+ }
177
+ setSearchData((prev) => {
178
+ const map = new Map(prev.map((d) => [d.id, d]));
179
+ for (const doc of updated) map.set(doc.id, doc);
180
+ for (const id of deleted) map.delete(id);
181
+ return Array.from(map.values());
182
+ });
183
+ setIndex(null);
184
+ };
185
+ const refreshFromAsset = async () => {
186
+ const generation = ++searchGeneration.current;
187
+ loadingGeneration.current = generation;
188
+ setSearchDataLoading(true);
189
+ try {
190
+ const data = await fetchSearchData({ bustCache: true });
191
+ if (generation !== searchGeneration.current) return;
192
+ setSearchData(data || []);
193
+ setSearchDataError(null);
194
+ setIndex(null);
195
+ } catch (error) {
196
+ if (generation !== searchGeneration.current) return;
197
+ console.error("[boltdocs] Failed to refresh search index:", error);
198
+ setSearchDataError(error instanceof Error ? error : new Error(String(error)));
199
+ } finally {
200
+ if (generation === searchGeneration.current) {
201
+ loadingGeneration.current = null;
202
+ setSearchDataLoading(false);
203
+ }
204
+ }
205
+ };
206
+ const hot = import.meta.hot;
207
+ hot.on("boltdocs:frontmatter-update", applyFrontmatterDelta);
208
+ hot.on("boltdocs:mdx-update", refreshFromAsset);
209
+ return () => {
210
+ hot.off?.("boltdocs:frontmatter-update", applyFrontmatterDelta);
211
+ hot.off?.("boltdocs:mdx-update", refreshFromAsset);
212
+ };
213
+ }, []);
214
+ useEffect(() => {
215
+ const handleKeyDown = (e) => {
216
+ if ((/Mac/.test(navigator.userAgent) ? e.metaKey : e.ctrlKey) && (e.key === "k" || e.key === "j")) {
217
+ e.preventDefault();
218
+ setIsOpen((prev) => !prev);
219
+ }
220
+ };
221
+ window.addEventListener("keydown", handleKeyDown);
222
+ return () => window.removeEventListener("keydown", handleKeyDown);
223
+ }, []);
224
+ const handleSelect = useCallback((key) => {
225
+ const path = String(key);
226
+ if (!path) return;
227
+ setIsOpen(false);
228
+ const url = new URL(path, window.location.origin);
229
+ if (query) url.searchParams.set("hl", query);
230
+ navigate(`${url.pathname}${url.search}${url.hash}`);
231
+ }, [navigate, query]);
232
+ useEffect(() => {
233
+ if (algoliaConfig) return;
234
+ if (!isOpen || searchData.length === 0 || index) return;
235
+ const newIndex = new Index({
236
+ tokenize: "forward",
237
+ cache: true
238
+ });
239
+ for (let i = 0; i < searchData.length; i++) {
240
+ const doc = searchData[i];
241
+ if (!doc) continue;
242
+ newIndex.add(i, `${doc.title} ${doc.content}`);
243
+ }
244
+ setIndex(newIndex);
245
+ }, [
246
+ isOpen,
247
+ index,
248
+ algoliaConfig,
249
+ searchData
250
+ ]);
251
+ useEffect(() => {
252
+ if (!algoliaConfig) return;
253
+ if (!query) {
254
+ setAlgoliaResults([]);
255
+ return;
256
+ }
257
+ const delayDebounceFn = setTimeout(async () => {
258
+ try {
259
+ const url = `https://${algoliaConfig.appId}-dsn.algolia.net/1/indexes/${algoliaConfig.indexName}/query`;
260
+ const facetFilters = [];
261
+ if (currentLocale) facetFilters.push(`lang:${currentLocale}`);
262
+ if (currentVersion) facetFilters.push(`version:${currentVersion}`);
263
+ let params = `query=${encodeURIComponent(query)}&hitsPerPage=20`;
264
+ if (facetFilters.length > 0) params += `&facetFilters=${encodeURIComponent(JSON.stringify(facetFilters))}`;
265
+ const response = await fetch(url, {
266
+ method: "POST",
267
+ headers: {
268
+ "Content-Type": "application/json",
269
+ "X-Algolia-API-Key": algoliaConfig.apiKey,
270
+ "X-Algolia-Application-Id": algoliaConfig.appId
271
+ },
272
+ body: JSON.stringify({ params })
273
+ });
274
+ if (!response.ok) throw new Error(`Algolia search request failed: ${response.statusText}`);
275
+ setAlgoliaResults(((await response.json()).hits || []).map((hit) => {
276
+ let path = hit.url || "";
277
+ try {
278
+ if (path.startsWith("http://") || path.startsWith("https://")) {
279
+ const urlObj = new URL(path);
280
+ path = urlObj.pathname + urlObj.search + urlObj.hash;
281
+ }
282
+ } catch {}
283
+ const hierarchy = hit.hierarchy || {};
284
+ const levels = [
285
+ hierarchy.lvl0,
286
+ hierarchy.lvl1,
287
+ hierarchy.lvl2,
288
+ hierarchy.lvl3,
289
+ hierarchy.lvl4,
290
+ hierarchy.lvl5,
291
+ hierarchy.lvl6
292
+ ].filter(Boolean);
293
+ const title = levels[levels.length - 1] || "Documentation";
294
+ const bio = levels.join(" > ");
295
+ return {
296
+ id: hit.objectID || path,
297
+ title,
298
+ path,
299
+ bio,
300
+ groupTitle: hierarchy.lvl0 || "Docs",
301
+ isHeading: !!hit.anchor || path.includes("#")
302
+ };
303
+ }));
304
+ } catch (err) {
305
+ console.error("Error fetching search results from Algolia:", err);
306
+ }
307
+ }, 250);
308
+ return () => clearTimeout(delayDebounceFn);
309
+ }, [
310
+ query,
311
+ algoliaConfig,
312
+ currentLocale,
313
+ currentVersion
314
+ ]);
315
+ return {
316
+ isOpen,
317
+ setIsOpen,
318
+ query,
319
+ setQuery,
320
+ list: useMemo(() => {
321
+ if (!query) return routes.filter((r) => {
322
+ const routeLocale = r.locale || config.i18n?.defaultLocale;
323
+ const routeVersion = r.version || config.versions?.defaultVersion;
324
+ return (!currentLocale || routeLocale === currentLocale) && (!currentVersion || routeVersion === currentVersion);
325
+ }).slice(0, 10).map((r) => ({
326
+ id: r.path,
327
+ title: r.title,
328
+ path: r.path,
329
+ bio: r.description || "",
330
+ groupTitle: r.groupTitle
331
+ }));
332
+ if (algoliaConfig) return algoliaResults;
333
+ if (!index) return [];
334
+ const searchResults = index.search(query, {
335
+ limit: 20,
336
+ suggest: true
337
+ });
338
+ const results = [];
339
+ const seen = /* @__PURE__ */ new Set();
340
+ for (const id of searchResults) {
341
+ const doc = searchData[typeof id === "number" ? id : Number(id)];
342
+ if (!doc) continue;
343
+ const docLocale = doc.locale || config.i18n?.defaultLocale;
344
+ const docVersion = doc.version || config.versions?.defaultVersion;
345
+ const localeMatch = !currentLocale || docLocale === currentLocale || !doc.locale && currentLocale === config.i18n?.defaultLocale;
346
+ if (!(!currentVersion || docVersion === currentVersion)) continue;
347
+ if (seen.has(doc.url)) continue;
348
+ seen.add(doc.url);
349
+ results.push({
350
+ id: doc.url,
351
+ title: doc.title,
352
+ path: doc.url,
353
+ bio: doc.display,
354
+ groupTitle: doc.display.split(" > ")[0],
355
+ isHeading: doc.url.includes("#"),
356
+ localeMatch
357
+ });
358
+ }
359
+ return results.filter((result) => result.localeMatch).slice(0, 10);
360
+ }, [
361
+ query,
362
+ index,
363
+ currentLocale,
364
+ currentVersion,
365
+ routes,
366
+ searchData,
367
+ algoliaConfig,
368
+ algoliaResults,
369
+ config
370
+ ]),
371
+ searchDataLoading,
372
+ searchDataError,
373
+ handleSelect,
374
+ input: {
375
+ value: query,
376
+ onChange: (e) => setQuery(e.target.value)
377
+ }
378
+ };
379
+ }
380
+
381
+ //#endregion
382
+ //#region src/client/components/ui-base/search-dialog.tsx
383
+ function Highlight({ text, query, markClassName }) {
384
+ if (!query || !text) return /* @__PURE__ */ jsx(Fragment$1, { children: text });
385
+ const escapedQuery = query.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
386
+ const regex = new RegExp(`(${escapedQuery})`, "gi");
387
+ return /* @__PURE__ */ jsx(Fragment$1, { children: text.split(regex).map((part, i) => regex.test(part) ? /* @__PURE__ */ jsx("mark", {
388
+ className: cn("bg-primary-500/20 text-primary-600 dark:text-primary-400 font-bold px-0.5 rounded-sm", markClassName),
389
+ children: part
390
+ }, i) : part) });
391
+ }
392
+ function SearchDialog({ routes, className, markClassName }) {
393
+ const { isOpen, setIsOpen, query, setQuery, list, searchDataLoading, searchDataError, handleSelect } = useSearch(routes);
394
+ return /* @__PURE__ */ jsxs(Fragment$1, { children: [
395
+ /* @__PURE__ */ jsxs(Navbar.SearchTrigger.Desktop, {
396
+ onPress: () => setIsOpen(true),
397
+ className: "rounded-xl border border-subtle bg-surface text-muted transition-all duration-200 hover:border-primary-500/50 hover:text-body hover:bg-soft/50 hover:shadow-sm active:scale-[0.98] focus-visible:ring-2 focus-visible:ring-primary-500/30",
398
+ children: [/* @__PURE__ */ jsxs("div", {
399
+ className: "flex items-center gap-2",
400
+ children: [/* @__PURE__ */ jsx(Search, { size: 16 }), /* @__PURE__ */ jsx("span", {
401
+ className: "hidden sm:inline-block",
402
+ children: "Search docs..."
403
+ })]
404
+ }), /* @__PURE__ */ jsx(Navbar.SearchTrigger.Kbd, { className: "[&_kbd]:bg-main [&_kbd]:border [&_kbd]:border-subtle [&_kbd]:rounded [&_kbd]:px-1.5 [&_kbd]:h-5 [&_kbd]:w-5" })]
405
+ }),
406
+ /* @__PURE__ */ jsx(Navbar.SearchTrigger.Mobile, {
407
+ onPress: () => setIsOpen(true),
408
+ className: "rounded-xl text-muted transition-all duration-200 hover:text-body active:scale-95 focus-visible:ring-2 focus-visible:ring-primary-500/30",
409
+ children: /* @__PURE__ */ jsx(Search, { size: 20 })
410
+ }),
411
+ /* @__PURE__ */ jsx(InternalErrorBoundary, { children: /* @__PURE__ */ jsx(SearchDialog$1.Overlay, {
412
+ isOpen,
413
+ isDismissable: true,
414
+ onOpenChange: () => setIsOpen(false),
415
+ className: cn("fixed inset-0 z-100 flex items-center justify-center p-4 bg-black/40 backdrop-blur-xs animate-fade-in", className),
416
+ children: /* @__PURE__ */ jsx(SearchDialog$1.Content, {
417
+ className: "w-full max-w-lg bg-main border border-subtle shadow-md rounded-2xl overflow-hidden p-6",
418
+ children: /* @__PURE__ */ jsx(SearchDialog$1.Dialog, {
419
+ "aria-label": "Search documentation",
420
+ className: "flex flex-col min-h-0 h-[450px]",
421
+ children: /* @__PURE__ */ jsxs(SearchDialog$1.Autocomplete, {
422
+ className: "flex flex-col min-h-0",
423
+ children: [/* @__PURE__ */ jsxs(SearchDialog$1.Input, {
424
+ value: query,
425
+ onChange: setQuery,
426
+ className: "flex items-center gap-2 border border-subtle bg-surface px-4 py-2.5 rounded-xl focus-within:border-primary-500 mb-4",
427
+ children: [/* @__PURE__ */ jsx(SearchDialog$1.Input.SearchInput, {
428
+ placeholder: "Search documentation...",
429
+ className: "w-full bg-transparent outline-none text-body text-sm"
430
+ }), query && /* @__PURE__ */ jsx(SearchDialog$1.Input.Button, {
431
+ onPress: () => setQuery(""),
432
+ className: "text-muted hover:text-body hover:bg-surface rounded-md p-1 cursor-pointer select-none transition-colors",
433
+ children: /* @__PURE__ */ jsx(X, { size: 16 })
434
+ })]
435
+ }), searchDataLoading ? /* @__PURE__ */ jsx("div", {
436
+ className: "flex flex-1 items-center justify-center px-4 py-8 text-sm text-muted",
437
+ children: "Loading search index…"
438
+ }) : searchDataError ? /* @__PURE__ */ jsx("div", {
439
+ className: "flex flex-1 items-center justify-center px-4 py-8 text-center text-sm text-muted",
440
+ children: "Search is temporarily unavailable."
441
+ }) : query && list.length === 0 ? /* @__PURE__ */ jsx("div", {
442
+ className: "flex flex-1 items-center justify-center px-4 py-8 text-sm text-muted",
443
+ children: "No results found."
444
+ }) : /* @__PURE__ */ jsx(SearchDialog$1.List, {
445
+ items: list,
446
+ onAction: handleSelect,
447
+ children: (item) => /* @__PURE__ */ jsxs(SearchDialog$1.Item, {
448
+ textValue: item.title,
449
+ className: "flex items-center gap-3 px-4 py-2 rounded-xl group dark:hover:bg-primary-300/40 hover:bg-primary-200/50 transition-colors duration-100",
450
+ children: [/* @__PURE__ */ jsx(SearchDialog$1.Item.Icon, {
451
+ isHeading: item.isHeading,
452
+ className: "text-muted group-hover:text-primary-500 group-focus:text-primary-500"
453
+ }), /* @__PURE__ */ jsxs("div", {
454
+ className: "flex flex-col justify-center min-w-0",
455
+ children: [/* @__PURE__ */ jsx(SearchDialog$1.Item.Title, {
456
+ className: "text-sm font-medium text-body truncate dark:group-hover:text-primary-100",
457
+ children: /* @__PURE__ */ jsx(Highlight, {
458
+ text: item.title,
459
+ query,
460
+ markClassName
461
+ })
462
+ }), /* @__PURE__ */ jsx(SearchDialog$1.Item.Bio, {
463
+ className: "text-xs text-muted truncate",
464
+ children: /* @__PURE__ */ jsx(Highlight, {
465
+ text: item.bio,
466
+ query,
467
+ markClassName
468
+ })
469
+ })]
470
+ })]
471
+ }, item.id)
472
+ })]
473
+ })
474
+ })
475
+ })
476
+ }) })
477
+ ] });
478
+ }
479
+
480
+ //#endregion
481
+ export { useRoutes as i, useSearch as n, InternalErrorBoundary as r, SearchDialog as t };