@willwang-io/react-djot 0.1.3 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +29 -0
- package/dist/index.cjs +503 -23
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +131 -1
- package/dist/index.d.ts +131 -1
- package/dist/index.js +504 -24
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/renderNode.tsx","../src/Djot.tsx"],"names":["createElement","Fragment","parse","jsx"],"mappings":"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","file":"index.cjs","sourcesContent":["import { createElement, Fragment } from \"react\";\nimport type React from \"react\";\nimport type {\n DjotBaseNode,\n DjotBlockQuoteNode,\n DjotBlockquoteNode,\n DjotCodeBlockNode,\n DjotCodeNode,\n DjotComponentPropsMap,\n DjotComponents,\n DjotDocNode,\n DjotHardBreakNode,\n DjotHeadingNode,\n DjotImageNode,\n DjotLinkNode,\n DjotNode,\n DjotOrderedListNode,\n DjotParentNode,\n DjotSectionNode,\n DjotSoftBreakNode,\n DjotStrNode,\n DjotVerbatimNode\n} from \"./types\";\n\nexport interface RenderNodeOptions {\n components?: DjotComponents | undefined;\n key?: React.Key;\n}\n\ntype ComponentKey = keyof DjotComponentPropsMap;\n\nfunction isParentNode(node: DjotBaseNode): node is DjotParentNode {\n return Array.isArray((node as DjotParentNode).children);\n}\n\nfunction isSoftBreakNode(node: DjotNode): node is DjotSoftBreakNode {\n return node.tag === \"soft_break\" || node.tag === \"softbreak\";\n}\n\nfunction isHardBreakNode(node: DjotNode): node is DjotHardBreakNode {\n return node.tag === \"hard_break\" || node.tag === \"hardbreak\";\n}\n\nfunction pickComponent(\n components: DjotComponents | undefined,\n primary: ComponentKey,\n alias?: ComponentKey\n): React.ElementType | undefined {\n if (!components) {\n return undefined;\n }\n\n return (components[primary] ?? (alias ? components[alias] : undefined)) as\n | React.ElementType\n | undefined;\n}\n\nfunction renderChildren(children: DjotNode[], components?: DjotComponents): React.ReactNode[] {\n return children.map((child, index) =>\n renderNode(child, {\n components,\n key: index\n })\n );\n}\n\nfunction toAltText(nodes: DjotNode[]): string {\n let output = \"\";\n\n for (const node of nodes) {\n switch (node.tag) {\n case \"str\":\n case \"code\":\n case \"verbatim\":\n case \"code_block\":\n output += node.text;\n break;\n case \"soft_break\":\n case \"softbreak\":\n output += \" \";\n break;\n case \"hard_break\":\n case \"hardbreak\":\n output += \"\\n\";\n break;\n default:\n if (isParentNode(node)) {\n output += toAltText(node.children);\n }\n break;\n }\n }\n\n return output.trim();\n}\n\nfunction clampHeadingLevel(level: number): 1 | 2 | 3 | 4 | 5 | 6 {\n if (level <= 1) {\n return 1;\n }\n\n if (level >= 6) {\n return 6;\n }\n\n return level as 1 | 2 | 3 | 4 | 5 | 6;\n}\n\nfunction withKey<T extends Record<string, unknown>>(props: T, key?: React.Key): T & { key?: React.Key } {\n if (key === undefined) {\n return props;\n }\n\n return {\n ...props,\n key\n };\n}\n\nfunction renderWithOverride(\n override: React.ElementType | undefined,\n fallback: React.ElementType,\n domProps: Record<string, unknown>,\n customProps: Record<string, unknown>,\n key?: React.Key,\n children?: React.ReactNode\n): React.ReactNode {\n const Component = override ?? fallback;\n const props =\n typeof Component === \"string\"\n ? withKey(domProps, key)\n : withKey(\n {\n ...domProps,\n ...customProps\n },\n key\n );\n\n return createElement(Component, props, children);\n}\n\nfunction renderDoc(\n node: DjotDocNode,\n components: DjotComponents | undefined,\n key?: React.Key\n): React.ReactNode {\n const children = renderChildren(node.children, components);\n const Component = pickComponent(components, \"doc\");\n\n if (Component) {\n if (typeof Component === \"string\") {\n return createElement(Component, withKey({}, key), children);\n }\n\n return createElement(Component, withKey({ node }, key), children);\n }\n\n return createElement(Fragment, withKey({}, key), children);\n}\n\nfunction renderSection(\n node: DjotSectionNode,\n components: DjotComponents | undefined,\n key?: React.Key\n): React.ReactNode {\n const children = renderChildren(node.children, components);\n const Component = pickComponent(components, \"section\");\n\n if (Component) {\n if (typeof Component === \"string\") {\n return createElement(Component, withKey({}, key), children);\n }\n\n return createElement(\n Component,\n withKey(\n {\n node\n },\n key\n ),\n children\n );\n }\n\n return createElement(Fragment, withKey({}, key), children);\n}\n\nfunction renderHeading(\n node: DjotHeadingNode,\n components: DjotComponents | undefined,\n key?: React.Key\n): React.ReactNode {\n const level = clampHeadingLevel(node.level);\n const children = renderChildren(node.children, components);\n return renderWithOverride(\n pickComponent(components, \"heading\"),\n `h${level}`,\n {},\n {\n level,\n node\n },\n key,\n children\n );\n}\n\nfunction renderCode(\n node: DjotCodeNode | DjotVerbatimNode,\n components: DjotComponents | undefined,\n key: React.Key | undefined,\n primary: \"code\" | \"verbatim\",\n alias: \"code\" | \"verbatim\"\n): React.ReactNode {\n const value = node.text;\n return renderWithOverride(\n pickComponent(components, primary, alias),\n \"code\",\n {},\n {\n node,\n value\n },\n key,\n value\n );\n}\n\nfunction renderCodeBlock(\n node: DjotCodeBlockNode,\n components: DjotComponents | undefined,\n key?: React.Key\n): React.ReactNode {\n const value = node.text;\n const language = node.lang;\n const fallbackChildren = createElement(\n \"code\",\n {\n className: language ? `language-${language}` : undefined\n },\n value\n );\n\n return renderWithOverride(\n pickComponent(components, \"code_block\"),\n \"pre\",\n {},\n {\n language,\n node,\n value\n },\n key,\n fallbackChildren\n );\n}\n\nfunction renderLink(\n node: DjotLinkNode,\n components: DjotComponents | undefined,\n key?: React.Key\n): React.ReactNode {\n const children = renderChildren(node.children, components);\n const href = node.destination;\n return renderWithOverride(\n pickComponent(components, \"link\"),\n \"a\",\n {\n href\n },\n {\n node\n },\n key,\n children\n );\n}\n\nfunction renderImage(\n node: DjotImageNode,\n components: DjotComponents | undefined,\n key?: React.Key\n): React.ReactNode {\n const alt = toAltText(node.children) || undefined;\n const src = node.destination;\n return renderWithOverride(\n pickComponent(components, \"image\"),\n \"img\",\n {\n alt,\n src\n },\n {\n alt,\n node\n },\n key\n );\n}\n\nfunction renderOrderedList(\n node: DjotOrderedListNode,\n components: DjotComponents | undefined,\n key?: React.Key\n): React.ReactNode {\n const children = renderChildren(node.children, components);\n return renderWithOverride(\n pickComponent(components, \"ordered_list\"),\n \"ol\",\n {\n start: node.start\n },\n {\n node,\n start: node.start\n },\n key,\n children\n );\n}\n\nfunction renderBlockQuote(\n node: DjotBlockquoteNode | DjotBlockQuoteNode,\n components: DjotComponents | undefined,\n key: React.Key | undefined,\n primary: \"blockquote\" | \"block_quote\",\n alias: \"blockquote\" | \"block_quote\"\n): React.ReactNode {\n const children = renderChildren(node.children, components);\n return renderWithOverride(\n pickComponent(components, primary, alias),\n \"blockquote\",\n {},\n {\n node\n },\n key,\n children\n );\n}\n\nfunction renderStr(\n node: DjotStrNode,\n components: DjotComponents | undefined,\n key?: React.Key\n): React.ReactNode {\n const value = node.text;\n const Component = pickComponent(components, \"str\");\n\n if (!Component) {\n return value;\n }\n\n if (typeof Component === \"string\") {\n return createElement(Component, withKey({}, key), value);\n }\n\n return createElement(\n Component,\n withKey(\n {\n node,\n value\n },\n key\n ),\n value\n );\n}\n\nfunction renderSoftBreak(\n node: DjotSoftBreakNode,\n components: DjotComponents | undefined,\n key?: React.Key\n): React.ReactNode {\n const Component = pickComponent(components, \"soft_break\", \"softbreak\");\n\n if (!Component) {\n return \"\\n\";\n }\n\n if (typeof Component === \"string\") {\n return createElement(Component, withKey({}, key), \"\\n\");\n }\n\n return createElement(\n Component,\n withKey(\n {\n node\n },\n key\n ),\n \"\\n\"\n );\n}\n\nfunction renderHardBreak(\n node: DjotHardBreakNode,\n components: DjotComponents | undefined,\n key?: React.Key\n): React.ReactNode {\n return renderWithOverride(\n pickComponent(components, \"hard_break\", \"hardbreak\"),\n \"br\",\n {},\n {\n node\n },\n key\n );\n}\n\nexport function renderNode(node: DjotNode, options: RenderNodeOptions = {}): React.ReactNode {\n const { components, key } = options;\n const children = isParentNode(node) ? renderChildren(node.children, components) : undefined;\n\n switch (node.tag) {\n case \"doc\":\n return renderDoc(node, components, key);\n case \"section\":\n return renderSection(node, components, key);\n case \"para\":\n return renderWithOverride(\n pickComponent(components, \"para\"),\n \"p\",\n {},\n {\n node\n },\n key,\n children\n );\n case \"heading\":\n return renderHeading(node, components, key);\n case \"emph\":\n return renderWithOverride(\n pickComponent(components, \"emph\"),\n \"em\",\n {},\n {\n node\n },\n key,\n children\n );\n case \"strong\":\n return renderWithOverride(\n pickComponent(components, \"strong\"),\n \"strong\",\n {},\n {\n node\n },\n key,\n children\n );\n case \"code\":\n return renderCode(node, components, key, \"code\", \"verbatim\");\n case \"verbatim\":\n return renderCode(node, components, key, \"verbatim\", \"code\");\n case \"code_block\":\n return renderCodeBlock(node, components, key);\n case \"link\":\n return renderLink(node, components, key);\n case \"image\":\n return renderImage(node, components, key);\n case \"bullet_list\":\n return renderWithOverride(\n pickComponent(components, \"bullet_list\"),\n \"ul\",\n {},\n {\n node\n },\n key,\n children\n );\n case \"ordered_list\":\n return renderOrderedList(node, components, key);\n case \"list_item\":\n return renderWithOverride(\n pickComponent(components, \"list_item\"),\n \"li\",\n {},\n {\n node\n },\n key,\n children\n );\n case \"blockquote\":\n return renderBlockQuote(node, components, key, \"blockquote\", \"block_quote\");\n case \"block_quote\":\n return renderBlockQuote(node, components, key, \"block_quote\", \"blockquote\");\n case \"thematic_break\":\n return renderWithOverride(\n pickComponent(components, \"thematic_break\"),\n \"hr\",\n {},\n {\n node\n },\n key\n );\n case \"str\":\n return renderStr(node, components, key);\n default:\n if (isSoftBreakNode(node)) {\n return renderSoftBreak(node, components, key);\n }\n\n if (isHardBreakNode(node)) {\n return renderHardBreak(node, components, key);\n }\n\n return null;\n }\n}\n","import { parse } from \"@djot/djot\";\nimport { Fragment } from \"react\";\nimport type React from \"react\";\nimport { renderNode } from \"./renderNode\";\nimport type { DjotNode, DjotProps } from \"./types\";\n\nexport function Djot({ children, components }: DjotProps): React.ReactElement | null {\n const source = children ?? \"\";\n\n if (source.length === 0) {\n return null;\n }\n\n const ast = parse(source) as DjotNode;\n return <Fragment>{renderNode(ast, { components })}</Fragment>;\n}\n\nexport default Djot;\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/renderNode.tsx","../src/Djot.tsx"],"names":["isValidElement","cloneElement","createElement","Fragment","parse","jsx"],"mappings":"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","file":"index.cjs","sourcesContent":["import { cloneElement, createElement, Fragment, isValidElement } from \"react\";\nimport type React from \"react\";\nimport type {\n DjotBaseNode,\n DjotBlockQuoteNode,\n DjotBlockquoteNode,\n DjotCaptionNode,\n DjotCellNode,\n DjotCodeBlockNode,\n DjotCodeNode,\n DjotComponentPropsMap,\n DjotComponents,\n DjotDeleteNode,\n DjotDivNode,\n DjotDoubleQuotedNode,\n DjotDisplayMathNode,\n DjotDocNode,\n DjotFootnoteReferenceNode,\n DjotHardBreakNode,\n DjotHeadingNode,\n DjotHighlightedNode,\n DjotImageNode,\n DjotInlineMathNode,\n DjotInsertNode,\n DjotLinkNode,\n DjotMarkNode,\n DjotNode,\n DjotOrderedListNode,\n DjotParentNode,\n DjotRowNode,\n DjotSectionNode,\n DjotSoftBreakNode,\n DjotSmartPunctuationNode,\n DjotSmartPunctuationType,\n DjotSingleQuotedNode,\n DjotStrNode,\n DjotSubscriptNode,\n DjotSuperscriptNode,\n DjotSupeNode,\n DjotTableAlignment,\n DjotTableNode,\n DjotVerbatimNode\n} from \"./types\";\n\nexport interface RenderNodeOptions {\n components?: DjotComponents | undefined;\n footnoteState?: FootnoteState | undefined;\n key?: React.Key;\n}\n\ntype ComponentKey = keyof DjotComponentPropsMap;\n\ninterface FootnoteState {\n firstRefIdByLabel: Map<string, string>;\n indexByLabel: Map<string, number>;\n order: string[];\n refCountByLabel: Map<string, number>;\n}\n\nfunction isParentNode(node: DjotBaseNode): node is DjotParentNode {\n return Array.isArray((node as DjotParentNode).children);\n}\n\nfunction isSoftBreakNode(node: DjotNode): node is DjotSoftBreakNode {\n return node.tag === \"soft_break\" || node.tag === \"softbreak\";\n}\n\nfunction isHardBreakNode(node: DjotNode): node is DjotHardBreakNode {\n return node.tag === \"hard_break\" || node.tag === \"hardbreak\";\n}\n\nfunction pickComponent(\n components: DjotComponents | undefined,\n primary: ComponentKey,\n alias?: ComponentKey\n): React.ElementType | undefined {\n if (!components) {\n return undefined;\n }\n\n return (components[primary] ?? (alias ? components[alias] : undefined)) as\n | React.ElementType\n | undefined;\n}\n\nfunction renderChildren(\n children: DjotNode[],\n components?: DjotComponents,\n footnoteState?: FootnoteState\n): React.ReactNode[] {\n return children.map((child, index) =>\n renderNode(child, {\n components,\n footnoteState,\n key: index\n })\n );\n}\n\nfunction collectFootnoteReferences(nodes: DjotNode[], indexByLabel: Map<string, number>, order: string[]): void {\n for (const node of nodes) {\n if (node.tag === \"footnote_reference\") {\n const label = node.text;\n if (!indexByLabel.has(label)) {\n const index = order.length + 1;\n indexByLabel.set(label, index);\n order.push(label);\n }\n continue;\n }\n\n if (isParentNode(node)) {\n collectFootnoteReferences(node.children, indexByLabel, order);\n }\n }\n}\n\nfunction createFootnoteState(node: DjotDocNode): FootnoteState {\n const indexByLabel = new Map<string, number>();\n const order: string[] = [];\n\n collectFootnoteReferences(node.children, indexByLabel, order);\n\n return {\n firstRefIdByLabel: new Map<string, string>(),\n indexByLabel,\n order,\n refCountByLabel: new Map<string, number>()\n };\n}\n\nfunction ensureFootnoteIndex(label: string, footnoteState: FootnoteState): number {\n const existing = footnoteState.indexByLabel.get(label);\n if (existing) {\n return existing;\n }\n\n const index = footnoteState.order.length + 1;\n footnoteState.indexByLabel.set(label, index);\n footnoteState.order.push(label);\n return index;\n}\n\nfunction appendBacklink(\n nodes: React.ReactNode[],\n backlink: React.ReactNode\n): React.ReactNode[] {\n if (nodes.length === 0) {\n return [backlink];\n }\n\n const next = nodes.slice();\n const lastIndex = next.length - 1;\n const last = next[lastIndex];\n\n if (isValidElement<{ children?: React.ReactNode }>(last)) {\n next[lastIndex] = cloneElement(last, undefined, last.props.children, backlink);\n return next;\n }\n\n next.push(backlink);\n return next;\n}\n\nfunction toSmartPunctuation(type: DjotSmartPunctuationType, fallback: string): string {\n switch (type) {\n case \"left_double_quote\":\n return \"\\u201c\";\n case \"right_double_quote\":\n return \"\\u201d\";\n case \"left_single_quote\":\n return \"\\u2018\";\n case \"right_single_quote\":\n return \"\\u2019\";\n case \"em_dash\":\n return \"\\u2014\";\n case \"en_dash\":\n return \"\\u2013\";\n case \"ellipses\":\n return \"\\u2026\";\n default:\n return fallback;\n }\n}\n\nfunction toAltText(nodes: DjotNode[]): string {\n let output = \"\";\n\n for (const node of nodes) {\n switch (node.tag) {\n case \"str\":\n case \"code\":\n case \"verbatim\":\n case \"inline_math\":\n case \"display_math\":\n case \"code_block\":\n output += node.text;\n break;\n case \"smart_punctuation\":\n output += toSmartPunctuation(node.type, node.text);\n break;\n case \"double_quoted\":\n output += `\\u201c${toAltText(node.children)}\\u201d`;\n break;\n case \"single_quoted\":\n output += `\\u2018${toAltText(node.children)}\\u2019`;\n break;\n case \"soft_break\":\n case \"softbreak\":\n output += \" \";\n break;\n case \"hard_break\":\n case \"hardbreak\":\n output += \"\\n\";\n break;\n default:\n if (isParentNode(node)) {\n output += toAltText(node.children);\n }\n break;\n }\n }\n\n return output.trim();\n}\n\nfunction clampHeadingLevel(level: number): 1 | 2 | 3 | 4 | 5 | 6 {\n if (level <= 1) {\n return 1;\n }\n\n if (level >= 6) {\n return 6;\n }\n\n return level as 1 | 2 | 3 | 4 | 5 | 6;\n}\n\nfunction withKey<T extends Record<string, unknown>>(props: T, key?: React.Key): T & { key?: React.Key } {\n if (key === undefined) {\n return props;\n }\n\n return {\n ...props,\n key\n };\n}\n\nfunction toDomPropsFromAttributes(attributes: Record<string, string> | undefined): Record<string, unknown> {\n if (!attributes) {\n return {};\n }\n\n const props: Record<string, unknown> = {};\n for (const [name, value] of Object.entries(attributes)) {\n if (name === \"class\") {\n props.className = value;\n } else {\n props[name] = value;\n }\n }\n\n return props;\n}\n\nfunction textAlignForCell(align: DjotTableAlignment): React.CSSProperties[\"textAlign\"] | undefined {\n if (align === \"left\") {\n return \"left\";\n }\n\n if (align === \"right\") {\n return \"right\";\n }\n\n if (align === \"center\") {\n return \"center\";\n }\n\n return undefined;\n}\n\nfunction renderWithOverride(\n override: React.ElementType | undefined,\n fallback: React.ElementType,\n domProps: Record<string, unknown>,\n customProps: Record<string, unknown>,\n key?: React.Key,\n children?: React.ReactNode\n): React.ReactNode {\n const Component = override ?? fallback;\n const props =\n typeof Component === \"string\"\n ? withKey(domProps, key)\n : withKey(\n {\n ...domProps,\n ...customProps\n },\n key\n );\n\n return createElement(Component, props, children);\n}\n\nfunction renderDoc(\n node: DjotDocNode,\n components: DjotComponents | undefined,\n key?: React.Key\n): React.ReactNode {\n const footnoteState = createFootnoteState(node);\n const children = renderChildren(node.children, components, footnoteState);\n const endnotes = renderEndnotes(node, components, footnoteState);\n const allChildren = endnotes ? [...children, endnotes] : children;\n const Component = pickComponent(components, \"doc\");\n\n if (Component) {\n if (typeof Component === \"string\") {\n return createElement(Component, withKey({}, key), allChildren);\n }\n\n return createElement(Component, withKey({ node }, key), allChildren);\n }\n\n return createElement(Fragment, withKey({}, key), allChildren);\n}\n\nfunction renderSection(\n node: DjotSectionNode,\n components: DjotComponents | undefined,\n footnoteState: FootnoteState | undefined,\n key?: React.Key\n): React.ReactNode {\n const children = renderChildren(node.children, components, footnoteState);\n const Component = pickComponent(components, \"section\");\n\n if (Component) {\n if (typeof Component === \"string\") {\n return createElement(Component, withKey({}, key), children);\n }\n\n return createElement(\n Component,\n withKey(\n {\n node\n },\n key\n ),\n children\n );\n }\n\n return createElement(Fragment, withKey({}, key), children);\n}\n\nfunction renderDiv(\n node: DjotDivNode,\n components: DjotComponents | undefined,\n footnoteState: FootnoteState | undefined,\n key?: React.Key\n): React.ReactNode {\n const children = renderChildren(node.children, components, footnoteState);\n return renderWithOverride(\n pickComponent(components, \"div\"),\n \"div\",\n toDomPropsFromAttributes(node.attributes),\n {\n node\n },\n key,\n children\n );\n}\n\nfunction renderTable(\n node: DjotTableNode,\n components: DjotComponents | undefined,\n footnoteState: FootnoteState | undefined,\n key?: React.Key\n): React.ReactNode {\n const children = renderChildren(node.children, components, footnoteState);\n return renderWithOverride(\n pickComponent(components, \"table\"),\n \"table\",\n toDomPropsFromAttributes(node.attributes),\n {\n node\n },\n key,\n children\n );\n}\n\nfunction renderCaption(\n node: DjotCaptionNode,\n components: DjotComponents | undefined,\n footnoteState: FootnoteState | undefined,\n key?: React.Key\n): React.ReactNode {\n const children = renderChildren(node.children, components, footnoteState);\n const Component = pickComponent(components, \"caption\");\n\n if (!Component && children.length === 0) {\n return null;\n }\n\n return renderWithOverride(\n Component,\n \"caption\",\n toDomPropsFromAttributes(node.attributes),\n {\n node\n },\n key,\n children\n );\n}\n\nfunction renderRow(\n node: DjotRowNode,\n components: DjotComponents | undefined,\n footnoteState: FootnoteState | undefined,\n key?: React.Key\n): React.ReactNode {\n const children = renderChildren(node.children, components, footnoteState);\n return renderWithOverride(\n pickComponent(components, \"row\"),\n \"tr\",\n toDomPropsFromAttributes(node.attributes),\n {\n head: node.head,\n node\n },\n key,\n children\n );\n}\n\nfunction renderCell(\n node: DjotCellNode,\n components: DjotComponents | undefined,\n footnoteState: FootnoteState | undefined,\n key?: React.Key\n): React.ReactNode {\n const children = renderChildren(node.children, components, footnoteState);\n const textAlign = textAlignForCell(node.align);\n const domProps = {\n ...toDomPropsFromAttributes(node.attributes),\n style: textAlign ? { textAlign } : undefined\n };\n\n return renderWithOverride(\n pickComponent(components, \"cell\"),\n node.head ? \"th\" : \"td\",\n domProps,\n {\n align: node.align,\n head: node.head,\n node\n },\n key,\n children\n );\n}\n\nfunction renderHeading(\n node: DjotHeadingNode,\n components: DjotComponents | undefined,\n footnoteState: FootnoteState | undefined,\n key?: React.Key\n): React.ReactNode {\n const level = clampHeadingLevel(node.level);\n const children = renderChildren(node.children, components, footnoteState);\n return renderWithOverride(\n pickComponent(components, \"heading\"),\n `h${level}`,\n {},\n {\n level,\n node\n },\n key,\n children\n );\n}\n\nfunction renderMark(\n node: DjotMarkNode | DjotHighlightedNode,\n components: DjotComponents | undefined,\n footnoteState: FootnoteState | undefined,\n key: React.Key | undefined,\n primary: \"mark\" | \"highlighted\",\n alias: \"mark\" | \"highlighted\"\n): React.ReactNode {\n const children = renderChildren(node.children, components, footnoteState);\n return renderWithOverride(\n pickComponent(components, primary, alias),\n \"mark\",\n {},\n {\n node\n },\n key,\n children\n );\n}\n\nfunction renderSuperscript(\n node: DjotSuperscriptNode | DjotSupeNode,\n components: DjotComponents | undefined,\n footnoteState: FootnoteState | undefined,\n key: React.Key | undefined,\n primary: \"superscript\" | \"supe\",\n alias: \"superscript\" | \"supe\"\n): React.ReactNode {\n const children = renderChildren(node.children, components, footnoteState);\n return renderWithOverride(\n pickComponent(components, primary, alias),\n \"sup\",\n {},\n {\n node\n },\n key,\n children\n );\n}\n\nfunction renderSubscript(\n node: DjotSubscriptNode,\n components: DjotComponents | undefined,\n footnoteState: FootnoteState | undefined,\n key?: React.Key\n): React.ReactNode {\n const children = renderChildren(node.children, components, footnoteState);\n return renderWithOverride(\n pickComponent(components, \"subscript\"),\n \"sub\",\n {},\n {\n node\n },\n key,\n children\n );\n}\n\nfunction renderInsert(\n node: DjotInsertNode,\n components: DjotComponents | undefined,\n footnoteState: FootnoteState | undefined,\n key?: React.Key\n): React.ReactNode {\n const children = renderChildren(node.children, components, footnoteState);\n return renderWithOverride(\n pickComponent(components, \"insert\"),\n \"ins\",\n {},\n {\n node\n },\n key,\n children\n );\n}\n\nfunction renderDelete(\n node: DjotDeleteNode,\n components: DjotComponents | undefined,\n footnoteState: FootnoteState | undefined,\n key?: React.Key\n): React.ReactNode {\n const children = renderChildren(node.children, components, footnoteState);\n return renderWithOverride(\n pickComponent(components, \"delete\"),\n \"del\",\n {},\n {\n node\n },\n key,\n children\n );\n}\n\nfunction renderFootnoteReference(\n node: DjotFootnoteReferenceNode,\n components: DjotComponents | undefined,\n footnoteState: FootnoteState | undefined,\n key?: React.Key\n): React.ReactNode {\n const label = node.text;\n const index = footnoteState ? ensureFootnoteIndex(label, footnoteState) : 1;\n const refCount = (footnoteState?.refCountByLabel.get(label) ?? 0) + 1;\n\n if (footnoteState) {\n footnoteState.refCountByLabel.set(label, refCount);\n }\n\n const id = refCount === 1 ? `fnref${index}` : `fnref${index}-${refCount}`;\n if (footnoteState && !footnoteState.firstRefIdByLabel.has(label)) {\n footnoteState.firstRefIdByLabel.set(label, id);\n }\n\n const href = `#fn${index}`;\n const children = createElement(\"sup\", null, index);\n return renderWithOverride(\n pickComponent(components, \"footnote_reference\"),\n \"a\",\n {\n href,\n id,\n role: \"doc-noteref\"\n },\n {\n index,\n label,\n node\n },\n key,\n children\n );\n}\n\nfunction renderEndnotes(\n node: DjotDocNode,\n components: DjotComponents | undefined,\n footnoteState: FootnoteState\n): React.ReactNode {\n if (footnoteState.order.length === 0) {\n return null;\n }\n\n const items = footnoteState.order.map((label, itemIndex) => {\n const index = itemIndex + 1;\n const footnoteNode = node.footnotes?.[label] ?? {\n children: [],\n label,\n tag: \"footnote\"\n };\n\n const footnoteChildren = renderChildren(footnoteNode.children, components, footnoteState);\n const backlink = createElement(\n \"a\",\n {\n href: `#${footnoteState.firstRefIdByLabel.get(label) ?? `fnref${index}`}`,\n role: \"doc-backlink\"\n },\n \"\\u21a9\\ufe0e\"\n );\n\n const content = appendBacklink(footnoteChildren, backlink);\n\n return renderWithOverride(\n pickComponent(components, \"footnote\"),\n \"li\",\n {\n id: `fn${index}`,\n key: label\n },\n {\n index,\n label,\n node: footnoteNode\n },\n label,\n content\n );\n });\n\n const ol = createElement(\"ol\", null, items);\n const sectionChildren = [createElement(\"hr\", { key: \"hr\" }), createElement(Fragment, { key: \"ol\" }, ol)];\n return renderWithOverride(\n pickComponent(components, \"endnotes\"),\n \"section\",\n {\n role: \"doc-endnotes\"\n },\n {\n node,\n order: footnoteState.order\n },\n \"endnotes\",\n sectionChildren\n );\n}\n\nfunction renderQuoted(\n node: DjotDoubleQuotedNode | DjotSingleQuotedNode,\n components: DjotComponents | undefined,\n footnoteState: FootnoteState | undefined,\n key: React.Key | undefined,\n primary: \"double_quoted\" | \"single_quoted\",\n alias: \"double_quoted\" | \"single_quoted\",\n openQuote: string,\n closeQuote: string\n): React.ReactNode {\n const children = renderChildren(node.children, components, footnoteState);\n const Component = pickComponent(components, primary, alias);\n\n if (!Component) {\n return createElement(Fragment, withKey({}, key), openQuote, children, closeQuote);\n }\n\n if (typeof Component === \"string\") {\n return createElement(Component, withKey({}, key), openQuote, children, closeQuote);\n }\n\n return createElement(\n Component,\n withKey(\n {\n node\n },\n key\n ),\n openQuote,\n children,\n closeQuote\n );\n}\n\nfunction renderSmartPunctuation(\n node: DjotSmartPunctuationNode,\n components: DjotComponents | undefined,\n key?: React.Key\n): React.ReactNode {\n const value = toSmartPunctuation(node.type, node.text);\n const Component = pickComponent(components, \"smart_punctuation\");\n\n if (!Component) {\n return value;\n }\n\n if (typeof Component === \"string\") {\n return createElement(Component, withKey({}, key), value);\n }\n\n return createElement(\n Component,\n withKey(\n {\n kind: node.type,\n node,\n value\n },\n key\n ),\n value\n );\n}\n\nfunction renderInlineMath(\n node: DjotInlineMathNode,\n components: DjotComponents | undefined,\n key?: React.Key\n): React.ReactNode {\n const value = node.text;\n return renderWithOverride(\n pickComponent(components, \"inline_math\"),\n \"span\",\n {\n className: \"math inline\"\n },\n {\n node,\n value\n },\n key,\n `\\\\(${value}\\\\)`\n );\n}\n\nfunction renderDisplayMath(\n node: DjotDisplayMathNode,\n components: DjotComponents | undefined,\n key?: React.Key\n): React.ReactNode {\n const value = node.text;\n return renderWithOverride(\n pickComponent(components, \"display_math\"),\n \"span\",\n {\n className: \"math display\"\n },\n {\n node,\n value\n },\n key,\n `\\\\[${value}\\\\]`\n );\n}\n\nfunction renderCode(\n node: DjotCodeNode | DjotVerbatimNode,\n components: DjotComponents | undefined,\n key: React.Key | undefined,\n primary: \"code\" | \"verbatim\",\n alias: \"code\" | \"verbatim\"\n): React.ReactNode {\n const value = node.text;\n return renderWithOverride(\n pickComponent(components, primary, alias),\n \"code\",\n {},\n {\n node,\n value\n },\n key,\n value\n );\n}\n\nfunction renderCodeBlock(\n node: DjotCodeBlockNode,\n components: DjotComponents | undefined,\n key?: React.Key\n): React.ReactNode {\n const value = node.text;\n const language = node.lang;\n const fallbackChildren = createElement(\n \"code\",\n {\n className: language ? `language-${language}` : undefined\n },\n value\n );\n\n return renderWithOverride(\n pickComponent(components, \"code_block\"),\n \"pre\",\n {},\n {\n language,\n node,\n value\n },\n key,\n fallbackChildren\n );\n}\n\nfunction renderLink(\n node: DjotLinkNode,\n components: DjotComponents | undefined,\n footnoteState: FootnoteState | undefined,\n key?: React.Key\n): React.ReactNode {\n const children = renderChildren(node.children, components, footnoteState);\n const href = node.destination;\n return renderWithOverride(\n pickComponent(components, \"link\"),\n \"a\",\n {\n href\n },\n {\n node\n },\n key,\n children\n );\n}\n\nfunction renderImage(\n node: DjotImageNode,\n components: DjotComponents | undefined,\n key?: React.Key\n): React.ReactNode {\n const alt = toAltText(node.children) || undefined;\n const src = node.destination;\n return renderWithOverride(\n pickComponent(components, \"image\"),\n \"img\",\n {\n alt,\n src\n },\n {\n alt,\n node\n },\n key\n );\n}\n\nfunction renderOrderedList(\n node: DjotOrderedListNode,\n components: DjotComponents | undefined,\n footnoteState: FootnoteState | undefined,\n key?: React.Key\n): React.ReactNode {\n const children = renderChildren(node.children, components, footnoteState);\n return renderWithOverride(\n pickComponent(components, \"ordered_list\"),\n \"ol\",\n {\n start: node.start\n },\n {\n node,\n start: node.start\n },\n key,\n children\n );\n}\n\nfunction renderBlockQuote(\n node: DjotBlockquoteNode | DjotBlockQuoteNode,\n components: DjotComponents | undefined,\n footnoteState: FootnoteState | undefined,\n key: React.Key | undefined,\n primary: \"blockquote\" | \"block_quote\",\n alias: \"blockquote\" | \"block_quote\"\n): React.ReactNode {\n const children = renderChildren(node.children, components, footnoteState);\n return renderWithOverride(\n pickComponent(components, primary, alias),\n \"blockquote\",\n {},\n {\n node\n },\n key,\n children\n );\n}\n\nfunction renderStr(\n node: DjotStrNode,\n components: DjotComponents | undefined,\n key?: React.Key\n): React.ReactNode {\n const value = node.text;\n const Component = pickComponent(components, \"str\");\n\n if (!Component) {\n return value;\n }\n\n if (typeof Component === \"string\") {\n return createElement(Component, withKey({}, key), value);\n }\n\n return createElement(\n Component,\n withKey(\n {\n node,\n value\n },\n key\n ),\n value\n );\n}\n\nfunction renderSoftBreak(\n node: DjotSoftBreakNode,\n components: DjotComponents | undefined,\n key?: React.Key\n): React.ReactNode {\n const Component = pickComponent(components, \"soft_break\", \"softbreak\");\n\n if (!Component) {\n return \"\\n\";\n }\n\n if (typeof Component === \"string\") {\n return createElement(Component, withKey({}, key), \"\\n\");\n }\n\n return createElement(\n Component,\n withKey(\n {\n node\n },\n key\n ),\n \"\\n\"\n );\n}\n\nfunction renderHardBreak(\n node: DjotHardBreakNode,\n components: DjotComponents | undefined,\n key?: React.Key\n): React.ReactNode {\n return renderWithOverride(\n pickComponent(components, \"hard_break\", \"hardbreak\"),\n \"br\",\n {},\n {\n node\n },\n key\n );\n}\n\nexport function renderNode(node: DjotNode, options: RenderNodeOptions = {}): React.ReactNode {\n const { components, footnoteState, key } = options;\n const children = isParentNode(node) ? renderChildren(node.children, components, footnoteState) : undefined;\n\n switch (node.tag) {\n case \"doc\":\n return renderDoc(node, components, key);\n case \"section\":\n return renderSection(node, components, footnoteState, key);\n case \"div\":\n return renderDiv(node, components, footnoteState, key);\n case \"table\":\n return renderTable(node, components, footnoteState, key);\n case \"caption\":\n return renderCaption(node, components, footnoteState, key);\n case \"row\":\n return renderRow(node, components, footnoteState, key);\n case \"cell\":\n return renderCell(node, components, footnoteState, key);\n case \"para\":\n return renderWithOverride(\n pickComponent(components, \"para\"),\n \"p\",\n {},\n {\n node\n },\n key,\n children\n );\n case \"heading\":\n return renderHeading(node, components, footnoteState, key);\n case \"emph\":\n return renderWithOverride(\n pickComponent(components, \"emph\"),\n \"em\",\n {},\n {\n node\n },\n key,\n children\n );\n case \"strong\":\n return renderWithOverride(\n pickComponent(components, \"strong\"),\n \"strong\",\n {},\n {\n node\n },\n key,\n children\n );\n case \"mark\":\n return renderMark(node, components, footnoteState, key, \"mark\", \"highlighted\");\n case \"highlighted\":\n return renderMark(node, components, footnoteState, key, \"highlighted\", \"mark\");\n case \"superscript\":\n return renderSuperscript(node, components, footnoteState, key, \"superscript\", \"supe\");\n case \"supe\":\n return renderSuperscript(node, components, footnoteState, key, \"supe\", \"superscript\");\n case \"subscript\":\n return renderSubscript(node, components, footnoteState, key);\n case \"insert\":\n return renderInsert(node, components, footnoteState, key);\n case \"delete\":\n return renderDelete(node, components, footnoteState, key);\n case \"footnote_reference\":\n return renderFootnoteReference(node, components, footnoteState, key);\n case \"footnote\":\n return renderWithOverride(\n pickComponent(components, \"footnote\"),\n \"li\",\n {},\n {\n index: 0,\n label: node.label,\n node\n },\n key,\n children\n );\n case \"double_quoted\":\n return renderQuoted(\n node,\n components,\n footnoteState,\n key,\n \"double_quoted\",\n \"single_quoted\",\n \"\\u201c\",\n \"\\u201d\"\n );\n case \"single_quoted\":\n return renderQuoted(\n node,\n components,\n footnoteState,\n key,\n \"single_quoted\",\n \"double_quoted\",\n \"\\u2018\",\n \"\\u2019\"\n );\n case \"smart_punctuation\":\n return renderSmartPunctuation(node, components, key);\n case \"inline_math\":\n return renderInlineMath(node, components, key);\n case \"display_math\":\n return renderDisplayMath(node, components, key);\n case \"code\":\n return renderCode(node, components, key, \"code\", \"verbatim\");\n case \"verbatim\":\n return renderCode(node, components, key, \"verbatim\", \"code\");\n case \"code_block\":\n return renderCodeBlock(node, components, key);\n case \"link\":\n return renderLink(node, components, footnoteState, key);\n case \"image\":\n return renderImage(node, components, key);\n case \"bullet_list\":\n return renderWithOverride(\n pickComponent(components, \"bullet_list\"),\n \"ul\",\n {},\n {\n node\n },\n key,\n children\n );\n case \"ordered_list\":\n return renderOrderedList(node, components, footnoteState, key);\n case \"list_item\":\n return renderWithOverride(\n pickComponent(components, \"list_item\"),\n \"li\",\n {},\n {\n node\n },\n key,\n children\n );\n case \"blockquote\":\n return renderBlockQuote(node, components, footnoteState, key, \"blockquote\", \"block_quote\");\n case \"block_quote\":\n return renderBlockQuote(node, components, footnoteState, key, \"block_quote\", \"blockquote\");\n case \"thematic_break\":\n return renderWithOverride(\n pickComponent(components, \"thematic_break\"),\n \"hr\",\n {},\n {\n node\n },\n key\n );\n case \"str\":\n return renderStr(node, components, key);\n default:\n if (isSoftBreakNode(node)) {\n return renderSoftBreak(node, components, key);\n }\n\n if (isHardBreakNode(node)) {\n return renderHardBreak(node, components, key);\n }\n\n return null;\n }\n}\n","import { parse } from \"@djot/djot\";\nimport { Fragment } from \"react\";\nimport type React from \"react\";\nimport { renderNode } from \"./renderNode\";\nimport type { DjotNode, DjotProps } from \"./types\";\n\nexport function Djot({ children, components }: DjotProps): React.ReactElement | null {\n const source = children ?? \"\";\n\n if (source.length === 0) {\n return null;\n }\n\n const ast = parse(source) as DjotNode;\n return <Fragment>{renderNode(ast, { components })}</Fragment>;\n}\n\nexport default Djot;\n"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -9,12 +9,18 @@ interface DjotParentNode extends DjotBaseNode {
|
|
|
9
9
|
children: DjotNode[];
|
|
10
10
|
}
|
|
11
11
|
interface DjotDocNode extends DjotParentNode {
|
|
12
|
+
autoReferences?: Record<string, unknown>;
|
|
13
|
+
footnotes?: Record<string, DjotFootnoteNode>;
|
|
14
|
+
references?: Record<string, unknown>;
|
|
12
15
|
tag: "doc";
|
|
13
16
|
}
|
|
14
17
|
interface DjotSectionNode extends DjotParentNode {
|
|
15
18
|
autoAttributes?: DjotAttributes;
|
|
16
19
|
tag: "section";
|
|
17
20
|
}
|
|
21
|
+
interface DjotDivNode extends DjotParentNode {
|
|
22
|
+
tag: "div";
|
|
23
|
+
}
|
|
18
24
|
interface DjotParaNode extends DjotParentNode {
|
|
19
25
|
tag: "para";
|
|
20
26
|
}
|
|
@@ -28,6 +34,71 @@ interface DjotEmphNode extends DjotParentNode {
|
|
|
28
34
|
interface DjotStrongNode extends DjotParentNode {
|
|
29
35
|
tag: "strong";
|
|
30
36
|
}
|
|
37
|
+
interface DjotMarkNode extends DjotParentNode {
|
|
38
|
+
tag: "mark";
|
|
39
|
+
}
|
|
40
|
+
interface DjotHighlightedNode extends DjotParentNode {
|
|
41
|
+
tag: "highlighted";
|
|
42
|
+
}
|
|
43
|
+
interface DjotSuperscriptNode extends DjotParentNode {
|
|
44
|
+
tag: "superscript";
|
|
45
|
+
}
|
|
46
|
+
interface DjotSupeNode extends DjotParentNode {
|
|
47
|
+
tag: "supe";
|
|
48
|
+
}
|
|
49
|
+
interface DjotSubscriptNode extends DjotParentNode {
|
|
50
|
+
tag: "subscript";
|
|
51
|
+
}
|
|
52
|
+
interface DjotInsertNode extends DjotParentNode {
|
|
53
|
+
tag: "insert";
|
|
54
|
+
}
|
|
55
|
+
interface DjotDeleteNode extends DjotParentNode {
|
|
56
|
+
tag: "delete";
|
|
57
|
+
}
|
|
58
|
+
type DjotTableAlignment = "default" | "left" | "right" | "center" | (string & {});
|
|
59
|
+
interface DjotTableNode extends DjotParentNode {
|
|
60
|
+
tag: "table";
|
|
61
|
+
}
|
|
62
|
+
interface DjotCaptionNode extends DjotParentNode {
|
|
63
|
+
tag: "caption";
|
|
64
|
+
}
|
|
65
|
+
interface DjotRowNode extends DjotParentNode {
|
|
66
|
+
head: boolean;
|
|
67
|
+
tag: "row";
|
|
68
|
+
}
|
|
69
|
+
interface DjotCellNode extends DjotParentNode {
|
|
70
|
+
align: DjotTableAlignment;
|
|
71
|
+
head: boolean;
|
|
72
|
+
tag: "cell";
|
|
73
|
+
}
|
|
74
|
+
interface DjotFootnoteReferenceNode extends DjotBaseNode {
|
|
75
|
+
tag: "footnote_reference";
|
|
76
|
+
text: string;
|
|
77
|
+
}
|
|
78
|
+
interface DjotFootnoteNode extends DjotParentNode {
|
|
79
|
+
label: string;
|
|
80
|
+
tag: "footnote";
|
|
81
|
+
}
|
|
82
|
+
interface DjotDoubleQuotedNode extends DjotParentNode {
|
|
83
|
+
tag: "double_quoted";
|
|
84
|
+
}
|
|
85
|
+
interface DjotSingleQuotedNode extends DjotParentNode {
|
|
86
|
+
tag: "single_quoted";
|
|
87
|
+
}
|
|
88
|
+
type DjotSmartPunctuationType = "left_double_quote" | "right_double_quote" | "left_single_quote" | "right_single_quote" | "em_dash" | "en_dash" | "ellipses" | (string & {});
|
|
89
|
+
interface DjotSmartPunctuationNode extends DjotBaseNode {
|
|
90
|
+
tag: "smart_punctuation";
|
|
91
|
+
text: string;
|
|
92
|
+
type: DjotSmartPunctuationType;
|
|
93
|
+
}
|
|
94
|
+
interface DjotInlineMathNode extends DjotBaseNode {
|
|
95
|
+
tag: "inline_math";
|
|
96
|
+
text: string;
|
|
97
|
+
}
|
|
98
|
+
interface DjotDisplayMathNode extends DjotBaseNode {
|
|
99
|
+
tag: "display_math";
|
|
100
|
+
text: string;
|
|
101
|
+
}
|
|
31
102
|
interface DjotCodeNode extends DjotBaseNode {
|
|
32
103
|
tag: "code";
|
|
33
104
|
text: string;
|
|
@@ -78,7 +149,7 @@ interface DjotSoftBreakNode extends DjotBaseNode {
|
|
|
78
149
|
interface DjotHardBreakNode extends DjotBaseNode {
|
|
79
150
|
tag: "hard_break" | "hardbreak";
|
|
80
151
|
}
|
|
81
|
-
type DjotNode = DjotDocNode | DjotSectionNode | DjotParaNode | DjotHeadingNode | DjotEmphNode | DjotStrongNode | DjotCodeNode | DjotCodeBlockNode | DjotLinkNode | DjotImageNode | DjotBulletListNode | DjotOrderedListNode | DjotListItemNode | DjotBlockquoteNode | DjotBlockQuoteNode | DjotThematicBreakNode | DjotStrNode | DjotVerbatimNode | DjotSoftBreakNode | DjotHardBreakNode;
|
|
152
|
+
type DjotNode = DjotDocNode | DjotSectionNode | DjotDivNode | DjotParaNode | DjotHeadingNode | DjotEmphNode | DjotStrongNode | DjotMarkNode | DjotHighlightedNode | DjotSuperscriptNode | DjotSupeNode | DjotSubscriptNode | DjotInsertNode | DjotDeleteNode | DjotTableNode | DjotCaptionNode | DjotRowNode | DjotCellNode | DjotFootnoteReferenceNode | DjotFootnoteNode | DjotDoubleQuotedNode | DjotSingleQuotedNode | DjotSmartPunctuationNode | DjotInlineMathNode | DjotDisplayMathNode | DjotCodeNode | DjotCodeBlockNode | DjotLinkNode | DjotImageNode | DjotBulletListNode | DjotOrderedListNode | DjotListItemNode | DjotBlockquoteNode | DjotBlockQuoteNode | DjotThematicBreakNode | DjotStrNode | DjotVerbatimNode | DjotSoftBreakNode | DjotHardBreakNode;
|
|
82
153
|
type DjotNodeTag = DjotNode["tag"];
|
|
83
154
|
type DjotNodeByTag<Tag extends DjotNodeTag> = Extract<DjotNode, {
|
|
84
155
|
tag: Tag;
|
|
@@ -90,12 +161,64 @@ interface DjotNodePropsBase<Tag extends DjotNodeTag> {
|
|
|
90
161
|
interface DjotComponentPropsMap {
|
|
91
162
|
doc: DjotNodePropsBase<"doc">;
|
|
92
163
|
section: React.HTMLAttributes<HTMLElement> & DjotNodePropsBase<"section">;
|
|
164
|
+
div: React.HTMLAttributes<HTMLDivElement> & DjotNodePropsBase<"div">;
|
|
93
165
|
para: React.HTMLAttributes<HTMLParagraphElement> & DjotNodePropsBase<"para">;
|
|
94
166
|
heading: React.HTMLAttributes<HTMLHeadingElement> & DjotNodePropsBase<"heading"> & {
|
|
95
167
|
level: number;
|
|
96
168
|
};
|
|
97
169
|
emph: React.HTMLAttributes<HTMLElement> & DjotNodePropsBase<"emph">;
|
|
98
170
|
strong: React.HTMLAttributes<HTMLElement> & DjotNodePropsBase<"strong">;
|
|
171
|
+
mark: React.HTMLAttributes<HTMLElement> & Omit<DjotNodePropsBase<"mark">, "node"> & {
|
|
172
|
+
node: DjotMarkNode | DjotHighlightedNode;
|
|
173
|
+
};
|
|
174
|
+
highlighted: React.HTMLAttributes<HTMLElement> & Omit<DjotNodePropsBase<"highlighted">, "node"> & {
|
|
175
|
+
node: DjotMarkNode | DjotHighlightedNode;
|
|
176
|
+
};
|
|
177
|
+
superscript: React.HTMLAttributes<HTMLElement> & Omit<DjotNodePropsBase<"superscript">, "node"> & {
|
|
178
|
+
node: DjotSuperscriptNode | DjotSupeNode;
|
|
179
|
+
};
|
|
180
|
+
supe: React.HTMLAttributes<HTMLElement> & Omit<DjotNodePropsBase<"supe">, "node"> & {
|
|
181
|
+
node: DjotSuperscriptNode | DjotSupeNode;
|
|
182
|
+
};
|
|
183
|
+
subscript: React.HTMLAttributes<HTMLElement> & DjotNodePropsBase<"subscript">;
|
|
184
|
+
insert: React.HTMLAttributes<HTMLElement> & DjotNodePropsBase<"insert">;
|
|
185
|
+
delete: React.HTMLAttributes<HTMLElement> & DjotNodePropsBase<"delete">;
|
|
186
|
+
table: React.TableHTMLAttributes<HTMLTableElement> & DjotNodePropsBase<"table">;
|
|
187
|
+
caption: React.HTMLAttributes<HTMLTableCaptionElement> & DjotNodePropsBase<"caption">;
|
|
188
|
+
row: React.HTMLAttributes<HTMLTableRowElement> & DjotNodePropsBase<"row"> & {
|
|
189
|
+
head: boolean;
|
|
190
|
+
};
|
|
191
|
+
cell: React.TdHTMLAttributes<HTMLTableCellElement> & Omit<DjotNodePropsBase<"cell">, "node"> & {
|
|
192
|
+
align: DjotTableAlignment;
|
|
193
|
+
head: boolean;
|
|
194
|
+
node: DjotCellNode;
|
|
195
|
+
};
|
|
196
|
+
footnote_reference: React.AnchorHTMLAttributes<HTMLAnchorElement> & DjotNodePropsBase<"footnote_reference"> & {
|
|
197
|
+
index: number;
|
|
198
|
+
label: string;
|
|
199
|
+
};
|
|
200
|
+
footnote: React.LiHTMLAttributes<HTMLLIElement> & Omit<DjotNodePropsBase<"footnote">, "node"> & {
|
|
201
|
+
index: number;
|
|
202
|
+
label: string;
|
|
203
|
+
node: DjotFootnoteNode;
|
|
204
|
+
};
|
|
205
|
+
endnotes: React.HTMLAttributes<HTMLElement> & {
|
|
206
|
+
children?: React.ReactNode;
|
|
207
|
+
node: DjotDocNode;
|
|
208
|
+
order: string[];
|
|
209
|
+
};
|
|
210
|
+
double_quoted: React.HTMLAttributes<HTMLElement> & DjotNodePropsBase<"double_quoted">;
|
|
211
|
+
single_quoted: React.HTMLAttributes<HTMLElement> & DjotNodePropsBase<"single_quoted">;
|
|
212
|
+
smart_punctuation: DjotNodePropsBase<"smart_punctuation"> & {
|
|
213
|
+
kind: DjotSmartPunctuationType;
|
|
214
|
+
value: string;
|
|
215
|
+
};
|
|
216
|
+
inline_math: React.HTMLAttributes<HTMLElement> & DjotNodePropsBase<"inline_math"> & {
|
|
217
|
+
value: string;
|
|
218
|
+
};
|
|
219
|
+
display_math: React.HTMLAttributes<HTMLElement> & DjotNodePropsBase<"display_math"> & {
|
|
220
|
+
value: string;
|
|
221
|
+
};
|
|
99
222
|
code: React.HTMLAttributes<HTMLElement> & Omit<DjotNodePropsBase<"code">, "node"> & {
|
|
100
223
|
node: DjotCodeNode | DjotVerbatimNode;
|
|
101
224
|
value: string;
|
|
@@ -142,8 +265,15 @@ declare function Djot({ children, components }: DjotProps): React.ReactElement |
|
|
|
142
265
|
|
|
143
266
|
interface RenderNodeOptions {
|
|
144
267
|
components?: DjotComponents | undefined;
|
|
268
|
+
footnoteState?: FootnoteState | undefined;
|
|
145
269
|
key?: React.Key;
|
|
146
270
|
}
|
|
271
|
+
interface FootnoteState {
|
|
272
|
+
firstRefIdByLabel: Map<string, string>;
|
|
273
|
+
indexByLabel: Map<string, number>;
|
|
274
|
+
order: string[];
|
|
275
|
+
refCountByLabel: Map<string, number>;
|
|
276
|
+
}
|
|
147
277
|
declare function renderNode(node: DjotNode, options?: RenderNodeOptions): React.ReactNode;
|
|
148
278
|
|
|
149
279
|
export { Djot, type DjotComponentPropsMap, type DjotComponents, type DjotNode, type DjotNodeByTag, type DjotNodeTag, type DjotProps, Djot as default, renderNode };
|
package/dist/index.d.ts
CHANGED
|
@@ -9,12 +9,18 @@ interface DjotParentNode extends DjotBaseNode {
|
|
|
9
9
|
children: DjotNode[];
|
|
10
10
|
}
|
|
11
11
|
interface DjotDocNode extends DjotParentNode {
|
|
12
|
+
autoReferences?: Record<string, unknown>;
|
|
13
|
+
footnotes?: Record<string, DjotFootnoteNode>;
|
|
14
|
+
references?: Record<string, unknown>;
|
|
12
15
|
tag: "doc";
|
|
13
16
|
}
|
|
14
17
|
interface DjotSectionNode extends DjotParentNode {
|
|
15
18
|
autoAttributes?: DjotAttributes;
|
|
16
19
|
tag: "section";
|
|
17
20
|
}
|
|
21
|
+
interface DjotDivNode extends DjotParentNode {
|
|
22
|
+
tag: "div";
|
|
23
|
+
}
|
|
18
24
|
interface DjotParaNode extends DjotParentNode {
|
|
19
25
|
tag: "para";
|
|
20
26
|
}
|
|
@@ -28,6 +34,71 @@ interface DjotEmphNode extends DjotParentNode {
|
|
|
28
34
|
interface DjotStrongNode extends DjotParentNode {
|
|
29
35
|
tag: "strong";
|
|
30
36
|
}
|
|
37
|
+
interface DjotMarkNode extends DjotParentNode {
|
|
38
|
+
tag: "mark";
|
|
39
|
+
}
|
|
40
|
+
interface DjotHighlightedNode extends DjotParentNode {
|
|
41
|
+
tag: "highlighted";
|
|
42
|
+
}
|
|
43
|
+
interface DjotSuperscriptNode extends DjotParentNode {
|
|
44
|
+
tag: "superscript";
|
|
45
|
+
}
|
|
46
|
+
interface DjotSupeNode extends DjotParentNode {
|
|
47
|
+
tag: "supe";
|
|
48
|
+
}
|
|
49
|
+
interface DjotSubscriptNode extends DjotParentNode {
|
|
50
|
+
tag: "subscript";
|
|
51
|
+
}
|
|
52
|
+
interface DjotInsertNode extends DjotParentNode {
|
|
53
|
+
tag: "insert";
|
|
54
|
+
}
|
|
55
|
+
interface DjotDeleteNode extends DjotParentNode {
|
|
56
|
+
tag: "delete";
|
|
57
|
+
}
|
|
58
|
+
type DjotTableAlignment = "default" | "left" | "right" | "center" | (string & {});
|
|
59
|
+
interface DjotTableNode extends DjotParentNode {
|
|
60
|
+
tag: "table";
|
|
61
|
+
}
|
|
62
|
+
interface DjotCaptionNode extends DjotParentNode {
|
|
63
|
+
tag: "caption";
|
|
64
|
+
}
|
|
65
|
+
interface DjotRowNode extends DjotParentNode {
|
|
66
|
+
head: boolean;
|
|
67
|
+
tag: "row";
|
|
68
|
+
}
|
|
69
|
+
interface DjotCellNode extends DjotParentNode {
|
|
70
|
+
align: DjotTableAlignment;
|
|
71
|
+
head: boolean;
|
|
72
|
+
tag: "cell";
|
|
73
|
+
}
|
|
74
|
+
interface DjotFootnoteReferenceNode extends DjotBaseNode {
|
|
75
|
+
tag: "footnote_reference";
|
|
76
|
+
text: string;
|
|
77
|
+
}
|
|
78
|
+
interface DjotFootnoteNode extends DjotParentNode {
|
|
79
|
+
label: string;
|
|
80
|
+
tag: "footnote";
|
|
81
|
+
}
|
|
82
|
+
interface DjotDoubleQuotedNode extends DjotParentNode {
|
|
83
|
+
tag: "double_quoted";
|
|
84
|
+
}
|
|
85
|
+
interface DjotSingleQuotedNode extends DjotParentNode {
|
|
86
|
+
tag: "single_quoted";
|
|
87
|
+
}
|
|
88
|
+
type DjotSmartPunctuationType = "left_double_quote" | "right_double_quote" | "left_single_quote" | "right_single_quote" | "em_dash" | "en_dash" | "ellipses" | (string & {});
|
|
89
|
+
interface DjotSmartPunctuationNode extends DjotBaseNode {
|
|
90
|
+
tag: "smart_punctuation";
|
|
91
|
+
text: string;
|
|
92
|
+
type: DjotSmartPunctuationType;
|
|
93
|
+
}
|
|
94
|
+
interface DjotInlineMathNode extends DjotBaseNode {
|
|
95
|
+
tag: "inline_math";
|
|
96
|
+
text: string;
|
|
97
|
+
}
|
|
98
|
+
interface DjotDisplayMathNode extends DjotBaseNode {
|
|
99
|
+
tag: "display_math";
|
|
100
|
+
text: string;
|
|
101
|
+
}
|
|
31
102
|
interface DjotCodeNode extends DjotBaseNode {
|
|
32
103
|
tag: "code";
|
|
33
104
|
text: string;
|
|
@@ -78,7 +149,7 @@ interface DjotSoftBreakNode extends DjotBaseNode {
|
|
|
78
149
|
interface DjotHardBreakNode extends DjotBaseNode {
|
|
79
150
|
tag: "hard_break" | "hardbreak";
|
|
80
151
|
}
|
|
81
|
-
type DjotNode = DjotDocNode | DjotSectionNode | DjotParaNode | DjotHeadingNode | DjotEmphNode | DjotStrongNode | DjotCodeNode | DjotCodeBlockNode | DjotLinkNode | DjotImageNode | DjotBulletListNode | DjotOrderedListNode | DjotListItemNode | DjotBlockquoteNode | DjotBlockQuoteNode | DjotThematicBreakNode | DjotStrNode | DjotVerbatimNode | DjotSoftBreakNode | DjotHardBreakNode;
|
|
152
|
+
type DjotNode = DjotDocNode | DjotSectionNode | DjotDivNode | DjotParaNode | DjotHeadingNode | DjotEmphNode | DjotStrongNode | DjotMarkNode | DjotHighlightedNode | DjotSuperscriptNode | DjotSupeNode | DjotSubscriptNode | DjotInsertNode | DjotDeleteNode | DjotTableNode | DjotCaptionNode | DjotRowNode | DjotCellNode | DjotFootnoteReferenceNode | DjotFootnoteNode | DjotDoubleQuotedNode | DjotSingleQuotedNode | DjotSmartPunctuationNode | DjotInlineMathNode | DjotDisplayMathNode | DjotCodeNode | DjotCodeBlockNode | DjotLinkNode | DjotImageNode | DjotBulletListNode | DjotOrderedListNode | DjotListItemNode | DjotBlockquoteNode | DjotBlockQuoteNode | DjotThematicBreakNode | DjotStrNode | DjotVerbatimNode | DjotSoftBreakNode | DjotHardBreakNode;
|
|
82
153
|
type DjotNodeTag = DjotNode["tag"];
|
|
83
154
|
type DjotNodeByTag<Tag extends DjotNodeTag> = Extract<DjotNode, {
|
|
84
155
|
tag: Tag;
|
|
@@ -90,12 +161,64 @@ interface DjotNodePropsBase<Tag extends DjotNodeTag> {
|
|
|
90
161
|
interface DjotComponentPropsMap {
|
|
91
162
|
doc: DjotNodePropsBase<"doc">;
|
|
92
163
|
section: React.HTMLAttributes<HTMLElement> & DjotNodePropsBase<"section">;
|
|
164
|
+
div: React.HTMLAttributes<HTMLDivElement> & DjotNodePropsBase<"div">;
|
|
93
165
|
para: React.HTMLAttributes<HTMLParagraphElement> & DjotNodePropsBase<"para">;
|
|
94
166
|
heading: React.HTMLAttributes<HTMLHeadingElement> & DjotNodePropsBase<"heading"> & {
|
|
95
167
|
level: number;
|
|
96
168
|
};
|
|
97
169
|
emph: React.HTMLAttributes<HTMLElement> & DjotNodePropsBase<"emph">;
|
|
98
170
|
strong: React.HTMLAttributes<HTMLElement> & DjotNodePropsBase<"strong">;
|
|
171
|
+
mark: React.HTMLAttributes<HTMLElement> & Omit<DjotNodePropsBase<"mark">, "node"> & {
|
|
172
|
+
node: DjotMarkNode | DjotHighlightedNode;
|
|
173
|
+
};
|
|
174
|
+
highlighted: React.HTMLAttributes<HTMLElement> & Omit<DjotNodePropsBase<"highlighted">, "node"> & {
|
|
175
|
+
node: DjotMarkNode | DjotHighlightedNode;
|
|
176
|
+
};
|
|
177
|
+
superscript: React.HTMLAttributes<HTMLElement> & Omit<DjotNodePropsBase<"superscript">, "node"> & {
|
|
178
|
+
node: DjotSuperscriptNode | DjotSupeNode;
|
|
179
|
+
};
|
|
180
|
+
supe: React.HTMLAttributes<HTMLElement> & Omit<DjotNodePropsBase<"supe">, "node"> & {
|
|
181
|
+
node: DjotSuperscriptNode | DjotSupeNode;
|
|
182
|
+
};
|
|
183
|
+
subscript: React.HTMLAttributes<HTMLElement> & DjotNodePropsBase<"subscript">;
|
|
184
|
+
insert: React.HTMLAttributes<HTMLElement> & DjotNodePropsBase<"insert">;
|
|
185
|
+
delete: React.HTMLAttributes<HTMLElement> & DjotNodePropsBase<"delete">;
|
|
186
|
+
table: React.TableHTMLAttributes<HTMLTableElement> & DjotNodePropsBase<"table">;
|
|
187
|
+
caption: React.HTMLAttributes<HTMLTableCaptionElement> & DjotNodePropsBase<"caption">;
|
|
188
|
+
row: React.HTMLAttributes<HTMLTableRowElement> & DjotNodePropsBase<"row"> & {
|
|
189
|
+
head: boolean;
|
|
190
|
+
};
|
|
191
|
+
cell: React.TdHTMLAttributes<HTMLTableCellElement> & Omit<DjotNodePropsBase<"cell">, "node"> & {
|
|
192
|
+
align: DjotTableAlignment;
|
|
193
|
+
head: boolean;
|
|
194
|
+
node: DjotCellNode;
|
|
195
|
+
};
|
|
196
|
+
footnote_reference: React.AnchorHTMLAttributes<HTMLAnchorElement> & DjotNodePropsBase<"footnote_reference"> & {
|
|
197
|
+
index: number;
|
|
198
|
+
label: string;
|
|
199
|
+
};
|
|
200
|
+
footnote: React.LiHTMLAttributes<HTMLLIElement> & Omit<DjotNodePropsBase<"footnote">, "node"> & {
|
|
201
|
+
index: number;
|
|
202
|
+
label: string;
|
|
203
|
+
node: DjotFootnoteNode;
|
|
204
|
+
};
|
|
205
|
+
endnotes: React.HTMLAttributes<HTMLElement> & {
|
|
206
|
+
children?: React.ReactNode;
|
|
207
|
+
node: DjotDocNode;
|
|
208
|
+
order: string[];
|
|
209
|
+
};
|
|
210
|
+
double_quoted: React.HTMLAttributes<HTMLElement> & DjotNodePropsBase<"double_quoted">;
|
|
211
|
+
single_quoted: React.HTMLAttributes<HTMLElement> & DjotNodePropsBase<"single_quoted">;
|
|
212
|
+
smart_punctuation: DjotNodePropsBase<"smart_punctuation"> & {
|
|
213
|
+
kind: DjotSmartPunctuationType;
|
|
214
|
+
value: string;
|
|
215
|
+
};
|
|
216
|
+
inline_math: React.HTMLAttributes<HTMLElement> & DjotNodePropsBase<"inline_math"> & {
|
|
217
|
+
value: string;
|
|
218
|
+
};
|
|
219
|
+
display_math: React.HTMLAttributes<HTMLElement> & DjotNodePropsBase<"display_math"> & {
|
|
220
|
+
value: string;
|
|
221
|
+
};
|
|
99
222
|
code: React.HTMLAttributes<HTMLElement> & Omit<DjotNodePropsBase<"code">, "node"> & {
|
|
100
223
|
node: DjotCodeNode | DjotVerbatimNode;
|
|
101
224
|
value: string;
|
|
@@ -142,8 +265,15 @@ declare function Djot({ children, components }: DjotProps): React.ReactElement |
|
|
|
142
265
|
|
|
143
266
|
interface RenderNodeOptions {
|
|
144
267
|
components?: DjotComponents | undefined;
|
|
268
|
+
footnoteState?: FootnoteState | undefined;
|
|
145
269
|
key?: React.Key;
|
|
146
270
|
}
|
|
271
|
+
interface FootnoteState {
|
|
272
|
+
firstRefIdByLabel: Map<string, string>;
|
|
273
|
+
indexByLabel: Map<string, number>;
|
|
274
|
+
order: string[];
|
|
275
|
+
refCountByLabel: Map<string, number>;
|
|
276
|
+
}
|
|
147
277
|
declare function renderNode(node: DjotNode, options?: RenderNodeOptions): React.ReactNode;
|
|
148
278
|
|
|
149
279
|
export { Djot, type DjotComponentPropsMap, type DjotComponents, type DjotNode, type DjotNodeByTag, type DjotNodeTag, type DjotProps, Djot as default, renderNode };
|