zudoku 0.7.2-dev.14 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/lib/AuthenticationPlugin-Bx9FK124.js +55 -0
  2. package/lib/{AuthenticationPlugin-BMjOjKqE.js.map → AuthenticationPlugin-Bx9FK124.js.map} +1 -1
  3. package/lib/CategoryHeading-XnFqN2lJ.js +10 -0
  4. package/lib/{CategoryHeading-BE8e6QdS.js.map → CategoryHeading-XnFqN2lJ.js.map} +1 -1
  5. package/lib/DeveloperHint-FBb2uXJe.js +16 -0
  6. package/lib/{DeveloperHint-Bl9gIdNI.js.map → DeveloperHint-FBb2uXJe.js.map} +1 -1
  7. package/lib/ErrorPage-knunPbKI.js +18 -0
  8. package/lib/{ErrorPage-CPR1XVKW.js.map → ErrorPage-knunPbKI.js.map} +1 -1
  9. package/lib/Input-BEDZAKw0.js +2198 -0
  10. package/lib/{Input-BBlyeDuG.js.map → Input-BEDZAKw0.js.map} +1 -1
  11. package/lib/{Markdown-CCNihH_N.js → Markdown-B4aR03g6.js} +2650 -2641
  12. package/lib/{Markdown-CCNihH_N.js.map → Markdown-B4aR03g6.js.map} +1 -1
  13. package/lib/MdxPage-BZyQsH8Z.js +172 -0
  14. package/lib/{MdxPage-BavkYqzi.js.map → MdxPage-BZyQsH8Z.js.map} +1 -1
  15. package/lib/OperationList-2NeWEM0u.js +560 -0
  16. package/lib/{OperationList-C6Ps2keZ.js.map → OperationList-2NeWEM0u.js.map} +1 -1
  17. package/lib/Route-BZPewmrN.js +14 -0
  18. package/lib/{Route-xRJ9mJgH.js.map → Route-BZPewmrN.js.map} +1 -1
  19. package/lib/{SidebarBadge-2JcxswKF.js → SidebarBadge-COz0hgfa.js} +41 -41
  20. package/lib/{SidebarBadge-2JcxswKF.js.map → SidebarBadge-COz0hgfa.js.map} +1 -1
  21. package/lib/SlotletProvider-DJMaOUDs.js +238 -0
  22. package/lib/{SlotletProvider-CuB3Ts8r.js.map → SlotletProvider-DJMaOUDs.js.map} +1 -1
  23. package/lib/Spinner-3cQDBVGr.js +7 -0
  24. package/lib/Spinner-3cQDBVGr.js.map +1 -0
  25. package/lib/{ZudokuContext-JoyeA9dT.js → ZudokuContext-cr-pTRY1.js} +66 -65
  26. package/lib/{ZudokuContext-JoyeA9dT.js.map → ZudokuContext-cr-pTRY1.js.map} +1 -1
  27. package/lib/{index-G1-TGLO1.js → index-1EDgIO6b.js} +4 -4
  28. package/lib/{index-G1-TGLO1.js.map → index-1EDgIO6b.js.map} +1 -1
  29. package/lib/index-BG0g4WW0.js +1771 -0
  30. package/lib/index-BG0g4WW0.js.map +1 -0
  31. package/lib/{index-BF4cn28H.js → index-Dv2KZuEw.js} +1991 -1804
  32. package/lib/{index-BF4cn28H.js.map → index-Dv2KZuEw.js.map} +1 -1
  33. package/lib/{index-BLvMkqjO.js → index-Zezcv0xb.js} +5 -5
  34. package/lib/{index-BLvMkqjO.js.map → index-Zezcv0xb.js.map} +1 -1
  35. package/lib/jsx-runtime-B6kdoens.js +635 -0
  36. package/lib/jsx-runtime-B6kdoens.js.map +1 -0
  37. package/lib/{utils-B8R4grFM.js → utils-ByIc_KIM.js} +98 -97
  38. package/lib/{utils-B8R4grFM.js.map → utils-ByIc_KIM.js.map} +1 -1
  39. package/lib/zudoku.auth-auth0.js +21 -16
  40. package/lib/zudoku.auth-auth0.js.map +1 -1
  41. package/lib/zudoku.auth-clerk.js +37 -32
  42. package/lib/zudoku.auth-clerk.js.map +1 -1
  43. package/lib/zudoku.auth-openid.js +505 -485
  44. package/lib/zudoku.auth-openid.js.map +1 -1
  45. package/lib/zudoku.components.js +1659 -1531
  46. package/lib/zudoku.components.js.map +1 -1
  47. package/lib/zudoku.plugin-api-keys.js +214 -150
  48. package/lib/zudoku.plugin-api-keys.js.map +1 -1
  49. package/lib/zudoku.plugin-custom-page.js +6 -5
  50. package/lib/zudoku.plugin-custom-page.js.map +1 -1
  51. package/lib/zudoku.plugin-markdown.js +13 -12
  52. package/lib/zudoku.plugin-markdown.js.map +1 -1
  53. package/lib/zudoku.plugin-openapi.js +8 -7
  54. package/lib/zudoku.plugin-openapi.js.map +1 -1
  55. package/lib/zudoku.plugin-search-inkeep.js +21 -20
  56. package/lib/zudoku.plugin-search-inkeep.js.map +1 -1
  57. package/package.json +1 -1
  58. package/lib/AuthenticationPlugin-BMjOjKqE.js +0 -54
  59. package/lib/CategoryHeading-BE8e6QdS.js +0 -9
  60. package/lib/DeveloperHint-Bl9gIdNI.js +0 -12
  61. package/lib/ErrorPage-CPR1XVKW.js +0 -12
  62. package/lib/Input-BBlyeDuG.js +0 -2192
  63. package/lib/MdxPage-BavkYqzi.js +0 -140
  64. package/lib/OperationList-C6Ps2keZ.js +0 -460
  65. package/lib/Route-xRJ9mJgH.js +0 -13
  66. package/lib/SlotletProvider-CuB3Ts8r.js +0 -213
  67. package/lib/Spinner-BlxzaFFF.js +0 -6
  68. package/lib/Spinner-BlxzaFFF.js.map +0 -1
  69. package/lib/jsx-runtime-lNnQYwFN.js +0 -2403
  70. package/lib/jsx-runtime-lNnQYwFN.js.map +0 -1
@@ -0,0 +1,172 @@
1
+ import { j as e } from "./jsx-runtime-B6kdoens.js";
2
+ import { A as T, u as k, a as P, H as C, b as H } from "./utils-ByIc_KIM.js";
3
+ import { L as v } from "./index-BG0g4WW0.js";
4
+ import { C as R } from "./CategoryHeading-XnFqN2lJ.js";
5
+ import { u as S, a as x, P as E, H as h } from "./Markdown-B4aR03g6.js";
6
+ import { s as I } from "./slugify-DbLhpSPt.js";
7
+ import { ListTreeIcon as L } from "lucide-react";
8
+ import { useRef as y, useState as _, useEffect as $ } from "react";
9
+ const N = "data-active", b = ({
10
+ item: r,
11
+ children: t,
12
+ className: s,
13
+ isActive: o
14
+ }) => /* @__PURE__ */ e.jsxs(
15
+ "li",
16
+ {
17
+ className: x(
18
+ "truncate",
19
+ o ? "text-primary" : "text-foreground/65 dark:text-foreground/75",
20
+ s
21
+ ),
22
+ title: r.value,
23
+ children: [
24
+ /* @__PURE__ */ e.jsx(
25
+ T,
26
+ {
27
+ to: `#${r.id}`,
28
+ [N]: r.id,
29
+ className: x(
30
+ o ? "text-primary" : "text-foreground/65 dark:text-foreground/75 hover:text-foreground"
31
+ ),
32
+ children: r.value
33
+ }
34
+ ),
35
+ t
36
+ ]
37
+ }
38
+ ), M = ({ entries: r }) => {
39
+ const { activeAnchor: t } = S(), s = y(null), o = y(!1), [m, i] = _({
40
+ top: 0,
41
+ opacity: 0
42
+ });
43
+ return $(() => {
44
+ if (!s.current) return;
45
+ const a = s.current.querySelector(
46
+ `[${N}='${t}']`
47
+ );
48
+ if (!a) {
49
+ i({ top: 0, opacity: 0 });
50
+ return;
51
+ }
52
+ const n = s.current.getBoundingClientRect().top, p = a.getBoundingClientRect().top;
53
+ i({
54
+ opacity: 1,
55
+ top: `${p - n}px`
56
+ }), !o.current && requestIdleCallback(() => {
57
+ o.current = !0;
58
+ });
59
+ }, [t]), /* @__PURE__ */ e.jsxs("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", children: [
60
+ /* @__PURE__ */ e.jsxs("div", { className: "flex items-center gap-2 font-medium mb-2", children: [
61
+ /* @__PURE__ */ e.jsx(L, { size: 16 }),
62
+ "On this page"
63
+ ] }),
64
+ /* @__PURE__ */ e.jsxs("div", { className: "relative ms-2 ps-4", children: [
65
+ /* @__PURE__ */ e.jsx("div", { className: "absolute inset-0 right-auto bg-border w-[2px]" }),
66
+ /* @__PURE__ */ e.jsx(
67
+ "div",
68
+ {
69
+ className: x(
70
+ "absolute -left-px -translate-y-1 h-6 w-[4px] rounded bg-primary",
71
+ o.current && "ease-out [transition:top_150ms,opacity_325ms]"
72
+ ),
73
+ style: m
74
+ }
75
+ ),
76
+ /* @__PURE__ */ e.jsx(
77
+ "ul",
78
+ {
79
+ ref: s,
80
+ className: "relative font-medium list-none space-y-2",
81
+ children: r.map((a) => /* @__PURE__ */ e.jsx(
82
+ b,
83
+ {
84
+ isActive: a.id === t,
85
+ item: a,
86
+ className: "pl-0",
87
+ children: a.children && /* @__PURE__ */ e.jsx("ul", { className: "list-none pl-4 pt-2 space-y-2", children: a.children.map((n) => /* @__PURE__ */ e.jsx(
88
+ b,
89
+ {
90
+ item: n,
91
+ isActive: n.id === t
92
+ },
93
+ n.id
94
+ )) })
95
+ },
96
+ a.id
97
+ ))
98
+ }
99
+ )
100
+ ] })
101
+ ] });
102
+ }, q = {
103
+ h2: ({ children: r, id: t }) => /* @__PURE__ */ e.jsx(h, { level: 2, id: t, registerSidebarAnchor: !0, children: r }),
104
+ h3: ({ children: r, id: t }) => /* @__PURE__ */ e.jsx(h, { level: 3, id: t, registerSidebarAnchor: !0, children: r })
105
+ }, J = ({
106
+ mdxComponent: r,
107
+ frontmatter: t = {},
108
+ defaultOptions: s,
109
+ tableOfContents: o
110
+ }) => {
111
+ var g, j, f;
112
+ const m = (g = k()) == null ? void 0 : g.categoryLabel, i = t.title, a = t.category ?? m, n = t.toc === !1 || (s == null ? void 0 : s.toc) === !1, p = ((j = o.find((l) => l.depth === 1)) == null ? void 0 : j.value) ?? i, w = t.disablePager ?? (s == null ? void 0 : s.disablePager) ?? !1, u = ((f = o.find((l) => l.depth === 1)) == null ? void 0 : f.children) ?? // if `title` is provided by frontmatter it does not appear in the table of contents
113
+ o.filter((l) => l.depth === 2), A = !n && u.length > 0, { prev: c, next: d } = P();
114
+ return /* @__PURE__ */ e.jsxs("div", { className: "xl:grid grid-cols-[--sidecar-grid-cols] gap-8 justify-between", children: [
115
+ /* @__PURE__ */ e.jsx(C, { children: /* @__PURE__ */ e.jsx("title", { children: p }) }),
116
+ /* @__PURE__ */ e.jsxs(
117
+ "div",
118
+ {
119
+ className: x(
120
+ E,
121
+ "max-w-full xl:w-full xl:max-w-prose flex-1 flex-shrink pt-[--padding-content-top] pb-[--padding-content-bottom]"
122
+ ),
123
+ children: [
124
+ /* @__PURE__ */ e.jsxs("header", { children: [
125
+ a && /* @__PURE__ */ e.jsx(R, { children: a }),
126
+ i && /* @__PURE__ */ e.jsx(h, { level: 1, id: I(i, { lower: !0 }), children: i })
127
+ ] }),
128
+ /* @__PURE__ */ e.jsx(
129
+ r,
130
+ {
131
+ components: { ...H(), ...q }
132
+ }
133
+ ),
134
+ !w && /* @__PURE__ */ e.jsxs(e.Fragment, { children: [
135
+ /* @__PURE__ */ e.jsx("hr", {}),
136
+ /* @__PURE__ */ e.jsxs("div", { className: "not-prose flex flex-wrap items-center justify-between gap-2 lg:gap-8", children: [
137
+ c ? /* @__PURE__ */ e.jsxs(
138
+ v,
139
+ {
140
+ to: c.id,
141
+ 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",
142
+ title: c.label,
143
+ children: [
144
+ /* @__PURE__ */ e.jsx("div", { className: "text-sm text-muted-foreground", children: "← Previous page" }),
145
+ /* @__PURE__ */ e.jsx("div", { className: "text-lg text-primary truncate", children: c.label })
146
+ ]
147
+ }
148
+ ) : /* @__PURE__ */ e.jsx("div", { className: "flex-1" }),
149
+ d ? /* @__PURE__ */ e.jsxs(
150
+ v,
151
+ {
152
+ to: d.id,
153
+ 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",
154
+ title: d.label,
155
+ children: [
156
+ /* @__PURE__ */ e.jsx("div", { className: "text-sm text-muted-foreground", children: "Next page →" }),
157
+ /* @__PURE__ */ e.jsx("div", { className: "text-lg text-primary truncate", children: d.label })
158
+ ]
159
+ }
160
+ ) : /* @__PURE__ */ e.jsx("div", { className: "flex-1" })
161
+ ] })
162
+ ] })
163
+ ]
164
+ }
165
+ ),
166
+ /* @__PURE__ */ e.jsx("div", { className: "hidden xl:block", children: A && /* @__PURE__ */ e.jsx(M, { entries: u }) })
167
+ ] });
168
+ };
169
+ export {
170
+ J as MdxPage
171
+ };
172
+ //# sourceMappingURL=MdxPage-BZyQsH8Z.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MdxPage-BavkYqzi.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 { Helmet } from \"@zudoku/react-helmet-async\";\nimport { type PropsWithChildren } from \"react\";\nimport { Link } from \"react-router-dom\";\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 slugify from \"../../util/slugify.js\";\nimport { Toc } from \"./Toc.js\";\nimport { MarkdownPluginDefaultOptions, MDXImport } from \"./index.js\";\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 frontmatter = {},\n defaultOptions,\n tableOfContents,\n}: PropsWithChildren<\n Omit<MDXImport, \"default\"> & {\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 return (\n <div className=\"xl:grid grid-cols-[--sidecar-grid-cols] gap-8 justify-between\">\n <Helmet>\n <title>{pageTitle}</title>\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 <header>\n {category && <CategoryHeading>{category}</CategoryHeading>}\n {title && (\n <Heading level={1} id={slugify(title, { lower: true })}>\n {title}\n </Heading>\n )}\n </header>\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","cn","AnchorLink","Toc","entries","activeAnchor","useViewportAnchor","listWrapperRef","useRef","paintedOnce","indicatorStyle","setIndicatorStyles","useState","useEffect","activeElement","topParent","topElement","ListTreeIcon","child","MarkdownHeadings","id","Heading","MdxPage","MdxComponent","frontmatter","defaultOptions","tableOfContents","categoryTitle","_a","useCurrentItem","title","category","hideToc","pageTitle","_b","hidePager","tocEntries","_c","showToc","prev","next","usePrevNext","Helmet","ProseClasses","CategoryHeading","slugify","useMDXComponents","Link"],"mappings":"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"}
1
+ {"version":3,"file":"MdxPage-BZyQsH8Z.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 { Helmet } from \"@zudoku/react-helmet-async\";\nimport { type PropsWithChildren } from \"react\";\nimport { Link } from \"react-router-dom\";\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 slugify from \"../../util/slugify.js\";\nimport { Toc } from \"./Toc.js\";\nimport { MarkdownPluginDefaultOptions, MDXImport } from \"./index.js\";\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 frontmatter = {},\n defaultOptions,\n tableOfContents,\n}: PropsWithChildren<\n Omit<MDXImport, \"default\"> & {\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 return (\n <div className=\"xl:grid grid-cols-[--sidecar-grid-cols] gap-8 justify-between\">\n <Helmet>\n <title>{pageTitle}</title>\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 <header>\n {category && <CategoryHeading>{category}</CategoryHeading>}\n {title && (\n <Heading level={1} id={slugify(title, { lower: true })}>\n {title}\n </Heading>\n )}\n </header>\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","frontmatter","defaultOptions","tableOfContents","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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"}