@unterberg/nivel 0.0.4 → 0.0.5
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/README.md +24 -4
- package/dist/{chunk-GHQDRDZL.js → chunk-4RLPVGMZ.js} +108 -108
- package/dist/chunk-4RLPVGMZ.js.map +1 -0
- package/dist/{chunk-AURANIZE.js → chunk-D35PFSSY.js} +2 -2
- package/dist/{chunk-67GE3PJ6.js → chunk-UMMK73OW.js} +23 -3
- package/dist/chunk-UMMK73OW.js.map +1 -0
- package/dist/cli.js +1 -1
- package/dist/index.d.ts +10 -10
- package/dist/index.js +1 -1
- package/dist/mdx.js +1 -1
- package/dist/runtime/node.d.ts +19 -19
- package/dist/runtime/node.js +2 -2
- package/dist/vike.js +2 -2
- package/package.json +1 -1
- package/dist/chunk-67GE3PJ6.js.map +0 -1
- package/dist/chunk-GHQDRDZL.js.map +0 -1
- /package/dist/{chunk-AURANIZE.js.map → chunk-D35PFSSY.js.map} +0 -0
package/README.md
CHANGED
|
@@ -60,7 +60,7 @@ Only `(nivel-generated)` stays engine-generated.
|
|
|
60
60
|
|
|
61
61
|
## Standard Vike Config
|
|
62
62
|
|
|
63
|
-
|
|
63
|
+
Keep `pages/+config.ts` looking like normal Vike config and spread in the engine-owned config from `@unterberg/nivel/vike`:
|
|
64
64
|
|
|
65
65
|
```ts
|
|
66
66
|
// pages/+docs.ts
|
|
@@ -77,15 +77,35 @@ export default defineDocsConfig({
|
|
|
77
77
|
|
|
78
78
|
```ts
|
|
79
79
|
// pages/+config.ts
|
|
80
|
-
import
|
|
80
|
+
import nivel from '@unterberg/nivel/vike'
|
|
81
|
+
import type { Config } from 'vike/types'
|
|
82
|
+
import vikeReact from 'vike-react/config'
|
|
81
83
|
import docsConfig from './+docs'
|
|
82
84
|
|
|
83
85
|
export { config }
|
|
84
86
|
|
|
85
|
-
const
|
|
87
|
+
const themePreference = docsConfig.theme?.defaultPreference ?? 'light'
|
|
88
|
+
const dataTheme =
|
|
89
|
+
themePreference === 'dark'
|
|
90
|
+
? (docsConfig.theme?.dark ?? 'consumer-dark')
|
|
91
|
+
: (docsConfig.theme?.light ?? 'consumer-light')
|
|
92
|
+
|
|
93
|
+
const config: Config = {
|
|
94
|
+
...nivel,
|
|
95
|
+
extends: [vikeReact],
|
|
96
|
+
title: docsConfig.siteTitle,
|
|
97
|
+
description: docsConfig.siteDescription ?? `${docsConfig.siteTitle} documentation`,
|
|
98
|
+
htmlAttributes: { 'data-theme': dataTheme },
|
|
99
|
+
passToClient: ['docs'],
|
|
100
|
+
|
|
101
|
+
// User-facing Vike levers stay visible here.
|
|
102
|
+
prerender: true,
|
|
103
|
+
// ssr: true,
|
|
104
|
+
// prefetchStaticAssets: 'viewport',
|
|
105
|
+
}
|
|
86
106
|
```
|
|
87
107
|
|
|
88
|
-
|
|
108
|
+
The engine still owns the MDX, Vite, route-generation, and runtime wiring. The consumer keeps the normal Vike entry file and can adjust visible levers such as `prerender`, `ssr`, and prefetch-related settings directly in `+config.ts`.
|
|
89
109
|
|
|
90
110
|
## CLI
|
|
91
111
|
|
|
@@ -6,87 +6,22 @@ import {
|
|
|
6
6
|
withSiteBaseUrl
|
|
7
7
|
} from "./chunk-PYYPYIBD.js";
|
|
8
8
|
|
|
9
|
-
// src/mdx/components/Alert.tsx
|
|
10
|
-
import cm, { cmMerge } from "@classmatejs/react";
|
|
11
|
-
import { Check, CircleX, Info, TriangleAlert } from "lucide-react";
|
|
12
|
-
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
13
|
-
var alertIconMap = {
|
|
14
|
-
info: Info,
|
|
15
|
-
warning: TriangleAlert,
|
|
16
|
-
error: CircleX,
|
|
17
|
-
success: Check
|
|
18
|
-
};
|
|
19
|
-
var Alert = ({
|
|
20
|
-
type = "info",
|
|
21
|
-
heading,
|
|
22
|
-
children,
|
|
23
|
-
icon = true
|
|
24
|
-
}) => {
|
|
25
|
-
const AlertIcon = icon === true ? alertIconMap[type] : typeof icon === "object" ? () => /* @__PURE__ */ jsx(Fragment, { children: icon }) : null;
|
|
26
|
-
const alertIconTextColorClass = {
|
|
27
|
-
info: "text-info",
|
|
28
|
-
warning: "text-warning",
|
|
29
|
-
error: "text-error",
|
|
30
|
-
success: "text-success"
|
|
31
|
-
}[type];
|
|
32
|
-
return /* @__PURE__ */ jsxs(AlertOuter, { $variant: type, children: [
|
|
33
|
-
!!heading && AlertIcon && /* @__PURE__ */ jsxs("div", { className: "mb-3 flex items-center gap-2", children: [
|
|
34
|
-
/* @__PURE__ */ jsx(AlertIcon, { className: cmMerge(alertIconTextColorClass, "float-left h-5 w-5") }),
|
|
35
|
-
/* @__PURE__ */ jsx(AlertHeading, { children: heading })
|
|
36
|
-
] }),
|
|
37
|
-
!(!!heading && AlertIcon) && !!heading && /* @__PURE__ */ jsx(AlertHeading, { children: heading }),
|
|
38
|
-
!(!!heading && AlertIcon) && AlertIcon && /* @__PURE__ */ jsx("div", { className: cmMerge(alertIconTextColorClass, "float-left mr-2"), children: /* @__PURE__ */ jsx(AlertIcon, { className: "mt-1 h-5 w-5" }) }),
|
|
39
|
-
children
|
|
40
|
-
] });
|
|
41
|
-
};
|
|
42
|
-
var AlertOuter = cm.section.variants({
|
|
43
|
-
base: `
|
|
44
|
-
p-4
|
|
45
|
-
mt-5
|
|
46
|
-
mb-5
|
|
47
|
-
border
|
|
48
|
-
rounded-lg
|
|
49
|
-
prose-p:last:mb-0
|
|
50
|
-
prose-p:mt-0
|
|
51
|
-
prose-headings:first:mt-0
|
|
52
|
-
prose-headings:last:mb-0
|
|
53
|
-
prose-ul:first:mt-0
|
|
54
|
-
prose-ul:last:mb-0
|
|
55
|
-
text-sm
|
|
56
|
-
`,
|
|
57
|
-
variants: {
|
|
58
|
-
$variant: {
|
|
59
|
-
info: "bg-info/10 border-info/30",
|
|
60
|
-
warning: "bg-warning/10 border-warning/30",
|
|
61
|
-
error: "bg-error/10 border-error/25",
|
|
62
|
-
success: "bg-success/10 border-success/35"
|
|
63
|
-
}
|
|
64
|
-
},
|
|
65
|
-
defaultVariants: {
|
|
66
|
-
$variant: "info"
|
|
67
|
-
}
|
|
68
|
-
});
|
|
69
|
-
var AlertHeading = cm.header`
|
|
70
|
-
font-bold
|
|
71
|
-
text-base
|
|
72
|
-
`;
|
|
73
|
-
|
|
74
9
|
// src/mdx/code-blocks/ChoiceGroup.tsx
|
|
75
10
|
import { Children, isValidElement, useRef as useRef2 } from "react";
|
|
76
11
|
|
|
77
12
|
// src/mdx/code-blocks/CodeBlockHeaderMeta.tsx
|
|
78
|
-
import
|
|
79
|
-
import { jsx
|
|
13
|
+
import cm from "@classmatejs/react";
|
|
14
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
80
15
|
var CodeBlockHeaderMeta = ({ env, label }) => {
|
|
81
16
|
const effectiveEnv = env === "server" || env === "client" ? env : void 0;
|
|
82
|
-
return /* @__PURE__ */
|
|
83
|
-
env && /* @__PURE__ */
|
|
84
|
-
env && /* @__PURE__ */
|
|
85
|
-
/* @__PURE__ */
|
|
86
|
-
env && /* @__PURE__ */
|
|
17
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 items-center gap-2", children: [
|
|
18
|
+
env && /* @__PURE__ */ jsx(StyledDivider, { $env: env === "server" || env === "client" ? env : void 0 }),
|
|
19
|
+
env && /* @__PURE__ */ jsx(StyledBgShade, { $env: env === "server" || env === "client" ? env : void 0 }),
|
|
20
|
+
/* @__PURE__ */ jsx("div", { className: "font-mono text-xs font-semibold text-base-muted", children: label }),
|
|
21
|
+
env && /* @__PURE__ */ jsx(StyledBadge, { $env: effectiveEnv, children: env })
|
|
87
22
|
] });
|
|
88
23
|
};
|
|
89
|
-
var StyledDivider =
|
|
24
|
+
var StyledDivider = cm.div.variants({
|
|
90
25
|
base: "absolute h-1 -bottom-px left-0 w-full pointer-events-none",
|
|
91
26
|
variants: {
|
|
92
27
|
$env: {
|
|
@@ -96,7 +31,7 @@ var StyledDivider = cm2.div.variants({
|
|
|
96
31
|
},
|
|
97
32
|
defaultVariants: { $env: "server" }
|
|
98
33
|
});
|
|
99
|
-
var StyledBadge =
|
|
34
|
+
var StyledBadge = cm.div.variants({
|
|
100
35
|
base: "shrink-0 badge badge-sm rounded-field badge-soft border pointer-events-none",
|
|
101
36
|
variants: {
|
|
102
37
|
$env: {
|
|
@@ -106,7 +41,7 @@ var StyledBadge = cm2.div.variants({
|
|
|
106
41
|
},
|
|
107
42
|
defaultVariants: { $env: "server" }
|
|
108
43
|
});
|
|
109
|
-
var StyledBgShade =
|
|
44
|
+
var StyledBgShade = cm.div.variants({
|
|
110
45
|
base: "absolute inset-0 opacity-5 bg-linear-to-t via-40% via-transparent pointer-events-none",
|
|
111
46
|
variants: {
|
|
112
47
|
$env: {
|
|
@@ -118,10 +53,10 @@ var StyledBgShade = cm2.div.variants({
|
|
|
118
53
|
});
|
|
119
54
|
|
|
120
55
|
// src/mdx/code-blocks/CopyButton.tsx
|
|
121
|
-
import { cmMerge
|
|
122
|
-
import { Check
|
|
56
|
+
import { cmMerge } from "@classmatejs/react";
|
|
57
|
+
import { Check, Copy } from "lucide-react";
|
|
123
58
|
import { useState } from "react";
|
|
124
|
-
import { jsx as
|
|
59
|
+
import { jsx as jsx2 } from "react/jsx-runtime";
|
|
125
60
|
var trimTrailingWhitespace = (text) => {
|
|
126
61
|
return text.split("\n").map((line) => line.trimEnd()).join("\n");
|
|
127
62
|
};
|
|
@@ -130,18 +65,18 @@ var CodeBlockCopyButton = ({
|
|
|
130
65
|
className = ""
|
|
131
66
|
}) => {
|
|
132
67
|
const [copyState, setCopyState] = useState("idle");
|
|
133
|
-
return /* @__PURE__ */
|
|
68
|
+
return /* @__PURE__ */ jsx2(
|
|
134
69
|
"button",
|
|
135
70
|
{
|
|
136
71
|
type: "button",
|
|
137
|
-
className:
|
|
72
|
+
className: cmMerge("btn btn-ghost btn-xs h-8 min-h-8 px-2 text-base-muted hover:text-base-content", className),
|
|
138
73
|
onClick: async () => {
|
|
139
74
|
const success = await onCopy();
|
|
140
75
|
setCopyState(success ? "success" : "error");
|
|
141
76
|
window.setTimeout(() => setCopyState("idle"), 900);
|
|
142
77
|
},
|
|
143
78
|
"aria-label": copyState === "idle" ? "Copy to clipboard" : copyState === "success" ? "Copied" : "Copy failed",
|
|
144
|
-
children: copyState === "success" ? /* @__PURE__ */
|
|
79
|
+
children: copyState === "success" ? /* @__PURE__ */ jsx2(Check, { size: 14 }) : /* @__PURE__ */ jsx2(Copy, { size: 14 })
|
|
145
80
|
}
|
|
146
81
|
);
|
|
147
82
|
};
|
|
@@ -200,7 +135,7 @@ var useSelectedChoice = (choiceGroupName, defaultValue) => {
|
|
|
200
135
|
};
|
|
201
136
|
|
|
202
137
|
// src/mdx/code-blocks/ChoiceGroup.tsx
|
|
203
|
-
import { Fragment
|
|
138
|
+
import { Fragment, jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
204
139
|
var isChoiceElement = (node) => {
|
|
205
140
|
return isValidElement(node) && typeof node.props?.["data-choice-value"] === "string";
|
|
206
141
|
};
|
|
@@ -237,28 +172,28 @@ var ChoiceGroup = ({
|
|
|
237
172
|
const choiceElements = Children.toArray(children).filter(isChoiceElement);
|
|
238
173
|
const activeChoiceElement = choiceElements.find((choiceElement) => choiceElement.props["data-choice-value"] === selectedChoice) ?? choiceElements[0];
|
|
239
174
|
if (!activeChoiceElement) {
|
|
240
|
-
return /* @__PURE__ */
|
|
175
|
+
return /* @__PURE__ */ jsx3(Fragment, { children });
|
|
241
176
|
}
|
|
242
177
|
const activeCodeBlockMeta = getActiveCodeBlockMeta(activeChoiceElement.props.children);
|
|
243
178
|
const headerLabel = activeCodeBlockMeta.title ?? activeChoiceElement.props["data-choice-value"] ?? "";
|
|
244
179
|
if (hide) {
|
|
245
|
-
return /* @__PURE__ */
|
|
180
|
+
return /* @__PURE__ */ jsx3(Fragment, { children: activeChoiceElement.props.children });
|
|
246
181
|
}
|
|
247
|
-
return /* @__PURE__ */
|
|
182
|
+
return /* @__PURE__ */ jsxs2(
|
|
248
183
|
"div",
|
|
249
184
|
{
|
|
250
185
|
"data-choice-group-outer": true,
|
|
251
186
|
className: "mt-5 mb-5 flex h-full flex-col overflow-hidden rounded-box border border-base-muted-light",
|
|
252
187
|
children: [
|
|
253
|
-
/* @__PURE__ */
|
|
188
|
+
/* @__PURE__ */ jsxs2(
|
|
254
189
|
"div",
|
|
255
190
|
{
|
|
256
191
|
className: "not-prose flex min-h-10 items-center relative justify-between gap-3 border-b border-base-muted-light bg-base-muted-superlight px-4",
|
|
257
192
|
"data-choice-group-header": true,
|
|
258
193
|
children: [
|
|
259
|
-
/* @__PURE__ */
|
|
260
|
-
/* @__PURE__ */
|
|
261
|
-
/* @__PURE__ */
|
|
194
|
+
/* @__PURE__ */ jsx3(CodeBlockHeaderMeta, { label: headerLabel, env: activeCodeBlockMeta.env }),
|
|
195
|
+
/* @__PURE__ */ jsxs2("div", { className: "flex items-center gap-1", children: [
|
|
196
|
+
/* @__PURE__ */ jsx3("label", { className: "select select-xs min-w-28 w-fit", children: /* @__PURE__ */ jsx3(
|
|
262
197
|
"select",
|
|
263
198
|
{
|
|
264
199
|
name: `choicesFor-${choiceGroup.name}`,
|
|
@@ -270,10 +205,10 @@ var ChoiceGroup = ({
|
|
|
270
205
|
};
|
|
271
206
|
setSelectedChoice(event.currentTarget.value);
|
|
272
207
|
},
|
|
273
|
-
children: choiceGroup.choices.map((choice) => /* @__PURE__ */
|
|
208
|
+
children: choiceGroup.choices.map((choice) => /* @__PURE__ */ jsx3("option", { value: choice, disabled: choiceGroup.disabled.includes(choice), children: choice }, choice))
|
|
274
209
|
}
|
|
275
210
|
) }),
|
|
276
|
-
!activeCodeBlockMeta.hideCopy && /* @__PURE__ */
|
|
211
|
+
!activeCodeBlockMeta.hideCopy && /* @__PURE__ */ jsx3(
|
|
277
212
|
CodeBlockCopyButton,
|
|
278
213
|
{
|
|
279
214
|
onCopy: async () => {
|
|
@@ -291,36 +226,36 @@ var ChoiceGroup = ({
|
|
|
291
226
|
]
|
|
292
227
|
}
|
|
293
228
|
),
|
|
294
|
-
/* @__PURE__ */
|
|
229
|
+
/* @__PURE__ */ jsx3("div", { ref: bodyRef, className: "h-full flex-1 bg-base-200! [&>*:first-child]:mt-0 [&>*:last-child]:mb-0", children: /* @__PURE__ */ jsx3(CodeBlockGroupProvider, { value: true, children: activeChoiceElement.props.children }) })
|
|
295
230
|
]
|
|
296
231
|
}
|
|
297
232
|
);
|
|
298
233
|
};
|
|
299
234
|
|
|
300
235
|
// src/mdx/code-blocks/CodeBlockTransformer.tsx
|
|
301
|
-
import { jsx as
|
|
236
|
+
import { jsx as jsx4 } from "react/jsx-runtime";
|
|
302
237
|
var CodeBlockTransformer = ({ children, lineBreak }) => {
|
|
303
238
|
const className = `with-line-break_${lineBreak}`;
|
|
304
|
-
return /* @__PURE__ */
|
|
239
|
+
return /* @__PURE__ */ jsx4("div", { className, children });
|
|
305
240
|
};
|
|
306
241
|
|
|
307
242
|
// src/mdx/code-blocks/FileState.tsx
|
|
308
|
-
import { jsx as
|
|
243
|
+
import { jsx as jsx5 } from "react/jsx-runtime";
|
|
309
244
|
var FileAdded = ({ children }) => {
|
|
310
|
-
return /* @__PURE__ */
|
|
245
|
+
return /* @__PURE__ */ jsx5("div", { className: "doc-code-file-state doc-code-file-added", children });
|
|
311
246
|
};
|
|
312
247
|
var FileRemoved = ({ children }) => {
|
|
313
|
-
return /* @__PURE__ */
|
|
248
|
+
return /* @__PURE__ */ jsx5("div", { className: "doc-code-file-state doc-code-file-removed", children });
|
|
314
249
|
};
|
|
315
250
|
|
|
316
251
|
// src/mdx/code-blocks/Pre.tsx
|
|
317
|
-
import { cmMerge as
|
|
252
|
+
import { cmMerge as cmMerge2 } from "@classmatejs/react";
|
|
318
253
|
import {
|
|
319
254
|
Children as Children2,
|
|
320
255
|
isValidElement as isValidElement2,
|
|
321
256
|
useRef as useRef3
|
|
322
257
|
} from "react";
|
|
323
|
-
import { jsx as
|
|
258
|
+
import { jsx as jsx6, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
324
259
|
var asTrimmedString2 = (value) => {
|
|
325
260
|
return typeof value === "string" && value.trim() ? value.trim() : null;
|
|
326
261
|
};
|
|
@@ -353,7 +288,7 @@ var Pre = ({ children, className, ...props }) => {
|
|
|
353
288
|
const env = asTrimmedString2(props["data-code-env"]);
|
|
354
289
|
const fileState = props["file-added"] ? "added" : props["file-removed"] ? "removed" : null;
|
|
355
290
|
const hideMenu = props["hide-menu"] === "true";
|
|
356
|
-
const copyButton = hideMenu || isInChoiceGroup ? null : /* @__PURE__ */
|
|
291
|
+
const copyButton = hideMenu || isInChoiceGroup ? null : /* @__PURE__ */ jsx6(
|
|
357
292
|
CodeBlockCopyButton,
|
|
358
293
|
{
|
|
359
294
|
onCopy: async () => {
|
|
@@ -367,10 +302,10 @@ var Pre = ({ children, className, ...props }) => {
|
|
|
367
302
|
}
|
|
368
303
|
}
|
|
369
304
|
);
|
|
370
|
-
return /* @__PURE__ */
|
|
305
|
+
return /* @__PURE__ */ jsxs3(
|
|
371
306
|
"div",
|
|
372
307
|
{
|
|
373
|
-
className:
|
|
308
|
+
className: cmMerge2(
|
|
374
309
|
"group relative h-full not-prose overflow-hidden",
|
|
375
310
|
isInChoiceGroup ? "" : "mb-6 rounded-box border border-base-muted-light",
|
|
376
311
|
className
|
|
@@ -378,23 +313,23 @@ var Pre = ({ children, className, ...props }) => {
|
|
|
378
313
|
"data-code-block-frame": "",
|
|
379
314
|
"data-file-state": fileState ?? void 0,
|
|
380
315
|
children: [
|
|
381
|
-
!isInChoiceGroup && /* @__PURE__ */
|
|
316
|
+
!isInChoiceGroup && /* @__PURE__ */ jsxs3(
|
|
382
317
|
"div",
|
|
383
318
|
{
|
|
384
319
|
className: "flex min-h-10 relative items-center justify-between gap-3 border-b border-base-muted-light bg-base-muted-superlight! px-4",
|
|
385
320
|
"data-code-block-header": "",
|
|
386
321
|
children: [
|
|
387
|
-
/* @__PURE__ */
|
|
322
|
+
/* @__PURE__ */ jsx6(CodeBlockHeaderMeta, { label, env }),
|
|
388
323
|
copyButton
|
|
389
324
|
]
|
|
390
325
|
}
|
|
391
326
|
),
|
|
392
|
-
/* @__PURE__ */
|
|
327
|
+
/* @__PURE__ */ jsx6(
|
|
393
328
|
"pre",
|
|
394
329
|
{
|
|
395
330
|
...props,
|
|
396
331
|
ref: preRef,
|
|
397
|
-
className:
|
|
332
|
+
className: cmMerge2("doc-code-pre m-0 h-full overflow-x-auto bg-base-200! p-4 text-sm", className),
|
|
398
333
|
"data-code-block-content": "",
|
|
399
334
|
children
|
|
400
335
|
}
|
|
@@ -404,6 +339,71 @@ var Pre = ({ children, className, ...props }) => {
|
|
|
404
339
|
);
|
|
405
340
|
};
|
|
406
341
|
|
|
342
|
+
// src/mdx/components/Alert.tsx
|
|
343
|
+
import cm2, { cmMerge as cmMerge3 } from "@classmatejs/react";
|
|
344
|
+
import { Check as Check2, CircleX, Info, TriangleAlert } from "lucide-react";
|
|
345
|
+
import { Fragment as Fragment2, jsx as jsx7, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
346
|
+
var alertIconMap = {
|
|
347
|
+
info: Info,
|
|
348
|
+
warning: TriangleAlert,
|
|
349
|
+
error: CircleX,
|
|
350
|
+
success: Check2
|
|
351
|
+
};
|
|
352
|
+
var Alert = ({
|
|
353
|
+
type = "info",
|
|
354
|
+
heading,
|
|
355
|
+
children,
|
|
356
|
+
icon = true
|
|
357
|
+
}) => {
|
|
358
|
+
const AlertIcon = icon === true ? alertIconMap[type] : typeof icon === "object" ? () => /* @__PURE__ */ jsx7(Fragment2, { children: icon }) : null;
|
|
359
|
+
const alertIconTextColorClass = {
|
|
360
|
+
info: "text-info",
|
|
361
|
+
warning: "text-warning",
|
|
362
|
+
error: "text-error",
|
|
363
|
+
success: "text-success"
|
|
364
|
+
}[type];
|
|
365
|
+
return /* @__PURE__ */ jsxs4(AlertOuter, { $variant: type, children: [
|
|
366
|
+
!!heading && AlertIcon && /* @__PURE__ */ jsxs4("div", { className: "mb-3 flex items-center gap-2", children: [
|
|
367
|
+
/* @__PURE__ */ jsx7(AlertIcon, { className: cmMerge3(alertIconTextColorClass, "float-left h-5 w-5") }),
|
|
368
|
+
/* @__PURE__ */ jsx7(AlertHeading, { children: heading })
|
|
369
|
+
] }),
|
|
370
|
+
!(!!heading && AlertIcon) && !!heading && /* @__PURE__ */ jsx7(AlertHeading, { children: heading }),
|
|
371
|
+
!(!!heading && AlertIcon) && AlertIcon && /* @__PURE__ */ jsx7("div", { className: cmMerge3(alertIconTextColorClass, "float-left mr-2"), children: /* @__PURE__ */ jsx7(AlertIcon, { className: "mt-1 h-5 w-5" }) }),
|
|
372
|
+
children
|
|
373
|
+
] });
|
|
374
|
+
};
|
|
375
|
+
var AlertOuter = cm2.section.variants({
|
|
376
|
+
base: `
|
|
377
|
+
p-4
|
|
378
|
+
mt-5
|
|
379
|
+
mb-5
|
|
380
|
+
border
|
|
381
|
+
rounded-lg
|
|
382
|
+
prose-p:last:mb-0
|
|
383
|
+
prose-p:mt-0
|
|
384
|
+
prose-headings:first:mt-0
|
|
385
|
+
prose-headings:last:mb-0
|
|
386
|
+
prose-ul:first:mt-0
|
|
387
|
+
prose-ul:last:mb-0
|
|
388
|
+
text-sm
|
|
389
|
+
`,
|
|
390
|
+
variants: {
|
|
391
|
+
$variant: {
|
|
392
|
+
info: "bg-info/10 border-info/30",
|
|
393
|
+
warning: "bg-warning/10 border-warning/30",
|
|
394
|
+
error: "bg-error/10 border-error/25",
|
|
395
|
+
success: "bg-success/10 border-success/35"
|
|
396
|
+
}
|
|
397
|
+
},
|
|
398
|
+
defaultVariants: {
|
|
399
|
+
$variant: "info"
|
|
400
|
+
}
|
|
401
|
+
});
|
|
402
|
+
var AlertHeading = cm2.header`
|
|
403
|
+
font-bold
|
|
404
|
+
text-base
|
|
405
|
+
`;
|
|
406
|
+
|
|
407
407
|
// src/mdx/components/Link.tsx
|
|
408
408
|
import { cmMerge as cmMerge4 } from "@classmatejs/react";
|
|
409
409
|
import { Fragment as Fragment3, jsx as jsx8, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
@@ -637,15 +637,15 @@ var StyledTable = cm3.table.variants({
|
|
|
637
637
|
});
|
|
638
638
|
|
|
639
639
|
export {
|
|
640
|
-
Alert,
|
|
641
640
|
ChoiceGroup,
|
|
642
641
|
CodeBlockTransformer,
|
|
643
642
|
FileAdded,
|
|
644
643
|
FileRemoved,
|
|
645
644
|
Pre,
|
|
645
|
+
Alert,
|
|
646
646
|
Link,
|
|
647
647
|
Overview,
|
|
648
648
|
RepoLink,
|
|
649
649
|
Table
|
|
650
650
|
};
|
|
651
|
-
//# sourceMappingURL=chunk-
|
|
651
|
+
//# sourceMappingURL=chunk-4RLPVGMZ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/mdx/code-blocks/ChoiceGroup.tsx","../src/mdx/code-blocks/CodeBlockHeaderMeta.tsx","../src/mdx/code-blocks/CopyButton.tsx","../src/mdx/code-blocks/context.tsx","../src/mdx/code-blocks/useRestoreScroll.ts","../src/mdx/code-blocks/useSelectedChoice.ts","../src/mdx/code-blocks/CodeBlockTransformer.tsx","../src/mdx/code-blocks/FileState.tsx","../src/mdx/code-blocks/Pre.tsx","../src/mdx/components/Alert.tsx","../src/mdx/components/Link.tsx","../src/mdx/components/Overview.tsx","../src/mdx/components/RepoLink.tsx","../src/mdx/components/Table.tsx"],"sourcesContent":["export { ChoiceGroup }\n\nimport { Children, isValidElement, type ReactElement, type ReactNode, useRef } from 'react'\nimport { CodeBlockHeaderMeta } from './CodeBlockHeaderMeta.js'\nimport { CodeBlockCopyButton, trimTrailingWhitespace } from './CopyButton.js'\nimport { CodeBlockGroupProvider } from './context.js'\nimport { useRestoreScroll } from './useRestoreScroll.js'\nimport { useSelectedChoice } from './useSelectedChoice.js'\n\ntype ChoiceGroupDescriptor = {\n default: string\n disabled: string[]\n name: string\n choices: string[]\n}\n\ntype ChoiceElementProps = {\n children?: ReactNode\n 'data-choice-value'?: string\n}\n\nconst isChoiceElement = (node: ReactNode): node is ReactElement<ChoiceElementProps> => {\n return isValidElement<ChoiceElementProps>(node) && typeof node.props?.['data-choice-value'] === 'string'\n}\n\nconst asTrimmedString = (value: unknown) => {\n return typeof value === 'string' && value.trim() ? value.trim() : null\n}\n\nconst getActiveCodeBlockMeta = (node: ReactNode): { env: string | null; hideCopy: boolean; title: string | null } => {\n for (const child of Children.toArray(node)) {\n if (!isValidElement(child)) {\n continue\n }\n\n const props = child.props as {\n children?: ReactNode\n 'data-code-env'?: string\n 'data-code-title'?: string\n 'hide-menu'?: string\n }\n const env = asTrimmedString(props['data-code-env'])\n const title = asTrimmedString(props['data-code-title'])\n const hideCopy = props['hide-menu'] === 'true'\n\n if (title || env || hideCopy) {\n return { env, hideCopy, title }\n }\n\n const nestedMeta = getActiveCodeBlockMeta(props.children)\n if (nestedMeta.title || nestedMeta.env || nestedMeta.hideCopy) {\n return nestedMeta\n }\n }\n\n return { env: null, hideCopy: false, title: null }\n}\n\nconst ChoiceGroup = ({\n children,\n choiceGroup,\n hide = false,\n}: {\n children: ReactNode\n choiceGroup: ChoiceGroupDescriptor\n hide?: boolean\n lvl?: number\n}) => {\n const [selectedChoice, setSelectedChoice] = useSelectedChoice(choiceGroup.name, choiceGroup.default)\n const bodyRef = useRef<HTMLDivElement>(null)\n const previousPositionRef = useRestoreScroll([selectedChoice])\n const choiceElements = Children.toArray(children).filter(isChoiceElement)\n const activeChoiceElement =\n choiceElements.find((choiceElement) => choiceElement.props['data-choice-value'] === selectedChoice) ??\n choiceElements[0]\n\n if (!activeChoiceElement) {\n return <>{children}</>\n }\n\n const activeCodeBlockMeta = getActiveCodeBlockMeta(activeChoiceElement.props.children)\n const headerLabel = activeCodeBlockMeta.title ?? activeChoiceElement.props['data-choice-value'] ?? ''\n\n if (hide) {\n return <>{activeChoiceElement.props.children}</>\n }\n\n return (\n <div\n data-choice-group-outer\n className=\"mt-5 mb-5 flex h-full flex-col overflow-hidden rounded-box border border-base-muted-light\"\n >\n <div\n className=\"not-prose flex min-h-10 items-center relative justify-between gap-3 border-b border-base-muted-light bg-base-muted-superlight px-4\"\n data-choice-group-header\n >\n <CodeBlockHeaderMeta label={headerLabel} env={activeCodeBlockMeta.env} />\n <div className=\"flex items-center gap-1\">\n <label className=\"select select-xs min-w-28 w-fit\">\n <select\n name={`choicesFor-${choiceGroup.name}`}\n value={activeChoiceElement.props['data-choice-value']}\n onChange={(event) => {\n previousPositionRef.current = {\n top: event.currentTarget.getBoundingClientRect().top,\n element: event.currentTarget,\n }\n setSelectedChoice(event.currentTarget.value)\n }}\n >\n {choiceGroup.choices.map((choice) => (\n <option key={choice} value={choice} disabled={choiceGroup.disabled.includes(choice)}>\n {choice}\n </option>\n ))}\n </select>\n </label>\n {!activeCodeBlockMeta.hideCopy && (\n <CodeBlockCopyButton\n onCopy={async () => {\n const text = trimTrailingWhitespace(bodyRef.current?.textContent ?? '')\n\n try {\n await navigator.clipboard.writeText(text)\n return true\n } catch {\n return false\n }\n }}\n />\n )}\n </div>\n </div>\n <div ref={bodyRef} className=\"h-full flex-1 bg-base-200! [&>*:first-child]:mt-0 [&>*:last-child]:mb-0\">\n <CodeBlockGroupProvider value={true}>{activeChoiceElement.props.children}</CodeBlockGroupProvider>\n </div>\n </div>\n )\n}\n","import cm from '@classmatejs/react'\n\nexport { CodeBlockHeaderMeta }\n\nconst CodeBlockHeaderMeta = ({ env, label }: { env?: string | null; label: string }) => {\n const effectiveEnv = env === 'server' || env === 'client' ? env : undefined\n\n return (\n <div className=\"flex min-w-0 items-center gap-2\">\n {env && <StyledDivider $env={env === 'server' || env === 'client' ? env : undefined} />}\n {env && <StyledBgShade $env={env === 'server' || env === 'client' ? env : undefined} />}\n <div className=\"font-mono text-xs font-semibold text-base-muted\">{label}</div>\n {env && <StyledBadge $env={effectiveEnv}>{env}</StyledBadge>}\n </div>\n )\n}\n\nconst StyledDivider = cm.div.variants<{ $env?: 'server' | 'client' }>({\n base: 'absolute h-1 -bottom-px left-0 w-full pointer-events-none',\n variants: {\n $env: {\n server: 'border-info/50 border-b ',\n client: 'border-success/50 border-b',\n },\n },\n defaultVariants: { $env: 'server' },\n})\n\nconst StyledBadge = cm.div.variants<{ $env?: 'server' | 'client' }>({\n base: 'shrink-0 badge badge-sm rounded-field badge-soft border pointer-events-none',\n variants: {\n $env: {\n server: 'badge-info border-info',\n client: 'badge-success border-success',\n },\n },\n defaultVariants: { $env: 'server' },\n})\n\nconst StyledBgShade = cm.div.variants<{ $env?: 'server' | 'client' }>({\n base: 'absolute inset-0 opacity-5 bg-linear-to-t via-40% via-transparent pointer-events-none',\n variants: {\n $env: {\n server: 'from-info',\n client: 'from-success',\n },\n },\n defaultVariants: { $env: 'server' },\n})\n","export { CodeBlockCopyButton, trimTrailingWhitespace }\n\nimport { cmMerge } from '@classmatejs/react'\nimport { Check, Copy } from 'lucide-react'\nimport { useState } from 'react'\n\nconst trimTrailingWhitespace = (text: string) => {\n return text\n .split('\\n')\n .map((line) => line.trimEnd())\n .join('\\n')\n}\n\nconst CodeBlockCopyButton = ({\n onCopy,\n className = '',\n}: {\n onCopy: () => Promise<boolean> | boolean\n className?: string\n}) => {\n const [copyState, setCopyState] = useState<'idle' | 'success' | 'error'>('idle')\n\n return (\n <button\n type=\"button\"\n className={cmMerge('btn btn-ghost btn-xs h-8 min-h-8 px-2 text-base-muted hover:text-base-content', className)}\n onClick={async () => {\n const success = await onCopy()\n setCopyState(success ? 'success' : 'error')\n window.setTimeout(() => setCopyState('idle'), 900)\n }}\n aria-label={copyState === 'idle' ? 'Copy to clipboard' : copyState === 'success' ? 'Copied' : 'Copy failed'}\n >\n {copyState === 'success' ? <Check size={14} /> : <Copy size={14} />}\n </button>\n )\n}\n","import { createContext, useContext } from 'react'\n\nconst CodeBlockGroupContext = createContext(false)\n\nexport const CodeBlockGroupProvider = CodeBlockGroupContext.Provider\n\nexport const useIsInCodeBlockGroup = () => useContext(CodeBlockGroupContext)\n","import { useEffect, useRef } from 'react'\n\ntype ScrollPosition = {\n top: number\n element: Element\n}\n\nexport const useRestoreScroll = (deps: ReadonlyArray<unknown>) => {\n const previousPositionRef = useRef<ScrollPosition | null>(null)\n\n useEffect(() => {\n if (!previousPositionRef.current) {\n return\n }\n\n const { top, element } = previousPositionRef.current\n const delta = element.getBoundingClientRect().top - top\n\n if (delta !== 0) {\n window.scrollBy(0, delta)\n }\n\n previousPositionRef.current = null\n // biome-ignore lint/correctness/useExhaustiveDependencies: restore only when the tracked value changes\n }, deps)\n\n return previousPositionRef\n}\n","import { useEffect, useState, useSyncExternalStore } from 'react'\nimport { useUniversalMdxRuntime } from '../components/UniversalMdxProvider.js'\n\nconst subscribeNoop = () => () => {}\nconst getServerSnapshot = () => null\n\nexport const useSelectedChoice = (choiceGroupName: string, defaultValue: string) => {\n const runtime = useUniversalMdxRuntime()\n const choiceStore = runtime?.codeBlockChoices\n const storedChoice = useSyncExternalStore(\n choiceStore?.subscribe ?? subscribeNoop,\n () => choiceStore?.getChoice(choiceGroupName) ?? null,\n getServerSnapshot,\n )\n const [localChoice, setLocalChoice] = useState(defaultValue)\n\n useEffect(() => {\n if (!choiceStore || storedChoice) {\n return\n }\n\n const legacyChoice = choiceStore.getLegacyChoice?.(choiceGroupName)\n if (legacyChoice) {\n choiceStore.setChoice(choiceGroupName, legacyChoice)\n }\n }, [choiceGroupName, choiceStore, storedChoice])\n\n if (choiceStore) {\n return [storedChoice ?? defaultValue, (value: string) => choiceStore.setChoice(choiceGroupName, value)] as const\n }\n\n return [localChoice, setLocalChoice] as const\n}\n","export { CodeBlockTransformer }\nexport type { LineBreak }\n\nimport type { ReactNode } from 'react'\n\ntype LineBreak = 'white-space' | 'break-word'\n\nconst CodeBlockTransformer = ({ children, lineBreak }: { children: ReactNode; lineBreak: LineBreak }) => {\n const className = `with-line-break_${lineBreak}` as const\n return <div className={className}>{children}</div>\n}\n","export { FileAdded, FileRemoved }\n\nimport type { ReactNode } from 'react'\n\nconst FileAdded = ({ children }: { children: ReactNode }) => {\n return <div className=\"doc-code-file-state doc-code-file-added\">{children}</div>\n}\n\nconst FileRemoved = ({ children }: { children: ReactNode }) => {\n return <div className=\"doc-code-file-state doc-code-file-removed\">{children}</div>\n}\n","export { Pre }\n\nimport { cmMerge } from '@classmatejs/react'\nimport {\n Children,\n type ComponentPropsWithoutRef,\n isValidElement,\n type ReactElement,\n type ReactNode,\n useRef,\n} from 'react'\nimport { CodeBlockHeaderMeta } from './CodeBlockHeaderMeta.js'\nimport { CodeBlockCopyButton, trimTrailingWhitespace } from './CopyButton.js'\nimport { useIsInCodeBlockGroup } from './context.js'\n\ntype PreProps = ComponentPropsWithoutRef<'pre'> & {\n 'data-code-env'?: string\n 'data-code-title'?: string\n 'data-language'?: string\n 'data-language-label'?: string\n 'file-added'?: string\n 'file-removed'?: string\n 'hide-menu'?: string\n}\n\nconst asTrimmedString = (value: unknown) => {\n return typeof value === 'string' && value.trim() ? value.trim() : null\n}\n\nconst getLanguageFromChildren = (children: ReactNode) => {\n const firstChild = Children.toArray(children)[0]\n if (!isValidElement(firstChild)) {\n return null\n }\n\n const props = (firstChild as ReactElement<{ className?: string; 'data-language'?: string }>).props\n const explicitLanguage = asTrimmedString(props['data-language'])\n if (explicitLanguage) {\n return explicitLanguage\n }\n\n const classNames = typeof props.className === 'string' ? props.className.split(/\\s+/) : []\n const languageClassName = classNames.find((className) => className.startsWith('language-'))\n return languageClassName ? languageClassName.slice('language-'.length) : null\n}\n\nconst getLanguageLabel = (props: PreProps) => {\n const explicitLabel = asTrimmedString(props['data-language-label'])\n if (explicitLabel) {\n return explicitLabel\n }\n\n const explicitLanguage = asTrimmedString(props['data-language']) ?? getLanguageFromChildren(props.children)\n return explicitLanguage ? explicitLanguage.toUpperCase() : 'CODE'\n}\n\nconst Pre = ({ children, className, ...props }: PreProps) => {\n const preRef = useRef<HTMLPreElement>(null)\n const isInChoiceGroup = useIsInCodeBlockGroup()\n const label = asTrimmedString(props['data-code-title']) ?? getLanguageLabel(props)\n const env = asTrimmedString(props['data-code-env'])\n const fileState = props['file-added'] ? 'added' : props['file-removed'] ? 'removed' : null\n const hideMenu = props['hide-menu'] === 'true'\n\n const copyButton =\n hideMenu || isInChoiceGroup ? null : (\n <CodeBlockCopyButton\n onCopy={async () => {\n const text = trimTrailingWhitespace(preRef.current?.textContent ?? '')\n\n try {\n await navigator.clipboard.writeText(text)\n return true\n } catch {\n return false\n }\n }}\n />\n )\n\n return (\n <div\n className={cmMerge(\n 'group relative h-full not-prose overflow-hidden',\n isInChoiceGroup ? '' : 'mb-6 rounded-box border border-base-muted-light',\n className,\n )}\n data-code-block-frame=\"\"\n data-file-state={fileState ?? undefined}\n >\n {!isInChoiceGroup && (\n <div\n className=\"flex min-h-10 relative items-center justify-between gap-3 border-b border-base-muted-light bg-base-muted-superlight! px-4\"\n data-code-block-header=\"\"\n >\n <CodeBlockHeaderMeta label={label} env={env} />\n {copyButton}\n </div>\n )}\n <pre\n {...props}\n ref={preRef}\n className={cmMerge('doc-code-pre m-0 h-full overflow-x-auto bg-base-200! p-4 text-sm', className)}\n data-code-block-content=\"\"\n >\n {children}\n </pre>\n </div>\n )\n}\n","import cm, { cmMerge } from '@classmatejs/react'\nimport { Check, CircleX, Info, TriangleAlert } from 'lucide-react'\nimport type { ReactNode } from 'react'\n\nexport type AlertVariant = 'info' | 'warning' | 'error' | 'success'\n\nconst alertIconMap = {\n info: Info,\n warning: TriangleAlert,\n error: CircleX,\n success: Check,\n}\n\nexport const Alert = ({\n type = 'info',\n heading,\n children,\n icon = true,\n}: {\n type?: AlertVariant\n heading?: ReactNode\n children: ReactNode\n icon?: boolean | ReactNode\n}) => {\n const AlertIcon = icon === true ? alertIconMap[type] : typeof icon === 'object' ? () => <>{icon}</> : null\n\n const alertIconTextColorClass = {\n info: 'text-info',\n warning: 'text-warning',\n error: 'text-error',\n success: 'text-success',\n }[type]\n\n return (\n <AlertOuter $variant={type}>\n {!!heading && AlertIcon && (\n <div className=\"mb-3 flex items-center gap-2\">\n <AlertIcon className={cmMerge(alertIconTextColorClass, 'float-left h-5 w-5')} />\n <AlertHeading>{heading}</AlertHeading>\n </div>\n )}\n {!(!!heading && AlertIcon) && !!heading && <AlertHeading>{heading}</AlertHeading>}\n {!(!!heading && AlertIcon) && AlertIcon && (\n <div className={cmMerge(alertIconTextColorClass, 'float-left mr-2')}>\n <AlertIcon className=\"mt-1 h-5 w-5\" />\n </div>\n )}\n {children}\n </AlertOuter>\n )\n}\n\nconst AlertOuter = cm.section.variants<{ $variant: AlertVariant }>({\n base: `\n p-4\n mt-5\n mb-5\n border\n rounded-lg\n prose-p:last:mb-0\n prose-p:mt-0\n prose-headings:first:mt-0\n prose-headings:last:mb-0\n prose-ul:first:mt-0\n prose-ul:last:mb-0\n text-sm\n `,\n variants: {\n $variant: {\n info: 'bg-info/10 border-info/30',\n warning: 'bg-warning/10 border-warning/30',\n error: 'bg-error/10 border-error/25',\n success: 'bg-success/10 border-success/35',\n },\n },\n defaultVariants: {\n $variant: 'info',\n },\n})\n\nconst AlertHeading = cm.header`\n font-bold\n text-base\n`\n","import { cmMerge } from '@classmatejs/react'\nimport type { ComponentPropsWithoutRef, ReactNode } from 'react'\nimport { withSiteBaseUrl } from '../../shared/assets.js'\nimport { useUniversalMdxRuntime } from './UniversalMdxProvider.js'\n\nexport type LinkProps = ComponentPropsWithoutRef<'a'> & {\n href?: string\n text?: string | ReactNode\n noBreadcrumb?: boolean\n doNotInferSectionTitle?: boolean\n noWarning?: boolean\n}\n\nfunction assertUsage(condition: unknown, message: string): asserts condition {\n if (!condition) {\n throw new Error(`[UniversalMdxMods][Wrong Usage] ${message}`)\n }\n}\n\nconst assertWarning = (condition: unknown, message: string) => {\n const isDev = (import.meta as ImportMeta & { env?: { DEV?: boolean } }).env?.DEV === true\n\n if (condition || !isDev) {\n return\n }\n\n console.warn(`[UniversalMdxMods][Warning] ${message}`)\n}\n\nconst parseMarkdownMini = (markdown: string) => {\n type Part = { content: string; nodeType: 'code' | 'text' }\n const parts: Part[] = []\n let current: Part | undefined\n\n for (const letter of markdown.split('')) {\n if (letter === '`') {\n if (current?.nodeType === 'code') {\n parts.push(current)\n current = undefined\n } else {\n if (current) {\n parts.push(current)\n }\n current = { nodeType: 'code', content: '' }\n }\n continue\n }\n\n current ??= { nodeType: 'text', content: '' }\n current.content += letter\n }\n\n if (current) {\n parts.push(current)\n }\n\n return (\n <>\n {parts.map((part, index) =>\n part.nodeType === 'code' ? <code key={index}>{part.content}</code> : <span key={index}>{part.content}</span>,\n )}\n </>\n )\n}\n\nconst determineSectionTitle = (href: string) => {\n const hash = href.split('#')[1]\n\n if (!hash) {\n return null\n }\n\n return hash\n .split(':~:text')[0]\n ?.split('-')\n .map((word, index) => (index === 0 ? `${word[0]?.toUpperCase() ?? ''}${word.slice(1)}` : word))\n .join(' ')\n}\n\nconst isExternalHref = (href: string) => {\n return /^(?:[a-z]+:)?\\/\\//i.test(href) || href.startsWith('mailto:') || href.startsWith('tel:')\n}\n\nconst renderLabelPart = (value: ReactNode) => {\n return typeof value === 'string' ? parseMarkdownMini(value) : value\n}\n\nconst getLinkText = ({\n isCurrentPage,\n breadcrumb,\n noBreadcrumb,\n sectionTitle,\n title,\n}: {\n isCurrentPage?: boolean\n breadcrumb?: ReactNode[]\n noBreadcrumb?: boolean\n sectionTitle?: ReactNode\n title?: ReactNode\n}) => {\n const breadcrumbParts: ReactNode[] = []\n\n if (breadcrumb) {\n breadcrumbParts.push(...breadcrumb.map((item) => renderLabelPart(item)))\n }\n\n if (title) {\n breadcrumbParts.push(renderLabelPart(title))\n }\n\n if (sectionTitle) {\n breadcrumbParts.push(renderLabelPart(sectionTitle))\n }\n\n if (noBreadcrumb || isCurrentPage) {\n return breadcrumbParts[breadcrumbParts.length - 1] ?? null\n }\n\n return (\n <>\n {breadcrumbParts.map((part, index) => (\n <span key={index}>\n {index > 0 ? ' > ' : null}\n {part}\n </span>\n ))}\n </>\n )\n}\n\nexport const Link = ({\n href,\n text,\n noBreadcrumb,\n doNotInferSectionTitle,\n noWarning,\n children,\n className,\n ...props\n}: LinkProps) => {\n const runtime = useUniversalMdxRuntime()\n\n if (typeof href !== 'string' || href === '') {\n assertWarning(false, '<Link /> is missing `href`.')\n\n return (\n <a className={cmMerge(className, 'inline-flex gap-1 items-center')} {...props}>\n {text ?? children ?? 'LINK-TARGET-NOT-FOUND'}\n </a>\n )\n }\n\n assertUsage(\n href.startsWith('/') || href.startsWith('#') || isExternalHref(href),\n `<Link href /> prop \\`href==='${href}'\\` but should be external or start with '/' or '#'`,\n )\n assertUsage(!text || !children, 'Cannot use both `text` or `children`')\n\n const content = text ?? children\n const resolvedDocLink = runtime?.resolveDocLink?.({\n href,\n doNotInferSectionTitle,\n noWarning,\n })\n const localizedHref = resolvedDocLink?.href ?? runtime?.localizeHref?.(href) ?? withSiteBaseUrl(href)\n const inferredSectionTitle =\n resolvedDocLink?.sectionTitle ?? (!doNotInferSectionTitle ? determineSectionTitle(href) : null)\n const inferredText =\n content ??\n (resolvedDocLink\n ? getLinkText({\n breadcrumb: resolvedDocLink.breadcrumb,\n isCurrentPage: resolvedDocLink.isCurrentPage,\n noBreadcrumb,\n sectionTitle: inferredSectionTitle ?? undefined,\n title: resolvedDocLink.title,\n })\n : isExternalHref(href)\n ? href\n : (inferredSectionTitle ?? 'LINK-TARGET-NOT-FOUND'))\n\n return (\n <a href={localizedHref} className={cmMerge(className, '')} {...props}>\n {inferredText}\n </a>\n )\n}\n","import type { ReactNode } from 'react'\nimport { withSiteBaseUrl } from '../../shared/assets.js'\nimport { renderInlineMarkdown } from '../../shared/renderInlineMarkdown.js'\nimport type { UniversalResolvedOverviewItem } from './types.js'\nimport { useUniversalMdxRuntime } from './UniversalMdxProvider.js'\n\ntype OverviewLinkItem = {\n title: ReactNode\n href: string\n excerpt?: ReactNode | null\n}\n\ntype OverviewDividerItem = {\n dividerText: ReactNode\n}\n\nexport type OverviewItem = OverviewLinkItem | OverviewDividerItem\n\ninterface OverviewProps {\n items: Array<string | OverviewItem>\n}\n\nconst isOverviewDividerItem = (item: string | OverviewItem): item is OverviewDividerItem =>\n typeof item === 'object' && item !== null && 'dividerText' in item\n\nfunction assertUsage(condition: unknown, message: string): asserts condition {\n if (!condition) {\n throw new Error(`[UniversalMdxMods][Wrong Usage] ${message}`)\n }\n}\n\nconst groupOverviewItems = (items: OverviewItem[]) => {\n const groups: { dividerText?: ReactNode; items: OverviewLinkItem[] }[] = []\n let currentGroup: { dividerText?: ReactNode; items: OverviewLinkItem[] } = {\n items: [],\n }\n\n const commitCurrentGroup = () => {\n if (currentGroup.items.length > 0) {\n groups.push(currentGroup)\n }\n }\n\n for (const item of items) {\n if (isOverviewDividerItem(item)) {\n commitCurrentGroup()\n currentGroup = {\n dividerText: item.dividerText,\n items: [],\n }\n continue\n }\n\n currentGroup.items.push(item)\n }\n\n commitCurrentGroup()\n\n return groups\n}\n\nconst OverviewCard = ({ excerpt, href, title }: OverviewLinkItem) => {\n return (\n <a\n href={withSiteBaseUrl(href)}\n className=\"group flex h-full flex-col gap-3 rounded-box border border-base-muted-light bg-base-muted-superlight p-5 no-underline hover:border-primary-muted-medium hover:bg-base-muted-superlight/50\"\n >\n <h3 className=\"text-lg font-semibold text-base-content\">{renderInlineMarkdown(title)}</h3>\n {excerpt ? <p className=\"text-sm leading-relaxed text-base-muted\">{renderInlineMarkdown(excerpt)}</p> : null}\n </a>\n )\n}\n\nconst normalizeOverviewItems = (\n items: Array<string | OverviewItem>,\n resolveOverviewItem?: (key: string) => UniversalResolvedOverviewItem | null,\n): OverviewItem[] => {\n return items.map((item) => {\n if (typeof item !== 'string') {\n return item\n }\n\n const resolvedItem = resolveOverviewItem?.(item)\n\n assertUsage(\n resolvedItem,\n `Overview item \"${item}\" requires runtime.resolveOverviewItem(). Pass { title, href, excerpt } manually when no resolver is available.`,\n )\n\n return resolvedItem\n })\n}\n\nexport const Overview = ({ items }: OverviewProps) => {\n const runtime = useUniversalMdxRuntime()\n const groups = groupOverviewItems(normalizeOverviewItems(items, runtime?.resolveOverviewItem))\n\n if (groups.length === 0) {\n return null\n }\n\n return (\n <div className=\"prose-headings:my-0 prose-p:my-0 my-5 flex flex-col gap-8\">\n {groups.map((group, groupIndex) => (\n <section className=\"flex flex-col gap-4\" key={groupIndex}>\n {group.dividerText ? (\n <p className=\"text-sm font-semibold uppercase tracking-wide\">{renderInlineMarkdown(group.dividerText)}</p>\n ) : null}\n <div className=\"grid gap-4 sm:grid-cols-2\">\n {group.items.map((item, itemIndex) => (\n <OverviewCard {...item} key={item.href || itemIndex} />\n ))}\n </div>\n </section>\n ))}\n </div>\n )\n}\n","type Repo = `${string}/${string}`\ntype TimestampType = `${number}.${number}`\n\nexport const RepoLink = ({ repo, timestamp }: { repo: Repo; timestamp: TimestampType }) => {\n if (!repo || repo.split('/').length !== 2) {\n throw new Error('Invalid repo')\n }\n\n return (\n <span className=\"inline-flex items-center gap-1\">\n <span className=\"bg-white font-mono font-bold h-fit px-1 text-sm!\">{timestamp}</span>\n <a href={`https://github.com/${repo}`} target=\"_blank\" rel=\"noopener\">\n GitHub > <code>{repo}</code>\n </a>\n </span>\n )\n}\n","import cm from '@classmatejs/react'\n\nexport interface TableData {\n headers: string[]\n rows: string[][]\n}\n\nexport interface TableProps {\n size?: 'sm' | 'md' | 'lg'\n data: TableData\n}\n\nexport const Table = ({ size = 'md', data }: TableProps) => {\n return (\n <StyledTable $size={size}>\n <thead className=\"overflow-hidden rounded-t-box bg-base-200\">\n <tr>\n {data.headers.map((header, index) => (\n <th key={index}>{header}</th>\n ))}\n </tr>\n </thead>\n <tbody>\n {data.rows.map((row, rowIndex) => (\n <tr key={rowIndex}>\n {row.map((cell, cellIndex) => (\n <td key={cellIndex}>{cell}</td>\n ))}\n </tr>\n ))}\n </tbody>\n </StyledTable>\n )\n}\n\nconst StyledTable = cm.table.variants<{ $size: TableProps['size'] }>({\n base: `\n not-prose\n table\n w-full\n table-zebra\n mb-6\n `,\n variants: {\n $size: {\n sm: 'table-sm',\n md: 'table-md',\n lg: 'table-lg',\n },\n },\n defaultVariants: {\n $size: 'md',\n },\n})\n"],"mappings":"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","names":["useRef","jsx","jsx","useEffect","useState","useState","useEffect","jsx","jsxs","useRef","jsx","jsxs","jsx","jsx","jsx","jsx","cmMerge","Children","isValidElement","useRef","jsx","jsxs","asTrimmedString","Children","isValidElement","useRef","jsx","jsxs","cmMerge","cm","cmMerge","Check","Fragment","jsx","jsxs","cmMerge","Fragment","jsx","jsxs","cmMerge","jsx","jsxs","assertUsage","jsx","jsxs","cm","jsx","jsxs"]}
|
|
@@ -2,7 +2,7 @@ import {
|
|
|
2
2
|
isDocsSourcePath,
|
|
3
3
|
loadDocsConfig,
|
|
4
4
|
syncGeneratedDocsPages
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-UMMK73OW.js";
|
|
6
6
|
import {
|
|
7
7
|
nivelPublicRoute
|
|
8
8
|
} from "./chunk-PYYPYIBD.js";
|
|
@@ -195,4 +195,4 @@ var nivelPagesPlugin = () => {
|
|
|
195
195
|
export {
|
|
196
196
|
nivelPagesPlugin
|
|
197
197
|
};
|
|
198
|
-
//# sourceMappingURL=chunk-
|
|
198
|
+
//# sourceMappingURL=chunk-D35PFSSY.js.map
|
|
@@ -258,12 +258,32 @@ var getDocsGraphTemplate = () => {
|
|
|
258
258
|
};
|
|
259
259
|
var getConfigTemplate = () => {
|
|
260
260
|
return [
|
|
261
|
-
"import
|
|
261
|
+
"import nivel from '@unterberg/nivel/vike'",
|
|
262
|
+
"import type { Config } from 'vike/types'",
|
|
263
|
+
"import vikeReact from 'vike-react/config'",
|
|
262
264
|
"import docsConfig from './+docs'",
|
|
263
265
|
"",
|
|
264
266
|
"export { config }",
|
|
265
267
|
"",
|
|
266
|
-
"const
|
|
268
|
+
"const themePreference = docsConfig.theme?.defaultPreference ?? 'light'",
|
|
269
|
+
"const dataTheme =",
|
|
270
|
+
" themePreference === 'dark'",
|
|
271
|
+
" ? (docsConfig.theme?.dark ?? 'consumer-dark')",
|
|
272
|
+
" : (docsConfig.theme?.light ?? 'consumer-light')",
|
|
273
|
+
"",
|
|
274
|
+
"const config: Config = {",
|
|
275
|
+
" ...nivel,",
|
|
276
|
+
" extends: [vikeReact],",
|
|
277
|
+
" title: docsConfig.siteTitle,",
|
|
278
|
+
" description: docsConfig.siteDescription ?? `${docsConfig.siteTitle} documentation`,",
|
|
279
|
+
" htmlAttributes: { 'data-theme': dataTheme },",
|
|
280
|
+
" passToClient: ['docs'],",
|
|
281
|
+
"",
|
|
282
|
+
" // User-facing Vike levers stay visible in +config.ts.",
|
|
283
|
+
" prerender: true,",
|
|
284
|
+
" // ssr: true,",
|
|
285
|
+
" // prefetchStaticAssets: 'viewport',",
|
|
286
|
+
"}",
|
|
267
287
|
""
|
|
268
288
|
].join("\n");
|
|
269
289
|
};
|
|
@@ -470,4 +490,4 @@ export {
|
|
|
470
490
|
getInitSummary,
|
|
471
491
|
initConsumer
|
|
472
492
|
};
|
|
473
|
-
//# sourceMappingURL=chunk-
|
|
493
|
+
//# sourceMappingURL=chunk-UMMK73OW.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/runtime/node/codegen.ts","../src/runtime/node/loadDocsConfig.ts","../src/runtime/node/scaffold.ts"],"sourcesContent":["import fs from 'node:fs'\nimport path from 'node:path'\nimport type { DocPageData, DocPageLinkData, DocsConfig, DocsGlobalContextData } from '../../docs/types.js'\nimport { extractDocHeadings } from '../../docs/docHeadings.js'\nimport { getResolvedPageById, resolveDocsConfig } from '../../docs/resolveDocsConfig.js'\n\nconst GENERATED_DIRNAME = '(nivel-generated)'\n\nconst writeFileIfChanged = (filePath: string, source: string) => {\n const current = fs.existsSync(filePath) ? fs.readFileSync(filePath, 'utf8') : null\n if (current === source) {\n return\n }\n\n fs.mkdirSync(path.dirname(filePath), { recursive: true })\n fs.writeFileSync(filePath, source)\n}\n\nconst toPosix = (value: string) => value.split(path.sep).join(path.posix.sep)\n\nconst getRelativeImportPath = (fromDirectory: string, toFile: string) => {\n const relativePath = toPosix(path.relative(fromDirectory, toFile))\n if (relativePath.startsWith('.')) {\n return relativePath\n }\n return `./${relativePath}`\n}\n\nconst serializeData = (data: DocPageData | DocsGlobalContextData) => JSON.stringify(data, null, 2)\n\nconst collectFiles = (directoryPath: string): string[] => {\n if (!fs.existsSync(directoryPath)) {\n return []\n }\n\n const entries = fs.readdirSync(directoryPath, { withFileTypes: true })\n\n return entries.flatMap((entry) => {\n const entryPath = path.join(directoryPath, entry.name)\n return entry.isDirectory() ? collectFiles(entryPath) : [entryPath]\n })\n}\n\nconst removeEmptyDirectories = (directoryPath: string, rootPath: string) => {\n if (!fs.existsSync(directoryPath)) {\n return\n }\n\n for (const entry of fs.readdirSync(directoryPath, { withFileTypes: true })) {\n if (!entry.isDirectory()) {\n continue\n }\n\n removeEmptyDirectories(path.join(directoryPath, entry.name), rootPath)\n }\n\n if (directoryPath === rootPath) {\n return\n }\n\n if (fs.readdirSync(directoryPath).length === 0) {\n fs.rmdirSync(directoryPath)\n }\n}\n\nconst getGeneratedPageSource = (contentImportPath: string) => {\n return [\n \"import { DocsPage } from '@unterberg/nivel/client'\",\n `import Content from ${JSON.stringify(contentImportPath)}`,\n '',\n 'const Page = () => {',\n ' return <DocsPage Content={Content} />',\n '}',\n '',\n 'export default Page',\n '',\n ].join('\\n')\n}\n\nconst getGeneratedDataSource = (data: DocPageData) => {\n return [\n \"import type { DocPageData } from '@unterberg/nivel'\",\n '',\n `const data: DocPageData = ${serializeData(data)}`,\n '',\n 'const pageData = () => {',\n ' return data',\n '}',\n '',\n 'export default pageData',\n '',\n ].join('\\n')\n}\n\nconst getGeneratedGlobalContextSource = (data: DocsGlobalContextData) => {\n return [\n \"import type { DocsGlobalContextData } from '@unterberg/nivel'\",\n '',\n `const docsGlobalContextData: DocsGlobalContextData = ${serializeData(data)}`,\n '',\n 'export { docsGlobalContextData }',\n '',\n ].join('\\n')\n}\n\nconst getRouteString = (href: string) => {\n if (href === '/') {\n return href\n }\n\n return href.replace(/\\/+$/g, '')\n}\n\nconst getGeneratedRouteSource = (href: string) => {\n return [`export default ${JSON.stringify(getRouteString(href))}`, ''].join('\\n')\n}\n\nconst getGeneratedTextExport = (value: string) => {\n return [`export default ${JSON.stringify(value)}`, ''].join('\\n')\n}\n\nconst toDocPageLinkData = (\n page:\n | {\n id: string\n title: string\n href: string\n documentTitle: string\n }\n | undefined,\n): DocPageLinkData | null => {\n if (!page) {\n return null\n }\n\n return {\n id: page.id,\n title: page.title,\n href: page.href,\n documentTitle: page.documentTitle,\n }\n}\n\nexport const getGeneratedPagesRoot = (rootDir: string) => path.join(rootDir, 'pages', GENERATED_DIRNAME)\n\nexport const syncGeneratedDocsPages = (options: { rootDir: string; docsConfig: DocsConfig }) => {\n const { rootDir, docsConfig } = options\n const resolved = resolveDocsConfig(docsConfig)\n const generatedPagesRoot = getGeneratedPagesRoot(rootDir)\n const docsRoot = path.join(rootDir, 'docs')\n const expectedFiles = new Set<string>()\n const globalContextFilePath = path.join(generatedPagesRoot, '_docsGlobalContext.ts')\n\n fs.mkdirSync(generatedPagesRoot, { recursive: true })\n\n const globalContextData: DocsGlobalContextData = {\n siteTitle: resolved.siteTitle,\n basePath: resolved.basePath,\n theme: resolved.theme,\n footer: resolved.footer,\n brand: resolved.brand,\n head: resolved.head,\n partners: resolved.partners,\n algolia: resolved.algolia,\n pages: resolved.pages,\n navbarItems: resolved.navbarItems,\n sidebarSections: resolved.sections,\n }\n\n writeFileIfChanged(globalContextFilePath, getGeneratedGlobalContextSource(globalContextData))\n expectedFiles.add(globalContextFilePath)\n\n for (const [pageIndex, page] of resolved.pages.entries()) {\n const contentFilePath = path.join(docsRoot, page.source)\n\n if (!fs.existsSync(contentFilePath)) {\n throw new Error(`Docs page \"${page.id}\" points to missing source file: ${contentFilePath}`)\n }\n\n const pageSource = fs.readFileSync(contentFilePath, 'utf8')\n const data: DocPageData = {\n page: getResolvedPageById(resolved, page.id),\n headings: extractDocHeadings(pageSource),\n previousPage: toDocPageLinkData(resolved.pages[pageIndex - 1]),\n nextPage: toDocPageLinkData(resolved.pages[pageIndex + 1]),\n }\n\n for (const routeHref of [page.href, ...page.aliasHrefs]) {\n const routeSlug = routeHref.replace(/^\\/docs\\//, '').replace(/\\/+$/g, '')\n const pageDir = path.join(generatedPagesRoot, ...routeSlug.split('/'))\n const contentImportPath = getRelativeImportPath(pageDir, contentFilePath)\n\n const pageFilePath = path.join(pageDir, '+Page.tsx')\n const dataFilePath = path.join(pageDir, '+data.ts')\n const routeFilePath = path.join(pageDir, '+route.ts')\n const titleFilePath = path.join(pageDir, '+title.ts')\n\n writeFileIfChanged(pageFilePath, getGeneratedPageSource(contentImportPath))\n writeFileIfChanged(dataFilePath, getGeneratedDataSource(data))\n writeFileIfChanged(routeFilePath, getGeneratedRouteSource(routeHref))\n writeFileIfChanged(titleFilePath, getGeneratedTextExport(page.documentTitle))\n\n expectedFiles.add(pageFilePath)\n expectedFiles.add(dataFilePath)\n expectedFiles.add(routeFilePath)\n expectedFiles.add(titleFilePath)\n\n if (page.description) {\n const descriptionFilePath = path.join(pageDir, '+description.ts')\n writeFileIfChanged(descriptionFilePath, getGeneratedTextExport(page.description))\n expectedFiles.add(descriptionFilePath)\n }\n }\n }\n\n for (const filePath of collectFiles(generatedPagesRoot)) {\n if (expectedFiles.has(filePath)) {\n continue\n }\n\n fs.rmSync(filePath, { force: true })\n }\n\n removeEmptyDirectories(generatedPagesRoot, generatedPagesRoot)\n}\n\nexport const isDocsSourcePath = (filePath: string, rootDir: string) => {\n const normalized = toPosix(filePath)\n const docsRoot = toPosix(path.join(rootDir, 'docs'))\n const docsConfigPath = toPosix(path.join(rootDir, 'pages', '+docs.ts'))\n const generatedRoot = toPosix(getGeneratedPagesRoot(rootDir))\n\n if (normalized.startsWith(generatedRoot)) {\n return false\n }\n\n return normalized === docsConfigPath || normalized.startsWith(`${docsRoot}/`)\n}\n","import path from 'node:path'\nimport type { DocsConfig } from '../../docs/types.js'\n\nconst getDocsConfigModulePath = (rootDir: string) => {\n return path.join(rootDir, 'pages', '+docs.ts')\n}\n\nconst getDocsConfigFromLoadedModule = (loaded: unknown, modulePath: string) => {\n const docsConfig = (loaded as { default?: DocsConfig }).default\n\n if (!docsConfig) {\n throw new Error(`Expected default export from ${modulePath}`)\n }\n\n return docsConfig\n}\n\nexport const loadDocsConfig = async (options: {\n rootDir: string\n loadModule: (modulePath: string) => Promise<unknown>\n}) => {\n const modulePath = getDocsConfigModulePath(options.rootDir)\n const loaded = await options.loadModule(modulePath)\n return getDocsConfigFromLoadedModule(loaded, modulePath)\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\n\nconst MANAGED_SCRIPT_NAMES = ['generate:docs', 'predev', 'prebuild', 'pretypecheck'] as const\n\nconst REQUIRED_DEPENDENCIES = ['@unterberg/nivel', 'react', 'react-dom', 'vike', 'vike-react'] as const\nconst REQUIRED_DEV_DEPENDENCIES = ['vite', 'typescript', '@types/react', '@types/react-dom'] as const\n\ntype InitConsumerOptions = { force: boolean; rootDir: string }\n\ntype InitConsumerResult = {\n allDependenciesPresent: boolean\n createdFiles: string[]\n missingDependencies: string[]\n overwrittenFiles: string[]\n skippedFiles: string[]\n updatedScripts: string[]\n}\n\ntype PackageJsonShape = {\n dependencies?: Record<string, string>\n devDependencies?: Record<string, string>\n packageManager?: string\n scripts?: Record<string, string>\n}\n\nconst getDocsConfigTemplate = () => {\n return [\n \"import { defineDocsConfig } from '@unterberg/nivel/config'\",\n \"import { docsGraph } from '../docs/docs.graph'\",\n '',\n 'const docsConfig = defineDocsConfig({',\n ' graph: docsGraph,',\n \" siteTitle: 'My Docs',\",\n \" siteDescription: 'Documentation site powered by @unterberg/nivel.',\",\n \" basePath: '/docs',\",\n '})',\n '',\n 'export default docsConfig',\n '',\n ].join('\\n')\n}\n\nconst getDocsGraphTemplate = () => {\n return [\n \"import { defineDocsGraph } from '@unterberg/nivel/config'\",\n '',\n 'export const docsGraph = defineDocsGraph({',\n ' items: [',\n ' {',\n \" kind: 'section',\",\n \" id: 'docs',\",\n \" title: 'Docs',\",\n ' items: [',\n ' {',\n \" kind: 'page',\",\n \" id: 'gettingStarted',\",\n \" title: 'Getting Started',\",\n \" slug: 'getting-started',\",\n \" source: 'content/getting-started/content.mdx',\",\n \" description: 'Getting started with @unterberg/nivel.',\",\n ' },',\n ' ],',\n ' },',\n ' ],',\n '})',\n '',\n ].join('\\n')\n}\n\nconst getConfigTemplate = () => {\n return [\n \"import nivel from '@unterberg/nivel/vike'\",\n \"import type { Config } from 'vike/types'\",\n \"import vikeReact from 'vike-react/config'\",\n \"import docsConfig from './+docs'\",\n '',\n 'export { config }',\n '',\n \"const themePreference = docsConfig.theme?.defaultPreference ?? 'light'\",\n 'const dataTheme =',\n \" themePreference === 'dark'\",\n \" ? (docsConfig.theme?.dark ?? 'consumer-dark')\",\n \" : (docsConfig.theme?.light ?? 'consumer-light')\",\n '',\n 'const config: Config = {',\n ' ...nivel,',\n ' extends: [vikeReact],',\n ' title: docsConfig.siteTitle,',\n ' description: docsConfig.siteDescription ?? `${docsConfig.siteTitle} documentation`,',\n \" htmlAttributes: { 'data-theme': dataTheme },\",\n \" passToClient: ['docs'],\",\n '',\n ' // User-facing Vike levers stay visible in +config.ts.',\n ' prerender: true,',\n ' // ssr: true,',\n \" // prefetchStaticAssets: 'viewport',\",\n '}',\n '',\n ].join('\\n')\n}\n\nconst getHeadTemplate = () => {\n return [\n \"import { MetaHead } from '@unterberg/nivel/client'\",\n '',\n 'export const Head = () => {',\n ' return <MetaHead />',\n '}',\n '',\n ].join('\\n')\n}\n\nconst getLayoutTemplate = () => {\n return [\n \"import { AppLayout } from '@unterberg/nivel/client'\",\n \"import type { ReactNode } from 'react'\",\n '',\n 'const Layout = ({ children }: { children: ReactNode }) => {',\n ' return <AppLayout>{children}</AppLayout>',\n '}',\n '',\n 'export default Layout',\n '',\n ].join('\\n')\n}\n\nconst getGlobalContextTemplate = () => {\n return [\n \"import { docsGlobalContextData } from './(nivel-generated)/_docsGlobalContext'\",\n '',\n 'export const onCreateGlobalContext = (globalContext: { docs?: typeof docsGlobalContextData }) => {',\n ' globalContext.docs = docsGlobalContextData',\n '}',\n '',\n ].join('\\n')\n}\n\nconst getWrapperTemplate = () => {\n return [\n \"import type { ReactNode } from 'react'\",\n '',\n 'const Wrapper = ({ children }: { children: ReactNode }) => {',\n ' return <>{children}</>',\n '}',\n '',\n 'export default Wrapper',\n '',\n ].join('\\n')\n}\n\nconst getGlobalTypesTemplate = () => {\n return [\n \"declare module '*.mdx' {\",\n \" import type { ComponentType } from 'react'\",\n '',\n ' const MdxComponent: ComponentType',\n ' export default MdxComponent',\n '}',\n '',\n \"declare module '*.css'\",\n '',\n 'declare global {',\n ' namespace Vike {',\n ' interface GlobalContext {',\n \" docs: import('@unterberg/nivel').DocsGlobalContextData\",\n ' }',\n ' }',\n '}',\n '',\n ].join('\\n')\n}\n\nconst getManagedFileEntries = () => {\n return [\n ['pages/+docs.ts', getDocsConfigTemplate()],\n ['docs/docs.graph.ts', getDocsGraphTemplate()],\n ['pages/+config.ts', getConfigTemplate()],\n ['pages/+Head.tsx', getHeadTemplate()],\n ['pages/+Layout.tsx', getLayoutTemplate()],\n ['pages/+onCreateGlobalContext.ts', getGlobalContextTemplate()],\n ['pages/+Wrapper.tsx', getWrapperTemplate()],\n ['global.d.ts', getGlobalTypesTemplate()],\n ] as const\n}\n\nconst getGenerateDocsRunner = (packageJson: PackageJsonShape) => {\n const packageManager = packageJson.packageManager?.trim() ?? ''\n\n if (packageManager.startsWith('pnpm@')) {\n return 'pnpm generate:docs'\n }\n\n if (packageManager.startsWith('npm@')) {\n return 'npm run generate:docs'\n }\n\n return 'npm run generate:docs'\n}\n\nconst getManagedScripts = (packageJson: PackageJsonShape) => {\n const generateDocsRunner = getGenerateDocsRunner(packageJson)\n\n return {\n 'generate:docs': 'nivel prepare',\n predev: generateDocsRunner,\n prebuild: generateDocsRunner,\n pretypecheck: generateDocsRunner,\n } satisfies Record<(typeof MANAGED_SCRIPT_NAMES)[number], string>\n}\n\nconst writeFile = (filePath: string, source: string) => {\n fs.mkdirSync(path.dirname(filePath), { recursive: true })\n fs.writeFileSync(filePath, source)\n}\n\nconst writeManagedFile = (\n rootDir: string,\n relativeFilePath: string,\n source: string,\n force: boolean,\n result: InitConsumerResult,\n) => {\n const filePath = path.join(rootDir, relativeFilePath)\n const exists = fs.existsSync(filePath)\n\n if (exists && !force) {\n result.skippedFiles.push(relativeFilePath)\n return\n }\n\n writeFile(filePath, source)\n\n if (exists) {\n result.overwrittenFiles.push(relativeFilePath)\n return\n }\n\n result.createdFiles.push(relativeFilePath)\n}\n\nconst readPackageJson = (rootDir: string) => {\n const packageJsonPath = path.join(rootDir, 'package.json')\n\n if (!fs.existsSync(packageJsonPath)) {\n throw new Error(`Expected package.json in ${rootDir}`)\n }\n\n return {\n packageJson: JSON.parse(fs.readFileSync(packageJsonPath, 'utf8')) as PackageJsonShape,\n packageJsonPath,\n }\n}\n\nconst patchPackageScripts = (packageJson: PackageJsonShape, packageJsonPath: string, result: InitConsumerResult) => {\n const scripts = { ...(packageJson.scripts ?? {}) }\n const managedScripts = getManagedScripts(packageJson)\n\n for (const scriptName of MANAGED_SCRIPT_NAMES) {\n if (scripts[scriptName] === managedScripts[scriptName]) {\n continue\n }\n\n scripts[scriptName] = managedScripts[scriptName]\n result.updatedScripts.push(scriptName)\n }\n\n const nextPackageJson = {\n ...packageJson,\n scripts,\n }\n\n fs.writeFileSync(packageJsonPath, `${JSON.stringify(nextPackageJson, null, 2)}\\n`)\n}\n\nconst getMissingDependencies = (packageJson: PackageJsonShape) => {\n const installed = new Set<string>([\n ...Object.keys(packageJson.dependencies ?? {}),\n ...Object.keys(packageJson.devDependencies ?? {}),\n ])\n\n return [...REQUIRED_DEPENDENCIES, ...REQUIRED_DEV_DEPENDENCIES].filter((packageName) => !installed.has(packageName))\n}\n\nexport const getInitSummary = (result: InitConsumerResult) => {\n const lines = ['Initialized nivel consumer scaffolding.']\n\n if (result.createdFiles.length > 0) {\n lines.push(`Created files: ${result.createdFiles.join(', ')}`)\n }\n\n if (result.overwrittenFiles.length > 0) {\n lines.push(`Overwritten files: ${result.overwrittenFiles.join(', ')}`)\n }\n\n if (result.skippedFiles.length > 0) {\n lines.push(`Skipped existing files: ${result.skippedFiles.join(', ')}`)\n }\n\n if (result.updatedScripts.length > 0) {\n lines.push(`Updated package.json scripts: ${result.updatedScripts.join(', ')}`)\n }\n\n if (result.missingDependencies.length > 0) {\n lines.push(`Missing dependencies: ${result.missingDependencies.join(', ')}`)\n lines.push(\n 'Consumer CSS stays hand-authored. Add your stylesheet import manually, for example in pages/+Wrapper.tsx.',\n )\n } else if (!result.allDependenciesPresent) {\n lines.push('Dependency validation completed with warnings.')\n } else {\n lines.push('All required dependencies are already present.')\n }\n\n return `${lines.join('\\n')}\\n`\n}\n\nexport const initConsumer = (options: InitConsumerOptions): InitConsumerResult => {\n const result: InitConsumerResult = {\n allDependenciesPresent: true,\n createdFiles: [],\n missingDependencies: [],\n overwrittenFiles: [],\n skippedFiles: [],\n updatedScripts: [],\n }\n\n const { packageJson, packageJsonPath } = readPackageJson(options.rootDir)\n\n for (const [relativeFilePath, source] of getManagedFileEntries()) {\n writeManagedFile(options.rootDir, relativeFilePath, source, options.force, result)\n }\n\n patchPackageScripts(packageJson, packageJsonPath, result)\n\n result.missingDependencies = getMissingDependencies(packageJson)\n result.allDependenciesPresent = result.missingDependencies.length === 0\n\n return result\n}\n"],"mappings":";;;;;;;AAAA,OAAO,QAAQ;AACf,OAAO,UAAU;AAKjB,IAAM,oBAAoB;AAE1B,IAAM,qBAAqB,CAAC,UAAkB,WAAmB;AAC/D,QAAM,UAAU,GAAG,WAAW,QAAQ,IAAI,GAAG,aAAa,UAAU,MAAM,IAAI;AAC9E,MAAI,YAAY,QAAQ;AACtB;AAAA,EACF;AAEA,KAAG,UAAU,KAAK,QAAQ,QAAQ,GAAG,EAAE,WAAW,KAAK,CAAC;AACxD,KAAG,cAAc,UAAU,MAAM;AACnC;AAEA,IAAM,UAAU,CAAC,UAAkB,MAAM,MAAM,KAAK,GAAG,EAAE,KAAK,KAAK,MAAM,GAAG;AAE5E,IAAM,wBAAwB,CAAC,eAAuB,WAAmB;AACvE,QAAM,eAAe,QAAQ,KAAK,SAAS,eAAe,MAAM,CAAC;AACjE,MAAI,aAAa,WAAW,GAAG,GAAG;AAChC,WAAO;AAAA,EACT;AACA,SAAO,KAAK,YAAY;AAC1B;AAEA,IAAM,gBAAgB,CAAC,SAA8C,KAAK,UAAU,MAAM,MAAM,CAAC;AAEjG,IAAM,eAAe,CAAC,kBAAoC;AACxD,MAAI,CAAC,GAAG,WAAW,aAAa,GAAG;AACjC,WAAO,CAAC;AAAA,EACV;AAEA,QAAM,UAAU,GAAG,YAAY,eAAe,EAAE,eAAe,KAAK,CAAC;AAErE,SAAO,QAAQ,QAAQ,CAAC,UAAU;AAChC,UAAM,YAAY,KAAK,KAAK,eAAe,MAAM,IAAI;AACrD,WAAO,MAAM,YAAY,IAAI,aAAa,SAAS,IAAI,CAAC,SAAS;AAAA,EACnE,CAAC;AACH;AAEA,IAAM,yBAAyB,CAAC,eAAuB,aAAqB;AAC1E,MAAI,CAAC,GAAG,WAAW,aAAa,GAAG;AACjC;AAAA,EACF;AAEA,aAAW,SAAS,GAAG,YAAY,eAAe,EAAE,eAAe,KAAK,CAAC,GAAG;AAC1E,QAAI,CAAC,MAAM,YAAY,GAAG;AACxB;AAAA,IACF;AAEA,2BAAuB,KAAK,KAAK,eAAe,MAAM,IAAI,GAAG,QAAQ;AAAA,EACvE;AAEA,MAAI,kBAAkB,UAAU;AAC9B;AAAA,EACF;AAEA,MAAI,GAAG,YAAY,aAAa,EAAE,WAAW,GAAG;AAC9C,OAAG,UAAU,aAAa;AAAA,EAC5B;AACF;AAEA,IAAM,yBAAyB,CAAC,sBAA8B;AAC5D,SAAO;AAAA,IACL;AAAA,IACA,uBAAuB,KAAK,UAAU,iBAAiB,CAAC;AAAA,IACxD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK,IAAI;AACb;AAEA,IAAM,yBAAyB,CAAC,SAAsB;AACpD,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,6BAA6B,cAAc,IAAI,CAAC;AAAA,IAChD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK,IAAI;AACb;AAEA,IAAM,kCAAkC,CAAC,SAAgC;AACvE,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,wDAAwD,cAAc,IAAI,CAAC;AAAA,IAC3E;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK,IAAI;AACb;AAEA,IAAM,iBAAiB,CAAC,SAAiB;AACvC,MAAI,SAAS,KAAK;AAChB,WAAO;AAAA,EACT;AAEA,SAAO,KAAK,QAAQ,SAAS,EAAE;AACjC;AAEA,IAAM,0BAA0B,CAAC,SAAiB;AAChD,SAAO,CAAC,kBAAkB,KAAK,UAAU,eAAe,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,IAAI;AACjF;AAEA,IAAM,yBAAyB,CAAC,UAAkB;AAChD,SAAO,CAAC,kBAAkB,KAAK,UAAU,KAAK,CAAC,IAAI,EAAE,EAAE,KAAK,IAAI;AAClE;AAEA,IAAM,oBAAoB,CACxB,SAQ2B;AAC3B,MAAI,CAAC,MAAM;AACT,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL,IAAI,KAAK;AAAA,IACT,OAAO,KAAK;AAAA,IACZ,MAAM,KAAK;AAAA,IACX,eAAe,KAAK;AAAA,EACtB;AACF;AAEO,IAAM,wBAAwB,CAAC,YAAoB,KAAK,KAAK,SAAS,SAAS,iBAAiB;AAEhG,IAAM,yBAAyB,CAAC,YAAyD;AAC9F,QAAM,EAAE,SAAS,WAAW,IAAI;AAChC,QAAM,WAAW,kBAAkB,UAAU;AAC7C,QAAM,qBAAqB,sBAAsB,OAAO;AACxD,QAAM,WAAW,KAAK,KAAK,SAAS,MAAM;AAC1C,QAAM,gBAAgB,oBAAI,IAAY;AACtC,QAAM,wBAAwB,KAAK,KAAK,oBAAoB,uBAAuB;AAEnF,KAAG,UAAU,oBAAoB,EAAE,WAAW,KAAK,CAAC;AAEpD,QAAM,oBAA2C;AAAA,IAC/C,WAAW,SAAS;AAAA,IACpB,UAAU,SAAS;AAAA,IACnB,OAAO,SAAS;AAAA,IAChB,QAAQ,SAAS;AAAA,IACjB,OAAO,SAAS;AAAA,IAChB,MAAM,SAAS;AAAA,IACf,UAAU,SAAS;AAAA,IACnB,SAAS,SAAS;AAAA,IAClB,OAAO,SAAS;AAAA,IAChB,aAAa,SAAS;AAAA,IACtB,iBAAiB,SAAS;AAAA,EAC5B;AAEA,qBAAmB,uBAAuB,gCAAgC,iBAAiB,CAAC;AAC5F,gBAAc,IAAI,qBAAqB;AAEvC,aAAW,CAAC,WAAW,IAAI,KAAK,SAAS,MAAM,QAAQ,GAAG;AACxD,UAAM,kBAAkB,KAAK,KAAK,UAAU,KAAK,MAAM;AAEvD,QAAI,CAAC,GAAG,WAAW,eAAe,GAAG;AACnC,YAAM,IAAI,MAAM,cAAc,KAAK,EAAE,oCAAoC,eAAe,EAAE;AAAA,IAC5F;AAEA,UAAM,aAAa,GAAG,aAAa,iBAAiB,MAAM;AAC1D,UAAM,OAAoB;AAAA,MACxB,MAAM,oBAAoB,UAAU,KAAK,EAAE;AAAA,MAC3C,UAAU,mBAAmB,UAAU;AAAA,MACvC,cAAc,kBAAkB,SAAS,MAAM,YAAY,CAAC,CAAC;AAAA,MAC7D,UAAU,kBAAkB,SAAS,MAAM,YAAY,CAAC,CAAC;AAAA,IAC3D;AAEA,eAAW,aAAa,CAAC,KAAK,MAAM,GAAG,KAAK,UAAU,GAAG;AACvD,YAAM,YAAY,UAAU,QAAQ,aAAa,EAAE,EAAE,QAAQ,SAAS,EAAE;AACxE,YAAM,UAAU,KAAK,KAAK,oBAAoB,GAAG,UAAU,MAAM,GAAG,CAAC;AACrE,YAAM,oBAAoB,sBAAsB,SAAS,eAAe;AAExE,YAAM,eAAe,KAAK,KAAK,SAAS,WAAW;AACnD,YAAM,eAAe,KAAK,KAAK,SAAS,UAAU;AAClD,YAAM,gBAAgB,KAAK,KAAK,SAAS,WAAW;AACpD,YAAM,gBAAgB,KAAK,KAAK,SAAS,WAAW;AAEpD,yBAAmB,cAAc,uBAAuB,iBAAiB,CAAC;AAC1E,yBAAmB,cAAc,uBAAuB,IAAI,CAAC;AAC7D,yBAAmB,eAAe,wBAAwB,SAAS,CAAC;AACpE,yBAAmB,eAAe,uBAAuB,KAAK,aAAa,CAAC;AAE5E,oBAAc,IAAI,YAAY;AAC9B,oBAAc,IAAI,YAAY;AAC9B,oBAAc,IAAI,aAAa;AAC/B,oBAAc,IAAI,aAAa;AAE/B,UAAI,KAAK,aAAa;AACpB,cAAM,sBAAsB,KAAK,KAAK,SAAS,iBAAiB;AAChE,2BAAmB,qBAAqB,uBAAuB,KAAK,WAAW,CAAC;AAChF,sBAAc,IAAI,mBAAmB;AAAA,MACvC;AAAA,IACF;AAAA,EACF;AAEA,aAAW,YAAY,aAAa,kBAAkB,GAAG;AACvD,QAAI,cAAc,IAAI,QAAQ,GAAG;AAC/B;AAAA,IACF;AAEA,OAAG,OAAO,UAAU,EAAE,OAAO,KAAK,CAAC;AAAA,EACrC;AAEA,yBAAuB,oBAAoB,kBAAkB;AAC/D;AAEO,IAAM,mBAAmB,CAAC,UAAkB,YAAoB;AACrE,QAAM,aAAa,QAAQ,QAAQ;AACnC,QAAM,WAAW,QAAQ,KAAK,KAAK,SAAS,MAAM,CAAC;AACnD,QAAM,iBAAiB,QAAQ,KAAK,KAAK,SAAS,SAAS,UAAU,CAAC;AACtE,QAAM,gBAAgB,QAAQ,sBAAsB,OAAO,CAAC;AAE5D,MAAI,WAAW,WAAW,aAAa,GAAG;AACxC,WAAO;AAAA,EACT;AAEA,SAAO,eAAe,kBAAkB,WAAW,WAAW,GAAG,QAAQ,GAAG;AAC9E;;;AC7OA,OAAOA,WAAU;AAGjB,IAAM,0BAA0B,CAAC,YAAoB;AACnD,SAAOA,MAAK,KAAK,SAAS,SAAS,UAAU;AAC/C;AAEA,IAAM,gCAAgC,CAAC,QAAiB,eAAuB;AAC7E,QAAM,aAAc,OAAoC;AAExD,MAAI,CAAC,YAAY;AACf,UAAM,IAAI,MAAM,gCAAgC,UAAU,EAAE;AAAA,EAC9D;AAEA,SAAO;AACT;AAEO,IAAM,iBAAiB,OAAO,YAG/B;AACJ,QAAM,aAAa,wBAAwB,QAAQ,OAAO;AAC1D,QAAM,SAAS,MAAM,QAAQ,WAAW,UAAU;AAClD,SAAO,8BAA8B,QAAQ,UAAU;AACzD;;;ACxBA,OAAOC,SAAQ;AACf,OAAOC,WAAU;AAEjB,IAAM,uBAAuB,CAAC,iBAAiB,UAAU,YAAY,cAAc;AAEnF,IAAM,wBAAwB,CAAC,oBAAoB,SAAS,aAAa,QAAQ,YAAY;AAC7F,IAAM,4BAA4B,CAAC,QAAQ,cAAc,gBAAgB,kBAAkB;AAoB3F,IAAM,wBAAwB,MAAM;AAClC,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK,IAAI;AACb;AAEA,IAAM,uBAAuB,MAAM;AACjC,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK,IAAI;AACb;AAEA,IAAM,oBAAoB,MAAM;AAC9B,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK,IAAI;AACb;AAEA,IAAM,kBAAkB,MAAM;AAC5B,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK,IAAI;AACb;AAEA,IAAM,oBAAoB,MAAM;AAC9B,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK,IAAI;AACb;AAEA,IAAM,2BAA2B,MAAM;AACrC,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK,IAAI;AACb;AAEA,IAAM,qBAAqB,MAAM;AAC/B,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK,IAAI;AACb;AAEA,IAAM,yBAAyB,MAAM;AACnC,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK,IAAI;AACb;AAEA,IAAM,wBAAwB,MAAM;AAClC,SAAO;AAAA,IACL,CAAC,kBAAkB,sBAAsB,CAAC;AAAA,IAC1C,CAAC,sBAAsB,qBAAqB,CAAC;AAAA,IAC7C,CAAC,oBAAoB,kBAAkB,CAAC;AAAA,IACxC,CAAC,mBAAmB,gBAAgB,CAAC;AAAA,IACrC,CAAC,qBAAqB,kBAAkB,CAAC;AAAA,IACzC,CAAC,mCAAmC,yBAAyB,CAAC;AAAA,IAC9D,CAAC,sBAAsB,mBAAmB,CAAC;AAAA,IAC3C,CAAC,eAAe,uBAAuB,CAAC;AAAA,EAC1C;AACF;AAEA,IAAM,wBAAwB,CAAC,gBAAkC;AAC/D,QAAM,iBAAiB,YAAY,gBAAgB,KAAK,KAAK;AAE7D,MAAI,eAAe,WAAW,OAAO,GAAG;AACtC,WAAO;AAAA,EACT;AAEA,MAAI,eAAe,WAAW,MAAM,GAAG;AACrC,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAEA,IAAM,oBAAoB,CAAC,gBAAkC;AAC3D,QAAM,qBAAqB,sBAAsB,WAAW;AAE5D,SAAO;AAAA,IACL,iBAAiB;AAAA,IACjB,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,cAAc;AAAA,EAChB;AACF;AAEA,IAAM,YAAY,CAAC,UAAkB,WAAmB;AACtD,EAAAD,IAAG,UAAUC,MAAK,QAAQ,QAAQ,GAAG,EAAE,WAAW,KAAK,CAAC;AACxD,EAAAD,IAAG,cAAc,UAAU,MAAM;AACnC;AAEA,IAAM,mBAAmB,CACvB,SACA,kBACA,QACA,OACA,WACG;AACH,QAAM,WAAWC,MAAK,KAAK,SAAS,gBAAgB;AACpD,QAAM,SAASD,IAAG,WAAW,QAAQ;AAErC,MAAI,UAAU,CAAC,OAAO;AACpB,WAAO,aAAa,KAAK,gBAAgB;AACzC;AAAA,EACF;AAEA,YAAU,UAAU,MAAM;AAE1B,MAAI,QAAQ;AACV,WAAO,iBAAiB,KAAK,gBAAgB;AAC7C;AAAA,EACF;AAEA,SAAO,aAAa,KAAK,gBAAgB;AAC3C;AAEA,IAAM,kBAAkB,CAAC,YAAoB;AAC3C,QAAM,kBAAkBC,MAAK,KAAK,SAAS,cAAc;AAEzD,MAAI,CAACD,IAAG,WAAW,eAAe,GAAG;AACnC,UAAM,IAAI,MAAM,4BAA4B,OAAO,EAAE;AAAA,EACvD;AAEA,SAAO;AAAA,IACL,aAAa,KAAK,MAAMA,IAAG,aAAa,iBAAiB,MAAM,CAAC;AAAA,IAChE;AAAA,EACF;AACF;AAEA,IAAM,sBAAsB,CAAC,aAA+B,iBAAyB,WAA+B;AAClH,QAAM,UAAU,EAAE,GAAI,YAAY,WAAW,CAAC,EAAG;AACjD,QAAM,iBAAiB,kBAAkB,WAAW;AAEpD,aAAW,cAAc,sBAAsB;AAC7C,QAAI,QAAQ,UAAU,MAAM,eAAe,UAAU,GAAG;AACtD;AAAA,IACF;AAEA,YAAQ,UAAU,IAAI,eAAe,UAAU;AAC/C,WAAO,eAAe,KAAK,UAAU;AAAA,EACvC;AAEA,QAAM,kBAAkB;AAAA,IACtB,GAAG;AAAA,IACH;AAAA,EACF;AAEA,EAAAA,IAAG,cAAc,iBAAiB,GAAG,KAAK,UAAU,iBAAiB,MAAM,CAAC,CAAC;AAAA,CAAI;AACnF;AAEA,IAAM,yBAAyB,CAAC,gBAAkC;AAChE,QAAM,YAAY,oBAAI,IAAY;AAAA,IAChC,GAAG,OAAO,KAAK,YAAY,gBAAgB,CAAC,CAAC;AAAA,IAC7C,GAAG,OAAO,KAAK,YAAY,mBAAmB,CAAC,CAAC;AAAA,EAClD,CAAC;AAED,SAAO,CAAC,GAAG,uBAAuB,GAAG,yBAAyB,EAAE,OAAO,CAAC,gBAAgB,CAAC,UAAU,IAAI,WAAW,CAAC;AACrH;AAEO,IAAM,iBAAiB,CAAC,WAA+B;AAC5D,QAAM,QAAQ,CAAC,yCAAyC;AAExD,MAAI,OAAO,aAAa,SAAS,GAAG;AAClC,UAAM,KAAK,kBAAkB,OAAO,aAAa,KAAK,IAAI,CAAC,EAAE;AAAA,EAC/D;AAEA,MAAI,OAAO,iBAAiB,SAAS,GAAG;AACtC,UAAM,KAAK,sBAAsB,OAAO,iBAAiB,KAAK,IAAI,CAAC,EAAE;AAAA,EACvE;AAEA,MAAI,OAAO,aAAa,SAAS,GAAG;AAClC,UAAM,KAAK,2BAA2B,OAAO,aAAa,KAAK,IAAI,CAAC,EAAE;AAAA,EACxE;AAEA,MAAI,OAAO,eAAe,SAAS,GAAG;AACpC,UAAM,KAAK,iCAAiC,OAAO,eAAe,KAAK,IAAI,CAAC,EAAE;AAAA,EAChF;AAEA,MAAI,OAAO,oBAAoB,SAAS,GAAG;AACzC,UAAM,KAAK,yBAAyB,OAAO,oBAAoB,KAAK,IAAI,CAAC,EAAE;AAC3E,UAAM;AAAA,MACJ;AAAA,IACF;AAAA,EACF,WAAW,CAAC,OAAO,wBAAwB;AACzC,UAAM,KAAK,gDAAgD;AAAA,EAC7D,OAAO;AACL,UAAM,KAAK,gDAAgD;AAAA,EAC7D;AAEA,SAAO,GAAG,MAAM,KAAK,IAAI,CAAC;AAAA;AAC5B;AAEO,IAAM,eAAe,CAAC,YAAqD;AAChF,QAAM,SAA6B;AAAA,IACjC,wBAAwB;AAAA,IACxB,cAAc,CAAC;AAAA,IACf,qBAAqB,CAAC;AAAA,IACtB,kBAAkB,CAAC;AAAA,IACnB,cAAc,CAAC;AAAA,IACf,gBAAgB,CAAC;AAAA,EACnB;AAEA,QAAM,EAAE,aAAa,gBAAgB,IAAI,gBAAgB,QAAQ,OAAO;AAExE,aAAW,CAAC,kBAAkB,MAAM,KAAK,sBAAsB,GAAG;AAChE,qBAAiB,QAAQ,SAAS,kBAAkB,QAAQ,QAAQ,OAAO,MAAM;AAAA,EACnF;AAEA,sBAAoB,aAAa,iBAAiB,MAAM;AAExD,SAAO,sBAAsB,uBAAuB,WAAW;AAC/D,SAAO,yBAAyB,OAAO,oBAAoB,WAAW;AAEtE,SAAO;AACT;","names":["path","fs","path"]}
|
package/dist/cli.js
CHANGED
package/dist/index.d.ts
CHANGED
|
@@ -1,15 +1,7 @@
|
|
|
1
|
-
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
-
import { ReactNode, ComponentPropsWithoutRef, PropsWithChildren } from 'react';
|
|
3
1
|
export { defineDocsConfig, defineDocsGraph } from './config.js';
|
|
4
2
|
export { D as DocHeading, a as DocPageData, b as DocPageLinkData, c as DocsAlgoliaConfig, d as DocsAlgoliaFieldsConfig, e as DocsBrandConfig, f as DocsCollapsible, g as DocsConfig, h as DocsFooterConfig, i as DocsGlobalContextData, j as DocsGraph, k as DocsGroupNode, l as DocsHeadConfig, m as DocsPageNode, n as DocsPartnerConfig, o as DocsPartnersConfig, p as DocsSectionNode, q as DocsSidebarNode, r as DocsThemeConfig, J as JsonPrimitive, s as JsonValue, R as ResolvedDocsAlgoliaConfig, t as ResolvedDocsAlgoliaFieldsConfig, u as ResolvedDocsBrandConfig, v as ResolvedDocsConfig, w as ResolvedDocsPartnerConfig, x as ResolvedDocsPartnersConfig, y as ResolvedDocsSection, T as ThemePreference } from './types-j0kEkMA4.js';
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
declare const Alert: ({ type, heading, children, icon, }: {
|
|
8
|
-
type?: AlertVariant;
|
|
9
|
-
heading?: ReactNode;
|
|
10
|
-
children: ReactNode;
|
|
11
|
-
icon?: boolean | ReactNode;
|
|
12
|
-
}) => react_jsx_runtime.JSX.Element;
|
|
3
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
4
|
+
import { ReactNode, ComponentPropsWithoutRef, PropsWithChildren } from 'react';
|
|
13
5
|
|
|
14
6
|
type ChoiceGroupDescriptor = {
|
|
15
7
|
default: string;
|
|
@@ -48,6 +40,14 @@ type PreProps = ComponentPropsWithoutRef<'pre'> & {
|
|
|
48
40
|
};
|
|
49
41
|
declare const Pre: ({ children, className, ...props }: PreProps) => react_jsx_runtime.JSX.Element;
|
|
50
42
|
|
|
43
|
+
type AlertVariant = 'info' | 'warning' | 'error' | 'success';
|
|
44
|
+
declare const Alert: ({ type, heading, children, icon, }: {
|
|
45
|
+
type?: AlertVariant;
|
|
46
|
+
heading?: ReactNode;
|
|
47
|
+
children: ReactNode;
|
|
48
|
+
icon?: boolean | ReactNode;
|
|
49
|
+
}) => react_jsx_runtime.JSX.Element;
|
|
50
|
+
|
|
51
51
|
type LinkProps = ComponentPropsWithoutRef<'a'> & {
|
|
52
52
|
href?: string;
|
|
53
53
|
text?: string | ReactNode;
|
package/dist/index.js
CHANGED
package/dist/mdx.js
CHANGED
package/dist/runtime/node.d.ts
CHANGED
|
@@ -1,20 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { z as ResolvedDocsPage, g as DocsConfig, v as ResolvedDocsConfig } from '../types-j0kEkMA4.js';
|
|
2
2
|
import { Plugin } from 'vite';
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
};
|
|
8
|
-
type InitConsumerResult = {
|
|
9
|
-
allDependenciesPresent: boolean;
|
|
10
|
-
createdFiles: string[];
|
|
11
|
-
missingDependencies: string[];
|
|
12
|
-
overwrittenFiles: string[];
|
|
13
|
-
skippedFiles: string[];
|
|
14
|
-
updatedScripts: string[];
|
|
15
|
-
};
|
|
16
|
-
declare const getInitSummary: (result: InitConsumerResult) => string;
|
|
17
|
-
declare const initConsumer: (options: InitConsumerOptions) => InitConsumerResult;
|
|
4
|
+
declare const resolveDocsConfig: (config: DocsConfig) => ResolvedDocsConfig;
|
|
5
|
+
declare const getResolvedPageById: (config: {
|
|
6
|
+
pages: ResolvedDocsPage[];
|
|
7
|
+
}, pageId: string) => ResolvedDocsPage;
|
|
18
8
|
|
|
19
9
|
declare const getGeneratedPagesRoot: (rootDir: string) => string;
|
|
20
10
|
declare const syncGeneratedDocsPages: (options: {
|
|
@@ -29,9 +19,19 @@ declare const loadDocsConfig: (options: {
|
|
|
29
19
|
|
|
30
20
|
declare const nivelPagesPlugin: () => Plugin;
|
|
31
21
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
}
|
|
22
|
+
type InitConsumerOptions = {
|
|
23
|
+
force: boolean;
|
|
24
|
+
rootDir: string;
|
|
25
|
+
};
|
|
26
|
+
type InitConsumerResult = {
|
|
27
|
+
allDependenciesPresent: boolean;
|
|
28
|
+
createdFiles: string[];
|
|
29
|
+
missingDependencies: string[];
|
|
30
|
+
overwrittenFiles: string[];
|
|
31
|
+
skippedFiles: string[];
|
|
32
|
+
updatedScripts: string[];
|
|
33
|
+
};
|
|
34
|
+
declare const getInitSummary: (result: InitConsumerResult) => string;
|
|
35
|
+
declare const initConsumer: (options: InitConsumerOptions) => InitConsumerResult;
|
|
36
36
|
|
|
37
37
|
export { getGeneratedPagesRoot, getInitSummary, getResolvedPageById, initConsumer, loadDocsConfig, nivelPagesPlugin, resolveDocsConfig, syncGeneratedDocsPages };
|
package/dist/runtime/node.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
nivelPagesPlugin
|
|
3
|
-
} from "../chunk-
|
|
3
|
+
} from "../chunk-D35PFSSY.js";
|
|
4
4
|
import {
|
|
5
5
|
getGeneratedPagesRoot,
|
|
6
6
|
getInitSummary,
|
|
7
7
|
initConsumer,
|
|
8
8
|
loadDocsConfig,
|
|
9
9
|
syncGeneratedDocsPages
|
|
10
|
-
} from "../chunk-
|
|
10
|
+
} from "../chunk-UMMK73OW.js";
|
|
11
11
|
import {
|
|
12
12
|
getResolvedPageById,
|
|
13
13
|
resolveDocsConfig
|
package/dist/vike.js
CHANGED
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/runtime/node/codegen.ts","../src/runtime/node/loadDocsConfig.ts","../src/runtime/node/scaffold.ts"],"sourcesContent":["import fs from 'node:fs'\nimport path from 'node:path'\nimport type { DocPageData, DocPageLinkData, DocsConfig, DocsGlobalContextData } from '../../docs/types.js'\nimport { extractDocHeadings } from '../../docs/docHeadings.js'\nimport { getResolvedPageById, resolveDocsConfig } from '../../docs/resolveDocsConfig.js'\n\nconst GENERATED_DIRNAME = '(nivel-generated)'\n\nconst writeFileIfChanged = (filePath: string, source: string) => {\n const current = fs.existsSync(filePath) ? fs.readFileSync(filePath, 'utf8') : null\n if (current === source) {\n return\n }\n\n fs.mkdirSync(path.dirname(filePath), { recursive: true })\n fs.writeFileSync(filePath, source)\n}\n\nconst toPosix = (value: string) => value.split(path.sep).join(path.posix.sep)\n\nconst getRelativeImportPath = (fromDirectory: string, toFile: string) => {\n const relativePath = toPosix(path.relative(fromDirectory, toFile))\n if (relativePath.startsWith('.')) {\n return relativePath\n }\n return `./${relativePath}`\n}\n\nconst serializeData = (data: DocPageData | DocsGlobalContextData) => JSON.stringify(data, null, 2)\n\nconst collectFiles = (directoryPath: string): string[] => {\n if (!fs.existsSync(directoryPath)) {\n return []\n }\n\n const entries = fs.readdirSync(directoryPath, { withFileTypes: true })\n\n return entries.flatMap((entry) => {\n const entryPath = path.join(directoryPath, entry.name)\n return entry.isDirectory() ? collectFiles(entryPath) : [entryPath]\n })\n}\n\nconst removeEmptyDirectories = (directoryPath: string, rootPath: string) => {\n if (!fs.existsSync(directoryPath)) {\n return\n }\n\n for (const entry of fs.readdirSync(directoryPath, { withFileTypes: true })) {\n if (!entry.isDirectory()) {\n continue\n }\n\n removeEmptyDirectories(path.join(directoryPath, entry.name), rootPath)\n }\n\n if (directoryPath === rootPath) {\n return\n }\n\n if (fs.readdirSync(directoryPath).length === 0) {\n fs.rmdirSync(directoryPath)\n }\n}\n\nconst getGeneratedPageSource = (contentImportPath: string) => {\n return [\n \"import { DocsPage } from '@unterberg/nivel/client'\",\n `import Content from ${JSON.stringify(contentImportPath)}`,\n '',\n 'const Page = () => {',\n ' return <DocsPage Content={Content} />',\n '}',\n '',\n 'export default Page',\n '',\n ].join('\\n')\n}\n\nconst getGeneratedDataSource = (data: DocPageData) => {\n return [\n \"import type { DocPageData } from '@unterberg/nivel'\",\n '',\n `const data: DocPageData = ${serializeData(data)}`,\n '',\n 'const pageData = () => {',\n ' return data',\n '}',\n '',\n 'export default pageData',\n '',\n ].join('\\n')\n}\n\nconst getGeneratedGlobalContextSource = (data: DocsGlobalContextData) => {\n return [\n \"import type { DocsGlobalContextData } from '@unterberg/nivel'\",\n '',\n `const docsGlobalContextData: DocsGlobalContextData = ${serializeData(data)}`,\n '',\n 'export { docsGlobalContextData }',\n '',\n ].join('\\n')\n}\n\nconst getRouteString = (href: string) => {\n if (href === '/') {\n return href\n }\n\n return href.replace(/\\/+$/g, '')\n}\n\nconst getGeneratedRouteSource = (href: string) => {\n return [`export default ${JSON.stringify(getRouteString(href))}`, ''].join('\\n')\n}\n\nconst getGeneratedTextExport = (value: string) => {\n return [`export default ${JSON.stringify(value)}`, ''].join('\\n')\n}\n\nconst toDocPageLinkData = (\n page:\n | {\n id: string\n title: string\n href: string\n documentTitle: string\n }\n | undefined,\n): DocPageLinkData | null => {\n if (!page) {\n return null\n }\n\n return {\n id: page.id,\n title: page.title,\n href: page.href,\n documentTitle: page.documentTitle,\n }\n}\n\nexport const getGeneratedPagesRoot = (rootDir: string) => path.join(rootDir, 'pages', GENERATED_DIRNAME)\n\nexport const syncGeneratedDocsPages = (options: { rootDir: string; docsConfig: DocsConfig }) => {\n const { rootDir, docsConfig } = options\n const resolved = resolveDocsConfig(docsConfig)\n const generatedPagesRoot = getGeneratedPagesRoot(rootDir)\n const docsRoot = path.join(rootDir, 'docs')\n const expectedFiles = new Set<string>()\n const globalContextFilePath = path.join(generatedPagesRoot, '_docsGlobalContext.ts')\n\n fs.mkdirSync(generatedPagesRoot, { recursive: true })\n\n const globalContextData: DocsGlobalContextData = {\n siteTitle: resolved.siteTitle,\n basePath: resolved.basePath,\n theme: resolved.theme,\n footer: resolved.footer,\n brand: resolved.brand,\n head: resolved.head,\n partners: resolved.partners,\n algolia: resolved.algolia,\n pages: resolved.pages,\n navbarItems: resolved.navbarItems,\n sidebarSections: resolved.sections,\n }\n\n writeFileIfChanged(globalContextFilePath, getGeneratedGlobalContextSource(globalContextData))\n expectedFiles.add(globalContextFilePath)\n\n for (const [pageIndex, page] of resolved.pages.entries()) {\n const contentFilePath = path.join(docsRoot, page.source)\n\n if (!fs.existsSync(contentFilePath)) {\n throw new Error(`Docs page \"${page.id}\" points to missing source file: ${contentFilePath}`)\n }\n\n const pageSource = fs.readFileSync(contentFilePath, 'utf8')\n const data: DocPageData = {\n page: getResolvedPageById(resolved, page.id),\n headings: extractDocHeadings(pageSource),\n previousPage: toDocPageLinkData(resolved.pages[pageIndex - 1]),\n nextPage: toDocPageLinkData(resolved.pages[pageIndex + 1]),\n }\n\n for (const routeHref of [page.href, ...page.aliasHrefs]) {\n const routeSlug = routeHref.replace(/^\\/docs\\//, '').replace(/\\/+$/g, '')\n const pageDir = path.join(generatedPagesRoot, ...routeSlug.split('/'))\n const contentImportPath = getRelativeImportPath(pageDir, contentFilePath)\n\n const pageFilePath = path.join(pageDir, '+Page.tsx')\n const dataFilePath = path.join(pageDir, '+data.ts')\n const routeFilePath = path.join(pageDir, '+route.ts')\n const titleFilePath = path.join(pageDir, '+title.ts')\n\n writeFileIfChanged(pageFilePath, getGeneratedPageSource(contentImportPath))\n writeFileIfChanged(dataFilePath, getGeneratedDataSource(data))\n writeFileIfChanged(routeFilePath, getGeneratedRouteSource(routeHref))\n writeFileIfChanged(titleFilePath, getGeneratedTextExport(page.documentTitle))\n\n expectedFiles.add(pageFilePath)\n expectedFiles.add(dataFilePath)\n expectedFiles.add(routeFilePath)\n expectedFiles.add(titleFilePath)\n\n if (page.description) {\n const descriptionFilePath = path.join(pageDir, '+description.ts')\n writeFileIfChanged(descriptionFilePath, getGeneratedTextExport(page.description))\n expectedFiles.add(descriptionFilePath)\n }\n }\n }\n\n for (const filePath of collectFiles(generatedPagesRoot)) {\n if (expectedFiles.has(filePath)) {\n continue\n }\n\n fs.rmSync(filePath, { force: true })\n }\n\n removeEmptyDirectories(generatedPagesRoot, generatedPagesRoot)\n}\n\nexport const isDocsSourcePath = (filePath: string, rootDir: string) => {\n const normalized = toPosix(filePath)\n const docsRoot = toPosix(path.join(rootDir, 'docs'))\n const docsConfigPath = toPosix(path.join(rootDir, 'pages', '+docs.ts'))\n const generatedRoot = toPosix(getGeneratedPagesRoot(rootDir))\n\n if (normalized.startsWith(generatedRoot)) {\n return false\n }\n\n return normalized === docsConfigPath || normalized.startsWith(`${docsRoot}/`)\n}\n","import path from 'node:path'\nimport type { DocsConfig } from '../../docs/types.js'\n\nconst getDocsConfigModulePath = (rootDir: string) => {\n return path.join(rootDir, 'pages', '+docs.ts')\n}\n\nconst getDocsConfigFromLoadedModule = (loaded: unknown, modulePath: string) => {\n const docsConfig = (loaded as { default?: DocsConfig }).default\n\n if (!docsConfig) {\n throw new Error(`Expected default export from ${modulePath}`)\n }\n\n return docsConfig\n}\n\nexport const loadDocsConfig = async (options: {\n rootDir: string\n loadModule: (modulePath: string) => Promise<unknown>\n}) => {\n const modulePath = getDocsConfigModulePath(options.rootDir)\n const loaded = await options.loadModule(modulePath)\n return getDocsConfigFromLoadedModule(loaded, modulePath)\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\nconst MANAGED_SCRIPT_NAMES = ['generate:docs', 'predev', 'prebuild', 'pretypecheck'] as const\n\nconst REQUIRED_DEPENDENCIES = ['@unterberg/nivel', 'react', 'react-dom', 'vike', 'vike-react'] as const\nconst REQUIRED_DEV_DEPENDENCIES = ['vite', 'typescript', '@types/react', '@types/react-dom'] as const\n\ntype InitConsumerOptions = { force: boolean; rootDir: string }\n\ntype InitConsumerResult = {\n allDependenciesPresent: boolean\n createdFiles: string[]\n missingDependencies: string[]\n overwrittenFiles: string[]\n skippedFiles: string[]\n updatedScripts: string[]\n}\n\ntype PackageJsonShape = {\n dependencies?: Record<string, string>\n devDependencies?: Record<string, string>\n packageManager?: string\n scripts?: Record<string, string>\n}\n\nconst getDocsConfigTemplate = () => {\n return [\n \"import { defineDocsConfig } from '@unterberg/nivel/config'\",\n \"import { docsGraph } from '../docs/docs.graph'\",\n '',\n 'const docsConfig = defineDocsConfig({',\n ' graph: docsGraph,',\n \" siteTitle: 'My Docs',\",\n \" siteDescription: 'Documentation site powered by @unterberg/nivel.',\",\n \" basePath: '/docs',\",\n '})',\n '',\n 'export default docsConfig',\n '',\n ].join('\\n')\n}\n\nconst getDocsGraphTemplate = () => {\n return [\n \"import { defineDocsGraph } from '@unterberg/nivel/config'\",\n '',\n 'export const docsGraph = defineDocsGraph({',\n ' items: [',\n ' {',\n \" kind: 'section',\",\n \" id: 'docs',\",\n \" title: 'Docs',\",\n ' items: [',\n ' {',\n \" kind: 'page',\",\n \" id: 'gettingStarted',\",\n \" title: 'Getting Started',\",\n \" slug: 'getting-started',\",\n \" source: 'content/getting-started/content.mdx',\",\n \" description: 'Getting started with @unterberg/nivel.',\",\n ' },',\n ' ],',\n ' },',\n ' ],',\n '})',\n '',\n ].join('\\n')\n}\n\nconst getConfigTemplate = () => {\n return [\n \"import { createNivelVikeConfig } from '@unterberg/nivel/vike'\",\n \"import docsConfig from './+docs'\",\n '',\n 'export { config }',\n '',\n 'const config = createNivelVikeConfig(docsConfig)',\n '',\n ].join('\\n')\n}\n\nconst getHeadTemplate = () => {\n return [\n \"import { MetaHead } from '@unterberg/nivel/client'\",\n '',\n 'export const Head = () => {',\n ' return <MetaHead />',\n '}',\n '',\n ].join('\\n')\n}\n\nconst getLayoutTemplate = () => {\n return [\n \"import { AppLayout } from '@unterberg/nivel/client'\",\n \"import type { ReactNode } from 'react'\",\n '',\n 'const Layout = ({ children }: { children: ReactNode }) => {',\n ' return <AppLayout>{children}</AppLayout>',\n '}',\n '',\n 'export default Layout',\n '',\n ].join('\\n')\n}\n\nconst getGlobalContextTemplate = () => {\n return [\n \"import { docsGlobalContextData } from './(nivel-generated)/_docsGlobalContext'\",\n '',\n 'export const onCreateGlobalContext = (globalContext: { docs?: typeof docsGlobalContextData }) => {',\n ' globalContext.docs = docsGlobalContextData',\n '}',\n '',\n ].join('\\n')\n}\n\nconst getWrapperTemplate = () => {\n return [\n \"import type { ReactNode } from 'react'\",\n '',\n 'const Wrapper = ({ children }: { children: ReactNode }) => {',\n ' return <>{children}</>',\n '}',\n '',\n 'export default Wrapper',\n '',\n ].join('\\n')\n}\n\nconst getGlobalTypesTemplate = () => {\n return [\n \"declare module '*.mdx' {\",\n \" import type { ComponentType } from 'react'\",\n '',\n ' const MdxComponent: ComponentType',\n ' export default MdxComponent',\n '}',\n '',\n \"declare module '*.css'\",\n '',\n 'declare global {',\n ' namespace Vike {',\n ' interface GlobalContext {',\n \" docs: import('@unterberg/nivel').DocsGlobalContextData\",\n ' }',\n ' }',\n '}',\n '',\n ].join('\\n')\n}\n\nconst getManagedFileEntries = () => {\n return [\n ['pages/+docs.ts', getDocsConfigTemplate()],\n ['docs/docs.graph.ts', getDocsGraphTemplate()],\n ['pages/+config.ts', getConfigTemplate()],\n ['pages/+Head.tsx', getHeadTemplate()],\n ['pages/+Layout.tsx', getLayoutTemplate()],\n ['pages/+onCreateGlobalContext.ts', getGlobalContextTemplate()],\n ['pages/+Wrapper.tsx', getWrapperTemplate()],\n ['global.d.ts', getGlobalTypesTemplate()],\n ] as const\n}\n\nconst getGenerateDocsRunner = (packageJson: PackageJsonShape) => {\n const packageManager = packageJson.packageManager?.trim() ?? ''\n\n if (packageManager.startsWith('pnpm@')) {\n return 'pnpm generate:docs'\n }\n\n if (packageManager.startsWith('npm@')) {\n return 'npm run generate:docs'\n }\n\n return 'npm run generate:docs'\n}\n\nconst getManagedScripts = (packageJson: PackageJsonShape) => {\n const generateDocsRunner = getGenerateDocsRunner(packageJson)\n\n return {\n 'generate:docs': 'nivel prepare',\n predev: generateDocsRunner,\n prebuild: generateDocsRunner,\n pretypecheck: generateDocsRunner,\n } satisfies Record<(typeof MANAGED_SCRIPT_NAMES)[number], string>\n}\n\nconst writeFile = (filePath: string, source: string) => {\n fs.mkdirSync(path.dirname(filePath), { recursive: true })\n fs.writeFileSync(filePath, source)\n}\n\nconst writeManagedFile = (\n rootDir: string,\n relativeFilePath: string,\n source: string,\n force: boolean,\n result: InitConsumerResult,\n) => {\n const filePath = path.join(rootDir, relativeFilePath)\n const exists = fs.existsSync(filePath)\n\n if (exists && !force) {\n result.skippedFiles.push(relativeFilePath)\n return\n }\n\n writeFile(filePath, source)\n\n if (exists) {\n result.overwrittenFiles.push(relativeFilePath)\n return\n }\n\n result.createdFiles.push(relativeFilePath)\n}\n\nconst readPackageJson = (rootDir: string) => {\n const packageJsonPath = path.join(rootDir, 'package.json')\n\n if (!fs.existsSync(packageJsonPath)) {\n throw new Error(`Expected package.json in ${rootDir}`)\n }\n\n return {\n packageJson: JSON.parse(fs.readFileSync(packageJsonPath, 'utf8')) as PackageJsonShape,\n packageJsonPath,\n }\n}\n\nconst patchPackageScripts = (packageJson: PackageJsonShape, packageJsonPath: string, result: InitConsumerResult) => {\n const scripts = { ...(packageJson.scripts ?? {}) }\n const managedScripts = getManagedScripts(packageJson)\n\n for (const scriptName of MANAGED_SCRIPT_NAMES) {\n if (scripts[scriptName] === managedScripts[scriptName]) {\n continue\n }\n\n scripts[scriptName] = managedScripts[scriptName]\n result.updatedScripts.push(scriptName)\n }\n\n const nextPackageJson = {\n ...packageJson,\n scripts,\n }\n\n fs.writeFileSync(packageJsonPath, `${JSON.stringify(nextPackageJson, null, 2)}\\n`)\n}\n\nconst getMissingDependencies = (packageJson: PackageJsonShape) => {\n const installed = new Set<string>([\n ...Object.keys(packageJson.dependencies ?? {}),\n ...Object.keys(packageJson.devDependencies ?? {}),\n ])\n\n return [...REQUIRED_DEPENDENCIES, ...REQUIRED_DEV_DEPENDENCIES].filter((packageName) => !installed.has(packageName))\n}\n\nexport const getInitSummary = (result: InitConsumerResult) => {\n const lines = ['Initialized nivel consumer scaffolding.']\n\n if (result.createdFiles.length > 0) {\n lines.push(`Created files: ${result.createdFiles.join(', ')}`)\n }\n\n if (result.overwrittenFiles.length > 0) {\n lines.push(`Overwritten files: ${result.overwrittenFiles.join(', ')}`)\n }\n\n if (result.skippedFiles.length > 0) {\n lines.push(`Skipped existing files: ${result.skippedFiles.join(', ')}`)\n }\n\n if (result.updatedScripts.length > 0) {\n lines.push(`Updated package.json scripts: ${result.updatedScripts.join(', ')}`)\n }\n\n if (result.missingDependencies.length > 0) {\n lines.push(`Missing dependencies: ${result.missingDependencies.join(', ')}`)\n lines.push(\n 'Consumer CSS stays hand-authored. Add your stylesheet import manually, for example in pages/+Wrapper.tsx.',\n )\n } else if (!result.allDependenciesPresent) {\n lines.push('Dependency validation completed with warnings.')\n } else {\n lines.push('All required dependencies are already present.')\n }\n\n return `${lines.join('\\n')}\\n`\n}\n\nexport const initConsumer = (options: InitConsumerOptions): InitConsumerResult => {\n const result: InitConsumerResult = {\n allDependenciesPresent: true,\n createdFiles: [],\n missingDependencies: [],\n overwrittenFiles: [],\n skippedFiles: [],\n updatedScripts: [],\n }\n\n const { packageJson, packageJsonPath } = readPackageJson(options.rootDir)\n\n for (const [relativeFilePath, source] of getManagedFileEntries()) {\n writeManagedFile(options.rootDir, relativeFilePath, source, options.force, result)\n }\n\n patchPackageScripts(packageJson, packageJsonPath, result)\n\n result.missingDependencies = getMissingDependencies(packageJson)\n result.allDependenciesPresent = result.missingDependencies.length === 0\n\n return result\n}\n"],"mappings":"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","names":["path","fs","path"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/mdx/components/Alert.tsx","../src/mdx/code-blocks/ChoiceGroup.tsx","../src/mdx/code-blocks/CodeBlockHeaderMeta.tsx","../src/mdx/code-blocks/CopyButton.tsx","../src/mdx/code-blocks/context.tsx","../src/mdx/code-blocks/useRestoreScroll.ts","../src/mdx/code-blocks/useSelectedChoice.ts","../src/mdx/code-blocks/CodeBlockTransformer.tsx","../src/mdx/code-blocks/FileState.tsx","../src/mdx/code-blocks/Pre.tsx","../src/mdx/components/Link.tsx","../src/mdx/components/Overview.tsx","../src/mdx/components/RepoLink.tsx","../src/mdx/components/Table.tsx"],"sourcesContent":["import cm, { cmMerge } from '@classmatejs/react'\nimport { Check, CircleX, Info, TriangleAlert } from 'lucide-react'\nimport type { ReactNode } from 'react'\n\nexport type AlertVariant = 'info' | 'warning' | 'error' | 'success'\n\nconst alertIconMap = {\n info: Info,\n warning: TriangleAlert,\n error: CircleX,\n success: Check,\n}\n\nexport const Alert = ({\n type = 'info',\n heading,\n children,\n icon = true,\n}: {\n type?: AlertVariant\n heading?: ReactNode\n children: ReactNode\n icon?: boolean | ReactNode\n}) => {\n const AlertIcon = icon === true ? alertIconMap[type] : typeof icon === 'object' ? () => <>{icon}</> : null\n\n const alertIconTextColorClass = {\n info: 'text-info',\n warning: 'text-warning',\n error: 'text-error',\n success: 'text-success',\n }[type]\n\n return (\n <AlertOuter $variant={type}>\n {!!heading && AlertIcon && (\n <div className=\"mb-3 flex items-center gap-2\">\n <AlertIcon className={cmMerge(alertIconTextColorClass, 'float-left h-5 w-5')} />\n <AlertHeading>{heading}</AlertHeading>\n </div>\n )}\n {!(!!heading && AlertIcon) && !!heading && <AlertHeading>{heading}</AlertHeading>}\n {!(!!heading && AlertIcon) && AlertIcon && (\n <div className={cmMerge(alertIconTextColorClass, 'float-left mr-2')}>\n <AlertIcon className=\"mt-1 h-5 w-5\" />\n </div>\n )}\n {children}\n </AlertOuter>\n )\n}\n\nconst AlertOuter = cm.section.variants<{ $variant: AlertVariant }>({\n base: `\n p-4\n mt-5\n mb-5\n border\n rounded-lg\n prose-p:last:mb-0\n prose-p:mt-0\n prose-headings:first:mt-0\n prose-headings:last:mb-0\n prose-ul:first:mt-0\n prose-ul:last:mb-0\n text-sm\n `,\n variants: {\n $variant: {\n info: 'bg-info/10 border-info/30',\n warning: 'bg-warning/10 border-warning/30',\n error: 'bg-error/10 border-error/25',\n success: 'bg-success/10 border-success/35',\n },\n },\n defaultVariants: {\n $variant: 'info',\n },\n})\n\nconst AlertHeading = cm.header`\n font-bold\n text-base\n`\n","export { ChoiceGroup }\n\nimport { Children, isValidElement, type ReactElement, type ReactNode, useRef } from 'react'\nimport { CodeBlockHeaderMeta } from './CodeBlockHeaderMeta.js'\nimport { CodeBlockCopyButton, trimTrailingWhitespace } from './CopyButton.js'\nimport { CodeBlockGroupProvider } from './context.js'\nimport { useRestoreScroll } from './useRestoreScroll.js'\nimport { useSelectedChoice } from './useSelectedChoice.js'\n\ntype ChoiceGroupDescriptor = {\n default: string\n disabled: string[]\n name: string\n choices: string[]\n}\n\ntype ChoiceElementProps = {\n children?: ReactNode\n 'data-choice-value'?: string\n}\n\nconst isChoiceElement = (node: ReactNode): node is ReactElement<ChoiceElementProps> => {\n return isValidElement<ChoiceElementProps>(node) && typeof node.props?.['data-choice-value'] === 'string'\n}\n\nconst asTrimmedString = (value: unknown) => {\n return typeof value === 'string' && value.trim() ? value.trim() : null\n}\n\nconst getActiveCodeBlockMeta = (node: ReactNode): { env: string | null; hideCopy: boolean; title: string | null } => {\n for (const child of Children.toArray(node)) {\n if (!isValidElement(child)) {\n continue\n }\n\n const props = child.props as {\n children?: ReactNode\n 'data-code-env'?: string\n 'data-code-title'?: string\n 'hide-menu'?: string\n }\n const env = asTrimmedString(props['data-code-env'])\n const title = asTrimmedString(props['data-code-title'])\n const hideCopy = props['hide-menu'] === 'true'\n\n if (title || env || hideCopy) {\n return { env, hideCopy, title }\n }\n\n const nestedMeta = getActiveCodeBlockMeta(props.children)\n if (nestedMeta.title || nestedMeta.env || nestedMeta.hideCopy) {\n return nestedMeta\n }\n }\n\n return { env: null, hideCopy: false, title: null }\n}\n\nconst ChoiceGroup = ({\n children,\n choiceGroup,\n hide = false,\n}: {\n children: ReactNode\n choiceGroup: ChoiceGroupDescriptor\n hide?: boolean\n lvl?: number\n}) => {\n const [selectedChoice, setSelectedChoice] = useSelectedChoice(choiceGroup.name, choiceGroup.default)\n const bodyRef = useRef<HTMLDivElement>(null)\n const previousPositionRef = useRestoreScroll([selectedChoice])\n const choiceElements = Children.toArray(children).filter(isChoiceElement)\n const activeChoiceElement =\n choiceElements.find((choiceElement) => choiceElement.props['data-choice-value'] === selectedChoice) ??\n choiceElements[0]\n\n if (!activeChoiceElement) {\n return <>{children}</>\n }\n\n const activeCodeBlockMeta = getActiveCodeBlockMeta(activeChoiceElement.props.children)\n const headerLabel = activeCodeBlockMeta.title ?? activeChoiceElement.props['data-choice-value'] ?? ''\n\n if (hide) {\n return <>{activeChoiceElement.props.children}</>\n }\n\n return (\n <div\n data-choice-group-outer\n className=\"mt-5 mb-5 flex h-full flex-col overflow-hidden rounded-box border border-base-muted-light\"\n >\n <div\n className=\"not-prose flex min-h-10 items-center relative justify-between gap-3 border-b border-base-muted-light bg-base-muted-superlight px-4\"\n data-choice-group-header\n >\n <CodeBlockHeaderMeta label={headerLabel} env={activeCodeBlockMeta.env} />\n <div className=\"flex items-center gap-1\">\n <label className=\"select select-xs min-w-28 w-fit\">\n <select\n name={`choicesFor-${choiceGroup.name}`}\n value={activeChoiceElement.props['data-choice-value']}\n onChange={(event) => {\n previousPositionRef.current = {\n top: event.currentTarget.getBoundingClientRect().top,\n element: event.currentTarget,\n }\n setSelectedChoice(event.currentTarget.value)\n }}\n >\n {choiceGroup.choices.map((choice) => (\n <option key={choice} value={choice} disabled={choiceGroup.disabled.includes(choice)}>\n {choice}\n </option>\n ))}\n </select>\n </label>\n {!activeCodeBlockMeta.hideCopy && (\n <CodeBlockCopyButton\n onCopy={async () => {\n const text = trimTrailingWhitespace(bodyRef.current?.textContent ?? '')\n\n try {\n await navigator.clipboard.writeText(text)\n return true\n } catch {\n return false\n }\n }}\n />\n )}\n </div>\n </div>\n <div ref={bodyRef} className=\"h-full flex-1 bg-base-200! [&>*:first-child]:mt-0 [&>*:last-child]:mb-0\">\n <CodeBlockGroupProvider value={true}>{activeChoiceElement.props.children}</CodeBlockGroupProvider>\n </div>\n </div>\n )\n}\n","import cm from '@classmatejs/react'\n\nexport { CodeBlockHeaderMeta }\n\nconst CodeBlockHeaderMeta = ({ env, label }: { env?: string | null; label: string }) => {\n const effectiveEnv = env === 'server' || env === 'client' ? env : undefined\n\n return (\n <div className=\"flex min-w-0 items-center gap-2\">\n {env && <StyledDivider $env={env === 'server' || env === 'client' ? env : undefined} />}\n {env && <StyledBgShade $env={env === 'server' || env === 'client' ? env : undefined} />}\n <div className=\"font-mono text-xs font-semibold text-base-muted\">{label}</div>\n {env && <StyledBadge $env={effectiveEnv}>{env}</StyledBadge>}\n </div>\n )\n}\n\nconst StyledDivider = cm.div.variants<{ $env?: 'server' | 'client' }>({\n base: 'absolute h-1 -bottom-px left-0 w-full pointer-events-none',\n variants: {\n $env: {\n server: 'border-info/50 border-b ',\n client: 'border-success/50 border-b',\n },\n },\n defaultVariants: { $env: 'server' },\n})\n\nconst StyledBadge = cm.div.variants<{ $env?: 'server' | 'client' }>({\n base: 'shrink-0 badge badge-sm rounded-field badge-soft border pointer-events-none',\n variants: {\n $env: {\n server: 'badge-info border-info',\n client: 'badge-success border-success',\n },\n },\n defaultVariants: { $env: 'server' },\n})\n\nconst StyledBgShade = cm.div.variants<{ $env?: 'server' | 'client' }>({\n base: 'absolute inset-0 opacity-5 bg-linear-to-t via-40% via-transparent pointer-events-none',\n variants: {\n $env: {\n server: 'from-info',\n client: 'from-success',\n },\n },\n defaultVariants: { $env: 'server' },\n})\n","export { CodeBlockCopyButton, trimTrailingWhitespace }\n\nimport { cmMerge } from '@classmatejs/react'\nimport { Check, Copy } from 'lucide-react'\nimport { useState } from 'react'\n\nconst trimTrailingWhitespace = (text: string) => {\n return text\n .split('\\n')\n .map((line) => line.trimEnd())\n .join('\\n')\n}\n\nconst CodeBlockCopyButton = ({\n onCopy,\n className = '',\n}: {\n onCopy: () => Promise<boolean> | boolean\n className?: string\n}) => {\n const [copyState, setCopyState] = useState<'idle' | 'success' | 'error'>('idle')\n\n return (\n <button\n type=\"button\"\n className={cmMerge('btn btn-ghost btn-xs h-8 min-h-8 px-2 text-base-muted hover:text-base-content', className)}\n onClick={async () => {\n const success = await onCopy()\n setCopyState(success ? 'success' : 'error')\n window.setTimeout(() => setCopyState('idle'), 900)\n }}\n aria-label={copyState === 'idle' ? 'Copy to clipboard' : copyState === 'success' ? 'Copied' : 'Copy failed'}\n >\n {copyState === 'success' ? <Check size={14} /> : <Copy size={14} />}\n </button>\n )\n}\n","import { createContext, useContext } from 'react'\n\nconst CodeBlockGroupContext = createContext(false)\n\nexport const CodeBlockGroupProvider = CodeBlockGroupContext.Provider\n\nexport const useIsInCodeBlockGroup = () => useContext(CodeBlockGroupContext)\n","import { useEffect, useRef } from 'react'\n\ntype ScrollPosition = {\n top: number\n element: Element\n}\n\nexport const useRestoreScroll = (deps: ReadonlyArray<unknown>) => {\n const previousPositionRef = useRef<ScrollPosition | null>(null)\n\n useEffect(() => {\n if (!previousPositionRef.current) {\n return\n }\n\n const { top, element } = previousPositionRef.current\n const delta = element.getBoundingClientRect().top - top\n\n if (delta !== 0) {\n window.scrollBy(0, delta)\n }\n\n previousPositionRef.current = null\n // biome-ignore lint/correctness/useExhaustiveDependencies: restore only when the tracked value changes\n }, deps)\n\n return previousPositionRef\n}\n","import { useEffect, useState, useSyncExternalStore } from 'react'\nimport { useUniversalMdxRuntime } from '../components/UniversalMdxProvider.js'\n\nconst subscribeNoop = () => () => {}\nconst getServerSnapshot = () => null\n\nexport const useSelectedChoice = (choiceGroupName: string, defaultValue: string) => {\n const runtime = useUniversalMdxRuntime()\n const choiceStore = runtime?.codeBlockChoices\n const storedChoice = useSyncExternalStore(\n choiceStore?.subscribe ?? subscribeNoop,\n () => choiceStore?.getChoice(choiceGroupName) ?? null,\n getServerSnapshot,\n )\n const [localChoice, setLocalChoice] = useState(defaultValue)\n\n useEffect(() => {\n if (!choiceStore || storedChoice) {\n return\n }\n\n const legacyChoice = choiceStore.getLegacyChoice?.(choiceGroupName)\n if (legacyChoice) {\n choiceStore.setChoice(choiceGroupName, legacyChoice)\n }\n }, [choiceGroupName, choiceStore, storedChoice])\n\n if (choiceStore) {\n return [storedChoice ?? defaultValue, (value: string) => choiceStore.setChoice(choiceGroupName, value)] as const\n }\n\n return [localChoice, setLocalChoice] as const\n}\n","export { CodeBlockTransformer }\nexport type { LineBreak }\n\nimport type { ReactNode } from 'react'\n\ntype LineBreak = 'white-space' | 'break-word'\n\nconst CodeBlockTransformer = ({ children, lineBreak }: { children: ReactNode; lineBreak: LineBreak }) => {\n const className = `with-line-break_${lineBreak}` as const\n return <div className={className}>{children}</div>\n}\n","export { FileAdded, FileRemoved }\n\nimport type { ReactNode } from 'react'\n\nconst FileAdded = ({ children }: { children: ReactNode }) => {\n return <div className=\"doc-code-file-state doc-code-file-added\">{children}</div>\n}\n\nconst FileRemoved = ({ children }: { children: ReactNode }) => {\n return <div className=\"doc-code-file-state doc-code-file-removed\">{children}</div>\n}\n","export { Pre }\n\nimport { cmMerge } from '@classmatejs/react'\nimport {\n Children,\n type ComponentPropsWithoutRef,\n isValidElement,\n type ReactElement,\n type ReactNode,\n useRef,\n} from 'react'\nimport { CodeBlockHeaderMeta } from './CodeBlockHeaderMeta.js'\nimport { CodeBlockCopyButton, trimTrailingWhitespace } from './CopyButton.js'\nimport { useIsInCodeBlockGroup } from './context.js'\n\ntype PreProps = ComponentPropsWithoutRef<'pre'> & {\n 'data-code-env'?: string\n 'data-code-title'?: string\n 'data-language'?: string\n 'data-language-label'?: string\n 'file-added'?: string\n 'file-removed'?: string\n 'hide-menu'?: string\n}\n\nconst asTrimmedString = (value: unknown) => {\n return typeof value === 'string' && value.trim() ? value.trim() : null\n}\n\nconst getLanguageFromChildren = (children: ReactNode) => {\n const firstChild = Children.toArray(children)[0]\n if (!isValidElement(firstChild)) {\n return null\n }\n\n const props = (firstChild as ReactElement<{ className?: string; 'data-language'?: string }>).props\n const explicitLanguage = asTrimmedString(props['data-language'])\n if (explicitLanguage) {\n return explicitLanguage\n }\n\n const classNames = typeof props.className === 'string' ? props.className.split(/\\s+/) : []\n const languageClassName = classNames.find((className) => className.startsWith('language-'))\n return languageClassName ? languageClassName.slice('language-'.length) : null\n}\n\nconst getLanguageLabel = (props: PreProps) => {\n const explicitLabel = asTrimmedString(props['data-language-label'])\n if (explicitLabel) {\n return explicitLabel\n }\n\n const explicitLanguage = asTrimmedString(props['data-language']) ?? getLanguageFromChildren(props.children)\n return explicitLanguage ? explicitLanguage.toUpperCase() : 'CODE'\n}\n\nconst Pre = ({ children, className, ...props }: PreProps) => {\n const preRef = useRef<HTMLPreElement>(null)\n const isInChoiceGroup = useIsInCodeBlockGroup()\n const label = asTrimmedString(props['data-code-title']) ?? getLanguageLabel(props)\n const env = asTrimmedString(props['data-code-env'])\n const fileState = props['file-added'] ? 'added' : props['file-removed'] ? 'removed' : null\n const hideMenu = props['hide-menu'] === 'true'\n\n const copyButton =\n hideMenu || isInChoiceGroup ? null : (\n <CodeBlockCopyButton\n onCopy={async () => {\n const text = trimTrailingWhitespace(preRef.current?.textContent ?? '')\n\n try {\n await navigator.clipboard.writeText(text)\n return true\n } catch {\n return false\n }\n }}\n />\n )\n\n return (\n <div\n className={cmMerge(\n 'group relative h-full not-prose overflow-hidden',\n isInChoiceGroup ? '' : 'mb-6 rounded-box border border-base-muted-light',\n className,\n )}\n data-code-block-frame=\"\"\n data-file-state={fileState ?? undefined}\n >\n {!isInChoiceGroup && (\n <div\n className=\"flex min-h-10 relative items-center justify-between gap-3 border-b border-base-muted-light bg-base-muted-superlight! px-4\"\n data-code-block-header=\"\"\n >\n <CodeBlockHeaderMeta label={label} env={env} />\n {copyButton}\n </div>\n )}\n <pre\n {...props}\n ref={preRef}\n className={cmMerge('doc-code-pre m-0 h-full overflow-x-auto bg-base-200! p-4 text-sm', className)}\n data-code-block-content=\"\"\n >\n {children}\n </pre>\n </div>\n )\n}\n","import { cmMerge } from '@classmatejs/react'\nimport type { ComponentPropsWithoutRef, ReactNode } from 'react'\nimport { withSiteBaseUrl } from '../../shared/assets.js'\nimport { useUniversalMdxRuntime } from './UniversalMdxProvider.js'\n\nexport type LinkProps = ComponentPropsWithoutRef<'a'> & {\n href?: string\n text?: string | ReactNode\n noBreadcrumb?: boolean\n doNotInferSectionTitle?: boolean\n noWarning?: boolean\n}\n\nfunction assertUsage(condition: unknown, message: string): asserts condition {\n if (!condition) {\n throw new Error(`[UniversalMdxMods][Wrong Usage] ${message}`)\n }\n}\n\nconst assertWarning = (condition: unknown, message: string) => {\n const isDev = (import.meta as ImportMeta & { env?: { DEV?: boolean } }).env?.DEV === true\n\n if (condition || !isDev) {\n return\n }\n\n console.warn(`[UniversalMdxMods][Warning] ${message}`)\n}\n\nconst parseMarkdownMini = (markdown: string) => {\n type Part = { content: string; nodeType: 'code' | 'text' }\n const parts: Part[] = []\n let current: Part | undefined\n\n for (const letter of markdown.split('')) {\n if (letter === '`') {\n if (current?.nodeType === 'code') {\n parts.push(current)\n current = undefined\n } else {\n if (current) {\n parts.push(current)\n }\n current = { nodeType: 'code', content: '' }\n }\n continue\n }\n\n current ??= { nodeType: 'text', content: '' }\n current.content += letter\n }\n\n if (current) {\n parts.push(current)\n }\n\n return (\n <>\n {parts.map((part, index) =>\n part.nodeType === 'code' ? <code key={index}>{part.content}</code> : <span key={index}>{part.content}</span>,\n )}\n </>\n )\n}\n\nconst determineSectionTitle = (href: string) => {\n const hash = href.split('#')[1]\n\n if (!hash) {\n return null\n }\n\n return hash\n .split(':~:text')[0]\n ?.split('-')\n .map((word, index) => (index === 0 ? `${word[0]?.toUpperCase() ?? ''}${word.slice(1)}` : word))\n .join(' ')\n}\n\nconst isExternalHref = (href: string) => {\n return /^(?:[a-z]+:)?\\/\\//i.test(href) || href.startsWith('mailto:') || href.startsWith('tel:')\n}\n\nconst renderLabelPart = (value: ReactNode) => {\n return typeof value === 'string' ? parseMarkdownMini(value) : value\n}\n\nconst getLinkText = ({\n isCurrentPage,\n breadcrumb,\n noBreadcrumb,\n sectionTitle,\n title,\n}: {\n isCurrentPage?: boolean\n breadcrumb?: ReactNode[]\n noBreadcrumb?: boolean\n sectionTitle?: ReactNode\n title?: ReactNode\n}) => {\n const breadcrumbParts: ReactNode[] = []\n\n if (breadcrumb) {\n breadcrumbParts.push(...breadcrumb.map((item) => renderLabelPart(item)))\n }\n\n if (title) {\n breadcrumbParts.push(renderLabelPart(title))\n }\n\n if (sectionTitle) {\n breadcrumbParts.push(renderLabelPart(sectionTitle))\n }\n\n if (noBreadcrumb || isCurrentPage) {\n return breadcrumbParts[breadcrumbParts.length - 1] ?? null\n }\n\n return (\n <>\n {breadcrumbParts.map((part, index) => (\n <span key={index}>\n {index > 0 ? ' > ' : null}\n {part}\n </span>\n ))}\n </>\n )\n}\n\nexport const Link = ({\n href,\n text,\n noBreadcrumb,\n doNotInferSectionTitle,\n noWarning,\n children,\n className,\n ...props\n}: LinkProps) => {\n const runtime = useUniversalMdxRuntime()\n\n if (typeof href !== 'string' || href === '') {\n assertWarning(false, '<Link /> is missing `href`.')\n\n return (\n <a className={cmMerge(className, 'inline-flex gap-1 items-center')} {...props}>\n {text ?? children ?? 'LINK-TARGET-NOT-FOUND'}\n </a>\n )\n }\n\n assertUsage(\n href.startsWith('/') || href.startsWith('#') || isExternalHref(href),\n `<Link href /> prop \\`href==='${href}'\\` but should be external or start with '/' or '#'`,\n )\n assertUsage(!text || !children, 'Cannot use both `text` or `children`')\n\n const content = text ?? children\n const resolvedDocLink = runtime?.resolveDocLink?.({\n href,\n doNotInferSectionTitle,\n noWarning,\n })\n const localizedHref = resolvedDocLink?.href ?? runtime?.localizeHref?.(href) ?? withSiteBaseUrl(href)\n const inferredSectionTitle =\n resolvedDocLink?.sectionTitle ?? (!doNotInferSectionTitle ? determineSectionTitle(href) : null)\n const inferredText =\n content ??\n (resolvedDocLink\n ? getLinkText({\n breadcrumb: resolvedDocLink.breadcrumb,\n isCurrentPage: resolvedDocLink.isCurrentPage,\n noBreadcrumb,\n sectionTitle: inferredSectionTitle ?? undefined,\n title: resolvedDocLink.title,\n })\n : isExternalHref(href)\n ? href\n : (inferredSectionTitle ?? 'LINK-TARGET-NOT-FOUND'))\n\n return (\n <a href={localizedHref} className={cmMerge(className, '')} {...props}>\n {inferredText}\n </a>\n )\n}\n","import type { ReactNode } from 'react'\nimport { withSiteBaseUrl } from '../../shared/assets.js'\nimport { renderInlineMarkdown } from '../../shared/renderInlineMarkdown.js'\nimport type { UniversalResolvedOverviewItem } from './types.js'\nimport { useUniversalMdxRuntime } from './UniversalMdxProvider.js'\n\ntype OverviewLinkItem = {\n title: ReactNode\n href: string\n excerpt?: ReactNode | null\n}\n\ntype OverviewDividerItem = {\n dividerText: ReactNode\n}\n\nexport type OverviewItem = OverviewLinkItem | OverviewDividerItem\n\ninterface OverviewProps {\n items: Array<string | OverviewItem>\n}\n\nconst isOverviewDividerItem = (item: string | OverviewItem): item is OverviewDividerItem =>\n typeof item === 'object' && item !== null && 'dividerText' in item\n\nfunction assertUsage(condition: unknown, message: string): asserts condition {\n if (!condition) {\n throw new Error(`[UniversalMdxMods][Wrong Usage] ${message}`)\n }\n}\n\nconst groupOverviewItems = (items: OverviewItem[]) => {\n const groups: { dividerText?: ReactNode; items: OverviewLinkItem[] }[] = []\n let currentGroup: { dividerText?: ReactNode; items: OverviewLinkItem[] } = {\n items: [],\n }\n\n const commitCurrentGroup = () => {\n if (currentGroup.items.length > 0) {\n groups.push(currentGroup)\n }\n }\n\n for (const item of items) {\n if (isOverviewDividerItem(item)) {\n commitCurrentGroup()\n currentGroup = {\n dividerText: item.dividerText,\n items: [],\n }\n continue\n }\n\n currentGroup.items.push(item)\n }\n\n commitCurrentGroup()\n\n return groups\n}\n\nconst OverviewCard = ({ excerpt, href, title }: OverviewLinkItem) => {\n return (\n <a\n href={withSiteBaseUrl(href)}\n className=\"group flex h-full flex-col gap-3 rounded-box border border-base-muted-light bg-base-muted-superlight p-5 no-underline hover:border-primary-muted-medium hover:bg-base-muted-superlight/50\"\n >\n <h3 className=\"text-lg font-semibold text-base-content\">{renderInlineMarkdown(title)}</h3>\n {excerpt ? <p className=\"text-sm leading-relaxed text-base-muted\">{renderInlineMarkdown(excerpt)}</p> : null}\n </a>\n )\n}\n\nconst normalizeOverviewItems = (\n items: Array<string | OverviewItem>,\n resolveOverviewItem?: (key: string) => UniversalResolvedOverviewItem | null,\n): OverviewItem[] => {\n return items.map((item) => {\n if (typeof item !== 'string') {\n return item\n }\n\n const resolvedItem = resolveOverviewItem?.(item)\n\n assertUsage(\n resolvedItem,\n `Overview item \"${item}\" requires runtime.resolveOverviewItem(). Pass { title, href, excerpt } manually when no resolver is available.`,\n )\n\n return resolvedItem\n })\n}\n\nexport const Overview = ({ items }: OverviewProps) => {\n const runtime = useUniversalMdxRuntime()\n const groups = groupOverviewItems(normalizeOverviewItems(items, runtime?.resolveOverviewItem))\n\n if (groups.length === 0) {\n return null\n }\n\n return (\n <div className=\"prose-headings:my-0 prose-p:my-0 my-5 flex flex-col gap-8\">\n {groups.map((group, groupIndex) => (\n <section className=\"flex flex-col gap-4\" key={groupIndex}>\n {group.dividerText ? (\n <p className=\"text-sm font-semibold uppercase tracking-wide\">{renderInlineMarkdown(group.dividerText)}</p>\n ) : null}\n <div className=\"grid gap-4 sm:grid-cols-2\">\n {group.items.map((item, itemIndex) => (\n <OverviewCard {...item} key={item.href || itemIndex} />\n ))}\n </div>\n </section>\n ))}\n </div>\n )\n}\n","type Repo = `${string}/${string}`\ntype TimestampType = `${number}.${number}`\n\nexport const RepoLink = ({ repo, timestamp }: { repo: Repo; timestamp: TimestampType }) => {\n if (!repo || repo.split('/').length !== 2) {\n throw new Error('Invalid repo')\n }\n\n return (\n <span className=\"inline-flex items-center gap-1\">\n <span className=\"bg-white font-mono font-bold h-fit px-1 text-sm!\">{timestamp}</span>\n <a href={`https://github.com/${repo}`} target=\"_blank\" rel=\"noopener\">\n GitHub > <code>{repo}</code>\n </a>\n </span>\n )\n}\n","import cm from '@classmatejs/react'\n\nexport interface TableData {\n headers: string[]\n rows: string[][]\n}\n\nexport interface TableProps {\n size?: 'sm' | 'md' | 'lg'\n data: TableData\n}\n\nexport const Table = ({ size = 'md', data }: TableProps) => {\n return (\n <StyledTable $size={size}>\n <thead className=\"overflow-hidden rounded-t-box bg-base-200\">\n <tr>\n {data.headers.map((header, index) => (\n <th key={index}>{header}</th>\n ))}\n </tr>\n </thead>\n <tbody>\n {data.rows.map((row, rowIndex) => (\n <tr key={rowIndex}>\n {row.map((cell, cellIndex) => (\n <td key={cellIndex}>{cell}</td>\n ))}\n </tr>\n ))}\n </tbody>\n </StyledTable>\n )\n}\n\nconst StyledTable = cm.table.variants<{ $size: TableProps['size'] }>({\n base: `\n not-prose\n table\n w-full\n table-zebra\n mb-6\n `,\n variants: {\n $size: {\n sm: 'table-sm',\n md: 'table-md',\n lg: 'table-lg',\n },\n },\n defaultVariants: {\n $size: 'md',\n },\n})\n"],"mappings":"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","names":["useRef","cm","jsx","jsxs","jsxs","jsx","cm","cmMerge","Check","jsx","jsx","cmMerge","Check","useEffect","useState","useState","useEffect","Fragment","jsx","jsxs","useRef","jsx","Fragment","jsxs","jsx","jsx","jsx","jsx","cmMerge","Children","isValidElement","useRef","jsx","jsxs","asTrimmedString","Children","isValidElement","useRef","jsx","jsxs","cmMerge","cmMerge","Fragment","jsx","jsxs","cmMerge","jsx","jsxs","assertUsage","jsx","jsxs","cm","jsx","jsxs"]}
|
|
File without changes
|