zudoku 0.3.0-dev.54 → 0.3.0-dev.55

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 (121) hide show
  1. package/lib/AnchorLink-BaXHjhF-.js +989 -0
  2. package/lib/{AnchorLink-BCN_a_Uz.js.map → AnchorLink-BaXHjhF-.js.map} +1 -1
  3. package/lib/Combination-BfufJFkX.js +1365 -0
  4. package/lib/{Combination-B0Iu6mhJ.js.map → Combination-BfufJFkX.js.map} +1 -1
  5. package/lib/DevPortalProvider-GjdO0Xr-.js +1610 -0
  6. package/lib/{DevPortalProvider-Do9oJqme.js.map → DevPortalProvider-GjdO0Xr-.js.map} +1 -1
  7. package/lib/Markdown-B8nPVql1.js +19708 -0
  8. package/lib/Markdown-B8nPVql1.js.map +1 -0
  9. package/lib/MdxPage-Dlujuj-J.js +223 -0
  10. package/lib/{MdxPage-Bsc79cD-.js.map → MdxPage-Dlujuj-J.js.map} +1 -1
  11. package/lib/OperationList-krPgt6sE.js +8041 -0
  12. package/lib/{OperationList-K-JWBxau.js.map → OperationList-krPgt6sE.js.map} +1 -1
  13. package/lib/Playground-DOHxca0P.js +539 -0
  14. package/lib/{Playground-Czy7ha9z.js.map → Playground-DOHxca0P.js.map} +1 -1
  15. package/lib/Route-CR6TEwVC.js +13 -0
  16. package/lib/{Route-D-egsGHx.js.map → Route-CR6TEwVC.js.map} +1 -1
  17. package/lib/Select-Boi_pe3L.js +5298 -0
  18. package/lib/{Select-CcBbwJ2R.js.map → Select-Boi_pe3L.js.map} +1 -1
  19. package/lib/Spinner-oU0QJmi_.js +16 -0
  20. package/lib/{Spinner-C9_Opdev.js.map → Spinner-oU0QJmi_.js.map} +1 -1
  21. package/lib/_commonjsHelpers-BxmBWJD2.js +34 -0
  22. package/lib/_commonjsHelpers-BxmBWJD2.js.map +1 -0
  23. package/lib/assets/index-CpIig0AX.js +6341 -0
  24. package/lib/{index-pI9JkN46.js.map → assets/index-CpIig0AX.js.map} +1 -1
  25. package/lib/assets/worker-B5k2aBV9.js +18921 -0
  26. package/lib/assets/{worker-BjPv-hjP.js.map → worker-B5k2aBV9.js.map} +1 -1
  27. package/lib/context-BoN_3uxi.js +17 -0
  28. package/lib/{context-_fYfJFgk.js.map → context-BoN_3uxi.js.map} +1 -1
  29. package/lib/hook-CIuFuyBT.js +90 -0
  30. package/lib/{hook-CKqQERWo.js.map → hook-CIuFuyBT.js.map} +1 -1
  31. package/lib/index-BL1P4Gqq.js +280 -0
  32. package/lib/{index-ByHya67R.js.map → index-BL1P4Gqq.js.map} +1 -1
  33. package/lib/index-Bn03IPZt.js +6341 -0
  34. package/lib/{assets/index-BPdJm2ty.js.map → index-Bn03IPZt.js.map} +1 -1
  35. package/lib/{index-jsFBaizC.js → index-Dih8IAqw.js} +103 -83
  36. package/lib/{index-jsFBaizC.js.map → index-Dih8IAqw.js.map} +1 -1
  37. package/lib/index-FprhHF51.js +253 -0
  38. package/lib/{index-DseBZFJ-.js.map → index-FprhHF51.js.map} +1 -1
  39. package/lib/jsx-runtime-DvZ6OKMM.js +2110 -0
  40. package/lib/{jsx-runtime-CJZJivg2.js.map → jsx-runtime-DvZ6OKMM.js.map} +1 -1
  41. package/lib/mutation-DWY9x2Uc.js +250 -0
  42. package/lib/{mutation-DjbQSHzT.js.map → mutation-DWY9x2Uc.js.map} +1 -1
  43. package/lib/prism-bash.min-BtBk0onv.js +7 -0
  44. package/lib/{prism-bash.min-DadFsM4Z.js.map → prism-bash.min-BtBk0onv.js.map} +1 -1
  45. package/lib/prism-csharp.min-Cv7D49bv.js +30 -0
  46. package/lib/{prism-csharp.min-Yizuc34Y.js.map → prism-csharp.min-Cv7D49bv.js.map} +1 -1
  47. package/lib/prism-java.min-tNK-JX6x.js +7 -0
  48. package/lib/{prism-java.min-d5iT_mOd.js.map → prism-java.min-tNK-JX6x.js.map} +1 -1
  49. package/lib/prism-json.min-Cdtv-CME.js +2 -0
  50. package/lib/{prism-json.min-B1GJqK1k.js.map → prism-json.min-Cdtv-CME.js.map} +1 -1
  51. package/lib/prism-markup-templating-iotg2sCU.js +94 -0
  52. package/lib/{prism-markup-templating-DZrrEs0A.js.map → prism-markup-templating-iotg2sCU.js.map} +1 -1
  53. package/lib/prism-objectivec.min-CY4WGixz.js +2 -0
  54. package/lib/{prism-objectivec.min-BXSWqpJJ.js.map → prism-objectivec.min-CY4WGixz.js.map} +1 -1
  55. package/lib/prism-php.min-T6sIVgED.js +11 -0
  56. package/lib/{prism-php.min-o7FpoMP_.js.map → prism-php.min-T6sIVgED.js.map} +1 -1
  57. package/lib/prism-ruby.min-B-2KAa4y.js +8 -0
  58. package/lib/{prism-ruby.min-C7LwcKyz.js.map → prism-ruby.min-B-2KAa4y.js.map} +1 -1
  59. package/lib/router-ButO1QyY.js +4062 -0
  60. package/lib/{router-CBw2vqJE.js.map → router-ButO1QyY.js.map} +1 -1
  61. package/lib/slugify-CmS97Vy8.js +50 -0
  62. package/lib/{slugify-CiPVjteN.js.map → slugify-CmS97Vy8.js.map} +1 -1
  63. package/lib/state-CmGfNKhR.js +436 -0
  64. package/lib/{state-DKdaQzvh.js.map → state-CmGfNKhR.js.map} +1 -1
  65. package/lib/urql-DtVKPBx_.js +2567 -0
  66. package/lib/{urql-DEKdguFl.js.map → urql-DtVKPBx_.js.map} +1 -1
  67. package/lib/util-B5KX4h4M.js +55 -0
  68. package/lib/{util-_jwUlTBU.js.map → util-B5KX4h4M.js.map} +1 -1
  69. package/lib/zudoku.auth-auth0.js +24 -18
  70. package/lib/zudoku.auth-auth0.js.map +1 -1
  71. package/lib/zudoku.auth-clerk.js +43 -34
  72. package/lib/zudoku.auth-clerk.js.map +1 -1
  73. package/lib/zudoku.auth-openid.js +1121 -734
  74. package/lib/zudoku.auth-openid.js.map +1 -1
  75. package/lib/zudoku.components.js +1076 -823
  76. package/lib/zudoku.components.js.map +1 -1
  77. package/lib/zudoku.openapi-worker.js +13776 -9681
  78. package/lib/zudoku.openapi-worker.js.map +1 -1
  79. package/lib/zudoku.plugin-api-keys.js +206 -165
  80. package/lib/zudoku.plugin-api-keys.js.map +1 -1
  81. package/lib/zudoku.plugin-markdown.js +41 -33
  82. package/lib/zudoku.plugin-markdown.js.map +1 -1
  83. package/lib/zudoku.plugin-openapi.js +6 -6
  84. package/lib/zudoku.plugin-redirect.js +10 -8
  85. package/lib/zudoku.plugin-redirect.js.map +1 -1
  86. package/package.json +1 -1
  87. package/lib/AnchorLink-BCN_a_Uz.js +0 -705
  88. package/lib/Combination-B0Iu6mhJ.js +0 -915
  89. package/lib/DevPortalProvider-Do9oJqme.js +0 -1081
  90. package/lib/Markdown-aE_XoLNs.js +0 -15030
  91. package/lib/Markdown-aE_XoLNs.js.map +0 -1
  92. package/lib/MdxPage-Bsc79cD-.js +0 -190
  93. package/lib/OperationList-K-JWBxau.js +0 -5091
  94. package/lib/Playground-Czy7ha9z.js +0 -502
  95. package/lib/Route-D-egsGHx.js +0 -13
  96. package/lib/Select-CcBbwJ2R.js +0 -3667
  97. package/lib/Spinner-C9_Opdev.js +0 -15
  98. package/lib/_commonjsHelpers-BVfed4GL.js +0 -29
  99. package/lib/_commonjsHelpers-BVfed4GL.js.map +0 -1
  100. package/lib/assets/index-BPdJm2ty.js +0 -4765
  101. package/lib/assets/worker-BjPv-hjP.js +0 -14897
  102. package/lib/context-_fYfJFgk.js +0 -14
  103. package/lib/hook-CKqQERWo.js +0 -77
  104. package/lib/index-ByHya67R.js +0 -207
  105. package/lib/index-DseBZFJ-.js +0 -170
  106. package/lib/index-pI9JkN46.js +0 -4765
  107. package/lib/jsx-runtime-CJZJivg2.js +0 -1526
  108. package/lib/mutation-DjbQSHzT.js +0 -208
  109. package/lib/prism-bash.min-DadFsM4Z.js +0 -7
  110. package/lib/prism-csharp.min-Yizuc34Y.js +0 -35
  111. package/lib/prism-java.min-d5iT_mOd.js +0 -7
  112. package/lib/prism-json.min-B1GJqK1k.js +0 -2
  113. package/lib/prism-markup-templating-DZrrEs0A.js +0 -62
  114. package/lib/prism-objectivec.min-BXSWqpJJ.js +0 -2
  115. package/lib/prism-php.min-o7FpoMP_.js +0 -11
  116. package/lib/prism-ruby.min-C7LwcKyz.js +0 -10
  117. package/lib/router-CBw2vqJE.js +0 -2973
  118. package/lib/slugify-CiPVjteN.js +0 -28
  119. package/lib/state-DKdaQzvh.js +0 -288
  120. package/lib/urql-DEKdguFl.js +0 -1592
  121. package/lib/util-_jwUlTBU.js +0 -41
@@ -0,0 +1,223 @@
1
+ import { j as jsxRuntimeExports, u as useLocation } from "./jsx-runtime-DvZ6OKMM.js";
2
+ import { A as AnchorLink, a as Helmet, u as useMDXComponents } from "./AnchorLink-BaXHjhF-.js";
3
+ import { useRef, useState, useEffect, useMemo } from "react";
4
+ import { c as createLucideIcon, b as useViewportAnchor, e as cn, P as ProseClasses, g as CategoryHeading, H as Heading, L as Link } from "./Markdown-B8nPVql1.js";
5
+ import { k as useTopNavigationItem } from "./DevPortalProvider-GjdO0Xr-.js";
6
+ import { t as traverseNavigation, i as isPathItem } from "./util-B5KX4h4M.js";
7
+ import { s as slugify } from "./slugify-CmS97Vy8.js";
8
+ /**
9
+ * @license lucide-react v0.378.0 - ISC
10
+ *
11
+ * This source code is licensed under the ISC license.
12
+ * See the LICENSE file in the root directory of this source tree.
13
+ */
14
+ const ListTree = createLucideIcon("ListTree", [
15
+ ["path", { d: "M21 12h-8", key: "1bmf0i" }],
16
+ ["path", { d: "M21 6H8", key: "1pqkrb" }],
17
+ ["path", { d: "M21 18h-8", key: "1tm79t" }],
18
+ ["path", { d: "M3 6v4c0 1.1.9 2 2 2h3", key: "1ywdgy" }],
19
+ ["path", { d: "M3 10v6c0 1.1.9 2 2 2h3", key: "2wc746" }]
20
+ ]);
21
+ const DATA_ANCHOR_ATTR = "data-active";
22
+ const TocItem = ({
23
+ item,
24
+ children,
25
+ className,
26
+ isActive
27
+ }) => {
28
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs(
29
+ "li",
30
+ {
31
+ className: cn(
32
+ "truncate",
33
+ isActive ? "text-primary" : "text-foreground/65 dark:text-foreground/75",
34
+ className
35
+ ),
36
+ title: item.value,
37
+ children: [
38
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
39
+ AnchorLink,
40
+ {
41
+ to: `#${item.id}`,
42
+ ...{ [DATA_ANCHOR_ATTR]: item.id },
43
+ className: cn(
44
+ isActive ? "text-primary" : "text-foreground/65 dark:text-foreground/75 hover:text-foreground"
45
+ ),
46
+ children: item.value
47
+ }
48
+ ),
49
+ children
50
+ ]
51
+ }
52
+ );
53
+ };
54
+ const Toc = ({ entries }) => {
55
+ const { activeAnchor } = useViewportAnchor();
56
+ const listWrapperRef = useRef(null);
57
+ const [indicatorStyle, setIndicatorStyles] = useState({});
58
+ useEffect(() => {
59
+ if (!listWrapperRef.current) return;
60
+ const activeElement = listWrapperRef.current.querySelector(
61
+ `[${DATA_ANCHOR_ATTR}='${activeAnchor}']`
62
+ );
63
+ if (!activeElement) {
64
+ setIndicatorStyles({
65
+ "--indicator-top": "0",
66
+ "--indicator-opacity": 0
67
+ });
68
+ return;
69
+ }
70
+ const topParent = listWrapperRef.current.getBoundingClientRect().top;
71
+ const topElement = activeElement.getBoundingClientRect().top;
72
+ setIndicatorStyles({
73
+ "--indicator-top": `${topElement - topParent}px`,
74
+ "--indicator-opacity": 1
75
+ });
76
+ }, [activeAnchor]);
77
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("aside", { className: "sticky 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: [
78
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2 font-medium mb-2", children: [
79
+ /* @__PURE__ */ jsxRuntimeExports.jsx(ListTree, { size: 16 }),
80
+ "On this page"
81
+ ] }),
82
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
83
+ "ul",
84
+ {
85
+ ref: listWrapperRef,
86
+ style: indicatorStyle,
87
+ className: cn(
88
+ "relative ms-2 ps-4 font-medium list-none mt-0 space-y-2",
89
+ "before:absolute before:inset-0 before:right-auto before:bg-border before:w-[2px]",
90
+ "after:absolute after:-left-px after:-translate-y-1 after:top-[--indicator-top] after:opacity-[--indicator-opacity] after:h-6 after:bg-primary after:w-[4px] after:rounded after:ease-out after:[transition:top__150ms,opacity_325ms]"
91
+ ),
92
+ children: entries.map((item) => /* @__PURE__ */ jsxRuntimeExports.jsx(
93
+ TocItem,
94
+ {
95
+ isActive: item.id === activeAnchor,
96
+ item,
97
+ className: "pl-0",
98
+ children: item.children && /* @__PURE__ */ jsxRuntimeExports.jsx("ul", { className: "list-none pl-4 pt-2 space-y-2", children: item.children.map((child) => /* @__PURE__ */ jsxRuntimeExports.jsx(
99
+ TocItem,
100
+ {
101
+ item: child,
102
+ isActive: child.id === activeAnchor
103
+ },
104
+ child.id
105
+ )) })
106
+ },
107
+ item.id
108
+ ))
109
+ }
110
+ )
111
+ ] });
112
+ };
113
+ const MarkdownHeadings = {
114
+ h2: ({ children, id }) => /* @__PURE__ */ jsxRuntimeExports.jsx(Heading, { level: 2, id, registerSidebarAnchor: true, children }),
115
+ h3: ({ children, id }) => /* @__PURE__ */ jsxRuntimeExports.jsxs(Heading, { level: 3, id, registerSidebarAnchor: true, children: [
116
+ " ",
117
+ children
118
+ ] })
119
+ };
120
+ const MdxPage = ({
121
+ mdxComponent: MdxComponent,
122
+ frontmatter = {},
123
+ defaultOptions,
124
+ tableOfContents
125
+ }) => {
126
+ var _a, _b;
127
+ const navItem = useTopNavigationItem();
128
+ const location = useLocation();
129
+ const categoryTitle = navItem ? traverseNavigation(navItem, (_node, fullPath, parentNodes) => {
130
+ var _a2;
131
+ if (fullPath === location.pathname) {
132
+ return (_a2 = parentNodes.at(0)) == null ? void 0 : _a2.label;
133
+ }
134
+ }) : void 0;
135
+ const title = frontmatter.title;
136
+ const category = frontmatter.category ?? categoryTitle;
137
+ const hideToc = frontmatter.toc === false || (defaultOptions == null ? void 0 : defaultOptions.toc) === false;
138
+ const pageTitle = ((_a = tableOfContents.find((item) => item.depth === 1)) == null ? void 0 : _a.value) ?? title;
139
+ const hidePager = frontmatter.disablePager ?? (defaultOptions == null ? void 0 : defaultOptions.disablePager) ?? false;
140
+ const tocEntries = ((_b = tableOfContents.find((item) => item.depth === 1)) == null ? void 0 : _b.children) ?? // if `title` is provided by frontmatter it does not appear in the table of contents
141
+ tableOfContents.filter((item) => item.depth === 2);
142
+ const showToc = !hideToc && tocEntries.length > 0;
143
+ const { prev, next } = useMemo(() => {
144
+ let prev2 = { path: "", label: "" };
145
+ let next2 = { path: "", label: "" };
146
+ let shouldStop = false;
147
+ if (!navItem) return { prev: prev2, next: next2 };
148
+ traverseNavigation(navItem, (node, fullPath) => {
149
+ var _a2, _b2;
150
+ const item = { path: fullPath, label: node.label };
151
+ if (shouldStop && isPathItem(node) && !((_a2 = node.children) == null ? void 0 : _a2.length)) {
152
+ next2 = item;
153
+ return true;
154
+ }
155
+ if (fullPath === location.pathname) {
156
+ shouldStop = true;
157
+ }
158
+ if (!shouldStop && isPathItem(node) && !((_b2 = node.children) == null ? void 0 : _b2.length)) {
159
+ prev2 = item;
160
+ }
161
+ });
162
+ return { prev: prev2, next: next2 };
163
+ }, [navItem, location.pathname]);
164
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "xl:grid grid-cols-[--sidecar-grid-cols] gap-8 justify-between", children: [
165
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Helmet, { children: /* @__PURE__ */ jsxRuntimeExports.jsx("title", { children: pageTitle }) }),
166
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(
167
+ "div",
168
+ {
169
+ className: cn(
170
+ ProseClasses,
171
+ "max-w-full xl:w-full xl:max-w-prose flex-1 flex-shrink pt-[--padding-content-top] pb-[--padding-content-bottom]"
172
+ ),
173
+ children: [
174
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("header", { children: [
175
+ category && /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryHeading, { children: category }),
176
+ title && /* @__PURE__ */ jsxRuntimeExports.jsx(Heading, { level: 1, id: slugify(title, { lower: true }), children: title }),
177
+ frontmatter.description && /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "prose-lg", children: frontmatter.description })
178
+ ] }),
179
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
180
+ MdxComponent,
181
+ {
182
+ components: { ...useMDXComponents(), ...MarkdownHeadings }
183
+ }
184
+ ),
185
+ !hidePager && /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
186
+ /* @__PURE__ */ jsxRuntimeExports.jsx("hr", {}),
187
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "not-prose flex items-center justify-between gap-8", children: [
188
+ prev.path ? /* @__PURE__ */ jsxRuntimeExports.jsxs(
189
+ Link,
190
+ {
191
+ to: prev.path,
192
+ className: "flex flex-col items-stretch gap-2 flex-1 truncate border border-border rounded px-6 py-4 text-start hover:border-primary/85 transition shadow-sm hover:shadow-md",
193
+ title: typeof prev.label === "string" ? prev.label : void 0,
194
+ children: [
195
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-sm text-muted-foreground", children: "← Previous page" }),
196
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-lg text-primary truncate", children: prev.label })
197
+ ]
198
+ }
199
+ ) : /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex-1" }),
200
+ next.path ? /* @__PURE__ */ jsxRuntimeExports.jsxs(
201
+ Link,
202
+ {
203
+ to: next.path,
204
+ className: "flex flex-col items-stretch gap-2 flex-1 truncate border border-border rounded px-6 py-4 text-end hover:border-primary/85 transition shadow-sm hover:shadow-md",
205
+ title: typeof next.label === "string" ? next.label : void 0,
206
+ children: [
207
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-sm text-muted-foreground", children: "Next page →" }),
208
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-lg text-primary truncate", children: next.label })
209
+ ]
210
+ }
211
+ ) : /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex-1" })
212
+ ] })
213
+ ] })
214
+ ]
215
+ }
216
+ ),
217
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "hidden xl:block", children: showToc && /* @__PURE__ */ jsxRuntimeExports.jsx(Toc, { entries: tocEntries }) })
218
+ ] });
219
+ };
220
+ export {
221
+ MdxPage
222
+ };
223
+ //# sourceMappingURL=MdxPage-Dlujuj-J.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MdxPage-Bsc79cD-.js","sources":["../../../node_modules/.pnpm/lucide-react@0.378.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/list-tree.js","../src/lib/plugins/markdown/Toc.tsx","../src/lib/plugins/markdown/MdxPage.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.378.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst ListTree = createLucideIcon(\"ListTree\", [\n [\"path\", { d: \"M21 12h-8\", key: \"1bmf0i\" }],\n [\"path\", { d: \"M21 6H8\", key: \"1pqkrb\" }],\n [\"path\", { d: \"M21 18h-8\", key: \"1tm79t\" }],\n [\"path\", { d: \"M3 6v4c0 1.1.9 2 2 2h3\", key: \"1ywdgy\" }],\n [\"path\", { d: \"M3 10v6c0 1.1.9 2 2 2h3\", key: \"2wc746\" }]\n]);\n\nexport { ListTree as default };\n//# sourceMappingURL=list-tree.js.map\n","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 [indicatorStyle, setIndicatorStyles] = useState<CSSProperties>({});\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({\n \"--indicator-top\": \"0\",\n \"--indicator-opacity\": 0,\n } as CSSProperties);\n return;\n }\n\n const topParent = listWrapperRef.current.getBoundingClientRect().top;\n const topElement = activeElement.getBoundingClientRect().top;\n\n setIndicatorStyles({\n \"--indicator-top\": `${topElement - topParent}px`,\n \"--indicator-opacity\": 1,\n } as CSSProperties);\n }, [activeAnchor]);\n\n return (\n <aside className=\"sticky 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\n <ul\n ref={listWrapperRef}\n style={indicatorStyle}\n className={cn(\n \"relative ms-2 ps-4 font-medium list-none mt-0 space-y-2\",\n \"before:absolute before:inset-0 before:right-auto before:bg-border before:w-[2px]\",\n \"after:absolute after:-left-px after:-translate-y-1 after:top-[--indicator-top] after:opacity-[--indicator-opacity] after:h-6 after:bg-primary after:w-[4px] after:rounded after:ease-out after:[transition:top__150ms,opacity_325ms]\",\n )}\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 </aside>\n );\n};\n","import { useMDXComponents } from \"@mdx-js/react\";\nimport { Helmet } from \"@zudoku/react-helmet-async\";\nimport { useMemo, type PropsWithChildren, type ReactNode } from \"react\";\nimport { Link, useLocation } from \"react-router-dom\";\nimport { CategoryHeading } from \"../../components/CategoryHeading.js\";\nimport { Heading } from \"../../components/Heading.js\";\nimport { ProseClasses } from \"../../components/Markdown.js\";\nimport { useTopNavigationItem } from \"../../components/context/DevPortalProvider.js\";\nimport { isPathItem } from \"../../components/navigation/util.js\";\nimport type { MdxComponentsType } from \"../../util/MdxComponents.js\";\nimport { cn } from \"../../util/cn.js\";\nimport slugify from \"../../util/slugify.js\";\nimport { traverseNavigation } from \"../../util/traverseNavigation.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 {\" \"}\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 navItem = useTopNavigationItem();\n const location = useLocation();\n\n const categoryTitle = navItem\n ? traverseNavigation(navItem, (_node, fullPath, parentNodes) => {\n if (fullPath === location.pathname) {\n return parentNodes.at(0)?.label;\n }\n })\n : undefined;\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 } = useMemo(() => {\n let prev = { path: \"\", label: \"\" as ReactNode };\n let next = { path: \"\", label: \"\" as ReactNode };\n let shouldStop = false;\n\n if (!navItem) return { prev, next };\n\n traverseNavigation(navItem, (node, fullPath) => {\n const item = { path: fullPath, label: node.label };\n\n if (shouldStop && isPathItem(node) && !node.children?.length) {\n next = item;\n return true;\n }\n if (fullPath === location.pathname) {\n shouldStop = true;\n }\n if (!shouldStop && isPathItem(node) && !node.children?.length) {\n prev = item;\n }\n });\n\n return { prev, next } as const;\n }, [navItem, location.pathname]);\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 {frontmatter.description && (\n <p className=\"prose-lg\">{frontmatter.description}</p>\n )}\n </header>\n <MdxComponent\n components={{ ...useMDXComponents(), ...MarkdownHeadings }}\n />\n {!hidePager && (\n <>\n <hr />\n <div className=\"not-prose flex items-center justify-between gap-8\">\n {prev.path ? (\n <Link\n to={prev.path}\n className=\"flex flex-col items-stretch gap-2 flex-1 truncate border border-border rounded px-6 py-4 text-start hover:border-primary/85 transition shadow-sm hover:shadow-md\"\n title={\n typeof prev.label === \"string\" ? prev.label : undefined\n }\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.path ? (\n <Link\n to={next.path}\n className=\"flex flex-col items-stretch gap-2 flex-1 truncate border border-border rounded px-6 py-4 text-end hover:border-primary/85 transition shadow-sm hover:shadow-md\"\n title={\n typeof next.label === \"string\" ? next.label : undefined\n }\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":["ListTree","createLucideIcon","DATA_ANCHOR_ATTR","TocItem","item","children","className","isActive","jsxs","cn","jsx","AnchorLink","Toc","entries","activeAnchor","useViewportAnchor","listWrapperRef","useRef","indicatorStyle","setIndicatorStyles","useState","useEffect","activeElement","topParent","topElement","ListTreeIcon","child","MarkdownHeadings","id","Heading","MdxPage","MdxComponent","frontmatter","defaultOptions","tableOfContents","navItem","useTopNavigationItem","location","useLocation","categoryTitle","traverseNavigation","_node","fullPath","parentNodes","_a","title","category","hideToc","pageTitle","hidePager","tocEntries","_b","showToc","prev","next","useMemo","shouldStop","node","isPathItem","Helmet","ProseClasses","CategoryHeading","slugify","useMDXComponents","Fragment","Link"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"MdxPage-Dlujuj-J.js","sources":["../../../node_modules/.pnpm/lucide-react@0.378.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/list-tree.js","../src/lib/plugins/markdown/Toc.tsx","../src/lib/plugins/markdown/MdxPage.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.378.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst ListTree = createLucideIcon(\"ListTree\", [\n [\"path\", { d: \"M21 12h-8\", key: \"1bmf0i\" }],\n [\"path\", { d: \"M21 6H8\", key: \"1pqkrb\" }],\n [\"path\", { d: \"M21 18h-8\", key: \"1tm79t\" }],\n [\"path\", { d: \"M3 6v4c0 1.1.9 2 2 2h3\", key: \"1ywdgy\" }],\n [\"path\", { d: \"M3 10v6c0 1.1.9 2 2 2h3\", key: \"2wc746\" }]\n]);\n\nexport { ListTree as default };\n//# sourceMappingURL=list-tree.js.map\n","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 [indicatorStyle, setIndicatorStyles] = useState<CSSProperties>({});\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({\n \"--indicator-top\": \"0\",\n \"--indicator-opacity\": 0,\n } as CSSProperties);\n return;\n }\n\n const topParent = listWrapperRef.current.getBoundingClientRect().top;\n const topElement = activeElement.getBoundingClientRect().top;\n\n setIndicatorStyles({\n \"--indicator-top\": `${topElement - topParent}px`,\n \"--indicator-opacity\": 1,\n } as CSSProperties);\n }, [activeAnchor]);\n\n return (\n <aside className=\"sticky 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\n <ul\n ref={listWrapperRef}\n style={indicatorStyle}\n className={cn(\n \"relative ms-2 ps-4 font-medium list-none mt-0 space-y-2\",\n \"before:absolute before:inset-0 before:right-auto before:bg-border before:w-[2px]\",\n \"after:absolute after:-left-px after:-translate-y-1 after:top-[--indicator-top] after:opacity-[--indicator-opacity] after:h-6 after:bg-primary after:w-[4px] after:rounded after:ease-out after:[transition:top__150ms,opacity_325ms]\",\n )}\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 </aside>\n );\n};\n","import { useMDXComponents } from \"@mdx-js/react\";\nimport { Helmet } from \"@zudoku/react-helmet-async\";\nimport { useMemo, type PropsWithChildren, type ReactNode } from \"react\";\nimport { Link, useLocation } from \"react-router-dom\";\nimport { CategoryHeading } from \"../../components/CategoryHeading.js\";\nimport { Heading } from \"../../components/Heading.js\";\nimport { ProseClasses } from \"../../components/Markdown.js\";\nimport { useTopNavigationItem } from \"../../components/context/DevPortalProvider.js\";\nimport { isPathItem } from \"../../components/navigation/util.js\";\nimport type { MdxComponentsType } from \"../../util/MdxComponents.js\";\nimport { cn } from \"../../util/cn.js\";\nimport slugify from \"../../util/slugify.js\";\nimport { traverseNavigation } from \"../../util/traverseNavigation.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 {\" \"}\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 navItem = useTopNavigationItem();\n const location = useLocation();\n\n const categoryTitle = navItem\n ? traverseNavigation(navItem, (_node, fullPath, parentNodes) => {\n if (fullPath === location.pathname) {\n return parentNodes.at(0)?.label;\n }\n })\n : undefined;\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 } = useMemo(() => {\n let prev = { path: \"\", label: \"\" as ReactNode };\n let next = { path: \"\", label: \"\" as ReactNode };\n let shouldStop = false;\n\n if (!navItem) return { prev, next };\n\n traverseNavigation(navItem, (node, fullPath) => {\n const item = { path: fullPath, label: node.label };\n\n if (shouldStop && isPathItem(node) && !node.children?.length) {\n next = item;\n return true;\n }\n if (fullPath === location.pathname) {\n shouldStop = true;\n }\n if (!shouldStop && isPathItem(node) && !node.children?.length) {\n prev = item;\n }\n });\n\n return { prev, next } as const;\n }, [navItem, location.pathname]);\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 {frontmatter.description && (\n <p className=\"prose-lg\">{frontmatter.description}</p>\n )}\n </header>\n <MdxComponent\n components={{ ...useMDXComponents(), ...MarkdownHeadings }}\n />\n {!hidePager && (\n <>\n <hr />\n <div className=\"not-prose flex items-center justify-between gap-8\">\n {prev.path ? (\n <Link\n to={prev.path}\n className=\"flex flex-col items-stretch gap-2 flex-1 truncate border border-border rounded px-6 py-4 text-start hover:border-primary/85 transition shadow-sm hover:shadow-md\"\n title={\n typeof prev.label === \"string\" ? prev.label : undefined\n }\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.path ? (\n <Link\n to={next.path}\n className=\"flex flex-col items-stretch gap-2 flex-1 truncate border border-border rounded px-6 py-4 text-end hover:border-primary/85 transition shadow-sm hover:shadow-md\"\n title={\n typeof next.label === \"string\" ? next.label : undefined\n }\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":["jsxs","jsx","ListTreeIcon","_a","prev","next","_b","Fragment"],"mappings":"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","x_google_ignoreList":[0]}