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.
- package/README.md +77 -0
- package/dist/components/AdmonitionNode.svelte +8 -0
- package/dist/components/AdmonitionNode.svelte.d.ts +23 -0
- package/dist/components/AdmonitionNode.svelte.d.ts.map +1 -0
- package/dist/components/BlockquoteNode.svelte +10 -0
- package/dist/components/BlockquoteNode.svelte.d.ts +24 -0
- package/dist/components/BlockquoteNode.svelte.d.ts.map +1 -0
- package/dist/components/CheckboxNode.svelte +5 -0
- package/dist/components/CheckboxNode.svelte.d.ts +22 -0
- package/dist/components/CheckboxNode.svelte.d.ts.map +1 -0
- package/dist/components/CodeBlockNode.svelte +944 -0
- package/dist/components/CodeBlockNode.svelte.d.ts +43 -0
- package/dist/components/CodeBlockNode.svelte.d.ts.map +1 -0
- package/dist/components/D2BlockNode.svelte +272 -0
- package/dist/components/D2BlockNode.svelte.d.ts +33 -0
- package/dist/components/D2BlockNode.svelte.d.ts.map +1 -0
- package/dist/components/DefinitionListNode.svelte +8 -0
- package/dist/components/DefinitionListNode.svelte.d.ts +23 -0
- package/dist/components/DefinitionListNode.svelte.d.ts.map +1 -0
- package/dist/components/EmojiNode.svelte +7 -0
- package/dist/components/EmojiNode.svelte.d.ts +22 -0
- package/dist/components/EmojiNode.svelte.d.ts.map +1 -0
- package/dist/components/EmphasisNode.svelte +8 -0
- package/dist/components/EmphasisNode.svelte.d.ts +24 -0
- package/dist/components/EmphasisNode.svelte.d.ts.map +1 -0
- package/dist/components/FallbackComponent.svelte +8 -0
- package/dist/components/FallbackComponent.svelte.d.ts +23 -0
- package/dist/components/FallbackComponent.svelte.d.ts.map +1 -0
- package/dist/components/FootnoteAnchorNode.svelte +21 -0
- package/dist/components/FootnoteAnchorNode.svelte.d.ts +22 -0
- package/dist/components/FootnoteAnchorNode.svelte.d.ts.map +1 -0
- package/dist/components/FootnoteNode.svelte +19 -0
- package/dist/components/FootnoteNode.svelte.d.ts +24 -0
- package/dist/components/FootnoteNode.svelte.d.ts.map +1 -0
- package/dist/components/FootnoteReferenceNode.svelte +26 -0
- package/dist/components/FootnoteReferenceNode.svelte.d.ts +22 -0
- package/dist/components/FootnoteReferenceNode.svelte.d.ts.map +1 -0
- package/dist/components/HardBreakNode.svelte +1 -0
- package/dist/components/HardBreakNode.svelte.d.ts +27 -0
- package/dist/components/HardBreakNode.svelte.d.ts.map +1 -0
- package/dist/components/HeadingNode.svelte +15 -0
- package/dist/components/HeadingNode.svelte.d.ts +24 -0
- package/dist/components/HeadingNode.svelte.d.ts.map +1 -0
- package/dist/components/HighlightNode.svelte +8 -0
- package/dist/components/HighlightNode.svelte.d.ts +24 -0
- package/dist/components/HighlightNode.svelte.d.ts.map +1 -0
- package/dist/components/HtmlBlockNode.svelte +8 -0
- package/dist/components/HtmlBlockNode.svelte.d.ts +23 -0
- package/dist/components/HtmlBlockNode.svelte.d.ts.map +1 -0
- package/dist/components/HtmlInlineNode.svelte +8 -0
- package/dist/components/HtmlInlineNode.svelte.d.ts +23 -0
- package/dist/components/HtmlInlineNode.svelte.d.ts.map +1 -0
- package/dist/components/HtmlPreviewFrame.svelte +13 -0
- package/dist/components/HtmlPreviewFrame.svelte.d.ts +26 -0
- package/dist/components/HtmlPreviewFrame.svelte.d.ts.map +1 -0
- package/dist/components/ImageNode.svelte +86 -0
- package/dist/components/ImageNode.svelte.d.ts +25 -0
- package/dist/components/ImageNode.svelte.d.ts.map +1 -0
- package/dist/components/InfographicBlockNode.svelte +429 -0
- package/dist/components/InfographicBlockNode.svelte.d.ts +34 -0
- package/dist/components/InfographicBlockNode.svelte.d.ts.map +1 -0
- package/dist/components/InlineCodeNode.svelte +7 -0
- package/dist/components/InlineCodeNode.svelte.d.ts +22 -0
- package/dist/components/InlineCodeNode.svelte.d.ts.map +1 -0
- package/dist/components/InlineWrapNode.svelte +10 -0
- package/dist/components/InlineWrapNode.svelte.d.ts +25 -0
- package/dist/components/InlineWrapNode.svelte.d.ts.map +1 -0
- package/dist/components/InsertNode.svelte +8 -0
- package/dist/components/InsertNode.svelte.d.ts +24 -0
- package/dist/components/InsertNode.svelte.d.ts.map +1 -0
- package/dist/components/LinkNode.svelte +41 -0
- package/dist/components/LinkNode.svelte.d.ts +25 -0
- package/dist/components/LinkNode.svelte.d.ts.map +1 -0
- package/dist/components/ListItemNode.svelte +9 -0
- package/dist/components/ListItemNode.svelte.d.ts +24 -0
- package/dist/components/ListItemNode.svelte.d.ts.map +1 -0
- package/dist/components/ListNode.svelte +16 -0
- package/dist/components/ListNode.svelte.d.ts +24 -0
- package/dist/components/ListNode.svelte.d.ts.map +1 -0
- package/dist/components/MarkdownCodeBlockNode.svelte +7 -0
- package/dist/components/MarkdownCodeBlockNode.svelte.d.ts +23 -0
- package/dist/components/MarkdownCodeBlockNode.svelte.d.ts.map +1 -0
- package/dist/components/MathBlockNode.svelte +96 -0
- package/dist/components/MathBlockNode.svelte.d.ts +22 -0
- package/dist/components/MathBlockNode.svelte.d.ts.map +1 -0
- package/dist/components/MathInlineNode.svelte +103 -0
- package/dist/components/MathInlineNode.svelte.d.ts +22 -0
- package/dist/components/MathInlineNode.svelte.d.ts.map +1 -0
- package/dist/components/MermaidBlockNode.svelte +557 -0
- package/dist/components/MermaidBlockNode.svelte.d.ts +40 -0
- package/dist/components/MermaidBlockNode.svelte.d.ts.map +1 -0
- package/dist/components/NodeOutlet.svelte +192 -0
- package/dist/components/NodeOutlet.svelte.d.ts +24 -0
- package/dist/components/NodeOutlet.svelte.d.ts.map +1 -0
- package/dist/components/NodeRenderer.svelte +349 -0
- package/dist/components/NodeRenderer.svelte.d.ts +64 -0
- package/dist/components/NodeRenderer.svelte.d.ts.map +1 -0
- package/dist/components/ParagraphNode.svelte +21 -0
- package/dist/components/ParagraphNode.svelte.d.ts +24 -0
- package/dist/components/ParagraphNode.svelte.d.ts.map +1 -0
- package/dist/components/PreCodeNode.svelte +13 -0
- package/dist/components/PreCodeNode.svelte.d.ts +22 -0
- package/dist/components/PreCodeNode.svelte.d.ts.map +1 -0
- package/dist/components/ReferenceNode.svelte +8 -0
- package/dist/components/ReferenceNode.svelte.d.ts +23 -0
- package/dist/components/ReferenceNode.svelte.d.ts.map +1 -0
- package/dist/components/RenderChildren.svelte +12 -0
- package/dist/components/RenderChildren.svelte.d.ts +24 -0
- package/dist/components/RenderChildren.svelte.d.ts.map +1 -0
- package/dist/components/StrikethroughNode.svelte +8 -0
- package/dist/components/StrikethroughNode.svelte.d.ts +24 -0
- package/dist/components/StrikethroughNode.svelte.d.ts.map +1 -0
- package/dist/components/StrongNode.svelte +8 -0
- package/dist/components/StrongNode.svelte.d.ts +24 -0
- package/dist/components/StrongNode.svelte.d.ts.map +1 -0
- package/dist/components/SubscriptNode.svelte +8 -0
- package/dist/components/SubscriptNode.svelte.d.ts +24 -0
- package/dist/components/SubscriptNode.svelte.d.ts.map +1 -0
- package/dist/components/SuperscriptNode.svelte +8 -0
- package/dist/components/SuperscriptNode.svelte.d.ts +24 -0
- package/dist/components/SuperscriptNode.svelte.d.ts.map +1 -0
- package/dist/components/TableNode.svelte +8 -0
- package/dist/components/TableNode.svelte.d.ts +23 -0
- package/dist/components/TableNode.svelte.d.ts.map +1 -0
- package/dist/components/TextNode.svelte +37 -0
- package/dist/components/TextNode.svelte.d.ts +25 -0
- package/dist/components/TextNode.svelte.d.ts.map +1 -0
- package/dist/components/ThematicBreakNode.svelte +1 -0
- package/dist/components/ThematicBreakNode.svelte.d.ts +27 -0
- package/dist/components/ThematicBreakNode.svelte.d.ts.map +1 -0
- package/dist/components/Tooltip.svelte +4 -0
- package/dist/components/Tooltip.svelte.d.ts +21 -0
- package/dist/components/Tooltip.svelte.d.ts.map +1 -0
- package/dist/components/VmrContainerNode.svelte +8 -0
- package/dist/components/VmrContainerNode.svelte.d.ts +23 -0
- package/dist/components/VmrContainerNode.svelte.d.ts.map +1 -0
- package/dist/components/shared/diagram-height.d.ts +10 -0
- package/dist/components/shared/diagram-height.d.ts.map +1 -0
- package/dist/components/shared/diagram-height.js +52 -0
- package/dist/components/shared/node-helpers.d.ts +108 -0
- package/dist/components/shared/node-helpers.d.ts.map +1 -0
- package/dist/components/shared/node-helpers.js +220 -0
- package/dist/components/shared/node-outlet-helpers.d.ts +9 -0
- package/dist/components/shared/node-outlet-helpers.d.ts.map +1 -0
- package/dist/components/shared/node-outlet-helpers.js +92 -0
- package/dist/components/shared/render-window.d.ts +19 -0
- package/dist/components/shared/render-window.d.ts.map +1 -0
- package/dist/components/shared/render-window.js +63 -0
- package/dist/components/shared/renderNodeHtml.d.ts +4 -0
- package/dist/components/shared/renderNodeHtml.d.ts.map +1 -0
- package/dist/components/shared/renderNodeHtml.js +19 -0
- package/dist/components/shared/rich-block-helpers.d.ts +7 -0
- package/dist/components/shared/rich-block-helpers.d.ts.map +1 -0
- package/dist/components/shared/rich-block-helpers.js +76 -0
- package/dist/customComponents.d.ts +10 -0
- package/dist/customComponents.d.ts.map +1 -0
- package/dist/customComponents.js +66 -0
- package/dist/enhanceRenderedHtml.d.ts +21 -0
- package/dist/enhanceRenderedHtml.d.ts.map +1 -0
- package/dist/enhanceRenderedHtml.js +768 -0
- package/dist/hydrateCustomTagContent.d.ts +3 -0
- package/dist/hydrateCustomTagContent.d.ts.map +1 -0
- package/dist/hydrateCustomTagContent.js +130 -0
- package/dist/i18n/useSafeI18n.d.ts +5 -0
- package/dist/i18n/useSafeI18n.d.ts.map +1 -0
- package/dist/i18n/useSafeI18n.js +42 -0
- package/dist/index.css +2009 -0
- package/dist/index.d.ts +78 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +66 -0
- package/dist/index.px.css +2009 -0
- package/dist/index.tailwind.css +2009 -0
- package/dist/optional/d2.d.ts +7 -0
- package/dist/optional/d2.d.ts.map +1 -0
- package/dist/optional/d2.js +67 -0
- package/dist/optional/infographic.d.ts +2 -0
- package/dist/optional/infographic.d.ts.map +1 -0
- package/dist/optional/infographic.js +29 -0
- package/dist/optional/katex.d.ts +7 -0
- package/dist/optional/katex.d.ts.map +1 -0
- package/dist/optional/katex.js +93 -0
- package/dist/optional/mermaid.d.ts +7 -0
- package/dist/optional/mermaid.d.ts.map +1 -0
- package/dist/optional/mermaid.js +171 -0
- package/dist/optional/monaco.d.ts +5 -0
- package/dist/optional/monaco.d.ts.map +1 -0
- package/dist/optional/monaco.js +70 -0
- package/dist/parseNestedMarkdownToNodes.d.ts +15 -0
- package/dist/parseNestedMarkdownToNodes.d.ts.map +1 -0
- package/dist/parseNestedMarkdownToNodes.js +66 -0
- package/dist/renderMarkdownHtml.d.ts +31 -0
- package/dist/renderMarkdownHtml.d.ts.map +1 -0
- package/dist/renderMarkdownHtml.js +465 -0
- package/dist/sanitizeHtmlContent.d.ts +3 -0
- package/dist/sanitizeHtmlContent.d.ts.map +1 -0
- package/dist/sanitizeHtmlContent.js +175 -0
- package/dist/sanitizeSvg.d.ts +3 -0
- package/dist/sanitizeSvg.d.ts.map +1 -0
- package/dist/sanitizeSvg.js +76 -0
- package/dist/tailwind-entry.d.ts +2 -0
- package/dist/tailwind-entry.d.ts.map +1 -0
- package/dist/tailwind-entry.js +1 -0
- package/dist/tooltip/singletonTooltip.d.ts +8 -0
- package/dist/tooltip/singletonTooltip.d.ts.map +1 -0
- package/dist/tooltip/singletonTooltip.js +124 -0
- package/dist/types/monaco.d.ts +66 -0
- package/dist/types/monaco.d.ts.map +1 -0
- package/dist/types/monaco.js +1 -0
- package/dist/utils/languageIcon.d.ts +8 -0
- package/dist/utils/languageIcon.d.ts.map +1 -0
- package/dist/utils/languageIcon.js +182 -0
- package/dist/utils/normalizeKaTeXRenderInput.d.ts +2 -0
- package/dist/utils/normalizeKaTeXRenderInput.d.ts.map +1 -0
- package/dist/utils/normalizeKaTeXRenderInput.js +7 -0
- package/dist/workers/katexCdnWorker.d.ts +21 -0
- package/dist/workers/katexCdnWorker.d.ts.map +1 -0
- package/dist/workers/katexCdnWorker.js +193 -0
- package/dist/workers/katexRenderer.worker.d.ts +2 -0
- package/dist/workers/katexRenderer.worker.d.ts.map +1 -0
- package/dist/workers/katexRenderer.worker.js +55 -0
- package/dist/workers/katexWorkerClient.d.ts +36 -0
- package/dist/workers/katexWorkerClient.d.ts.map +1 -0
- package/dist/workers/katexWorkerClient.js +270 -0
- package/dist/workers/mermaidCdnWorker.d.ts +16 -0
- package/dist/workers/mermaidCdnWorker.d.ts.map +1 -0
- package/dist/workers/mermaidCdnWorker.js +235 -0
- package/dist/workers/mermaidParser.worker.d.ts +2 -0
- package/dist/workers/mermaidParser.worker.d.ts.map +1 -0
- package/dist/workers/mermaidParser.worker.js +85 -0
- package/dist/workers/mermaidWorkerClient.d.ts +16 -0
- package/dist/workers/mermaidWorkerClient.d.ts.map +1 -0
- package/dist/workers/mermaidWorkerClient.js +170 -0
- package/package.json +95 -0
|
@@ -0,0 +1,429 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { SvelteRenderableNode, SvelteRenderContext } from './shared/node-helpers'
|
|
3
|
+
import { afterUpdate, onDestroy, onMount, tick } from 'svelte'
|
|
4
|
+
import { useSafeI18n } from '../i18n/useSafeI18n'
|
|
5
|
+
import { getInfographic } from '../optional/infographic'
|
|
6
|
+
import { toSafeSvgMarkup } from '../sanitizeSvg'
|
|
7
|
+
import { hideTooltip, showTooltipForAnchor } from '../tooltip/singletonTooltip'
|
|
8
|
+
import { clampPreviewHeight, estimateInfographicPreviewHeight, parsePositiveNumber } from './shared/diagram-height'
|
|
9
|
+
import { clearElement, copyTextToClipboard, downloadSvgMarkup } from './shared/rich-block-helpers'
|
|
10
|
+
import { getString } from './shared/node-helpers'
|
|
11
|
+
|
|
12
|
+
export let node: SvelteRenderableNode
|
|
13
|
+
export let context: SvelteRenderContext | undefined = undefined
|
|
14
|
+
export let maxHeight: string | null | undefined = '500px'
|
|
15
|
+
export let estimatedPreviewHeightPx: number | undefined = undefined
|
|
16
|
+
export let loading: boolean | undefined = undefined
|
|
17
|
+
export let isDark: boolean | undefined = undefined
|
|
18
|
+
export let showHeader = true
|
|
19
|
+
export let showModeToggle = true
|
|
20
|
+
export let showCopyButton = true
|
|
21
|
+
export let showCollapseButton = true
|
|
22
|
+
export let showExportButton = true
|
|
23
|
+
export let showFullscreenButton = true
|
|
24
|
+
export let showZoomControls = true
|
|
25
|
+
|
|
26
|
+
const { t } = useSafeI18n()
|
|
27
|
+
const infographicIcon = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" aria-hidden="true"><path fill="#5b8ff9" d="M5 4.25A2.25 2.25 0 0 1 7.25 2h2.5A2.25 2.25 0 0 1 12 4.25v2.5A2.25 2.25 0 0 1 9.75 9h-2.5A2.25 2.25 0 0 1 5 6.75z"/><path fill="#61d9a6" d="M12 17.25A2.25 2.25 0 0 1 14.25 15h2.5A2.25 2.25 0 0 1 19 17.25v2.5A2.25 2.25 0 0 1 16.75 22h-2.5A2.25 2.25 0 0 1 12 19.75z"/><path fill="#f6bd16" d="M12 4.25A2.25 2.25 0 0 1 14.25 2h2.5A2.25 2.25 0 0 1 19 4.25v2.5A2.25 2.25 0 0 1 16.75 9h-2.5A2.25 2.25 0 0 1 12 6.75z"/><path fill="#5ad8a6" d="M7.5 10.75h1.75a6.25 6.25 0 0 1 6.25 6.25v.25h-2V17a4.25 4.25 0 0 0-4.25-4.25H7.5z"/><path fill="#7262fd" d="M15.5 11.1l3.75 2.16v4.33l-3.75 2.16l-3.75-2.16v-4.33z"/></svg>'
|
|
28
|
+
|
|
29
|
+
let renderHost: HTMLDivElement | null = null
|
|
30
|
+
let mounted = false
|
|
31
|
+
let renderToken = 0
|
|
32
|
+
let lastCompletedRenderSignature = ''
|
|
33
|
+
let activeRenderSignature = ''
|
|
34
|
+
let lastSuppressedErrorSignature = ''
|
|
35
|
+
let instance: any = null
|
|
36
|
+
let renderError = ''
|
|
37
|
+
let rendering = false
|
|
38
|
+
let rerenderQueued = false
|
|
39
|
+
let rerenderForce = false
|
|
40
|
+
let hasPreview = false
|
|
41
|
+
let copied = false
|
|
42
|
+
let collapsed = false
|
|
43
|
+
let showSource = false
|
|
44
|
+
let modalOpen = false
|
|
45
|
+
let modalMarkup = ''
|
|
46
|
+
let zoom = 1
|
|
47
|
+
let copyTimer: ReturnType<typeof setTimeout> | null = null
|
|
48
|
+
|
|
49
|
+
$: source = getString((node as any)?.code)
|
|
50
|
+
$: nodeLoading = typeof (node as any)?.loading === 'boolean' ? Boolean((node as any)?.loading) : true
|
|
51
|
+
$: resolvedLoading = loading ?? nodeLoading
|
|
52
|
+
$: final = context?.final ?? resolvedLoading === false
|
|
53
|
+
$: progressivePreview = resolvedLoading !== false || final === false
|
|
54
|
+
$: resolvedIsDark = isDark ?? context?.isDark ?? false
|
|
55
|
+
$: maxPreviewHeight = maxHeight === 'none' ? null : parsePositiveNumber(maxHeight)
|
|
56
|
+
$: previewHeight = clampPreviewHeight(
|
|
57
|
+
parsePositiveNumber(estimatedPreviewHeightPx) ?? estimateInfographicPreviewHeight(source),
|
|
58
|
+
320,
|
|
59
|
+
maxPreviewHeight ?? undefined,
|
|
60
|
+
)
|
|
61
|
+
$: previewStyle = [
|
|
62
|
+
`min-height: ${previewHeight}px`,
|
|
63
|
+
maxHeight && maxHeight !== 'none' ? `max-height: ${maxHeight}` : '',
|
|
64
|
+
].filter(Boolean).join('; ')
|
|
65
|
+
$: transformStyle = `transform: scale(${zoom}); transform-origin: center center;`
|
|
66
|
+
$: shouldRender = !(resolvedLoading && !source.trim())
|
|
67
|
+
|
|
68
|
+
onMount(() => {
|
|
69
|
+
mounted = true
|
|
70
|
+
queueInfographicRender(true)
|
|
71
|
+
})
|
|
72
|
+
|
|
73
|
+
afterUpdate(() => {
|
|
74
|
+
if (mounted)
|
|
75
|
+
queueInfographicRender()
|
|
76
|
+
})
|
|
77
|
+
|
|
78
|
+
onDestroy(() => {
|
|
79
|
+
mounted = false
|
|
80
|
+
renderToken += 1
|
|
81
|
+
destroyInstance()
|
|
82
|
+
lastCompletedRenderSignature = ''
|
|
83
|
+
if (copyTimer)
|
|
84
|
+
clearTimeout(copyTimer)
|
|
85
|
+
})
|
|
86
|
+
|
|
87
|
+
function queueInfographicRender(force = false) {
|
|
88
|
+
if (!mounted || !renderHost || collapsed || showSource || !source.trim())
|
|
89
|
+
return
|
|
90
|
+
void tick().then(() => renderInfographic(force))
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
async function renderInfographic(force = false) {
|
|
94
|
+
if (!mounted || !renderHost || collapsed || showSource)
|
|
95
|
+
return
|
|
96
|
+
if (!source.trim()) {
|
|
97
|
+
destroyInstance()
|
|
98
|
+
if (renderHost)
|
|
99
|
+
clearElement(renderHost)
|
|
100
|
+
hasPreview = false
|
|
101
|
+
renderError = ''
|
|
102
|
+
lastCompletedRenderSignature = ''
|
|
103
|
+
lastSuppressedErrorSignature = ''
|
|
104
|
+
return
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
const signature = `${source}\n${resolvedIsDark}\n${final}\n${progressivePreview}`
|
|
108
|
+
if (!force && signature === lastCompletedRenderSignature && hasPreview)
|
|
109
|
+
return
|
|
110
|
+
if (!force && signature === lastSuppressedErrorSignature)
|
|
111
|
+
return
|
|
112
|
+
|
|
113
|
+
if (rendering) {
|
|
114
|
+
if (signature !== activeRenderSignature || force) {
|
|
115
|
+
rerenderQueued = true
|
|
116
|
+
rerenderForce = rerenderForce || force
|
|
117
|
+
}
|
|
118
|
+
return
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
const token = ++renderToken
|
|
122
|
+
activeRenderSignature = signature
|
|
123
|
+
const shouldShowError = !progressivePreview
|
|
124
|
+
rendering = true
|
|
125
|
+
if (shouldShowError)
|
|
126
|
+
renderError = ''
|
|
127
|
+
|
|
128
|
+
try {
|
|
129
|
+
const InfographicClass = await getInfographic()
|
|
130
|
+
if (!mounted || token !== renderToken || collapsed || showSource || !renderHost)
|
|
131
|
+
return
|
|
132
|
+
if (!InfographicClass)
|
|
133
|
+
throw new Error('Infographic renderer is not available.')
|
|
134
|
+
|
|
135
|
+
destroyInstance()
|
|
136
|
+
clearElement(renderHost)
|
|
137
|
+
instance = new InfographicClass({
|
|
138
|
+
container: renderHost,
|
|
139
|
+
width: '100%',
|
|
140
|
+
height: '100%',
|
|
141
|
+
})
|
|
142
|
+
|
|
143
|
+
let renderErrorMessage = ''
|
|
144
|
+
instance.on?.('error', (error: unknown) => {
|
|
145
|
+
const errors = Array.isArray(error) ? error : [error]
|
|
146
|
+
renderErrorMessage = errors
|
|
147
|
+
.map((item) => {
|
|
148
|
+
if (item instanceof Error)
|
|
149
|
+
return item.message
|
|
150
|
+
if (typeof item === 'string')
|
|
151
|
+
return item
|
|
152
|
+
if (item && typeof item === 'object' && 'message' in item)
|
|
153
|
+
return String((item as { message?: unknown }).message ?? '')
|
|
154
|
+
return String(item ?? '')
|
|
155
|
+
})
|
|
156
|
+
.filter(Boolean)
|
|
157
|
+
.join('; ')
|
|
158
|
+
})
|
|
159
|
+
|
|
160
|
+
instance.render(source)
|
|
161
|
+
if (renderErrorMessage)
|
|
162
|
+
throw new Error(renderErrorMessage)
|
|
163
|
+
await tick()
|
|
164
|
+
if (!mounted || token !== renderToken || collapsed || showSource || !renderHost)
|
|
165
|
+
return
|
|
166
|
+
if (!renderHost.querySelector('svg') && !renderHost.childElementCount)
|
|
167
|
+
throw new Error('Infographic render returned empty output.')
|
|
168
|
+
hasPreview = true
|
|
169
|
+
renderError = ''
|
|
170
|
+
lastCompletedRenderSignature = signature
|
|
171
|
+
lastSuppressedErrorSignature = ''
|
|
172
|
+
}
|
|
173
|
+
catch (error) {
|
|
174
|
+
if (token === renderToken) {
|
|
175
|
+
lastCompletedRenderSignature = ''
|
|
176
|
+
if (shouldShowError) {
|
|
177
|
+
lastSuppressedErrorSignature = ''
|
|
178
|
+
destroyInstance()
|
|
179
|
+
clearElement(renderHost)
|
|
180
|
+
hasPreview = false
|
|
181
|
+
renderError = error instanceof Error ? error.message : String(error)
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
lastSuppressedErrorSignature = signature
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
finally {
|
|
189
|
+
if (token === renderToken) {
|
|
190
|
+
rendering = false
|
|
191
|
+
activeRenderSignature = ''
|
|
192
|
+
if (rerenderQueued) {
|
|
193
|
+
const forceNext = rerenderForce
|
|
194
|
+
rerenderQueued = false
|
|
195
|
+
rerenderForce = false
|
|
196
|
+
queueInfographicRender(forceNext)
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
function destroyInstance() {
|
|
203
|
+
try {
|
|
204
|
+
instance?.destroy?.()
|
|
205
|
+
}
|
|
206
|
+
catch {}
|
|
207
|
+
instance = null
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
function resetPreviewRenderState() {
|
|
211
|
+
renderToken += 1
|
|
212
|
+
destroyInstance()
|
|
213
|
+
if (renderHost)
|
|
214
|
+
clearElement(renderHost)
|
|
215
|
+
rendering = false
|
|
216
|
+
rerenderQueued = false
|
|
217
|
+
rerenderForce = false
|
|
218
|
+
hasPreview = false
|
|
219
|
+
renderError = ''
|
|
220
|
+
activeRenderSignature = ''
|
|
221
|
+
lastCompletedRenderSignature = ''
|
|
222
|
+
lastSuppressedErrorSignature = ''
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
async function copy() {
|
|
226
|
+
await copyTextToClipboard(source)
|
|
227
|
+
context?.events?.onCopy?.(source)
|
|
228
|
+
copied = true
|
|
229
|
+
if (copyTimer)
|
|
230
|
+
clearTimeout(copyTimer)
|
|
231
|
+
copyTimer = setTimeout(() => {
|
|
232
|
+
copied = false
|
|
233
|
+
}, 1000)
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
function getRenderedSvg() {
|
|
237
|
+
const svg = renderHost?.querySelector('svg')
|
|
238
|
+
return svg ? toSafeSvgMarkup(svg.outerHTML) : ''
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
function exportSvg() {
|
|
242
|
+
const svg = getRenderedSvg()
|
|
243
|
+
if (svg)
|
|
244
|
+
downloadSvgMarkup(svg, `infographic-${Date.now()}.svg`)
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
function openModal() {
|
|
248
|
+
modalMarkup = renderHost?.innerHTML || ''
|
|
249
|
+
if (modalMarkup)
|
|
250
|
+
modalOpen = true
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
async function switchMode(mode: 'preview' | 'source') {
|
|
254
|
+
const nextShowSource = mode === 'source'
|
|
255
|
+
if (showSource === nextShowSource)
|
|
256
|
+
return
|
|
257
|
+
|
|
258
|
+
showSource = nextShowSource
|
|
259
|
+
resetPreviewRenderState()
|
|
260
|
+
if (!showSource) {
|
|
261
|
+
await tick()
|
|
262
|
+
queueInfographicRender(true)
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
async function toggleCollapsed() {
|
|
267
|
+
collapsed = !collapsed
|
|
268
|
+
resetPreviewRenderState()
|
|
269
|
+
if (!collapsed) {
|
|
270
|
+
await tick()
|
|
271
|
+
queueInfographicRender(true)
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
function zoomIn() {
|
|
276
|
+
zoom = Math.min(3, Math.round((zoom + 0.1) * 10) / 10)
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
function zoomOut() {
|
|
280
|
+
zoom = Math.max(0.5, Math.round((zoom - 0.1) * 10) / 10)
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
function showButtonTooltip(event: MouseEvent | FocusEvent, text: string) {
|
|
284
|
+
const target = event.currentTarget as HTMLElement | null
|
|
285
|
+
if (!target || (target instanceof HTMLButtonElement && target.disabled))
|
|
286
|
+
return
|
|
287
|
+
showTooltipForAnchor(target, text, 'top', false, undefined, resolvedIsDark)
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
function showCopyTooltip(event: MouseEvent | FocusEvent) {
|
|
291
|
+
showButtonTooltip(event, copied ? (t('common.copied') || 'Copied') : (t('common.copy') || 'Copy'))
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
function portal(node: HTMLElement) {
|
|
295
|
+
document.body.appendChild(node)
|
|
296
|
+
return {
|
|
297
|
+
destroy() {
|
|
298
|
+
node.remove()
|
|
299
|
+
},
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
function closeModal() {
|
|
304
|
+
modalOpen = false
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
function onModalOverlayClick(event: MouseEvent) {
|
|
308
|
+
if (event.target === event.currentTarget)
|
|
309
|
+
closeModal()
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
function onModalKeydown(event: KeyboardEvent) {
|
|
313
|
+
if (event.key === 'Escape')
|
|
314
|
+
closeModal()
|
|
315
|
+
}
|
|
316
|
+
</script>
|
|
317
|
+
|
|
318
|
+
{#if shouldRender}
|
|
319
|
+
<div
|
|
320
|
+
class:dark={resolvedIsDark}
|
|
321
|
+
class:is-rendering={rendering || resolvedLoading}
|
|
322
|
+
class="markstream-svelte-enhanced-block markstream-svelte-enhanced-block--infographic"
|
|
323
|
+
data-markstream-infographic="1"
|
|
324
|
+
data-markstream-mode={showSource ? 'source' : hasPreview ? 'preview' : 'fallback'}
|
|
325
|
+
>
|
|
326
|
+
{#if showHeader}
|
|
327
|
+
<div class="markstream-svelte-enhanced-block__header infographic-block-header">
|
|
328
|
+
<div class="markstream-svelte-enhanced-block__title">
|
|
329
|
+
<span class="markstream-svelte-enhanced-block__title-icon icon-slot action-icon" aria-hidden="true">{@html infographicIcon}</span>
|
|
330
|
+
<span class="markstream-svelte-enhanced-block__title-text infographic-label">Infographic</span>
|
|
331
|
+
</div>
|
|
332
|
+
{#if showModeToggle}
|
|
333
|
+
<div class="infographic-mode-toggle">
|
|
334
|
+
<button type="button" class:is-active={!showSource} class="markstream-svelte-enhanced-block__action mode-btn infographic-mode-btn" onblur={() => hideTooltip()} onclick={() => switchMode('preview')} onfocus={(event) => showButtonTooltip(event, t('common.preview') || 'Preview')} onmouseleave={() => hideTooltip()} onmouseenter={(event) => showButtonTooltip(event, t('common.preview') || 'Preview')}>
|
|
335
|
+
<span class="markstream-svelte-enhanced-block__action-content">
|
|
336
|
+
<svg aria-hidden="true" role="img" viewBox="0 0 24 24"><g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"><path d="M2.062 12.348a1 1 0 0 1 0-.696a10.75 10.75 0 0 1 19.876 0a1 1 0 0 1 0 .696a10.75 10.75 0 0 1-19.876 0"/><circle cx="12" cy="12" r="3"/></g></svg>
|
|
337
|
+
<span>{t('common.preview')}</span>
|
|
338
|
+
</span>
|
|
339
|
+
</button>
|
|
340
|
+
<button type="button" class:is-active={showSource} class="markstream-svelte-enhanced-block__action mode-btn infographic-mode-btn" onblur={() => hideTooltip()} onclick={() => switchMode('source')} onfocus={(event) => showButtonTooltip(event, t('common.source') || 'Source')} onmouseleave={() => hideTooltip()} onmouseenter={(event) => showButtonTooltip(event, t('common.source') || 'Source')}>
|
|
341
|
+
<span class="markstream-svelte-enhanced-block__action-content">
|
|
342
|
+
<svg aria-hidden="true" role="img" viewBox="0 0 24 24"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m16 18l6-6l-6-6M8 6l-6 6l6 6"/></svg>
|
|
343
|
+
<span>{t('common.source')}</span>
|
|
344
|
+
</span>
|
|
345
|
+
</button>
|
|
346
|
+
</div>
|
|
347
|
+
{/if}
|
|
348
|
+
<div class="markstream-svelte-enhanced-block__actions infographic-header-actions">
|
|
349
|
+
{#if showCollapseButton}
|
|
350
|
+
<button type="button" class="markstream-svelte-enhanced-block__action markstream-svelte-enhanced-block__action--icon infographic-action-btn" aria-label={collapsed ? (t('common.expand') || 'Expand') : (t('common.collapse') || 'Collapse')} aria-pressed={collapsed} onblur={() => hideTooltip()} onclick={toggleCollapsed} onfocus={(event) => showButtonTooltip(event, collapsed ? (t('common.expand') || 'Expand') : (t('common.collapse') || 'Collapse'))} onmouseleave={() => hideTooltip()} onmouseenter={(event) => showButtonTooltip(event, collapsed ? (t('common.expand') || 'Expand') : (t('common.collapse') || 'Collapse'))}>
|
|
351
|
+
<svg aria-hidden="true" role="img" style:transform={collapsed ? 'rotate(0deg)' : 'rotate(90deg)'} viewBox="0 0 24 24"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m9 18l6-6l-6-6"/></svg>
|
|
352
|
+
</button>
|
|
353
|
+
{/if}
|
|
354
|
+
{#if showCopyButton}
|
|
355
|
+
<button type="button" class="markstream-svelte-enhanced-block__action markstream-svelte-enhanced-block__action--icon infographic-action-btn" aria-label={copied ? (t('common.copied') || 'Copied') : (t('common.copy') || 'Copy')} onblur={() => hideTooltip()} onclick={copy} onfocus={showCopyTooltip} onmouseleave={() => hideTooltip()} onmouseenter={showCopyTooltip}>
|
|
356
|
+
{#if copied}
|
|
357
|
+
<svg aria-hidden="true" role="img" viewBox="0 0 24 24"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M20 6L9 17l-5-5"/></svg>
|
|
358
|
+
{:else}
|
|
359
|
+
<svg aria-hidden="true" role="img" viewBox="0 0 24 24"><g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"/><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"/></g></svg>
|
|
360
|
+
{/if}
|
|
361
|
+
</button>
|
|
362
|
+
{/if}
|
|
363
|
+
{#if showExportButton}
|
|
364
|
+
<button type="button" class="markstream-svelte-enhanced-block__action markstream-svelte-enhanced-block__action--icon infographic-action-btn" aria-label={t('common.export') || 'Export'} disabled={!hasPreview || showSource || collapsed} onblur={() => hideTooltip()} onclick={exportSvg} onfocus={(event) => showButtonTooltip(event, t('common.export') || 'Export')} onmouseleave={() => hideTooltip()} onmouseenter={(event) => showButtonTooltip(event, t('common.export') || 'Export')}>
|
|
365
|
+
<svg aria-hidden="true" role="img" viewBox="0 0 24 24"><g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"><path d="M12 15V3m9 12v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><path d="m7 10l5 5l5-5"/></g></svg>
|
|
366
|
+
</button>
|
|
367
|
+
{/if}
|
|
368
|
+
{#if showFullscreenButton}
|
|
369
|
+
<button type="button" class="markstream-svelte-enhanced-block__action markstream-svelte-enhanced-block__action--icon infographic-action-btn" aria-label={t('common.open') || 'Open'} disabled={!hasPreview || showSource || collapsed} onblur={() => hideTooltip()} onclick={openModal} onfocus={(event) => showButtonTooltip(event, t('common.open') || 'Open')} onmouseleave={() => hideTooltip()} onmouseenter={(event) => showButtonTooltip(event, t('common.open') || 'Open')}>
|
|
370
|
+
<svg aria-hidden="true" role="img" viewBox="0 0 24 24"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 3h6v6m0-6l-7 7M3 21l7-7m-1 7H3v-6"/></svg>
|
|
371
|
+
</button>
|
|
372
|
+
{/if}
|
|
373
|
+
</div>
|
|
374
|
+
</div>
|
|
375
|
+
{/if}
|
|
376
|
+
|
|
377
|
+
{#if !collapsed}
|
|
378
|
+
<div class="markstream-svelte-enhanced-block__body infographic-block-body">
|
|
379
|
+
{#if showSource}
|
|
380
|
+
<div class="infographic-source">
|
|
381
|
+
<pre class="infographic-source-code"><code>{source}</code></pre>
|
|
382
|
+
</div>
|
|
383
|
+
{:else}
|
|
384
|
+
{#if showZoomControls}
|
|
385
|
+
<div class="markstream-svelte-zoom-controls">
|
|
386
|
+
<button type="button" class="markstream-svelte-enhanced-block__action markstream-svelte-enhanced-block__action--icon infographic-action-btn" aria-label={t('common.zoomIn') || 'Zoom in'} onblur={() => hideTooltip()} onclick={zoomIn} onfocus={(event) => showButtonTooltip(event, t('common.zoomIn') || 'Zoom in')} onmouseleave={() => hideTooltip()} onmouseenter={(event) => showButtonTooltip(event, t('common.zoomIn') || 'Zoom in')}>
|
|
387
|
+
<svg aria-hidden="true" role="img" viewBox="0 0 24 24"><g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"><circle cx="11" cy="11" r="8"/><path d="m21 21l-4.35-4.35M11 8v6m-3-3h6"/></g></svg>
|
|
388
|
+
</button>
|
|
389
|
+
<button type="button" class="markstream-svelte-enhanced-block__action markstream-svelte-enhanced-block__action--icon infographic-action-btn" aria-label={t('common.zoomOut') || 'Zoom out'} onblur={() => hideTooltip()} onclick={zoomOut} onfocus={(event) => showButtonTooltip(event, t('common.zoomOut') || 'Zoom out')} onmouseleave={() => hideTooltip()} onmouseenter={(event) => showButtonTooltip(event, t('common.zoomOut') || 'Zoom out')}>
|
|
390
|
+
<svg aria-hidden="true" role="img" viewBox="0 0 24 24"><g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"><circle cx="11" cy="11" r="8"/><path d="m21 21l-4.35-4.35M8 11h6"/></g></svg>
|
|
391
|
+
</button>
|
|
392
|
+
<button type="button" class="markstream-svelte-enhanced-block__action infographic-action-btn infographic-zoom-reset" onblur={() => hideTooltip()} onclick={() => (zoom = 1)} onfocus={(event) => showButtonTooltip(event, t('common.resetZoom') || 'Reset zoom')} onmouseleave={() => hideTooltip()} onmouseenter={(event) => showButtonTooltip(event, t('common.resetZoom') || 'Reset zoom')}>{Math.round(zoom * 100)}%</button>
|
|
393
|
+
</div>
|
|
394
|
+
{/if}
|
|
395
|
+
<div class="infographic-render" style={previewStyle}>
|
|
396
|
+
<div bind:this={renderHost} style={transformStyle}></div>
|
|
397
|
+
{#if renderError}
|
|
398
|
+
<p class="d2-error">{renderError}</p>
|
|
399
|
+
{/if}
|
|
400
|
+
</div>
|
|
401
|
+
{/if}
|
|
402
|
+
</div>
|
|
403
|
+
{/if}
|
|
404
|
+
|
|
405
|
+
{#if modalOpen}
|
|
406
|
+
<div use:portal class:dark={resolvedIsDark} class="markstream-svelte markstream-svelte-modal-root">
|
|
407
|
+
<div class="mermaid-modal-overlay infographic-modal-overlay" role="dialog" aria-modal="true" tabindex="-1" onclick={onModalOverlayClick} onkeydown={onModalKeydown}>
|
|
408
|
+
<div class="mermaid-modal-panel infographic-modal-panel">
|
|
409
|
+
<div class="mermaid-modal-controls">
|
|
410
|
+
<button type="button" class="markstream-svelte-enhanced-block__action markstream-svelte-enhanced-block__action--icon infographic-action-btn" aria-label={t('common.zoomIn') || 'Zoom in'} onclick={zoomIn}>
|
|
411
|
+
<svg aria-hidden="true" role="img" viewBox="0 0 24 24"><g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"><circle cx="11" cy="11" r="8"/><path d="m21 21l-4.35-4.35M11 8v6m-3-3h6"/></g></svg>
|
|
412
|
+
</button>
|
|
413
|
+
<button type="button" class="markstream-svelte-enhanced-block__action markstream-svelte-enhanced-block__action--icon infographic-action-btn" aria-label={t('common.zoomOut') || 'Zoom out'} onclick={zoomOut}>
|
|
414
|
+
<svg aria-hidden="true" role="img" viewBox="0 0 24 24"><g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"><circle cx="11" cy="11" r="8"/><path d="m21 21l-4.35-4.35M8 11h6"/></g></svg>
|
|
415
|
+
</button>
|
|
416
|
+
<button type="button" class="markstream-svelte-enhanced-block__action infographic-action-btn infographic-zoom-reset" aria-label={t('common.resetZoom') || 'Reset zoom'} onclick={() => (zoom = 1)}>{Math.round(zoom * 100)}%</button>
|
|
417
|
+
<button type="button" class="markstream-svelte-enhanced-block__action markstream-svelte-enhanced-block__action--icon infographic-action-btn" aria-label={t('common.close') || 'Close'} onclick={closeModal}>
|
|
418
|
+
<svg aria-hidden="true" role="img" viewBox="0 0 24 24"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M18 6L6 18M6 6l12 12"/></svg>
|
|
419
|
+
</button>
|
|
420
|
+
</div>
|
|
421
|
+
<div class="mermaid-modal-body">
|
|
422
|
+
<div class="mermaid-modal-content infographic-modal-content" style={`transform: scale(${zoom});`}>{@html modalMarkup}</div>
|
|
423
|
+
</div>
|
|
424
|
+
</div>
|
|
425
|
+
</div>
|
|
426
|
+
</div>
|
|
427
|
+
{/if}
|
|
428
|
+
</div>
|
|
429
|
+
{/if}
|
|
@@ -0,0 +1,34 @@
|
|
|
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 InfographicBlockNode: $$__sveltets_2_IsomorphicComponent<{
|
|
16
|
+
node: SvelteRenderableNode;
|
|
17
|
+
context?: SvelteRenderContext | undefined;
|
|
18
|
+
maxHeight?: string | null | undefined;
|
|
19
|
+
estimatedPreviewHeightPx?: number | undefined;
|
|
20
|
+
loading?: boolean | undefined;
|
|
21
|
+
isDark?: boolean | undefined;
|
|
22
|
+
showHeader?: boolean;
|
|
23
|
+
showModeToggle?: boolean;
|
|
24
|
+
showCopyButton?: boolean;
|
|
25
|
+
showCollapseButton?: boolean;
|
|
26
|
+
showExportButton?: boolean;
|
|
27
|
+
showFullscreenButton?: boolean;
|
|
28
|
+
showZoomControls?: boolean;
|
|
29
|
+
}, {
|
|
30
|
+
[evt: string]: CustomEvent<any>;
|
|
31
|
+
}, {}, {}, string>;
|
|
32
|
+
type InfographicBlockNode = InstanceType<typeof InfographicBlockNode>;
|
|
33
|
+
export default InfographicBlockNode;
|
|
34
|
+
//# sourceMappingURL=InfographicBlockNode.svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InfographicBlockNode.svelte.d.ts","sourceRoot":"","sources":["../../src/components/InfographicBlockNode.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAobtF,UAAU,kCAAkC,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,OAAO,GAAG,EAAE,EAAE,QAAQ,GAAG,MAAM;IACpM,KAAK,OAAO,EAAE,OAAO,QAAQ,EAAE,2BAA2B,CAAC,KAAK,CAAC,GAAG,OAAO,QAAQ,EAAE,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,QAAQ,CAAA;KAAE,GAAG,OAAO,CAAC;IACjK,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,KAAK,CAAA;KAAC,GAAG,OAAO,GAAG;QAAE,IAAI,CAAC,EAAE,GAAG,CAAC;QAAC,GAAG,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IAC9G,YAAY,CAAC,EAAE,QAAQ,CAAC;CAC3B;AAKD,QAAA,MAAM,oBAAoB;UAV2Y,oBAAoB;cAAY,mBAAmB,GAAG,SAAS;gBAAc,MAAM,GAAG,IAAI,GAAG,SAAS;+BAA6B,MAAM,GAAG,SAAS;cAAY,OAAO,GAAG,SAAS;aAAW,OAAO,GAAG,SAAS;;;;;;;;;;kBAU9gB,CAAC;AACxF,KAAK,oBAAoB,GAAG,YAAY,CAAC,OAAO,oBAAoB,CAAC,CAAC;AACxE,eAAe,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { SvelteRenderableNode } from './shared/node-helpers'
|
|
3
|
+
import { getString } from './shared/node-helpers'
|
|
4
|
+
export let node: SvelteRenderableNode
|
|
5
|
+
$: code = getString((node as any)?.code ?? (node as any)?.content ?? (node as any)?.raw)
|
|
6
|
+
</script>
|
|
7
|
+
<code class="inline-code-node">{code}</code>
|
|
@@ -0,0 +1,22 @@
|
|
|
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 InlineCodeNode: $$__sveltets_2_IsomorphicComponent<{
|
|
16
|
+
node: SvelteRenderableNode;
|
|
17
|
+
}, {
|
|
18
|
+
[evt: string]: CustomEvent<any>;
|
|
19
|
+
}, {}, {}, string>;
|
|
20
|
+
type InlineCodeNode = InstanceType<typeof InlineCodeNode>;
|
|
21
|
+
export default InlineCodeNode;
|
|
22
|
+
//# sourceMappingURL=InlineCodeNode.svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InlineCodeNode.svelte.d.ts","sourceRoot":"","sources":["../../src/components/InlineCodeNode.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AAajE,UAAU,kCAAkC,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,OAAO,GAAG,EAAE,EAAE,QAAQ,GAAG,MAAM;IACpM,KAAK,OAAO,EAAE,OAAO,QAAQ,EAAE,2BAA2B,CAAC,KAAK,CAAC,GAAG,OAAO,QAAQ,EAAE,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,QAAQ,CAAA;KAAE,GAAG,OAAO,CAAC;IACjK,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,KAAK,CAAA;KAAC,GAAG,OAAO,GAAG;QAAE,IAAI,CAAC,EAAE,GAAG,CAAC;QAAC,GAAG,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IAC9G,YAAY,CAAC,EAAE,QAAQ,CAAC;CAC3B;AAKD,QAAA,MAAM,cAAc;UAVmB,oBAAoB;;;kBAUwC,CAAC;AAClF,KAAK,cAAc,GAAG,YAAY,CAAC,OAAO,cAAc,CAAC,CAAC;AAC5D,eAAe,cAAc,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { SvelteRenderableNode, SvelteRenderContext } from './shared/node-helpers'
|
|
3
|
+
import RenderChildren from './RenderChildren.svelte'
|
|
4
|
+
import { getNodeList } 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
|
+
export let tag = 'span'
|
|
9
|
+
</script>
|
|
10
|
+
<svelte:element this={tag}><RenderChildren nodes={getNodeList((node as any)?.children)} context={context} prefix={String(indexKey ?? tag) + '-' + tag} /></svelte:element>
|
|
@@ -0,0 +1,25 @@
|
|
|
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 InlineWrapNode: $$__sveltets_2_IsomorphicComponent<{
|
|
16
|
+
node: SvelteRenderableNode;
|
|
17
|
+
context?: SvelteRenderContext | undefined;
|
|
18
|
+
indexKey?: string | number | undefined;
|
|
19
|
+
tag?: string;
|
|
20
|
+
}, {
|
|
21
|
+
[evt: string]: CustomEvent<any>;
|
|
22
|
+
}, {}, {}, string>;
|
|
23
|
+
type InlineWrapNode = InstanceType<typeof InlineWrapNode>;
|
|
24
|
+
export default InlineWrapNode;
|
|
25
|
+
//# sourceMappingURL=InlineWrapNode.svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InlineWrapNode.svelte.d.ts","sourceRoot":"","sources":["../../src/components/InlineWrapNode.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAiBtF,UAAU,kCAAkC,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,OAAO,GAAG,EAAE,EAAE,QAAQ,GAAG,MAAM;IACpM,KAAK,OAAO,EAAE,OAAO,QAAQ,EAAE,2BAA2B,CAAC,KAAK,CAAC,GAAG,OAAO,QAAQ,EAAE,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,QAAQ,CAAA;KAAE,GAAG,OAAO,CAAC;IACjK,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,KAAK,CAAA;KAAC,GAAG,OAAO,GAAG;QAAE,IAAI,CAAC,EAAE,GAAG,CAAC;QAAC,GAAG,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IAC9G,YAAY,CAAC,EAAE,QAAQ,CAAC;CAC3B;AAKD,QAAA,MAAM,cAAc;UAVsE,oBAAoB;cAAY,mBAAmB,GAAG,SAAS;eAAa,MAAM,GAAG,MAAM,GAAG,SAAS;;;;kBAU9F,CAAC;AAClF,KAAK,cAAc,GAAG,YAAY,CAAC,OAAO,cAAc,CAAC,CAAC;AAC5D,eAAe,cAAc,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { SvelteRenderableNode, SvelteRenderContext } from './shared/node-helpers'
|
|
3
|
+
import InlineWrapNode from './InlineWrapNode.svelte'
|
|
4
|
+
export let node: SvelteRenderableNode
|
|
5
|
+
export let context: SvelteRenderContext | undefined = undefined
|
|
6
|
+
export let indexKey: string | number | undefined = undefined
|
|
7
|
+
</script>
|
|
8
|
+
<InlineWrapNode {node} {context} {indexKey} tag="ins" />
|
|
@@ -0,0 +1,24 @@
|
|
|
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 InsertNode: $$__sveltets_2_IsomorphicComponent<{
|
|
16
|
+
node: SvelteRenderableNode;
|
|
17
|
+
context?: SvelteRenderContext | undefined;
|
|
18
|
+
indexKey?: string | number | undefined;
|
|
19
|
+
}, {
|
|
20
|
+
[evt: string]: CustomEvent<any>;
|
|
21
|
+
}, {}, {}, string>;
|
|
22
|
+
type InsertNode = InstanceType<typeof InsertNode>;
|
|
23
|
+
export default InsertNode;
|
|
24
|
+
//# sourceMappingURL=InsertNode.svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InsertNode.svelte.d.ts","sourceRoot":"","sources":["../../src/components/InsertNode.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AActF,UAAU,kCAAkC,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,OAAO,GAAG,EAAE,EAAE,QAAQ,GAAG,MAAM;IACpM,KAAK,OAAO,EAAE,OAAO,QAAQ,EAAE,2BAA2B,CAAC,KAAK,CAAC,GAAG,OAAO,QAAQ,EAAE,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,QAAQ,CAAA;KAAE,GAAG,OAAO,CAAC;IACjK,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,KAAK,CAAA;KAAC,GAAG,OAAO,GAAG;QAAE,IAAI,CAAC,EAAE,GAAG,CAAC;QAAC,GAAG,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IAC9G,YAAY,CAAC,EAAE,QAAQ,CAAC;CAC3B;AAKD,QAAA,MAAM,UAAU;UAV+D,oBAAoB;cAAY,mBAAmB,GAAG,SAAS;eAAa,MAAM,GAAG,MAAM,GAAG,SAAS;;;kBAUvF,CAAC;AAC9E,KAAK,UAAU,GAAG,YAAY,CAAC,OAAO,UAAU,CAAC,CAAC;AACpD,eAAe,UAAU,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { SvelteRenderableNode, SvelteRenderContext } from './shared/node-helpers'
|
|
3
|
+
import { hideTooltip, showTooltipForAnchor } from '../tooltip/singletonTooltip'
|
|
4
|
+
import RenderChildren from './RenderChildren.svelte'
|
|
5
|
+
import { getNodeList, getString } from './shared/node-helpers'
|
|
6
|
+
export let node: SvelteRenderableNode
|
|
7
|
+
export let context: SvelteRenderContext | undefined = undefined
|
|
8
|
+
export let indexKey: string | number | undefined = undefined
|
|
9
|
+
export let showTooltip: boolean | undefined = undefined
|
|
10
|
+
$: href = getString((node as any)?.href)
|
|
11
|
+
$: title = getString((node as any)?.title || href)
|
|
12
|
+
$: children = getNodeList((node as any)?.children)
|
|
13
|
+
$: tooltipEnabled = showTooltip ?? context?.showTooltips ?? true
|
|
14
|
+
$: isHashLink = href.startsWith('#') && href.length > 1
|
|
15
|
+
|
|
16
|
+
function showLinkTooltip(event: MouseEvent | FocusEvent) {
|
|
17
|
+
if (!tooltipEnabled || !title)
|
|
18
|
+
return
|
|
19
|
+
showTooltipForAnchor(event.currentTarget as HTMLElement, title, 'top', false, undefined, context?.isDark)
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function scrollToHashTarget(event: MouseEvent) {
|
|
23
|
+
if (!isHashLink || typeof document === 'undefined')
|
|
24
|
+
return
|
|
25
|
+
event.preventDefault()
|
|
26
|
+
const rawId = href.slice(1)
|
|
27
|
+
const decodedId = safeDecodeHashId(rawId)
|
|
28
|
+
const target = document.getElementById(rawId) || (decodedId !== rawId ? document.getElementById(decodedId) : null)
|
|
29
|
+
target?.scrollIntoView({ behavior: 'smooth', block: 'start' })
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function safeDecodeHashId(value: string) {
|
|
33
|
+
try {
|
|
34
|
+
return decodeURIComponent(value)
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
return value
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
</script>
|
|
41
|
+
<a class:link-loading={Boolean((node as any)?.loading)} class="link-node" href={href || undefined} title={tooltipEnabled ? undefined : title} onblur={() => hideTooltip()} onclick={scrollToHashTarget} onfocus={showLinkTooltip} onmouseleave={() => hideTooltip()} onmouseenter={showLinkTooltip} target={isHashLink ? undefined : '_blank'} rel={isHashLink ? undefined : 'noreferrer noopener'}><span class="link-text-wrapper"><span class="link-text">{#if children.length}<RenderChildren nodes={children} context={context} prefix={String(indexKey ?? 'link') + '-link'} />{:else}{getString((node as any)?.text || href)}{/if}</span>{#if (node as any)?.loading}<span class="link-loading-indicator"></span>{/if}</span></a>
|