@unterberg/nivel 0.2.31 → 0.2.33
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-LQLP4QOH.js → chunk-XIPY2CH4.js} +4 -15
- package/dist/chunk-XIPY2CH4.js.map +1 -0
- package/dist/index.js +1 -1
- package/dist/mdx.js +1 -1
- package/dist/vike.js +168 -1
- package/dist/vike.js.map +1 -1
- package/package.json +1 -1
- package/dist/chunk-LQLP4QOH.js.map +0 -1
|
@@ -269,30 +269,19 @@ var getMermaidSvgOverrideCss = (diagramId) => `
|
|
|
269
269
|
#${diagramId} .nodeLabel *,
|
|
270
270
|
#${diagramId} .cluster-label text,
|
|
271
271
|
#${diagramId} .label text {
|
|
272
|
-
|
|
272
|
+
background-color: transparent;
|
|
273
|
+
fill: transparent;
|
|
273
274
|
color: var(--nivel-mermaid-node-text, var(--color-base-content));
|
|
274
275
|
}
|
|
275
276
|
|
|
276
277
|
#${diagramId} .edgeLabel,
|
|
277
278
|
#${diagramId} .edgeLabel *,
|
|
278
279
|
#${diagramId} .edgeLabel span,
|
|
279
|
-
#${diagramId} .edgeLabel p
|
|
280
|
-
#${diagramId} .label foreignObject,
|
|
281
|
-
#${diagramId} .label div,
|
|
282
|
-
#${diagramId} .label div span,
|
|
283
|
-
#${diagramId} .label div p {
|
|
280
|
+
#${diagramId} .edgeLabel p {
|
|
284
281
|
background-color: var(--nivel-mermaid-edge-label-fill, var(--color-base-100));
|
|
285
282
|
color: var(--nivel-mermaid-edge-label-text, var(--nivel-mermaid-node-text, var(--color-base-content)));
|
|
286
283
|
}
|
|
287
284
|
|
|
288
|
-
#${diagramId} .edgeLabel .labelBkg,
|
|
289
|
-
#${diagramId} .label .labelBkg,
|
|
290
|
-
#${diagramId} .label rect {
|
|
291
|
-
background-color: var(--nivel-mermaid-edge-label-fill, var(--color-base-100));
|
|
292
|
-
fill: var(--nivel-mermaid-edge-label-fill, var(--color-base-100));
|
|
293
|
-
background-color: var(--nivel-mermaid-edge-label-fill, var(--color-base-100));
|
|
294
|
-
}
|
|
295
|
-
|
|
296
285
|
#${diagramId} .edgePath .path,
|
|
297
286
|
#${diagramId} .flowchart-link,
|
|
298
287
|
#${diagramId} .relationshipLine,
|
|
@@ -841,4 +830,4 @@ export {
|
|
|
841
830
|
RepoLink,
|
|
842
831
|
Table
|
|
843
832
|
};
|
|
844
|
-
//# sourceMappingURL=chunk-
|
|
833
|
+
//# sourceMappingURL=chunk-XIPY2CH4.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/useSelectedChoice.ts","../src/mdx/code-blocks/CodeBlockTransformer.tsx","../src/mdx/code-blocks/FileState.tsx","../src/mdx/code-blocks/MermaidDiagram.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, useId, useRef } from 'react'\nimport { CodeBlockHeaderMeta } from './CodeBlockHeaderMeta.js'\nimport { CodeBlockCopyButton, trimTrailingWhitespace } from './CopyButton.js'\nimport { CodeBlockGroupProvider } from './context.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 selectId = useId()\n const labelId = `${selectId}-label`\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=\"my-6 flex h-full min-w-0 max-w-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\" htmlFor={selectId}>\n <span id={labelId} className=\"sr-only\">\n Choose code example variant\n </span>\n <select\n id={selectId}\n aria-labelledby={labelId}\n name={`choicesFor-${choiceGroup.name}`}\n value={activeChoiceElement.props['data-choice-value']}\n onChange={(event) => {\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\n ref={bodyRef}\n className=\"h-full min-w-0 max-w-full flex-1 bg-base-200! [&>*:first-child]:mt-0 [&>*:last-child]:mb-0\"\n >\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 {env && <StyledBadge $env={effectiveEnv}>{env}</StyledBadge>}\n <div className=\"font-mono text-xs font-semibold text-base-muted\">{label}</div>\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, 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 { MermaidDiagram }\n\nimport { cmMerge } from '@classmatejs/react'\nimport { useEffect, useId, useState } from 'react'\n\nlet isMermaidInitialized = false\nlet mermaidModulePromise: Promise<typeof import('mermaid').default> | null = null\nconst MERMAID_SVG_CLASS_NAME = 'nivel-mermaid-svg'\nconst MERMAID_ROOT_CLASS_NAME = 'nivel-mermaid'\n\nconst getMermaidSvgOverrideCss = (diagramId: string) => `\n#${diagramId}.${MERMAID_SVG_CLASS_NAME} {\n font-family: var(--font-sans);\n}\n\n#${diagramId} .node rect,\n#${diagramId} .node circle,\n#${diagramId} .node ellipse,\n#${diagramId} .node polygon,\n#${diagramId} .node path {\n fill: var(--nivel-mermaid-node-fill, var(--color-primary-muted-superlight));\n stroke: var(--nivel-mermaid-node-stroke, var(--color-primary-muted-medium));\n stroke-width: var(--nivel-mermaid-node-stroke-width, 1px);\n}\n\n#${diagramId} .node .label,\n#${diagramId} .node .label text,\n#${diagramId} .nodeLabel,\n#${diagramId} .nodeLabel *,\n#${diagramId} .cluster-label text,\n#${diagramId} .label text {\n background-color: transparent;\n fill: transparent;\n color: var(--nivel-mermaid-node-text, var(--color-base-content));\n}\n\n#${diagramId} .edgeLabel,\n#${diagramId} .edgeLabel *,\n#${diagramId} .edgeLabel span,\n#${diagramId} .edgeLabel p {\n background-color: var(--nivel-mermaid-edge-label-fill, var(--color-base-100));\n color: var(--nivel-mermaid-edge-label-text, var(--nivel-mermaid-node-text, var(--color-base-content)));\n}\n\n#${diagramId} .edgePath .path,\n#${diagramId} .flowchart-link,\n#${diagramId} .relationshipLine,\n#${diagramId} .messageLine0,\n#${diagramId} .messageLine1 {\n stroke: var(--nivel-mermaid-line-color, var(--color-primary-muted));\n stroke-width: var(--nivel-mermaid-line-width, 1.5px);\n}\n\n#${diagramId} marker path,\n#${diagramId} .marker {\n fill: var(--nivel-mermaid-line-color, var(--color-primary-muted));\n stroke: var(--nivel-mermaid-line-color, var(--color-primary-muted));\n}\n\n#${diagramId} .cluster rect {\n fill: var(--nivel-mermaid-cluster-fill, var(--color-base-100));\n stroke: var(--nivel-mermaid-cluster-stroke, var(--color-primary-muted-light));\n stroke-width: var(--nivel-mermaid-cluster-stroke-width, 1px);\n}\n`\n\nconst loadMermaid = async () => {\n mermaidModulePromise ??= import('mermaid').then((module) => module.default)\n return mermaidModulePromise\n}\n\nconst ensureMermaidInitialized = async () => {\n const mermaid = await loadMermaid()\n\n if (isMermaidInitialized) {\n return mermaid\n }\n\n mermaid.initialize({\n startOnLoad: false,\n suppressErrorRendering: true,\n theme: 'base',\n })\n isMermaidInitialized = true\n\n return mermaid\n}\n\nconst decorateSvg = (svg: string, diagramId: string) => {\n const svgWithClassName = svg.replace(/<svg\\b([^>]*?)>/, (match, attributes: string) => {\n const classMatch = attributes.match(/\\sclass=\"([^\"]*)\"/)\n if (classMatch) {\n const mergedClassNames = `${classMatch[1]} ${MERMAID_SVG_CLASS_NAME}`.trim()\n return `<svg${attributes.replace(/\\sclass=\"([^\"]*)\"/, ` class=\"${mergedClassNames}\"`)} data-mermaid-graphic=\"\">`\n }\n\n return `<svg${attributes} class=\"${MERMAID_SVG_CLASS_NAME}\" data-mermaid-graphic=\"\">`\n })\n\n return svgWithClassName.replace('</svg>', `<style>${getMermaidSvgOverrideCss(diagramId)}</style></svg>`)\n}\n\nconst MermaidSource = ({ source }: { source: string }) => {\n return (\n <pre className=\"sr-only\" data-mermaid-source=\"\">\n <code>{source}</code>\n </pre>\n )\n}\n\nconst MermaidDiagram = ({ className, source }: { className?: string; source: string }) => {\n const [svg, setSvg] = useState<string | null>(null)\n const [error, setError] = useState<string | null>(null)\n const diagramId = useId()\n\n useEffect(() => {\n let isActive = true\n\n const renderDiagram = async () => {\n try {\n const mermaid = await ensureMermaidInitialized()\n const { svg: renderedSvg } = await mermaid.render(`nivel-mermaid-${diagramId}`, source)\n\n if (!isActive) {\n return\n }\n\n setSvg(decorateSvg(renderedSvg, `nivel-mermaid-${diagramId}`))\n setError(null)\n } catch (renderError) {\n if (!isActive) {\n return\n }\n\n const message = renderError instanceof Error ? renderError.message : 'Failed to render Mermaid diagram.'\n setError(message)\n setSvg(null)\n }\n }\n\n void renderDiagram()\n\n return () => {\n isActive = false\n }\n }, [diagramId, source])\n\n if (error) {\n return (\n <div\n className={cmMerge(MERMAID_ROOT_CLASS_NAME, 'space-y-3', className)}\n data-mermaid-diagram=\"\"\n data-mermaid-status=\"error\"\n >\n <div className=\"rounded-box border border-error/30 bg-error/8 px-4 py-3 text-sm text-error\">{error}</div>\n <pre className=\"doc-code-pre m-0 overflow-x-auto bg-base-200! p-4 text-sm\">\n <code>{source}</code>\n </pre>\n </div>\n )\n }\n\n if (!svg) {\n return (\n <div\n className={cmMerge(MERMAID_ROOT_CLASS_NAME, 'space-y-3', className)}\n data-mermaid-diagram=\"\"\n data-mermaid-status=\"loading\"\n >\n <div className=\"px-4 py-10 text-center text-sm flex gap-2 items-center justify-center\">\n <span className=\"loading loading-spinner loading-md\"></span>\n Rendering diagram...\n </div>\n <MermaidSource source={source} />\n </div>\n )\n }\n\n return (\n <div\n className={cmMerge(\n MERMAID_ROOT_CLASS_NAME,\n 'overflow-x-auto bg-base-200 px-3 py-4 [&_svg]:mx-auto [&_svg]:h-auto [&_svg]:max-w-full',\n className,\n )}\n data-mermaid-diagram=\"\"\n data-mermaid-status=\"ready\"\n >\n <div dangerouslySetInnerHTML={{ __html: svg }} />\n <MermaidSource source={source} />\n </div>\n )\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 { MermaidDiagram } from './MermaidDiagram.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 render?: 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 getNodeText = (node: ReactNode): string => {\n if (typeof node === 'string' || typeof node === 'number') {\n return String(node)\n }\n\n if (Array.isArray(node)) {\n return node.map((child) => getNodeText(child)).join('')\n }\n\n if (!isValidElement(node)) {\n return ''\n }\n\n return getNodeText((node as ReactElement<{ children?: ReactNode }>).props.children)\n}\n\nconst Pre = ({ children, className, ...props }: PreProps) => {\n const preRef = useRef<HTMLPreElement>(null)\n const isInChoiceGroup = useIsInCodeBlockGroup()\n const language = asTrimmedString(props['data-language']) ?? getLanguageFromChildren(children)\n const label =\n asTrimmedString(props['data-code-title']) ??\n getLanguageLabel({ ...props, children, 'data-language': language ?? undefined })\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 const shouldRenderMermaid = language === 'mermaid' && props.render === 'true'\n const sourceText = trimTrailingWhitespace(getNodeText(children))\n\n const copyButton =\n hideMenu || isInChoiceGroup ? null : (\n <CodeBlockCopyButton\n onCopy={async () => {\n const text = shouldRenderMermaid ? sourceText : 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 min-w-0 max-w-full not-prose overflow-hidden',\n isInChoiceGroup ? '' : '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 {shouldRenderMermaid ? (\n <MermaidDiagram className=\"min-w-0\" source={sourceText} />\n ) : (\n <pre\n {...props}\n ref={preRef}\n className={cmMerge(\n 'doc-code-pre m-0 h-full min-w-0 max-w-full overflow-x-auto bg-base-200! p-4 text-sm',\n className,\n )}\n data-code-block-content=\"\"\n >\n {children}\n </pre>\n )}\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 my-6\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 { isExternalHref } from '../../docs/runtime.js'\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 isDocsRelativeHref = (href: string) => {\n return (\n !href.startsWith('/') &&\n !href.startsWith('#') &&\n !isExternalHref(href) &&\n !href.startsWith('./') &&\n !href.startsWith('../')\n )\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) || isDocsRelativeHref(href),\n `<Link href /> prop \\`href==='${href}'\\` but should be external, docs-relative, 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 cm from '@classmatejs/react'\nimport 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 = ({ href, title }: OverviewLinkItem) => {\n return (\n <StyleOverviewCard href={withSiteBaseUrl(href)}>\n <span className=\"text-lg font-semibold text-base-content\">{renderInlineMarkdown(title)}</span>\n </StyleOverviewCard>\n )\n}\n\nconst StyleOverviewCard = cm.a`\n flex h-full flex-col gap-3 \n rounded-box border \n border-base-muted-light hover:border-primary-muted\n hover:bg-primary-muted-superlight \n no-underline transition-colors \n shadow shadow-transparent hover:shadow-primary-muted-light\n p-5\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-3 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/** @deprecated - do not use pls */\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":["jsx","jsx","useState","useState","jsx","jsxs","jsx","jsxs","jsx","jsx","jsx","jsx","cmMerge","useEffect","useId","useState","jsx","jsxs","jsx","useState","useId","useEffect","jsxs","cmMerge","cmMerge","Children","isValidElement","useRef","jsx","jsxs","asTrimmedString","Children","isValidElement","useRef","jsx","jsxs","cmMerge","cm","cmMerge","Check","Fragment","jsx","jsxs","cmMerge","Fragment","jsx","jsxs","cmMerge","cm","jsx","jsxs","assertUsage","cm","jsx","jsxs","cm","jsx","jsxs"]}
|
package/dist/index.js
CHANGED
package/dist/mdx.js
CHANGED
package/dist/vike.js
CHANGED
|
@@ -18,6 +18,173 @@ import "./chunk-PYYPYIBD.js";
|
|
|
18
18
|
import mdx from "@mdx-js/rollup";
|
|
19
19
|
import remarkGfm from "remark-gfm";
|
|
20
20
|
|
|
21
|
+
// src/mdx/plugins/rehypeDefinitionLists.ts
|
|
22
|
+
var isElementNode = (node) => {
|
|
23
|
+
return node.type === "element";
|
|
24
|
+
};
|
|
25
|
+
var isTextNode = (node) => {
|
|
26
|
+
return node.type === "text";
|
|
27
|
+
};
|
|
28
|
+
var cloneElementNode = (node) => {
|
|
29
|
+
return {
|
|
30
|
+
...node,
|
|
31
|
+
properties: { ...node.properties },
|
|
32
|
+
children: node.children.map((child) => cloneContentNode(child))
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
var cloneContentNode = (node) => {
|
|
36
|
+
if (isTextNode(node)) {
|
|
37
|
+
return { ...node };
|
|
38
|
+
}
|
|
39
|
+
return cloneElementNode(node);
|
|
40
|
+
};
|
|
41
|
+
var trimLine = (line) => {
|
|
42
|
+
const trimmed = line.map((node) => cloneContentNode(node));
|
|
43
|
+
while (trimmed.length > 0 && isTextNode(trimmed[0]) && trimmed[0].value.trim() === "") {
|
|
44
|
+
trimmed.shift();
|
|
45
|
+
}
|
|
46
|
+
while (trimmed.length > 0) {
|
|
47
|
+
const lastNode2 = trimmed[trimmed.length - 1];
|
|
48
|
+
if (!lastNode2 || !isTextNode(lastNode2) || lastNode2.value.trim() !== "") {
|
|
49
|
+
break;
|
|
50
|
+
}
|
|
51
|
+
trimmed.pop();
|
|
52
|
+
}
|
|
53
|
+
if (trimmed.length > 0 && isTextNode(trimmed[0])) {
|
|
54
|
+
trimmed[0].value = trimmed[0].value.replace(/^\s+/, "");
|
|
55
|
+
}
|
|
56
|
+
const lastNode = trimmed[trimmed.length - 1];
|
|
57
|
+
if (lastNode && isTextNode(lastNode)) {
|
|
58
|
+
lastNode.value = lastNode.value.replace(/\s+$/, "");
|
|
59
|
+
}
|
|
60
|
+
return trimmed;
|
|
61
|
+
};
|
|
62
|
+
var stripDefinitionMarker = (line) => {
|
|
63
|
+
const [firstNode, ...rest] = line.map((node) => cloneContentNode(node));
|
|
64
|
+
if (!firstNode || !isTextNode(firstNode)) {
|
|
65
|
+
return void 0;
|
|
66
|
+
}
|
|
67
|
+
const markerMatch = /^[ \t]{0,3}:[ \t]?/.exec(firstNode.value);
|
|
68
|
+
if (!markerMatch) {
|
|
69
|
+
return void 0;
|
|
70
|
+
}
|
|
71
|
+
firstNode.value = firstNode.value.slice(markerMatch[0].length);
|
|
72
|
+
return trimLine(firstNode.value === "" ? rest : [firstNode, ...rest]);
|
|
73
|
+
};
|
|
74
|
+
var splitParagraphLines = (node) => {
|
|
75
|
+
const lines = [[]];
|
|
76
|
+
for (const child of node.children) {
|
|
77
|
+
if (isElementNode(child)) {
|
|
78
|
+
lines[lines.length - 1].push(cloneElementNode(child));
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
if (!isTextNode(child)) {
|
|
82
|
+
return void 0;
|
|
83
|
+
}
|
|
84
|
+
const textLines = child.value.split("\n");
|
|
85
|
+
textLines.forEach((textLine, index) => {
|
|
86
|
+
if (index > 0) {
|
|
87
|
+
lines.push([]);
|
|
88
|
+
}
|
|
89
|
+
if (textLine !== "") {
|
|
90
|
+
lines[lines.length - 1].push({ ...child, value: textLine });
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
return lines.length > 1 ? lines : void 0;
|
|
95
|
+
};
|
|
96
|
+
var isDefinitionLine = (line) => {
|
|
97
|
+
return stripDefinitionMarker(line) !== void 0;
|
|
98
|
+
};
|
|
99
|
+
var parseDefinitionListParagraph = (node) => {
|
|
100
|
+
if (node.tagName !== "p") {
|
|
101
|
+
return void 0;
|
|
102
|
+
}
|
|
103
|
+
const lines = splitParagraphLines(node);
|
|
104
|
+
if (!lines || lines.length < 2) {
|
|
105
|
+
return void 0;
|
|
106
|
+
}
|
|
107
|
+
const items = [];
|
|
108
|
+
let lineIndex = 0;
|
|
109
|
+
while (lineIndex < lines.length) {
|
|
110
|
+
const term = trimLine(lines[lineIndex]);
|
|
111
|
+
if (term.length === 0 || isDefinitionLine(lines[lineIndex])) {
|
|
112
|
+
return void 0;
|
|
113
|
+
}
|
|
114
|
+
lineIndex += 1;
|
|
115
|
+
const definitions = [];
|
|
116
|
+
while (lineIndex < lines.length) {
|
|
117
|
+
const definition = stripDefinitionMarker(lines[lineIndex]);
|
|
118
|
+
if (!definition) {
|
|
119
|
+
break;
|
|
120
|
+
}
|
|
121
|
+
definitions.push(definition);
|
|
122
|
+
lineIndex += 1;
|
|
123
|
+
}
|
|
124
|
+
if (definitions.length === 0) {
|
|
125
|
+
return void 0;
|
|
126
|
+
}
|
|
127
|
+
items.push({ definitions, term });
|
|
128
|
+
}
|
|
129
|
+
return items;
|
|
130
|
+
};
|
|
131
|
+
var createElement = (tagName, children) => {
|
|
132
|
+
return {
|
|
133
|
+
type: "element",
|
|
134
|
+
tagName,
|
|
135
|
+
properties: {},
|
|
136
|
+
children
|
|
137
|
+
};
|
|
138
|
+
};
|
|
139
|
+
var createDefinitionList = (items) => {
|
|
140
|
+
return createElement(
|
|
141
|
+
"dl",
|
|
142
|
+
items.flatMap((item) => {
|
|
143
|
+
return [createElement("dt", item.term), ...item.definitions.map((definition) => createElement("dd", definition))];
|
|
144
|
+
})
|
|
145
|
+
);
|
|
146
|
+
};
|
|
147
|
+
var transformChildren = (parent) => {
|
|
148
|
+
const transformedChildren = [];
|
|
149
|
+
let childIndex = 0;
|
|
150
|
+
while (childIndex < parent.children.length) {
|
|
151
|
+
const child = parent.children[childIndex];
|
|
152
|
+
if (!isElementNode(child)) {
|
|
153
|
+
transformedChildren.push(child);
|
|
154
|
+
childIndex += 1;
|
|
155
|
+
continue;
|
|
156
|
+
}
|
|
157
|
+
const definitionListItems = parseDefinitionListParagraph(child);
|
|
158
|
+
if (!definitionListItems) {
|
|
159
|
+
transformChildren(child);
|
|
160
|
+
transformedChildren.push(child);
|
|
161
|
+
childIndex += 1;
|
|
162
|
+
continue;
|
|
163
|
+
}
|
|
164
|
+
const groupedItems = [...definitionListItems];
|
|
165
|
+
childIndex += 1;
|
|
166
|
+
while (childIndex < parent.children.length) {
|
|
167
|
+
const nextChild = parent.children[childIndex];
|
|
168
|
+
if (!isElementNode(nextChild)) {
|
|
169
|
+
break;
|
|
170
|
+
}
|
|
171
|
+
const nextItems = parseDefinitionListParagraph(nextChild);
|
|
172
|
+
if (!nextItems) {
|
|
173
|
+
break;
|
|
174
|
+
}
|
|
175
|
+
groupedItems.push(...nextItems);
|
|
176
|
+
childIndex += 1;
|
|
177
|
+
}
|
|
178
|
+
transformedChildren.push(createDefinitionList(groupedItems));
|
|
179
|
+
}
|
|
180
|
+
parent.children = transformedChildren;
|
|
181
|
+
};
|
|
182
|
+
var rehypeDefinitionLists = () => {
|
|
183
|
+
return (tree) => {
|
|
184
|
+
transformChildren(tree);
|
|
185
|
+
};
|
|
186
|
+
};
|
|
187
|
+
|
|
21
188
|
// src/mdx/plugins/rehypeDocsHeadings.ts
|
|
22
189
|
import { visit } from "unist-util-visit";
|
|
23
190
|
var headingTags = /* @__PURE__ */ new Set(["h1", "h2", "h3", "h4", "h5", "h6"]);
|
|
@@ -363,7 +530,7 @@ var viteConfig = {
|
|
|
363
530
|
...mdx({
|
|
364
531
|
providerImportSource: "@unterberg/nivel/mdx",
|
|
365
532
|
...codeBlockMdxPlugins,
|
|
366
|
-
rehypePlugins: [...codeBlockMdxPlugins.rehypePlugins, rehypeDocsHeadings],
|
|
533
|
+
rehypePlugins: [...codeBlockMdxPlugins.rehypePlugins, rehypeDefinitionLists, rehypeDocsHeadings],
|
|
367
534
|
remarkPlugins: [remarkGfm, ...codeBlockMdxPlugins.remarkPlugins]
|
|
368
535
|
}),
|
|
369
536
|
enforce: "pre"
|
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-22',\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 = (options: { siteUrl: string; allowCrawlers: boolean }) => {\n if (!options.allowCrawlers) {\n return ['User-agent: *', 'Disallow: /'].join('\\n')\n }\n\n return ['User-agent: *', 'Disallow: /cdn-cgi/', `Sitemap: ${options.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({\n siteUrl,\n allowCrawlers: options.docsConfig.robots ?? true,\n }),\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/rehypeDefinitionLists.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 { rehypeDefinitionLists } from '../mdx/plugins/rehypeDefinitionLists.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, rehypeDefinitionLists, 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","import type { ElementContentNode, ElementNode, HtmlRootNode, TextNode } from '../ast.js'\n\ntype DefinitionListItem = {\n definitions: ElementContentNode[][]\n term: ElementContentNode[]\n}\n\nconst isElementNode = (node: ElementContentNode): node is ElementNode => {\n return node.type === 'element'\n}\n\nconst isTextNode = (node: ElementContentNode): node is TextNode => {\n return node.type === 'text'\n}\n\nconst cloneElementNode = (node: ElementNode): ElementNode => {\n return {\n ...node,\n properties: { ...node.properties },\n children: node.children.map((child) => cloneContentNode(child)),\n }\n}\n\nconst cloneContentNode = (node: ElementContentNode): ElementContentNode => {\n if (isTextNode(node)) {\n return { ...node }\n }\n\n return cloneElementNode(node)\n}\n\nconst trimLine = (line: ElementContentNode[]): ElementContentNode[] => {\n const trimmed = line.map((node) => cloneContentNode(node))\n\n while (trimmed.length > 0 && isTextNode(trimmed[0]) && trimmed[0].value.trim() === '') {\n trimmed.shift()\n }\n\n while (trimmed.length > 0) {\n const lastNode = trimmed[trimmed.length - 1]\n if (!lastNode || !isTextNode(lastNode) || lastNode.value.trim() !== '') {\n break\n }\n\n trimmed.pop()\n }\n\n if (trimmed.length > 0 && isTextNode(trimmed[0])) {\n trimmed[0].value = trimmed[0].value.replace(/^\\s+/, '')\n }\n\n const lastNode = trimmed[trimmed.length - 1]\n if (lastNode && isTextNode(lastNode)) {\n lastNode.value = lastNode.value.replace(/\\s+$/, '')\n }\n\n return trimmed\n}\n\nconst stripDefinitionMarker = (line: ElementContentNode[]): ElementContentNode[] | undefined => {\n const [firstNode, ...rest] = line.map((node) => cloneContentNode(node))\n\n if (!firstNode || !isTextNode(firstNode)) {\n return undefined\n }\n\n const markerMatch = /^[ \\t]{0,3}:[ \\t]?/.exec(firstNode.value)\n if (!markerMatch) {\n return undefined\n }\n\n firstNode.value = firstNode.value.slice(markerMatch[0].length)\n return trimLine(firstNode.value === '' ? rest : [firstNode, ...rest])\n}\n\nconst splitParagraphLines = (node: ElementNode): ElementContentNode[][] | undefined => {\n const lines: ElementContentNode[][] = [[]]\n\n for (const child of node.children) {\n if (isElementNode(child)) {\n lines[lines.length - 1].push(cloneElementNode(child))\n continue\n }\n\n if (!isTextNode(child)) {\n return undefined\n }\n\n const textLines = child.value.split('\\n')\n textLines.forEach((textLine, index) => {\n if (index > 0) {\n lines.push([])\n }\n\n if (textLine !== '') {\n lines[lines.length - 1].push({ ...child, value: textLine })\n }\n })\n }\n\n return lines.length > 1 ? lines : undefined\n}\n\nconst isDefinitionLine = (line: ElementContentNode[]) => {\n return stripDefinitionMarker(line) !== undefined\n}\n\nconst parseDefinitionListParagraph = (node: ElementNode): DefinitionListItem[] | undefined => {\n if (node.tagName !== 'p') {\n return undefined\n }\n\n const lines = splitParagraphLines(node)\n if (!lines || lines.length < 2) {\n return undefined\n }\n\n const items: DefinitionListItem[] = []\n let lineIndex = 0\n\n while (lineIndex < lines.length) {\n const term = trimLine(lines[lineIndex])\n if (term.length === 0 || isDefinitionLine(lines[lineIndex])) {\n return undefined\n }\n\n lineIndex += 1\n\n const definitions: ElementContentNode[][] = []\n while (lineIndex < lines.length) {\n const definition = stripDefinitionMarker(lines[lineIndex])\n if (!definition) {\n break\n }\n\n definitions.push(definition)\n lineIndex += 1\n }\n\n if (definitions.length === 0) {\n return undefined\n }\n\n items.push({ definitions, term })\n }\n\n return items\n}\n\nconst createElement = (tagName: string, children: ElementContentNode[]): ElementNode => {\n return {\n type: 'element',\n tagName,\n properties: {},\n children,\n }\n}\n\nconst createDefinitionList = (items: DefinitionListItem[]): ElementNode => {\n return createElement(\n 'dl',\n items.flatMap((item) => {\n return [createElement('dt', item.term), ...item.definitions.map((definition) => createElement('dd', definition))]\n }),\n )\n}\n\nconst transformChildren = (parent: HtmlRootNode | ElementNode) => {\n const transformedChildren: ElementContentNode[] = []\n let childIndex = 0\n\n while (childIndex < parent.children.length) {\n const child = parent.children[childIndex]\n\n if (!isElementNode(child)) {\n transformedChildren.push(child)\n childIndex += 1\n continue\n }\n\n const definitionListItems = parseDefinitionListParagraph(child)\n if (!definitionListItems) {\n transformChildren(child)\n transformedChildren.push(child)\n childIndex += 1\n continue\n }\n\n const groupedItems = [...definitionListItems]\n childIndex += 1\n\n while (childIndex < parent.children.length) {\n const nextChild = parent.children[childIndex]\n if (!isElementNode(nextChild)) {\n break\n }\n\n const nextItems = parseDefinitionListParagraph(nextChild)\n if (!nextItems) {\n break\n }\n\n groupedItems.push(...nextItems)\n childIndex += 1\n }\n\n transformedChildren.push(createDefinitionList(groupedItems))\n }\n\n parent.children = transformedChildren\n}\n\nexport const rehypeDefinitionLists = () => {\n return (tree: HtmlRootNode) => {\n transformChildren(tree)\n }\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-22',\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 = (options: { siteUrl: string; allowCrawlers: boolean }) => {\n if (!options.allowCrawlers) {\n return ['User-agent: *', 'Disallow: /'].join('\\n')\n }\n\n return ['User-agent: *', 'Disallow: /cdn-cgi/', `Sitemap: ${options.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({\n siteUrl,\n allowCrawlers: options.docsConfig.robots ?? true,\n }),\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":["lastNode"]}
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
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/useSelectedChoice.ts","../src/mdx/code-blocks/CodeBlockTransformer.tsx","../src/mdx/code-blocks/FileState.tsx","../src/mdx/code-blocks/MermaidDiagram.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, useId, useRef } from 'react'\nimport { CodeBlockHeaderMeta } from './CodeBlockHeaderMeta.js'\nimport { CodeBlockCopyButton, trimTrailingWhitespace } from './CopyButton.js'\nimport { CodeBlockGroupProvider } from './context.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 selectId = useId()\n const labelId = `${selectId}-label`\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=\"my-6 flex h-full min-w-0 max-w-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\" htmlFor={selectId}>\n <span id={labelId} className=\"sr-only\">\n Choose code example variant\n </span>\n <select\n id={selectId}\n aria-labelledby={labelId}\n name={`choicesFor-${choiceGroup.name}`}\n value={activeChoiceElement.props['data-choice-value']}\n onChange={(event) => {\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\n ref={bodyRef}\n className=\"h-full min-w-0 max-w-full flex-1 bg-base-200! [&>*:first-child]:mt-0 [&>*:last-child]:mb-0\"\n >\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 {env && <StyledBadge $env={effectiveEnv}>{env}</StyledBadge>}\n <div className=\"font-mono text-xs font-semibold text-base-muted\">{label}</div>\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, 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 { MermaidDiagram }\n\nimport { cmMerge } from '@classmatejs/react'\nimport { useEffect, useId, useState } from 'react'\n\nlet isMermaidInitialized = false\nlet mermaidModulePromise: Promise<typeof import('mermaid').default> | null = null\nconst MERMAID_SVG_CLASS_NAME = 'nivel-mermaid-svg'\nconst MERMAID_ROOT_CLASS_NAME = 'nivel-mermaid'\n\nconst getMermaidSvgOverrideCss = (diagramId: string) => `\n#${diagramId}.${MERMAID_SVG_CLASS_NAME} {\n font-family: var(--font-sans);\n}\n\n#${diagramId} .node rect,\n#${diagramId} .node circle,\n#${diagramId} .node ellipse,\n#${diagramId} .node polygon,\n#${diagramId} .node path {\n fill: var(--nivel-mermaid-node-fill, var(--color-primary-muted-superlight));\n stroke: var(--nivel-mermaid-node-stroke, var(--color-primary-muted-medium));\n stroke-width: var(--nivel-mermaid-node-stroke-width, 1px);\n}\n\n#${diagramId} .node .label,\n#${diagramId} .node .label text,\n#${diagramId} .nodeLabel,\n#${diagramId} .nodeLabel *,\n#${diagramId} .cluster-label text,\n#${diagramId} .label text {\n fill: var(--nivel-mermaid-node-text, var(--color-base-content));\n color: var(--nivel-mermaid-node-text, var(--color-base-content));\n}\n\n#${diagramId} .edgeLabel,\n#${diagramId} .edgeLabel *,\n#${diagramId} .edgeLabel span,\n#${diagramId} .edgeLabel p,\n#${diagramId} .label foreignObject,\n#${diagramId} .label div,\n#${diagramId} .label div span,\n#${diagramId} .label div p {\n background-color: var(--nivel-mermaid-edge-label-fill, var(--color-base-100));\n color: var(--nivel-mermaid-edge-label-text, var(--nivel-mermaid-node-text, var(--color-base-content)));\n}\n\n#${diagramId} .edgeLabel .labelBkg,\n#${diagramId} .label .labelBkg,\n#${diagramId} .label rect {\n background-color: var(--nivel-mermaid-edge-label-fill, var(--color-base-100));\n fill: var(--nivel-mermaid-edge-label-fill, var(--color-base-100));\n background-color: var(--nivel-mermaid-edge-label-fill, var(--color-base-100));\n}\n\n#${diagramId} .edgePath .path,\n#${diagramId} .flowchart-link,\n#${diagramId} .relationshipLine,\n#${diagramId} .messageLine0,\n#${diagramId} .messageLine1 {\n stroke: var(--nivel-mermaid-line-color, var(--color-primary-muted));\n stroke-width: var(--nivel-mermaid-line-width, 1.5px);\n}\n\n#${diagramId} marker path,\n#${diagramId} .marker {\n fill: var(--nivel-mermaid-line-color, var(--color-primary-muted));\n stroke: var(--nivel-mermaid-line-color, var(--color-primary-muted));\n}\n\n#${diagramId} .cluster rect {\n fill: var(--nivel-mermaid-cluster-fill, var(--color-base-100));\n stroke: var(--nivel-mermaid-cluster-stroke, var(--color-primary-muted-light));\n stroke-width: var(--nivel-mermaid-cluster-stroke-width, 1px);\n}\n`\n\nconst loadMermaid = async () => {\n mermaidModulePromise ??= import('mermaid').then((module) => module.default)\n return mermaidModulePromise\n}\n\nconst ensureMermaidInitialized = async () => {\n const mermaid = await loadMermaid()\n\n if (isMermaidInitialized) {\n return mermaid\n }\n\n mermaid.initialize({\n startOnLoad: false,\n suppressErrorRendering: true,\n theme: 'base',\n })\n isMermaidInitialized = true\n\n return mermaid\n}\n\nconst decorateSvg = (svg: string, diagramId: string) => {\n const svgWithClassName = svg.replace(/<svg\\b([^>]*?)>/, (match, attributes: string) => {\n const classMatch = attributes.match(/\\sclass=\"([^\"]*)\"/)\n if (classMatch) {\n const mergedClassNames = `${classMatch[1]} ${MERMAID_SVG_CLASS_NAME}`.trim()\n return `<svg${attributes.replace(/\\sclass=\"([^\"]*)\"/, ` class=\"${mergedClassNames}\"`)} data-mermaid-graphic=\"\">`\n }\n\n return `<svg${attributes} class=\"${MERMAID_SVG_CLASS_NAME}\" data-mermaid-graphic=\"\">`\n })\n\n return svgWithClassName.replace('</svg>', `<style>${getMermaidSvgOverrideCss(diagramId)}</style></svg>`)\n}\n\nconst MermaidSource = ({ source }: { source: string }) => {\n return (\n <pre className=\"sr-only\" data-mermaid-source=\"\">\n <code>{source}</code>\n </pre>\n )\n}\n\nconst MermaidDiagram = ({ className, source }: { className?: string; source: string }) => {\n const [svg, setSvg] = useState<string | null>(null)\n const [error, setError] = useState<string | null>(null)\n const diagramId = useId()\n\n useEffect(() => {\n let isActive = true\n\n const renderDiagram = async () => {\n try {\n const mermaid = await ensureMermaidInitialized()\n const { svg: renderedSvg } = await mermaid.render(`nivel-mermaid-${diagramId}`, source)\n\n if (!isActive) {\n return\n }\n\n setSvg(decorateSvg(renderedSvg, `nivel-mermaid-${diagramId}`))\n setError(null)\n } catch (renderError) {\n if (!isActive) {\n return\n }\n\n const message = renderError instanceof Error ? renderError.message : 'Failed to render Mermaid diagram.'\n setError(message)\n setSvg(null)\n }\n }\n\n void renderDiagram()\n\n return () => {\n isActive = false\n }\n }, [diagramId, source])\n\n if (error) {\n return (\n <div\n className={cmMerge(MERMAID_ROOT_CLASS_NAME, 'space-y-3', className)}\n data-mermaid-diagram=\"\"\n data-mermaid-status=\"error\"\n >\n <div className=\"rounded-box border border-error/30 bg-error/8 px-4 py-3 text-sm text-error\">{error}</div>\n <pre className=\"doc-code-pre m-0 overflow-x-auto bg-base-200! p-4 text-sm\">\n <code>{source}</code>\n </pre>\n </div>\n )\n }\n\n if (!svg) {\n return (\n <div\n className={cmMerge(MERMAID_ROOT_CLASS_NAME, 'space-y-3', className)}\n data-mermaid-diagram=\"\"\n data-mermaid-status=\"loading\"\n >\n <div className=\"px-4 py-10 text-center text-sm flex gap-2 items-center justify-center\">\n <span className=\"loading loading-spinner loading-md\"></span>\n Rendering diagram...\n </div>\n <MermaidSource source={source} />\n </div>\n )\n }\n\n return (\n <div\n className={cmMerge(\n MERMAID_ROOT_CLASS_NAME,\n 'overflow-x-auto bg-base-200 px-3 py-4 [&_svg]:mx-auto [&_svg]:h-auto [&_svg]:max-w-full',\n className,\n )}\n data-mermaid-diagram=\"\"\n data-mermaid-status=\"ready\"\n >\n <div dangerouslySetInnerHTML={{ __html: svg }} />\n <MermaidSource source={source} />\n </div>\n )\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 { MermaidDiagram } from './MermaidDiagram.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 render?: 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 getNodeText = (node: ReactNode): string => {\n if (typeof node === 'string' || typeof node === 'number') {\n return String(node)\n }\n\n if (Array.isArray(node)) {\n return node.map((child) => getNodeText(child)).join('')\n }\n\n if (!isValidElement(node)) {\n return ''\n }\n\n return getNodeText((node as ReactElement<{ children?: ReactNode }>).props.children)\n}\n\nconst Pre = ({ children, className, ...props }: PreProps) => {\n const preRef = useRef<HTMLPreElement>(null)\n const isInChoiceGroup = useIsInCodeBlockGroup()\n const language = asTrimmedString(props['data-language']) ?? getLanguageFromChildren(children)\n const label =\n asTrimmedString(props['data-code-title']) ??\n getLanguageLabel({ ...props, children, 'data-language': language ?? undefined })\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 const shouldRenderMermaid = language === 'mermaid' && props.render === 'true'\n const sourceText = trimTrailingWhitespace(getNodeText(children))\n\n const copyButton =\n hideMenu || isInChoiceGroup ? null : (\n <CodeBlockCopyButton\n onCopy={async () => {\n const text = shouldRenderMermaid ? sourceText : 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 min-w-0 max-w-full not-prose overflow-hidden',\n isInChoiceGroup ? '' : '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 {shouldRenderMermaid ? (\n <MermaidDiagram className=\"min-w-0\" source={sourceText} />\n ) : (\n <pre\n {...props}\n ref={preRef}\n className={cmMerge(\n 'doc-code-pre m-0 h-full min-w-0 max-w-full overflow-x-auto bg-base-200! p-4 text-sm',\n className,\n )}\n data-code-block-content=\"\"\n >\n {children}\n </pre>\n )}\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 my-6\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 { isExternalHref } from '../../docs/runtime.js'\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 isDocsRelativeHref = (href: string) => {\n return (\n !href.startsWith('/') &&\n !href.startsWith('#') &&\n !isExternalHref(href) &&\n !href.startsWith('./') &&\n !href.startsWith('../')\n )\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) || isDocsRelativeHref(href),\n `<Link href /> prop \\`href==='${href}'\\` but should be external, docs-relative, 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 cm from '@classmatejs/react'\nimport 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 = ({ href, title }: OverviewLinkItem) => {\n return (\n <StyleOverviewCard href={withSiteBaseUrl(href)}>\n <span className=\"text-lg font-semibold text-base-content\">{renderInlineMarkdown(title)}</span>\n </StyleOverviewCard>\n )\n}\n\nconst StyleOverviewCard = cm.a`\n flex h-full flex-col gap-3 \n rounded-box border \n border-base-muted-light hover:border-primary-muted\n hover:bg-primary-muted-superlight \n no-underline transition-colors \n shadow shadow-transparent hover:shadow-primary-muted-light\n p-5\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-3 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/** @deprecated - do not use pls */\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":["jsx","jsx","useState","useState","jsx","jsxs","jsx","jsxs","jsx","jsx","jsx","jsx","cmMerge","useEffect","useId","useState","jsx","jsxs","jsx","useState","useId","useEffect","jsxs","cmMerge","cmMerge","Children","isValidElement","useRef","jsx","jsxs","asTrimmedString","Children","isValidElement","useRef","jsx","jsxs","cmMerge","cm","cmMerge","Check","Fragment","jsx","jsxs","cmMerge","Fragment","jsx","jsxs","cmMerge","cm","jsx","jsxs","assertUsage","cm","jsx","jsxs","cm","jsx","jsxs"]}
|