@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.
- package/dist/cjs/index.js +1 -1
- package/dist/esm/components/markdown/Markdown.d.ts +2 -1
- package/dist/esm/components/markdown/Markdown.d.ts.map +1 -1
- package/dist/esm/components/markdown/Markdown.js +6 -4
- package/dist/esm/components/markdown/Markdown.js.map +1 -1
- package/dist/esm/components/markdown/useAnimatedText.d.ts +2 -0
- package/dist/esm/components/markdown/useAnimatedText.d.ts.map +1 -0
- package/dist/esm/components/markdown/useAnimatedText.js +31 -0
- package/dist/esm/components/markdown/useAnimatedText.js.map +1 -0
- package/dist/esm/styles/global.css +0 -12
- package/dist/esm/styles/global_with_tw_base.css +0 -12
- package/dist/esm/styles/tailwind.css +0 -11
- package/dist/sparkle.css +0 -34
- package/package.json +2 -1
- package/src/components/markdown/Markdown.tsx +12 -3
- package/src/components/markdown/useAnimatedText.ts +36 -0
- package/src/styles/global.css +0 -12
- package/src/styles/global_with_tw_base.css +0 -12
- package/src/styles/tailwind.css +0 -11
|
@@ -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;
|
|
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 =
|
|
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"
|
|
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 },
|
|
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"
|
|
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":";AAAA,uDAAuD;AACvD,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,aAAa,MAAM,gBAAgB,CAAC;AAE3C,OAAO,WAAW,MAAM,cAAc,CAAC;AACvC,OAAO,eAAe,MAAM,kBAAkB,CAAC;AAC/C,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,UAAU,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEzC,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,8CAA8C,CAAC;AACnF,OAAO,EAAE,gCAAgC,EAAE,MAAM,2DAA2D,CAAC;AAC7G,OAAO,EACL,qBAAqB,EACrB,WAAW,EACX,WAAW,EACX,WAAW,EACX,WAAW,EACX,WAAW,EACX,WAAW,GACZ,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AACvE,OAAO,EACL,WAAW,EACX,WAAW,EACX,WAAW,GACZ,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,sBAAsB,EAAE,MAAM,qDAAqD,CAAC;AAC7F,OAAO,EAAE,kBAAkB,EAAE,MAAM,6CAA6C,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AACrE,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,yCAAyC,CAAC;AACjD,OAAO,EACL,uBAAuB,EACvB,eAAe,GAChB,MAAM,mDAAmD,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AACrE,OAAO,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAC;AAExC,IAAM,KAAK,cACT,CAAC,EAAE,2CAA2C,IAC3C,qBAAqB,CACzB,CAAC;AAEF,SAAS,wBAAwB;IAC/B,OAAO,UAAC,IAAS;QACf,KAAK,CAAC,IAAI,EAAE,CAAC,eAAe,CAAC,EAAE,UAAC,IAAI;YAClC,IAAI,IAAI,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;gBAClC,8DAA8D;gBAC9D,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC;gBACnB,IAAI,CAAC,KAAK,GAAG,WAAI,IAAI,CAAC,IAAI,SAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAC,CAAM,IAAK,OAAA,CAAC,CAAC,KAAK,EAAP,CAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAE,CAAC;YACtG,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"Markdown.js","sourceRoot":"","sources":["../../../../src/components/markdown/Markdown.tsx"],"names":[],"mappings":"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"}
|
|
@@ -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-
|
|
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"
|
|
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
|
-
{
|
|
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"
|
|
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
|
+
}
|
package/src/styles/global.css
CHANGED
|
@@ -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;
|
package/src/styles/tailwind.css
CHANGED
|
@@ -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%,
|