@dust-tt/sparkle 0.2.636 → 0.2.638-rc-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/dist/cjs/index.js +1 -1
- package/dist/esm/components/markdown/Markdown.d.ts +14 -0
- package/dist/esm/components/markdown/Markdown.d.ts.map +1 -1
- package/dist/esm/components/markdown/Markdown.js +18 -7
- package/dist/esm/components/markdown/Markdown.js.map +1 -1
- package/dist/esm/components/streaming/BlockStreamer.d.ts +8 -0
- package/dist/esm/components/streaming/BlockStreamer.d.ts.map +1 -0
- package/dist/esm/components/streaming/BlockStreamer.js +40 -0
- package/dist/esm/components/streaming/BlockStreamer.js.map +1 -0
- package/dist/esm/components/streaming/StreamingListItem.d.ts +14 -0
- package/dist/esm/components/streaming/StreamingListItem.d.ts.map +1 -0
- package/dist/esm/components/streaming/StreamingListItem.js +93 -0
- package/dist/esm/components/streaming/StreamingListItem.js.map +1 -0
- package/dist/esm/components/streaming/StreamingMarkdown.d.ts +5 -0
- package/dist/esm/components/streaming/StreamingMarkdown.d.ts.map +1 -0
- package/dist/esm/components/streaming/StreamingMarkdown.js +80 -0
- package/dist/esm/components/streaming/StreamingMarkdown.js.map +1 -0
- package/dist/esm/components/streaming/StreamingParagraph.d.ts +14 -0
- package/dist/esm/components/streaming/StreamingParagraph.d.ts.map +1 -0
- package/dist/esm/components/streaming/StreamingParagraph.js +41 -0
- package/dist/esm/components/streaming/StreamingParagraph.js.map +1 -0
- package/dist/esm/components/streaming/index.d.ts +3 -0
- package/dist/esm/components/streaming/index.d.ts.map +1 -0
- package/dist/esm/components/streaming/index.js +2 -0
- package/dist/esm/components/streaming/index.js.map +1 -0
- package/dist/esm/components/streaming/markdownComponents.d.ts +11 -0
- package/dist/esm/components/streaming/markdownComponents.d.ts.map +1 -0
- package/dist/esm/components/streaming/markdownComponents.js +85 -0
- package/dist/esm/components/streaming/markdownComponents.js.map +1 -0
- package/dist/esm/components/streaming/types.d.ts +70 -0
- package/dist/esm/components/streaming/types.d.ts.map +1 -0
- package/dist/esm/components/streaming/types.js +10 -0
- package/dist/esm/components/streaming/types.js.map +1 -0
- package/dist/esm/components/streaming/utils.d.ts +18 -0
- package/dist/esm/components/streaming/utils.d.ts.map +1 -0
- package/dist/esm/components/streaming/utils.js +97 -0
- package/dist/esm/components/streaming/utils.js.map +1 -0
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/stories/StreamingMarkdown.stories.d.ts +12 -0
- package/dist/esm/stories/StreamingMarkdown.stories.d.ts.map +1 -0
- package/dist/esm/stories/StreamingMarkdown.stories.js +620 -0
- package/dist/esm/stories/StreamingMarkdown.stories.js.map +1 -0
- package/dist/esm/styles/global.css +43 -0
- package/dist/esm/styles/tailwind.css +43 -0
- package/dist/sparkle.css +56 -0
- package/package.json +2 -1
- package/src/components/markdown/Markdown.tsx +35 -12
- package/src/components/streaming/BlockStreamer.tsx +61 -0
- package/src/components/streaming/StreamingListItem.tsx +176 -0
- package/src/components/streaming/StreamingMarkdown.tsx +126 -0
- package/src/components/streaming/StreamingParagraph.tsx +104 -0
- package/src/components/streaming/index.ts +2 -0
- package/src/components/streaming/markdownComponents.tsx +270 -0
- package/src/components/streaming/types.ts +72 -0
- package/src/components/streaming/utils.ts +126 -0
- package/src/index.ts +1 -0
- package/src/stories/StreamingMarkdown.stories.tsx +1454 -0
- package/src/styles/global.css +43 -0
- package/src/styles/tailwind.css +43 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StreamingMarkdown.stories.js","sourceRoot":"","sources":["../../../src/stories/StreamingMarkdown.stories.tsx"],"names":[],"mappings":"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"}
|
|
@@ -63,3 +63,46 @@
|
|
|
63
63
|
position: relative;
|
|
64
64
|
top: 4px;
|
|
65
65
|
}
|
|
66
|
+
|
|
67
|
+
/* Streaming markdown keyframes for preview (duplicated to ensure Storybook has them) */
|
|
68
|
+
@keyframes s-stream-fadeIn {
|
|
69
|
+
from {
|
|
70
|
+
opacity: 0;
|
|
71
|
+
}
|
|
72
|
+
to {
|
|
73
|
+
opacity: 1;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
@keyframes s-stream-fadeInAccelerate {
|
|
78
|
+
0% {
|
|
79
|
+
opacity: 0;
|
|
80
|
+
}
|
|
81
|
+
60% {
|
|
82
|
+
opacity: 0.15;
|
|
83
|
+
}
|
|
84
|
+
80% {
|
|
85
|
+
opacity: 0.5;
|
|
86
|
+
}
|
|
87
|
+
100% {
|
|
88
|
+
opacity: 1;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
@keyframes s-stream-fadeInAccelerateFast {
|
|
93
|
+
0% {
|
|
94
|
+
opacity: 0;
|
|
95
|
+
}
|
|
96
|
+
40% {
|
|
97
|
+
opacity: 0.1;
|
|
98
|
+
}
|
|
99
|
+
60% {
|
|
100
|
+
opacity: 0.3;
|
|
101
|
+
}
|
|
102
|
+
80% {
|
|
103
|
+
opacity: 0.7;
|
|
104
|
+
}
|
|
105
|
+
100% {
|
|
106
|
+
opacity: 1;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
@@ -24,3 +24,46 @@
|
|
|
24
24
|
@apply s-bg-purple-100;
|
|
25
25
|
}
|
|
26
26
|
}
|
|
27
|
+
|
|
28
|
+
/* Streaming markdown keyframes (also duplicated in global.css for Storybook) */
|
|
29
|
+
@keyframes s-stream-fadeIn {
|
|
30
|
+
from {
|
|
31
|
+
opacity: 0;
|
|
32
|
+
}
|
|
33
|
+
to {
|
|
34
|
+
opacity: 1;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
@keyframes s-stream-fadeInAccelerate {
|
|
39
|
+
0% {
|
|
40
|
+
opacity: 0;
|
|
41
|
+
}
|
|
42
|
+
60% {
|
|
43
|
+
opacity: 0.15;
|
|
44
|
+
}
|
|
45
|
+
80% {
|
|
46
|
+
opacity: 0.5;
|
|
47
|
+
}
|
|
48
|
+
100% {
|
|
49
|
+
opacity: 1;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
@keyframes s-stream-fadeInAccelerateFast {
|
|
54
|
+
0% {
|
|
55
|
+
opacity: 0;
|
|
56
|
+
}
|
|
57
|
+
40% {
|
|
58
|
+
opacity: 0.1;
|
|
59
|
+
}
|
|
60
|
+
60% {
|
|
61
|
+
opacity: 0.3;
|
|
62
|
+
}
|
|
63
|
+
80% {
|
|
64
|
+
opacity: 0.7;
|
|
65
|
+
}
|
|
66
|
+
100% {
|
|
67
|
+
opacity: 1;
|
|
68
|
+
}
|
|
69
|
+
}
|
package/dist/sparkle.css
CHANGED
|
@@ -1505,6 +1505,10 @@ select {
|
|
|
1505
1505
|
height: 98%;
|
|
1506
1506
|
}
|
|
1507
1507
|
|
|
1508
|
+
.s-h-auto {
|
|
1509
|
+
height: auto;
|
|
1510
|
+
}
|
|
1511
|
+
|
|
1508
1512
|
.s-h-fit {
|
|
1509
1513
|
height: -moz-fit-content;
|
|
1510
1514
|
height: fit-content;
|
|
@@ -5451,6 +5455,58 @@ select {
|
|
|
5451
5455
|
}
|
|
5452
5456
|
}
|
|
5453
5457
|
|
|
5458
|
+
/* Streaming markdown keyframes (also duplicated in global.css for Storybook) */
|
|
5459
|
+
|
|
5460
|
+
@keyframes s-stream-fadeIn {
|
|
5461
|
+
from {
|
|
5462
|
+
opacity: 0;
|
|
5463
|
+
}
|
|
5464
|
+
|
|
5465
|
+
to {
|
|
5466
|
+
opacity: 1;
|
|
5467
|
+
}
|
|
5468
|
+
}
|
|
5469
|
+
|
|
5470
|
+
@keyframes s-stream-fadeInAccelerate {
|
|
5471
|
+
0% {
|
|
5472
|
+
opacity: 0;
|
|
5473
|
+
}
|
|
5474
|
+
|
|
5475
|
+
60% {
|
|
5476
|
+
opacity: 0.15;
|
|
5477
|
+
}
|
|
5478
|
+
|
|
5479
|
+
80% {
|
|
5480
|
+
opacity: 0.5;
|
|
5481
|
+
}
|
|
5482
|
+
|
|
5483
|
+
100% {
|
|
5484
|
+
opacity: 1;
|
|
5485
|
+
}
|
|
5486
|
+
}
|
|
5487
|
+
|
|
5488
|
+
@keyframes s-stream-fadeInAccelerateFast {
|
|
5489
|
+
0% {
|
|
5490
|
+
opacity: 0;
|
|
5491
|
+
}
|
|
5492
|
+
|
|
5493
|
+
40% {
|
|
5494
|
+
opacity: 0.1;
|
|
5495
|
+
}
|
|
5496
|
+
|
|
5497
|
+
60% {
|
|
5498
|
+
opacity: 0.3;
|
|
5499
|
+
}
|
|
5500
|
+
|
|
5501
|
+
80% {
|
|
5502
|
+
opacity: 0.7;
|
|
5503
|
+
}
|
|
5504
|
+
|
|
5505
|
+
100% {
|
|
5506
|
+
opacity: 1;
|
|
5507
|
+
}
|
|
5508
|
+
}
|
|
5509
|
+
|
|
5454
5510
|
.file\:s-border-0::file-selector-button {
|
|
5455
5511
|
border-width: 0px;
|
|
5456
5512
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dust-tt/sparkle",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.638-rc-1",
|
|
4
4
|
"scripts": {
|
|
5
5
|
"build": "rm -rf dist && npm run tailwind && npm run build:esm && npm run build:cjs",
|
|
6
6
|
"tailwind": "tailwindcss -i ./src/styles/tailwind.css -o dist/sparkle.css",
|
|
@@ -128,6 +128,7 @@
|
|
|
128
128
|
"react-resizable-panels": "^2.1.7",
|
|
129
129
|
"react-syntax-highlighter": "^15.6.1",
|
|
130
130
|
"rehype-katex": "^7.0.1",
|
|
131
|
+
"rehype-raw": "^7.0.0",
|
|
131
132
|
"remark-directive": "^2.0.1",
|
|
132
133
|
"remark-gfm": "^3.0.1",
|
|
133
134
|
"remark-math": "^5.1.1",
|
|
@@ -5,6 +5,7 @@ import ReactMarkdown from "react-markdown";
|
|
|
5
5
|
import type { ReactMarkdownProps } from "react-markdown/lib/ast-to-react";
|
|
6
6
|
import type { PluggableList } from "react-markdown/lib/react-markdown";
|
|
7
7
|
import rehypeKatex from "rehype-katex";
|
|
8
|
+
import rehypeRaw from "rehype-raw";
|
|
8
9
|
import remarkDirective from "remark-directive";
|
|
9
10
|
import remarkGfm from "remark-gfm";
|
|
10
11
|
import remarkMath from "remark-math";
|
|
@@ -191,16 +192,11 @@ export function Markdown({
|
|
|
191
192
|
{children}
|
|
192
193
|
</h6>
|
|
193
194
|
),
|
|
194
|
-
strong:
|
|
195
|
-
<strong className="s-font-semibold s-text-foreground dark:s-text-foreground-night">
|
|
196
|
-
{children}
|
|
197
|
-
</strong>
|
|
198
|
-
),
|
|
195
|
+
strong: StrongBlock,
|
|
199
196
|
input: Input,
|
|
200
197
|
blockquote: BlockquoteBlock,
|
|
201
|
-
hr:
|
|
202
|
-
|
|
203
|
-
),
|
|
198
|
+
hr: HrBlock,
|
|
199
|
+
img: ImgBlock,
|
|
204
200
|
code: CodeBlockWithExtendedSupport,
|
|
205
201
|
...additionalMarkdownComponents,
|
|
206
202
|
};
|
|
@@ -217,7 +213,7 @@ export function Markdown({
|
|
|
217
213
|
[additionalMarkdownPlugins]
|
|
218
214
|
);
|
|
219
215
|
|
|
220
|
-
const rehypePlugins = [[rehypeKatex, { output: "mathml" }]] as PluggableList;
|
|
216
|
+
const rehypePlugins = [[rehypeKatex, { output: "mathml" }], rehypeRaw] as PluggableList;
|
|
221
217
|
|
|
222
218
|
try {
|
|
223
219
|
return (
|
|
@@ -252,7 +248,7 @@ export function Markdown({
|
|
|
252
248
|
}
|
|
253
249
|
}
|
|
254
250
|
|
|
255
|
-
function LinkBlock({
|
|
251
|
+
export function LinkBlock({
|
|
256
252
|
href,
|
|
257
253
|
children,
|
|
258
254
|
}: {
|
|
@@ -276,12 +272,39 @@ function LinkBlock({
|
|
|
276
272
|
);
|
|
277
273
|
}
|
|
278
274
|
|
|
279
|
-
|
|
275
|
+
export function StrongBlock({ children }: { children: React.ReactNode }) {
|
|
276
|
+
return (
|
|
277
|
+
<strong className="s-font-semibold s-text-foreground dark:s-text-foreground-night">
|
|
278
|
+
{children}
|
|
279
|
+
</strong>
|
|
280
|
+
);
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
export function HrBlock() {
|
|
284
|
+
return (
|
|
285
|
+
<div className="s-my-6 s-border-b s-border-primary-150 dark:s-border-primary-150-night" />
|
|
286
|
+
);
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
export function ImgBlock(props: React.ImgHTMLAttributes<HTMLImageElement>) {
|
|
290
|
+
return (
|
|
291
|
+
<img
|
|
292
|
+
{...props}
|
|
293
|
+
className="s-h-auto s-max-w-full"
|
|
294
|
+
style={{
|
|
295
|
+
maxWidth: "100%",
|
|
296
|
+
height: "auto",
|
|
297
|
+
}}
|
|
298
|
+
/>
|
|
299
|
+
);
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
export type InputProps = Omit<React.InputHTMLAttributes<HTMLInputElement>, "ref"> &
|
|
280
303
|
ReactMarkdownProps & {
|
|
281
304
|
ref?: React.Ref<HTMLInputElement>;
|
|
282
305
|
};
|
|
283
306
|
|
|
284
|
-
function Input({
|
|
307
|
+
export function Input({
|
|
285
308
|
type,
|
|
286
309
|
checked,
|
|
287
310
|
className,
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
|
|
3
|
+
import type { BlockStreamerProps } from "./types";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* BlockStreamer component handles the token-based streaming animation.
|
|
7
|
+
* It tracks new content as discrete diffs that animate independently.
|
|
8
|
+
*/
|
|
9
|
+
export const BlockStreamer: React.FC<BlockStreamerProps> = ({
|
|
10
|
+
text,
|
|
11
|
+
animate = true,
|
|
12
|
+
animationName,
|
|
13
|
+
animationDuration,
|
|
14
|
+
animationTimingFunction,
|
|
15
|
+
}) => {
|
|
16
|
+
const prevRef = React.useRef<string>("");
|
|
17
|
+
const tokensRef = React.useRef<{ text: string; key: number }[]>([]);
|
|
18
|
+
|
|
19
|
+
// Keep tokens up to date so initial render is visible.
|
|
20
|
+
const prev = prevRef.current;
|
|
21
|
+
if (!prev || text.length < prev.length || !text.startsWith(prev)) {
|
|
22
|
+
tokensRef.current = text ? [{ text, key: 0 }] : [];
|
|
23
|
+
prevRef.current = text;
|
|
24
|
+
} else if (text !== prev) {
|
|
25
|
+
const suffix = text.slice(prev.length);
|
|
26
|
+
if (suffix.length > 0) {
|
|
27
|
+
tokensRef.current.push({
|
|
28
|
+
text: suffix,
|
|
29
|
+
key: tokensRef.current.length,
|
|
30
|
+
});
|
|
31
|
+
prevRef.current = text;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
return (
|
|
36
|
+
<>
|
|
37
|
+
{tokensRef.current.map((t) => (
|
|
38
|
+
<span
|
|
39
|
+
key={t.key}
|
|
40
|
+
style={
|
|
41
|
+
animate
|
|
42
|
+
? {
|
|
43
|
+
whiteSpace: "pre-wrap",
|
|
44
|
+
display: "inline",
|
|
45
|
+
animationName,
|
|
46
|
+
animationDuration,
|
|
47
|
+
animationTimingFunction,
|
|
48
|
+
animationIterationCount: 1,
|
|
49
|
+
}
|
|
50
|
+
: {
|
|
51
|
+
whiteSpace: "pre-wrap",
|
|
52
|
+
display: "inline",
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
>
|
|
56
|
+
{t.text}
|
|
57
|
+
</span>
|
|
58
|
+
))}
|
|
59
|
+
</>
|
|
60
|
+
);
|
|
61
|
+
};
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
|
|
3
|
+
import { LiBlock } from "@sparkle/components/markdown/List";
|
|
4
|
+
import { BlockStreamer } from "@sparkle/components/streaming/BlockStreamer";
|
|
5
|
+
import type { ComponentProps } from "@sparkle/components/streaming/types";
|
|
6
|
+
import {
|
|
7
|
+
getElementProps,
|
|
8
|
+
isCodeElement,
|
|
9
|
+
isListElement,
|
|
10
|
+
isReactElementWithProps,
|
|
11
|
+
isTableElement,
|
|
12
|
+
keyOf,
|
|
13
|
+
} from "@sparkle/components/streaming/utils";
|
|
14
|
+
|
|
15
|
+
interface StreamingListItemProps extends ComponentProps {
|
|
16
|
+
isStreaming: boolean;
|
|
17
|
+
animationName: string;
|
|
18
|
+
animationDuration: string;
|
|
19
|
+
animationTimingFunction: string;
|
|
20
|
+
textColor?: string;
|
|
21
|
+
forcedTextSize?: string;
|
|
22
|
+
sizes: Record<string, string>;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export function StreamingListItem({
|
|
26
|
+
node,
|
|
27
|
+
isStreaming,
|
|
28
|
+
animationName,
|
|
29
|
+
animationDuration,
|
|
30
|
+
animationTimingFunction,
|
|
31
|
+
textColor,
|
|
32
|
+
forcedTextSize,
|
|
33
|
+
sizes,
|
|
34
|
+
...props
|
|
35
|
+
}: StreamingListItemProps) {
|
|
36
|
+
const bk = keyOf(node, "li");
|
|
37
|
+
|
|
38
|
+
// Process list item children to handle text streaming and nested lists.
|
|
39
|
+
const processChildren = (children: React.ReactNode): React.ReactNode => {
|
|
40
|
+
if (!children) {
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// If it's just a string, animate it.
|
|
45
|
+
if (typeof children === "string") {
|
|
46
|
+
return (
|
|
47
|
+
<BlockStreamer
|
|
48
|
+
text={children}
|
|
49
|
+
animate={isStreaming}
|
|
50
|
+
animationName={animationName}
|
|
51
|
+
animationDuration={animationDuration}
|
|
52
|
+
animationTimingFunction={animationTimingFunction}
|
|
53
|
+
/>
|
|
54
|
+
);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// Safety check: if it's a non-React object, don't try to process it.
|
|
58
|
+
if (
|
|
59
|
+
typeof children === "object" &&
|
|
60
|
+
children !== null &&
|
|
61
|
+
!React.isValidElement(children) &&
|
|
62
|
+
!Array.isArray(children)
|
|
63
|
+
) {
|
|
64
|
+
console.warn("Unexpected object in processChildren:", children);
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// If it's an array, process each child
|
|
69
|
+
if (Array.isArray(children)) {
|
|
70
|
+
// Filter out empty strings and newlines that might cause spacing.
|
|
71
|
+
const filtered = children.filter(
|
|
72
|
+
(child) => !(typeof child === "string" && child.trim() === "")
|
|
73
|
+
);
|
|
74
|
+
|
|
75
|
+
return filtered.map((child, idx) => {
|
|
76
|
+
if (typeof child === "string") {
|
|
77
|
+
return (
|
|
78
|
+
<BlockStreamer
|
|
79
|
+
key={idx}
|
|
80
|
+
text={child}
|
|
81
|
+
animate={isStreaming}
|
|
82
|
+
animationName={animationName}
|
|
83
|
+
animationDuration={animationDuration}
|
|
84
|
+
animationTimingFunction={animationTimingFunction}
|
|
85
|
+
/>
|
|
86
|
+
);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
// Nested lists are preserved as-is (they'll handle their own animation).
|
|
90
|
+
if (React.isValidElement(child) && isListElement(child)) {
|
|
91
|
+
return child;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// Table elements are preserved as-is.
|
|
95
|
+
if (isTableElement(child)) {
|
|
96
|
+
return child;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// For paragraph elements inside list items, extract and animate their content.
|
|
100
|
+
if (isReactElementWithProps(child) && child.type === "p") {
|
|
101
|
+
const props = getElementProps(child);
|
|
102
|
+
return processChildren(props.children);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// Code elements (including pre blocks) should be returned as-is.
|
|
106
|
+
if (isCodeElement(child)) {
|
|
107
|
+
return child;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
// Other elements: recursively process their children.
|
|
111
|
+
if (isReactElementWithProps(child)) {
|
|
112
|
+
const childProps = getElementProps(child);
|
|
113
|
+
|
|
114
|
+
// Don't process children for certain element types that handle their own content
|
|
115
|
+
if (isCodeElement(child) || isTableElement(child)) {
|
|
116
|
+
return child;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// Skip processing if children is already a string (don't double-process)
|
|
120
|
+
if (typeof childProps.children === "string") {
|
|
121
|
+
return child;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
// Clone the element with processed children
|
|
125
|
+
return React.cloneElement(
|
|
126
|
+
child,
|
|
127
|
+
{ ...childProps, key: idx },
|
|
128
|
+
processChildren(childProps.children)
|
|
129
|
+
);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// If it's an object but not a React element, return empty string to avoid [object Object]
|
|
133
|
+
if (typeof child === "object" && child !== null) {
|
|
134
|
+
return null;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
return child;
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
// Single React element
|
|
142
|
+
if (React.isValidElement(children)) {
|
|
143
|
+
if (isListElement(children)) {
|
|
144
|
+
return children;
|
|
145
|
+
}
|
|
146
|
+
// For paragraph elements, extract their content
|
|
147
|
+
if (children.type === "p") {
|
|
148
|
+
const props = getElementProps(children);
|
|
149
|
+
return processChildren(props.children);
|
|
150
|
+
}
|
|
151
|
+
// Code and table elements should be returned as-is
|
|
152
|
+
if (isCodeElement(children) || isTableElement(children)) {
|
|
153
|
+
return children;
|
|
154
|
+
}
|
|
155
|
+
const childProps = getElementProps(children);
|
|
156
|
+
return React.cloneElement(
|
|
157
|
+
children,
|
|
158
|
+
childProps,
|
|
159
|
+
processChildren(childProps.children)
|
|
160
|
+
);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
return children;
|
|
164
|
+
};
|
|
165
|
+
|
|
166
|
+
return (
|
|
167
|
+
<LiBlock
|
|
168
|
+
key={bk}
|
|
169
|
+
textColor={textColor || ""}
|
|
170
|
+
textSize={forcedTextSize || sizes.p}
|
|
171
|
+
className="s-stream-marker"
|
|
172
|
+
>
|
|
173
|
+
{processChildren(props.children)}
|
|
174
|
+
</LiBlock>
|
|
175
|
+
);
|
|
176
|
+
}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import React, { useMemo } from "react";
|
|
3
|
+
import type { Components } from "react-markdown";
|
|
4
|
+
import ReactMarkdown from "react-markdown";
|
|
5
|
+
import type { PluggableList } from "react-markdown/lib/react-markdown";
|
|
6
|
+
import rehypeKatex from "rehype-katex";
|
|
7
|
+
import rehypeRaw from "rehype-raw";
|
|
8
|
+
import remarkDirective from "remark-directive";
|
|
9
|
+
import remarkGfm from "remark-gfm";
|
|
10
|
+
import remarkMath from "remark-math";
|
|
11
|
+
|
|
12
|
+
import { Chip } from "@sparkle/components";
|
|
13
|
+
import { MarkdownContentContext } from "@sparkle/components/markdown/MarkdownContentContext";
|
|
14
|
+
import { sanitizeContent } from "@sparkle/components/markdown/utils";
|
|
15
|
+
|
|
16
|
+
import { createMarkdownComponents } from "./markdownComponents";
|
|
17
|
+
import type { ProcessChildrenContext,StreamingMarkdownProps } from "./types";
|
|
18
|
+
import { showUnsupportedDirective } from "./utils";
|
|
19
|
+
|
|
20
|
+
export const StreamingMarkdown: React.FC<StreamingMarkdownProps> = ({
|
|
21
|
+
content,
|
|
22
|
+
animationName,
|
|
23
|
+
animationDuration = "600ms",
|
|
24
|
+
animationTimingFunction = "ease-out",
|
|
25
|
+
animationCurve = "linear",
|
|
26
|
+
isStreaming = true,
|
|
27
|
+
isLastMessage = false,
|
|
28
|
+
textColor = "s-text-foreground dark:s-text-foreground-night",
|
|
29
|
+
forcedTextSize,
|
|
30
|
+
additionalMarkdownComponents,
|
|
31
|
+
additionalMarkdownPlugins,
|
|
32
|
+
}) => {
|
|
33
|
+
const effectiveAnimationName = useMemo(() => {
|
|
34
|
+
if (animationName) {return animationName;}
|
|
35
|
+
|
|
36
|
+
switch (animationCurve) {
|
|
37
|
+
case "accelerate":
|
|
38
|
+
return "s-stream-fadeInAccelerate";
|
|
39
|
+
case "accelerate-fast":
|
|
40
|
+
return "s-stream-fadeInAccelerateFast";
|
|
41
|
+
case "custom":
|
|
42
|
+
return "s-stream-fadeInCustom";
|
|
43
|
+
case "linear":
|
|
44
|
+
default:
|
|
45
|
+
return "s-stream-fadeIn";
|
|
46
|
+
}
|
|
47
|
+
}, [animationName, animationCurve]);
|
|
48
|
+
|
|
49
|
+
const processedContent = useMemo(() => sanitizeContent(content), [content]);
|
|
50
|
+
|
|
51
|
+
const processContext: ProcessChildrenContext = useMemo(
|
|
52
|
+
() => ({
|
|
53
|
+
isStreaming,
|
|
54
|
+
animationName: effectiveAnimationName,
|
|
55
|
+
animationDuration,
|
|
56
|
+
animationTimingFunction,
|
|
57
|
+
}),
|
|
58
|
+
[
|
|
59
|
+
isStreaming,
|
|
60
|
+
effectiveAnimationName,
|
|
61
|
+
animationDuration,
|
|
62
|
+
animationTimingFunction,
|
|
63
|
+
]
|
|
64
|
+
);
|
|
65
|
+
|
|
66
|
+
const markdownComponents: Components = useMemo(
|
|
67
|
+
() =>
|
|
68
|
+
createMarkdownComponents({
|
|
69
|
+
textColor,
|
|
70
|
+
forcedTextSize,
|
|
71
|
+
additionalMarkdownComponents,
|
|
72
|
+
processContext,
|
|
73
|
+
}),
|
|
74
|
+
[textColor, forcedTextSize, additionalMarkdownComponents, processContext]
|
|
75
|
+
);
|
|
76
|
+
|
|
77
|
+
const markdownPlugins: PluggableList = useMemo(
|
|
78
|
+
() => [
|
|
79
|
+
remarkDirective,
|
|
80
|
+
remarkGfm,
|
|
81
|
+
[remarkMath, { singleDollarTextMath: false }],
|
|
82
|
+
...(additionalMarkdownPlugins || []),
|
|
83
|
+
showUnsupportedDirective,
|
|
84
|
+
],
|
|
85
|
+
[additionalMarkdownPlugins]
|
|
86
|
+
);
|
|
87
|
+
|
|
88
|
+
const rehypePlugins = [
|
|
89
|
+
[rehypeKatex, { output: "mathml" }],
|
|
90
|
+
rehypeRaw,
|
|
91
|
+
] as PluggableList;
|
|
92
|
+
|
|
93
|
+
try {
|
|
94
|
+
return (
|
|
95
|
+
<div className="s-w-full">
|
|
96
|
+
<MarkdownContentContext.Provider
|
|
97
|
+
value={{
|
|
98
|
+
content: processedContent,
|
|
99
|
+
isStreaming,
|
|
100
|
+
isLastMessage,
|
|
101
|
+
}}
|
|
102
|
+
>
|
|
103
|
+
<ReactMarkdown
|
|
104
|
+
linkTarget="_blank"
|
|
105
|
+
components={markdownComponents}
|
|
106
|
+
remarkPlugins={markdownPlugins}
|
|
107
|
+
rehypePlugins={rehypePlugins}
|
|
108
|
+
>
|
|
109
|
+
{processedContent}
|
|
110
|
+
</ReactMarkdown>
|
|
111
|
+
</MarkdownContentContext.Provider>
|
|
112
|
+
</div>
|
|
113
|
+
);
|
|
114
|
+
} catch (error) {
|
|
115
|
+
return (
|
|
116
|
+
<div className="s-w-full">
|
|
117
|
+
<Chip color="warning">
|
|
118
|
+
There was an error parsing this markdown content
|
|
119
|
+
</Chip>
|
|
120
|
+
{processedContent}
|
|
121
|
+
</div>
|
|
122
|
+
);
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
export default StreamingMarkdown;
|