zudoku 0.28.0 → 0.28.1
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 +1 -2
- package/dist/app/main.js.map +1 -1
- package/dist/config/validators/InputSidebarSchema.d.ts +2 -2
- package/dist/lib/components/PathRenderer.d.ts +11 -0
- package/dist/lib/components/PathRenderer.js +25 -0
- package/dist/lib/components/PathRenderer.js.map +1 -0
- package/dist/lib/components/ThemeSwitch.js +4 -4
- package/dist/lib/components/ThemeSwitch.js.map +1 -1
- package/dist/lib/components/index.d.ts +1 -0
- package/dist/lib/components/index.js +4 -2
- package/dist/lib/components/index.js.map +1 -1
- package/dist/lib/components/navigation/SidebarCategory.js +16 -14
- package/dist/lib/components/navigation/SidebarCategory.js.map +1 -1
- package/dist/lib/oas/graphql/circular.js +17 -6
- package/dist/lib/oas/graphql/circular.js.map +1 -1
- package/dist/lib/plugins/openapi/ColorizedParam.js +3 -1
- package/dist/lib/plugins/openapi/ColorizedParam.js.map +1 -1
- package/dist/lib/plugins/openapi/OperationListItem.js +1 -1
- package/dist/lib/plugins/openapi/OperationListItem.js.map +1 -1
- package/dist/lib/plugins/openapi/ParameterListItem.js +1 -1
- package/dist/lib/plugins/openapi/ParameterListItem.js.map +1 -1
- package/dist/lib/plugins/openapi/Sidecar.js +5 -10
- package/dist/lib/plugins/openapi/Sidecar.js.map +1 -1
- package/dist/lib/plugins/openapi/playground/PathParams.js +1 -1
- package/dist/lib/plugins/openapi/playground/PathParams.js.map +1 -1
- package/dist/lib/plugins/openapi/playground/Playground.js +7 -15
- package/dist/lib/plugins/openapi/playground/Playground.js.map +1 -1
- package/dist/lib/plugins/openapi/schema/{SchemaComponents.js → SchemaPropertyItem.js} +10 -8
- package/dist/lib/plugins/openapi/schema/SchemaPropertyItem.js.map +1 -0
- package/dist/lib/plugins/openapi/schema/SchemaView.js +1 -1
- package/dist/lib/plugins/openapi/schema/SchemaView.js.map +1 -1
- package/dist/lib/plugins/openapi/schema/utils.d.ts +1 -0
- package/dist/lib/plugins/openapi/schema/utils.js +2 -0
- package/dist/lib/plugins/openapi/schema/utils.js.map +1 -1
- package/dist/vite/plugin-api.js +4 -2
- package/dist/vite/plugin-api.js.map +1 -1
- package/dist/vite/prerender.js +0 -1
- package/dist/vite/prerender.js.map +1 -1
- package/lib/{MdxPage-DewragjB.js → MdxPage-BuG8Tuwc.js} +2 -2
- package/lib/{MdxPage-DewragjB.js.map → MdxPage-BuG8Tuwc.js.map} +1 -1
- package/lib/{OperationList-D_ejrepA.js → OperationList-CDt1xdc4.js} +978 -970
- package/lib/OperationList-CDt1xdc4.js.map +1 -0
- package/lib/{circular-Dgpd6AN-.js → circular-DxaIIlWD.js} +251 -239
- package/lib/{circular-Dgpd6AN-.js.map → circular-DxaIIlWD.js.map} +1 -1
- package/lib/{createServer-BydbkTsd.js → createServer-CjNktZzL.js} +2 -2
- package/lib/{createServer-BydbkTsd.js.map → createServer-CjNktZzL.js.map} +1 -1
- package/lib/{index-DGugJOLc.js → index-Eb1oiHbM.js} +583 -560
- package/lib/index-Eb1oiHbM.js.map +1 -0
- package/lib/{useScrollToAnchor-eRM9tVvD.js → useScrollToAnchor-BZsGmBng.js} +84 -89
- package/lib/useScrollToAnchor-BZsGmBng.js.map +1 -0
- package/lib/zudoku.components.js +334 -317
- package/lib/zudoku.components.js.map +1 -1
- package/lib/zudoku.plugin-markdown.js +1 -1
- package/lib/zudoku.plugin-openapi.js +1 -1
- package/package.json +1 -1
- package/src/app/main.tsx +1 -2
- package/src/lib/components/PathRenderer.tsx +59 -0
- package/src/lib/components/ThemeSwitch.tsx +15 -14
- package/src/lib/components/index.ts +7 -5
- package/src/lib/components/navigation/SidebarCategory.tsx +43 -41
- package/src/lib/oas/graphql/circular.ts +27 -6
- package/src/lib/plugins/openapi/ColorizedParam.tsx +3 -3
- package/src/lib/plugins/openapi/OperationListItem.tsx +6 -1
- package/src/lib/plugins/openapi/ParameterListItem.tsx +1 -1
- package/src/lib/plugins/openapi/Sidecar.tsx +17 -26
- package/src/lib/plugins/openapi/playground/PathParams.tsx +1 -1
- package/src/lib/plugins/openapi/playground/Playground.tsx +23 -33
- package/src/lib/plugins/openapi/schema/{SchemaComponents.tsx → SchemaPropertyItem.tsx} +10 -6
- package/src/lib/plugins/openapi/schema/SchemaView.tsx +4 -1
- package/src/lib/plugins/openapi/schema/utils.ts +4 -0
- package/dist/lib/plugins/openapi/schema/SchemaComponents.js.map +0 -1
- package/lib/OperationList-D_ejrepA.js.map +0 -1
- package/lib/index-DGugJOLc.js.map +0 -1
- package/lib/useScrollToAnchor-eRM9tVvD.js.map +0 -1
- /package/dist/lib/plugins/openapi/schema/{SchemaComponents.d.ts → SchemaPropertyItem.d.ts} +0 -0
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import h, { useState as
|
|
2
|
-
import { u as
|
|
1
|
+
import h, { useState as A, useEffect as I, useCallback as D } from "react";
|
|
2
|
+
import { u as T, L as E, e as V, N as g, b as P } from "./chunk-SYFQ2XB5-BPvC-soB.js";
|
|
3
3
|
import { u as m } from "./Markdown-Cyrx_JrO.js";
|
|
4
4
|
import { j as t } from "./jsx-runtime-Bdg6XQ1m.js";
|
|
5
|
-
import { c as
|
|
6
|
-
import { ChevronRightIcon as
|
|
7
|
-
import { i as
|
|
5
|
+
import { c as _ } from "./index-Djenk2Hj.js";
|
|
6
|
+
import { ChevronRightIcon as z, ExternalLinkIcon as B } from "lucide-react";
|
|
7
|
+
import { i as R, j as H } from "./ZudokuContext-BTUJPpQl.js";
|
|
8
8
|
import { c as i } from "./cn-qaFjX9_3.js";
|
|
9
9
|
import * as x from "@radix-ui/react-collapsible";
|
|
10
|
-
const p = {},
|
|
11
|
-
function
|
|
12
|
-
const n = h.useContext(
|
|
10
|
+
const p = {}, M = h.createContext(p);
|
|
11
|
+
function W(e) {
|
|
12
|
+
const n = h.useContext(M);
|
|
13
13
|
return h.useMemo(
|
|
14
14
|
function() {
|
|
15
15
|
return typeof e == "function" ? e(n) : { ...n, ...e };
|
|
@@ -17,21 +17,21 @@ function B(e) {
|
|
|
17
17
|
[n, e]
|
|
18
18
|
);
|
|
19
19
|
}
|
|
20
|
-
function
|
|
20
|
+
function se(e) {
|
|
21
21
|
let n;
|
|
22
|
-
return e.disableParentContext ? n = typeof e.components == "function" ? e.components(p) : e.components || p : n =
|
|
23
|
-
|
|
22
|
+
return e.disableParentContext ? n = typeof e.components == "function" ? e.components(p) : e.components || p : n = W(e.components), h.createElement(
|
|
23
|
+
M.Provider,
|
|
24
24
|
{ value: n },
|
|
25
25
|
e.children
|
|
26
26
|
);
|
|
27
27
|
}
|
|
28
|
-
const
|
|
29
|
-
const n =
|
|
28
|
+
const F = (e) => {
|
|
29
|
+
const n = T(), a = L(), s = typeof e.to == "string" ? e.to : e.to.hash, l = (r) => {
|
|
30
30
|
var c;
|
|
31
31
|
(c = e.onClick) == null || c.call(e, r), !(!(s != null && s.startsWith("#")) || s !== n.hash) && (r.preventDefault(), a(s));
|
|
32
32
|
};
|
|
33
|
-
return /* @__PURE__ */ t.jsx(
|
|
34
|
-
},
|
|
33
|
+
return /* @__PURE__ */ t.jsx(E, { ...e, onClick: l });
|
|
34
|
+
}, X = {
|
|
35
35
|
green: "bg-green-400 dark:bg-green-800",
|
|
36
36
|
blue: "bg-sky-400 dark:bg-sky-800",
|
|
37
37
|
yellow: "bg-yellow-400 dark:bg-yellow-800",
|
|
@@ -39,7 +39,7 @@ const R = (e) => {
|
|
|
39
39
|
purple: "bg-purple-400 dark:bg-purple-600",
|
|
40
40
|
indigo: "bg-indigo-400 dark:bg-indigo-600",
|
|
41
41
|
gray: "bg-gray-400 dark:bg-gray-600"
|
|
42
|
-
},
|
|
42
|
+
}, $ = {
|
|
43
43
|
green: "text-green-500 dark:text-green-600",
|
|
44
44
|
blue: "text-sky-400 dark:text-sky-600",
|
|
45
45
|
yellow: "text-yellow-400 dark:text-yellow-600",
|
|
@@ -57,18 +57,18 @@ const R = (e) => {
|
|
|
57
57
|
{
|
|
58
58
|
className: i(
|
|
59
59
|
"mt-0.5 flex items-center duration-200 transition-opacity text-center uppercase font-mono text-[0.65rem] font-bold rounded text-background dark:text-zinc-50 h-4 px-1",
|
|
60
|
-
s ?
|
|
60
|
+
s ? $[e] : X[e],
|
|
61
61
|
a
|
|
62
62
|
),
|
|
63
63
|
children: n
|
|
64
64
|
}
|
|
65
|
-
),
|
|
65
|
+
), U = ({
|
|
66
66
|
category: e,
|
|
67
67
|
onRequestClose: n
|
|
68
68
|
}) => {
|
|
69
|
-
var
|
|
70
|
-
const a =
|
|
71
|
-
|
|
69
|
+
var v, w;
|
|
70
|
+
const a = R(e), [s, l] = A(!1), r = e.collapsible ?? !0, c = e.collapsed ?? !0, k = !!(!r || !c || a), [j, u] = A(k), f = V(((v = e.link) == null ? void 0 : v.id) ?? "");
|
|
71
|
+
I(() => {
|
|
72
72
|
a && u(!0);
|
|
73
73
|
}, [a]);
|
|
74
74
|
const C = r && /* @__PURE__ */ t.jsx(
|
|
@@ -76,10 +76,10 @@ const R = (e) => {
|
|
|
76
76
|
{
|
|
77
77
|
type: "button",
|
|
78
78
|
onClick: (o) => {
|
|
79
|
-
o.preventDefault(), u((
|
|
79
|
+
o.preventDefault(), u((O) => !O), l(!0);
|
|
80
80
|
},
|
|
81
81
|
children: /* @__PURE__ */ t.jsx(
|
|
82
|
-
|
|
82
|
+
z,
|
|
83
83
|
{
|
|
84
84
|
size: 16,
|
|
85
85
|
className: i(
|
|
@@ -89,7 +89,18 @@ const R = (e) => {
|
|
|
89
89
|
}
|
|
90
90
|
)
|
|
91
91
|
}
|
|
92
|
-
)
|
|
92
|
+
), N = e.icon && /* @__PURE__ */ t.jsx(
|
|
93
|
+
e.icon,
|
|
94
|
+
{
|
|
95
|
+
size: 16,
|
|
96
|
+
className: i("align-[-0.125em] ", f && "text-primary")
|
|
97
|
+
}
|
|
98
|
+
), y = d({
|
|
99
|
+
className: [
|
|
100
|
+
"text-start font-medium",
|
|
101
|
+
r || typeof e.link < "u" ? "cursor-pointer" : "cursor-default hover:bg-transparent"
|
|
102
|
+
]
|
|
103
|
+
});
|
|
93
104
|
return /* @__PURE__ */ t.jsxs(
|
|
94
105
|
x.Root,
|
|
95
106
|
{
|
|
@@ -98,54 +109,38 @@ const R = (e) => {
|
|
|
98
109
|
open: j,
|
|
99
110
|
onOpenChange: () => u(!0),
|
|
100
111
|
children: [
|
|
101
|
-
/* @__PURE__ */ t.jsx(x.Trigger, { className: "group", asChild: !0, disabled: !r, children: /* @__PURE__ */ t.jsxs(
|
|
102
|
-
|
|
112
|
+
/* @__PURE__ */ t.jsx(x.Trigger, { className: "group", asChild: !0, disabled: !r, children: ((w = e.link) == null ? void 0 : w.type) === "doc" ? /* @__PURE__ */ t.jsxs(
|
|
113
|
+
g,
|
|
103
114
|
{
|
|
104
|
-
|
|
105
|
-
className:
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
r || typeof e.link < "u" ? "cursor-pointer" : "cursor-default hover:bg-transparent"
|
|
110
|
-
]
|
|
111
|
-
}),
|
|
115
|
+
to: H(e.link.id),
|
|
116
|
+
className: y,
|
|
117
|
+
onClick: () => {
|
|
118
|
+
l(!0), f && !j && u(!0);
|
|
119
|
+
},
|
|
112
120
|
children: [
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
size: 16,
|
|
117
|
-
className: i("align-[-0.125em] ", f && "text-primary")
|
|
118
|
-
}
|
|
119
|
-
),
|
|
120
|
-
((v = e.link) == null ? void 0 : v.type) === "doc" ? /* @__PURE__ */ t.jsx(
|
|
121
|
-
g,
|
|
121
|
+
N,
|
|
122
|
+
/* @__PURE__ */ t.jsxs(
|
|
123
|
+
"div",
|
|
122
124
|
{
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
className: i(
|
|
132
|
-
"flex items-center gap-2 justify-between w-full",
|
|
133
|
-
f ? "text-primary" : "text-foreground/80"
|
|
134
|
-
),
|
|
135
|
-
children: [
|
|
136
|
-
/* @__PURE__ */ t.jsx("div", { className: "truncate", children: e.label }),
|
|
137
|
-
C
|
|
138
|
-
]
|
|
139
|
-
}
|
|
140
|
-
)
|
|
125
|
+
className: i(
|
|
126
|
+
"flex items-center gap-2 justify-between w-full",
|
|
127
|
+
f ? "text-primary" : "text-foreground/80"
|
|
128
|
+
),
|
|
129
|
+
children: [
|
|
130
|
+
/* @__PURE__ */ t.jsx("div", { className: "truncate", children: e.label }),
|
|
131
|
+
C
|
|
132
|
+
]
|
|
141
133
|
}
|
|
142
|
-
)
|
|
143
|
-
/* @__PURE__ */ t.jsx("div", { className: "flex gap-2 truncate w-full", children: e.label }),
|
|
144
|
-
C
|
|
145
|
-
] })
|
|
134
|
+
)
|
|
146
135
|
]
|
|
147
136
|
}
|
|
148
|
-
)
|
|
137
|
+
) : /* @__PURE__ */ t.jsxs("div", { onClick: () => l(!0), className: y, children: [
|
|
138
|
+
N,
|
|
139
|
+
/* @__PURE__ */ t.jsxs("div", { className: "flex items-center justify-between w-full", children: [
|
|
140
|
+
/* @__PURE__ */ t.jsx("div", { className: "flex gap-2 truncate w-full", children: e.label }),
|
|
141
|
+
C
|
|
142
|
+
] })
|
|
143
|
+
] }) }),
|
|
149
144
|
/* @__PURE__ */ t.jsx(
|
|
150
145
|
x.Content,
|
|
151
146
|
{
|
|
@@ -156,7 +151,7 @@ const R = (e) => {
|
|
|
156
151
|
"ms-6 my-1"
|
|
157
152
|
),
|
|
158
153
|
children: /* @__PURE__ */ t.jsx("ul", { className: "relative after:absolute after:-left-[--padding-nav-item] after:translate-x-[1.5px] after:top-0 after:bottom-0 after:w-px after:bg-border", children: e.items.map((o) => /* @__PURE__ */ t.jsx(
|
|
159
|
-
|
|
154
|
+
G,
|
|
160
155
|
{
|
|
161
156
|
onRequestClose: n,
|
|
162
157
|
item: o
|
|
@@ -168,7 +163,7 @@ const R = (e) => {
|
|
|
168
163
|
]
|
|
169
164
|
}
|
|
170
165
|
);
|
|
171
|
-
}, d =
|
|
166
|
+
}, d = _(
|
|
172
167
|
"flex items-center gap-2 px-[--padding-nav-item] py-1.5 rounded-lg hover:bg-accent",
|
|
173
168
|
{
|
|
174
169
|
variants: {
|
|
@@ -185,21 +180,21 @@ const R = (e) => {
|
|
|
185
180
|
isActive: !1
|
|
186
181
|
}
|
|
187
182
|
}
|
|
188
|
-
),
|
|
183
|
+
), S = "data-anchor", G = ({
|
|
189
184
|
item: e,
|
|
190
185
|
onRequestClose: n
|
|
191
186
|
}) => {
|
|
192
187
|
var l, r;
|
|
193
|
-
const { activeAnchor: a } = m(), [s] =
|
|
188
|
+
const { activeAnchor: a } = m(), [s] = P();
|
|
194
189
|
switch (e.type) {
|
|
195
190
|
case "category":
|
|
196
|
-
return /* @__PURE__ */ t.jsx(
|
|
191
|
+
return /* @__PURE__ */ t.jsx(U, { category: e, onRequestClose: n });
|
|
197
192
|
case "doc":
|
|
198
193
|
return /* @__PURE__ */ t.jsxs(
|
|
199
194
|
g,
|
|
200
195
|
{
|
|
201
196
|
className: ({ isActive: c }) => d({ isActive: c }),
|
|
202
|
-
to:
|
|
197
|
+
to: H(e.id),
|
|
203
198
|
onClick: n,
|
|
204
199
|
children: [
|
|
205
200
|
e.icon && /* @__PURE__ */ t.jsx(e.icon, { size: 16, className: "align-[-0.125em]" }),
|
|
@@ -212,10 +207,10 @@ const R = (e) => {
|
|
|
212
207
|
);
|
|
213
208
|
case "link":
|
|
214
209
|
return e.href.startsWith("#") ? /* @__PURE__ */ t.jsx(
|
|
215
|
-
|
|
210
|
+
F,
|
|
216
211
|
{
|
|
217
212
|
to: { hash: e.href, search: s.toString() },
|
|
218
|
-
[
|
|
213
|
+
[S]: e.href.slice(1),
|
|
219
214
|
className: d({
|
|
220
215
|
isActive: e.href.slice(1) === a,
|
|
221
216
|
className: ((l = e.badge) == null ? void 0 : l.placement) !== "start" && "justify-between"
|
|
@@ -236,7 +231,7 @@ const R = (e) => {
|
|
|
236
231
|
onClick: n,
|
|
237
232
|
children: [
|
|
238
233
|
/* @__PURE__ */ t.jsx("span", { className: "whitespace-normal", children: e.label }),
|
|
239
|
-
/* @__PURE__ */ t.jsx("span", { className: "whitespace-nowrap", children: /* @__PURE__ */ t.jsx(
|
|
234
|
+
/* @__PURE__ */ t.jsx("span", { className: "whitespace-nowrap", children: /* @__PURE__ */ t.jsx(B, { className: "inline -translate-y-0.5", size: 12 }) })
|
|
240
235
|
]
|
|
241
236
|
}
|
|
242
237
|
) : /* @__PURE__ */ t.jsx(
|
|
@@ -253,24 +248,24 @@ const R = (e) => {
|
|
|
253
248
|
}
|
|
254
249
|
);
|
|
255
250
|
}
|
|
256
|
-
},
|
|
251
|
+
}, J = (e, n = { block: "center" }) => {
|
|
257
252
|
if (!e) return;
|
|
258
253
|
const a = e.getBoundingClientRect();
|
|
259
254
|
a.top >= 0 && a.left >= 0 && a.bottom <= (window.innerHeight || document.documentElement.clientHeight) && a.right <= (window.innerWidth || document.documentElement.clientWidth) || e.scrollIntoView(n);
|
|
260
|
-
},
|
|
255
|
+
}, L = () => {
|
|
261
256
|
const { setActiveAnchor: e } = m();
|
|
262
|
-
return
|
|
257
|
+
return D(
|
|
263
258
|
(a) => {
|
|
264
259
|
const s = a.replace(/^#/, "").split("/").at(0), l = document.getElementById(decodeURIComponent(s)), r = document.querySelector(
|
|
265
|
-
`[${
|
|
260
|
+
`[${S}="${s}"]`
|
|
266
261
|
);
|
|
267
|
-
return l ? (l.scrollIntoView(),
|
|
262
|
+
return l ? (l.scrollIntoView(), J(r), requestIdleCallback(() => e(s)), !0) : !1;
|
|
268
263
|
},
|
|
269
264
|
[e]
|
|
270
265
|
);
|
|
271
|
-
},
|
|
272
|
-
const e =
|
|
273
|
-
|
|
266
|
+
}, ae = () => {
|
|
267
|
+
const e = T(), { setActiveAnchor: n } = m(), a = L();
|
|
268
|
+
I(() => {
|
|
274
269
|
if (e.hash && !a(e.hash)) {
|
|
275
270
|
const s = new MutationObserver((l, r) => {
|
|
276
271
|
a(e.hash) && r.disconnect();
|
|
@@ -280,10 +275,10 @@ const R = (e) => {
|
|
|
280
275
|
}, [e.hash, n]);
|
|
281
276
|
};
|
|
282
277
|
export {
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
278
|
+
F as A,
|
|
279
|
+
se as M,
|
|
280
|
+
G as S,
|
|
281
|
+
ae as a,
|
|
282
|
+
W as u
|
|
288
283
|
};
|
|
289
|
-
//# sourceMappingURL=useScrollToAnchor-
|
|
284
|
+
//# sourceMappingURL=useScrollToAnchor-BZsGmBng.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useScrollToAnchor-BZsGmBng.js","sources":["../../../node_modules/.pnpm/@mdx-js+react@3.1.0_@types+react@19.0.7_react@19.0.0/node_modules/@mdx-js/react/lib/index.js","../src/lib/components/AnchorLink.tsx","../src/lib/components/navigation/SidebarBadge.tsx","../src/lib/components/navigation/SidebarCategory.tsx","../src/lib/components/navigation/SidebarItem.tsx","../src/lib/util/useScrollToAnchor.ts"],"sourcesContent":["/**\n * @import {MDXComponents} from 'mdx/types.js'\n * @import {Component, ReactElement, ReactNode} from 'react'\n */\n\n/**\n * @callback MergeComponents\n * Custom merge function.\n * @param {Readonly<MDXComponents>} currentComponents\n * Current components from the context.\n * @returns {MDXComponents}\n * Additional components.\n *\n * @typedef Props\n * Configuration for `MDXProvider`.\n * @property {ReactNode | null | undefined} [children]\n * Children (optional).\n * @property {Readonly<MDXComponents> | MergeComponents | null | undefined} [components]\n * Additional components to use or a function that creates them (optional).\n * @property {boolean | null | undefined} [disableParentContext=false]\n * Turn off outer component context (default: `false`).\n */\n\nimport React from 'react'\n\n/** @type {Readonly<MDXComponents>} */\nconst emptyComponents = {}\n\nconst MDXContext = React.createContext(emptyComponents)\n\n/**\n * Get current components from the MDX Context.\n *\n * @param {Readonly<MDXComponents> | MergeComponents | null | undefined} [components]\n * Additional components to use or a function that creates them (optional).\n * @returns {MDXComponents}\n * Current components.\n */\nexport function useMDXComponents(components) {\n const contextComponents = React.useContext(MDXContext)\n\n // Memoize to avoid unnecessary top-level context changes\n return React.useMemo(\n function () {\n // Custom merge via a function prop\n if (typeof components === 'function') {\n return components(contextComponents)\n }\n\n return {...contextComponents, ...components}\n },\n [contextComponents, components]\n )\n}\n\n/**\n * Provider for MDX context.\n *\n * @param {Readonly<Props>} properties\n * Properties.\n * @returns {ReactElement}\n * Element.\n * @satisfies {Component}\n */\nexport function MDXProvider(properties) {\n /** @type {Readonly<MDXComponents>} */\n let allComponents\n\n if (properties.disableParentContext) {\n allComponents =\n typeof properties.components === 'function'\n ? properties.components(emptyComponents)\n : properties.components || emptyComponents\n } else {\n allComponents = useMDXComponents(properties.components)\n }\n\n return React.createElement(\n MDXContext.Provider,\n {value: allComponents},\n properties.children\n )\n}\n","import React from \"react\";\nimport { Link, type LinkProps, useLocation } from \"react-router\";\nimport { useScrollToHash } from \"../util/useScrollToAnchor.js\";\n\n/**\n * Link that scrolls to anchor even if the hash is already set in the URL.\n */\nexport const AnchorLink = (props: LinkProps) => {\n const location = useLocation();\n const scrollToHash = useScrollToHash();\n const hash = typeof props.to === \"string\" ? props.to : props.to.hash;\n\n const handleClick = (event: React.MouseEvent<HTMLAnchorElement>) => {\n props.onClick?.(event);\n if (!hash?.startsWith(\"#\") || hash !== location.hash) return;\n\n event.preventDefault();\n scrollToHash(hash);\n };\n\n return <Link {...props} onClick={handleClick} />;\n};\n","import { cn } from \"../../util/cn.js\";\n\nexport const ColorMap = {\n green: \"bg-green-400 dark:bg-green-800\",\n blue: \"bg-sky-400 dark:bg-sky-800\",\n yellow: \"bg-yellow-400 dark:bg-yellow-800\",\n red: \"bg-red-400 dark:bg-red-800\",\n purple: \"bg-purple-400 dark:bg-purple-600\",\n indigo: \"bg-indigo-400 dark:bg-indigo-600\",\n gray: \"bg-gray-400 dark:bg-gray-600\",\n};\n\nexport const ColorMapInvert = {\n green: \"text-green-500 dark:text-green-600\",\n blue: \"text-sky-400 dark:text-sky-600\",\n yellow: \"text-yellow-400 dark:text-yellow-600\",\n red: \"text-red-400 dark:text-red-600\",\n purple: \"text-purple-400 dark:text-purple-600\",\n indigo: \"text-indigo-400 dark:text-indigo-600\",\n gray: \"text-gray-400 dark:text-gray-600\",\n};\n\nexport const SidebarBadge = ({\n color,\n label,\n className,\n invert,\n}: {\n color: keyof typeof ColorMap;\n label: string;\n className?: string;\n invert?: boolean;\n}) => {\n return (\n <span\n className={cn(\n \"mt-0.5 flex items-center duration-200 transition-opacity text-center uppercase font-mono text-[0.65rem] font-bold rounded text-background dark:text-zinc-50 h-4 px-1\",\n invert ? ColorMapInvert[color] : ColorMap[color],\n className,\n )}\n >\n {label}\n </span>\n );\n};\n","import * as Collapsible from \"@radix-ui/react-collapsible\";\nimport { ChevronRightIcon } from \"lucide-react\";\nimport { useEffect, useState } from \"react\";\nimport { NavLink, useMatch } from \"react-router\";\nimport type { SidebarItemCategory } from \"../../../config/validators/SidebarSchema.js\";\nimport { cn } from \"../../util/cn.js\";\nimport { joinPath } from \"../../util/joinPath.js\";\nimport { navigationListItem, SidebarItem } from \"./SidebarItem.js\";\nimport { useIsCategoryOpen } from \"./utils.js\";\n\nexport const SidebarCategory = ({\n category,\n onRequestClose,\n}: {\n category: SidebarItemCategory;\n onRequestClose?: () => void;\n}) => {\n const isCategoryOpen = useIsCategoryOpen(category);\n const [hasInteracted, setHasInteracted] = useState(false);\n\n const isCollapsible = category.collapsible ?? true;\n const isCollapsed = category.collapsed ?? true;\n const isDefaultOpen = Boolean(\n !isCollapsible || !isCollapsed || isCategoryOpen,\n );\n const [open, setOpen] = useState(isDefaultOpen);\n const isActive = useMatch(category.link?.id ?? \"\");\n\n useEffect(() => {\n // this is triggered when an item from the sidebar is clicked\n // and the sidebar, enclosing this item, is not opened\n if (isCategoryOpen) {\n setOpen(true);\n }\n }, [isCategoryOpen]);\n\n const ToggleButton = isCollapsible && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.preventDefault();\n setOpen((prev) => !prev);\n setHasInteracted(true);\n }}\n >\n <ChevronRightIcon\n size={16}\n className={cn(\n hasInteracted && \"transition\",\n \"shrink-0 group-data-[state=open]:rotate-90\",\n )}\n />\n </button>\n );\n\n const icon = category.icon && (\n <category.icon\n size={16}\n className={cn(\"align-[-0.125em] \", isActive && \"text-primary\")}\n />\n );\n\n const styles = navigationListItem({\n className: [\n \"text-start font-medium\",\n isCollapsible || typeof category.link !== \"undefined\"\n ? \"cursor-pointer\"\n : \"cursor-default hover:bg-transparent\",\n ],\n });\n\n return (\n <Collapsible.Root\n className=\"flex flex-col\"\n defaultOpen={isDefaultOpen}\n open={open}\n onOpenChange={() => setOpen(true)}\n >\n <Collapsible.Trigger className=\"group\" asChild disabled={!isCollapsible}>\n {category.link?.type === \"doc\" ? (\n <NavLink\n to={joinPath(category.link.id)}\n className={styles}\n onClick={() => {\n setHasInteracted(true);\n // if it is the current path and closed then open it because there's no path change to trigger the open\n if (isActive && !open) {\n setOpen(true);\n }\n }}\n >\n {icon}\n <div\n className={cn(\n \"flex items-center gap-2 justify-between w-full\",\n isActive ? \"text-primary\" : \"text-foreground/80\",\n )}\n >\n <div className=\"truncate\">{category.label}</div>\n {ToggleButton}\n </div>\n </NavLink>\n ) : (\n <div onClick={() => setHasInteracted(true)} className={styles}>\n {icon}\n <div className=\"flex items-center justify-between w-full\">\n <div className=\"flex gap-2 truncate w-full\">{category.label}</div>\n {ToggleButton}\n </div>\n </div>\n )}\n </Collapsible.Trigger>\n <Collapsible.Content\n className={cn(\n // CollapsibleContent class is used to animate and it should only be applied when the user has triggered the toggle\n hasInteracted && \"CollapsibleContent\",\n category.items.length === 0 && \"hidden\",\n \"ms-6 my-1\",\n )}\n >\n <ul className=\"relative after:absolute after:-left-[--padding-nav-item] after:translate-x-[1.5px] after:top-0 after:bottom-0 after:w-px after:bg-border\">\n {category.items.map((item) => (\n <SidebarItem\n key={\n (\"id\" in item ? item.id : \"\") +\n (\"href\" in item ? item.href : \"\") +\n item.label\n }\n onRequestClose={onRequestClose}\n item={item}\n />\n ))}\n </ul>\n </Collapsible.Content>\n </Collapsible.Root>\n );\n};\n","import { cva } from \"class-variance-authority\";\nimport { ExternalLinkIcon } from \"lucide-react\";\nimport { NavLink, useSearchParams } from \"react-router\";\n\nimport type { SidebarItem as SidebarItemType } from \"../../../config/validators/SidebarSchema.js\";\nimport { joinPath } from \"../../util/joinPath.js\";\nimport { AnchorLink } from \"../AnchorLink.js\";\nimport { useViewportAnchor } from \"../context/ViewportAnchorContext.js\";\nimport { SidebarBadge } from \"./SidebarBadge.js\";\nimport { SidebarCategory } from \"./SidebarCategory.js\";\n\nexport const navigationListItem = cva(\n \"flex items-center gap-2 px-[--padding-nav-item] py-1.5 rounded-lg hover:bg-accent\",\n {\n variants: {\n isActive: {\n true: \"text-primary font-medium\",\n false: \"text-foreground/80\",\n },\n isMuted: {\n true: \"text-foreground/30\",\n false: \"\",\n },\n },\n defaultVariants: {\n isActive: false,\n },\n },\n);\n\nexport const DATA_ANCHOR_ATTR = \"data-anchor\";\n\nexport const SidebarItem = ({\n item,\n onRequestClose,\n}: {\n item: SidebarItemType;\n onRequestClose?: () => void;\n}) => {\n const { activeAnchor } = useViewportAnchor();\n const [searchParams] = useSearchParams();\n\n switch (item.type) {\n case \"category\":\n return (\n <SidebarCategory category={item} onRequestClose={onRequestClose} />\n );\n case \"doc\":\n return (\n <NavLink\n className={({ isActive }) => navigationListItem({ isActive })}\n to={joinPath(item.id)}\n onClick={onRequestClose}\n >\n {item.icon && <item.icon size={16} className=\"align-[-0.125em]\" />}\n {item.badge ? (\n <>\n <span className=\"truncate flex-1\" title={item.label}>\n {item.label}\n </span>\n <SidebarBadge {...item.badge} />\n </>\n ) : (\n item.label\n )}\n </NavLink>\n );\n case \"link\":\n return item.href.startsWith(\"#\") ? (\n <AnchorLink\n to={{ hash: item.href, search: searchParams.toString() }}\n {...{ [DATA_ANCHOR_ATTR]: item.href.slice(1) }}\n className={navigationListItem({\n isActive: item.href.slice(1) === activeAnchor,\n className: item.badge?.placement !== \"start\" && \"justify-between\",\n })}\n onClick={onRequestClose}\n >\n {item.badge ? (\n <>\n <span className=\"truncate\" title={item.label}>\n {item.label}\n </span>\n <SidebarBadge {...item.badge} />\n </>\n ) : (\n <span className=\"break-all\">{item.label}</span>\n )}\n </AnchorLink>\n ) : !item.href.startsWith(\"http\") ? (\n <NavLink\n className={navigationListItem({\n className: item.badge?.placement !== \"start\" && \"justify-between\",\n })}\n to={item.href}\n >\n {item.badge ? (\n <>\n <span className=\"truncate\" title={item.label}>\n {item.label}\n </span>\n <SidebarBadge {...item.badge} />\n </>\n ) : (\n <span className=\"break-all\">{item.label}</span>\n )}\n </NavLink>\n ) : (\n <a\n className={navigationListItem()}\n href={item.href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n onClick={onRequestClose}\n >\n <span className=\"whitespace-normal\">{item.label}</span>\n {/* This prevents that the icon would be positioned in its own line if the text fills a line entirely */}\n <span className=\"whitespace-nowrap\">\n <ExternalLinkIcon className=\"inline -translate-y-0.5\" size={12} />\n </span>\n </a>\n );\n }\n};\n","import { useCallback, useEffect } from \"react\";\nimport { useLocation } from \"react-router\";\nimport { useViewportAnchor } from \"../components/context/ViewportAnchorContext.js\";\nimport { DATA_ANCHOR_ATTR } from \"../components/navigation/SidebarItem.js\";\n\nconst scrollIntoViewIfNeeded = (\n element: Element | null,\n options: ScrollIntoViewOptions = { block: \"center\" },\n) => {\n if (!element) return;\n\n const rect = element.getBoundingClientRect();\n const isInView =\n rect.top >= 0 &&\n rect.left >= 0 &&\n rect.bottom <=\n (window.innerHeight || document.documentElement.clientHeight) &&\n rect.right <= (window.innerWidth || document.documentElement.clientWidth);\n\n if (isInView) return;\n\n element.scrollIntoView(options);\n};\n\nexport const useScrollToHash = () => {\n const { setActiveAnchor } = useViewportAnchor();\n\n const scrollToHash = useCallback(\n (hash: string) => {\n const cleanHash = hash\n .replace(/^#/, \"\")\n // Operation list items might have subdivisions that the sidebar doesn't show.\n // The subdivisions are separated by a slash so we need to remove everything before the slash to get the sidebar correct item.\n .split(\"/\")\n .at(0)!;\n const element = document.getElementById(decodeURIComponent(cleanHash));\n const link = document.querySelector(\n `[${DATA_ANCHOR_ATTR}=\"${cleanHash}\"]`,\n );\n\n if (element) {\n element.scrollIntoView();\n scrollIntoViewIfNeeded(link);\n requestIdleCallback(() => setActiveAnchor(cleanHash));\n return true;\n }\n\n // Scroll didn't happen\n return false;\n },\n [setActiveAnchor],\n );\n\n return scrollToHash;\n};\n\nexport const useScrollToAnchor = () => {\n const location = useLocation();\n const { setActiveAnchor } = useViewportAnchor();\n const scrollToHash = useScrollToHash();\n\n useEffect(() => {\n if (!location.hash) return;\n\n if (!scrollToHash(location.hash)) {\n const observer = new MutationObserver((_, obs) => {\n if (!scrollToHash(location.hash)) return;\n obs.disconnect();\n });\n\n observer.observe(document.body, { childList: true, subtree: true });\n\n return () => observer.disconnect();\n }\n }, [location.hash, setActiveAnchor]);\n};\n"],"names":["emptyComponents","MDXContext","React","useMDXComponents","components","contextComponents","MDXProvider","properties","allComponents","AnchorLink","props","location","useLocation","scrollToHash","useScrollToHash","hash","handleClick","event","_a","jsx","Link","ColorMap","ColorMapInvert","SidebarBadge","color","label","className","invert","cn","SidebarCategory","category","onRequestClose","isCategoryOpen","useIsCategoryOpen","hasInteracted","setHasInteracted","useState","isCollapsible","isCollapsed","isDefaultOpen","open","setOpen","isActive","useMatch","useEffect","ToggleButton","e","prev","ChevronRightIcon","icon","styles","navigationListItem","jsxs","Collapsible","_b","NavLink","joinPath","item","SidebarItem","cva","DATA_ANCHOR_ATTR","activeAnchor","useViewportAnchor","searchParams","useSearchParams","Fragment","ExternalLinkIcon","scrollIntoViewIfNeeded","element","options","rect","setActiveAnchor","useCallback","cleanHash","link","useScrollToAnchor","observer","_","obs"],"mappings":"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","x_google_ignoreList":[0]}
|