markstream-svelte 0.0.1-beta.1 → 0.0.1-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +27 -2
- package/dist/components/AdmonitionNode.svelte.d.ts +0 -1
- package/dist/components/BlockquoteNode.svelte.d.ts +0 -1
- package/dist/components/CheckboxNode.svelte.d.ts +0 -1
- package/dist/components/CodeBlockNode.svelte.d.ts +0 -1
- package/dist/components/D2BlockNode.svelte.d.ts +0 -1
- package/dist/components/DefinitionListNode.svelte.d.ts +0 -1
- package/dist/components/EmojiNode.svelte.d.ts +0 -1
- package/dist/components/EmphasisNode.svelte.d.ts +0 -1
- package/dist/components/FallbackComponent.svelte.d.ts +0 -1
- package/dist/components/FootnoteAnchorNode.svelte.d.ts +0 -1
- package/dist/components/FootnoteNode.svelte.d.ts +0 -1
- package/dist/components/FootnoteReferenceNode.svelte.d.ts +0 -1
- package/dist/components/HardBreakNode.svelte.d.ts +0 -1
- package/dist/components/HeadingNode.svelte.d.ts +0 -1
- package/dist/components/HighlightNode.svelte.d.ts +0 -1
- package/dist/components/HtmlBlockNode.svelte.d.ts +0 -1
- package/dist/components/HtmlInlineNode.svelte.d.ts +0 -1
- package/dist/components/HtmlPreviewFrame.svelte.d.ts +0 -1
- package/dist/components/ImageNode.svelte.d.ts +0 -1
- package/dist/components/InfographicBlockNode.svelte.d.ts +0 -1
- package/dist/components/InlineCodeNode.svelte.d.ts +0 -1
- package/dist/components/InlineWrapNode.svelte.d.ts +0 -1
- package/dist/components/InsertNode.svelte.d.ts +0 -1
- package/dist/components/LinkNode.svelte.d.ts +0 -1
- package/dist/components/ListItemNode.svelte.d.ts +0 -1
- package/dist/components/ListNode.svelte.d.ts +0 -1
- package/dist/components/MarkdownCodeBlockNode.svelte.d.ts +0 -1
- package/dist/components/MathBlockNode.svelte.d.ts +0 -1
- package/dist/components/MathInlineNode.svelte.d.ts +0 -1
- package/dist/components/MermaidBlockNode.svelte.d.ts +0 -1
- package/dist/components/NodeOutlet.svelte +22 -17
- package/dist/components/NodeOutlet.svelte.d.ts +6 -21
- package/dist/components/NodeRenderer.svelte +92 -72
- package/dist/components/NodeRenderer.svelte.d.ts +7 -61
- package/dist/components/ParagraphNode.svelte.d.ts +0 -1
- package/dist/components/PreCodeNode.svelte.d.ts +0 -1
- package/dist/components/ReferenceNode.svelte.d.ts +0 -1
- package/dist/components/RenderChildren.svelte +9 -3
- package/dist/components/RenderChildren.svelte.d.ts +6 -21
- package/dist/components/StrikethroughNode.svelte.d.ts +0 -1
- package/dist/components/StrongNode.svelte.d.ts +0 -1
- package/dist/components/SubscriptNode.svelte.d.ts +0 -1
- package/dist/components/SuperscriptNode.svelte.d.ts +0 -1
- package/dist/components/TableNode.svelte.d.ts +0 -1
- package/dist/components/TextNode.svelte.d.ts +0 -1
- package/dist/components/ThematicBreakNode.svelte.d.ts +0 -1
- package/dist/components/Tooltip.svelte.d.ts +0 -1
- package/dist/components/VmrContainerNode.svelte.d.ts +0 -1
- package/dist/components/shared/diagram-height.d.ts +0 -1
- package/dist/components/shared/node-helpers.d.ts +0 -1
- package/dist/components/shared/node-outlet-helpers.d.ts +0 -1
- package/dist/components/shared/render-window.d.ts +0 -1
- package/dist/components/shared/renderNodeHtml.d.ts +0 -1
- package/dist/components/shared/rich-block-helpers.d.ts +0 -1
- package/dist/customComponents.d.ts +2 -2
- package/dist/enhanceRenderedHtml.d.ts +0 -1
- package/dist/hydrateCustomTagContent.d.ts +0 -1
- package/dist/i18n/useSafeI18n.d.ts +0 -1
- package/dist/index.d.ts +0 -1
- package/dist/optional/d2.d.ts +0 -1
- package/dist/optional/infographic.d.ts +0 -1
- package/dist/optional/katex.d.ts +0 -1
- package/dist/optional/mermaid.d.ts +0 -1
- package/dist/optional/monaco.d.ts +0 -1
- package/dist/parseNestedMarkdownToNodes.d.ts +0 -1
- package/dist/renderMarkdownHtml.d.ts +0 -1
- package/dist/sanitizeHtmlContent.d.ts +0 -1
- package/dist/sanitizeSvg.d.ts +0 -1
- package/dist/tailwind-entry.d.ts +0 -1
- package/dist/tooltip/singletonTooltip.d.ts +0 -1
- package/dist/types/monaco.d.ts +0 -1
- package/dist/utils/languageIcon.d.ts +0 -1
- package/dist/utils/normalizeKaTeXRenderInput.d.ts +0 -1
- package/dist/workers/katexCdnWorker.d.ts +0 -1
- package/dist/workers/katexRenderer.worker.d.ts +0 -1
- package/dist/workers/katexWorkerClient.d.ts +0 -1
- package/dist/workers/mermaidCdnWorker.d.ts +0 -1
- package/dist/workers/mermaidParser.worker.d.ts +0 -1
- package/dist/workers/mermaidWorkerClient.d.ts +0 -1
- package/package.json +2 -2
- package/dist/components/AdmonitionNode.svelte.d.ts.map +0 -1
- package/dist/components/BlockquoteNode.svelte.d.ts.map +0 -1
- package/dist/components/CheckboxNode.svelte.d.ts.map +0 -1
- package/dist/components/CodeBlockNode.svelte.d.ts.map +0 -1
- package/dist/components/D2BlockNode.svelte.d.ts.map +0 -1
- package/dist/components/DefinitionListNode.svelte.d.ts.map +0 -1
- package/dist/components/EmojiNode.svelte.d.ts.map +0 -1
- package/dist/components/EmphasisNode.svelte.d.ts.map +0 -1
- package/dist/components/FallbackComponent.svelte.d.ts.map +0 -1
- package/dist/components/FootnoteAnchorNode.svelte.d.ts.map +0 -1
- package/dist/components/FootnoteNode.svelte.d.ts.map +0 -1
- package/dist/components/FootnoteReferenceNode.svelte.d.ts.map +0 -1
- package/dist/components/HardBreakNode.svelte.d.ts.map +0 -1
- package/dist/components/HeadingNode.svelte.d.ts.map +0 -1
- package/dist/components/HighlightNode.svelte.d.ts.map +0 -1
- package/dist/components/HtmlBlockNode.svelte.d.ts.map +0 -1
- package/dist/components/HtmlInlineNode.svelte.d.ts.map +0 -1
- package/dist/components/HtmlPreviewFrame.svelte.d.ts.map +0 -1
- package/dist/components/ImageNode.svelte.d.ts.map +0 -1
- package/dist/components/InfographicBlockNode.svelte.d.ts.map +0 -1
- package/dist/components/InlineCodeNode.svelte.d.ts.map +0 -1
- package/dist/components/InlineWrapNode.svelte.d.ts.map +0 -1
- package/dist/components/InsertNode.svelte.d.ts.map +0 -1
- package/dist/components/LinkNode.svelte.d.ts.map +0 -1
- package/dist/components/ListItemNode.svelte.d.ts.map +0 -1
- package/dist/components/ListNode.svelte.d.ts.map +0 -1
- package/dist/components/MarkdownCodeBlockNode.svelte.d.ts.map +0 -1
- package/dist/components/MathBlockNode.svelte.d.ts.map +0 -1
- package/dist/components/MathInlineNode.svelte.d.ts.map +0 -1
- package/dist/components/MermaidBlockNode.svelte.d.ts.map +0 -1
- package/dist/components/NodeOutlet.svelte.d.ts.map +0 -1
- package/dist/components/NodeRenderer.svelte.d.ts.map +0 -1
- package/dist/components/ParagraphNode.svelte.d.ts.map +0 -1
- package/dist/components/PreCodeNode.svelte.d.ts.map +0 -1
- package/dist/components/ReferenceNode.svelte.d.ts.map +0 -1
- package/dist/components/RenderChildren.svelte.d.ts.map +0 -1
- package/dist/components/StrikethroughNode.svelte.d.ts.map +0 -1
- package/dist/components/StrongNode.svelte.d.ts.map +0 -1
- package/dist/components/SubscriptNode.svelte.d.ts.map +0 -1
- package/dist/components/SuperscriptNode.svelte.d.ts.map +0 -1
- package/dist/components/TableNode.svelte.d.ts.map +0 -1
- package/dist/components/TextNode.svelte.d.ts.map +0 -1
- package/dist/components/ThematicBreakNode.svelte.d.ts.map +0 -1
- package/dist/components/Tooltip.svelte.d.ts.map +0 -1
- package/dist/components/VmrContainerNode.svelte.d.ts.map +0 -1
- package/dist/components/shared/diagram-height.d.ts.map +0 -1
- package/dist/components/shared/node-helpers.d.ts.map +0 -1
- package/dist/components/shared/node-outlet-helpers.d.ts.map +0 -1
- package/dist/components/shared/render-window.d.ts.map +0 -1
- package/dist/components/shared/renderNodeHtml.d.ts.map +0 -1
- package/dist/components/shared/rich-block-helpers.d.ts.map +0 -1
- package/dist/customComponents.d.ts.map +0 -1
- package/dist/enhanceRenderedHtml.d.ts.map +0 -1
- package/dist/hydrateCustomTagContent.d.ts.map +0 -1
- package/dist/i18n/useSafeI18n.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/optional/d2.d.ts.map +0 -1
- package/dist/optional/infographic.d.ts.map +0 -1
- package/dist/optional/katex.d.ts.map +0 -1
- package/dist/optional/mermaid.d.ts.map +0 -1
- package/dist/optional/monaco.d.ts.map +0 -1
- package/dist/parseNestedMarkdownToNodes.d.ts.map +0 -1
- package/dist/renderMarkdownHtml.d.ts.map +0 -1
- package/dist/sanitizeHtmlContent.d.ts.map +0 -1
- package/dist/sanitizeSvg.d.ts.map +0 -1
- package/dist/tailwind-entry.d.ts.map +0 -1
- package/dist/tooltip/singletonTooltip.d.ts.map +0 -1
- package/dist/types/monaco.d.ts.map +0 -1
- package/dist/utils/languageIcon.d.ts.map +0 -1
- package/dist/utils/normalizeKaTeXRenderInput.d.ts.map +0 -1
- package/dist/workers/katexCdnWorker.d.ts.map +0 -1
- package/dist/workers/katexRenderer.worker.d.ts.map +0 -1
- package/dist/workers/katexWorkerClient.d.ts.map +0 -1
- package/dist/workers/mermaidCdnWorker.d.ts.map +0 -1
- package/dist/workers/mermaidParser.worker.d.ts.map +0 -1
- package/dist/workers/mermaidWorkerClient.d.ts.map +0 -1
package/README.md
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
# markstream-svelte
|
|
2
2
|
|
|
3
|
-
Svelte 5 renderer aligned with `markstream-vue`, `markstream-vue2`, and `markstream-react`.
|
|
3
|
+
Svelte 5-only renderer aligned with `markstream-vue`, `markstream-vue2`, and `markstream-react`. Svelte 4 is not supported.
|
|
4
4
|
|
|
5
5
|
## Install
|
|
6
6
|
|
|
7
7
|
```bash
|
|
8
|
-
pnpm add markstream-svelte svelte
|
|
8
|
+
pnpm add markstream-svelte svelte@^5
|
|
9
9
|
```
|
|
10
10
|
|
|
11
11
|
Optional heavy renderers stay as peer dependencies, matching the Vue and React packages:
|
|
@@ -52,6 +52,8 @@ flowchart LR
|
|
|
52
52
|
|
|
53
53
|
## Custom Components
|
|
54
54
|
|
|
55
|
+
Register Svelte 5 components with the scoped registry:
|
|
56
|
+
|
|
55
57
|
```svelte
|
|
56
58
|
<script lang="ts">
|
|
57
59
|
import MarkdownRender, { setCustomComponents } from 'markstream-svelte'
|
|
@@ -70,6 +72,29 @@ flowchart LR
|
|
|
70
72
|
/>
|
|
71
73
|
```
|
|
72
74
|
|
|
75
|
+
```svelte
|
|
76
|
+
<!-- ThinkingNode.svelte -->
|
|
77
|
+
<script lang="ts">
|
|
78
|
+
import MarkdownRender from 'markstream-svelte'
|
|
79
|
+
|
|
80
|
+
let {
|
|
81
|
+
node,
|
|
82
|
+
customId = undefined,
|
|
83
|
+
}: {
|
|
84
|
+
node: any
|
|
85
|
+
customId?: string
|
|
86
|
+
} = $props()
|
|
87
|
+
</script>
|
|
88
|
+
|
|
89
|
+
<section class="thinking-node">
|
|
90
|
+
<MarkdownRender
|
|
91
|
+
content={String(node?.content ?? '')}
|
|
92
|
+
{customId}
|
|
93
|
+
customHtmlTags={['thinking']}
|
|
94
|
+
/>
|
|
95
|
+
</section>
|
|
96
|
+
```
|
|
97
|
+
|
|
73
98
|
Run the local playground with:
|
|
74
99
|
|
|
75
100
|
```bash
|
|
@@ -19,4 +19,3 @@ declare const FootnoteReferenceNode: $$__sveltets_2_IsomorphicComponent<{
|
|
|
19
19
|
}, {}, {}, string>;
|
|
20
20
|
type FootnoteReferenceNode = InstanceType<typeof FootnoteReferenceNode>;
|
|
21
21
|
export default FootnoteReferenceNode;
|
|
22
|
-
//# sourceMappingURL=FootnoteReferenceNode.svelte.d.ts.map
|
|
@@ -20,4 +20,3 @@ declare const MarkdownCodeBlockNode: $$__sveltets_2_IsomorphicComponent<{
|
|
|
20
20
|
}, {}, {}, string>;
|
|
21
21
|
type MarkdownCodeBlockNode = InstanceType<typeof MarkdownCodeBlockNode>;
|
|
22
22
|
export default MarkdownCodeBlockNode;
|
|
23
|
-
//# sourceMappingURL=MarkdownCodeBlockNode.svelte.d.ts.map
|
|
@@ -50,25 +50,31 @@
|
|
|
50
50
|
resolveNodeOutletCustomInputs,
|
|
51
51
|
} from './shared/node-outlet-helpers'
|
|
52
52
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
53
|
+
let {
|
|
54
|
+
node,
|
|
55
|
+
context = undefined,
|
|
56
|
+
indexKey = undefined,
|
|
57
|
+
}: {
|
|
58
|
+
node: SvelteRenderableNode
|
|
59
|
+
context?: SvelteRenderContext
|
|
60
|
+
indexKey?: string | number
|
|
61
|
+
} = $props()
|
|
56
62
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
63
|
+
let resolvedType = $derived(String((node as any)?.type || ''))
|
|
64
|
+
let customComponentMap = $derived(context?.customComponents || getCustomNodeComponents(context?.customId))
|
|
65
|
+
let CustomComponent = $derived(resolveNodeOutletCustomComponent(node, context, customComponentMap))
|
|
66
|
+
let customNode = $derived(coerceCustomHtmlNode(node))
|
|
67
|
+
let customInputs = $derived(resolveNodeOutletCustomInputs(node, context) || {})
|
|
68
|
+
let codeMode = $derived(resolveNodeOutletCodeMode(node, context))
|
|
69
|
+
let htmlTag = $derived(resolveHtmlTag(node))
|
|
70
|
+
let shouldEscapeHtmlTag = $derived(resolveShouldEscapeHtmlTag())
|
|
71
|
+
let htmlRenderNode = $derived(coerceBuiltinHtmlNode(node, resolvedType))
|
|
72
|
+
let codeBlockInstanceKey = $derived(`${String(indexKey ?? 'code-block')}:${String((node as any)?.language ?? '')}:${(node as any)?.diff ? 'diff' : 'code'}`)
|
|
73
|
+
let escapedTextNode = $derived({
|
|
68
74
|
type: 'text',
|
|
69
75
|
content: String((node as any)?.content ?? (node as any)?.raw ?? ''),
|
|
70
76
|
raw: String((node as any)?.content ?? (node as any)?.raw ?? ''),
|
|
71
|
-
} as SvelteRenderableNode
|
|
77
|
+
} as SvelteRenderableNode)
|
|
72
78
|
|
|
73
79
|
function resolveShouldEscapeHtmlTag() {
|
|
74
80
|
if (resolvedType !== 'html_block' && resolvedType !== 'html_inline')
|
|
@@ -88,8 +94,7 @@
|
|
|
88
94
|
</script>
|
|
89
95
|
|
|
90
96
|
{#if CustomComponent}
|
|
91
|
-
<
|
|
92
|
-
this={CustomComponent}
|
|
97
|
+
<CustomComponent
|
|
93
98
|
node={customNode}
|
|
94
99
|
context={context}
|
|
95
100
|
ctx={context}
|
|
@@ -1,24 +1,9 @@
|
|
|
1
1
|
import type { SvelteRenderableNode, SvelteRenderContext } from './shared/node-helpers';
|
|
2
|
-
|
|
3
|
-
new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
|
|
4
|
-
$$bindings?: Bindings;
|
|
5
|
-
} & Exports;
|
|
6
|
-
(internal: unknown, props: Props & {
|
|
7
|
-
$$events?: Events;
|
|
8
|
-
$$slots?: Slots;
|
|
9
|
-
}): Exports & {
|
|
10
|
-
$set?: any;
|
|
11
|
-
$on?: any;
|
|
12
|
-
};
|
|
13
|
-
z_$$bindings?: Bindings;
|
|
14
|
-
}
|
|
15
|
-
declare const NodeOutlet: $$__sveltets_2_IsomorphicComponent<{
|
|
2
|
+
type $$ComponentProps = {
|
|
16
3
|
node: SvelteRenderableNode;
|
|
17
|
-
context?: SvelteRenderContext
|
|
18
|
-
indexKey?: string | number
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
type NodeOutlet = InstanceType<typeof NodeOutlet>;
|
|
4
|
+
context?: SvelteRenderContext;
|
|
5
|
+
indexKey?: string | number;
|
|
6
|
+
};
|
|
7
|
+
declare const NodeOutlet: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
8
|
+
type NodeOutlet = ReturnType<typeof NodeOutlet>;
|
|
23
9
|
export default NodeOutlet;
|
|
24
|
-
//# sourceMappingURL=NodeOutlet.svelte.d.ts.map
|
|
@@ -5,73 +5,80 @@
|
|
|
5
5
|
SvelteRenderableNode,
|
|
6
6
|
SvelteRenderContext,
|
|
7
7
|
} from './shared/node-helpers'
|
|
8
|
-
import {
|
|
8
|
+
import { onDestroy, onMount, tick } from 'svelte'
|
|
9
9
|
import { getCustomNodeComponents, subscribeCustomComponents } from '../customComponents'
|
|
10
10
|
import { disposeRenderedHtmlEnhancements, enhanceRenderedHtml } from '../enhanceRenderedHtml'
|
|
11
11
|
import NodeOutlet from './NodeOutlet.svelte'
|
|
12
12
|
import { buildRenderContext, resolveParsedNodes } from './shared/node-helpers'
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
14
|
+
type NodeRendererComponentProps = NodeRendererProps & NodeRendererEvents & {
|
|
15
|
+
className?: string
|
|
16
|
+
onClick?: (event: MouseEvent) => void
|
|
17
|
+
onMouseover?: (event: MouseEvent) => void
|
|
18
|
+
onMouseout?: (event: MouseEvent) => void
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
let {
|
|
22
|
+
content = '',
|
|
23
|
+
nodes = null,
|
|
24
|
+
final = undefined,
|
|
25
|
+
parseOptions = undefined,
|
|
26
|
+
customMarkdownIt = undefined,
|
|
27
|
+
debugPerformance = false,
|
|
28
|
+
customHtmlTags = undefined,
|
|
29
|
+
htmlPolicy = 'safe',
|
|
30
|
+
viewportPriority = true,
|
|
31
|
+
codeBlockStream = true,
|
|
32
|
+
codeBlockDarkTheme = undefined,
|
|
33
|
+
codeBlockLightTheme = undefined,
|
|
34
|
+
codeBlockMonacoOptions = undefined,
|
|
35
|
+
renderCodeBlocksAsPre = false,
|
|
36
|
+
codeBlockMinWidth = undefined,
|
|
37
|
+
codeBlockMaxWidth = undefined,
|
|
38
|
+
codeBlockProps = undefined,
|
|
39
|
+
mermaidProps = undefined,
|
|
40
|
+
d2Props = undefined,
|
|
41
|
+
infographicProps = undefined,
|
|
42
|
+
customComponents = undefined,
|
|
43
|
+
showTooltips = true,
|
|
44
|
+
themes = undefined,
|
|
45
|
+
isDark = false,
|
|
46
|
+
customId = undefined,
|
|
47
|
+
indexKey = undefined,
|
|
48
|
+
typewriter = true,
|
|
49
|
+
batchRendering = true,
|
|
50
|
+
initialRenderBatchSize = 40,
|
|
51
|
+
renderBatchSize = 80,
|
|
52
|
+
renderBatchDelay = 16,
|
|
53
|
+
renderBatchBudgetMs = 6,
|
|
54
|
+
renderBatchIdleTimeoutMs = 120,
|
|
55
|
+
deferNodesUntilVisible = true,
|
|
56
|
+
maxLiveNodes = 320,
|
|
57
|
+
liveNodeBuffer = 60,
|
|
58
|
+
allowHtml = true,
|
|
59
|
+
className = '',
|
|
60
|
+
onCopy = undefined,
|
|
61
|
+
onHandleArtifactClick = undefined,
|
|
62
|
+
onClick = undefined,
|
|
63
|
+
onMouseover = undefined,
|
|
64
|
+
onMouseout = undefined,
|
|
65
|
+
}: NodeRendererComponentProps = $props()
|
|
57
66
|
|
|
58
|
-
let rootEl: HTMLDivElement | null = null
|
|
59
|
-
let
|
|
60
|
-
let
|
|
61
|
-
let
|
|
62
|
-
let
|
|
63
|
-
let previousContent: typeof content = undefined
|
|
64
|
-
let previousNodes: typeof nodes = undefined
|
|
67
|
+
let rootEl: HTMLDivElement | null = $state(null)
|
|
68
|
+
let customComponentsRevision = $state(0)
|
|
69
|
+
let streamRenderVersion = $state(0)
|
|
70
|
+
let previousContent = $state<NodeRendererProps['content']>()
|
|
71
|
+
let previousNodes = $state<NodeRendererProps['nodes']>()
|
|
65
72
|
let enhancementToken = 0
|
|
66
73
|
let enhancementHandle: { dispose: () => void } | null = null
|
|
67
|
-
let renderedNodeCount = 0
|
|
74
|
+
let renderedNodeCount = $state(0)
|
|
68
75
|
let renderBatchTimer: ReturnType<typeof setTimeout> | null = null
|
|
69
76
|
let renderBatchFrame: number | null = null
|
|
70
77
|
let renderBatchIdle: number | null = null
|
|
71
78
|
let renderBatchToken = 0
|
|
72
79
|
const textStreamState = new Map<string, string>()
|
|
73
80
|
|
|
74
|
-
|
|
81
|
+
let rendererProps = $derived({
|
|
75
82
|
content,
|
|
76
83
|
nodes,
|
|
77
84
|
final,
|
|
@@ -109,37 +116,38 @@
|
|
|
109
116
|
maxLiveNodes,
|
|
110
117
|
liveNodeBuffer,
|
|
111
118
|
allowHtml,
|
|
112
|
-
} satisfies NodeRendererProps
|
|
119
|
+
} satisfies NodeRendererProps)
|
|
113
120
|
|
|
114
|
-
|
|
121
|
+
$effect.pre(() => {
|
|
115
122
|
if (previousContent !== content || previousNodes !== nodes) {
|
|
116
123
|
streamRenderVersion += 1
|
|
117
124
|
previousContent = content
|
|
118
125
|
previousNodes = nodes
|
|
119
126
|
}
|
|
120
|
-
}
|
|
127
|
+
})
|
|
121
128
|
|
|
122
|
-
|
|
129
|
+
let parsedNodes = $derived.by<SvelteRenderableNode[]>(() => {
|
|
123
130
|
const start = debugPerformance && typeof performance !== 'undefined' ? performance.now() : 0
|
|
124
|
-
|
|
131
|
+
const nextParsedNodes = resolveParsedNodes(rendererProps)
|
|
125
132
|
if (debugPerformance && typeof console !== 'undefined' && typeof performance !== 'undefined') {
|
|
126
133
|
console.info('[markstream-svelte][perf] parse(sync)', {
|
|
127
134
|
ms: Math.round(performance.now() - start),
|
|
128
|
-
nodes:
|
|
135
|
+
nodes: nextParsedNodes.length,
|
|
129
136
|
contentLength: content?.length ?? 0,
|
|
130
137
|
})
|
|
131
138
|
}
|
|
132
|
-
|
|
139
|
+
return nextParsedNodes
|
|
140
|
+
})
|
|
133
141
|
|
|
134
|
-
|
|
142
|
+
let renderContext = $derived.by<SvelteRenderContext>(() => {
|
|
135
143
|
void customComponentsRevision
|
|
136
144
|
const scopedCustomComponents = getCustomNodeComponents(customId)
|
|
137
145
|
const mergedCustomComponents = customComponents
|
|
138
146
|
? { ...scopedCustomComponents, ...customComponents }
|
|
139
147
|
: scopedCustomComponents
|
|
140
|
-
|
|
148
|
+
return buildRenderContext(
|
|
141
149
|
{
|
|
142
|
-
...
|
|
150
|
+
...rendererProps,
|
|
143
151
|
customComponents: mergedCustomComponents,
|
|
144
152
|
},
|
|
145
153
|
{
|
|
@@ -149,9 +157,9 @@
|
|
|
149
157
|
textStreamState,
|
|
150
158
|
streamRenderVersion,
|
|
151
159
|
)
|
|
152
|
-
}
|
|
160
|
+
})
|
|
153
161
|
|
|
154
|
-
|
|
162
|
+
$effect(() => {
|
|
155
163
|
void parsedNodes.length
|
|
156
164
|
void batchRendering
|
|
157
165
|
void initialRenderBatchSize
|
|
@@ -162,21 +170,33 @@
|
|
|
162
170
|
void final
|
|
163
171
|
void renderedNodeCount
|
|
164
172
|
syncRenderedNodeWindow()
|
|
165
|
-
}
|
|
166
|
-
|
|
173
|
+
})
|
|
174
|
+
let renderedNodes = $derived(parsedNodes.slice(0, Math.min(renderedNodeCount, parsedNodes.length)))
|
|
175
|
+
|
|
176
|
+
$effect(() => {
|
|
177
|
+
void rootEl
|
|
178
|
+
void final
|
|
179
|
+
void parsedNodes
|
|
180
|
+
void renderedNodes
|
|
181
|
+
void isDark
|
|
182
|
+
void renderCodeBlocksAsPre
|
|
183
|
+
void codeBlockMonacoOptions
|
|
184
|
+
void codeBlockProps
|
|
185
|
+
void mermaidProps
|
|
186
|
+
void d2Props
|
|
187
|
+
void infographicProps
|
|
188
|
+
void showTooltips
|
|
189
|
+
void onCopy
|
|
190
|
+
scheduleEnhancement()
|
|
191
|
+
})
|
|
167
192
|
|
|
168
193
|
onMount(() => {
|
|
169
194
|
const unsubscribe = subscribeCustomComponents(() => {
|
|
170
195
|
customComponentsRevision += 1
|
|
171
196
|
})
|
|
172
|
-
scheduleEnhancement()
|
|
173
197
|
return unsubscribe
|
|
174
198
|
})
|
|
175
199
|
|
|
176
|
-
afterUpdate(() => {
|
|
177
|
-
scheduleEnhancement()
|
|
178
|
-
})
|
|
179
|
-
|
|
180
200
|
onDestroy(() => {
|
|
181
201
|
enhancementToken += 1
|
|
182
202
|
cancelRenderBatch()
|
|
@@ -1,64 +1,10 @@
|
|
|
1
1
|
import type { NodeRendererEvents, NodeRendererProps } from './shared/node-helpers';
|
|
2
|
-
|
|
3
|
-
new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
|
|
4
|
-
$$bindings?: Bindings;
|
|
5
|
-
} & Exports;
|
|
6
|
-
(internal: unknown, props: Props & {
|
|
7
|
-
$$events?: Events;
|
|
8
|
-
$$slots?: Slots;
|
|
9
|
-
}): Exports & {
|
|
10
|
-
$set?: any;
|
|
11
|
-
$on?: any;
|
|
12
|
-
};
|
|
13
|
-
z_$$bindings?: Bindings;
|
|
14
|
-
}
|
|
15
|
-
declare const NodeRenderer: $$__sveltets_2_IsomorphicComponent<{
|
|
16
|
-
content?: NodeRendererProps["content"];
|
|
17
|
-
nodes?: NodeRendererProps["nodes"];
|
|
18
|
-
final?: NodeRendererProps["final"];
|
|
19
|
-
parseOptions?: NodeRendererProps["parseOptions"];
|
|
20
|
-
customMarkdownIt?: NodeRendererProps["customMarkdownIt"];
|
|
21
|
-
debugPerformance?: boolean;
|
|
22
|
-
customHtmlTags?: NodeRendererProps["customHtmlTags"];
|
|
23
|
-
htmlPolicy?: NodeRendererProps["htmlPolicy"];
|
|
24
|
-
viewportPriority?: NodeRendererProps["viewportPriority"];
|
|
25
|
-
codeBlockStream?: boolean;
|
|
26
|
-
codeBlockDarkTheme?: NodeRendererProps["codeBlockDarkTheme"];
|
|
27
|
-
codeBlockLightTheme?: NodeRendererProps["codeBlockLightTheme"];
|
|
28
|
-
codeBlockMonacoOptions?: NodeRendererProps["codeBlockMonacoOptions"];
|
|
29
|
-
renderCodeBlocksAsPre?: boolean;
|
|
30
|
-
codeBlockMinWidth?: NodeRendererProps["codeBlockMinWidth"];
|
|
31
|
-
codeBlockMaxWidth?: NodeRendererProps["codeBlockMaxWidth"];
|
|
32
|
-
codeBlockProps?: NodeRendererProps["codeBlockProps"];
|
|
33
|
-
mermaidProps?: NodeRendererProps["mermaidProps"];
|
|
34
|
-
d2Props?: NodeRendererProps["d2Props"];
|
|
35
|
-
infographicProps?: NodeRendererProps["infographicProps"];
|
|
36
|
-
customComponents?: NodeRendererProps["customComponents"];
|
|
37
|
-
showTooltips?: boolean;
|
|
38
|
-
themes?: NodeRendererProps["themes"];
|
|
39
|
-
isDark?: boolean;
|
|
40
|
-
customId?: NodeRendererProps["customId"];
|
|
41
|
-
indexKey?: NodeRendererProps["indexKey"];
|
|
42
|
-
typewriter?: boolean;
|
|
43
|
-
batchRendering?: boolean;
|
|
44
|
-
initialRenderBatchSize?: number;
|
|
45
|
-
renderBatchSize?: number;
|
|
46
|
-
renderBatchDelay?: number;
|
|
47
|
-
renderBatchBudgetMs?: number;
|
|
48
|
-
renderBatchIdleTimeoutMs?: number;
|
|
49
|
-
deferNodesUntilVisible?: boolean;
|
|
50
|
-
maxLiveNodes?: number;
|
|
51
|
-
liveNodeBuffer?: number;
|
|
52
|
-
allowHtml?: boolean;
|
|
2
|
+
type NodeRendererComponentProps = NodeRendererProps & NodeRendererEvents & {
|
|
53
3
|
className?: string;
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
[evt: string]: CustomEvent<any>;
|
|
61
|
-
}, {}, {}, string>;
|
|
62
|
-
type NodeRenderer = InstanceType<typeof NodeRenderer>;
|
|
4
|
+
onClick?: (event: MouseEvent) => void;
|
|
5
|
+
onMouseover?: (event: MouseEvent) => void;
|
|
6
|
+
onMouseout?: (event: MouseEvent) => void;
|
|
7
|
+
};
|
|
8
|
+
declare const NodeRenderer: import("svelte").Component<NodeRendererComponentProps, {}, "">;
|
|
9
|
+
type NodeRenderer = ReturnType<typeof NodeRenderer>;
|
|
63
10
|
export default NodeRenderer;
|
|
64
|
-
//# sourceMappingURL=NodeRenderer.svelte.d.ts.map
|