ds-markdown 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.
package/README.md ADDED
File without changes
@@ -0,0 +1,8 @@
1
+ import React from "react";
2
+ import "./index.less";
3
+ interface BlockWrapProps {
4
+ children: React.ReactNode;
5
+ language: string;
6
+ }
7
+ declare const BlockWrap: React.FC<BlockWrapProps>;
8
+ export default BlockWrap;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const jsx_runtime_1 = require("react/jsx-runtime");
4
+ require("./index.less");
5
+ const modulePrefix = "BlockWrap";
6
+ const BlockWrap = ({ children, language }) => {
7
+ return ((0, jsx_runtime_1.jsxs)("div", { className: "md-code-block md-code-block-light", children: [(0, jsx_runtime_1.jsx)("div", { className: "md-code-block-banner-wrap", children: (0, jsx_runtime_1.jsx)("div", { className: "md-code-block-banner md-code-block-banner-lite", children: (0, jsx_runtime_1.jsxs)("div", { className: "md-code-block-banner-content", children: [(0, jsx_runtime_1.jsx)("div", { className: "md-code-block-language", children: language }), (0, jsx_runtime_1.jsx)("div", { className: "md-code-block-copy", children: "\u590D\u5236" })] }) }) }), children] }));
8
+ };
9
+ exports.default = BlockWrap;
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/BlockWrap/index.tsx"],"names":[],"mappings":";;;AACA,wBAAsB;AAOtB,MAAM,YAAY,GAAG,WAAW,CAAC;AACjC,MAAM,SAAS,GAA6B,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE;IACrE,OAAO,CACL,iCAAK,SAAS,EAAC,mCAAmC,aAChD,gCAAK,SAAS,EAAC,2BAA2B,YACxC,gCAAK,SAAS,EAAC,gDAAgD,YAC7D,iCAAK,SAAS,EAAC,8BAA8B,aAC3C,gCAAK,SAAS,EAAC,wBAAwB,YAAE,QAAQ,GAAO,EACxD,gCAAK,SAAS,EAAC,oBAAoB,6BAAS,IACxC,GACF,GACF,EACL,QAAQ,IACL,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,kBAAe,SAAS,CAAC"}
@@ -0,0 +1,8 @@
1
+ import React from "react";
2
+ import type { Options } from "react-markdown";
3
+ import "./index.less";
4
+ interface HighReactMarkdownProps extends Options {
5
+ id?: number;
6
+ }
7
+ declare const _default: React.NamedExoticComponent<HighReactMarkdownProps>;
8
+ export default _default;
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const jsx_runtime_1 = require("react/jsx-runtime");
7
+ const react_1 = require("react");
8
+ const react_markdown_1 = __importDefault(require("react-markdown"));
9
+ const react_syntax_highlighter_1 = require("react-syntax-highlighter");
10
+ const remark_gfm_1 = __importDefault(require("remark-gfm"));
11
+ require("./index.less");
12
+ const BlockWrap_1 = __importDefault(require("../BlockWrap"));
13
+ const modulePrefix = "HighReactMarkdown";
14
+ const HighReactMarkdown = (props) => {
15
+ return ((0, jsx_runtime_1.jsx)(react_markdown_1.default, { remarkPlugins: [remark_gfm_1.default], components: {
16
+ code: ({ className, children, ...props }) => {
17
+ const match = /language-(\w+)/.exec(className || "");
18
+ return match ? ((0, jsx_runtime_1.jsx)(BlockWrap_1.default, { language: match[1], children: (0, jsx_runtime_1.jsx)(react_syntax_highlighter_1.Prism, { language: match[1], children: String(children).replace(/\n$/, "") }) })) : ((0, jsx_runtime_1.jsx)("code", { className: className, ...props, children: children }));
19
+ },
20
+ table: ({ children, ...props }) => {
21
+ return (0, jsx_runtime_1.jsx)("div", { className: "markdown-table-wrapper", children: children });
22
+ },
23
+ }, ...props }));
24
+ };
25
+ exports.default = (0, react_1.memo)(HighReactMarkdown);
26
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/HighReactMarkdown/index.tsx"],"names":[],"mappings":";;;;;;AAAA,iCAAoC;AACpC,oEAAsC;AAEtC,uEAAsE;AAEtE,4DAAmC;AAEnC,wBAAsB;AACtB,6DAAqC;AAMrC,MAAM,YAAY,GAAG,mBAAmB,CAAC;AACzC,MAAM,iBAAiB,GAAqC,CAAC,KAAK,EAAE,EAAE;IACpE,OAAO,CACL,uBAAC,wBAAQ,IACP,aAAa,EAAE,CAAC,oBAAS,CAAC,EAC1B,UAAU,EAAE;YACV,IAAI,EAAE,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE;gBAC1C,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;gBACrD,OAAO,KAAK,CAAC,CAAC,CAAC,CACb,uBAAC,mBAAS,IAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,YAC3B,uBAAC,gCAAiB,IAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,YAClC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,GAClB,GACV,CACb,CAAC,CAAC,CAAC,CACF,iCAAM,SAAS,EAAE,SAAS,KAAM,KAAK,YAClC,QAAQ,GACJ,CACR,CAAC;YACJ,CAAC;YACD,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE;gBAChC,OAAO,gCAAK,SAAS,EAAC,wBAAwB,YAAE,QAAQ,GAAO,CAAC;YAClE,CAAC;SACF,KACG,KAAK,GACT,CACH,CAAC;AACJ,CAAC,CAAC;AACF,kBAAe,IAAA,YAAI,EAAC,iBAAiB,CAAC,CAAC"}
@@ -0,0 +1,13 @@
1
+ import "./index.less";
2
+ type AnswerType = "answer" | "thinking";
3
+ interface MarkdownProps {
4
+ /** 打字机效果间隔时间 */
5
+ interval: number;
6
+ /** 是否关闭匀速打字机效果 */
7
+ isClosePrettyTyped?: boolean;
8
+ }
9
+ export interface MarkdownRef {
10
+ push: (content: string, answerType: AnswerType) => void;
11
+ }
12
+ declare const Markdown: import("react").ForwardRefExoticComponent<MarkdownProps & import("react").RefAttributes<MarkdownRef>>;
13
+ export default Markdown;
@@ -0,0 +1,152 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const jsx_runtime_1 = require("react/jsx-runtime");
7
+ const react_1 = require("react");
8
+ const HighReactMarkdown_1 = __importDefault(require("./components/HighReactMarkdown"));
9
+ require("./index.less");
10
+ const Markdown = (0, react_1.forwardRef)(({ interval = 30, isClosePrettyTyped = false }, ref) => {
11
+ // const [content, setContent] = useState(initialContent)
12
+ const charsRef = (0, react_1.useRef)([]);
13
+ const isTypedRef = (0, react_1.useRef)(false);
14
+ const timerRef = (0, react_1.useRef)(null);
15
+ const [stableParagraphs, setStableParagraphs] = (0, react_1.useState)([]);
16
+ const [currentParagraph, setCurrentParagraph] = (0, react_1.useState)(undefined);
17
+ const currentParagraphRef = (0, react_1.useRef)(undefined);
18
+ currentParagraphRef.current = currentParagraph;
19
+ (0, react_1.useEffect)(() => {
20
+ return () => {
21
+ if (timerRef.current) {
22
+ clearTimeout(timerRef.current);
23
+ timerRef.current = null;
24
+ }
25
+ };
26
+ }, []);
27
+ function startTypedTask() {
28
+ if (isTypedRef.current) {
29
+ return;
30
+ }
31
+ const chars = charsRef.current;
32
+ function _startTyped() {
33
+ if (chars.length === 0) {
34
+ isTypedRef.current = false;
35
+ if (timerRef.current) {
36
+ clearTimeout(timerRef.current);
37
+ timerRef.current = null;
38
+ }
39
+ return;
40
+ }
41
+ isTypedRef.current = true;
42
+ timerRef.current = setTimeout(() => {
43
+ const char = chars.shift();
44
+ if (char === undefined) {
45
+ isTypedRef.current = false;
46
+ if (timerRef.current) {
47
+ clearTimeout(timerRef.current);
48
+ timerRef.current = null;
49
+ }
50
+ return;
51
+ }
52
+ const currentParagraph = currentParagraphRef.current;
53
+ if (char.content === "\n\n") {
54
+ if (currentParagraph) {
55
+ setStableParagraphs((prev) => {
56
+ const newParagraphs = [...prev];
57
+ if (currentParagraph) {
58
+ newParagraphs.push({ ...currentParagraph, isTyped: false });
59
+ }
60
+ newParagraphs.push({
61
+ content: "",
62
+ isTyped: false,
63
+ type: "br",
64
+ answerType: char.answerType,
65
+ });
66
+ return newParagraphs;
67
+ });
68
+ setCurrentParagraph(undefined);
69
+ }
70
+ else {
71
+ setStableParagraphs((prev) => {
72
+ const newParagraphs = [...prev];
73
+ newParagraphs.push({
74
+ content: "",
75
+ isTyped: false,
76
+ type: "br",
77
+ answerType: char.answerType,
78
+ });
79
+ return newParagraphs;
80
+ });
81
+ }
82
+ _startTyped();
83
+ return;
84
+ }
85
+ let _currentParagraph = currentParagraph;
86
+ const newCurrentParagraph = {
87
+ content: "",
88
+ isTyped: false,
89
+ type: "text",
90
+ answerType: char.answerType,
91
+ };
92
+ if (!_currentParagraph) {
93
+ // 如果当前没有段落,则直接设置为当前段落
94
+ _currentParagraph = newCurrentParagraph;
95
+ }
96
+ else if (currentParagraph &&
97
+ currentParagraph?.answerType !== char.answerType) {
98
+ setStableParagraphs((prev) => {
99
+ const newParagraphs = [...prev];
100
+ newParagraphs.push({ ...currentParagraph, isTyped: false });
101
+ return newParagraphs;
102
+ });
103
+ _currentParagraph = newCurrentParagraph;
104
+ setCurrentParagraph(_currentParagraph);
105
+ }
106
+ setCurrentParagraph((prev) => {
107
+ return {
108
+ ..._currentParagraph,
109
+ content: (prev?.content || "") + char.content,
110
+ isTyped: true,
111
+ };
112
+ });
113
+ _startTyped();
114
+ }, interval);
115
+ }
116
+ _startTyped();
117
+ }
118
+ (0, react_1.useImperativeHandle)(ref, () => ({
119
+ push: (content, answerType) => {
120
+ // 如果朋友\n,则\n这两个字符要合一起,作为一个字符处理,并且把多个\n处理成一个\n
121
+ const charsGroup = content.split("\n\n");
122
+ charsGroup.forEach((chars, index) => {
123
+ if (isClosePrettyTyped) {
124
+ charsRef.current.push({ content: chars, answerType });
125
+ }
126
+ else {
127
+ charsRef.current.push(...chars.split("").map((char) => ({ content: char, answerType })));
128
+ }
129
+ if (index !== charsGroup.length - 1) {
130
+ charsRef.current.push({ content: "\n\n", answerType });
131
+ }
132
+ });
133
+ // charsRef.current.push({ content: content, answerType });
134
+ if (!isTypedRef.current) {
135
+ startTypedTask();
136
+ }
137
+ },
138
+ }));
139
+ const thinkingParagraphs = stableParagraphs.filter((paragraph) => paragraph.answerType === "thinking");
140
+ const answerParagraphs = stableParagraphs.filter((paragraph) => paragraph.answerType === "answer");
141
+ const getParagraphs = (paragraphs, answerType) => {
142
+ return ((0, jsx_runtime_1.jsxs)("div", { className: `ds-typed-${answerType}`, children: [paragraphs.map((paragraph, index) => {
143
+ if (paragraph.type === "br") {
144
+ return null;
145
+ }
146
+ return ((0, jsx_runtime_1.jsx)(HighReactMarkdown_1.default, { children: paragraph.content || "" }, index));
147
+ }), currentParagraph?.answerType === answerType && ((0, jsx_runtime_1.jsx)(HighReactMarkdown_1.default, { children: currentParagraph.content || "" }, currentParagraph.content))] }));
148
+ };
149
+ return ((0, jsx_runtime_1.jsxs)("div", { className: "ds-markdown", children: [(0, jsx_runtime_1.jsx)("div", { className: "ds-markdown-thinking", children: getParagraphs(thinkingParagraphs, "thinking") }), (0, jsx_runtime_1.jsx)("div", { className: "ds-markdown-answer", children: getParagraphs(answerParagraphs, "answer") })] }));
150
+ });
151
+ exports.default = Markdown;
152
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ { "type": "commonjs" }
@@ -0,0 +1,8 @@
1
+ import React from "react";
2
+ import "./index.less";
3
+ interface BlockWrapProps {
4
+ children: React.ReactNode;
5
+ language: string;
6
+ }
7
+ declare const BlockWrap: React.FC<BlockWrapProps>;
8
+ export default BlockWrap;
@@ -0,0 +1,8 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import "./index.less";
3
+ const modulePrefix = "BlockWrap";
4
+ const BlockWrap = ({ children, language }) => {
5
+ return (_jsxs("div", { className: "md-code-block md-code-block-light", children: [_jsx("div", { className: "md-code-block-banner-wrap", children: _jsx("div", { className: "md-code-block-banner md-code-block-banner-lite", children: _jsxs("div", { className: "md-code-block-banner-content", children: [_jsx("div", { className: "md-code-block-language", children: language }), _jsx("div", { className: "md-code-block-copy", children: "\u590D\u5236" })] }) }) }), children] }));
6
+ };
7
+ export default BlockWrap;
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/BlockWrap/index.tsx"],"names":[],"mappings":";AACA,OAAO,cAAc,CAAC;AAOtB,MAAM,YAAY,GAAG,WAAW,CAAC;AACjC,MAAM,SAAS,GAA6B,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE;IACrE,OAAO,CACL,eAAK,SAAS,EAAC,mCAAmC,aAChD,cAAK,SAAS,EAAC,2BAA2B,YACxC,cAAK,SAAS,EAAC,gDAAgD,YAC7D,eAAK,SAAS,EAAC,8BAA8B,aAC3C,cAAK,SAAS,EAAC,wBAAwB,YAAE,QAAQ,GAAO,EACxD,cAAK,SAAS,EAAC,oBAAoB,6BAAS,IACxC,GACF,GACF,EACL,QAAQ,IACL,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,SAAS,CAAC"}
@@ -0,0 +1,8 @@
1
+ import React from "react";
2
+ import type { Options } from "react-markdown";
3
+ import "./index.less";
4
+ interface HighReactMarkdownProps extends Options {
5
+ id?: number;
6
+ }
7
+ declare const _default: React.NamedExoticComponent<HighReactMarkdownProps>;
8
+ export default _default;
@@ -0,0 +1,21 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { memo } from "react";
3
+ import Markdown from "react-markdown";
4
+ import { Prism as SyntaxHighlighter } from "react-syntax-highlighter";
5
+ import gfmPlugin from "remark-gfm";
6
+ import "./index.less";
7
+ import BlockWrap from "../BlockWrap";
8
+ const modulePrefix = "HighReactMarkdown";
9
+ const HighReactMarkdown = (props) => {
10
+ return (_jsx(Markdown, { remarkPlugins: [gfmPlugin], components: {
11
+ code: ({ className, children, ...props }) => {
12
+ const match = /language-(\w+)/.exec(className || "");
13
+ return match ? (_jsx(BlockWrap, { language: match[1], children: _jsx(SyntaxHighlighter, { language: match[1], children: String(children).replace(/\n$/, "") }) })) : (_jsx("code", { className: className, ...props, children: children }));
14
+ },
15
+ table: ({ children, ...props }) => {
16
+ return _jsx("div", { className: "markdown-table-wrapper", children: children });
17
+ },
18
+ }, ...props }));
19
+ };
20
+ export default memo(HighReactMarkdown);
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/HighReactMarkdown/index.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAEtC,OAAO,EAAE,KAAK,IAAI,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAEtE,OAAO,SAAS,MAAM,YAAY,CAAC;AAEnC,OAAO,cAAc,CAAC;AACtB,OAAO,SAAS,MAAM,cAAc,CAAC;AAMrC,MAAM,YAAY,GAAG,mBAAmB,CAAC;AACzC,MAAM,iBAAiB,GAAqC,CAAC,KAAK,EAAE,EAAE;IACpE,OAAO,CACL,KAAC,QAAQ,IACP,aAAa,EAAE,CAAC,SAAS,CAAC,EAC1B,UAAU,EAAE;YACV,IAAI,EAAE,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE;gBAC1C,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;gBACrD,OAAO,KAAK,CAAC,CAAC,CAAC,CACb,KAAC,SAAS,IAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,YAC3B,KAAC,iBAAiB,IAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,YAClC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,GAClB,GACV,CACb,CAAC,CAAC,CAAC,CACF,eAAM,SAAS,EAAE,SAAS,KAAM,KAAK,YAClC,QAAQ,GACJ,CACR,CAAC;YACJ,CAAC;YACD,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE;gBAChC,OAAO,cAAK,SAAS,EAAC,wBAAwB,YAAE,QAAQ,GAAO,CAAC;YAClE,CAAC;SACF,KACG,KAAK,GACT,CACH,CAAC;AACJ,CAAC,CAAC;AACF,eAAe,IAAI,CAAC,iBAAiB,CAAC,CAAC"}
@@ -0,0 +1,13 @@
1
+ import "./index.less";
2
+ type AnswerType = "answer" | "thinking";
3
+ interface MarkdownProps {
4
+ /** 打字机效果间隔时间 */
5
+ interval: number;
6
+ /** 是否关闭匀速打字机效果 */
7
+ isClosePrettyTyped?: boolean;
8
+ }
9
+ export interface MarkdownRef {
10
+ push: (content: string, answerType: AnswerType) => void;
11
+ }
12
+ declare const Markdown: import("react").ForwardRefExoticComponent<MarkdownProps & import("react").RefAttributes<MarkdownRef>>;
13
+ export default Markdown;
@@ -0,0 +1,147 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { forwardRef, useEffect, useImperativeHandle, useRef, useState, } from "react";
3
+ import HighReactMarkdown from "./components/HighReactMarkdown";
4
+ import "./index.less";
5
+ const Markdown = forwardRef(({ interval = 30, isClosePrettyTyped = false }, ref) => {
6
+ // const [content, setContent] = useState(initialContent)
7
+ const charsRef = useRef([]);
8
+ const isTypedRef = useRef(false);
9
+ const timerRef = useRef(null);
10
+ const [stableParagraphs, setStableParagraphs] = useState([]);
11
+ const [currentParagraph, setCurrentParagraph] = useState(undefined);
12
+ const currentParagraphRef = useRef(undefined);
13
+ currentParagraphRef.current = currentParagraph;
14
+ useEffect(() => {
15
+ return () => {
16
+ if (timerRef.current) {
17
+ clearTimeout(timerRef.current);
18
+ timerRef.current = null;
19
+ }
20
+ };
21
+ }, []);
22
+ function startTypedTask() {
23
+ if (isTypedRef.current) {
24
+ return;
25
+ }
26
+ const chars = charsRef.current;
27
+ function _startTyped() {
28
+ if (chars.length === 0) {
29
+ isTypedRef.current = false;
30
+ if (timerRef.current) {
31
+ clearTimeout(timerRef.current);
32
+ timerRef.current = null;
33
+ }
34
+ return;
35
+ }
36
+ isTypedRef.current = true;
37
+ timerRef.current = setTimeout(() => {
38
+ const char = chars.shift();
39
+ if (char === undefined) {
40
+ isTypedRef.current = false;
41
+ if (timerRef.current) {
42
+ clearTimeout(timerRef.current);
43
+ timerRef.current = null;
44
+ }
45
+ return;
46
+ }
47
+ const currentParagraph = currentParagraphRef.current;
48
+ if (char.content === "\n\n") {
49
+ if (currentParagraph) {
50
+ setStableParagraphs((prev) => {
51
+ const newParagraphs = [...prev];
52
+ if (currentParagraph) {
53
+ newParagraphs.push({ ...currentParagraph, isTyped: false });
54
+ }
55
+ newParagraphs.push({
56
+ content: "",
57
+ isTyped: false,
58
+ type: "br",
59
+ answerType: char.answerType,
60
+ });
61
+ return newParagraphs;
62
+ });
63
+ setCurrentParagraph(undefined);
64
+ }
65
+ else {
66
+ setStableParagraphs((prev) => {
67
+ const newParagraphs = [...prev];
68
+ newParagraphs.push({
69
+ content: "",
70
+ isTyped: false,
71
+ type: "br",
72
+ answerType: char.answerType,
73
+ });
74
+ return newParagraphs;
75
+ });
76
+ }
77
+ _startTyped();
78
+ return;
79
+ }
80
+ let _currentParagraph = currentParagraph;
81
+ const newCurrentParagraph = {
82
+ content: "",
83
+ isTyped: false,
84
+ type: "text",
85
+ answerType: char.answerType,
86
+ };
87
+ if (!_currentParagraph) {
88
+ // 如果当前没有段落,则直接设置为当前段落
89
+ _currentParagraph = newCurrentParagraph;
90
+ }
91
+ else if (currentParagraph &&
92
+ currentParagraph?.answerType !== char.answerType) {
93
+ setStableParagraphs((prev) => {
94
+ const newParagraphs = [...prev];
95
+ newParagraphs.push({ ...currentParagraph, isTyped: false });
96
+ return newParagraphs;
97
+ });
98
+ _currentParagraph = newCurrentParagraph;
99
+ setCurrentParagraph(_currentParagraph);
100
+ }
101
+ setCurrentParagraph((prev) => {
102
+ return {
103
+ ..._currentParagraph,
104
+ content: (prev?.content || "") + char.content,
105
+ isTyped: true,
106
+ };
107
+ });
108
+ _startTyped();
109
+ }, interval);
110
+ }
111
+ _startTyped();
112
+ }
113
+ useImperativeHandle(ref, () => ({
114
+ push: (content, answerType) => {
115
+ // 如果朋友\n,则\n这两个字符要合一起,作为一个字符处理,并且把多个\n处理成一个\n
116
+ const charsGroup = content.split("\n\n");
117
+ charsGroup.forEach((chars, index) => {
118
+ if (isClosePrettyTyped) {
119
+ charsRef.current.push({ content: chars, answerType });
120
+ }
121
+ else {
122
+ charsRef.current.push(...chars.split("").map((char) => ({ content: char, answerType })));
123
+ }
124
+ if (index !== charsGroup.length - 1) {
125
+ charsRef.current.push({ content: "\n\n", answerType });
126
+ }
127
+ });
128
+ // charsRef.current.push({ content: content, answerType });
129
+ if (!isTypedRef.current) {
130
+ startTypedTask();
131
+ }
132
+ },
133
+ }));
134
+ const thinkingParagraphs = stableParagraphs.filter((paragraph) => paragraph.answerType === "thinking");
135
+ const answerParagraphs = stableParagraphs.filter((paragraph) => paragraph.answerType === "answer");
136
+ const getParagraphs = (paragraphs, answerType) => {
137
+ return (_jsxs("div", { className: `ds-typed-${answerType}`, children: [paragraphs.map((paragraph, index) => {
138
+ if (paragraph.type === "br") {
139
+ return null;
140
+ }
141
+ return (_jsx(HighReactMarkdown, { children: paragraph.content || "" }, index));
142
+ }), currentParagraph?.answerType === answerType && (_jsx(HighReactMarkdown, { children: currentParagraph.content || "" }, currentParagraph.content))] }));
143
+ };
144
+ return (_jsxs("div", { className: "ds-markdown", children: [_jsx("div", { className: "ds-markdown-thinking", children: getParagraphs(thinkingParagraphs, "thinking") }), _jsx("div", { className: "ds-markdown-answer", children: getParagraphs(answerParagraphs, "answer") })] }));
145
+ });
146
+ export default Markdown;
147
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"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"}