@unterberg/nivel 0.2.14 → 0.2.16
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-W72NXVDG.js → chunk-5BZUJIA2.js} +2 -2
- package/dist/{chunk-YKTHLAAL.js → chunk-7C7KGP3M.js} +3 -2
- package/dist/chunk-7C7KGP3M.js.map +1 -0
- package/dist/{chunk-EP67BY43.js → chunk-CLMYET6V.js} +206 -44
- package/dist/chunk-CLMYET6V.js.map +1 -0
- package/dist/{chunk-JYEKQPFL.js → chunk-T5N24SLT.js} +10 -1
- package/dist/{chunk-JYEKQPFL.js.map → chunk-T5N24SLT.js.map} +1 -1
- package/dist/cli.js +1 -1
- package/dist/index.d.ts +7 -1
- package/dist/index.js +3 -1
- package/dist/mdx/code-blocks.js +1 -1
- package/dist/mdx.js +1 -1
- package/dist/runtime/node.js +2 -2
- package/dist/vike.js +3 -3
- package/package.json +2 -1
- package/dist/chunk-EP67BY43.js.map +0 -1
- package/dist/chunk-YKTHLAAL.js.map +0 -1
- /package/dist/{chunk-W72NXVDG.js.map → chunk-5BZUJIA2.js.map} +0 -0
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
isGeneratedDocsPath,
|
|
5
5
|
loadDocsConfig,
|
|
6
6
|
syncGeneratedDocsPages
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-T5N24SLT.js";
|
|
8
8
|
import {
|
|
9
9
|
nivelPublicRoute
|
|
10
10
|
} from "./chunk-PYYPYIBD.js";
|
|
@@ -241,4 +241,4 @@ var nivelPagesPlugin = () => {
|
|
|
241
241
|
export {
|
|
242
242
|
nivelPagesPlugin
|
|
243
243
|
};
|
|
244
|
-
//# sourceMappingURL=chunk-
|
|
244
|
+
//# sourceMappingURL=chunk-5BZUJIA2.js.map
|
|
@@ -9,7 +9,7 @@ var kebabCase = (value) => {
|
|
|
9
9
|
return value.replace(/([a-z])([A-Z])/g, "$1-$2").replaceAll("_", "-").toLowerCase();
|
|
10
10
|
};
|
|
11
11
|
var CODE_BLOCK_HEADER_ENVIRONMENTS = ["client", "server"];
|
|
12
|
-
var CODE_BLOCK_PRE_PROP_NAMES = ["data-language-label", "file-added", "file-removed", "hide-menu"];
|
|
12
|
+
var CODE_BLOCK_PRE_PROP_NAMES = ["data-language-label", "file-added", "file-removed", "hide-menu", "render"];
|
|
13
13
|
var KEY_VALUE_PAIR_RE = /(?<name>[a-zA-Z_-]+)(?:=(?:"(?<doubleQuotedValue>[^"]*)"|'(?<singleQuotedValue>[^']*)'|(?<bareValue>[^\s"'=]+)))?/g;
|
|
14
14
|
var CODE_BLOCK_PRE_PROP_NAME_SET = new Set(CODE_BLOCK_PRE_PROP_NAMES);
|
|
15
15
|
var normalizeCodeBlockEnv = (value) => {
|
|
@@ -740,6 +740,7 @@ var REHYPE_PRETTY_CODE_INTERNAL_META_PROPS = [
|
|
|
740
740
|
"file-added",
|
|
741
741
|
"file-removed",
|
|
742
742
|
"hide-menu",
|
|
743
|
+
"render",
|
|
743
744
|
"title"
|
|
744
745
|
];
|
|
745
746
|
var getCodeBlockMdxPlugins = () => {
|
|
@@ -784,4 +785,4 @@ export {
|
|
|
784
785
|
shikiTransformerAutoLinks,
|
|
785
786
|
getCodeBlockMdxPlugins
|
|
786
787
|
};
|
|
787
|
-
//# sourceMappingURL=chunk-
|
|
788
|
+
//# sourceMappingURL=chunk-7C7KGP3M.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/mdx/code-blocks/index.ts","../src/mdx/code-blocks/meta.ts","../src/mdx/code-blocks/rehypeMetaToProps.ts","../src/mdx/code-blocks/remarkChoiceGroup.ts","../src/mdx/ast.ts","../src/mdx/code-blocks/generateChoiceGroupCode.ts","../src/mdx/code-blocks/remarkDetype.ts","../src/mdx/code-blocks/remarkPkgManager.ts","../src/mdx/code-blocks/remarkRestoreUnsupportedDirectives.ts","../src/mdx/code-blocks/shikiTransformerAutoLinks.ts"],"sourcesContent":["import { transformerNotationHighlight } from '@brillout/shiki-transformers'\nimport { transformerNotationDiff, transformerNotationWordHighlight } from '@shikijs/transformers'\nimport rehypePrettyCode from 'rehype-pretty-code'\nimport remarkDirective from 'remark-directive'\nimport { stripMetaProps } from './meta.js'\nimport { rehypeMetaToProps } from './rehypeMetaToProps.js'\nimport { remarkChoiceGroup } from './remarkChoiceGroup.js'\nimport { remarkDetype } from './remarkDetype.js'\nimport { remarkPkgManager } from './remarkPkgManager.js'\nimport { remarkRestoreUnsupportedDirectives } from './remarkRestoreUnsupportedDirectives.js'\nimport { shikiTransformerAutoLinks } from './shikiTransformerAutoLinks.js'\n\nexport { getCodeBlockPropsFromMeta, parseMetaString, stripMetaProps } from './meta.js'\nexport { rehypeMetaToProps } from './rehypeMetaToProps.js'\nexport { remarkChoiceGroup } from './remarkChoiceGroup.js'\nexport { remarkDetype } from './remarkDetype.js'\nexport { remarkPkgManager } from './remarkPkgManager.js'\nexport { remarkRestoreUnsupportedDirectives } from './remarkRestoreUnsupportedDirectives.js'\nexport { shikiTransformerAutoLinks } from './shikiTransformerAutoLinks.js'\n\nconst REHYPE_PRETTY_CODE_INTERNAL_META_PROPS = [\n 'data-language-label',\n 'env',\n 'file-added',\n 'file-removed',\n 'hide-menu',\n 'render',\n 'title',\n] as const\n\nexport const getCodeBlockMdxPlugins = () => {\n const rehypePrettyCodePlugin = [\n rehypePrettyCode,\n {\n keepBackground: false,\n filterMetaString: (meta: string) => stripMetaProps(meta, [...REHYPE_PRETTY_CODE_INTERNAL_META_PROPS]),\n theme: {\n light: 'github-light',\n dark: 'one-dark-pro',\n },\n transformers: [\n transformerNotationDiff(),\n transformerNotationHighlight(),\n transformerNotationWordHighlight(),\n shikiTransformerAutoLinks(),\n ],\n },\n ] as [typeof rehypePrettyCode, Parameters<typeof rehypePrettyCode>[0]]\n\n return {\n remarkPlugins: [\n remarkDirective,\n remarkRestoreUnsupportedDirectives,\n remarkDetype,\n remarkPkgManager,\n remarkChoiceGroup,\n ],\n rehypePlugins: [rehypePrettyCodePlugin, rehypeMetaToProps],\n }\n}\n","const kebabCase = (value: string) => {\n return value\n .replace(/([a-z])([A-Z])/g, '$1-$2')\n .replaceAll('_', '-')\n .toLowerCase()\n}\n\nconst CODE_BLOCK_HEADER_ENVIRONMENTS = ['client', 'server'] as const\nconst CODE_BLOCK_PRE_PROP_NAMES = ['data-language-label', 'file-added', 'file-removed', 'hide-menu', 'render'] as const\n\ntype ParsedMeta<Name extends string = string> = {\n props: Partial<Record<Name, string>>\n rest: string\n tokens: ParsedMetaToken[]\n}\n\ntype ParsedMetaToken = {\n hasExplicitValue: boolean\n name: string\n raw: string\n value?: string\n}\n\ntype CodeBlockHeaderEnvironment = (typeof CODE_BLOCK_HEADER_ENVIRONMENTS)[number]\n\nconst KEY_VALUE_PAIR_RE =\n /(?<name>[a-zA-Z_-]+)(?:=(?:\"(?<doubleQuotedValue>[^\"]*)\"|'(?<singleQuotedValue>[^']*)'|(?<bareValue>[^\\s\"'=]+)))?/g\nconst CODE_BLOCK_PRE_PROP_NAME_SET = new Set<string>(CODE_BLOCK_PRE_PROP_NAMES)\n\nconst normalizeCodeBlockEnv = (value: unknown): CodeBlockHeaderEnvironment | null => {\n if (typeof value !== 'string') {\n return null\n }\n\n const normalizedValue = value.trim().toLowerCase()\n return CODE_BLOCK_HEADER_ENVIRONMENTS.includes(normalizedValue as CodeBlockHeaderEnvironment)\n ? (normalizedValue as CodeBlockHeaderEnvironment)\n : null\n}\n\nexport const parseMetaString = <Name extends string = string>(meta: unknown, propNames?: Name[]): ParsedMeta<Name> => {\n if (typeof meta !== 'string' || meta.trim() === '') {\n return { props: {}, rest: '', tokens: [] }\n }\n\n const props: ParsedMeta['props'] = {}\n const tokens: ParsedMetaToken[] = []\n const rest = meta.replaceAll(KEY_VALUE_PAIR_RE, (match, ...args) => {\n const groups = args.at(-1) as\n | {\n bareValue?: string\n doubleQuotedValue?: string\n name?: string\n singleQuotedValue?: string\n }\n | undefined\n const name = groups?.name\n if (!name) {\n return match\n }\n\n const value = groups?.doubleQuotedValue ?? groups?.singleQuotedValue ?? groups?.bareValue\n const normalizedName = kebabCase(name)\n tokens.push({\n hasExplicitValue: value !== undefined,\n name: normalizedName,\n raw: match,\n value,\n })\n\n if (propNames && !propNames.includes(normalizedName as Name)) {\n return match\n }\n\n props[normalizedName] = value || 'true'\n return ''\n })\n\n return {\n props,\n rest: rest.trim(),\n tokens,\n }\n}\n\nexport const stripMetaProps = <Name extends string = string>(meta: unknown, propNames: Name[]) => {\n return parseMetaString(meta, propNames).rest\n}\n\nexport const getCodeBlockPropsFromMeta = (meta: unknown) => {\n const parsed = parseMetaString(meta)\n const props = Object.fromEntries(\n Object.entries(parsed.props).filter(([name]) => CODE_BLOCK_PRE_PROP_NAME_SET.has(name)),\n ) as Record<string, string>\n const explicitTitle =\n typeof parsed.props.title === 'string' && parsed.props.title.trim() ? parsed.props.title.trim() : null\n const env = normalizeCodeBlockEnv(parsed.props.env)\n\n return {\n props,\n env,\n title: explicitTitle,\n }\n}\n","import { visit } from 'unist-util-visit'\nimport type { ElementNode, HtmlRootNode } from '../ast.js'\nimport { getCodeBlockPropsFromMeta } from './meta.js'\n\nexport const rehypeMetaToProps = () => {\n return (tree: HtmlRootNode) => {\n visit(\n tree,\n 'element',\n (node: ElementNode, _index: number | undefined, parent: ElementNode | HtmlRootNode | undefined) => {\n if (!parent || parent.type !== 'element' || node.tagName !== 'code' || parent.tagName !== 'pre') {\n return\n }\n\n const meta = getCodeBlockPropsFromMeta((node.data as { meta?: unknown } | undefined)?.meta)\n parent.properties ??= {}\n parent.properties = {\n ...parent.properties,\n ...meta.props,\n ...(meta.env ? { 'data-code-env': meta.env } : {}),\n ...(meta.title ? { 'data-code-title': meta.title } : {}),\n }\n },\n )\n }\n}\n","import { visit } from 'unist-util-visit'\nimport type { AstNode, ChoiceCarrierNode, ChoiceGroupElement, CodeNode, ContainerDirective, RootNode } from '../ast.js'\nimport { hasChildren } from '../ast.js'\nimport { generateChoiceGroupCode } from './generateChoiceGroupCode.js'\nimport { parseMetaString } from './meta.js'\n\ntype ChoiceNodeGroup = Array<{ choiceValue: string; children: ChoiceCarrierNode[] }>\nconst isChoiceCarrierNode = (node: AstNode): node is ChoiceCarrierNode => {\n return ['code', 'containerDirective', 'mdxJsxFlowElement'].includes(node.type)\n}\n\nexport const remarkChoiceGroup = () => {\n return (tree: RootNode) => {\n visit(tree, (node) => {\n if (node.type === 'code') {\n const codeNode = node as CodeNode\n if (!codeNode.meta) {\n return\n }\n\n const meta = parseMetaString(codeNode.meta, ['choice'])\n const choice = meta.props.choice\n codeNode.meta = meta.rest\n\n if (choice) {\n codeNode.data ??= {}\n codeNode.data.customDataChoice = choice\n codeNode.data.customDataFilter = 'explicitChoice'\n }\n }\n\n if (node.type === 'containerDirective') {\n const directiveNode = node as ContainerDirective\n if (directiveNode.name !== 'Choice') {\n return\n }\n\n const choice = typeof directiveNode.attributes?.id === 'string' ? directiveNode.attributes.id : null\n if (!choice) {\n return\n }\n\n directiveNode.data ??= {}\n directiveNode.data.customDataChoice = choice\n directiveNode.data.customDataFilter = directiveNode.type\n directiveNode.attributes = {}\n }\n })\n\n visit(tree, (node) => {\n if (!hasChildren(node)) {\n return\n }\n\n let start = -1\n let end = 0\n\n const processRange = () => {\n if (start === -1 || start === end) {\n return\n }\n\n const nodes = node.children.slice(start, end).filter(isChoiceCarrierNode)\n const replacements = filterChoices(nodes).map(\n (choiceNodes) => generateChoiceGroupCode(choiceNodes, node) as ChoiceGroupElement,\n )\n node.children.splice(start, end - start, ...replacements)\n end = start + replacements.length\n start = -1\n }\n\n for (; end < node.children.length; end += 1) {\n const child = node.children[end]\n\n if (!child || !isChoiceCarrierNode(child as AstNode)) {\n processRange()\n continue\n }\n\n if (!child.data?.customDataChoice) {\n processRange()\n continue\n }\n\n if (start === -1) {\n start = end\n }\n }\n\n processRange()\n })\n }\n}\n\nconst filterChoices = (nodes: ChoiceCarrierNode[]): ChoiceNodeGroup[] => {\n const filteredChoices: ChoiceNodeGroup[] = []\n const filters = [\n ...new Set(\n nodes\n .map((node) => node.data?.customDataFilter)\n .filter((filter): filter is string => typeof filter === 'string' && filter !== ''),\n ),\n ]\n\n for (const filter of filters) {\n const nodesByChoice = new Map<string, ChoiceCarrierNode[]>()\n\n for (const node of nodes.filter((candidate) => candidate.data?.customDataFilter === filter)) {\n const data = node.data\n const choice = data?.customDataChoice\n if (!choice || !data) {\n continue\n }\n\n data.customDataChoice = undefined\n const choiceNodes = nodesByChoice.get(choice) ?? []\n choiceNodes.push(node)\n nodesByChoice.set(choice, choiceNodes)\n }\n\n filteredChoices.push(\n [...nodesByChoice].map(([choiceValue, children]) => ({\n choiceValue,\n children,\n })),\n )\n }\n\n return filteredChoices\n}\n","import type { MdxJsxFlowElement } from 'mdast-util-mdx-jsx'\n\nexport type ChoiceData = {\n customDataChoice?: string | undefined\n customDataFilter?: string | undefined\n}\n\nexport interface AstNode {\n type: string\n data?: ChoiceData | undefined\n}\n\nexport interface ParentNode<Child extends AstNode = AstNode> extends AstNode {\n children: Child[]\n}\n\nexport interface RootNode extends ParentNode {\n type: 'root'\n}\n\nexport interface CodeNode extends AstNode {\n type: 'code'\n value: string\n lang?: string | null | undefined\n meta?: string | null | undefined\n}\n\ntype DirectiveAttributes = Record<string, string | null | undefined>\n\nexport type ChoiceGroupElement = Omit<MdxJsxFlowElement, 'data'> &\n AstNode & {\n data?: ChoiceData | undefined\n }\n\nexport type ChoiceCarrierNode = CodeNode | ContainerDirective | ChoiceGroupElement\n\nexport interface ContainerDirective extends ParentNode<ChoiceCarrierNode> {\n type: 'containerDirective'\n name: string\n attributes?: DirectiveAttributes | null | undefined\n}\n\nexport interface FileLike {\n path?: string | undefined\n value?: unknown\n}\n\nexport interface TextNode extends AstNode {\n type: 'text'\n value: string\n}\n\nexport interface ParagraphNode extends ParentNode<TextNode> {\n type: 'paragraph'\n}\n\nexport interface PositionLike {\n start?: {\n offset?: number | undefined\n }\n end?: {\n offset?: number | undefined\n }\n}\n\nexport interface UnsupportedDirectiveNode extends AstNode {\n type: 'leafDirective' | 'textDirective'\n position?: PositionLike | undefined\n}\n\nexport type ElementContentNode = ElementNode | TextNode\n\nexport interface ElementNode extends ParentNode<ElementContentNode> {\n type: 'element'\n tagName: string\n properties: Record<string, unknown>\n}\n\nexport interface HtmlRootNode extends ParentNode<ElementContentNode> {\n type: 'root'\n}\n\nexport const isContainerDirective = (node: ChoiceCarrierNode): node is ContainerDirective => {\n return node.type === 'containerDirective'\n}\n\nexport const hasChildren = (node: unknown): node is ParentNode => {\n return typeof node === 'object' && node !== null && Array.isArray((node as Partial<ParentNode>).children)\n}\n","import { valueToEstree } from 'estree-util-value-to-estree'\nimport type { MdxJsxAttribute, MdxJsxAttributeValueExpression, MdxJsxFlowElement } from 'mdast-util-mdx-jsx'\nimport type { ChoiceCarrierNode, ChoiceGroupElement, ParentNode } from '../ast.js'\nimport { isContainerDirective } from '../ast.js'\n\ntype ChoiceNode = {\n choiceValue: string\n children: ChoiceCarrierNode[]\n}\n\nconst BUILT_IN_CHOICE_GROUPS = {\n codeLang: {\n choices: ['JavaScript', 'TypeScript'],\n default: 'JavaScript',\n },\n pkgManager: {\n choices: ['npm', 'pnpm', 'Bun', 'Yarn'],\n default: 'npm',\n },\n} as const\n\nconst getChoiceGroup = (choicesRaw: string[]) => {\n const choices = [...new Set(choicesRaw.filter(Boolean))]\n\n for (const [name, group] of Object.entries(BUILT_IN_CHOICE_GROUPS)) {\n if (!choices.every((choice) => group.choices.includes(choice as never))) {\n continue\n }\n\n return {\n name,\n choices: group.choices,\n default: group.default,\n disabled: group.choices.filter((choice) => !choices.includes(choice)),\n }\n }\n\n return {\n name: `custom:${choices.join('|')}`,\n choices,\n default: choices[0] ?? '',\n disabled: [] as string[],\n }\n}\n\ntype AttributeEstree = NonNullable<NonNullable<MdxJsxAttributeValueExpression['data']>['estree']>\n\nexport const generateChoiceGroupCode = (choiceNodes: ChoiceNode[], parent?: ParentNode): ChoiceGroupElement => {\n const choiceGroup = getChoiceGroup(choiceNodes.map((choiceNode) => choiceNode.choiceValue))\n const mergedChoiceNodes = choiceGroup.choices.map((choice) => {\n const choiceNode = choiceNodes.find((node) => node.choiceValue === choice)\n\n return {\n choiceValue: choice,\n children: choiceNode?.children ?? [],\n }\n })\n\n const attributes: MdxJsxAttribute[] = [\n {\n type: 'mdxJsxAttribute',\n name: 'choiceGroup',\n value: {\n type: 'mdxJsxAttributeValueExpression',\n value: '',\n data: {\n estree: {\n type: 'Program',\n sourceType: 'module',\n comments: [],\n body: [\n {\n type: 'ExpressionStatement',\n expression: valueToEstree(choiceGroup),\n },\n ],\n } as unknown as AttributeEstree,\n },\n },\n },\n ]\n\n if (choiceNodes.length === 1) {\n attributes.push({ type: 'mdxJsxAttribute', name: 'hide' })\n }\n\n attributes.push({\n type: 'mdxJsxAttribute',\n name: 'lvl',\n value: `${parent?.type === 'mdxJsxFlowElement' ? 1 : 0}`,\n })\n\n const children: MdxJsxFlowElement[] = mergedChoiceNodes.map((choiceNode) => {\n const choiceChildren: ChoiceCarrierNode[] =\n choiceNode.children.length > 0 && choiceNode.children.every(isContainerDirective)\n ? choiceNode.children.flatMap((node) => node.children ?? [])\n : choiceNode.children\n\n for (const child of choiceChildren) {\n increaseLvl(child)\n }\n\n return {\n type: 'mdxJsxFlowElement',\n name: 'div',\n attributes: [\n {\n type: 'mdxJsxAttribute',\n name: 'data-choice-value',\n value: choiceNode.choiceValue,\n },\n { type: 'mdxJsxAttribute', name: 'className', value: 'choice' },\n ],\n children: choiceChildren as MdxJsxFlowElement['children'],\n }\n })\n\n return {\n type: 'mdxJsxFlowElement',\n name: 'ChoiceGroup',\n attributes,\n children,\n } as ChoiceGroupElement\n}\n\nconst increaseLvl = (node: ChoiceCarrierNode) => {\n if (node.type !== 'mdxJsxFlowElement' || node.name !== 'ChoiceGroup') {\n return\n }\n\n const attribute = node.attributes.find(\n (candidate: ChoiceGroupElement['attributes'][number]): candidate is MdxJsxAttribute =>\n candidate.type === 'mdxJsxAttribute' && candidate.name === 'lvl',\n )\n\n if (typeof attribute?.value === 'string') {\n attribute.value = `${Number(attribute.value) + 1}`\n }\n}\n","import { transform as detype } from 'detype'\nimport { visit } from 'unist-util-visit'\nimport type { ChoiceGroupElement, CodeNode, FileLike, ParentNode, RootNode } from '../ast.js'\nimport { generateChoiceGroupCode } from './generateChoiceGroupCode.js'\nimport { parseMetaString } from './meta.js'\n\nconst prettierOptions = {\n semi: false,\n singleQuote: true,\n trailingComma: 'none',\n} as const\n\ntype TransformNode = {\n codeBlock: CodeNode\n index: number\n parent: ParentNode\n}\n\nexport const remarkDetype = () => {\n return async (tree: RootNode, file: FileLike) => {\n const codeNodes: TransformNode[] = []\n\n visit(tree, 'code', (node: CodeNode, index: number | undefined, parent: ParentNode | undefined) => {\n if (!parent || typeof index !== 'number') {\n return\n }\n\n if (!['ts', 'tsx', 'vue', 'yaml'].includes(node.lang ?? '')) {\n return\n }\n\n if (typeof node.meta === 'string' && node.meta.includes('ts-only')) {\n return\n }\n\n codeNodes.push({ codeBlock: node, index, parent })\n })\n\n for (const node of [...codeNodes].reverse()) {\n if (node.codeBlock.lang === 'yaml') {\n transformYaml(node)\n } else {\n await transformTsToJs(node, file)\n }\n }\n }\n}\n\nconst transformYaml = (node: TransformNode) => {\n const { codeBlock, index, parent } = node\n const codeBlockContentJs = replaceFileNameSuffixes(codeBlock.value)\n\n if (codeBlockContentJs === codeBlock.value) {\n return\n }\n\n const meta = parseMetaString(codeBlock.meta, ['choice'])\n const choice = meta.props.choice\n codeBlock.meta = meta.rest\n\n const yamlJsCode = {\n ...codeBlock,\n value: codeBlockContentJs,\n }\n\n const replacement = generateChoiceGroupCode([\n { choiceValue: 'JavaScript', children: [yamlJsCode] },\n { choiceValue: 'TypeScript', children: [codeBlock] },\n ]) as ChoiceGroupElement\n\n replacement.attributes.push({ type: 'mdxJsxAttribute', name: 'hide' })\n replacement.data ??= {}\n replacement.data.customDataChoice = choice\n replacement.data.customDataFilter = 'codeLang'\n parent.children.splice(index, 1, replacement)\n}\n\nconst transformTsToJs = async (node: TransformNode, file: FileLike) => {\n const { codeBlock, index, parent } = node\n const meta = parseMetaString(codeBlock.meta, ['max-width', 'choice'])\n const maxWidth = Number(meta.props['max-width'])\n const choice = meta.props.choice\n codeBlock.meta = meta.rest\n\n codeBlock.data ??= {}\n codeBlock.data.customDataChoice = choice\n codeBlock.data.customDataFilter = 'codeLang'\n\n if (choice === 'TypeScript') {\n return\n }\n\n const codeBlockReplacedJs = replaceFileNameSuffixes(codeBlock.value)\n let codeBlockContentJs = ''\n\n try {\n codeBlockContentJs = await detype(codeBlockReplacedJs, `snippet.${codeBlock.lang}`, {\n customizeBabelConfig(config) {\n if (!config.presets || config.presets.length !== 1) {\n return\n }\n\n config.presets = [[config.presets[0], { onlyRemoveTypeImports: true }]]\n },\n removeTsComments: true,\n prettierOptions: {\n ...prettierOptions,\n printWidth: Number.isFinite(maxWidth) && maxWidth > 0 ? maxWidth : 99,\n },\n })\n } catch (error) {\n console.error(\n [\n `Failed to detype code block in ${file?.path ?? 'an MDX file'}.`,\n error instanceof Error ? error.message : String(error),\n ].join('\\n'),\n )\n return\n }\n\n codeBlockContentJs = cleanUpCode(codeBlockContentJs.trimEnd(), true)\n codeBlock.value = cleanUpCode(codeBlock.value)\n codeBlockContentJs = preserveSourceLineBreaks(codeBlock.value, codeBlockContentJs)\n codeBlockContentJs = preserveSourceBlankLines(codeBlock.value, codeBlockContentJs)\n\n if (codeBlockContentJs === codeBlock.value) {\n return\n }\n\n const tsCode: CodeNode = { ...codeBlock, lang: codeBlock.lang }\n const jsCode: CodeNode = {\n ...codeBlock,\n lang: String(codeBlock.lang).replace('t', 'j'),\n meta: replaceCodeBlockTitleFileExtension(codeBlock.meta, String(codeBlock.lang).replace('t', 'j')),\n value: codeBlockContentJs,\n }\n\n const replacement = generateChoiceGroupCode([\n { choiceValue: 'JavaScript', children: [jsCode] },\n { choiceValue: 'TypeScript', children: [tsCode] },\n ]) as ChoiceGroupElement\n\n if (codeBlockReplacedJs === codeBlockContentJs) {\n replacement.attributes.push({ type: 'mdxJsxAttribute', name: 'hide' })\n }\n\n replacement.data ??= {}\n replacement.data.customDataChoice = codeBlock.data.customDataChoice\n replacement.data.customDataFilter = codeBlock.data.customDataFilter\n parent.children.splice(index, 1, replacement)\n}\n\nconst replaceFileNameSuffixes = (value: string) => value.replaceAll('.ts', '.js')\n\nconst replaceCodeBlockTitleFileExtension = (meta: unknown, outputLang: string): string | null | undefined => {\n if (typeof meta !== 'string' || meta.trim() === '') {\n return typeof meta === 'string' ? meta : undefined\n }\n\n const parsedMeta = parseMetaString(meta)\n const titleToken = parsedMeta.tokens.find((token) => token.name === 'title' && token.hasExplicitValue)\n const titleValue = typeof parsedMeta.props.title === 'string' ? parsedMeta.props.title : null\n\n if (!titleToken || !titleValue) {\n return meta\n }\n\n const nextTitleValue = replaceTitleFileExtension(titleValue, outputLang)\n if (nextTitleValue === titleValue) {\n return meta\n }\n\n const quote = titleToken.raw.includes(\"title='\") ? \"'\" : '\"'\n return meta.replace(titleToken.raw, `title=${quote}${nextTitleValue}${quote}`)\n}\n\nconst replaceTitleFileExtension = (title: string, outputLang: string) => {\n if (outputLang === 'jsx') {\n return title.replace(/\\.tsx$/i, '.jsx').replace(/\\.ts$/i, '.js')\n }\n\n if (outputLang === 'js') {\n return title.replace(/\\.tsx$/i, '.jsx').replace(/\\.ts$/i, '.js')\n }\n\n return title\n}\n\nconst cleanUpCode = (code: string, isJsCode = false) => {\n if (isJsCode) {\n code = correctCodeDiffComments(code)\n }\n\n return processMagicComments(code)\n}\n\nconst processMagicComments = (code: string) => {\n const renameCommentRe = /^\\s*\\/\\/\\s@docpress-replace\\s([^ ]+) ([^ ]+)\\n/gm\n const matches = Array.from(code.matchAll(renameCommentRe))\n\n for (let index = matches.length - 1; index >= 0; index -= 1) {\n const match = matches[index]\n if (!match) {\n continue\n }\n\n const [fullMatch, renameFrom, renameTo] = match\n code = code.split(fullMatch).join('').replaceAll(renameFrom, renameTo)\n }\n\n return code.replaceAll('// @docpress-uncomment ', '')\n}\n\nconst correctCodeDiffComments = (code: string) => {\n return code.replaceAll(/\\n\\s*\\/\\/\\s\\[!code.+\\]/g, (codeDiff) => codeDiff.trimStart())\n}\n\nconst preserveSourceLineBreaks = (sourceCode: string, outputCode: string) => {\n const multilineSegments = collectMultilineSourceSegments(sourceCode)\n\n if (multilineSegments.length === 0) {\n return outputCode\n }\n\n const outputLines = outputCode.split('\\n')\n\n for (const segmentLines of multilineSegments) {\n const segmentNormalized = normalizeCodeSegment(segmentLines.join('\\n'))\n\n if (!segmentNormalized) {\n continue\n }\n\n for (let start = 0; start < outputLines.length; start += 1) {\n let replaced = false\n\n for (let size = 1; size <= segmentLines.length; size += 1) {\n if (start + size > outputLines.length) {\n break\n }\n\n const outputSegment = outputLines.slice(start, start + size)\n\n if (normalizeCodeSegment(outputSegment.join('\\n')) !== segmentNormalized) {\n continue\n }\n\n if (outputSegment.join('\\n') !== segmentLines.join('\\n')) {\n outputLines.splice(start, size, ...segmentLines)\n }\n\n start += segmentLines.length - 1\n replaced = true\n break\n }\n\n if (replaced) {\n break\n }\n }\n }\n\n return outputLines.join('\\n')\n}\n\nconst collectMultilineSourceSegments = (code: string) => {\n const lines = code.split('\\n')\n const segments: string[][] = []\n let paragraphStart = -1\n\n for (let index = 0; index <= lines.length; index += 1) {\n if (index < lines.length && lines[index]?.trim() !== '') {\n if (paragraphStart === -1) {\n paragraphStart = index\n }\n continue\n }\n\n if (paragraphStart !== -1) {\n const paragraphEnd = index - 1\n\n for (let size = paragraphEnd - paragraphStart + 1; size >= 2; size -= 1) {\n for (let start = paragraphStart; start + size - 1 <= paragraphEnd; start += 1) {\n segments.push(lines.slice(start, start + size).map(replaceFileNameSuffixes))\n }\n }\n }\n\n paragraphStart = -1\n }\n\n return segments\n}\n\nconst preserveSourceBlankLines = (sourceCode: string, outputCode: string) => {\n const blankLineAnchors = collectBlankLineAnchors(sourceCode)\n\n if (blankLineAnchors.length === 0) {\n return outputCode\n }\n\n const outputLines = outputCode.split('\\n')\n let searchFrom = 0\n\n for (const anchor of blankLineAnchors) {\n const lineIndex = outputLines.findIndex((line, index) => index >= searchFrom && normalizeCodeLine(line) === anchor)\n\n if (lineIndex <= 0) {\n continue\n }\n\n if (outputLines[lineIndex - 1]?.trim() !== '') {\n outputLines.splice(lineIndex, 0, '')\n searchFrom = lineIndex + 2\n } else {\n searchFrom = lineIndex + 1\n }\n }\n\n return outputLines.join('\\n')\n}\n\nconst collectBlankLineAnchors = (code: string) => {\n const lines = code.split('\\n')\n const anchors: string[] = []\n\n for (let index = 1; index < lines.length; index += 1) {\n if (lines[index]?.trim() !== '' || lines[index - 1]?.trim() === '') {\n continue\n }\n\n let nextLineIndex = index + 1\n\n while (nextLineIndex < lines.length && lines[nextLineIndex]?.trim() === '') {\n nextLineIndex += 1\n }\n\n const anchor = lines[nextLineIndex]\n\n if (anchor) {\n anchors.push(normalizeCodeLine(anchor))\n }\n }\n\n return anchors\n}\n\nconst normalizeCodeLine = (line: string) => {\n return stripTypeSyntax(replaceFileNameSuffixes(line)).trim().replace(/\\s+/g, ' ')\n}\n\nconst normalizeCodeSegment = (code: string) => {\n return replaceFileNameSuffixes(code).replace(/\\s+/g, '')\n}\n\nconst stripTypeSyntax = (line: string) => {\n return line\n .replace(/\\??:\\s*[A-Za-z_$][\\w$.<>, |&[\\]]*/g, '')\n .replace(/\\s+as\\s+const\\b/g, '')\n .replace(/\\s+as\\s+[A-Za-z_$][\\w$.<>, |&[\\]]*/g, '')\n}\n","import convert_ from 'npm-to-yarn'\nimport { visit } from 'unist-util-visit'\nimport type { ChoiceGroupElement, CodeNode, ParentNode, RootNode } from '../ast.js'\nimport { generateChoiceGroupCode } from './generateChoiceGroupCode.js'\nimport { parseMetaString } from './meta.js'\n\nconst convert: (input: string, target: 'npm' | 'pnpm' | 'bun' | 'yarn') => string = convert_\n\nconst PACKAGE_MANAGERS = ['pnpm', 'Bun', 'Yarn'] as const\n\nexport const remarkPkgManager = () => {\n return (tree: RootNode) => {\n visit(tree, 'code', (node: CodeNode, index: number | undefined, parent: ParentNode | undefined) => {\n if (!parent || typeof index !== 'number') {\n return\n }\n\n if (!['bash', 'sh', 'shell'].includes(node.lang ?? '')) {\n return\n }\n\n if (node.value.includes('pnpm')) {\n return\n }\n\n if (!node.value.includes('npm ') && !node.value.includes('npx ')) {\n return\n }\n\n let choice: string | undefined\n if (node.meta) {\n const meta = parseMetaString(node.meta, ['choice'])\n choice = meta.props.choice\n node.meta = meta.rest\n }\n\n node.value = node.value.replaceAll('npm i ', 'npm install ')\n\n const nodes = new Map<string, CodeNode>()\n nodes.set('npm', node)\n\n for (const packageManager of PACKAGE_MANAGERS) {\n const packageManagerNode: CodeNode = {\n ...node,\n value: convert(node.value, packageManager.toLowerCase() as 'pnpm' | 'bun' | 'yarn'),\n }\n nodes.set(packageManager, packageManagerNode)\n }\n\n const replacement = generateChoiceGroupCode(\n [...nodes].map(([choiceValue, childNode]) => ({\n choiceValue,\n children: [childNode],\n })),\n ) as ChoiceGroupElement\n\n replacement.data ??= {}\n replacement.data.customDataChoice = choice\n replacement.data.customDataFilter = replacement.type\n parent.children.splice(index, 1, replacement)\n })\n }\n}\n","import { visit } from 'unist-util-visit'\nimport type { FileLike, ParagraphNode, ParentNode, RootNode, TextNode, UnsupportedDirectiveNode } from '../ast.js'\n\ntype Replacement = {\n index: number\n node: UnsupportedDirectiveNode\n parent: ParentNode\n}\n\nexport const remarkRestoreUnsupportedDirectives = () => {\n return (tree: RootNode, file: FileLike) => {\n const replacements: Replacement[] = []\n\n visit(tree, (node, index, parent) => {\n if ((node.type !== 'textDirective' && node.type !== 'leafDirective') || !parent || typeof index !== 'number') {\n return\n }\n\n replacements.push({\n index,\n node: node as UnsupportedDirectiveNode,\n parent,\n })\n })\n\n for (const replacement of [...replacements].reverse()) {\n const source = getDirectiveSource(replacement.node, file)\n if (!source) {\n continue\n }\n\n if (replacement.node.type === 'textDirective') {\n replacement.parent.children.splice(replacement.index, 1, createTextNode(source))\n continue\n }\n\n const paragraphNode: ParagraphNode = {\n type: 'paragraph',\n children: [createTextNode(source)],\n }\n\n replacement.parent.children.splice(replacement.index, 1, paragraphNode)\n }\n }\n}\n\nconst createTextNode = (value: string): TextNode => {\n return {\n type: 'text',\n value,\n }\n}\n\nconst getDirectiveSource = (node: UnsupportedDirectiveNode, file: FileLike) => {\n if (typeof file.value !== 'string') {\n return null\n }\n\n const start = node.position?.start?.offset\n const end = node.position?.end?.offset\n\n if (typeof start !== 'number' || typeof end !== 'number' || start >= end) {\n return null\n }\n\n return file.value.slice(start, end)\n}\n","import type { ShikiTransformer } from 'shiki'\n\nconst LINK_RE = /https:\\/\\/[^\\s]*[^.,\\s\"'`]/g\n\nexport const shikiTransformerAutoLinks = (): ShikiTransformer => {\n return {\n name: 'solid-docpress-shiki-autolinks',\n span(span) {\n if (span.children.length !== 1) {\n return\n }\n\n let child = span.children[0]\n if (child.type !== 'text') {\n return\n }\n\n const matches = Array.from(child.value.matchAll(LINK_RE)).filter(([href]) => !href.includes('${'))\n if (matches.length === 0) {\n return\n }\n\n const links = matches\n .map((match) => ({ href: match[0], index: match.index ?? 0 }))\n .sort((left, right) => right.index - left.index)\n\n const nextChildren: typeof span.children = []\n\n for (const { href, index } of links) {\n const endIndex = index + href.length\n const trailingText = child.value.slice(endIndex)\n\n if (trailingText) {\n nextChildren.unshift({ type: 'text', value: trailingText })\n }\n\n nextChildren.unshift({\n type: 'element',\n tagName: 'a',\n properties: { href },\n children: [{ type: 'text', value: href }],\n })\n\n child = {\n type: 'text',\n value: child.value.slice(0, index),\n }\n }\n\n if (child.value) {\n nextChildren.unshift(child)\n }\n\n span.children = nextChildren\n },\n }\n}\n"],"mappings":"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","names":["visit","visit","visit","visit","visit","visit","visit"]}
|
|
@@ -240,14 +240,160 @@ var FileRemoved = ({ children }) => {
|
|
|
240
240
|
return /* @__PURE__ */ jsx5("div", { className: "doc-code-file-state doc-code-file-removed", children });
|
|
241
241
|
};
|
|
242
242
|
|
|
243
|
-
// src/mdx/code-blocks/
|
|
243
|
+
// src/mdx/code-blocks/MermaidDiagram.tsx
|
|
244
244
|
import { cmMerge as cmMerge2 } from "@classmatejs/react";
|
|
245
|
+
import mermaid from "mermaid";
|
|
246
|
+
import { useEffect as useEffect2, useId as useId2, useState as useState3 } from "react";
|
|
247
|
+
import { jsx as jsx6, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
248
|
+
var isMermaidInitialized = false;
|
|
249
|
+
var MERMAID_SVG_CLASS_NAME = "nivel-mermaid-svg";
|
|
250
|
+
var MERMAID_ROOT_CLASS_NAME = "nivel-mermaid";
|
|
251
|
+
var MERMAID_THEME_CSS = `
|
|
252
|
+
.${MERMAID_SVG_CLASS_NAME} {
|
|
253
|
+
font-family: var(--font-sans);
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
.${MERMAID_SVG_CLASS_NAME} .node rect,
|
|
257
|
+
.${MERMAID_SVG_CLASS_NAME} .node circle,
|
|
258
|
+
.${MERMAID_SVG_CLASS_NAME} .node ellipse,
|
|
259
|
+
.${MERMAID_SVG_CLASS_NAME} .node polygon,
|
|
260
|
+
.${MERMAID_SVG_CLASS_NAME} .node path {
|
|
261
|
+
fill: var(--nivel-mermaid-node-fill, var(--color-primary-muted-superlight));
|
|
262
|
+
stroke: var(--nivel-mermaid-node-stroke, var(--color-primary-muted-medium));
|
|
263
|
+
stroke-width: var(--nivel-mermaid-node-stroke-width, 1px);
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
.${MERMAID_SVG_CLASS_NAME} .node .label,
|
|
267
|
+
.${MERMAID_SVG_CLASS_NAME} .node .label text,
|
|
268
|
+
.${MERMAID_SVG_CLASS_NAME} .cluster-label text,
|
|
269
|
+
.${MERMAID_SVG_CLASS_NAME} .label text {
|
|
270
|
+
fill: var(--nivel-mermaid-node-text, var(--color-base-content));
|
|
271
|
+
color: var(--nivel-mermaid-node-text, var(--color-base-content));
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
.${MERMAID_SVG_CLASS_NAME} .edgePath .path,
|
|
275
|
+
.${MERMAID_SVG_CLASS_NAME} .flowchart-link,
|
|
276
|
+
.${MERMAID_SVG_CLASS_NAME} .relationshipLine,
|
|
277
|
+
.${MERMAID_SVG_CLASS_NAME} .messageLine0,
|
|
278
|
+
.${MERMAID_SVG_CLASS_NAME} .messageLine1 {
|
|
279
|
+
stroke: var(--nivel-mermaid-line-color, var(--color-primary-muted));
|
|
280
|
+
stroke-width: var(--nivel-mermaid-line-width, 1.5px);
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
.${MERMAID_SVG_CLASS_NAME} marker path,
|
|
284
|
+
.${MERMAID_SVG_CLASS_NAME} .marker {
|
|
285
|
+
fill: var(--nivel-mermaid-line-color, var(--color-primary-muted));
|
|
286
|
+
stroke: var(--nivel-mermaid-line-color, var(--color-primary-muted));
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
.${MERMAID_SVG_CLASS_NAME} .cluster rect {
|
|
290
|
+
fill: var(--nivel-mermaid-cluster-fill, var(--color-base-100));
|
|
291
|
+
stroke: var(--nivel-mermaid-cluster-stroke, var(--color-primary-muted-light));
|
|
292
|
+
stroke-width: var(--nivel-mermaid-cluster-stroke-width, 1px);
|
|
293
|
+
}
|
|
294
|
+
`;
|
|
295
|
+
var ensureMermaidInitialized = () => {
|
|
296
|
+
if (isMermaidInitialized) {
|
|
297
|
+
return;
|
|
298
|
+
}
|
|
299
|
+
mermaid.initialize({
|
|
300
|
+
startOnLoad: false,
|
|
301
|
+
suppressErrorRendering: true,
|
|
302
|
+
theme: "base",
|
|
303
|
+
themeCSS: MERMAID_THEME_CSS
|
|
304
|
+
});
|
|
305
|
+
isMermaidInitialized = true;
|
|
306
|
+
};
|
|
307
|
+
var addClassNameToSvg = (svg) => {
|
|
308
|
+
return svg.replace(/<svg\b([^>]*?)>/, (match, attributes) => {
|
|
309
|
+
const classMatch = attributes.match(/\sclass="([^"]*)"/);
|
|
310
|
+
if (classMatch) {
|
|
311
|
+
const mergedClassNames = `${classMatch[1]} ${MERMAID_SVG_CLASS_NAME}`.trim();
|
|
312
|
+
return `<svg${attributes.replace(/\sclass="([^"]*)"/, ` class="${mergedClassNames}"`)} data-mermaid-graphic="">`;
|
|
313
|
+
}
|
|
314
|
+
return `<svg${attributes} class="${MERMAID_SVG_CLASS_NAME}" data-mermaid-graphic="">`;
|
|
315
|
+
});
|
|
316
|
+
};
|
|
317
|
+
var MermaidDiagram = ({ className, source }) => {
|
|
318
|
+
const [svg, setSvg] = useState3(null);
|
|
319
|
+
const [error, setError] = useState3(null);
|
|
320
|
+
const diagramId = useId2();
|
|
321
|
+
useEffect2(() => {
|
|
322
|
+
let isActive = true;
|
|
323
|
+
const renderDiagram = async () => {
|
|
324
|
+
try {
|
|
325
|
+
ensureMermaidInitialized();
|
|
326
|
+
const { svg: renderedSvg } = await mermaid.render(`nivel-mermaid-${diagramId}`, source);
|
|
327
|
+
if (!isActive) {
|
|
328
|
+
return;
|
|
329
|
+
}
|
|
330
|
+
setSvg(addClassNameToSvg(renderedSvg));
|
|
331
|
+
setError(null);
|
|
332
|
+
} catch (renderError) {
|
|
333
|
+
if (!isActive) {
|
|
334
|
+
return;
|
|
335
|
+
}
|
|
336
|
+
const message = renderError instanceof Error ? renderError.message : "Failed to render Mermaid diagram.";
|
|
337
|
+
setError(message);
|
|
338
|
+
setSvg(null);
|
|
339
|
+
}
|
|
340
|
+
};
|
|
341
|
+
void renderDiagram();
|
|
342
|
+
return () => {
|
|
343
|
+
isActive = false;
|
|
344
|
+
};
|
|
345
|
+
}, [diagramId, source]);
|
|
346
|
+
if (error) {
|
|
347
|
+
return /* @__PURE__ */ jsxs3(
|
|
348
|
+
"div",
|
|
349
|
+
{
|
|
350
|
+
className: cmMerge2(MERMAID_ROOT_CLASS_NAME, "space-y-3", className),
|
|
351
|
+
"data-mermaid-diagram": "",
|
|
352
|
+
"data-mermaid-status": "error",
|
|
353
|
+
children: [
|
|
354
|
+
/* @__PURE__ */ jsx6("div", { className: "rounded-box border border-error/30 bg-error/8 px-4 py-3 text-sm text-error", children: error }),
|
|
355
|
+
/* @__PURE__ */ jsx6("pre", { className: "doc-code-pre m-0 overflow-x-auto bg-base-200! p-4 text-sm", children: /* @__PURE__ */ jsx6("code", { children: source }) })
|
|
356
|
+
]
|
|
357
|
+
}
|
|
358
|
+
);
|
|
359
|
+
}
|
|
360
|
+
if (!svg) {
|
|
361
|
+
return /* @__PURE__ */ jsxs3(
|
|
362
|
+
"div",
|
|
363
|
+
{
|
|
364
|
+
className: cmMerge2(MERMAID_ROOT_CLASS_NAME, "space-y-3", className),
|
|
365
|
+
"data-mermaid-diagram": "",
|
|
366
|
+
"data-mermaid-status": "loading",
|
|
367
|
+
children: [
|
|
368
|
+
/* @__PURE__ */ jsx6("div", { className: "rounded-box border border-base-muted-light bg-base-muted-superlight/70 px-4 py-10 text-center text-sm text-base-content/70", children: "Rendering diagram..." }),
|
|
369
|
+
/* @__PURE__ */ jsx6("pre", { className: "doc-code-pre m-0 overflow-x-auto bg-base-200! p-4 text-sm", children: /* @__PURE__ */ jsx6("code", { children: source }) })
|
|
370
|
+
]
|
|
371
|
+
}
|
|
372
|
+
);
|
|
373
|
+
}
|
|
374
|
+
return /* @__PURE__ */ jsx6(
|
|
375
|
+
"div",
|
|
376
|
+
{
|
|
377
|
+
className: cmMerge2(
|
|
378
|
+
MERMAID_ROOT_CLASS_NAME,
|
|
379
|
+
"overflow-x-auto bg-base-200 px-3 py-4 [&_svg]:mx-auto [&_svg]:h-auto [&_svg]:max-w-full",
|
|
380
|
+
className
|
|
381
|
+
),
|
|
382
|
+
"data-mermaid-diagram": "",
|
|
383
|
+
"data-mermaid-status": "ready",
|
|
384
|
+
dangerouslySetInnerHTML: { __html: svg }
|
|
385
|
+
}
|
|
386
|
+
);
|
|
387
|
+
};
|
|
388
|
+
|
|
389
|
+
// src/mdx/code-blocks/Pre.tsx
|
|
390
|
+
import { cmMerge as cmMerge3 } from "@classmatejs/react";
|
|
245
391
|
import {
|
|
246
392
|
Children as Children2,
|
|
247
393
|
isValidElement as isValidElement2,
|
|
248
394
|
useRef as useRef2
|
|
249
395
|
} from "react";
|
|
250
|
-
import { jsx as
|
|
396
|
+
import { jsx as jsx7, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
251
397
|
var asTrimmedString2 = (value) => {
|
|
252
398
|
return typeof value === "string" && value.trim() ? value.trim() : null;
|
|
253
399
|
};
|
|
@@ -273,18 +419,33 @@ var getLanguageLabel = (props) => {
|
|
|
273
419
|
const explicitLanguage = asTrimmedString2(props["data-language"]) ?? getLanguageFromChildren(props.children);
|
|
274
420
|
return explicitLanguage ? explicitLanguage.toUpperCase() : "CODE";
|
|
275
421
|
};
|
|
422
|
+
var getNodeText = (node) => {
|
|
423
|
+
if (typeof node === "string" || typeof node === "number") {
|
|
424
|
+
return String(node);
|
|
425
|
+
}
|
|
426
|
+
if (Array.isArray(node)) {
|
|
427
|
+
return node.map((child) => getNodeText(child)).join("");
|
|
428
|
+
}
|
|
429
|
+
if (!isValidElement2(node)) {
|
|
430
|
+
return "";
|
|
431
|
+
}
|
|
432
|
+
return getNodeText(node.props.children);
|
|
433
|
+
};
|
|
276
434
|
var Pre = ({ children, className, ...props }) => {
|
|
277
435
|
const preRef = useRef2(null);
|
|
278
436
|
const isInChoiceGroup = useIsInCodeBlockGroup();
|
|
279
|
-
const
|
|
437
|
+
const language = asTrimmedString2(props["data-language"]) ?? getLanguageFromChildren(children);
|
|
438
|
+
const label = asTrimmedString2(props["data-code-title"]) ?? getLanguageLabel({ ...props, children, "data-language": language ?? void 0 });
|
|
280
439
|
const env = asTrimmedString2(props["data-code-env"]);
|
|
281
440
|
const fileState = props["file-added"] ? "added" : props["file-removed"] ? "removed" : null;
|
|
282
441
|
const hideMenu = props["hide-menu"] === "true";
|
|
283
|
-
const
|
|
442
|
+
const shouldRenderMermaid = language === "mermaid" && props.render === "true";
|
|
443
|
+
const sourceText = trimTrailingWhitespace(getNodeText(children));
|
|
444
|
+
const copyButton = hideMenu || isInChoiceGroup ? null : /* @__PURE__ */ jsx7(
|
|
284
445
|
CodeBlockCopyButton,
|
|
285
446
|
{
|
|
286
447
|
onCopy: async () => {
|
|
287
|
-
const text = trimTrailingWhitespace(preRef.current?.textContent ?? "");
|
|
448
|
+
const text = shouldRenderMermaid ? sourceText : trimTrailingWhitespace(preRef.current?.textContent ?? "");
|
|
288
449
|
try {
|
|
289
450
|
await navigator.clipboard.writeText(text);
|
|
290
451
|
return true;
|
|
@@ -294,10 +455,10 @@ var Pre = ({ children, className, ...props }) => {
|
|
|
294
455
|
}
|
|
295
456
|
}
|
|
296
457
|
);
|
|
297
|
-
return /* @__PURE__ */
|
|
458
|
+
return /* @__PURE__ */ jsxs4(
|
|
298
459
|
"div",
|
|
299
460
|
{
|
|
300
|
-
className:
|
|
461
|
+
className: cmMerge3(
|
|
301
462
|
"group relative h-full min-w-0 max-w-full not-prose overflow-hidden",
|
|
302
463
|
isInChoiceGroup ? "" : "rounded-box border border-base-muted-light",
|
|
303
464
|
className
|
|
@@ -305,23 +466,23 @@ var Pre = ({ children, className, ...props }) => {
|
|
|
305
466
|
"data-code-block-frame": "",
|
|
306
467
|
"data-file-state": fileState ?? void 0,
|
|
307
468
|
children: [
|
|
308
|
-
!isInChoiceGroup && /* @__PURE__ */
|
|
469
|
+
!isInChoiceGroup && /* @__PURE__ */ jsxs4(
|
|
309
470
|
"div",
|
|
310
471
|
{
|
|
311
472
|
className: "flex min-h-10 relative items-center justify-between gap-3 border-b border-base-muted-light bg-base-muted-superlight! px-4",
|
|
312
473
|
"data-code-block-header": "",
|
|
313
474
|
children: [
|
|
314
|
-
/* @__PURE__ */
|
|
475
|
+
/* @__PURE__ */ jsx7(CodeBlockHeaderMeta, { label, env }),
|
|
315
476
|
copyButton
|
|
316
477
|
]
|
|
317
478
|
}
|
|
318
479
|
),
|
|
319
|
-
/* @__PURE__ */
|
|
480
|
+
shouldRenderMermaid ? /* @__PURE__ */ jsx7(MermaidDiagram, { className: "min-w-0", source: sourceText }) : /* @__PURE__ */ jsx7(
|
|
320
481
|
"pre",
|
|
321
482
|
{
|
|
322
483
|
...props,
|
|
323
484
|
ref: preRef,
|
|
324
|
-
className:
|
|
485
|
+
className: cmMerge3(
|
|
325
486
|
"doc-code-pre m-0 h-full min-w-0 max-w-full overflow-x-auto bg-base-200! p-4 text-sm",
|
|
326
487
|
className
|
|
327
488
|
),
|
|
@@ -335,9 +496,9 @@ var Pre = ({ children, className, ...props }) => {
|
|
|
335
496
|
};
|
|
336
497
|
|
|
337
498
|
// src/mdx/components/Alert.tsx
|
|
338
|
-
import cm2, { cmMerge as
|
|
499
|
+
import cm2, { cmMerge as cmMerge4 } from "@classmatejs/react";
|
|
339
500
|
import { Check as Check2, CircleX, Info, TriangleAlert } from "lucide-react";
|
|
340
|
-
import { Fragment as Fragment2, jsx as
|
|
501
|
+
import { Fragment as Fragment2, jsx as jsx8, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
341
502
|
var alertIconMap = {
|
|
342
503
|
info: Info,
|
|
343
504
|
warning: TriangleAlert,
|
|
@@ -350,20 +511,20 @@ var Alert = ({
|
|
|
350
511
|
children,
|
|
351
512
|
icon = true
|
|
352
513
|
}) => {
|
|
353
|
-
const AlertIcon = icon === true ? alertIconMap[type] : typeof icon === "object" ? () => /* @__PURE__ */
|
|
514
|
+
const AlertIcon = icon === true ? alertIconMap[type] : typeof icon === "object" ? () => /* @__PURE__ */ jsx8(Fragment2, { children: icon }) : null;
|
|
354
515
|
const alertIconTextColorClass = {
|
|
355
516
|
info: "text-info",
|
|
356
517
|
warning: "text-warning",
|
|
357
518
|
error: "text-error",
|
|
358
519
|
success: "text-success"
|
|
359
520
|
}[type];
|
|
360
|
-
return /* @__PURE__ */
|
|
361
|
-
!!heading && AlertIcon && /* @__PURE__ */
|
|
362
|
-
/* @__PURE__ */
|
|
363
|
-
/* @__PURE__ */
|
|
521
|
+
return /* @__PURE__ */ jsxs5(AlertOuter, { $variant: type, children: [
|
|
522
|
+
!!heading && AlertIcon && /* @__PURE__ */ jsxs5("div", { className: "mb-3 flex items-center gap-2", children: [
|
|
523
|
+
/* @__PURE__ */ jsx8(AlertIcon, { className: cmMerge4(alertIconTextColorClass, "float-left h-5 w-5") }),
|
|
524
|
+
/* @__PURE__ */ jsx8(AlertHeading, { children: heading })
|
|
364
525
|
] }),
|
|
365
|
-
!(!!heading && AlertIcon) && !!heading && /* @__PURE__ */
|
|
366
|
-
!(!!heading && AlertIcon) && AlertIcon && /* @__PURE__ */
|
|
526
|
+
!(!!heading && AlertIcon) && !!heading && /* @__PURE__ */ jsx8(AlertHeading, { children: heading }),
|
|
527
|
+
!(!!heading && AlertIcon) && AlertIcon && /* @__PURE__ */ jsx8("div", { className: cmMerge4(alertIconTextColorClass, "float-left mr-2"), children: /* @__PURE__ */ jsx8(AlertIcon, { className: "mt-1 h-5 w-5" }) }),
|
|
367
528
|
children
|
|
368
529
|
] });
|
|
369
530
|
};
|
|
@@ -399,8 +560,8 @@ var AlertHeading = cm2.header`
|
|
|
399
560
|
`;
|
|
400
561
|
|
|
401
562
|
// src/mdx/components/Link.tsx
|
|
402
|
-
import { cmMerge as
|
|
403
|
-
import { Fragment as Fragment3, jsx as
|
|
563
|
+
import { cmMerge as cmMerge5 } from "@classmatejs/react";
|
|
564
|
+
import { Fragment as Fragment3, jsx as jsx9, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
404
565
|
function assertUsage(condition, message) {
|
|
405
566
|
if (!condition) {
|
|
406
567
|
throw new Error(`[UniversalMdxMods][Wrong Usage] ${message}`);
|
|
@@ -435,8 +596,8 @@ var parseMarkdownMini = (markdown) => {
|
|
|
435
596
|
if (current) {
|
|
436
597
|
parts.push(current);
|
|
437
598
|
}
|
|
438
|
-
return /* @__PURE__ */
|
|
439
|
-
(part, index) => part.nodeType === "code" ? /* @__PURE__ */
|
|
599
|
+
return /* @__PURE__ */ jsx9(Fragment3, { children: parts.map(
|
|
600
|
+
(part, index) => part.nodeType === "code" ? /* @__PURE__ */ jsx9("code", { children: part.content }, index) : /* @__PURE__ */ jsx9("span", { children: part.content }, index)
|
|
440
601
|
) });
|
|
441
602
|
};
|
|
442
603
|
var determineSectionTitle = (href) => {
|
|
@@ -472,7 +633,7 @@ var getLinkText = ({
|
|
|
472
633
|
if (noBreadcrumb || isCurrentPage) {
|
|
473
634
|
return breadcrumbParts[breadcrumbParts.length - 1] ?? null;
|
|
474
635
|
}
|
|
475
|
-
return /* @__PURE__ */
|
|
636
|
+
return /* @__PURE__ */ jsx9(Fragment3, { children: breadcrumbParts.map((part, index) => /* @__PURE__ */ jsxs6("span", { children: [
|
|
476
637
|
index > 0 ? " > " : null,
|
|
477
638
|
part
|
|
478
639
|
] }, index)) });
|
|
@@ -490,7 +651,7 @@ var Link = ({
|
|
|
490
651
|
const runtime = useUniversalMdxRuntime();
|
|
491
652
|
if (typeof href !== "string" || href === "") {
|
|
492
653
|
assertWarning(false, "<Link /> is missing `href`.");
|
|
493
|
-
return /* @__PURE__ */
|
|
654
|
+
return /* @__PURE__ */ jsx9("a", { className: cmMerge5(className, "inline-flex gap-1 items-center"), ...props, children: text ?? children ?? "LINK-TARGET-NOT-FOUND" });
|
|
494
655
|
}
|
|
495
656
|
assertUsage(
|
|
496
657
|
href.startsWith("/") || href.startsWith("#") || isExternalHref(href) || isDocsRelativeHref(href),
|
|
@@ -512,12 +673,12 @@ var Link = ({
|
|
|
512
673
|
sectionTitle: inferredSectionTitle ?? void 0,
|
|
513
674
|
title: resolvedDocLink.title
|
|
514
675
|
}) : isExternalHref(href) ? href : inferredSectionTitle ?? "LINK-TARGET-NOT-FOUND");
|
|
515
|
-
return /* @__PURE__ */
|
|
676
|
+
return /* @__PURE__ */ jsx9("a", { href: localizedHref, className: cmMerge5(className, ""), ...props, children: inferredText });
|
|
516
677
|
};
|
|
517
678
|
|
|
518
679
|
// src/mdx/components/Overview.tsx
|
|
519
680
|
import cm3 from "@classmatejs/react";
|
|
520
|
-
import { jsx as
|
|
681
|
+
import { jsx as jsx10, jsxs as jsxs7 } from "react/jsx-runtime";
|
|
521
682
|
import { createElement } from "react";
|
|
522
683
|
var isOverviewDividerItem = (item) => typeof item === "object" && item !== null && "dividerText" in item;
|
|
523
684
|
function assertUsage2(condition, message) {
|
|
@@ -550,9 +711,9 @@ var groupOverviewItems = (items) => {
|
|
|
550
711
|
return groups;
|
|
551
712
|
};
|
|
552
713
|
var OverviewCard = ({ excerpt, href, title, compact }) => {
|
|
553
|
-
return /* @__PURE__ */
|
|
554
|
-
/* @__PURE__ */
|
|
555
|
-
excerpt && !compact ? /* @__PURE__ */
|
|
714
|
+
return /* @__PURE__ */ jsxs7(StyleOverviewCard, { href: withSiteBaseUrl(href), $compact: compact, children: [
|
|
715
|
+
/* @__PURE__ */ jsx10("span", { className: "text-lg font-semibold text-base-content", children: renderInlineMarkdown(title) }),
|
|
716
|
+
excerpt && !compact ? /* @__PURE__ */ jsx10("p", { className: "text-sm leading-relaxed text-base-muted", children: renderInlineMarkdown(excerpt) }) : null
|
|
556
717
|
] });
|
|
557
718
|
};
|
|
558
719
|
var StyleOverviewCard = cm3.a.variants({
|
|
@@ -593,34 +754,34 @@ var Overview = ({ items, compact }) => {
|
|
|
593
754
|
if (groups.length === 0) {
|
|
594
755
|
return null;
|
|
595
756
|
}
|
|
596
|
-
return /* @__PURE__ */
|
|
597
|
-
group.dividerText ? /* @__PURE__ */
|
|
598
|
-
/* @__PURE__ */
|
|
757
|
+
return /* @__PURE__ */ jsx10("div", { className: "prose-headings:my-0 prose-p:my-0 my-5 flex flex-col gap-8", children: groups.map((group, groupIndex) => /* @__PURE__ */ jsxs7("section", { className: "flex flex-col gap-4", children: [
|
|
758
|
+
group.dividerText ? /* @__PURE__ */ jsx10("p", { className: "text-sm font-semibold uppercase tracking-wide", children: renderInlineMarkdown(group.dividerText) }) : null,
|
|
759
|
+
/* @__PURE__ */ jsx10("div", { className: "grid gap-3 sm:grid-cols-2", children: group.items.map((item, itemIndex) => /* @__PURE__ */ createElement(OverviewCard, { ...item, key: item.href || itemIndex, excerpt: !!item.excerpt, compact })) })
|
|
599
760
|
] }, groupIndex)) });
|
|
600
761
|
};
|
|
601
762
|
|
|
602
763
|
// src/mdx/components/RepoLink.tsx
|
|
603
|
-
import { jsx as
|
|
764
|
+
import { jsx as jsx11, jsxs as jsxs8 } from "react/jsx-runtime";
|
|
604
765
|
var RepoLink = ({ repo, timestamp }) => {
|
|
605
766
|
if (!repo || repo.split("/").length !== 2) {
|
|
606
767
|
throw new Error("Invalid repo");
|
|
607
768
|
}
|
|
608
|
-
return /* @__PURE__ */
|
|
609
|
-
/* @__PURE__ */
|
|
610
|
-
/* @__PURE__ */
|
|
769
|
+
return /* @__PURE__ */ jsxs8("span", { className: "inline-flex items-center gap-1", children: [
|
|
770
|
+
/* @__PURE__ */ jsx11("span", { className: "bg-white font-mono font-bold h-fit px-1 text-sm!", children: timestamp }),
|
|
771
|
+
/* @__PURE__ */ jsxs8("a", { href: `https://github.com/${repo}`, target: "_blank", rel: "noopener", children: [
|
|
611
772
|
"GitHub > ",
|
|
612
|
-
/* @__PURE__ */
|
|
773
|
+
/* @__PURE__ */ jsx11("code", { children: repo })
|
|
613
774
|
] })
|
|
614
775
|
] });
|
|
615
776
|
};
|
|
616
777
|
|
|
617
778
|
// src/mdx/components/Table.tsx
|
|
618
779
|
import cm4 from "@classmatejs/react";
|
|
619
|
-
import { jsx as
|
|
780
|
+
import { jsx as jsx12, jsxs as jsxs9 } from "react/jsx-runtime";
|
|
620
781
|
var Table = ({ size = "md", data }) => {
|
|
621
|
-
return /* @__PURE__ */
|
|
622
|
-
/* @__PURE__ */
|
|
623
|
-
/* @__PURE__ */
|
|
782
|
+
return /* @__PURE__ */ jsxs9(StyledTable, { $size: size, children: [
|
|
783
|
+
/* @__PURE__ */ jsx12("thead", { className: "overflow-hidden rounded-t-box bg-base-200", children: /* @__PURE__ */ jsx12("tr", { children: data.headers.map((header, index) => /* @__PURE__ */ jsx12("th", { children: header }, index)) }) }),
|
|
784
|
+
/* @__PURE__ */ jsx12("tbody", { children: data.rows.map((row, rowIndex) => /* @__PURE__ */ jsx12("tr", { children: row.map((cell, cellIndex) => /* @__PURE__ */ jsx12("td", { children: cell }, cellIndex)) }, rowIndex)) })
|
|
624
785
|
] });
|
|
625
786
|
};
|
|
626
787
|
var StyledTable = cm4.table.variants({
|
|
@@ -648,6 +809,7 @@ export {
|
|
|
648
809
|
CodeBlockTransformer,
|
|
649
810
|
FileAdded,
|
|
650
811
|
FileRemoved,
|
|
812
|
+
MermaidDiagram,
|
|
651
813
|
Pre,
|
|
652
814
|
Alert,
|
|
653
815
|
Link,
|
|
@@ -655,4 +817,4 @@ export {
|
|
|
655
817
|
RepoLink,
|
|
656
818
|
Table
|
|
657
819
|
};
|
|
658
|
-
//# sourceMappingURL=chunk-
|
|
820
|
+
//# sourceMappingURL=chunk-CLMYET6V.js.map
|