boltdocs 2.5.6 → 2.6.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 (114) hide show
  1. package/bin/boltdocs.js +2 -2
  2. package/dist/client/index.cjs +6 -0
  3. package/dist/client/{index.d.mts → index.d.cts} +135 -265
  4. package/dist/client/index.d.ts +136 -266
  5. package/dist/client/index.js +1 -1
  6. package/dist/client/theme/neutral.css +90 -50
  7. package/dist/node/cli-entry.cjs +2 -2
  8. package/dist/node/cli-entry.mjs +2 -2
  9. package/dist/node/index.cjs +1 -1
  10. package/dist/node/index.d.cts +168 -205
  11. package/dist/node/index.d.mts +168 -205
  12. package/dist/node/index.mjs +1 -1
  13. package/dist/node-CWN8U_p8.mjs +88 -0
  14. package/dist/node-D5iosYXv.cjs +88 -0
  15. package/dist/{package-OFZf0s2j.mjs → package-DukYeKmD.mjs} +1 -1
  16. package/dist/{package-BY8Jd2j4.cjs → package-c99Cs7mD.cjs} +1 -1
  17. package/dist/search-dialog-3lvKsbVG.js +6 -0
  18. package/dist/search-dialog-DMK5OpgH.cjs +6 -0
  19. package/dist/use-search-C9bxCqfF.js +6 -0
  20. package/dist/use-search-DcfZSunO.cjs +6 -0
  21. package/package.json +21 -23
  22. package/src/client/app/config-context.tsx +38 -5
  23. package/src/client/app/doc-page.tsx +34 -0
  24. package/src/client/app/mdx-component.tsx +2 -3
  25. package/src/client/app/mdx-components-context.tsx +27 -2
  26. package/src/client/app/routes-context.tsx +34 -0
  27. package/src/client/app/scroll-handler.tsx +7 -4
  28. package/src/client/app/theme-context.tsx +71 -67
  29. package/src/client/components/docs-layout.tsx +1 -2
  30. package/src/client/components/icons-dev.tsx +36 -5
  31. package/src/client/components/mdx/admonition.tsx +11 -27
  32. package/src/client/components/mdx/badge.tsx +1 -1
  33. package/src/client/components/mdx/button.tsx +3 -3
  34. package/src/client/components/mdx/card.tsx +1 -1
  35. package/src/client/components/mdx/code-block.tsx +90 -80
  36. package/src/client/components/mdx/component-preview.tsx +1 -5
  37. package/src/client/components/mdx/component-props.tsx +1 -1
  38. package/src/client/components/mdx/field.tsx +4 -5
  39. package/src/client/components/mdx/file-tree.tsx +6 -3
  40. package/src/client/components/mdx/hooks/use-code-block.ts +2 -2
  41. package/src/client/components/mdx/image.tsx +1 -1
  42. package/src/client/components/mdx/link.tsx +2 -2
  43. package/src/client/components/mdx/list.tsx +1 -1
  44. package/src/client/components/mdx/table.tsx +1 -1
  45. package/src/client/components/mdx/tabs.tsx +1 -1
  46. package/src/client/components/primitives/breadcrumbs.tsx +1 -7
  47. package/src/client/components/primitives/button-group.tsx +1 -1
  48. package/src/client/components/primitives/button.tsx +1 -1
  49. package/src/client/components/primitives/code-block.tsx +113 -0
  50. package/src/client/components/primitives/link.tsx +23 -41
  51. package/src/client/components/primitives/menu.tsx +5 -6
  52. package/src/client/components/primitives/navbar.tsx +6 -18
  53. package/src/client/components/primitives/navigation-menu.tsx +4 -4
  54. package/src/client/components/primitives/on-this-page.tsx +6 -10
  55. package/src/client/components/primitives/page-nav.tsx +4 -9
  56. package/src/client/components/primitives/popover.tsx +1 -1
  57. package/src/client/components/primitives/search-dialog.tsx +3 -6
  58. package/src/client/components/primitives/sidebar.tsx +80 -22
  59. package/src/client/components/primitives/skeleton.tsx +1 -1
  60. package/src/client/components/primitives/tabs.tsx +4 -11
  61. package/src/client/components/primitives/tooltip.tsx +3 -3
  62. package/src/client/components/ui-base/breadcrumbs.tsx +4 -6
  63. package/src/client/components/ui-base/copy-markdown.tsx +2 -7
  64. package/src/client/components/ui-base/github-stars.tsx +2 -2
  65. package/src/client/components/ui-base/head.tsx +58 -51
  66. package/src/client/components/ui-base/loading.tsx +2 -2
  67. package/src/client/components/ui-base/navbar.tsx +12 -14
  68. package/src/client/components/ui-base/not-found.tsx +1 -1
  69. package/src/client/components/ui-base/on-this-page.tsx +6 -6
  70. package/src/client/components/ui-base/page-nav.tsx +4 -8
  71. package/src/client/components/ui-base/search-dialog.tsx +10 -8
  72. package/src/client/components/ui-base/sidebar.tsx +76 -23
  73. package/src/client/components/ui-base/tabs.tsx +9 -8
  74. package/src/client/components/ui-base/theme-toggle.tsx +2 -2
  75. package/src/client/hooks/use-i18n.ts +3 -3
  76. package/src/client/hooks/use-localized-to.ts +1 -1
  77. package/src/client/hooks/use-navbar.ts +8 -6
  78. package/src/client/hooks/use-routes.ts +19 -11
  79. package/src/client/hooks/use-search.ts +1 -1
  80. package/src/client/hooks/use-sidebar.ts +48 -2
  81. package/src/client/hooks/use-tabs.ts +6 -2
  82. package/src/client/hooks/use-version.ts +3 -3
  83. package/src/client/index.ts +20 -22
  84. package/src/client/ssg/boltdocs-shell.tsx +127 -0
  85. package/src/client/ssg/create-routes.tsx +179 -0
  86. package/src/client/ssg/index.ts +3 -0
  87. package/src/client/ssg/mdx-page.tsx +37 -0
  88. package/src/client/store/boltdocs-context.tsx +46 -99
  89. package/src/client/theme/neutral.css +90 -50
  90. package/src/client/types.ts +5 -33
  91. package/src/client/utils/react-to-text.ts +34 -0
  92. package/src/shared/config-utils.ts +12 -0
  93. package/src/shared/types.ts +171 -0
  94. package/dist/cache-Cr8W2zgZ.cjs +0 -6
  95. package/dist/cache-DFdakSmR.mjs +0 -6
  96. package/dist/client/index.mjs +0 -6
  97. package/dist/client/ssr.cjs +0 -6
  98. package/dist/client/ssr.d.cts +0 -80
  99. package/dist/client/ssr.d.mts +0 -80
  100. package/dist/client/ssr.mjs +0 -6
  101. package/dist/node-CWXme96p.mjs +0 -73
  102. package/dist/node-VYfhzGrh.cjs +0 -73
  103. package/dist/search-dialog-BeNyI_KQ.mjs +0 -6
  104. package/dist/search-dialog-dYsCAk5S.js +0 -6
  105. package/dist/use-search-D25n0PrV.mjs +0 -6
  106. package/dist/use-search-WuzdH1cJ.js +0 -6
  107. package/src/client/app/index.tsx +0 -348
  108. package/src/client/app/mdx-page.tsx +0 -15
  109. package/src/client/app/preload.tsx +0 -66
  110. package/src/client/app/router.tsx +0 -30
  111. package/src/client/components/default-layout.tsx +0 -90
  112. package/src/client/integrations/codesandbox.ts +0 -179
  113. package/src/client/integrations/index.ts +0 -1
  114. package/src/client/ssr.tsx +0 -65
@@ -1,110 +1,37 @@
1
1
 
2
- import * as _$vite from "vite";
3
- import { Plugin } from "vite";
4
- import * as _$react from "react";
5
- import React$1, { Component, ComponentPropsWithoutRef, ErrorInfo, ImgHTMLAttributes, ReactNode, RefObject } from "react";
6
- import * as _$react_jsx_runtime0 from "react/jsx-runtime";
7
2
  import * as _$react_router_dom0 from "react-router-dom";
8
3
  import { LinkProps as LinkProps$1 } from "react-router-dom";
9
- import * as _$class_variance_authority_types0 from "class-variance-authority/types";
4
+ import * as _$react from "react";
5
+ import { Component, ComponentPropsWithoutRef, ErrorInfo, ImgHTMLAttributes, ReactNode, RefObject } from "react";
6
+ import * as _$react_jsx_runtime0 from "react/jsx-runtime";
10
7
  import * as RAC from "react-aria-components";
11
8
  import { LinkProps as LinkProps$2 } from "react-aria-components";
12
- import { VariantProps } from "class-variance-authority";
13
9
  import { ClassValue } from "clsx";
10
+ import { VariantProps } from "class-variance-authority";
11
+ import { Plugin } from "vite";
12
+ import { RouteRecord } from "@bdocs/ssg";
13
+ import * as _$class_variance_authority_types0 from "class-variance-authority/types";
14
14
 
15
- //#region src/node/plugins/plugin-types.d.ts
16
- /**
17
- * Permissions that a plugin can request to access specific Boltdocs capabilities.
18
- */
19
- type PluginPermission = 'fs:read' | 'fs:write' | 'vite:config' | 'mdx:remark' | 'mdx:rehype' | 'components' | 'hooks:build' | 'hooks:dev';
20
- /**
21
- * Shared context injected into every plugin lifecycle hook.
22
- */
23
- interface PluginContext {
24
- /** The full, resolved Boltdocs configuration (Readonly) */
25
- readonly config: BoltdocsConfig;
26
- /** A plugin-specific logger */
27
- readonly logger: PluginLogger;
28
- /** A shared store for dependency injection and state sharing between plugins */
29
- readonly store: PluginStore;
30
- /** Metadata about the current plugin */
31
- readonly meta: PluginMeta;
32
- }
33
- /**
34
- * Simple logger interface for plugins.
35
- */
36
- interface PluginLogger {
37
- info(message: string): void;
38
- warn(message: string): void;
39
- error(message: string | Error): void;
40
- debug(message: string): void;
41
- }
42
- /**
43
- * A shared key-value store that allows plugins to share state and configuration.
44
- */
45
- interface PluginStore {
46
- /** Get a value from the store. Keys are namespaced by plugin internally. */
47
- get<T = unknown>(pluginName: string, key: string): T | undefined;
48
- /** Set a value in the store. */
49
- set(pluginName: string, key: string, value: unknown): void;
50
- /** Check if a key exists in the store. */
51
- has(pluginName: string, key: string): boolean;
52
- }
53
- /**
54
- * Metadata for a plugin, used for identification and compatibility checks.
55
- */
56
- interface PluginMeta {
57
- /** Unique identifier for the plugin */
58
- name: string;
59
- /** Version of the plugin itself (semver) */
60
- version?: string;
61
- /** Minimum required version of Boltdocs (semver range) */
62
- boltdocsVersion?: string;
63
- }
64
- /**
65
- * Lifecycle hooks that a plugin can implement to hook into the build and dev processes.
66
- */
67
- interface PluginLifecycleHooks {
68
- /** Called before the build process starts */
69
- beforeBuild?: (ctx: PluginContext) => Promise<void> | void;
70
- /** Called after the build process finishes successfully */
71
- afterBuild?: (ctx: PluginContext) => Promise<void> | void;
72
- /** Called before the dev server starts */
73
- beforeDev?: (ctx: PluginContext) => Promise<void> | void;
74
- /** Called after the dev server is ready (configureServer) */
75
- afterDev?: (ctx: PluginContext) => Promise<void> | void;
76
- /** Called when the final Boltdocs config is resolved */
77
- configResolved?: (ctx: PluginContext, config: BoltdocsConfig) => void;
78
- /** Called when the build is closing */
79
- buildEnd?: (ctx: PluginContext) => Promise<void> | void;
80
- }
81
- //#endregion
82
- //#region src/node/config.d.ts
15
+ //#region src/shared/types.d.ts
83
16
  /**
84
17
  * Represents a single social link in the configuration.
85
18
  */
86
19
  interface BoltdocsSocialLink {
87
- /** Identifier for the icon (e.g., 'github') */
88
20
  icon: 'discord' | 'x' | 'github' | 'bluesky' | string;
89
- /** The URL the social link points to */
90
21
  link: string;
91
22
  }
92
23
  /**
93
24
  * Configuration for the site footer.
94
25
  */
95
26
  interface BoltdocsFooterConfig {
96
- /** Text to display in the footer (HTML is supported) */
97
27
  text?: string;
98
28
  }
99
29
  /**
100
- * Theme-specific configuration options governing the appearance and navigation of the site.
30
+ * Theme-specific configuration options.
101
31
  */
102
32
  interface BoltdocsThemeConfig {
103
- /** The global title of the documentation site (can be translated) */
104
33
  title?: string | Record<string, string>;
105
- /** The global description of the site (can be translated) */
106
34
  description?: string | Record<string, string>;
107
- /** URL path to the site logo or an object for light/dark versions */
108
35
  logo?: string | {
109
36
  dark: string;
110
37
  light: string;
@@ -112,188 +39,137 @@ interface BoltdocsThemeConfig {
112
39
  width?: number;
113
40
  height?: number;
114
41
  };
115
- /** Items to display in the top navigation bar */
116
42
  navbar?: Array<{
117
- /** Text to display (can be a string or a map of translations) */label: string | Record<string, string>; /** URL path or external link */
43
+ label: string | Record<string, string>;
118
44
  href: string;
119
45
  }>;
120
- /** Items to display in the sidebar, organized optionally by group URLs */
121
46
  sidebar?: Record<string, Array<{
122
47
  text: string;
123
48
  link: string;
124
49
  }>>;
125
- /** Social links to display in the navigation bar */
50
+ sidebarGroups?: Record<string, {
51
+ title?: string;
52
+ icon?: string;
53
+ }>;
126
54
  socialLinks?: BoltdocsSocialLink[];
127
- /** Site footer configuration */
128
55
  footer?: BoltdocsFooterConfig;
129
- /** Whether to show breadcrumbs navigation (default: true) */
130
56
  breadcrumbs?: boolean;
131
- /** URL template for 'Edit this page'. Use :path as a placeholder. */
132
57
  editLink?: string;
133
- /** URL for the 'Community help' link. */
134
58
  communityHelp?: string;
135
- /** The current version of the project (e.g., 'v2.8.9'). Displayed in the Navbar. */
136
59
  version?: string;
137
- /** The GitHub repository in the format 'owner/repo' to fetch and display star count. */
138
60
  githubRepo?: string;
139
- /**
140
- * URL path to the site favicon.
141
- * If not specified, the logo will be used if available.
142
- */
143
61
  favicon?: string;
144
- /**
145
- * The Open Graph image URL to display when the site is shared on social media.
146
- */
147
- ogImage?: string;
148
- /** Whether to show the 'Powered by LiteDocs' badge in the sidebar (default: true) */
149
62
  poweredBy?: boolean;
150
- /**
151
- * Top-level tabs for organizing documentation groups.
152
- * Tab discovery uses the (tab-id) directory syntax.
153
- */
154
63
  tabs?: Array<{
155
- id: string; /** Text to display (can be a string or a map of translations) */
64
+ id: string;
156
65
  text: string | Record<string, string>;
157
66
  icon?: string;
158
67
  }>;
159
- /**
160
- * The syntax highlighting theme for code blocks.
161
- * Supports any Shiki theme name (e.g., 'github-dark', 'one-dark-pro', 'aurora-x').
162
- * Can also be an object for multiple themes (e.g., { light: 'github-light', dark: 'github-dark' }).
163
- * Default: { light: 'github-light', dark: 'one-dark-pro' }
164
- */
165
- codeTheme?: string | {
166
- light: string;
167
- dark: string;
68
+ codeTheme?: ShikiTheme | {
69
+ light: ShikiTheme;
70
+ dark: ShikiTheme;
168
71
  };
169
- /**
170
- * Configuration for the 'Copy Markdown' button.
171
- * Can be a boolean or an object with text and icon.
172
- * Default: true
173
- */
174
72
  copyMarkdown?: boolean | {
175
73
  text?: string;
176
74
  icon?: string;
177
75
  };
178
76
  }
77
+ /**
78
+ * List of supported syntax highlighting themes.
79
+ */
80
+ type ShikiTheme = 'github-dark' | 'github-light' | 'tokyo-night' | 'dracula' | 'nord' | 'one-dark-pro' | 'one-light';
179
81
  /**
180
82
  * Configuration for the robots.txt file.
181
83
  */
182
84
  type BoltdocsRobotsConfig = string | {
183
- /** User-agent rules */rules?: Array<{
184
- userAgent: string; /** Paths allowed to be crawled */
185
- allow?: string | string[]; /** Paths disallowed to be crawled */
85
+ rules?: Array<{
86
+ userAgent: string;
87
+ allow?: string | string[];
186
88
  disallow?: string | string[];
187
- }>; /** Sitemaps to include in the robots.txt */
89
+ }>;
188
90
  sitemaps?: string[];
189
91
  };
190
92
  /**
191
93
  * Configuration for a specific locale.
192
94
  */
193
95
  interface BoltdocsLocaleConfig {
194
- /** The display name of the locale */
195
96
  label?: string;
196
- /** The text direction (ltr or rtl) */
197
97
  direction?: 'ltr' | 'rtl';
198
- /** The HTML lang attribute value (e.g., 'en-US') */
199
98
  htmlLang?: string;
200
- /** The calendar system to use (e.g., 'gregory') */
201
99
  calendar?: string;
202
100
  }
203
101
  /**
204
102
  * Configuration for internationalization (i18n).
205
103
  */
206
104
  interface BoltdocsI18nConfig {
207
- /** The default locale (e.g., 'en') */
208
105
  defaultLocale: string;
209
- /** Available locales and their basic display names (e.g., { en: 'English', es: 'Español' }) */
210
106
  locales: Record<string, string>;
211
- /** Detailed configuration for each locale */
212
107
  localeConfigs?: Record<string, BoltdocsLocaleConfig>;
213
108
  }
214
109
  /**
215
110
  * Configuration for a specific documentation version.
216
111
  */
217
112
  interface BoltdocsVersionConfig {
218
- /** The display name of the version (e.g., 'v2.0') */
219
113
  label: string;
220
- /** The URL path prefix for the version (e.g., '2.0') */
221
114
  path: string;
222
115
  }
223
116
  /**
224
117
  * Configuration for documentation versioning.
225
118
  */
226
119
  interface BoltdocsVersionsConfig {
227
- /** The default version path (e.g., 'v2') */
228
120
  defaultVersion: string;
229
- /**
230
- * Optional prefix for all version paths (e.g., 'v').
231
- * If set to 'v', version '1.1' will be available at '/docs/v1.1'.
232
- */
233
121
  prefix?: string;
234
- /** Available versions configurations */
235
122
  versions: BoltdocsVersionConfig[];
236
123
  }
237
124
  /**
238
- * Defines a Boltdocs plugin that can extend the build process and client-side functionality.
125
+ * Defines a Boltdocs plugin.
239
126
  */
240
127
  interface BoltdocsPlugin {
241
- /** A unique name for the plugin */
242
128
  name: string;
243
- /** Whether to run this plugin before or after default ones (optional) */
244
129
  enforce?: 'pre' | 'post';
245
- /** Version of the plugin (optional) */
246
130
  version?: string;
247
- /** Minimum compatible Boltdocs version (optional, semver range) */
248
131
  boltdocsVersion?: string;
249
- /** List of permissions this plugin requires to operate */
250
- permissions?: PluginPermission[];
251
- /** Optional remark plugins to add to the MDX pipeline */
132
+ permissions?: string[];
252
133
  remarkPlugins?: unknown[];
253
- /** Optional rehype plugins to add to the MDX pipeline */
254
134
  rehypePlugins?: unknown[];
255
- /** Optional Vite plugins to inject into the build process */
256
135
  vitePlugins?: Plugin[];
257
- /** Optional custom React components to register in MDX. Map of Name -> Module Path. */
258
136
  components?: Record<string, string>;
259
- /** Implementation of lifecycle hooks */
260
- hooks?: PluginLifecycleHooks;
137
+ hooks?: Record<string, any>;
261
138
  }
262
139
  /**
263
140
  * Configuration for security-related settings.
264
141
  */
265
142
  interface BoltdocsSecurityConfig {
266
- /** Map of standard security headers to override or supplement defaults */
267
143
  headers?: Record<string, string>;
268
- /** Whether to enable Content Security Policy (CSP) generation (default: false) */
269
144
  enableCSP?: boolean;
270
- /** Additional custom headers to inject into responses */
271
145
  customHeaders?: Record<string, string>;
272
146
  }
147
+ /**
148
+ * Configuration for SEO.
149
+ */
150
+ interface BoltdocsSeoConfig {
151
+ metatags?: Record<string, string>;
152
+ indexing?: 'all' | 'public';
153
+ thumbnails?: {
154
+ background?: string;
155
+ };
156
+ }
273
157
  /**
274
158
  * The root configuration object for Boltdocs.
275
159
  */
276
- interface BoltdocsConfig {
277
- /** The base URL of the site, used for generating the sitemap */
160
+ interface BoltdocsConfig$1 {
278
161
  siteUrl?: string;
279
- /** The root directory containing markdown documentation files (default: 'docs') */
280
162
  docsDir?: string;
281
- /** Path to a custom HomePage component */
163
+ base?: string;
282
164
  homePage?: string;
283
- /** Configuration pertaining to the UI and appearance */
284
165
  theme?: BoltdocsThemeConfig;
285
- /** Configuration for internationalization */
286
166
  i18n?: BoltdocsI18nConfig;
287
- /** Configuration for documentation versioning */
288
167
  versions?: BoltdocsVersionsConfig;
289
- /** Custom plugins for extending functionality */
290
168
  plugins?: BoltdocsPlugin[];
291
- /** Configuration for the robots.txt file */
292
169
  robots?: BoltdocsRobotsConfig;
293
- /** Security-related settings and headers */
294
170
  security?: BoltdocsSecurityConfig;
295
- /** Low-level Vite configuration overrides */
296
- vite?: _$vite.InlineConfig;
171
+ seo?: BoltdocsSeoConfig;
172
+ vite?: any;
297
173
  }
298
174
  //#endregion
299
175
  //#region src/client/types.d.ts
@@ -341,49 +217,15 @@ interface ComponentRoute {
341
217
  };
342
218
  /** Optional icon for the route's group */
343
219
  groupIcon?: string;
220
+ /** The sub-route group this route belongs to (from folders starting with _) */
221
+ subRouteGroup?: string;
222
+ /** The nested sub-routes if this route acts as the parent of a subRouteGroup */
223
+ subRoutes?: ComponentRoute[];
344
224
  /** The extracted plain-text content of the page for search indexing */
345
225
  _content?: string;
346
226
  /** The raw markdown content of the page */
347
227
  _rawContent?: string;
348
228
  }
349
- /**
350
- * Site configuration provided by the server.
351
- */
352
- type SiteConfig = BoltdocsConfig;
353
- /**
354
- * Configuration options for initializing the Boltdocs client app.
355
- */
356
- interface CreateBoltdocsAppOptions {
357
- /** CSS selector for the DOM element where the app should mount (e.g. '#root') */
358
- target: string;
359
- /** Initial routes generated by the Vite plugin (`virtual:boltdocs-routes`) */
360
- routes: ComponentRoute[];
361
- /** The name of the documentation directory (e.g. 'docs') */
362
- docsDirName: string;
363
- /** Site configuration (`virtual:boltdocs-config`) */
364
- config: SiteConfig;
365
- /** Dynamic import mapping from `import.meta.glob` for the documentation pages */
366
- modules: Record<string, () => Promise<{
367
- default: React$1.ComponentType<any>;
368
- }>>;
369
- /** The `import.meta.hot` instance necessary for fast refresh/HMR updates */
370
- hot?: {
371
- accept: (cb?: (mod: any) => void) => void;
372
- dispose: (cb: (data: any) => void) => void;
373
- on: (event: string, cb: (data: any) => void) => void;
374
- data: any;
375
- };
376
- /** Optional custom React component to render when visiting the root path ('/') */
377
- homePage?: React$1.ComponentType;
378
- /** Custom external pages mapped by their route path */
379
- externalPages?: Record<string, React$1.ComponentType>;
380
- /** Optional custom layout for external pages */
381
- externalLayout?: React$1.ComponentType<{
382
- children: React$1.ReactNode;
383
- }>;
384
- /** Optional custom MDX components provided by plugins */
385
- components?: Record<string, React$1.ComponentType>;
386
- }
387
229
  /**
388
230
  * Tab configuration for the documentation site.
389
231
  */
@@ -410,7 +252,7 @@ interface OnThisPageProps {
410
252
  * Props for user-defined layout components (layout.tsx).
411
253
  */
412
254
  interface LayoutProps {
413
- children: React$1.ReactNode;
255
+ children: React.ReactNode;
414
256
  }
415
257
  /**
416
258
  * Unified type for navbar links.
@@ -424,41 +266,58 @@ interface NavbarLink {
424
266
  to?: string;
425
267
  }
426
268
  //#endregion
427
- //#region src/client/app/index.d.ts
269
+ //#region src/client/ssg/create-routes.d.ts
270
+ interface CreateRoutesOptions {
271
+ routesData: ComponentRoute[];
272
+ config: BoltdocsConfig$1;
273
+ mdxModules: Record<string, {
274
+ default?: React.ComponentType;
275
+ }>;
276
+ Layout: React.ComponentType<{
277
+ children: React.ReactNode;
278
+ }>;
279
+ homePage?: React.ComponentType;
280
+ externalPages?: Record<string, React.ComponentType>;
281
+ externalLayout?: React.ComponentType<{
282
+ children: React.ReactNode;
283
+ }>;
284
+ components?: Record<string, React.ComponentType>;
285
+ }
286
+ declare function createRoutes(options: CreateRoutesOptions): RouteRecord[];
287
+ //#endregion
288
+ //#region src/client/ssg/mdx-page.d.ts
428
289
  /**
429
- * Creates and mounts the Boltdocs documentation app.
430
- *
431
- * Usage:
432
- * ```tsx
433
- * import { createBoltdocsApp } from 'boltdocs/client'
434
- * import routes from 'virtual:boltdocs-routes'
435
- * import config from 'virtual:boltdocs-config'
436
- * import 'boltdocs/style.css'
437
- * import HomePage from './HomePage'
438
- *
439
- * createBoltdocsApp({
440
- * target: '#root',
441
- * routes,
442
- * config,
443
- * modules: import.meta.glob('/docs/**\/*.{md,mdx}'),
444
- * hot: import.meta.hot,
445
- * homePage: HomePage,
446
- * })
447
- * ```
290
+ * Renders an MDX page by consuming pre-loaded module data.
291
+ * Uses DocPage to ensure consistent layout and metadata application.
448
292
  */
449
- declare function createBoltdocsApp(options: CreateBoltdocsAppOptions): void;
293
+ declare function MdxPage({
294
+ MDXComponent: propMDX,
295
+ mdxComponents: propComponents
296
+ }: any): _$react_jsx_runtime0.JSX.Element | null;
297
+ //#endregion
298
+ //#region src/client/ssg/boltdocs-shell.d.ts
299
+ declare function BoltdocsShell({
300
+ config,
301
+ routes,
302
+ components
303
+ }: {
304
+ config: BoltdocsConfig$1;
305
+ routes: ComponentRoute[];
306
+ components?: Record<string, React.ComponentType>;
307
+ }): _$react_jsx_runtime0.JSX.Element;
450
308
  //#endregion
451
309
  //#region src/client/app/config-context.d.ts
452
310
  /**
453
311
  * Hook to access the Boltdocs configuration.
454
312
  */
455
- declare function useConfig(): BoltdocsConfig;
313
+ declare function useConfig(): BoltdocsConfig$1;
456
314
  //#endregion
457
315
  //#region src/client/app/theme-context.d.ts
458
316
  type Theme = 'light' | 'dark' | 'system';
317
+ type ResolvedTheme = 'light' | 'dark';
459
318
  interface ThemeContextType {
460
319
  theme: Theme;
461
- resolvedTheme: 'light' | 'dark';
320
+ resolvedTheme: ResolvedTheme;
462
321
  setTheme: (theme: Theme) => void;
463
322
  }
464
323
  declare function useTheme(): ThemeContextType;
@@ -487,12 +346,11 @@ declare function useRoutes(): {
487
346
  label: string;
488
347
  isCurrent: boolean;
489
348
  }[];
490
- config: BoltdocsConfig;
349
+ config: BoltdocsConfig$1;
491
350
  };
492
351
  //#endregion
493
352
  //#region src/client/app/mdx-components-context.d.ts
494
- type MdxComponentsType = Record<string, React.ComponentType<any>>;
495
- declare function useMdxComponents(): MdxComponentsType;
353
+ declare function useMdxComponents(): any;
496
354
  //#endregion
497
355
  //#region src/client/hooks/use-navbar.d.ts
498
356
  declare function useNavbar(): {
@@ -506,22 +364,22 @@ declare function useNavbar(): {
506
364
  };
507
365
  github: string | null;
508
366
  social: BoltdocsSocialLink[];
509
- config: BoltdocsConfig;
510
- theme: "dark" | "light" | "system";
367
+ config: BoltdocsConfig$1;
368
+ theme: Theme;
511
369
  };
512
370
  //#endregion
513
371
  //#region src/client/hooks/use-sidebar.d.ts
514
372
  declare function useSidebar(routes: ComponentRoute[]): {
515
373
  groups: {
374
+ routes: ComponentRoute[];
516
375
  slug: string;
517
376
  title: string;
518
- routes: ComponentRoute[];
519
377
  icon?: string;
520
378
  }[];
521
379
  ungrouped: ComponentRoute[];
522
380
  activeRoute: ComponentRoute | undefined;
523
381
  activePath: string;
524
- config: BoltdocsConfig;
382
+ config: BoltdocsConfig$1;
525
383
  };
526
384
  //#endregion
527
385
  //#region src/client/hooks/use-search.d.ts
@@ -639,9 +497,9 @@ declare const useLocation: () => _$react_router_dom0.Location<any>;
639
497
  * Props shared by all layout slot components.
640
498
  */
641
499
  interface SlotProps {
642
- children?: React$1.ReactNode;
500
+ children?: React.ReactNode;
643
501
  className?: string;
644
- style?: React$1.CSSProperties;
502
+ style?: React.CSSProperties;
645
503
  }
646
504
  /**
647
505
  * Horizontal flex container for sidebar + content + toc.
@@ -683,7 +541,7 @@ declare function ContentFooter({
683
541
  className,
684
542
  style
685
543
  }: SlotProps): _$react_jsx_runtime0.JSX.Element;
686
- interface DocsLayoutComponent extends React$1.FC<SlotProps> {
544
+ interface DocsLayoutComponent extends React.FC<SlotProps> {
687
545
  Body: typeof Body;
688
546
  Content: typeof Content;
689
547
  ContentMdx: typeof ContentMdx;
@@ -692,19 +550,6 @@ interface DocsLayoutComponent extends React$1.FC<SlotProps> {
692
550
  }
693
551
  declare const DocsLayout: DocsLayoutComponent;
694
552
  //#endregion
695
- //#region src/client/components/default-layout.d.ts
696
- interface LayoutProps$1 {
697
- children: React.ReactNode;
698
- }
699
- /**
700
- * The built-in default layout for Boltdocs.
701
- * Users who create their own `layout.tsx` can import the same building blocks
702
- * and rearrange, wrap, or replace any section.
703
- */
704
- declare function DefaultLayout({
705
- children
706
- }: LayoutProps$1): _$react_jsx_runtime0.JSX.Element;
707
- //#endregion
708
553
  //#region src/client/components/ui-base/navbar.d.ts
709
554
  declare function Navbar(): _$react_jsx_runtime0.JSX.Element;
710
555
  //#endregion
@@ -714,7 +559,7 @@ declare function Sidebar$1({
714
559
  config
715
560
  }: {
716
561
  routes: ComponentRoute[];
717
- config: BoltdocsConfig;
562
+ config: BoltdocsConfig$1;
718
563
  }): _$react_jsx_runtime0.JSX.Element;
719
564
  //#endregion
720
565
  //#region src/client/components/ui-base/on-this-page.d.ts
@@ -733,13 +578,14 @@ interface HeadProps {
733
578
  path: string;
734
579
  title: string;
735
580
  description?: string;
581
+ seo?: Record<string, any>;
736
582
  }>;
737
583
  }
738
584
  declare function Head({
739
585
  siteTitle,
740
586
  siteDescription,
741
587
  routes
742
- }: HeadProps): null;
588
+ }: HeadProps): _$react_jsx_runtime0.JSX.Element;
743
589
  //#endregion
744
590
  //#region src/client/components/ui-base/breadcrumbs.d.ts
745
591
  declare function Breadcrumbs(): _$react_jsx_runtime0.JSX.Element | null;
@@ -802,6 +648,7 @@ interface CodeBlockProps {
802
648
  lang?: string;
803
649
  highlightedHtml?: string;
804
650
  'data-lang'?: string;
651
+ 'data-title'?: string;
805
652
  plain?: boolean;
806
653
  [key: string]: any;
807
654
  }
@@ -905,7 +752,7 @@ declare function Badge({
905
752
  //#endregion
906
753
  //#region src/client/components/mdx/card.d.ts
907
754
  declare const cardsVariants: (props?: ({
908
- cols?: 2 | 1 | 3 | 4 | null | undefined;
755
+ cols?: 1 | 2 | 3 | 4 | null | undefined;
909
756
  } & _$class_variance_authority_types0.ClassProp) | undefined) => string;
910
757
  type CardsVariants = VariantProps<typeof cardsVariants>;
911
758
  interface CardsProps extends React.HTMLAttributes<HTMLDivElement>, CardsVariants {}
@@ -957,7 +804,7 @@ declare const Caution: (props: Omit<AdmonitionProps, "type">) => _$react_jsx_run
957
804
  //#region src/client/components/mdx/list.d.ts
958
805
  declare const listVariants: (props?: ({
959
806
  variant?: "number" | "default" | "checked" | "arrow" | "bubble" | null | undefined;
960
- cols?: 2 | 1 | 3 | 4 | null | undefined;
807
+ cols?: 1 | 2 | 3 | 4 | null | undefined;
961
808
  isGrid?: boolean | null | undefined;
962
809
  dense?: boolean | null | undefined;
963
810
  } & _$class_variance_authority_types0.ClassProp) | undefined) => string;
@@ -1035,7 +882,7 @@ interface LinkProps$3 extends LinkProps$2 {
1035
882
  * It uses the global navigation configuration from BoltdocsRouterProvider
1036
883
  * to handle seamless client-side transitions.
1037
884
  */
1038
- declare const Link$1: React$1.ForwardRefExoticComponent<LinkProps$3 & React$1.RefAttributes<HTMLAnchorElement>>;
885
+ declare const Link$1: _$react.ForwardRefExoticComponent<LinkProps$3 & _$react.RefAttributes<HTMLAnchorElement>>;
1039
886
  /**
1040
887
  * Props for the NavLink component, extending standard Link props.
1041
888
  */
@@ -1048,9 +895,9 @@ interface NavLinkProps extends Omit<LinkProps$3, 'className' | 'children'> {
1048
895
  /**
1049
896
  * Provides access to the active state for conditional children rendering.
1050
897
  */
1051
- children?: React$1.ReactNode | ((props: {
898
+ children?: React.ReactNode | ((props: {
1052
899
  isActive: boolean;
1053
- }) => React$1.ReactNode);
900
+ }) => React.ReactNode);
1054
901
  /**
1055
902
  * Provides access to the active state for conditional styling.
1056
903
  */
@@ -1064,7 +911,7 @@ interface NavLinkProps extends Omit<LinkProps$3, 'className' | 'children'> {
1064
911
  * It combines the Link primitive with path matching logic to determine
1065
912
  * if the link is currently active based on the browser's location.
1066
913
  */
1067
- declare const NavLink: React$1.ForwardRefExoticComponent<NavLinkProps & React$1.RefAttributes<HTMLAnchorElement>>;
914
+ declare const NavLink: _$react.ForwardRefExoticComponent<NavLinkProps & _$react.RefAttributes<HTMLAnchorElement>>;
1068
915
  //#endregion
1069
916
  //#region src/client/components/mdx/link.d.ts
1070
917
  type LinkProps = LinkProps$3 & {
@@ -1355,7 +1202,7 @@ interface ScrollProviderProps {
1355
1202
  children?: ReactNode;
1356
1203
  }
1357
1204
  interface OnThisPageContentProps extends ComponentBase {
1358
- ref?: React$1.Ref<HTMLDivElement>;
1205
+ ref?: React.Ref<HTMLDivElement>;
1359
1206
  scrollRef?: RefObject<HTMLElement | null>;
1360
1207
  }
1361
1208
  interface OnThisPageItemProps extends ComponentBase {
@@ -1364,10 +1211,10 @@ interface OnThisPageItemProps extends ComponentBase {
1364
1211
  interface OnThisPageLinkProps extends ComponentBase {
1365
1212
  href?: string;
1366
1213
  active?: boolean;
1367
- onClick?: (event: React$1.MouseEvent<HTMLAnchorElement>) => void;
1214
+ onClick?: (event: React.MouseEvent<HTMLAnchorElement>) => void;
1368
1215
  }
1369
1216
  interface OnThisPageIndicatorProps extends ComponentBase {
1370
- style?: React$1.CSSProperties;
1217
+ style?: React.CSSProperties;
1371
1218
  }
1372
1219
  declare function useItems(): TOCItemInfo[];
1373
1220
  declare function useActiveAnchor(): string | undefined;
@@ -1497,8 +1344,11 @@ declare const Tabs: {
1497
1344
  interface SidebarGroupProps extends ComponentBase {
1498
1345
  title?: string;
1499
1346
  icon?: React.ElementType;
1347
+ }
1348
+ interface SidebarSubGroupProps extends SidebarLinkProps {
1500
1349
  isOpen?: boolean;
1501
1350
  onToggle?: () => void;
1351
+ children?: React.ReactNode;
1502
1352
  }
1503
1353
  interface SidebarLinkProps extends ComponentBase {
1504
1354
  label: string;
@@ -1517,10 +1367,19 @@ declare const Sidebar: {
1517
1367
  children,
1518
1368
  title,
1519
1369
  icon: Icon,
1520
- isOpen,
1521
- onToggle,
1522
1370
  className
1523
1371
  }: SidebarGroupProps) => _$react_jsx_runtime0.JSX.Element;
1372
+ SubGroup: ({
1373
+ label,
1374
+ href,
1375
+ active,
1376
+ icon: Icon,
1377
+ badge,
1378
+ className,
1379
+ isOpen,
1380
+ onToggle,
1381
+ children
1382
+ }: SidebarSubGroupProps) => _$react_jsx_runtime0.JSX.Element;
1524
1383
  GroupItem: ({
1525
1384
  children,
1526
1385
  className
@@ -1675,4 +1534,15 @@ declare function Skeleton({
1675
1534
  //#region src/client/utils/cn.d.ts
1676
1535
  declare function cn(...inputs: ClassValue[]): string;
1677
1536
  //#endregion
1678
- export { Admonition, type AdmonitionProps, AnchorProvider, Badge, type BadgeProps, type BoltdocsConfig, type BoltdocsThemeConfig, Breadcrumbs, Button, ButtonGroup, type ButtonProps, Card, type CardProps, Cards, type CardsProps, Caution, CodeBlock, ComponentPreview, type ComponentPreviewProps, ComponentProps, type ComponentPropsProps, type ComponentRoute, CopyMarkdown, type CreateBoltdocsAppOptions, Danger, DefaultLayout, DocsLayout, ErrorBoundary, Field, type FieldProps, FileTree, type FileTreeProps, Head, Image, type ImageProps, Important, InfoBox, type LayoutProps, Link, type LinkProps, List, type ListProps, Loading, Navbar, NotFound, Note, OnThisPage, PageNav, Breadcrumbs$1 as PrimitiveBreadcrumbs, Button$1 as PrimitiveButton, Link$1 as PrimitiveLink, Menu as PrimitiveMenu, NavLink as PrimitiveNavLink, Navbar$1 as PrimitiveNavbar, NavigationMenu as PrimitiveNavigationMenu, OnThisPage$1 as PrimitiveOnThisPage, PageNav$1 as PrimitivePageNav, Popover as PrimitivePopover, Sidebar as PrimitiveSidebar, Skeleton as PrimitiveSkeleton, Tabs as PrimitiveTabs, Tooltip as PrimitiveTooltip, ScrollProvider, SearchDialog as SearchDialogPrimitive, Sidebar$1 as Sidebar, Tab, type TabProps, Table, type TableProps, Tabs$1 as Tabs, type TabsProps, Tip, Video, Warning, cn, createBoltdocsApp, useActiveAnchor, useActiveAnchors, useBreadcrumbs, useConfig, useI18n, useItems, useLocalizedTo, useLocation, useMdxComponents, useNavbar, useOnThisPage, usePageNav, useRoutes, useSearch, useSidebar, useTabs, useTheme, useVersion };
1537
+ //#region src/client/utils/i18n.d.ts
1538
+ /**
1539
+ * Retrieves the correct translation from a value that can be either
1540
+ * a simple string or a map of locale-specific strings.
1541
+ *
1542
+ * @param value - The text to translate
1543
+ * @param locale - The current active locale (e.g., 'en', 'es')
1544
+ * @returns The translated string
1545
+ */
1546
+ declare function getTranslated(value: string | Record<string, string> | undefined, locale?: string): string;
1547
+ //#endregion
1548
+ export { Admonition, type AdmonitionProps, AnchorProvider, Badge, type BadgeProps, BoltdocsShell, Breadcrumbs, Button, ButtonGroup, type ButtonProps, Card, type CardProps, Cards, type CardsProps, Caution, CodeBlock, ComponentPreview, type ComponentPreviewProps, ComponentProps, type ComponentPropsProps, type ComponentRoute, CopyMarkdown, Danger, DocsLayout, ErrorBoundary, Field, type FieldProps, FileTree, type FileTreeProps, Head, Image, type ImageProps, Important, InfoBox, type LayoutProps, Link, type LinkProps, List, type ListProps, Loading, MdxPage, Navbar, NotFound, Note, OnThisPage, PageNav, Breadcrumbs$1 as PrimitiveBreadcrumbs, Button$1 as PrimitiveButton, Link$1 as PrimitiveLink, Menu as PrimitiveMenu, NavLink as PrimitiveNavLink, Navbar$1 as PrimitiveNavbar, NavigationMenu as PrimitiveNavigationMenu, OnThisPage$1 as PrimitiveOnThisPage, PageNav$1 as PrimitivePageNav, Popover as PrimitivePopover, Sidebar as PrimitiveSidebar, Skeleton as PrimitiveSkeleton, Tabs as PrimitiveTabs, Tooltip as PrimitiveTooltip, ScrollProvider, SearchDialog as SearchDialogPrimitive, Sidebar$1 as Sidebar, Tab, type TabProps, Table, type TableProps, Tabs$1 as Tabs, type TabsProps, Tip, Video, Warning, cn, createRoutes, getTranslated, useActiveAnchor, useActiveAnchors, useBreadcrumbs, useConfig, useI18n, useItems, useLocalizedTo, useLocation, useMdxComponents, useNavbar, useOnThisPage, usePageNav, useRoutes, useSearch, useSidebar, useTabs, useTheme, useVersion };