svelte-streamdown 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/README.md +58 -0
  2. package/dist/Block.svelte +34 -0
  3. package/dist/Block.svelte.d.ts +6 -0
  4. package/dist/Elements/A.svelte +48 -0
  5. package/dist/Elements/A.svelte.d.ts +4 -0
  6. package/dist/Elements/Alert.svelte +78 -0
  7. package/dist/Elements/Alert.svelte.d.ts +4 -0
  8. package/dist/Elements/Blockquote.svelte +26 -0
  9. package/dist/Elements/Blockquote.svelte.d.ts +4 -0
  10. package/dist/Elements/Code.svelte +123 -0
  11. package/dist/Elements/Code.svelte.d.ts +4 -0
  12. package/dist/Elements/Del.svelte +24 -0
  13. package/dist/Elements/Del.svelte.d.ts +4 -0
  14. package/dist/Elements/Element.svelte +122 -0
  15. package/dist/Elements/Element.svelte.d.ts +12 -0
  16. package/dist/Elements/Em.svelte +23 -0
  17. package/dist/Elements/Em.svelte.d.ts +4 -0
  18. package/dist/Elements/H1.svelte +23 -0
  19. package/dist/Elements/H1.svelte.d.ts +4 -0
  20. package/dist/Elements/H2.svelte +23 -0
  21. package/dist/Elements/H2.svelte.d.ts +4 -0
  22. package/dist/Elements/H3.svelte +23 -0
  23. package/dist/Elements/H3.svelte.d.ts +4 -0
  24. package/dist/Elements/H4.svelte +23 -0
  25. package/dist/Elements/H4.svelte.d.ts +4 -0
  26. package/dist/Elements/H5.svelte +23 -0
  27. package/dist/Elements/H5.svelte.d.ts +4 -0
  28. package/dist/Elements/H6.svelte +23 -0
  29. package/dist/Elements/H6.svelte.d.ts +4 -0
  30. package/dist/Elements/Hr.svelte +20 -0
  31. package/dist/Elements/Hr.svelte.d.ts +4 -0
  32. package/dist/Elements/Image.svelte +49 -0
  33. package/dist/Elements/Image.svelte.d.ts +4 -0
  34. package/dist/Elements/InlineCode.svelte +23 -0
  35. package/dist/Elements/InlineCode.svelte.d.ts +4 -0
  36. package/dist/Elements/Li.svelte +23 -0
  37. package/dist/Elements/Li.svelte.d.ts +4 -0
  38. package/dist/Elements/Math.svelte +73 -0
  39. package/dist/Elements/Math.svelte.d.ts +5 -0
  40. package/dist/Elements/Mermaid.svelte +80 -0
  41. package/dist/Elements/Mermaid.svelte.d.ts +4 -0
  42. package/dist/Elements/Ol.svelte +23 -0
  43. package/dist/Elements/Ol.svelte.d.ts +4 -0
  44. package/dist/Elements/P.svelte +23 -0
  45. package/dist/Elements/P.svelte.d.ts +4 -0
  46. package/dist/Elements/Slot.svelte +19 -0
  47. package/dist/Elements/Slot.svelte.d.ts +9 -0
  48. package/dist/Elements/Strong.svelte +23 -0
  49. package/dist/Elements/Strong.svelte.d.ts +4 -0
  50. package/dist/Elements/Sub.svelte +23 -0
  51. package/dist/Elements/Sub.svelte.d.ts +4 -0
  52. package/dist/Elements/Sup.svelte +23 -0
  53. package/dist/Elements/Sup.svelte.d.ts +4 -0
  54. package/dist/Elements/Table.svelte +25 -0
  55. package/dist/Elements/Table.svelte.d.ts +4 -0
  56. package/dist/Elements/Tbody.svelte +23 -0
  57. package/dist/Elements/Tbody.svelte.d.ts +4 -0
  58. package/dist/Elements/Td.svelte +23 -0
  59. package/dist/Elements/Td.svelte.d.ts +4 -0
  60. package/dist/Elements/Th.svelte +23 -0
  61. package/dist/Elements/Th.svelte.d.ts +4 -0
  62. package/dist/Elements/Thead.svelte +23 -0
  63. package/dist/Elements/Thead.svelte.d.ts +4 -0
  64. package/dist/Elements/Tr.svelte +23 -0
  65. package/dist/Elements/Tr.svelte.d.ts +4 -0
  66. package/dist/Elements/Ul.svelte +23 -0
  67. package/dist/Elements/Ul.svelte.d.ts +4 -0
  68. package/dist/Elements/element.d.ts +8 -0
  69. package/dist/Elements/element.js +1 -0
  70. package/dist/Elements/index.d.ts +34 -0
  71. package/dist/Elements/index.js +34 -0
  72. package/dist/Streamdown.d.ts +83 -0
  73. package/dist/Streamdown.js +1 -0
  74. package/dist/Streamdown.svelte +128 -0
  75. package/dist/Streamdown.svelte.d.ts +18 -0
  76. package/dist/hightlighter.svelte.d.ts +25 -0
  77. package/dist/hightlighter.svelte.js +413 -0
  78. package/dist/index.d.ts +2 -0
  79. package/dist/index.js +2 -0
  80. package/dist/theme.d.ts +247 -0
  81. package/dist/theme.js +138 -0
  82. package/dist/utils/alerts.d.ts +12 -0
  83. package/dist/utils/alerts.js +207 -0
  84. package/dist/utils/bind.d.ts +1 -0
  85. package/dist/utils/bind.js +6 -0
  86. package/dist/utils/copy.svelte.d.ts +7 -0
  87. package/dist/utils/copy.svelte.js +35 -0
  88. package/dist/utils/parse-blocks.d.ts +1 -0
  89. package/dist/utils/parse-blocks.js +40 -0
  90. package/dist/utils/parse-incomplete-markdown.d.ts +1 -0
  91. package/dist/utils/parse-incomplete-markdown.js +442 -0
  92. package/dist/utils/parse.d.ts +3 -0
  93. package/dist/utils/parse.js +144 -0
  94. package/dist/utils/save.d.ts +1 -0
  95. package/dist/utils/save.js +11 -0
  96. package/dist/utils/url.d.ts +2 -0
  97. package/dist/utils/url.js +71 -0
  98. package/package.json +92 -0
@@ -0,0 +1,4 @@
1
+ import type { ElementProps } from './element.js';
2
+ declare const Tbody: import("svelte").Component<ElementProps, {}, "">;
3
+ type Tbody = ReturnType<typeof Tbody>;
4
+ export default Tbody;
@@ -0,0 +1,23 @@
1
+ <script lang="ts">
2
+ import { useStreamdown } from '../Streamdown.svelte';
3
+ import { clsx } from 'clsx';
4
+ import type { ElementProps } from './element.js';
5
+ import Slot from './Slot.svelte';
6
+
7
+ const streamdown = useStreamdown();
8
+
9
+ const { children, node, className, props }: ElementProps = $props();
10
+ </script>
11
+
12
+ <Slot
13
+ props={{
14
+ children,
15
+ node,
16
+ ...props
17
+ }}
18
+ render={streamdown.snippets.td}
19
+ >
20
+ <td {...props} class={clsx(streamdown.theme.td.base, className)}>
21
+ {@render children()}
22
+ </td>
23
+ </Slot>
@@ -0,0 +1,4 @@
1
+ import type { ElementProps } from './element.js';
2
+ declare const Td: import("svelte").Component<ElementProps, {}, "">;
3
+ type Td = ReturnType<typeof Td>;
4
+ export default Td;
@@ -0,0 +1,23 @@
1
+ <script lang="ts">
2
+ import { useStreamdown } from '../Streamdown.svelte';
3
+ import { clsx } from 'clsx';
4
+ import type { ElementProps } from './element.js';
5
+ import Slot from './Slot.svelte';
6
+
7
+ const streamdown = useStreamdown();
8
+
9
+ const { children, node, className, props }: ElementProps = $props();
10
+ </script>
11
+
12
+ <Slot
13
+ props={{
14
+ children,
15
+ node,
16
+ ...props
17
+ }}
18
+ render={streamdown.snippets.th}
19
+ >
20
+ <th {...props} class={clsx(streamdown.theme.th.base, className)}>
21
+ {@render children()}
22
+ </th>
23
+ </Slot>
@@ -0,0 +1,4 @@
1
+ import type { ElementProps } from './element.js';
2
+ declare const Th: import("svelte").Component<ElementProps, {}, "">;
3
+ type Th = ReturnType<typeof Th>;
4
+ export default Th;
@@ -0,0 +1,23 @@
1
+ <script lang="ts">
2
+ import { useStreamdown } from '../Streamdown.svelte';
3
+ import { clsx } from 'clsx';
4
+ import type { ElementProps } from './element.js';
5
+ import Slot from './Slot.svelte';
6
+
7
+ const streamdown = useStreamdown();
8
+
9
+ const { children, node, className, props }: ElementProps = $props();
10
+ </script>
11
+
12
+ <Slot
13
+ props={{
14
+ children,
15
+ node,
16
+ ...props
17
+ }}
18
+ render={streamdown.snippets.thead}
19
+ >
20
+ <thead {...props} class={clsx(streamdown.theme.thead.base, className)}>
21
+ {@render children()}
22
+ </thead>
23
+ </Slot>
@@ -0,0 +1,4 @@
1
+ import type { ElementProps } from './element.js';
2
+ declare const Thead: import("svelte").Component<ElementProps, {}, "">;
3
+ type Thead = ReturnType<typeof Thead>;
4
+ export default Thead;
@@ -0,0 +1,23 @@
1
+ <script lang="ts">
2
+ import { useStreamdown } from '../Streamdown.svelte';
3
+ import { clsx } from 'clsx';
4
+ import type { ElementProps } from './element.js';
5
+ import Slot from './Slot.svelte';
6
+
7
+ const streamdown = useStreamdown();
8
+
9
+ const { children, node, className, props }: ElementProps = $props();
10
+ </script>
11
+
12
+ <Slot
13
+ props={{
14
+ children,
15
+ node,
16
+ ...props
17
+ }}
18
+ render={streamdown.snippets.tr}
19
+ >
20
+ <tr {...props} class={clsx(streamdown.theme.tr.base, className)}>
21
+ {@render children()}
22
+ </tr>
23
+ </Slot>
@@ -0,0 +1,4 @@
1
+ import type { ElementProps } from './element.js';
2
+ declare const Tr: import("svelte").Component<ElementProps, {}, "">;
3
+ type Tr = ReturnType<typeof Tr>;
4
+ export default Tr;
@@ -0,0 +1,23 @@
1
+ <script lang="ts">
2
+ import { useStreamdown } from '../Streamdown.svelte';
3
+ import { clsx } from 'clsx';
4
+ import type { ElementProps } from './element.js';
5
+ import Slot from './Slot.svelte';
6
+
7
+ const streamdown = useStreamdown();
8
+
9
+ const { children, node, className, props }: ElementProps = $props();
10
+ </script>
11
+
12
+ <Slot
13
+ props={{
14
+ children,
15
+ node,
16
+ ...props
17
+ }}
18
+ render={streamdown.snippets.ul}
19
+ >
20
+ <ul {...props} class={clsx(streamdown.theme.ul.base, className)}>
21
+ {@render children()}
22
+ </ul>
23
+ </Slot>
@@ -0,0 +1,4 @@
1
+ import type { ElementProps } from './element.js';
2
+ declare const Ul: import("svelte").Component<ElementProps, {}, "">;
3
+ type Ul = ReturnType<typeof Ul>;
4
+ export default Ul;
@@ -0,0 +1,8 @@
1
+ import type { Snippet } from 'svelte';
2
+ import type { Element as HastElement } from 'hast';
3
+ export type ElementProps<T = {}> = {
4
+ children: Snippet;
5
+ className?: string;
6
+ node: HastElement;
7
+ props: Record<string, any>;
8
+ } & T & Record<string, any>;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,34 @@
1
+ export { default as A } from './A.svelte';
2
+ export { default as Blockquote } from './Blockquote.svelte';
3
+ export { default as Code } from './Code.svelte';
4
+ export { default as CodeBlock } from './Code.svelte';
5
+ export { default as H1 } from './H1.svelte';
6
+ export { default as H2 } from './H2.svelte';
7
+ export { default as H3 } from './H3.svelte';
8
+ export { default as H4 } from './H4.svelte';
9
+ export { default as H5 } from './H5.svelte';
10
+ export { default as H6 } from './H6.svelte';
11
+ export { default as Hr } from './Hr.svelte';
12
+ export { default as Image } from './Image.svelte';
13
+ export { default as Li } from './Li.svelte';
14
+ export { default as Ol } from './Ol.svelte';
15
+ export { default as P } from './P.svelte';
16
+ export { default as Slot } from './Slot.svelte';
17
+ export { default as Strong } from './Strong.svelte';
18
+ export { default as Sub } from './Sub.svelte';
19
+ export { default as Sup } from './Sup.svelte';
20
+ export { default as Table } from './Table.svelte';
21
+ export { default as Tbody } from './Tbody.svelte';
22
+ export { default as Td } from './Td.svelte';
23
+ export { default as Th } from './Th.svelte';
24
+ export { default as Thead } from './Thead.svelte';
25
+ export { default as Tr } from './Tr.svelte';
26
+ export { default as Ul } from './Ul.svelte';
27
+ export { default as InlineCode } from './InlineCode.svelte';
28
+ export { default as Mermaid } from './Mermaid.svelte';
29
+ export { default as Math } from './Math.svelte';
30
+ export { default as Em } from './Em.svelte';
31
+ export { default as Del } from './Del.svelte';
32
+ export { default as Alert } from './Alert.svelte';
33
+ export { default as Element } from './Element.svelte';
34
+ export * from './element.js';
@@ -0,0 +1,34 @@
1
+ export { default as A } from './A.svelte';
2
+ export { default as Blockquote } from './Blockquote.svelte';
3
+ export { default as Code } from './Code.svelte';
4
+ export { default as CodeBlock } from './Code.svelte';
5
+ export { default as H1 } from './H1.svelte';
6
+ export { default as H2 } from './H2.svelte';
7
+ export { default as H3 } from './H3.svelte';
8
+ export { default as H4 } from './H4.svelte';
9
+ export { default as H5 } from './H5.svelte';
10
+ export { default as H6 } from './H6.svelte';
11
+ export { default as Hr } from './Hr.svelte';
12
+ export { default as Image } from './Image.svelte';
13
+ export { default as Li } from './Li.svelte';
14
+ export { default as Ol } from './Ol.svelte';
15
+ export { default as P } from './P.svelte';
16
+ export { default as Slot } from './Slot.svelte';
17
+ export { default as Strong } from './Strong.svelte';
18
+ export { default as Sub } from './Sub.svelte';
19
+ export { default as Sup } from './Sup.svelte';
20
+ export { default as Table } from './Table.svelte';
21
+ export { default as Tbody } from './Tbody.svelte';
22
+ export { default as Td } from './Td.svelte';
23
+ export { default as Th } from './Th.svelte';
24
+ export { default as Thead } from './Thead.svelte';
25
+ export { default as Tr } from './Tr.svelte';
26
+ export { default as Ul } from './Ul.svelte';
27
+ export { default as InlineCode } from './InlineCode.svelte';
28
+ export { default as Mermaid } from './Mermaid.svelte';
29
+ export { default as Math } from './Math.svelte';
30
+ export { default as Em } from './Em.svelte';
31
+ export { default as Del } from './Del.svelte';
32
+ export { default as Alert } from './Alert.svelte';
33
+ export { default as Element } from './Element.svelte';
34
+ export * from './element.js';
@@ -0,0 +1,83 @@
1
+ import type { BundledTheme } from 'shiki';
2
+ import type { Snippet } from 'svelte';
3
+ import type { Element, Parents } from 'hast';
4
+ import type { PluggableList } from 'unified';
5
+ import type { Options as RemarkRehypeOptions } from 'remark-rehype';
6
+ import type { Theme } from './theme.js';
7
+ import type { MermaidConfig } from 'mermaid';
8
+ import type { KatexOptions } from 'katex';
9
+ import type { ElementProps } from './Elements/element.js';
10
+ export type Snippets = {
11
+ a?: Snippet<[ElementProps]>;
12
+ h1?: Snippet<[ElementProps]>;
13
+ h2?: Snippet<[ElementProps]>;
14
+ h3?: Snippet<[ElementProps]>;
15
+ h4?: Snippet<[ElementProps]>;
16
+ h5?: Snippet<[ElementProps]>;
17
+ h6?: Snippet<[ElementProps]>;
18
+ p?: Snippet<[ElementProps]>;
19
+ code?: Snippet<[ElementProps]>;
20
+ inlineCode?: Snippet<[ElementProps]>;
21
+ img?: Snippet<[ElementProps]>;
22
+ ul?: Snippet<[ElementProps]>;
23
+ ol?: Snippet<[ElementProps]>;
24
+ li?: Snippet<[ElementProps]>;
25
+ hr?: Snippet<[ElementProps]>;
26
+ alert?: Snippet<[ElementProps]>;
27
+ strong?: Snippet<[ElementProps]>;
28
+ blockquote?: Snippet<[ElementProps]>;
29
+ table?: Snippet<[ElementProps]>;
30
+ thead?: Snippet<[ElementProps]>;
31
+ tbody?: Snippet<[ElementProps]>;
32
+ tr?: Snippet<[ElementProps]>;
33
+ th?: Snippet<[ElementProps]>;
34
+ td?: Snippet<[ElementProps]>;
35
+ sup?: Snippet<[ElementProps]>;
36
+ sub?: Snippet<[ElementProps]>;
37
+ pre?: Snippet<[ElementProps]>;
38
+ mermaid?: Snippet<[ElementProps]>;
39
+ math?: Snippet<[ElementProps]>;
40
+ inlineMath?: Snippet<[ElementProps]>;
41
+ em?: Snippet<[ElementProps]>;
42
+ ins?: Snippet<[ElementProps]>;
43
+ del?: Snippet<[ElementProps]>;
44
+ small?: Snippet<[ElementProps]>;
45
+ };
46
+ /**
47
+ * Filter elements callback type
48
+ */
49
+ export type AllowElement = (element: Readonly<Element>, index: number, parent: Readonly<Parents> | undefined) => boolean | null | undefined;
50
+ /**
51
+ * URL transform callback type
52
+ */
53
+ export type UrlTransform = (url: string, key: string, node: Readonly<Element>) => string | null | undefined;
54
+ export type StreamdownProps = {
55
+ content: string;
56
+ class?: string;
57
+ parseIncompleteMarkdown?: boolean;
58
+ defaultOrigin?: string;
59
+ allowedLinkPrefixes?: string[];
60
+ allowedImagePrefixes?: string[];
61
+ remarkPlugins?: PluggableList;
62
+ remarkRehypeOptions?: RemarkRehypeOptions;
63
+ rehypePlugins?: PluggableList;
64
+ allowElement?: AllowElement | null;
65
+ allowedElements?: readonly string[] | null;
66
+ disallowedElements?: readonly string[] | null;
67
+ skipHtml?: boolean;
68
+ unwrapDisallowed?: boolean;
69
+ urlTransform?: UrlTransform | null;
70
+ theme?: Partial<Theme>;
71
+ shikiTheme?: BundledTheme;
72
+ mermaidConfig?: MermaidConfig;
73
+ katexConfig?: KatexOptions | ((inline: boolean) => KatexOptions);
74
+ translations?: {
75
+ alert?: {
76
+ note?: string;
77
+ tip?: string;
78
+ warning?: string;
79
+ caution?: string;
80
+ important?: string;
81
+ };
82
+ };
83
+ } & Snippets;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,128 @@
1
+ <script lang="ts" module>
2
+ import { getContext, setContext } from 'svelte';
3
+
4
+ export interface StreamdownContext
5
+ extends Omit<StreamdownProps, keyof Snippets | 'class' | 'theme' | 'shikiTheme'> {
6
+ snippets: Snippets;
7
+ shikiTheme: BundledTheme;
8
+ // make it non optional
9
+ theme: Theme;
10
+ }
11
+ export class StreamdownContext {
12
+ constructor(props: Omit<StreamdownProps, keyof Snippets | 'class'> & { snippets: Snippets }) {
13
+ bind(this, props);
14
+ setContext('streamdown', this);
15
+ }
16
+ }
17
+ export const useStreamdown = () => {
18
+ const context = getContext<StreamdownContext>('streamdown');
19
+ if (!context) {
20
+ throw new Error('Streamdown context not found');
21
+ }
22
+ return context;
23
+ };
24
+ </script>
25
+
26
+ <script lang="ts">
27
+ import Block from './Block.svelte';
28
+ import type { Snippets, StreamdownProps } from './Streamdown.js';
29
+ import { bind } from './utils/bind.js';
30
+ import { parseMarkdownIntoBlocks } from './utils/parse-blocks.js';
31
+ import 'katex/dist/katex.min.css';
32
+ import { mergeTheme, type Theme } from './theme.js';
33
+ import type { BundledTheme } from 'shiki';
34
+
35
+ let {
36
+ content,
37
+ class: className,
38
+ shikiTheme,
39
+ parseIncompleteMarkdown,
40
+ defaultOrigin,
41
+ allowedLinkPrefixes = ['*'],
42
+ allowedImagePrefixes = ['*'],
43
+ allowElement,
44
+ allowedElements,
45
+ disallowedElements,
46
+ skipHtml,
47
+ unwrapDisallowed,
48
+ urlTransform,
49
+ remarkPlugins,
50
+ remarkRehypeOptions,
51
+ rehypePlugins,
52
+ theme,
53
+ mermaidConfig,
54
+ katexConfig,
55
+ translations,
56
+ ...snippets
57
+ }: StreamdownProps = $props();
58
+
59
+ const streamdownContext = new StreamdownContext({
60
+ get content() {
61
+ return content;
62
+ },
63
+ get parseIncompleteMarkdown() {
64
+ return parseIncompleteMarkdown;
65
+ },
66
+ get defaultOrigin() {
67
+ return defaultOrigin;
68
+ },
69
+ get allowedLinkPrefixes() {
70
+ return allowedLinkPrefixes;
71
+ },
72
+ get allowedImagePrefixes() {
73
+ return allowedImagePrefixes;
74
+ },
75
+ get allowElement() {
76
+ return allowElement;
77
+ },
78
+ get allowedElements() {
79
+ return allowedElements;
80
+ },
81
+ get disallowedElements() {
82
+ return disallowedElements;
83
+ },
84
+ get skipHtml() {
85
+ return skipHtml;
86
+ },
87
+ get unwrapDisallowed() {
88
+ return unwrapDisallowed;
89
+ },
90
+ get urlTransform() {
91
+ return urlTransform;
92
+ },
93
+ get remarkPlugins() {
94
+ return remarkPlugins;
95
+ },
96
+ get remarkRehypeOptions() {
97
+ return remarkRehypeOptions;
98
+ },
99
+ get rehypePlugins() {
100
+ return rehypePlugins;
101
+ },
102
+ get shikiTheme() {
103
+ return shikiTheme || 'github-light';
104
+ },
105
+ get snippets() {
106
+ return snippets;
107
+ },
108
+ get theme() {
109
+ return mergeTheme(theme);
110
+ },
111
+ get mermaidConfig() {
112
+ return mermaidConfig;
113
+ },
114
+ get katexConfig() {
115
+ return katexConfig;
116
+ },
117
+ get translations() {
118
+ return translations;
119
+ }
120
+ });
121
+ const id = $props.id();
122
+
123
+ const blocks = $derived(parseMarkdownIntoBlocks(content));
124
+ </script>
125
+
126
+ {#each blocks as block, index (`${id}-block-${index}`)}
127
+ <Block {block} />
128
+ {/each}
@@ -0,0 +1,18 @@
1
+ export interface StreamdownContext extends Omit<StreamdownProps, keyof Snippets | 'class' | 'theme' | 'shikiTheme'> {
2
+ snippets: Snippets;
3
+ shikiTheme: BundledTheme;
4
+ theme: Theme;
5
+ }
6
+ export declare class StreamdownContext {
7
+ constructor(props: Omit<StreamdownProps, keyof Snippets | 'class'> & {
8
+ snippets: Snippets;
9
+ });
10
+ }
11
+ export declare const useStreamdown: () => StreamdownContext;
12
+ import type { Snippets, StreamdownProps } from './Streamdown.js';
13
+ import 'katex/dist/katex.min.css';
14
+ import { type Theme } from './theme.js';
15
+ import type { BundledTheme } from 'shiki';
16
+ declare const Streamdown: import("svelte").Component<StreamdownProps, {}, "">;
17
+ type Streamdown = ReturnType<typeof Streamdown>;
18
+ export default Streamdown;
@@ -0,0 +1,25 @@
1
+ import { type BundledLanguage, type BundledTheme } from 'shiki';
2
+ declare class HighlighterManager {
3
+ initialized: boolean;
4
+ initializedPromise: Promise<void> | null;
5
+ private highlighter;
6
+ private theme;
7
+ private readonly loadedLanguages;
8
+ private initializationPromise;
9
+ private readyStates;
10
+ private getReadyKey;
11
+ /**
12
+ * Prepares the highlighter for the given themes and language.
13
+ * This method must be called and awaited before using highlightCode.
14
+ */
15
+ isReady(theme: BundledTheme, language: BundledLanguage): Promise<void>;
16
+ private ensureHighlightersInitialized;
17
+ /**
18
+ * Synchronously highlights code. Must call isReady() first for the same themes and language.
19
+ * @throws {Error} If isReady() hasn't been called for this combination of themes and language
20
+ */
21
+ highlightCode(code: string, language: BundledLanguage, theme: BundledTheme, preClassName?: string): string;
22
+ }
23
+ export { HighlighterManager };
24
+ export declare const highlighter: HighlighterManager;
25
+ export declare const languageExtensionMap: Record<string, string>;