boltdocs 3.3.6 → 3.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (116) hide show
  1. package/dist/{adapters-BKzKe2mO.mjs → adapters-BXiBWAKs.mjs} +1 -1
  2. package/dist/{adapters-DwDTQoCG.cjs → adapters-Czl3WtQt.cjs} +1 -1
  3. package/dist/{build-CxT38vPv.cjs → build-CNkXRdk8.cjs} +1 -1
  4. package/dist/{build-BJnL-FHG.mjs → build-CqUBsXVC.mjs} +1 -1
  5. package/dist/client/index.cjs +223 -51
  6. package/dist/client/index.d.cts +3 -3
  7. package/dist/client/index.d.ts +3 -3
  8. package/dist/client/index.js +226 -56
  9. package/dist/client/mdx.cjs +1 -1
  10. package/dist/client/mdx.js +1 -1
  11. package/dist/client/primitives.cjs +5 -5
  12. package/dist/client/primitives.d.cts +53 -34
  13. package/dist/client/primitives.d.ts +62 -43
  14. package/dist/client/primitives.js +4 -4
  15. package/dist/client/router.cjs +1 -1
  16. package/dist/client/router.d.cts +1 -1
  17. package/dist/client/router.d.ts +1 -1
  18. package/dist/client/router.js +1 -1
  19. package/dist/client/theme/reset.css +41 -0
  20. package/dist/{config-BJp3lGzE.cjs → config-B3SEoVjG.cjs} +2 -2
  21. package/dist/{config-BC_qhXws.cjs → config-Bfakeadu.cjs} +1 -1
  22. package/dist/{config-B3_iVsbi.mjs → config-CTcfF-0c.mjs} +2 -2
  23. package/dist/dev-D1DmOSjn.mjs +6 -0
  24. package/dist/dev-DH6cSge8.cjs +6 -0
  25. package/dist/{docs-layout-D3Fmb0Wd.js → docs-layout-CmntYM6p.js} +33 -33
  26. package/dist/{docs-layout-SgphExoE.cjs → docs-layout-DIgxJ5c7.cjs} +9 -9
  27. package/dist/{doctor-BqxOFRt3.cjs → doctor-BLxm2alc.cjs} +1 -1
  28. package/dist/{doctor-TS3JGNEU.cjs → doctor-Dd-JMTRo.cjs} +1 -1
  29. package/dist/{doctor-Cv5lXnay.mjs → doctor-DogHujrP.mjs} +1 -1
  30. package/dist/{image-Bkx85rsq.cjs → image-Bke2ojW1.cjs} +3 -3
  31. package/dist/{image-BAiDReNd.js → image-CaY2w0ua.js} +2 -1
  32. package/dist/index--xbYbT8N.d.ts +343 -0
  33. package/dist/{index-B1Mx0dHl.d.ts → index-B_o5y34l.d.cts} +89 -10
  34. package/dist/{index-DLaHgD-i.d.cts → index-Bx0CUd7Q.d.ts} +89 -10
  35. package/dist/index-RK7W_Fxy.d.cts +343 -0
  36. package/dist/{link-q1qHNGK_.js → link-CSe_oD8Y.js} +86 -113
  37. package/dist/{link-hLWOsx0x.cjs → link-Xb69Oy2F.cjs} +87 -143
  38. package/dist/{mdx-Qi0DmaY8.cjs → mdx-BCOrMd-P.cjs} +68 -16
  39. package/dist/{mdx-CJGWzBGy.js → mdx-BijiEbkp.js} +62 -15
  40. package/dist/{native-nLA4Jr0T.cjs → native-BbtRkce5.cjs} +1 -1
  41. package/dist/node/cli-entry.cjs +1 -1
  42. package/dist/node/cli-entry.mjs +1 -1
  43. package/dist/node/highlight.d.cts +2 -2
  44. package/dist/node/highlight.d.mts +2 -2
  45. package/dist/node/index.cjs +1 -1
  46. package/dist/node/index.d.cts +18 -39
  47. package/dist/node/index.d.mts +19 -40
  48. package/dist/node/index.mjs +1 -1
  49. package/dist/node/mdx/shiki-adapter.d.cts +1 -1
  50. package/dist/node/mdx/shiki-adapter.d.mts +1 -1
  51. package/dist/node-BgiLCa0I.cjs +39 -0
  52. package/dist/node-Da3tYBHo.mjs +39 -0
  53. package/dist/{package-Bah2tHjK.cjs → package-D1gVs5gQ.cjs} +1 -1
  54. package/dist/{package-D6bf68FR.mjs → package-YgQJn3Yh.mjs} +1 -1
  55. package/dist/pages-external-B_r6gvqP.cjs +6 -0
  56. package/dist/pages-external-jmK7AHaO.mjs +6 -0
  57. package/dist/{parser-CD8Oo8qh.mjs → parser-CvNZc5s3.mjs} +1 -1
  58. package/dist/{parser-vPaKvzLp.cjs → parser-DJLWTiO-.cjs} +1 -1
  59. package/dist/plugin-DW9K2fW5.mjs +69 -0
  60. package/dist/plugin-NwGKyTJX.cjs +69 -0
  61. package/dist/{plugin-context-b5qVVQSU.mjs → plugin-context-COh-cbsW.mjs} +1 -1
  62. package/dist/{plugin-context-BZs5lvDu.cjs → plugin-context-FIHaWn6r.cjs} +1 -1
  63. package/dist/{plugin-lifecycle-s89gzTlh.cjs → plugin-lifecycle-D9fTRaWY.cjs} +1 -1
  64. package/dist/{registry-B8pt41zj.d.cts → registry-BFmzj1yg.d.mts} +1 -1
  65. package/dist/{registry-BrrH2X9c.d.mts → registry-BoswPzYV.d.cts} +1 -1
  66. package/dist/{resolve-C5rT6B21.mjs → resolve-5puUe7eS.mjs} +1 -1
  67. package/dist/{resolve-BelytNYR.cjs → resolve-CF4ZLfqx.cjs} +1 -1
  68. package/dist/route-paths-B6ocUfNY.cjs +6 -0
  69. package/dist/route-paths-DyDji4bX.mjs +6 -0
  70. package/dist/{router-CZBxMRAH.js → router-B5e8k4qK.js} +175 -10
  71. package/dist/{router-C3kygdRK.cjs → router-DKC0Lu0n.cjs} +204 -9
  72. package/dist/{routes-Dq_2EUIB.cjs → routes-D55M8UrH.cjs} +1 -1
  73. package/dist/{routes-CzhKOw67.cjs → routes-DdE6Lfcl.cjs} +1 -1
  74. package/dist/{routes-Dw6g0bfF.mjs → routes-_I_8PQYF.mjs} +1 -1
  75. package/dist/{search-dialog-CguKVtUu.cjs → search-dialog-BOQRHKTb.cjs} +53 -20
  76. package/dist/{search-dialog-mYnqU4v7.js → search-dialog-BXil4_7P.js} +57 -24
  77. package/dist/{search-dialog-BYZS9aeO.cjs → search-dialog-CwlBd-Mu.cjs} +5 -5
  78. package/dist/{search-dialog-DQwod5Xc.js → search-dialog-D3Obh3eA.js} +1 -1
  79. package/dist/{search-dialog-DzObE-Ar.js → search-dialog-DeplpVEB.js} +3 -3
  80. package/dist/{search-dialog-QgKRRbsI.cjs → search-dialog-cHXR5zhL.cjs} +1 -1
  81. package/dist/server/index.cjs +1 -1
  82. package/dist/server/index.d.mts +1 -1
  83. package/dist/server/index.mjs +1 -1
  84. package/dist/ssg-static-options-Br1_u9qp.mjs +6 -0
  85. package/dist/ssg-static-options-CVvGKM8i.cjs +6 -0
  86. package/dist/types-58Ac3UGI.d.cts +114 -0
  87. package/dist/types-BwnGf-1E.d.mts +114 -0
  88. package/dist/{virtual-modules-C3S3Nz8r.cjs → virtual-modules-C4-qxFlL.cjs} +1 -1
  89. package/dist/{virtual-modules-CaxqrFd6.mjs → virtual-modules-DiWUKJGP.mjs} +1 -1
  90. package/package.json +5 -3
  91. package/src/shared/types.ts +133 -987
  92. package/dist/dev-46NiL0MC.cjs +0 -6
  93. package/dist/dev-C4kjO5xs.mjs +0 -6
  94. package/dist/index-CgWkOCCn.d.cts +0 -1193
  95. package/dist/index-CuNSD3E2.d.ts +0 -1193
  96. package/dist/node-7Cfw6nMr.cjs +0 -23
  97. package/dist/node-CT2E84nY.mjs +0 -23
  98. package/dist/pages-external-BBw8ObVK.mjs +0 -6
  99. package/dist/pages-external-DPiPFxxP.cjs +0 -6
  100. package/dist/plugin-AgNI3ktz.cjs +0 -69
  101. package/dist/plugin-BAv_pYLt.mjs +0 -69
  102. package/dist/types-74i_xUe2.d.mts +0 -975
  103. package/dist/types-X_Pwk8Cg.d.cts +0 -975
  104. /package/dist/{audit-CMc_ydRr.mjs → audit-CYAkXXvP.mjs} +0 -0
  105. /package/dist/{audit-CHkGiV3c.cjs → audit-DxCZZTuX.cjs} +0 -0
  106. /package/dist/{csp-BiGAG8aF.cjs → csp-B-gc2Iha.cjs} +0 -0
  107. /package/dist/{csp-D0BOH8ae.mjs → csp-f8DOcI_7.mjs} +0 -0
  108. /package/dist/{generator-BCrZL53x.cjs → generator-CBAPKY6r.cjs} +0 -0
  109. /package/dist/{generator-CFukoGa0.mjs → generator-MRpn-yp6.mjs} +0 -0
  110. /package/dist/{handler-Lex5DbvG.mjs → handler-DBZqoWt2.mjs} +0 -0
  111. /package/dist/{handler-Ch-Q9NAB.cjs → handler-ryZR9Q41.cjs} +0 -0
  112. /package/dist/{index-HAwIo4nZ.d.mts → index-CPr34I2C.d.mts} +0 -0
  113. /package/dist/{native-BYKMke79.mjs → native-DZ6WMwjG.mjs} +0 -0
  114. /package/dist/{native-BOet8hpE.cjs → native-DeKxny_T.cjs} +0 -0
  115. /package/dist/{update-check-BXD1atVv.mjs → update-check-BXx8te9F.mjs} +0 -0
  116. /package/dist/{update-check-DFQZyoSU.cjs → update-check-CiIeC7CX.cjs} +0 -0
@@ -1,8 +1,8 @@
1
1
 
2
- import { Q as CreateRoutesResult, _t as StructuredData$1, ct as BoltdocsIntegrationsConfig, ft as BoltdocsRoutePathWithFallback, gt as JsonLdObject, ht as BoltdocsVersion, lt as BoltdocsLocale, ot as BadgeValue, pt as BoltdocsSocialLink, st as BoltdocsConfig, ut as BoltdocsMdxComponents } from "./index-CgWkOCCn.cjs";
2
+ import { Q as CreateRoutesResult, ct as BoltdocsIntegrationsConfig, ft as BoltdocsRoutePathWithFallback, gt as JsonLdObject, ht as BoltdocsVersion, lt as BoltdocsLocale, ot as BadgeValue, pt as BoltdocsSocialLink, st as BoltdocsConfig, ut as BoltdocsMdxComponents, yt as StructuredData$1 } from "./index--xbYbT8N.js";
3
+ import { ViteReactSSG } from "@bdocs/ssg";
3
4
  import * as React$2 from "react";
4
5
  import React$1, { ComponentType, JSXElementConstructor, ReactNode, SVGProps } from "react";
5
- import { ViteReactSSG } from "@bdocs/ssg";
6
6
  import * as _$react_jsx_runtime0 from "react/jsx-runtime";
7
7
  import { ClassValue } from "clsx";
8
8
 
@@ -272,19 +272,45 @@ type MdxPageProps = {
272
272
  MDXComponent: React.ComponentType<React.PropsWithChildren<unknown>>;
273
273
  mdxComponents: Record<string, React.ComponentType<HTMLElement>>;
274
274
  collectionPostComponent?: React.ComponentType<any>;
275
+ /**
276
+ * Name of the collection this route belongs to, when it has one.
277
+ *
278
+ * The layout must not depend on data that arrives asynchronously. Route
279
+ * metadata is known synchronously from the route table, whereas the loader
280
+ * data is not: on the client the first render happens with no loader data,
281
+ * because the generated entry declares `hasLoaderData={false}`. Deciding the
282
+ * layout from the loader therefore picked the documentation layout for a
283
+ * collection post, while the server had rendered the collection layout. React
284
+ * saw two different first children and discarded the whole page (error #418).
285
+ *
286
+ * A project that declares a collection should not have to know this, so the
287
+ * route table supplies the answer directly and the loader is only a fallback
288
+ * for callers that render `MdxPage` directly.
289
+ */
290
+ collection?: string;
291
+ /**
292
+ * Route metadata for the current page, when known synchronously.
293
+ *
294
+ * `usePost()` reads from `CurrentPostProvider`, and a collection layout calls
295
+ * it on its first render. Passing the route keeps that first render complete
296
+ * instead of rendering a header with no title and then filling it in.
297
+ */
298
+ route?: ComponentRoute;
275
299
  };
276
300
  /**
277
301
  * Renders an MDX page by consuming pre-loaded route data.
278
302
  *
279
- * - If the route belongs to a collection (`data.collection` is set), wraps
280
- * the content with `CurrentPostProvider` so that `usePost()` (called without
281
- * a slug) can read the current post's data from context.
303
+ * - If the route belongs to a collection, wraps the content with
304
+ * `CurrentPostProvider` so that `usePost()` (called without a slug) can read
305
+ * the current post's data from context.
282
306
  * - Otherwise, renders the standard `DocPage` layout.
283
307
  */
284
308
  declare function MdxPage({
285
309
  MDXComponent,
286
310
  mdxComponents: propComponents,
287
- collectionPostComponent: CollectionPost
311
+ collectionPostComponent: CollectionPost,
312
+ collection,
313
+ route: routeProp
288
314
  }: MdxPageProps): _$react_jsx_runtime0.JSX.Element | null;
289
315
  //#endregion
290
316
  //#region src/client/ssg/boltdocs-shell.d.ts
@@ -302,6 +328,50 @@ declare function BoltdocsShell({
302
328
  contentClassName?: string;
303
329
  }): _$react_jsx_runtime0.JSX.Element;
304
330
  //#endregion
331
+ //#region src/client/collections/utils.d.ts
332
+ /**
333
+ * Formats a date to a human-readable string.
334
+ *
335
+ * Locale and time zone are pinned so the server and the browser produce
336
+ * identical text during hydration. See `formatDeterministicDate`.
337
+ */
338
+ declare function formatDate(date: string | Date | undefined | null, options?: {
339
+ month?: 'numeric' | '2-digit' | 'long' | 'short';
340
+ day?: 'numeric' | '2-digit';
341
+ }): string;
342
+ //#endregion
343
+ //#region src/client/utils/date.d.ts
344
+ /**
345
+ * Deterministic date formatting for server-rendered output.
346
+ *
347
+ * `toLocaleDateString` with no locale resolves against the *runtime* default,
348
+ * which is not the same in Node and in a browser: the server rendered
349
+ * "26 de septiembre de 2026" from an `es` system locale while the client
350
+ * produced "September 26, 2026". That is a text mismatch during hydration and
351
+ * React throws away the server HTML and re-renders the whole page.
352
+ *
353
+ * The time zone has to be pinned for the same reason. A frontmatter date such
354
+ * as `2026-09-27` parses as UTC midnight, so any zone behind UTC renders the
355
+ * previous day and any zone ahead renders the correct one, which is a second,
356
+ * environment-dependent mismatch.
357
+ *
358
+ * Both are therefore explicit here. Callers that genuinely want a different
359
+ * locale can pass one, and it is still deterministic because it is fixed in
360
+ * the markup rather than inferred.
361
+ */
362
+ /**
363
+ * Formats a date as a stable, locale- and zone-pinned string.
364
+ *
365
+ * Returns an empty string for values that are not real dates so callers can
366
+ * render nothing rather than "Invalid Date".
367
+ */
368
+ declare function formatDeterministicDate(date: string | number | Date | undefined | null, options?: {
369
+ locale?: string;
370
+ timeZone?: string;
371
+ month?: 'numeric' | '2-digit' | 'long' | 'short' | 'narrow';
372
+ day?: 'numeric' | '2-digit';
373
+ }): string;
374
+ //#endregion
305
375
  //#region src/client/app/config-context.d.ts
306
376
  /**
307
377
  * Hook to access the Boltdocs configuration.
@@ -339,7 +409,13 @@ declare function useUI(): {
339
409
  declare function useNavbar(): {
340
410
  links: NavbarLink[];
341
411
  title: string;
342
- logo: string | null;
412
+ logo: {
413
+ light: string;
414
+ dark: null;
415
+ } | {
416
+ light: string;
417
+ dark: string;
418
+ } | null;
343
419
  logoProps: {
344
420
  alt: string;
345
421
  width: number | undefined;
@@ -1220,10 +1296,13 @@ interface ViewTransitionRunner {
1220
1296
  enabled: boolean;
1221
1297
  /** Whether the current browser exposes the native API. */
1222
1298
  supported: boolean;
1299
+ /** Whether the visitor asked the OS to reduce motion. */
1300
+ reducedMotion: boolean;
1223
1301
  }
1224
1302
  /**
1225
- * Starts a native document transition when the browser supports it. On older
1226
- * browsers, the update still runs normally and the function returns null.
1303
+ * Starts a native document transition when the browser supports it and the
1304
+ * visitor has not asked for reduced motion. Otherwise the update still runs
1305
+ * normally and the function returns null.
1227
1306
  */
1228
1307
  declare function startViewTransition(update: ViewTransitionUpdate, options?: ViewTransitionOptions): ViewTransitionHandle | null;
1229
1308
  /**
@@ -1371,4 +1450,4 @@ declare function useCodeBlockFeedback(options?: UseCodeBlockFeedbackOptions): {
1371
1450
  enabled: boolean;
1372
1451
  };
1373
1452
  //#endregion
1374
- export { SidebarItem as $, cn as A, useUI as At, NotFound as B, CollectionsData as Bt, createArticleStructuredData as C, usePageNav as Ct, defineStructuredData as D, useSearch as Dt, createWebSiteStructuredData as E, useTabs as Et, TimelineVariant as F, BoltdocsShell as Ft, Breadcrumbs as G, ComponentRoute as Gt, CopyMarkdown as H, BoltdocsTab as Ht, usePost as I, MdxPage as It, Sidebar$1 as J, OnThisPageProps as Jt, OnThisPage as K, LayoutProps as Kt, usePosts as L, createRoutes as Lt, TimelineBadgeConfig as M, useTheme as Mt, TimelineItemProps as N, useConfig as Nt, getTranslated as O, useSidebar as Ot, TimelineProps as P, ViteReactSSG as Pt, SidebarHeader as Q, useRecentPosts as R, CollectionPost$1 as Rt, WebSiteStructuredDataOptions as S, useBreadcrumbs as St, createStructuredData as T, useVersion as Tt, ErrorBoundary as U, CollectionListLoaderData as Ut, SearchDialog as V, CurrentPostProvider as Vt, PageNav as W, CollectionPostLoaderData as Wt, SidebarGroup as X, SiteConfig as Xt, SidebarContent as Y, SidebarProps$1 as Yt, SidebarGroupRenderProps as Z, TabsProps as Zt, StructuredData as _, useTrackEvent as _t, useExpandable as a, SidebarLinkProps as at, BreadcrumbStructuredDataItem as b, useLocalizedTo as bt, getStarsRepo as c, SidebarSlots as ct, ViewTransitionHandle as d, Navbar as dt, SidebarItemProps as et, ViewTransitionOptions as f, DocsLayoutComponent as ft, useViewTransition as g, useAnalytics as gt, startViewTransition as h, useHeadings as ht, UseExpandableOptions as i, SidebarLink as it, Timeline as j, useMdxComponents as jt, resolvePublicAssetUrl as k, useNavbar as kt, copyToClipboard as l, SidebarSubGroup as lt, ViewTransitionUpdate as m, useMergedComponents as mt, UseCodeBlockFeedbackOptions as n, SidebarItems$1 as nt, useCopyButton as o, SidebarMobile as ot, ViewTransitionRunner as p, useFeedback as pt, Sidebar as q, NavbarLink as qt, useCodeBlockFeedback as r, SidebarItemsProps as rt, useCodeBlock as s, SidebarRoot as st, CodeBlockFeedbackPayload as t, SidebarItemRenderProps as tt, reactToText as u, ComponentBase as ut, StructuredDataProps as v, useTrackPageView as vt, createBreadcrumbStructuredData as w, useI18n as wt, StructuredDataFactoryOptions as x, useRoutes as xt, ArticleStructuredDataOptions as y, useSearchHighlight as yt, Banner as z, CollectionsContext as zt };
1453
+ export { SidebarItem as $, TabsProps as $t, cn as A, useUI as At, NotFound as B, CollectionPost$1 as Bt, createArticleStructuredData as C, usePageNav as Ct, defineStructuredData as D, useSearch as Dt, createWebSiteStructuredData as E, useTabs as Et, TimelineVariant as F, formatDate as Ft, Breadcrumbs as G, CollectionListLoaderData as Gt, CopyMarkdown as H, CollectionsData as Ht, usePost as I, ViteReactSSG as It, Sidebar$1 as J, LayoutProps as Jt, OnThisPage as K, CollectionPostLoaderData as Kt, usePosts as L, BoltdocsShell as Lt, TimelineBadgeConfig as M, useTheme as Mt, TimelineItemProps as N, useConfig as Nt, getTranslated as O, useSidebar as Ot, TimelineProps as P, formatDeterministicDate as Pt, SidebarHeader as Q, SiteConfig as Qt, useRecentPosts as R, MdxPage as Rt, WebSiteStructuredDataOptions as S, useBreadcrumbs as St, createStructuredData as T, useVersion as Tt, ErrorBoundary as U, CurrentPostProvider as Ut, SearchDialog as V, CollectionsContext as Vt, PageNav as W, BoltdocsTab as Wt, SidebarGroup as X, OnThisPageProps as Xt, SidebarContent as Y, NavbarLink as Yt, SidebarGroupRenderProps as Z, SidebarProps$1 as Zt, StructuredData as _, useTrackEvent as _t, useExpandable as a, SidebarLinkProps as at, BreadcrumbStructuredDataItem as b, useLocalizedTo as bt, getStarsRepo as c, SidebarSlots as ct, ViewTransitionHandle as d, Navbar as dt, SidebarItemProps as et, ViewTransitionOptions as f, DocsLayoutComponent as ft, useViewTransition as g, useAnalytics as gt, startViewTransition as h, useHeadings as ht, UseExpandableOptions as i, SidebarLink as it, Timeline as j, useMdxComponents as jt, resolvePublicAssetUrl as k, useNavbar as kt, copyToClipboard as l, SidebarSubGroup as lt, ViewTransitionUpdate as m, useMergedComponents as mt, UseCodeBlockFeedbackOptions as n, SidebarItems$1 as nt, useCopyButton as o, SidebarMobile as ot, ViewTransitionRunner as p, useFeedback as pt, Sidebar as q, ComponentRoute as qt, useCodeBlockFeedback as r, SidebarItemsProps as rt, useCodeBlock as s, SidebarRoot as st, CodeBlockFeedbackPayload as t, SidebarItemRenderProps as tt, reactToText as u, ComponentBase as ut, StructuredDataProps as v, useTrackPageView as vt, createBreadcrumbStructuredData as w, useI18n as wt, StructuredDataFactoryOptions as x, useRoutes as xt, ArticleStructuredDataOptions as y, useSearchHighlight as yt, Banner as z, createRoutes as zt };
@@ -0,0 +1,343 @@
1
+
2
+ import * as _$react from "react";
3
+ import React$1, { ComponentType, ReactNode } from "react";
4
+ import { IncomingMessage, ServerResponse } from "node:http";
5
+ import { AliasOptions, Plugin, UserConfig } from "vite";
6
+ import { BadgeValue, BoltdocsCollectionsConfig, BoltdocsConfigContract, BoltdocsI18nConfig, BoltdocsIntegrationsConfig, BoltdocsVersionsConfig, CodeHighlightConfig, CodeTheme, JsonLdObject, PluginDefinition, RedirectConfig, RedirectStatus, StructuredData } from "@bdocs/contracts";
7
+
8
+ //#region src/shared/types.d.ts
9
+ /**
10
+ * Represents a single social link in the configuration.
11
+ */
12
+ interface BoltdocsSocialLink {
13
+ icon: 'discord' | 'x' | 'github' | 'bluesky' | string;
14
+ link: string;
15
+ }
16
+ /**
17
+ * Theme-specific configuration options.
18
+ */
19
+ interface BoltdocsThemeConfig {
20
+ title?: string | Record<string, string>;
21
+ description?: string | Record<string, string>;
22
+ logo?: string | {
23
+ dark: string;
24
+ light: string;
25
+ alt?: string;
26
+ width?: number;
27
+ height?: number;
28
+ };
29
+ navbar?: Array<{
30
+ label: string | Record<string, string>;
31
+ href: BoltdocsRoutePathWithFallback;
32
+ items?: Array<{
33
+ label: string | Record<string, string>;
34
+ href: BoltdocsRoutePathWithFallback;
35
+ }>;
36
+ }>;
37
+ sidebar?: Record<string, Array<{
38
+ text: string;
39
+ link: BoltdocsRoutePathWithFallback;
40
+ }>>;
41
+ sidebarGroups?: Record<string, {
42
+ title?: string | Record<string, string>;
43
+ icon?: string;
44
+ }>;
45
+ socialLinks?: BoltdocsSocialLink[];
46
+ editLink?: string;
47
+ communityHelp?: string;
48
+ version?: string;
49
+ githubRepo?: string;
50
+ favicon?: string;
51
+ tabs?: Array<{
52
+ id: string;
53
+ text: string | Record<string, string>;
54
+ icon?: string;
55
+ }>;
56
+ /**
57
+ * Legacy alias for `codeHighlighting.theme`. Kept for backwards
58
+ * compatibility — prefer `codeHighlighting`.
59
+ * @deprecated Use `codeHighlighting` instead.
60
+ */
61
+ codeTheme?: CodeTheme;
62
+ /**
63
+ * Configures the markdown code highlighting engine. The engine is
64
+ * engine-agnostic: `engine` accepts a registry id (`'shiki'` by default),
65
+ * an adapter instance, or an adapter factory — so any highlighter can be
66
+ * plugged in without changes to the core.
67
+ *
68
+ * Shorthand: a plain string is a registry id, i.e. `'shiki'` is
69
+ * equivalent to `{ engine: 'shiki' }` (resolved by
70
+ * `normalizeCodeHighlightConfig()` at every read site).
71
+ */
72
+ codeHighlighting?: CodeHighlightConfig | string;
73
+ }
74
+ interface BoltdocsPlugin extends PluginDefinition<BoltdocsConfig, IncomingMessage, ServerResponse> {
75
+ vitePlugins?: Plugin[];
76
+ }
77
+ /**
78
+ * The root configuration object for Boltdocs.
79
+ */
80
+ interface BoltdocsConfig extends BoltdocsConfigContract<BoltdocsPlugin> {
81
+ theme?: BoltdocsThemeConfig;
82
+ aliases?: AliasOptions;
83
+ vite?: UserConfig;
84
+ }
85
+ /**
86
+ * Global namespace for Boltdocs types that can be augmented by generated code.
87
+ * This allows for strictly typed locales and versions based on the project configuration.
88
+ */
89
+ declare global {
90
+ namespace Boltdocs {
91
+ interface Types {}
92
+ /**
93
+ * Marker interface augmented by generated code to provide strict route path typing.
94
+ * When no types have been generated (e.g., before first dev server start),
95
+ * keyof is never, and BoltdocsRoutePath falls back to string.
96
+ */
97
+ interface RoutePaths {}
98
+ }
99
+ }
100
+ type BoltdocsTypes = Boltdocs.Types;
101
+ type BoltdocsRoutePath = keyof Boltdocs.RoutePaths;
102
+ type ExternalRouteReference = `/${string}` | `#${string}` | `?${string}` | `site:/${string}` | `site:${string}` | `http://${string}` | `https://${string}` | `//${string}`;
103
+ type BoltdocsRoutePathWithFallback = BoltdocsRoutePath | ExternalRouteReference | string;
104
+ type BoltdocsLocale = Boltdocs.Types extends {
105
+ Locale: infer L;
106
+ } ? L : string;
107
+ type BoltdocsVersion = Boltdocs.Types extends {
108
+ Version: infer V;
109
+ } ? V : string;
110
+ type UnpackMdxComponents<T> = T extends {
111
+ default: infer D;
112
+ } ? D : T;
113
+ type TransformMdxComponents<T> = { [K in keyof T as K extends `Frontmatter_${string}` ? never : K]: T[K] } & {
114
+ Frontmatter: { [K in keyof T as K extends `Frontmatter_${infer Name}` ? Name : never]: T[K] };
115
+ };
116
+ type BoltdocsMdxComponents = Boltdocs.Types extends {
117
+ MdxComponents: infer M;
118
+ } ? TransformMdxComponents<UnpackMdxComponents<M>> : Omit<Record<string, ComponentType<unknown>>, 'Frontmatter'> & {
119
+ Frontmatter: Record<string, ComponentType<unknown>>;
120
+ };
121
+ //#endregion
122
+ //#region src/client/router/types.d.ts
123
+ interface LoaderFunctionArgs {
124
+ request: Request;
125
+ params: Record<string, string>;
126
+ }
127
+ type LoaderFunction<T = unknown> = (args: LoaderFunctionArgs) => Promise<T> | T;
128
+ type PrefetchFunction$1 = (to: string) => Promise<void>;
129
+ interface RouteMatch {
130
+ route: RouteRecord;
131
+ params: Record<string, string>;
132
+ pathname: string;
133
+ pathnameBase: string;
134
+ data?: Record<string, unknown>;
135
+ }
136
+ interface LazyRouteResult {
137
+ Component?: ComponentType<any>;
138
+ element?: ReactNode;
139
+ loader?: LoaderFunction;
140
+ ErrorBoundary?: ComponentType<any>;
141
+ }
142
+ /** Structurally compatible with react-router-dom's route objects */
143
+ interface RouteRecord {
144
+ path?: string;
145
+ index?: boolean;
146
+ id?: string;
147
+ element?: ReactNode;
148
+ Component?: ComponentType<any>;
149
+ loader?: LoaderFunction;
150
+ action?: (...args: any[]) => any;
151
+ ErrorBoundary?: ComponentType<any>;
152
+ hasErrorBoundary?: boolean;
153
+ HydrateFallback?: ComponentType<any>;
154
+ children?: RouteRecord[];
155
+ lazy?: () => Promise<LazyRouteResult>;
156
+ caseSensitive?: boolean;
157
+ shouldRevalidate?: (...args: any[]) => boolean;
158
+ getStaticPaths?: () => string[] | Promise<string[]>;
159
+ entry?: string;
160
+ /** Locale this route belongs to (used by i18n fallbacks) */
161
+ locale?: string;
162
+ }
163
+ interface RouterOptions {
164
+ routes: RouteRecord[];
165
+ basename?: string;
166
+ future?: Record<string, boolean>;
167
+ }
168
+ interface RouteRendererProps {
169
+ routes: RouteRecord[];
170
+ pathname?: string;
171
+ loaderData?: Record<string, unknown> | null;
172
+ /** Whether loaderData was explicitly produced for the initial SSR route. */
173
+ hasLoaderData?: boolean;
174
+ /** Resolved branch supplied by SSR so lazy MDX routes render without effects. */
175
+ resolvedBranch?: RouteRecord[];
176
+ basename?: string;
177
+ /** Default locale is omitted from external URLs. */
178
+ defaultLocale?: string;
179
+ /** Optional route prefetcher used by Link hover/focus interactions. */
180
+ prefetch?: PrefetchFunction$1;
181
+ /** Enables native View Transitions for route updates. */
182
+ viewTransitions?: boolean | {
183
+ enabled?: boolean;
184
+ types?: string[];
185
+ };
186
+ }
187
+ interface CreateRoutesResult {
188
+ routes: RouteRecord[];
189
+ RouteRenderer: ComponentType<RouteRendererProps>;
190
+ matchRouteBranch: (routes: RouteRecord[], pathname: string) => RouteRecord[];
191
+ matchRouteBranchWithParams: (routes: RouteRecord[], pathname: string, basename?: string) => Array<{
192
+ route: RouteRecord;
193
+ params: Record<string, string>;
194
+ }>;
195
+ resolveRouteBranch: (branch: RouteRecord[]) => Promise<RouteRecord[]>;
196
+ }
197
+ //#endregion
198
+ //#region src/client/router/context.d.ts
199
+ interface LocationState {
200
+ pathname: string;
201
+ search: string;
202
+ hash: string;
203
+ }
204
+ type PrefetchFunction = (to: string) => Promise<void>;
205
+ type NavigateFunction = (to: string, options?: {
206
+ replace?: boolean;
207
+ state?: unknown; /** Disable the router transition when an outer transition owns the update. */
208
+ viewTransition?: boolean;
209
+ }) => void;
210
+ declare const defaultNavigate: NavigateFunction;
211
+ declare const LocationContext: _$react.Context<LocationState>;
212
+ declare const NavigateContext: _$react.Context<NavigateFunction>;
213
+ declare const PrefetchContext: _$react.Context<PrefetchFunction>;
214
+ declare const RouteDataContext: _$react.Context<Record<string, unknown> | null>;
215
+ declare const MatchesContext: _$react.Context<RouteMatch[]>;
216
+ interface LocationProviderProps {
217
+ pathname?: string;
218
+ children: React.ReactNode;
219
+ loaderData?: Record<string, unknown> | null;
220
+ matches?: RouteMatch[];
221
+ /** Base path of the application. Only links under this path are handled as SPA navigation. */
222
+ basename?: string;
223
+ /** Default locale is omitted from external URLs. */
224
+ defaultLocale?: string;
225
+ /** Optional route prefetcher used by Link hover/focus interactions. */
226
+ prefetch?: PrefetchFunction;
227
+ /** Enables the native View Transition API for route updates. */
228
+ viewTransitions?: boolean | {
229
+ enabled?: boolean;
230
+ types?: string[];
231
+ };
232
+ }
233
+ declare const LocationProvider: React.FC<LocationProviderProps>;
234
+ //#endregion
235
+ //#region src/client/router/hooks.d.ts
236
+ declare function useLocation(): LocationState;
237
+ declare function useNavigate(): NavigateFunction;
238
+ declare function usePrefetch(): (to: string) => Promise<void>;
239
+ declare function useRouteData<T = Record<string, unknown>>(): T;
240
+ /** Alias for useRouteData — parity with react-router-dom's useLoaderData */
241
+ declare function useLoaderData<T = Record<string, unknown>>(): T;
242
+ declare function useMatches(): RouteMatch[];
243
+ //#endregion
244
+ //#region src/client/router/outlet.d.ts
245
+ declare const OutletContext: _$react.Context<_$react.ReactNode>;
246
+ declare const Outlet: React.FC;
247
+ //#endregion
248
+ //#region src/client/router/renderer.d.ts
249
+ interface RouteBranchMatch {
250
+ route: RouteRecord;
251
+ params: Record<string, string>;
252
+ }
253
+ declare function matchRouteBranchWithParams(routes: RouteRecord[], pathname: string, basename?: string): RouteBranchMatch[];
254
+ declare function matchRouteBranch(routes: RouteRecord[], pathname: string, basename?: string): RouteRecord[];
255
+ declare function resolveRouteBranch(branch: RouteRecord[]): Promise<RouteRecord[]>;
256
+ declare const RouteRenderer: React$1.FC<RouteRendererProps>;
257
+ //#endregion
258
+ //#region src/client/router/utils.d.ts
259
+ declare function normalizeBasename(basename?: string): string;
260
+ declare function hasBasename(path: string, basename: string): boolean;
261
+ declare function stripBasename(path: string, basename: string): string;
262
+ declare function addBasename(path: string, basename: string): string;
263
+ //#endregion
264
+ //#region src/client/router/url-contract.d.ts
265
+ type UrlRouteKind = 'doc' | 'external' | 'collection';
266
+ interface UrlContractConfig {
267
+ base?: string;
268
+ i18n?: Pick<BoltdocsI18nConfig, 'defaultLocale' | 'locales'>;
269
+ versions?: Pick<BoltdocsVersionsConfig, 'defaultVersion' | 'prefix' | 'versions'>;
270
+ collections?: readonly string[] | BoltdocsCollectionsConfig;
271
+ }
272
+ interface UrlRouteHint {
273
+ path: string;
274
+ kind?: UrlRouteKind;
275
+ collection?: string;
276
+ }
277
+ interface ParsedUrl {
278
+ /** The normalized pathname, without query string or hash. */
279
+ pathname: string;
280
+ /** The normalized route content after removing structural prefixes. */
281
+ routePath: string;
282
+ /** Query string including `?`, when present. */
283
+ search: string;
284
+ /** Hash including `#`, when present. */
285
+ hash: string;
286
+ kind: UrlRouteKind;
287
+ locale?: string;
288
+ version?: string;
289
+ collection?: string;
290
+ /** Whether the input used the explicit `site:` protocol. */
291
+ siteProtocol: boolean;
292
+ /** Whether the input pathname contained the configured documentation base. */
293
+ hadBase: boolean;
294
+ }
295
+ interface BuildUrlOptions {
296
+ kind: UrlRouteKind;
297
+ /** Route content, e.g. `/guides/start`, `/about`, or `/my-post`. */
298
+ path?: string;
299
+ locale?: string;
300
+ version?: string;
301
+ collection?: string;
302
+ search?: string;
303
+ hash?: string;
304
+ /** The input pathname already contained the configured base. */
305
+ hadBase?: boolean;
306
+ }
307
+ interface ResolveUrlOptions {
308
+ /** Explicitly choose the route family when the path is ambiguous. */
309
+ kind?: UrlRouteKind;
310
+ /** Known route metadata used to classify paths outside `base`. */
311
+ routes?: readonly UrlRouteHint[];
312
+ /** Locale/version to apply when building a canonical target. */
313
+ locale?: string;
314
+ version?: string;
315
+ }
316
+ declare function normalizeUrlBase(base?: string): string;
317
+ declare function normalizeUrlPath(path: string): string;
318
+ declare function hasUrlBase(pathname: string, base?: string): boolean;
319
+ declare function stripUrlBase(pathname: string, base?: string): string;
320
+ declare function addUrlBase(pathname: string, base?: string): string;
321
+ declare function getConfiguredLocales(config: UrlContractConfig): string[];
322
+ declare function getConfiguredVersions(config: UrlContractConfig): string[];
323
+ declare function getVersionPrefixSegments(config: UrlContractConfig): string[];
324
+ declare function getVersionSegments(version: string | undefined, config: UrlContractConfig): string[];
325
+ declare function isConfiguredLocale(value: string | undefined, config: UrlContractConfig): value is string;
326
+ declare function isConfiguredVersion(value: string | undefined, config: UrlContractConfig): value is string;
327
+ declare function splitUrlReference(to: string): {
328
+ pathname: string;
329
+ search: string;
330
+ hash: string;
331
+ };
332
+ declare function stripSiteProtocol(to: string): {
333
+ value: string;
334
+ siteProtocol: boolean;
335
+ };
336
+ /** Returns true for URI schemes such as `mailto:`, `tel:`, or `data:`. */
337
+ declare function hasUriScheme(value: string): boolean;
338
+ declare function classifyUrlPath(pathname: string, config: UrlContractConfig, options?: Pick<ResolveUrlOptions, 'kind' | 'routes'>): UrlRouteKind;
339
+ declare function parseUrlReference(to: string, config: UrlContractConfig, options?: Pick<ResolveUrlOptions, 'kind' | 'routes'>): ParsedUrl;
340
+ declare function buildUrl(options: BuildUrlOptions, config: UrlContractConfig): string;
341
+ declare function resolveUrlReference(to: string, config: UrlContractConfig, options?: ResolveUrlOptions): string;
342
+ //#endregion
343
+ export { LazyRouteResult as $, matchRouteBranch as A, useRouteData as B, stripSiteProtocol as C, normalizeBasename as D, hasBasename as E, useLoaderData as F, MatchesContext as G, LocationProvider as H, useLocation as I, PrefetchContext as J, NavigateContext as K, useMatches as L, resolveRouteBranch as M, Outlet as N, stripBasename as O, OutletContext as P, CreateRoutesResult as Q, useNavigate as R, splitUrlReference as S, addBasename as T, LocationProviderProps as U, LocationContext as V, LocationState as W, RouteDataContext as X, PrefetchFunction as Y, defaultNavigate as Z, isConfiguredVersion as _, RedirectConfig as _t, UrlRouteHint as a, RouterOptions as at, parseUrlReference as b, buildUrl as c, BoltdocsIntegrationsConfig as ct, getConfiguredVersions as d, BoltdocsRoutePath as dt, LoaderFunction as et, getVersionPrefixSegments as f, BoltdocsRoutePathWithFallback as ft, isConfiguredLocale as g, JsonLdObject as gt, hasUrlBase as h, BoltdocsVersion as ht, UrlContractConfig as i, RouteRendererProps as it, matchRouteBranchWithParams as j, RouteRenderer as k, classifyUrlPath as l, BoltdocsLocale as lt, hasUriScheme as m, BoltdocsTypes as mt, ParsedUrl as n, RouteMatch as nt, UrlRouteKind as o, BadgeValue as ot, getVersionSegments as p, BoltdocsSocialLink as pt, NavigateFunction as q, ResolveUrlOptions as r, RouteRecord as rt, addUrlBase as s, BoltdocsConfig as st, BuildUrlOptions as t, LoaderFunctionArgs as tt, getConfiguredLocales as u, BoltdocsMdxComponents as ut, normalizeUrlBase as v, RedirectStatus as vt, stripUrlBase as w, resolveUrlReference as x, normalizeUrlPath as y, StructuredData as yt, usePrefetch as z };