zudoku 0.37.0 → 0.38.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/app/main.js +2 -0
- package/dist/app/main.js.map +1 -1
- package/dist/config/validators/common.d.ts +287 -18
- package/dist/config/validators/common.js +2 -0
- package/dist/config/validators/common.js.map +1 -1
- package/dist/config/validators/validate.d.ts +107 -7
- package/dist/lib/authentication/authentication.d.ts +1 -0
- package/dist/lib/authentication/providers/clerk.js +19 -0
- package/dist/lib/authentication/providers/clerk.js.map +1 -1
- package/dist/lib/authentication/providers/openid.d.ts +1 -0
- package/dist/lib/authentication/providers/openid.js +5 -0
- package/dist/lib/authentication/providers/openid.js.map +1 -1
- package/dist/lib/authentication/providers/supabase.js +5 -0
- package/dist/lib/authentication/providers/supabase.js.map +1 -1
- package/dist/lib/authentication/state.d.ts +0 -26
- package/dist/lib/authentication/state.js +1 -16
- package/dist/lib/authentication/state.js.map +1 -1
- package/dist/lib/components/Layout.js +5 -3
- package/dist/lib/components/Layout.js.map +1 -1
- package/dist/lib/components/Zudoku.js +3 -2
- package/dist/lib/components/Zudoku.js.map +1 -1
- package/dist/lib/core/ZudokuContext.d.ts +7 -0
- package/dist/lib/core/ZudokuContext.js +8 -3
- package/dist/lib/core/ZudokuContext.js.map +1 -1
- package/dist/lib/core/plugins.d.ts +8 -6
- package/dist/lib/plugins/markdown/MdxPage.js +2 -8
- package/dist/lib/plugins/markdown/MdxPage.js.map +1 -1
- package/dist/lib/plugins/openapi/Endpoint.js +1 -1
- package/dist/lib/plugins/openapi/Endpoint.js.map +1 -1
- package/dist/lib/plugins/openapi/OperationList.js +1 -1
- package/dist/lib/plugins/openapi/OperationList.js.map +1 -1
- package/dist/lib/plugins/openapi/Sidecar.js +29 -5
- package/dist/lib/plugins/openapi/Sidecar.js.map +1 -1
- package/dist/lib/plugins/openapi/interfaces.d.ts +26 -0
- package/dist/lib/plugins/openapi/playground/Playground.js +1 -1
- package/dist/lib/plugins/openapi/playground/Playground.js.map +1 -1
- package/dist/lib/plugins/openapi/playground/result-panel/ResultPanel.js +2 -2
- package/dist/lib/plugins/openapi/playground/result-panel/ResultPanel.js.map +1 -1
- package/dist/lib/plugins/openapi/state.d.ts +25 -0
- package/dist/lib/plugins/openapi/state.js +18 -0
- package/dist/lib/plugins/openapi/state.js.map +1 -0
- package/dist/lib/plugins/search-pagefind/PagefindSearch.js +13 -4
- package/dist/lib/plugins/search-pagefind/PagefindSearch.js.map +1 -1
- package/dist/lib/plugins/search-pagefind/ResultList.js +19 -12
- package/dist/lib/plugins/search-pagefind/ResultList.js.map +1 -1
- package/dist/lib/plugins/search-pagefind/get-results.d.ts +8 -1
- package/dist/lib/plugins/search-pagefind/get-results.js +9 -4
- package/dist/lib/plugins/search-pagefind/get-results.js.map +1 -1
- package/dist/lib/util/traverse.d.ts +2 -8
- package/dist/lib/util/traverse.js.map +1 -1
- package/dist/lib/util/types.d.ts +7 -0
- package/dist/lib/util/types.js +2 -0
- package/dist/lib/util/types.js.map +1 -0
- package/dist/lib/util/useScrollToAnchor.js +18 -12
- package/dist/lib/util/useScrollToAnchor.js.map +1 -1
- package/dist/vite/api/schema-codegen.d.ts +1 -1
- package/dist/vite/api/schema-codegen.js +8 -4
- package/dist/vite/api/schema-codegen.js.map +1 -1
- package/dist/vite/plugin-api.js +5 -2
- package/dist/vite/plugin-api.js.map +1 -1
- package/lib/{AuthenticationPlugin-Cij2tPWa.js → AuthenticationPlugin-Duy_R1TU.js} +3 -3
- package/lib/{AuthenticationPlugin-Cij2tPWa.js.map → AuthenticationPlugin-Duy_R1TU.js.map} +1 -1
- package/lib/{Markdown-DT5Rrq8_.js → Markdown-DIZ8nBVC.js} +742 -738
- package/lib/{Markdown-DT5Rrq8_.js.map → Markdown-DIZ8nBVC.js.map} +1 -1
- package/lib/{MdxPage-D2rD1vC4.js → MdxPage-JEdbfW-f.js} +42 -47
- package/lib/MdxPage-JEdbfW-f.js.map +1 -0
- package/lib/{OasProvider-DdEBf2qS.js → OasProvider-D1A10JeA.js} +4 -4
- package/lib/{OasProvider-DdEBf2qS.js.map → OasProvider-D1A10JeA.js.map} +1 -1
- package/lib/{OperationList-DT4-gm_S.js → OperationList-yOmYzMIp.js} +1128 -1112
- package/lib/OperationList-yOmYzMIp.js.map +1 -0
- package/lib/{Select-z1Lwl0-J.js → Select-fAYcJ0OU.js} +8 -8
- package/lib/{Select-z1Lwl0-J.js.map → Select-fAYcJ0OU.js.map} +1 -1
- package/lib/{SlotletProvider-D8OBnr77.js → SlotletProvider-BEwNY8q0.js} +4 -4
- package/lib/{SlotletProvider-D8OBnr77.js.map → SlotletProvider-BEwNY8q0.js.map} +1 -1
- package/lib/{chunk-HA7DTUK3-ZGg2W6yV.js → chunk-HA7DTUK3-C4gP41vD.js} +5 -5
- package/lib/{chunk-HA7DTUK3-ZGg2W6yV.js.map → chunk-HA7DTUK3-C4gP41vD.js.map} +1 -1
- package/lib/hook-Cge6LiTK.js +1483 -0
- package/lib/hook-Cge6LiTK.js.map +1 -0
- package/lib/{index-DdQSV2RF.js → index-B0y3fTg-.js} +261 -243
- package/lib/index-B0y3fTg-.js.map +1 -0
- package/lib/{mutation-_Z5C2wFZ.js → mutation-EChriCeF.js} +2 -2
- package/lib/{mutation-_Z5C2wFZ.js.map → mutation-EChriCeF.js.map} +1 -1
- package/lib/post-processors/traverse.js.map +1 -1
- package/lib/{useExposedProps-BslIn-FE.js → useExposedProps-B9qXJedG.js} +2 -2
- package/lib/{useExposedProps-BslIn-FE.js.map → useExposedProps-B9qXJedG.js.map} +1 -1
- package/lib/zudoku.auth-auth0.js +1 -1
- package/lib/zudoku.auth-clerk.js +59 -41
- package/lib/zudoku.auth-clerk.js.map +1 -1
- package/lib/zudoku.auth-openid.js +76 -73
- package/lib/zudoku.auth-openid.js.map +1 -1
- package/lib/zudoku.components.js +370 -354
- package/lib/zudoku.components.js.map +1 -1
- package/lib/zudoku.hooks.js +1 -1
- package/lib/zudoku.plugin-api-catalog.js +23 -24
- package/lib/zudoku.plugin-api-catalog.js.map +1 -1
- package/lib/zudoku.plugin-api-keys.js +15 -16
- package/lib/zudoku.plugin-api-keys.js.map +1 -1
- package/lib/zudoku.plugin-custom-pages.js +2 -2
- package/lib/zudoku.plugin-markdown.js +1 -1
- package/lib/zudoku.plugin-openapi.js +5 -6
- package/lib/zudoku.plugin-openapi.js.map +1 -1
- package/lib/zudoku.plugin-redirect.js +1 -1
- package/lib/zudoku.plugin-search-pagefind.js +133 -98
- package/lib/zudoku.plugin-search-pagefind.js.map +1 -1
- package/lib/zudoku.plugins.js.map +1 -1
- package/package.json +2 -2
- package/src/app/main.tsx +2 -0
- package/src/lib/authentication/authentication.ts +2 -0
- package/src/lib/authentication/providers/clerk.tsx +20 -0
- package/src/lib/authentication/providers/openid.tsx +6 -0
- package/src/lib/authentication/providers/supabase.tsx +6 -0
- package/src/lib/authentication/state.ts +1 -35
- package/src/lib/components/Layout.tsx +14 -2
- package/src/lib/components/Zudoku.tsx +5 -2
- package/src/lib/core/ZudokuContext.ts +13 -6
- package/src/lib/core/plugins.ts +9 -9
- package/src/lib/plugins/markdown/MdxPage.tsx +1 -8
- package/src/lib/plugins/openapi/Endpoint.tsx +1 -1
- package/src/lib/plugins/openapi/OperationList.tsx +1 -1
- package/src/lib/plugins/openapi/Sidecar.tsx +36 -7
- package/src/lib/plugins/openapi/interfaces.ts +29 -0
- package/src/lib/plugins/openapi/playground/Playground.tsx +1 -1
- package/src/lib/plugins/openapi/playground/result-panel/ResultPanel.tsx +2 -1
- package/src/lib/plugins/openapi/state.ts +36 -0
- package/src/lib/plugins/search-pagefind/PagefindSearch.tsx +26 -4
- package/src/lib/plugins/search-pagefind/ResultList.tsx +59 -47
- package/src/lib/plugins/search-pagefind/get-results.tsx +31 -10
- package/src/lib/util/traverse.ts +2 -6
- package/src/lib/util/types.ts +7 -0
- package/src/lib/util/useScrollToAnchor.ts +20 -12
- package/lib/MdxPage-D2rD1vC4.js.map +0 -1
- package/lib/OperationList-DT4-gm_S.js.map +0 -1
- package/lib/hook-DzQC8PzJ.js +0 -355
- package/lib/hook-DzQC8PzJ.js.map +0 -1
- package/lib/index-DdQSV2RF.js.map +0 -1
- package/lib/joinUrl-BjDooT-T.js +0 -1154
- package/lib/joinUrl-BjDooT-T.js.map +0 -1
|
@@ -1,16 +1,30 @@
|
|
|
1
|
+
import type { AuthState } from "../../authentication/state.js";
|
|
2
|
+
import type { ZudokuContext } from "../../core/ZudokuContext.js";
|
|
1
3
|
import type { PagefindOptions } from "./index.js";
|
|
2
4
|
import type { PagefindSearchFragment, PagefindSearchResults } from "./types.js";
|
|
3
5
|
|
|
4
|
-
export const getResults = async (
|
|
5
|
-
search
|
|
6
|
-
options
|
|
7
|
-
|
|
6
|
+
export const getResults = async ({
|
|
7
|
+
search,
|
|
8
|
+
options,
|
|
9
|
+
auth,
|
|
10
|
+
context,
|
|
11
|
+
}: {
|
|
12
|
+
search: PagefindSearchResults;
|
|
13
|
+
options: PagefindOptions;
|
|
14
|
+
auth: AuthState;
|
|
15
|
+
context: ZudokuContext;
|
|
16
|
+
}) => {
|
|
8
17
|
const maxResults = options.maxResults ?? 10;
|
|
9
18
|
const transformFn = options.transformResults ?? (() => true);
|
|
10
19
|
|
|
11
20
|
const transformedResults: PagefindSearchFragment[] = [];
|
|
12
21
|
|
|
13
|
-
const generator = searchResultGenerator(
|
|
22
|
+
const generator = searchResultGenerator({
|
|
23
|
+
search,
|
|
24
|
+
transformFn,
|
|
25
|
+
auth,
|
|
26
|
+
context,
|
|
27
|
+
});
|
|
14
28
|
|
|
15
29
|
for await (const result of generator) {
|
|
16
30
|
transformedResults.push(result);
|
|
@@ -20,10 +34,17 @@ export const getResults = async (
|
|
|
20
34
|
return transformedResults;
|
|
21
35
|
};
|
|
22
36
|
|
|
23
|
-
async function* searchResultGenerator(
|
|
24
|
-
search
|
|
25
|
-
transformFn
|
|
26
|
-
|
|
37
|
+
async function* searchResultGenerator({
|
|
38
|
+
search,
|
|
39
|
+
transformFn,
|
|
40
|
+
auth,
|
|
41
|
+
context,
|
|
42
|
+
}: {
|
|
43
|
+
search: PagefindSearchResults;
|
|
44
|
+
transformFn: NonNullable<PagefindOptions["transformResults"]>;
|
|
45
|
+
auth: AuthState<unknown>;
|
|
46
|
+
context: ZudokuContext;
|
|
47
|
+
}) {
|
|
27
48
|
const batchSize = 5;
|
|
28
49
|
let processedCount = 0;
|
|
29
50
|
|
|
@@ -37,7 +58,7 @@ async function* searchResultGenerator(
|
|
|
37
58
|
const batchData = await Promise.all(batch.map((result) => result.data()));
|
|
38
59
|
|
|
39
60
|
for (const result of batchData) {
|
|
40
|
-
const transformed = transformFn(result);
|
|
61
|
+
const transformed = transformFn({ result, auth, context });
|
|
41
62
|
|
|
42
63
|
if (transformed === false) {
|
|
43
64
|
// Skip this result
|
package/src/lib/util/traverse.ts
CHANGED
|
@@ -1,10 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
export type RecordAny = Record<string, any>;
|
|
1
|
+
import type { JsonValue, RecordAny } from "./types.js";
|
|
3
2
|
|
|
4
|
-
type
|
|
5
|
-
type JsonArray = JsonValue[];
|
|
6
|
-
type JsonObject = { [key: string]: JsonValue };
|
|
7
|
-
type JsonValue = JsonPrimitive | JsonArray | JsonObject;
|
|
3
|
+
export type { RecordAny };
|
|
8
4
|
|
|
9
5
|
export const traverse = <T extends JsonValue = RecordAny>(
|
|
10
6
|
specification: RecordAny,
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
2
|
+
export type RecordAny = Record<string, any>;
|
|
3
|
+
|
|
4
|
+
export type JsonPrimitive = string | number | boolean | null;
|
|
5
|
+
export type JsonArray = JsonValue[];
|
|
6
|
+
export type JsonObject = { [key: string]: JsonValue };
|
|
7
|
+
export type JsonValue = JsonPrimitive | JsonArray | JsonObject;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { useCallback, useEffect } from "react";
|
|
1
|
+
import { useCallback, useEffect, useRef } from "react";
|
|
2
2
|
import { useLocation } from "react-router";
|
|
3
3
|
import { useViewportAnchor } from "../components/context/ViewportAnchorContext.js";
|
|
4
4
|
import { DATA_ANCHOR_ATTR } from "../components/navigation/SidebarItem.js";
|
|
@@ -40,21 +40,29 @@ export const useScrollToHash = () => {
|
|
|
40
40
|
|
|
41
41
|
export const useScrollToAnchor = () => {
|
|
42
42
|
const location = useLocation();
|
|
43
|
-
const { setActiveAnchor } = useViewportAnchor();
|
|
44
43
|
const scrollToHash = useScrollToHash();
|
|
44
|
+
const initialScrolled = useRef(false);
|
|
45
45
|
|
|
46
46
|
useEffect(() => {
|
|
47
|
-
if (!location.hash) return;
|
|
48
|
-
|
|
49
|
-
if (!scrollToHash(location.hash)) {
|
|
50
|
-
const observer = new MutationObserver((_, obs) => {
|
|
51
|
-
if (!scrollToHash(location.hash)) return;
|
|
52
|
-
obs.disconnect();
|
|
53
|
-
});
|
|
47
|
+
if (!location.hash || !initialScrolled.current) return;
|
|
54
48
|
|
|
55
|
-
|
|
49
|
+
scrollToHash(location.hash);
|
|
50
|
+
}, [location.hash, scrollToHash]);
|
|
56
51
|
|
|
57
|
-
|
|
52
|
+
useEffect(() => {
|
|
53
|
+
if (!location.hash) {
|
|
54
|
+
initialScrolled.current = true;
|
|
55
|
+
return;
|
|
58
56
|
}
|
|
59
|
-
|
|
57
|
+
|
|
58
|
+
const observer = new MutationObserver((_, obs) => {
|
|
59
|
+
if (!scrollToHash(location.hash)) return;
|
|
60
|
+
initialScrolled.current = true;
|
|
61
|
+
obs.disconnect();
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
observer.observe(document.body, { childList: true, subtree: true });
|
|
65
|
+
|
|
66
|
+
return () => observer.disconnect();
|
|
67
|
+
}, [location.hash, scrollToHash]);
|
|
60
68
|
};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"MdxPage-D2rD1vC4.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, useHref } 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 { type MarkdownPluginDefaultOptions, type 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 let canonicalUrl = null;\n const path = useHref(\"\");\n if (typeof window !== \"undefined\") {\n const domain = window.location.origin;\n canonicalUrl = `${domain}${path}`;\n }\n\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\n className=\"grid grid-cols-1 xl:grid-cols-[--sidecar-grid-cols] gap-8 justify-between\"\n data-pagefind-filter=\"section:markdown\"\n data-pagefind-meta=\"section:markdown\"\n >\n <Helmet>\n <title>{pageTitle}</title>\n {excerpt && <meta name=\"description\" content={excerpt} />}\n {canonicalUrl && <link rel=\"canonical\" href={canonicalUrl} />}\n </Helmet>\n <div\n className={cn(\n ProseClasses,\n \"max-w-full xl:w-full xl:max-w-3xl 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","canonicalUrl","path","useHref","title","category","hideToc","pageTitle","_b","hidePager","tocEntries","_c","showToc","prev","next","usePrevNext","Helmet","ProseClasses","CategoryHeading","slugify","useMDXComponents","Fragment","Link"],"mappings":"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"}
|