zudoku 0.23.3 → 0.23.4
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/config/validators/common.d.ts +45 -11
- package/dist/config/validators/common.js +2 -1
- package/dist/config/validators/common.js.map +1 -1
- package/dist/config/validators/validate.d.ts +19 -5
- package/dist/lib/authentication/providers/openid.d.ts +7 -0
- package/dist/lib/authentication/providers/openid.js +1 -0
- package/dist/lib/authentication/providers/openid.js.map +1 -1
- package/dist/lib/plugins/api-catalog/Catalog.d.ts +2 -6
- package/dist/lib/plugins/api-catalog/Catalog.js +22 -15
- package/dist/lib/plugins/api-catalog/Catalog.js.map +1 -1
- package/dist/lib/plugins/api-catalog/index.d.ts +8 -1
- package/dist/lib/plugins/api-catalog/index.js +2 -2
- package/dist/lib/plugins/api-catalog/index.js.map +1 -1
- package/dist/lib/plugins/search-inkeep/index.js +21 -7
- package/dist/lib/plugins/search-inkeep/index.js.map +1 -1
- package/dist/vite/plugin-api.js +12 -7
- package/dist/vite/plugin-api.js.map +1 -1
- package/lib/{AuthenticationPlugin-DQy635W9.js → AuthenticationPlugin-fB7viE7A.js} +2 -2
- package/lib/{AuthenticationPlugin-DQy635W9.js.map → AuthenticationPlugin-fB7viE7A.js.map} +1 -1
- package/lib/{MdxPage-CBa4X6L5.js → MdxPage-CPBw4_lf.js} +18 -18
- package/lib/{MdxPage-CBa4X6L5.js.map → MdxPage-CPBw4_lf.js.map} +1 -1
- package/lib/OperationList-C7ac3kR5.js +5014 -0
- package/lib/OperationList-C7ac3kR5.js.map +1 -0
- package/lib/{Select-Bb_Hqc70.js → Select-D3XuKKuH.js} +3 -3
- package/lib/{Select-Bb_Hqc70.js.map → Select-D3XuKKuH.js.map} +1 -1
- package/lib/assets/{worker-BmEAZjUP.js → worker-D2kRl-cG.js} +1487 -1436
- package/lib/assets/worker-D2kRl-cG.js.map +1 -0
- package/lib/cn-qaFjX9_3.js.map +1 -1
- package/lib/{createServer-BVFp6Bl3.js → createServer-69sLlmQA.js} +1968 -1917
- package/lib/createServer-69sLlmQA.js.map +1 -0
- package/lib/{hook-DMHiUaIV.js → hook-DgGeo5iL.js} +2 -2
- package/lib/{hook-DMHiUaIV.js.map → hook-DgGeo5iL.js.map} +1 -1
- package/lib/{index-B6rTMjdI.js → index-C8ubT49C.js} +6 -6
- package/lib/{index-B6rTMjdI.js.map → index-C8ubT49C.js.map} +1 -1
- package/lib/{utils-R0j3Raw1.js → utils-B4O1uet5.js} +8 -8
- package/lib/{utils-R0j3Raw1.js.map → utils-B4O1uet5.js.map} +1 -1
- package/lib/zudoku.auth-clerk.js +1 -1
- package/lib/zudoku.auth-openid.js +70 -69
- package/lib/zudoku.auth-openid.js.map +1 -1
- package/lib/zudoku.components.js +2 -2
- package/lib/zudoku.openapi-worker.js +1 -1
- package/lib/zudoku.plugin-api-catalog.js +80 -78
- package/lib/zudoku.plugin-api-catalog.js.map +1 -1
- package/lib/zudoku.plugin-api-keys.js +3 -3
- package/lib/zudoku.plugin-markdown.js +1 -1
- package/lib/zudoku.plugin-openapi.js +3 -3
- package/lib/zudoku.plugin-search-inkeep.js +34 -26
- package/lib/zudoku.plugin-search-inkeep.js.map +1 -1
- package/package.json +5 -5
- package/src/lib/authentication/providers/openid.tsx +5 -3
- package/src/lib/plugins/api-catalog/Catalog.tsx +59 -60
- package/src/lib/plugins/api-catalog/index.tsx +14 -0
- package/src/lib/plugins/search-inkeep/index.tsx +27 -8
- package/lib/OperationList-Bj-6EKhp.js +0 -4889
- package/lib/OperationList-Bj-6EKhp.js.map +0 -1
- package/lib/assets/worker-BmEAZjUP.js.map +0 -1
- package/lib/createServer-BVFp6Bl3.js.map +0 -1
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { useEffect, useMemo, useRef } from "react";
|
|
2
|
+
import { useEffect, useMemo, useRef, useState } from "react";
|
|
3
3
|
import { ClientOnly } from "../../components/ClientOnly.js";
|
|
4
4
|
import { aiChatSettings, baseSettings } from "./inkeep.js";
|
|
5
5
|
const InkeepSearch = ({ prefilledQuery, isOpen, onClose, settings, }) => {
|
|
6
6
|
const ref = useRef(null);
|
|
7
|
+
const widgetRef = useRef(null);
|
|
8
|
+
const [isInkeepAvailable, setIsInkeepAvailable] = useState(typeof Inkeep !== "undefined");
|
|
7
9
|
const config = useMemo(() => ({
|
|
8
10
|
componentType: "CustomTrigger",
|
|
9
11
|
targetElement: ref.current,
|
|
@@ -19,12 +21,24 @@ const InkeepSearch = ({ prefilledQuery, isOpen, onClose, settings, }) => {
|
|
|
19
21
|
},
|
|
20
22
|
}), [isOpen, onClose, prefilledQuery, settings, ref]);
|
|
21
23
|
useEffect(() => {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
24
|
+
if (isInkeepAvailable)
|
|
25
|
+
return;
|
|
26
|
+
const checkInkeep = setInterval(() => {
|
|
27
|
+
if (typeof Inkeep !== "undefined") {
|
|
28
|
+
setIsInkeepAvailable(true);
|
|
29
|
+
clearInterval(checkInkeep);
|
|
30
|
+
}
|
|
31
|
+
}, 100);
|
|
32
|
+
return () => clearInterval(checkInkeep);
|
|
33
|
+
}, [isInkeepAvailable]);
|
|
34
|
+
useEffect(() => {
|
|
35
|
+
if (!isInkeepAvailable || widgetRef.current)
|
|
36
|
+
return;
|
|
37
|
+
widgetRef.current = Inkeep().embed(config);
|
|
38
|
+
}, [config, isInkeepAvailable]);
|
|
39
|
+
useEffect(() => {
|
|
40
|
+
widgetRef.current?.render({ ...config, isOpen });
|
|
41
|
+
}, [config, isOpen]);
|
|
28
42
|
return _jsx("div", { ref: ref });
|
|
29
43
|
};
|
|
30
44
|
export const inkeepSearchPlugin = (settings) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/plugins/search-inkeep/index.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/plugins/search-inkeep/index.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAE5D,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AA0B3D,MAAM,YAAY,GAAG,CAAC,EACpB,cAAc,EACd,MAAM,EACN,OAAO,EACP,QAAQ,GAMT,EAAE,EAAE;IACH,MAAM,GAAG,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IACzC,MAAM,SAAS,GAAG,MAAM,CAAsB,IAAI,CAAC,CAAC;IACpD,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAG,QAAQ,CACxD,OAAO,MAAM,KAAK,WAAW,CAC9B,CAAC;IAEF,MAAM,MAAM,GAAsB,OAAO,CACvC,GAAG,EAAE,CAAC,CAAC;QACL,aAAa,EAAE,eAAe;QAC9B,aAAa,EAAE,GAAG,CAAC,OAAQ;QAC3B,UAAU,EAAE;YACV,MAAM;YACN,OAAO;YACP,MAAM,EAAE,SAAS;YACjB,YAAY,EAAE,EAAE,GAAG,YAAY,EAAE,GAAG,QAAQ,EAAE;YAC9C,cAAc,EAAE;gBACd,cAAc,EAAE,cAAc,IAAI,SAAS;aAC5C;YACD,cAAc;SACf;KACF,CAAC,EACF,CAAC,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,GAAG,CAAC,CACjD,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,iBAAiB;YAAE,OAAO;QAE9B,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE;YACnC,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;gBAClC,oBAAoB,CAAC,IAAI,CAAC,CAAC;gBAC3B,aAAa,CAAC,WAAW,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC,EAAE,GAAG,CAAC,CAAC;QAER,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;IAC1C,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAExB,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,iBAAiB,IAAI,SAAS,CAAC,OAAO;YAAE,OAAO;QAEpD,SAAS,CAAC,OAAO,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC7C,CAAC,EAAE,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAEhC,SAAS,CAAC,GAAG,EAAE;QACb,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACnD,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAErB,OAAO,cAAK,GAAG,EAAE,GAAG,GAAI,CAAC;AAC3B,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,QAAkC,EACpB,EAAE;IAChB,OAAO;QACL,OAAO,EAAE,GAAG,EAAE;YACZ,OAAO,CACL,iBACE,IAAI,EAAC,QAAQ,EACb,GAAG,EAAC,yDAAyD,EAC7D,KAAK,SACL,CACH,CAAC;QACJ,CAAC;QACD,YAAY,EAAE,CAAC,EACb,MAAM,EACN,OAAO,GAIR,EAAE,EAAE;YACH,OAAO,CACL,KAAC,UAAU,cACT,KAAC,YAAY,IAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,GAAI,GAC3D,CACd,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC,CAAC"}
|
package/dist/vite/plugin-api.js
CHANGED
|
@@ -15,7 +15,11 @@ const viteApiPlugin = (getConfig) => {
|
|
|
15
15
|
async load(id, options) {
|
|
16
16
|
if (id === resolvedVirtualModuleId) {
|
|
17
17
|
const config = getConfig();
|
|
18
|
+
if (config.mode === "standalone") {
|
|
19
|
+
return `export const configuredApiPlugins = undefined; export const configuredApiCatalogPlugins = undefined;`;
|
|
20
|
+
}
|
|
18
21
|
const code = [
|
|
22
|
+
`import config from "virtual:zudoku-config";`,
|
|
19
23
|
`import { openApiPlugin } from "zudoku/plugins/openapi";`,
|
|
20
24
|
`import { apiCatalogPlugin } from "zudoku/plugins/api-catalog";`,
|
|
21
25
|
`const configuredApiPlugins = [];`,
|
|
@@ -23,9 +27,9 @@ const viteApiPlugin = (getConfig) => {
|
|
|
23
27
|
];
|
|
24
28
|
if (config.apis) {
|
|
25
29
|
const apis = Array.isArray(config.apis) ? config.apis : [config.apis];
|
|
26
|
-
const catalogs = Array.isArray(config.
|
|
27
|
-
? config.
|
|
28
|
-
: [config.
|
|
30
|
+
const catalogs = Array.isArray(config.catalogs)
|
|
31
|
+
? config.catalogs
|
|
32
|
+
: [config.catalogs];
|
|
29
33
|
const categories = apis
|
|
30
34
|
.flatMap((api) => api.categories ?? [])
|
|
31
35
|
.reduce((acc, catalog) => {
|
|
@@ -71,11 +75,12 @@ const viteApiPlugin = (getConfig) => {
|
|
|
71
75
|
})}));`);
|
|
72
76
|
}
|
|
73
77
|
}
|
|
74
|
-
const
|
|
78
|
+
const categorieList = Array.from(categories.entries()).map(([label, tags]) => ({
|
|
75
79
|
label,
|
|
76
80
|
tags: Array.from(tags),
|
|
77
81
|
}));
|
|
78
|
-
for (
|
|
82
|
+
for (let i = 0; i < catalogs.length; i++) {
|
|
83
|
+
const catalog = catalogs[i];
|
|
79
84
|
if (!catalog) {
|
|
80
85
|
continue;
|
|
81
86
|
}
|
|
@@ -83,9 +88,9 @@ const viteApiPlugin = (getConfig) => {
|
|
|
83
88
|
...catalog,
|
|
84
89
|
items: apiMetadata,
|
|
85
90
|
label: catalog.label,
|
|
86
|
-
categories:
|
|
91
|
+
categories: categorieList,
|
|
87
92
|
};
|
|
88
|
-
code.push(`configuredApiCatalogPlugins.push(apiCatalogPlugin(
|
|
93
|
+
code.push(`configuredApiCatalogPlugins.push(apiCatalogPlugin({`, ` ...${JSON.stringify(apiCatalogConfig, null, 2)},`, ` filterCatalogItems: Array.isArray(config.catalogs)`, ` ? config.catalogs[${i}].filterItems`, ` : config.catalogs.filterItems,`, `}));`);
|
|
89
94
|
}
|
|
90
95
|
}
|
|
91
96
|
code.push(`export { configuredApiPlugins, configuredApiCatalogPlugins };`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-api.js","sourceRoot":"","sources":["../../src/vite/plugin-api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAMtD,MAAM,aAAa,GAAG,CAAC,SAAoC,EAAU,EAAE;IACrE,MAAM,eAAe,GAAG,4BAA4B,CAAC;IACrD,MAAM,uBAAuB,GAAG,IAAI,GAAG,eAAe,CAAC;IAEvD,OAAO;QACL,IAAI,EAAE,oBAAoB;QAC1B,SAAS,CAAC,EAAE;YACV,IAAI,EAAE,KAAK,eAAe,EAAE,CAAC;gBAC3B,OAAO,uBAAuB,CAAC;YACjC,CAAC;QACH,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO;YACpB,IAAI,EAAE,KAAK,uBAAuB,EAAE,CAAC;gBACnC,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;gBAE3B,MAAM,IAAI,GAAG;oBACX,yDAAyD;oBACzD,gEAAgE;oBAChE,kCAAkC;oBAClC,yCAAyC;iBAC1C,CAAC;gBAEF,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;oBAChB,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;oBACtE,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"plugin-api.js","sourceRoot":"","sources":["../../src/vite/plugin-api.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import { j as o } from "./jsx-runtime-Dx-03ztt.js";
|
|
|
2
2
|
import { LogOutIcon as s } from "lucide-react";
|
|
3
3
|
import { useEffect as i } from "react";
|
|
4
4
|
import { b as u, a as r } from "./chunk-D52XG6IA-Dl7HLe6j.js";
|
|
5
|
-
import {
|
|
5
|
+
import { a } from "./utils-B4O1uet5.js";
|
|
6
6
|
const c = () => {
|
|
7
7
|
const t = a(), [n] = u();
|
|
8
8
|
return i(() => {
|
|
@@ -55,4 +55,4 @@ class d {
|
|
|
55
55
|
export {
|
|
56
56
|
d as A
|
|
57
57
|
};
|
|
58
|
-
//# sourceMappingURL=AuthenticationPlugin-
|
|
58
|
+
//# sourceMappingURL=AuthenticationPlugin-fB7viE7A.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuthenticationPlugin-
|
|
1
|
+
{"version":3,"file":"AuthenticationPlugin-fB7viE7A.js","sources":["../src/lib/authentication/components/SignIn.tsx","../src/lib/authentication/components/SignOut.tsx","../src/lib/authentication/components/SignUp.tsx","../src/lib/authentication/AuthenticationPlugin.tsx"],"sourcesContent":["import { useEffect } from \"react\";\nimport { useSearchParams } from \"react-router\";\nimport { useZudoku } from \"../../components/context/ZudokuContext.js\";\n\nexport const SignIn = () => {\n const context = useZudoku();\n const [search] = useSearchParams();\n useEffect(() => {\n void context.authentication?.signIn({\n redirectTo: search.get(\"redirect\") ?? undefined,\n });\n }, [context.authentication, search]);\n\n return null;\n};\n","import { useEffect } from \"react\";\nimport { useNavigate } from \"react-router\";\nimport { useZudoku } from \"../../components/context/ZudokuContext.js\";\n\nexport const SignOut = () => {\n const context = useZudoku();\n const navigate = useNavigate();\n useEffect(() => {\n void context.authentication?.signOut().then(() => navigate(\"/\"));\n }, [navigate, context.authentication]);\n\n return null;\n};\n","import { useEffect } from \"react\";\nimport { useZudoku } from \"../../components/context/ZudokuContext.js\";\n\nexport const SignUp = () => {\n const context = useZudoku();\n useEffect(() => {\n void (context.authentication?.signUp() ?? context.authentication?.signIn());\n }, [context.authentication]);\n\n return null;\n};\n","import { LogOutIcon } from \"lucide-react\";\nimport {\n CommonPlugin,\n NavigationPlugin,\n ProfileMenuPlugin,\n} from \"../core/plugins.js\";\nimport { SignIn } from \"./components/SignIn.js\";\nimport { SignOut } from \"./components/SignOut.js\";\nimport { SignUp } from \"./components/SignUp.js\";\n\ntype PluginInterface = NavigationPlugin & CommonPlugin & ProfileMenuPlugin;\n\nexport class AuthenticationPlugin implements PluginInterface {\n getRoutes() {\n return [\n {\n path: \"/signout\",\n element: <SignOut />,\n },\n {\n path: \"/signin\",\n element: <SignIn />,\n },\n {\n path: \"/signup\",\n element: <SignUp />,\n },\n ];\n }\n\n getProfileMenuItems() {\n return [\n {\n label: \"Logout\",\n path: \"/signout\",\n category: \"bottom\",\n icon: LogOutIcon,\n } as const,\n ];\n }\n}\n"],"names":["SignIn","context","useZudoku","search","useSearchParams","useEffect","_a","SignOut","navigate","useNavigate","SignUp","_b","AuthenticationPlugin","LogOutIcon"],"mappings":";;;;;AAIO,MAAMA,IAAS,MAAM;AAC1B,QAAMC,IAAUC,EAAU,GACpB,CAACC,CAAM,IAAIC,EAAgB;AACjC,SAAAC,EAAU,MAAM;;AACT,KAAAC,IAAAL,EAAQ,mBAAR,QAAAK,EAAwB,OAAO;AAAA,MAClC,YAAYH,EAAO,IAAI,UAAU,KAAK;AAAA,IAAA;AAAA,EAEvC,GAAA,CAACF,EAAQ,gBAAgBE,CAAM,CAAC,GAE5B;AACT,GCVaI,IAAU,MAAM;AAC3B,QAAMN,IAAUC,EAAU,GACpBM,IAAWC,EAAY;AAC7B,SAAAJ,EAAU,MAAM;;AACT,KAAAC,IAAAL,EAAQ,mBAAR,QAAAK,EAAwB,UAAU,KAAK,MAAME,EAAS,GAAG;AAAA,EAC7D,GAAA,CAACA,GAAUP,EAAQ,cAAc,CAAC,GAE9B;AACT,GCTaS,IAAS,MAAM;AAC1B,QAAMT,IAAUC,EAAU;AAC1B,SAAAG,EAAU,MAAM;;AACd,MAAMC,IAAAL,EAAQ,mBAAR,gBAAAK,EAAwB,eAAYK,IAAAV,EAAQ,mBAAR,QAAAU,EAAwB;AAAA,EAAO,GACxE,CAACV,EAAQ,cAAc,CAAC,GAEpB;AACT;ACEO,MAAMW,EAAgD;AAAA,EAC3D,YAAY;AACH,WAAA;AAAA,MACL;AAAA,QACE,MAAM;AAAA,QACN,+BAAUL,GAAQ,CAAA,CAAA;AAAA,MACpB;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,+BAAUP,GAAO,CAAA,CAAA;AAAA,MACnB;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,+BAAUU,GAAO,CAAA,CAAA;AAAA,MAAA;AAAA,IAErB;AAAA,EAAA;AAAA,EAGF,sBAAsB;AACb,WAAA;AAAA,MACL;AAAA,QACE,OAAO;AAAA,QACP,MAAM;AAAA,QACN,UAAU;AAAA,QACV,MAAMG;AAAA,MAAA;AAAA,IAEV;AAAA,EAAA;AAEJ;"}
|
|
@@ -5,14 +5,14 @@ import { useRef as v, useState as P, useEffect as N } from "react";
|
|
|
5
5
|
import { L as y } from "./chunk-D52XG6IA-Dl7HLe6j.js";
|
|
6
6
|
import { C as _ } from "./CategoryHeading-CBconmtI.js";
|
|
7
7
|
import { u as H, P as I, H as h } from "./Markdown-CZDLNOFc.js";
|
|
8
|
-
import {
|
|
8
|
+
import { b as S, d as L } from "./utils-B4O1uet5.js";
|
|
9
9
|
import { c as p } from "./cn-qaFjX9_3.js";
|
|
10
10
|
import { ListTreeIcon as $ } from "lucide-react";
|
|
11
11
|
import { A as D, u as M } from "./AnchorLink-DFZZbmvr.js";
|
|
12
12
|
const w = "data-active", b = ({
|
|
13
13
|
item: s,
|
|
14
14
|
children: t,
|
|
15
|
-
className:
|
|
15
|
+
className: o,
|
|
16
16
|
isActive: r
|
|
17
17
|
}) => /* @__PURE__ */ e.jsxs(
|
|
18
18
|
"li",
|
|
@@ -20,7 +20,7 @@ const w = "data-active", b = ({
|
|
|
20
20
|
className: p(
|
|
21
21
|
"truncate",
|
|
22
22
|
r ? "text-primary" : "text-foreground/65 dark:text-foreground/75",
|
|
23
|
-
|
|
23
|
+
o
|
|
24
24
|
),
|
|
25
25
|
title: s.value,
|
|
26
26
|
children: [
|
|
@@ -39,23 +39,23 @@ const w = "data-active", b = ({
|
|
|
39
39
|
]
|
|
40
40
|
}
|
|
41
41
|
), q = ({ entries: s }) => {
|
|
42
|
-
const { activeAnchor: t } = H(),
|
|
42
|
+
const { activeAnchor: t } = H(), o = v(null), r = v(!1), [c, l] = P({
|
|
43
43
|
top: 0,
|
|
44
44
|
opacity: 0
|
|
45
45
|
});
|
|
46
46
|
return N(() => {
|
|
47
|
-
if (!
|
|
48
|
-
const n =
|
|
47
|
+
if (!o.current) return;
|
|
48
|
+
const n = o.current.querySelector(
|
|
49
49
|
`[${w}='${t}']`
|
|
50
50
|
);
|
|
51
51
|
if (!n) {
|
|
52
52
|
l({ top: 0, opacity: 0 });
|
|
53
53
|
return;
|
|
54
54
|
}
|
|
55
|
-
const
|
|
55
|
+
const a = o.current.getBoundingClientRect().top, d = n.getBoundingClientRect().top;
|
|
56
56
|
l({
|
|
57
57
|
opacity: 1,
|
|
58
|
-
top: `${d -
|
|
58
|
+
top: `${d - a}px`
|
|
59
59
|
}), !r.current && requestIdleCallback(() => {
|
|
60
60
|
r.current = !0;
|
|
61
61
|
});
|
|
@@ -79,7 +79,7 @@ const w = "data-active", b = ({
|
|
|
79
79
|
/* @__PURE__ */ e.jsx(
|
|
80
80
|
"ul",
|
|
81
81
|
{
|
|
82
|
-
ref:
|
|
82
|
+
ref: o,
|
|
83
83
|
className: "relative font-medium list-none space-y-2",
|
|
84
84
|
children: s.map((n) => /* @__PURE__ */ e.jsx(
|
|
85
85
|
b,
|
|
@@ -87,13 +87,13 @@ const w = "data-active", b = ({
|
|
|
87
87
|
isActive: n.id === t,
|
|
88
88
|
item: n,
|
|
89
89
|
className: "pl-0",
|
|
90
|
-
children: n.children && /* @__PURE__ */ e.jsx("ul", { className: "list-none pl-4 pt-2 space-y-2", children: n.children.map((
|
|
90
|
+
children: n.children && /* @__PURE__ */ e.jsx("ul", { className: "list-none pl-4 pt-2 space-y-2", children: n.children.map((a) => /* @__PURE__ */ e.jsx(
|
|
91
91
|
b,
|
|
92
92
|
{
|
|
93
|
-
item:
|
|
94
|
-
isActive:
|
|
93
|
+
item: a,
|
|
94
|
+
isActive: a.id === t
|
|
95
95
|
},
|
|
96
|
-
|
|
96
|
+
a.id
|
|
97
97
|
)) })
|
|
98
98
|
},
|
|
99
99
|
n.id
|
|
@@ -108,13 +108,13 @@ const w = "data-active", b = ({
|
|
|
108
108
|
}, Z = ({
|
|
109
109
|
mdxComponent: s,
|
|
110
110
|
file: t,
|
|
111
|
-
frontmatter:
|
|
111
|
+
frontmatter: o = {},
|
|
112
112
|
defaultOptions: r,
|
|
113
113
|
tableOfContents: c,
|
|
114
114
|
excerpt: l
|
|
115
115
|
}) => {
|
|
116
116
|
var g, f, j;
|
|
117
|
-
const n = (g = S()) == null ? void 0 : g.categoryLabel,
|
|
117
|
+
const n = (g = S()) == null ? void 0 : g.categoryLabel, a = o.title, d = o.category ?? n, A = o.toc === !1 || (r == null ? void 0 : r.toc) === !1, R = ((f = c.find((i) => i.depth === 1)) == null ? void 0 : f.value) ?? a, T = o.disablePager ?? (r == null ? void 0 : r.disablePager) ?? !1, u = ((j = c.find((i) => i.depth === 1)) == null ? void 0 : j.children) ?? // if `title` is provided by frontmatter it does not appear in the table of contents
|
|
118
118
|
c.filter((i) => i.depth === 2), k = !A && u.length > 0, { prev: x, next: m } = L();
|
|
119
119
|
return N(() => {
|
|
120
120
|
if (process.env.NODE_ENV === "development")
|
|
@@ -137,9 +137,9 @@ const w = "data-active", b = ({
|
|
|
137
137
|
"max-w-full xl:w-full xl:max-w-prose flex-1 flex-shrink pt-[--padding-content-top] pb-[--padding-content-bottom]"
|
|
138
138
|
),
|
|
139
139
|
children: [
|
|
140
|
-
(d ||
|
|
140
|
+
(d || a) && /* @__PURE__ */ e.jsxs("header", { children: [
|
|
141
141
|
d && /* @__PURE__ */ e.jsx(_, { children: d }),
|
|
142
|
-
|
|
142
|
+
a && /* @__PURE__ */ e.jsx(h, { level: 1, id: C(a), children: a })
|
|
143
143
|
] }),
|
|
144
144
|
/* @__PURE__ */ e.jsx(
|
|
145
145
|
s,
|
|
@@ -185,4 +185,4 @@ const w = "data-active", b = ({
|
|
|
185
185
|
export {
|
|
186
186
|
Z as MdxPage
|
|
187
187
|
};
|
|
188
|
-
//# sourceMappingURL=MdxPage-
|
|
188
|
+
//# sourceMappingURL=MdxPage-CPBw4_lf.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MdxPage-CBa4X6L5.js","sources":["../src/lib/plugins/markdown/Toc.tsx","../src/lib/plugins/markdown/MdxPage.tsx"],"sourcesContent":["import type { TocEntry } from \"@stefanprobst/rehype-extract-toc\";\nimport { ListTreeIcon } from \"lucide-react\";\nimport {\n useEffect,\n useRef,\n useState,\n type CSSProperties,\n type PropsWithChildren,\n} from \"react\";\nimport { AnchorLink } from \"../../components/AnchorLink.js\";\nimport { useViewportAnchor } from \"../../components/context/ViewportAnchorContext.js\";\nimport { cn } from \"../../util/cn.js\";\n\nconst DATA_ANCHOR_ATTR = \"data-active\";\n\nconst TocItem = ({\n item,\n children,\n className,\n isActive,\n}: PropsWithChildren<{\n item: TocEntry;\n isActive: boolean;\n className?: string;\n}>) => {\n return (\n <li\n className={cn(\n \"truncate\",\n isActive\n ? \"text-primary\"\n : \"text-foreground/65 dark:text-foreground/75\",\n className,\n )}\n title={item.value}\n >\n <AnchorLink\n to={`#${item.id}`}\n {...{ [DATA_ANCHOR_ATTR]: item.id }}\n className={cn(\n isActive\n ? \"text-primary\"\n : \"text-foreground/65 dark:text-foreground/75 hover:text-foreground\",\n )}\n >\n {item.value}\n </AnchorLink>\n {children}\n </li>\n );\n};\n\nexport const Toc = ({ entries }: { entries: TocEntry[] }) => {\n const { activeAnchor } = useViewportAnchor();\n const listWrapperRef = useRef<HTMLUListElement>(null);\n const paintedOnce = useRef(false);\n const [indicatorStyle, setIndicatorStyles] = useState<CSSProperties>({\n top: 0,\n opacity: 0,\n });\n\n // synchronize active anchor indicator with the scroll position\n useEffect(() => {\n if (!listWrapperRef.current) return;\n\n const activeElement = listWrapperRef.current.querySelector(\n `[${DATA_ANCHOR_ATTR}='${activeAnchor}']`,\n );\n\n if (!activeElement) {\n setIndicatorStyles({ top: 0, opacity: 0 });\n return;\n }\n\n const topParent = listWrapperRef.current.getBoundingClientRect().top;\n const topElement = activeElement.getBoundingClientRect().top;\n\n setIndicatorStyles({\n opacity: 1,\n top: `${topElement - topParent}px`,\n });\n\n if (paintedOnce.current) return;\n\n // after all is painted, the indicator should animate\n requestIdleCallback(() => {\n paintedOnce.current = true;\n });\n }, [activeAnchor]);\n\n return (\n <aside className=\"sticky scrollbar top-[--header-height] h-[calc(100vh-var(--header-height))] pt-[--padding-content-top] pb-[--padding-content-bottom] overflow-y-auto ps-1 text-sm\">\n <div className=\"flex items-center gap-2 font-medium mb-2\">\n <ListTreeIcon size={16} />\n On this page\n </div>\n <div className=\"relative ms-2 ps-4\">\n <div className=\"absolute inset-0 right-auto bg-border w-[2px]\" />\n <div\n className={cn(\n \"absolute -left-px -translate-y-1 h-6 w-[4px] rounded bg-primary\",\n paintedOnce.current &&\n \"ease-out [transition:top_150ms,opacity_325ms]\",\n )}\n style={indicatorStyle}\n />\n <ul\n ref={listWrapperRef}\n className=\"relative font-medium list-none space-y-2\"\n >\n {entries.map((item) => (\n <TocItem\n isActive={item.id === activeAnchor}\n key={item.id}\n item={item}\n className=\"pl-0\"\n >\n {item.children && (\n <ul className=\"list-none pl-4 pt-2 space-y-2\">\n {item.children.map((child) => (\n <TocItem\n item={child}\n isActive={child.id === activeAnchor}\n key={child.id}\n />\n ))}\n </ul>\n )}\n </TocItem>\n ))}\n </ul>\n </div>\n </aside>\n );\n};\n","import { useMDXComponents } from \"@mdx-js/react\";\nimport slugify from \"@sindresorhus/slugify\";\nimport { Helmet } from \"@zudoku/react-helmet-async\";\nimport { type PropsWithChildren, useEffect } from \"react\";\nimport { Link } from \"react-router\";\nimport { CategoryHeading } from \"../../components/CategoryHeading.js\";\nimport { Heading } from \"../../components/Heading.js\";\nimport { ProseClasses } from \"../../components/Markdown.js\";\nimport {\n useCurrentItem,\n usePrevNext,\n} from \"../../components/navigation/utils.js\";\nimport type { MdxComponentsType } from \"../../util/MdxComponents.js\";\nimport { cn } from \"../../util/cn.js\";\nimport { Toc } from \"./Toc.js\";\nimport { MarkdownPluginDefaultOptions, MDXImport } from \"./index.js\";\n\ndeclare global {\n interface Window {\n __getReactRefreshIgnoredExports?: (args: {\n id: string;\n }) => string[] | undefined;\n }\n}\n\nconst MarkdownHeadings = {\n h2: ({ children, id }) => (\n <Heading level={2} id={id} registerSidebarAnchor>\n {children}\n </Heading>\n ),\n h3: ({ children, id }) => (\n <Heading level={3} id={id} registerSidebarAnchor>\n {children}\n </Heading>\n ),\n} satisfies MdxComponentsType;\n\nexport const MdxPage = ({\n mdxComponent: MdxComponent,\n file,\n frontmatter = {},\n defaultOptions,\n tableOfContents,\n excerpt,\n}: PropsWithChildren<\n Omit<MDXImport, \"default\"> & {\n file: string;\n mdxComponent: MDXImport[\"default\"];\n defaultOptions?: MarkdownPluginDefaultOptions;\n }\n>) => {\n const categoryTitle = useCurrentItem()?.categoryLabel;\n const title = frontmatter.title;\n const category = frontmatter.category ?? categoryTitle;\n const hideToc = frontmatter.toc === false || defaultOptions?.toc === false;\n const pageTitle =\n tableOfContents.find((item) => item.depth === 1)?.value ?? title;\n const hidePager =\n frontmatter.disablePager ?? defaultOptions?.disablePager ?? false;\n\n const tocEntries =\n tableOfContents.find((item) => item.depth === 1)?.children ??\n // if `title` is provided by frontmatter it does not appear in the table of contents\n tableOfContents.filter((item) => item.depth === 2);\n\n const showToc = !hideToc && tocEntries.length > 0;\n\n const { prev, next } = usePrevNext();\n\n useEffect(() => {\n if (process.env.NODE_ENV === \"development\") {\n window.__getReactRefreshIgnoredExports = ({ id }) => {\n if (!id.endsWith(file)) return;\n\n return [\"frontmatter\", \"tableOfContents\"];\n };\n\n return () => {\n window.__getReactRefreshIgnoredExports = undefined;\n };\n }\n }, [file]);\n\n return (\n <div className=\"xl:grid grid-cols-[--sidecar-grid-cols] gap-8 justify-between\">\n <Helmet>\n <title>{pageTitle}</title>\n {excerpt && <meta name=\"description\" content={excerpt} />}\n </Helmet>\n <div\n className={cn(\n ProseClasses,\n \"max-w-full xl:w-full xl:max-w-prose flex-1 flex-shrink pt-[--padding-content-top] pb-[--padding-content-bottom]\",\n )}\n >\n {(category || title) && (\n <header>\n {category && <CategoryHeading>{category}</CategoryHeading>}\n {title && (\n <Heading level={1} id={slugify(title)}>\n {title}\n </Heading>\n )}\n </header>\n )}\n <MdxComponent\n components={{ ...useMDXComponents(), ...MarkdownHeadings }}\n />\n {!hidePager && (\n <>\n <hr />\n <div className=\"not-prose flex flex-wrap items-center justify-between gap-2 lg:gap-8\">\n {prev ? (\n <Link\n to={prev.id}\n className=\"flex flex-col items-stretch gap-2 flex-1 min-w-max border rounded px-6 py-4 text-start hover:border-primary/85 transition shadow-sm hover:shadow-md\"\n title={prev.label}\n >\n <div className=\"text-sm text-muted-foreground\">\n ← Previous page\n </div>\n <div className=\"text-lg text-primary truncate\">\n {prev.label}\n </div>\n </Link>\n ) : (\n <div className=\"flex-1\" />\n )}\n {next ? (\n <Link\n to={next.id}\n className=\"flex flex-col items-stretch gap-2 flex-1 min-w-max border rounded px-6 py-4 text-end hover:border-primary/85 transition shadow-sm hover:shadow-md\"\n title={next.label}\n >\n <div className=\"text-sm text-muted-foreground\">\n Next page →\n </div>\n <div className=\"text-lg text-primary truncate\">\n {next.label}\n </div>\n </Link>\n ) : (\n <div className=\"flex-1\" />\n )}\n </div>\n </>\n )}\n </div>\n <div className=\"hidden xl:block\">\n {showToc && <Toc entries={tocEntries} />}\n </div>\n </div>\n );\n};\n"],"names":["DATA_ANCHOR_ATTR","TocItem","item","children","className","isActive","jsxs","cn","jsx","AnchorLink","Toc","entries","activeAnchor","useViewportAnchor","listWrapperRef","useRef","paintedOnce","indicatorStyle","setIndicatorStyles","useState","useEffect","activeElement","topParent","topElement","ListTreeIcon","child","MarkdownHeadings","id","Heading","MdxPage","MdxComponent","file","frontmatter","defaultOptions","tableOfContents","excerpt","categoryTitle","_a","useCurrentItem","title","category","hideToc","pageTitle","_b","hidePager","tocEntries","_c","showToc","prev","next","usePrevNext","Helmet","ProseClasses","CategoryHeading","slugify","useMDXComponents","Fragment","Link"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MdxPage-CPBw4_lf.js","sources":["../src/lib/plugins/markdown/Toc.tsx","../src/lib/plugins/markdown/MdxPage.tsx"],"sourcesContent":["import type { TocEntry } from \"@stefanprobst/rehype-extract-toc\";\nimport { ListTreeIcon } from \"lucide-react\";\nimport {\n useEffect,\n useRef,\n useState,\n type CSSProperties,\n type PropsWithChildren,\n} from \"react\";\nimport { AnchorLink } from \"../../components/AnchorLink.js\";\nimport { useViewportAnchor } from \"../../components/context/ViewportAnchorContext.js\";\nimport { cn } from \"../../util/cn.js\";\n\nconst DATA_ANCHOR_ATTR = \"data-active\";\n\nconst TocItem = ({\n item,\n children,\n className,\n isActive,\n}: PropsWithChildren<{\n item: TocEntry;\n isActive: boolean;\n className?: string;\n}>) => {\n return (\n <li\n className={cn(\n \"truncate\",\n isActive\n ? \"text-primary\"\n : \"text-foreground/65 dark:text-foreground/75\",\n className,\n )}\n title={item.value}\n >\n <AnchorLink\n to={`#${item.id}`}\n {...{ [DATA_ANCHOR_ATTR]: item.id }}\n className={cn(\n isActive\n ? \"text-primary\"\n : \"text-foreground/65 dark:text-foreground/75 hover:text-foreground\",\n )}\n >\n {item.value}\n </AnchorLink>\n {children}\n </li>\n );\n};\n\nexport const Toc = ({ entries }: { entries: TocEntry[] }) => {\n const { activeAnchor } = useViewportAnchor();\n const listWrapperRef = useRef<HTMLUListElement>(null);\n const paintedOnce = useRef(false);\n const [indicatorStyle, setIndicatorStyles] = useState<CSSProperties>({\n top: 0,\n opacity: 0,\n });\n\n // synchronize active anchor indicator with the scroll position\n useEffect(() => {\n if (!listWrapperRef.current) return;\n\n const activeElement = listWrapperRef.current.querySelector(\n `[${DATA_ANCHOR_ATTR}='${activeAnchor}']`,\n );\n\n if (!activeElement) {\n setIndicatorStyles({ top: 0, opacity: 0 });\n return;\n }\n\n const topParent = listWrapperRef.current.getBoundingClientRect().top;\n const topElement = activeElement.getBoundingClientRect().top;\n\n setIndicatorStyles({\n opacity: 1,\n top: `${topElement - topParent}px`,\n });\n\n if (paintedOnce.current) return;\n\n // after all is painted, the indicator should animate\n requestIdleCallback(() => {\n paintedOnce.current = true;\n });\n }, [activeAnchor]);\n\n return (\n <aside className=\"sticky scrollbar top-[--header-height] h-[calc(100vh-var(--header-height))] pt-[--padding-content-top] pb-[--padding-content-bottom] overflow-y-auto ps-1 text-sm\">\n <div className=\"flex items-center gap-2 font-medium mb-2\">\n <ListTreeIcon size={16} />\n On this page\n </div>\n <div className=\"relative ms-2 ps-4\">\n <div className=\"absolute inset-0 right-auto bg-border w-[2px]\" />\n <div\n className={cn(\n \"absolute -left-px -translate-y-1 h-6 w-[4px] rounded bg-primary\",\n paintedOnce.current &&\n \"ease-out [transition:top_150ms,opacity_325ms]\",\n )}\n style={indicatorStyle}\n />\n <ul\n ref={listWrapperRef}\n className=\"relative font-medium list-none space-y-2\"\n >\n {entries.map((item) => (\n <TocItem\n isActive={item.id === activeAnchor}\n key={item.id}\n item={item}\n className=\"pl-0\"\n >\n {item.children && (\n <ul className=\"list-none pl-4 pt-2 space-y-2\">\n {item.children.map((child) => (\n <TocItem\n item={child}\n isActive={child.id === activeAnchor}\n key={child.id}\n />\n ))}\n </ul>\n )}\n </TocItem>\n ))}\n </ul>\n </div>\n </aside>\n );\n};\n","import { useMDXComponents } from \"@mdx-js/react\";\nimport slugify from \"@sindresorhus/slugify\";\nimport { Helmet } from \"@zudoku/react-helmet-async\";\nimport { type PropsWithChildren, useEffect } from \"react\";\nimport { Link } from \"react-router\";\nimport { CategoryHeading } from \"../../components/CategoryHeading.js\";\nimport { Heading } from \"../../components/Heading.js\";\nimport { ProseClasses } from \"../../components/Markdown.js\";\nimport {\n useCurrentItem,\n usePrevNext,\n} from \"../../components/navigation/utils.js\";\nimport type { MdxComponentsType } from \"../../util/MdxComponents.js\";\nimport { cn } from \"../../util/cn.js\";\nimport { Toc } from \"./Toc.js\";\nimport { MarkdownPluginDefaultOptions, MDXImport } from \"./index.js\";\n\ndeclare global {\n interface Window {\n __getReactRefreshIgnoredExports?: (args: {\n id: string;\n }) => string[] | undefined;\n }\n}\n\nconst MarkdownHeadings = {\n h2: ({ children, id }) => (\n <Heading level={2} id={id} registerSidebarAnchor>\n {children}\n </Heading>\n ),\n h3: ({ children, id }) => (\n <Heading level={3} id={id} registerSidebarAnchor>\n {children}\n </Heading>\n ),\n} satisfies MdxComponentsType;\n\nexport const MdxPage = ({\n mdxComponent: MdxComponent,\n file,\n frontmatter = {},\n defaultOptions,\n tableOfContents,\n excerpt,\n}: PropsWithChildren<\n Omit<MDXImport, \"default\"> & {\n file: string;\n mdxComponent: MDXImport[\"default\"];\n defaultOptions?: MarkdownPluginDefaultOptions;\n }\n>) => {\n const categoryTitle = useCurrentItem()?.categoryLabel;\n const title = frontmatter.title;\n const category = frontmatter.category ?? categoryTitle;\n const hideToc = frontmatter.toc === false || defaultOptions?.toc === false;\n const pageTitle =\n tableOfContents.find((item) => item.depth === 1)?.value ?? title;\n const hidePager =\n frontmatter.disablePager ?? defaultOptions?.disablePager ?? false;\n\n const tocEntries =\n tableOfContents.find((item) => item.depth === 1)?.children ??\n // if `title` is provided by frontmatter it does not appear in the table of contents\n tableOfContents.filter((item) => item.depth === 2);\n\n const showToc = !hideToc && tocEntries.length > 0;\n\n const { prev, next } = usePrevNext();\n\n useEffect(() => {\n if (process.env.NODE_ENV === \"development\") {\n window.__getReactRefreshIgnoredExports = ({ id }) => {\n if (!id.endsWith(file)) return;\n\n return [\"frontmatter\", \"tableOfContents\"];\n };\n\n return () => {\n window.__getReactRefreshIgnoredExports = undefined;\n };\n }\n }, [file]);\n\n return (\n <div className=\"xl:grid grid-cols-[--sidecar-grid-cols] gap-8 justify-between\">\n <Helmet>\n <title>{pageTitle}</title>\n {excerpt && <meta name=\"description\" content={excerpt} />}\n </Helmet>\n <div\n className={cn(\n ProseClasses,\n \"max-w-full xl:w-full xl:max-w-prose flex-1 flex-shrink pt-[--padding-content-top] pb-[--padding-content-bottom]\",\n )}\n >\n {(category || title) && (\n <header>\n {category && <CategoryHeading>{category}</CategoryHeading>}\n {title && (\n <Heading level={1} id={slugify(title)}>\n {title}\n </Heading>\n )}\n </header>\n )}\n <MdxComponent\n components={{ ...useMDXComponents(), ...MarkdownHeadings }}\n />\n {!hidePager && (\n <>\n <hr />\n <div className=\"not-prose flex flex-wrap items-center justify-between gap-2 lg:gap-8\">\n {prev ? (\n <Link\n to={prev.id}\n className=\"flex flex-col items-stretch gap-2 flex-1 min-w-max border rounded px-6 py-4 text-start hover:border-primary/85 transition shadow-sm hover:shadow-md\"\n title={prev.label}\n >\n <div className=\"text-sm text-muted-foreground\">\n ← Previous page\n </div>\n <div className=\"text-lg text-primary truncate\">\n {prev.label}\n </div>\n </Link>\n ) : (\n <div className=\"flex-1\" />\n )}\n {next ? (\n <Link\n to={next.id}\n className=\"flex flex-col items-stretch gap-2 flex-1 min-w-max border rounded px-6 py-4 text-end hover:border-primary/85 transition shadow-sm hover:shadow-md\"\n title={next.label}\n >\n <div className=\"text-sm text-muted-foreground\">\n Next page →\n </div>\n <div className=\"text-lg text-primary truncate\">\n {next.label}\n </div>\n </Link>\n ) : (\n <div className=\"flex-1\" />\n )}\n </div>\n </>\n )}\n </div>\n <div className=\"hidden xl:block\">\n {showToc && <Toc entries={tocEntries} />}\n </div>\n </div>\n );\n};\n"],"names":["DATA_ANCHOR_ATTR","TocItem","item","children","className","isActive","jsxs","cn","jsx","AnchorLink","Toc","entries","activeAnchor","useViewportAnchor","listWrapperRef","useRef","paintedOnce","indicatorStyle","setIndicatorStyles","useState","useEffect","activeElement","topParent","topElement","ListTreeIcon","child","MarkdownHeadings","id","Heading","MdxPage","MdxComponent","file","frontmatter","defaultOptions","tableOfContents","excerpt","categoryTitle","_a","useCurrentItem","title","category","hideToc","pageTitle","_b","hidePager","tocEntries","_c","showToc","prev","next","usePrevNext","Helmet","ProseClasses","CategoryHeading","slugify","useMDXComponents","Fragment","Link"],"mappings":";;;;;;;;;;;AAaA,MAAMA,IAAmB,eAEnBC,IAAU,CAAC;AAAA,EACf,MAAAC;AAAA,EACA,UAAAC;AAAA,EACA,WAAAC;AAAA,EACA,UAAAC;AACF,MAMIC,gBAAAA,EAAA;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,WAAWC;AAAA,MACT;AAAA,MACAF,IACI,iBACA;AAAA,MACJD;AAAA,IACF;AAAA,IACA,OAAOF,EAAK;AAAA,IAEZ,UAAA;AAAA,MAAAM,gBAAAA,EAAA;AAAA,QAACC;AAAA,QAAA;AAAA,UACC,IAAI,IAAIP,EAAK,EAAE;AAAA,UACT,CAACF,CAAgB,GAAGE,EAAK;AAAA,UAC/B,WAAWK;AAAA,YACTF,IACI,iBACA;AAAA,UACN;AAAA,UAEC,UAAKH,EAAA;AAAA,QAAA;AAAA,MACR;AAAA,MACCC;AAAA,IAAA;AAAA,EAAA;AACH,GAISO,IAAM,CAAC,EAAE,SAAAC,QAAuC;AACrD,QAAA,EAAE,cAAAC,EAAa,IAAIC,EAAkB,GACrCC,IAAiBC,EAAyB,IAAI,GAC9CC,IAAcD,EAAO,EAAK,GAC1B,CAACE,GAAgBC,CAAkB,IAAIC,EAAwB;AAAA,IACnE,KAAK;AAAA,IACL,SAAS;AAAA,EAAA,CACV;AAGD,SAAAC,EAAU,MAAM;AACV,QAAA,CAACN,EAAe,QAAS;AAEvB,UAAAO,IAAgBP,EAAe,QAAQ;AAAA,MAC3C,IAAId,CAAgB,KAAKY,CAAY;AAAA,IACvC;AAEA,QAAI,CAACS,GAAe;AAClB,MAAAH,EAAmB,EAAE,KAAK,GAAG,SAAS,GAAG;AACzC;AAAA,IAAA;AAGF,UAAMI,IAAYR,EAAe,QAAQ,sBAAwB,EAAA,KAC3DS,IAAaF,EAAc,sBAAA,EAAwB;AAOzD,IALmBH,EAAA;AAAA,MACjB,SAAS;AAAA,MACT,KAAK,GAAGK,IAAaD,CAAS;AAAA,IAAA,CAC/B,GAEG,CAAAN,EAAY,WAGhB,oBAAoB,MAAM;AACxB,MAAAA,EAAY,UAAU;AAAA,IAAA,CACvB;AAAA,EAAA,GACA,CAACJ,CAAY,CAAC,GAGfN,gBAAAA,EAAA,KAAC,SAAM,EAAA,WAAU,qKACf,UAAA;AAAA,IAACA,gBAAAA,EAAAA,KAAA,OAAA,EAAI,WAAU,4CACb,UAAA;AAAA,MAACE,gBAAAA,EAAAA,IAAAgB,GAAA,EAAa,MAAM,GAAI,CAAA;AAAA,MAAE;AAAA,IAAA,GAE5B;AAAA,IACAlB,gBAAAA,EAAAA,KAAC,OAAI,EAAA,WAAU,sBACb,UAAA;AAAA,MAACE,gBAAAA,EAAAA,IAAA,OAAA,EAAI,WAAU,gDAAgD,CAAA;AAAA,MAC/DA,gBAAAA,EAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAWD;AAAA,YACT;AAAA,YACAS,EAAY,WACV;AAAA,UACJ;AAAA,UACA,OAAOC;AAAA,QAAA;AAAA,MACT;AAAA,MACAT,gBAAAA,EAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,KAAKM;AAAA,UACL,WAAU;AAAA,UAET,UAAAH,EAAQ,IAAI,CAACT,MACZM,gBAAAA,EAAA;AAAA,YAACP;AAAA,YAAA;AAAA,cACC,UAAUC,EAAK,OAAOU;AAAA,cAEtB,MAAAV;AAAA,cACA,WAAU;AAAA,cAET,UAAAA,EAAK,YACJM,gBAAAA,EAAAA,IAAC,MAAG,EAAA,WAAU,iCACX,UAAKN,EAAA,SAAS,IAAI,CAACuB,MAClBjB,gBAAAA,EAAA;AAAA,gBAACP;AAAA,gBAAA;AAAA,kBACC,MAAMwB;AAAA,kBACN,UAAUA,EAAM,OAAOb;AAAA,gBAAA;AAAA,gBAClBa,EAAM;AAAA,cAAA,CAEd,EACH,CAAA;AAAA,YAAA;AAAA,YAbGvB,EAAK;AAAA,UAgBb,CAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IACH,EACF,CAAA;AAAA,EAAA,GACF;AAEJ,GC7GMwB,IAAmB;AAAA,EACvB,IAAI,CAAC,EAAE,UAAAvB,GAAU,IAAAwB,EAAG,MACjBnB,gBAAAA,EAAA,IAAAoB,GAAA,EAAQ,OAAO,GAAG,IAAAD,GAAQ,uBAAqB,IAC7C,UAAAxB,EACH,CAAA;AAAA,EAEF,IAAI,CAAC,EAAE,UAAAA,GAAU,IAAAwB,EAAG,MACjBnB,gBAAAA,EAAAA,IAAAoB,GAAA,EAAQ,OAAO,GAAG,IAAAD,GAAQ,uBAAqB,IAC7C,UAAAxB,EACH,CAAA;AAEJ,GAEa0B,IAAU,CAAC;AAAA,EACtB,cAAcC;AAAA,EACd,MAAAC;AAAA,EACA,aAAAC,IAAc,CAAC;AAAA,EACf,gBAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,SAAAC;AACF,MAMM;;AACE,QAAAC,KAAgBC,IAAAC,QAAA,gBAAAD,EAAkB,eAClCE,IAAQP,EAAY,OACpBQ,IAAWR,EAAY,YAAYI,GACnCK,IAAUT,EAAY,QAAQ,OAASC,KAAA,gBAAAA,EAAgB,SAAQ,IAC/DS,MACJC,IAAAT,EAAgB,KAAK,CAAChC,MAASA,EAAK,UAAU,CAAC,MAA/C,gBAAAyC,EAAkD,UAASJ,GACvDK,IACJZ,EAAY,iBAAgBC,KAAA,gBAAAA,EAAgB,iBAAgB,IAExDY,MACJC,IAAAZ,EAAgB,KAAK,CAAChC,MAASA,EAAK,UAAU,CAAC,MAA/C,gBAAA4C,EAAkD;AAAA,EAElDZ,EAAgB,OAAO,CAAChC,MAASA,EAAK,UAAU,CAAC,GAE7C6C,IAAU,CAACN,KAAWI,EAAW,SAAS,GAE1C,EAAE,MAAAG,GAAM,MAAAC,EAAK,IAAIC,EAAY;AAEnC,SAAA9B,EAAU,MAAM;AACV,QAAA,QAAQ,IAAI,aAAa;AAC3B,oBAAO,kCAAkC,CAAC,EAAE,IAAAO,QAAS;AACnD,YAAKA,EAAG,SAASI,CAAI;AAEd,iBAAA,CAAC,eAAe,iBAAiB;AAAA,MAC1C,GAEO,MAAM;AACX,eAAO,kCAAkC;AAAA,MAC3C;AAAA,EACF,GACC,CAACA,CAAI,CAAC,GAGPzB,gBAAAA,EAAA,KAAC,OAAI,EAAA,WAAU,iEACb,UAAA;AAAA,IAAAA,gBAAAA,OAAC6C,GACC,EAAA,UAAA;AAAA,MAAA3C,gBAAAA,EAAAA,IAAC,WAAO,UAAUkC,EAAA,CAAA;AAAA,MACjBP,KAAY3B,gBAAAA,EAAA,IAAA,QAAA,EAAK,MAAK,eAAc,SAAS2B,EAAS,CAAA;AAAA,IAAA,GACzD;AAAA,IACA7B,gBAAAA,EAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAWC;AAAA,UACT6C;AAAA,UACA;AAAA,QACF;AAAA,QAEE,UAAA;AAAA,WAAYZ,KAAAD,6BACX,UACE,EAAA,UAAA;AAAA,YAAYC,KAAAhC,gBAAAA,EAAAA,IAAC6C,KAAiB,UAASb,EAAA,CAAA;AAAA,YACvCD,2BACEX,GAAQ,EAAA,OAAO,GAAG,IAAI0B,EAAQf,CAAK,GACjC,UACHA,EAAA,CAAA;AAAA,UAAA,GAEJ;AAAA,UAEF/B,gBAAAA,EAAA;AAAA,YAACsB;AAAA,YAAA;AAAA,cACC,YAAY,EAAE,GAAGyB,EAAiB,GAAG,GAAG7B,EAAiB;AAAA,YAAA;AAAA,UAC3D;AAAA,UACC,CAACkB,KAEEtC,gBAAAA,EAAAA,KAAAkD,EAAA,UAAA,EAAA,UAAA;AAAA,YAAAhD,gBAAAA,EAAA,IAAC,MAAG,EAAA;AAAA,YACJF,gBAAAA,EAAAA,KAAC,OAAI,EAAA,WAAU,wEACZ,UAAA;AAAA,cACC0C,IAAA1C,gBAAAA,EAAA;AAAA,gBAACmD;AAAA,gBAAA;AAAA,kBACC,IAAIT,EAAK;AAAA,kBACT,WAAU;AAAA,kBACV,OAAOA,EAAK;AAAA,kBAEZ,UAAA;AAAA,oBAACxC,gBAAAA,EAAA,IAAA,OAAA,EAAI,WAAU,iCAAgC,UAE/C,mBAAA;AAAA,oBACCA,gBAAAA,EAAA,IAAA,OAAA,EAAI,WAAU,iCACZ,YAAK,MACR,CAAA;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAGF,IAAAA,gBAAAA,EAAA,IAAC,OAAI,EAAA,WAAU,SAAS,CAAA;AAAA,cAEzByC,IACC3C,gBAAAA,EAAA;AAAA,gBAACmD;AAAA,gBAAA;AAAA,kBACC,IAAIR,EAAK;AAAA,kBACT,WAAU;AAAA,kBACV,OAAOA,EAAK;AAAA,kBAEZ,UAAA;AAAA,oBAACzC,gBAAAA,EAAA,IAAA,OAAA,EAAI,WAAU,iCAAgC,UAE/C,eAAA;AAAA,oBACCA,gBAAAA,EAAA,IAAA,OAAA,EAAI,WAAU,iCACZ,YAAK,MACR,CAAA;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAGF,IAAAA,gBAAAA,MAAC,OAAI,EAAA,WAAU,SAAS,CAAA;AAAA,YAAA,EAE5B,CAAA;AAAA,UAAA,EACF,CAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IAEJ;AAAA,IACAA,gBAAAA,EAAAA,IAAC,SAAI,WAAU,mBACZ,eAAYA,gBAAAA,EAAAA,IAAAE,GAAA,EAAI,SAASmC,EAAY,CAAA,EACxC,CAAA;AAAA,EAAA,GACF;AAEJ;"}
|