markstream-svelte 0.0.1-beta.2 → 0.0.1-beta.4

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 (100) hide show
  1. package/dist/components/AdmonitionNode.svelte +9 -3
  2. package/dist/components/AdmonitionNode.svelte.d.ts +4 -18
  3. package/dist/components/BlockquoteNode.svelte +10 -4
  4. package/dist/components/BlockquoteNode.svelte.d.ts +4 -18
  5. package/dist/components/CheckboxNode.svelte +3 -1
  6. package/dist/components/CheckboxNode.svelte.d.ts +4 -18
  7. package/dist/components/CodeBlockNode.svelte +124 -93
  8. package/dist/components/CodeBlockNode.svelte.d.ts +4 -18
  9. package/dist/components/D2BlockNode.svelte +57 -34
  10. package/dist/components/D2BlockNode.svelte.d.ts +4 -18
  11. package/dist/components/DefinitionListNode.svelte +9 -3
  12. package/dist/components/DefinitionListNode.svelte.d.ts +4 -18
  13. package/dist/components/EmojiNode.svelte +8 -2
  14. package/dist/components/EmojiNode.svelte.d.ts +4 -18
  15. package/dist/components/EmphasisNode.svelte +11 -3
  16. package/dist/components/EmphasisNode.svelte.d.ts +6 -20
  17. package/dist/components/FallbackComponent.svelte +9 -3
  18. package/dist/components/FallbackComponent.svelte.d.ts +4 -18
  19. package/dist/components/FootnoteAnchorNode.svelte +7 -3
  20. package/dist/components/FootnoteAnchorNode.svelte.d.ts +4 -18
  21. package/dist/components/FootnoteNode.svelte +11 -7
  22. package/dist/components/FootnoteNode.svelte.d.ts +6 -20
  23. package/dist/components/FootnoteReferenceNode.svelte +8 -4
  24. package/dist/components/FootnoteReferenceNode.svelte.d.ts +4 -18
  25. package/dist/components/HeadingNode.svelte +11 -7
  26. package/dist/components/HeadingNode.svelte.d.ts +6 -20
  27. package/dist/components/HighlightNode.svelte +12 -3
  28. package/dist/components/HighlightNode.svelte.d.ts +6 -20
  29. package/dist/components/HtmlBlockNode.svelte +8 -3
  30. package/dist/components/HtmlBlockNode.svelte.d.ts +5 -19
  31. package/dist/components/HtmlInlineNode.svelte +9 -3
  32. package/dist/components/HtmlInlineNode.svelte.d.ts +5 -19
  33. package/dist/components/HtmlPreviewFrame.svelte +19 -7
  34. package/dist/components/HtmlPreviewFrame.svelte.d.ts +6 -20
  35. package/dist/components/ImageNode.svelte +38 -23
  36. package/dist/components/ImageNode.svelte.d.ts +4 -18
  37. package/dist/components/InfographicBlockNode.svelte +72 -48
  38. package/dist/components/InfographicBlockNode.svelte.d.ts +4 -18
  39. package/dist/components/InlineCodeNode.svelte +8 -2
  40. package/dist/components/InlineCodeNode.svelte.d.ts +4 -18
  41. package/dist/components/InlineWrapNode.svelte +15 -5
  42. package/dist/components/InlineWrapNode.svelte.d.ts +6 -20
  43. package/dist/components/InsertNode.svelte +12 -3
  44. package/dist/components/InsertNode.svelte.d.ts +6 -20
  45. package/dist/components/LinkNode.svelte +15 -9
  46. package/dist/components/LinkNode.svelte.d.ts +7 -21
  47. package/dist/components/ListItemNode.svelte +13 -4
  48. package/dist/components/ListItemNode.svelte.d.ts +6 -20
  49. package/dist/components/ListNode.svelte +12 -6
  50. package/dist/components/ListNode.svelte.d.ts +6 -20
  51. package/dist/components/MarkdownCodeBlockNode.svelte +10 -2
  52. package/dist/components/MarkdownCodeBlockNode.svelte.d.ts +5 -19
  53. package/dist/components/MathBlockNode.svelte +15 -11
  54. package/dist/components/MathBlockNode.svelte.d.ts +4 -18
  55. package/dist/components/MathInlineNode.svelte +16 -12
  56. package/dist/components/MathInlineNode.svelte.d.ts +4 -18
  57. package/dist/components/MermaidBlockNode.svelte +92 -63
  58. package/dist/components/MermaidBlockNode.svelte.d.ts +9 -23
  59. package/dist/components/NodeOutlet.svelte +6 -5
  60. package/dist/components/NodeOutlet.svelte.d.ts +2 -2
  61. package/dist/components/NodeRenderer.svelte +2 -1
  62. package/dist/components/ParagraphNode.svelte +14 -7
  63. package/dist/components/ParagraphNode.svelte.d.ts +6 -20
  64. package/dist/components/PreCodeNode.svelte +15 -7
  65. package/dist/components/PreCodeNode.svelte.d.ts +4 -18
  66. package/dist/components/ReferenceNode.svelte +12 -3
  67. package/dist/components/ReferenceNode.svelte.d.ts +5 -19
  68. package/dist/components/RenderChildren.svelte +6 -5
  69. package/dist/components/RenderChildren.svelte.d.ts +2 -2
  70. package/dist/components/StrikethroughNode.svelte +12 -3
  71. package/dist/components/StrikethroughNode.svelte.d.ts +6 -20
  72. package/dist/components/StrongNode.svelte +11 -3
  73. package/dist/components/StrongNode.svelte.d.ts +6 -20
  74. package/dist/components/SubscriptNode.svelte +12 -3
  75. package/dist/components/SubscriptNode.svelte.d.ts +6 -20
  76. package/dist/components/SuperscriptNode.svelte +12 -3
  77. package/dist/components/SuperscriptNode.svelte.d.ts +6 -20
  78. package/dist/components/TableNode.svelte +12 -3
  79. package/dist/components/TableNode.svelte.d.ts +5 -19
  80. package/dist/components/TextNode.svelte +27 -12
  81. package/dist/components/TextNode.svelte.d.ts +7 -21
  82. package/dist/components/Tooltip.svelte +2 -1
  83. package/dist/components/Tooltip.svelte.d.ts +4 -18
  84. package/dist/components/VmrContainerNode.svelte +12 -3
  85. package/dist/components/VmrContainerNode.svelte.d.ts +5 -19
  86. package/dist/components/shared/node-helpers.d.ts +72 -9
  87. package/dist/components/shared/node-outlet-helpers.d.ts +3 -1
  88. package/dist/customComponents.d.ts +1 -1
  89. package/dist/enhanceRenderedHtml.d.ts +7 -5
  90. package/dist/enhanceRenderedHtml.js +2 -1
  91. package/dist/hydrateCustomTagContent.js +6 -3
  92. package/dist/index.d.ts +1 -1
  93. package/dist/optional/d2.d.ts +13 -2
  94. package/dist/optional/infographic.d.ts +13 -1
  95. package/dist/optional/katex.d.ts +5 -2
  96. package/dist/optional/mermaid.d.ts +23 -2
  97. package/dist/optional/monaco.d.ts +18 -1
  98. package/dist/parseNestedMarkdownToNodes.d.ts +6 -1
  99. package/dist/types/monaco.d.ts +3 -3
  100. package/package.json +2 -2
@@ -1,8 +1,14 @@
1
1
  <script lang="ts">
2
2
  import type { SvelteRenderableNode, SvelteRenderContext } from './shared/node-helpers'
3
3
  import { renderNodeHtml } from './shared/renderNodeHtml'
4
- export let node: SvelteRenderableNode
5
- export let context: SvelteRenderContext | undefined = undefined
6
- $: html = renderNodeHtml(node, context)
4
+
5
+ interface Props {
6
+ node: SvelteRenderableNode;
7
+ context?: SvelteRenderContext | undefined;
8
+ }
9
+
10
+ let { node, context = undefined }: Props = $props();
11
+
12
+ let html = $derived(renderNodeHtml(node, context));
7
13
  </script>
8
14
  {@html html}
@@ -1,22 +1,8 @@
1
1
  import type { SvelteRenderableNode, SvelteRenderContext } from './shared/node-helpers';
2
- interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
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 AdmonitionNode: $$__sveltets_2_IsomorphicComponent<{
2
+ interface Props {
16
3
  node: SvelteRenderableNode;
17
4
  context?: SvelteRenderContext | undefined;
18
- }, {
19
- [evt: string]: CustomEvent<any>;
20
- }, {}, {}, string>;
21
- type AdmonitionNode = InstanceType<typeof AdmonitionNode>;
5
+ }
6
+ declare const AdmonitionNode: import("svelte").Component<Props, {}, "">;
7
+ type AdmonitionNode = ReturnType<typeof AdmonitionNode>;
22
8
  export default AdmonitionNode;
@@ -2,9 +2,15 @@
2
2
  import type { SvelteRenderableNode, SvelteRenderContext } from './shared/node-helpers'
3
3
  import RenderChildren from './RenderChildren.svelte'
4
4
  import { getNodeList, getString } from './shared/node-helpers'
5
- export let node: SvelteRenderableNode
6
- export let context: SvelteRenderContext | undefined = undefined
7
- export let indexKey: string | number | undefined = undefined
8
- $: cite = getString((node as any)?.cite)
5
+
6
+ interface Props {
7
+ node: SvelteRenderableNode;
8
+ context?: SvelteRenderContext | undefined;
9
+ indexKey?: string | number | undefined;
10
+ }
11
+
12
+ let { node, context = undefined, indexKey = undefined }: Props = $props();
13
+
14
+ let cite = $derived(getString((node as any)?.cite));
9
15
  </script>
10
16
  <blockquote class="blockquote blockquote-node" dir="auto" cite={cite || undefined}><RenderChildren nodes={getNodeList((node as any)?.children)} context={context} prefix={String(indexKey ?? 'blockquote') + '-blockquote'} /></blockquote>
@@ -1,23 +1,9 @@
1
1
  import type { SvelteRenderableNode, SvelteRenderContext } from './shared/node-helpers';
2
- interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
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 BlockquoteNode: $$__sveltets_2_IsomorphicComponent<{
2
+ interface Props {
16
3
  node: SvelteRenderableNode;
17
4
  context?: SvelteRenderContext | undefined;
18
5
  indexKey?: string | number | undefined;
19
- }, {
20
- [evt: string]: CustomEvent<any>;
21
- }, {}, {}, string>;
22
- type BlockquoteNode = InstanceType<typeof BlockquoteNode>;
6
+ }
7
+ declare const BlockquoteNode: import("svelte").Component<Props, {}, "">;
8
+ type BlockquoteNode = ReturnType<typeof BlockquoteNode>;
23
9
  export default BlockquoteNode;
@@ -1,5 +1,7 @@
1
1
  <script lang="ts">
2
2
  import type { SvelteRenderableNode } from './shared/node-helpers'
3
- export let node: SvelteRenderableNode
3
+
4
+ type Props = { node: SvelteRenderableNode };
5
+ let { node }: Props = $props()
4
6
  </script>
5
7
  <input class="checkbox-node" type="checkbox" disabled checked={Boolean((node as any)?.checked)} />
@@ -1,21 +1,7 @@
1
1
  import type { SvelteRenderableNode } from './shared/node-helpers';
2
- interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
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 CheckboxNode: $$__sveltets_2_IsomorphicComponent<{
2
+ type Props = {
16
3
  node: SvelteRenderableNode;
17
- }, {
18
- [evt: string]: CustomEvent<any>;
19
- }, {}, {}, string>;
20
- type CheckboxNode = InstanceType<typeof CheckboxNode>;
4
+ };
5
+ declare const CheckboxNode: import("svelte").Component<Props, {}, "">;
6
+ type CheckboxNode = ReturnType<typeof CheckboxNode>;
21
7
  export default CheckboxNode;
@@ -10,27 +10,53 @@
10
10
  import { copyTextToClipboard, resolveCssSize } from './shared/rich-block-helpers'
11
11
  import { getString, sanitizeClassToken } from './shared/node-helpers'
12
12
 
13
- export let node: SvelteRenderableNode
14
- export let context: SvelteRenderContext | undefined = undefined
15
- export let isDark: boolean | undefined = undefined
16
- export let loading: boolean | undefined = undefined
17
- export let stream: boolean | undefined = undefined
18
- export let darkTheme: CodeBlockMonacoTheme | undefined = undefined
19
- export let lightTheme: CodeBlockMonacoTheme | undefined = undefined
20
- export let themes: CodeBlockMonacoTheme[] | undefined = undefined
21
- export let monacoOptions: CodeBlockMonacoOptions | undefined = undefined
22
- export let minWidth: string | number | undefined = undefined
23
- export let maxWidth: string | number | undefined = undefined
24
- export let isShowPreview = true
25
- export let enableFontSizeControl = true
26
- export let showHeader = true
27
- export let showCopyButton = true
28
- export let showExpandButton = true
29
- export let showPreviewButton = true
30
- export let showCollapseButton = true
31
- export let showFontSizeButtons = true
32
- export let htmlPreviewAllowScripts = false
33
- export let htmlPreviewSandbox: string | undefined = undefined
13
+ type Props = {
14
+ node: SvelteRenderableNode
15
+ context?: SvelteRenderContext | undefined
16
+ isDark?: boolean | undefined
17
+ loading?: boolean | undefined
18
+ stream?: boolean | undefined
19
+ darkTheme?: CodeBlockMonacoTheme | undefined
20
+ lightTheme?: CodeBlockMonacoTheme | undefined
21
+ themes?: CodeBlockMonacoTheme[] | undefined
22
+ monacoOptions?: CodeBlockMonacoOptions | undefined
23
+ minWidth?: string | number | undefined
24
+ maxWidth?: string | number | undefined
25
+ isShowPreview?: boolean
26
+ enableFontSizeControl?: boolean
27
+ showHeader?: boolean
28
+ showCopyButton?: boolean
29
+ showExpandButton?: boolean
30
+ showPreviewButton?: boolean
31
+ showCollapseButton?: boolean
32
+ showFontSizeButtons?: boolean
33
+ htmlPreviewAllowScripts?: boolean
34
+ htmlPreviewSandbox?: string | undefined
35
+ }
36
+
37
+ let {
38
+ node,
39
+ context = undefined,
40
+ isDark = undefined,
41
+ loading = undefined,
42
+ stream = undefined,
43
+ darkTheme = undefined,
44
+ lightTheme = undefined,
45
+ themes = undefined,
46
+ monacoOptions = undefined,
47
+ minWidth = undefined,
48
+ maxWidth = undefined,
49
+ isShowPreview = true,
50
+ enableFontSizeControl = true,
51
+ showHeader = true,
52
+ showCopyButton = true,
53
+ showExpandButton = true,
54
+ showPreviewButton = true,
55
+ showCollapseButton = true,
56
+ showFontSizeButtons = true,
57
+ htmlPreviewAllowScripts = false,
58
+ htmlPreviewSandbox = undefined
59
+ }: Props = $props()
34
60
 
35
61
  const { t } = useSafeI18n()
36
62
  const defaultDiffHideUnchangedRegions = Object.freeze({
@@ -95,82 +121,86 @@
95
121
  languageRetryTimer = setTimeout(retry, 50)
96
122
  }
97
123
 
98
- let editorHost: HTMLDivElement | null = null
99
- let helpers: any = null
100
- let runtimeMonacoOptions: Record<string, any> | null = null
101
- let ensureMonacoPromise: Promise<void> | null = null
102
- let editorReady = false
103
- let useFallback = false
104
- let fallbackLanguage = ''
105
- let editorKind: 'single' | 'diff' | null = null
106
- let createEditorPromise: Promise<void> | null = null
107
- let mounted = false
108
- let collapsed = false
109
- let expanded = false
110
- let copied = false
111
- let previewOpen = false
112
- let codeFontSize = 13
113
- let copyTimer: ReturnType<typeof setTimeout> | null = null
114
- let lifecycleId = 0
115
- let heightSyncRaf: number | null = null
116
- let heightSyncDisposables: Array<{ dispose?: () => void } | (() => void)> = []
117
- let lastLayoutWidth: number | null = null
118
- let lastLayoutHeight: number | null = null
119
- let lastThemeRequest = ''
120
- let languageRetryTimer: ReturnType<typeof setTimeout> | null = null
121
- let loadingSettledRefreshPromise: Promise<void> | null = null
122
- let loadingSettledRefreshTimer: ReturnType<typeof setTimeout> | null = null
123
- let lastSettledRefreshSignature = ''
124
- let tokenizeTimer: ReturnType<typeof setTimeout> | null = null
125
- let tokenizeRaf: number | null = null
126
- let tokenizeShouldRefreshModelValue = false
127
-
128
- $: rawLanguage = getString((node as any)?.language).trim()
129
- $: canonicalLanguage = normalizeLanguageIdentifier(rawLanguage)
130
- $: monacoLanguage = resolveMonacoLanguageId(canonicalLanguage || rawLanguage || 'plaintext')
131
- $: code = getResolvedCode(node)
132
- $: diff = Boolean((node as any)?.diff)
133
- $: originalCode = getString((node as any)?.originalCode)
134
- $: updatedCode = getString((node as any)?.updatedCode)
135
- $: nodeLoading = (node as any)?.loading === true
136
- $: resolvedLoading = loading ?? nodeLoading
137
- $: resolvedStream = stream ?? context?.codeBlockStream ?? true
138
- $: resolvedIsDark = isDark ?? context?.isDark ?? false
139
- $: resolvedThemes = context?.codeBlockThemes
140
- $: mergedMonacoOptions = { ...(resolvedThemes?.monacoOptions || {}), ...(monacoOptions || {}) }
141
- $: resolvedMonacoOptions = buildResolvedMonacoOptions()
142
- $: requestedTheme = getThemeName(
124
+ let editorHost: HTMLDivElement | null = $state(null)
125
+ let helpers: any = $state(null)
126
+ let runtimeMonacoOptions: Record<string, any> | null = $state(null)
127
+ let ensureMonacoPromise: Promise<void> | null = $state(null)
128
+ let editorReady = $state(false)
129
+ let useFallback = $state(false)
130
+ let fallbackLanguage = $state('')
131
+ let editorKind: 'single' | 'diff' | null = $state(null)
132
+ let createEditorPromise: Promise<void> | null = $state(null)
133
+ let mounted = $state(false)
134
+ let collapsed = $state(false)
135
+ let expanded = $state(false)
136
+ let copied = $state(false)
137
+ let previewOpen = $state(false)
138
+ let codeFontSize = $state(13)
139
+ let copyTimer: ReturnType<typeof setTimeout> | null = $state(null)
140
+ let lifecycleId = $state(0)
141
+ let heightSyncRaf: number | null = $state(null)
142
+ let heightSyncDisposables: Array<{ dispose?: () => void } | (() => void)> = $state([])
143
+ let lastLayoutWidth: number | null = $state(null)
144
+ let lastLayoutHeight: number | null = $state(null)
145
+ let lastThemeRequest = $state('')
146
+ let languageRetryTimer: ReturnType<typeof setTimeout> | null = $state(null)
147
+ let loadingSettledRefreshPromise: Promise<void> | null = $state(null)
148
+ let loadingSettledRefreshTimer: ReturnType<typeof setTimeout> | null = $state(null)
149
+ let lastSettledRefreshSignature = $state('')
150
+ let tokenizeTimer: ReturnType<typeof setTimeout> | null = $state(null)
151
+ let tokenizeRaf: number | null = $state(null)
152
+ let tokenizeShouldRefreshModelValue = $state(false)
153
+
154
+ let rawLanguage = $derived(getString((node as any)?.language).trim())
155
+ let canonicalLanguage = $derived(normalizeLanguageIdentifier(rawLanguage))
156
+ let monacoLanguage = $derived(resolveMonacoLanguageId(canonicalLanguage || rawLanguage || 'plaintext'))
157
+ let code = $derived(getResolvedCode(node))
158
+ let diff = $derived(Boolean((node as any)?.diff))
159
+ let originalCode = $derived(getString((node as any)?.originalCode))
160
+ let updatedCode = $derived(getString((node as any)?.updatedCode))
161
+ let nodeLoading = $derived((node as any)?.loading === true)
162
+ let resolvedLoading = $derived(loading ?? nodeLoading)
163
+ let resolvedStream = $derived(stream ?? context?.codeBlockStream ?? true)
164
+ let resolvedIsDark = $derived(isDark ?? context?.isDark ?? false)
165
+ let resolvedThemes = $derived(context?.codeBlockThemes)
166
+ let mergedMonacoOptions = $derived({ ...(resolvedThemes?.monacoOptions || {}), ...(monacoOptions || {}) })
167
+ let resolvedMonacoOptions = $derived(buildResolvedMonacoOptions())
168
+ let requestedTheme = $derived(getThemeName(
143
169
  resolvedIsDark
144
170
  ? darkTheme ?? resolvedThemes?.darkTheme
145
171
  : lightTheme ?? resolvedThemes?.lightTheme,
146
172
  resolvedIsDark ? 'vitesse-dark' : 'vitesse-light',
147
- )
148
- $: defaultCodeFontSize = Number(mergedMonacoOptions.fontSize) || 13
149
- $: minWidthValue = resolveCssSize(minWidth ?? resolvedThemes?.minWidth)
150
- $: maxWidthValue = resolveCssSize(maxWidth ?? resolvedThemes?.maxWidth)
151
- $: containerStyle = [
173
+ ))
174
+ let defaultCodeFontSize = $derived(Number(mergedMonacoOptions.fontSize) || 13)
175
+ let minWidthValue = $derived(resolveCssSize(minWidth ?? resolvedThemes?.minWidth))
176
+ let maxWidthValue = $derived(resolveCssSize(maxWidth ?? resolvedThemes?.maxWidth))
177
+ let containerStyle = $derived([
152
178
  minWidthValue ? `min-width: ${minWidthValue}` : '',
153
179
  maxWidthValue ? `max-width: ${maxWidthValue}` : '',
154
- ].filter(Boolean).join('; ')
155
- $: languageIcon = getLanguageIcon(canonicalLanguage || rawLanguage || 'plain')
156
- $: displayLanguage = languageMap[canonicalLanguage] || (rawLanguage ? rawLanguage.toUpperCase() : languageMap[''])
157
- $: isPreviewable = isShowPreview !== false && (canonicalLanguage === 'html' || canonicalLanguage === 'svg')
158
- $: previewTitle = canonicalLanguage === 'svg' ? t('artifacts.svgPreviewTitle') : t('artifacts.htmlPreviewTitle')
159
- $: shouldDelayEditor = resolvedStream === false && resolvedLoading
160
- $: documentStreaming = context?.final === false || resolvedLoading
161
- $: shouldDeferStreamingLanguage = resolvedStream !== false && documentStreaming && (isLikelyIncompleteLanguageIdentifier(rawLanguage) || isStreamingLanguagePrefix(rawLanguage))
162
- $: shouldRender = !(resolvedLoading && !code.trim())
163
- $: preLanguageClass = sanitizeClassToken(rawLanguage || monacoLanguage)
164
- $: showPreWhileMonacoLoads = !useFallback && !shouldDelayEditor && !shouldDeferStreamingLanguage && !editorReady
165
- $: showPreFallback = useFallback || shouldDelayEditor || shouldDeferStreamingLanguage || showPreWhileMonacoLoads
166
- $: settledRefreshSignature = diff
180
+ ].filter(Boolean).join('; '))
181
+ let languageIcon = $derived(getLanguageIcon(canonicalLanguage || rawLanguage || 'plain'))
182
+ let displayLanguage = $derived(languageMap[canonicalLanguage] || (rawLanguage ? rawLanguage.toUpperCase() : languageMap['']))
183
+ let isPreviewable = $derived(isShowPreview !== false && (canonicalLanguage === 'html' || canonicalLanguage === 'svg'))
184
+ let previewTitle = $derived(canonicalLanguage === 'svg' ? t('artifacts.svgPreviewTitle') : t('artifacts.htmlPreviewTitle'))
185
+ let shouldDelayEditor = $derived(resolvedStream === false && resolvedLoading)
186
+ let documentStreaming = $derived(context?.final === false || resolvedLoading)
187
+ let shouldDeferStreamingLanguage = $derived(resolvedStream !== false && documentStreaming && (isLikelyIncompleteLanguageIdentifier(rawLanguage) || isStreamingLanguagePrefix(rawLanguage)))
188
+ let shouldRender = $derived(!(resolvedLoading && !code.trim()))
189
+ let preLanguageClass = $derived(sanitizeClassToken(rawLanguage || monacoLanguage))
190
+ let showPreWhileMonacoLoads = $derived(!useFallback && !shouldDelayEditor && !shouldDeferStreamingLanguage && !editorReady)
191
+ let showPreFallback = $derived(useFallback || shouldDelayEditor || shouldDeferStreamingLanguage || showPreWhileMonacoLoads)
192
+ let settledRefreshSignature = $derived(diff
167
193
  ? `${monacoLanguage}\0${originalCode}\0${updatedCode || code}`
168
- : `${monacoLanguage}\0${code}`
169
- $: if (useFallback && fallbackLanguage && rawLanguage !== fallbackLanguage && isLikelyIncompleteLanguageIdentifier(fallbackLanguage)) {
170
- useFallback = false
171
- fallbackLanguage = ''
172
- }
173
- $: {
194
+ : `${monacoLanguage}\0${code}`)
195
+
196
+ $effect(() => {
197
+ if (useFallback && fallbackLanguage && rawLanguage !== fallbackLanguage && isLikelyIncompleteLanguageIdentifier(fallbackLanguage)) {
198
+ useFallback = false
199
+ fallbackLanguage = ''
200
+ }
201
+ })
202
+
203
+ $effect(() => {
174
204
  void mounted
175
205
  void resolvedLoading
176
206
  void settledRefreshSignature
@@ -182,8 +212,9 @@
182
212
  queueLoadingSettledRefresh()
183
213
  }
184
214
  }
185
- }
186
- $: {
215
+ })
216
+
217
+ $effect(() => {
187
218
  void mounted
188
219
  void editorHost
189
220
  void shouldRender
@@ -201,7 +232,7 @@
201
232
  void expanded
202
233
  if (mounted)
203
234
  void syncEditor()
204
- }
235
+ })
205
236
 
206
237
  onMount(() => {
207
238
  mounted = true
@@ -1,19 +1,6 @@
1
1
  import type { CodeBlockMonacoOptions, CodeBlockMonacoTheme } from '../types/monaco';
2
2
  import type { SvelteRenderableNode, SvelteRenderContext } from './shared/node-helpers';
3
- interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
4
- new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
5
- $$bindings?: Bindings;
6
- } & Exports;
7
- (internal: unknown, props: Props & {
8
- $$events?: Events;
9
- $$slots?: Slots;
10
- }): Exports & {
11
- $set?: any;
12
- $on?: any;
13
- };
14
- z_$$bindings?: Bindings;
15
- }
16
- declare const CodeBlockNode: $$__sveltets_2_IsomorphicComponent<{
3
+ type Props = {
17
4
  node: SvelteRenderableNode;
18
5
  context?: SvelteRenderContext | undefined;
19
6
  isDark?: boolean | undefined;
@@ -35,8 +22,7 @@ declare const CodeBlockNode: $$__sveltets_2_IsomorphicComponent<{
35
22
  showFontSizeButtons?: boolean;
36
23
  htmlPreviewAllowScripts?: boolean;
37
24
  htmlPreviewSandbox?: string | undefined;
38
- }, {
39
- [evt: string]: CustomEvent<any>;
40
- }, {}, {}, string>;
41
- type CodeBlockNode = InstanceType<typeof CodeBlockNode>;
25
+ };
26
+ declare const CodeBlockNode: import("svelte").Component<Props, {}, "">;
27
+ type CodeBlockNode = ReturnType<typeof CodeBlockNode>;
42
28
  export default CodeBlockNode;
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">
2
2
  import type { SvelteRenderableNode, SvelteRenderContext } from './shared/node-helpers'
3
- import { afterUpdate, onDestroy, onMount } from 'svelte'
3
+ import { onDestroy, onMount, untrack } from 'svelte'
4
4
  import { useSafeI18n } from '../i18n/useSafeI18n'
5
5
  import { getD2 } from '../optional/d2'
6
6
  import { extractRenderedSvg, toSafeSvgMarkup } from '../sanitizeSvg'
@@ -29,50 +29,73 @@
29
29
  AB5: '#F59E0B',
30
30
  }
31
31
 
32
- export let node: SvelteRenderableNode
33
- export let context: SvelteRenderContext | undefined = undefined
34
- export let maxHeight: string | null | undefined = '500px'
35
- export let loading: boolean | undefined = undefined
36
- export let isDark: boolean | undefined = undefined
37
- export let themeId: number | null | undefined = undefined
38
- export let darkThemeId: number | null | undefined = undefined
39
- export let showHeader = true
40
- export let showModeToggle = true
41
- export let showCopyButton = true
42
- export let showExportButton = true
43
- export let showCollapseButton = true
32
+ type Props = {
33
+ node: SvelteRenderableNode
34
+ context?: SvelteRenderContext | undefined
35
+ maxHeight?: string | null | undefined
36
+ loading?: boolean | undefined
37
+ isDark?: boolean | undefined
38
+ themeId?: number | null | undefined
39
+ darkThemeId?: number | null | undefined
40
+ showHeader?: boolean
41
+ showModeToggle?: boolean
42
+ showCopyButton?: boolean
43
+ showExportButton?: boolean
44
+ showCollapseButton?: boolean
45
+ }
46
+
47
+ let {
48
+ node,
49
+ context = undefined,
50
+ maxHeight = '500px',
51
+ loading = undefined,
52
+ isDark = undefined,
53
+ themeId = undefined,
54
+ darkThemeId = undefined,
55
+ showHeader = true,
56
+ showModeToggle = true,
57
+ showCopyButton = true,
58
+ showExportButton = true,
59
+ showCollapseButton = true
60
+ }: Props = $props()
44
61
 
45
62
  const { t } = useSafeI18n()
46
63
 
47
- let mounted = false
48
- let renderToken = 0
49
- let lastSignature = ''
50
- let activeRenderSignature = ''
51
- let svgMarkup = ''
52
- let renderError = ''
53
- let rendering = false
54
- let rerenderQueued = false
55
- let rerenderForce = false
56
- let copied = false
57
- let collapsed = false
58
- let showSource = false
64
+ let mounted = $state(false)
65
+ let renderToken = $state(0)
66
+ let lastSignature = $state('')
67
+ let activeRenderSignature = $state('')
68
+ let svgMarkup = $state('')
69
+ let renderError = $state('')
70
+ let rendering = $state(false)
71
+ let rerenderQueued = $state(false)
72
+ let rerenderForce = $state(false)
73
+ let copied = $state(false)
74
+ let collapsed = $state(false)
75
+ let showSource = $state(false)
59
76
  let copyTimer: ReturnType<typeof setTimeout> | null = null
60
77
 
61
- $: source = getString((node as any)?.code)
62
- $: resolvedLoading = loading ?? (node as any)?.loading === true
63
- $: resolvedIsDark = isDark ?? context?.isDark ?? false
64
- $: shouldRender = !(resolvedLoading && !source.trim())
65
- $: showSourceFallback = showSource || !svgMarkup
66
- $: renderStyle = maxHeight && maxHeight !== 'none' ? `max-height: ${maxHeight}` : ''
78
+ let source = $derived(getString((node as any)?.code))
79
+ let resolvedLoading = $derived(loading ?? (node as any)?.loading === true)
80
+ let resolvedIsDark = $derived(isDark ?? context?.isDark ?? false)
81
+ let shouldRender = $derived(!(resolvedLoading && !source.trim()))
82
+ let showSourceFallback = $derived(showSource || !svgMarkup)
83
+ let renderStyle = $derived(maxHeight && maxHeight !== 'none' ? `max-height: ${maxHeight}` : '')
67
84
 
68
85
  onMount(() => {
69
86
  mounted = true
70
87
  void renderD2(true)
71
88
  })
72
89
 
73
- afterUpdate(() => {
74
- if (mounted)
75
- void renderD2()
90
+ $effect(() => {
91
+ if (mounted) {
92
+ const _sig = getRenderSignature()
93
+ const _collapsed = collapsed
94
+ const _showSource = showSource
95
+ untrack(() => {
96
+ void renderD2()
97
+ })
98
+ }
76
99
  })
77
100
 
78
101
  onDestroy(() => {
@@ -1,18 +1,5 @@
1
1
  import type { SvelteRenderableNode, SvelteRenderContext } from './shared/node-helpers';
2
- interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
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 D2BlockNode: $$__sveltets_2_IsomorphicComponent<{
2
+ type Props = {
16
3
  node: SvelteRenderableNode;
17
4
  context?: SvelteRenderContext | undefined;
18
5
  maxHeight?: string | null | undefined;
@@ -25,8 +12,7 @@ declare const D2BlockNode: $$__sveltets_2_IsomorphicComponent<{
25
12
  showCopyButton?: boolean;
26
13
  showExportButton?: boolean;
27
14
  showCollapseButton?: boolean;
28
- }, {
29
- [evt: string]: CustomEvent<any>;
30
- }, {}, {}, string>;
31
- type D2BlockNode = InstanceType<typeof D2BlockNode>;
15
+ };
16
+ declare const D2BlockNode: import("svelte").Component<Props, {}, "">;
17
+ type D2BlockNode = ReturnType<typeof D2BlockNode>;
32
18
  export default D2BlockNode;
@@ -1,8 +1,14 @@
1
1
  <script lang="ts">
2
2
  import type { SvelteRenderableNode, SvelteRenderContext } from './shared/node-helpers'
3
3
  import { renderNodeHtml } from './shared/renderNodeHtml'
4
- export let node: SvelteRenderableNode
5
- export let context: SvelteRenderContext | undefined = undefined
6
- $: html = renderNodeHtml(node, context)
4
+
5
+ interface Props {
6
+ node: SvelteRenderableNode;
7
+ context?: SvelteRenderContext | undefined;
8
+ }
9
+
10
+ let { node, context = undefined }: Props = $props();
11
+
12
+ let html = $derived(renderNodeHtml(node, context));
7
13
  </script>
8
14
  {@html html}
@@ -1,22 +1,8 @@
1
1
  import type { SvelteRenderableNode, SvelteRenderContext } from './shared/node-helpers';
2
- interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
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 DefinitionListNode: $$__sveltets_2_IsomorphicComponent<{
2
+ interface Props {
16
3
  node: SvelteRenderableNode;
17
4
  context?: SvelteRenderContext | undefined;
18
- }, {
19
- [evt: string]: CustomEvent<any>;
20
- }, {}, {}, string>;
21
- type DefinitionListNode = InstanceType<typeof DefinitionListNode>;
5
+ }
6
+ declare const DefinitionListNode: import("svelte").Component<Props, {}, "">;
7
+ type DefinitionListNode = ReturnType<typeof DefinitionListNode>;
22
8
  export default DefinitionListNode;
@@ -1,7 +1,13 @@
1
1
  <script lang="ts">
2
2
  import type { SvelteRenderableNode } from './shared/node-helpers'
3
3
  import { getString } from './shared/node-helpers'
4
- export let node: SvelteRenderableNode
5
- $: value = getString((node as any)?.raw || (node as any)?.markup || (node as any)?.content || (node as any)?.name)
4
+
5
+ interface Props {
6
+ node: SvelteRenderableNode;
7
+ }
8
+
9
+ let { node }: Props = $props();
10
+
11
+ let value = $derived(getString((node as any)?.raw || (node as any)?.markup || (node as any)?.content || (node as any)?.name));
6
12
  </script>
7
13
  <span class="emoji-node">{value}</span>