boltdocs 3.1.0 → 3.2.1

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 (138) hide show
  1. package/dist/{adapters-DEXNIv3x.mjs → adapters-ByYY44Zy.mjs} +1 -1
  2. package/dist/{adapters-uGz-UKQa.cjs → adapters-DvmtpdSF.cjs} +1 -1
  3. package/dist/{banner-DjujkctF.d.ts → banner-BMop1KLF.d.ts} +2 -2
  4. package/dist/{banner-DdSgCs4G.d.cts → banner-CVD0GugR.d.cts} +2 -2
  5. package/dist/{cache-CfRTUzWC.cjs → cache-CO4Dy2uQ.cjs} +1 -1
  6. package/dist/{cache-B0C2i0yP.mjs → cache-Dk53iOo6.mjs} +1 -1
  7. package/dist/chunk-BFSpntXv.mjs +6 -0
  8. package/dist/{chunk-Ds5LZdWN.cjs → chunk-D1Md3oWO.cjs} +1 -1
  9. package/dist/client/index.cjs +219 -172
  10. package/dist/client/index.d.cts +75 -9
  11. package/dist/client/index.d.ts +75 -9
  12. package/dist/client/index.js +119 -73
  13. package/dist/client/mdx.cjs +1 -1
  14. package/dist/client/mdx.d.cts +1 -1
  15. package/dist/client/mdx.d.ts +1 -1
  16. package/dist/client/mdx.js +1 -1
  17. package/dist/client/primitives.cjs +7 -7
  18. package/dist/client/primitives.d.cts +5 -22
  19. package/dist/client/primitives.d.ts +5 -22
  20. package/dist/client/primitives.js +4 -4
  21. package/dist/client/theme/reset.css +31 -4
  22. package/dist/{shiki-adapter-fS94vy-z.d.mts → config-BpzaPsJj.d.cts} +325 -78
  23. package/dist/config-CCXp3aXO.mjs +7 -0
  24. package/dist/{config-BxsogK5A.cjs → config-CMd4XoFq.cjs} +1 -1
  25. package/dist/config-DlGoEM9D.cjs +7 -0
  26. package/dist/{shiki-adapter-l2kEP5rn.d.cts → config-xtS0ZkMm.d.mts} +325 -78
  27. package/dist/{csp-BX06rvdg.cjs → csp-CRp_3U7a.cjs} +1 -1
  28. package/dist/csp-oTC2ygvF.mjs +6 -0
  29. package/dist/{docs-layout-DyLDBwS6.js → docs-layout-BdtZ9z6s.js} +9 -28
  30. package/dist/{docs-layout-D1buSdua.cjs → docs-layout-CFWI15Id.cjs} +69 -88
  31. package/dist/{doctor-DPDcRKM1.cjs → doctor-BBtmNJE0.cjs} +1 -1
  32. package/dist/doctor-Bv16QSrI.cjs +7 -0
  33. package/dist/doctor-DOAbSaiL.mjs +7 -0
  34. package/dist/{generator-BN75lJOv.cjs → generator-COepVWGi.cjs} +1 -1
  35. package/dist/{handler-Btd4t_67.mjs → handler-DzQae4eA.mjs} +1 -1
  36. package/dist/{handler-1LRMYeI4.cjs → handler-XX7cLTqe.cjs} +1 -1
  37. package/dist/headers-Ddwek8K7.mjs +6 -0
  38. package/dist/{headers-YpD10rDb.cjs → headers-dg4SDrjY.cjs} +1 -1
  39. package/dist/{image-5WsgWYTh.js → image-Bz87fCla.js} +1 -1
  40. package/dist/{image-Hb105Gu6.cjs → image-C4TlpMHn.cjs} +18 -18
  41. package/dist/link-2PzgTnaP.js +673 -0
  42. package/dist/{icons-dev-YtDoLUsb.cjs → link-D1Gjkb-2.cjs} +0 -350
  43. package/dist/{mdx-Bv-pS6-O.js → mdx-BuO6a1f7.js} +195 -40
  44. package/dist/{mdx-CDUcJmye.cjs → mdx-CD-tSjRG.cjs} +234 -73
  45. package/dist/{meta-loader-CTB62-Mo.cjs → meta-loader-Dq1zcFnh.cjs} +1 -1
  46. package/dist/node/cache.cjs +1 -1
  47. package/dist/node/cache.d.cts +2 -1
  48. package/dist/node/cache.d.mts +2 -1
  49. package/dist/node/cache.mjs +1 -1
  50. package/dist/node/cli-entry.cjs +6 -6
  51. package/dist/node/cli-entry.mjs +9 -9
  52. package/dist/node/index.cjs +1 -1
  53. package/dist/node/index.d.cts +20 -174
  54. package/dist/node/index.d.mts +18 -175
  55. package/dist/node/index.mjs +1 -1
  56. package/dist/node/mdx/shiki-adapter.cjs +1 -1
  57. package/dist/node/mdx/shiki-adapter.d.cts +49 -1
  58. package/dist/node/mdx/shiki-adapter.d.mts +49 -1
  59. package/dist/node/mdx/shiki-adapter.mjs +1 -1
  60. package/dist/node-BXtqM1uH.mjs +6 -0
  61. package/dist/node-BlVk4EVg.cjs +104 -0
  62. package/dist/node-DOf4zhWc.mjs +104 -0
  63. package/dist/node-aD1eisrR.cjs +6 -0
  64. package/dist/{package-_-Oa8-qN.cjs → package-BcISI5-P.cjs} +1 -1
  65. package/dist/{package-CoHWTf0N.mjs → package-CCYEAYeA.mjs} +1 -1
  66. package/dist/{pages-external-CX2uyW95.cjs → pages-external-XkYIs-d5.cjs} +1 -1
  67. package/dist/parser-DCiEWkSk.cjs +8 -0
  68. package/dist/parser-qk9FIHJ7.mjs +8 -0
  69. package/dist/plugin-C95kvu6h.mjs +73 -0
  70. package/dist/plugin-DM3u2bVj.cjs +73 -0
  71. package/dist/routes-BW6zsk7Z.mjs +6 -0
  72. package/dist/routes-BgoIB5wb.cjs +6 -0
  73. package/dist/{routes-D_S9kjkS.cjs → routes-CORVxc02.cjs} +1 -1
  74. package/dist/{search-dialog-BpNULmrl.cjs → search-dialog-B1NERUNx.cjs} +101 -55
  75. package/dist/{search-dialog-BbtxA1uT.cjs → search-dialog-BRFno7HD.cjs} +8 -8
  76. package/dist/{search-dialog-DC7oXU-5.js → search-dialog-BmxHiKwt.js} +2 -2
  77. package/dist/{search-dialog-gp9lrJXm.js → search-dialog-D6TvjcuV.js} +1 -1
  78. package/dist/{search-dialog-PJrFRU5G.js → search-dialog-DFnlx8LO.js} +44 -4
  79. package/dist/{search-dialog-BIuxGQsg.cjs → search-dialog-DHqwjJuG.cjs} +1 -1
  80. package/dist/server/index.cjs +1 -1
  81. package/dist/server/index.d.mts +1 -1
  82. package/dist/server/index.mjs +1 -1
  83. package/dist/shiki-adapter-CoQ6jyJ4.cjs +6 -0
  84. package/dist/shiki-adapter-D-aKw7PP.mjs +6 -0
  85. package/dist/{sidebar-DknLUI1R.d.ts → sidebar-COTaMHR-.d.ts} +349 -41
  86. package/dist/{sidebar-DH2iPKXM.d.cts → sidebar-CrEdJuHX.d.cts} +349 -41
  87. package/dist/{types-generator-CYcHkDzZ.cjs → types-generator-BXhv7Ill.cjs} +1 -1
  88. package/dist/types-generator-bDPvUztF.mjs +26 -0
  89. package/dist/utils-Crm9oPcV.mjs +7 -0
  90. package/dist/utils-D6Xtj0FZ.cjs +7 -0
  91. package/package.json +13 -10
  92. package/src/shared/types.ts +361 -19
  93. package/dist/chunk-hT5z_Zn9-DsJawvsz.mjs +0 -6
  94. package/dist/chunk-hT5z_Zn9-SKz6VFXu.cjs +0 -6
  95. package/dist/config-DAgpZyh6.mjs +0 -7
  96. package/dist/config-DrRQYDCI.cjs +0 -7
  97. package/dist/csp-z2D0FuRW.mjs +0 -6
  98. package/dist/doctor-BadGEhXv.cjs +0 -7
  99. package/dist/doctor-vDsUDgqp.mjs +0 -7
  100. package/dist/escape-string-regexp-AG8q1e25-9Un9V90q.mjs +0 -6
  101. package/dist/escape-string-regexp-AG8q1e25-bJ9Ixe7c.cjs +0 -6
  102. package/dist/esm-shims-DSep1HcR.mjs +0 -6
  103. package/dist/headers-CL0pMcwm.mjs +0 -6
  104. package/dist/icons-dev-CHZOwhQA.js +0 -921
  105. package/dist/lib-BR0SoanK-CLswltLI.cjs +0 -6
  106. package/dist/lib-BR0SoanK-DcYeDrE6.mjs +0 -6
  107. package/dist/lib-DPoCz1YB-CLYXwKST.cjs +0 -6
  108. package/dist/lib-DPoCz1YB-CyGOqgSO.mjs +0 -6
  109. package/dist/micromark-util-character-5KqJafVT-C6gnc770.cjs +0 -6
  110. package/dist/micromark-util-character-5KqJafVT-DkPKsbgn.mjs +0 -6
  111. package/dist/node-BDBv8CT6.mjs +0 -104
  112. package/dist/node-DFV_FV0y.mjs +0 -6
  113. package/dist/node-DqsP7kXz.cjs +0 -6
  114. package/dist/node-yFmAavND.cjs +0 -104
  115. package/dist/parser-BZJgAa9E.mjs +0 -8
  116. package/dist/parser-DlanzESE.cjs +0 -8
  117. package/dist/plugin-BVuwx5D9.cjs +0 -73
  118. package/dist/plugin-BoxD91Yh.mjs +0 -73
  119. package/dist/rehype-slug--ZOxZ-_K-BNeYC4aT.cjs +0 -6
  120. package/dist/rehype-slug--ZOxZ-_K-CjIQEJCs.mjs +0 -6
  121. package/dist/remark-frontmatter-wFYRLcCt-CutW0gA3.mjs +0 -8
  122. package/dist/remark-frontmatter-wFYRLcCt-ENB5qG3y.cjs +0 -8
  123. package/dist/remark-gfm-B8TMkQbX-CjUJo8Rd.cjs +0 -21
  124. package/dist/remark-gfm-B8TMkQbX-Ctu0VV1_.mjs +0 -21
  125. package/dist/rolldown-runtime-fkIsjY3S.mjs +0 -6
  126. package/dist/rollup-DMqoG11U-CKcJ37u_.mjs +0 -59
  127. package/dist/rollup-DMqoG11U-DKdxvZIj.cjs +0 -59
  128. package/dist/routes-BN2XbGcT.mjs +0 -6
  129. package/dist/routes-Cnq8xTCv.cjs +0 -6
  130. package/dist/shiki-adapter-CGTmrR6S.cjs +0 -6
  131. package/dist/shiki-adapter-CK3llqw2.mjs +0 -6
  132. package/dist/types-generator-DVOnRVKU.mjs +0 -26
  133. package/dist/utils-B3xYMrpK.mjs +0 -7
  134. package/dist/utils-Bz1tG9Dg.cjs +0 -7
  135. /package/dist/{errors-C0Hx15Ag.mjs → errors-0zGHRLue.mjs} +0 -0
  136. /package/dist/{errors-Dx6JHoKE.cjs → errors-vKw8CkiX.cjs} +0 -0
  137. /package/dist/{index-DJYJzs-Z.d.mts → index-1KsTDq4o.d.mts} +0 -0
  138. /package/dist/{meta-loader-Bq-MjTXB.mjs → meta-loader-C4Hu9RN9.mjs} +0 -0
@@ -4,26 +4,26 @@
4
4
  * Licensed under the MIT License.
5
5
  */
6
6
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
7
- const require_icons_dev = require('../icons-dev-YtDoLUsb.cjs');
8
- const require_image = require('../image-Hb105Gu6.cjs');
9
- const require_mdx = require('../mdx-CDUcJmye.cjs');
10
- const require_docs_layout = require('../docs-layout-D1buSdua.cjs');
11
- const require_search_dialog = require('../search-dialog-BpNULmrl.cjs');
12
- const require_search_dialog$1 = require('../search-dialog-BbtxA1uT.cjs');
7
+ const require_link = require('../link-D1Gjkb-2.cjs');
8
+ const require_image = require('../image-C4TlpMHn.cjs');
9
+ const require_mdx = require('../mdx-CD-tSjRG.cjs');
10
+ const require_docs_layout = require('../docs-layout-CFWI15Id.cjs');
11
+ const require_search_dialog = require('../search-dialog-B1NERUNx.cjs');
12
+ const require_search_dialog$1 = require('../search-dialog-BRFno7HD.cjs');
13
13
  let react = require("react");
14
14
  let react_router_dom = require("react-router-dom");
15
15
  let react_jsx_runtime = require("react/jsx-runtime");
16
16
  let react_aria_components = require("react-aria-components");
17
17
  let react_helmet_async = require("react-helmet-async");
18
- react_helmet_async = require_icons_dev.__toESM(react_helmet_async);
18
+ react_helmet_async = require_link.__toESM(react_helmet_async);
19
19
  let virtual_boltdocs_mdx_components = require("virtual:boltdocs-mdx-components");
20
- virtual_boltdocs_mdx_components = require_icons_dev.__toESM(virtual_boltdocs_mdx_components);
20
+ virtual_boltdocs_mdx_components = require_link.__toESM(virtual_boltdocs_mdx_components);
21
21
  let virtual_boltdocs_icons = require("virtual:boltdocs-icons");
22
- virtual_boltdocs_icons = require_icons_dev.__toESM(virtual_boltdocs_icons);
22
+ virtual_boltdocs_icons = require_link.__toESM(virtual_boltdocs_icons);
23
23
  let isomorphic_dompurify = require("isomorphic-dompurify");
24
- isomorphic_dompurify = require_icons_dev.__toESM(isomorphic_dompurify);
24
+ isomorphic_dompurify = require_link.__toESM(isomorphic_dompurify);
25
25
  let virtual_boltdocs_layout = require("virtual:boltdocs-layout");
26
- virtual_boltdocs_layout = require_icons_dev.__toESM(virtual_boltdocs_layout);
26
+ virtual_boltdocs_layout = require_link.__toESM(virtual_boltdocs_layout);
27
27
  let _bdocs_ssg = require("@bdocs/ssg");
28
28
 
29
29
  //#region src/client/app/mdx-components-context.tsx
@@ -65,7 +65,7 @@ function MdxComponentsProvider({ components, children }) {
65
65
  function ScrollHandler() {
66
66
  const { pathname, hash } = (0, react_router_dom.useLocation)();
67
67
  const handleScroll = (behavior = "auto") => {
68
- const container = document.querySelector(".boltdocs-content") || window;
68
+ const container = document.querySelector(".boltdocs-content") || document.querySelector(".boltdocs-external-content") || document.querySelector(".boltdocs-shell-content") || window;
69
69
  const getScrollTop = () => {
70
70
  if (container === window) return window.scrollY;
71
71
  return container.scrollTop;
@@ -98,11 +98,6 @@ function ScrollHandler() {
98
98
  }, [pathname, hash]);
99
99
  (0, react.useEffect)(() => {
100
100
  handleScroll("auto");
101
- const rafId = requestAnimationFrame(() => {
102
- handleScroll("auto");
103
- window.dispatchEvent(new Event("resize"));
104
- });
105
- return () => cancelAnimationFrame(rafId);
106
101
  }, [pathname, hash]);
107
102
  return null;
108
103
  }
@@ -129,10 +124,10 @@ function NotFound() {
129
124
  children: "The page you're looking for doesn't exist or has been moved."
130
125
  })]
131
126
  }),
132
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_icons_dev.Link, {
127
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_link.Link, {
133
128
  href: "/",
134
129
  className: "inline-flex items-center gap-2 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 outline-none select-none",
135
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_icons_dev.ArrowLeft, { size: 14 }), " Go to Home"]
130
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_link.ArrowLeft, { size: 14 }), " Go to Home"]
136
131
  })
137
132
  ]
138
133
  })
@@ -190,8 +185,8 @@ function getTranslated(value, locale) {
190
185
  //#region src/client/app/head.tsx
191
186
  function Head({ siteTitle, siteDescription, routes }) {
192
187
  const location = (0, react_router_dom.useLocation)();
193
- const config = require_icons_dev.useConfig();
194
- const { currentLocale, currentRoute } = require_icons_dev.useRoutes();
188
+ const config = require_link.useConfig();
189
+ const { currentLocale, currentRoute } = require_link.useRoutes();
195
190
  const route = (0, react.useMemo)(() => {
196
191
  if (currentRoute) return currentRoute;
197
192
  const normalizedPath = location.pathname.endsWith("/") && location.pathname.length > 1 ? location.pathname.slice(0, -1) : location.pathname;
@@ -286,12 +281,14 @@ function Head({ siteTitle, siteDescription, routes }) {
286
281
  content: config.seo.verification.facebook
287
282
  }),
288
283
  Object.entries(globalMetatags).map(([key, value]) => {
289
- return key.startsWith("og:") || key.startsWith("music:") || key.startsWith("video:") || key.startsWith("article:") || key.startsWith("book:") || key.startsWith("profile:") ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("meta", {
284
+ const isProperty = key.startsWith("og:") || key.startsWith("music:") || key.startsWith("video:") || key.startsWith("article:") || key.startsWith("book:") || key.startsWith("profile:");
285
+ const strVal = String(value ?? "");
286
+ return isProperty ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("meta", {
290
287
  property: key,
291
- content: value
288
+ content: strVal
292
289
  }, key) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("meta", {
293
290
  name: key,
294
- content: value
291
+ content: strVal
295
292
  }, key);
296
293
  }),
297
294
  Object.entries(seo).map(([key, value]) => {
@@ -301,15 +298,17 @@ function Head({ siteTitle, siteDescription, routes }) {
301
298
  }, "noindex");
302
299
  if (key === "robots") return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("meta", {
303
300
  name: "robots",
304
- content: value
301
+ content: String(value)
305
302
  }, "robots");
306
303
  if (key === "canonical" || key === "og:url" || key === "og:image" || key === "twitter:image") return null;
307
- return key.startsWith("og:") || key.startsWith("music:") || key.startsWith("video:") || key.startsWith("article:") || key.startsWith("book:") || key.startsWith("profile:") ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("meta", {
304
+ const isProperty = key.startsWith("og:") || key.startsWith("music:") || key.startsWith("video:") || key.startsWith("article:") || key.startsWith("book:") || key.startsWith("profile:");
305
+ const strVal = String(value ?? "");
306
+ return isProperty ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("meta", {
308
307
  property: key,
309
- content: value
308
+ content: strVal
310
309
  }, key) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("meta", {
311
310
  name: key,
312
- content: value
311
+ content: strVal
313
312
  }, key);
314
313
  })
315
314
  ] });
@@ -338,7 +337,7 @@ function useCurrentPostData() {
338
337
  * Updates the HTML lang and dir attributes based on the current locale configuration.
339
338
  */
340
339
  function I18nUpdater({ config }) {
341
- const { currentLocale } = require_icons_dev.useBoltdocsContext();
340
+ const { currentLocale } = require_link.useBoltdocsContext();
342
341
  (0, react.useEffect)(() => {
343
342
  if (!config.i18n || typeof document === "undefined") return;
344
343
  const locale = currentLocale || config.i18n.defaultLocale;
@@ -350,9 +349,9 @@ function I18nUpdater({ config }) {
350
349
  }
351
350
  function StoreSync({ config, routeMap }) {
352
351
  const location = (0, react_router_dom.useLocation)();
353
- const { setLocale, setVersion } = require_icons_dev.useBoltdocsContext();
352
+ const { setLocale, setVersion } = require_link.useBoltdocsContext();
354
353
  (0, react.useEffect)(() => {
355
- const currentPath = require_icons_dev.normalizePath(location.pathname);
354
+ const currentPath = require_link.normalizePath(location.pathname);
356
355
  const matchedRoute = routeMap.get(currentPath);
357
356
  if (matchedRoute) {
358
357
  if (config.i18n) setLocale(matchedRoute.locale || config.i18n.defaultLocale);
@@ -374,11 +373,11 @@ function BoltdocsShell({ config, routes, components = {}, collectionsData }) {
374
373
  ...components
375
374
  }), [components]);
376
375
  const { pathname } = (0, react_router_dom.useLocation)();
377
- const currentPath = (0, react.useMemo)(() => require_icons_dev.normalizePath(pathname || "/"), [pathname]);
376
+ const currentPath = (0, react.useMemo)(() => require_link.normalizePath(pathname || "/"), [pathname]);
378
377
  const routeMap = (0, react.useMemo)(() => {
379
378
  const map = /* @__PURE__ */ new Map();
380
379
  for (const r of routes) {
381
- const key = require_icons_dev.normalizePath(r.path === "" ? "/" : r.path);
380
+ const key = require_link.normalizePath(r.path === "" ? "/" : r.path);
382
381
  map.set(key, r);
383
382
  }
384
383
  return map;
@@ -400,15 +399,15 @@ function BoltdocsShell({ config, routes, components = {}, collectionsData }) {
400
399
  config,
401
400
  routeMap
402
401
  ]);
403
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_icons_dev.RoutesProvider, {
402
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_link.RoutesProvider, {
404
403
  routes,
405
404
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_image.ThemeProvider, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_docs_layout.UIProvider, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MdxComponentsProvider, {
406
405
  components: allComponents,
407
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_icons_dev.ConfigContext.Provider, {
406
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_link.ConfigContext.Provider, {
408
407
  value: config,
409
408
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(CollectionsContext.Provider, {
410
409
  value: collectionsData || {},
411
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(ScrollHandler, {}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_icons_dev.BoltdocsProvider, {
410
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(ScrollHandler, {}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_link.BoltdocsProvider, {
412
411
  initialLocale: initialData.initLocale,
413
412
  initialVersion: initialData.initVersion,
414
413
  children: [
@@ -422,7 +421,10 @@ function BoltdocsShell({ config, routes, components = {}, collectionsData }) {
422
421
  siteDescription: config.theme?.description,
423
422
  routes
424
423
  }),
425
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_search_dialog$1.InternalErrorBoundary, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_router_dom.Outlet, {}) })
424
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_search_dialog$1.InternalErrorBoundary, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
425
+ className: "boltdocs-shell-content h-screen overflow-hidden",
426
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_router_dom.Outlet, {})
427
+ }) })
426
428
  ]
427
429
  })]
428
430
  })
@@ -536,7 +538,7 @@ function MdxPage({ MDXComponent, mdxComponents: propComponents, collectionPostCo
536
538
  * Hook to generate breadcrumbs based on the current active route.
537
539
  */
538
540
  function useBreadcrumbs() {
539
- const { currentRoute: activeRoute } = require_icons_dev.useRoutes();
541
+ const { currentRoute: activeRoute } = require_link.useRoutes();
540
542
  const crumbs = [];
541
543
  if (activeRoute) {
542
544
  if (activeRoute.groupTitle) crumbs.push({ label: activeRoute.groupTitle });
@@ -561,14 +563,14 @@ function Breadcrumbs() {
561
563
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_docs_layout.Breadcrumbs.Item, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_docs_layout.Breadcrumbs.Link, {
562
564
  href: "/",
563
565
  className: "text-muted hover:text-body transition-colors flex items-center",
564
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_icons_dev.Home, { size: 14 })
566
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_link.Home, { size: 14 })
565
567
  }) }), crumbs.map((crumb, i) => {
566
568
  const isActive = crumb.href === activeRoute?.path;
567
569
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_docs_layout.Breadcrumbs.Item, {
568
570
  className: "gap-2",
569
571
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_docs_layout.Breadcrumbs.Separator, { className: "text-muted/40" }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_docs_layout.Breadcrumbs.Link, {
570
- href: crumb.href,
571
- className: require_icons_dev.cn("transition-colors", isActive ? "text-body font-semibold cursor-default pointer-events-none" : "text-muted hover:text-body"),
572
+ href: crumb.href ?? "",
573
+ className: require_link.cn("transition-colors", isActive ? "text-body font-semibold cursor-default pointer-events-none" : "text-muted hover:text-body"),
572
574
  children: crumb.label
573
575
  })]
574
576
  }, `crumb-${crumb.href}-${crumb.label}-${i}`);
@@ -617,26 +619,26 @@ function CopyMarkdown({ content, mdxRaw }) {
617
619
  children: [
618
620
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_search_dialog.Button, {
619
621
  onPress: handleCopy,
620
- className: require_icons_dev.cn("md:hidden flex items-center justify-center w-8 h-8 bg-transparent outline-none select-none cursor-pointer border-none", "text-muted transition-all duration-300 hover:bg-primary-500/5 hover:text-body", copied && "text-emerald-500 hover:bg-emerald-500/5"),
622
+ className: require_link.cn("md:hidden flex items-center justify-center w-8 h-8 bg-transparent outline-none select-none cursor-pointer border-none", "text-muted transition-all duration-300 hover:bg-primary-500/5 hover:text-body", copied && "text-emerald-500 hover:bg-emerald-500/5"),
621
623
  "aria-label": copied ? "Copied!" : "Copy Markdown",
622
- children: copied ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_icons_dev.Check, { size: 14 }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_icons_dev.Copy, { size: 14 })
624
+ children: copied ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_link.Check, { size: 14 }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_link.Copy, { size: 14 })
623
625
  }),
624
626
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_search_dialog.Button, {
625
627
  onPress: handleCopy,
626
- className: require_icons_dev.cn("hidden md:flex items-center gap-2 px-5 py-2 bg-transparent text-[0.8125rem] font-semibold h-9 shrink-0 outline-none select-none cursor-pointer border-none", "text-body transition-all duration-300 hover:bg-primary-500/5", copied && "text-emerald-500 hover:bg-emerald-500/5"),
627
- children: [copied ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_icons_dev.Check, { size: 16 }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_icons_dev.Copy, { size: 16 }), copied ? "Copied!" : "Copy Markdown"]
628
+ className: require_link.cn("hidden md:flex items-center gap-2 px-5 py-2 bg-transparent text-[0.8125rem] font-semibold h-9 shrink-0 outline-none select-none cursor-pointer border-none", "text-body transition-all duration-300 hover:bg-primary-500/5", copied && "text-emerald-500 hover:bg-emerald-500/5"),
629
+ children: [copied ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_link.Check, { size: 16 }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_link.Copy, { size: 16 }), copied ? "Copied!" : "Copy Markdown"]
628
630
  }),
629
631
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_docs_layout.Menu.Trigger, {
630
632
  placement: "bottom end",
631
633
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_search_dialog.Button, {
632
- className: require_icons_dev.cn("flex items-center justify-center px-2.5 md:px-3.5 h-8 md:h-9 border-none border-l border-subtle/50 text-muted rounded-none bg-transparent shrink-0 outline-none select-none cursor-pointer", "transition-all duration-300 hover:bg-primary-500/5 hover:text-primary-500"),
633
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_icons_dev.ChevronDown, { size: 14 })
634
+ className: require_link.cn("flex items-center justify-center px-2.5 md:px-3.5 h-8 md:h-9 border-none border-l border-subtle/50 text-muted rounded-none bg-transparent shrink-0 outline-none select-none cursor-pointer", "transition-all duration-300 hover:bg-primary-500/5 hover:text-primary-500"),
635
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_link.ChevronDown, { size: 14 })
634
636
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_docs_layout.Menu.Root, {
635
637
  className: "w-52 bg-main border border-subtle rounded-xl p-1.5 shadow-md outline-none flex flex-col gap-0.5 animate-fade-in z-100",
636
638
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_docs_layout.Menu.Item, {
637
639
  onAction: handleCopy,
638
640
  className: "flex items-center px-3 py-2 rounded-lg text-xs font-medium text-body dark:hover:bg-primary-300/50 hover:bg-primary-200/50 transition-colors duration-100 cursor-pointer select-none outline-none group",
639
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_icons_dev.Copy, {
641
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_link.Copy, {
640
642
  size: 16,
641
643
  className: "size-4 text-muted dark:group-hover:text-primary-500 group-hover:text-primary-400"
642
644
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
@@ -646,7 +648,7 @@ function CopyMarkdown({ content, mdxRaw }) {
646
648
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_docs_layout.Menu.Item, {
647
649
  onAction: handleOpenRaw,
648
650
  className: "flex items-center gap-2 px-3 py-2 rounded-lg text-xs font-medium text-body dark:hover:bg-primary-300/50 hover:bg-primary-200/50 transition-colors duration-100 cursor-pointer select-none outline-none group",
649
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_icons_dev.ExternalLink, {
651
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_link.ExternalLink, {
650
652
  size: 16,
651
653
  className: "size-4 text-muted dark:group-hover:text-primary-500 group-hover:text-primary-400"
652
654
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
@@ -713,7 +715,7 @@ function GithubStars({ repo }) {
713
715
  target: "_blank",
714
716
  rel: "noopener noreferrer",
715
717
  className: "inline-flex items-center gap-2 rounded-xl border border-subtle bg-surface px-3 py-1.5 text-xs font-semibold text-muted dark:hover:bg-primary-300/50 hover:bg-primary-200/50 transition-colors duration-100 hover:border-primary-500/50 hover:text-body select-none outline-none",
716
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_icons_dev.Github, { className: "h-4 w-4 text-body" }), stars !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
718
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_search_dialog.Github, { className: "h-4 w-4 text-body" }), stars !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
717
719
  className: "tabular-nums font-medium",
718
720
  children: [stars, " stars"]
719
721
  })]
@@ -723,10 +725,10 @@ function GithubStars({ repo }) {
723
725
  //#endregion
724
726
  //#region src/client/hooks/use-navbar.ts
725
727
  function useNavbar() {
726
- const config = require_icons_dev.useConfig();
728
+ const config = require_link.useConfig();
727
729
  const { theme, resolvedTheme } = require_image.useTheme();
728
730
  const location = (0, react_router_dom.useLocation)();
729
- const { currentLocale } = require_icons_dev.useRoutes();
731
+ const { currentLocale } = require_link.useRoutes();
730
732
  const themeConfig = config.theme || {};
731
733
  const title = getTranslated(themeConfig.title, currentLocale) || "Boltdocs";
732
734
  const rawLinks = themeConfig.navbar || [];
@@ -742,7 +744,7 @@ function useNavbar() {
742
744
  const cleanPathParts = (p) => {
743
745
  const parts = p.split("/").filter(Boolean);
744
746
  let i = 0;
745
- if (config.i18n?.locales && parts[i] && config.i18n.locales[parts[i]]) i++;
747
+ if (config.i18n?.locales && parts[i] && !Array.isArray(config.i18n.locales) && config.i18n.locales[parts[i]]) i++;
746
748
  if (config.versions?.versions && parts[i]) {
747
749
  if (config.versions.versions.some((v) => v.path === parts[i])) i++;
748
750
  }
@@ -807,7 +809,7 @@ function ThemeToggle() {
807
809
  setMounted(true);
808
810
  }, []);
809
811
  if (!mounted) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { className: "h-9 w-9" });
810
- const Icon = theme === "system" ? require_icons_dev.Monitor : theme === "dark" ? require_icons_dev.Moon : require_icons_dev.Sun;
812
+ const Icon = theme === "system" ? require_link.Monitor : theme === "dark" ? require_link.Moon : require_link.Sun;
811
813
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_docs_layout.Menu.Trigger, {
812
814
  placement: "bottom right",
813
815
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_aria_components.Button, {
@@ -829,7 +831,7 @@ function ThemeToggle() {
829
831
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_docs_layout.Menu.Item, {
830
832
  id: "light",
831
833
  className: "group flex items-center gap-2 px-3 py-2 rounded-lg text-xs font-medium text-body dark:hover:bg-primary-300/50 hover:bg-primary-200/50 transition-colors duration-100 cursor-pointer select-none outline-none group data-selected:text-primary-500 data-selected:bg-primary-500/5",
832
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_icons_dev.Sun, {
834
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_link.Sun, {
833
835
  className: "group-hover:text-primary-500 dark:group-hover:text-primary-200",
834
836
  size: 16
835
837
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
@@ -840,7 +842,7 @@ function ThemeToggle() {
840
842
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_docs_layout.Menu.Item, {
841
843
  id: "dark",
842
844
  className: "flex items-center gap-2 px-3 py-2 rounded-lg text-xs font-medium text-body dark:hover:bg-primary-300/50 hover:bg-primary-200/50 transition-colors duration-100 cursor-pointer select-none outline-none group data-selected:text-primary-500 data-selected:bg-primary-500/5",
843
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_icons_dev.Moon, {
845
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_link.Moon, {
844
846
  className: "group-hover:text-primary-500 dark:group-hover:text-primary-200",
845
847
  size: 16
846
848
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
@@ -851,7 +853,7 @@ function ThemeToggle() {
851
853
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_docs_layout.Menu.Item, {
852
854
  id: "system",
853
855
  className: "flex items-center gap-2 px-3 py-2 rounded-lg text-xs font-medium text-body dark:hover:bg-primary-300/50 hover:bg-primary-200/50 transition-colors duration-100 cursor-pointer select-none outline-none group data-selected:text-primary-500 data-selected:bg-primary-500/5",
854
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_icons_dev.Monitor, {
856
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_link.Monitor, {
855
857
  className: "group-hover:text-primary-500 dark:group-hover:text-primary-200",
856
858
  size: 16
857
859
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
@@ -869,23 +871,23 @@ function ThemeSwitcher({ className }) {
869
871
  (0, react.useEffect)(() => {
870
872
  setMounted(true);
871
873
  }, []);
872
- if (!mounted) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { className: require_icons_dev.cn("h-10 w-full bg-surface rounded-xl animate-pulse", className) });
874
+ if (!mounted) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { className: require_link.cn("h-10 w-full bg-surface rounded-xl animate-pulse", className) });
873
875
  const isDark = theme === "dark";
874
876
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
875
- className: require_icons_dev.cn("flex p-1 bg-surface border border-subtle rounded-xl relative w-full h-11", className),
877
+ className: require_link.cn("flex p-1 bg-surface border border-subtle rounded-xl relative w-full h-11", className),
876
878
  children: [
877
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { className: require_icons_dev.cn("absolute inset-y-1 w-[calc(50%-4px)] bg-main border border-subtle rounded-lg transition-all duration-300 ease-out shadow-xs", isDark ? "translate-x-full" : "translate-x-0") }),
879
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { className: require_link.cn("absolute inset-y-1 w-[calc(50%-4px)] bg-main border border-subtle rounded-lg transition-all duration-300 ease-out shadow-xs", isDark ? "translate-x-full" : "translate-x-0") }),
878
880
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
879
881
  onClick: () => setTheme("light"),
880
- className: require_icons_dev.cn("flex-1 flex items-center justify-center rounded-lg z-10 transition-colors outline-none cursor-pointer border-none bg-transparent", !isDark ? "text-body font-semibold" : "text-muted hover:text-body"),
882
+ className: require_link.cn("flex-1 flex items-center justify-center rounded-lg z-10 transition-colors outline-none cursor-pointer border-none bg-transparent", !isDark ? "text-body font-semibold" : "text-muted hover:text-body"),
881
883
  "aria-label": "Light mode",
882
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_icons_dev.Sun, { size: 18 })
884
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_link.Sun, { size: 18 })
883
885
  }),
884
886
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
885
887
  onClick: () => setTheme("dark"),
886
- className: require_icons_dev.cn("flex-1 flex items-center justify-center rounded-lg z-10 transition-colors outline-none cursor-pointer border-none bg-transparent", isDark ? "text-body font-semibold" : "text-muted hover:text-body"),
888
+ className: require_link.cn("flex-1 flex items-center justify-center rounded-lg z-10 transition-colors outline-none cursor-pointer border-none bg-transparent", isDark ? "text-body font-semibold" : "text-muted hover:text-body"),
887
889
  "aria-label": "Dark mode",
888
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_icons_dev.Moon, { size: 18 })
890
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_link.Moon, { size: 18 })
889
891
  })
890
892
  ]
891
893
  });
@@ -901,8 +903,8 @@ function useTabs(tabs = [], routes = []) {
901
903
  transform: "translateX(0) scaleX(0)",
902
904
  width: 0
903
905
  });
904
- const currentPath = require_icons_dev.normalizePath(location.pathname);
905
- const activeTabId = routes.find((r) => require_icons_dev.normalizePath(r.path) === currentPath)?.tab?.toLowerCase();
906
+ const currentPath = require_link.normalizePath(location.pathname);
907
+ const activeTabId = routes.find((r) => require_link.normalizePath(r.path) === currentPath)?.tab?.toLowerCase();
906
908
  const activeIndex = tabs.findIndex((tab) => tab.id.toLowerCase() === activeTabId);
907
909
  const finalActiveIndex = activeIndex === -1 ? 0 : activeIndex;
908
910
  (0, react.useEffect)(() => {
@@ -929,7 +931,7 @@ function useTabs(tabs = [], routes = []) {
929
931
  //#endregion
930
932
  //#region src/client/components/ui-base/tabs.tsx
931
933
  function Tabs({ tabs, routes }) {
932
- const { currentLocale } = require_icons_dev.useRoutes();
934
+ const { currentLocale } = require_link.useRoutes();
933
935
  const { indicatorStyle, tabRefs, activeIndex } = useTabs(tabs, routes);
934
936
  (0, react.useEffect)(() => {
935
937
  const activeTab = tabRefs.current[activeIndex];
@@ -946,7 +948,7 @@ function Tabs({ tabs, routes }) {
946
948
  dangerouslySetInnerHTML: { __html: isomorphic_dompurify.default.sanitize(iconName, { USE_PROFILES: { svg: true } }) }
947
949
  });
948
950
  const icons = {
949
- ...require_icons_dev.icons_exports,
951
+ ...require_link.icons_exports,
950
952
  ...virtual_boltdocs_icons.default
951
953
  };
952
954
  const TabIcon = icons[iconName] || icons[iconName + "Icon"];
@@ -964,7 +966,7 @@ function Tabs({ tabs, routes }) {
964
966
  children: [tabs.map((tab, index) => {
965
967
  const isActive = index === activeIndex;
966
968
  const firstRoute = routes.find((r) => r.tab && r.tab.toLowerCase() === tab.id.toLowerCase());
967
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_icons_dev.Link, {
969
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_link.Link, {
968
970
  href: firstRoute ? firstRoute.path : "#",
969
971
  ref: (el) => {
970
972
  tabRefs.current[index] = el;
@@ -1003,10 +1005,10 @@ function getBaseFilePath(filePath, version, locale) {
1003
1005
  */
1004
1006
  function useVersion() {
1005
1007
  const navigate = (0, react_router_dom.useNavigate)();
1006
- const config = require_icons_dev.useConfig();
1007
- const { allRoutes, currentRoute, currentVersion, currentLocale } = require_icons_dev.useRoutes();
1008
+ const config = require_link.useConfig();
1009
+ const { allRoutes, currentRoute, currentVersion, currentLocale } = require_link.useRoutes();
1008
1010
  const versions = config.versions;
1009
- const { setVersion } = require_icons_dev.useBoltdocsContext();
1011
+ const { setVersion } = require_link.useBoltdocsContext();
1010
1012
  const handleVersionChange = (version) => {
1011
1013
  if (!versions || version === currentVersion) return;
1012
1014
  setVersion(version);
@@ -1046,11 +1048,11 @@ function VersionSelector({ className }) {
1046
1048
  const { currentVersionLabel, availableVersions, handleVersionChange } = useVersion();
1047
1049
  if (availableVersions.length === 0) return null;
1048
1050
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_docs_layout.Menu.Trigger, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_search_dialog.Button, {
1049
- className: require_icons_dev.cn("flex h-9 items-center justify-between gap-2 border border-subtle bg-surface px-4 py-1.5 rounded-xl text-xs font-semibold text-body hover:bg-primary-50/20 hover:border-primary-500/50 transition-all duration-300 outline-none select-none cursor-pointer", className),
1051
+ className: require_link.cn("flex h-9 items-center justify-between gap-2 border border-subtle bg-surface px-4 py-1.5 rounded-xl text-xs font-semibold text-body hover:bg-primary-50/20 hover:border-primary-500/50 transition-all duration-300 outline-none select-none cursor-pointer", className),
1050
1052
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1051
1053
  className: "font-semibold text-[0.8125rem]",
1052
1054
  children: currentVersionLabel
1053
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_icons_dev.ChevronDown, { className: "w-3.5 h-3.5 text-muted/60" })]
1055
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_link.ChevronDown, { className: "w-3.5 h-3.5 text-muted/60" })]
1054
1056
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_docs_layout.Menu.Root, {
1055
1057
  className: "w-40 bg-main border border-subtle rounded-xl p-1.5 shadow-md outline-none flex flex-col gap-0.5 animate-fade-in z-100",
1056
1058
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_docs_layout.Menu.Section, {
@@ -1071,10 +1073,10 @@ function VersionSelector({ className }) {
1071
1073
  */
1072
1074
  function useI18n() {
1073
1075
  const navigate = (0, react_router_dom.useNavigate)();
1074
- const config = require_icons_dev.useConfig();
1075
- const { allRoutes, currentRoute, currentLocale, isCollectionPage } = require_icons_dev.useRoutes();
1076
+ const config = require_link.useConfig();
1077
+ const { allRoutes, currentRoute, currentLocale, isCollectionPage } = require_link.useRoutes();
1076
1078
  const i18n = config.i18n;
1077
- const { setLocale } = require_icons_dev.useBoltdocsContext();
1079
+ const { setLocale } = require_link.useBoltdocsContext();
1078
1080
  const handleLocaleChange = (locale) => {
1079
1081
  if (!i18n || locale === currentLocale) return;
1080
1082
  setLocale(locale);
@@ -1149,7 +1151,7 @@ function useI18n() {
1149
1151
  //#endregion
1150
1152
  //#region src/client/hooks/use-page-nav.ts
1151
1153
  function usePageNav() {
1152
- const { routes, currentRoute } = require_icons_dev.useRoutes();
1154
+ const { routes, currentRoute } = require_link.useRoutes();
1153
1155
  const location = (0, react_router_dom.useLocation)();
1154
1156
  const { groups, ungrouped } = require_docs_layout.useSidebar(routes);
1155
1157
  return (0, react.useMemo)(() => {
@@ -1181,8 +1183,8 @@ function usePageNav() {
1181
1183
  };
1182
1184
  for (const item of mergedItems) if (item.type === "link") flattenNode(item.route);
1183
1185
  else if (item.group.routes) for (const route of item.group.routes) flattenNode(route);
1184
- const currentNormalizedPath = require_icons_dev.normalizePath(location.pathname);
1185
- const currentIndex = orderedRoutes.findIndex((r) => require_icons_dev.normalizePath(r.path) === currentNormalizedPath);
1186
+ const currentNormalizedPath = require_link.normalizePath(location.pathname);
1187
+ const currentIndex = orderedRoutes.findIndex((r) => require_link.normalizePath(r.path) === currentNormalizedPath);
1186
1188
  return {
1187
1189
  prevPage: currentIndex > 0 ? orderedRoutes[currentIndex - 1] : null,
1188
1190
  nextPage: currentIndex !== -1 && currentIndex < orderedRoutes.length - 1 ? orderedRoutes[currentIndex + 1] : null,
@@ -1428,8 +1430,8 @@ function useHeadings() {
1428
1430
  * Resets automatically when navigating to a new page.
1429
1431
  */
1430
1432
  function useFeedback(options = {}) {
1431
- const config = require_icons_dev.useConfig();
1432
- const { currentRoute } = require_icons_dev.useRoutes();
1433
+ const config = require_link.useConfig();
1434
+ const { currentRoute } = require_link.useRoutes();
1433
1435
  const [rating, setRating] = (0, react.useState)(null);
1434
1436
  const [comment, setComment] = (0, react.useState)("");
1435
1437
  const [loading, setLoading] = (0, react.useState)(false);
@@ -1496,14 +1498,14 @@ function I18nSelector({ className }) {
1496
1498
  const { currentLocale, availableLocales, handleLocaleChange } = useI18n();
1497
1499
  if (availableLocales.length === 0) return null;
1498
1500
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_docs_layout.Menu.Trigger, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_search_dialog.Button, {
1499
- className: require_icons_dev.cn("flex h-9 items-center justify-between gap-2 border border-subtle bg-surface px-4 py-1.5 rounded-xl text-xs font-semibold text-body hover:bg-primary-50/20 hover:border-primary-500/50 transition-all duration-300 outline-none select-none cursor-pointer", className),
1501
+ className: require_link.cn("flex h-9 items-center justify-between gap-2 border border-subtle bg-surface px-4 py-1.5 rounded-xl text-xs font-semibold text-body hover:bg-primary-50/20 hover:border-primary-500/50 transition-all duration-300 outline-none select-none cursor-pointer", className),
1500
1502
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1501
1503
  className: "flex items-center gap-1.5",
1502
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_icons_dev.Languages, { className: "w-3.5 h-3.5 text-primary-500" }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1504
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_link.Languages, { className: "w-3.5 h-3.5 text-primary-500" }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1503
1505
  className: "font-bold text-[0.75rem] uppercase opacity-90",
1504
1506
  children: currentLocale || "en"
1505
1507
  })]
1506
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_icons_dev.ChevronDown, { className: "w-3.5 h-3.5 text-muted/60" })]
1508
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_link.ChevronDown, { className: "w-3.5 h-3.5 text-muted/60" })]
1507
1509
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_docs_layout.Menu.Root, {
1508
1510
  className: "w-40 bg-main border border-subtle rounded-xl p-1.5 shadow-md outline-none flex flex-col gap-0.5 animate-fade-in z-100",
1509
1511
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_docs_layout.Menu.Section, {
@@ -1519,17 +1521,17 @@ function I18nSelector({ className }) {
1519
1521
 
1520
1522
  //#endregion
1521
1523
  //#region src/client/components/ui-base/navbar.tsx
1522
- const SearchDialog$1 = (0, react.lazy)(() => Promise.resolve().then(() => require("../search-dialog-BIuxGQsg.cjs")).then((m) => ({ default: m.SearchDialog })));
1524
+ const SearchDialog$1 = (0, react.lazy)(() => Promise.resolve().then(() => require("../search-dialog-DHqwjJuG.cjs")).then((m) => ({ default: m.SearchDialog })));
1523
1525
  function Navbar() {
1524
1526
  const { links, title, logo, logoProps, github, social, config } = useNavbar();
1525
- const { routes, currentRoute, isCollectionPage, currentVersion, currentLocale } = require_icons_dev.useRoutes();
1527
+ const { routes, currentRoute, isCollectionPage, currentVersion, currentLocale } = require_link.useRoutes();
1526
1528
  const { isSidebarOpen, toggleSidebar } = require_docs_layout.useUI();
1527
1529
  const [isMobileMenuOpen, setIsMobileMenuOpen] = (0, react.useState)(false);
1528
1530
  const themeConfig = config.theme;
1529
1531
  const isDocs = !!currentRoute?.filePath && !isCollectionPage;
1530
1532
  const hasTabs = themeConfig?.tabs && themeConfig.tabs.length > 0;
1531
1533
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_search_dialog.Navbar.Root, {
1532
- className: require_icons_dev.cn("border-b border-subtle bg-main/80 backdrop-blur-md", hasTabs && "border-b-0"),
1534
+ className: require_link.cn("border-b border-subtle bg-main/80 backdrop-blur-md", hasTabs && "border-b-0"),
1533
1535
  children: [
1534
1536
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_search_dialog.Navbar.Content, { children: [
1535
1537
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_search_dialog.Navbar.Left, { children: [
@@ -1537,7 +1539,7 @@ function Navbar() {
1537
1539
  onPress: toggleSidebar,
1538
1540
  className: "mr-2 lg:hidden p-1.5 h-8 w-8 flex items-center justify-center bg-transparent border-none outline-none select-none cursor-pointer rounded-xl hover:bg-primary-50/50 transition-colors",
1539
1541
  "aria-label": isSidebarOpen ? "Close sidebar" : "Open sidebar",
1540
- children: isSidebarOpen ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_icons_dev.X, { className: "w-5 h-5 text-body" }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_icons_dev.Menu, { className: "w-5 h-5 text-body" })
1542
+ children: isSidebarOpen ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_link.X, { className: "w-5 h-5 text-body" }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_link.Menu, { className: "w-5 h-5 text-body" })
1541
1543
  }),
1542
1544
  logo && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_search_dialog.Navbar.Logo, {
1543
1545
  src: logo,
@@ -1641,16 +1643,16 @@ function Navbar() {
1641
1643
  });
1642
1644
  }
1643
1645
  function NavbarLinkItem({ link }) {
1644
- const localizedHref = require_icons_dev.useLocalizedTo(link.href || "");
1646
+ const localizedHref = require_link.useLocalizedTo(link.href || "");
1645
1647
  const { pathname } = (0, react_router_dom.useLocation)();
1646
1648
  const active = pathname === localizedHref || pathname.startsWith(`${localizedHref}/`);
1647
1649
  if (link.items && link.items.length > 0) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_search_dialog.Navbar.Dropdown, {
1648
1650
  label: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
1649
- className: require_icons_dev.cn("transition-colors outline-none font-medium focus-visible:ring-2 focus-visible:ring-primary-500/30 rounded-sm px-2 py-1", active ? "text-primary-500" : "text-muted hover:text-body"),
1651
+ className: require_link.cn("transition-colors outline-none font-medium focus-visible:ring-2 focus-visible:ring-primary-500/30 rounded-sm px-2 py-1", active ? "text-primary-500" : "text-muted hover:text-body"),
1650
1652
  children: link.label
1651
1653
  }),
1652
1654
  children: link.items?.map((item) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_search_dialog.Navbar.DropdownItem, {
1653
- href: require_icons_dev.useLocalizedTo(item.href || ""),
1655
+ href: require_link.useLocalizedTo(item.href || ""),
1654
1656
  label: item.label
1655
1657
  }, item.href))
1656
1658
  });
@@ -1658,17 +1660,17 @@ function NavbarLinkItem({ link }) {
1658
1660
  ...link,
1659
1661
  href: localizedHref,
1660
1662
  active,
1661
- className: require_icons_dev.cn("transition-colors outline-none font-medium focus-visible:ring-2 focus-visible:ring-primary-500/30 rounded-sm", active ? "text-primary-500" : "text-muted hover:text-body")
1663
+ className: require_link.cn("transition-colors outline-none font-medium focus-visible:ring-2 focus-visible:ring-primary-500/30 rounded-sm", active ? "text-primary-500" : "text-muted hover:text-body")
1662
1664
  });
1663
1665
  }
1664
1666
  function NavbarMobileLinkItem({ link, onClose }) {
1665
- const localizedHref = require_icons_dev.useLocalizedTo(link.href || "");
1667
+ const localizedHref = require_link.useLocalizedTo(link.href || "");
1666
1668
  const { pathname } = (0, react_router_dom.useLocation)();
1667
1669
  const active = pathname === localizedHref;
1668
1670
  if (link.items && link.items.length > 0) return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1669
1671
  className: "flex flex-col gap-1",
1670
1672
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1671
- className: require_icons_dev.cn("px-3 py-2 text-sm transition-all", active ? "text-body" : "text-muted/80 hover:text-body"),
1673
+ className: require_link.cn("px-3 py-2 text-sm transition-all", active ? "text-body" : "text-muted/80 hover:text-body"),
1672
1674
  children: link.label
1673
1675
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1674
1676
  className: "flex flex-col gap-1 pl-4",
@@ -1683,20 +1685,26 @@ function NavbarMobileLinkItem({ link, onClose }) {
1683
1685
  href: localizedHref,
1684
1686
  active,
1685
1687
  onPress: onClose,
1686
- className: require_icons_dev.cn("transition-all", active ? "text-body" : "text-muted/80 hover:text-body")
1688
+ className: require_link.cn("transition-all", active ? "text-body" : "text-muted/80 hover:text-body")
1687
1689
  });
1688
1690
  }
1689
1691
 
1690
1692
  //#endregion
1691
1693
  //#region src/client/components/ui-base/on-this-page.tsx
1692
1694
  function OnThisPage({ headings = [], editLink, communityHelp, filePath }) {
1693
- if (headings.length === 0) return null;
1695
+ if (headings.length === 0) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("nav", {
1696
+ className: "w-toc shrink-0 hidden xl:block",
1697
+ "aria-hidden": "true"
1698
+ });
1694
1699
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_docs_layout.OnThisPage.Root, { children: [
1695
1700
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_docs_layout.OnThisPage.Header, {
1696
1701
  className: "flex flex-row gap-x-2",
1697
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_icons_dev.TextAlignStart, { size: 16 }), "On this page"]
1702
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_link.TextAlignStart, { size: 16 }), "On this page"]
1703
+ }),
1704
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_docs_layout.OnThisPage.Tree, {
1705
+ className: "max-h-[300px]",
1706
+ headings
1698
1707
  }),
1699
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_docs_layout.OnThisPage.Tree, { headings }),
1700
1708
  (editLink || communityHelp) && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1701
1709
  className: "mt-8 pt-8 border-t border-subtle space-y-4",
1702
1710
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
@@ -1709,13 +1717,13 @@ function OnThisPage({ headings = [], editLink, communityHelp, filePath }) {
1709
1717
  target: "_blank",
1710
1718
  rel: "noopener noreferrer",
1711
1719
  className: "flex items-center gap-2 text-sm text-muted hover:text-body transition-colors",
1712
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_icons_dev.Pencil, { size: 16 }), "Edit this page"]
1720
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_link.Pencil, { size: 16 }), "Edit this page"]
1713
1721
  }) }), communityHelp && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("li", { children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("a", {
1714
1722
  href: communityHelp,
1715
1723
  target: "_blank",
1716
1724
  rel: "noopener noreferrer",
1717
1725
  className: "flex items-center gap-2 text-sm text-muted hover:text-body transition-colors",
1718
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_icons_dev.CircleHelp, { size: 16 }), "Community help"]
1726
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_link.CircleHelp, { size: 16 }), "Community help"]
1719
1727
  }) })]
1720
1728
  })]
1721
1729
  })
@@ -1784,7 +1792,7 @@ function SidebarMain({ routes, config }) {
1784
1792
  onPress: closeSidebar,
1785
1793
  className: "h-9 w-9 flex items-center justify-center bg-transparent border-none outline-none select-none cursor-pointer rounded-xl hover:bg-primary-50/50 text-muted hover:text-body transition-colors",
1786
1794
  "aria-label": "Close sidebar",
1787
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_icons_dev.X, { size: 20 })
1795
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_link.X, { size: 20 })
1788
1796
  })]
1789
1797
  })] }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_docs_layout.Sidebar.Content, { children: [hasUtilities && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1790
1798
  className: "flex flex-col gap-4 mb-10",
@@ -1823,7 +1831,7 @@ function Banner({ children, className = "", dismissible = false, id = "boltdocs-
1823
1831
  };
1824
1832
  if (!isVisible) return null;
1825
1833
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1826
- className: require_icons_dev.cn("relative flex items-center justify-center px-4 py-2.5 text-xs font-semibold tracking-wide bg-primary-500/10 dark:bg-primary-500/15 text-primary-700 dark:text-primary-300 border-b border-primary-500/20 select-none animate-in fade-in duration-300", className),
1834
+ className: require_link.cn("relative flex items-center justify-center px-4 py-2.5 text-xs font-semibold tracking-wide bg-primary-500/10 dark:bg-primary-500/15 text-primary-700 dark:text-primary-300 border-b border-primary-500/20 select-none animate-in fade-in duration-300", className),
1827
1835
  ...props,
1828
1836
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1829
1837
  className: "flex-1 text-center flex items-center justify-center gap-2",
@@ -1832,7 +1840,7 @@ function Banner({ children, className = "", dismissible = false, id = "boltdocs-
1832
1840
  onClick: handleDismiss,
1833
1841
  className: "absolute right-3 top-1/2 -translate-y-1/2 p-1.5 opacity-70 hover:opacity-100 transition-all duration-300 rounded-xl hover:bg-primary-500/10 cursor-pointer border-none bg-transparent flex items-center justify-center outline-none",
1834
1842
  "aria-label": "Dismiss banner",
1835
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_icons_dev.X, { className: "w-3.5 h-3.5" })
1843
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_link.X, { className: "w-3.5 h-3.5" })
1836
1844
  })]
1837
1845
  });
1838
1846
  }
@@ -1840,16 +1848,16 @@ function Banner({ children, className = "", dismissible = false, id = "boltdocs-
1840
1848
  //#endregion
1841
1849
  //#region src/client/components/ui-base/feedback.tsx
1842
1850
  function Feedback({ className }) {
1843
- if (!(require_icons_dev.useConfig().integrations?.feedback?.custom)?.enabled) return null;
1851
+ if (!(require_link.useConfig().integrations?.feedback?.custom)?.enabled) return null;
1844
1852
  const { rating, setRating, comment, setComment, loading, submitted, error, submit } = useFeedback();
1845
1853
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1846
- className: require_icons_dev.cn("w-full max-w-2xl mt-12 mb-6 p-6 rounded-2xl border border-subtle bg-surface/50 backdrop-blur-xs select-none", className),
1854
+ className: require_link.cn("w-full max-w-2xl mt-12 mb-6 p-6 rounded-2xl border border-subtle bg-surface/50 backdrop-blur-xs select-none", className),
1847
1855
  children: submitted ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
1848
1856
  className: "flex flex-col items-center justify-center py-4 text-center animate-in fade-in zoom-in duration-300",
1849
1857
  children: [
1850
1858
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1851
1859
  className: "flex h-12 w-12 items-center justify-center rounded-full bg-emerald-500/10 text-emerald-500 mb-3 border border-emerald-500/20",
1852
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_icons_dev.Check, { size: 24 })
1860
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_link.Check, { size: 24 })
1853
1861
  }),
1854
1862
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("h3", {
1855
1863
  className: "text-lg font-semibold text-default",
@@ -1873,23 +1881,23 @@ function Feedback({ className }) {
1873
1881
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
1874
1882
  type: "button",
1875
1883
  onClick: () => setRating("good"),
1876
- className: require_icons_dev.cn("flex items-center gap-1.5 px-3 py-1.5 rounded-lg border text-sm font-medium transition-all duration-200 outline-none cursor-pointer", rating === "good" ? "border-primary-500 bg-primary-500/10 text-primary-500 dark:text-primary-400" : "border-subtle hover:border-body hover:bg-surface text-muted hover:text-body"),
1884
+ className: require_link.cn("flex items-center gap-1.5 px-3 py-1.5 rounded-lg border text-sm font-medium transition-all duration-200 outline-none cursor-pointer", rating === "good" ? "border-primary-500 bg-primary-500/10 text-primary-500 dark:text-primary-400" : "border-subtle hover:border-body hover:bg-surface text-muted hover:text-body"),
1877
1885
  "aria-label": "Helpful",
1878
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_icons_dev.FaceGood, {}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: "Yes" })]
1886
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_link.FaceGood, {}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: "Yes" })]
1879
1887
  }),
1880
1888
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
1881
1889
  type: "button",
1882
1890
  onClick: () => setRating("neutral"),
1883
- className: require_icons_dev.cn("flex items-center gap-1.5 px-3 py-1.5 rounded-lg border text-sm font-medium transition-all duration-200 outline-none cursor-pointer", rating === "neutral" ? "border-primary-500 bg-primary-500/10 text-primary-500 dark:text-primary-400" : "border-subtle hover:border-body hover:bg-surface text-muted hover:text-body"),
1891
+ className: require_link.cn("flex items-center gap-1.5 px-3 py-1.5 rounded-lg border text-sm font-medium transition-all duration-200 outline-none cursor-pointer", rating === "neutral" ? "border-primary-500 bg-primary-500/10 text-primary-500 dark:text-primary-400" : "border-subtle hover:border-body hover:bg-surface text-muted hover:text-body"),
1884
1892
  "aria-label": "Neutral",
1885
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_icons_dev.FaceRegular, {}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: "Regular" })]
1893
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_link.FaceRegular, {}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: "Regular" })]
1886
1894
  }),
1887
1895
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
1888
1896
  type: "button",
1889
1897
  onClick: () => setRating("bad"),
1890
- className: require_icons_dev.cn("flex items-center gap-1.5 px-3 py-1.5 rounded-lg border text-sm font-medium transition-all duration-200 outline-none cursor-pointer", rating === "bad" ? "border-primary-500 bg-primary-500/10 text-primary-500 dark:text-primary-400" : "border-subtle hover:border-body hover:bg-surface text-muted hover:text-body"),
1898
+ className: require_link.cn("flex items-center gap-1.5 px-3 py-1.5 rounded-lg border text-sm font-medium transition-all duration-200 outline-none cursor-pointer", rating === "bad" ? "border-primary-500 bg-primary-500/10 text-primary-500 dark:text-primary-400" : "border-subtle hover:border-body hover:bg-surface text-muted hover:text-body"),
1891
1899
  "aria-label": "Not helpful",
1892
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_icons_dev.FaceBad, {}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: "No" })]
1900
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_link.FaceBad, {}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: "No" })]
1893
1901
  })
1894
1902
  ]
1895
1903
  })]
@@ -1924,7 +1932,7 @@ function Feedback({ className }) {
1924
1932
  //#endregion
1925
1933
  //#region src/client/components/ui-base/giscus.tsx
1926
1934
  function Giscus({ className }) {
1927
- const config = require_icons_dev.useConfig();
1935
+ const config = require_link.useConfig();
1928
1936
  const { resolvedTheme } = require_image.useTheme();
1929
1937
  const ref = (0, react.useRef)(null);
1930
1938
  const initializedRef = (0, react.useRef)(false);
@@ -1980,7 +1988,7 @@ function Giscus({ className }) {
1980
1988
  if (!giscusConfig) return null;
1981
1989
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1982
1990
  ref,
1983
- className: require_icons_dev.cn("w-full max-w-2xl mt-12 mb-6", className)
1991
+ className: require_link.cn("w-full max-w-2xl mt-12 mb-6", className)
1984
1992
  });
1985
1993
  }
1986
1994
 
@@ -2013,7 +2021,7 @@ const EagerMdxElement = ({ moduleLoader, moduleKey, route, components, collectio
2013
2021
  if (!MDXComponent) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Loading, {});
2014
2022
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MdxPage, {
2015
2023
  MDXComponent,
2016
- mdxComponents: components,
2024
+ mdxComponents: components ?? {},
2017
2025
  collectionPostComponent
2018
2026
  });
2019
2027
  };
@@ -2022,14 +2030,36 @@ const NotFoundWrapper = () => {
2022
2030
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(components.NotFound || components["404"] || NotFound, {});
2023
2031
  };
2024
2032
 
2033
+ //#endregion
2034
+ //#region src/client/app/doc-route-context.tsx
2035
+ /**
2036
+ * Context that exposes the currently active route to every primitive in the
2037
+ * tree. Slot renderers and other primitives consume it via `useDocRoute()`
2038
+ * instead of calling `useRoutes()` directly so a single computation is shared
2039
+ * across the whole layout.
2040
+ *
2041
+ * `undefined` means "no active route" (e.g. on a not-found page or before the
2042
+ * routes context has hydrated).
2043
+ */
2044
+ const DocRouteContext = (0, react.createContext)(void 0);
2045
+ function DocRouteProvider({ value, children }) {
2046
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DocRouteContext.Provider, {
2047
+ value,
2048
+ children
2049
+ });
2050
+ }
2051
+
2025
2052
  //#endregion
2026
2053
  //#region src/client/app/docs-layout.tsx
2027
2054
  function DocsLayout({ collectionsData }) {
2028
- const { currentRoute } = require_icons_dev.useRoutes();
2029
- const content = /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_search_dialog$1.InternalErrorBoundary, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(virtual_boltdocs_layout.default, {
2030
- route: currentRoute,
2031
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_router_dom.Outlet, {})
2032
- }) });
2055
+ const { currentRoute } = require_link.useRoutes();
2056
+ const content = /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DocRouteProvider, {
2057
+ value: currentRoute,
2058
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_search_dialog$1.InternalErrorBoundary, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(virtual_boltdocs_layout.default, {
2059
+ route: currentRoute,
2060
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_router_dom.Outlet, {})
2061
+ }) })
2062
+ });
2033
2063
  if (collectionsData) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(CollectionsContext.Provider, {
2034
2064
  value: collectionsData,
2035
2065
  children: content
@@ -2122,15 +2152,15 @@ function buildDocRoutes(options) {
2122
2152
  moduleKey,
2123
2153
  moduleLoader: mod,
2124
2154
  route,
2125
- components
2155
+ components: components ?? {}
2126
2156
  }, moduleKey || path);
2127
2157
  } };
2128
2158
  };
2129
2159
  else routeRecord.element = /* @__PURE__ */ (0, react_jsx_runtime.jsx)(EagerMdxElement, {
2130
2160
  moduleKey,
2131
- moduleLoader,
2161
+ moduleLoader: moduleLoader ?? {},
2132
2162
  route,
2133
- components
2163
+ components: components ?? {}
2134
2164
  }, moduleKey || path);
2135
2165
  return routeRecord;
2136
2166
  });
@@ -2229,6 +2259,15 @@ function buildDocRoutes(options) {
2229
2259
  };
2230
2260
  }
2231
2261
 
2262
+ //#endregion
2263
+ //#region src/client/ssg/external-page-wrapper.tsx
2264
+ function ExternalPageWrapper({ children }) {
2265
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
2266
+ className: "boltdocs-external-content h-screen overflow-y-auto",
2267
+ children
2268
+ });
2269
+ }
2270
+
2232
2271
  //#endregion
2233
2272
  //#region src/client/ssg/create-routes.external.tsx
2234
2273
  function buildExternalRoutes(options) {
@@ -2247,11 +2286,12 @@ function buildExternalRoutes(options) {
2247
2286
  locale: config.i18n?.defaultLocale,
2248
2287
  title: rawPath === "/" ? "Home" : rawPath.replace(/^\//, "").split("/").pop() || "Page",
2249
2288
  filePath: "",
2289
+ componentPath: "",
2250
2290
  headings: []
2251
2291
  });
2252
2292
  children.push({
2253
2293
  path,
2254
- element: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(EffectiveExternalLayout, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ExtComponent, {}) }),
2294
+ element: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ExternalPageWrapper, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(EffectiveExternalLayout, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ExtComponent, {}) }) }),
2255
2295
  loader: async () => ({
2256
2296
  path,
2257
2297
  locale: config.i18n?.defaultLocale
@@ -2265,11 +2305,12 @@ function buildExternalRoutes(options) {
2265
2305
  locale,
2266
2306
  title: rawPath,
2267
2307
  filePath: "",
2308
+ componentPath: "",
2268
2309
  headings: []
2269
2310
  });
2270
2311
  children.push({
2271
2312
  path: localePath,
2272
- element: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(EffectiveExternalLayout, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ExtComponent, {}) }),
2313
+ element: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ExternalPageWrapper, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(EffectiveExternalLayout, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ExtComponent, {}) }) }),
2273
2314
  loader: async () => ({
2274
2315
  path: localePath,
2275
2316
  locale
@@ -2297,8 +2338,8 @@ const DEFAULT_COLLECTION = "blog";
2297
2338
  */
2298
2339
  function usePosts(collection = DEFAULT_COLLECTION, options) {
2299
2340
  const data = useCollectionsData();
2300
- const { currentLocale, currentVersion } = require_icons_dev.useRoutes();
2301
- const config = require_icons_dev.useConfig();
2341
+ const { currentLocale, currentVersion } = require_link.useRoutes();
2342
+ const config = require_link.useConfig();
2302
2343
  const posts = data[collection] || [];
2303
2344
  const defaultLocale = config.i18n?.defaultLocale;
2304
2345
  const defaultVersion = config.versions?.defaultVersion;
@@ -2363,7 +2404,7 @@ function useRecentPosts(collection = DEFAULT_COLLECTION, count = 5) {
2363
2404
  //#region src/client/ssg/create-routes.collection.tsx
2364
2405
  function DefaultCollectionList() {
2365
2406
  const location = (0, react_router_dom.useLocation)();
2366
- const config = require_icons_dev.useConfig();
2407
+ const config = require_link.useConfig();
2367
2408
  const postsPerPage = config.collections?.postsPerPage ?? 10;
2368
2409
  const segments = location.pathname.split("/").filter(Boolean);
2369
2410
  const isLocalePrefixed = config.i18n && segments[0] in (config.i18n.locales || {});
@@ -2572,7 +2613,7 @@ function createRoutes(options) {
2572
2613
  ...collectionRoutes.children,
2573
2614
  {
2574
2615
  path: "*",
2575
- element: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(EffectiveExternalLayout, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(NotFoundWrapper, {}) })
2616
+ element: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ExternalPageWrapper, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(EffectiveExternalLayout, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(NotFoundWrapper, {}) }) })
2576
2617
  }
2577
2618
  ];
2578
2619
  return [{
@@ -2592,9 +2633,17 @@ function createRoutes(options) {
2592
2633
 
2593
2634
  //#endregion
2594
2635
  //#region src/client/components/docs-layout-default.tsx
2636
+ /**
2637
+ * Default docs layout — composes the visual primitives and delegates
2638
+ * sub-area routing to them. Slot rendering (plugin injections at
2639
+ * `navbar:end`, `sidebar:bottom`, `docs-content:top`, etc.) is handled
2640
+ * internally by each primitive so the layout itself does no slot "magic".
2641
+ *
2642
+ * A custom layout can reuse any primitive and the slot wiring just works.
2643
+ */
2595
2644
  function DocsLayoutComponent({ children }) {
2596
- const { routes: filteredRoutes, currentRoute, isCollectionPage } = require_icons_dev.useRoutes();
2597
- const config = require_icons_dev.useConfig();
2645
+ const { routes: filteredRoutes, currentRoute, isCollectionPage } = require_link.useRoutes();
2646
+ const config = require_link.useConfig();
2598
2647
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_docs_layout.DocsLayout, {
2599
2648
  className: "selection:bg-primary-500/10 selection:text-primary-500",
2600
2649
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(Navbar, {}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_docs_layout.DocsLayout.Body, {
@@ -2604,43 +2653,40 @@ function DocsLayoutComponent({ children }) {
2604
2653
  routes: filteredRoutes || [],
2605
2654
  config
2606
2655
  }),
2607
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_docs_layout.DocsLayout.Content, {
2608
- className: "animate-in fade-in duration-500 scroll-smooth",
2609
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_docs_layout.DocsLayout.ContentMdx, {
2610
- className: "max-w-3xl sm:max-w-4xl lg:max-w-5xl px-4 sm:px-6 pt-8 pb-24",
2611
- children: [
2612
- !isCollectionPage && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_docs_layout.DocsLayout.Header, { children: [
2613
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
2614
- className: "mb-4 border-b border-subtle pb-4 flex flex-wrap items-center justify-between gap-3",
2615
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(Breadcrumbs, {}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(CopyMarkdown, {
2616
- mdxRaw: currentRoute?._rawContent,
2617
- route: currentRoute
2618
- })]
2619
- }),
2620
- currentRoute?.title && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("h1", {
2621
- className: "text-4xl font-bold tracking-tight text-default mb-3",
2622
- children: currentRoute.title
2623
- }),
2624
- currentRoute?.description && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
2625
- className: "text-lg text-muted-foreground mb-6 leading-relaxed",
2626
- children: currentRoute.description
2627
- })
2628
- ] }),
2629
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ErrorBoundary, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
2630
- className: "prose prose-neutral dark:prose-invert max-w-none",
2631
- children
2632
- }) }),
2633
- !isCollectionPage && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Feedback, {}),
2634
- !isCollectionPage && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Giscus, {}),
2635
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_docs_layout.DocsLayout.Footer, { children: !isCollectionPage && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(PageNav, {}) })
2636
- ]
2656
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_docs_layout.DocsLayout.Content, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_docs_layout.DocsLayout.ContentMdx, { children: [
2657
+ !isCollectionPage && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_docs_layout.DocsLayout.Header, { children: [
2658
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
2659
+ className: "mb-4 border-b border-subtle pb-4 flex flex-wrap items-center justify-between gap-3",
2660
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(Breadcrumbs, {}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(CopyMarkdown, {
2661
+ mdxRaw: currentRoute?._rawContent,
2662
+ route: currentRoute
2663
+ })]
2664
+ }),
2665
+ currentRoute?.title && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("h1", {
2666
+ className: "text-4xl font-bold tracking-tight text-default mb-3",
2667
+ children: currentRoute.title
2668
+ }),
2669
+ currentRoute?.description && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
2670
+ className: "text-lg text-muted-foreground mb-6 leading-relaxed",
2671
+ children: currentRoute.description
2672
+ })
2673
+ ] }),
2674
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ErrorBoundary, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
2675
+ className: "prose prose-neutral dark:prose-invert max-w-none",
2676
+ children
2677
+ }) }),
2678
+ !isCollectionPage && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Feedback, {}),
2679
+ !isCollectionPage && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Giscus, {}),
2680
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_docs_layout.DocsLayout.Footer, { children: !isCollectionPage && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(PageNav, {}) })
2681
+ ] }) }),
2682
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
2683
+ className: "overflow-y-auto sticky",
2684
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(OnThisPage, {
2685
+ headings: currentRoute?.headings,
2686
+ filePath: currentRoute?.filePath,
2687
+ communityHelp: config.theme?.communityHelp,
2688
+ editLink: config.theme?.editLink
2637
2689
  })
2638
- }),
2639
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(OnThisPage, {
2640
- headings: currentRoute?.headings,
2641
- filePath: currentRoute?.filePath,
2642
- communityHelp: config.theme?.communityHelp,
2643
- editLink: config.theme?.editLink
2644
2690
  })
2645
2691
  ]
2646
2692
  })]
@@ -2677,13 +2723,14 @@ exports.OnThisPage = OnThisPage;
2677
2723
  exports.PageNav = PageNav;
2678
2724
  exports.SearchDialog = require_search_dialog$1.SearchDialog;
2679
2725
  exports.Sidebar = Sidebar;
2726
+ exports.Timeline = require_mdx.Timeline;
2680
2727
  Object.defineProperty(exports, 'ViteReactSSG', {
2681
2728
  enumerable: true,
2682
2729
  get: function () {
2683
2730
  return _bdocs_ssg.ViteReactSSG;
2684
2731
  }
2685
2732
  });
2686
- exports.cn = require_icons_dev.cn;
2733
+ exports.cn = require_link.cn;
2687
2734
  exports.copyToClipboard = require_mdx.copyToClipboard;
2688
2735
  exports.createRoutes = createRoutes;
2689
2736
  exports.getStarsRepo = getStarsRepo;
@@ -2692,11 +2739,11 @@ exports.reactToText = reactToText;
2692
2739
  exports.useAnalytics = useAnalytics;
2693
2740
  exports.useBreadcrumbs = useBreadcrumbs;
2694
2741
  exports.useCodeBlock = require_mdx.useCodeBlock;
2695
- exports.useConfig = require_icons_dev.useConfig;
2742
+ exports.useConfig = require_link.useConfig;
2696
2743
  exports.useFeedback = useFeedback;
2697
2744
  exports.useHeadings = useHeadings;
2698
2745
  exports.useI18n = useI18n;
2699
- exports.useLocalizedTo = require_icons_dev.useLocalizedTo;
2746
+ exports.useLocalizedTo = require_link.useLocalizedTo;
2700
2747
  exports.useLocation = require_docs_layout.useLocation;
2701
2748
  exports.useMdxComponents = useMdxComponents;
2702
2749
  exports.useMergedComponents = useMergedComponents;
@@ -2705,7 +2752,7 @@ exports.usePageNav = usePageNav;
2705
2752
  exports.usePost = usePost;
2706
2753
  exports.usePosts = usePosts;
2707
2754
  exports.useRecentPosts = useRecentPosts;
2708
- exports.useRoutes = require_icons_dev.useRoutes;
2755
+ exports.useRoutes = require_link.useRoutes;
2709
2756
  exports.useSearch = require_search_dialog$1.useSearch;
2710
2757
  exports.useSearchHighlight = require_docs_layout.useSearchHighlight;
2711
2758
  exports.useSidebar = require_docs_layout.useSidebar;