boltdocs 2.1.1 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (116) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/dist/base-ui/index.d.mts +25 -0
  3. package/dist/base-ui/index.d.ts +25 -0
  4. package/dist/base-ui/index.js +1 -0
  5. package/dist/base-ui/index.mjs +1 -0
  6. package/dist/{cache-Q4T6VAUL.mjs → cache-CRAZ55X7.mjs} +1 -1
  7. package/dist/chunk-5D6XPYQ3.mjs +74 -0
  8. package/dist/chunk-6QXCKZAT.mjs +1 -0
  9. package/dist/chunk-H4M6P3DM.mjs +1 -0
  10. package/dist/chunk-JD3RSDE4.mjs +1 -0
  11. package/dist/chunk-JXHNX2WN.mjs +1 -0
  12. package/dist/chunk-JZXLCA2E.mjs +1 -0
  13. package/dist/chunk-MZBG4N4W.mjs +1 -0
  14. package/dist/chunk-NBCYHLAA.mjs +1 -0
  15. package/dist/chunk-Q3MLYTIQ.mjs +1 -0
  16. package/dist/chunk-RSII2UPE.mjs +1 -0
  17. package/dist/chunk-T3W44KWY.mjs +1 -0
  18. package/dist/chunk-ZK2266IZ.mjs +1 -0
  19. package/dist/chunk-ZRJ55GGF.mjs +1 -0
  20. package/dist/client/index.d.mts +13 -115
  21. package/dist/client/index.d.ts +13 -115
  22. package/dist/client/index.js +1 -1
  23. package/dist/client/index.mjs +1 -1
  24. package/dist/client/ssr.js +1 -1
  25. package/dist/client/ssr.mjs +1 -1
  26. package/dist/client/types.d.mts +3 -0
  27. package/dist/client/types.d.ts +3 -0
  28. package/dist/client/types.js +1 -0
  29. package/dist/client/types.mjs +0 -0
  30. package/dist/copy-markdown-C-90ixSe.d.ts +15 -0
  31. package/dist/copy-markdown-CbS8X-qe.d.mts +15 -0
  32. package/dist/{client/hooks → hooks}/index.d.mts +25 -12
  33. package/dist/{client/hooks → hooks}/index.d.ts +25 -12
  34. package/dist/hooks/index.js +1 -0
  35. package/dist/hooks/index.mjs +1 -0
  36. package/dist/integrations/index.d.mts +48 -0
  37. package/dist/integrations/index.d.ts +48 -0
  38. package/dist/integrations/index.js +1 -0
  39. package/dist/integrations/index.mjs +1 -0
  40. package/dist/link-DfBwCeZc.d.mts +68 -0
  41. package/dist/link-DfBwCeZc.d.ts +68 -0
  42. package/dist/loading-BqGrFWO5.d.mts +68 -0
  43. package/dist/loading-chS3pm9W.d.ts +68 -0
  44. package/dist/{client/components/mdx → mdx}/index.d.mts +6 -38
  45. package/dist/{client/components/mdx → mdx}/index.d.ts +6 -38
  46. package/dist/mdx/index.js +1 -0
  47. package/dist/mdx/index.mjs +1 -0
  48. package/dist/node/cli-entry.js +27 -27
  49. package/dist/node/cli-entry.mjs +1 -1
  50. package/dist/node/index.d.mts +44 -14
  51. package/dist/node/index.d.ts +44 -14
  52. package/dist/node/index.js +23 -23
  53. package/dist/node/index.mjs +1 -1
  54. package/dist/primitives/index.d.mts +301 -0
  55. package/dist/primitives/index.d.ts +301 -0
  56. package/dist/primitives/index.js +1 -0
  57. package/dist/primitives/index.mjs +1 -0
  58. package/dist/search-dialog-MA5AISC7.mjs +1 -0
  59. package/dist/{types-Cp21DHI6.d.mts → types-j7jvWsJj.d.mts} +63 -17
  60. package/dist/{types-Cp21DHI6.d.ts → types-j7jvWsJj.d.ts} +63 -17
  61. package/dist/{use-routes-xLhumjbV.d.ts → use-routes-Cd806kGw.d.ts} +1 -1
  62. package/dist/{use-routes-8Iei6jTp.d.mts → use-routes-DDL0_jkQ.d.mts} +1 -1
  63. package/package.json +34 -8
  64. package/src/client/app/index.tsx +155 -35
  65. package/src/client/app/mdx-component.tsx +7 -3
  66. package/src/client/app/theme-context.tsx +40 -23
  67. package/src/client/components/default-layout.tsx +12 -6
  68. package/src/client/components/primitives/breadcrumbs.tsx +1 -1
  69. package/src/client/components/primitives/navbar.tsx +5 -2
  70. package/src/client/components/primitives/search-dialog.tsx +12 -3
  71. package/src/client/components/ui-base/breadcrumbs.tsx +1 -1
  72. package/src/client/components/ui-base/index.ts +17 -0
  73. package/src/client/components/ui-base/navbar.tsx +66 -33
  74. package/src/client/components/ui-base/powered-by.tsx +8 -5
  75. package/src/client/components/ui-base/sidebar.tsx +31 -22
  76. package/src/client/components/ui-base/tabs.tsx +4 -1
  77. package/src/client/components/ui-base/theme-toggle.tsx +35 -15
  78. package/src/client/hooks/use-i18n.ts +37 -7
  79. package/src/client/hooks/use-localized-to.ts +45 -68
  80. package/src/client/hooks/use-navbar.ts +10 -3
  81. package/src/client/hooks/use-routes.ts +61 -17
  82. package/src/client/hooks/use-search.ts +21 -5
  83. package/src/client/hooks/use-sidebar.ts +5 -2
  84. package/src/client/hooks/use-version.ts +5 -0
  85. package/src/client/integrations/index.ts +1 -0
  86. package/src/client/store/use-boltdocs-store.ts +43 -0
  87. package/src/client/types.ts +4 -2
  88. package/src/client/utils/i18n.ts +23 -0
  89. package/src/node/config.ts +54 -17
  90. package/src/node/index.ts +1 -1
  91. package/src/node/mdx/cache.ts +12 -0
  92. package/src/node/mdx/highlighter.ts +47 -0
  93. package/src/node/mdx/index.ts +114 -0
  94. package/src/node/mdx/rehype-shiki.ts +53 -0
  95. package/src/node/mdx/remark-shiki.ts +61 -0
  96. package/src/node/plugin/html.ts +8 -4
  97. package/src/node/plugin/index.ts +117 -68
  98. package/src/node/routes/index.ts +34 -13
  99. package/src/node/routes/parser.ts +12 -4
  100. package/src/node/ssg/index.ts +3 -3
  101. package/src/node/utils.ts +32 -2
  102. package/tsup.config.ts +7 -2
  103. package/dist/chunk-52MVMZWS.mjs +0 -1
  104. package/dist/chunk-BVWWKXJH.mjs +0 -1
  105. package/dist/chunk-DVY3RDXD.mjs +0 -1
  106. package/dist/chunk-FUVYCYWC.mjs +0 -1
  107. package/dist/chunk-GBLMDJ2B.mjs +0 -1
  108. package/dist/chunk-ISPX45DF.mjs +0 -1
  109. package/dist/chunk-PNXZMUCO.mjs +0 -1
  110. package/dist/chunk-V2ZHKQSP.mjs +0 -74
  111. package/dist/client/components/mdx/index.js +0 -1
  112. package/dist/client/components/mdx/index.mjs +0 -1
  113. package/dist/client/hooks/index.js +0 -1
  114. package/dist/client/hooks/index.mjs +0 -1
  115. package/dist/search-dialog-TWGYKF2D.mjs +0 -1
  116. package/src/node/mdx.ts +0 -279
@@ -1,22 +1,22 @@
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 Ie=Object.create;var vt=Object.defineProperty;var je=Object.getOwnPropertyDescriptor;var He=Object.getOwnPropertyNames;var Le=Object.getPrototypeOf,Ee=Object.prototype.hasOwnProperty;var bt=(o,t)=>()=>(o&&(t=o(o=0)),t);var Ae=(o,t)=>{for(var e in t)vt(o,e,{get:t[e],enumerable:!0})},ze=(o,t,e,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of He(t))!Ee.call(o,i)&&i!==e&&vt(o,i,{get:()=>t[i],enumerable:!(s=je(t,i))||s.enumerable});return o};var f=(o,t,e)=>(e=o!=null?Ie(Le(o)):{},ze(t||!o||!o.__esModule?vt(e,"default",{value:o,enumerable:!0}):e,o));var Ne,w,m=bt(()=>{"use strict";Ne=()=>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,w=Ne()});function k(o){return o.replace(/\\/g,"/")}function q(o){return o.replace(/^\d+\./,"")}function nt(o){let t=o.match(/^(\d+)\./);return t?parseInt(t[1],10):void 0}function Nt(o){return/\.mdx?$/.test(o)}function rt(o){try{return wt.default.statSync(o).mtimeMs}catch{return 0}}function Ut(o){let t=wt.default.readFileSync(o,"utf-8");try{let{data:e,content:s}=(0,zt.default)(t);return{data:e,content:s}}catch{return{data:{},content:t}}}function H(o){return o.replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/'/g,"&apos;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function Ct(o){return H(o)}function Gt(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 J(o){return Pt.default.sanitize(o)}function $t(o){return Pt.default.sanitize(o,{ALLOWED_TAGS:[],KEEP_CONTENT:!0})}function K(o){return o.charAt(0).toUpperCase()+o.slice(1)}function St(o,t){return o?typeof o=="string"?o:t&&o[t]?o[t]:Object.values(o)[0]||"":""}var wt,zt,Pt,T=bt(()=>{"use strict";m();wt=f(require("fs")),zt=f(require("gray-matter")),Pt=f(require("isomorphic-dompurify"))});var Tt={};Ae(Tt,{AssetCache:()=>Rt,FileCache:()=>X,TransformCache:()=>Z,flushCache:()=>Je});async function Je(){await I.flush()}var C,B,E,L,A,st,Ue,at,kt,ro,Mt,Ge,Ve,We,qe,Bt,Dt,I,X,Z,Rt,Q=bt(()=>{"use strict";m();C=f(require("fs")),B=f(require("path")),E=f(require("crypto")),L=f(require("zlib")),A=require("util");T();st=(0,A.promisify)(C.default.writeFile),Ue=(0,A.promisify)(C.default.readFile),at=(0,A.promisify)(C.default.mkdir),kt=(0,A.promisify)(C.default.rename),ro=(0,A.promisify)(C.default.unlink),Mt=process.env.BOLTDOCS_CACHE_DIR||".boltdocs",Ge="assets",Ve="shards",We=parseInt(process.env.BOLTDOCS_CACHE_LRU_LIMIT||"2000",10),qe=process.env.BOLTDOCS_CACHE_COMPRESS!=="0",Bt=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 s=this.cache.keys().next().value;s!==void 0&&this.cache.delete(s)}this.cache.set(t,e)}get size(){return this.cache.size}clear(){this.cache.clear()}},Dt=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}},I=new Dt,X=class{entries=new Map;cachePath=null;compress;constructor(t={}){if(this.compress=t.compress!==void 0?t.compress:qe,t.name){let e=t.root||process.cwd(),s=this.compress?"json.gz":"json";this.cachePath=B.default.resolve(e,Mt,`${t.name}.${s}`)}}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),s=this.cachePath,i=this.compress;I.add(async()=>{try{await at(B.default.dirname(s),{recursive:!0});let r=Buffer.from(e);i&&(r=L.default.gzipSync(r));let c=`${s}.${E.default.randomBytes(4).toString("hex")}.tmp`;await st(c,r),await kt(c,s)}catch{}})}get(t){let e=this.entries.get(t);return!e||rt(t)!==e.mtime?null:e.data}set(t,e){this.entries.set(t,{data:e,mtime:rt(t)})}isValid(t){let e=this.entries.get(t);return e?rt(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 I.flush()}},Z=class{index=new Map;memoryCache=new Bt(We);baseDir;shardsDir;indexPath;constructor(t,e=process.cwd()){this.baseDir=B.default.resolve(e,Mt,`transform-${t}`),this.shardsDir=B.default.resolve(this.baseDir,Ve),this.indexPath=B.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;I.add(async()=>{await at(B.default.dirname(e),{recursive:!0}),await st(e,t)})}async getMany(t){let e=new Map,s=[];for(let i of t){let r=this.memoryCache.get(i);r?e.set(i,r):this.index.has(i)&&s.push(i)}if(s.length>0){let i=await Promise.all(s.map(async r=>{let c=this.index.get(r),p=B.default.resolve(this.shardsDir,`${c}.gz`);try{let n=await Ue(p),l=L.default.gunzipSync(n).toString("utf-8");return this.memoryCache.set(r,l),{key:r,val:l}}catch{return null}}));for(let r of i)r&&e.set(r.key,r.val)}return e}get(t){let e=this.memoryCache.get(t);if(e)return e;let s=this.index.get(t);if(!s)return null;let i=B.default.resolve(this.shardsDir,`${s}.gz`);if(!C.default.existsSync(i))return null;try{let r=C.default.readFileSync(i),c=L.default.gunzipSync(r).toString("utf-8");return this.memoryCache.set(t,c),c}catch{return null}}set(t,e){let s=E.default.createHash("md5").update(e).digest("hex");this.index.set(t,s),this.memoryCache.set(t,e);let i=B.default.resolve(this.shardsDir,`${s}.gz`);I.add(async()=>{if(C.default.existsSync(i))return;await at(this.shardsDir,{recursive:!0});let r=L.default.gzipSync(Buffer.from(e)),c=`${i}.${E.default.randomBytes(4).toString("hex")}.tmp`;await st(c,r),await kt(c,i)})}get size(){return this.index.size}async flush(){await I.flush()}},Rt=class{assetsDir;constructor(t=process.cwd()){this.assetsDir=B.default.resolve(t,Mt,Ge)}getFileHash(t){return E.default.createHash("md5").update(C.default.readFileSync(t)).digest("hex")}get(t,e){if(!C.default.existsSync(t))return null;let s=this.getFileHash(t),i=this.getCachedPath(t,`${e}-${s}`);return C.default.existsSync(i)?i:null}set(t,e,s){let i=this.getFileHash(t),r=this.getCachedPath(t,`${e}-${i}`);I.add(async()=>{await at(this.assetsDir,{recursive:!0});let c=`${r}.${E.default.randomBytes(4).toString("hex")}.tmp`;await st(c,s),await kt(c,r)})}getCachedPath(t,e){let s=B.default.extname(t),i=B.default.basename(t,s),r=e.replace(/[^a-z0-9]/gi,"-").toLowerCase();return B.default.join(this.assetsDir,`${i}.${r}${s}`)}clear(){C.default.existsSync(this.assetsDir)&&C.default.rmSync(this.assetsDir,{recursive:!0,force:!0})}async flush(){await I.flush()}}});m();var ke=f(require("cac"));m();var U=require("vite");m();var Pe=f(require("@vitejs/plugin-react")),Ce=f(require("@tailwindcss/vite"));m();var se=require("vite");m();var Kt=f(require("fast-glob"));T();m();Q();var _=new X({name:"routes"});function _t(){_.invalidateAll()}function Ot(o){_.invalidate(o)}m();var z=f(require("path")),Vt=f(require("github-slugger"));T();function Wt(o,t,e,s){let i=decodeURIComponent(o),r=z.default.resolve(i),c=z.default.resolve(t),p=k(z.default.relative(c,r));if(p.startsWith("../")||p===".."||r.includes("\0"))throw new Error(`Security breach: File is outside of docs directory or contains null bytes: ${o}`);let{data:n,content:l}=Ut(o),d=p.split("/"),u,y;if(s?.versions&&d.length>0){let R=d[0],yt=s.versions.prefix||"",it=s.versions.versions.find(W=>{let xt=yt+W.path;return R===xt||R===W.path});it&&(y=it.path,d=d.slice(1))}if(s?.i18n&&d.length>0){let R=d[0];s.i18n.locales[R]&&(u=R,d=d.slice(1))}let x;if(d.length>0){let R=d[0].match(/^\((.+)\)$/);R&&(x=R[1].toLowerCase(),d=d.slice(1))}let S=d.join("/"),a;n.permalink?a=n.permalink.startsWith("/")?n.permalink:`/${n.permalink}`:a=Gt(S||"index.md");let g=e;y&&(g+="/"+y),u&&(g+="/"+u),g+=a==="/"?"":a,(!g||g==="")&&(g="/");let b=d[d.length-1],h=q(b),D=q(z.default.basename(o,z.default.extname(o))),v=n.sidebarPosition??nt(b),$=d.length>=2?d[0]:void 0,P=$?q($):void 0,V=d.length>=2&&/^index\.mdx?$/.test(h),Me=new Vt.default,Et=[],Te=/^(#{2,4})\s+(.+)$/gm;for(let R of l.matchAll(Te)){let yt=R[1].length,it=R[2].replace(/\[([^\]]+)\]\([^\)]+\)/g,"$1").replace(/[_*`]/g,"").trim(),W=J(it).trim(),xt=Me.slug(W);Et.push({level:yt,text:W,id:xt})}let _e=n.title?J(String(n.title)):D,ht=n.description?J(String(n.description)):"";!ht&&l&&(ht=$t(l.replace(/^#+.*$/gm,"").replace(/\[([^\]]+)\]\([^\)]+\)/g,"$1").replace(/[_*`]/g,"").replace(/\s+/g," ")).trim().slice(0,160));let Oe=n.badge?J(String(n.badge)):void 0,At=n.icon?String(n.icon):void 0,Fe=Ke(l);return{route:{path:g,componentPath:o,filePath:p,title:_e,description:ht,sidebarPosition:v,headings:Et,locale:u,version:y,badge:Oe,icon:At,tab:x,_content:Fe,_rawContent:l},relativeDir:P,isGroupIndex:V,inferredTab:x,groupMeta:V?{title:n.groupTitle||n.title||(P?K(P):""),position:n.groupPosition??n.sidebarPosition??($?nt($):void 0),icon:At}:void 0,inferredGroupPosition:$?nt($):void 0}}function Ke(o){let t=o.replace(/^#+.*$/gm,"").replace(/\[([^\]]+)\]\([^\)]+\)/g,"$1").replace(/\{[^\}]+\}/g,"").replace(/[_*`]/g,"").replace(/\s+/g," ");return $t(t).trim()}m();function Jt(o){return o.sort((t,e)=>!t.group&&!e.group?qt(t,e):t.group?e.group?t.group!==e.group?Xe(t,e):qt(t,e):1:-1)}function qt(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 Xe(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 Ft=null,Y=new Map;async function tt(o,t,e="/docs",s=!0){let i=performance.now();_.load(),Y.clear(),(process.env.BOLTDOCS_FORCE_REPARSE==="true"||t?.i18n)&&_.invalidateAll();let r;!s&&Ft?r=Ft:(r=await(0,Kt.default)(["**/*.md","**/*.mdx"],{cwd:o,absolute:!0,suppressErrors:!0,followSymbolicLinks:!1}),Ft=r),_.pruneStale(new Set(r));let c=50,p=[],n=0;for(let a=0;a<r.length;a+=c){let g=r.slice(a,a+c),b=await Promise.all(g.map(async h=>{let D=_.get(h);if(D)return n++,D;let v=Wt(h,o,e,t);return _.set(h,v),v}));p.push(...b),a+c<r.length&&await new Promise(h=>setImmediate(h))}_.save();let l=new Map,d=[];for(let a of p)if(a.isGroupIndex&&a.relativeDir&&d.push(a),a.relativeDir){let g=l.get(a.relativeDir);g?(g.position===void 0&&a.inferredGroupPosition!==void 0&&(g.position=a.inferredGroupPosition),!g.icon&&a.route.icon&&(g.icon=a.route.icon)):(g={title:K(a.relativeDir),position:a.inferredGroupPosition,icon:a.route.icon},l.set(a.relativeDir,g))}for(let a of d){let g=l.get(a.relativeDir);a.groupMeta&&(g.title=a.groupMeta.title,a.groupMeta.position!==void 0&&(g.position=a.groupMeta.position),a.groupMeta.icon&&(g.icon=a.groupMeta.icon))}let u=new Array(p.length);for(let a=0;a<p.length;a++){let g=p[a],b=g.relativeDir,h=b?l.get(b):void 0;u[a]={...g.route,group:b,groupTitle:h?.title||(b?K(b):void 0),groupPosition:h?.position,groupIcon:h?.icon}}let y=u;if(t?.i18n){let a=Ze(u,t,e);y=[...u,...a]}let x=Jt(y),S=performance.now()-i;return console.log(`[boltdocs] Route generation: ${S.toFixed(2)}ms (${r.length} files, ${n} cache hits)`),x}function Ze(o,t,e){let s=t.i18n.defaultLocale,i=Object.keys(t.i18n.locales),r=[],c=new Map,p=[];for(let n of o){let l=n.locale||s;c.has(l)||c.set(l,new Set),c.get(l).add(n.path),l===s&&p.push(n)}for(let n of i){let l=c.get(n)||new Set;for(let d of p){let u=Qe(d.path,s,n,e,t);u!==d.path&&(l.has(u)||r.push({...d,path:u,locale:n}))}}return r}function Qe(o,t,e,s,i){let r=`${o}:${e}`,c=Y.get(r);if(c)return c;let p=s;if(i?.versions){let u=i.versions.prefix||"";for(let y of i.versions.versions){let x=u+y.path;if(o.startsWith(`${s}/${x}`)){p+="/"+x;break}if(o.startsWith(`${s}/${y.path}`)){p+="/"+y.path;break}}}let n=o.substring(p.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 u=n.startsWith("/")?"":"/";n="/"+e+u+n}let d=p+n;return Y.size>2e3&&Y.clear(),Y.set(r,d),d}var ae=require("vite-plugin-image-optimizer");m();var ct=f(require("path")),Xt=f(require("fs")),Zt=require("vite");var lt=["boltdocs.config.js","boltdocs.config.mjs","boltdocs.config.ts"];async function O(o,t=process.cwd()){let e=t,s={docsDir:ct.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 lt){let l=ct.default.resolve(e,n);if(Xt.default.existsSync(l))try{let d=await(0,Zt.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||{}},p=Object.fromEntries(Object.entries(c).filter(([n,l])=>l!==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(l=>({label:l.label||l.text||"",href:l.href||l.link||l.to||""}))}))),{docsDir:ct.default.resolve(o),homePage:i.homePage,theme:{...s.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}}m();var j=f(require("fs")),F=f(require("path"));T();var oe=require("url"),ie=require("module");m();T();function Qt(o,t){let e=H(t.title),s=H(t.description);return o.replace(/<title>.*?<\/title>/,`<title>${e}</title>`).replace(/(<meta name="description" content=")[^"]*(")/,`$1${s}$2`).replace(/(<meta property="og:title" content=")[^"]*(")/,`$1${e}$2`).replace(/(<meta property="og:description" content=")[^"]*(")/,`$1${s}$2`).replace(/(<meta name="twitter:title" content=")[^"]*(")/,`$1${e}$2`).replace(/(<meta name="twitter:description" content=")[^"]*(")/,`$1${s}$2`)}m();T();function Yt(o,t){let e=t?.siteUrl?.replace(/\/$/,"")||"https://example.com",s=new Date().toISOString().split("T")[0],i=[{url:"/",priority:"1.0",changefreq:"daily"}];if(t?.i18n){let c=t.i18n.defaultLocale;for(let p of Object.keys(t.i18n.locales))p!==c&&i.push({url:`/${p}/`,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>
6
- <lastmod>${r}</lastmod>
7
- <changefreq>${a.changefreq}</changefreq>
8
- <priority>${a.priority}</priority>
4
+ ${[...i,...o.map(c=>({url:c,priority:"0.8",changefreq:"weekly"}))].map(c=>` <url>
5
+ <loc>${Ct(e)}${Ct(c.url)}</loc>
6
+ <lastmod>${s}</lastmod>
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}
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)}';
11
+ </urlset>`}m();function dt(o){if(typeof o.robots=="string")return o.robots;let t=o.siteUrl?.replace(/\/$/,"")||"",e=o.robots||{},s=e.rules||[{userAgent:"*",allow:"/"}],i=e.sitemaps||(t?[`${t}/sitemap.xml`]:[]),r="";for(let c of s){if(r+=`User-agent: ${c.userAgent}
12
+ `,c.disallow){let p=Array.isArray(c.disallow)?c.disallow:[c.disallow];for(let n of p)r+=`Disallow: ${n}
13
+ `}if(c.allow){let p=Array.isArray(c.allow)?c.allow:[c.allow];for(let n of p)r+=`Allow: ${n}
14
+ `}r+=`
15
+ `}for(let c of i)r+=`Sitemap: ${c}
16
+ `;return r.trim()}var Ye=(0,oe.fileURLToPath)(w),te=F.default.dirname(Ye),ee=(0,ie.createRequire)(w);async function It(o){let{docsDir:t,docsDirName:e,outDir:s,config:i}=o,r=await tt(t,i),c=F.default.resolve(te,"../client/ssr.js");if(!j.default.existsSync(c)){console.error("[boltdocs] SSR module not found at",c,"- Did you build the core package?");return}let p=ee("module"),n=p.prototype.require;p.prototype.require=function(a,...g){return a==="virtual:boltdocs-layout"?{__esModule:!0,default:function(h){try{let v=n.apply(this,[F.default.resolve(te,"../client/index.js")]).DefaultLayout||(({children:P})=>P);return n.apply(this,["react"]).createElement(v,h)}catch{return h.children}}}:n.apply(this,[a,...g])};let{render:l}=ee(c);p.prototype.require=n;let d=F.default.join(s,"index.html");if(!j.default.existsSync(d)){console.warn("[boltdocs] No index.html found in outDir, skipping SSG.");return}let u=j.default.readFileSync(d,"utf-8");await Promise.all(r.map(async a=>{let g=St(i?.theme?.title,a.locale)||"Boltdocs",b=St(i?.theme?.description,a.locale)||"",h=`${a.title} | ${g}`,D=a.description||b,v={};v[`/${e}/${a.filePath}`]={default:()=>null};try{let $=await l({path:a.path,routes:r,config:i||{},docsDirName:e,modules:v,homePage:void 0}),P=Qt(u,{title:H(h),description:H(D)}).replace("<!--app-html-->",$).replace('<div id="root"></div>',`<div id="root">${$}</div>`),V=F.default.join(s,a.path);await j.default.promises.mkdir(V,{recursive:!0}),await j.default.promises.writeFile(F.default.join(V,"index.html"),P,"utf-8")}catch($){console.error(`[boltdocs] Error SSR rendering route ${a.path}:`,$&&($.stack||$))}}));let y=Yt(r.map(a=>a.path),i);j.default.writeFileSync(F.default.join(s,"sitemap.xml"),y,"utf-8");let x=dt(i);j.default.writeFileSync(F.default.join(s,"robots.txt"),x,"utf-8"),console.log(`[boltdocs] Generated ${r.length} static pages + sitemap.xml + robots.txt`);let{flushCache:S}=await Promise.resolve().then(()=>(Q(),Tt));await S()}T();var M=f(require("path"));m();T();var jt=f(require("path")),ne=f(require("fs"));function re(o,t){let e=o.homePage?`import HomePage from '${k(o.homePage)}';`:"",s=jt.default.resolve(process.cwd(),"index.css"),i=ne.default.existsSync(s)?"import './index.css';":"",r=o.homePage?"homePage: HomePage,":"",c=t?.plugins?.flatMap(x=>Object.entries(x.components||{}))||[],p=c.map(([x,S])=>`import * as _comp_${x} from '${k(S)}';
17
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`
18
+ `),n=c.map(([x])=>x).join(", "),l=jt.default.basename(o.docsDir||"docs"),d=Object.entries(t?.external||{}),u=d.map(([x,S],a)=>`import _ext_${a} from '${k(S)}';`).join(`
19
+ `),y=d.length>0?`externalPages: { ${d.map(([x],S)=>`"${x}": _ext_${S}`).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';
@@ -24,30 +24,30 @@ import _user_mdx_components from 'virtual:boltdocs-mdx-components';
24
24
  ${i}
25
25
  ${e}
26
26
  ${p}
27
- ${g}
27
+ ${u}
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
- ${s}
37
- ${v}
36
+ ${r}
37
+ ${y}
38
38
  components: { ${n}${n?", ":""} ...(_user_mdx_components || {}) },
39
39
  });
40
- `}u();function ct(o){return`<!doctype html>
40
+ `}m();function pt(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(`
50
+ </html>`}function Ht(o,t){let e=t.theme,s=e?.title||"Boltdocs",i=e?.description||"",r=e?.favicon;!r&&e?.logo&&(typeof e.logo=="string"?r=e.logo:r=e.logo.light||e.logo.dark);let c=[r?`<link rel="icon" href="${r}">`:"",`<meta name="description" content="${i}">`,`<meta property="og:title" content="${s}">`,`<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="${s}">`,`<meta name="twitter:description" content="${i}">`,e?.ogImage?`<meta name="twitter:image" content="${e.ogImage}">`:"",'<meta name="generator" content="Boltdocs">'].filter(Boolean).join(`
51
51
  `),p=`
52
52
  <script>
53
53
  (function() {
@@ -64,12 +64,12 @@ _createApp({
64
64
  } catch (e) {}
65
65
  })();
66
66
  </script>
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}
67
+ `;return o.includes("<title>")?o=o.replace(/<title>.*?<\/title>/,`<title>${s}</title>`):o=o.replace("</head>",` <title>${s}</title>
68
+ </head>`),o=o.replace("</head>",` ${c}
69
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}';
70
+ </body>`)),o}var Lt=f(require("fs"));m();function ce(o={},t){let e=M.default.resolve(process.cwd(),o.docsDir||"docs"),s=k(e),i=t,r,c=!1,p=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(),u=(0,se.loadEnv)(l.mode,d,"");return Object.assign(process.env,u),i||(i=await O(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){r=n},configureServer(n){n.middlewares.use((a,g,b)=>{if(a.url==="/robots.txt"){let h=dt(i);g.statusCode=200,g.setHeader("Content-Type","text/plain"),g.end(h);return}b()}),n.middlewares.use(async(a,g,b)=>{let h=a.url?.split("?")[0]||"/",D=a.headers.accept||"",v=h==="/"||h.startsWith("/docs")||i.i18n&&Object.keys(i.i18n.locales).some(P=>h.startsWith(`/${P}/docs`)||h===`/${P}`)||i.external&&Object.keys(i.external).some(P=>h.startsWith(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(D.includes("text/html")&&!$&&v){let P=pt(i);P=Ht(P,i),P=await n.transformIndexHtml(a.url||"/",P),g.statusCode=200,g.setHeader("Content-Type","text/html"),g.end(P);return}b()});let l=lt.map(a=>M.default.resolve(process.cwd(),a)),d=["tsx","jsx"],u=d.map(a=>M.default.resolve(e,`layout.${a}`)),y=["tsx","ts","jsx","js"],x=y.map(a=>M.default.resolve(e,`mdx-components.${a}`));n.watcher.add([...l,...x,...u]);let S=async(a,g)=>{try{let b=k(a);if(lt.some(v=>b.endsWith(v))){n.restart();return}if(y.some(v=>b.endsWith(`mdx-components.${v}`))){let v=n.moduleGraph.getModuleById("\0virtual:boltdocs-mdx-components");v&&n.moduleGraph.invalidateModule(v),n.ws.send({type:"full-reload"});return}if(d.some(v=>b.endsWith(`layout.${v}`))){let v=n.moduleGraph.getModuleById("\0virtual:boltdocs-layout");v&&n.moduleGraph.invalidateModule(v),n.ws.send({type:"full-reload"});return}if(!b.startsWith(s)||!Nt(b))return;if(g==="add"||g==="unlink"){_t(),i=await O(e);let v=n.moduleGraph.getModuleById("\0virtual:boltdocs-config");v&&n.moduleGraph.invalidateModule(v),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 Ot(a);let h=await tt(e,i,"/docs",g!=="change"),D=n.moduleGraph.getModuleById("\0virtual:boltdocs-routes");D&&n.moduleGraph.invalidateModule(D),n.ws.send({type:"custom",event:"boltdocs:routes-update",data:h})}catch(b){console.error(`[boltdocs] HMR error during ${g} event:`,b)}};n.watcher.on("add",a=>S(a,"add")),n.watcher.on("unlink",a=>S(a,"unlink")),n.watcher.on("change",a=>S(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")return"\0"+n},async load(n){if(n==="\0virtual:boltdocs-routes"){let l=await tt(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 re(o,i);if(n==="\0virtual:boltdocs-mdx-components"){let l=["tsx","ts","jsx","js"],d=null;for(let u of l){let y=M.default.resolve(e,`mdx-components.${u}`);if(Lt.default.existsSync(y)){d=y;break}}if(d){let u=k(d);return`import * as components from '${u}';
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 '${u}';`}return"export default {};"}if(n==="\0virtual:boltdocs-layout"){let l=["tsx","jsx"],d=null;for(let u of l){let y=M.default.resolve(e,`layout.${u}`);if(Lt.default.existsSync(y)){d=y;break}}return d?`import UserLayout from '${k(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;`}},transformIndexHtml:{order:"pre",handler(n){return Ht(n,i)}},async closeBundle(){if(!c)return;let n=r?.build?.outDir?M.default.resolve(r.root,r.build.outDir):M.default.resolve(process.cwd(),"dist"),l=M.default.basename(e||"docs");await It({docsDir:e,docsDirName:l,outDir:n,config:i});let{flushCache:d}=await Promise.resolve().then(()=>(Q(),Tt));await d()}},(0,ae.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)]}m();var he=f(require("@mdx-js/rollup")),ye=f(require("remark-gfm")),xe=f(require("remark-frontmatter")),ve=f(require("rehype-slug")),be=f(require("crypto"));m();Q();var le="v3",N=new Z("mdx");m();var pe=require("unist-util-visit");m();var de=require("shiki"),mt=null;async function ut(o){if(mt)return mt;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)}),mt=await(0,de.createHighlighter)({themes:t,langs:["tsx","jsx","ts","js","json","md","mdx","css","html","bash","sh","yaml","yml"]}),mt}function me(o){return async t=>{let e=o?.theme?.codeTheme??{light:"github-light",dark:"github-dark"},s=await ut(e);(0,pe.visit)(t,["mdxJsxFlowElement","mdxJsxTextElement"],i=>{if(i.name!=="ComponentPreview")return;let r=i.attributes?.find(l=>l.name==="code"),c="";if(r){if(typeof r.value=="string")c=r.value;else if(r.value?.type==="mdxJsxAttributeValueExpression"){let l=r.value.value??"";c=l.match(/^[`'"](.+)[`'"]$/)?.[1]??l}}if(!c)return;let p=typeof e=="object"?{themes:{light:e.light,dark:e.dark},lang:"tsx"}:{theme:e,lang:"tsx"},n=s.codeToHtml(c,p);i.attributes=(i.attributes??[]).filter(l=>l.name!=="highlightedHtml"),i.attributes.push({type:"mdxJsxAttribute",name:"highlightedHtml",value:n})})}}m();var ue=require("unist-util-visit");function ge(o){return async t=>{let e=o?.theme?.codeTheme||{light:"github-light",dark:"github-dark"},s=await ut(e);(0,ue.visit)(t,"element",i=>{if(i.tagName==="pre"&&i.children?.[0]?.tagName==="code"){let r=i.children[0],p=(r.properties?.className||[]).find(y=>y.startsWith("language-")),n=p?p.slice(9):"text",l=r.children[0]?.value||"",d={lang:n};typeof e=="object"?d.themes={light:e.light,dark:e.dark}:d.theme=e;let u=s.codeToHtml(l,d);i.properties.dataHighlighted="true",i.properties.highlightedHtml=u,i.children=[]}})}}var fe=!1,gt=0,et=0;function we(o,t=he.default){let e=o?.plugins?.flatMap(r=>r.remarkPlugins||[])||[],s=o?.plugins?.flatMap(r=>r.rehypePlugins||[])||[],i=t({remarkPlugins:[ye.default,xe.default,[me,o],...e],rehypePlugins:[ve.default,[ge,o],...s],jsxRuntime:"automatic",providerImportSource:"@mdx-js/react"});return{...i,name:"vite-plugin-boltdocs-mdx",async buildStart(){gt=0,et=0,fe||(N.load(),fe=!0),i.buildStart&&await i.buildStart.call(this)},async transform(r,c,p){if(!c.endsWith(".md")&&!c.endsWith(".mdx"))return i.transform?.call(this,r,c,p);console.log(`[boltdocs] Transforming MDX: ${c}`),et++;let n=be.default.createHash("md5").update(r).digest("hex"),l=`${c}:${n}:${le}`,d=N.get(l);if(d)return gt++,{code:d,map:null};let u=await i.transform.call(this,r,c,p);return u&&typeof u=="object"&&u.code&&N.set(l,u.code),u},async buildEnd(){et>0&&console.log(`[boltdocs] MDX Cache Performance: ${gt}/${et} hits (${Math.round(gt/et*100)||0}%)`),N.save(),await N.flush(),i.buildEnd&&await i.buildEnd.call(this)}}}async function $e(o){let t=o?.docsDir||"docs",e=await O(t),s={...o,homePage:o?.homePage||e.homePage};return[...ce(s,e),we(e)]}async function ft(o,t="development"){let e=await O("docs",o);return{root:o,mode:t,plugins:[(0,Pe.default)(),(0,Ce.default)(),await $e({docsDir:e.docsDir,homePage:e.homePage})],...e.vite}}var Se=f(require("path")),ot=f(require("fs"));async function Be(o=process.cwd()){try{let t=await ft(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 De(o=process.cwd()){let t=!1,e=Se.default.resolve(o,"index.html");try{if(!ot.default.existsSync(e)){let i=await O("docs",o);ot.default.writeFileSync(e,pt(i),"utf-8"),t=!0}let s=await ft(o,"production");await(0,U.build)(s),console.log("[boltdocs] Build completed successfully.")}catch(s){console.error("[boltdocs] Build failed:",s),process.exit(1)}finally{t&&ot.default.existsSync(e)&&ot.default.unlinkSync(e)}}async function Re(o=process.cwd()){try{let t=await ft(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,ke.default)("boltdocs");G.command("[root]","Start development server").alias("dev").action(Be);G.command("build [root]","Build for production").action(De);G.command("preview [root]","Preview production build").action(Re);G.help();G.version("2.0.0");G.parse();
@@ -1,2 +1,2 @@
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 a,d as l,e as b,g as c,h as y}from"../chunk-5D6XPYQ3.mjs";import{a as u,b as w,c as i}from"../chunk-Q3MLYTIQ.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();
@@ -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
  /**