@unterberg/nivel 0.1.14 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -9
- package/dist/{SearchModal-YJZFUB53.js → SearchModal-Q2MTOIZU.js} +4 -4
- package/dist/SearchModal-Q2MTOIZU.js.map +1 -0
- package/dist/{chunk-SH5XWPXW.js → chunk-AQJQDMKW.js} +181 -106
- package/dist/chunk-AQJQDMKW.js.map +1 -0
- package/dist/{chunk-SOVTSE5J.js → chunk-AT4O3RRN.js} +8 -2
- package/dist/chunk-AT4O3RRN.js.map +1 -0
- package/dist/{chunk-PKXDOKJY.js → chunk-C724XH47.js} +23 -18
- package/dist/chunk-C724XH47.js.map +1 -0
- package/dist/{chunk-NGX2C26M.js → chunk-GFZ3P4F4.js} +556 -15
- package/dist/chunk-GFZ3P4F4.js.map +1 -0
- package/dist/{chunk-R6O4NLHC.js → chunk-I75ALNG2.js} +6 -2
- package/dist/chunk-I75ALNG2.js.map +1 -0
- package/dist/chunk-WMHFKLPG.js +124 -0
- package/dist/chunk-WMHFKLPG.js.map +1 -0
- package/dist/cli.js +2 -3
- package/dist/cli.js.map +1 -1
- package/dist/client.d.ts +2 -1
- package/dist/client.js +3 -4
- package/dist/icons.d.ts +1 -0
- package/dist/icons.js +11638 -0
- package/dist/icons.js.map +1 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -9
- package/dist/mdx/code-blocks.d.ts +1 -1
- package/dist/mdx.js +2 -4
- package/dist/mdx.js.map +1 -1
- package/dist/runtime/client.d.ts +2 -1
- package/dist/runtime/client.js +3 -4
- package/dist/runtime/node.d.ts +2 -1
- package/dist/runtime/node.js +6 -8
- package/dist/{types-IiJ1jLWc.d.ts → types-Duk127zu.d.ts} +20 -2
- package/dist/vike.d.ts +2 -1
- package/dist/vike.js +7 -9
- package/dist/vike.js.map +1 -1
- package/package.json +10 -9
- package/dist/SearchModal-YJZFUB53.js.map +0 -1
- package/dist/chunk-JSZZPQEP.js +0 -9
- package/dist/chunk-JSZZPQEP.js.map +0 -1
- package/dist/chunk-L6ZVB6XH.js +0 -36
- package/dist/chunk-L6ZVB6XH.js.map +0 -1
- package/dist/chunk-NGX2C26M.js.map +0 -1
- package/dist/chunk-PKXDOKJY.js.map +0 -1
- package/dist/chunk-QWIYQPCW.js +0 -404
- package/dist/chunk-QWIYQPCW.js.map +0 -1
- package/dist/chunk-R6O4NLHC.js.map +0 -1
- package/dist/chunk-SH5XWPXW.js.map +0 -1
- package/dist/chunk-SOVTSE5J.js.map +0 -1
- package/dist/config.d.ts +0 -6
- package/dist/config.js +0 -9
- package/dist/config.js.map +0 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export {
|
|
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-IiJ1jLWc.js';
|
|
1
|
+
export { c as DocHeading, d as DocPageData, e as DocPageLinkData, f as DocsAlgoliaConfig, g as DocsAlgoliaFieldsConfig, h as DocsBrandConfig, i as DocsCollapsible, D as DocsConfig, j as DocsFooterConfig, k as DocsGlobalContextData, l as DocsGlobalContextSerializableData, m as DocsGraph, n as DocsGroupNode, o as DocsHeadConfig, p as DocsIconMap, q as DocsIconName, r as DocsPageNode, s as DocsPartnerConfig, t as DocsPartnersConfig, u as DocsSectionNode, v as DocsSidebarNode, b as DocsThemeConfig, J as JsonPrimitive, w as JsonValue, x as ResolvedDocsAlgoliaConfig, y as ResolvedDocsAlgoliaFieldsConfig, z as ResolvedDocsBrandConfig, a as ResolvedDocsConfig, A as ResolvedDocsPartnerConfig, B as ResolvedDocsPartnersConfig, C as ResolvedDocsSection, T as ThemePreference } from './types-Duk127zu.js';
|
|
3
2
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
4
3
|
import { ReactNode, ComponentPropsWithoutRef, PropsWithChildren } from 'react';
|
|
4
|
+
import 'lucide-react';
|
|
5
5
|
|
|
6
6
|
type ChoiceGroupDescriptor = {
|
|
7
7
|
default: string;
|
package/dist/index.js
CHANGED
|
@@ -9,17 +9,12 @@ import {
|
|
|
9
9
|
Pre,
|
|
10
10
|
RepoLink,
|
|
11
11
|
Table
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-C724XH47.js";
|
|
13
13
|
import {
|
|
14
14
|
UniversalMdxProvider,
|
|
15
15
|
renderInlineMarkdown,
|
|
16
16
|
useUniversalMdxRuntime
|
|
17
|
-
} from "./chunk-
|
|
18
|
-
import {
|
|
19
|
-
defineDocsConfig,
|
|
20
|
-
defineDocsGraph
|
|
21
|
-
} from "./chunk-JSZZPQEP.js";
|
|
22
|
-
import "./chunk-QWIYQPCW.js";
|
|
17
|
+
} from "./chunk-WMHFKLPG.js";
|
|
23
18
|
import {
|
|
24
19
|
baseAssets,
|
|
25
20
|
nivelAssetUrl,
|
|
@@ -38,8 +33,6 @@ export {
|
|
|
38
33
|
Table,
|
|
39
34
|
UniversalMdxProvider,
|
|
40
35
|
baseAssets,
|
|
41
|
-
defineDocsConfig,
|
|
42
|
-
defineDocsGraph,
|
|
43
36
|
nivelAssetUrl,
|
|
44
37
|
nivelPublicRoute,
|
|
45
38
|
renderInlineMarkdown,
|
|
@@ -49,7 +49,7 @@ declare const parseMetaString: <Name extends string = string>(meta: unknown, pro
|
|
|
49
49
|
declare const stripMetaProps: <Name extends string = string>(meta: unknown, propNames: Name[]) => string;
|
|
50
50
|
declare const getCodeBlockPropsFromMeta: (meta: unknown) => {
|
|
51
51
|
props: Record<string, string>;
|
|
52
|
-
env: "
|
|
52
|
+
env: "server" | "client" | null;
|
|
53
53
|
title: string | null;
|
|
54
54
|
};
|
|
55
55
|
|
package/dist/mdx.js
CHANGED
|
@@ -9,10 +9,8 @@ import {
|
|
|
9
9
|
Pre,
|
|
10
10
|
RepoLink,
|
|
11
11
|
Table
|
|
12
|
-
} from "./chunk-
|
|
13
|
-
import "./chunk-
|
|
14
|
-
import "./chunk-JSZZPQEP.js";
|
|
15
|
-
import "./chunk-QWIYQPCW.js";
|
|
12
|
+
} from "./chunk-C724XH47.js";
|
|
13
|
+
import "./chunk-WMHFKLPG.js";
|
|
16
14
|
import "./chunk-PYYPYIBD.js";
|
|
17
15
|
|
|
18
16
|
// src/mdx/index.ts
|
package/dist/mdx.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/mdx/index.ts"],"sourcesContent":["import {\n Alert,\n ChoiceGroup,\n CodeBlockTransformer,\n FileAdded,\n FileRemoved,\n Link,\n Overview,\n Pre,\n RepoLink,\n Table,\n} from '../index.js'\n\ntype MdxComponents = Record<string, unknown>\n\nexport const useMDXComponents = (components?: MdxComponents): MdxComponents => {\n return {\n Alert,\n Link,\n RepoLink,\n Table,\n Overview,\n ChoiceGroup,\n CodeBlockTransformer,\n FileAdded,\n FileRemoved,\n pre: Pre,\n ...components,\n }\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../src/mdx/index.ts"],"sourcesContent":["import {\n Alert,\n ChoiceGroup,\n CodeBlockTransformer,\n FileAdded,\n FileRemoved,\n Link,\n Overview,\n Pre,\n RepoLink,\n Table,\n} from '../index.js'\n\ntype MdxComponents = Record<string, unknown>\n\nexport const useMDXComponents = (components?: MdxComponents): MdxComponents => {\n return {\n Alert,\n Link,\n RepoLink,\n Table,\n Overview,\n ChoiceGroup,\n CodeBlockTransformer,\n FileAdded,\n FileRemoved,\n pre: Pre,\n ...components,\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAeO,IAAM,mBAAmB,CAAC,eAA8C;AAC7E,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,KAAK;AAAA,IACL,GAAG;AAAA,EACL;AACF;","names":[]}
|
package/dist/runtime/client.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ export { AppLayout, DEFAULT_THEME_PREFERENCE, DocsPage, DocsRouteLayout, DocsSea
|
|
|
2
2
|
import 'react/jsx-runtime';
|
|
3
3
|
import 'react';
|
|
4
4
|
import '@classmatejs/react';
|
|
5
|
-
import '../types-
|
|
5
|
+
import '../types-Duk127zu.js';
|
|
6
|
+
import 'lucide-react';
|
|
6
7
|
import 'zustand/middleware';
|
|
7
8
|
import 'zustand';
|
package/dist/runtime/client.js
CHANGED
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
UserSettingsSync,
|
|
9
9
|
applyThemePreference,
|
|
10
10
|
useDocsUserSettingsStore
|
|
11
|
-
} from "../chunk-
|
|
11
|
+
} from "../chunk-AQJQDMKW.js";
|
|
12
12
|
import {
|
|
13
13
|
LayoutComponent,
|
|
14
14
|
useDocsSearchActions,
|
|
@@ -16,9 +16,8 @@ import {
|
|
|
16
16
|
useDocsSidebarActions,
|
|
17
17
|
useDocsSidebarStore
|
|
18
18
|
} from "../chunk-ESAHWFDZ.js";
|
|
19
|
-
import "../chunk-
|
|
20
|
-
import "../chunk-
|
|
21
|
-
import "../chunk-QWIYQPCW.js";
|
|
19
|
+
import "../chunk-AT4O3RRN.js";
|
|
20
|
+
import "../chunk-WMHFKLPG.js";
|
|
22
21
|
import "../chunk-PYYPYIBD.js";
|
|
23
22
|
export {
|
|
24
23
|
AppLayout,
|
package/dist/runtime/node.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { R as ResolvedDocsPage, D as DocsConfig, a as ResolvedDocsConfig } from '../types-Duk127zu.js';
|
|
2
2
|
import { Plugin } from 'vite';
|
|
3
|
+
import 'lucide-react';
|
|
3
4
|
|
|
4
5
|
declare const resolveDocsHref: (basePath: string, href: string) => string | null;
|
|
5
6
|
declare const resolveDocsConfig: (config: DocsConfig) => ResolvedDocsConfig;
|
package/dist/runtime/node.js
CHANGED
|
@@ -1,20 +1,18 @@
|
|
|
1
1
|
import {
|
|
2
2
|
nivelPagesPlugin
|
|
3
|
-
} from "../chunk-
|
|
3
|
+
} from "../chunk-I75ALNG2.js";
|
|
4
4
|
import {
|
|
5
5
|
getGeneratedPagesRoot,
|
|
6
6
|
getInitSummary,
|
|
7
|
+
getResolvedPageById,
|
|
7
8
|
getTailwindBootstrapWarnings,
|
|
8
9
|
initConsumer,
|
|
9
10
|
loadDocsConfig,
|
|
10
|
-
syncGeneratedDocsPages
|
|
11
|
-
} from "../chunk-NGX2C26M.js";
|
|
12
|
-
import "../chunk-SOVTSE5J.js";
|
|
13
|
-
import {
|
|
14
|
-
getResolvedPageById,
|
|
15
11
|
resolveDocsConfig,
|
|
16
|
-
resolveDocsHref
|
|
17
|
-
|
|
12
|
+
resolveDocsHref,
|
|
13
|
+
syncGeneratedDocsPages
|
|
14
|
+
} from "../chunk-GFZ3P4F4.js";
|
|
15
|
+
import "../chunk-AT4O3RRN.js";
|
|
18
16
|
import "../chunk-PYYPYIBD.js";
|
|
19
17
|
export {
|
|
20
18
|
getGeneratedPagesRoot,
|
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
import * as lucide_react from 'lucide-react';
|
|
2
|
+
import { LucideIcon } from 'lucide-react';
|
|
3
|
+
|
|
4
|
+
type LucideModule = typeof lucide_react;
|
|
5
|
+
type DocsIconName = {
|
|
6
|
+
[Key in keyof LucideModule]: LucideModule[Key] extends LucideIcon ? Key : never;
|
|
7
|
+
}[keyof LucideModule];
|
|
8
|
+
|
|
1
9
|
type DocsCollapsible = {
|
|
2
10
|
isDefaultOpen?: boolean;
|
|
3
11
|
};
|
|
@@ -71,6 +79,7 @@ type DocsPageNode = {
|
|
|
71
79
|
tableOfContents?: boolean;
|
|
72
80
|
navTitle?: string;
|
|
73
81
|
description?: string;
|
|
82
|
+
icon?: DocsIconName;
|
|
74
83
|
};
|
|
75
84
|
type DocsGroupNode = {
|
|
76
85
|
kind: 'group';
|
|
@@ -80,6 +89,7 @@ type DocsGroupNode = {
|
|
|
80
89
|
showInNav?: boolean;
|
|
81
90
|
items: DocsSidebarNode[];
|
|
82
91
|
collapsible?: DocsCollapsible;
|
|
92
|
+
icon?: DocsIconName;
|
|
83
93
|
};
|
|
84
94
|
type DocsSectionNode = {
|
|
85
95
|
kind: 'section';
|
|
@@ -88,6 +98,7 @@ type DocsSectionNode = {
|
|
|
88
98
|
navTitle?: string;
|
|
89
99
|
href?: string;
|
|
90
100
|
items: DocsSidebarNode[];
|
|
101
|
+
icon?: DocsIconName;
|
|
91
102
|
};
|
|
92
103
|
type DocsSidebarNode = DocsGroupNode | DocsPageNode;
|
|
93
104
|
type DocsGraph = {
|
|
@@ -162,6 +173,7 @@ type ResolvedSidebarGroup = {
|
|
|
162
173
|
showInNav: boolean;
|
|
163
174
|
items: ResolvedSidebarNode[];
|
|
164
175
|
collapsible?: DocsCollapsible;
|
|
176
|
+
icon?: DocsIconName;
|
|
165
177
|
};
|
|
166
178
|
type ResolvedSidebarPage = {
|
|
167
179
|
kind: 'page';
|
|
@@ -170,6 +182,7 @@ type ResolvedSidebarPage = {
|
|
|
170
182
|
navTitle: string;
|
|
171
183
|
href: string;
|
|
172
184
|
showInNav: boolean;
|
|
185
|
+
icon?: DocsIconName;
|
|
173
186
|
};
|
|
174
187
|
type ResolvedSidebarNode = ResolvedSidebarGroup | ResolvedSidebarPage;
|
|
175
188
|
type ResolvedDocsSection = {
|
|
@@ -178,6 +191,7 @@ type ResolvedDocsSection = {
|
|
|
178
191
|
navTitle: string;
|
|
179
192
|
href: string;
|
|
180
193
|
items: ResolvedSidebarNode[];
|
|
194
|
+
icon?: DocsIconName;
|
|
181
195
|
};
|
|
182
196
|
type ResolvedNavbarItem = {
|
|
183
197
|
id: string;
|
|
@@ -201,9 +215,13 @@ type ResolvedDocsConfig = {
|
|
|
201
215
|
navbarItems: ResolvedNavbarItem[];
|
|
202
216
|
};
|
|
203
217
|
type DocPageLinkData = Pick<ResolvedDocsPage, 'id' | 'title' | 'href' | 'documentTitle'>;
|
|
204
|
-
type
|
|
218
|
+
type DocsIconMap = Partial<Record<string, LucideIcon>>;
|
|
219
|
+
type DocsGlobalContextSerializableData = Pick<ResolvedDocsConfig, 'siteTitle' | 'basePath' | 'theme' | 'footer' | 'brand' | 'head' | 'partners' | 'algolia' | 'pages' | 'navbarItems' | 'social'> & {
|
|
205
220
|
sidebarSections: ResolvedDocsConfig['sections'];
|
|
206
221
|
};
|
|
222
|
+
type DocsGlobalContextData = DocsGlobalContextSerializableData & {
|
|
223
|
+
docsIconMap: DocsIconMap;
|
|
224
|
+
};
|
|
207
225
|
type DocPageData = {
|
|
208
226
|
page: ResolvedDocsPage;
|
|
209
227
|
headings: DocHeading[];
|
|
@@ -211,4 +229,4 @@ type DocPageData = {
|
|
|
211
229
|
nextPage: DocPageLinkData | null;
|
|
212
230
|
};
|
|
213
231
|
|
|
214
|
-
export type {
|
|
232
|
+
export type { ResolvedDocsPartnerConfig as A, ResolvedDocsPartnersConfig as B, ResolvedDocsSection as C, DocsConfig as D, JsonPrimitive as J, ResolvedDocsPage as R, ThemePreference as T, ResolvedDocsConfig as a, DocsThemeConfig as b, DocHeading as c, DocPageData as d, DocPageLinkData as e, DocsAlgoliaConfig as f, DocsAlgoliaFieldsConfig as g, DocsBrandConfig as h, DocsCollapsible as i, DocsFooterConfig as j, DocsGlobalContextData as k, DocsGlobalContextSerializableData as l, DocsGraph as m, DocsGroupNode as n, DocsHeadConfig as o, DocsIconMap as p, DocsIconName as q, DocsPageNode as r, DocsPartnerConfig as s, DocsPartnersConfig as t, DocsSectionNode as u, DocsSidebarNode as v, JsonValue as w, ResolvedDocsAlgoliaConfig as x, ResolvedDocsAlgoliaFieldsConfig as y, ResolvedDocsBrandConfig as z };
|
package/dist/vike.d.ts
CHANGED
package/dist/vike.js
CHANGED
|
@@ -1,16 +1,14 @@
|
|
|
1
1
|
import {
|
|
2
2
|
nivelPagesPlugin
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-I75ALNG2.js";
|
|
4
4
|
import {
|
|
5
|
-
loadDocsConfig
|
|
6
|
-
|
|
5
|
+
loadDocsConfig,
|
|
6
|
+
resolveDocsConfig
|
|
7
|
+
} from "./chunk-GFZ3P4F4.js";
|
|
7
8
|
import {
|
|
8
9
|
createHeadingSlugger,
|
|
9
10
|
normalizeHeadingTitle
|
|
10
|
-
} from "./chunk-
|
|
11
|
-
import {
|
|
12
|
-
resolveDocsConfig
|
|
13
|
-
} from "./chunk-QWIYQPCW.js";
|
|
11
|
+
} from "./chunk-AT4O3RRN.js";
|
|
14
12
|
import "./chunk-PYYPYIBD.js";
|
|
15
13
|
import {
|
|
16
14
|
getCodeBlockMdxPlugins
|
|
@@ -82,7 +80,6 @@ var rehypeDocsHeadings = () => {
|
|
|
82
80
|
properties: {
|
|
83
81
|
href: `#${node.properties.id}`,
|
|
84
82
|
"data-copy-heading-link": "",
|
|
85
|
-
"aria-hidden": "true",
|
|
86
83
|
"aria-label": `Copy link to heading: ${title}`,
|
|
87
84
|
title: `Copy link to heading: ${title}`,
|
|
88
85
|
className: ["docs-heading-link absolute inset-0 flex items-center justify-end text-primary-muted"]
|
|
@@ -101,7 +98,8 @@ var rehypeDocsHeadings = () => {
|
|
|
101
98
|
"stroke-width": 2,
|
|
102
99
|
"stroke-linecap": "round",
|
|
103
100
|
"stroke-linejoin": "round",
|
|
104
|
-
|
|
101
|
+
"aria-hidden": "true",
|
|
102
|
+
className: ["size-4 hidden group-hover:block group-focus-within:block translate-x-5"]
|
|
105
103
|
},
|
|
106
104
|
children: [
|
|
107
105
|
createLinkIconLine(4, 9, 20, 9),
|
package/dist/vike.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/vike/index.ts","../src/mdx/plugins/rehypeDocsHeadings.ts","../src/vike/sitemap.ts"],"sourcesContent":["export { nivelConfig as default }\n\nimport mdx from '@mdx-js/rollup'\nimport remarkGfm from 'remark-gfm'\nimport type { Config } from 'vike/types'\nimport type { PluginOption, UserConfig } from 'vite'\nimport type { DocsConfig } from '../docs/types.js'\nimport { getCodeBlockMdxPlugins } from '../mdx/code-blocks/index.js'\nimport { rehypeDocsHeadings } from '../mdx/plugins/rehypeDocsHeadings.js'\nimport { nivelPagesPlugin } from '../runtime/node/index.js'\nimport { createNivelSitemapPlugins } from './sitemap.js'\n\nprocess.env.VIKE_CRAWL ??= JSON.stringify({ git: false })\n\nconst codeBlockMdxPlugins = getCodeBlockMdxPlugins()\n\nconst viteConfig: UserConfig = {\n plugins: [\n {\n ...mdx({\n providerImportSource: '@unterberg/nivel/mdx',\n ...codeBlockMdxPlugins,\n rehypePlugins: [...codeBlockMdxPlugins.rehypePlugins, rehypeDocsHeadings],\n remarkPlugins: [remarkGfm, ...codeBlockMdxPlugins.remarkPlugins],\n }),\n enforce: 'pre',\n } as PluginOption,\n nivelPagesPlugin(),\n ],\n ssr: {\n noExternal: ['@unterberg/nivel'],\n },\n}\n\nconst getConsumerViteConfig = (docsConfig: DocsConfig) => {\n return {\n ...viteConfig,\n plugins: [...(viteConfig.plugins ?? []), ...createNivelSitemapPlugins(docsConfig)],\n } satisfies UserConfig\n}\n\nconst getDefaultConsumerDataTheme = (docsConfig: DocsConfig) => {\n const defaultPreference = docsConfig.theme?.defaultPreference ?? 'light'\n const lightThemeName = docsConfig.theme?.light ?? 'consumer-light'\n const darkThemeName = docsConfig.theme?.dark ?? 'consumer-dark'\n\n return defaultPreference === 'dark' ? darkThemeName : lightThemeName\n}\n\nconst vikeReactConfigImport = 'import:vike-react/config:default'\n\nconst nivelConfig = {\n meta: {\n docs: {\n env: {\n server: true,\n client: true,\n },\n global: true,\n },\n },\n prerender: true,\n trailingSlash: true,\n vite: viteConfig as Record<string, unknown>,\n} satisfies Config\n\nexport const createNivelVikeConfig = (docsConfig: DocsConfig) => {\n return {\n ...nivelConfig,\n title: docsConfig.siteTitle,\n description: docsConfig.siteDescription ?? `${docsConfig.siteTitle} documentation`,\n extends: [vikeReactConfigImport] as unknown as Config['extends'],\n htmlAttributes: {\n 'data-theme': getDefaultConsumerDataTheme(docsConfig),\n },\n prerender: true,\n vite: getConsumerViteConfig(docsConfig) as Record<string, unknown>,\n } as Config\n}\n","// attention: no HMR is active for this file, changes require a full engine pre-build -> dev / preview\nimport { visit } from 'unist-util-visit'\nimport { createHeadingSlugger, normalizeHeadingTitle } from '../../docs/docHeadings.js'\nimport type { ElementContentNode, ElementNode, HtmlRootNode } from '../ast.js'\n\nconst headingTags = new Set(['h1', 'h2', 'h3', 'h4', 'h5', 'h6'])\n\nconst getNodeText = (node: ElementContentNode | HtmlRootNode): string => {\n if (node.type === 'text') {\n return typeof node.value === 'string' ? node.value : ''\n }\n\n if ('children' in node) {\n return node.children.map((child) => getNodeText(child)).join('')\n }\n\n return ''\n}\n\nconst getClassNames = (value: unknown): string[] => {\n if (Array.isArray(value)) {\n return value.flatMap((entry) => getClassNames(entry))\n }\n\n if (typeof value === 'string') {\n return value.split(/\\s+/).filter(Boolean)\n }\n\n return []\n}\n\nconst createLinkIconLine = (x1: number, y1: number, x2: number, y2: number): ElementNode => {\n return {\n type: 'element',\n tagName: 'line',\n properties: { x1, y1, x2, y2 },\n children: [],\n }\n}\n\nexport const rehypeDocsHeadings = () => {\n return (tree: HtmlRootNode) => {\n const slugify = createHeadingSlugger()\n\n visit(tree, 'element', (node: ElementNode) => {\n if (!headingTags.has(node?.tagName)) {\n return\n }\n\n const title = normalizeHeadingTitle(getNodeText(node))\n if (!title) {\n return\n }\n\n node.properties ??= {}\n\n if (typeof node.properties.id !== 'string' || node.properties.id === '') {\n node.properties.id = slugify(title)\n }\n\n const classNames = getClassNames(node.properties.className)\n if (!classNames.includes('scroll-mt-32')) {\n node.properties.className = [\n ...classNames,\n 'scroll-mt-32',\n 'xl:scroll-mt-24',\n 'flex gap-2 items-center',\n 'group',\n 'relative',\n 'w-fit',\n ].join(' ')\n }\n\n // create link element with has and anchor icon\n const linkElement: ElementNode = {\n type: 'element',\n tagName: 'a',\n properties: {\n href: `#${node.properties.id}`,\n 'data-copy-heading-link': '',\n 'aria-hidden': 'true',\n 'aria-label': `Copy link to heading: ${title}`,\n title: `Copy link to heading: ${title}`,\n className: ['docs-heading-link absolute inset-0 flex items-center justify-end text-primary-muted'],\n },\n children: [\n {\n type: 'element',\n tagName: 'svg',\n properties: {\n xmlns: 'http://www.w3.org/2000/svg',\n width: 16,\n height: 16,\n viewBox: '0 0 24 24',\n fill: 'none',\n stroke: 'currentColor',\n 'stroke-width': 2,\n 'stroke-linecap': 'round',\n 'stroke-linejoin': 'round',\n className: ['w-4 h-4 hidden group-hover:block translate-x-5'],\n },\n children: [\n createLinkIconLine(4, 9, 20, 9),\n createLinkIconLine(4, 15, 20, 15),\n createLinkIconLine(10, 3, 8, 21),\n createLinkIconLine(16, 3, 14, 21),\n ],\n },\n ],\n }\n node.children.push(linkElement)\n })\n }\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\nimport type { Plugin, ViteDevServer } from 'vite'\nimport { resolveDocsConfig } from '../docs/resolveDocsConfig.js'\nimport type { DocsConfig } from '../docs/types.js'\nimport { loadDocsConfig } from '../runtime/node/loadDocsConfig.js'\n\nconst GENERATED_DIRNAME = '(nivel-generated)'\nconst SITEMAP_FILENAME = 'sitemap.xml'\nconst ROBOTS_FILENAME = 'robots.txt'\n\ntype SitemapEntry = {\n lastmod?: string\n loc: string\n}\n\nconst normalizeRoutePath = (value: string) => {\n const normalized = value.trim().replace(/^\\/+|\\/+$/g, '')\n return normalized ? `/${normalized}/` : '/'\n}\n\nconst normalizeSiteUrl = (value: string) => {\n const normalized = value.trim()\n\n if (!normalized) {\n throw new Error('Docs siteUrl must be a non-empty absolute URL when sitemap support is enabled.')\n }\n\n const url = new URL(normalized)\n\n if (url.protocol !== 'http:' && url.protocol !== 'https:') {\n throw new Error(`Docs siteUrl must use http or https. Received ${JSON.stringify(value)}.`)\n }\n\n if (url.search || url.hash) {\n throw new Error(`Docs siteUrl cannot include query strings or hashes. Received ${JSON.stringify(value)}.`)\n }\n\n const pathname = url.pathname.replace(/\\/+$/g, '')\n url.pathname = pathname || '/'\n\n return url.toString().replace(/\\/+$/g, '')\n}\n\nconst joinPublicUrl = (siteUrl: string, routePath: string) => {\n return routePath === '/' ? `${siteUrl}/` : `${siteUrl}${routePath}`\n}\n\nconst normalizePublicUrl = (value: string) => {\n const url = new URL(value)\n url.search = ''\n url.hash = ''\n url.pathname = normalizeRoutePath(url.pathname)\n return url.toString()\n}\n\nconst xmlEscape = (value: string) => {\n return value.replaceAll('&', '&').replaceAll('<', '<').replaceAll('>', '>').replaceAll('\"', '"')\n}\n\nconst getLastMod = (filePath: string) => {\n return fs.statSync(filePath).mtime.toISOString()\n}\n\nconst collectFiles = (directoryPath: string): string[] => {\n if (!fs.existsSync(directoryPath)) {\n return []\n }\n\n return fs.readdirSync(directoryPath, { withFileTypes: true }).flatMap((entry) => {\n const entryPath = path.join(directoryPath, entry.name)\n return entry.isDirectory() ? collectFiles(entryPath) : [entryPath]\n })\n}\n\nconst resolveFilesystemRoutePathFromPageFile = (pagesRootPath: string, filePath: string) => {\n const relativeDirPath = path.relative(pagesRootPath, path.dirname(filePath)).split(path.sep).join(path.posix.sep)\n const segments = relativeDirPath ? relativeDirPath.split('/').filter(Boolean) : []\n const resolvedSegments: string[] = []\n\n for (const segment of segments) {\n if (segment === 'index') {\n continue\n }\n\n if (segment.startsWith('(') && segment.endsWith(')')) {\n continue\n }\n\n if (segment.startsWith('_') || segment.startsWith('@')) {\n return null\n }\n\n resolvedSegments.push(segment)\n }\n\n return resolvedSegments.length === 0 ? '/' : `/${resolvedSegments.join('/')}/`\n}\n\nconst collectFilesystemPageEntries = (options: { rootDir: string; siteUrl: string }) => {\n const pagesRootPath = path.join(options.rootDir, 'pages')\n const generatedPagesRootPath = path.join(pagesRootPath, GENERATED_DIRNAME)\n const entries: SitemapEntry[] = []\n\n for (const filePath of collectFiles(pagesRootPath)) {\n if (!path.basename(filePath).startsWith('+Page.')) {\n continue\n }\n\n if (filePath.startsWith(generatedPagesRootPath)) {\n continue\n }\n\n const routePath = resolveFilesystemRoutePathFromPageFile(pagesRootPath, filePath)\n\n if (!routePath) {\n continue\n }\n\n entries.push({\n lastmod: getLastMod(filePath),\n loc: normalizePublicUrl(joinPublicUrl(options.siteUrl, routePath)),\n })\n }\n\n return entries\n}\n\nconst getDocsCanonicalEntries = (options: { docsConfig: DocsConfig; rootDir: string; siteUrl: string }) => {\n const resolvedDocsConfig = resolveDocsConfig(options.docsConfig)\n const contentRootPath = path.join(options.rootDir, resolvedDocsConfig.contentDir)\n\n return resolvedDocsConfig.pages.map((page) => {\n return {\n lastmod: getLastMod(path.join(contentRootPath, page.source)),\n loc: normalizePublicUrl(joinPublicUrl(options.siteUrl, page.href)),\n } satisfies SitemapEntry\n })\n}\n\nconst getSitemapXml = (entries: SitemapEntry[]) => {\n const urlEntries = entries.map((entry) => {\n return [\n ' <url>',\n ` <loc>${xmlEscape(entry.loc)}</loc>`,\n ...(entry.lastmod ? [` <lastmod>${xmlEscape(entry.lastmod)}</lastmod>`] : []),\n ' </url>',\n ].join('\\n')\n })\n\n return [\n '<?xml version=\"1.0\" encoding=\"UTF-8\"?>',\n '<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">',\n ...urlEntries,\n '</urlset>',\n '',\n ].join('\\n')\n}\n\nconst getRobotsTxtContent = (siteUrl: string) => {\n return ['User-agent: *', 'Disallow: /cdn-cgi/', `Sitemap: ${siteUrl}/${SITEMAP_FILENAME}`].join('\\n')\n}\n\nconst getSitemapArtifacts = (options: { rootDir: string; docsConfig: DocsConfig }) => {\n const siteUrl = options.docsConfig.siteUrl?.trim() ? normalizeSiteUrl(options.docsConfig.siteUrl) : null\n\n if (!siteUrl) {\n return null\n }\n\n const filesystemPageEntries = collectFilesystemPageEntries({\n rootDir: options.rootDir,\n siteUrl,\n })\n const docsCanonicalEntries = getDocsCanonicalEntries({\n docsConfig: options.docsConfig,\n rootDir: options.rootDir,\n siteUrl,\n })\n const filesystemPageLocs = new Set(filesystemPageEntries.map((entry) => entry.loc))\n const docsCanonicalLocs = docsCanonicalEntries.map((entry) => entry.loc)\n const collidingLoc = docsCanonicalLocs.find((loc) => filesystemPageLocs.has(loc))\n\n if (collidingLoc) {\n throw new Error(\n `Nivel sitemap collision: docs canonical URL ${JSON.stringify(collidingLoc)} conflicts with a consumer filesystem page.`,\n )\n }\n\n const sitemapEntriesByLoc = new Map<string, SitemapEntry>()\n\n for (const entry of [...filesystemPageEntries, ...docsCanonicalEntries]) {\n sitemapEntriesByLoc.set(entry.loc, entry)\n }\n\n const sitemapEntries = [...sitemapEntriesByLoc.values()].sort((left, right) => {\n return left.loc.localeCompare(right.loc)\n })\n\n return {\n robotsTxt: getRobotsTxtContent(siteUrl),\n sitemapXml: getSitemapXml(sitemapEntries),\n }\n}\n\nconst writeStaticAsset = (filePath: string, contents: string) => {\n fs.mkdirSync(path.dirname(filePath), { recursive: true })\n fs.writeFileSync(filePath, contents)\n}\n\nconst createNivelSitemapPlugin = (docsConfig: DocsConfig): Plugin => {\n let resolvedBase = '/'\n let resolvedRootDir = process.cwd()\n\n const matchesRequestPath = (requestUrl: string | undefined, pathname: string) => {\n if (!requestUrl) {\n return false\n }\n\n const normalizedRequestUrl = requestUrl.split('?')[0] ?? requestUrl\n return (\n normalizedRequestUrl === pathname ||\n (resolvedBase !== '/' && normalizedRequestUrl === `${resolvedBase}${pathname.slice(1)}`)\n )\n }\n\n const getServerArtifacts = async (server: ViteDevServer) => {\n const nextDocsConfig = await loadDocsConfig({\n rootDir: server.config.root,\n loadModule: (modulePath) => server.ssrLoadModule(modulePath),\n })\n\n return getSitemapArtifacts({\n rootDir: server.config.root,\n docsConfig: nextDocsConfig,\n })\n }\n\n return {\n name: 'nivel-sitemap-plugin',\n configResolved(config) {\n resolvedBase = config.base\n resolvedRootDir = config.root\n },\n configureServer(server) {\n server.middlewares.use(async (req, res, next) => {\n const isSitemapRequest = matchesRequestPath(req.url, `/${SITEMAP_FILENAME}`)\n const isRobotsRequest = matchesRequestPath(req.url, `/${ROBOTS_FILENAME}`)\n\n if (!isSitemapRequest && !isRobotsRequest) {\n next()\n return\n }\n\n const artifacts = await getServerArtifacts(server)\n\n if (!artifacts) {\n res.statusCode = 404\n res.end()\n return\n }\n\n res.setHeader('Cache-Control', 'no-store')\n\n if (isSitemapRequest) {\n res.setHeader('Content-Type', 'application/xml')\n res.end(artifacts.sitemapXml)\n return\n }\n\n res.setHeader('Content-Type', 'text/plain')\n res.end(artifacts.robotsTxt)\n })\n },\n closeBundle() {\n if (this.environment.config.consumer !== 'client') {\n return\n }\n\n const artifacts = getSitemapArtifacts({\n rootDir: resolvedRootDir,\n docsConfig,\n })\n\n if (!artifacts) {\n return\n }\n\n const outputDirectory = path.resolve(resolvedRootDir, this.environment.config.build.outDir)\n\n writeStaticAsset(path.join(outputDirectory, SITEMAP_FILENAME), artifacts.sitemapXml)\n writeStaticAsset(path.join(outputDirectory, ROBOTS_FILENAME), artifacts.robotsTxt)\n },\n }\n}\n\nexport const createNivelSitemapPlugins = (docsConfig: DocsConfig): Plugin[] => {\n if (!docsConfig.siteUrl?.trim()) {\n return []\n }\n\n return [createNivelSitemapPlugin(docsConfig)]\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/vike/index.ts","../src/mdx/plugins/rehypeDocsHeadings.ts","../src/vike/sitemap.ts"],"sourcesContent":["export { nivelConfig as default }\n\nimport mdx from '@mdx-js/rollup'\nimport remarkGfm from 'remark-gfm'\nimport type { Config } from 'vike/types'\nimport type { PluginOption, UserConfig } from 'vite'\nimport type { DocsConfig } from '../docs/types.js'\nimport { getCodeBlockMdxPlugins } from '../mdx/code-blocks/index.js'\nimport { rehypeDocsHeadings } from '../mdx/plugins/rehypeDocsHeadings.js'\nimport { nivelPagesPlugin } from '../runtime/node/index.js'\nimport { createNivelSitemapPlugins } from './sitemap.js'\n\nprocess.env.VIKE_CRAWL ??= JSON.stringify({ git: false })\n\nconst codeBlockMdxPlugins = getCodeBlockMdxPlugins()\n\nconst viteConfig: UserConfig = {\n plugins: [\n {\n ...mdx({\n providerImportSource: '@unterberg/nivel/mdx',\n ...codeBlockMdxPlugins,\n rehypePlugins: [...codeBlockMdxPlugins.rehypePlugins, rehypeDocsHeadings],\n remarkPlugins: [remarkGfm, ...codeBlockMdxPlugins.remarkPlugins],\n }),\n enforce: 'pre',\n } as PluginOption,\n nivelPagesPlugin(),\n ],\n ssr: {\n noExternal: ['@unterberg/nivel'],\n },\n}\n\nconst getConsumerViteConfig = (docsConfig: DocsConfig) => {\n return {\n ...viteConfig,\n plugins: [...(viteConfig.plugins ?? []), ...createNivelSitemapPlugins(docsConfig)],\n } satisfies UserConfig\n}\n\nconst getDefaultConsumerDataTheme = (docsConfig: DocsConfig) => {\n const defaultPreference = docsConfig.theme?.defaultPreference ?? 'light'\n const lightThemeName = docsConfig.theme?.light ?? 'consumer-light'\n const darkThemeName = docsConfig.theme?.dark ?? 'consumer-dark'\n\n return defaultPreference === 'dark' ? darkThemeName : lightThemeName\n}\n\nconst vikeReactConfigImport = 'import:vike-react/config:default'\n\nconst nivelConfig = {\n meta: {\n docs: {\n env: {\n server: true,\n client: true,\n },\n global: true,\n },\n },\n prerender: true,\n trailingSlash: true,\n vite: viteConfig as Record<string, unknown>,\n} satisfies Config\n\nexport const createNivelVikeConfig = (docsConfig: DocsConfig) => {\n return {\n ...nivelConfig,\n title: docsConfig.siteTitle,\n description: docsConfig.siteDescription ?? `${docsConfig.siteTitle} documentation`,\n extends: [vikeReactConfigImport] as unknown as Config['extends'],\n htmlAttributes: {\n 'data-theme': getDefaultConsumerDataTheme(docsConfig),\n },\n prerender: true,\n vite: getConsumerViteConfig(docsConfig) as Record<string, unknown>,\n } as Config\n}\n","// attention: no HMR is active for this file, changes require a full engine pre-build -> dev / preview\nimport { visit } from 'unist-util-visit'\nimport { createHeadingSlugger, normalizeHeadingTitle } from '../../docs/docHeadings.js'\nimport type { ElementContentNode, ElementNode, HtmlRootNode } from '../ast.js'\n\nconst headingTags = new Set(['h1', 'h2', 'h3', 'h4', 'h5', 'h6'])\n\nconst getNodeText = (node: ElementContentNode | HtmlRootNode): string => {\n if (node.type === 'text') {\n return typeof node.value === 'string' ? node.value : ''\n }\n\n if ('children' in node) {\n return node.children.map((child) => getNodeText(child)).join('')\n }\n\n return ''\n}\n\nconst getClassNames = (value: unknown): string[] => {\n if (Array.isArray(value)) {\n return value.flatMap((entry) => getClassNames(entry))\n }\n\n if (typeof value === 'string') {\n return value.split(/\\s+/).filter(Boolean)\n }\n\n return []\n}\n\nconst createLinkIconLine = (x1: number, y1: number, x2: number, y2: number): ElementNode => {\n return {\n type: 'element',\n tagName: 'line',\n properties: { x1, y1, x2, y2 },\n children: [],\n }\n}\n\nexport const rehypeDocsHeadings = () => {\n return (tree: HtmlRootNode) => {\n const slugify = createHeadingSlugger()\n\n visit(tree, 'element', (node: ElementNode) => {\n if (!headingTags.has(node?.tagName)) {\n return\n }\n\n const title = normalizeHeadingTitle(getNodeText(node))\n if (!title) {\n return\n }\n\n node.properties ??= {}\n\n if (typeof node.properties.id !== 'string' || node.properties.id === '') {\n node.properties.id = slugify(title)\n }\n\n const classNames = getClassNames(node.properties.className)\n if (!classNames.includes('scroll-mt-32')) {\n node.properties.className = [\n ...classNames,\n 'scroll-mt-32',\n 'xl:scroll-mt-24',\n 'flex gap-2 items-center',\n 'group',\n 'relative',\n 'w-fit',\n ].join(' ')\n }\n\n // create link element with has and anchor icon\n const linkElement: ElementNode = {\n type: 'element',\n tagName: 'a',\n properties: {\n href: `#${node.properties.id}`,\n 'data-copy-heading-link': '',\n 'aria-label': `Copy link to heading: ${title}`,\n title: `Copy link to heading: ${title}`,\n className: ['docs-heading-link absolute inset-0 flex items-center justify-end text-primary-muted'],\n },\n children: [\n {\n type: 'element',\n tagName: 'svg',\n properties: {\n xmlns: 'http://www.w3.org/2000/svg',\n width: 16,\n height: 16,\n viewBox: '0 0 24 24',\n fill: 'none',\n stroke: 'currentColor',\n 'stroke-width': 2,\n 'stroke-linecap': 'round',\n 'stroke-linejoin': 'round',\n 'aria-hidden': 'true',\n className: ['size-4 hidden group-hover:block group-focus-within:block translate-x-5'],\n },\n children: [\n createLinkIconLine(4, 9, 20, 9),\n createLinkIconLine(4, 15, 20, 15),\n createLinkIconLine(10, 3, 8, 21),\n createLinkIconLine(16, 3, 14, 21),\n ],\n },\n ],\n }\n node.children.push(linkElement)\n })\n }\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\nimport type { Plugin, ViteDevServer } from 'vite'\nimport { resolveDocsConfig } from '../docs/resolveDocsConfig.js'\nimport type { DocsConfig } from '../docs/types.js'\nimport { loadDocsConfig } from '../runtime/node/loadDocsConfig.js'\n\nconst GENERATED_DIRNAME = '(nivel-generated)'\nconst SITEMAP_FILENAME = 'sitemap.xml'\nconst ROBOTS_FILENAME = 'robots.txt'\n\ntype SitemapEntry = {\n lastmod?: string\n loc: string\n}\n\nconst normalizeRoutePath = (value: string) => {\n const normalized = value.trim().replace(/^\\/+|\\/+$/g, '')\n return normalized ? `/${normalized}/` : '/'\n}\n\nconst normalizeSiteUrl = (value: string) => {\n const normalized = value.trim()\n\n if (!normalized) {\n throw new Error('Docs siteUrl must be a non-empty absolute URL when sitemap support is enabled.')\n }\n\n const url = new URL(normalized)\n\n if (url.protocol !== 'http:' && url.protocol !== 'https:') {\n throw new Error(`Docs siteUrl must use http or https. Received ${JSON.stringify(value)}.`)\n }\n\n if (url.search || url.hash) {\n throw new Error(`Docs siteUrl cannot include query strings or hashes. Received ${JSON.stringify(value)}.`)\n }\n\n const pathname = url.pathname.replace(/\\/+$/g, '')\n url.pathname = pathname || '/'\n\n return url.toString().replace(/\\/+$/g, '')\n}\n\nconst joinPublicUrl = (siteUrl: string, routePath: string) => {\n return routePath === '/' ? `${siteUrl}/` : `${siteUrl}${routePath}`\n}\n\nconst normalizePublicUrl = (value: string) => {\n const url = new URL(value)\n url.search = ''\n url.hash = ''\n url.pathname = normalizeRoutePath(url.pathname)\n return url.toString()\n}\n\nconst xmlEscape = (value: string) => {\n return value.replaceAll('&', '&').replaceAll('<', '<').replaceAll('>', '>').replaceAll('\"', '"')\n}\n\nconst getLastMod = (filePath: string) => {\n return fs.statSync(filePath).mtime.toISOString()\n}\n\nconst collectFiles = (directoryPath: string): string[] => {\n if (!fs.existsSync(directoryPath)) {\n return []\n }\n\n return fs.readdirSync(directoryPath, { withFileTypes: true }).flatMap((entry) => {\n const entryPath = path.join(directoryPath, entry.name)\n return entry.isDirectory() ? collectFiles(entryPath) : [entryPath]\n })\n}\n\nconst resolveFilesystemRoutePathFromPageFile = (pagesRootPath: string, filePath: string) => {\n const relativeDirPath = path.relative(pagesRootPath, path.dirname(filePath)).split(path.sep).join(path.posix.sep)\n const segments = relativeDirPath ? relativeDirPath.split('/').filter(Boolean) : []\n const resolvedSegments: string[] = []\n\n for (const segment of segments) {\n if (segment === 'index') {\n continue\n }\n\n if (segment.startsWith('(') && segment.endsWith(')')) {\n continue\n }\n\n if (segment.startsWith('_') || segment.startsWith('@')) {\n return null\n }\n\n resolvedSegments.push(segment)\n }\n\n return resolvedSegments.length === 0 ? '/' : `/${resolvedSegments.join('/')}/`\n}\n\nconst collectFilesystemPageEntries = (options: { rootDir: string; siteUrl: string }) => {\n const pagesRootPath = path.join(options.rootDir, 'pages')\n const generatedPagesRootPath = path.join(pagesRootPath, GENERATED_DIRNAME)\n const entries: SitemapEntry[] = []\n\n for (const filePath of collectFiles(pagesRootPath)) {\n if (!path.basename(filePath).startsWith('+Page.')) {\n continue\n }\n\n if (filePath.startsWith(generatedPagesRootPath)) {\n continue\n }\n\n const routePath = resolveFilesystemRoutePathFromPageFile(pagesRootPath, filePath)\n\n if (!routePath) {\n continue\n }\n\n entries.push({\n lastmod: getLastMod(filePath),\n loc: normalizePublicUrl(joinPublicUrl(options.siteUrl, routePath)),\n })\n }\n\n return entries\n}\n\nconst getDocsCanonicalEntries = (options: { docsConfig: DocsConfig; rootDir: string; siteUrl: string }) => {\n const resolvedDocsConfig = resolveDocsConfig(options.docsConfig)\n const contentRootPath = path.join(options.rootDir, resolvedDocsConfig.contentDir)\n\n return resolvedDocsConfig.pages.map((page) => {\n return {\n lastmod: getLastMod(path.join(contentRootPath, page.source)),\n loc: normalizePublicUrl(joinPublicUrl(options.siteUrl, page.href)),\n } satisfies SitemapEntry\n })\n}\n\nconst getSitemapXml = (entries: SitemapEntry[]) => {\n const urlEntries = entries.map((entry) => {\n return [\n ' <url>',\n ` <loc>${xmlEscape(entry.loc)}</loc>`,\n ...(entry.lastmod ? [` <lastmod>${xmlEscape(entry.lastmod)}</lastmod>`] : []),\n ' </url>',\n ].join('\\n')\n })\n\n return [\n '<?xml version=\"1.0\" encoding=\"UTF-8\"?>',\n '<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">',\n ...urlEntries,\n '</urlset>',\n '',\n ].join('\\n')\n}\n\nconst getRobotsTxtContent = (siteUrl: string) => {\n return ['User-agent: *', 'Disallow: /cdn-cgi/', `Sitemap: ${siteUrl}/${SITEMAP_FILENAME}`].join('\\n')\n}\n\nconst getSitemapArtifacts = (options: { rootDir: string; docsConfig: DocsConfig }) => {\n const siteUrl = options.docsConfig.siteUrl?.trim() ? normalizeSiteUrl(options.docsConfig.siteUrl) : null\n\n if (!siteUrl) {\n return null\n }\n\n const filesystemPageEntries = collectFilesystemPageEntries({\n rootDir: options.rootDir,\n siteUrl,\n })\n const docsCanonicalEntries = getDocsCanonicalEntries({\n docsConfig: options.docsConfig,\n rootDir: options.rootDir,\n siteUrl,\n })\n const filesystemPageLocs = new Set(filesystemPageEntries.map((entry) => entry.loc))\n const docsCanonicalLocs = docsCanonicalEntries.map((entry) => entry.loc)\n const collidingLoc = docsCanonicalLocs.find((loc) => filesystemPageLocs.has(loc))\n\n if (collidingLoc) {\n throw new Error(\n `Nivel sitemap collision: docs canonical URL ${JSON.stringify(collidingLoc)} conflicts with a consumer filesystem page.`,\n )\n }\n\n const sitemapEntriesByLoc = new Map<string, SitemapEntry>()\n\n for (const entry of [...filesystemPageEntries, ...docsCanonicalEntries]) {\n sitemapEntriesByLoc.set(entry.loc, entry)\n }\n\n const sitemapEntries = [...sitemapEntriesByLoc.values()].sort((left, right) => {\n return left.loc.localeCompare(right.loc)\n })\n\n return {\n robotsTxt: getRobotsTxtContent(siteUrl),\n sitemapXml: getSitemapXml(sitemapEntries),\n }\n}\n\nconst writeStaticAsset = (filePath: string, contents: string) => {\n fs.mkdirSync(path.dirname(filePath), { recursive: true })\n fs.writeFileSync(filePath, contents)\n}\n\nconst createNivelSitemapPlugin = (docsConfig: DocsConfig): Plugin => {\n let resolvedBase = '/'\n let resolvedRootDir = process.cwd()\n\n const matchesRequestPath = (requestUrl: string | undefined, pathname: string) => {\n if (!requestUrl) {\n return false\n }\n\n const normalizedRequestUrl = requestUrl.split('?')[0] ?? requestUrl\n return (\n normalizedRequestUrl === pathname ||\n (resolvedBase !== '/' && normalizedRequestUrl === `${resolvedBase}${pathname.slice(1)}`)\n )\n }\n\n const getServerArtifacts = async (server: ViteDevServer) => {\n const nextDocsConfig = await loadDocsConfig({\n rootDir: server.config.root,\n loadModule: (modulePath) => server.ssrLoadModule(modulePath),\n })\n\n return getSitemapArtifacts({\n rootDir: server.config.root,\n docsConfig: nextDocsConfig,\n })\n }\n\n return {\n name: 'nivel-sitemap-plugin',\n configResolved(config) {\n resolvedBase = config.base\n resolvedRootDir = config.root\n },\n configureServer(server) {\n server.middlewares.use(async (req, res, next) => {\n const isSitemapRequest = matchesRequestPath(req.url, `/${SITEMAP_FILENAME}`)\n const isRobotsRequest = matchesRequestPath(req.url, `/${ROBOTS_FILENAME}`)\n\n if (!isSitemapRequest && !isRobotsRequest) {\n next()\n return\n }\n\n const artifacts = await getServerArtifacts(server)\n\n if (!artifacts) {\n res.statusCode = 404\n res.end()\n return\n }\n\n res.setHeader('Cache-Control', 'no-store')\n\n if (isSitemapRequest) {\n res.setHeader('Content-Type', 'application/xml')\n res.end(artifacts.sitemapXml)\n return\n }\n\n res.setHeader('Content-Type', 'text/plain')\n res.end(artifacts.robotsTxt)\n })\n },\n closeBundle() {\n if (this.environment.config.consumer !== 'client') {\n return\n }\n\n const artifacts = getSitemapArtifacts({\n rootDir: resolvedRootDir,\n docsConfig,\n })\n\n if (!artifacts) {\n return\n }\n\n const outputDirectory = path.resolve(resolvedRootDir, this.environment.config.build.outDir)\n\n writeStaticAsset(path.join(outputDirectory, SITEMAP_FILENAME), artifacts.sitemapXml)\n writeStaticAsset(path.join(outputDirectory, ROBOTS_FILENAME), artifacts.robotsTxt)\n },\n }\n}\n\nexport const createNivelSitemapPlugins = (docsConfig: DocsConfig): Plugin[] => {\n if (!docsConfig.siteUrl?.trim()) {\n return []\n }\n\n return [createNivelSitemapPlugin(docsConfig)]\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAEA,OAAO,SAAS;AAChB,OAAO,eAAe;;;ACFtB,SAAS,aAAa;AAItB,IAAM,cAAc,oBAAI,IAAI,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI,CAAC;AAEhE,IAAM,cAAc,CAAC,SAAoD;AACvE,MAAI,KAAK,SAAS,QAAQ;AACxB,WAAO,OAAO,KAAK,UAAU,WAAW,KAAK,QAAQ;AAAA,EACvD;AAEA,MAAI,cAAc,MAAM;AACtB,WAAO,KAAK,SAAS,IAAI,CAAC,UAAU,YAAY,KAAK,CAAC,EAAE,KAAK,EAAE;AAAA,EACjE;AAEA,SAAO;AACT;AAEA,IAAM,gBAAgB,CAAC,UAA6B;AAClD,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,WAAO,MAAM,QAAQ,CAAC,UAAU,cAAc,KAAK,CAAC;AAAA,EACtD;AAEA,MAAI,OAAO,UAAU,UAAU;AAC7B,WAAO,MAAM,MAAM,KAAK,EAAE,OAAO,OAAO;AAAA,EAC1C;AAEA,SAAO,CAAC;AACV;AAEA,IAAM,qBAAqB,CAAC,IAAY,IAAY,IAAY,OAA4B;AAC1F,SAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,YAAY,EAAE,IAAI,IAAI,IAAI,GAAG;AAAA,IAC7B,UAAU,CAAC;AAAA,EACb;AACF;AAEO,IAAM,qBAAqB,MAAM;AACtC,SAAO,CAAC,SAAuB;AAC7B,UAAM,UAAU,qBAAqB;AAErC,UAAM,MAAM,WAAW,CAAC,SAAsB;AAC5C,UAAI,CAAC,YAAY,IAAI,MAAM,OAAO,GAAG;AACnC;AAAA,MACF;AAEA,YAAM,QAAQ,sBAAsB,YAAY,IAAI,CAAC;AACrD,UAAI,CAAC,OAAO;AACV;AAAA,MACF;AAEA,WAAK,eAAe,CAAC;AAErB,UAAI,OAAO,KAAK,WAAW,OAAO,YAAY,KAAK,WAAW,OAAO,IAAI;AACvE,aAAK,WAAW,KAAK,QAAQ,KAAK;AAAA,MACpC;AAEA,YAAM,aAAa,cAAc,KAAK,WAAW,SAAS;AAC1D,UAAI,CAAC,WAAW,SAAS,cAAc,GAAG;AACxC,aAAK,WAAW,YAAY;AAAA,UAC1B,GAAG;AAAA,UACH;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF,EAAE,KAAK,GAAG;AAAA,MACZ;AAGA,YAAM,cAA2B;AAAA,QAC/B,MAAM;AAAA,QACN,SAAS;AAAA,QACT,YAAY;AAAA,UACV,MAAM,IAAI,KAAK,WAAW,EAAE;AAAA,UAC5B,0BAA0B;AAAA,UAC1B,cAAc,yBAAyB,KAAK;AAAA,UAC5C,OAAO,yBAAyB,KAAK;AAAA,UACrC,WAAW,CAAC,qFAAqF;AAAA,QACnG;AAAA,QACA,UAAU;AAAA,UACR;AAAA,YACE,MAAM;AAAA,YACN,SAAS;AAAA,YACT,YAAY;AAAA,cACV,OAAO;AAAA,cACP,OAAO;AAAA,cACP,QAAQ;AAAA,cACR,SAAS;AAAA,cACT,MAAM;AAAA,cACN,QAAQ;AAAA,cACR,gBAAgB;AAAA,cAChB,kBAAkB;AAAA,cAClB,mBAAmB;AAAA,cACnB,eAAe;AAAA,cACf,WAAW,CAAC,wEAAwE;AAAA,YACtF;AAAA,YACA,UAAU;AAAA,cACR,mBAAmB,GAAG,GAAG,IAAI,CAAC;AAAA,cAC9B,mBAAmB,GAAG,IAAI,IAAI,EAAE;AAAA,cAChC,mBAAmB,IAAI,GAAG,GAAG,EAAE;AAAA,cAC/B,mBAAmB,IAAI,GAAG,IAAI,EAAE;AAAA,YAClC;AAAA,UACF;AAAA,QACF;AAAA,MACF;AACA,WAAK,SAAS,KAAK,WAAW;AAAA,IAChC,CAAC;AAAA,EACH;AACF;;;ACjHA,OAAO,QAAQ;AACf,OAAO,UAAU;AAMjB,IAAM,oBAAoB;AAC1B,IAAM,mBAAmB;AACzB,IAAM,kBAAkB;AAOxB,IAAM,qBAAqB,CAAC,UAAkB;AAC5C,QAAM,aAAa,MAAM,KAAK,EAAE,QAAQ,cAAc,EAAE;AACxD,SAAO,aAAa,IAAI,UAAU,MAAM;AAC1C;AAEA,IAAM,mBAAmB,CAAC,UAAkB;AAC1C,QAAM,aAAa,MAAM,KAAK;AAE9B,MAAI,CAAC,YAAY;AACf,UAAM,IAAI,MAAM,gFAAgF;AAAA,EAClG;AAEA,QAAM,MAAM,IAAI,IAAI,UAAU;AAE9B,MAAI,IAAI,aAAa,WAAW,IAAI,aAAa,UAAU;AACzD,UAAM,IAAI,MAAM,iDAAiD,KAAK,UAAU,KAAK,CAAC,GAAG;AAAA,EAC3F;AAEA,MAAI,IAAI,UAAU,IAAI,MAAM;AAC1B,UAAM,IAAI,MAAM,iEAAiE,KAAK,UAAU,KAAK,CAAC,GAAG;AAAA,EAC3G;AAEA,QAAM,WAAW,IAAI,SAAS,QAAQ,SAAS,EAAE;AACjD,MAAI,WAAW,YAAY;AAE3B,SAAO,IAAI,SAAS,EAAE,QAAQ,SAAS,EAAE;AAC3C;AAEA,IAAM,gBAAgB,CAAC,SAAiB,cAAsB;AAC5D,SAAO,cAAc,MAAM,GAAG,OAAO,MAAM,GAAG,OAAO,GAAG,SAAS;AACnE;AAEA,IAAM,qBAAqB,CAAC,UAAkB;AAC5C,QAAM,MAAM,IAAI,IAAI,KAAK;AACzB,MAAI,SAAS;AACb,MAAI,OAAO;AACX,MAAI,WAAW,mBAAmB,IAAI,QAAQ;AAC9C,SAAO,IAAI,SAAS;AACtB;AAEA,IAAM,YAAY,CAAC,UAAkB;AACnC,SAAO,MAAM,WAAW,KAAK,OAAO,EAAE,WAAW,KAAK,MAAM,EAAE,WAAW,KAAK,MAAM,EAAE,WAAW,KAAK,QAAQ;AAChH;AAEA,IAAM,aAAa,CAAC,aAAqB;AACvC,SAAO,GAAG,SAAS,QAAQ,EAAE,MAAM,YAAY;AACjD;AAEA,IAAM,eAAe,CAAC,kBAAoC;AACxD,MAAI,CAAC,GAAG,WAAW,aAAa,GAAG;AACjC,WAAO,CAAC;AAAA,EACV;AAEA,SAAO,GAAG,YAAY,eAAe,EAAE,eAAe,KAAK,CAAC,EAAE,QAAQ,CAAC,UAAU;AAC/E,UAAM,YAAY,KAAK,KAAK,eAAe,MAAM,IAAI;AACrD,WAAO,MAAM,YAAY,IAAI,aAAa,SAAS,IAAI,CAAC,SAAS;AAAA,EACnE,CAAC;AACH;AAEA,IAAM,yCAAyC,CAAC,eAAuB,aAAqB;AAC1F,QAAM,kBAAkB,KAAK,SAAS,eAAe,KAAK,QAAQ,QAAQ,CAAC,EAAE,MAAM,KAAK,GAAG,EAAE,KAAK,KAAK,MAAM,GAAG;AAChH,QAAM,WAAW,kBAAkB,gBAAgB,MAAM,GAAG,EAAE,OAAO,OAAO,IAAI,CAAC;AACjF,QAAM,mBAA6B,CAAC;AAEpC,aAAW,WAAW,UAAU;AAC9B,QAAI,YAAY,SAAS;AACvB;AAAA,IACF;AAEA,QAAI,QAAQ,WAAW,GAAG,KAAK,QAAQ,SAAS,GAAG,GAAG;AACpD;AAAA,IACF;AAEA,QAAI,QAAQ,WAAW,GAAG,KAAK,QAAQ,WAAW,GAAG,GAAG;AACtD,aAAO;AAAA,IACT;AAEA,qBAAiB,KAAK,OAAO;AAAA,EAC/B;AAEA,SAAO,iBAAiB,WAAW,IAAI,MAAM,IAAI,iBAAiB,KAAK,GAAG,CAAC;AAC7E;AAEA,IAAM,+BAA+B,CAAC,YAAkD;AACtF,QAAM,gBAAgB,KAAK,KAAK,QAAQ,SAAS,OAAO;AACxD,QAAM,yBAAyB,KAAK,KAAK,eAAe,iBAAiB;AACzE,QAAM,UAA0B,CAAC;AAEjC,aAAW,YAAY,aAAa,aAAa,GAAG;AAClD,QAAI,CAAC,KAAK,SAAS,QAAQ,EAAE,WAAW,QAAQ,GAAG;AACjD;AAAA,IACF;AAEA,QAAI,SAAS,WAAW,sBAAsB,GAAG;AAC/C;AAAA,IACF;AAEA,UAAM,YAAY,uCAAuC,eAAe,QAAQ;AAEhF,QAAI,CAAC,WAAW;AACd;AAAA,IACF;AAEA,YAAQ,KAAK;AAAA,MACX,SAAS,WAAW,QAAQ;AAAA,MAC5B,KAAK,mBAAmB,cAAc,QAAQ,SAAS,SAAS,CAAC;AAAA,IACnE,CAAC;AAAA,EACH;AAEA,SAAO;AACT;AAEA,IAAM,0BAA0B,CAAC,YAA0E;AACzG,QAAM,qBAAqB,kBAAkB,QAAQ,UAAU;AAC/D,QAAM,kBAAkB,KAAK,KAAK,QAAQ,SAAS,mBAAmB,UAAU;AAEhF,SAAO,mBAAmB,MAAM,IAAI,CAAC,SAAS;AAC5C,WAAO;AAAA,MACL,SAAS,WAAW,KAAK,KAAK,iBAAiB,KAAK,MAAM,CAAC;AAAA,MAC3D,KAAK,mBAAmB,cAAc,QAAQ,SAAS,KAAK,IAAI,CAAC;AAAA,IACnE;AAAA,EACF,CAAC;AACH;AAEA,IAAM,gBAAgB,CAAC,YAA4B;AACjD,QAAM,aAAa,QAAQ,IAAI,CAAC,UAAU;AACxC,WAAO;AAAA,MACL;AAAA,MACA,YAAY,UAAU,MAAM,GAAG,CAAC;AAAA,MAChC,GAAI,MAAM,UAAU,CAAC,gBAAgB,UAAU,MAAM,OAAO,CAAC,YAAY,IAAI,CAAC;AAAA,MAC9E;AAAA,IACF,EAAE,KAAK,IAAI;AAAA,EACb,CAAC;AAED,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,GAAG;AAAA,IACH;AAAA,IACA;AAAA,EACF,EAAE,KAAK,IAAI;AACb;AAEA,IAAM,sBAAsB,CAAC,YAAoB;AAC/C,SAAO,CAAC,iBAAiB,uBAAuB,YAAY,OAAO,IAAI,gBAAgB,EAAE,EAAE,KAAK,IAAI;AACtG;AAEA,IAAM,sBAAsB,CAAC,YAAyD;AACpF,QAAM,UAAU,QAAQ,WAAW,SAAS,KAAK,IAAI,iBAAiB,QAAQ,WAAW,OAAO,IAAI;AAEpG,MAAI,CAAC,SAAS;AACZ,WAAO;AAAA,EACT;AAEA,QAAM,wBAAwB,6BAA6B;AAAA,IACzD,SAAS,QAAQ;AAAA,IACjB;AAAA,EACF,CAAC;AACD,QAAM,uBAAuB,wBAAwB;AAAA,IACnD,YAAY,QAAQ;AAAA,IACpB,SAAS,QAAQ;AAAA,IACjB;AAAA,EACF,CAAC;AACD,QAAM,qBAAqB,IAAI,IAAI,sBAAsB,IAAI,CAAC,UAAU,MAAM,GAAG,CAAC;AAClF,QAAM,oBAAoB,qBAAqB,IAAI,CAAC,UAAU,MAAM,GAAG;AACvE,QAAM,eAAe,kBAAkB,KAAK,CAAC,QAAQ,mBAAmB,IAAI,GAAG,CAAC;AAEhF,MAAI,cAAc;AAChB,UAAM,IAAI;AAAA,MACR,+CAA+C,KAAK,UAAU,YAAY,CAAC;AAAA,IAC7E;AAAA,EACF;AAEA,QAAM,sBAAsB,oBAAI,IAA0B;AAE1D,aAAW,SAAS,CAAC,GAAG,uBAAuB,GAAG,oBAAoB,GAAG;AACvE,wBAAoB,IAAI,MAAM,KAAK,KAAK;AAAA,EAC1C;AAEA,QAAM,iBAAiB,CAAC,GAAG,oBAAoB,OAAO,CAAC,EAAE,KAAK,CAAC,MAAM,UAAU;AAC7E,WAAO,KAAK,IAAI,cAAc,MAAM,GAAG;AAAA,EACzC,CAAC;AAED,SAAO;AAAA,IACL,WAAW,oBAAoB,OAAO;AAAA,IACtC,YAAY,cAAc,cAAc;AAAA,EAC1C;AACF;AAEA,IAAM,mBAAmB,CAAC,UAAkB,aAAqB;AAC/D,KAAG,UAAU,KAAK,QAAQ,QAAQ,GAAG,EAAE,WAAW,KAAK,CAAC;AACxD,KAAG,cAAc,UAAU,QAAQ;AACrC;AAEA,IAAM,2BAA2B,CAAC,eAAmC;AACnE,MAAI,eAAe;AACnB,MAAI,kBAAkB,QAAQ,IAAI;AAElC,QAAM,qBAAqB,CAAC,YAAgC,aAAqB;AAC/E,QAAI,CAAC,YAAY;AACf,aAAO;AAAA,IACT;AAEA,UAAM,uBAAuB,WAAW,MAAM,GAAG,EAAE,CAAC,KAAK;AACzD,WACE,yBAAyB,YACxB,iBAAiB,OAAO,yBAAyB,GAAG,YAAY,GAAG,SAAS,MAAM,CAAC,CAAC;AAAA,EAEzF;AAEA,QAAM,qBAAqB,OAAO,WAA0B;AAC1D,UAAM,iBAAiB,MAAM,eAAe;AAAA,MAC1C,SAAS,OAAO,OAAO;AAAA,MACvB,YAAY,CAAC,eAAe,OAAO,cAAc,UAAU;AAAA,IAC7D,CAAC;AAED,WAAO,oBAAoB;AAAA,MACzB,SAAS,OAAO,OAAO;AAAA,MACvB,YAAY;AAAA,IACd,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL,MAAM;AAAA,IACN,eAAe,QAAQ;AACrB,qBAAe,OAAO;AACtB,wBAAkB,OAAO;AAAA,IAC3B;AAAA,IACA,gBAAgB,QAAQ;AACtB,aAAO,YAAY,IAAI,OAAO,KAAK,KAAK,SAAS;AAC/C,cAAM,mBAAmB,mBAAmB,IAAI,KAAK,IAAI,gBAAgB,EAAE;AAC3E,cAAM,kBAAkB,mBAAmB,IAAI,KAAK,IAAI,eAAe,EAAE;AAEzE,YAAI,CAAC,oBAAoB,CAAC,iBAAiB;AACzC,eAAK;AACL;AAAA,QACF;AAEA,cAAM,YAAY,MAAM,mBAAmB,MAAM;AAEjD,YAAI,CAAC,WAAW;AACd,cAAI,aAAa;AACjB,cAAI,IAAI;AACR;AAAA,QACF;AAEA,YAAI,UAAU,iBAAiB,UAAU;AAEzC,YAAI,kBAAkB;AACpB,cAAI,UAAU,gBAAgB,iBAAiB;AAC/C,cAAI,IAAI,UAAU,UAAU;AAC5B;AAAA,QACF;AAEA,YAAI,UAAU,gBAAgB,YAAY;AAC1C,YAAI,IAAI,UAAU,SAAS;AAAA,MAC7B,CAAC;AAAA,IACH;AAAA,IACA,cAAc;AACZ,UAAI,KAAK,YAAY,OAAO,aAAa,UAAU;AACjD;AAAA,MACF;AAEA,YAAM,YAAY,oBAAoB;AAAA,QACpC,SAAS;AAAA,QACT;AAAA,MACF,CAAC;AAED,UAAI,CAAC,WAAW;AACd;AAAA,MACF;AAEA,YAAM,kBAAkB,KAAK,QAAQ,iBAAiB,KAAK,YAAY,OAAO,MAAM,MAAM;AAE1F,uBAAiB,KAAK,KAAK,iBAAiB,gBAAgB,GAAG,UAAU,UAAU;AACnF,uBAAiB,KAAK,KAAK,iBAAiB,eAAe,GAAG,UAAU,SAAS;AAAA,IACnF;AAAA,EACF;AACF;AAEO,IAAM,4BAA4B,CAAC,eAAqC;AAC7E,MAAI,CAAC,WAAW,SAAS,KAAK,GAAG;AAC/B,WAAO,CAAC;AAAA,EACV;AAEA,SAAO,CAAC,yBAAyB,UAAU,CAAC;AAC9C;;;AFlSA,QAAQ,IAAI,eAAe,KAAK,UAAU,EAAE,KAAK,MAAM,CAAC;AAExD,IAAM,sBAAsB,uBAAuB;AAEnD,IAAM,aAAyB;AAAA,EAC7B,SAAS;AAAA,IACP;AAAA,MACE,GAAG,IAAI;AAAA,QACL,sBAAsB;AAAA,QACtB,GAAG;AAAA,QACH,eAAe,CAAC,GAAG,oBAAoB,eAAe,kBAAkB;AAAA,QACxE,eAAe,CAAC,WAAW,GAAG,oBAAoB,aAAa;AAAA,MACjE,CAAC;AAAA,MACD,SAAS;AAAA,IACX;AAAA,IACA,iBAAiB;AAAA,EACnB;AAAA,EACA,KAAK;AAAA,IACH,YAAY,CAAC,kBAAkB;AAAA,EACjC;AACF;AAEA,IAAM,wBAAwB,CAAC,eAA2B;AACxD,SAAO;AAAA,IACL,GAAG;AAAA,IACH,SAAS,CAAC,GAAI,WAAW,WAAW,CAAC,GAAI,GAAG,0BAA0B,UAAU,CAAC;AAAA,EACnF;AACF;AAEA,IAAM,8BAA8B,CAAC,eAA2B;AAC9D,QAAM,oBAAoB,WAAW,OAAO,qBAAqB;AACjE,QAAM,iBAAiB,WAAW,OAAO,SAAS;AAClD,QAAM,gBAAgB,WAAW,OAAO,QAAQ;AAEhD,SAAO,sBAAsB,SAAS,gBAAgB;AACxD;AAEA,IAAM,wBAAwB;AAE9B,IAAM,cAAc;AAAA,EAClB,MAAM;AAAA,IACJ,MAAM;AAAA,MACJ,KAAK;AAAA,QACH,QAAQ;AAAA,QACR,QAAQ;AAAA,MACV;AAAA,MACA,QAAQ;AAAA,IACV;AAAA,EACF;AAAA,EACA,WAAW;AAAA,EACX,eAAe;AAAA,EACf,MAAM;AACR;AAEO,IAAM,wBAAwB,CAAC,eAA2B;AAC/D,SAAO;AAAA,IACL,GAAG;AAAA,IACH,OAAO,WAAW;AAAA,IAClB,aAAa,WAAW,mBAAmB,GAAG,WAAW,SAAS;AAAA,IAClE,SAAS,CAAC,qBAAqB;AAAA,IAC/B,gBAAgB;AAAA,MACd,cAAc,4BAA4B,UAAU;AAAA,IACtD;AAAA,IACA,WAAW;AAAA,IACX,MAAM,sBAAsB,UAAU;AAAA,EACxC;AACF;","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@unterberg/nivel",
|
|
3
|
-
"version": "0.1
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"repository": {
|
|
@@ -32,9 +32,9 @@
|
|
|
32
32
|
"types": "./dist/index.d.ts",
|
|
33
33
|
"import": "./dist/index.js"
|
|
34
34
|
},
|
|
35
|
-
"./
|
|
36
|
-
"types": "./dist/
|
|
37
|
-
"import": "./dist/
|
|
35
|
+
"./icons": {
|
|
36
|
+
"types": "./dist/icons.d.ts",
|
|
37
|
+
"import": "./dist/icons.js"
|
|
38
38
|
},
|
|
39
39
|
"./vike": {
|
|
40
40
|
"types": "./dist/vike.d.ts",
|
|
@@ -72,10 +72,11 @@
|
|
|
72
72
|
"./tailwind-sources.css": "./tailwind-sources.css"
|
|
73
73
|
},
|
|
74
74
|
"scripts": {
|
|
75
|
-
"
|
|
76
|
-
"
|
|
77
|
-
"
|
|
78
|
-
"
|
|
75
|
+
"generate:icons": "node ./scripts/generate-icons-entry.mjs",
|
|
76
|
+
"build": "pnpm generate:icons && tsup",
|
|
77
|
+
"dev": "pnpm generate:icons && tsup --watch",
|
|
78
|
+
"test": "pnpm generate:icons && node --import tsx --test tests/*.test.mjs tests/*.test.ts",
|
|
79
|
+
"typecheck": "pnpm generate:icons && tsc --noEmit -p tsconfig.json"
|
|
79
80
|
},
|
|
80
81
|
"dependencies": {
|
|
81
82
|
"@brillout/shiki-transformers": "^4.0.2",
|
|
@@ -87,7 +88,7 @@
|
|
|
87
88
|
"daisyui": "^5.5.19",
|
|
88
89
|
"detype": "^2.0.7",
|
|
89
90
|
"estree-util-value-to-estree": "^3.5.0",
|
|
90
|
-
"lucide-react": "
|
|
91
|
+
"lucide-react": "^1.8.0",
|
|
91
92
|
"mdast-util-mdx-jsx": "^3.2.0",
|
|
92
93
|
"npm-to-yarn": "^3.0.1",
|
|
93
94
|
"rehype-pretty-code": "^0.14.3",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/runtime/client/components/SearchModal.tsx","../src/runtime/client/search.ts"],"sourcesContent":["import { ArrowRightFromLine, MessageCircleQuestion, TriangleAlert } from 'lucide-react'\nimport type { RefObject } from 'react'\nimport { useEffect, useRef, useState } from 'react'\nimport { createPortal } from 'react-dom'\nimport { usePageContext } from 'vike-react/usePageContext'\nimport { withSiteBaseUrl } from '../../../shared/assets.js'\nimport { useDocsGlobalContext } from '../docsGlobalContext.js'\nimport { searchAlgoliaIndex } from '../search.js'\nimport { useDocsSearchActions, useDocsSearchStore } from '../store/runtime-store.js'\nimport { LayoutComponent } from './LayoutComponent.js'\n\nconst MIN_QUERY_LENGTH = 2\nconst QUERY_DEBOUNCE_MS = 150\n\nconst useDebouncedValue = (value: string, delayMs: number) => {\n const [debouncedValue, setDebouncedValue] = useState(value)\n\n useEffect(() => {\n const timeoutId = window.setTimeout(() => {\n setDebouncedValue(value)\n }, delayMs)\n\n return () => {\n window.clearTimeout(timeoutId)\n }\n }, [delayMs, value])\n\n return debouncedValue\n}\n\ntype SearchResults = Awaited<ReturnType<typeof searchAlgoliaIndex>>\n\nconst useSearchResults = (options: { canSearch: boolean; isOpen: boolean; normalizedQuery: string }) => {\n const docs = useDocsGlobalContext()\n const { canSearch, isOpen, normalizedQuery } = options\n const [results, setResults] = useState<SearchResults>([])\n const [isLoading, setIsLoading] = useState(false)\n const [isError, setIsError] = useState(false)\n\n useEffect(() => {\n if (!isOpen || !canSearch) {\n setResults([])\n setIsLoading(false)\n setIsError(false)\n return\n }\n\n const abortController = new AbortController()\n\n setIsLoading(true)\n setIsError(false)\n\n searchAlgoliaIndex({\n config: docs.algolia,\n query: normalizedQuery,\n signal: abortController.signal,\n })\n .then((nextResults) => {\n if (abortController.signal.aborted) {\n return\n }\n\n setResults(nextResults)\n })\n .catch((error: unknown) => {\n if (abortController.signal.aborted) {\n return\n }\n\n const isAbortError = error instanceof DOMException && error.name === 'AbortError'\n\n if (!isAbortError) {\n setResults([])\n setIsError(true)\n }\n })\n .finally(() => {\n if (!abortController.signal.aborted) {\n setIsLoading(false)\n }\n })\n\n return () => {\n abortController.abort()\n }\n }, [canSearch, docs.algolia, isOpen, normalizedQuery])\n\n return {\n results,\n isLoading,\n isError,\n }\n}\n\nexport const SearchModal = () => {\n const docs = useDocsGlobalContext()\n const { urlPathname } = usePageContext()\n const { close, setQuery } = useDocsSearchActions()\n const isOpen = useDocsSearchStore((state) => state.isOpen)\n const query = useDocsSearchStore((state) => state.query)\n const containerRef = useRef<HTMLDivElement | null>(null)\n const suggestionBoxRef = useRef<HTMLDivElement | null>(null)\n const previousPathnameRef = useRef(urlPathname)\n const debouncedQuery = useDebouncedValue(query, QUERY_DEBOUNCE_MS)\n const normalizedQuery = debouncedQuery.trim()\n const canSearch = Boolean(docs.algolia) && normalizedQuery.length >= MIN_QUERY_LENGTH\n const { isError, isLoading, results } = useSearchResults({\n canSearch,\n isOpen,\n normalizedQuery,\n })\n\n useEffect(() => {\n if (previousPathnameRef.current !== urlPathname) {\n close()\n previousPathnameRef.current = urlPathname\n }\n }, [close, urlPathname])\n\n useEffect(() => {\n if (!isOpen) {\n return\n }\n\n const handlePointerDown = (event: PointerEvent) => {\n const target = event.target as Node\n\n if (!containerRef.current?.contains(target) && !suggestionBoxRef.current?.contains(target)) {\n close()\n }\n }\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n close()\n }\n }\n\n document.addEventListener('pointerdown', handlePointerDown)\n document.addEventListener('keydown', handleKeyDown)\n\n return () => {\n document.removeEventListener('pointerdown', handlePointerDown)\n document.removeEventListener('keydown', handleKeyDown)\n }\n }, [close, isOpen])\n\n if (!docs.algolia) {\n return null\n }\n\n return (\n <div ref={containerRef} className=\"relative\">\n <SearchSuggestionBox\n contentRef={suggestionBoxRef}\n isError={isError}\n isLoading={isLoading}\n isOpen={isOpen}\n onClose={close}\n onQueryChange={setQuery}\n query={query}\n results={results}\n />\n </div>\n )\n}\n\ntype SearchSuggestionBoxProps = {\n contentRef: RefObject<HTMLDivElement | null>\n isError: boolean\n isLoading: boolean\n isOpen: boolean\n onClose: () => void\n onQueryChange: (query: string) => void\n query: string\n results: SearchResults\n}\n\nconst SearchSuggestionBox = ({\n contentRef,\n isError,\n isLoading,\n isOpen,\n onClose,\n onQueryChange,\n query,\n results,\n}: SearchSuggestionBoxProps) => {\n const inputRef = useRef<HTMLInputElement | null>(null)\n const normalizedQuery = query.trim()\n const canSearch = normalizedQuery.length >= MIN_QUERY_LENGTH\n\n useEffect(() => {\n if (!isOpen) {\n return\n }\n\n const frameId = window.requestAnimationFrame(() => {\n inputRef.current?.focus()\n inputRef.current?.setSelectionRange(query.length, query.length)\n })\n\n return () => {\n window.cancelAnimationFrame(frameId)\n }\n }, [isOpen, query.length])\n\n if (!isOpen || typeof document === 'undefined') {\n return null\n }\n\n return createPortal(\n <div className=\"fixed inset-0 z-30 h-full w-full bg-base-100/50 backdrop-blur-lg\">\n <div className=\"absolute inset-0 z-1 bg-linear-to-b from-base-100 via-base-100 via-25% to-primary-muted-superlight dark:bg-linear-to-t\" />\n <LayoutComponent\n ref={contentRef}\n $size=\"sm\"\n className=\"mt-5 relative z-2 rounded-box bg-base-100/70 p-6 pt-6 shadow-lg shadow-primary-muted-light\"\n >\n <input\n placeholder=\"Search docs\"\n ref={inputRef}\n type=\"text\"\n className=\"input input-primary input-xl w-full\"\n value={query}\n onChange={(event) => onQueryChange(event.target.value)}\n />\n <div className=\"flex h-7 items-center px-4 text-xs text-base-muted\">\n {isLoading ? (\n <span className=\"flex items-center gap-1\">\n <span className=\"loading loading-dots loading-xs\" />\n Searching...\n </span>\n ) : normalizedQuery ? null : (\n <span className=\"flex items-center gap-1\">\n <MessageCircleQuestion className=\"h-3 w-3 shrink-0\" />\n Type at least {MIN_QUERY_LENGTH} characters.\n </span>\n )}\n </div>\n {normalizedQuery ? (\n isError ? (\n <div className=\"flex items-center gap-2 rounded-box border border-warning/40 bg-base-100 p-4 text-sm text-base-muted shadow-md shadow-primary-muted-light\">\n <TriangleAlert className=\"h-4 w-4 shrink-0 text-warning\" />\n Search is temporarily unavailable.\n </div>\n ) : !canSearch ? (\n <div className=\"text-sm text-base-muted\">Keep typing to search.</div>\n ) : !isLoading && results.length === 0 ? (\n <div className=\"text-sm text-base-muted\">No results found.</div>\n ) : (\n <div className=\"-mx-2 max-h-80 overflow-y-auto p-2\">\n <ul className=\"flex flex-col gap-2\">\n {results.map((result) => (\n <li key={result.href}>\n <a\n href={withSiteBaseUrl(result.href)}\n className=\"block rounded-box border border-base-muted-medium bg-base-100 p-4 shadow-md hover:border-primary-muted hover:bg-base-200\"\n onClick={onClose}\n >\n <div className=\"mb-2 flex items-center justify-start gap-2\">\n <div className=\"font-bold text-base-content\">{result.title}</div>\n {result.sectionTitle ? (\n <div className=\"flex items-center gap-1 text-sm text-base-muted-medium\">\n <ArrowRightFromLine className=\"h-3 w-3\" /> {result.sectionTitle}\n </div>\n ) : null}\n </div>\n {result.excerpt ? <p className=\"text-xs leading-5 text-base-muted\">{result.excerpt}</p> : null}\n </a>\n </li>\n ))}\n </ul>\n </div>\n )\n ) : null}\n </LayoutComponent>\n </div>,\n document.body,\n )\n}\n","import type { ResolvedDocsAlgoliaConfig } from '../../docs/types.js'\n\ntype DocsSearchResult = {\n href: string\n title: string\n excerpt?: string\n sectionTitle?: string\n}\n\ntype SearchAlgoliaResponse = {\n hits?: unknown[]\n}\n\ntype AlgoliaDocSearchHit = {\n url?: unknown\n url_without_anchor?: unknown\n type?: unknown\n category?: unknown\n content?: unknown\n hierarchy?: Record<string, unknown> | null\n _highlightResult?: {\n content?: {\n value?: unknown\n }\n } | null\n _snippetResult?: {\n content?: {\n value?: unknown\n }\n } | null\n}\n\nconst hierarchyLevels = ['lvl0', 'lvl1', 'lvl2', 'lvl3', 'lvl4', 'lvl5', 'lvl6'] as const\n\nconst stripHtml = (value: string) => value.replace(/<[^>]+>/g, '')\n\nconst normalizeString = (value: unknown) => {\n if (typeof value === 'string') {\n const normalized = stripHtml(value).replace(/\\s+/g, ' ').trim()\n return normalized || undefined\n }\n\n if (typeof value === 'number' || typeof value === 'boolean') {\n return String(value)\n }\n\n return undefined\n}\n\nconst getValueAtPath = (value: unknown, path: string): unknown => {\n if (!path) {\n return undefined\n }\n\n const segments = path.split('.').filter(Boolean)\n let currentValue = value\n\n for (const segment of segments) {\n if (!currentValue || typeof currentValue !== 'object' || Array.isArray(currentValue)) {\n return undefined\n }\n\n currentValue = (currentValue as Record<string, unknown>)[segment]\n }\n\n return currentValue\n}\n\nconst getMappedString = (value: unknown, path: string): string | undefined => {\n return normalizeString(getValueAtPath(value, path))\n}\n\nconst buildSearchUrl = (appId: string, indexName: string) => {\n return `https://${appId}-dsn.algolia.net/1/indexes/${encodeURIComponent(indexName)}/query`\n}\n\nconst getDocSearchHierarchyValue = (\n hierarchy: AlgoliaDocSearchHit['hierarchy'],\n level: (typeof hierarchyLevels)[number],\n) => {\n if (!hierarchy || typeof hierarchy !== 'object') {\n return undefined\n }\n\n return normalizeString(hierarchy[level])\n}\n\nconst getDocSearchTitleLevel = (hit: AlgoliaDocSearchHit) => {\n const levelFromType =\n typeof hit.type === 'string' && /^lvl[0-6]$/.test(hit.type) ? (hit.type as (typeof hierarchyLevels)[number]) : null\n\n if (levelFromType && getDocSearchHierarchyValue(hit.hierarchy, levelFromType)) {\n return levelFromType\n }\n\n return [...hierarchyLevels]\n .reverse()\n .find((level) => level !== 'lvl0' && getDocSearchHierarchyValue(hit.hierarchy, level))\n}\n\nconst getDocSearchFallbackResult = (hit: unknown): Partial<DocsSearchResult> => {\n const docSearchHit = hit as AlgoliaDocSearchHit\n const titleLevel = getDocSearchTitleLevel(docSearchHit)\n const title = titleLevel ? getDocSearchHierarchyValue(docSearchHit.hierarchy, titleLevel) : undefined\n const titleLevelIndex = titleLevel ? hierarchyLevels.indexOf(titleLevel) : -1\n const sectionTitle =\n hierarchyLevels\n .slice(0, Math.max(titleLevelIndex, 0))\n .reverse()\n .map((level) => getDocSearchHierarchyValue(docSearchHit.hierarchy, level))\n .find(Boolean) ?? normalizeString(docSearchHit.category)\n\n return {\n href: normalizeString(docSearchHit.url) ?? normalizeString(docSearchHit.url_without_anchor),\n title: title ?? normalizeString(docSearchHit.category),\n excerpt:\n normalizeString(docSearchHit._snippetResult?.content?.value) ??\n normalizeString(docSearchHit.content) ??\n normalizeString(docSearchHit._highlightResult?.content?.value),\n sectionTitle,\n }\n}\n\nconst mapHitToSearchResult = (hit: unknown, config: ResolvedDocsAlgoliaConfig): DocsSearchResult | null => {\n const docSearchFallback = getDocSearchFallbackResult(hit)\n const href = getMappedString(hit, config.fields.href) ?? docSearchFallback.href\n const title = getMappedString(hit, config.fields.title) ?? docSearchFallback.title\n\n if (!href || !title) {\n return null\n }\n\n const excerpt = getMappedString(hit, config.fields.excerpt) ?? docSearchFallback.excerpt\n const sectionTitle = getMappedString(hit, config.fields.sectionTitle) ?? docSearchFallback.sectionTitle\n\n return {\n href,\n title,\n excerpt,\n sectionTitle,\n }\n}\n\nexport const searchAlgoliaIndex = async (options: {\n config?: ResolvedDocsAlgoliaConfig | null\n query: string\n signal?: AbortSignal\n}) => {\n const { config, query, signal } = options\n\n if (!config) {\n throw new Error('Algolia search is not configured.')\n }\n\n const response = await fetch(buildSearchUrl(config.appId, config.indexName), {\n method: 'POST',\n signal,\n headers: {\n accept: 'application/json',\n 'content-type': 'application/json',\n 'x-algolia-api-key': config.apiKey,\n 'x-algolia-application-id': config.appId,\n },\n body: JSON.stringify({\n query,\n ...config.searchParams,\n }),\n })\n\n if (!response.ok) {\n throw new Error(`Algolia search request failed with status ${response.status}.`)\n }\n\n const data = (await response.json()) as SearchAlgoliaResponse\n\n return (data.hits ?? [])\n .map((hit) => mapHitToSearchResult(hit, config))\n .filter((result): result is DocsSearchResult => result !== null)\n}\n"],"mappings":"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","names":[]}
|
package/dist/chunk-JSZZPQEP.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/docs/defineDocs.ts"],"sourcesContent":["import type { DocsConfig, DocsGraph } from './types.js'\n\nexport const defineDocsConfig = (config: DocsConfig) => config\n\nexport const defineDocsGraph = (graph: DocsGraph) => graph\n"],"mappings":";AAEO,IAAM,mBAAmB,CAAC,WAAuB;AAEjD,IAAM,kBAAkB,CAAC,UAAqB;","names":[]}
|
package/dist/chunk-L6ZVB6XH.js
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
// src/mdx/components/UniversalMdxProvider.tsx
|
|
2
|
-
import { createContext, useContext } from "react";
|
|
3
|
-
import { jsx } from "react/jsx-runtime";
|
|
4
|
-
var UniversalMdxContext = createContext(null);
|
|
5
|
-
var UniversalMdxProvider = ({ children, value }) => {
|
|
6
|
-
return /* @__PURE__ */ jsx(UniversalMdxContext.Provider, { value, children });
|
|
7
|
-
};
|
|
8
|
-
var useUniversalMdxRuntime = () => {
|
|
9
|
-
return useContext(UniversalMdxContext);
|
|
10
|
-
};
|
|
11
|
-
|
|
12
|
-
// src/shared/renderInlineMarkdown.tsx
|
|
13
|
-
import { cmMerge } from "@classmatejs/react";
|
|
14
|
-
import { Fragment } from "react";
|
|
15
|
-
import { jsx as jsx2 } from "react/jsx-runtime";
|
|
16
|
-
var renderInlineMarkdown = (value, { codeClassName = "font-medium" } = {}) => {
|
|
17
|
-
if (typeof value !== "string") {
|
|
18
|
-
return value;
|
|
19
|
-
}
|
|
20
|
-
return value.split(/(`[^`]+`)/g).map((part, index) => {
|
|
21
|
-
if (part.startsWith("`") && part.endsWith("`")) {
|
|
22
|
-
return (
|
|
23
|
-
// biome-ignore lint/suspicious/noArrayIndexKey: local presentational split
|
|
24
|
-
/* @__PURE__ */ jsx2("code", { className: cmMerge(codeClassName), children: part.slice(1, -1) }, index)
|
|
25
|
-
);
|
|
26
|
-
}
|
|
27
|
-
return /* @__PURE__ */ jsx2(Fragment, { children: part }, index);
|
|
28
|
-
});
|
|
29
|
-
};
|
|
30
|
-
|
|
31
|
-
export {
|
|
32
|
-
UniversalMdxProvider,
|
|
33
|
-
useUniversalMdxRuntime,
|
|
34
|
-
renderInlineMarkdown
|
|
35
|
-
};
|
|
36
|
-
//# sourceMappingURL=chunk-L6ZVB6XH.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/mdx/components/UniversalMdxProvider.tsx","../src/shared/renderInlineMarkdown.tsx"],"sourcesContent":["import { createContext, useContext, type PropsWithChildren } from 'react'\nimport type { UniversalMdxRuntimeValue } from './types.js'\n\nconst UniversalMdxContext = createContext<UniversalMdxRuntimeValue | null>(null)\n\nexport const UniversalMdxProvider = ({ children, value }: PropsWithChildren<{ value: UniversalMdxRuntimeValue }>) => {\n return <UniversalMdxContext.Provider value={value}>{children}</UniversalMdxContext.Provider>\n}\n\nexport const useUniversalMdxRuntime = () => {\n return useContext(UniversalMdxContext)\n}\n","import { cmMerge } from '@classmatejs/react'\nimport { Fragment, type ReactNode } from 'react'\n\ntype RenderInlineMarkdownOptions = {\n codeClassName?: string\n}\n\nexport const renderInlineMarkdown = (\n value: ReactNode,\n { codeClassName = 'font-medium' }: RenderInlineMarkdownOptions = {},\n): ReactNode => {\n if (typeof value !== 'string') {\n return value\n }\n\n return value.split(/(`[^`]+`)/g).map((part, index) => {\n if (part.startsWith('`') && part.endsWith('`')) {\n return (\n // biome-ignore lint/suspicious/noArrayIndexKey: local presentational split\n <code className={cmMerge(codeClassName)} key={index}>\n {part.slice(1, -1)}\n </code>\n )\n }\n\n // biome-ignore lint/suspicious/noArrayIndexKey: local presentational split\n return <Fragment key={index}>{part}</Fragment>\n })\n}\n"],"mappings":";AAAA,SAAS,eAAe,kBAA0C;AAMzD;AAHT,IAAM,sBAAsB,cAA+C,IAAI;AAExE,IAAM,uBAAuB,CAAC,EAAE,UAAU,MAAM,MAA8D;AACnH,SAAO,oBAAC,oBAAoB,UAApB,EAA6B,OAAe,UAAS;AAC/D;AAEO,IAAM,yBAAyB,MAAM;AAC1C,SAAO,WAAW,mBAAmB;AACvC;;;ACXA,SAAS,eAAe;AACxB,SAAS,gBAAgC;AAkBjC,gBAAAA,YAAA;AAZD,IAAM,uBAAuB,CAClC,OACA,EAAE,gBAAgB,cAAc,IAAiC,CAAC,MACpD;AACd,MAAI,OAAO,UAAU,UAAU;AAC7B,WAAO;AAAA,EACT;AAEA,SAAO,MAAM,MAAM,YAAY,EAAE,IAAI,CAAC,MAAM,UAAU;AACpD,QAAI,KAAK,WAAW,GAAG,KAAK,KAAK,SAAS,GAAG,GAAG;AAC9C;AAAA;AAAA,QAEE,gBAAAA,KAAC,UAAK,WAAW,QAAQ,aAAa,GACnC,eAAK,MAAM,GAAG,EAAE,KAD2B,KAE9C;AAAA;AAAA,IAEJ;AAGA,WAAO,gBAAAA,KAAC,YAAsB,kBAAR,KAAa;AAAA,EACrC,CAAC;AACH;","names":["jsx"]}
|