boltdocs 3.1.0 → 3.2.2
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.
- package/dist/{adapters-DEXNIv3x.mjs → adapters-ByYY44Zy.mjs} +1 -1
- package/dist/{adapters-uGz-UKQa.cjs → adapters-DvmtpdSF.cjs} +1 -1
- package/dist/{banner-DjujkctF.d.ts → banner-BMop1KLF.d.ts} +2 -2
- package/dist/{banner-DdSgCs4G.d.cts → banner-CVD0GugR.d.cts} +2 -2
- package/dist/{cache-CfRTUzWC.cjs → cache-CO4Dy2uQ.cjs} +1 -1
- package/dist/{cache-B0C2i0yP.mjs → cache-Dk53iOo6.mjs} +1 -1
- package/dist/chunk-BFSpntXv.mjs +6 -0
- package/dist/{chunk-Ds5LZdWN.cjs → chunk-D1Md3oWO.cjs} +1 -1
- package/dist/client/index.cjs +219 -172
- package/dist/client/index.d.cts +75 -9
- package/dist/client/index.d.ts +75 -9
- package/dist/client/index.js +119 -73
- package/dist/client/mdx.cjs +1 -1
- package/dist/client/mdx.d.cts +1 -1
- package/dist/client/mdx.d.ts +1 -1
- package/dist/client/mdx.js +1 -1
- package/dist/client/primitives.cjs +7 -7
- package/dist/client/primitives.d.cts +5 -22
- package/dist/client/primitives.d.ts +5 -22
- package/dist/client/primitives.js +4 -4
- package/dist/client/theme/reset.css +31 -4
- package/dist/{shiki-adapter-fS94vy-z.d.mts → config-BpzaPsJj.d.cts} +325 -78
- package/dist/config-CCXp3aXO.mjs +7 -0
- package/dist/{config-BxsogK5A.cjs → config-CMd4XoFq.cjs} +1 -1
- package/dist/config-DlGoEM9D.cjs +7 -0
- package/dist/{shiki-adapter-l2kEP5rn.d.cts → config-xtS0ZkMm.d.mts} +325 -78
- package/dist/{csp-BX06rvdg.cjs → csp-CRp_3U7a.cjs} +1 -1
- package/dist/csp-oTC2ygvF.mjs +6 -0
- package/dist/{docs-layout-DyLDBwS6.js → docs-layout-BdtZ9z6s.js} +9 -28
- package/dist/{docs-layout-D1buSdua.cjs → docs-layout-CFWI15Id.cjs} +69 -88
- package/dist/{doctor-DPDcRKM1.cjs → doctor-BBtmNJE0.cjs} +1 -1
- package/dist/doctor-Bv16QSrI.cjs +7 -0
- package/dist/doctor-DOAbSaiL.mjs +7 -0
- package/dist/{generator-BN75lJOv.cjs → generator-COepVWGi.cjs} +1 -1
- package/dist/{handler-Btd4t_67.mjs → handler-DzQae4eA.mjs} +1 -1
- package/dist/{handler-1LRMYeI4.cjs → handler-XX7cLTqe.cjs} +1 -1
- package/dist/headers-Ddwek8K7.mjs +6 -0
- package/dist/{headers-YpD10rDb.cjs → headers-dg4SDrjY.cjs} +1 -1
- package/dist/{image-5WsgWYTh.js → image-Bz87fCla.js} +1 -1
- package/dist/{image-Hb105Gu6.cjs → image-C4TlpMHn.cjs} +18 -18
- package/dist/link-2PzgTnaP.js +673 -0
- package/dist/{icons-dev-YtDoLUsb.cjs → link-D1Gjkb-2.cjs} +0 -350
- package/dist/{mdx-Bv-pS6-O.js → mdx-BuO6a1f7.js} +195 -40
- package/dist/{mdx-CDUcJmye.cjs → mdx-CD-tSjRG.cjs} +234 -73
- package/dist/{meta-loader-CTB62-Mo.cjs → meta-loader-Dq1zcFnh.cjs} +1 -1
- package/dist/node/cache.cjs +1 -1
- package/dist/node/cache.d.cts +2 -1
- package/dist/node/cache.d.mts +2 -1
- package/dist/node/cache.mjs +1 -1
- package/dist/node/cli-entry.cjs +6 -6
- package/dist/node/cli-entry.mjs +9 -9
- package/dist/node/index.cjs +1 -1
- package/dist/node/index.d.cts +20 -174
- package/dist/node/index.d.mts +18 -175
- package/dist/node/index.mjs +1 -1
- package/dist/node/mdx/shiki-adapter.cjs +1 -1
- package/dist/node/mdx/shiki-adapter.d.cts +49 -1
- package/dist/node/mdx/shiki-adapter.d.mts +49 -1
- package/dist/node/mdx/shiki-adapter.mjs +1 -1
- package/dist/node-B5hu_6qj.cjs +104 -0
- package/dist/node-BXtqM1uH.mjs +6 -0
- package/dist/node-C8725aw7.mjs +104 -0
- package/dist/node-aD1eisrR.cjs +6 -0
- package/dist/{package-_-Oa8-qN.cjs → package-CH2ChQqw.cjs} +1 -1
- package/dist/{package-CoHWTf0N.mjs → package-DSSB8B5L.mjs} +1 -1
- package/dist/{pages-external-CX2uyW95.cjs → pages-external-XkYIs-d5.cjs} +1 -1
- package/dist/parser-DCiEWkSk.cjs +8 -0
- package/dist/parser-qk9FIHJ7.mjs +8 -0
- package/dist/plugin-CX1OZ6jB.cjs +73 -0
- package/dist/plugin-CgfiWaFZ.mjs +73 -0
- package/dist/routes-BW6zsk7Z.mjs +6 -0
- package/dist/routes-BgoIB5wb.cjs +6 -0
- package/dist/{routes-D_S9kjkS.cjs → routes-CORVxc02.cjs} +1 -1
- package/dist/{search-dialog-BpNULmrl.cjs → search-dialog-B1NERUNx.cjs} +101 -55
- package/dist/{search-dialog-BbtxA1uT.cjs → search-dialog-BRFno7HD.cjs} +8 -8
- package/dist/{search-dialog-DC7oXU-5.js → search-dialog-BmxHiKwt.js} +2 -2
- package/dist/{search-dialog-gp9lrJXm.js → search-dialog-D6TvjcuV.js} +1 -1
- package/dist/{search-dialog-PJrFRU5G.js → search-dialog-DFnlx8LO.js} +44 -4
- package/dist/{search-dialog-BIuxGQsg.cjs → search-dialog-DHqwjJuG.cjs} +1 -1
- package/dist/server/index.cjs +1 -1
- package/dist/server/index.d.mts +1 -1
- package/dist/server/index.mjs +1 -1
- package/dist/shiki-adapter-CoQ6jyJ4.cjs +6 -0
- package/dist/shiki-adapter-D-aKw7PP.mjs +6 -0
- package/dist/{sidebar-DknLUI1R.d.ts → sidebar-COTaMHR-.d.ts} +349 -41
- package/dist/{sidebar-DH2iPKXM.d.cts → sidebar-CrEdJuHX.d.cts} +349 -41
- package/dist/{types-generator-CYcHkDzZ.cjs → types-generator-BXhv7Ill.cjs} +1 -1
- package/dist/types-generator-bDPvUztF.mjs +26 -0
- package/dist/utils-Crm9oPcV.mjs +7 -0
- package/dist/utils-D6Xtj0FZ.cjs +7 -0
- package/package.json +13 -10
- package/src/shared/types.ts +361 -19
- package/dist/chunk-hT5z_Zn9-DsJawvsz.mjs +0 -6
- package/dist/chunk-hT5z_Zn9-SKz6VFXu.cjs +0 -6
- package/dist/config-DAgpZyh6.mjs +0 -7
- package/dist/config-DrRQYDCI.cjs +0 -7
- package/dist/csp-z2D0FuRW.mjs +0 -6
- package/dist/doctor-BadGEhXv.cjs +0 -7
- package/dist/doctor-vDsUDgqp.mjs +0 -7
- package/dist/escape-string-regexp-AG8q1e25-9Un9V90q.mjs +0 -6
- package/dist/escape-string-regexp-AG8q1e25-bJ9Ixe7c.cjs +0 -6
- package/dist/esm-shims-DSep1HcR.mjs +0 -6
- package/dist/headers-CL0pMcwm.mjs +0 -6
- package/dist/icons-dev-CHZOwhQA.js +0 -921
- package/dist/lib-BR0SoanK-CLswltLI.cjs +0 -6
- package/dist/lib-BR0SoanK-DcYeDrE6.mjs +0 -6
- package/dist/lib-DPoCz1YB-CLYXwKST.cjs +0 -6
- package/dist/lib-DPoCz1YB-CyGOqgSO.mjs +0 -6
- package/dist/micromark-util-character-5KqJafVT-C6gnc770.cjs +0 -6
- package/dist/micromark-util-character-5KqJafVT-DkPKsbgn.mjs +0 -6
- package/dist/node-BDBv8CT6.mjs +0 -104
- package/dist/node-DFV_FV0y.mjs +0 -6
- package/dist/node-DqsP7kXz.cjs +0 -6
- package/dist/node-yFmAavND.cjs +0 -104
- package/dist/parser-BZJgAa9E.mjs +0 -8
- package/dist/parser-DlanzESE.cjs +0 -8
- package/dist/plugin-BVuwx5D9.cjs +0 -73
- package/dist/plugin-BoxD91Yh.mjs +0 -73
- package/dist/rehype-slug--ZOxZ-_K-BNeYC4aT.cjs +0 -6
- package/dist/rehype-slug--ZOxZ-_K-CjIQEJCs.mjs +0 -6
- package/dist/remark-frontmatter-wFYRLcCt-CutW0gA3.mjs +0 -8
- package/dist/remark-frontmatter-wFYRLcCt-ENB5qG3y.cjs +0 -8
- package/dist/remark-gfm-B8TMkQbX-CjUJo8Rd.cjs +0 -21
- package/dist/remark-gfm-B8TMkQbX-Ctu0VV1_.mjs +0 -21
- package/dist/rolldown-runtime-fkIsjY3S.mjs +0 -6
- package/dist/rollup-DMqoG11U-CKcJ37u_.mjs +0 -59
- package/dist/rollup-DMqoG11U-DKdxvZIj.cjs +0 -59
- package/dist/routes-BN2XbGcT.mjs +0 -6
- package/dist/routes-Cnq8xTCv.cjs +0 -6
- package/dist/shiki-adapter-CGTmrR6S.cjs +0 -6
- package/dist/shiki-adapter-CK3llqw2.mjs +0 -6
- package/dist/types-generator-DVOnRVKU.mjs +0 -26
- package/dist/utils-B3xYMrpK.mjs +0 -7
- package/dist/utils-Bz1tG9Dg.cjs +0 -7
- /package/dist/{errors-C0Hx15Ag.mjs → errors-0zGHRLue.mjs} +0 -0
- /package/dist/{errors-Dx6JHoKE.cjs → errors-vKw8CkiX.cjs} +0 -0
- /package/dist/{index-DJYJzs-Z.d.mts → index-1KsTDq4o.d.mts} +0 -0
- /package/dist/{meta-loader-Bq-MjTXB.mjs → meta-loader-C4Hu9RN9.mjs} +0 -0
package/dist/client/index.cjs
CHANGED
|
@@ -4,26 +4,26 @@
|
|
|
4
4
|
* Licensed under the MIT License.
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
7
|
-
const
|
|
8
|
-
const require_image = require('../image-
|
|
9
|
-
const require_mdx = require('../mdx-
|
|
10
|
-
const require_docs_layout = require('../docs-layout-
|
|
11
|
-
const require_search_dialog = require('../search-dialog-
|
|
12
|
-
const require_search_dialog$1 = require('../search-dialog-
|
|
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 =
|
|
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 =
|
|
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 =
|
|
22
|
+
virtual_boltdocs_icons = require_link.__toESM(virtual_boltdocs_icons);
|
|
23
23
|
let isomorphic_dompurify = require("isomorphic-dompurify");
|
|
24
|
-
isomorphic_dompurify =
|
|
24
|
+
isomorphic_dompurify = require_link.__toESM(isomorphic_dompurify);
|
|
25
25
|
let virtual_boltdocs_layout = require("virtual:boltdocs-layout");
|
|
26
|
-
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)(
|
|
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)(
|
|
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 =
|
|
194
|
-
const { currentLocale, currentRoute } =
|
|
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
|
-
|
|
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:
|
|
288
|
+
content: strVal
|
|
292
289
|
}, key) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("meta", {
|
|
293
290
|
name: key,
|
|
294
|
-
content:
|
|
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
|
-
|
|
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:
|
|
308
|
+
content: strVal
|
|
310
309
|
}, key) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("meta", {
|
|
311
310
|
name: key,
|
|
312
|
-
content:
|
|
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 } =
|
|
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 } =
|
|
352
|
+
const { setLocale, setVersion } = require_link.useBoltdocsContext();
|
|
354
353
|
(0, react.useEffect)(() => {
|
|
355
|
-
const currentPath =
|
|
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)(() =>
|
|
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 =
|
|
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)(
|
|
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)(
|
|
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)(
|
|
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)(
|
|
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 } =
|
|
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)(
|
|
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:
|
|
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:
|
|
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)(
|
|
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:
|
|
627
|
-
children: [copied ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
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:
|
|
633
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
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)(
|
|
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)(
|
|
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)(
|
|
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 =
|
|
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 } =
|
|
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" ?
|
|
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)(
|
|
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)(
|
|
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)(
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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)(
|
|
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:
|
|
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)(
|
|
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 =
|
|
905
|
-
const activeTabId = routes.find((r) =>
|
|
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 } =
|
|
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
|
-
...
|
|
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)(
|
|
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 =
|
|
1007
|
-
const { allRoutes, currentRoute, currentVersion, currentLocale } =
|
|
1008
|
+
const config = require_link.useConfig();
|
|
1009
|
+
const { allRoutes, currentRoute, currentVersion, currentLocale } = require_link.useRoutes();
|
|
1008
1010
|
const versions = config.versions;
|
|
1009
|
-
const { setVersion } =
|
|
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:
|
|
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)(
|
|
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 =
|
|
1075
|
-
const { allRoutes, currentRoute, currentLocale, isCollectionPage } =
|
|
1076
|
+
const config = require_link.useConfig();
|
|
1077
|
+
const { allRoutes, currentRoute, currentLocale, isCollectionPage } = require_link.useRoutes();
|
|
1076
1078
|
const i18n = config.i18n;
|
|
1077
|
-
const { setLocale } =
|
|
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 } =
|
|
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 =
|
|
1185
|
-
const currentIndex = orderedRoutes.findIndex((r) =>
|
|
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 =
|
|
1432
|
-
const { currentRoute } =
|
|
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:
|
|
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)(
|
|
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)(
|
|
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-
|
|
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 } =
|
|
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:
|
|
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)(
|
|
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 =
|
|
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:
|
|
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:
|
|
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:
|
|
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 =
|
|
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:
|
|
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:
|
|
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
|
|
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)(
|
|
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)(
|
|
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)(
|
|
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)(
|
|
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:
|
|
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)(
|
|
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 (!(
|
|
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:
|
|
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)(
|
|
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:
|
|
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)(
|
|
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:
|
|
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)(
|
|
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:
|
|
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)(
|
|
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 =
|
|
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:
|
|
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 } =
|
|
2029
|
-
const content = /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
2030
|
-
|
|
2031
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
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 } =
|
|
2301
|
-
const config =
|
|
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 =
|
|
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 } =
|
|
2597
|
-
const config =
|
|
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
|
-
|
|
2609
|
-
|
|
2610
|
-
|
|
2611
|
-
|
|
2612
|
-
|
|
2613
|
-
|
|
2614
|
-
|
|
2615
|
-
|
|
2616
|
-
|
|
2617
|
-
|
|
2618
|
-
|
|
2619
|
-
|
|
2620
|
-
|
|
2621
|
-
|
|
2622
|
-
|
|
2623
|
-
|
|
2624
|
-
|
|
2625
|
-
|
|
2626
|
-
|
|
2627
|
-
|
|
2628
|
-
|
|
2629
|
-
|
|
2630
|
-
|
|
2631
|
-
|
|
2632
|
-
|
|
2633
|
-
|
|
2634
|
-
|
|
2635
|
-
|
|
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 =
|
|
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 =
|
|
2742
|
+
exports.useConfig = require_link.useConfig;
|
|
2696
2743
|
exports.useFeedback = useFeedback;
|
|
2697
2744
|
exports.useHeadings = useHeadings;
|
|
2698
2745
|
exports.useI18n = useI18n;
|
|
2699
|
-
exports.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 =
|
|
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;
|