markstream-svelte 0.0.1-beta.1

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 (233) hide show
  1. package/README.md +77 -0
  2. package/dist/components/AdmonitionNode.svelte +8 -0
  3. package/dist/components/AdmonitionNode.svelte.d.ts +23 -0
  4. package/dist/components/AdmonitionNode.svelte.d.ts.map +1 -0
  5. package/dist/components/BlockquoteNode.svelte +10 -0
  6. package/dist/components/BlockquoteNode.svelte.d.ts +24 -0
  7. package/dist/components/BlockquoteNode.svelte.d.ts.map +1 -0
  8. package/dist/components/CheckboxNode.svelte +5 -0
  9. package/dist/components/CheckboxNode.svelte.d.ts +22 -0
  10. package/dist/components/CheckboxNode.svelte.d.ts.map +1 -0
  11. package/dist/components/CodeBlockNode.svelte +944 -0
  12. package/dist/components/CodeBlockNode.svelte.d.ts +43 -0
  13. package/dist/components/CodeBlockNode.svelte.d.ts.map +1 -0
  14. package/dist/components/D2BlockNode.svelte +272 -0
  15. package/dist/components/D2BlockNode.svelte.d.ts +33 -0
  16. package/dist/components/D2BlockNode.svelte.d.ts.map +1 -0
  17. package/dist/components/DefinitionListNode.svelte +8 -0
  18. package/dist/components/DefinitionListNode.svelte.d.ts +23 -0
  19. package/dist/components/DefinitionListNode.svelte.d.ts.map +1 -0
  20. package/dist/components/EmojiNode.svelte +7 -0
  21. package/dist/components/EmojiNode.svelte.d.ts +22 -0
  22. package/dist/components/EmojiNode.svelte.d.ts.map +1 -0
  23. package/dist/components/EmphasisNode.svelte +8 -0
  24. package/dist/components/EmphasisNode.svelte.d.ts +24 -0
  25. package/dist/components/EmphasisNode.svelte.d.ts.map +1 -0
  26. package/dist/components/FallbackComponent.svelte +8 -0
  27. package/dist/components/FallbackComponent.svelte.d.ts +23 -0
  28. package/dist/components/FallbackComponent.svelte.d.ts.map +1 -0
  29. package/dist/components/FootnoteAnchorNode.svelte +21 -0
  30. package/dist/components/FootnoteAnchorNode.svelte.d.ts +22 -0
  31. package/dist/components/FootnoteAnchorNode.svelte.d.ts.map +1 -0
  32. package/dist/components/FootnoteNode.svelte +19 -0
  33. package/dist/components/FootnoteNode.svelte.d.ts +24 -0
  34. package/dist/components/FootnoteNode.svelte.d.ts.map +1 -0
  35. package/dist/components/FootnoteReferenceNode.svelte +26 -0
  36. package/dist/components/FootnoteReferenceNode.svelte.d.ts +22 -0
  37. package/dist/components/FootnoteReferenceNode.svelte.d.ts.map +1 -0
  38. package/dist/components/HardBreakNode.svelte +1 -0
  39. package/dist/components/HardBreakNode.svelte.d.ts +27 -0
  40. package/dist/components/HardBreakNode.svelte.d.ts.map +1 -0
  41. package/dist/components/HeadingNode.svelte +15 -0
  42. package/dist/components/HeadingNode.svelte.d.ts +24 -0
  43. package/dist/components/HeadingNode.svelte.d.ts.map +1 -0
  44. package/dist/components/HighlightNode.svelte +8 -0
  45. package/dist/components/HighlightNode.svelte.d.ts +24 -0
  46. package/dist/components/HighlightNode.svelte.d.ts.map +1 -0
  47. package/dist/components/HtmlBlockNode.svelte +8 -0
  48. package/dist/components/HtmlBlockNode.svelte.d.ts +23 -0
  49. package/dist/components/HtmlBlockNode.svelte.d.ts.map +1 -0
  50. package/dist/components/HtmlInlineNode.svelte +8 -0
  51. package/dist/components/HtmlInlineNode.svelte.d.ts +23 -0
  52. package/dist/components/HtmlInlineNode.svelte.d.ts.map +1 -0
  53. package/dist/components/HtmlPreviewFrame.svelte +13 -0
  54. package/dist/components/HtmlPreviewFrame.svelte.d.ts +26 -0
  55. package/dist/components/HtmlPreviewFrame.svelte.d.ts.map +1 -0
  56. package/dist/components/ImageNode.svelte +86 -0
  57. package/dist/components/ImageNode.svelte.d.ts +25 -0
  58. package/dist/components/ImageNode.svelte.d.ts.map +1 -0
  59. package/dist/components/InfographicBlockNode.svelte +429 -0
  60. package/dist/components/InfographicBlockNode.svelte.d.ts +34 -0
  61. package/dist/components/InfographicBlockNode.svelte.d.ts.map +1 -0
  62. package/dist/components/InlineCodeNode.svelte +7 -0
  63. package/dist/components/InlineCodeNode.svelte.d.ts +22 -0
  64. package/dist/components/InlineCodeNode.svelte.d.ts.map +1 -0
  65. package/dist/components/InlineWrapNode.svelte +10 -0
  66. package/dist/components/InlineWrapNode.svelte.d.ts +25 -0
  67. package/dist/components/InlineWrapNode.svelte.d.ts.map +1 -0
  68. package/dist/components/InsertNode.svelte +8 -0
  69. package/dist/components/InsertNode.svelte.d.ts +24 -0
  70. package/dist/components/InsertNode.svelte.d.ts.map +1 -0
  71. package/dist/components/LinkNode.svelte +41 -0
  72. package/dist/components/LinkNode.svelte.d.ts +25 -0
  73. package/dist/components/LinkNode.svelte.d.ts.map +1 -0
  74. package/dist/components/ListItemNode.svelte +9 -0
  75. package/dist/components/ListItemNode.svelte.d.ts +24 -0
  76. package/dist/components/ListItemNode.svelte.d.ts.map +1 -0
  77. package/dist/components/ListNode.svelte +16 -0
  78. package/dist/components/ListNode.svelte.d.ts +24 -0
  79. package/dist/components/ListNode.svelte.d.ts.map +1 -0
  80. package/dist/components/MarkdownCodeBlockNode.svelte +7 -0
  81. package/dist/components/MarkdownCodeBlockNode.svelte.d.ts +23 -0
  82. package/dist/components/MarkdownCodeBlockNode.svelte.d.ts.map +1 -0
  83. package/dist/components/MathBlockNode.svelte +96 -0
  84. package/dist/components/MathBlockNode.svelte.d.ts +22 -0
  85. package/dist/components/MathBlockNode.svelte.d.ts.map +1 -0
  86. package/dist/components/MathInlineNode.svelte +103 -0
  87. package/dist/components/MathInlineNode.svelte.d.ts +22 -0
  88. package/dist/components/MathInlineNode.svelte.d.ts.map +1 -0
  89. package/dist/components/MermaidBlockNode.svelte +557 -0
  90. package/dist/components/MermaidBlockNode.svelte.d.ts +40 -0
  91. package/dist/components/MermaidBlockNode.svelte.d.ts.map +1 -0
  92. package/dist/components/NodeOutlet.svelte +192 -0
  93. package/dist/components/NodeOutlet.svelte.d.ts +24 -0
  94. package/dist/components/NodeOutlet.svelte.d.ts.map +1 -0
  95. package/dist/components/NodeRenderer.svelte +349 -0
  96. package/dist/components/NodeRenderer.svelte.d.ts +64 -0
  97. package/dist/components/NodeRenderer.svelte.d.ts.map +1 -0
  98. package/dist/components/ParagraphNode.svelte +21 -0
  99. package/dist/components/ParagraphNode.svelte.d.ts +24 -0
  100. package/dist/components/ParagraphNode.svelte.d.ts.map +1 -0
  101. package/dist/components/PreCodeNode.svelte +13 -0
  102. package/dist/components/PreCodeNode.svelte.d.ts +22 -0
  103. package/dist/components/PreCodeNode.svelte.d.ts.map +1 -0
  104. package/dist/components/ReferenceNode.svelte +8 -0
  105. package/dist/components/ReferenceNode.svelte.d.ts +23 -0
  106. package/dist/components/ReferenceNode.svelte.d.ts.map +1 -0
  107. package/dist/components/RenderChildren.svelte +12 -0
  108. package/dist/components/RenderChildren.svelte.d.ts +24 -0
  109. package/dist/components/RenderChildren.svelte.d.ts.map +1 -0
  110. package/dist/components/StrikethroughNode.svelte +8 -0
  111. package/dist/components/StrikethroughNode.svelte.d.ts +24 -0
  112. package/dist/components/StrikethroughNode.svelte.d.ts.map +1 -0
  113. package/dist/components/StrongNode.svelte +8 -0
  114. package/dist/components/StrongNode.svelte.d.ts +24 -0
  115. package/dist/components/StrongNode.svelte.d.ts.map +1 -0
  116. package/dist/components/SubscriptNode.svelte +8 -0
  117. package/dist/components/SubscriptNode.svelte.d.ts +24 -0
  118. package/dist/components/SubscriptNode.svelte.d.ts.map +1 -0
  119. package/dist/components/SuperscriptNode.svelte +8 -0
  120. package/dist/components/SuperscriptNode.svelte.d.ts +24 -0
  121. package/dist/components/SuperscriptNode.svelte.d.ts.map +1 -0
  122. package/dist/components/TableNode.svelte +8 -0
  123. package/dist/components/TableNode.svelte.d.ts +23 -0
  124. package/dist/components/TableNode.svelte.d.ts.map +1 -0
  125. package/dist/components/TextNode.svelte +37 -0
  126. package/dist/components/TextNode.svelte.d.ts +25 -0
  127. package/dist/components/TextNode.svelte.d.ts.map +1 -0
  128. package/dist/components/ThematicBreakNode.svelte +1 -0
  129. package/dist/components/ThematicBreakNode.svelte.d.ts +27 -0
  130. package/dist/components/ThematicBreakNode.svelte.d.ts.map +1 -0
  131. package/dist/components/Tooltip.svelte +4 -0
  132. package/dist/components/Tooltip.svelte.d.ts +21 -0
  133. package/dist/components/Tooltip.svelte.d.ts.map +1 -0
  134. package/dist/components/VmrContainerNode.svelte +8 -0
  135. package/dist/components/VmrContainerNode.svelte.d.ts +23 -0
  136. package/dist/components/VmrContainerNode.svelte.d.ts.map +1 -0
  137. package/dist/components/shared/diagram-height.d.ts +10 -0
  138. package/dist/components/shared/diagram-height.d.ts.map +1 -0
  139. package/dist/components/shared/diagram-height.js +52 -0
  140. package/dist/components/shared/node-helpers.d.ts +108 -0
  141. package/dist/components/shared/node-helpers.d.ts.map +1 -0
  142. package/dist/components/shared/node-helpers.js +220 -0
  143. package/dist/components/shared/node-outlet-helpers.d.ts +9 -0
  144. package/dist/components/shared/node-outlet-helpers.d.ts.map +1 -0
  145. package/dist/components/shared/node-outlet-helpers.js +92 -0
  146. package/dist/components/shared/render-window.d.ts +19 -0
  147. package/dist/components/shared/render-window.d.ts.map +1 -0
  148. package/dist/components/shared/render-window.js +63 -0
  149. package/dist/components/shared/renderNodeHtml.d.ts +4 -0
  150. package/dist/components/shared/renderNodeHtml.d.ts.map +1 -0
  151. package/dist/components/shared/renderNodeHtml.js +19 -0
  152. package/dist/components/shared/rich-block-helpers.d.ts +7 -0
  153. package/dist/components/shared/rich-block-helpers.d.ts.map +1 -0
  154. package/dist/components/shared/rich-block-helpers.js +76 -0
  155. package/dist/customComponents.d.ts +10 -0
  156. package/dist/customComponents.d.ts.map +1 -0
  157. package/dist/customComponents.js +66 -0
  158. package/dist/enhanceRenderedHtml.d.ts +21 -0
  159. package/dist/enhanceRenderedHtml.d.ts.map +1 -0
  160. package/dist/enhanceRenderedHtml.js +768 -0
  161. package/dist/hydrateCustomTagContent.d.ts +3 -0
  162. package/dist/hydrateCustomTagContent.d.ts.map +1 -0
  163. package/dist/hydrateCustomTagContent.js +130 -0
  164. package/dist/i18n/useSafeI18n.d.ts +5 -0
  165. package/dist/i18n/useSafeI18n.d.ts.map +1 -0
  166. package/dist/i18n/useSafeI18n.js +42 -0
  167. package/dist/index.css +2009 -0
  168. package/dist/index.d.ts +78 -0
  169. package/dist/index.d.ts.map +1 -0
  170. package/dist/index.js +66 -0
  171. package/dist/index.px.css +2009 -0
  172. package/dist/index.tailwind.css +2009 -0
  173. package/dist/optional/d2.d.ts +7 -0
  174. package/dist/optional/d2.d.ts.map +1 -0
  175. package/dist/optional/d2.js +67 -0
  176. package/dist/optional/infographic.d.ts +2 -0
  177. package/dist/optional/infographic.d.ts.map +1 -0
  178. package/dist/optional/infographic.js +29 -0
  179. package/dist/optional/katex.d.ts +7 -0
  180. package/dist/optional/katex.d.ts.map +1 -0
  181. package/dist/optional/katex.js +93 -0
  182. package/dist/optional/mermaid.d.ts +7 -0
  183. package/dist/optional/mermaid.d.ts.map +1 -0
  184. package/dist/optional/mermaid.js +171 -0
  185. package/dist/optional/monaco.d.ts +5 -0
  186. package/dist/optional/monaco.d.ts.map +1 -0
  187. package/dist/optional/monaco.js +70 -0
  188. package/dist/parseNestedMarkdownToNodes.d.ts +15 -0
  189. package/dist/parseNestedMarkdownToNodes.d.ts.map +1 -0
  190. package/dist/parseNestedMarkdownToNodes.js +66 -0
  191. package/dist/renderMarkdownHtml.d.ts +31 -0
  192. package/dist/renderMarkdownHtml.d.ts.map +1 -0
  193. package/dist/renderMarkdownHtml.js +465 -0
  194. package/dist/sanitizeHtmlContent.d.ts +3 -0
  195. package/dist/sanitizeHtmlContent.d.ts.map +1 -0
  196. package/dist/sanitizeHtmlContent.js +175 -0
  197. package/dist/sanitizeSvg.d.ts +3 -0
  198. package/dist/sanitizeSvg.d.ts.map +1 -0
  199. package/dist/sanitizeSvg.js +76 -0
  200. package/dist/tailwind-entry.d.ts +2 -0
  201. package/dist/tailwind-entry.d.ts.map +1 -0
  202. package/dist/tailwind-entry.js +1 -0
  203. package/dist/tooltip/singletonTooltip.d.ts +8 -0
  204. package/dist/tooltip/singletonTooltip.d.ts.map +1 -0
  205. package/dist/tooltip/singletonTooltip.js +124 -0
  206. package/dist/types/monaco.d.ts +66 -0
  207. package/dist/types/monaco.d.ts.map +1 -0
  208. package/dist/types/monaco.js +1 -0
  209. package/dist/utils/languageIcon.d.ts +8 -0
  210. package/dist/utils/languageIcon.d.ts.map +1 -0
  211. package/dist/utils/languageIcon.js +182 -0
  212. package/dist/utils/normalizeKaTeXRenderInput.d.ts +2 -0
  213. package/dist/utils/normalizeKaTeXRenderInput.d.ts.map +1 -0
  214. package/dist/utils/normalizeKaTeXRenderInput.js +7 -0
  215. package/dist/workers/katexCdnWorker.d.ts +21 -0
  216. package/dist/workers/katexCdnWorker.d.ts.map +1 -0
  217. package/dist/workers/katexCdnWorker.js +193 -0
  218. package/dist/workers/katexRenderer.worker.d.ts +2 -0
  219. package/dist/workers/katexRenderer.worker.d.ts.map +1 -0
  220. package/dist/workers/katexRenderer.worker.js +55 -0
  221. package/dist/workers/katexWorkerClient.d.ts +36 -0
  222. package/dist/workers/katexWorkerClient.d.ts.map +1 -0
  223. package/dist/workers/katexWorkerClient.js +270 -0
  224. package/dist/workers/mermaidCdnWorker.d.ts +16 -0
  225. package/dist/workers/mermaidCdnWorker.d.ts.map +1 -0
  226. package/dist/workers/mermaidCdnWorker.js +235 -0
  227. package/dist/workers/mermaidParser.worker.d.ts +2 -0
  228. package/dist/workers/mermaidParser.worker.d.ts.map +1 -0
  229. package/dist/workers/mermaidParser.worker.js +85 -0
  230. package/dist/workers/mermaidWorkerClient.d.ts +16 -0
  231. package/dist/workers/mermaidWorkerClient.d.ts.map +1 -0
  232. package/dist/workers/mermaidWorkerClient.js +170 -0
  233. package/package.json +95 -0
@@ -0,0 +1,108 @@
1
+ import type { BaseNode, HtmlPolicy, MarkdownIt, ParsedNode, ParseOptions } from 'stream-markdown-parser';
2
+ import type { CustomComponentMap } from '../../customComponents';
3
+ import type { CodeBlockMonacoOptions, CodeBlockMonacoTheme } from '../../types/monaco';
4
+ import { getHtmlTagFromContent, hasCompleteHtmlTagContent, normalizeCustomHtmlTags, normalizeCustomHtmlTagName as normalizeTagName, stripCustomHtmlWrapper } from 'stream-markdown-parser';
5
+ export { getHtmlTagFromContent, hasCompleteHtmlTagContent, normalizeCustomHtmlTags, normalizeTagName, stripCustomHtmlWrapper, };
6
+ export type SvelteRenderableNode = (ParsedNode | BaseNode) & Record<string, unknown>;
7
+ export interface NodeRendererEvents {
8
+ onCopy?: (code: string) => void;
9
+ onHandleArtifactClick?: (payload: any) => void;
10
+ }
11
+ export interface NodeRendererProps {
12
+ content?: string;
13
+ nodes?: readonly BaseNode[] | null;
14
+ final?: boolean;
15
+ parseOptions?: ParseOptions;
16
+ customMarkdownIt?: (md: MarkdownIt) => MarkdownIt;
17
+ debugPerformance?: boolean;
18
+ customHtmlTags?: readonly string[];
19
+ htmlPolicy?: HtmlPolicy;
20
+ viewportPriority?: boolean;
21
+ codeBlockStream?: boolean;
22
+ codeBlockDarkTheme?: CodeBlockMonacoTheme;
23
+ codeBlockLightTheme?: CodeBlockMonacoTheme;
24
+ codeBlockMonacoOptions?: CodeBlockMonacoOptions;
25
+ renderCodeBlocksAsPre?: boolean;
26
+ codeBlockMinWidth?: string | number;
27
+ codeBlockMaxWidth?: string | number;
28
+ codeBlockProps?: Record<string, any>;
29
+ mermaidProps?: Record<string, any>;
30
+ d2Props?: Record<string, any>;
31
+ infographicProps?: Record<string, any>;
32
+ customComponents?: CustomComponentMap;
33
+ showTooltips?: boolean;
34
+ themes?: CodeBlockMonacoTheme[];
35
+ isDark?: boolean;
36
+ customId?: string;
37
+ indexKey?: number | string;
38
+ typewriter?: boolean;
39
+ batchRendering?: boolean;
40
+ initialRenderBatchSize?: number;
41
+ renderBatchSize?: number;
42
+ renderBatchDelay?: number;
43
+ renderBatchBudgetMs?: number;
44
+ renderBatchIdleTimeoutMs?: number;
45
+ deferNodesUntilVisible?: boolean;
46
+ maxLiveNodes?: number;
47
+ liveNodeBuffer?: number;
48
+ allowHtml?: boolean;
49
+ }
50
+ export interface SvelteRenderContext {
51
+ customId?: string;
52
+ isDark?: boolean;
53
+ indexKey?: string;
54
+ final?: boolean;
55
+ typewriter?: boolean;
56
+ textStreamState?: Map<string, string>;
57
+ streamRenderVersion?: number;
58
+ showTooltips?: boolean;
59
+ codeBlockStream?: boolean;
60
+ renderCodeBlocksAsPre?: boolean;
61
+ allowHtml?: boolean;
62
+ htmlPolicy?: HtmlPolicy;
63
+ customHtmlTags?: readonly string[];
64
+ parseOptions?: ParseOptions;
65
+ customMarkdownIt?: (md: MarkdownIt) => MarkdownIt;
66
+ codeBlockProps?: Record<string, any>;
67
+ mermaidProps?: Record<string, any>;
68
+ d2Props?: Record<string, any>;
69
+ infographicProps?: Record<string, any>;
70
+ customComponents?: CustomComponentMap;
71
+ codeBlockThemes?: {
72
+ themes?: CodeBlockMonacoTheme[];
73
+ darkTheme?: CodeBlockMonacoTheme;
74
+ lightTheme?: CodeBlockMonacoTheme;
75
+ monacoOptions?: CodeBlockMonacoOptions;
76
+ minWidth?: string | number;
77
+ maxWidth?: string | number;
78
+ };
79
+ events: NodeRendererEvents;
80
+ }
81
+ export declare const BLOCK_LEVEL_TYPES: Set<string>;
82
+ export declare function buildRenderContext(props: NodeRendererProps, events?: NodeRendererEvents, textStreamState?: Map<string, string>, streamRenderVersion?: number): SvelteRenderContext;
83
+ export declare function resolveParsedNodes(props: NodeRendererProps): SvelteRenderableNode[];
84
+ export declare function getNodeList(value: unknown): SvelteRenderableNode[];
85
+ export declare function isWhitespaceTextNode(node: SvelteRenderableNode | null | undefined): boolean;
86
+ export declare function getMeaningfulLinkChildren(node: SvelteRenderableNode | null | undefined): SvelteRenderableNode[];
87
+ export declare function isImageOnlyLinkNode(node: SvelteRenderableNode | null | undefined): boolean;
88
+ export declare function isMediaOnlyParagraphNodes(children: readonly SvelteRenderableNode[]): boolean;
89
+ export declare function normalizeMediaOnlyParagraphNodes(children: readonly SvelteRenderableNode[]): SvelteRenderableNode[];
90
+ export declare function getString(value: unknown): string;
91
+ export declare function isSafeAttrName(value: string): boolean;
92
+ export declare function escapeHtml(value: unknown): string;
93
+ export declare function escapeAttr(value: unknown): string;
94
+ export declare function sanitizeClassToken(value: string): string;
95
+ export declare function clampHeadingLevel(value: unknown): number;
96
+ export declare function capitalize(value: string): string;
97
+ export declare function normalizeCodeLanguage(raw: unknown): string;
98
+ export declare function resolveCodeBlockLanguage(node: SvelteRenderableNode): string;
99
+ export declare function encodeDataPayload(value: string): any;
100
+ export declare function normalizeTokenAttrs(attrs?: Array<[string, string | null]> | null): Record<string, string | true>;
101
+ export declare function splitParagraphChildren(children: readonly SvelteRenderableNode[]): ({
102
+ kind: "inline";
103
+ nodes: SvelteRenderableNode[];
104
+ } | {
105
+ kind: "block";
106
+ node: SvelteRenderableNode;
107
+ })[];
108
+ //# sourceMappingURL=node-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-helpers.d.ts","sourceRoot":"","sources":["../../../src/components/shared/node-helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,220 @@
1
+ import { getHtmlTagFromContent, getMarkdown, hasCompleteHtmlTagContent, normalizeCustomHtmlTags, normalizeCustomHtmlTagName as normalizeTagName, parseMarkdownToStructure, stripCustomHtmlWrapper, } from 'stream-markdown-parser';
2
+ import { hydrateCustomTagContent } from '../../hydrateCustomTagContent';
3
+ export { getHtmlTagFromContent, hasCompleteHtmlTagContent, normalizeCustomHtmlTags, normalizeTagName, stripCustomHtmlWrapper, };
4
+ const markdownCache = new Map();
5
+ export const BLOCK_LEVEL_TYPES = new Set([
6
+ 'table',
7
+ 'code_block',
8
+ 'html_block',
9
+ 'blockquote',
10
+ 'list',
11
+ 'list_item',
12
+ 'definition_list',
13
+ 'footnote',
14
+ 'admonition',
15
+ 'thematic_break',
16
+ 'math_block',
17
+ 'thinking',
18
+ 'vmr_container',
19
+ ]);
20
+ export function buildRenderContext(props, events = {}, textStreamState, streamRenderVersion) {
21
+ var _a, _b;
22
+ const customHtmlTags = normalizeCustomHtmlTags([
23
+ ...(props.customHtmlTags || []),
24
+ ...(((_a = props.parseOptions) === null || _a === void 0 ? void 0 : _a.customHtmlTags) || []),
25
+ ]);
26
+ return {
27
+ customId: props.customId,
28
+ isDark: props.isDark,
29
+ indexKey: props.indexKey != null ? String(props.indexKey) : undefined,
30
+ final: props.final,
31
+ typewriter: props.typewriter,
32
+ textStreamState,
33
+ streamRenderVersion,
34
+ showTooltips: props.showTooltips,
35
+ codeBlockStream: props.codeBlockStream,
36
+ renderCodeBlocksAsPre: props.renderCodeBlocksAsPre,
37
+ allowHtml: props.allowHtml !== false,
38
+ htmlPolicy: (_b = props.htmlPolicy) !== null && _b !== void 0 ? _b : 'safe',
39
+ customHtmlTags,
40
+ parseOptions: props.parseOptions,
41
+ customMarkdownIt: props.customMarkdownIt,
42
+ codeBlockProps: props.codeBlockProps,
43
+ mermaidProps: props.mermaidProps,
44
+ d2Props: props.d2Props,
45
+ infographicProps: props.infographicProps,
46
+ customComponents: props.customComponents,
47
+ codeBlockThemes: {
48
+ themes: props.themes,
49
+ darkTheme: props.codeBlockDarkTheme,
50
+ lightTheme: props.codeBlockLightTheme,
51
+ monacoOptions: props.codeBlockMonacoOptions,
52
+ minWidth: props.codeBlockMinWidth,
53
+ maxWidth: props.codeBlockMaxWidth,
54
+ },
55
+ events,
56
+ };
57
+ }
58
+ export function resolveParsedNodes(props) {
59
+ var _a, _b;
60
+ if (Array.isArray(props.nodes))
61
+ return props.nodes;
62
+ const content = getString(props.content);
63
+ if (!content)
64
+ return [];
65
+ const normalizedTags = normalizeCustomHtmlTags([
66
+ ...(props.customHtmlTags || []),
67
+ ...(((_a = props.parseOptions) === null || _a === void 0 ? void 0 : _a.customHtmlTags) || []),
68
+ ]);
69
+ const cacheKey = `${props.customId || 'markstream-svelte'}::${normalizedTags.join(',')}`;
70
+ let markdown = markdownCache.get(cacheKey);
71
+ if (!markdown) {
72
+ markdown = getMarkdown(cacheKey, { customHtmlTags: normalizedTags });
73
+ markdownCache.set(cacheKey, markdown);
74
+ }
75
+ const parser = props.customMarkdownIt
76
+ ? props.customMarkdownIt(markdown)
77
+ : markdown;
78
+ const options = {
79
+ ...((_b = props.parseOptions) !== null && _b !== void 0 ? _b : {}),
80
+ };
81
+ if (typeof props.final === 'boolean')
82
+ options.final = props.final;
83
+ if (normalizedTags.length > 0)
84
+ options.customHtmlTags = normalizedTags;
85
+ return hydrateCustomTagContent(parseMarkdownToStructure(content, parser, options), content, normalizedTags);
86
+ }
87
+ export function getNodeList(value) {
88
+ return Array.isArray(value)
89
+ ? value.filter((item) => !!item && typeof item === 'object')
90
+ : [];
91
+ }
92
+ export function isWhitespaceTextNode(node) {
93
+ return getString(node === null || node === void 0 ? void 0 : node.type) === 'text' && getString(node === null || node === void 0 ? void 0 : node.content).trim() === '';
94
+ }
95
+ export function getMeaningfulLinkChildren(node) {
96
+ if (getString(node === null || node === void 0 ? void 0 : node.type) !== 'link')
97
+ return [];
98
+ return getNodeList(node === null || node === void 0 ? void 0 : node.children).filter(child => !isWhitespaceTextNode(child));
99
+ }
100
+ export function isImageOnlyLinkNode(node) {
101
+ var _a;
102
+ const linkChildren = getMeaningfulLinkChildren(node);
103
+ return linkChildren.length === 1 && getString((_a = linkChildren[0]) === null || _a === void 0 ? void 0 : _a.type) === 'image';
104
+ }
105
+ export function isMediaOnlyParagraphNodes(children) {
106
+ const meaningfulChildren = getNodeList(children).filter(child => !isWhitespaceTextNode(child));
107
+ return meaningfulChildren.length > 0
108
+ && meaningfulChildren.every(child => getString(child === null || child === void 0 ? void 0 : child.type) === 'image' || isImageOnlyLinkNode(child));
109
+ }
110
+ export function normalizeMediaOnlyParagraphNodes(children) {
111
+ const source = getNodeList(children);
112
+ const meaningfulChildren = source.filter(child => !isWhitespaceTextNode(child));
113
+ if (!isMediaOnlyParagraphNodes(source) || meaningfulChildren.length <= 1)
114
+ return source;
115
+ const normalized = [];
116
+ for (let index = 0; index < source.length; index += 1) {
117
+ const child = source[index];
118
+ if (!isWhitespaceTextNode(child)) {
119
+ normalized.push(child);
120
+ continue;
121
+ }
122
+ const hasPrevious = normalized.length > 0;
123
+ const hasNext = source.slice(index + 1).some(nextChild => !isWhitespaceTextNode(nextChild));
124
+ if (!hasPrevious || !hasNext)
125
+ continue;
126
+ normalized.push({
127
+ ...child,
128
+ content: ' ',
129
+ raw: ' ',
130
+ });
131
+ }
132
+ return normalized;
133
+ }
134
+ export function getString(value) {
135
+ return typeof value === 'string'
136
+ ? value
137
+ : value == null
138
+ ? ''
139
+ : String(value);
140
+ }
141
+ export function isSafeAttrName(value) {
142
+ return /^[^\s"'<>`=]+$/.test(value) && !/^on/i.test(value);
143
+ }
144
+ export function escapeHtml(value) {
145
+ return getString(value)
146
+ .replace(/&/g, '&amp;')
147
+ .replace(/</g, '&lt;')
148
+ .replace(/>/g, '&gt;')
149
+ .replace(/"/g, '&quot;')
150
+ .replace(/'/g, '&#39;');
151
+ }
152
+ export function escapeAttr(value) {
153
+ return escapeHtml(value).replace(/`/g, '&#96;');
154
+ }
155
+ export function sanitizeClassToken(value) {
156
+ return value.trim().toLowerCase().replace(/[^a-z0-9_-]+/g, '-').replace(/^-+|-+$/g, '');
157
+ }
158
+ export function clampHeadingLevel(value) {
159
+ const level = Math.trunc(Number(value) || 1);
160
+ return Math.min(6, Math.max(1, level));
161
+ }
162
+ export function capitalize(value) {
163
+ return value ? `${value[0].toUpperCase()}${value.slice(1)}` : '';
164
+ }
165
+ export function normalizeCodeLanguage(raw) {
166
+ var _a;
167
+ const head = String((_a = String(raw !== null && raw !== void 0 ? raw : '').split(/\s+/g)[0]) !== null && _a !== void 0 ? _a : '').toLowerCase();
168
+ const safe = head.replace(/[^\w-]/g, '');
169
+ return safe || 'plaintext';
170
+ }
171
+ export function resolveCodeBlockLanguage(node) {
172
+ return normalizeCodeLanguage(node === null || node === void 0 ? void 0 : node.language);
173
+ }
174
+ export function encodeDataPayload(value) {
175
+ var _a, _b;
176
+ if (!value)
177
+ return '';
178
+ const globalBuffer = (_b = (_a = globalThis === null || globalThis === void 0 ? void 0 : globalThis.require) === null || _a === void 0 ? void 0 : _a.call(globalThis, 'buffer')) === null || _b === void 0 ? void 0 : _b.Buffer;
179
+ if (globalBuffer === null || globalBuffer === void 0 ? void 0 : globalBuffer.from)
180
+ return globalBuffer.from(value, 'utf8').toString('base64');
181
+ if (typeof TextEncoder !== 'undefined' && typeof globalThis.btoa === 'function') {
182
+ const bytes = new TextEncoder().encode(value);
183
+ let binary = '';
184
+ for (const byte of bytes)
185
+ binary += String.fromCharCode(byte);
186
+ return globalThis.btoa(binary);
187
+ }
188
+ return '';
189
+ }
190
+ export function normalizeTokenAttrs(attrs) {
191
+ if (!Array.isArray(attrs) || attrs.length === 0)
192
+ return null;
193
+ return attrs.reduce((acc, [name, value]) => {
194
+ if (!name || !isSafeAttrName(name))
195
+ return acc;
196
+ acc[name] = value !== null && value !== void 0 ? value : true;
197
+ return acc;
198
+ }, {});
199
+ }
200
+ export function splitParagraphChildren(children) {
201
+ const parts = [];
202
+ const inlineBuffer = [];
203
+ const flushInline = () => {
204
+ if (!inlineBuffer.length)
205
+ return;
206
+ parts.push({ kind: 'inline', nodes: inlineBuffer.slice() });
207
+ inlineBuffer.length = 0;
208
+ };
209
+ for (const child of children) {
210
+ if (BLOCK_LEVEL_TYPES.has(String((child === null || child === void 0 ? void 0 : child.type) || ''))) {
211
+ flushInline();
212
+ parts.push({ kind: 'block', node: child });
213
+ }
214
+ else {
215
+ inlineBuffer.push(child);
216
+ }
217
+ }
218
+ flushInline();
219
+ return parts;
220
+ }
@@ -0,0 +1,9 @@
1
+ import type { SvelteRenderableNode, SvelteRenderContext } from './node-helpers';
2
+ export type CodeBlockMode = 'mermaid' | 'd2' | 'infographic' | 'pre' | 'code';
3
+ export declare function resolveNodeOutletCodeMode(node: SvelteRenderableNode, context?: SvelteRenderContext): CodeBlockMode;
4
+ export declare function resolveHtmlTag(node: SvelteRenderableNode): string;
5
+ export declare function coerceCustomHtmlNode(node: SvelteRenderableNode): SvelteRenderableNode;
6
+ export declare function coerceBuiltinHtmlNode(node: SvelteRenderableNode, resolvedType: string): SvelteRenderableNode;
7
+ export declare function resolveNodeOutletCustomInputs(node: SvelteRenderableNode, context?: SvelteRenderContext): Record<string, any>;
8
+ export declare function resolveNodeOutletCustomComponent(node: SvelteRenderableNode, context?: SvelteRenderContext, customComponents?: Record<string, any> | null): any;
9
+ //# sourceMappingURL=node-outlet-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-outlet-helpers.d.ts","sourceRoot":"","sources":["../../../src/components/shared/node-outlet-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AAI/E,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,IAAI,GAAG,aAAa,GAAG,KAAK,GAAG,MAAM,CAAA;AAE7E,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,oBAAoB,EAC1B,OAAO,CAAC,EAAE,mBAAmB,GAC5B,aAAa,CAYf;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,oBAAoB,UAExD;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,oBAAoB,wBAU9D;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,wBASrF;AAED,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,oBAAoB,EAC1B,OAAO,CAAC,EAAE,mBAAmB,uBAqB9B;AAkBD,wBAAgB,gCAAgC,CAC9C,IAAI,EAAE,oBAAoB,EAC1B,OAAO,CAAC,EAAE,mBAAmB,EAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,OA+B9C"}
@@ -0,0 +1,92 @@
1
+ import { clampPreviewHeight, estimateInfographicPreviewHeight, estimateMermaidPreviewHeight, parsePositiveNumber } from './diagram-height';
2
+ import { getHtmlTagFromContent, resolveCodeBlockLanguage, stripCustomHtmlWrapper } from './node-helpers';
3
+ export function resolveNodeOutletCodeMode(node, context) {
4
+ if (context === null || context === void 0 ? void 0 : context.renderCodeBlocksAsPre)
5
+ return 'pre';
6
+ const language = resolveCodeBlockLanguage(node);
7
+ if (language === 'd2' || language === 'd2lang')
8
+ return 'd2';
9
+ if (language === 'infographic')
10
+ return 'infographic';
11
+ if (language === 'mermaid')
12
+ return 'mermaid';
13
+ return 'code';
14
+ }
15
+ export function resolveHtmlTag(node) {
16
+ return String((node === null || node === void 0 ? void 0 : node.tag) || '').trim().toLowerCase() || getHtmlTagFromContent(node === null || node === void 0 ? void 0 : node.content);
17
+ }
18
+ export function coerceCustomHtmlNode(node) {
19
+ const tag = resolveHtmlTag(node);
20
+ if (!tag)
21
+ return node;
22
+ return {
23
+ ...node,
24
+ type: tag,
25
+ tag,
26
+ content: stripCustomHtmlWrapper(node === null || node === void 0 ? void 0 : node.content, tag),
27
+ };
28
+ }
29
+ export function coerceBuiltinHtmlNode(node, resolvedType) {
30
+ const tag = resolveHtmlTag(node);
31
+ if (!tag)
32
+ return node;
33
+ return {
34
+ ...node,
35
+ type: resolvedType,
36
+ tag,
37
+ };
38
+ }
39
+ export function resolveNodeOutletCustomInputs(node, context) {
40
+ var _a, _b;
41
+ if (String((node === null || node === void 0 ? void 0 : node.type) || '') !== 'code_block')
42
+ return null;
43
+ const codeMode = resolveNodeOutletCodeMode(node, context);
44
+ if (codeMode === 'mermaid') {
45
+ return withEstimatedPreviewHeight(context === null || context === void 0 ? void 0 : context.mermaidProps, estimateMermaidPreviewHeight(getNodeCode(node)));
46
+ }
47
+ if (codeMode === 'd2')
48
+ return (_a = context === null || context === void 0 ? void 0 : context.d2Props) !== null && _a !== void 0 ? _a : null;
49
+ if (codeMode === 'infographic') {
50
+ return withEstimatedPreviewHeight(context === null || context === void 0 ? void 0 : context.infographicProps, estimateInfographicPreviewHeight(getNodeCode(node)));
51
+ }
52
+ return (_b = context === null || context === void 0 ? void 0 : context.codeBlockProps) !== null && _b !== void 0 ? _b : null;
53
+ }
54
+ function getNodeCode(node) {
55
+ var _a;
56
+ return String((_a = node === null || node === void 0 ? void 0 : node.code) !== null && _a !== void 0 ? _a : '');
57
+ }
58
+ function withEstimatedPreviewHeight(props, estimatedHeight) {
59
+ var _a;
60
+ const next = { ...(props || {}) };
61
+ if (parsePositiveNumber(next.estimatedPreviewHeightPx) == null) {
62
+ next.estimatedPreviewHeightPx = clampPreviewHeight(estimatedHeight, undefined, next.maxHeight === 'none' ? null : ((_a = parsePositiveNumber(next.maxHeight)) !== null && _a !== void 0 ? _a : undefined));
63
+ }
64
+ return next;
65
+ }
66
+ export function resolveNodeOutletCustomComponent(node, context, customComponents) {
67
+ var _a;
68
+ const mapping = (_a = customComponents !== null && customComponents !== void 0 ? customComponents : context === null || context === void 0 ? void 0 : context.customComponents) !== null && _a !== void 0 ? _a : null;
69
+ const resolvedType = String((node === null || node === void 0 ? void 0 : node.type) || '');
70
+ if (resolvedType === 'code_block') {
71
+ const language = resolveCodeBlockLanguage(node);
72
+ const customForLanguage = language ? mapping === null || mapping === void 0 ? void 0 : mapping[language] : null;
73
+ if (customForLanguage)
74
+ return customForLanguage;
75
+ const codeMode = resolveNodeOutletCodeMode(node, context);
76
+ if (codeMode === 'mermaid' && (mapping === null || mapping === void 0 ? void 0 : mapping.mermaid))
77
+ return mapping.mermaid;
78
+ if (codeMode === 'd2' && (mapping === null || mapping === void 0 ? void 0 : mapping.d2))
79
+ return mapping.d2;
80
+ if (codeMode === 'infographic' && (mapping === null || mapping === void 0 ? void 0 : mapping.infographic))
81
+ return mapping.infographic;
82
+ if (mapping === null || mapping === void 0 ? void 0 : mapping.code_block)
83
+ return mapping.code_block;
84
+ }
85
+ const direct = mapping === null || mapping === void 0 ? void 0 : mapping[resolvedType];
86
+ if (direct)
87
+ return direct;
88
+ const tag = resolveHtmlTag(node);
89
+ if (tag && (mapping === null || mapping === void 0 ? void 0 : mapping[tag]))
90
+ return mapping[tag];
91
+ return null;
92
+ }
@@ -0,0 +1,19 @@
1
+ export declare const DEFAULT_NODE_HEIGHT = 32;
2
+ export declare const MAX_DEFERRED_NODE_COUNT = 900;
3
+ export interface LiveRange {
4
+ start: number;
5
+ end: number;
6
+ }
7
+ export interface DeferNodesOptions {
8
+ deferNodesUntilVisible?: boolean;
9
+ maxLiveNodes?: number;
10
+ parsedNodeCount: number;
11
+ viewportPriority?: boolean;
12
+ virtualizationEnabled: boolean;
13
+ }
14
+ export declare function resolveVirtualizationEnabled(parsedNodeCount: number, maxLiveNodes?: number): boolean;
15
+ export declare function resolveDeferNodes(options: DeferNodesOptions): boolean;
16
+ export declare function resolveAverageNodeHeight(nodeHeights: ReadonlyMap<number, number>, fallback?: number): number;
17
+ export declare function estimateHeightRange(start: number, end: number, nodeHeights: ReadonlyMap<number, number>, averageNodeHeight: number): number;
18
+ export declare function computeLiveRange(total: number, focusIndex: number, maxLiveNodes?: number, liveNodeBuffer?: number): LiveRange;
19
+ //# sourceMappingURL=render-window.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-window.d.ts","sourceRoot":"","sources":["../../../src/components/shared/render-window.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,KAAK,CAAA;AACrC,eAAO,MAAM,uBAAuB,MAAM,CAAA;AAE1C,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,MAAM,WAAW,iBAAiB;IAChC,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAChC,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,eAAe,EAAE,MAAM,CAAA;IACvB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,qBAAqB,EAAE,OAAO,CAAA;CAC/B;AAED,wBAAgB,4BAA4B,CAAC,eAAe,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,WAM1F;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,iBAAiB,WAW3D;AAED,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,EACxC,QAAQ,SAAsB,UAU/B;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,EACxC,iBAAiB,EAAE,MAAM,UAS1B;AAED,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,EAClB,YAAY,CAAC,EAAE,MAAM,EACrB,cAAc,CAAC,EAAE,MAAM,GACtB,SAAS,CA2BX"}
@@ -0,0 +1,63 @@
1
+ export const DEFAULT_NODE_HEIGHT = 32;
2
+ export const MAX_DEFERRED_NODE_COUNT = 900;
3
+ export function resolveVirtualizationEnabled(parsedNodeCount, maxLiveNodes) {
4
+ const configuredMaxLiveNodes = Math.trunc(maxLiveNodes !== null && maxLiveNodes !== void 0 ? maxLiveNodes : 320);
5
+ if (!Number.isFinite(configuredMaxLiveNodes) || configuredMaxLiveNodes <= 0)
6
+ return false;
7
+ const resolvedMaxLiveNodes = Math.max(1, configuredMaxLiveNodes);
8
+ return parsedNodeCount > resolvedMaxLiveNodes;
9
+ }
10
+ export function resolveDeferNodes(options) {
11
+ var _a;
12
+ if (options.deferNodesUntilVisible === false)
13
+ return false;
14
+ const configuredMaxLiveNodes = Math.trunc((_a = options.maxLiveNodes) !== null && _a !== void 0 ? _a : 320);
15
+ if (!Number.isFinite(configuredMaxLiveNodes) || configuredMaxLiveNodes <= 0)
16
+ return false;
17
+ if (options.virtualizationEnabled)
18
+ return false;
19
+ if (options.parsedNodeCount > MAX_DEFERRED_NODE_COUNT)
20
+ return false;
21
+ return options.viewportPriority !== false;
22
+ }
23
+ export function resolveAverageNodeHeight(nodeHeights, fallback = DEFAULT_NODE_HEIGHT) {
24
+ if (!nodeHeights.size)
25
+ return fallback;
26
+ let total = 0;
27
+ for (const height of nodeHeights.values())
28
+ total += height;
29
+ return Math.max(16, total / nodeHeights.size);
30
+ }
31
+ export function estimateHeightRange(start, end, nodeHeights, averageNodeHeight) {
32
+ var _a;
33
+ if (start >= end)
34
+ return 0;
35
+ let total = 0;
36
+ for (let index = start; index < end; index += 1)
37
+ total += (_a = nodeHeights.get(index)) !== null && _a !== void 0 ? _a : averageNodeHeight;
38
+ return total;
39
+ }
40
+ export function computeLiveRange(total, focusIndex, maxLiveNodes, liveNodeBuffer) {
41
+ if (!total)
42
+ return { start: 0, end: 0 };
43
+ const resolvedMaxLiveNodes = Math.max(1, Math.trunc(maxLiveNodes !== null && maxLiveNodes !== void 0 ? maxLiveNodes : 320));
44
+ const resolvedBuffer = Math.max(0, Math.trunc(liveNodeBuffer !== null && liveNodeBuffer !== void 0 ? liveNodeBuffer : 60));
45
+ const focus = Math.max(0, Math.min(Math.trunc(focusIndex), total - 1));
46
+ let start = Math.max(0, focus - resolvedBuffer);
47
+ let end = Math.min(total, focus + resolvedBuffer + 1);
48
+ const size = end - start;
49
+ if (size > resolvedMaxLiveNodes) {
50
+ const excess = size - resolvedMaxLiveNodes;
51
+ start += Math.ceil(excess / 2);
52
+ end -= Math.floor(excess / 2);
53
+ }
54
+ else if (size < resolvedMaxLiveNodes) {
55
+ const missing = resolvedMaxLiveNodes - size;
56
+ start = Math.max(0, start - Math.ceil(missing / 2));
57
+ end = Math.min(total, end + Math.floor(missing / 2));
58
+ }
59
+ return {
60
+ start: Math.max(0, Math.min(start, total)),
61
+ end: Math.max(0, Math.min(Math.max(end, start), total)),
62
+ };
63
+ }
@@ -0,0 +1,4 @@
1
+ import type { SvelteRenderableNode, SvelteRenderContext } from './node-helpers';
2
+ export declare function renderNodeHtml(node: SvelteRenderableNode | null | undefined, context?: SvelteRenderContext): string;
3
+ export declare function renderNodesHtml(nodes: readonly SvelteRenderableNode[] | null | undefined, context?: SvelteRenderContext): string;
4
+ //# sourceMappingURL=renderNodeHtml.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderNodeHtml.d.ts","sourceRoot":"","sources":["../../../src/components/shared/renderNodeHtml.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AAG/E,wBAAgB,cAAc,CAAC,IAAI,EAAE,oBAAoB,GAAG,IAAI,GAAG,SAAS,EAAE,OAAO,CAAC,EAAE,mBAAmB,UAO1G;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,oBAAoB,EAAE,GAAG,IAAI,GAAG,SAAS,EAAE,OAAO,CAAC,EAAE,mBAAmB,UAOvH"}
@@ -0,0 +1,19 @@
1
+ import { renderMarkdownNodesToHtml, renderMarkdownNodeToHtml } from '../../renderMarkdownHtml';
2
+ export function renderNodeHtml(node, context) {
3
+ var _a;
4
+ return renderMarkdownNodeToHtml(node, {
5
+ cacheKey: (context === null || context === void 0 ? void 0 : context.customId) ? `markstream-svelte-${context.customId}` : 'markstream-svelte-node',
6
+ customHtmlTags: context === null || context === void 0 ? void 0 : context.customHtmlTags,
7
+ allowHtml: (context === null || context === void 0 ? void 0 : context.allowHtml) !== false,
8
+ htmlPolicy: (_a = context === null || context === void 0 ? void 0 : context.htmlPolicy) !== null && _a !== void 0 ? _a : 'safe',
9
+ });
10
+ }
11
+ export function renderNodesHtml(nodes, context) {
12
+ var _a;
13
+ return renderMarkdownNodesToHtml(nodes, {
14
+ cacheKey: (context === null || context === void 0 ? void 0 : context.customId) ? `markstream-svelte-${context.customId}` : 'markstream-svelte-node',
15
+ customHtmlTags: context === null || context === void 0 ? void 0 : context.customHtmlTags,
16
+ allowHtml: (context === null || context === void 0 ? void 0 : context.allowHtml) !== false,
17
+ htmlPolicy: (_a = context === null || context === void 0 ? void 0 : context.htmlPolicy) !== null && _a !== void 0 ? _a : 'safe',
18
+ });
19
+ }
@@ -0,0 +1,7 @@
1
+ export declare function copyTextToClipboard(source: string): Promise<boolean>;
2
+ export declare function clearElement(target: HTMLElement | null | undefined): void;
3
+ export declare function setElementHtml(target: HTMLElement | null | undefined, html: string): void;
4
+ export declare function downloadSvgMarkup(svgMarkup: string, filename: string): void;
5
+ export declare function resolveCssSize(value: unknown, fallback?: string): string;
6
+ export declare function clampNumber(value: number, min: number, max: number): number;
7
+ //# sourceMappingURL=rich-block-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rich-block-helpers.d.ts","sourceRoot":"","sources":["../../../src/components/shared/rich-block-helpers.ts"],"names":[],"mappings":"AAAA,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,MAAM,oBAiCvD;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,QAUlE;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,QAYlF;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,QAapE;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,UAI/D;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,UAElE"}
@@ -0,0 +1,76 @@
1
+ export async function copyTextToClipboard(source) {
2
+ var _a;
3
+ try {
4
+ if (typeof navigator !== 'undefined' && ((_a = navigator.clipboard) === null || _a === void 0 ? void 0 : _a.writeText)) {
5
+ await navigator.clipboard.writeText(source);
6
+ return true;
7
+ }
8
+ }
9
+ catch {
10
+ // Fall back to the textarea path below.
11
+ }
12
+ if (typeof document === 'undefined')
13
+ return false;
14
+ const textarea = document.createElement('textarea');
15
+ textarea.value = source;
16
+ textarea.setAttribute('readonly', 'true');
17
+ textarea.style.position = 'fixed';
18
+ textarea.style.opacity = '0';
19
+ textarea.style.pointerEvents = 'none';
20
+ document.body.appendChild(textarea);
21
+ textarea.select();
22
+ try {
23
+ document.execCommand('copy');
24
+ return true;
25
+ }
26
+ catch {
27
+ return false;
28
+ }
29
+ finally {
30
+ textarea.remove();
31
+ }
32
+ }
33
+ export function clearElement(target) {
34
+ if (!target)
35
+ return;
36
+ try {
37
+ target.replaceChildren();
38
+ }
39
+ catch {
40
+ target.innerHTML = '';
41
+ }
42
+ }
43
+ export function setElementHtml(target, html) {
44
+ if (!target)
45
+ return;
46
+ clearElement(target);
47
+ if (!html)
48
+ return;
49
+ try {
50
+ target.insertAdjacentHTML('afterbegin', html);
51
+ }
52
+ catch {
53
+ target.innerHTML = html;
54
+ }
55
+ }
56
+ export function downloadSvgMarkup(svgMarkup, filename) {
57
+ if (!svgMarkup || typeof document === 'undefined' || typeof URL === 'undefined')
58
+ return;
59
+ const blob = new Blob([svgMarkup], { type: 'image/svg+xml;charset=utf-8' });
60
+ const url = URL.createObjectURL(blob);
61
+ const link = document.createElement('a');
62
+ link.href = url;
63
+ link.download = filename;
64
+ document.body.appendChild(link);
65
+ link.click();
66
+ document.body.removeChild(link);
67
+ URL.revokeObjectURL(url);
68
+ }
69
+ export function resolveCssSize(value, fallback) {
70
+ if (value == null || value === '')
71
+ return fallback !== null && fallback !== void 0 ? fallback : null;
72
+ return typeof value === 'number' ? `${value}px` : String(value);
73
+ }
74
+ export function clampNumber(value, min, max) {
75
+ return Math.min(max, Math.max(min, value));
76
+ }