@dust-tt/sparkle 0.2.646-rc-1 → 0.2.646-rc-3

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.
@@ -1,9 +1,10 @@
1
1
  import React from "react";
2
2
  import type { Components } from "react-markdown";
3
3
  import type { PluggableList } from "react-markdown/lib/react-markdown";
4
- export declare function Markdown({ content, isStreaming, textColor, forcedTextSize, isLastMessage, additionalMarkdownComponents, additionalMarkdownPlugins, }: {
4
+ export declare function Markdown({ content, isStreaming, shouldHaveStreamingAnimation, textColor, forcedTextSize, isLastMessage, additionalMarkdownComponents, additionalMarkdownPlugins, }: {
5
5
  content: string;
6
6
  isStreaming?: boolean;
7
+ shouldHaveStreamingAnimation?: boolean;
7
8
  textColor?: string;
8
9
  isLastMessage?: boolean;
9
10
  forcedTextSize?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"Markdown.d.ts","sourceRoot":"","sources":["../../../../src/components/markdown/Markdown.tsx"],"names":[],"mappings":"AACA,OAAO,KAAkB,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AA4DvE,wBAAgB,QAAQ,CAAC,EACvB,OAAO,EACP,WAAmB,EACnB,SAA4D,EAC5D,cAAc,EACd,aAAqB,EACrB,4BAA4B,EAC5B,yBAAyB,GAC1B,EAAE;IACD,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,4BAA4B,CAAC,EAAE,UAAU,CAAC;IAC1C,yBAAyB,CAAC,EAAE,aAAa,CAAC;CAC3C,qBA+KA"}
1
+ {"version":3,"file":"Markdown.d.ts","sourceRoot":"","sources":["../../../../src/components/markdown/Markdown.tsx"],"names":[],"mappings":"AACA,OAAO,KAAkB,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AA8DvE,wBAAgB,QAAQ,CAAC,EACvB,OAAO,EACP,WAAmB,EACnB,4BAAoC,EACpC,SAA4D,EAC5D,cAAc,EACd,aAAqB,EACrB,4BAA4B,EAC5B,yBAAyB,GAC1B,EAAE;IACD,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,4BAA4B,CAAC,EAAE,OAAO,CAAC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,4BAA4B,CAAC,EAAE,UAAU,CAAC;IAC1C,yBAAyB,CAAC,EAAE,aAAa,CAAC;CAC3C,qBAoLA"}
@@ -21,6 +21,7 @@ import { MemoTableBlock, MemoTableBodyBlock, MemoTableDataBlock, MemoTableHeadBl
21
21
  import { MemoHorizontalRuleBlock, MemoStrongBlock, } from "../../components/markdown/TextFormattingBlocks";
22
22
  import { sanitizeContent } from "../../components/markdown/utils";
23
23
  import { cn } from "../../lib/utils";
24
+ import { useAnimatedText } from "./useAnimatedText";
24
25
  var sizes = __assign({ p: "s-copy-sm @sm:s-text-base @sm:s-leading-7" }, markdownHeaderClasses);
25
26
  function showUnsupportedDirective() {
26
27
  return function (tree) {
@@ -34,8 +35,9 @@ function showUnsupportedDirective() {
34
35
  };
35
36
  }
36
37
  export function Markdown(_a) {
37
- var content = _a.content, _b = _a.isStreaming, isStreaming = _b === void 0 ? false : _b, _c = _a.textColor, textColor = _c === void 0 ? "s-text-foreground dark:s-text-foreground-night" : _c, forcedTextSize = _a.forcedTextSize, _d = _a.isLastMessage, isLastMessage = _d === void 0 ? false : _d, additionalMarkdownComponents = _a.additionalMarkdownComponents, additionalMarkdownPlugins = _a.additionalMarkdownPlugins;
38
+ var content = _a.content, _b = _a.isStreaming, isStreaming = _b === void 0 ? false : _b, _c = _a.shouldHaveStreamingAnimation, shouldHaveStreamingAnimation = _c === void 0 ? false : _c, _d = _a.textColor, textColor = _d === void 0 ? "s-text-foreground dark:s-text-foreground-night" : _d, forcedTextSize = _a.forcedTextSize, _e = _a.isLastMessage, isLastMessage = _e === void 0 ? false : _e, additionalMarkdownComponents = _a.additionalMarkdownComponents, additionalMarkdownPlugins = _a.additionalMarkdownPlugins;
38
39
  var processedContent = useMemo(function () { return sanitizeContent(content); }, [content]);
40
+ var markdownContent = useAnimatedText(processedContent, isStreaming && shouldHaveStreamingAnimation);
39
41
  // Note on re-renderings. A lot of effort has been put into preventing rerendering across markdown
40
42
  // AST parsing rounds (happening at each token being streamed).
41
43
  //
@@ -98,16 +100,16 @@ export function Markdown(_a) {
98
100
  ], false); }, [additionalMarkdownPlugins]);
99
101
  var rehypePlugins = [[rehypeKatex, { output: "mathml" }]];
100
102
  try {
101
- return (React.createElement("div", { className: cn("s-w-full", isStreaming ? "s-blinking-cursor" : "") },
103
+ return (React.createElement("div", { className: cn("s-w-full") },
102
104
  React.createElement(MarkdownContentContext.Provider, { value: {
103
105
  content: processedContent,
104
106
  isStreaming: isStreaming,
105
107
  isLastMessage: isLastMessage,
106
108
  } },
107
- React.createElement(ReactMarkdown, { linkTarget: "_blank", components: markdownComponents, remarkPlugins: markdownPlugins, rehypePlugins: rehypePlugins }, processedContent))));
109
+ React.createElement(ReactMarkdown, { linkTarget: "_blank", components: markdownComponents, remarkPlugins: markdownPlugins, rehypePlugins: rehypePlugins }, markdownContent))));
108
110
  }
109
111
  catch (error) {
110
- return (React.createElement("div", { className: cn("s-w-full", isStreaming ? "s-blinking-cursor" : "") },
112
+ return (React.createElement("div", { className: cn("s-w-full") },
111
113
  React.createElement(Chip, { color: "warning" }, "There was an error parsing this markdown content"),
112
114
  processedContent));
113
115
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Markdown.js","sourceRoot":"","sources":["../../../../src/components/markdown/Markdown.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Markdown.js","sourceRoot":"","sources":["../../../../src/components/markdown/Markdown.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function useAnimatedText(text: string, shouldAnimate: boolean): string;
2
+ //# sourceMappingURL=useAnimatedText.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAnimatedText.d.ts","sourceRoot":"","sources":["../../../../src/components/markdown/useAnimatedText.ts"],"names":[],"mappings":"AAKA,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,UA8BnE"}
@@ -0,0 +1,31 @@
1
+ import { __read } from "tslib";
2
+ import { animate } from "framer-motion";
3
+ import { useEffect, useState } from "react";
4
+ var delimiter = /(?=[\s\S])/;
5
+ export function useAnimatedText(text, shouldAnimate) {
6
+ var _a = __read(useState(0), 2), cursor = _a[0], setCursor = _a[1];
7
+ var _b = __read(useState(0), 2), startingCursor = _b[0], setStartingCursor = _b[1];
8
+ var _c = __read(useState(text), 2), prevText = _c[0], setPrevText = _c[1];
9
+ if (prevText !== text) {
10
+ setPrevText(text);
11
+ setStartingCursor(cursor);
12
+ }
13
+ useEffect(function () {
14
+ if (shouldAnimate) {
15
+ var textParts = text.split(delimiter);
16
+ var controls_1 = animate(startingCursor, textParts.length, {
17
+ duration: 4,
18
+ ease: "easeOut",
19
+ onUpdate: function (latest) {
20
+ setCursor(Math.floor(latest));
21
+ },
22
+ });
23
+ return function () { return controls_1.stop(); };
24
+ }
25
+ }, [startingCursor, text]);
26
+ if (!shouldAnimate) {
27
+ return text;
28
+ }
29
+ return text.split(delimiter).slice(0, cursor).join("");
30
+ }
31
+ //# sourceMappingURL=useAnimatedText.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAnimatedText.js","sourceRoot":"","sources":["../../../../src/components/markdown/useAnimatedText.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE5C,IAAM,SAAS,GAAG,YAAY,CAAC;AAE/B,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,aAAsB;IAC5D,IAAA,KAAA,OAAsB,QAAQ,CAAC,CAAC,CAAC,IAAA,EAAhC,MAAM,QAAA,EAAE,SAAS,QAAe,CAAC;IAClC,IAAA,KAAA,OAAsC,QAAQ,CAAC,CAAC,CAAC,IAAA,EAAhD,cAAc,QAAA,EAAE,iBAAiB,QAAe,CAAC;IAClD,IAAA,KAAA,OAA0B,QAAQ,CAAC,IAAI,CAAC,IAAA,EAAvC,QAAQ,QAAA,EAAE,WAAW,QAAkB,CAAC;IAE/C,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtB,WAAW,CAAC,IAAI,CAAC,CAAC;QAClB,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;IAED,SAAS,CAAC;QACR,IAAI,aAAa,EAAE,CAAC;YAClB,IAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACxC,IAAM,UAAQ,GAAG,OAAO,CAAC,cAAc,EAAE,SAAS,CAAC,MAAM,EAAE;gBACzD,QAAQ,EAAE,CAAC;gBACX,IAAI,EAAE,SAAS;gBACf,QAAQ,YAAC,MAAM;oBACb,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;gBAChC,CAAC;aACF,CAAC,CAAC;YAEH,OAAO,cAAM,OAAA,UAAQ,CAAC,IAAI,EAAE,EAAf,CAAe,CAAC;QAC/B,CAAC;IACH,CAAC,EAAE,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC,CAAC;IAE3B,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACzD,CAAC"}
@@ -51,15 +51,3 @@
51
51
  --tw-checker-color: theme("colors.slate.950"); /* Dark mode pattern color */
52
52
  }
53
53
  }
54
-
55
- .s-blinking-cursor > :not(pre):last-child::after {
56
- content: "";
57
- width: 8px;
58
- height: 16px;
59
- @apply s-bg-success-400;
60
- display: inline-block;
61
- @apply s-animate-cursor-blink;
62
- margin-left: 5px;
63
- position: relative;
64
- top: 4px;
65
- }
@@ -2,18 +2,6 @@
2
2
  @tailwind components;
3
3
  @tailwind utilities;
4
4
 
5
- .s-blinking-cursor > :not(pre):last-child::after {
6
- content: "";
7
- width: 8px;
8
- height: 16px;
9
- @apply s-bg-success-400;
10
- display: inline-block;
11
- @apply s-animate-cursor-blink;
12
- margin-left: 5px;
13
- position: relative;
14
- top: 4px;
15
- }
16
-
17
5
  @keyframes collapse-down {
18
6
  from {
19
7
  height: 0;
@@ -2,17 +2,6 @@
2
2
  @tailwind components;
3
3
  @tailwind utilities;
4
4
 
5
- .s-blinking-cursor > :not(pre):last-child::after {
6
- content: "";
7
- width: 8px;
8
- height: 16px;
9
- @apply s-bg-success-400;
10
- display: inline-block;
11
- @apply s-animate-cursor-blink;
12
- margin-left: 5px;
13
- position: relative;
14
- top: 4px;
15
- }
16
5
 
17
6
  @keyframes bgblink {
18
7
  0%,
package/dist/sparkle.css CHANGED
@@ -5409,40 +5409,6 @@ select {
5409
5409
  mask-image: radial-gradient(white,black);
5410
5410
  }
5411
5411
 
5412
- .s-blinking-cursor > :not(pre):last-child::after {
5413
- content: "";
5414
- width: 8px;
5415
- height: 16px;
5416
- --tw-bg-opacity: 1;
5417
- background-color: rgb(145 193 116 / var(--tw-bg-opacity));
5418
- display: inline-block;
5419
- }
5420
-
5421
- @keyframes s-cursor-blink {
5422
- 0% {
5423
- opacity: 1;
5424
- }
5425
-
5426
- 60% {
5427
- opacity: 1;
5428
- }
5429
-
5430
- 70% {
5431
- opacity: 0;
5432
- }
5433
-
5434
- 100% {
5435
- opacity: 0;
5436
- }
5437
- }
5438
-
5439
- .s-blinking-cursor > :not(pre):last-child::after {
5440
- animation: s-cursor-blink 0.9s infinite;;
5441
- margin-left: 5px;
5442
- position: relative;
5443
- top: 4px;
5444
- }
5445
-
5446
5412
  @keyframes bgblink {
5447
5413
  0%,
5448
5414
  100% {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dust-tt/sparkle",
3
- "version": "0.2.646-rc-1",
3
+ "version": "0.2.646-rc-3",
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",
@@ -118,6 +118,7 @@
118
118
  "class-variance-authority": "^0.7.1",
119
119
  "clsx": "^2.1.1",
120
120
  "emoji-mart": "^5.5.2",
121
+ "framer-motion": "^12.23.22",
121
122
  "lottie-react": "^2.4.0",
122
123
  "lottie-web": "^5.12.2",
123
124
  "mermaid": "^11.4.1",
@@ -45,6 +45,8 @@ import {
45
45
  import { sanitizeContent } from "@sparkle/components/markdown/utils";
46
46
  import { cn } from "@sparkle/lib/utils";
47
47
 
48
+ import { useAnimatedText } from "./useAnimatedText";
49
+
48
50
  const sizes = {
49
51
  p: "s-copy-sm @sm:s-text-base @sm:s-leading-7",
50
52
  ...markdownHeaderClasses,
@@ -65,6 +67,7 @@ function showUnsupportedDirective() {
65
67
  export function Markdown({
66
68
  content,
67
69
  isStreaming = false,
70
+ shouldHaveStreamingAnimation = false,
68
71
  textColor = "s-text-foreground dark:s-text-foreground-night",
69
72
  forcedTextSize,
70
73
  isLastMessage = false,
@@ -73,6 +76,7 @@ export function Markdown({
73
76
  }: {
74
77
  content: string;
75
78
  isStreaming?: boolean;
79
+ shouldHaveStreamingAnimation?: boolean;
76
80
  textColor?: string;
77
81
  isLastMessage?: boolean;
78
82
  forcedTextSize?: string;
@@ -81,6 +85,11 @@ export function Markdown({
81
85
  }) {
82
86
  const processedContent = useMemo(() => sanitizeContent(content), [content]);
83
87
 
88
+ const markdownContent = useAnimatedText(
89
+ processedContent,
90
+ isStreaming && shouldHaveStreamingAnimation
91
+ );
92
+
84
93
  // Note on re-renderings. A lot of effort has been put into preventing rerendering across markdown
85
94
  // AST parsing rounds (happening at each token being streamed).
86
95
  //
@@ -224,7 +233,7 @@ export function Markdown({
224
233
 
225
234
  try {
226
235
  return (
227
- <div className={cn("s-w-full", isStreaming ? "s-blinking-cursor" : "")}>
236
+ <div className={cn("s-w-full")}>
228
237
  <MarkdownContentContext.Provider
229
238
  value={{
230
239
  content: processedContent,
@@ -238,14 +247,14 @@ export function Markdown({
238
247
  remarkPlugins={markdownPlugins}
239
248
  rehypePlugins={rehypePlugins}
240
249
  >
241
- {processedContent}
250
+ {markdownContent}
242
251
  </ReactMarkdown>
243
252
  </MarkdownContentContext.Provider>
244
253
  </div>
245
254
  );
246
255
  } catch (error) {
247
256
  return (
248
- <div className={cn("s-w-full", isStreaming ? "s-blinking-cursor" : "")}>
257
+ <div className={cn("s-w-full")}>
249
258
  <Chip color="warning">
250
259
  There was an error parsing this markdown content
251
260
  </Chip>
@@ -0,0 +1,36 @@
1
+ import { animate } from "framer-motion";
2
+ import { useEffect, useState } from "react";
3
+
4
+ const delimiter = /(?=[\s\S])/;
5
+
6
+ export function useAnimatedText(text: string, shouldAnimate: boolean) {
7
+ const [cursor, setCursor] = useState(0);
8
+ const [startingCursor, setStartingCursor] = useState(0);
9
+ const [prevText, setPrevText] = useState(text);
10
+
11
+ if (prevText !== text) {
12
+ setPrevText(text);
13
+ setStartingCursor(cursor);
14
+ }
15
+
16
+ useEffect(() => {
17
+ if (shouldAnimate) {
18
+ const textParts = text.split(delimiter);
19
+ const controls = animate(startingCursor, textParts.length, {
20
+ duration: 4,
21
+ ease: "easeOut",
22
+ onUpdate(latest) {
23
+ setCursor(Math.floor(latest));
24
+ },
25
+ });
26
+
27
+ return () => controls.stop();
28
+ }
29
+ }, [startingCursor, text]);
30
+
31
+ if (!shouldAnimate) {
32
+ return text;
33
+ }
34
+
35
+ return text.split(delimiter).slice(0, cursor).join("");
36
+ }
@@ -51,15 +51,3 @@
51
51
  --tw-checker-color: theme("colors.slate.950"); /* Dark mode pattern color */
52
52
  }
53
53
  }
54
-
55
- .s-blinking-cursor > :not(pre):last-child::after {
56
- content: "";
57
- width: 8px;
58
- height: 16px;
59
- @apply s-bg-success-400;
60
- display: inline-block;
61
- @apply s-animate-cursor-blink;
62
- margin-left: 5px;
63
- position: relative;
64
- top: 4px;
65
- }
@@ -2,18 +2,6 @@
2
2
  @tailwind components;
3
3
  @tailwind utilities;
4
4
 
5
- .s-blinking-cursor > :not(pre):last-child::after {
6
- content: "";
7
- width: 8px;
8
- height: 16px;
9
- @apply s-bg-success-400;
10
- display: inline-block;
11
- @apply s-animate-cursor-blink;
12
- margin-left: 5px;
13
- position: relative;
14
- top: 4px;
15
- }
16
-
17
5
  @keyframes collapse-down {
18
6
  from {
19
7
  height: 0;
@@ -2,17 +2,6 @@
2
2
  @tailwind components;
3
3
  @tailwind utilities;
4
4
 
5
- .s-blinking-cursor > :not(pre):last-child::after {
6
- content: "";
7
- width: 8px;
8
- height: 16px;
9
- @apply s-bg-success-400;
10
- display: inline-block;
11
- @apply s-animate-cursor-blink;
12
- margin-left: 5px;
13
- position: relative;
14
- top: 4px;
15
- }
16
5
 
17
6
  @keyframes bgblink {
18
7
  0%,