@willwang-io/react-djot 0.1.4 → 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.
@@ -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 };