tiptap-markdown-react 0.8.11 → 0.9.0

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.
Files changed (45) hide show
  1. package/README.md +32 -0
  2. package/dist/ReportContent-Re3hNps8.js +368 -0
  3. package/dist/ReportContent-Re3hNps8.js.map +1 -0
  4. package/dist/chart/ChartExtension.d.ts +21 -0
  5. package/dist/chart/chartRoundTrip.test.d.ts +1 -0
  6. package/dist/chart/columnMatching.d.ts +19 -0
  7. package/dist/chart/createChart.d.ts +19 -0
  8. package/dist/chart/mapData.d.ts +22 -0
  9. package/dist/chart/mapData.test.d.ts +1 -0
  10. package/dist/chart/parse.d.ts +31 -0
  11. package/dist/chart/parse.test.d.ts +1 -0
  12. package/dist/chart/prepareChartMarkdown.d.ts +5 -0
  13. package/dist/chart/renderChart.d.ts +12 -0
  14. package/dist/chart/serialize.d.ts +1 -0
  15. package/dist/chart/theme.d.ts +3 -0
  16. package/dist/chart/types.d.ts +41 -0
  17. package/dist/components/ChartEditorPopover.d.ts +12 -0
  18. package/dist/components/ChartMount.d.ts +14 -0
  19. package/dist/components/ChartView.d.ts +2 -0
  20. package/dist/components/MarkdownPreview.d.ts +3 -2
  21. package/dist/components/ReportContentWithCharts.d.ts +13 -0
  22. package/dist/extensions.d.ts +4 -3
  23. package/dist/{extractToc-CecK9W_w.js → extractToc-Dv40DtV5.js} +145 -9
  24. package/dist/extractToc-Dv40DtV5.js.map +1 -0
  25. package/dist/icons/index.d.ts +2 -1
  26. package/dist/index.d.ts +8 -2
  27. package/dist/index.js +725 -180
  28. package/dist/index.js.map +1 -1
  29. package/dist/labels.d.ts +24 -0
  30. package/dist/reader.d.ts +3 -8
  31. package/dist/reader.js +9 -6
  32. package/dist/scrollToTocHeading-CIJu2AcX.js +496 -0
  33. package/dist/scrollToTocHeading-CIJu2AcX.js.map +1 -0
  34. package/dist/server.d.ts +4 -1
  35. package/dist/server.js +17 -9
  36. package/dist/server.js.map +1 -1
  37. package/dist/style.css +296 -57
  38. package/dist/tableSelection.d.ts +29 -0
  39. package/dist/tableSelection.test.d.ts +1 -0
  40. package/package.json +12 -4
  41. package/dist/ReportContent-c_UlJnVY.js +0 -68
  42. package/dist/ReportContent-c_UlJnVY.js.map +0 -1
  43. package/dist/extractToc-CecK9W_w.js.map +0 -1
  44. package/dist/scrollToTocHeading-CwapFaVP.js +0 -126
  45. package/dist/scrollToTocHeading-CwapFaVP.js.map +0 -1
package/dist/server.js CHANGED
@@ -1,7 +1,7 @@
1
- import { s as stabilizeMarkdown, b as baseExtensions, p as pureCodeBlock, a as pureImage, C as CitationRef, m as makeTocGetId, r as renderMathElementHtml, e as extractToc } from "./extractToc-CecK9W_w.js";
2
- import { c, d, l, f, g } from "./extractToc-CecK9W_w.js";
3
- import { a as applyCitationSources } from "./ReportContent-c_UlJnVY.js";
4
- import { R, e } from "./ReportContent-c_UlJnVY.js";
1
+ import { s as stabilizeMarkdown, p as prepareChartMarkdown, b as baseExtensions, a as pureCodeBlock, c as pureImage, d as pureChart, C as CitationRef, m as makeTocGetId, r as renderMathElementHtml, e as extractToc } from "./extractToc-Dv40DtV5.js";
2
+ import { f, g, l, h, i, j } from "./extractToc-Dv40DtV5.js";
3
+ import { a as applyCitationSources } from "./ReportContent-Re3hNps8.js";
4
+ import { R, e, s } from "./ReportContent-Re3hNps8.js";
5
5
  import { TableOfContents, generateTocIds } from "@tiptap/extension-table-of-contents";
6
6
  import { MarkdownManager } from "@tiptap/markdown";
7
7
  import { renderToHTMLString } from "@tiptap/static-renderer";
@@ -10,6 +10,7 @@ const sharedManager = new MarkdownManager({
10
10
  ...baseExtensions,
11
11
  pureCodeBlock,
12
12
  pureImage,
13
+ pureChart,
13
14
  CitationRef,
14
15
  TableOfContents
15
16
  ]
@@ -19,6 +20,7 @@ function htmlFromJson(json) {
19
20
  ...baseExtensions,
20
21
  pureCodeBlock,
21
22
  pureImage,
23
+ pureChart,
22
24
  CitationRef,
23
25
  TableOfContents.configure({ getId: makeTocGetId() })
24
26
  ];
@@ -45,7 +47,8 @@ function renderReportHtml(markdown, lockedTitlesOrOptions = []) {
45
47
  const lockedTitles = options.lockedTitles ?? [];
46
48
  const sources = options.sources ?? [];
47
49
  const includeToc = options.includeToc !== false;
48
- const input = options.stabilize ? stabilizeMarkdown(markdown) : markdown;
50
+ const stabilized = options.stabilize ? stabilizeMarkdown(markdown) : markdown;
51
+ const input = prepareChartMarkdown(stabilized);
49
52
  let json;
50
53
  try {
51
54
  json = applyCitationSources(
@@ -74,6 +77,7 @@ function renderReportHtml(markdown, lockedTitlesOrOptions = []) {
74
77
  ...baseExtensions,
75
78
  pureCodeBlock,
76
79
  pureImage,
80
+ pureChart,
77
81
  CitationRef,
78
82
  TableOfContents.configure({ getId: makeTocGetId() })
79
83
  ];
@@ -114,20 +118,24 @@ function renderReportHtml(markdown, lockedTitlesOrOptions = []) {
114
118
  }
115
119
  export {
116
120
  CitationRef,
117
- c as CommentMark,
121
+ f as CommentMark,
118
122
  R as ReportContent,
119
123
  applyCitationSources,
120
124
  baseExtensions,
121
- d as blockTextHash,
125
+ g as blockTextHash,
122
126
  e as enrichMarkdownCitations,
123
127
  extractToc,
124
128
  l as lowlight,
125
129
  makeTocGetId,
126
- f as mapCommentAnchors,
127
- g as mergeCommentIntervals,
130
+ h as mapCommentAnchors,
131
+ i as mergeCommentIntervals,
132
+ prepareChartMarkdown,
133
+ pureChart,
128
134
  pureCodeBlock,
129
135
  pureImage,
130
136
  renderReportHtml,
137
+ j as reportChart,
138
+ s as serializeChartPayload,
131
139
  stabilizeMarkdown
132
140
  };
133
141
  //# sourceMappingURL=server.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sources":["../src/renderReportHtml.ts"],"sourcesContent":["import {\n generateTocIds,\n TableOfContents,\n} from '@tiptap/extension-table-of-contents';\nimport type { JSONContent } from '@tiptap/core';\nimport { MarkdownManager } from '@tiptap/markdown';\nimport { renderToHTMLString } from '@tiptap/static-renderer';\nimport {\n applyCitationSources,\n type SourceRef,\n} from './citationUtils';\nimport { CitationRef } from './CitationRef';\nimport { baseExtensions, pureCodeBlock, pureImage } from './extensions';\nimport { renderMathElementHtml } from './math';\nimport { stabilizeMarkdown } from './stabilizeMarkdown';\nimport { extractToc, type TocItem } from './toc/extractToc';\nimport { makeTocGetId } from './toc/tocSlug';\n\n/**\n * server 端把 markdown 渲成 HTML 字符串 + 目录(纯函数,无 editor / 无 window)。\n *\n * 走官方管线 `MarkdownManager.parse → generateTocIds → renderToHTMLString`,可在\n * Server Component / ISR 里直接跑,正文 HTML + 锚点 id 进静态产物,兑现 SEO / 首屏。\n *\n * 扩展集与编辑器同源(base + 纯版 CodeBlock/Image)+ TableOfContents。TOC 扩展在 v3\n * 会扩展 Heading schema 使 id 渲染进 HTML;`generateTocIds` 是官方纯函数(无 editor /\n * 无 window,专为「renderToHTMLString 前在 server 注入锚点」设计)。\n * 锚点用 slug + 去重(makeTocGetId),跨 SSR / ISR 稳定、可分享。\n *\n * `[^n]` 由 CitationRef tokenizer 解析;`sources` 经 {@link applyCitationSources}\n * 补 url/title(不依赖 DOMParser,避免 server 内联 HTML 失效)。\n *\n * 已知边界:官方包解析内联 HTML 依赖 window.DOMParser,server 端无 window 会把\n * 内联 HTML(如 <u>)转义为字面文本。\n */\nexport interface RenderedReport {\n html: string;\n toc: TocItem[];\n /**\n * 管线是否成功。空 markdown 也是 ok。\n * parse / render 抛错时为 false;调用方可保留上一帧 HTML。\n */\n ok: boolean;\n}\n\nexport interface RenderReportHtmlOptions {\n /** 被付费墙锁住的章节标题(TOC 标 locked)。 */\n lockedTitles?: string[];\n /** 脚注来源,按 index 对齐 `[^n]`。 */\n sources?: SourceRef[];\n /**\n * 是否注入标题锚点并返回 toc。默认 true(`/p` 阅读页)。\n * 卡片预览传 false,跳过 generateTocIds。\n */\n includeToc?: boolean;\n /**\n * 流式半成品:补未闭合代码围栏。默认 false。\n * 完整落库稿不要开,以免改已发布 HTML。\n */\n stabilize?: boolean;\n}\n\n// [perf] 模块级复用单个 MarkdownManager。每次 `new MarkdownManager` 会让底层 marked\n// 全局累积扩展,parse 逐次变慢。parse 只用 schema、与 TOC 的 getId 无关,可跨调用\n// 安全复用;getId 相关的锚点注入放在 generateTocIds 阶段、用每篇新建的 extensions 处理。\nconst sharedManager = new MarkdownManager({\n extensions: [\n ...baseExtensions,\n pureCodeBlock,\n pureImage,\n CitationRef,\n TableOfContents,\n ],\n});\n\nfunction htmlFromJson(json: JSONContent): string {\n const extensions = [\n ...baseExtensions,\n pureCodeBlock,\n pureImage,\n CitationRef,\n TableOfContents.configure({ getId: makeTocGetId() }),\n ];\n return renderToHTMLString({\n extensions,\n content: json,\n options: {\n nodeMapping: {\n inlineMath: ({ node }) =>\n renderMathElementHtml(String(node.attrs?.latex ?? ''), false),\n blockMath: ({ node }) =>\n renderMathElementHtml(String(node.attrs?.latex ?? ''), true),\n },\n },\n });\n}\n\nexport function renderReportHtml(\n markdown: string,\n lockedTitlesOrOptions: string[] | RenderReportHtmlOptions = [],\n): RenderedReport {\n if (!markdown?.trim()) return { html: '', toc: [], ok: true };\n\n const options: RenderReportHtmlOptions = Array.isArray(lockedTitlesOrOptions)\n ? { lockedTitles: lockedTitlesOrOptions }\n : lockedTitlesOrOptions;\n const lockedTitles = options.lockedTitles ?? [];\n const sources = options.sources ?? [];\n const includeToc = options.includeToc !== false;\n const input = options.stabilize ? stabilizeMarkdown(markdown) : markdown;\n\n let json: JSONContent;\n try {\n json = applyCitationSources(\n sharedManager.parse(input) as JSONContent,\n sources,\n );\n } catch (e) {\n console.error(\n '[renderReportHtml] markdown parse failed:',\n (e as Error).message,\n );\n return { html: '', toc: [], ok: false };\n }\n\n if (!includeToc) {\n try {\n return { html: htmlFromJson(json), toc: [], ok: true };\n } catch (e) {\n console.error(\n '[renderReportHtml] render failed (no toc):',\n (e as Error).message,\n );\n return { html: '', toc: [], ok: false };\n }\n }\n\n // getId 是有状态去重闭包,每篇必须重置,否则锚点 id 跨调用串号。这份 extensions\n // 只喂 generateTocIds / renderToHTMLString——schema 与 sharedManager 一致(仅 getId\n // 配置不同,不影响 schema),故对 sharedManager.parse 出的 json 兼容。\n const extensions = [\n ...baseExtensions,\n pureCodeBlock,\n pureImage,\n CitationRef,\n TableOfContents.configure({ getId: makeTocGetId() }),\n ];\n try {\n const jsonWithIds = generateTocIds(json, extensions);\n const html = renderToHTMLString({\n extensions,\n content: jsonWithIds,\n options: {\n nodeMapping: {\n inlineMath: ({ node }) =>\n renderMathElementHtml(String(node.attrs?.latex ?? ''), false),\n blockMath: ({ node }) =>\n renderMathElementHtml(String(node.attrs?.latex ?? ''), true),\n },\n },\n });\n return { html, toc: extractToc(jsonWithIds, lockedTitles), ok: true };\n } catch (e) {\n // 某些 markdown 经 parse 产出的 JSON 可能在 heading 内嵌套 block 级子节点,\n // 导致 generateTocIds 的 setNodeMarkup 校验失败。降级为无 TOC 仍产出正文。\n console.error(\n '[renderReportHtml] TOC pipeline failed, rendering without heading ids:',\n (e as Error).message,\n );\n try {\n return { html: htmlFromJson(json), toc: [], ok: true };\n } catch (e2) {\n console.error(\n '[renderReportHtml] Tiptap pipeline failed:',\n (e2 as Error).message,\n );\n return { html: '', toc: [], ok: false };\n }\n }\n}\n"],"names":["e","e2"],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sources":["../src/renderReportHtml.ts"],"sourcesContent":["import {\n generateTocIds,\n TableOfContents,\n} from '@tiptap/extension-table-of-contents';\nimport type { JSONContent } from '@tiptap/core';\nimport { MarkdownManager } from '@tiptap/markdown';\nimport { renderToHTMLString } from '@tiptap/static-renderer';\nimport {\n applyCitationSources,\n type SourceRef,\n} from './citationUtils';\nimport { CitationRef } from './CitationRef';\nimport { prepareChartMarkdown } from './chart/prepareChartMarkdown';\nimport { baseExtensions, pureChart, pureCodeBlock, pureImage } from './extensions';\nimport { renderMathElementHtml } from './math';\nimport { stabilizeMarkdown } from './stabilizeMarkdown';\nimport { extractToc, type TocItem } from './toc/extractToc';\nimport { makeTocGetId } from './toc/tocSlug';\n\n/**\n * server 端把 markdown 渲成 HTML 字符串 + 目录(纯函数,无 editor / 无 window)。\n *\n * 走官方管线 `MarkdownManager.parse → generateTocIds → renderToHTMLString`,可在\n * Server Component / ISR 里直接跑,正文 HTML + 锚点 id 进静态产物,兑现 SEO / 首屏。\n *\n * 扩展集与编辑器同源(base + 纯版 CodeBlock/Image)+ TableOfContents。TOC 扩展在 v3\n * 会扩展 Heading schema 使 id 渲染进 HTML;`generateTocIds` 是官方纯函数(无 editor /\n * 无 window,专为「renderToHTMLString 前在 server 注入锚点」设计)。\n * 锚点用 slug + 去重(makeTocGetId),跨 SSR / ISR 稳定、可分享。\n *\n * `[^n]` 由 CitationRef tokenizer 解析;`sources` 经 {@link applyCitationSources}\n * 补 url/title(不依赖 DOMParser,避免 server 内联 HTML 失效)。\n *\n * 已知边界:官方包解析内联 HTML 依赖 window.DOMParser,server 端无 window 会把\n * 内联 HTML(如 <u>)转义为字面文本。\n */\nexport interface RenderedReport {\n html: string;\n toc: TocItem[];\n /**\n * 管线是否成功。空 markdown 也是 ok。\n * parse / render 抛错时为 false;调用方可保留上一帧 HTML。\n */\n ok: boolean;\n}\n\nexport interface RenderReportHtmlOptions {\n /** 被付费墙锁住的章节标题(TOC 标 locked)。 */\n lockedTitles?: string[];\n /** 脚注来源,按 index 对齐 `[^n]`。 */\n sources?: SourceRef[];\n /**\n * 是否注入标题锚点并返回 toc。默认 true(`/p` 阅读页)。\n * 卡片预览传 false,跳过 generateTocIds。\n */\n includeToc?: boolean;\n /**\n * 流式半成品:补未闭合代码围栏。默认 false。\n * 完整落库稿不要开,以免改已发布 HTML。\n */\n stabilize?: boolean;\n}\n\n// [perf] 模块级复用单个 MarkdownManager。每次 `new MarkdownManager` 会让底层 marked\n// 全局累积扩展,parse 逐次变慢。parse 只用 schema、与 TOC 的 getId 无关,可跨调用\n// 安全复用;getId 相关的锚点注入放在 generateTocIds 阶段、用每篇新建的 extensions 处理。\nconst sharedManager = new MarkdownManager({\n extensions: [\n ...baseExtensions,\n pureCodeBlock,\n pureImage,\n pureChart,\n CitationRef,\n TableOfContents,\n ],\n});\n\nfunction htmlFromJson(json: JSONContent): string {\n const extensions = [\n ...baseExtensions,\n pureCodeBlock,\n pureImage,\n pureChart,\n CitationRef,\n TableOfContents.configure({ getId: makeTocGetId() }),\n ];\n return renderToHTMLString({\n extensions,\n content: json,\n options: {\n nodeMapping: {\n inlineMath: ({ node }) =>\n renderMathElementHtml(String(node.attrs?.latex ?? ''), false),\n blockMath: ({ node }) =>\n renderMathElementHtml(String(node.attrs?.latex ?? ''), true),\n },\n },\n });\n}\n\nexport function renderReportHtml(\n markdown: string,\n lockedTitlesOrOptions: string[] | RenderReportHtmlOptions = [],\n): RenderedReport {\n if (!markdown?.trim()) return { html: '', toc: [], ok: true };\n\n const options: RenderReportHtmlOptions = Array.isArray(lockedTitlesOrOptions)\n ? { lockedTitles: lockedTitlesOrOptions }\n : lockedTitlesOrOptions;\n const lockedTitles = options.lockedTitles ?? [];\n const sources = options.sources ?? [];\n const includeToc = options.includeToc !== false;\n const stabilized = options.stabilize ? stabilizeMarkdown(markdown) : markdown;\n const input = prepareChartMarkdown(stabilized);\n\n let json: JSONContent;\n try {\n json = applyCitationSources(\n sharedManager.parse(input) as JSONContent,\n sources,\n );\n } catch (e) {\n console.error(\n '[renderReportHtml] markdown parse failed:',\n (e as Error).message,\n );\n return { html: '', toc: [], ok: false };\n }\n\n if (!includeToc) {\n try {\n return { html: htmlFromJson(json), toc: [], ok: true };\n } catch (e) {\n console.error(\n '[renderReportHtml] render failed (no toc):',\n (e as Error).message,\n );\n return { html: '', toc: [], ok: false };\n }\n }\n\n // getId 是有状态去重闭包,每篇必须重置,否则锚点 id 跨调用串号。这份 extensions\n // 只喂 generateTocIds / renderToHTMLString——schema 与 sharedManager 一致(仅 getId\n // 配置不同,不影响 schema),故对 sharedManager.parse 出的 json 兼容。\n const extensions = [\n ...baseExtensions,\n pureCodeBlock,\n pureImage,\n pureChart,\n CitationRef,\n TableOfContents.configure({ getId: makeTocGetId() }),\n ];\n try {\n const jsonWithIds = generateTocIds(json, extensions);\n const html = renderToHTMLString({\n extensions,\n content: jsonWithIds,\n options: {\n nodeMapping: {\n inlineMath: ({ node }) =>\n renderMathElementHtml(String(node.attrs?.latex ?? ''), false),\n blockMath: ({ node }) =>\n renderMathElementHtml(String(node.attrs?.latex ?? ''), true),\n },\n },\n });\n return { html, toc: extractToc(jsonWithIds, lockedTitles), ok: true };\n } catch (e) {\n // 某些 markdown 经 parse 产出的 JSON 可能在 heading 内嵌套 block 级子节点,\n // 导致 generateTocIds 的 setNodeMarkup 校验失败。降级为无 TOC 仍产出正文。\n console.error(\n '[renderReportHtml] TOC pipeline failed, rendering without heading ids:',\n (e as Error).message,\n );\n try {\n return { html: htmlFromJson(json), toc: [], ok: true };\n } catch (e2) {\n console.error(\n '[renderReportHtml] Tiptap pipeline failed:',\n (e2 as Error).message,\n );\n return { html: '', toc: [], ok: false };\n }\n }\n}\n"],"names":["e","e2"],"mappings":"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"}