boltdocs 2.7.10 → 2.8.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 (193) hide show
  1. package/README.md +2 -2
  2. package/dist/banner-3N4Jd_L9.d.ts +100 -0
  3. package/dist/banner-MynZD_Ox.d.cts +100 -0
  4. package/dist/cache-BMUyNiiA.mjs +6 -0
  5. package/dist/cache-CKm45d2w.cjs +6 -0
  6. package/dist/client/index.cjs +2268 -1
  7. package/dist/client/index.d.cts +86 -110
  8. package/dist/client/index.d.ts +87 -111
  9. package/dist/client/index.js +2214 -1
  10. package/dist/client/mdx.cjs +12 -1
  11. package/dist/client/mdx.d.cts +39 -93
  12. package/dist/client/mdx.d.ts +38 -93
  13. package/dist/client/mdx.js +7 -1
  14. package/dist/client/primitives.cjs +60 -1
  15. package/dist/client/primitives.d.cts +411 -347
  16. package/dist/client/primitives.d.ts +411 -347
  17. package/dist/client/primitives.js +20 -1
  18. package/dist/docs-layout-CwCq42Zt.cjs +1348 -0
  19. package/dist/docs-layout-Dn6S5g59.js +1167 -0
  20. package/dist/doctor-BArviV8X.cjs +28 -0
  21. package/dist/doctor-CgLA7_Uv.mjs +28 -0
  22. package/dist/{doctor-CrytFkqW.cjs → doctor-DyNUVe96.cjs} +1 -1
  23. package/dist/{routes-DP1vmWRj.cjs → doctor-aN_leTbh.mjs} +1 -1
  24. package/dist/{generator-ClVanhvi.mjs → generator-BHCrLU6h.mjs} +2 -2
  25. package/dist/{generator-CHqxiQhF.cjs → generator-CC2yHzhZ.cjs} +2 -2
  26. package/dist/icons-dev-DvJ-hh9x.cjs +1209 -0
  27. package/dist/icons-dev-Oju24Wjp.js +845 -0
  28. package/dist/image-Ch4-GxdO.cjs +268 -0
  29. package/dist/image-Do8V9PCW.js +214 -0
  30. package/dist/mdx-D3A2_l7P.js +520 -0
  31. package/dist/mdx-PLhhPJRS.cjs +531 -0
  32. package/dist/node/cli-entry.cjs +3 -1
  33. package/dist/node/cli-entry.mjs +3 -1
  34. package/dist/node/index.cjs +1 -1
  35. package/dist/node/index.d.cts +258 -152
  36. package/dist/node/index.d.mts +258 -150
  37. package/dist/node/index.mjs +1 -1
  38. package/dist/node/routes/worker.cjs +1 -1
  39. package/dist/node/routes/worker.mjs +1 -1
  40. package/dist/node-BmlP0eBP.cjs +159 -0
  41. package/dist/node-Y8_4ayje.mjs +159 -0
  42. package/dist/package-2nFy_NsW.cjs +6 -0
  43. package/dist/{package--0Yf0t1N.mjs → package-DAbtltXX.mjs} +1 -1
  44. package/dist/parser-B7-6PyQz.cjs +6 -0
  45. package/dist/{parser-Aq8LoH-0.cjs → parser-BzB-zCkF.cjs} +1 -1
  46. package/dist/parser-WGZdWs0X.mjs +6 -0
  47. package/dist/routes-BDDSxAl0.mjs +6 -0
  48. package/dist/routes-DJNJ-rTt.cjs +6 -0
  49. package/dist/routes-DiYC4nD2.cjs +6 -0
  50. package/dist/routes-_Bb2f4eI.mjs +6 -0
  51. package/dist/search-dialog-BXVoecTx.cjs +483 -0
  52. package/dist/search-dialog-BYhOov4S.cjs +331 -0
  53. package/dist/search-dialog-C09riYmx.js +313 -0
  54. package/dist/search-dialog-CUeAfy-8.cjs +8 -0
  55. package/dist/search-dialog-D8gLkhUV.js +453 -0
  56. package/dist/search-dialog-DHc_8FFX.js +8 -0
  57. package/dist/{sidebar-CcBkrm06.d.cts → sidebar-DNq4_ZAa.d.ts} +118 -52
  58. package/dist/{sidebar-CyZS9YOm.d.ts → sidebar-Dlkgbxs6.d.cts} +118 -52
  59. package/dist/utils-BYITg7T5.mjs +7 -0
  60. package/dist/utils-Cjmx1hhk.cjs +7 -0
  61. package/dist/worker-pool-CtqklOXq.cjs +6 -0
  62. package/dist/worker-pool-k0DY6k8T.mjs +6 -0
  63. package/package.json +5 -6
  64. package/src/shared/config-utils.ts +4 -0
  65. package/src/shared/types.ts +52 -6
  66. package/dist/cache-Ba-DZQNH.cjs +0 -6
  67. package/dist/cache-BuMZ58L5.mjs +0 -6
  68. package/dist/cards-BakZPTz9.d.ts +0 -30
  69. package/dist/cards-CQn9mXZS.d.cts +0 -30
  70. package/dist/docs-layout-KoWNZc8_.js +0 -6
  71. package/dist/docs-layout-x2yKt2cL.cjs +0 -6
  72. package/dist/doctor-Be7Ly1oM.mjs +0 -21
  73. package/dist/doctor-jMxWZyLJ.cjs +0 -21
  74. package/dist/icons-dev-B_RZIyxu.js +0 -6
  75. package/dist/icons-dev-BlV3wWFT.cjs +0 -6
  76. package/dist/image-BHhTvQzr.cjs +0 -6
  77. package/dist/image-CqKzYD8f.js +0 -6
  78. package/dist/mdx-DudBEac0.js +0 -7
  79. package/dist/mdx-r4cDQxWu.cjs +0 -7
  80. package/dist/node-DtEDyN1u.cjs +0 -111
  81. package/dist/node-_1jhMGYx.mjs +0 -111
  82. package/dist/package-DrwtlXfk.cjs +0 -6
  83. package/dist/parser-CdNbqN5y.cjs +0 -6
  84. package/dist/parser-nE792MLO.mjs +0 -6
  85. package/dist/rolldown-runtime-fkIsjY3S.mjs +0 -6
  86. package/dist/routes-2k3tbUmC.cjs +0 -6
  87. package/dist/routes-CpxZIsMM.mjs +0 -6
  88. package/dist/search-dialog-B584t9ZF.js +0 -6
  89. package/dist/search-dialog-BvBopRsZ.cjs +0 -6
  90. package/dist/search-dialog-ByvGScjt.js +0 -6
  91. package/dist/search-dialog-Cyko6TJm.cjs +0 -6
  92. package/dist/search-dialog-D6BNohIJ.js +0 -6
  93. package/dist/search-dialog-DuYTIefy.cjs +0 -6
  94. package/dist/utils-CG65J0Sc.mjs +0 -7
  95. package/dist/utils-CKunkU96.cjs +0 -7
  96. package/dist/worker-pool-CGn7DrLb.mjs +0 -6
  97. package/dist/worker-pool-Crbqgw5R.cjs +0 -6
  98. package/src/client/app/config-context.tsx +0 -51
  99. package/src/client/app/doc-page.tsx +0 -38
  100. package/src/client/app/docs-layout.tsx +0 -28
  101. package/src/client/app/head.tsx +0 -122
  102. package/src/client/app/helmet-compat.tsx +0 -36
  103. package/src/client/app/mdx-component.tsx +0 -8
  104. package/src/client/app/mdx-components-context.tsx +0 -72
  105. package/src/client/app/routes-context.tsx +0 -34
  106. package/src/client/app/scroll-handler.tsx +0 -74
  107. package/src/client/app/theme-context.tsx +0 -103
  108. package/src/client/app/ui-context.tsx +0 -42
  109. package/src/client/components/docs-layout-default.tsx +0 -85
  110. package/src/client/components/icons-dev.tsx +0 -282
  111. package/src/client/components/mdx/callout.tsx +0 -97
  112. package/src/client/components/mdx/card.tsx +0 -99
  113. package/src/client/components/mdx/cards.tsx +0 -27
  114. package/src/client/components/mdx/code-block.tsx +0 -184
  115. package/src/client/components/mdx/field.tsx +0 -33
  116. package/src/client/components/mdx/image.tsx +0 -44
  117. package/src/client/components/mdx/index.ts +0 -19
  118. package/src/client/components/mdx/table.tsx +0 -54
  119. package/src/client/components/mdx/typographics.tsx +0 -120
  120. package/src/client/components/mdx/use-code-block.ts +0 -34
  121. package/src/client/components/primitives/breadcrumbs.tsx +0 -54
  122. package/src/client/components/primitives/button-group.tsx +0 -54
  123. package/src/client/components/primitives/button.tsx +0 -6
  124. package/src/client/components/primitives/code-block.tsx +0 -120
  125. package/src/client/components/primitives/docs-layout.tsx +0 -125
  126. package/src/client/components/primitives/error-boundary.tsx +0 -107
  127. package/src/client/components/primitives/heading.tsx +0 -128
  128. package/src/client/components/primitives/helpers/observer.ts +0 -141
  129. package/src/client/components/primitives/image.tsx +0 -26
  130. package/src/client/components/primitives/link.tsx +0 -102
  131. package/src/client/components/primitives/menu.tsx +0 -137
  132. package/src/client/components/primitives/navbar.tsx +0 -466
  133. package/src/client/components/primitives/on-this-page.tsx +0 -430
  134. package/src/client/components/primitives/page-nav.tsx +0 -51
  135. package/src/client/components/primitives/popover.tsx +0 -28
  136. package/src/client/components/primitives/search-dialog.tsx +0 -193
  137. package/src/client/components/primitives/sidebar.tsx +0 -423
  138. package/src/client/components/primitives/skeleton.tsx +0 -26
  139. package/src/client/components/primitives/tabs.tsx +0 -70
  140. package/src/client/components/primitives/tooltip.tsx +0 -81
  141. package/src/client/components/primitives/types.ts +0 -11
  142. package/src/client/components/ui-base/banner.tsx +0 -66
  143. package/src/client/components/ui-base/breadcrumbs.tsx +0 -44
  144. package/src/client/components/ui-base/copy-markdown.tsx +0 -107
  145. package/src/client/components/ui-base/error-boundary.tsx +0 -15
  146. package/src/client/components/ui-base/github-stars.tsx +0 -29
  147. package/src/client/components/ui-base/icons.tsx +0 -240
  148. package/src/client/components/ui-base/index.ts +0 -16
  149. package/src/client/components/ui-base/last-updated.tsx +0 -27
  150. package/src/client/components/ui-base/navbar.tsx +0 -266
  151. package/src/client/components/ui-base/not-found.tsx +0 -26
  152. package/src/client/components/ui-base/on-this-page.tsx +0 -57
  153. package/src/client/components/ui-base/page-nav.tsx +0 -50
  154. package/src/client/components/ui-base/search-dialog.tsx +0 -163
  155. package/src/client/components/ui-base/search-highlight.tsx +0 -10
  156. package/src/client/components/ui-base/sidebar.tsx +0 -92
  157. package/src/client/components/ui-base/tabs.tsx +0 -83
  158. package/src/client/components/ui-base/theme-toggle.tsx +0 -130
  159. package/src/client/components/ui-base/version-i18n.tsx +0 -80
  160. package/src/client/hooks/index.ts +0 -13
  161. package/src/client/hooks/use-analytics.ts +0 -272
  162. package/src/client/hooks/use-breadcrumbs.ts +0 -22
  163. package/src/client/hooks/use-i18n.ts +0 -182
  164. package/src/client/hooks/use-localized-to.ts +0 -113
  165. package/src/client/hooks/use-location.ts +0 -5
  166. package/src/client/hooks/use-navbar.ts +0 -130
  167. package/src/client/hooks/use-page-nav.ts +0 -46
  168. package/src/client/hooks/use-routes.ts +0 -108
  169. package/src/client/hooks/use-search-highlight.ts +0 -185
  170. package/src/client/hooks/use-search.ts +0 -118
  171. package/src/client/hooks/use-sidebar.ts +0 -205
  172. package/src/client/hooks/use-tabs.ts +0 -46
  173. package/src/client/hooks/use-version.ts +0 -111
  174. package/src/client/index.ts +0 -31
  175. package/src/client/mdx.ts +0 -2
  176. package/src/client/primitives.ts +0 -19
  177. package/src/client/ssg/boltdocs-shell.tsx +0 -148
  178. package/src/client/ssg/create-routes.tsx +0 -473
  179. package/src/client/ssg/index.ts +0 -4
  180. package/src/client/ssg/mdx-page.tsx +0 -38
  181. package/src/client/store/boltdocs-context.tsx +0 -137
  182. package/src/client/theme/neutral.css +0 -141
  183. package/src/client/theme/reset.css +0 -189
  184. package/src/client/types.ts +0 -116
  185. package/src/client/utils/cn.ts +0 -6
  186. package/src/client/utils/copy-clipboard.ts +0 -22
  187. package/src/client/utils/get-base-file-path.ts +0 -21
  188. package/src/client/utils/github.ts +0 -121
  189. package/src/client/utils/i18n.ts +0 -23
  190. package/src/client/utils/path.ts +0 -9
  191. package/src/client/utils/react-to-text.ts +0 -34
  192. package/src/client/virtual.d.ts +0 -24
  193. /package/dist/{meta-loader-CWg2gnbY.mjs → meta-loader-DzwDFtdT.mjs} +0 -0
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Boltdocs - https://boltdocs.vercel.app
3
+ * Copyright (c) 2026 Jesus Alcala
4
+ * Licensed under the MIT License.
5
+ */
6
+ const e=require(`./chunk-CU-zTemE.cjs`);let t=require(`node:path`);t=e.t(t);let n=require(`node:fs`);n=e.t(n);let r=require(`node:worker_threads`),i=require(`node:os`);i=e.t(i);let a=require(`node:url`);const o=t.default.dirname((0,a.fileURLToPath)(require(`url`).pathToFileURL(__filename).href)),s=new class{workers=[];workerTasks=new WeakMap;queue=[];activeWorkers=0;maxWorkers;maxQueueSize;constructor(e,t=2e3){this.maxWorkers=e||Math.max(1,i.default.cpus().length-1),this.maxQueueSize=t}idleWorkers=[];async parseFile(e,t,n,r){return this.queue.length>=this.maxQueueSize?Promise.reject(Error(`[boltdocs] WorkerPool queue is full (limit: ${this.maxQueueSize}). Too many files enqueued simultaneously. Consider increasing maxQueueSize.`)):new Promise((i,a)=>{this.queue.push({task:{type:`PARSE_FILE`,file:e,docsDir:t,basePath:n,config:r},resolve:i,reject:a}),this.processNext()})}processNext(){if(this.queue.length===0)return;let e=this.idleWorkers.pop();if(!e){if(this.activeWorkers>=this.maxWorkers)return;this.activeWorkers++;let t=this.getWorkerPath(),n=new r.Worker(t,{execArgv:t.endsWith(`.ts`)?[`--loader`,`tsx`]:[]});e=n,this.workers.push(n);let i=(e,t)=>{let n=this.workers.indexOf(e);if(n===-1)return;let r=this.workerTasks.get(e);r&&(this.workerTasks.delete(e),r.reject(t||Error(`Worker terminated unexpectedly`))),this.activeWorkers--;let i=this.idleWorkers.indexOf(e);i>-1&&this.idleWorkers.splice(i,1),this.workers.splice(n,1),e.terminate(),this.processNext()};n.on(`message`,e=>{let t=this.workerTasks.get(n);t&&(this.workerTasks.delete(n),e.type===`SUCCESS`?t.resolve(e.result):t.reject(Error(e.error))),this.idleWorkers.push(n),this.processNext()}),n.on(`error`,e=>{i(n,e)}),n.on(`exit`,e=>{e!==0&&i(n,Error(`Worker exited with code ${e}`))})}let{task:t,resolve:n,reject:i}=this.queue.shift();this.workerTasks.set(e,{resolve:n,reject:i}),e.postMessage(t)}getWorkerPath(){if(require(`url`).pathToFileURL(__filename).href.includes(`/dist/`)||t.default.extname(require(`url`).pathToFileURL(__filename).href)===`.mjs`){let e=[t.default.resolve(o,`node/routes/worker.mjs`),t.default.resolve(o,`worker.mjs`),t.default.resolve(o,`./node/routes/worker.mjs`)];for(let t of e)if(n.default.existsSync(t))return t;return t.default.resolve(o,`node/routes/worker.mjs`)}return t.default.resolve(o,`worker.ts`)}async terminate(){let e=[...this.workers];await Promise.all(e.map(e=>e.terminate())),this.idleWorkers=[],this.workers=[],this.activeWorkers=0}};exports.pool=s;
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Boltdocs - https://boltdocs.vercel.app
3
+ * Copyright (c) 2026 Jesus Alcala
4
+ * Licensed under the MIT License.
5
+ */
6
+ import e from"node:path";import t from"node:fs";import{fileURLToPath as n}from"node:url";import{Worker as r}from"node:worker_threads";import i from"node:os";const a=e.dirname(n(import.meta.url)),o=new class{workers=[];workerTasks=new WeakMap;queue=[];activeWorkers=0;maxWorkers;maxQueueSize;constructor(e,t=2e3){this.maxWorkers=e||Math.max(1,i.cpus().length-1),this.maxQueueSize=t}idleWorkers=[];async parseFile(e,t,n,r){return this.queue.length>=this.maxQueueSize?Promise.reject(Error(`[boltdocs] WorkerPool queue is full (limit: ${this.maxQueueSize}). Too many files enqueued simultaneously. Consider increasing maxQueueSize.`)):new Promise((i,a)=>{this.queue.push({task:{type:`PARSE_FILE`,file:e,docsDir:t,basePath:n,config:r},resolve:i,reject:a}),this.processNext()})}processNext(){if(this.queue.length===0)return;let e=this.idleWorkers.pop();if(!e){if(this.activeWorkers>=this.maxWorkers)return;this.activeWorkers++;let t=this.getWorkerPath(),n=new r(t,{execArgv:t.endsWith(`.ts`)?[`--loader`,`tsx`]:[]});e=n,this.workers.push(n);let i=(e,t)=>{let n=this.workers.indexOf(e);if(n===-1)return;let r=this.workerTasks.get(e);r&&(this.workerTasks.delete(e),r.reject(t||Error(`Worker terminated unexpectedly`))),this.activeWorkers--;let i=this.idleWorkers.indexOf(e);i>-1&&this.idleWorkers.splice(i,1),this.workers.splice(n,1),e.terminate(),this.processNext()};n.on(`message`,e=>{let t=this.workerTasks.get(n);t&&(this.workerTasks.delete(n),e.type===`SUCCESS`?t.resolve(e.result):t.reject(Error(e.error))),this.idleWorkers.push(n),this.processNext()}),n.on(`error`,e=>{i(n,e)}),n.on(`exit`,e=>{e!==0&&i(n,Error(`Worker exited with code ${e}`))})}let{task:t,resolve:n,reject:i}=this.queue.shift();this.workerTasks.set(e,{resolve:n,reject:i}),e.postMessage(t)}getWorkerPath(){if(import.meta.url.includes(`/dist/`)||e.extname(import.meta.url)===`.mjs`){let n=[e.resolve(a,`node/routes/worker.mjs`),e.resolve(a,`worker.mjs`),e.resolve(a,`./node/routes/worker.mjs`)];for(let e of n)if(t.existsSync(e))return e;return e.resolve(a,`node/routes/worker.mjs`)}return e.resolve(a,`worker.ts`)}async terminate(){let e=[...this.workers];await Promise.all(e.map(e=>e.terminate())),this.idleWorkers=[],this.workers=[],this.activeWorkers=0}};export{o as pool};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "boltdocs",
3
- "version": "2.7.10",
3
+ "version": "2.8.0",
4
4
  "description": "A lightweight documentation generator for React projects.",
5
5
  "main": "dist/node/index.mjs",
6
6
  "module": "dist/node/index.mjs",
@@ -36,13 +36,12 @@
36
36
  "import": "./dist/client/mdx.js",
37
37
  "require": "./dist/client/mdx.cjs"
38
38
  },
39
- "./theme/neutral.css": "./src/client/theme/neutral.css",
40
- "./theme/reset.css": "./src/client/theme/reset.css"
39
+ "./theme/neutral.css": "./dist/client/theme/neutral.css",
40
+ "./theme/reset.css": "./dist/client/theme/reset.css"
41
41
  },
42
42
  "files": [
43
43
  "dist",
44
44
  "bin",
45
- "src/client",
46
45
  "src/shared"
47
46
  ],
48
47
  "keywords": [
@@ -87,8 +86,8 @@
87
86
  "vite": "7.0.0 || 8.0.0",
88
87
  "vite-plugin-image-optimizer": "2.0.3",
89
88
  "zod": "4.3.6",
90
- "@bdocs/dui": "0.1.1",
91
- "@bdocs/ssg": "0.0.7"
89
+ "@bdocs/dui": "0.1.2",
90
+ "@bdocs/ssg": "0.1.0"
92
91
  },
93
92
  "peerDependencies": {
94
93
  "react": "19.0.0",
@@ -5,6 +5,10 @@ import type { BoltdocsConfig } from './types'
5
5
  * This is an identity function that provides IntelliSense in both
6
6
  * Node.js (config files) and client-side code (MDX examples).
7
7
  *
8
+ * @remarks
9
+ * Intended for use in `boltdocs.config.ts` (Node.js context). This function
10
+ * is **not** available as a client-side import from `boltdocs/client`.
11
+ *
8
12
  * @param config - The Boltdocs configuration object
9
13
  */
10
14
  export function defineConfig(config: BoltdocsConfig): BoltdocsConfig {
@@ -33,13 +33,16 @@ export interface BoltdocsThemeConfig {
33
33
  }
34
34
  navbar?: Array<{
35
35
  label: string | Record<string, string>
36
- href: string
36
+ href: BoltdocsRoutePathWithFallback
37
37
  items?: Array<{
38
38
  label: string | Record<string, string>
39
- href: string
39
+ href: BoltdocsRoutePathWithFallback
40
40
  }>
41
41
  }>
42
- sidebar?: Record<string, Array<{ text: string; link: string }>>
42
+ sidebar?: Record<
43
+ string,
44
+ Array<{ text: string; link: BoltdocsRoutePathWithFallback }>
45
+ >
43
46
  sidebarGroups?: Record<
44
47
  string,
45
48
  { title?: string | Record<string, string>; icon?: string }
@@ -121,25 +124,44 @@ export interface BoltdocsVersionsConfig {
121
124
  versions: BoltdocsVersionConfig[]
122
125
  }
123
126
 
127
+ /**
128
+ * Shared badge value type used in frontmatter, RouteMeta, and ComponentRoute.
129
+ */
130
+ export type BadgeValue = string | { text: string; expires?: string }
131
+
124
132
  /**
125
133
  * Defines a Boltdocs plugin.
134
+ *
135
+ * Use the `createPlugin()` helper from the node API for full type safety and
136
+ * access to lifecycle hooks.
126
137
  */
127
138
  export interface BoltdocsPlugin {
128
139
  name: string
129
140
  enforce?: 'pre' | 'post'
130
141
  version?: string
131
142
  boltdocsVersion?: string
132
- permissions?: string[] // simplified for shared types
133
143
  remarkPlugins?: unknown[]
134
144
  rehypePlugins?: unknown[]
135
145
  vitePlugins?: VitePlugin[]
136
146
  components?: Record<string, string>
137
- hooks?: Record<string, any>
147
+ /** Lifecycle hooks use the `PluginLifecycleHooks` type from the node API. */
148
+ hooks?: Record<string, (ctx: unknown) => Promise<void> | void>
138
149
  }
139
150
 
140
151
  /**
141
- * Configuration for security-related settings.
152
+ * Configuration for the collections (blog) feature.
142
153
  */
154
+ export interface BoltdocsCollectionsConfig {
155
+ /** Number of posts per page in collection listing pages. Defaults to 10. */
156
+ postsPerPage?: number
157
+ /** The name of the default collection used by BlogList when none is specified. */
158
+ defaultCollection?: string
159
+ /** Date format string for rendering post dates (e.g., 'MMMM dd, yyyy'). */
160
+ dateFormat?: string
161
+ /** Field to sort posts by. Defaults to 'date'. */
162
+ sortBy?: 'date' | 'title' | 'sidebarPosition'
163
+ }
164
+
143
165
  export interface BoltdocsSecurityConfig {
144
166
  headers?: Record<string, string>
145
167
  enableCSP?: boolean
@@ -183,9 +205,19 @@ export interface BoltdocsGTMConfig {
183
205
  preview?: string
184
206
  }
185
207
 
208
+ /**
209
+ * Configuration for Algolia DocSearch.
210
+ */
211
+ export interface BoltdocsAlgoliaConfig {
212
+ appId: string
213
+ apiKey: string
214
+ indexName: string
215
+ }
216
+
186
217
  export interface BoltdocsIntegrationsConfig {
187
218
  ga4?: BoltdocsGA4Config
188
219
  gtm?: BoltdocsGTMConfig
220
+ algolia?: BoltdocsAlgoliaConfig
189
221
  }
190
222
 
191
223
  /**
@@ -199,6 +231,7 @@ export interface BoltdocsConfig {
199
231
  i18n?: BoltdocsI18nConfig
200
232
  versions?: BoltdocsVersionsConfig
201
233
  plugins?: BoltdocsPlugin[]
234
+ collections?: BoltdocsCollectionsConfig
202
235
  robots?: BoltdocsRobotsConfig
203
236
  security?: BoltdocsSecurityConfig
204
237
  seo?: BoltdocsSeoConfig
@@ -215,11 +248,24 @@ export interface BoltdocsConfig {
215
248
  declare global {
216
249
  namespace Boltdocs {
217
250
  interface Types {}
251
+
252
+ /**
253
+ * Marker interface augmented by generated code to provide strict route path typing.
254
+ * When no types have been generated (e.g., before first dev server start),
255
+ * keyof is never, and BoltdocsRoutePath falls back to string.
256
+ */
257
+ interface RoutePaths {}
218
258
  }
219
259
  }
220
260
 
221
261
  export type BoltdocsTypes = Boltdocs.Types
222
262
 
263
+ export type BoltdocsRoutePath = keyof Boltdocs.RoutePaths
264
+
265
+ export type BoltdocsRoutePathWithFallback = BoltdocsRoutePath extends never
266
+ ? string
267
+ : BoltdocsRoutePath
268
+
223
269
  export type BoltdocsLocale = Boltdocs.Types extends { Locale: infer L }
224
270
  ? L
225
271
  : string
@@ -1,6 +0,0 @@
1
- /**
2
- * Boltdocs - https://boltdocs.vercel.app
3
- * Copyright (c) 2026 Jesus Alcala
4
- * Licensed under the MIT License.
5
- */
6
- const e=require(`./chunk-CU-zTemE.cjs`),t=require(`./utils-CKunkU96.cjs`);let n=require(`node:path`);n=e.t(n);let r=require(`node:fs`);r=e.t(r);let i=require(`node:crypto`);i=e.t(i);let a=require(`node:zlib`);a=e.t(a);let o=require(`node:util`),s=require(`lru-cache`);const c=(0,o.promisify)(r.default.writeFile),l=(0,o.promisify)(r.default.readFile),u=(0,o.promisify)(r.default.mkdir),d=(0,o.promisify)(r.default.rename),f=(0,o.promisify)(a.default.gzip),p=new class{activeTasks=new Set;add(e){let t=Promise.resolve().then(e).catch(()=>{}).finally(()=>{this.activeTasks.delete(t)});this.activeTasks.add(t)}async flush(){await Promise.all(Array.from(this.activeTasks))}get pending(){return this.activeTasks.size}};var m=class{entries=new Map;cachePath=null;compress;constructor(e={}){let r=t.a();if(this.compress=e.compress===void 0?r.compress:e.compress,e.name){let t=e.root||process.cwd(),i=this.compress?`json.gz`:`json`;this.cachePath=n.default.resolve(t,r.dir,`${e.name}.${i}`)}}async load(){if(!t.a().noCache&&this.cachePath)try{if(!r.default.existsSync(this.cachePath))return;let e=await l(this.cachePath);this.cachePath.endsWith(`.gz`)&&(e=await(0,o.promisify)(a.default.gunzip)(e));let t=JSON.parse(e.toString(`utf-8`));this.entries=new Map(Object.entries(t))}catch{}}save(){if(t.a().noCache||!this.cachePath)return;let e=Object.fromEntries(this.entries),r=JSON.stringify(e),o=this.cachePath,s=this.compress;p.add(async()=>{try{await u(n.default.dirname(o),{recursive:!0});let e=Buffer.from(r);s&&(e=await new Promise((t,n)=>{a.default.gzip(e,(e,r)=>{e?n(e):t(r)})}));let t=`${o}.${i.default.randomBytes(4).toString(`hex`)}.tmp`;await c(t,e),await d(t,o)}catch{}})}get(e){let n=this.entries.get(e);return!n||t.o(e)!==n.mtime?null:n.data}set(e,n){this.entries.set(e,{data:n,mtime:t.o(e)})}isValid(e){let n=this.entries.get(e);return n?t.o(e)===n.mtime:!1}invalidate(e){this.entries.delete(e)}invalidateAll(){this.entries.clear()}pruneStale(e){for(let t of this.entries.keys())e.has(t)||this.entries.delete(t)}get size(){return this.entries.size}async flush(){await p.flush()}},h=class{index=new Map;memoryCache;baseDir;shardsDir;indexPath;constructor(e,r=process.cwd()){let i=t.a();this.baseDir=n.default.resolve(r,i.dir,`transform-${e}`),this.shardsDir=n.default.resolve(this.baseDir,`shards`),this.indexPath=n.default.resolve(this.baseDir,`index.json`),this.memoryCache=new s.LRUCache({max:i.lruLimit,ttl:i.lruTTL,updateAgeOnGet:!0})}async load(){if(!t.a().noCache)try{if(!r.default.existsSync(this.indexPath))return;let e=await l(this.indexPath,`utf-8`);this.index=new Map(Object.entries(JSON.parse(e)))}catch{}}save(){if(t.a().noCache)return;let e=JSON.stringify(Object.fromEntries(this.index)),r=this.indexPath;p.add(async()=>{try{await u(n.default.dirname(r),{recursive:!0}),await c(r,e)}catch{}})}async getMany(e){let t=new Map,r=[];for(let n of e){let e=this.memoryCache.get(n);e?t.set(n,e):this.index.has(n)&&r.push(n)}if(r.length>0){let e=await Promise.all(r.map(async e=>{let t=this.index.get(e),r=n.default.resolve(this.shardsDir,`${t}.gz`);try{let t=await l(r),n=await new Promise((e,n)=>{a.default.gunzip(t,(t,r)=>{t?n(t):e(r.toString(`utf-8`))})});return this.memoryCache.set(e,n),{key:e,val:n}}catch{return null}}));for(let n of e)n&&t.set(n.key,n.val)}return t}get(e){let t=this.memoryCache.get(e);if(t)return t;let i=this.index.get(e);if(!i)return null;let o=n.default.resolve(this.shardsDir,`${i}.gz`);if(!r.default.existsSync(o))return null;try{let t=r.default.readFileSync(o),n=a.default.gunzipSync(t).toString(`utf-8`);return this.memoryCache.set(e,n),n}catch{return null}}async getAsync(e){let t=this.memoryCache.get(e);if(t)return t;let i=this.index.get(e);if(!i)return null;let o=n.default.resolve(this.shardsDir,`${i}.gz`);try{if(!r.default.existsSync(o))return null;let t=await l(o),n=await new Promise((e,n)=>{a.default.gunzip(t,(t,r)=>{t?n(t):e(r.toString(`utf-8`))})});return this.memoryCache.set(e,n),n}catch{return null}}set(e,t){let a=i.default.createHash(`md5`).update(t).digest(`hex`);this.index.set(e,a),this.memoryCache.set(e,t);let o=n.default.resolve(this.shardsDir,`${a}.gz`);p.add(async()=>{try{if(r.default.existsSync(o))return;await u(this.shardsDir,{recursive:!0});let e=await f(Buffer.from(t)),n=`${o}.${i.default.randomBytes(4).toString(`hex`)}.tmp`;await c(n,e),await d(n,o)}catch{}})}get size(){return this.index.size}async flush(){await p.flush()}};const g=new Map,_=()=>{let e=t.a();return n.default.resolve(process.cwd(),e.dir,`cache/parser`)},v=`v2.3`;var y=class{static async get(e){if(t.a().noCache)return null;try{let t=g.get(e);if(t)return t.data;let a=await r.default.promises.stat(e),o=_(),s=i.default.createHash(`md5`).update(e).digest(`hex`),c=n.default.join(o,`${s}.json`);try{let t=await r.default.promises.readFile(c,`utf-8`),n=JSON.parse(t);return n._mtime!==a.mtimeMs||n._v!==v?null:(g.set(e,{data:n.data,mtime:n._mtime}),n.data)}catch{return null}}catch{return null}}static async set(e,a){if(!t.a().noCache)try{let t=await r.default.promises.stat(e);g.set(e,{data:a,mtime:t.mtimeMs});let o=_(),s=i.default.createHash(`md5`).update(e).digest(`hex`),c=n.default.join(o,`${s}.json`),l={_v:v,_mtime:t.mtimeMs,data:a};p.add(async()=>{try{await r.default.promises.mkdir(o,{recursive:!0}),await r.default.promises.writeFile(c,JSON.stringify(l))}catch{}})}catch{}}static invalidate(e){g.delete(e)}static clear(){g.clear();let e=_();if(r.default.existsSync(e))try{r.default.rmSync(e,{recursive:!0,force:!0})}catch{}}};Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return y}});
@@ -1,6 +0,0 @@
1
- /**
2
- * Boltdocs - https://boltdocs.vercel.app
3
- * Copyright (c) 2026 Jesus Alcala
4
- * Licensed under the MIT License.
5
- */
6
- import{a as e,o as t}from"./utils-CG65J0Sc.mjs";import n from"node:path";import r from"node:fs";import i from"node:crypto";import a from"node:zlib";import{promisify as o}from"node:util";import{LRUCache as s}from"lru-cache";const c=o(r.writeFile),l=o(r.readFile),u=o(r.mkdir),d=o(r.rename),f=o(a.gzip),p=new class{activeTasks=new Set;add(e){let t=Promise.resolve().then(e).catch(()=>{}).finally(()=>{this.activeTasks.delete(t)});this.activeTasks.add(t)}async flush(){await Promise.all(Array.from(this.activeTasks))}get pending(){return this.activeTasks.size}};var m=class{entries=new Map;cachePath=null;compress;constructor(t={}){let r=e();if(this.compress=t.compress===void 0?r.compress:t.compress,t.name){let e=t.root||process.cwd(),i=this.compress?`json.gz`:`json`;this.cachePath=n.resolve(e,r.dir,`${t.name}.${i}`)}}async load(){if(!e().noCache&&this.cachePath)try{if(!r.existsSync(this.cachePath))return;let e=await l(this.cachePath);this.cachePath.endsWith(`.gz`)&&(e=await o(a.gunzip)(e));let t=JSON.parse(e.toString(`utf-8`));this.entries=new Map(Object.entries(t))}catch{}}save(){if(e().noCache||!this.cachePath)return;let t=Object.fromEntries(this.entries),r=JSON.stringify(t),o=this.cachePath,s=this.compress;p.add(async()=>{try{await u(n.dirname(o),{recursive:!0});let e=Buffer.from(r);s&&(e=await new Promise((t,n)=>{a.gzip(e,(e,r)=>{e?n(e):t(r)})}));let t=`${o}.${i.randomBytes(4).toString(`hex`)}.tmp`;await c(t,e),await d(t,o)}catch{}})}get(e){let n=this.entries.get(e);return!n||t(e)!==n.mtime?null:n.data}set(e,n){this.entries.set(e,{data:n,mtime:t(e)})}isValid(e){let n=this.entries.get(e);return n?t(e)===n.mtime:!1}invalidate(e){this.entries.delete(e)}invalidateAll(){this.entries.clear()}pruneStale(e){for(let t of this.entries.keys())e.has(t)||this.entries.delete(t)}get size(){return this.entries.size}async flush(){await p.flush()}},h=class{index=new Map;memoryCache;baseDir;shardsDir;indexPath;constructor(t,r=process.cwd()){let i=e();this.baseDir=n.resolve(r,i.dir,`transform-${t}`),this.shardsDir=n.resolve(this.baseDir,`shards`),this.indexPath=n.resolve(this.baseDir,`index.json`),this.memoryCache=new s({max:i.lruLimit,ttl:i.lruTTL,updateAgeOnGet:!0})}async load(){if(!e().noCache)try{if(!r.existsSync(this.indexPath))return;let e=await l(this.indexPath,`utf-8`);this.index=new Map(Object.entries(JSON.parse(e)))}catch{}}save(){if(e().noCache)return;let t=JSON.stringify(Object.fromEntries(this.index)),r=this.indexPath;p.add(async()=>{try{await u(n.dirname(r),{recursive:!0}),await c(r,t)}catch{}})}async getMany(e){let t=new Map,r=[];for(let n of e){let e=this.memoryCache.get(n);e?t.set(n,e):this.index.has(n)&&r.push(n)}if(r.length>0){let e=await Promise.all(r.map(async e=>{let t=this.index.get(e),r=n.resolve(this.shardsDir,`${t}.gz`);try{let t=await l(r),n=await new Promise((e,n)=>{a.gunzip(t,(t,r)=>{t?n(t):e(r.toString(`utf-8`))})});return this.memoryCache.set(e,n),{key:e,val:n}}catch{return null}}));for(let n of e)n&&t.set(n.key,n.val)}return t}get(e){let t=this.memoryCache.get(e);if(t)return t;let i=this.index.get(e);if(!i)return null;let o=n.resolve(this.shardsDir,`${i}.gz`);if(!r.existsSync(o))return null;try{let t=r.readFileSync(o),n=a.gunzipSync(t).toString(`utf-8`);return this.memoryCache.set(e,n),n}catch{return null}}async getAsync(e){let t=this.memoryCache.get(e);if(t)return t;let i=this.index.get(e);if(!i)return null;let o=n.resolve(this.shardsDir,`${i}.gz`);try{if(!r.existsSync(o))return null;let t=await l(o),n=await new Promise((e,n)=>{a.gunzip(t,(t,r)=>{t?n(t):e(r.toString(`utf-8`))})});return this.memoryCache.set(e,n),n}catch{return null}}set(e,t){let a=i.createHash(`md5`).update(t).digest(`hex`);this.index.set(e,a),this.memoryCache.set(e,t);let o=n.resolve(this.shardsDir,`${a}.gz`);p.add(async()=>{try{if(r.existsSync(o))return;await u(this.shardsDir,{recursive:!0});let e=await f(Buffer.from(t)),n=`${o}.${i.randomBytes(4).toString(`hex`)}.tmp`;await c(n,e),await d(n,o)}catch{}})}get size(){return this.index.size}async flush(){await p.flush()}};const g=new Map,_=()=>{let t=e();return n.resolve(process.cwd(),t.dir,`cache/parser`)},v=`v2.3`;var y=class{static async get(t){if(e().noCache)return null;try{let e=g.get(t);if(e)return e.data;let a=await r.promises.stat(t),o=_(),s=i.createHash(`md5`).update(t).digest(`hex`),c=n.join(o,`${s}.json`);try{let e=await r.promises.readFile(c,`utf-8`),n=JSON.parse(e);return n._mtime!==a.mtimeMs||n._v!==v?null:(g.set(t,{data:n.data,mtime:n._mtime}),n.data)}catch{return null}}catch{return null}}static async set(t,a){if(!e().noCache)try{let e=await r.promises.stat(t);g.set(t,{data:a,mtime:e.mtimeMs});let o=_(),s=i.createHash(`md5`).update(t).digest(`hex`),c=n.join(o,`${s}.json`),l={_v:v,_mtime:e.mtimeMs,data:a};p.add(async()=>{try{await r.promises.mkdir(o,{recursive:!0}),await r.promises.writeFile(c,JSON.stringify(l))}catch{}})}catch{}}static invalidate(e){g.delete(e)}static clear(){g.clear();let e=_();if(r.existsSync(e))try{r.rmSync(e,{recursive:!0,force:!0})}catch{}}};export{m as n,h as r,y as t};
@@ -1,30 +0,0 @@
1
-
2
- import * as _$react_jsx_runtime0 from "react/jsx-runtime";
3
-
4
- //#region src/client/components/mdx/card.d.ts
5
- interface CardProps extends React.HTMLAttributes<HTMLDivElement> {
6
- title?: React.ReactNode;
7
- icon?: React.ReactNode;
8
- href?: string;
9
- }
10
- declare function Card({
11
- className,
12
- title,
13
- icon,
14
- href,
15
- children,
16
- ...props
17
- }: CardProps): _$react_jsx_runtime0.JSX.Element;
18
- //#endregion
19
- //#region src/client/components/mdx/cards.d.ts
20
- interface CardsProps extends React.HTMLAttributes<HTMLDivElement> {
21
- cols?: 1 | 2 | 3 | 4;
22
- }
23
- declare function Cards({
24
- children,
25
- className,
26
- cols,
27
- ...props
28
- }: CardsProps): _$react_jsx_runtime0.JSX.Element;
29
- //#endregion
30
- export { Card as n, Cards as t };
@@ -1,30 +0,0 @@
1
-
2
- import * as _$react_jsx_runtime0 from "react/jsx-runtime";
3
-
4
- //#region src/client/components/mdx/card.d.ts
5
- interface CardProps extends React.HTMLAttributes<HTMLDivElement> {
6
- title?: React.ReactNode;
7
- icon?: React.ReactNode;
8
- href?: string;
9
- }
10
- declare function Card({
11
- className,
12
- title,
13
- icon,
14
- href,
15
- children,
16
- ...props
17
- }: CardProps): _$react_jsx_runtime0.JSX.Element;
18
- //#endregion
19
- //#region src/client/components/mdx/cards.d.ts
20
- interface CardsProps extends React.HTMLAttributes<HTMLDivElement> {
21
- cols?: 1 | 2 | 3 | 4;
22
- }
23
- declare function Cards({
24
- children,
25
- className,
26
- cols,
27
- ...props
28
- }: CardsProps): _$react_jsx_runtime0.JSX.Element;
29
- //#endregion
30
- export { Card as n, Cards as t };
@@ -1,6 +0,0 @@
1
- /**
2
- * Boltdocs - https://boltdocs.vercel.app
3
- * Copyright (c) 2026 Jesus Alcala
4
- * Licensed under the MIT License.
5
- */
6
- import{D as e,E as t,Y as n,Z as r,_ as i,b as a,nt as o,w as s,y as c}from"./icons-dev-B_RZIyxu.js";import{useLocation as l}from"react-router-dom";import{Children as u,Component as d,createContext as f,use as p,useContext as m,useEffect as h,useImperativeHandle as ee,useLayoutEffect as te,useMemo as g,useRef as _,useState as v}from"react";import{Fragment as ne,jsx as y,jsxs as b}from"react/jsx-runtime";import*as x from"react-aria-components";import{Breadcrumb as re,Breadcrumbs as ie,Popover as ae}from"react-aria-components";import oe from"virtual:boltdocs-icons";import se from"scroll-into-view-if-needed";const S=({children:e,className:t,...n})=>y(ie,{className:c(`flex flex-wrap items-center`,t),...n,children:e});S.Root=S,S.Item=({children:e,className:t,...n})=>y(re,{className:c(`flex items-center`,t),...n,children:e}),S.Link=({children:e,href:t,className:n,...r})=>y(i,{href:t,className:c(`cursor-pointer`,n),...r,children:e}),S.Separator=({className:t})=>y(e,{size:14,className:c(`shrink-0`,t)});const C=({...e})=>y(x.Button,{...e}),ce=({children:e,className:t,vertical:n=!1})=>y(`div`,{className:c(`inline-flex`,n?`flex-col`:`flex-row`,!n&&[`[&>*:not(:first-child)]:-ml-px`,`[&>*:first-child]:rounded-r-none`,`[&>*:last-child]:rounded-l-none`,`[&>*:not(:first-child):not(:last-child)]:rounded-none`,t?.includes(`rounded-full`)&&[`[&>*:first-child]:rounded-l-full`,`[&>*:last-child]:rounded-r-full`],t?.includes(`rounded-xl`)&&[`[&>*:first-child]:rounded-l-xl`,`[&>*:last-child]:rounded-r-xl`],t?.includes(`rounded-lg`)&&[`[&>*:first-child]:rounded-l-lg`,`[&>*:last-child]:rounded-r-lg`]],n&&[`[&>*:not(:first-child)]:-mt-px`,`[&>*:first-child]:rounded-b-none`,`[&>*:last-child]:rounded-t-none`,`[&>*:not(:first-child):not(:last-child)]:rounded-none`,t?.includes(`rounded-full`)&&[`[&>*:first-child]:rounded-t-full`,`[&>*:last-child]:rounded-b-full`]],t),children:e}),w=({children:e,className:t,...n})=>y(ae,{offset:8,className:c(`z-50 overflow-auto outline-none transition-none`,t),...n,children:e});function le({placement:e,className:t,...n}){let[r,i]=u.toArray(n.children).slice(0,2);return b(x.MenuTrigger,{...n,children:[r,y(w,{placement:e,className:t,children:i})]})}function ue({className:e,...t}){let[n,r]=u.toArray(t.children).slice(0,2);return b(x.SubmenuTrigger,{...t,children:[n,y(w,{offset:-4,crossOffset:-4,className:e,children:r})]})}function T(e){return y(x.Menu,{...e,className:x.composeRenderProps(e.className,e=>c(`outline-none overflow-auto`,e))})}function de(t){let n=t.textValue||(typeof t.children==`string`?t.children:void 0);return y(x.MenuItem,{...t,textValue:n,className:x.composeRenderProps(t.className,e=>c(`group relative flex flex-row items-center cursor-default outline-none`,e)),children:x.composeRenderProps(t.children,(t,{selectionMode:n,isSelected:r,hasSubmenu:i})=>b(ne,{children:[n===`multiple`&&y(`span`,{className:`flex items-center shrink-0 justify-center`,children:r&&y(s,{className:`size-3.5`})}),y(`div`,{className:`flex flex-row w-full items-center`,children:t}),i&&y(e,{className:`size-4 ml-auto`})]}))})}function fe({title:e,...t}){return b(x.MenuSection,{...t,className:c(`flex flex-col`,t.className),children:[e&&y(x.Header,{className:`select-none`,children:e}),y(x.Collection,{items:t.items,children:t.children})]})}function pe(e){return y(x.Separator,{...e,className:c(`border-t`,e.className)})}T.Root=T,T.Item=de,T.Trigger=le,T.SubTrigger=ue,T.Section=fe,T.Separator=pe;var me=class extends d{state={hasError:!1,error:null};static getDerivedStateFromError(e){return{hasError:!0,error:e}}componentDidCatch(e,t){this.props.onError?this.props.onError(e,t):console.error(`ErrorBoundary caught an unhandled error:`,e,t)}resetErrorBoundary=()=>{this.props.onReset&&this.props.onReset(),this.setState({hasError:!1,error:null})};render(){let{hasError:e,error:t}=this.state,{children:n,fallback:r,FallbackComponent:i}=this.props;return e&&t?i?y(i,{error:t,resetErrorBoundary:this.resetErrorBoundary}):r||y(E,{error:t,resetErrorBoundary:this.resetErrorBoundary}):n}};function E({error:e,resetErrorBoundary:t}){return b(`div`,{className:`flex flex-col items-center justify-center min-h-[40vh] text-center gap-4 px-6 py-8 border border-subtle bg-surface rounded-2xl max-w-lg mx-auto shadow-xs`,children:[y(`div`,{className:`text-lg font-bold text-rose-600 dark:text-rose-400`,children:`Something went wrong`}),y(`p`,{className:`text-sm text-muted max-w-sm leading-relaxed`,children:e?.message||`An unexpected error occurred while rendering this page.`}),y(C,{className:`rounded-xl border border-subtle bg-main px-6 py-2.5 text-xs font-semibold text-body hover:bg-primary-50/50 hover:border-primary-500/50 transition-all duration-300 cursor-pointer outline-none select-none`,onPress:t,children:`Try again`})]})}const D=({children:e,className:t=``,...n})=>y(`div`,{className:c(`w-full`,t),...n,children:e});D.Root=D,D.List=({children:e,className:t=``})=>y(`div`,{role:`tablist`,className:c(`relative flex flex-row items-center`,t),children:e}),D.Item=({children:e,id:t,selected:n,className:r=``,...i})=>y(`button`,{role:`tab`,"aria-selected":n,"data-selected":n,className:c(`outline-none cursor-pointer bg-transparent border-none`,r),...i,children:e}),D.Content=({children:e,className:t=``})=>y(`div`,{className:c(`outline-none`,t),children:e}),D.Indicator=({className:e=``,style:t})=>y(`div`,{className:c(`absolute bottom-0`,e),style:t});const O=f(void 0);function he({children:e}){let[t,n]=v(!1);return h(()=>{n(!1)},[l().pathname]),y(O.Provider,{value:{isSidebarOpen:t,toggleSidebar:()=>n(e=>!e),closeSidebar:()=>n(!1)},children:e})}function k(){let e=m(O);return e===void 0?{isSidebarOpen:!1,toggleSidebar:()=>{},closeSidebar:()=>{}}:e}function A(e){return e.startsWith(`#`)?e.slice(1):null}var ge=class{items=[];single=!1;observer=null;onChange;callback(e){for(let e of this.items){let t=document.getElementById(e.id);if(!t){e.active=!1,e.fallback=!1;continue}let n=t.getBoundingClientRect(),r=typeof window<`u`?window.innerHeight:1e3,i=n.bottom>0&&n.top<r;e.active=i,e.fallback=!i&&n.top>0&&n.top<r*2}if(this.single){let e=-1,t=this.items.map((e,t)=>({item:e,idx:t})).filter(({item:e})=>e.active);if(t.length>0)e=t[0].idx;else{let t=this.items.map((e,t)=>({item:e,idx:t})).filter(({item:e})=>e.fallback);t.length>0?e=t[0].idx:this.items.length>0&&(e=0)}this.items=this.items.map((t,n)=>({...t,active:n===e,t:n===e?Date.now():t.t}))}else this.items=this.items.map((e,t)=>({...e,active:e.active,t:e.active?Date.now():e.t}));this.onChange?.()}setItems(e){let t=this.observer;if(t)for(let e of this.items){let n=document.getElementById(e.id);n&&t.unobserve(n)}this.items=[];for(let t of e){let e=A(t.url);e&&this.items.push({id:e,active:!1,fallback:!1,t:0,original:t})}this.watchItems(),typeof window<`u`&&(setTimeout(()=>this.watchItems(),100),setTimeout(()=>this.watchItems(),500),setTimeout(()=>this.watchItems(),1e3)),this.onChange?.()}watch(e){this.observer||(this.observer=new IntersectionObserver(this.callback.bind(this),e),this.watchItems())}watchItems(){if(this.observer)for(let e of this.items){let t=document.getElementById(e.id);t&&this.observer.observe(t)}}unwatch(){this.observer?.disconnect(),this.observer=null}};const j=f(null),M=f(null);function N(){let e=p(j);if(!e)throw Error(`Component must be used under the <AnchorProvider /> component.`);return e}function _e(){let e=N();return g(()=>{let t;for(let n of e)n.active&&(!t||n.t>t.t)&&(t=n);return t?.id},[e])}function P(){let e=N();return g(()=>{let t=[];for(let n of e)n.active&&t.push(n.id);return t},[e])}function F({containerRef:e,children:t}){return y(M.Provider,{value:e,children:t})}function I({toc:e,single:t=!1,observerOptions:n,children:r}){let i=g(()=>new ge,[]),[a,o]=v(i.items);return i.single=t,h(()=>{i.setItems(e)},[i,e]),h(()=>{let e={rootMargin:`-80px 0% -60% 0%`,threshold:0},t=n?{...e,...n}:e;return i.watch(t),i.onChange=()=>o([...i.items]),()=>{i.unwatch()}},[i]),y(j.Provider,{value:a,children:r})}const L=({children:e,className:t})=>y(`nav`,{className:c(`sticky top-navbar hidden xl:flex flex-col shrink-0`,`w-toc`,`py-4 pl-6 pr-4`,t),children:e}),ve=({children:e,className:t,...n})=>y(`div`,{className:c(`mb-4 text-xs font-bold text-body`,t),...n,children:e}),R=({children:e,className:t,ref:n,...r})=>{let i=_(null);return ee(n,()=>i.current),y(`div`,{ref:i,className:c(`relative overflow-y-auto boltdocs-otp-content pb-12`,`max-h-[70%]`,t),style:{maskImage:`linear-gradient(to bottom, black 90%, transparent 100%)`,WebkitMaskImage:`linear-gradient(to bottom, black 90%, transparent 100%)`},...r,children:e})};R.displayName=`OnThisPageContent`;const z=({children:e,className:t})=>y(`ul`,{className:c(`relative space-y-0.5 text-sm border-l border-subtle`,t),children:e}),B=({level:e,children:t,className:n})=>y(`li`,{className:c(e===3&&`pl-3`,n),children:t}),V=({children:e,href:t,active:n,onClick:r,className:i})=>{let a=p(j),o=p(M),s=t?A(t):null,l=_(null),u=n===void 0?s&&a?!!a.find(e=>e.id===s)?.active:!1:n;return h(()=>{u&&l.current&&o?.current&&se(l.current,{behavior:`smooth`,block:`center`,inline:`center`,scrollMode:`if-needed`,boundary:o.current})},[u,o]),y(`a`,{ref:l,href:t,onClick:e=>{if(r)r(e);else if(t&&t.startsWith(`#`)){e.preventDefault();let n=t.slice(1),r=document.getElementById(n);r&&(r.scrollIntoView({behavior:`smooth`}),window.history.pushState(null,``,t))}},"data-active":u,className:c(`block py-0.5 pl-4 text-[13px] outline-none transition-colors`,u?`text-primary-500`:`text-muted hover:text-body`,i),children:e})},H=({style:e,className:t})=>{let n=_(null),[r,i]=v({opacity:0,...e});return h(()=>{let t=n.current?.parentElement;if(!t)return;let r=t.querySelectorAll(`a[data-active="true"]`);if(r.length>0){let n=r[0],a=r[r.length-1],o=n.getBoundingClientRect(),s=a.getBoundingClientRect(),c=t.getBoundingClientRect(),l=o.top-c.top,u=s.bottom-o.top;i({transform:`translateY(${l}px)`,height:`${u}px`,opacity:1,...e})}else i({opacity:0,...e})},[N(),e]),y(`div`,{ref:n,className:c(`absolute -left-px w-0.5 rounded-full bg-primary-500`,t),style:{transition:`transform 180ms cubic-bezier(0.2, 0.8, 0.2, 1), height 180ms cubic-bezier(0.2, 0.8, 0.2, 1), opacity 150ms`,...r}})};function U({headings:e=[],className:t}){let n=P();return e.length===0?null:b(z,{className:t,children:[y(H,{}),e.map(e=>y(B,{level:e.level,children:y(V,{href:`#${e.id}`,active:n.includes(e.id),children:e.text})},e.id))]})}function W({headings:e=[],className:t}){let n=g(()=>e.map(e=>({title:e.text,url:`#${e.id}`,depth:e.level})),[e]),r=_(null);return e.length===0?null:y(I,{toc:n,single:!1,children:y(F,{containerRef:r,children:y(R,{ref:r,children:y(U,{headings:e,className:t})})})})}L.Root=L,L.Header=ve,L.Content=R,L.List=z,L.Item=B,L.Link=V,L.Indicator=H,L.Items=U,L.Tree=W;const G=({children:e,className:t})=>y(`nav`,{className:c(`grid sm:grid-cols-2 gap-4`,t),children:e});G.Root=G,G.Link=({children:n,to:r,direction:a,className:o})=>{let s=a===`next`;return b(i,{href:r,className:c(`flex items-center outline-none no-underline`,s?`justify-end`:`justify-start`,o),children:[!s&&y(t,{className:`shrink-0`}),y(`div`,{className:`flex flex-col flex-1`,children:n}),s&&y(e,{className:`shrink-0`})]})},G.Title=({children:e,className:t})=>y(`span`,{className:c(t),children:e}),G.Description=({children:e,className:t})=>y(`span`,{className:c(`truncate`,t),children:e}),G.Icon=({children:e})=>y(ne,{children:e});function ye(e){let t=o(),n=r(l().pathname);return g(()=>{let i=e.find(e=>r(e.path)===n),a=i?.tab?.toLowerCase(),o=a?e.filter(e=>!e.tab||e.tab.toLowerCase()===a):e,s={};if(t.directoryMeta)for(let[e,n]of Object.entries(t.directoryMeta)){let t=e.split(`/`).filter(e=>!e.startsWith(`(`)||!e.endsWith(`)`)).map(e=>e.replace(/^\d+-/,``)).join(`/`);s[t===``?`.`:t]=n}let c=e=>e.charAt(0).toUpperCase()+e.slice(1).replace(/-/g,` `),l=new Map,u=[],d=(e,t)=>{let n=t,r=``,i=null;for(let t=0;t<e.length;t++){let a=e[t],o=r?`${r}/${a}`:a;if(!n.has(a)){let e=s[o]||{},t={path:`#`,title:e.title||c(a),componentPath:``,filePath:``,icon:e.icon,groupPosition:typeof e.order==`number`?e.order:999,subRoutes:[]};n.set(a,t)}i=n.get(a),i._subMap||=new Map,n=i._subMap,r=o}return i},f=[...o].sort((e,t)=>(e.sidebarPosition??e.order??999)-(t.sidebarPosition??t.order??999));for(let e of f){if(e.sidebarHidden)continue;let t=e.slugParts||[],n=e.filePath.split(`/`).pop()||``,r=/^index\.mdx?$/.test(n);if(t.length===0){e.filePath&&u.push(e);continue}if(r){let n=d(t,l);n&&(n.path=e.path,n.title=e.title||n.title,n.icon=e.icon||n.icon,n.badge=e.badge,n.sidebarPosition=e.sidebarPosition,n.frontmatter=e.frontmatter)}else{let n=d(t,l);n&&n.subRoutes.push(e)}}let p=(e,t=``)=>(e.forEach(e=>{if(e._subMap){let t=Array.from(e._subMap.values());e.subRoutes=[...e.subRoutes||[],...t],delete e._subMap}e.subRoutes&&e.subRoutes.length>0&&(e.subRoutes=p(e.subRoutes))}),e.sort((e,t)=>{let n=e.sidebarPosition??e.groupPosition??999,r=t.sidebarPosition??t.groupPosition??999;return n===r?e.title.localeCompare(t.title):n-r})),m=p(Array.from(l.values()));return m.map(e=>({slug:e.title.toLowerCase().replace(/\s+/g,`-`),title:e.title,icon:e.icon,routes:[e]})),{groups:m.map(e=>e.subRoutes&&e.subRoutes.length>0?{slug:e.title.toLowerCase().replace(/\s+/g,`-`),title:e.title,icon:e.icon,routes:e.subRoutes}:(u.push(e),null)).filter(Boolean),ungrouped:p(u),activeRoute:i,activePath:n,config:t}},[e,t,n])}let be=0;function K(e){if(!e)return;let t={...n,...oe};return t[e]||t[e+`Icon`]||void 0}const xe=({badge:e})=>{let t={new:`bg-primary-500/10 text-primary-500 border border-primary-500/20`,updated:`bg-emerald-500/10 text-emerald-500 border border-emerald-500/20`,deprecated:`bg-danger-500/10 text-danger-500 border border-danger-500/20`},n=typeof e==`string`?e:e?.text;return n?y(`span`,{className:c(`ml-auto flex h-5 items-center rounded-md text-[10px] font-bold px-1.5 py-0.5 uppercase tracking-wider`,t[n]||t.new),children:n}):null};function q({children:e,className:t}){return y(`aside`,{className:c(`hidden lg:flex flex-col w-sidebar sticky top-navbar h-[calc(100vh-var(--spacing-navbar))] border-r border-subtle bg-main`,t),children:e})}function Se({children:e,className:t}){let{isSidebarOpen:n,closeSidebar:r}=k();return y(x.ModalOverlay,{isOpen:n,onOpenChange:e=>!e&&r(),isDismissable:!0,className:c(`fixed inset-0 z-50 bg-black/20 backdrop-blur-sm lg:hidden`,`entering:animate-in entering:fade-in exiting:animate-out exiting:fade-out duration-300`),children:y(x.Modal,{className:c(`fixed top-0 left-0 bottom-0 w-80 bg-main border-r border-subtle shadow-2xl outline-none`,`entering:animate-in entering:slide-in-from-left exiting:animate-out exiting:slide-out-to-left duration-300`,t),children:y(x.Dialog,{className:`h-full focus:outline-none outline-none flex flex-col`,children:e})})})}function Ce({children:e,className:t}){return y(`div`,{className:c(`flex items-center justify-between p-4 border-b border-subtle`,t),children:e})}function we({children:e,className:t}){let n=_(null);return te(()=>{n.current&&(n.current.scrollTop=be)},[]),h(()=>{let e=n.current;if(!e)return;let t=()=>{be=e.scrollTop};return e.addEventListener(`scroll`,t,{passive:!0}),()=>e.removeEventListener(`scroll`,t)},[]),y(`div`,{ref:n,className:c(`flex-1 overflow-y-auto p-4 pb-16 custom-scrollbar`,t),children:y(`nav`,{className:`flex flex-col gap-6`,children:e})})}const J=({title:e,icon:t,children:n,className:r})=>b(`div`,{className:r,children:[e&&b(`h4`,{className:`px-2 mb-2 flex items-center gap-2 text-[11px] font-bold uppercase tracking-widest text-muted/50`,children:[t&&y(t,{size:12}),e]}),y(`div`,{className:`flex flex-col gap-0.5`,children:n})]}),Y=({label:e,href:t,active:n,icon:r,badge:a,className:o})=>b(i,{href:t,className:c(`group flex items-center gap-2.5 rounded-lg px-2.5 py-1.5 text-sm transition-all outline-none`,n?`bg-primary-500/10 text-primary-500 font-medium shadow-sm`:`text-muted hover:bg-surface hover:text-body`,o),children:[r&&y(r,{size:16,className:c(n?`text-primary-500`:`text-muted group-hover:text-body`)}),y(`span`,{className:`truncate`,children:e}),a&&y(xe,{badge:a})]}),X=({label:t,href:n,active:r,icon:i,badge:a,isOpen:o,onToggle:s,children:l,className:u})=>b(`div`,{className:`flex flex-col gap-0.5`,children:[b(`div`,{className:`group relative flex items-center`,children:[y(Y,{label:t,href:n,active:r,icon:i,badge:a,className:c(`flex-1 pr-8`,u)}),y(`button`,{onClick:e=>{e.preventDefault(),e.stopPropagation(),s()},className:`absolute right-1 p-1.5 text-muted hover:text-body transition-colors outline-none cursor-pointer`,children:y(e,{size:14,className:c(`transition-transform duration-200`,o&&`rotate-90`)})})]}),o&&y(`div`,{className:`ml-4 pl-3 border-l border-subtle/50 mt-0.5 flex flex-col gap-0.5`,children:l})]});function Z({route:e,activePath:t,activeRoute:n,className:r}){let i=a(e.path),o=t===(i.endsWith(`/`)?i.slice(0,-1):i)||!!n?.filePath&&!!e.filePath&&n.filePath===e.filePath,s=!!e.routes?.length||!!e.subRoutes?.length,c=e.routes||e.subRoutes,[l,u]=v(()=>t.startsWith(i)||!!n?.filePath&&!!e.filePath&&n.filePath===e.filePath),[d,f]=v(t);return t!==d&&(f(t),(t.startsWith(i)||n?.filePath&&e.filePath&&n.filePath===e.filePath)&&u(!0)),s?y(X,{label:e.title,href:e.path,active:o,icon:K(e.icon),badge:e.badge,isOpen:l,onToggle:()=>u(!l),className:r,children:c?.map(e=>y(Z,{route:e,activePath:t,activeRoute:n},e.path))}):y(Y,{label:e.title,href:e.path,active:o,icon:K(e.icon),badge:e.badge,className:r})}function Q({routes:e,className:t}){let{groups:n,ungrouped:r,activePath:i,activeRoute:a}=ye(e);return b(`div`,{className:c(`flex flex-col gap-6`,t),children:[r.length>0&&y(J,{children:r.map(e=>y(Z,{route:e,activePath:i,activeRoute:a},e.path))}),n.map(e=>y(J,{title:e.title,icon:K(e.icon),children:e.routes.map(e=>y(Z,{route:e,activePath:i,activeRoute:a},e.path))},e.title))]})}const Te=Object.assign(q,{Root:q,Mobile:Se,Header:Ce,Content:we,Group:J,Link:Y,SubGroup:X,Item:Z,Items:Q}),Ee=()=>l();function De(e=`.boltdocs-page`){let{search:t}=Ee(),n=new URLSearchParams(t).get(`hl`);h(()=>{if(!n){$(e);return}let t=document.querySelector(e);if(!t)return;let r,i=new MutationObserver(e=>{e.some(e=>{let t=Array.from(e.addedNodes),n=Array.from(e.removedNodes);return t.some(e=>!(e instanceof HTMLElement&&e.hasAttribute(`data-search-highlight`)))||n.some(e=>!(e instanceof HTMLElement&&e.hasAttribute(`data-search-highlight`)))})&&a()});function a(){cancelAnimationFrame(r),r=requestAnimationFrame(()=>{i.disconnect(),$(e);let r=n.split(/\s+/).map(e=>e.trim()).filter(e=>e.length>=2);r.length>0&&Oe(t,r),i.observe(t,{childList:!0,subtree:!0})})}return a(),()=>{cancelAnimationFrame(r),i.disconnect(),$(e)}},[n,t,e])}function $(e){document.querySelectorAll(`${e} mark[data-search-highlight]`).forEach(e=>{try{let t=e.parentNode;if(t&&t.contains(e)){let n=e.textContent||``;t.replaceChild(document.createTextNode(n),e)}}catch{}})}function Oe(e,t){let n=document.createTreeWalker(e,NodeFilter.SHOW_TEXT,{acceptNode:e=>{let t=e.parentElement;return t&&(t.tagName===`SCRIPT`||t.tagName===`STYLE`||t.tagName===`MARK`||t.closest(`pre`)||t.closest(`code`))?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT}}),r=[],i;for(;i=n.nextNode();)r.push(i);let a={a:`[aáàäâã]`,e:`[eéèëê]`,i:`[iíìïî]`,o:`[oóòöôõ]`,u:`[uúùüû]`,n:`[nñ]`,c:`[cç]`},o=e=>{let t=e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`);return t=t.split(``).map(e=>a[e.toLowerCase()]||e).join(``),t},s=t.map(o).join(`|`),c=RegExp(`(${s})`,`gi`),l=t.map(e=>{let t=o(e);return RegExp(`^${t}$`,`i`)});r.forEach(e=>{let t=e.textContent;if(t&&c.test(t)){let n=document.createDocumentFragment();t.split(c).forEach(e=>{if(l.some(t=>t.test(e))){let t=document.createElement(`mark`);t.textContent=e,t.setAttribute(`data-search-highlight`,`true`),n.appendChild(t)}else e&&n.appendChild(document.createTextNode(e))}),e.parentNode&&e.parentNode.replaceChild(n,e)}})}function ke(){return De(`.boltdocs-page`),null}function Ae({children:e,className:t,style:n}){return y(`div`,{className:c(`h-screen flex flex-col overflow-hidden bg-main text-body`,t),style:n,children:e})}function je({children:e,className:t,style:n}){return y(`div`,{className:c(`mx-auto flex flex-1 w-full max-w-(--breakpoint-3xl) bg-main overflow-hidden`,t),style:n,children:e})}function Me({children:e,className:t,style:n}){return y(`main`,{className:c(`boltdocs-content flex-1 min-w-0 overflow-y-auto`,`contain-layout`,t),style:n,children:e})}function Ne({children:e,className:t,style:n}){return b(`div`,{className:c(`boltdocs-page mx-auto pt-4 pb-20 px-4 sm:px-8`,t),style:n,children:[y(ke,{}),e]})}function Pe({children:e,className:t,style:n}){return y(`header`,{className:c(`mb-10`,t),style:n,children:e})}function Fe({children:e,className:t,style:n}){return y(`div`,{className:c(`mt-20`,t),style:n,children:e})}const Ie=Object.assign(Ae,{Body:je,Content:Me,ContentMdx:Ne,Header:Pe,Footer:Fe});export{w as A,N as C,me as D,D as E,C as M,S as N,E as O,P as S,k as T,L as _,we as a,F as b,Z as c,Se as d,q as f,I as g,G as h,Te as i,ce as j,T as k,Q as l,ye as m,De as n,J as o,X as p,Ee as r,Ce as s,Ie as t,Y as u,U as v,he as w,_e as x,W as y};
@@ -1,6 +0,0 @@
1
- /**
2
- * Boltdocs - https://boltdocs.vercel.app
3
- * Copyright (c) 2026 Jesus Alcala
4
- * Licensed under the MIT License.
5
- */
6
- const e=require(`./icons-dev-BlV3wWFT.cjs`);let t=require(`react-router-dom`),n=require(`react`);n=e.rt(n);let r=require(`react/jsx-runtime`),i=require(`react-aria-components`);i=e.rt(i);let a=require(`virtual:boltdocs-icons`);a=e.rt(a);let o=require(`scroll-into-view-if-needed`);o=e.rt(o);const s=({children:t,className:n,...a})=>(0,r.jsx)(i.Breadcrumbs,{className:e.y(`flex flex-wrap items-center`,n),...a,children:t});s.Root=s,s.Item=({children:t,className:n,...a})=>(0,r.jsx)(i.Breadcrumb,{className:e.y(`flex items-center`,n),...a,children:t}),s.Link=({children:t,href:n,className:i,...a})=>(0,r.jsx)(e._,{href:n,className:e.y(`cursor-pointer`,i),...a,children:t}),s.Separator=({className:t})=>(0,r.jsx)(e.D,{size:14,className:e.y(`shrink-0`,t)});const c=({...e})=>(0,r.jsx)(i.Button,{...e}),l=({children:t,className:n,vertical:i=!1})=>(0,r.jsx)(`div`,{className:e.y(`inline-flex`,i?`flex-col`:`flex-row`,!i&&[`[&>*:not(:first-child)]:-ml-px`,`[&>*:first-child]:rounded-r-none`,`[&>*:last-child]:rounded-l-none`,`[&>*:not(:first-child):not(:last-child)]:rounded-none`,n?.includes(`rounded-full`)&&[`[&>*:first-child]:rounded-l-full`,`[&>*:last-child]:rounded-r-full`],n?.includes(`rounded-xl`)&&[`[&>*:first-child]:rounded-l-xl`,`[&>*:last-child]:rounded-r-xl`],n?.includes(`rounded-lg`)&&[`[&>*:first-child]:rounded-l-lg`,`[&>*:last-child]:rounded-r-lg`]],i&&[`[&>*:not(:first-child)]:-mt-px`,`[&>*:first-child]:rounded-b-none`,`[&>*:last-child]:rounded-t-none`,`[&>*:not(:first-child):not(:last-child)]:rounded-none`,n?.includes(`rounded-full`)&&[`[&>*:first-child]:rounded-t-full`,`[&>*:last-child]:rounded-b-full`]],n),children:t}),u=({children:t,className:n,...a})=>(0,r.jsx)(i.Popover,{offset:8,className:e.y(`z-50 overflow-auto outline-none transition-none`,n),...a,children:t});function d({placement:e,className:t,...a}){let[o,s]=n.Children.toArray(a.children).slice(0,2);return(0,r.jsxs)(i.MenuTrigger,{...a,children:[o,(0,r.jsx)(u,{placement:e,className:t,children:s})]})}function f({className:e,...t}){let[a,o]=n.Children.toArray(t.children).slice(0,2);return(0,r.jsxs)(i.SubmenuTrigger,{...t,children:[a,(0,r.jsx)(u,{offset:-4,crossOffset:-4,className:e,children:o})]})}function p(t){return(0,r.jsx)(i.Menu,{...t,className:i.composeRenderProps(t.className,t=>e.y(`outline-none overflow-auto`,t))})}function m(t){let n=t.textValue||(typeof t.children==`string`?t.children:void 0);return(0,r.jsx)(i.MenuItem,{...t,textValue:n,className:i.composeRenderProps(t.className,t=>e.y(`group relative flex flex-row items-center cursor-default outline-none`,t)),children:i.composeRenderProps(t.children,(t,{selectionMode:n,isSelected:i,hasSubmenu:a})=>(0,r.jsxs)(r.Fragment,{children:[n===`multiple`&&(0,r.jsx)(`span`,{className:`flex items-center shrink-0 justify-center`,children:i&&(0,r.jsx)(e.w,{className:`size-3.5`})}),(0,r.jsx)(`div`,{className:`flex flex-row w-full items-center`,children:t}),a&&(0,r.jsx)(e.D,{className:`size-4 ml-auto`})]}))})}function ee({title:t,...n}){return(0,r.jsxs)(i.MenuSection,{...n,className:e.y(`flex flex-col`,n.className),children:[t&&(0,r.jsx)(i.Header,{className:`select-none`,children:t}),(0,r.jsx)(i.Collection,{items:n.items,children:n.children})]})}function te(t){return(0,r.jsx)(i.Separator,{...t,className:e.y(`border-t`,t.className)})}p.Root=p,p.Item=m,p.Trigger=d,p.SubTrigger=f,p.Section=ee,p.Separator=te;var ne=class extends n.Component{state={hasError:!1,error:null};static getDerivedStateFromError(e){return{hasError:!0,error:e}}componentDidCatch(e,t){this.props.onError?this.props.onError(e,t):console.error(`ErrorBoundary caught an unhandled error:`,e,t)}resetErrorBoundary=()=>{this.props.onReset&&this.props.onReset(),this.setState({hasError:!1,error:null})};render(){let{hasError:e,error:t}=this.state,{children:n,fallback:i,FallbackComponent:a}=this.props;return e&&t?a?(0,r.jsx)(a,{error:t,resetErrorBoundary:this.resetErrorBoundary}):i||(0,r.jsx)(h,{error:t,resetErrorBoundary:this.resetErrorBoundary}):n}};function h({error:e,resetErrorBoundary:t}){return(0,r.jsxs)(`div`,{className:`flex flex-col items-center justify-center min-h-[40vh] text-center gap-4 px-6 py-8 border border-subtle bg-surface rounded-2xl max-w-lg mx-auto shadow-xs`,children:[(0,r.jsx)(`div`,{className:`text-lg font-bold text-rose-600 dark:text-rose-400`,children:`Something went wrong`}),(0,r.jsx)(`p`,{className:`text-sm text-muted max-w-sm leading-relaxed`,children:e?.message||`An unexpected error occurred while rendering this page.`}),(0,r.jsx)(c,{className:`rounded-xl border border-subtle bg-main px-6 py-2.5 text-xs font-semibold text-body hover:bg-primary-50/50 hover:border-primary-500/50 transition-all duration-300 cursor-pointer outline-none select-none`,onPress:t,children:`Try again`})]})}const g=({children:t,className:n=``,...i})=>(0,r.jsx)(`div`,{className:e.y(`w-full`,n),...i,children:t});g.Root=g,g.List=({children:t,className:n=``})=>(0,r.jsx)(`div`,{role:`tablist`,className:e.y(`relative flex flex-row items-center`,n),children:t}),g.Item=({children:t,id:n,selected:i,className:a=``,...o})=>(0,r.jsx)(`button`,{role:`tab`,"aria-selected":i,"data-selected":i,className:e.y(`outline-none cursor-pointer bg-transparent border-none`,a),...o,children:t}),g.Content=({children:t,className:n=``})=>(0,r.jsx)(`div`,{className:e.y(`outline-none`,n),children:t}),g.Indicator=({className:t=``,style:n})=>(0,r.jsx)(`div`,{className:e.y(`absolute bottom-0`,t),style:n});const _=(0,n.createContext)(void 0);function v({children:e}){let[i,a]=(0,n.useState)(!1),o=(0,t.useLocation)();return(0,n.useEffect)(()=>{a(!1)},[o.pathname]),(0,r.jsx)(_.Provider,{value:{isSidebarOpen:i,toggleSidebar:()=>a(e=>!e),closeSidebar:()=>a(!1)},children:e})}function y(){let e=(0,n.useContext)(_);return e===void 0?{isSidebarOpen:!1,toggleSidebar:()=>{},closeSidebar:()=>{}}:e}function b(e){return e.startsWith(`#`)?e.slice(1):null}var x=class{items=[];single=!1;observer=null;onChange;callback(e){for(let e of this.items){let t=document.getElementById(e.id);if(!t){e.active=!1,e.fallback=!1;continue}let n=t.getBoundingClientRect(),r=typeof window<`u`?window.innerHeight:1e3,i=n.bottom>0&&n.top<r;e.active=i,e.fallback=!i&&n.top>0&&n.top<r*2}if(this.single){let e=-1,t=this.items.map((e,t)=>({item:e,idx:t})).filter(({item:e})=>e.active);if(t.length>0)e=t[0].idx;else{let t=this.items.map((e,t)=>({item:e,idx:t})).filter(({item:e})=>e.fallback);t.length>0?e=t[0].idx:this.items.length>0&&(e=0)}this.items=this.items.map((t,n)=>({...t,active:n===e,t:n===e?Date.now():t.t}))}else this.items=this.items.map((e,t)=>({...e,active:e.active,t:e.active?Date.now():e.t}));this.onChange?.()}setItems(e){let t=this.observer;if(t)for(let e of this.items){let n=document.getElementById(e.id);n&&t.unobserve(n)}this.items=[];for(let t of e){let e=b(t.url);e&&this.items.push({id:e,active:!1,fallback:!1,t:0,original:t})}this.watchItems(),typeof window<`u`&&(setTimeout(()=>this.watchItems(),100),setTimeout(()=>this.watchItems(),500),setTimeout(()=>this.watchItems(),1e3)),this.onChange?.()}watch(e){this.observer||(this.observer=new IntersectionObserver(this.callback.bind(this),e),this.watchItems())}watchItems(){if(this.observer)for(let e of this.items){let t=document.getElementById(e.id);t&&this.observer.observe(t)}}unwatch(){this.observer?.disconnect(),this.observer=null}};const S=(0,n.createContext)(null),C=(0,n.createContext)(null);function w(){let e=(0,n.use)(S);if(!e)throw Error(`Component must be used under the <AnchorProvider /> component.`);return e}function T(){let e=w();return(0,n.useMemo)(()=>{let t;for(let n of e)n.active&&(!t||n.t>t.t)&&(t=n);return t?.id},[e])}function E(){let e=w();return(0,n.useMemo)(()=>{let t=[];for(let n of e)n.active&&t.push(n.id);return t},[e])}function D({containerRef:e,children:t}){return(0,r.jsx)(C.Provider,{value:e,children:t})}function O({toc:e,single:t=!1,observerOptions:i,children:a}){let o=(0,n.useMemo)(()=>new x,[]),[s,c]=(0,n.useState)(o.items);return o.single=t,(0,n.useEffect)(()=>{o.setItems(e)},[o,e]),(0,n.useEffect)(()=>{let e={rootMargin:`-80px 0% -60% 0%`,threshold:0},t=i?{...e,...i}:e;return o.watch(t),o.onChange=()=>c([...o.items]),()=>{o.unwatch()}},[o]),(0,r.jsx)(S.Provider,{value:s,children:a})}const k=({children:t,className:n})=>(0,r.jsx)(`nav`,{className:e.y(`sticky top-navbar hidden xl:flex flex-col shrink-0`,`w-toc`,`py-4 pl-6 pr-4`,n),children:t}),re=({children:t,className:n,...i})=>(0,r.jsx)(`div`,{className:e.y(`mb-4 text-xs font-bold text-body`,n),...i,children:t}),A=({children:t,className:i,ref:a,...o})=>{let s=(0,n.useRef)(null);return(0,n.useImperativeHandle)(a,()=>s.current),(0,r.jsx)(`div`,{ref:s,className:e.y(`relative overflow-y-auto boltdocs-otp-content pb-12`,`max-h-[70%]`,i),style:{maskImage:`linear-gradient(to bottom, black 90%, transparent 100%)`,WebkitMaskImage:`linear-gradient(to bottom, black 90%, transparent 100%)`},...o,children:t})};A.displayName=`OnThisPageContent`;const j=({children:t,className:n})=>(0,r.jsx)(`ul`,{className:e.y(`relative space-y-0.5 text-sm border-l border-subtle`,n),children:t}),M=({level:t,children:n,className:i})=>(0,r.jsx)(`li`,{className:e.y(t===3&&`pl-3`,i),children:n}),N=({children:t,href:i,active:a,onClick:s,className:c})=>{let l=(0,n.use)(S),u=(0,n.use)(C),d=i?b(i):null,f=(0,n.useRef)(null),p=a===void 0?d&&l?!!l.find(e=>e.id===d)?.active:!1:a;return(0,n.useEffect)(()=>{p&&f.current&&u?.current&&(0,o.default)(f.current,{behavior:`smooth`,block:`center`,inline:`center`,scrollMode:`if-needed`,boundary:u.current})},[p,u]),(0,r.jsx)(`a`,{ref:f,href:i,onClick:e=>{if(s)s(e);else if(i&&i.startsWith(`#`)){e.preventDefault();let t=i.slice(1),n=document.getElementById(t);n&&(n.scrollIntoView({behavior:`smooth`}),window.history.pushState(null,``,i))}},"data-active":p,className:e.y(`block py-0.5 pl-4 text-[13px] outline-none transition-colors`,p?`text-primary-500`:`text-muted hover:text-body`,c),children:t})},P=({style:t,className:i})=>{let a=(0,n.useRef)(null),[o,s]=(0,n.useState)({opacity:0,...t});return(0,n.useEffect)(()=>{let e=a.current?.parentElement;if(!e)return;let n=e.querySelectorAll(`a[data-active="true"]`);if(n.length>0){let r=n[0],i=n[n.length-1],a=r.getBoundingClientRect(),o=i.getBoundingClientRect(),c=e.getBoundingClientRect(),l=a.top-c.top,u=o.bottom-a.top;s({transform:`translateY(${l}px)`,height:`${u}px`,opacity:1,...t})}else s({opacity:0,...t})},[w(),t]),(0,r.jsx)(`div`,{ref:a,className:e.y(`absolute -left-px w-0.5 rounded-full bg-primary-500`,i),style:{transition:`transform 180ms cubic-bezier(0.2, 0.8, 0.2, 1), height 180ms cubic-bezier(0.2, 0.8, 0.2, 1), opacity 150ms`,...o}})};function F({headings:e=[],className:t}){let n=E();return e.length===0?null:(0,r.jsxs)(j,{className:t,children:[(0,r.jsx)(P,{}),e.map(e=>(0,r.jsx)(M,{level:e.level,children:(0,r.jsx)(N,{href:`#${e.id}`,active:n.includes(e.id),children:e.text})},e.id))]})}function I({headings:e=[],className:t}){let i=(0,n.useMemo)(()=>e.map(e=>({title:e.text,url:`#${e.id}`,depth:e.level})),[e]),a=(0,n.useRef)(null);return e.length===0?null:(0,r.jsx)(O,{toc:i,single:!1,children:(0,r.jsx)(D,{containerRef:a,children:(0,r.jsx)(A,{ref:a,children:(0,r.jsx)(F,{headings:e,className:t})})})})}k.Root=k,k.Header=re,k.Content=A,k.List=j,k.Item=M,k.Link=N,k.Indicator=P,k.Items=F,k.Tree=I;const L=({children:t,className:n})=>(0,r.jsx)(`nav`,{className:e.y(`grid sm:grid-cols-2 gap-4`,n),children:t});L.Root=L,L.Link=({children:t,to:n,direction:i,className:a})=>{let o=i===`next`;return(0,r.jsxs)(e._,{href:n,className:e.y(`flex items-center outline-none no-underline`,o?`justify-end`:`justify-start`,a),children:[!o&&(0,r.jsx)(e.E,{className:`shrink-0`}),(0,r.jsx)(`div`,{className:`flex flex-col flex-1`,children:t}),o&&(0,r.jsx)(e.D,{className:`shrink-0`})]})},L.Title=({children:t,className:n})=>(0,r.jsx)(`span`,{className:e.y(n),children:t}),L.Description=({children:t,className:n})=>(0,r.jsx)(`span`,{className:e.y(`truncate`,n),children:t}),L.Icon=({children:e})=>(0,r.jsx)(r.Fragment,{children:e});function R(r){let i=e.nt(),a=e.Z((0,t.useLocation)().pathname);return(0,n.useMemo)(()=>{let t=r.find(t=>e.Z(t.path)===a),n=t?.tab?.toLowerCase(),o=n?r.filter(e=>!e.tab||e.tab.toLowerCase()===n):r,s={};if(i.directoryMeta)for(let[e,t]of Object.entries(i.directoryMeta)){let n=e.split(`/`).filter(e=>!e.startsWith(`(`)||!e.endsWith(`)`)).map(e=>e.replace(/^\d+-/,``)).join(`/`);s[n===``?`.`:n]=t}let c=e=>e.charAt(0).toUpperCase()+e.slice(1).replace(/-/g,` `),l=new Map,u=[],d=(e,t)=>{let n=t,r=``,i=null;for(let t=0;t<e.length;t++){let a=e[t],o=r?`${r}/${a}`:a;if(!n.has(a)){let e=s[o]||{},t={path:`#`,title:e.title||c(a),componentPath:``,filePath:``,icon:e.icon,groupPosition:typeof e.order==`number`?e.order:999,subRoutes:[]};n.set(a,t)}i=n.get(a),i._subMap||=new Map,n=i._subMap,r=o}return i},f=[...o].sort((e,t)=>(e.sidebarPosition??e.order??999)-(t.sidebarPosition??t.order??999));for(let e of f){if(e.sidebarHidden)continue;let t=e.slugParts||[],n=e.filePath.split(`/`).pop()||``,r=/^index\.mdx?$/.test(n);if(t.length===0){e.filePath&&u.push(e);continue}if(r){let n=d(t,l);n&&(n.path=e.path,n.title=e.title||n.title,n.icon=e.icon||n.icon,n.badge=e.badge,n.sidebarPosition=e.sidebarPosition,n.frontmatter=e.frontmatter)}else{let n=d(t,l);n&&n.subRoutes.push(e)}}let p=(e,t=``)=>(e.forEach(e=>{if(e._subMap){let t=Array.from(e._subMap.values());e.subRoutes=[...e.subRoutes||[],...t],delete e._subMap}e.subRoutes&&e.subRoutes.length>0&&(e.subRoutes=p(e.subRoutes))}),e.sort((e,t)=>{let n=e.sidebarPosition??e.groupPosition??999,r=t.sidebarPosition??t.groupPosition??999;return n===r?e.title.localeCompare(t.title):n-r})),m=p(Array.from(l.values()));return m.map(e=>({slug:e.title.toLowerCase().replace(/\s+/g,`-`),title:e.title,icon:e.icon,routes:[e]})),{groups:m.map(e=>e.subRoutes&&e.subRoutes.length>0?{slug:e.title.toLowerCase().replace(/\s+/g,`-`),title:e.title,icon:e.icon,routes:e.subRoutes}:(u.push(e),null)).filter(Boolean),ungrouped:p(u),activeRoute:t,activePath:a,config:i}},[r,i,a])}let z=0;function B(t){if(!t)return;let n={...e.Y,...a.default};return n[t]||n[t+`Icon`]||void 0}const V=({badge:t})=>{let n={new:`bg-primary-500/10 text-primary-500 border border-primary-500/20`,updated:`bg-emerald-500/10 text-emerald-500 border border-emerald-500/20`,deprecated:`bg-danger-500/10 text-danger-500 border border-danger-500/20`},i=typeof t==`string`?t:t?.text;return i?(0,r.jsx)(`span`,{className:e.y(`ml-auto flex h-5 items-center rounded-md text-[10px] font-bold px-1.5 py-0.5 uppercase tracking-wider`,n[i]||n.new),children:i}):null};function H({children:t,className:n}){return(0,r.jsx)(`aside`,{className:e.y(`hidden lg:flex flex-col w-sidebar sticky top-navbar h-[calc(100vh-var(--spacing-navbar))] border-r border-subtle bg-main`,n),children:t})}function U({children:t,className:n}){let{isSidebarOpen:a,closeSidebar:o}=y();return(0,r.jsx)(i.ModalOverlay,{isOpen:a,onOpenChange:e=>!e&&o(),isDismissable:!0,className:e.y(`fixed inset-0 z-50 bg-black/20 backdrop-blur-sm lg:hidden`,`entering:animate-in entering:fade-in exiting:animate-out exiting:fade-out duration-300`),children:(0,r.jsx)(i.Modal,{className:e.y(`fixed top-0 left-0 bottom-0 w-80 bg-main border-r border-subtle shadow-2xl outline-none`,`entering:animate-in entering:slide-in-from-left exiting:animate-out exiting:slide-out-to-left duration-300`,n),children:(0,r.jsx)(i.Dialog,{className:`h-full focus:outline-none outline-none flex flex-col`,children:t})})})}function W({children:t,className:n}){return(0,r.jsx)(`div`,{className:e.y(`flex items-center justify-between p-4 border-b border-subtle`,n),children:t})}function G({children:t,className:i}){let a=(0,n.useRef)(null);return(0,n.useLayoutEffect)(()=>{a.current&&(a.current.scrollTop=z)},[]),(0,n.useEffect)(()=>{let e=a.current;if(!e)return;let t=()=>{z=e.scrollTop};return e.addEventListener(`scroll`,t,{passive:!0}),()=>e.removeEventListener(`scroll`,t)},[]),(0,r.jsx)(`div`,{ref:a,className:e.y(`flex-1 overflow-y-auto p-4 pb-16 custom-scrollbar`,i),children:(0,r.jsx)(`nav`,{className:`flex flex-col gap-6`,children:t})})}const K=({title:e,icon:t,children:n,className:i})=>(0,r.jsxs)(`div`,{className:i,children:[e&&(0,r.jsxs)(`h4`,{className:`px-2 mb-2 flex items-center gap-2 text-[11px] font-bold uppercase tracking-widest text-muted/50`,children:[t&&(0,r.jsx)(t,{size:12}),e]}),(0,r.jsx)(`div`,{className:`flex flex-col gap-0.5`,children:n})]}),q=({label:t,href:n,active:i,icon:a,badge:o,className:s})=>(0,r.jsxs)(e._,{href:n,className:e.y(`group flex items-center gap-2.5 rounded-lg px-2.5 py-1.5 text-sm transition-all outline-none`,i?`bg-primary-500/10 text-primary-500 font-medium shadow-sm`:`text-muted hover:bg-surface hover:text-body`,s),children:[a&&(0,r.jsx)(a,{size:16,className:e.y(i?`text-primary-500`:`text-muted group-hover:text-body`)}),(0,r.jsx)(`span`,{className:`truncate`,children:t}),o&&(0,r.jsx)(V,{badge:o})]}),J=({label:t,href:n,active:i,icon:a,badge:o,isOpen:s,onToggle:c,children:l,className:u})=>(0,r.jsxs)(`div`,{className:`flex flex-col gap-0.5`,children:[(0,r.jsxs)(`div`,{className:`group relative flex items-center`,children:[(0,r.jsx)(q,{label:t,href:n,active:i,icon:a,badge:o,className:e.y(`flex-1 pr-8`,u)}),(0,r.jsx)(`button`,{onClick:e=>{e.preventDefault(),e.stopPropagation(),c()},className:`absolute right-1 p-1.5 text-muted hover:text-body transition-colors outline-none cursor-pointer`,children:(0,r.jsx)(e.D,{size:14,className:e.y(`transition-transform duration-200`,s&&`rotate-90`)})})]}),s&&(0,r.jsx)(`div`,{className:`ml-4 pl-3 border-l border-subtle/50 mt-0.5 flex flex-col gap-0.5`,children:l})]});function Y({route:t,activePath:i,activeRoute:a,className:o}){let s=e.b(t.path),c=i===(s.endsWith(`/`)?s.slice(0,-1):s)||!!a?.filePath&&!!t.filePath&&a.filePath===t.filePath,l=!!t.routes?.length||!!t.subRoutes?.length,u=t.routes||t.subRoutes,[d,f]=(0,n.useState)(()=>i.startsWith(s)||!!a?.filePath&&!!t.filePath&&a.filePath===t.filePath),[p,m]=(0,n.useState)(i);return i!==p&&(m(i),(i.startsWith(s)||a?.filePath&&t.filePath&&a.filePath===t.filePath)&&f(!0)),l?(0,r.jsx)(J,{label:t.title,href:t.path,active:c,icon:B(t.icon),badge:t.badge,isOpen:d,onToggle:()=>f(!d),className:o,children:u?.map(e=>(0,r.jsx)(Y,{route:e,activePath:i,activeRoute:a},e.path))}):(0,r.jsx)(q,{label:t.title,href:t.path,active:c,icon:B(t.icon),badge:t.badge,className:o})}function X({routes:t,className:n}){let{groups:i,ungrouped:a,activePath:o,activeRoute:s}=R(t);return(0,r.jsxs)(`div`,{className:e.y(`flex flex-col gap-6`,n),children:[a.length>0&&(0,r.jsx)(K,{children:a.map(e=>(0,r.jsx)(Y,{route:e,activePath:o,activeRoute:s},e.path))}),i.map(e=>(0,r.jsx)(K,{title:e.title,icon:B(e.icon),children:e.routes.map(e=>(0,r.jsx)(Y,{route:e,activePath:o,activeRoute:s},e.path))},e.title))]})}const ie=Object.assign(H,{Root:H,Mobile:U,Header:W,Content:G,Group:K,Link:q,SubGroup:J,Item:Y,Items:X}),Z=()=>(0,t.useLocation)();function Q(e=`.boltdocs-page`){let{search:t}=Z(),r=new URLSearchParams(t).get(`hl`);(0,n.useEffect)(()=>{if(!r){$(e);return}let t=document.querySelector(e);if(!t)return;let n,i=new MutationObserver(e=>{e.some(e=>{let t=Array.from(e.addedNodes),n=Array.from(e.removedNodes);return t.some(e=>!(e instanceof HTMLElement&&e.hasAttribute(`data-search-highlight`)))||n.some(e=>!(e instanceof HTMLElement&&e.hasAttribute(`data-search-highlight`)))})&&a()});function a(){cancelAnimationFrame(n),n=requestAnimationFrame(()=>{i.disconnect(),$(e);let n=r.split(/\s+/).map(e=>e.trim()).filter(e=>e.length>=2);n.length>0&&ae(t,n),i.observe(t,{childList:!0,subtree:!0})})}return a(),()=>{cancelAnimationFrame(n),i.disconnect(),$(e)}},[r,t,e])}function $(e){document.querySelectorAll(`${e} mark[data-search-highlight]`).forEach(e=>{try{let t=e.parentNode;if(t&&t.contains(e)){let n=e.textContent||``;t.replaceChild(document.createTextNode(n),e)}}catch{}})}function ae(e,t){let n=document.createTreeWalker(e,NodeFilter.SHOW_TEXT,{acceptNode:e=>{let t=e.parentElement;return t&&(t.tagName===`SCRIPT`||t.tagName===`STYLE`||t.tagName===`MARK`||t.closest(`pre`)||t.closest(`code`))?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT}}),r=[],i;for(;i=n.nextNode();)r.push(i);let a={a:`[aáàäâã]`,e:`[eéèëê]`,i:`[iíìïî]`,o:`[oóòöôõ]`,u:`[uúùüû]`,n:`[nñ]`,c:`[cç]`},o=e=>{let t=e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`);return t=t.split(``).map(e=>a[e.toLowerCase()]||e).join(``),t},s=t.map(o).join(`|`),c=RegExp(`(${s})`,`gi`),l=t.map(e=>{let t=o(e);return RegExp(`^${t}$`,`i`)});r.forEach(e=>{let t=e.textContent;if(t&&c.test(t)){let n=document.createDocumentFragment();t.split(c).forEach(e=>{if(l.some(t=>t.test(e))){let t=document.createElement(`mark`);t.textContent=e,t.setAttribute(`data-search-highlight`,`true`),n.appendChild(t)}else e&&n.appendChild(document.createTextNode(e))}),e.parentNode&&e.parentNode.replaceChild(n,e)}})}function oe(){return Q(`.boltdocs-page`),null}function se({children:t,className:n,style:i}){return(0,r.jsx)(`div`,{className:e.y(`h-screen flex flex-col overflow-hidden bg-main text-body`,n),style:i,children:t})}function ce({children:t,className:n,style:i}){return(0,r.jsx)(`div`,{className:e.y(`mx-auto flex flex-1 w-full max-w-(--breakpoint-3xl) bg-main overflow-hidden`,n),style:i,children:t})}function le({children:t,className:n,style:i}){return(0,r.jsx)(`main`,{className:e.y(`boltdocs-content flex-1 min-w-0 overflow-y-auto`,`contain-layout`,n),style:i,children:t})}function ue({children:t,className:n,style:i}){return(0,r.jsxs)(`div`,{className:e.y(`boltdocs-page mx-auto pt-4 pb-20 px-4 sm:px-8`,n),style:i,children:[(0,r.jsx)(oe,{}),t]})}function de({children:t,className:n,style:i}){return(0,r.jsx)(`header`,{className:e.y(`mb-10`,n),style:i,children:t})}function fe({children:t,className:n,style:i}){return(0,r.jsx)(`div`,{className:e.y(`mt-20`,n),style:i,children:t})}const pe=Object.assign(se,{Body:ce,Content:le,ContentMdx:ue,Header:de,Footer:fe});Object.defineProperty(exports,`A`,{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,`C`,{enumerable:!0,get:function(){return w}}),Object.defineProperty(exports,`D`,{enumerable:!0,get:function(){return ne}}),Object.defineProperty(exports,`E`,{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,`M`,{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,`N`,{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,`O`,{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,`S`,{enumerable:!0,get:function(){return E}}),Object.defineProperty(exports,`T`,{enumerable:!0,get:function(){return y}}),Object.defineProperty(exports,`_`,{enumerable:!0,get:function(){return k}}),Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return G}}),Object.defineProperty(exports,`b`,{enumerable:!0,get:function(){return D}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return Y}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return U}}),Object.defineProperty(exports,`f`,{enumerable:!0,get:function(){return H}}),Object.defineProperty(exports,`g`,{enumerable:!0,get:function(){return O}}),Object.defineProperty(exports,`h`,{enumerable:!0,get:function(){return L}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return ie}}),Object.defineProperty(exports,`j`,{enumerable:!0,get:function(){return l}}),Object.defineProperty(exports,`k`,{enumerable:!0,get:function(){return p}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return X}}),Object.defineProperty(exports,`m`,{enumerable:!0,get:function(){return R}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return Q}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return K}}),Object.defineProperty(exports,`p`,{enumerable:!0,get:function(){return J}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return Z}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return W}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return pe}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return q}}),Object.defineProperty(exports,`v`,{enumerable:!0,get:function(){return F}}),Object.defineProperty(exports,`w`,{enumerable:!0,get:function(){return v}}),Object.defineProperty(exports,`x`,{enumerable:!0,get:function(){return T}}),Object.defineProperty(exports,`y`,{enumerable:!0,get:function(){return I}});
@@ -1,21 +0,0 @@
1
- /**
2
- * Boltdocs - https://boltdocs.vercel.app
3
- * Copyright (c) 2026 Jesus Alcala
4
- * Licensed under the MIT License.
5
- */
6
- import{t as e}from"./rolldown-runtime-fkIsjY3S.mjs";import{_ as t,i as n,l as r,u as i,v as a}from"./utils-CG65J0Sc.mjs";import{createRequire as o}from"node:module";import{loadConfigFromFile as s}from"vite";import c from"node:path";import{fdir as l}from"fdir";import u from"fs";import{z as d}from"zod";import*as f from"@bdocs/dui";import{bullet as p,colors as m,confirm as ee,dividerLog as h,double as g,error as _,info as v,round as te,single as ne,success as y,tasks as re,warn as b}from"@bdocs/dui";import x from"node:fs";import S from"path";import ie from"picomatch";import{distance as C}from"fastest-levenshtein";const w=d.object({icon:d.string().max(50),link:d.string().url()});d.object({text:d.string().max(2e3).optional()});const T=d.enum([`fs:read`,`fs:write`,`vite:config`,`mdx:remark`,`mdx:rehype`,`components`,`hooks:build`,`hooks:dev`]),E=d.object({name:d.string(),enforce:d.enum([`pre`,`post`]).optional(),version:d.string().optional(),boltdocsVersion:d.string().optional(),permissions:d.array(T).optional(),remarkPlugins:d.array(d.any()).optional(),rehypePlugins:d.array(d.any()).optional(),vitePlugins:d.array(d.any()).optional(),components:d.record(d.string(),d.string()).optional(),hooks:d.record(d.string(),d.any()).optional()}),D=d.object({title:d.union([d.string(),d.record(d.string(),d.string())]).optional(),description:d.union([d.string(),d.record(d.string(),d.string())]).optional(),logo:d.union([d.string(),d.object({dark:d.string(),light:d.string(),alt:d.string().optional(),width:d.number().optional(),height:d.number().optional()})]).optional(),navbar:d.array(d.object({label:d.union([d.string(),d.record(d.string(),d.string())]),href:d.string(),items:d.array(d.object({label:d.union([d.string(),d.record(d.string(),d.string())]),href:d.string()})).optional()})).optional(),sidebar:d.record(d.string(),d.array(d.object({text:d.string(),link:d.string()}))).optional(),sidebarGroups:d.record(d.string(),d.object({title:d.union([d.string(),d.record(d.string(),d.string())]).optional(),icon:d.string().optional()})).optional(),socialLinks:d.array(w).optional(),editLink:d.string().refine(e=>!e||e.includes(`:path`),{message:`editLink must contain ':path' placeholder if specified`}).optional(),communityHelp:d.string().url().optional(),version:d.string().max(50).optional(),githubRepo:d.string().max(100).optional(),favicon:d.string().optional(),tabs:d.array(d.object({id:d.string(),text:d.union([d.string(),d.record(d.string(),d.string())]),icon:d.string().optional()})).optional(),codeTheme:d.union([d.string(),d.object({light:d.string(),dark:d.string()})]).optional()}),O=d.union([d.string(),d.object({rules:d.array(d.object({userAgent:d.string(),allow:d.union([d.string(),d.array(d.string())]).optional(),disallow:d.union([d.string(),d.array(d.string())]).optional()})).optional(),sitemaps:d.array(d.string().url()).optional()})]),k=d.object({defaultLocale:d.string(),locales:d.union([d.record(d.string(),d.string()),d.array(d.string())]).transform(e=>Array.isArray(e)?Object.fromEntries(e.map(e=>[e,e])):e),localeConfigs:d.record(d.string(),d.object({label:d.string().optional(),direction:d.enum([`ltr`,`rtl`]).optional(),htmlLang:d.string().optional(),calendar:d.string().optional()})).optional()}),A=d.object({defaultVersion:d.string(),prefix:d.string().optional(),versions:d.array(d.object({label:d.string(),path:d.string()}))}),j=d.object({headers:d.record(d.string(),d.string()).optional(),enableCSP:d.boolean().optional(),customHeaders:d.record(d.string(),d.string()).optional()}),M=d.object({metatags:d.record(d.string(),d.string()).optional(),indexing:d.enum([`all`,`public`]).optional(),thumbnails:d.object({background:d.string().optional()}).optional()}),N=d.object({measurementId:d.string().min(1,`Measurement ID is required for GA4`),debug:d.boolean().optional(),anonymizeIp:d.boolean().optional(),sendPageView:d.boolean().optional(),cookieFlags:d.string().optional(),autoTrack:d.object({pageViews:d.boolean().optional(),downloads:d.boolean().optional(),externalLinks:d.boolean().optional(),search:d.boolean().optional()}).optional()}),ae=d.object({tagId:d.string().min(1,`Tag ID is required for GTM`),dataLayerName:d.string().optional(),preview:d.string().optional()}),oe=d.object({ga4:N.optional(),gtm:ae.optional()}),se=d.object({siteUrl:d.string().url().optional(),docsDir:d.string().optional(),base:d.string().optional(),theme:D.optional(),i18n:k.optional(),versions:A.optional(),plugins:d.array(E).optional(),robots:O.optional(),security:j.optional(),seo:M.optional(),integrations:oe.optional(),vite:d.record(d.string(),d.unknown()).optional()});function P(e,t,n=process.cwd()){let r=c.resolve(n,`.boltdocs`);x.existsSync(r)||x.mkdirSync(r,{recursive:!0});let i=e.i18n?Object.keys(e.i18n.locales):[],a=e.versions?e.versions.versions.map(e=>e.path):[],o=i.length>0?i.map(e=>`'${e}'`).join(` | `):`string`,s=a.length>0?a.map(e=>`'${e}'`).join(` | `):`string`,l=[`tsx`,`ts`,`jsx`,`js`],u=``,d=``;for(let e of l){let i=c.resolve(n,t,`mdx-components.${e}`);if(x.existsSync(i)){let e=c.join(n,t,`mdx-components`),i=c.relative(r,e).replace(/\\/g,`/`);u=`import type * as MdxComponentsModule from '${i.startsWith(`.`)?i:`./${i}`}'\n`,d=` MdxComponents: typeof MdxComponentsModule`;break}}let f=`// This file is automatically generated by Boltdocs.
7
- // Do not edit this file manually.
8
-
9
- ${u}declare global {
10
- namespace Boltdocs {
11
- interface Types {
12
- Locale: ${o}
13
- Version: ${s}${d?`\n${d}`:``}
14
- }
15
- }
16
- }
17
-
18
- export {}
19
- `;x.writeFileSync(c.resolve(r,`types.d.ts`),f)}function ce(e){return e}const F=[`boltdocs.config.js`,`boltdocs.config.mjs`,`boltdocs.config.ts`];async function I(e,n=process.cwd()){let r=n,i={docsDir:c.resolve(e),theme:{title:`Boltdocs`,description:`A Vite documentation framework`,navbar:[{label:`Home`,href:`/`},{label:`Documentation`,href:`/docs`}],codeTheme:{light:`github-light`,dark:`github-dark`}}},a={};for(let e of F){let t=c.resolve(r,e);if(x.existsSync(t))try{let e=await s({command:`serve`,mode:`development`},t,r);if(e){a=e.config;break}}catch(t){b(`Failed to load config from ${e}:`,t)}}let o={title:a.title,description:a.description,logo:a.logo,favicon:a.favicon,navbar:a.navbar,sidebar:a.sidebar,sidebarGroups:a.theme?.sidebarGroups,socialLinks:a.socialLinks,githubRepo:a.githubRepo,tabs:a.tabs,codeTheme:a.codeTheme,communityHelp:a.communityHelp,version:a.version,editLink:a.editLink,...a.theme||{}},l=Object.fromEntries(Object.entries(o).filter(([e,t])=>t!==void 0));l.navbar&&=l.navbar.map(e=>({label:e.label||e.text||``,href:e.href||e.link||e.to||``,items:e.items}));let u={docsDir:c.resolve(e),theme:{...i.theme,...l},i18n:a.i18n?{...a.i18n,locales:Array.isArray(a.i18n.locales)?Object.fromEntries(a.i18n.locales.map(e=>[e,e])):a.i18n.locales}:void 0,versions:a.versions,siteUrl:a.siteUrl,base:a.base,seo:a.seo,plugins:a.plugins||[],robots:a.robots,security:a.security,integrations:a.integrations,vite:a.vite},d=se.safeParse(u);if(!d.success)throw new t(`Invalid Boltdocs configuration:\n${d.error.issues.map(e=>` - ${e.path.join(`.`)}: ${e.message}`).join(`
20
- `)}`);return d.data}async function le(e,t=process.cwd()){let n=await I(e,t);return P(n,e,t),n}const ue=o(import.meta.url);let L=0;function de(e,t){let n=e.split(`-`)[0].split(`.`).map(Number),r=t.split(`-`)[0].split(`.`).map(Number);for(let e=0;e<Math.max(n.length,r.length);e++){let t=n[e]??0,i=r[e]??0;if(Number.isNaN(t)||Number.isNaN(i))return!1;if(t!==i)return t>i}return!1}async function fe(){try{let e=new AbortController,t=setTimeout(()=>e.abort(),2e3),n=await fetch(`https://registry.npmjs.org/boltdocs/latest`,{signal:e.signal,headers:{Accept:`application/vnd.npm.install-v1+json`}});return clearTimeout(t),n.ok?(await n.json()).version??null:null}catch{return null}}async function pe(){try{return ue(`boltdocs/package.json`).version}catch{return`0.0.0`}}async function R(){let e=Date.now();if(e-L<864e5)return;L=e;let t=await pe();if(t===`0.0.0`)return;let n=await fe();n&&de(n,t)&&console.log(f.updateAvailable(t,n))}const z={$schema:`https://boltdocs.vercel.app/schemas/doctor-config.schema.json`,checks:{metadata:{enabled:!0,titleMin:10,titleMax:60,descriptionMin:50,required:[`title`,`description`],optional:[],validateDates:!1},links:{internal:!0,external:!1,timeout:1e4,concurrency:10,ignore:[]},i18n:{enabled:!0}},fix:{confirmChanges:!1,backupFiles:!1,backupPath:`.boltdocs/backups`},reporting:{format:`pretty`,outputFile:`.boltdocs/doctor-report.json`,failOnError:!1,maxWarnings:-1},severity:{missingTranslation:`warning`,brokenLink:`high`,brokenAnchor:`warning`,largeFile:`warning`,orphanedPage:`low`,duplicateTitle:`low`,shortMetadata:`low`,missingMetadata:`warning`,malformedFrontmatter:`high`,invalidFrontmatter:`high`},exclude:[]};function B(e,t,n){return e.doctorConfig.severity[t]||n}async function me(e,t){x.existsSync(t)||x.mkdirSync(t,{recursive:!0});let n=c.basename(e),r=new Date().toISOString().replace(/[:.]/g,`-`),i=c.join(t,`${n}.${r}.bak`);x.copyFileSync(e,i)}const V=new Map;function H(e){let t=V.get(e);if(t)return t;let n=(async()=>{let t=await i(e,!1);return{raw:t.raw,data:t.data,content:t.content}})();return V.set(e,n),n}const U=new Map;function W(e){if(U.has(e))return U.get(e);let t=!1;try{t=x.existsSync(e)&&x.statSync(e).isFile()}catch{t=!1}return U.set(e,t),t}async function G(e){let t=c.resolve(e,`doctor.json`);if(x.existsSync(t))try{let e=JSON.parse(x.readFileSync(t,`utf-8`));return{...z,...e,checks:{...z.checks,...e.checks,metadata:{...z.checks.metadata,...e.checks?.metadata},links:{...z.checks.links,...e.checks?.links},i18n:{...z.checks.i18n,...e.checks?.i18n}},fix:{...z.fix,...e.fix},reporting:{...z.reporting,...e.reporting},severity:{...z.severity,...e.severity},exclude:[...z.exclude,...e.exclude||[]]}}catch(e){b(`Failed to parse doctor.json: ${e}`)}return z}async function K(e,t=process.cwd(),r,i){let a=c.resolve(t,`.boltdocs`);x.existsSync(a)||x.mkdirSync(a,{recursive:!0});let o=i;o||=await new l().withFullPaths().filter(e=>e.endsWith(`.md`)||e.endsWith(`.mdx`)).crawl(e).withPromise();let s=r?.base||`/docs`,u=[];for(let t=0;t<o.length;t+=100){let r=o.slice(t,t+100),i=await Promise.all(r.map(async t=>{let r=c.isAbsolute(t)?t:c.resolve(e,t),i=c.relative(e,r),{data:a}=await H(r),o;return o=a.permalink?a.permalink.startsWith(`/`)?a.permalink:`/${a.permalink}`:n(i),s===`/`?o:(s.endsWith(`/`)?s:s+`/`)+(o.startsWith(`/`)?o.substring(1):o)}));u.push(...i)}u.includes(s)||u.push(s);let d={routes:Array.from(new Set(u)).sort(),timestamp:Date.now()};return x.writeFileSync(c.resolve(a,`link-tree.json`),JSON.stringify(d,null,2)),d}function he(e,t){if(e===t)return 1;if(!e||!t)return 0;let n=e.split(`/`).filter(Boolean),r=t.split(`/`).filter(Boolean),i=n[n.length-1]||``,a=r[r.length-1]||``;if(i===a){let e=0;for(let t of n)r.includes(t)&&e++;return e>=2?.99:.9}if(i.length>3&&a.length>3&&(a.startsWith(i)||i.startsWith(a))&&Math.min(i.length,a.length)/Math.max(i.length,a.length)>.5)return .88;let o=1-C(i,a)/Math.max(i.length,a.length);return o>.8?o*.95:1-C(e,t)/Math.max(e.length,t.length)}const q=new Map;function J(e,t){if(q.has(e))return q.get(e);let n=e.length,r=``,i=0;for(let a of t){if(a===e)continue;let t=a.length,o=Math.max(n,t);if(o===0)continue;let s=1-Math.abs(n-t)/o;if(s<=.8&&s<=i)continue;let c=he(e,a);c>i&&(i=c,r=a)}let a={bestMatch:r,similarity:i};return q.set(e,a),a}async function Y(e){let t=[];if(!e.doctorConfig.checks.metadata.enabled)return t;let{titleMin:n,titleMax:i,descriptionMin:o}=e.doctorConfig.checks.metadata,s=new Map;for(let l of e.files){let u=r(c.relative(e.docsDir,l));try{let{raw:r,data:c}=await H(l);if(r.trim().startsWith(`---`)&&r.split(`---`).length>=3&&Object.keys(c).length===0){let n=B(e,`malformedFrontmatter`,`high`);n!==`off`&&t.push({file:u,level:n,message:`Malformed frontmatter (YAML parsing failed).`,suggestion:`Check your YAML syntax for indentation or unquoted special characters.`})}let d=a.safeParse(c);if(!d.success){let n=B(e,`invalidFrontmatter`,`high`);if(n!==`off`)for(let e of d.error.issues)t.push({file:u,level:n,message:`Invalid frontmatter field "${e.path.join(`.`)}": ${e.message}`,suggestion:`Ensure the field follows the correct type.`})}let f=Array.from(new Set([`title`,...e.doctorConfig.checks.metadata.required]));for(let n of f)if(c[n]===void 0){let r=B(e,`missingMetadata`,`warning`);r!==`off`&&t.push({file:u,level:r,message:`Missing required frontmatter field: "${n}".`,suggestion:`Add the "${n}" field to your frontmatter.`})}if(e.doctorConfig.checks.metadata.validateDates){let n=[`date`,`lastUpdated`,...e.doctorConfig.checks.metadata.optional.filter(e=>e.toLowerCase().includes(`date`))];for(let r of n)if(c[r]&&isNaN(Date.parse(String(c[r])))){let n=B(e,`invalidFrontmatter`,`high`);n!==`off`&&t.push({file:u,level:n,message:`Invalid date format in field "${r}": "${c[r]}".`,suggestion:`Use a valid ISO date format (e.g., YYYY-MM-DD).`})}}if(c.title){let r=String(c.title);if(r.length<n){let i=B(e,`shortMetadata`,`low`);i!==`off`&&t.push({file:u,level:i,message:`Title is too short (${r.length} chars).`,suggestion:`Titles should be at least ${n} characters for better SEO.`})}else if(r.length>i){let n=B(e,`shortMetadata`,`low`);n!==`off`&&t.push({file:u,level:n,message:`Title is too long (${r.length} chars).`,suggestion:`Titles should be under ${i} characters.`})}let a=s.get(r)||[];a.push(u),s.set(r,a)}if(c.description&&String(c.description).length<o){let n=B(e,`shortMetadata`,`low`);n!==`off`&&t.push({file:u,level:n,message:`Description is very short.`,suggestion:`Descriptions should ideally be at least ${o} characters.`})}}catch(n){let r=B(e,`malformedFrontmatter`,`high`);r!==`off`&&t.push({file:u,level:r,message:`Malformed frontmatter (YAML error): ${n.message}`,suggestion:`Check your YAML syntax for indentation or unquoted special characters.`})}}for(let[n,r]of s.entries())if(r.length>1){let i=B(e,`duplicateTitle`,`low`);if(i!==`off`)for(let e of r)t.push({file:e,level:i,message:`Duplicate title found: "${n}"`,suggestion:`Ensure each page has a unique title. Also used in: ${r.filter(t=>t!==e).join(`, `)}`})}return t}async function X(e){let t=[],{internal:n,external:i,ignore:a,timeout:o,concurrency:s}=e.doctorConfig.checks.links;if(!n&&!i&&!e.options.checkExternal)return t;let l=/(?:\[.*?\]\((.*?)\))|(?:href=["']([^"']+)["'])/g,u=new Set,d=5e5;for(let o of e.files){let s=r(c.relative(e.docsDir,o)),{content:f}=await H(o),p=[...(f.length>d?f.slice(0,d):f).replace(/```[\s\S]*?```/g,``).replace(/`[^`\n]*`/g,``).matchAll(l)];for(let r of p){let l=r[1]||r[2],d=!!r[1];if(!l||a.some(e=>l.includes(e)))continue;if(/^https?:\/\//i.test(l)){(i||e.options.checkExternal)&&u.add({url:l,file:o});continue}if(!n||/^(mailto|tel|#)/i.test(l))continue;let f;try{f=decodeURIComponent(l.split(`#`)[0].split(`?`)[0])}catch{f=l.split(`#`)[0].split(`?`)[0]}if(!f)continue;let p=!1,m=``;if(f.startsWith(`/`))if(e.routeIndex.has(f)||e.routeIndexWithSlash.has(f)||e.routeIndexWithoutSlash.has(f))p=!0;else{let t=e.basePrefix+(f.startsWith(`/`)?f:`/`+f);if(e.routeIndex.has(t)||e.routeIndexWithSlash.has(t))p=!1,m=t;else{let t=e.config.base!==`/`&&f.startsWith(e.config.base||`/`)?f.substring((e.config.base||`/`).length):f,n=t.startsWith(`/`)?t.substring(1):t;m=c.join(e.docsDir,n),p=[``,`.md`,`.mdx`,`/index.md`,`/index.mdx`].some(e=>W(m+e))}}else m=c.resolve(c.dirname(o),f),p=[``,`.md`,`.mdx`,`/index.md`,`/index.mdx`].some(e=>W(m+e));if(!p){let{bestMatch:n,similarity:r}=J(f,e.linkTree.routes),i=!1,a=e.basePrefix+(f.startsWith(`/`)?f:`/`+f);(e.routeIndex.has(a)||e.routeIndexWithSlash.has(a))&&(n=a,r=1,i=!0);let c=r>.6||i,u=r>.75&&n!==f||i,p=B(e,`brokenLink`,`high`);p!==`off`&&t.push({file:s,level:p,message:`Broken internal link: "${l}"`,suggestion:c?`Did you mean "${n}"?`:`Ensure the target exists or check for typos.`,fix:u?async()=>{let e=l.includes(`#`)?`#`+l.split(`#`)[1]:``,t=d?`(${l})`:`href="${l}"`,r=d?`(${n}${e})`:`href="${n}${e}"`,i=x.readFileSync(o,`utf-8`).replace(t,r);x.writeFileSync(o,i),V.delete(o)}:void 0})}}}if(u.size>0){v(m.gray(`Verifying ${u.size} external links...`));let n=new Map;for(let e of u)n.has(e.url)||n.set(e.url,[]),n.get(e.url).push(e.file);let i=async e=>{try{let t=new AbortController,n=setTimeout(()=>t.abort(),o),r=await fetch(e,{method:`HEAD`,signal:t.signal,headers:{"User-Agent":`boltdocs-doctor/1.0`}});return clearTimeout(n),!r.ok&&r.status!==404?{url:e,ok:(await fetch(e,{method:`GET`,signal:t.signal,headers:{"User-Agent":`boltdocs-doctor/1.0`}})).ok}:{url:e,ok:r.ok}}catch(t){return{url:e,ok:!1,error:t.message}}},a=Array.from(n.keys()),l=[];for(let e=0;e<a.length;e+=s){let t=a.slice(e,e+s),n=await Promise.allSettled(t.map(i));l.push(...n.map(e=>e.status===`fulfilled`?e.value:{url:`unknown`,ok:!1,error:e.reason}))}for(let i of l)if(!i.ok){let a=B(e,`brokenLink`,`warning`);if(a!==`off`){let o=n.get(i.url)||[];for(let n of o)t.push({file:r(c.relative(e.docsDir,n)),level:a,message:`Broken external link: "${i.url}"`,suggestion:`Verify the URL or update it if it's permanently down. Error: ${i.error||`Status >= 400`}`})}}}return t}async function Z(e){let t=[];if(!e.doctorConfig.checks.i18n.enabled||!e.config.i18n)return t;let{defaultLocale:n,locales:i}=e.config.i18n,a=Object.keys(i),o=a.filter(e=>e!==n);for(let i of e.files){let s=r(c.relative(e.docsDir,i)),l=s.split(`/`),u=l[0];if(u===n){let n=l.slice(1).join(`/`);for(let r of o){let a=c.join(e.docsDir,r,n);if(!W(a)){let o=B(e,`missingTranslation`,`warning`);o!==`off`&&t.push({file:s,level:o,message:`Missing translation for locale "${r}"`,suggestion:`Create a version at "${r}/${n}".`,fix:async()=>{let e=c.dirname(a);x.existsSync(e)||x.mkdirSync(e,{recursive:!0}),x.copyFileSync(i,a)}})}}}else if(a.includes(u)){let r=l.slice(1).join(`/`);if(!W(c.join(e.docsDir,n,r))){let a=B(e,`missingTranslation`,`low`);a!==`off`&&t.push({file:s,level:a,message:`Orphaned translation (source missing in "${n}")`,suggestion:`Remove this file or create the source at "${n}/${r}".`,fix:async()=>{x.unlinkSync(i)}})}}}return t}async function Q(e){let t=[];if(!e.config.theme.sidebar)return t;let n=new Set,r=e.config.theme.sidebar;for(let[i,a]of Object.entries(r))for(let r of a){if(!r.text){let n=B(e,`invalidFrontmatter`,`warning`);n!==`off`&&t.push({file:`boltdocs.config.ts`,level:n,message:`Sidebar item in group "${i}" is missing a label.`,suggestion:`Add a "text" property to the sidebar item.`})}if(r.link&&(n.add(r.link),!e.routeIndex.has(r.link))){let{bestMatch:n,similarity:i}=J(r.link,e.linkTree.routes),a=i>.6,o=B(e,`brokenLink`,`high`);o!==`off`&&t.push({file:`boltdocs.config.ts`,level:o,message:`Broken sidebar link: "${r.link}"`,suggestion:a?`Did you mean "${n}"?`:`Ensure the route exists and is correctly formatted.`})}}for(let r of e.linkTree.routes)if(!(r===`/`||r===``)&&!n.has(r)){let n=B(e,`orphanedPage`,`low`);n!==`off`&&t.push({file:`Sidebar`,level:n,message:`Orphaned page found: "${r}" is not linked in the sidebar.`,suggestion:`Consider adding it to the sidebar for better discoverability.`})}return t}var ge=e({DEFAULT_DOCTOR_CONFIG:()=>z,checkI18n:()=>Z,checkLinks:()=>X,checkMetadata:()=>Y,checkSidebar:()=>Q,doctorAction:()=>_e,doctorInit:()=>$,generateLinkTree:()=>K,loadDoctorConfig:()=>G});async function $(e){let t=S.resolve(e,`doctor.json`);if(u.existsSync(t)){b(`"doctor.json" already exists at ${e}.`);return}try{u.writeFileSync(t,JSON.stringify(z,null,2)),y(`Created "doctor.json" with default configuration.`)}catch(e){_(`Failed to create "doctor.json": ${e}`)}}async function _e(e=process.cwd(),t={}){if(t.init){await $(e);return}R();try{let n=await G(e),{format:r}=n.reporting,i=performance.now(),a=await I(`docs`,e),o=S.resolve(e,`docs`);u.existsSync(o)||(r===`pretty`&&_(`Docs dir not found at ${o}`),process.exit(1)),r===`pretty`&&console.log(g(`✦ DOCTOR — Documentation Health Check`,[` ${m.dim(`Docs dir:`)} ${o}`,` ${m.dim(`Reports:`)} ${e}/.boltdocs/`])),r===`pretty`&&v(m.dim(`🔍 Discovering files and routes...`));let s=ie(n.exclude||[]),c=await new l().withFullPaths().filter(e=>{if(!(e.endsWith(`.md`)||e.endsWith(`.mdx`)))return!1;let t=S.relative(o,e).replace(/\\/g,`/`),n=t.split(`/`).some(e=>e.startsWith(`_`)&&e!==`_index.md`&&e!==`_index.mdx`);return!s(t)&&!n}).crawl(o).withPromise();for(let e of c)U.set(e,!0);let d=await K(o,e,a,c),f=a.base||`/`,b=f===`/`?``:f.endsWith(`/`)?f.slice(0,-1):f,x={root:e,docsDir:o,config:a,doctorConfig:n,linkTree:d,files:c,options:t,routeIndex:new Set(d.routes),routeIndexWithSlash:new Set(d.routes.map(e=>e.endsWith(`/`)?e:e+`/`)),routeIndexWithoutSlash:new Set(d.routes.map(e=>e.endsWith(`/`)?e.slice(0,-1):e)),basePrefix:b};r===`pretty`&&v(m.dim(`🧪 Running diagnostic checks in parallel...`));let[C,w,T,E]=await Promise.all([Y(x),X(x),Z(x),Q(x)]),D=[...C,...w,...T,...E];r===`pretty`&&console.log(`\n${re([{label:`Metadata checks ${C.length>0?`— ${C.length} issue${C.length===1?``:`s`}`:`— OK`}`,done:C.length===0},{label:`Link checks ${w.length>0?`— ${w.length} issue${w.length===1?``:`s`}`:`— OK`}`,done:w.length===0},{label:`i18n checks ${T.length>0?`— ${T.length} issue${T.length===1?``:`s`}`:`— OK`}`,done:T.length===0},{label:`Sidebar checks ${E.length>0?`— ${E.length} issue${E.length===1?``:`s`}`:`— OK`}`,done:E.length===0}])}`);let O=0;if(t.fix){for(let e of D)if(e.fix){if(x.doctorConfig.fix.confirmChanges&&!await ee(`Fix issue in "${e.file}": ${e.message}?`))continue;if(x.doctorConfig.fix.backupFiles){let t=S.resolve(x.docsDir,e.file);u.existsSync(t)&&await me(t,S.resolve(x.root,x.doctorConfig.fix.backupPath))}await e.fix(),O++}}let k=((performance.now()-i)/1e3).toFixed(2),A=D.filter(e=>e.level===`high`).length,j=D.filter(e=>e.level===`warning`).length,M=D.filter(e=>e.level===`low`).length,N={summary:{total:D.length,high:A,warning:j,low:M,fixed:O,duration:k},issues:D.map(e=>({...e,fix:void 0}))};if(n.reporting.outputFile){let t=S.resolve(e,n.reporting.outputFile);u.existsSync(S.dirname(t))||u.mkdirSync(S.dirname(t),{recursive:!0}),u.writeFileSync(t,JSON.stringify(N,null,2))}if(r===`json`)console.log(JSON.stringify(N,null,2));else if(r===`pretty`){let e=D.reduce((e,t)=>(e[t.file]||(e[t.file]=[]),e[t.file].push(t),e),{});if(D.length>0){h();for(let[n,r]of Object.entries(e)){let e=[];for(let n of r){let r=n.level===`high`?`❌`:n.level===`warning`?`⚠️`:`ℹ️`,i=n.level===`high`?m.red:n.level===`warning`?m.yellow:m.blue;e.push(`${r} ${i(n.level.toUpperCase())}: ${n.message}`),n.suggestion&&e.push(` ${m.dim(`💡 ${n.suggestion}`)}`),t.fix&&n.fix&&e.push(` ${m.green(`✅ Fixed automatically`)}`)}console.log(`\n${ne(`📄 ${n}`,e)}`)}h()}if(D.length===0)console.log(te(`✨ Documentation Health Check`,[` Everything looks perfect!`,` Your documentation is in great shape.`,``,` ${m.dim(`Scanned ${c.length} file${c.length===1?``:`s`} in ${k}s`)}`]));else{let e=[];A>0&&e.push(m.red(`${A} Critical Error${A===1?``:`s`}`)),j>0&&e.push(m.yellow(`${j} Warning${j===1?``:`s`}`)),M>0&&e.push(m.blue(`${M} Improvement${M===1?``:`s`}`));let t=[...p(e).split(`
21
- `).map(e=>e.trimStart()),``,m.dim(`Scanned ${c.length} file${c.length===1?``:`s`} in ${k}s`)];console.log(`\n${g(`Diagnosis Results`,t)}\n`),O>0&&y(`Successfully fixed ${O} issues automatically!`),A>0?_(`Please fix the critical errors before building for production.`):y(`No critical issues found. You are ready to go!`)}}n.reporting.failOnError&&A>0&&process.exit(1),n.reporting.maxWarnings!==-1&&j>n.reporting.maxWarnings&&(r===`pretty`&&_(`Failed: Too many warnings (${j} > ${n.reporting.maxWarnings})`),process.exit(1))}catch(e){_(`Doctor failed: ${e}`),process.exit(1)}}export{I as a,P as c,F as i,E as l,K as n,le as o,R as r,ce as s,ge as t};
@@ -1,21 +0,0 @@
1
- /**
2
- * Boltdocs - https://boltdocs.vercel.app
3
- * Copyright (c) 2026 Jesus Alcala
4
- * Licensed under the MIT License.
5
- */
6
- const e=require(`./chunk-CU-zTemE.cjs`),t=require(`./utils-CKunkU96.cjs`);let n=require(`vite`),r=require(`node:path`);r=e.t(r);let i=require(`fdir`),a=require(`fs`);a=e.t(a);let o=require(`zod`),s=require(`@bdocs/dui`);s=e.t(s);let c=require(`node:fs`);c=e.t(c);let l=require(`path`);l=e.t(l);let u=require(`picomatch`);u=e.t(u);let d=require(`node:module`),f=require(`fastest-levenshtein`);const p=o.z.object({icon:o.z.string().max(50),link:o.z.string().url()});o.z.object({text:o.z.string().max(2e3).optional()});const m=o.z.enum([`fs:read`,`fs:write`,`vite:config`,`mdx:remark`,`mdx:rehype`,`components`,`hooks:build`,`hooks:dev`]),h=o.z.object({name:o.z.string(),enforce:o.z.enum([`pre`,`post`]).optional(),version:o.z.string().optional(),boltdocsVersion:o.z.string().optional(),permissions:o.z.array(m).optional(),remarkPlugins:o.z.array(o.z.any()).optional(),rehypePlugins:o.z.array(o.z.any()).optional(),vitePlugins:o.z.array(o.z.any()).optional(),components:o.z.record(o.z.string(),o.z.string()).optional(),hooks:o.z.record(o.z.string(),o.z.any()).optional()}),g=o.z.object({title:o.z.union([o.z.string(),o.z.record(o.z.string(),o.z.string())]).optional(),description:o.z.union([o.z.string(),o.z.record(o.z.string(),o.z.string())]).optional(),logo:o.z.union([o.z.string(),o.z.object({dark:o.z.string(),light:o.z.string(),alt:o.z.string().optional(),width:o.z.number().optional(),height:o.z.number().optional()})]).optional(),navbar:o.z.array(o.z.object({label:o.z.union([o.z.string(),o.z.record(o.z.string(),o.z.string())]),href:o.z.string(),items:o.z.array(o.z.object({label:o.z.union([o.z.string(),o.z.record(o.z.string(),o.z.string())]),href:o.z.string()})).optional()})).optional(),sidebar:o.z.record(o.z.string(),o.z.array(o.z.object({text:o.z.string(),link:o.z.string()}))).optional(),sidebarGroups:o.z.record(o.z.string(),o.z.object({title:o.z.union([o.z.string(),o.z.record(o.z.string(),o.z.string())]).optional(),icon:o.z.string().optional()})).optional(),socialLinks:o.z.array(p).optional(),editLink:o.z.string().refine(e=>!e||e.includes(`:path`),{message:`editLink must contain ':path' placeholder if specified`}).optional(),communityHelp:o.z.string().url().optional(),version:o.z.string().max(50).optional(),githubRepo:o.z.string().max(100).optional(),favicon:o.z.string().optional(),tabs:o.z.array(o.z.object({id:o.z.string(),text:o.z.union([o.z.string(),o.z.record(o.z.string(),o.z.string())]),icon:o.z.string().optional()})).optional(),codeTheme:o.z.union([o.z.string(),o.z.object({light:o.z.string(),dark:o.z.string()})]).optional()}),_=o.z.union([o.z.string(),o.z.object({rules:o.z.array(o.z.object({userAgent:o.z.string(),allow:o.z.union([o.z.string(),o.z.array(o.z.string())]).optional(),disallow:o.z.union([o.z.string(),o.z.array(o.z.string())]).optional()})).optional(),sitemaps:o.z.array(o.z.string().url()).optional()})]),v=o.z.object({defaultLocale:o.z.string(),locales:o.z.union([o.z.record(o.z.string(),o.z.string()),o.z.array(o.z.string())]).transform(e=>Array.isArray(e)?Object.fromEntries(e.map(e=>[e,e])):e),localeConfigs:o.z.record(o.z.string(),o.z.object({label:o.z.string().optional(),direction:o.z.enum([`ltr`,`rtl`]).optional(),htmlLang:o.z.string().optional(),calendar:o.z.string().optional()})).optional()}),y=o.z.object({defaultVersion:o.z.string(),prefix:o.z.string().optional(),versions:o.z.array(o.z.object({label:o.z.string(),path:o.z.string()}))}),b=o.z.object({headers:o.z.record(o.z.string(),o.z.string()).optional(),enableCSP:o.z.boolean().optional(),customHeaders:o.z.record(o.z.string(),o.z.string()).optional()}),x=o.z.object({metatags:o.z.record(o.z.string(),o.z.string()).optional(),indexing:o.z.enum([`all`,`public`]).optional(),thumbnails:o.z.object({background:o.z.string().optional()}).optional()}),S=o.z.object({measurementId:o.z.string().min(1,`Measurement ID is required for GA4`),debug:o.z.boolean().optional(),anonymizeIp:o.z.boolean().optional(),sendPageView:o.z.boolean().optional(),cookieFlags:o.z.string().optional(),autoTrack:o.z.object({pageViews:o.z.boolean().optional(),downloads:o.z.boolean().optional(),externalLinks:o.z.boolean().optional(),search:o.z.boolean().optional()}).optional()}),C=o.z.object({tagId:o.z.string().min(1,`Tag ID is required for GTM`),dataLayerName:o.z.string().optional(),preview:o.z.string().optional()}),w=o.z.object({ga4:S.optional(),gtm:C.optional()}),T=o.z.object({siteUrl:o.z.string().url().optional(),docsDir:o.z.string().optional(),base:o.z.string().optional(),theme:g.optional(),i18n:v.optional(),versions:y.optional(),plugins:o.z.array(h).optional(),robots:_.optional(),security:b.optional(),seo:x.optional(),integrations:w.optional(),vite:o.z.record(o.z.string(),o.z.unknown()).optional()});function E(e,t,n=process.cwd()){let i=r.default.resolve(n,`.boltdocs`);c.default.existsSync(i)||c.default.mkdirSync(i,{recursive:!0});let a=e.i18n?Object.keys(e.i18n.locales):[],o=e.versions?e.versions.versions.map(e=>e.path):[],s=a.length>0?a.map(e=>`'${e}'`).join(` | `):`string`,l=o.length>0?o.map(e=>`'${e}'`).join(` | `):`string`,u=[`tsx`,`ts`,`jsx`,`js`],d=``,f=``;for(let e of u){let a=r.default.resolve(n,t,`mdx-components.${e}`);if(c.default.existsSync(a)){let e=r.default.join(n,t,`mdx-components`),a=r.default.relative(i,e).replace(/\\/g,`/`);d=`import type * as MdxComponentsModule from '${a.startsWith(`.`)?a:`./${a}`}'\n`,f=` MdxComponents: typeof MdxComponentsModule`;break}}let p=`// This file is automatically generated by Boltdocs.
7
- // Do not edit this file manually.
8
-
9
- ${d}declare global {
10
- namespace Boltdocs {
11
- interface Types {
12
- Locale: ${s}
13
- Version: ${l}${f?`\n${f}`:``}
14
- }
15
- }
16
- }
17
-
18
- export {}
19
- `;c.default.writeFileSync(r.default.resolve(i,`types.d.ts`),p)}function D(e){return e}const O=[`boltdocs.config.js`,`boltdocs.config.mjs`,`boltdocs.config.ts`];async function k(e,i=process.cwd()){let a=i,o={docsDir:r.default.resolve(e),theme:{title:`Boltdocs`,description:`A Vite documentation framework`,navbar:[{label:`Home`,href:`/`},{label:`Documentation`,href:`/docs`}],codeTheme:{light:`github-light`,dark:`github-dark`}}},l={};for(let e of O){let t=r.default.resolve(a,e);if(c.default.existsSync(t))try{let e=await(0,n.loadConfigFromFile)({command:`serve`,mode:`development`},t,a);if(e){l=e.config;break}}catch(t){(0,s.warn)(`Failed to load config from ${e}:`,t)}}let u={title:l.title,description:l.description,logo:l.logo,favicon:l.favicon,navbar:l.navbar,sidebar:l.sidebar,sidebarGroups:l.theme?.sidebarGroups,socialLinks:l.socialLinks,githubRepo:l.githubRepo,tabs:l.tabs,codeTheme:l.codeTheme,communityHelp:l.communityHelp,version:l.version,editLink:l.editLink,...l.theme||{}},d=Object.fromEntries(Object.entries(u).filter(([e,t])=>t!==void 0));d.navbar&&=d.navbar.map(e=>({label:e.label||e.text||``,href:e.href||e.link||e.to||``,items:e.items}));let f={docsDir:r.default.resolve(e),theme:{...o.theme,...d},i18n:l.i18n?{...l.i18n,locales:Array.isArray(l.i18n.locales)?Object.fromEntries(l.i18n.locales.map(e=>[e,e])):l.i18n.locales}:void 0,versions:l.versions,siteUrl:l.siteUrl,base:l.base,seo:l.seo,plugins:l.plugins||[],robots:l.robots,security:l.security,integrations:l.integrations,vite:l.vite},p=T.safeParse(f);if(!p.success)throw new t._(`Invalid Boltdocs configuration:\n${p.error.issues.map(e=>` - ${e.path.join(`.`)}: ${e.message}`).join(`
20
- `)}`);return p.data}async function A(e,t=process.cwd()){let n=await k(e,t);return E(n,e,t),n}const j=(0,d.createRequire)(require(`url`).pathToFileURL(__filename).href);let M=0;function N(e,t){let n=e.split(`-`)[0].split(`.`).map(Number),r=t.split(`-`)[0].split(`.`).map(Number);for(let e=0;e<Math.max(n.length,r.length);e++){let t=n[e]??0,i=r[e]??0;if(Number.isNaN(t)||Number.isNaN(i))return!1;if(t!==i)return t>i}return!1}async function P(){try{let e=new AbortController,t=setTimeout(()=>e.abort(),2e3),n=await fetch(`https://registry.npmjs.org/boltdocs/latest`,{signal:e.signal,headers:{Accept:`application/vnd.npm.install-v1+json`}});return clearTimeout(t),n.ok?(await n.json()).version??null:null}catch{return null}}async function F(){try{return j(`boltdocs/package.json`).version}catch{return`0.0.0`}}async function I(){let e=Date.now();if(e-M<864e5)return;M=e;let t=await F();if(t===`0.0.0`)return;let n=await P();n&&N(n,t)&&console.log(s.updateAvailable(t,n))}const L={$schema:`https://boltdocs.vercel.app/schemas/doctor-config.schema.json`,checks:{metadata:{enabled:!0,titleMin:10,titleMax:60,descriptionMin:50,required:[`title`,`description`],optional:[],validateDates:!1},links:{internal:!0,external:!1,timeout:1e4,concurrency:10,ignore:[]},i18n:{enabled:!0}},fix:{confirmChanges:!1,backupFiles:!1,backupPath:`.boltdocs/backups`},reporting:{format:`pretty`,outputFile:`.boltdocs/doctor-report.json`,failOnError:!1,maxWarnings:-1},severity:{missingTranslation:`warning`,brokenLink:`high`,brokenAnchor:`warning`,largeFile:`warning`,orphanedPage:`low`,duplicateTitle:`low`,shortMetadata:`low`,missingMetadata:`warning`,malformedFrontmatter:`high`,invalidFrontmatter:`high`},exclude:[]};function R(e,t,n){return e.doctorConfig.severity[t]||n}async function z(e,t){c.default.existsSync(t)||c.default.mkdirSync(t,{recursive:!0});let n=r.default.basename(e),i=new Date().toISOString().replace(/[:.]/g,`-`),a=r.default.join(t,`${n}.${i}.bak`);c.default.copyFileSync(e,a)}const B=new Map;function V(e){let n=B.get(e);if(n)return n;let r=(async()=>{let n=await t.u(e,!1);return{raw:n.raw,data:n.data,content:n.content}})();return B.set(e,r),r}const H=new Map;function U(e){if(H.has(e))return H.get(e);let t=!1;try{t=c.default.existsSync(e)&&c.default.statSync(e).isFile()}catch{t=!1}return H.set(e,t),t}async function W(e){let t=r.default.resolve(e,`doctor.json`);if(c.default.existsSync(t))try{let e=JSON.parse(c.default.readFileSync(t,`utf-8`));return{...L,...e,checks:{...L.checks,...e.checks,metadata:{...L.checks.metadata,...e.checks?.metadata},links:{...L.checks.links,...e.checks?.links},i18n:{...L.checks.i18n,...e.checks?.i18n}},fix:{...L.fix,...e.fix},reporting:{...L.reporting,...e.reporting},severity:{...L.severity,...e.severity},exclude:[...L.exclude,...e.exclude||[]]}}catch(e){(0,s.warn)(`Failed to parse doctor.json: ${e}`)}return L}async function G(e,n=process.cwd(),a,o){let s=r.default.resolve(n,`.boltdocs`);c.default.existsSync(s)||c.default.mkdirSync(s,{recursive:!0});let l=o;l||=await new i.fdir().withFullPaths().filter(e=>e.endsWith(`.md`)||e.endsWith(`.mdx`)).crawl(e).withPromise();let u=a?.base||`/docs`,d=[];for(let n=0;n<l.length;n+=100){let i=l.slice(n,n+100),a=await Promise.all(i.map(async n=>{let i=r.default.isAbsolute(n)?n:r.default.resolve(e,n),a=r.default.relative(e,i),{data:o}=await V(i),s;return s=o.permalink?o.permalink.startsWith(`/`)?o.permalink:`/${o.permalink}`:t.i(a),u===`/`?s:(u.endsWith(`/`)?u:u+`/`)+(s.startsWith(`/`)?s.substring(1):s)}));d.push(...a)}d.includes(u)||d.push(u);let f={routes:Array.from(new Set(d)).sort(),timestamp:Date.now()};return c.default.writeFileSync(r.default.resolve(s,`link-tree.json`),JSON.stringify(f,null,2)),f}function K(e,t){if(e===t)return 1;if(!e||!t)return 0;let n=e.split(`/`).filter(Boolean),r=t.split(`/`).filter(Boolean),i=n[n.length-1]||``,a=r[r.length-1]||``;if(i===a){let e=0;for(let t of n)r.includes(t)&&e++;return e>=2?.99:.9}if(i.length>3&&a.length>3&&(a.startsWith(i)||i.startsWith(a))&&Math.min(i.length,a.length)/Math.max(i.length,a.length)>.5)return .88;let o=1-(0,f.distance)(i,a)/Math.max(i.length,a.length);return o>.8?o*.95:1-(0,f.distance)(e,t)/Math.max(e.length,t.length)}const q=new Map;function J(e,t){if(q.has(e))return q.get(e);let n=e.length,r=``,i=0;for(let a of t){if(a===e)continue;let t=a.length,o=Math.max(n,t);if(o===0)continue;let s=1-Math.abs(n-t)/o;if(s<=.8&&s<=i)continue;let c=K(e,a);c>i&&(i=c,r=a)}let a={bestMatch:r,similarity:i};return q.set(e,a),a}async function Y(e){let n=[];if(!e.doctorConfig.checks.metadata.enabled)return n;let{titleMin:i,titleMax:a,descriptionMin:o}=e.doctorConfig.checks.metadata,s=new Map;for(let c of e.files){let l=t.l(r.default.relative(e.docsDir,c));try{let{raw:r,data:u}=await V(c);if(r.trim().startsWith(`---`)&&r.split(`---`).length>=3&&Object.keys(u).length===0){let t=R(e,`malformedFrontmatter`,`high`);t!==`off`&&n.push({file:l,level:t,message:`Malformed frontmatter (YAML parsing failed).`,suggestion:`Check your YAML syntax for indentation or unquoted special characters.`})}let d=t.v.safeParse(u);if(!d.success){let t=R(e,`invalidFrontmatter`,`high`);if(t!==`off`)for(let e of d.error.issues)n.push({file:l,level:t,message:`Invalid frontmatter field "${e.path.join(`.`)}": ${e.message}`,suggestion:`Ensure the field follows the correct type.`})}let f=Array.from(new Set([`title`,...e.doctorConfig.checks.metadata.required]));for(let t of f)if(u[t]===void 0){let r=R(e,`missingMetadata`,`warning`);r!==`off`&&n.push({file:l,level:r,message:`Missing required frontmatter field: "${t}".`,suggestion:`Add the "${t}" field to your frontmatter.`})}if(e.doctorConfig.checks.metadata.validateDates){let t=[`date`,`lastUpdated`,...e.doctorConfig.checks.metadata.optional.filter(e=>e.toLowerCase().includes(`date`))];for(let r of t)if(u[r]&&isNaN(Date.parse(String(u[r])))){let t=R(e,`invalidFrontmatter`,`high`);t!==`off`&&n.push({file:l,level:t,message:`Invalid date format in field "${r}": "${u[r]}".`,suggestion:`Use a valid ISO date format (e.g., YYYY-MM-DD).`})}}if(u.title){let t=String(u.title);if(t.length<i){let r=R(e,`shortMetadata`,`low`);r!==`off`&&n.push({file:l,level:r,message:`Title is too short (${t.length} chars).`,suggestion:`Titles should be at least ${i} characters for better SEO.`})}else if(t.length>a){let r=R(e,`shortMetadata`,`low`);r!==`off`&&n.push({file:l,level:r,message:`Title is too long (${t.length} chars).`,suggestion:`Titles should be under ${a} characters.`})}let r=s.get(t)||[];r.push(l),s.set(t,r)}if(u.description&&String(u.description).length<o){let t=R(e,`shortMetadata`,`low`);t!==`off`&&n.push({file:l,level:t,message:`Description is very short.`,suggestion:`Descriptions should ideally be at least ${o} characters.`})}}catch(t){let r=R(e,`malformedFrontmatter`,`high`);r!==`off`&&n.push({file:l,level:r,message:`Malformed frontmatter (YAML error): ${t.message}`,suggestion:`Check your YAML syntax for indentation or unquoted special characters.`})}}for(let[t,r]of s.entries())if(r.length>1){let i=R(e,`duplicateTitle`,`low`);if(i!==`off`)for(let e of r)n.push({file:e,level:i,message:`Duplicate title found: "${t}"`,suggestion:`Ensure each page has a unique title. Also used in: ${r.filter(t=>t!==e).join(`, `)}`})}return n}async function X(e){let n=[],{internal:i,external:a,ignore:o,timeout:l,concurrency:u}=e.doctorConfig.checks.links;if(!i&&!a&&!e.options.checkExternal)return n;let d=/(?:\[.*?\]\((.*?)\))|(?:href=["']([^"']+)["'])/g,f=new Set,p=5e5;for(let s of e.files){let l=t.l(r.default.relative(e.docsDir,s)),{content:u}=await V(s),m=[...(u.length>p?u.slice(0,p):u).replace(/```[\s\S]*?```/g,``).replace(/`[^`\n]*`/g,``).matchAll(d)];for(let t of m){let u=t[1]||t[2],d=!!t[1];if(!u||o.some(e=>u.includes(e)))continue;if(/^https?:\/\//i.test(u)){(a||e.options.checkExternal)&&f.add({url:u,file:s});continue}if(!i||/^(mailto|tel|#)/i.test(u))continue;let p;try{p=decodeURIComponent(u.split(`#`)[0].split(`?`)[0])}catch{p=u.split(`#`)[0].split(`?`)[0]}if(!p)continue;let m=!1,h=``;if(p.startsWith(`/`))if(e.routeIndex.has(p)||e.routeIndexWithSlash.has(p)||e.routeIndexWithoutSlash.has(p))m=!0;else{let t=e.basePrefix+(p.startsWith(`/`)?p:`/`+p);if(e.routeIndex.has(t)||e.routeIndexWithSlash.has(t))m=!1,h=t;else{let t=e.config.base!==`/`&&p.startsWith(e.config.base||`/`)?p.substring((e.config.base||`/`).length):p,n=t.startsWith(`/`)?t.substring(1):t;h=r.default.join(e.docsDir,n),m=[``,`.md`,`.mdx`,`/index.md`,`/index.mdx`].some(e=>U(h+e))}}else h=r.default.resolve(r.default.dirname(s),p),m=[``,`.md`,`.mdx`,`/index.md`,`/index.mdx`].some(e=>U(h+e));if(!m){let{bestMatch:t,similarity:r}=J(p,e.linkTree.routes),i=!1,a=e.basePrefix+(p.startsWith(`/`)?p:`/`+p);(e.routeIndex.has(a)||e.routeIndexWithSlash.has(a))&&(t=a,r=1,i=!0);let o=r>.6||i,f=r>.75&&t!==p||i,m=R(e,`brokenLink`,`high`);m!==`off`&&n.push({file:l,level:m,message:`Broken internal link: "${u}"`,suggestion:o?`Did you mean "${t}"?`:`Ensure the target exists or check for typos.`,fix:f?async()=>{let e=u.includes(`#`)?`#`+u.split(`#`)[1]:``,n=d?`(${u})`:`href="${u}"`,r=d?`(${t}${e})`:`href="${t}${e}"`,i=c.default.readFileSync(s,`utf-8`).replace(n,r);c.default.writeFileSync(s,i),B.delete(s)}:void 0})}}}if(f.size>0){(0,s.info)(s.colors.gray(`Verifying ${f.size} external links...`));let i=new Map;for(let e of f)i.has(e.url)||i.set(e.url,[]),i.get(e.url).push(e.file);let a=async e=>{try{let t=new AbortController,n=setTimeout(()=>t.abort(),l),r=await fetch(e,{method:`HEAD`,signal:t.signal,headers:{"User-Agent":`boltdocs-doctor/1.0`}});return clearTimeout(n),!r.ok&&r.status!==404?{url:e,ok:(await fetch(e,{method:`GET`,signal:t.signal,headers:{"User-Agent":`boltdocs-doctor/1.0`}})).ok}:{url:e,ok:r.ok}}catch(t){return{url:e,ok:!1,error:t.message}}},o=Array.from(i.keys()),c=[];for(let e=0;e<o.length;e+=u){let t=o.slice(e,e+u),n=await Promise.allSettled(t.map(a));c.push(...n.map(e=>e.status===`fulfilled`?e.value:{url:`unknown`,ok:!1,error:e.reason}))}for(let a of c)if(!a.ok){let o=R(e,`brokenLink`,`warning`);if(o!==`off`){let s=i.get(a.url)||[];for(let i of s)n.push({file:t.l(r.default.relative(e.docsDir,i)),level:o,message:`Broken external link: "${a.url}"`,suggestion:`Verify the URL or update it if it's permanently down. Error: ${a.error||`Status >= 400`}`})}}}return n}async function Z(e){let n=[];if(!e.doctorConfig.checks.i18n.enabled||!e.config.i18n)return n;let{defaultLocale:i,locales:a}=e.config.i18n,o=Object.keys(a),s=o.filter(e=>e!==i);for(let a of e.files){let l=t.l(r.default.relative(e.docsDir,a)),u=l.split(`/`),d=u[0];if(d===i){let t=u.slice(1).join(`/`);for(let i of s){let o=r.default.join(e.docsDir,i,t);if(!U(o)){let s=R(e,`missingTranslation`,`warning`);s!==`off`&&n.push({file:l,level:s,message:`Missing translation for locale "${i}"`,suggestion:`Create a version at "${i}/${t}".`,fix:async()=>{let e=r.default.dirname(o);c.default.existsSync(e)||c.default.mkdirSync(e,{recursive:!0}),c.default.copyFileSync(a,o)}})}}}else if(o.includes(d)){let t=u.slice(1).join(`/`);if(!U(r.default.join(e.docsDir,i,t))){let r=R(e,`missingTranslation`,`low`);r!==`off`&&n.push({file:l,level:r,message:`Orphaned translation (source missing in "${i}")`,suggestion:`Remove this file or create the source at "${i}/${t}".`,fix:async()=>{c.default.unlinkSync(a)}})}}}return n}async function Q(e){let t=[];if(!e.config.theme.sidebar)return t;let n=new Set,r=e.config.theme.sidebar;for(let[i,a]of Object.entries(r))for(let r of a){if(!r.text){let n=R(e,`invalidFrontmatter`,`warning`);n!==`off`&&t.push({file:`boltdocs.config.ts`,level:n,message:`Sidebar item in group "${i}" is missing a label.`,suggestion:`Add a "text" property to the sidebar item.`})}if(r.link&&(n.add(r.link),!e.routeIndex.has(r.link))){let{bestMatch:n,similarity:i}=J(r.link,e.linkTree.routes),a=i>.6,o=R(e,`brokenLink`,`high`);o!==`off`&&t.push({file:`boltdocs.config.ts`,level:o,message:`Broken sidebar link: "${r.link}"`,suggestion:a?`Did you mean "${n}"?`:`Ensure the route exists and is correctly formatted.`})}}for(let r of e.linkTree.routes)if(!(r===`/`||r===``)&&!n.has(r)){let n=R(e,`orphanedPage`,`low`);n!==`off`&&t.push({file:`Sidebar`,level:n,message:`Orphaned page found: "${r}" is not linked in the sidebar.`,suggestion:`Consider adding it to the sidebar for better discoverability.`})}return t}async function $(e){let t=l.default.resolve(e,`doctor.json`);if(a.default.existsSync(t)){(0,s.warn)(`"doctor.json" already exists at ${e}.`);return}try{a.default.writeFileSync(t,JSON.stringify(L,null,2)),(0,s.success)(`Created "doctor.json" with default configuration.`)}catch(e){(0,s.error)(`Failed to create "doctor.json": ${e}`)}}async function ee(e=process.cwd(),t={}){if(t.init){await $(e);return}I();try{let n=await W(e),{format:r}=n.reporting,o=performance.now(),c=await k(`docs`,e),d=l.default.resolve(e,`docs`);a.default.existsSync(d)||(r===`pretty`&&(0,s.error)(`Docs dir not found at ${d}`),process.exit(1)),r===`pretty`&&console.log((0,s.double)(`✦ DOCTOR — Documentation Health Check`,[` ${s.colors.dim(`Docs dir:`)} ${d}`,` ${s.colors.dim(`Reports:`)} ${e}/.boltdocs/`])),r===`pretty`&&(0,s.info)(s.colors.dim(`🔍 Discovering files and routes...`));let f=(0,u.default)(n.exclude||[]),p=await new i.fdir().withFullPaths().filter(e=>{if(!(e.endsWith(`.md`)||e.endsWith(`.mdx`)))return!1;let t=l.default.relative(d,e).replace(/\\/g,`/`),n=t.split(`/`).some(e=>e.startsWith(`_`)&&e!==`_index.md`&&e!==`_index.mdx`);return!f(t)&&!n}).crawl(d).withPromise();for(let e of p)H.set(e,!0);let m=await G(d,e,c,p),h=c.base||`/`,g=h===`/`?``:h.endsWith(`/`)?h.slice(0,-1):h,_={root:e,docsDir:d,config:c,doctorConfig:n,linkTree:m,files:p,options:t,routeIndex:new Set(m.routes),routeIndexWithSlash:new Set(m.routes.map(e=>e.endsWith(`/`)?e:e+`/`)),routeIndexWithoutSlash:new Set(m.routes.map(e=>e.endsWith(`/`)?e.slice(0,-1):e)),basePrefix:g};r===`pretty`&&(0,s.info)(s.colors.dim(`🧪 Running diagnostic checks in parallel...`));let[v,y,b,x]=await Promise.all([Y(_),X(_),Z(_),Q(_)]),S=[...v,...y,...b,...x];r===`pretty`&&console.log(`\n${(0,s.tasks)([{label:`Metadata checks ${v.length>0?`— ${v.length} issue${v.length===1?``:`s`}`:`— OK`}`,done:v.length===0},{label:`Link checks ${y.length>0?`— ${y.length} issue${y.length===1?``:`s`}`:`— OK`}`,done:y.length===0},{label:`i18n checks ${b.length>0?`— ${b.length} issue${b.length===1?``:`s`}`:`— OK`}`,done:b.length===0},{label:`Sidebar checks ${x.length>0?`— ${x.length} issue${x.length===1?``:`s`}`:`— OK`}`,done:x.length===0}])}`);let C=0;if(t.fix){for(let e of S)if(e.fix){if(_.doctorConfig.fix.confirmChanges&&!await(0,s.confirm)(`Fix issue in "${e.file}": ${e.message}?`))continue;if(_.doctorConfig.fix.backupFiles){let t=l.default.resolve(_.docsDir,e.file);a.default.existsSync(t)&&await z(t,l.default.resolve(_.root,_.doctorConfig.fix.backupPath))}await e.fix(),C++}}let w=((performance.now()-o)/1e3).toFixed(2),T=S.filter(e=>e.level===`high`).length,E=S.filter(e=>e.level===`warning`).length,D=S.filter(e=>e.level===`low`).length,O={summary:{total:S.length,high:T,warning:E,low:D,fixed:C,duration:w},issues:S.map(e=>({...e,fix:void 0}))};if(n.reporting.outputFile){let t=l.default.resolve(e,n.reporting.outputFile);a.default.existsSync(l.default.dirname(t))||a.default.mkdirSync(l.default.dirname(t),{recursive:!0}),a.default.writeFileSync(t,JSON.stringify(O,null,2))}if(r===`json`)console.log(JSON.stringify(O,null,2));else if(r===`pretty`){let e=S.reduce((e,t)=>(e[t.file]||(e[t.file]=[]),e[t.file].push(t),e),{});if(S.length>0){(0,s.dividerLog)();for(let[n,r]of Object.entries(e)){let e=[];for(let n of r){let r=n.level===`high`?`❌`:n.level===`warning`?`⚠️`:`ℹ️`,i=n.level===`high`?s.colors.red:n.level===`warning`?s.colors.yellow:s.colors.blue;e.push(`${r} ${i(n.level.toUpperCase())}: ${n.message}`),n.suggestion&&e.push(` ${s.colors.dim(`💡 ${n.suggestion}`)}`),t.fix&&n.fix&&e.push(` ${s.colors.green(`✅ Fixed automatically`)}`)}console.log(`\n${(0,s.single)(`📄 ${n}`,e)}`)}(0,s.dividerLog)()}if(S.length===0)console.log((0,s.round)(`✨ Documentation Health Check`,[` Everything looks perfect!`,` Your documentation is in great shape.`,``,` ${s.colors.dim(`Scanned ${p.length} file${p.length===1?``:`s`} in ${w}s`)}`]));else{let e=[];T>0&&e.push(s.colors.red(`${T} Critical Error${T===1?``:`s`}`)),E>0&&e.push(s.colors.yellow(`${E} Warning${E===1?``:`s`}`)),D>0&&e.push(s.colors.blue(`${D} Improvement${D===1?``:`s`}`));let t=[...(0,s.bullet)(e).split(`
21
- `).map(e=>e.trimStart()),``,s.colors.dim(`Scanned ${p.length} file${p.length===1?``:`s`} in ${w}s`)];console.log(`\n${(0,s.double)(`Diagnosis Results`,t)}\n`),C>0&&(0,s.success)(`Successfully fixed ${C} issues automatically!`),T>0?(0,s.error)(`Please fix the critical errors before building for production.`):(0,s.success)(`No critical issues found. You are ready to go!`)}}n.reporting.failOnError&&T>0&&process.exit(1),n.reporting.maxWarnings!==-1&&E>n.reporting.maxWarnings&&(r===`pretty`&&(0,s.error)(`Failed: Too many warnings (${E} > ${n.reporting.maxWarnings})`),process.exit(1))}catch(e){(0,s.error)(`Doctor failed: ${e}`),process.exit(1)}}Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return Y}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return W}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return O}}),Object.defineProperty(exports,`f`,{enumerable:!0,get:function(){return k}}),Object.defineProperty(exports,`g`,{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,`h`,{enumerable:!0,get:function(){return E}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return X}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return L}}),Object.defineProperty(exports,`m`,{enumerable:!0,get:function(){return D}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return $}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return Q}}),Object.defineProperty(exports,`p`,{enumerable:!0,get:function(){return A}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return Z}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return G}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return ee}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return I}});