zudoku 0.18.5 → 0.18.7

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 (86) hide show
  1. package/dist/app/entry.client.d.ts +1 -0
  2. package/dist/app/entry.client.js +8 -0
  3. package/dist/app/entry.client.js.map +1 -1
  4. package/dist/app/entry.server.d.ts +1 -0
  5. package/dist/app/entry.server.js +1 -0
  6. package/dist/app/entry.server.js.map +1 -1
  7. package/dist/lib/components/Layout.js +3 -2
  8. package/dist/lib/components/Layout.js.map +1 -1
  9. package/dist/lib/components/MobileTopNavigation.js +1 -1
  10. package/dist/lib/components/MobileTopNavigation.js.map +1 -1
  11. package/dist/lib/components/Search.d.ts +3 -1
  12. package/dist/lib/components/Search.js +3 -3
  13. package/dist/lib/components/Search.js.map +1 -1
  14. package/dist/lib/components/navigation/Sidebar.d.ts +3 -1
  15. package/dist/lib/components/navigation/Sidebar.js +2 -2
  16. package/dist/lib/components/navigation/Sidebar.js.map +1 -1
  17. package/dist/lib/components/navigation/SidebarCategory.d.ts +2 -1
  18. package/dist/lib/components/navigation/SidebarCategory.js +2 -2
  19. package/dist/lib/components/navigation/SidebarCategory.js.map +1 -1
  20. package/dist/lib/components/navigation/SidebarItem.d.ts +2 -2
  21. package/dist/lib/components/navigation/SidebarItem.js +5 -5
  22. package/dist/lib/components/navigation/SidebarItem.js.map +1 -1
  23. package/dist/lib/oas/graphql/index.js +4 -0
  24. package/dist/lib/oas/graphql/index.js.map +1 -1
  25. package/dist/lib/plugins/markdown/MdxPage.d.ts +1 -1
  26. package/dist/lib/plugins/markdown/MdxPage.js +2 -2
  27. package/dist/lib/plugins/markdown/MdxPage.js.map +1 -1
  28. package/dist/lib/plugins/markdown/index.d.ts +1 -0
  29. package/dist/lib/plugins/markdown/index.js.map +1 -1
  30. package/dist/lib/plugins/openapi/OperationList.js +44 -1
  31. package/dist/lib/plugins/openapi/OperationList.js.map +1 -1
  32. package/dist/lib/plugins/openapi/graphql/gql.d.ts +1 -1
  33. package/dist/lib/plugins/openapi/graphql/gql.js +1 -1
  34. package/dist/lib/plugins/openapi/graphql/gql.js.map +1 -1
  35. package/dist/lib/plugins/openapi/graphql/graphql.d.ts +2 -0
  36. package/dist/lib/plugins/openapi/graphql/graphql.js +1 -0
  37. package/dist/lib/plugins/openapi/graphql/graphql.js.map +1 -1
  38. package/dist/vite/build.js +7 -1
  39. package/dist/vite/build.js.map +1 -1
  40. package/dist/vite/config.js +10 -0
  41. package/dist/vite/config.js.map +1 -1
  42. package/dist/vite/dev-server.js +7 -0
  43. package/dist/vite/dev-server.js.map +1 -1
  44. package/dist/vite/output.js +31 -16
  45. package/dist/vite/output.js.map +1 -1
  46. package/dist/vite/plugin-mdx.js +48 -1
  47. package/dist/vite/plugin-mdx.js.map +1 -1
  48. package/lib/AnchorLink-BR0MvI7n.js +35 -0
  49. package/lib/AnchorLink-BR0MvI7n.js.map +1 -0
  50. package/lib/{MdxPage-B2FpJ9KC.js → MdxPage-HjFSZJQk.js} +85 -80
  51. package/lib/MdxPage-HjFSZJQk.js.map +1 -0
  52. package/lib/{OperationList-BkNQEsNs.js → OperationList-DzE32oyS.js} +971 -961
  53. package/lib/{OperationList-BkNQEsNs.js.map → OperationList-DzE32oyS.js.map} +1 -1
  54. package/lib/assets/{worker-BHClFO3A.js → worker-CyxLedqF.js} +435 -431
  55. package/lib/assets/{worker-BHClFO3A.js.map → worker-CyxLedqF.js.map} +1 -1
  56. package/lib/{createServer-CpJlUPtn.js → createServer-DTiCfoql.js} +5 -1
  57. package/lib/{createServer-CpJlUPtn.js.map → createServer-DTiCfoql.js.map} +1 -1
  58. package/lib/{index-C7SaIME0.js → index-NNCc1BSK.js} +5 -4
  59. package/lib/{index-C7SaIME0.js.map → index-NNCc1BSK.js.map} +1 -1
  60. package/lib/{AnchorLink-CDlhr8gL.js → index.esm-Bm8pj-bc.js} +223 -254
  61. package/lib/index.esm-Bm8pj-bc.js.map +1 -0
  62. package/lib/ui/Drawer.js +79 -79
  63. package/lib/ui/Drawer.js.map +1 -1
  64. package/lib/zudoku.components.js +445 -414
  65. package/lib/zudoku.components.js.map +1 -1
  66. package/lib/zudoku.openapi-worker.js +1 -1
  67. package/lib/zudoku.plugin-markdown.js +1 -1
  68. package/lib/zudoku.plugin-markdown.js.map +1 -1
  69. package/lib/zudoku.plugin-openapi.js +1 -1
  70. package/package.json +4 -3
  71. package/src/app/entry.client.tsx +9 -0
  72. package/src/app/entry.server.tsx +1 -0
  73. package/src/lib/components/Layout.tsx +8 -3
  74. package/src/lib/components/MobileTopNavigation.tsx +18 -18
  75. package/src/lib/components/Search.tsx +3 -3
  76. package/src/lib/components/navigation/Sidebar.tsx +18 -8
  77. package/src/lib/components/navigation/SidebarCategory.tsx +3 -0
  78. package/src/lib/components/navigation/SidebarItem.tsx +12 -2
  79. package/src/lib/oas/graphql/index.ts +4 -0
  80. package/src/lib/plugins/markdown/MdxPage.tsx +2 -0
  81. package/src/lib/plugins/markdown/index.tsx +1 -0
  82. package/src/lib/plugins/openapi/OperationList.tsx +62 -2
  83. package/src/lib/plugins/openapi/graphql/gql.ts +2 -2
  84. package/src/lib/plugins/openapi/graphql/graphql.ts +3 -0
  85. package/lib/AnchorLink-CDlhr8gL.js.map +0 -1
  86. package/lib/MdxPage-B2FpJ9KC.js.map +0 -1
@@ -1,66 +1,67 @@
1
1
  import { j as e } from "./jsx-runtime-B6kdoens.js";
2
- import { s as k } from "./index-LNp6rxyU.js";
3
- import { A as C, H as E, u as P } from "./AnchorLink-CDlhr8gL.js";
4
- import { useRef as j, useState as _, useEffect as N } from "react";
2
+ import { s as C } from "./index-LNp6rxyU.js";
3
+ import { H as E } from "./index.esm-Bm8pj-bc.js";
4
+ import { useRef as v, useState as P, useEffect as N } from "react";
5
5
  import { L as y } from "./index-Yn8c3UWE.js";
6
- import { C as H } from "./CategoryHeading-Bb9dqxD3.js";
7
- import { u as I, P as S, H as h } from "./Markdown-ievDDhFT.js";
8
- import { a as L, b as $ } from "./utils-DcpDOncX.js";
9
- import { c as m } from "./cn-BmFQLtkS.js";
10
- import { ListTreeIcon as D } from "lucide-react";
6
+ import { C as _ } from "./CategoryHeading-Bb9dqxD3.js";
7
+ import { u as H, P as I, H as h } from "./Markdown-ievDDhFT.js";
8
+ import { a as S, b as L } from "./utils-DcpDOncX.js";
9
+ import { c as p } from "./cn-BmFQLtkS.js";
10
+ import { ListTreeIcon as $ } from "lucide-react";
11
+ import { A as D, u as M } from "./AnchorLink-BR0MvI7n.js";
11
12
  const w = "data-active", b = ({
12
- item: a,
13
- children: r,
14
- className: o,
15
- isActive: s
13
+ item: s,
14
+ children: t,
15
+ className: a,
16
+ isActive: r
16
17
  }) => /* @__PURE__ */ e.jsxs(
17
18
  "li",
18
19
  {
19
- className: m(
20
+ className: p(
20
21
  "truncate",
21
- s ? "text-primary" : "text-foreground/65 dark:text-foreground/75",
22
- o
22
+ r ? "text-primary" : "text-foreground/65 dark:text-foreground/75",
23
+ a
23
24
  ),
24
- title: a.value,
25
+ title: s.value,
25
26
  children: [
26
27
  /* @__PURE__ */ e.jsx(
27
- C,
28
+ D,
28
29
  {
29
- to: `#${a.id}`,
30
- [w]: a.id,
31
- className: m(
32
- s ? "text-primary" : "text-foreground/65 dark:text-foreground/75 hover:text-foreground"
30
+ to: `#${s.id}`,
31
+ [w]: s.id,
32
+ className: p(
33
+ r ? "text-primary" : "text-foreground/65 dark:text-foreground/75 hover:text-foreground"
33
34
  ),
34
- children: a.value
35
+ children: s.value
35
36
  }
36
37
  ),
37
- r
38
+ t
38
39
  ]
39
40
  }
40
- ), M = ({ entries: a }) => {
41
- const { activeAnchor: r } = I(), o = j(null), s = j(!1), [c, l] = _({
41
+ ), q = ({ entries: s }) => {
42
+ const { activeAnchor: t } = H(), a = v(null), r = v(!1), [c, l] = P({
42
43
  top: 0,
43
44
  opacity: 0
44
45
  });
45
46
  return N(() => {
46
- if (!o.current) return;
47
- const t = o.current.querySelector(
48
- `[${w}='${r}']`
47
+ if (!a.current) return;
48
+ const n = a.current.querySelector(
49
+ `[${w}='${t}']`
49
50
  );
50
- if (!t) {
51
+ if (!n) {
51
52
  l({ top: 0, opacity: 0 });
52
53
  return;
53
54
  }
54
- const n = o.current.getBoundingClientRect().top, p = t.getBoundingClientRect().top;
55
+ const o = a.current.getBoundingClientRect().top, d = n.getBoundingClientRect().top;
55
56
  l({
56
57
  opacity: 1,
57
- top: `${p - n}px`
58
- }), !s.current && requestIdleCallback(() => {
59
- s.current = !0;
58
+ top: `${d - o}px`
59
+ }), !r.current && requestIdleCallback(() => {
60
+ r.current = !0;
60
61
  });
61
- }, [r]), /* @__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: [
62
+ }, [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: [
62
63
  /* @__PURE__ */ e.jsxs("div", { className: "flex items-center gap-2 font-medium mb-2", children: [
63
- /* @__PURE__ */ e.jsx(D, { size: 16 }),
64
+ /* @__PURE__ */ e.jsx($, { size: 16 }),
64
65
  "On this page"
65
66
  ] }),
66
67
  /* @__PURE__ */ e.jsxs("div", { className: "relative ms-2 ps-4", children: [
@@ -68,9 +69,9 @@ const w = "data-active", b = ({
68
69
  /* @__PURE__ */ e.jsx(
69
70
  "div",
70
71
  {
71
- className: m(
72
+ className: p(
72
73
  "absolute -left-px -translate-y-1 h-6 w-[4px] rounded bg-primary",
73
- s.current && "ease-out [transition:top_150ms,opacity_325ms]"
74
+ r.current && "ease-out [transition:top_150ms,opacity_325ms]"
74
75
  ),
75
76
  style: c
76
77
  }
@@ -78,94 +79,98 @@ const w = "data-active", b = ({
78
79
  /* @__PURE__ */ e.jsx(
79
80
  "ul",
80
81
  {
81
- ref: o,
82
+ ref: a,
82
83
  className: "relative font-medium list-none space-y-2",
83
- children: a.map((t) => /* @__PURE__ */ e.jsx(
84
+ children: s.map((n) => /* @__PURE__ */ e.jsx(
84
85
  b,
85
86
  {
86
- isActive: t.id === r,
87
- item: t,
87
+ isActive: n.id === t,
88
+ item: n,
88
89
  className: "pl-0",
89
- children: t.children && /* @__PURE__ */ e.jsx("ul", { className: "list-none pl-4 pt-2 space-y-2", children: t.children.map((n) => /* @__PURE__ */ e.jsx(
90
+ children: n.children && /* @__PURE__ */ e.jsx("ul", { className: "list-none pl-4 pt-2 space-y-2", children: n.children.map((o) => /* @__PURE__ */ e.jsx(
90
91
  b,
91
92
  {
92
- item: n,
93
- isActive: n.id === r
93
+ item: o,
94
+ isActive: o.id === t
94
95
  },
95
- n.id
96
+ o.id
96
97
  )) })
97
98
  },
98
- t.id
99
+ n.id
99
100
  ))
100
101
  }
101
102
  )
102
103
  ] })
103
104
  ] });
104
- }, q = {
105
- h2: ({ children: a, id: r }) => /* @__PURE__ */ e.jsx(h, { level: 2, id: r, registerSidebarAnchor: !0, children: a }),
106
- h3: ({ children: a, id: r }) => /* @__PURE__ */ e.jsx(h, { level: 3, id: r, registerSidebarAnchor: !0, children: a })
107
- }, U = ({
108
- mdxComponent: a,
109
- file: r,
110
- frontmatter: o = {},
111
- defaultOptions: s,
112
- tableOfContents: c
105
+ }, B = {
106
+ h2: ({ children: s, id: t }) => /* @__PURE__ */ e.jsx(h, { level: 2, id: t, registerSidebarAnchor: !0, children: s }),
107
+ h3: ({ children: s, id: t }) => /* @__PURE__ */ e.jsx(h, { level: 3, id: t, registerSidebarAnchor: !0, children: s })
108
+ }, Z = ({
109
+ mdxComponent: s,
110
+ file: t,
111
+ frontmatter: a = {},
112
+ defaultOptions: r,
113
+ tableOfContents: c,
114
+ excerpt: l
113
115
  }) => {
114
- var g, f, v;
115
- const l = (g = L()) == null ? void 0 : g.categoryLabel, t = o.title, n = o.category ?? l, p = o.toc === !1 || (s == null ? void 0 : s.toc) === !1, A = ((f = c.find((i) => i.depth === 1)) == null ? void 0 : f.value) ?? t, R = o.disablePager ?? (s == null ? void 0 : s.disablePager) ?? !1, u = ((v = c.find((i) => i.depth === 1)) == null ? void 0 : v.children) ?? // if `title` is provided by frontmatter it does not appear in the table of contents
116
- c.filter((i) => i.depth === 2), T = !p && u.length > 0, { prev: d, next: x } = $();
116
+ var g, f, j;
117
+ const n = (g = S()) == null ? void 0 : g.categoryLabel, o = a.title, d = a.category ?? n, A = a.toc === !1 || (r == null ? void 0 : r.toc) === !1, R = ((f = c.find((i) => i.depth === 1)) == null ? void 0 : f.value) ?? o, T = a.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
+ c.filter((i) => i.depth === 2), k = !A && u.length > 0, { prev: x, next: m } = L();
117
119
  return N(() => {
118
120
  if (process.env.NODE_ENV === "development")
119
121
  return window.__getReactRefreshIgnoredExports = ({ id: i }) => {
120
- if (i.endsWith(r))
122
+ if (i.endsWith(t))
121
123
  return ["frontmatter", "tableOfContents"];
122
124
  }, () => {
123
125
  window.__getReactRefreshIgnoredExports = void 0;
124
126
  };
125
- }, [r]), /* @__PURE__ */ e.jsxs("div", { className: "xl:grid grid-cols-[--sidecar-grid-cols] gap-8 justify-between", children: [
126
- /* @__PURE__ */ e.jsx(E, { children: /* @__PURE__ */ e.jsx("title", { children: A }) }),
127
+ }, [t]), /* @__PURE__ */ e.jsxs("div", { className: "xl:grid grid-cols-[--sidecar-grid-cols] gap-8 justify-between", children: [
128
+ /* @__PURE__ */ e.jsxs(E, { children: [
129
+ /* @__PURE__ */ e.jsx("title", { children: R }),
130
+ l && /* @__PURE__ */ e.jsx("meta", { name: "description", content: l })
131
+ ] }),
127
132
  /* @__PURE__ */ e.jsxs(
128
133
  "div",
129
134
  {
130
- className: m(
131
- S,
135
+ className: p(
136
+ I,
132
137
  "max-w-full xl:w-full xl:max-w-prose flex-1 flex-shrink pt-[--padding-content-top] pb-[--padding-content-bottom]"
133
138
  ),
134
139
  children: [
135
- (n || t) && /* @__PURE__ */ e.jsxs("header", { children: [
136
- n && /* @__PURE__ */ e.jsx(H, { children: n }),
137
- t && /* @__PURE__ */ e.jsx(h, { level: 1, id: k(t), children: t })
140
+ (d || o) && /* @__PURE__ */ e.jsxs("header", { children: [
141
+ d && /* @__PURE__ */ e.jsx(_, { children: d }),
142
+ o && /* @__PURE__ */ e.jsx(h, { level: 1, id: C(o), children: o })
138
143
  ] }),
139
144
  /* @__PURE__ */ e.jsx(
140
- a,
145
+ s,
141
146
  {
142
- components: { ...P(), ...q }
147
+ components: { ...M(), ...B }
143
148
  }
144
149
  ),
145
- !R && /* @__PURE__ */ e.jsxs(e.Fragment, { children: [
150
+ !T && /* @__PURE__ */ e.jsxs(e.Fragment, { children: [
146
151
  /* @__PURE__ */ e.jsx("hr", {}),
147
152
  /* @__PURE__ */ e.jsxs("div", { className: "not-prose flex flex-wrap items-center justify-between gap-2 lg:gap-8", children: [
148
- d ? /* @__PURE__ */ e.jsxs(
153
+ x ? /* @__PURE__ */ e.jsxs(
149
154
  y,
150
155
  {
151
- to: d.id,
156
+ to: x.id,
152
157
  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",
153
- title: d.label,
158
+ title: x.label,
154
159
  children: [
155
160
  /* @__PURE__ */ e.jsx("div", { className: "text-sm text-muted-foreground", children: "← Previous page" }),
156
- /* @__PURE__ */ e.jsx("div", { className: "text-lg text-primary truncate", children: d.label })
161
+ /* @__PURE__ */ e.jsx("div", { className: "text-lg text-primary truncate", children: x.label })
157
162
  ]
158
163
  }
159
164
  ) : /* @__PURE__ */ e.jsx("div", { className: "flex-1" }),
160
- x ? /* @__PURE__ */ e.jsxs(
165
+ m ? /* @__PURE__ */ e.jsxs(
161
166
  y,
162
167
  {
163
- to: x.id,
168
+ to: m.id,
164
169
  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",
165
- title: x.label,
170
+ title: m.label,
166
171
  children: [
167
172
  /* @__PURE__ */ e.jsx("div", { className: "text-sm text-muted-foreground", children: "Next page →" }),
168
- /* @__PURE__ */ e.jsx("div", { className: "text-lg text-primary truncate", children: x.label })
173
+ /* @__PURE__ */ e.jsx("div", { className: "text-lg text-primary truncate", children: m.label })
169
174
  ]
170
175
  }
171
176
  ) : /* @__PURE__ */ e.jsx("div", { className: "flex-1" })
@@ -174,10 +179,10 @@ const w = "data-active", b = ({
174
179
  ]
175
180
  }
176
181
  ),
177
- /* @__PURE__ */ e.jsx("div", { className: "hidden xl:block", children: T && /* @__PURE__ */ e.jsx(M, { entries: u }) })
182
+ /* @__PURE__ */ e.jsx("div", { className: "hidden xl:block", children: k && /* @__PURE__ */ e.jsx(q, { entries: u }) })
178
183
  ] });
179
184
  };
180
185
  export {
181
- U as MdxPage
186
+ Z as MdxPage
182
187
  };
183
- //# sourceMappingURL=MdxPage-B2FpJ9KC.js.map
188
+ //# sourceMappingURL=MdxPage-HjFSZJQk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MdxPage-HjFSZJQk.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-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 { 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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"}