boltdocs 2.1.1 → 2.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 (133) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/bin/boltdocs.js +2 -2
  3. package/dist/base-ui/index.d.mts +25 -0
  4. package/dist/base-ui/index.d.ts +25 -0
  5. package/dist/base-ui/index.js +1 -0
  6. package/dist/base-ui/index.mjs +1 -0
  7. package/dist/{cache-Q4T6VAUL.mjs → cache-P6WK424C.mjs} +1 -1
  8. package/dist/chunk-22NXDNP4.mjs +74 -0
  9. package/dist/chunk-2HUVMMJU.mjs +1 -0
  10. package/dist/chunk-2Z5T6EAU.mjs +1 -0
  11. package/dist/chunk-CRZGOE32.mjs +1 -0
  12. package/dist/chunk-HA6543SL.mjs +1 -0
  13. package/dist/chunk-JD3RSDE4.mjs +1 -0
  14. package/dist/chunk-JZXLCA2E.mjs +1 -0
  15. package/dist/chunk-NBCYHLAA.mjs +1 -0
  16. package/dist/chunk-RPUERTVC.mjs +1 -0
  17. package/dist/chunk-T3W44KWY.mjs +1 -0
  18. package/dist/chunk-URTD6E6S.mjs +1 -0
  19. package/dist/chunk-W2NB4T6V.mjs +1 -0
  20. package/dist/chunk-Y4RRHPXC.mjs +1 -0
  21. package/dist/client/index.d.mts +13 -115
  22. package/dist/client/index.d.ts +13 -115
  23. package/dist/client/index.js +1 -1
  24. package/dist/client/index.mjs +1 -1
  25. package/dist/client/ssr.js +1 -1
  26. package/dist/client/ssr.mjs +1 -1
  27. package/dist/client/types.d.mts +3 -0
  28. package/dist/client/types.d.ts +3 -0
  29. package/dist/client/types.js +1 -0
  30. package/dist/client/types.mjs +0 -0
  31. package/dist/copy-markdown-C-90ixSe.d.ts +15 -0
  32. package/dist/copy-markdown-CbS8X-qe.d.mts +15 -0
  33. package/dist/{client/hooks → hooks}/index.d.mts +16 -11
  34. package/dist/{client/hooks → hooks}/index.d.ts +16 -11
  35. package/dist/hooks/index.js +1 -0
  36. package/dist/hooks/index.mjs +1 -0
  37. package/dist/integrations/index.d.mts +48 -0
  38. package/dist/integrations/index.d.ts +48 -0
  39. package/dist/integrations/index.js +1 -0
  40. package/dist/integrations/index.mjs +1 -0
  41. package/dist/link-DfBwCeZc.d.mts +68 -0
  42. package/dist/link-DfBwCeZc.d.ts +68 -0
  43. package/dist/loading-B7X5Wchs.d.ts +66 -0
  44. package/dist/loading-WuaQbsKb.d.mts +66 -0
  45. package/dist/{client/components/mdx → mdx}/index.d.mts +6 -38
  46. package/dist/{client/components/mdx → mdx}/index.d.ts +6 -38
  47. package/dist/mdx/index.js +1 -0
  48. package/dist/mdx/index.mjs +1 -0
  49. package/dist/node/cli-entry.js +31 -27
  50. package/dist/node/cli-entry.mjs +5 -1
  51. package/dist/node/index.d.mts +44 -14
  52. package/dist/node/index.d.ts +44 -14
  53. package/dist/node/index.js +24 -24
  54. package/dist/node/index.mjs +1 -1
  55. package/dist/primitives/index.d.mts +301 -0
  56. package/dist/primitives/index.d.ts +301 -0
  57. package/dist/primitives/index.js +1 -0
  58. package/dist/primitives/index.mjs +1 -0
  59. package/dist/search-dialog-ZRXBAQJ5.mjs +1 -0
  60. package/dist/{types-Cp21DHI6.d.mts → types-j7jvWsJj.d.mts} +63 -17
  61. package/dist/{types-Cp21DHI6.d.ts → types-j7jvWsJj.d.ts} +63 -17
  62. package/dist/{use-routes-xLhumjbV.d.ts → use-routes-Cd806kGw.d.ts} +1 -1
  63. package/dist/{use-routes-8Iei6jTp.d.mts → use-routes-DDL0_jkQ.d.mts} +1 -1
  64. package/package.json +35 -8
  65. package/src/client/app/index.tsx +155 -35
  66. package/src/client/app/mdx-component.tsx +7 -3
  67. package/src/client/app/theme-context.tsx +47 -23
  68. package/src/client/components/default-layout.tsx +16 -6
  69. package/src/client/components/primitives/breadcrumbs.tsx +1 -1
  70. package/src/client/components/primitives/navbar.tsx +8 -5
  71. package/src/client/components/primitives/search-dialog.tsx +15 -6
  72. package/src/client/components/primitives/sidebar.tsx +3 -2
  73. package/src/client/components/primitives/skeleton.tsx +26 -0
  74. package/src/client/components/ui-base/breadcrumbs.tsx +1 -1
  75. package/src/client/components/ui-base/index.ts +17 -0
  76. package/src/client/components/ui-base/loading.tsx +43 -73
  77. package/src/client/components/ui-base/navbar.tsx +74 -39
  78. package/src/client/components/ui-base/page-nav.tsx +2 -1
  79. package/src/client/components/ui-base/powered-by.tsx +11 -5
  80. package/src/client/components/ui-base/search-dialog.tsx +16 -5
  81. package/src/client/components/ui-base/sidebar.tsx +33 -22
  82. package/src/client/components/ui-base/tabs.tsx +4 -1
  83. package/src/client/components/ui-base/theme-toggle.tsx +35 -15
  84. package/src/client/hooks/use-i18n.ts +38 -7
  85. package/src/client/hooks/use-localized-to.ts +51 -73
  86. package/src/client/hooks/use-navbar.ts +10 -3
  87. package/src/client/hooks/use-page-nav.ts +27 -6
  88. package/src/client/hooks/use-routes.ts +62 -17
  89. package/src/client/hooks/use-search.ts +84 -46
  90. package/src/client/hooks/use-sidebar.ts +6 -2
  91. package/src/client/hooks/use-version.ts +5 -0
  92. package/src/client/integrations/index.ts +1 -0
  93. package/src/client/store/use-boltdocs-store.ts +44 -0
  94. package/src/client/theme/neutral.css +29 -0
  95. package/src/client/types.ts +4 -2
  96. package/src/client/utils/i18n.ts +23 -0
  97. package/src/node/{cli.ts → cli/build.ts} +17 -23
  98. package/src/node/cli/dev.ts +22 -0
  99. package/src/node/cli/doctor.ts +243 -0
  100. package/src/node/cli/index.ts +9 -0
  101. package/src/node/cli/ui.ts +54 -0
  102. package/src/node/cli-entry.ts +16 -16
  103. package/src/node/config.ts +54 -17
  104. package/src/node/index.ts +1 -1
  105. package/src/node/mdx/cache.ts +12 -0
  106. package/src/node/mdx/highlighter.ts +47 -0
  107. package/src/node/mdx/index.ts +114 -0
  108. package/src/node/mdx/rehype-shiki.ts +53 -0
  109. package/src/node/mdx/remark-shiki.ts +61 -0
  110. package/src/node/plugin/entry.ts +1 -1
  111. package/src/node/plugin/html.ts +8 -4
  112. package/src/node/plugin/index.ts +135 -72
  113. package/src/node/routes/index.ts +34 -13
  114. package/src/node/routes/parser.ts +13 -5
  115. package/src/node/search/index.ts +55 -0
  116. package/src/node/ssg/index.ts +15 -7
  117. package/src/node/ssg/robots.ts +7 -4
  118. package/src/node/utils.ts +32 -2
  119. package/tsup.config.ts +7 -2
  120. package/dist/chunk-52MVMZWS.mjs +0 -1
  121. package/dist/chunk-BVWWKXJH.mjs +0 -1
  122. package/dist/chunk-DVY3RDXD.mjs +0 -1
  123. package/dist/chunk-FUVYCYWC.mjs +0 -1
  124. package/dist/chunk-GBLMDJ2B.mjs +0 -1
  125. package/dist/chunk-ISPX45DF.mjs +0 -1
  126. package/dist/chunk-PNXZMUCO.mjs +0 -1
  127. package/dist/chunk-V2ZHKQSP.mjs +0 -74
  128. package/dist/client/components/mdx/index.js +0 -1
  129. package/dist/client/components/mdx/index.mjs +0 -1
  130. package/dist/client/hooks/index.js +0 -1
  131. package/dist/client/hooks/index.mjs +0 -1
  132. package/dist/search-dialog-TWGYKF2D.mjs +0 -1
  133. package/src/node/mdx.ts +0 -279
@@ -1,54 +1,54 @@
1
1
  #!/usr/bin/env node
2
- "use strict";var Me=Object.create;var yt=Object.defineProperty;var ke=Object.getOwnPropertyDescriptor;var Te=Object.getOwnPropertyNames;var _e=Object.getPrototypeOf,Oe=Object.prototype.hasOwnProperty;var xt=(o,t)=>()=>(o&&(t=o(o=0)),t);var Fe=(o,t)=>{for(var e in t)yt(o,e,{get:t[e],enumerable:!0})},Ie=(o,t,e,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of Te(t))!Oe.call(o,i)&&i!==e&&yt(o,i,{get:()=>t[i],enumerable:!(r=ke(t,i))||r.enumerable});return o};var y=(o,t,e)=>(e=o!=null?Me(_e(o)):{},Ie(t||!o||!o.__esModule?yt(e,"default",{value:o,enumerable:!0}):e,o));var He,P,u=xt(()=>{"use strict";He=()=>typeof document>"u"?new URL(`file:${__filename}`).href:document.currentScript&&document.currentScript.tagName.toUpperCase()==="SCRIPT"?document.currentScript.src:new URL("main.js",document.baseURI).href,P=He()});function R(o){return o.replace(/\\/g,"/")}function q(o){return o.replace(/^\d+\./,"")}function et(o){let t=o.match(/^(\d+)\./);return t?parseInt(t[1],10):void 0}function Lt(o){return/\.mdx?$/.test(o)}function ot(o){try{return vt.default.statSync(o).mtimeMs}catch{return 0}}function At(o){let t=vt.default.readFileSync(o,"utf-8"),{data:e,content:r}=(0,jt.default)(t);return{data:e,content:r}}function E(o){return o.replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/'/g,"&apos;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function wt(o){return E(o)}function zt(o){let e=o.split("/").map(q).join("/").replace(/\/$/,"");return e=e.replace(/\.mdx?$/,""),(e==="index"||e.endsWith("/index"))&&(e=e.replace(/index$/,"")),e.startsWith("/")||(e="/"+e),e.length>1&&e.endsWith("/")&&(e=e.slice(0,-1)),e}function V(o){return bt.default.sanitize(o)}function Pt(o){return bt.default.sanitize(o,{ALLOWED_TAGS:[],KEEP_CONTENT:!0})}function W(o){return o.charAt(0).toUpperCase()+o.slice(1)}var vt,jt,bt,k=xt(()=>{"use strict";u();vt=y(require("fs")),jt=y(require("gray-matter")),bt=y(require("isomorphic-dompurify"))});var Rt={};Fe(Rt,{AssetCache:()=>St,FileCache:()=>K,TransformCache:()=>J,flushCache:()=>Ne});async function Ne(){await O.flush()}var C,S,A,L,z,it,Ee,nt,Dt,oo,Bt,je,Le,Ae,ze,Ct,$t,O,K,J,St,X=xt(()=>{"use strict";u();C=y(require("fs")),S=y(require("path")),A=y(require("crypto")),L=y(require("zlib")),z=require("util");k();it=(0,z.promisify)(C.default.writeFile),Ee=(0,z.promisify)(C.default.readFile),nt=(0,z.promisify)(C.default.mkdir),Dt=(0,z.promisify)(C.default.rename),oo=(0,z.promisify)(C.default.unlink),Bt=process.env.BOLTDOCS_CACHE_DIR||".boltdocs",je="assets",Le="shards",Ae=parseInt(process.env.BOLTDOCS_CACHE_LRU_LIMIT||"2000",10),ze=process.env.BOLTDOCS_CACHE_COMPRESS!=="0",Ct=class{constructor(t){this.limit=t}cache=new Map;get(t){let e=this.cache.get(t);return e!==void 0&&(this.cache.delete(t),this.cache.set(t,e)),e}set(t,e){if(this.cache.has(t))this.cache.delete(t);else if(this.cache.size>=this.limit){let r=this.cache.keys().next().value;r!==void 0&&this.cache.delete(r)}this.cache.set(t,e)}get size(){return this.cache.size}clear(){this.cache.clear()}},$t=class{queue=Promise.resolve();pendingCount=0;add(t){this.pendingCount++,this.queue=this.queue.then(t).finally(()=>{this.pendingCount--})}async flush(){await this.queue}get pending(){return this.pendingCount}},O=new $t,K=class{entries=new Map;cachePath=null;compress;constructor(t={}){if(this.compress=t.compress!==void 0?t.compress:ze,t.name){let e=t.root||process.cwd(),r=this.compress?"json.gz":"json";this.cachePath=S.default.resolve(e,Bt,`${t.name}.${r}`)}}load(){if(process.env.BOLTDOCS_NO_CACHE!=="1"&&!(!this.cachePath||!C.default.existsSync(this.cachePath)))try{let t=C.default.readFileSync(this.cachePath);this.cachePath.endsWith(".gz")&&(t=L.default.gunzipSync(t));let e=JSON.parse(t.toString("utf-8"));this.entries=new Map(Object.entries(e))}catch{}}save(){if(process.env.BOLTDOCS_NO_CACHE==="1"||!this.cachePath)return;let t=Object.fromEntries(this.entries),e=JSON.stringify(t),r=this.cachePath,i=this.compress;O.add(async()=>{try{await nt(S.default.dirname(r),{recursive:!0});let s=Buffer.from(e);i&&(s=L.default.gzipSync(s));let a=`${r}.${A.default.randomBytes(4).toString("hex")}.tmp`;await it(a,s),await Dt(a,r)}catch{}})}get(t){let e=this.entries.get(t);return!e||ot(t)!==e.mtime?null:e.data}set(t,e){this.entries.set(t,{data:e,mtime:ot(t)})}isValid(t){let e=this.entries.get(t);return e?ot(t)===e.mtime:!1}invalidate(t){this.entries.delete(t)}invalidateAll(){this.entries.clear()}pruneStale(t){for(let e of this.entries.keys())t.has(e)||this.entries.delete(e)}get size(){return this.entries.size}async flush(){await O.flush()}},J=class{index=new Map;memoryCache=new Ct(Ae);baseDir;shardsDir;indexPath;constructor(t,e=process.cwd()){this.baseDir=S.default.resolve(e,Bt,`transform-${t}`),this.shardsDir=S.default.resolve(this.baseDir,Le),this.indexPath=S.default.resolve(this.baseDir,"index.json")}load(){if(process.env.BOLTDOCS_NO_CACHE!=="1"&&C.default.existsSync(this.indexPath))try{let t=C.default.readFileSync(this.indexPath,"utf-8");this.index=new Map(Object.entries(JSON.parse(t)))}catch{}}save(){if(process.env.BOLTDOCS_NO_CACHE==="1")return;let t=JSON.stringify(Object.fromEntries(this.index)),e=this.indexPath;O.add(async()=>{await nt(S.default.dirname(e),{recursive:!0}),await it(e,t)})}async getMany(t){let e=new Map,r=[];for(let i of t){let s=this.memoryCache.get(i);s?e.set(i,s):this.index.has(i)&&r.push(i)}if(r.length>0){let i=await Promise.all(r.map(async s=>{let a=this.index.get(s),p=S.default.resolve(this.shardsDir,`${a}.gz`);try{let n=await Ee(p),c=L.default.gunzipSync(n).toString("utf-8");return this.memoryCache.set(s,c),{key:s,val:c}}catch{return null}}));for(let s of i)s&&e.set(s.key,s.val)}return e}get(t){let e=this.memoryCache.get(t);if(e)return e;let r=this.index.get(t);if(!r)return null;let i=S.default.resolve(this.shardsDir,`${r}.gz`);if(!C.default.existsSync(i))return null;try{let s=C.default.readFileSync(i),a=L.default.gunzipSync(s).toString("utf-8");return this.memoryCache.set(t,a),a}catch{return null}}set(t,e){let r=A.default.createHash("md5").update(e).digest("hex");this.index.set(t,r),this.memoryCache.set(t,e);let i=S.default.resolve(this.shardsDir,`${r}.gz`);O.add(async()=>{if(C.default.existsSync(i))return;await nt(this.shardsDir,{recursive:!0});let s=L.default.gzipSync(Buffer.from(e)),a=`${i}.${A.default.randomBytes(4).toString("hex")}.tmp`;await it(a,s),await Dt(a,i)})}get size(){return this.index.size}async flush(){await O.flush()}},St=class{assetsDir;constructor(t=process.cwd()){this.assetsDir=S.default.resolve(t,Bt,je)}getFileHash(t){return A.default.createHash("md5").update(C.default.readFileSync(t)).digest("hex")}get(t,e){if(!C.default.existsSync(t))return null;let r=this.getFileHash(t),i=this.getCachedPath(t,`${e}-${r}`);return C.default.existsSync(i)?i:null}set(t,e,r){let i=this.getFileHash(t),s=this.getCachedPath(t,`${e}-${i}`);O.add(async()=>{await nt(this.assetsDir,{recursive:!0});let a=`${s}.${A.default.randomBytes(4).toString("hex")}.tmp`;await it(a,r),await Dt(a,s)})}getCachedPath(t,e){let r=S.default.extname(t),i=S.default.basename(t,r),s=e.replace(/[^a-z0-9]/gi,"-").toLowerCase();return S.default.join(this.assetsDir,`${i}.${s}${r}`)}clear(){C.default.existsSync(this.assetsDir)&&C.default.rmSync(this.assetsDir,{recursive:!0,force:!0})}async flush(){await O.flush()}}});u();var Pe=y(require("cac"));u();var U=require("vite");u();var fe=y(require("@vitejs/plugin-react")),he=y(require("@tailwindcss/vite"));u();var ie=require("vite");u();var Vt=y(require("fast-glob"));k();u();X();var T=new K({name:"routes"});function Mt(){T.invalidateAll()}function kt(o){T.invalidate(o)}u();var N=y(require("path")),Nt=y(require("github-slugger"));k();function Ut(o,t,e,r){let i=decodeURIComponent(o),s=N.default.resolve(i),a=N.default.resolve(t),p=R(N.default.relative(a,s));if(p.startsWith("../")||p===".."||s.includes("\0"))throw new Error(`Security breach: File is outside of docs directory or contains null bytes: ${o}`);let{data:n,content:c}=At(o),l=p.split("/"),g,v;if(r?.versions&&l.length>0){let B=l[0];r.versions.versions[B]&&(v=B,l=l.slice(1))}if(r?.i18n&&l.length>0){let B=l[0];r.i18n.locales[B]&&(g=B,l=l.slice(1))}let x;if(l.length>0){let B=l[0].match(/^\((.+)\)$/);B&&(x=B[1].toLowerCase(),l=l.slice(1))}let d=l.join("/"),m;n.permalink?m=n.permalink.startsWith("/")?n.permalink:`/${n.permalink}`:m=zt(d||"index.md");let h=e;v&&(h+="/"+v),g&&(h+="/"+g),h+=m==="/"?"":m,(!h||h==="")&&(h="/");let f=l[l.length-1],$=q(f),D=q(N.default.basename(o,N.default.extname(o))),w=n.sidebarPosition??et(f),b=l.length>=2?l[0]:void 0,H=b?q(b):void 0,j=l.length>=2&&/^index\.mdx?$/.test($),gt=new Nt.default,It=[],Ce=/^(#{2,4})\s+(.+)$/gm,ft;for(;(ft=Ce.exec(c))!==null;){let B=ft[1].length,Be=ft[2].replace(/\[([^\]]+)\]\([^\)]+\)/g,"$1").replace(/[_*`]/g,"").trim(),Et=V(Be).trim(),Re=gt.slug(Et);It.push({level:B,text:Et,id:Re})}let $e=n.title?V(String(n.title)):D,ht=n.description?V(String(n.description)):"";!ht&&c&&(ht=Pt(c.replace(/^#+.*$/gm,"").replace(/\[([^\]]+)\]\([^\)]+\)/g,"$1").replace(/[_*`]/g,"").replace(/\s+/g," ")).trim().slice(0,160));let Se=n.badge?V(String(n.badge)):void 0,Ht=n.icon?String(n.icon):void 0,De=Ue(c);return{route:{path:h,componentPath:o,filePath:p,title:$e,description:ht,sidebarPosition:w,headings:It,locale:g,version:v,badge:Se,icon:Ht,tab:x,_content:De,_rawContent:c},relativeDir:H,isGroupIndex:j,inferredTab:x,groupMeta:j?{title:n.groupTitle||n.title||(H?W(H):""),position:n.groupPosition??n.sidebarPosition??(b?et(b):void 0),icon:Ht}:void 0,inferredGroupPosition:b?et(b):void 0}}function Ue(o){let t=o.replace(/^#+.*$/gm,"").replace(/\[([^\]]+)\]\([^\)]+\)/g,"$1").replace(/\{[^\}]+\}/g,"").replace(/[_*`]/g,"").replace(/\s+/g," ");return Pt(t).trim()}u();function qt(o){return o.sort((t,e)=>!t.group&&!e.group?Gt(t,e):t.group?e.group?t.group!==e.group?Ge(t,e):Gt(t,e):1:-1)}function Gt(o,t){return o.sidebarPosition!==void 0&&t.sidebarPosition!==void 0?o.sidebarPosition-t.sidebarPosition:o.sidebarPosition!==void 0?-1:t.sidebarPosition!==void 0?1:o.title.localeCompare(t.title)}function Ge(o,t){return o.groupPosition!==void 0&&t.groupPosition!==void 0?o.groupPosition-t.groupPosition:o.groupPosition!==void 0?-1:t.groupPosition!==void 0?1:(o.groupTitle||o.group).localeCompare(t.groupTitle||t.group)}var Z=new Map;async function Q(o,t,e="/docs"){let r=performance.now();T.load(),Z.clear(),(process.env.BOLTDOCS_FORCE_REPARSE==="true"||t?.i18n)&&T.invalidateAll();let i=await(0,Vt.default)(["**/*.md","**/*.mdx"],{cwd:o,absolute:!0,suppressErrors:!0,followSymbolicLinks:!1});T.pruneStale(new Set(i));let s=50,a=[],p=0;for(let d=0;d<i.length;d+=s){let m=i.slice(d,d+s),h=await Promise.all(m.map(async f=>{let $=T.get(f);if($)return p++,$;let D=Ut(f,o,e,t);return T.set(f,D),D}));a.push(...h),d+s<i.length&&await new Promise(f=>setImmediate(f))}T.save();let n=new Map,c=[];for(let d of a)if(d.isGroupIndex&&d.relativeDir&&c.push(d),d.relativeDir){let m=n.get(d.relativeDir);m?(m.position===void 0&&d.inferredGroupPosition!==void 0&&(m.position=d.inferredGroupPosition),!m.icon&&d.route.icon&&(m.icon=d.route.icon)):(m={title:W(d.relativeDir),position:d.inferredGroupPosition,icon:d.route.icon},n.set(d.relativeDir,m))}for(let d of c){let m=n.get(d.relativeDir);d.groupMeta&&(m.title=d.groupMeta.title,d.groupMeta.position!==void 0&&(m.position=d.groupMeta.position),d.groupMeta.icon&&(m.icon=d.groupMeta.icon))}let l=new Array(a.length);for(let d=0;d<a.length;d++){let m=a[d],h=m.relativeDir,f=h?n.get(h):void 0;l[d]={...m.route,group:h,groupTitle:f?.title||(h?W(h):void 0),groupPosition:f?.position,groupIcon:f?.icon}}let g=l;if(t?.i18n){let d=qe(l,t,e);g=[...l,...d]}let v=qt(g),x=performance.now()-r;return console.log(`[boltdocs] Route generation: ${x.toFixed(2)}ms (${i.length} files, ${p} cache hits)`),v}function qe(o,t,e){let r=t.i18n.defaultLocale,i=Object.keys(t.i18n.locales),s=[],a=new Map,p=[];for(let n of o){let c=n.locale||r;a.has(c)||a.set(c,new Set),a.get(c).add(n.path),c===r&&p.push(n)}for(let n of i){if(n===r)continue;let c=a.get(n)||new Set;for(let l of p){let g=Ve(l.path,r,n,e);c.has(g)||s.push({...l,path:g,locale:n})}}return s}function Ve(o,t,e,r){let i=`${o}:${e}`,s=Z.get(i);if(s)return s;let a=r,p=o.match(new RegExp(`^${r}/(v[0-9]+)`));p&&(a+="/"+p[1]);let n=o.substring(a.length),c=`/${t}`;if(n.startsWith(c+"/"))n="/"+e+"/"+n.substring(c.length+1);else if(n===c)n="/"+e;else if(n==="/"||n==="")n="/"+e;else{let g=n.startsWith("/")?"":"/";n="/"+e+g+n}let l=a+n;return Z.size>2e3&&Z.clear(),Z.set(i,l),l}var ne=require("vite-plugin-image-optimizer");u();var rt=y(require("path")),Wt=y(require("fs")),Kt=require("vite");var st=["boltdocs.config.js","boltdocs.config.mjs","boltdocs.config.ts"];async function F(o,t=process.cwd()){let e=t,r={docsDir:rt.default.resolve(o),theme:{title:"Boltdocs",description:"A Vite documentation framework",navbar:[{label:"Home",href:"/"},{label:"Documentation",href:"/docs"}],codeTheme:{light:"github-light",dark:"github-dark"},poweredBy:!0,breadcrumbs:!0}},i={};for(let n of st){let c=rt.default.resolve(e,n);if(Wt.default.existsSync(c))try{let l=await(0,Kt.loadConfigFromFile)({command:"serve",mode:"development"},c,e);if(l){i=l.config;break}}catch(l){console.warn(`[boltdocs] Failed to load config from ${n}:`,l)}}let a={...{title:i.title,description:i.description,logo:i.logo,favicon:i.favicon,ogImage:i.ogImage,navbar:i.navbar,sidebar:i.sidebar,socialLinks:i.socialLinks,footer:i.footer,githubRepo:i.githubRepo,tabs:i.tabs,codeTheme:i.codeTheme,copyMarkdown:i.copyMarkdown,breadcrumbs:i.breadcrumbs,poweredBy:i.poweredBy,communityHelp:i.communityHelp,version:i.version,editLink:i.editLink},...i.themeConfig||{},...i.theme||{}},p=Object.fromEntries(Object.entries(a).filter(([n,c])=>c!==void 0));return p.navbar&&(p.navbar=p.navbar.map(n=>({label:n.label||n.text||"",href:n.href||n.link||n.to||"",items:n.items?.map(c=>({label:c.label||c.text||"",href:c.href||c.link||c.to||""}))}))),{docsDir:rt.default.resolve(o),homePage:i.homePage,theme:{...r.theme,...p},i18n:i.i18n,versions:i.versions,siteUrl:i.siteUrl,plugins:i.plugins||[],external:i.external,integrations:i.integrations,robots:i.robots,vite:i.vite}}u();var I=y(require("fs")),_=y(require("path"));k();var Yt=require("url"),te=require("module");u();k();function Jt(o,t){let e=E(t.title),r=E(t.description);return o.replace(/<title>.*?<\/title>/,`<title>${e}</title>`).replace(/(<meta name="description" content=")[^"]*(")/,`$1${r}$2`).replace(/(<meta property="og:title" content=")[^"]*(")/,`$1${e}$2`).replace(/(<meta property="og:description" content=")[^"]*(")/,`$1${r}$2`).replace(/(<meta name="twitter:title" content=")[^"]*(")/,`$1${e}$2`).replace(/(<meta name="twitter:description" content=")[^"]*(")/,`$1${r}$2`)}u();k();function Xt(o,t){let e=t?.siteUrl?.replace(/\/$/,"")||"https://example.com",r=new Date().toISOString().split("T")[0],i=[{url:"/",priority:"1.0",changefreq:"daily"}];if(t?.i18n){let a=t.i18n.defaultLocale;for(let p of Object.keys(t.i18n.locales))p!==a&&i.push({url:`/${p}/`,priority:"1.0",changefreq:"daily"})}return`<?xml version="1.0" encoding="UTF-8"?>
2
+ "use strict";var Je=Object.create;var Mt=Object.defineProperty;var Ke=Object.getOwnPropertyDescriptor;var Xe=Object.getOwnPropertyNames;var Ye=Object.getPrototypeOf,Ze=Object.prototype.hasOwnProperty;var Tt=(o,t)=>()=>(o&&(t=o(o=0)),t);var Yt=(o,t)=>{for(var e in t)Mt(o,e,{get:t[e],enumerable:!0})},Qe=(o,t,e,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of Xe(t))!Ze.call(o,i)&&i!==e&&Mt(o,i,{get:()=>t[i],enumerable:!(r=Ke(t,i))||r.enumerable});return o};var v=(o,t,e)=>(e=o!=null?Je(Ye(o)):{},Qe(t||!o||!o.__esModule?Mt(e,"default",{value:o,enumerable:!0}):e,o));var to,b,p=Tt(()=>{"use strict";to=()=>typeof document>"u"?new URL(`file:${__filename}`).href:document.currentScript&&document.currentScript.tagName.toUpperCase()==="SCRIPT"?document.currentScript.src:new URL("main.js",document.baseURI).href,b=to()});function R(o){return o.replace(/\\/g,"/")}function Z(o){return o.replace(/^\d+\./,"")}function ut(o){let t=o.match(/^(\d+)\./);return t?parseInt(t[1],10):void 0}function Qt(o){return/\.mdx?$/.test(o)}function gt(o){try{return _t.default.statSync(o).mtimeMs}catch{return 0}}function ft(o){let t=_t.default.readFileSync(o,"utf-8");try{let{data:e,content:r}=(0,Zt.default)(t);return{data:e,content:r}}catch{return{data:{},content:t}}}function E(o){return o.replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/'/g,"&apos;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function Ot(o){return E(o)}function te(o){let e=o.split("/").map(Z).join("/").replace(/\/$/,"");return e=e.replace(/\.mdx?$/,""),(e==="index"||e.endsWith("/index"))&&(e=e.replace(/index$/,"")),e.startsWith("/")||(e="/"+e),e.length>1&&e.endsWith("/")&&(e=e.slice(0,-1)),e}function Q(o){return Ft.default.sanitize(o)}function It(o){return Ft.default.sanitize(o,{ALLOWED_TAGS:[],KEEP_CONTENT:!0})}function tt(o){return o.charAt(0).toUpperCase()+o.slice(1)}function jt(o,t){return o?typeof o=="string"?o:t&&o[t]?o[t]:Object.values(o)[0]||"":""}var _t,Zt,Ft,T=Tt(()=>{"use strict";p();_t=v(require("fs")),Zt=v(require("gray-matter")),Ft=v(require("isomorphic-dompurify"))});var Nt={};Yt(Nt,{AssetCache:()=>At,FileCache:()=>et,TransformCache:()=>ot,flushCache:()=>so});async function so(){await L.flush()}var S,D,G,U,W,ht,eo,yt,Et,xo,zt,oo,io,no,ro,Lt,Ht,L,et,ot,At,it=Tt(()=>{"use strict";p();S=v(require("fs")),D=v(require("path")),G=v(require("crypto")),U=v(require("zlib")),W=require("util");T();ht=(0,W.promisify)(S.default.writeFile),eo=(0,W.promisify)(S.default.readFile),yt=(0,W.promisify)(S.default.mkdir),Et=(0,W.promisify)(S.default.rename),xo=(0,W.promisify)(S.default.unlink),zt=process.env.BOLTDOCS_CACHE_DIR||".boltdocs",oo="assets",io="shards",no=parseInt(process.env.BOLTDOCS_CACHE_LRU_LIMIT||"2000",10),ro=process.env.BOLTDOCS_CACHE_COMPRESS!=="0",Lt=class{constructor(t){this.limit=t}cache=new Map;get(t){let e=this.cache.get(t);return e!==void 0&&(this.cache.delete(t),this.cache.set(t,e)),e}set(t,e){if(this.cache.has(t))this.cache.delete(t);else if(this.cache.size>=this.limit){let r=this.cache.keys().next().value;r!==void 0&&this.cache.delete(r)}this.cache.set(t,e)}get size(){return this.cache.size}clear(){this.cache.clear()}},Ht=class{queue=Promise.resolve();pendingCount=0;add(t){this.pendingCount++,this.queue=this.queue.then(t).finally(()=>{this.pendingCount--})}async flush(){await this.queue}get pending(){return this.pendingCount}},L=new Ht,et=class{entries=new Map;cachePath=null;compress;constructor(t={}){if(this.compress=t.compress!==void 0?t.compress:ro,t.name){let e=t.root||process.cwd(),r=this.compress?"json.gz":"json";this.cachePath=D.default.resolve(e,zt,`${t.name}.${r}`)}}load(){if(process.env.BOLTDOCS_NO_CACHE!=="1"&&!(!this.cachePath||!S.default.existsSync(this.cachePath)))try{let t=S.default.readFileSync(this.cachePath);this.cachePath.endsWith(".gz")&&(t=U.default.gunzipSync(t));let e=JSON.parse(t.toString("utf-8"));this.entries=new Map(Object.entries(e))}catch{}}save(){if(process.env.BOLTDOCS_NO_CACHE==="1"||!this.cachePath)return;let t=Object.fromEntries(this.entries),e=JSON.stringify(t),r=this.cachePath,i=this.compress;L.add(async()=>{try{await yt(D.default.dirname(r),{recursive:!0});let s=Buffer.from(e);i&&(s=U.default.gzipSync(s));let c=`${r}.${G.default.randomBytes(4).toString("hex")}.tmp`;await ht(c,s),await Et(c,r)}catch{}})}get(t){let e=this.entries.get(t);return!e||gt(t)!==e.mtime?null:e.data}set(t,e){this.entries.set(t,{data:e,mtime:gt(t)})}isValid(t){let e=this.entries.get(t);return e?gt(t)===e.mtime:!1}invalidate(t){this.entries.delete(t)}invalidateAll(){this.entries.clear()}pruneStale(t){for(let e of this.entries.keys())t.has(e)||this.entries.delete(e)}get size(){return this.entries.size}async flush(){await L.flush()}},ot=class{index=new Map;memoryCache=new Lt(no);baseDir;shardsDir;indexPath;constructor(t,e=process.cwd()){this.baseDir=D.default.resolve(e,zt,`transform-${t}`),this.shardsDir=D.default.resolve(this.baseDir,io),this.indexPath=D.default.resolve(this.baseDir,"index.json")}load(){if(process.env.BOLTDOCS_NO_CACHE!=="1"&&S.default.existsSync(this.indexPath))try{let t=S.default.readFileSync(this.indexPath,"utf-8");this.index=new Map(Object.entries(JSON.parse(t)))}catch{}}save(){if(process.env.BOLTDOCS_NO_CACHE==="1")return;let t=JSON.stringify(Object.fromEntries(this.index)),e=this.indexPath;L.add(async()=>{await yt(D.default.dirname(e),{recursive:!0}),await ht(e,t)})}async getMany(t){let e=new Map,r=[];for(let i of t){let s=this.memoryCache.get(i);s?e.set(i,s):this.index.has(i)&&r.push(i)}if(r.length>0){let i=await Promise.all(r.map(async s=>{let c=this.index.get(s),u=D.default.resolve(this.shardsDir,`${c}.gz`);try{let n=await eo(u),l=U.default.gunzipSync(n).toString("utf-8");return this.memoryCache.set(s,l),{key:s,val:l}}catch{return null}}));for(let s of i)s&&e.set(s.key,s.val)}return e}get(t){let e=this.memoryCache.get(t);if(e)return e;let r=this.index.get(t);if(!r)return null;let i=D.default.resolve(this.shardsDir,`${r}.gz`);if(!S.default.existsSync(i))return null;try{let s=S.default.readFileSync(i),c=U.default.gunzipSync(s).toString("utf-8");return this.memoryCache.set(t,c),c}catch{return null}}set(t,e){let r=G.default.createHash("md5").update(e).digest("hex");this.index.set(t,r),this.memoryCache.set(t,e);let i=D.default.resolve(this.shardsDir,`${r}.gz`);L.add(async()=>{if(S.default.existsSync(i))return;await yt(this.shardsDir,{recursive:!0});let s=U.default.gzipSync(Buffer.from(e)),c=`${i}.${G.default.randomBytes(4).toString("hex")}.tmp`;await ht(c,s),await Et(c,i)})}get size(){return this.index.size}async flush(){await L.flush()}},At=class{assetsDir;constructor(t=process.cwd()){this.assetsDir=D.default.resolve(t,zt,oo)}getFileHash(t){return G.default.createHash("md5").update(S.default.readFileSync(t)).digest("hex")}get(t,e){if(!S.default.existsSync(t))return null;let r=this.getFileHash(t),i=this.getCachedPath(t,`${e}-${r}`);return S.default.existsSync(i)?i:null}set(t,e,r){let i=this.getFileHash(t),s=this.getCachedPath(t,`${e}-${i}`);L.add(async()=>{await yt(this.assetsDir,{recursive:!0});let c=`${s}.${G.default.randomBytes(4).toString("hex")}.tmp`;await ht(c,r),await Et(c,s)})}getCachedPath(t,e){let r=D.default.extname(t),i=D.default.basename(t,r),s=e.replace(/[^a-z0-9]/gi,"-").toLowerCase();return D.default.join(this.assetsDir,`${i}.${s}${r}`)}clear(){S.default.existsSync(this.assetsDir)&&S.default.rmSync(this.assetsDir,{recursive:!0,force:!0})}async flush(){await L.flush()}}});p();var Ue=v(require("cac"));p();p();var je=require("vite");p();var Fe=v(require("@vitejs/plugin-react")),Oe=v(require("@tailwindcss/vite"));p();var ye=require("vite");p();var re=v(require("fast-glob"));T();p();it();var O=new et({name:"routes"});function Ut(){O.invalidateAll()}function Gt(o){O.invalidate(o)}p();var V=v(require("path")),ee=v(require("github-slugger"));T();function oe(o,t,e,r){let i=decodeURIComponent(o),s=V.default.resolve(i),c=V.default.resolve(t),u=R(V.default.relative(c,s));if(u.startsWith("../")||u===".."||s.includes("\0"))throw new Error(`Security breach: File is outside of docs directory or contains null bytes: ${o}`);let{data:n,content:l}=ft(o),d=u.split("/"),f,w;if(r?.versions&&d.length>0){let k=d[0],Rt=r.versions.prefix||"",pt=r.versions.versions.find(Y=>{let kt=Rt+Y.path;return k===kt||k===Y.path});pt&&(w=pt.path,d=d.slice(1))}if(r?.i18n&&d.length>0){let k=d[0];r.i18n.locales[k]&&(f=k,d=d.slice(1))}let y;if(d.length>0){let k=d[0].match(/^\((.+)\)$/);k&&(y=k[1].toLowerCase(),d=d.slice(1))}let $=d.join("/"),a;n.permalink?a=n.permalink.startsWith("/")?n.permalink:`/${n.permalink}`:a=te($||"index.md");let m=e;w&&(m+="/"+w),f&&(m+="/"+f),m+=a==="/"?"":a,(!m||m==="")&&(m="/");let x=d[d.length-1],h=Z(x),B=Z(V.default.basename(o,V.default.extname(o))),g=n.sidebarPosition??ut(x),P=d.length>=2?d[0]:void 0,C=P?Z(P):void 0,j=d.length>=2&&/^index\.mdx?$/.test(h),N=new ee.default,X=[],Ge=/^(#{2,4})\s+(.+)$/gm;for(let k of l.matchAll(Ge)){let Rt=k[1].length,pt=k[2].replace(/\[([^\]]+)\]\([^\)]+\)/g,"$1").replace(/[_*`]/g,"").trim(),Y=Q(pt).trim(),kt=N.slug(Y);X.push({level:Rt,text:Y,id:kt})}let We=n.title?Q(String(n.title)):B,Dt=n.description?Q(String(n.description)):"";!Dt&&l&&(Dt=It(l.replace(/^#+.*$/gm,"").replace(/\[([^\]]+)\]\([^\)]+\)/g,"$1").replace(/[_*`]/g,"").replace(/\s+/g," ")).trim().slice(0,160));let Ve=n.badge?Q(String(n.badge)):void 0,Xt=n.icon?String(n.icon):void 0,qe=ao(l);return{route:{path:m,componentPath:o,filePath:u,title:We,description:Dt,sidebarPosition:g,headings:X,locale:f,version:w,badge:Ve,icon:Xt,tab:y,_content:qe,_rawContent:l},relativeDir:C,isGroupIndex:j,inferredTab:y,groupMeta:j?{title:n.groupTitle||n.title||(C?tt(C):""),position:n.groupPosition??n.sidebarPosition??(P?ut(P):void 0),icon:Xt}:void 0,inferredGroupPosition:P?ut(P):void 0}}function ao(o){let t=o.replace(/^#+.*$/gm,"").replace(/\[([^\]]+)\]\([^\)]+\)/g,"$1").replace(/\{[^\}]+\}/g,"").replace(/[_*`]/g,"").replace(/\s+/g," ");return It(t).trim()}p();function ne(o){return o.sort((t,e)=>!t.group&&!e.group?ie(t,e):t.group?e.group?t.group!==e.group?co(t,e):ie(t,e):1:-1)}function ie(o,t){return o.sidebarPosition!==void 0&&t.sidebarPosition!==void 0?o.sidebarPosition-t.sidebarPosition:o.sidebarPosition!==void 0?-1:t.sidebarPosition!==void 0?1:o.title.localeCompare(t.title)}function co(o,t){return o.groupPosition!==void 0&&t.groupPosition!==void 0?o.groupPosition-t.groupPosition:o.groupPosition!==void 0?-1:t.groupPosition!==void 0?1:(o.groupTitle||o.group).localeCompare(t.groupTitle||t.group)}var Wt=null,nt=new Map;async function q(o,t,e="/docs",r=!0){let i=performance.now();O.load(),nt.clear(),(process.env.BOLTDOCS_FORCE_REPARSE==="true"||t?.i18n)&&O.invalidateAll();let s;!r&&Wt?s=Wt:(s=await(0,re.default)(["**/*.md","**/*.mdx"],{cwd:o,absolute:!0,suppressErrors:!0,followSymbolicLinks:!1}),Wt=s),O.pruneStale(new Set(s));let c=50,u=[],n=0;for(let a=0;a<s.length;a+=c){let m=s.slice(a,a+c),x=await Promise.all(m.map(async h=>{let B=O.get(h);if(B)return n++,B;let g=oe(h,o,e,t);return O.set(h,g),g}));u.push(...x),a+c<s.length&&await new Promise(h=>setImmediate(h))}O.save();let l=new Map,d=[];for(let a of u)if(a.isGroupIndex&&a.relativeDir&&d.push(a),a.relativeDir){let m=l.get(a.relativeDir);m?(m.position===void 0&&a.inferredGroupPosition!==void 0&&(m.position=a.inferredGroupPosition),!m.icon&&a.route.icon&&(m.icon=a.route.icon)):(m={title:tt(a.relativeDir),position:a.inferredGroupPosition,icon:a.route.icon},l.set(a.relativeDir,m))}for(let a of d){let m=l.get(a.relativeDir);a.groupMeta&&(m.title=a.groupMeta.title,a.groupMeta.position!==void 0&&(m.position=a.groupMeta.position),a.groupMeta.icon&&(m.icon=a.groupMeta.icon))}let f=new Array(u.length);for(let a=0;a<u.length;a++){let m=u[a],x=m.relativeDir,h=x?l.get(x):void 0;f[a]={...m.route,group:x,groupTitle:h?.title||(x?tt(x):void 0),groupPosition:h?.position,groupIcon:h?.icon}}let w=f;if(t?.i18n){let a=lo(f,t,e);w=[...f,...a]}let y=ne(w),$=performance.now()-i;return console.log(`[boltdocs] Route generation: ${$.toFixed(2)}ms (${s.length} files, ${n} cache hits)`),y}function lo(o,t,e){let r=t.i18n.defaultLocale,i=Object.keys(t.i18n.locales),s=[],c=new Map,u=[];for(let n of o){let l=n.locale||r;c.has(l)||c.set(l,new Set),c.get(l).add(n.path),l===r&&u.push(n)}for(let n of i){let l=c.get(n)||new Set;for(let d of u){let f=mo(d.path,r,n,e,t);f!==d.path&&(l.has(f)||s.push({...d,path:f,locale:n}))}}return s}function mo(o,t,e,r,i){let s=`${o}:${e}`,c=nt.get(s);if(c)return c;let u=r;if(i?.versions){let f=i.versions.prefix||"";for(let w of i.versions.versions){let y=f+w.path;if(o.startsWith(`${r}/${y}`)){u+="/"+y;break}if(o.startsWith(`${r}/${w.path}`)){u+="/"+w.path;break}}}let n=o.substring(u.length),l=`/${t}`;if(n.startsWith(l+"/"))n="/"+e+"/"+n.substring(l.length+1);else if(n===l)n="/"+e;else if(n==="/"||n==="")n="/"+e;else{let f=n.startsWith("/")?"":"/";n="/"+e+f+n}let d=u+n;return nt.size>2e3&&nt.clear(),nt.set(s,d),d}var xe=require("vite-plugin-image-optimizer");p();var xt=v(require("path")),se=v(require("fs")),ae=require("vite");var vt=["boltdocs.config.js","boltdocs.config.mjs","boltdocs.config.ts"];async function M(o,t=process.cwd()){let e=t,r={docsDir:xt.default.resolve(o),theme:{title:"Boltdocs",description:"A Vite documentation framework",navbar:[{label:"Home",href:"/"},{label:"Documentation",href:"/docs"}],codeTheme:{light:"github-light",dark:"github-dark"},poweredBy:!0,breadcrumbs:!0}},i={};for(let n of vt){let l=xt.default.resolve(e,n);if(se.default.existsSync(l))try{let d=await(0,ae.loadConfigFromFile)({command:"serve",mode:"development"},l,e);if(d){i=d.config;break}}catch(d){console.warn(`[boltdocs] Failed to load config from ${n}:`,d)}}let c={...{title:i.title,description:i.description,logo:i.logo,favicon:i.favicon,ogImage:i.ogImage,navbar:i.navbar,sidebar:i.sidebar,socialLinks:i.socialLinks,footer:i.footer,githubRepo:i.githubRepo,tabs:i.tabs,codeTheme:i.codeTheme,copyMarkdown:i.copyMarkdown,breadcrumbs:i.breadcrumbs,poweredBy:i.poweredBy,communityHelp:i.communityHelp,version:i.version,editLink:i.editLink},...i.theme||{}},u=Object.fromEntries(Object.entries(c).filter(([n,l])=>l!==void 0));return u.navbar&&(u.navbar=u.navbar.map(n=>({label:n.label||n.text||"",href:n.href||n.link||n.to||"",items:n.items?.map(l=>({label:l.label||l.text||"",href:l.href||l.link||l.to||""}))}))),{docsDir:xt.default.resolve(o),homePage:i.homePage,theme:{...r.theme,...u},i18n:i.i18n,versions:i.versions,siteUrl:i.siteUrl,plugins:i.plugins||[],external:i.external,integrations:i.integrations,robots:i.robots,vite:i.vite}}p();var H=v(require("fs")),I=v(require("path"));T();var pe=require("url"),ue=require("module");p();T();function ce(o,t){let e=E(t.title),r=E(t.description);return o.replace(/<title>.*?<\/title>/,`<title>${e}</title>`).replace(/(<meta name="description" content=")[^"]*(")/,`$1${r}$2`).replace(/(<meta property="og:title" content=")[^"]*(")/,`$1${e}$2`).replace(/(<meta property="og:description" content=")[^"]*(")/,`$1${r}$2`).replace(/(<meta name="twitter:title" content=")[^"]*(")/,`$1${e}$2`).replace(/(<meta name="twitter:description" content=")[^"]*(")/,`$1${r}$2`)}p();T();function le(o,t){let e=t?.siteUrl?.replace(/\/$/,"")||"https://example.com",r=new Date().toISOString().split("T")[0],i=[{url:"/",priority:"1.0",changefreq:"daily"}];if(t?.i18n){let c=t.i18n.defaultLocale;for(let u of Object.keys(t.i18n.locales))u!==c&&i.push({url:`/${u}/`,priority:"1.0",changefreq:"daily"})}return`<?xml version="1.0" encoding="UTF-8"?>
3
3
  <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
4
- ${[...i,...o.map(a=>({url:a,priority:"0.8",changefreq:"weekly"}))].map(a=>` <url>
5
- <loc>${wt(e)}${wt(a.url)}</loc>
4
+ ${[...i,...o.map(c=>({url:c,priority:"0.8",changefreq:"weekly"}))].map(c=>` <url>
5
+ <loc>${Ot(e)}${Ot(c.url)}</loc>
6
6
  <lastmod>${r}</lastmod>
7
- <changefreq>${a.changefreq}</changefreq>
8
- <priority>${a.priority}</priority>
7
+ <changefreq>${c.changefreq}</changefreq>
8
+ <priority>${c.priority}</priority>
9
9
  </url>`).join(`
10
10
  `)}
11
- </urlset>`}u();function at(o){if(typeof o.robots=="string")return o.robots;let t=o.siteUrl?.replace(/\/$/,"")||"",e=o.robots||{},r=e.rules||[{userAgent:"*",allow:"/"}],i=e.sitemaps||(t?[`${t}/sitemap.xml`]:[]),s="";for(let a of r){if(s+=`User-agent: ${a.userAgent}
12
- `,a.disallow){let p=Array.isArray(a.disallow)?a.disallow:[a.disallow];for(let n of p)s+=`Disallow: ${n}
13
- `}if(a.allow){let p=Array.isArray(a.allow)?a.allow:[a.allow];for(let n of p)s+=`Allow: ${n}
11
+ </urlset>`}p();function bt(o){if(typeof o.robots=="string")return o.robots;let t=o.siteUrl?.replace(/\/$/,"")||"",e=o.robots||{},r=e.rules||[{userAgent:"*",allow:"/"}],i=e.sitemaps||(t?[`${t}/sitemap.xml`]:[]),s="";for(let c of r){if(s+=`User-agent: ${c.userAgent}
12
+ `,c.disallow){let u=Array.isArray(c.disallow)?c.disallow:[c.disallow];for(let n of u)s+=`Disallow: ${n}
13
+ `}if(c.allow){let u=Array.isArray(c.allow)?c.allow:[c.allow];for(let n of u)s+=`Allow: ${n}
14
14
  `}s+=`
15
- `}for(let a of i)s+=`Sitemap: ${a}
16
- `;return s.trim()}var We=(0,Yt.fileURLToPath)(P),Zt=_.default.dirname(We),Qt=(0,te.createRequire)(P);async function Tt(o){let{docsDir:t,docsDirName:e,outDir:r,config:i}=o,s=await Q(t,i),a=i?.themeConfig?.title||"Boltdocs",p=i?.themeConfig?.description||"",n=_.default.resolve(Zt,"../client/ssr.js");if(!I.default.existsSync(n)){console.error("[boltdocs] SSR module not found at",n,"- Did you build the core package?");return}let c=Qt("module"),l=c.prototype.require;c.prototype.require=function(f,...$){return f==="virtual:boltdocs-layout"?{__esModule:!0,default:function(w){try{let H=l.apply(this,[_.default.resolve(Zt,"../client/index.js")]).DefaultLayout||(({children:gt})=>gt);return l.apply(this,["react"]).createElement(H,w)}catch{return w.children}}}:l.apply(this,[f,...$])};let{render:g}=Qt(n);c.prototype.require=l;let v=_.default.join(r,"index.html");if(!I.default.existsSync(v)){console.warn("[boltdocs] No index.html found in outDir, skipping SSG.");return}let x=I.default.readFileSync(v,"utf-8");await Promise.all(s.map(async f=>{let $=`${f.title} | ${a}`,D=f.description||p,w={};w[`/${e}/${f.filePath}`]={default:()=>null};try{let b=await g({path:f.path,routes:s,config:i||{},docsDirName:e,modules:w,homePage:void 0}),H=Jt(x,{title:E($),description:E(D)}).replace("<!--app-html-->",b).replace('<div id="root"></div>',`<div id="root">${b}</div>`),j=_.default.join(r,f.path);await I.default.promises.mkdir(j,{recursive:!0}),await I.default.promises.writeFile(_.default.join(j,"index.html"),H,"utf-8")}catch(b){console.error(`[boltdocs] Error SSR rendering route ${f.path}:`,b&&(b.stack||b))}}));let d=Xt(s.map(f=>f.path),i);I.default.writeFileSync(_.default.join(r,"sitemap.xml"),d,"utf-8");let m=at(i);I.default.writeFileSync(_.default.join(r,"robots.txt"),m,"utf-8"),console.log(`[boltdocs] Generated ${s.length} static pages + sitemap.xml + robots.txt`);let{flushCache:h}=await Promise.resolve().then(()=>(X(),Rt));await h()}k();var M=y(require("path"));u();k();var _t=y(require("path")),ee=y(require("fs"));function oe(o,t){let e=o.homePage?`import HomePage from '${R(o.homePage)}';`:"",r=_t.default.resolve(process.cwd(),"index.css"),i=ee.default.existsSync(r)?"import './index.css';":"",s=o.homePage?"homePage: HomePage,":"",a=t?.plugins?.flatMap(x=>Object.entries(x.components||{}))||[],p=a.map(([x,d])=>`import * as _comp_${x} from '${R(d)}';
17
- const ${x} = _comp_${x}.default || _comp_${x}['${x}'] || _comp_${x};`).join(`
18
- `),n=a.map(([x])=>x).join(", "),c=_t.default.basename(o.docsDir||"docs"),l=Object.entries(t?.external||{}),g=l.map(([x,d],m)=>`import _ext_${m} from '${R(d)}';`).join(`
19
- `),v=l.length>0?`externalPages: { ${l.map(([x],d)=>`"${x}": _ext_${d}`).join(", ")} },`:"";return`
15
+ `}for(let c of i)s+=`Sitemap: ${c}
16
+ `;return s.trim()}var po=(0,pe.fileURLToPath)(b),de=I.default.dirname(po),me=(0,ue.createRequire)(b);async function Vt(o){let{docsDir:t,docsDirName:e,outDir:r,config:i}=o,s=await q(t,i),c=I.default.resolve(de,"../client/ssr.js");if(!H.default.existsSync(c)){console.error("[boltdocs] SSR module not found at",c,"- Did you build the core package?");return}let u=me("module"),n=u.prototype.require;u.prototype.require=function(a,...m){return a==="virtual:boltdocs-layout"?{__esModule:!0,default:function(h){try{let g=n.apply(this,[I.default.resolve(de,"../client/index.js")]).DefaultLayout||(({children:C})=>C);return n.apply(this,["react"]).createElement(g,h)}catch{return h.children}}}:n.apply(this,[a,...m])};let{render:l}=me(c);u.prototype.require=n;let d=I.default.join(r,"index.html");if(!H.default.existsSync(d)){console.warn("[boltdocs] No index.html found in outDir, skipping SSG.");return}let f=H.default.readFileSync(d,"utf-8");await Promise.all(s.map(async a=>{let m=jt(i?.theme?.title,a.locale)||"Boltdocs",x=jt(i?.theme?.description,a.locale)||"",h=`${a.title} | ${m}`,B=a.description||x,g={};g[`/${e}/${a.filePath}`]={default:()=>null};try{let P=await l({path:a.path,routes:s,config:i||{},docsDirName:e,modules:g,homePage:void 0}),C=ce(f,{title:E(h),description:E(B)}).replace("<!--app-html-->",P).replace('<div id="root"></div>',`<div id="root">${P}</div>`),j=I.default.join(r,a.path);await H.default.promises.mkdir(j,{recursive:!0}),await H.default.promises.writeFile(I.default.join(j,"index.html"),C,"utf-8")}catch(P){console.error(`[boltdocs] Error SSR rendering route ${a.path}:`,P&&(P.stack||P))}}));let w=le(s.map(a=>a.path),i);H.default.writeFileSync(I.default.join(r,"sitemap.xml"),w,"utf-8");let y=bt(i);H.default.writeFileSync(I.default.join(r,"robots.txt"),y,"utf-8"),console.log(`[boltdocs] Generated ${s.length} static pages + sitemap.xml + robots.txt`);let{flushCache:$}=await Promise.resolve().then(()=>(it(),Nt));await $()}T();var _=v(require("path"));p();T();var qt=v(require("path")),ge=v(require("fs"));function fe(o,t){let e=o.homePage?`import HomePage from '${R(o.homePage)}';`:"",r=qt.default.resolve(process.cwd(),"index.css"),i=ge.default.existsSync(r)?"import './index.css';":"",s=o.homePage?"homePage: HomePage,":"",c=t?.plugins?.flatMap(y=>Object.entries(y.components||{}))||[],u=c.map(([y,$])=>`import * as _comp_${y} from '${R($)}';
17
+ const ${y} = _comp_${y}.default || _comp_${y}['${y}'] || _comp_${y};`).join(`
18
+ `),n=c.map(([y])=>y).join(", "),l=qt.default.basename(o.docsDir||"docs"),d=Object.entries(t?.external||{}),f=d.map(([y,$],a)=>`import _ext_${a} from '${R($)}';`).join(`
19
+ `),w=d.length>0?`externalPages: { ${d.map(([y],$)=>`"${y}": _ext_${$}`).join(", ")} },`:"";return`
20
20
  import { createBoltdocsApp as _createApp } from 'boltdocs/client';
21
21
  import _routes from 'virtual:boltdocs-routes';
22
22
  import _config from 'virtual:boltdocs-config';
23
23
  import _user_mdx_components from 'virtual:boltdocs-mdx-components';
24
24
  ${i}
25
25
  ${e}
26
- ${p}
27
- ${g}
26
+ ${u}
27
+ ${f}
28
28
 
29
29
  _createApp({
30
30
  target: '#root',
31
31
  routes: _routes,
32
- docsDirName: '${c}',
32
+ docsDirName: '${l}',
33
33
  config: _config,
34
- modules: import.meta.glob('/${c}/**/*.{md,mdx}'),
34
+ modules: import.meta.glob('/${l}/**/*.{md,mdx}'),
35
35
  hot: import.meta.hot,
36
36
  ${s}
37
- ${v}
37
+ ${w}
38
38
  components: { ${n}${n?", ":""} ...(_user_mdx_components || {}) },
39
39
  });
40
- `}u();function ct(o){return`<!doctype html>
40
+ `}p();function wt(o){return`<!doctype html>
41
41
  <html lang="en">
42
42
  <head>
43
43
  <meta charset="UTF-8" />
44
44
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
45
- <title>${o.theme?.title||o.themeConfig?.title||"Boltdocs"}</title>
45
+ <title>${o.theme?.title||"Boltdocs"}</title>
46
46
  </head>
47
47
  <body>
48
48
  <div id="root"></div>
49
49
  </body>
50
- </html>`}function Ot(o,t){let e=t.theme||t.themeConfig,r=e?.title||"Boltdocs",i=e?.description||"",s=e?.favicon;!s&&e?.logo&&(typeof e.logo=="string"?s=e.logo:s=e.logo.light||e.logo.dark);let a=[s?`<link rel="icon" href="${s}">`:"",`<meta name="description" content="${i}">`,`<meta property="og:title" content="${r}">`,`<meta property="og:description" content="${i}">`,e?.ogImage?`<meta property="og:image" content="${e.ogImage}">`:"",'<meta property="og:type" content="website">','<meta name="twitter:card" content="summary_large_image">',`<meta name="twitter:title" content="${r}">`,`<meta name="twitter:description" content="${i}">`,e?.ogImage?`<meta name="twitter:image" content="${e.ogImage}">`:"",'<meta name="generator" content="Boltdocs">'].filter(Boolean).join(`
51
- `),p=`
50
+ </html>`}function Jt(o,t){let e=t.theme,r=e?.title||"Boltdocs",i=e?.description||"",s=e?.favicon;!s&&e?.logo&&(typeof e.logo=="string"?s=e.logo:s=e.logo.light||e.logo.dark);let c=[s?`<link rel="icon" href="${s}">`:"",`<meta name="description" content="${i}">`,`<meta property="og:title" content="${r}">`,`<meta property="og:description" content="${i}">`,e?.ogImage?`<meta property="og:image" content="${e.ogImage}">`:"",'<meta property="og:type" content="website">','<meta name="twitter:card" content="summary_large_image">',`<meta name="twitter:title" content="${r}">`,`<meta name="twitter:description" content="${i}">`,e?.ogImage?`<meta name="twitter:image" content="${e.ogImage}">`:"",'<meta name="generator" content="Boltdocs">'].filter(Boolean).join(`
51
+ `),u=`
52
52
  <script>
53
53
  (function() {
54
54
  try {
@@ -65,11 +65,15 @@ _createApp({
65
65
  })();
66
66
  </script>
67
67
  `;return o.includes("<title>")?o=o.replace(/<title>.*?<\/title>/,`<title>${r}</title>`):o=o.replace("</head>",` <title>${r}</title>
68
- </head>`),o=o.replace("</head>",` ${a}
69
- ${p} </head>`),!o.includes("src/main")&&!o.includes("virtual:boltdocs-entry")&&(o=o.replace("</body>",` <script type="module">import "virtual:boltdocs-entry";</script>
70
- </body>`)),o}var lt=y(require("fs"));u();function re(o={},t){let e=M.default.resolve(process.cwd(),o.docsDir||"docs"),r=R(e),i=t,s,a=!1,p=i?.plugins?.flatMap(n=>n.vitePlugins||[])||[];return[{name:"vite-plugin-boltdocs",enforce:"pre",async config(n,c){a=c.command==="build";let l=n.envDir||process.cwd(),g=(0,ie.loadEnv)(c.mode,l,"");return Object.assign(process.env,g),i||(i=await F(e)),{optimizeDeps:{include:["react","react-dom"]}}},configResolved(n){s=n},configureServer(n){n.middlewares.use((m,h,f)=>{if(m.url==="/robots.txt"){let $=at(i);h.statusCode=200,h.setHeader("Content-Type","text/plain"),h.end($);return}f()}),n.middlewares.use(async(m,h,f)=>{let $=m.url?.split("?")[0]||"/";if((m.headers.accept||"").includes("text/html")&&!$.includes(".")){let w=M.default.resolve(process.cwd(),"index.html");if(!lt.default.existsSync(w)){let b=ct(i);b=Ot(b,i),b=await n.transformIndexHtml(m.url||"/",b),h.statusCode=200,h.setHeader("Content-Type","text/html"),h.end(b);return}}f()});let c=st.map(m=>M.default.resolve(process.cwd(),m)),l=["tsx","jsx"],g=l.map(m=>M.default.resolve(e,`layout.${m}`)),v=["tsx","ts","jsx","js"],x=v.map(m=>M.default.resolve(e,`mdx-components.${m}`));n.watcher.add([...c,...x,...g]);let d=async(m,h)=>{let f=R(m);if(st.some(w=>f.endsWith(w))){n.restart();return}if(v.some(w=>f.endsWith(`mdx-components.${w}`))){let w=n.moduleGraph.getModuleById("\0virtual:boltdocs-mdx-components");w&&n.moduleGraph.invalidateModule(w),n.ws.send({type:"full-reload"});return}if(l.some(w=>f.endsWith(`layout.${w}`))){let w=n.moduleGraph.getModuleById("\0virtual:boltdocs-layout");w&&n.moduleGraph.invalidateModule(w),n.ws.send({type:"full-reload"});return}if(!f.startsWith(r)||!Lt(f))return;h==="add"||h==="unlink"?Mt():kt(m);let $=await Q(e,i),D=n.moduleGraph.getModuleById("\0virtual:boltdocs-routes");D&&n.moduleGraph.invalidateModule(D),n.ws.send({type:"custom",event:"boltdocs:routes-update",data:$})};n.watcher.on("add",m=>d(m,"add")),n.watcher.on("unlink",m=>d(m,"unlink")),n.watcher.on("change",m=>d(m,"change"))},resolveId(n){if(n==="virtual:boltdocs-routes"||n==="virtual:boltdocs-config"||n==="virtual:boltdocs-entry"||n==="virtual:boltdocs-mdx-components"||n==="virtual:boltdocs-layout")return"\0"+n},async load(n){if(n==="\0virtual:boltdocs-routes"){let c=await Q(e,i);return`export default ${JSON.stringify(c,null,2)};`}if(n==="\0virtual:boltdocs-config"){let c={theme:i?.theme,themeConfig:i?.themeConfig,integrations:i?.integrations,i18n:i?.i18n,versions:i?.versions,siteUrl:i?.siteUrl};return`export default ${JSON.stringify(c,null,2)};`}if(n==="\0virtual:boltdocs-entry")return oe(o,i);if(n==="\0virtual:boltdocs-mdx-components"){let c=["tsx","ts","jsx","js"],l=null;for(let g of c){let v=M.default.resolve(e,`mdx-components.${g}`);if(lt.default.existsSync(v)){l=v;break}}if(l){let g=R(l);return`import * as components from '${g}';
68
+ </head>`),o=o.replace("</head>",` ${c}
69
+ ${u} </head>`),!o.includes("src/main")&&!o.includes("virtual:boltdocs-entry")&&(o=o.replace("</body>",` <script type="module">import "virtual:boltdocs-entry";</script>
70
+ </body>`)),o}p();function he(o){let t=[];for(let e of o)if(t.push({id:e.path,title:e.title,content:e._content||"",url:e.path,display:e.groupTitle?`${e.groupTitle} > ${e.title}`:e.title,locale:e.locale,version:e.version}),e.headings)for(let r of e.headings)t.push({id:`${e.path}#${r.id}`,title:r.text,content:`${r.text} in ${e.title}`,url:`${e.path}#${r.id}`,display:`${e.title} > ${r.text}`,locale:e.locale,version:e.version});return t}var Kt=v(require("fs"));p();function ve(o={},t){let e=_.default.resolve(process.cwd(),o.docsDir||"docs"),r=R(e),i=t,s,c=!1,u=i?.plugins?.flatMap(n=>n.vitePlugins||[])||[];return[{name:"vite-plugin-boltdocs",enforce:"pre",async config(n,l){c=l.command==="build";let d=n.envDir||process.cwd(),f=(0,ye.loadEnv)(l.mode,d,"");return Object.assign(process.env,f),i||(i=await M(e)),{optimizeDeps:{include:["react","react-dom"],exclude:["boltdocs","boltdocs/client","boltdocs/hooks","boltdocs/primitives","boltdocs/base-ui","boltdocs/mdx","boltdocs/integrations","boltdocs/client/hooks","boltdocs/client/primitives"]}}},configResolved(n){s=n},configureServer(n){n.middlewares.use((a,m,x)=>{if(a.url==="/robots.txt"){let h=bt(i);m.statusCode=200,m.setHeader("Content-Type","text/plain"),m.end(h);return}x()}),n.middlewares.use(async(a,m,x)=>{let h=a.url?.split("?")[0]||"/",B=a.headers.accept||"",g=h==="/"||h.startsWith("/docs")||i.i18n&&Object.keys(i.i18n.locales).some(C=>h.startsWith(`/${C}/docs`)||h===`/${C}`)||i.external&&Object.keys(i.external).some(C=>h.startsWith(C)),P=/\.(js|css|png|jpe?g|gif|svg|ico|webp|woff2?|ttf|otf|mp4|webm|ogg|mp3|wav|flac|aac|pdf|zip|gz|map|json)$/i.test(h);if(B.includes("text/html")&&!P&&g){let C=wt(i);C=Jt(C,i),C=await n.transformIndexHtml(a.url||"/",C),m.statusCode=200,m.setHeader("Content-Type","text/html"),m.end(C);return}x()});let l=vt.map(a=>_.default.resolve(process.cwd(),a)),d=["tsx","jsx"],f=d.map(a=>_.default.resolve(e,`layout.${a}`)),w=["tsx","ts","jsx","js"],y=w.map(a=>_.default.resolve(e,`mdx-components.${a}`));n.watcher.add([...l,...y,...f]);let $=async(a,m)=>{try{let x=R(a);if(vt.some(g=>x.endsWith(g))){n.restart();return}if(w.some(g=>x.endsWith(`mdx-components.${g}`))){let g=n.moduleGraph.getModuleById("\0virtual:boltdocs-mdx-components");g&&n.moduleGraph.invalidateModule(g),n.ws.send({type:"full-reload"});return}if(d.some(g=>x.endsWith(`layout.${g}`))){let g=n.moduleGraph.getModuleById("\0virtual:boltdocs-layout");g&&n.moduleGraph.invalidateModule(g),n.ws.send({type:"full-reload"});return}if(!x.startsWith(r)||!Qt(x))return;if(m==="add"||m==="unlink"){Ut(),i=await M(e);let g=n.moduleGraph.getModuleById("\0virtual:boltdocs-config");g&&n.moduleGraph.invalidateModule(g),n.ws.send({type:"custom",event:"boltdocs:config-update",data:{theme:i?.theme,integrations:i?.integrations,i18n:i?.i18n,versions:i?.versions,siteUrl:i?.siteUrl}})}else Gt(a);let h=await q(e,i,"/docs",m!=="change"),B=n.moduleGraph.getModuleById("\0virtual:boltdocs-routes");B&&n.moduleGraph.invalidateModule(B),n.ws.send({type:"custom",event:"boltdocs:routes-update",data:h})}catch(x){console.error(`[boltdocs] HMR error during ${m} event:`,x)}};n.watcher.on("add",a=>$(a,"add")),n.watcher.on("unlink",a=>$(a,"unlink")),n.watcher.on("change",a=>$(a,"change"))},resolveId(n){if(n==="virtual:boltdocs-routes"||n==="virtual:boltdocs-config"||n==="virtual:boltdocs-entry"||n==="virtual:boltdocs-mdx-components"||n==="virtual:boltdocs-layout"||n==="virtual:boltdocs-search")return"\0"+n},async load(n){if(n==="\0virtual:boltdocs-routes"){let l=await q(e,i);return`export default ${JSON.stringify(l,null,2)};`}if(n==="\0virtual:boltdocs-config"){let l={theme:i?.theme,integrations:i?.integrations,i18n:i?.i18n,versions:i?.versions,siteUrl:i?.siteUrl};return`export default ${JSON.stringify(l,null,2)};`}if(n==="\0virtual:boltdocs-entry")return fe(o,i);if(n==="\0virtual:boltdocs-mdx-components"){let l=["tsx","ts","jsx","js"],d=null;for(let f of l){let w=_.default.resolve(e,`mdx-components.${f}`);if(Kt.default.existsSync(w)){d=w;break}}if(d){let f=R(d);return`import * as components from '${f}';
71
71
  const mdxComponents = components.default || components;
72
72
  export default mdxComponents;
73
- export * from '${g}';`}return"export default {};"}if(n==="\0virtual:boltdocs-layout"){let c=["tsx","jsx"],l=null;for(let g of c){let v=M.default.resolve(e,`layout.${g}`);if(lt.default.existsSync(v)){l=v;break}}return l?`import UserLayout from '${R(l)}';
73
+ export * from '${f}';`}return"export default {};"}if(n==="\0virtual:boltdocs-layout"){let l=["tsx","jsx"],d=null;for(let f of l){let w=_.default.resolve(e,`layout.${f}`);if(Kt.default.existsSync(w)){d=w;break}}return d?`import UserLayout from '${R(d)}';
74
74
  export default UserLayout;`:`import { DefaultLayout } from 'boltdocs/client';
75
- export default DefaultLayout;`}},transformIndexHtml:{order:"pre",handler(n){return Ot(n,i)}},async closeBundle(){if(!a)return;let n=s?.build?.outDir?M.default.resolve(s.root,s.build.outDir):M.default.resolve(process.cwd(),"dist"),c=M.default.basename(e||"docs");await Tt({docsDir:e,docsDirName:c,outDir:n,config:i});let{flushCache:l}=await Promise.resolve().then(()=>(X(),Rt));await l()}},(0,ne.ViteImageOptimizer)({includePublic:!0,png:{quality:80},jpeg:{quality:80},jpg:{quality:80},webp:{quality:80},avif:{quality:80},svg:{multipass:!0,plugins:[{name:"preset-default"}]}}),...p.filter(n=>!!n)]}u();var ae=y(require("@mdx-js/rollup")),ce=y(require("remark-gfm")),le=y(require("remark-frontmatter")),de=y(require("rehype-slug")),me=y(require("crypto")),Ft=require("unist-util-visit"),pe=require("shiki");X();var dt=null;async function ue(o){if(dt)return dt;let t=typeof o=="object"?[o.light,o.dark]:[o??"github-dark"];return["github-light","github-dark"].forEach(e=>{t.includes(e)||t.push(e)}),dt=await(0,pe.createHighlighter)({themes:t,langs:["tsx","jsx","ts","js","json","md","mdx","css","html","bash","sh","yaml","yml"]}),dt}function Ke(o){return async t=>{let e=o?.themeConfig?.codeTheme??{light:"github-light",dark:"github-dark"},r=await ue(e);(0,Ft.visit)(t,["mdxJsxFlowElement","mdxJsxTextElement"],i=>{if(i.name!=="ComponentPreview")return;let s=i.attributes?.find(c=>c.name==="code"),a="";if(s){if(typeof s.value=="string")a=s.value;else if(s.value?.type==="mdxJsxAttributeValueExpression"){let c=s.value.value??"";a=c.match(/^[`'"](.+)[`'"]$/)?.[1]??c}}if(!a)return;let p=typeof e=="object"?{themes:{light:e.light,dark:e.dark},lang:"tsx"}:{theme:e,lang:"tsx"},n=r.codeToHtml(a,p);i.attributes=(i.attributes??[]).filter(c=>c.name!=="highlightedHtml"),i.attributes.push({type:"mdxJsxAttribute",name:"highlightedHtml",value:n})})}}function Je(o){return async t=>{let e=o?.themeConfig?.codeTheme||{light:"github-light",dark:"github-dark"},r=await ue(e);(0,Ft.visit)(t,"element",i=>{if(i.tagName==="pre"&&i.children?.[0]?.tagName==="code"){let s=i.children[0],p=(s.properties?.className||[]).find(v=>v.startsWith("language-")),n=p?p.slice(9):"text",c=s.children[0]?.value||"",l={lang:n};typeof e=="object"?l.themes={light:e.light,dark:e.dark}:l.theme=e;let g=r.codeToHtml(c,l);i.properties.dataHighlighted="true",i.properties.highlightedHtml=g,i.children=[]}})}}var Xe="v3",Y=new J("mdx"),se=!1;function ge(o,t=ae.default){let e=o?.plugins?.flatMap(s=>s.remarkPlugins||[])||[],r=o?.plugins?.flatMap(s=>s.rehypePlugins||[])||[],i=t({remarkPlugins:[ce.default,le.default,[Ke,o],...e],rehypePlugins:[de.default,[Je,o],...r],jsxRuntime:"automatic",providerImportSource:"@mdx-js/react"});return i.isMock&&console.log("MDX PLUGIN IS MOCKED"),{...i,name:"vite-plugin-boltdocs-mdx",async buildStart(){mt=0,pt=0,se||(Y.load(),se=!0),i.buildStart&&await i.buildStart.call(this)},async transform(s,a,p){if(!a.endsWith(".md")&&!a.endsWith(".mdx"))return i.transform?.call(this,s,a,p);console.log(`[boltdocs] Transforming MDX: ${a}`),pt++;let n=me.default.createHash("md5").update(s).digest("hex"),c=`${a}:${n}:${Xe}`,l=Y.get(c);if(l)return mt++,{code:l,map:null};let g=await i.transform.call(this,s,a,p);return g&&typeof g=="object"&&g.code&&Y.set(c,g.code),g},async buildEnd(){console.log(`[boltdocs] MDX Cache Performance: ${mt}/${pt} hits (${Math.round(mt/pt*100)||0}%)`),Y.save(),await Y.flush(),i.buildEnd&&await i.buildEnd.call(this)}}}var mt=0,pt=0;async function ye(o){let t=o?.docsDir||"docs",e=await F(t),r={...o,homePage:o?.homePage||e.homePage};return[...re(r,e),ge(e)]}async function ut(o,t="development"){let e=await F("docs",o);return{root:o,mode:t,plugins:[(0,fe.default)(),(0,he.default)(),await ye({docsDir:e.docsDir,homePage:e.homePage})],...e.vite}}var xe=y(require("path")),tt=y(require("fs"));async function ve(o=process.cwd()){try{let t=await ut(o,"development"),e=await(0,U.createServer)(t);await e.listen(),e.printUrls(),e.bindCLIShortcuts({print:!0})}catch(t){console.error("[boltdocs] Failed to start dev server:",t),process.exit(1)}}async function be(o=process.cwd()){let t=!1,e=xe.default.resolve(o,"index.html");try{if(!tt.default.existsSync(e)){let i=await F("docs",o);tt.default.writeFileSync(e,ct(i),"utf-8"),t=!0}let r=await ut(o,"production");await(0,U.build)(r),console.log("[boltdocs] Build completed successfully.")}catch(r){console.error("[boltdocs] Build failed:",r),process.exit(1)}finally{t&&tt.default.existsSync(e)&&tt.default.unlinkSync(e)}}async function we(o=process.cwd()){try{let t=await ut(o,"production");(await(0,U.preview)(t)).printUrls()}catch(t){console.error("[boltdocs] Failed to start preview server:",t),process.exit(1)}}var G=(0,Pe.default)("boltdocs");G.command("[root]","Start development server").alias("dev").action(ve);G.command("build [root]","Build for production").action(be);G.command("preview [root]","Preview production build").action(we);G.help();G.version("2.0.0");G.parse();
75
+ export default DefaultLayout;`}if(n==="\0virtual:boltdocs-search"){let l=await q(e,i),d=he(l);return`export default ${JSON.stringify(d,null,2)};`}},transformIndexHtml:{order:"pre",handler(n){return Jt(n,i)}},async closeBundle(){if(!c)return;let n=s?.build?.outDir?_.default.resolve(s.root,s.build.outDir):_.default.resolve(process.cwd(),"dist"),l=_.default.basename(e||"docs");await Vt({docsDir:e,docsDirName:l,outDir:n,config:i});let{flushCache:d}=await Promise.resolve().then(()=>(it(),Nt));await d()}},(0,xe.ViteImageOptimizer)({includePublic:!0,png:{quality:80},jpeg:{quality:80},jpg:{quality:80},webp:{quality:80},avif:{quality:80},svg:{multipass:!0,plugins:[{name:"preset-default"}]}}),...u.filter(n=>!!n)]}p();var De=v(require("@mdx-js/rollup")),Re=v(require("remark-gfm")),ke=v(require("remark-frontmatter")),Me=v(require("rehype-slug")),Te=v(require("crypto"));p();it();var be="v3",J=new ot("mdx");p();var $e=require("unist-util-visit");p();var we=require("shiki"),$t=null;async function Pt(o){if($t)return $t;let t=typeof o=="object"?[o.light,o.dark]:[o??"github-dark"];return["github-light","github-dark"].forEach(e=>{t.includes(e)||t.push(e)}),$t=await(0,we.createHighlighter)({themes:t,langs:["tsx","jsx","ts","js","json","md","mdx","css","html","bash","sh","yaml","yml"]}),$t}function Pe(o){return async t=>{let e=o?.theme?.codeTheme??{light:"github-light",dark:"github-dark"},r=await Pt(e);(0,$e.visit)(t,["mdxJsxFlowElement","mdxJsxTextElement"],i=>{if(i.name!=="ComponentPreview")return;let s=i.attributes?.find(l=>l.name==="code"),c="";if(s){if(typeof s.value=="string")c=s.value;else if(s.value?.type==="mdxJsxAttributeValueExpression"){let l=s.value.value??"";c=l.match(/^[`'"](.+)[`'"]$/)?.[1]??l}}if(!c)return;let u=typeof e=="object"?{themes:{light:e.light,dark:e.dark},lang:"tsx"}:{theme:e,lang:"tsx"},n=r.codeToHtml(c,u);i.attributes=(i.attributes??[]).filter(l=>l.name!=="highlightedHtml"),i.attributes.push({type:"mdxJsxAttribute",name:"highlightedHtml",value:n})})}}p();var Ce=require("unist-util-visit");function Se(o){return async t=>{let e=o?.theme?.codeTheme||{light:"github-light",dark:"github-dark"},r=await Pt(e);(0,Ce.visit)(t,"element",i=>{if(i.tagName==="pre"&&i.children?.[0]?.tagName==="code"){let s=i.children[0],u=(s.properties?.className||[]).find(w=>w.startsWith("language-")),n=u?u.slice(9):"text",l=s.children[0]?.value||"",d={lang:n};typeof e=="object"?d.themes={light:e.light,dark:e.dark}:d.theme=e;let f=r.codeToHtml(l,d);i.properties.dataHighlighted="true",i.properties.highlightedHtml=f,i.children=[]}})}}var Be=!1,Ct=0,rt=0;function _e(o,t=De.default){let e=o?.plugins?.flatMap(s=>s.remarkPlugins||[])||[],r=o?.plugins?.flatMap(s=>s.rehypePlugins||[])||[],i=t({remarkPlugins:[Re.default,ke.default,[Pe,o],...e],rehypePlugins:[Me.default,[Se,o],...r],jsxRuntime:"automatic",providerImportSource:"@mdx-js/react"});return{...i,name:"vite-plugin-boltdocs-mdx",async buildStart(){Ct=0,rt=0,Be||(J.load(),Be=!0),i.buildStart&&await i.buildStart.call(this)},async transform(s,c,u){if(!c.endsWith(".md")&&!c.endsWith(".mdx"))return i.transform?.call(this,s,c,u);console.log(`[boltdocs] Transforming MDX: ${c}`),rt++;let n=Te.default.createHash("md5").update(s).digest("hex"),l=`${c}:${n}:${be}`,d=J.get(l);if(d)return Ct++,{code:d,map:null};let f=await i.transform.call(this,s,c,u);return f&&typeof f=="object"&&f.code&&J.set(l,f.code),f},async buildEnd(){rt>0&&console.log(`[boltdocs] MDX Cache Performance: ${Ct}/${rt} hits (${Math.round(Ct/rt*100)||0}%)`),J.save(),await J.flush(),i.buildEnd&&await i.buildEnd.call(this)}}}async function Ie(o){let t=o?.docsDir||"docs",e=await M(t),r={...o,homePage:o?.homePage||e.homePage};return[...ve(r,e),_e(e)]}async function st(o,t="development"){let e=await M("docs",o);return{root:o,mode:t,plugins:[(0,Fe.default)(),(0,Oe.default)(),await Ie({docsDir:e.docsDir,homePage:e.homePage})],...e.vite}}var lt={};Yt(lt,{colors:()=>K,error:()=>F,formatLog:()=>St,info:()=>at,success:()=>ct});p();var K={reset:"\x1B[0m",bold:"\x1B[1m",red:"\x1B[31m",green:"\x1B[32m",yellow:"\x1B[33m",blue:"\x1B[34m",cyan:"\x1B[36m",gray:"\x1B[90m"};function St(o,t=""){return`${t}${K.bold}[boltdocs]${K.reset} ${o}${K.reset}`}function at(o){console.log(St(o))}function F(o,t){console.error(St(o,K.red)),t&&console.error(t)}function ct(o){console.log(St(o,K.green))}async function Le(o=process.cwd()){try{let t=await st(o,"development"),e=await(0,je.createServer)(t);await e.listen(),e.printUrls(),e.bindCLIShortcuts({print:!0})}catch(t){F("Failed to start dev server:",t),process.exit(1)}}p();var Bt=require("vite");var He=v(require("path")),dt=v(require("fs"));async function Ae(o=process.cwd()){let t=!1,e=He.default.resolve(o,"index.html");try{if(!dt.default.existsSync(e)){let i=await M("docs",o);dt.default.writeFileSync(e,wt(i),"utf-8"),t=!0}let r=await st(o,"production");await(0,Bt.build)(r),ct("Build completed successfully.")}catch(r){F("Build failed:",r),process.exit(1)}finally{t&&dt.default.existsSync(e)&&dt.default.unlinkSync(e)}}async function Ee(o=process.cwd()){try{let t=await st(o,"production");(await(0,Bt.preview)(t)).printUrls()}catch(t){F("Failed to start preview server:",t),process.exit(1)}}p();var A=v(require("path")),mt=v(require("fs")),ze=v(require("fast-glob"));T();async function Ne(o=process.cwd()){let{colors:t}=lt;at(`${t.bold}Running documentation health check...${t.reset}
76
+ `);let e=performance.now();try{let r=await M("docs",o),i=A.default.resolve(o,"docs");mt.default.existsSync(i)||(F(`Documentation directory not found at ${i}`),process.exit(1));let s=await(0,ze.default)(["**/*.md","**/*.mdx"],{cwd:i,absolute:!0,suppressErrors:!0}),c=0,u=0,n=0,l=new Map,d=(y,$)=>{let a=A.default.relative(i,y),m=l.get(a);m||(m=[],l.set(a,m)),m.push($),$.level==="high"?c++:$.level==="warning"?u++:$.level==="low"&&n++},f="/docs";for(let y of s){let{data:$,content:a}=ft(y);$.title||d(y,{level:"warning",message:'Missing "title" in frontmatter.',suggestion:"Add `title: Your Title` to the YAML frontmatter at the top of the file."}),$.description||d(y,{level:"low",message:'Missing "description" in frontmatter.',suggestion:"Adding a description helps with SEO and search previews."});let m=/\[.*?\]\((.*?)\)/g,x=/<a\s+[^>]*href=["']([^"']+)["'][^>]*>/g,h=[...a.matchAll(m),...a.matchAll(x)];for(let B of h){let g=B[1];if(!g||g.startsWith("http")||g.startsWith("https")||g.startsWith("#")||g.startsWith("mailto:")||g.startsWith("tel:")||(g=g.split("#")[0],!g))continue;let P;if(g.startsWith("/")){let N=g;(g.startsWith(f+"/")||g===f)&&(N=g.substring(f.length)),P=A.default.join(i,N)}else P=A.default.resolve(A.default.dirname(y),g);let C=["",".md",".mdx","/index.md","/index.mdx"],j=!1;for(let N of C){let X=P+N;if(mt.default.existsSync(X)&&mt.default.statSync(X).isFile()){j=!0;break}}j||d(y,{level:"high",message:`Broken internal link: "${g}"`,suggestion:`Ensure the file exists at "${P}". If it's a directory, ensure it has an "index.md" or "index.mdx".`})}}if(r.i18n){let{defaultLocale:y,locales:$}=r.i18n,a=Object.keys($).filter(m=>m!==y);for(let m of s){let h=R(A.default.relative(i,m)).split("/");if(h[0]===y){let B=h.slice(1).join("/");for(let g of a){let P=[g,...h.slice(1)],C=A.default.join(i,...P);mt.default.existsSync(C)||d(m,{level:"warning",message:`Missing translation for locale "${g}"`,suggestion:`Create a translated version of this file at "${g}/${B}".`})}}}}if(l.size===0)ct(`All documentation files are healthy!
77
+ `);else{for(let[y,$]of l.entries()){console.log(`\u{1F4C4} ${t.bold}${y}${t.reset}`);let a=$.sort((m,x)=>{let h={high:1,warning:2,low:3};return h[m.level]-h[x.level]});for(let m of a){let x="",h="";m.level==="high"?(x="\u274C",h=t.red):m.level==="warning"?(x="\u26A0\uFE0F",h=t.yellow):(x="\u2139\uFE0F",h=t.cyan),console.log(` ${h}${x} ${m.level.toUpperCase()}:${t.reset} ${m.message}`),m.suggestion&&console.log(` ${t.gray}\u{1F4A1} Suggestion: ${m.suggestion}${t.reset}`)}console.log("")}console.log(`${t.bold}Summary:${t.reset}`),console.log(` ${t.red}${c} high-level errors${t.reset}`),console.log(` ${t.yellow}${u} warnings${t.reset}`),console.log(` ${t.cyan}${n} minor improvements${t.reset}
78
+ `),c>0&&F("HIGH ERROR: Fix these to ensure your documentation builds correctly."),(u>0||n>0)&&at("TIP: Address warnings and suggestions for premium quality docs."),console.log("")}let w=performance.now()-e;at(`Finished in ${w.toFixed(2)}ms
79
+ `),c>0&&process.exit(1)}catch(r){F("Failed to run doctor check:",r),process.exit(1)}}var z=(0,Ue.default)("boltdocs");z.command("[root]","Start development server").alias("dev").action(Le);z.command("build [root]","Build for production").action(Ae);z.command("preview [root]","Preview production build").action(Ee);z.command("doctor [root]","Check documentation health").action(Ne);z.help();z.version("2.0.0");z.parse();
@@ -1,2 +1,6 @@
1
1
  #!/usr/bin/env node
2
- import{b as a,d as l,e as b,g as c,h as y}from"../chunk-V2ZHKQSP.mjs";import{a as u,b as w,c as i}from"../chunk-PNXZMUCO.mjs";import{createServer as S,build as h,preview as A}from"vite";import C from"path";import n from"fs";async function d(o=process.cwd()){try{let e=await c(o,"development"),t=await S(e);await t.listen(),t.printUrls(),t.bindCLIShortcuts({print:!0})}catch(e){console.error("[boltdocs] Failed to start dev server:",e),process.exit(1)}}async function p(o=process.cwd()){let e=!1,t=C.resolve(o,"index.html");try{if(!n.existsSync(t)){let f=await a("docs",o);n.writeFileSync(t,l(f),"utf-8"),e=!0}let s=await c(o,"production");await h(s),console.log("[boltdocs] Build completed successfully.")}catch(s){console.error("[boltdocs] Build failed:",s),process.exit(1)}finally{e&&n.existsSync(t)&&n.unlinkSync(t)}}async function v(o=process.cwd()){try{let e=await c(o,"production");(await A(e)).printUrls()}catch(e){console.error("[boltdocs] Failed to start preview server:",e),process.exit(1)}}var m=u(()=>{"use strict";i();y();b()});import B from"cac";var F=w(()=>{i();m();var r=B("boltdocs");r.command("[root]","Start development server").alias("dev").action(d);r.command("build [root]","Build for production").action(p);r.command("preview [root]","Preview production build").action(v);r.help();r.version("2.0.0");r.parse()});export default F();
2
+ import{b as L,c as ie,e as V,f as re,h as w,i as Y}from"../chunk-22NXDNP4.mjs";import{a as v,b as te,c as oe,d as n,e as D,i as G,q as se}from"../chunk-Y4RRHPXC.mjs";var S={};oe(S,{colors:()=>x,error:()=>a,formatLog:()=>W,info:()=>b,success:()=>A});function W(s,e=""){return`${e}${x.bold}[boltdocs]${x.reset} ${s}${x.reset}`}function b(s){console.log(W(s))}function a(s,e){console.error(W(s,x.red)),e&&console.error(e)}function A(s){console.log(W(s,x.green))}var x,C=v(()=>{"use strict";n();x={reset:"\x1B[0m",bold:"\x1B[1m",red:"\x1B[31m",green:"\x1B[32m",yellow:"\x1B[33m",blue:"\x1B[34m",cyan:"\x1B[36m",gray:"\x1B[90m"}});import{createServer as ne}from"vite";async function q(s=process.cwd()){try{let e=await w(s,"development"),l=await ne(e);await l.listen(),l.printUrls(),l.bindCLIShortcuts({print:!0})}catch(e){a("Failed to start dev server:",e),process.exit(1)}}var J=v(()=>{"use strict";n();Y();C()});import{build as le,preview as ce}from"vite";import ae from"path";import M from"fs";async function K(s=process.cwd()){let e=!1,l=ae.resolve(s,"index.html");try{if(!M.existsSync(l)){let f=await L("docs",s);M.writeFileSync(l,V(f),"utf-8"),e=!0}let g=await w(s,"production");await le(g),A("Build completed successfully.")}catch(g){a("Build failed:",g),process.exit(1)}finally{e&&M.existsSync(l)&&M.unlinkSync(l)}}async function N(s=process.cwd()){try{let e=await w(s,"production");(await ce(e)).printUrls()}catch(e){a("Failed to start preview server:",e),process.exit(1)}}var Q=v(()=>{"use strict";n();Y();re();C()});import u from"path";import R from"fs";import fe from"fast-glob";async function X(s=process.cwd()){let{colors:e}=S;b(`${e.bold}Running documentation health check...${e.reset}
3
+ `);let l=performance.now();try{let g=await L("docs",s),f=u.resolve(s,"docs");R.existsSync(f)||(a(`Documentation directory not found at ${f}`),process.exit(1));let T=await fe(["**/*.md","**/*.mdx"],{cwd:f,absolute:!0,suppressErrors:!0}),k=0,B=0,j=0,P=new Map,F=(r,c)=>{let m=u.relative(f,r),t=P.get(m);t||(t=[],P.set(m,t)),t.push(c),c.level==="high"?k++:c.level==="warning"?B++:c.level==="low"&&j++},E="/docs";for(let r of T){let{data:c,content:m}=G(r);c.title||F(r,{level:"warning",message:'Missing "title" in frontmatter.',suggestion:"Add `title: Your Title` to the YAML frontmatter at the top of the file."}),c.description||F(r,{level:"low",message:'Missing "description" in frontmatter.',suggestion:"Adding a description helps with SEO and search previews."});let t=/\[.*?\]\((.*?)\)/g,d=/<a\s+[^>]*href=["']([^"']+)["'][^>]*>/g,i=[...m.matchAll(t),...m.matchAll(d)];for(let H of i){let o=H[1];if(!o||o.startsWith("http")||o.startsWith("https")||o.startsWith("#")||o.startsWith("mailto:")||o.startsWith("tel:")||(o=o.split("#")[0],!o))continue;let h;if(o.startsWith("/")){let I=o;(o.startsWith(E+"/")||o===E)&&(I=o.substring(E.length)),h=u.join(f,I)}else h=u.resolve(u.dirname(r),o);let O=["",".md",".mdx","/index.md","/index.mdx"],U=!1;for(let I of O){let z=h+I;if(R.existsSync(z)&&R.statSync(z).isFile()){U=!0;break}}U||F(r,{level:"high",message:`Broken internal link: "${o}"`,suggestion:`Ensure the file exists at "${h}". If it's a directory, ensure it has an "index.md" or "index.mdx".`})}}if(g.i18n){let{defaultLocale:r,locales:c}=g.i18n,m=Object.keys(c).filter(t=>t!==r);for(let t of T){let i=D(u.relative(f,t)).split("/");if(i[0]===r){let H=i.slice(1).join("/");for(let o of m){let h=[o,...i.slice(1)],O=u.join(f,...h);R.existsSync(O)||F(t,{level:"warning",message:`Missing translation for locale "${o}"`,suggestion:`Create a translated version of this file at "${o}/${H}".`})}}}}if(P.size===0)A(`All documentation files are healthy!
4
+ `);else{for(let[r,c]of P.entries()){console.log(`\u{1F4C4} ${e.bold}${r}${e.reset}`);let m=c.sort((t,d)=>{let i={high:1,warning:2,low:3};return i[t.level]-i[d.level]});for(let t of m){let d="",i="";t.level==="high"?(d="\u274C",i=e.red):t.level==="warning"?(d="\u26A0\uFE0F",i=e.yellow):(d="\u2139\uFE0F",i=e.cyan),console.log(` ${i}${d} ${t.level.toUpperCase()}:${e.reset} ${t.message}`),t.suggestion&&console.log(` ${e.gray}\u{1F4A1} Suggestion: ${t.suggestion}${e.reset}`)}console.log("")}console.log(`${e.bold}Summary:${e.reset}`),console.log(` ${e.red}${k} high-level errors${e.reset}`),console.log(` ${e.yellow}${B} warnings${e.reset}`),console.log(` ${e.cyan}${j} minor improvements${e.reset}
5
+ `),k>0&&a("HIGH ERROR: Fix these to ensure your documentation builds correctly."),(B>0||j>0)&&b("TIP: Address warnings and suggestions for premium quality docs."),console.log("")}let ee=performance.now()-l;b(`Finished in ${ee.toFixed(2)}ms
6
+ `),k>0&&process.exit(1)}catch(g){a("Failed to run doctor check:",g),process.exit(1)}}var Z=v(()=>{"use strict";n();ie();se();C()});var _=v(()=>{"use strict";n();J();Q();Z();C()});import me from"cac";var de=te(()=>{n();_();var p=me("boltdocs");p.command("[root]","Start development server").alias("dev").action(q);p.command("build [root]","Build for production").action(K);p.command("preview [root]","Preview production build").action(N);p.command("doctor [root]","Check documentation health").action(X);p.help();p.version("2.0.0");p.parse()});export default de();
@@ -21,10 +21,10 @@ interface BoltdocsFooterConfig {
21
21
  * Theme-specific configuration options governing the appearance and navigation of the site.
22
22
  */
23
23
  interface BoltdocsThemeConfig {
24
- /** The global title of the documentation site */
25
- title?: string;
26
- /** The global description of the site (used for SEO) */
27
- description?: string;
24
+ /** The global title of the documentation site (can be translated) */
25
+ title?: string | Record<string, string>;
26
+ /** The global description of the site (can be translated) */
27
+ description?: string | Record<string, string>;
28
28
  /** URL path to the site logo or an object for light/dark versions */
29
29
  logo?: string | {
30
30
  dark: string;
@@ -35,13 +35,15 @@ interface BoltdocsThemeConfig {
35
35
  };
36
36
  /** Items to display in the top navigation bar */
37
37
  navbar?: Array<{
38
- /** Text to display */
39
- label: string;
38
+ /** Text to display (can be a string or a map of translations) */
39
+ label: string | Record<string, string>;
40
40
  /** URL path or external link */
41
41
  href: string;
42
42
  /** Nested items for NavigationMenu */
43
43
  items?: Array<{
44
- label: string;
44
+ /** Text to display (can be a string or a map of translations) */
45
+ label: string | Record<string, string>;
46
+ /** URL path or external link */
45
47
  href: string;
46
48
  }>;
47
49
  }>;
@@ -81,7 +83,8 @@ interface BoltdocsThemeConfig {
81
83
  */
82
84
  tabs?: Array<{
83
85
  id: string;
84
- text: string;
86
+ /** Text to display (can be a string or a map of translations) */
87
+ text: string | Record<string, string>;
85
88
  icon?: string;
86
89
  }>;
87
90
  /**
@@ -119,23 +122,52 @@ type BoltdocsRobotsConfig = string | {
119
122
  /** Sitemaps to include in the robots.txt */
120
123
  sitemaps?: string[];
121
124
  };
125
+ /**
126
+ * Configuration for a specific locale.
127
+ */
128
+ interface BoltdocsLocaleConfig {
129
+ /** The display name of the locale */
130
+ label?: string;
131
+ /** The text direction (ltr or rtl) */
132
+ direction?: 'ltr' | 'rtl';
133
+ /** The HTML lang attribute value (e.g., 'en-US') */
134
+ htmlLang?: string;
135
+ /** The calendar system to use (e.g., 'gregory') */
136
+ calendar?: string;
137
+ }
122
138
  /**
123
139
  * Configuration for internationalization (i18n).
124
140
  */
125
141
  interface BoltdocsI18nConfig {
126
142
  /** The default locale (e.g., 'en') */
127
143
  defaultLocale: string;
128
- /** Available locales and their display names (e.g., { en: 'English', es: 'Español' }) */
144
+ /** Available locales and their basic display names (e.g., { en: 'English', es: 'Español' }) */
129
145
  locales: Record<string, string>;
146
+ /** Detailed configuration for each locale */
147
+ localeConfigs?: Record<string, BoltdocsLocaleConfig>;
148
+ }
149
+ /**
150
+ * Configuration for a specific documentation version.
151
+ */
152
+ interface BoltdocsVersionConfig {
153
+ /** The display name of the version (e.g., 'v2.0') */
154
+ label: string;
155
+ /** The URL path prefix for the version (e.g., '2.0') */
156
+ path: string;
130
157
  }
131
158
  /**
132
159
  * Configuration for documentation versioning.
133
160
  */
134
161
  interface BoltdocsVersionsConfig {
135
- /** The default version (e.g., 'v2') */
162
+ /** The default version path (e.g., 'v2') */
136
163
  defaultVersion: string;
137
- /** Available versions and their display names (e.g., { v1: 'Version 1.x', v2: 'Version 2.x' }) */
138
- versions: Record<string, string>;
164
+ /**
165
+ * Optional prefix for all version paths (e.g., 'v').
166
+ * If set to 'v', version '1.1' will be available at '/docs/v1.1'.
167
+ */
168
+ prefix?: string;
169
+ /** Available versions configurations */
170
+ versions: BoltdocsVersionConfig[];
139
171
  }
140
172
  /**
141
173
  * Defines a Boltdocs plugin that can extend the build process and client-side functionality.
@@ -192,8 +224,6 @@ interface BoltdocsConfig {
192
224
  robots?: BoltdocsRobotsConfig;
193
225
  /** Low-level Vite configuration overrides */
194
226
  vite?: vite.InlineConfig;
195
- /** @deprecated Use theme instead */
196
- themeConfig?: BoltdocsThemeConfig;
197
227
  }
198
228
  declare function defineConfig(config: BoltdocsConfig): BoltdocsConfig;
199
229
  /**
@@ -21,10 +21,10 @@ interface BoltdocsFooterConfig {
21
21
  * Theme-specific configuration options governing the appearance and navigation of the site.
22
22
  */
23
23
  interface BoltdocsThemeConfig {
24
- /** The global title of the documentation site */
25
- title?: string;
26
- /** The global description of the site (used for SEO) */
27
- description?: string;
24
+ /** The global title of the documentation site (can be translated) */
25
+ title?: string | Record<string, string>;
26
+ /** The global description of the site (can be translated) */
27
+ description?: string | Record<string, string>;
28
28
  /** URL path to the site logo or an object for light/dark versions */
29
29
  logo?: string | {
30
30
  dark: string;
@@ -35,13 +35,15 @@ interface BoltdocsThemeConfig {
35
35
  };
36
36
  /** Items to display in the top navigation bar */
37
37
  navbar?: Array<{
38
- /** Text to display */
39
- label: string;
38
+ /** Text to display (can be a string or a map of translations) */
39
+ label: string | Record<string, string>;
40
40
  /** URL path or external link */
41
41
  href: string;
42
42
  /** Nested items for NavigationMenu */
43
43
  items?: Array<{
44
- label: string;
44
+ /** Text to display (can be a string or a map of translations) */
45
+ label: string | Record<string, string>;
46
+ /** URL path or external link */
45
47
  href: string;
46
48
  }>;
47
49
  }>;
@@ -81,7 +83,8 @@ interface BoltdocsThemeConfig {
81
83
  */
82
84
  tabs?: Array<{
83
85
  id: string;
84
- text: string;
86
+ /** Text to display (can be a string or a map of translations) */
87
+ text: string | Record<string, string>;
85
88
  icon?: string;
86
89
  }>;
87
90
  /**
@@ -119,23 +122,52 @@ type BoltdocsRobotsConfig = string | {
119
122
  /** Sitemaps to include in the robots.txt */
120
123
  sitemaps?: string[];
121
124
  };
125
+ /**
126
+ * Configuration for a specific locale.
127
+ */
128
+ interface BoltdocsLocaleConfig {
129
+ /** The display name of the locale */
130
+ label?: string;
131
+ /** The text direction (ltr or rtl) */
132
+ direction?: 'ltr' | 'rtl';
133
+ /** The HTML lang attribute value (e.g., 'en-US') */
134
+ htmlLang?: string;
135
+ /** The calendar system to use (e.g., 'gregory') */
136
+ calendar?: string;
137
+ }
122
138
  /**
123
139
  * Configuration for internationalization (i18n).
124
140
  */
125
141
  interface BoltdocsI18nConfig {
126
142
  /** The default locale (e.g., 'en') */
127
143
  defaultLocale: string;
128
- /** Available locales and their display names (e.g., { en: 'English', es: 'Español' }) */
144
+ /** Available locales and their basic display names (e.g., { en: 'English', es: 'Español' }) */
129
145
  locales: Record<string, string>;
146
+ /** Detailed configuration for each locale */
147
+ localeConfigs?: Record<string, BoltdocsLocaleConfig>;
148
+ }
149
+ /**
150
+ * Configuration for a specific documentation version.
151
+ */
152
+ interface BoltdocsVersionConfig {
153
+ /** The display name of the version (e.g., 'v2.0') */
154
+ label: string;
155
+ /** The URL path prefix for the version (e.g., '2.0') */
156
+ path: string;
130
157
  }
131
158
  /**
132
159
  * Configuration for documentation versioning.
133
160
  */
134
161
  interface BoltdocsVersionsConfig {
135
- /** The default version (e.g., 'v2') */
162
+ /** The default version path (e.g., 'v2') */
136
163
  defaultVersion: string;
137
- /** Available versions and their display names (e.g., { v1: 'Version 1.x', v2: 'Version 2.x' }) */
138
- versions: Record<string, string>;
164
+ /**
165
+ * Optional prefix for all version paths (e.g., 'v').
166
+ * If set to 'v', version '1.1' will be available at '/docs/v1.1'.
167
+ */
168
+ prefix?: string;
169
+ /** Available versions configurations */
170
+ versions: BoltdocsVersionConfig[];
139
171
  }
140
172
  /**
141
173
  * Defines a Boltdocs plugin that can extend the build process and client-side functionality.
@@ -192,8 +224,6 @@ interface BoltdocsConfig {
192
224
  robots?: BoltdocsRobotsConfig;
193
225
  /** Low-level Vite configuration overrides */
194
226
  vite?: vite.InlineConfig;
195
- /** @deprecated Use theme instead */
196
- themeConfig?: BoltdocsThemeConfig;
197
227
  }
198
228
  declare function defineConfig(config: BoltdocsConfig): BoltdocsConfig;
199
229
  /**