ds-markdown 1.0.4 → 1.0.5-beta.0
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/es/AutoScroll/index.d.ts.map +1 -1
- package/es/AutoScroll/index.js +2 -3
- package/es/AutoScroll/index.js.map +1 -1
- package/es/MarkdownCMD/index.d.ts +1 -0
- package/es/MarkdownCMD/index.d.ts.map +1 -1
- package/es/MarkdownCMD/index.js +27 -3
- package/es/MarkdownCMD/index.js.map +1 -1
- package/es/components/CodeComponent/CodeBlockActions/index.d.ts +2 -2
- package/es/components/CodeComponent/CodeBlockActions/index.d.ts.map +1 -1
- package/es/components/CodeComponent/CodeBlockActions/index.js +5 -2
- package/es/components/CodeComponent/CodeBlockActions/index.js.map +1 -1
- package/es/components/CodeComponent/HighlightCode/index.d.ts +3 -2
- package/es/components/CodeComponent/HighlightCode/index.d.ts.map +1 -1
- package/es/components/CodeComponent/HighlightCode/index.js +8 -4
- package/es/components/CodeComponent/HighlightCode/index.js.map +1 -1
- package/es/components/CodeComponent/index.d.ts +3 -3
- package/es/components/CodeComponent/index.d.ts.map +1 -1
- package/es/components/CodeComponent/index.js +64 -5
- package/es/components/CodeComponent/index.js.map +1 -1
- package/es/components/CopyButton/index.d.ts +2 -2
- package/es/components/CopyButton/index.d.ts.map +1 -1
- package/es/components/CopyButton/index.js +6 -3
- package/es/components/CopyButton/index.js.map +1 -1
- package/es/components/DownloadButton/index.d.ts +2 -2
- package/es/components/DownloadButton/index.d.ts.map +1 -1
- package/es/components/DownloadButton/index.js +61 -50
- package/es/components/DownloadButton/index.js.map +1 -1
- package/es/components/ui/SuccessButton/index.d.ts.map +1 -1
- package/es/components/ui/SuccessButton/index.js +15 -12
- package/es/components/ui/SuccessButton/index.js.map +1 -1
- package/es/context/MarkdownProvider.d.ts.map +1 -1
- package/es/context/MarkdownProvider.js +3 -3
- package/es/context/MarkdownProvider.js.map +1 -1
- package/es/defined/index.d.ts +1 -0
- package/es/defined/index.d.ts.map +1 -1
- package/es/index.css +44 -0
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/AutoScroll/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,UAAU,eAAe;IACvB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/AutoScroll/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,UAAU,eAAe;IACvB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,QAAA,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CAEzC,CAAC;AAEF,eAAe,UAAU,CAAC"}
|
package/es/AutoScroll/index.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
const
|
|
3
|
-
|
|
4
|
-
return _jsx("div", { className: "ds-markdown_auto_scroll", children: props.children });
|
|
2
|
+
const AutoScroll = ({ children }) => {
|
|
3
|
+
return _jsx("div", { className: "ds-markdown_auto_scroll", children: children });
|
|
5
4
|
};
|
|
6
5
|
export default AutoScroll;
|
|
7
6
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/AutoScroll/index.tsx"],"names":[],"mappings":";AAMA,MAAM,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/AutoScroll/index.tsx"],"names":[],"mappings":";AAMA,MAAM,UAAU,GAA8B,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;IAC7D,OAAO,cAAK,SAAS,EAAC,yBAAyB,YAAE,QAAQ,GAAO,CAAC;AACnE,CAAC,CAAC;AAEF,eAAe,UAAU,CAAC"}
|
|
@@ -7,6 +7,7 @@ interface IMarkdownCustom {
|
|
|
7
7
|
plugins?: IMarkdownPlugin[];
|
|
8
8
|
math?: IMarkdownMath;
|
|
9
9
|
isInnerRender?: boolean;
|
|
10
|
+
cursor?: React.ReactNode | string | 'circle' | 'block' | 'underline' | 'line';
|
|
10
11
|
}
|
|
11
12
|
declare const MarkdownCMD: import("react").ForwardRefExoticComponent<MarkdownTyperCMDProps & IMarkdownCustom & import("react").RefAttributes<MarkdownCMDRef>>;
|
|
12
13
|
export default MarkdownCMD;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/MarkdownCMD/index.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,eAAe,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAE9G,OAAO,EAAyC,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAOpG,UAAU,eAAe;IACvB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;IAC5B,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/MarkdownCMD/index.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,eAAe,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAE9G,OAAO,EAAyC,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAOpG,UAAU,eAAe;IACvB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;IAC5B,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,WAAW,GAAG,MAAM,CAAC;CAC/E;AA0JD,QAAA,MAAM,WAAW,oIAsCf,CAAC;AAEH,eAAe,WAAW,CAAC"}
|
package/es/MarkdownCMD/index.js
CHANGED
|
@@ -10,7 +10,15 @@ import { MarkdownProvider } from '../context/MarkdownProvider.js';
|
|
|
10
10
|
import { useConfig } from '../context/ConfigProvider/index.js';
|
|
11
11
|
import { replaceMathBracket } from '../utils/remarkMathBracket.js';
|
|
12
12
|
import CodeComponent from '../components/CodeComponent/index.js';
|
|
13
|
-
|
|
13
|
+
// Cursor factory function to create cursor elements
|
|
14
|
+
const createCursor = (className) => () => _jsx("span", { className: className });
|
|
15
|
+
const cursorFactories = {
|
|
16
|
+
circle: createCursor('ds-markdown-cursor-circle'),
|
|
17
|
+
block: createCursor('ds-markdown-cursor-block'),
|
|
18
|
+
underline: createCursor('ds-markdown-cursor-underline'),
|
|
19
|
+
line: createCursor('ds-markdown-cursor-line'),
|
|
20
|
+
};
|
|
21
|
+
const MarkdownCMDInner = forwardRef(({ answerType = 'answer', timerType = 'requestAnimationFrame', cursor, showCursor, ...rest }, ref) => {
|
|
14
22
|
var _a, _b;
|
|
15
23
|
const { state: themeState } = useMarkdownThemeContext();
|
|
16
24
|
const cmdRef = useRef(null);
|
|
@@ -74,16 +82,32 @@ const MarkdownCMDInner = forwardRef(({ answerType = 'answer', timerType = 'reque
|
|
|
74
82
|
}
|
|
75
83
|
return markdownString;
|
|
76
84
|
}, [finalReplaceMathBracket, hasKatexPlugin, mathSplitSymbol]);
|
|
85
|
+
// Handle cursor prop: support string types or ReactNode
|
|
86
|
+
const _cursor = useMemo(() => {
|
|
87
|
+
if (!showCursor) {
|
|
88
|
+
return cursor;
|
|
89
|
+
}
|
|
90
|
+
// If cursor is not provided, use default 'line' style
|
|
91
|
+
if (!cursor) {
|
|
92
|
+
return cursorFactories.line();
|
|
93
|
+
}
|
|
94
|
+
// If cursor is a string type, get from cursorFactories and create new instance
|
|
95
|
+
if (typeof cursor === 'string' && cursor in cursorFactories) {
|
|
96
|
+
return cursorFactories[cursor]();
|
|
97
|
+
}
|
|
98
|
+
// Otherwise, use the provided cursor (ReactNode or string)
|
|
99
|
+
return cursor;
|
|
100
|
+
}, [cursor, showCursor]);
|
|
77
101
|
return (_jsx("div", { className: classNames({
|
|
78
102
|
'ds-markdown': true,
|
|
79
103
|
apple: true,
|
|
80
104
|
'ds-markdown-dark': currentTheme === 'dark',
|
|
81
|
-
}), children: _jsx("div", { className: `ds-markdown-${answerType}`, children: _jsx(MarkdownTyperCMD, { ref: cmdRef, timerType: timerType, customConvertMarkdownString: customConvertMarkdownString, ...rest, reactMarkdownProps: {
|
|
105
|
+
}), children: _jsx("div", { className: `ds-markdown-${answerType}`, children: _jsx(MarkdownTyperCMD, { ref: cmdRef, timerType: timerType, customConvertMarkdownString: customConvertMarkdownString, showCursor: showCursor, cursor: _cursor, ...rest, reactMarkdownProps: {
|
|
82
106
|
remarkPlugins,
|
|
83
107
|
rehypePlugins,
|
|
84
108
|
components: {
|
|
85
109
|
code: CodeComponent,
|
|
86
|
-
table: ({ children
|
|
110
|
+
table: ({ children }) => {
|
|
87
111
|
return (_jsx("div", { className: "markdown-table-wrapper", children: _jsx("table", { className: "ds-markdown-table", children: children }) }));
|
|
88
112
|
},
|
|
89
113
|
...components,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/MarkdownCMD/index.tsx"],"names":[],"mappings":";AAAA,uDAAuD;AACvD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AACtF,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,UAAU,MAAM,YAAY,CAAC;AAEpC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAA8C,MAAM,sBAAsB,CAAC;AACpG,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,aAAa,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AACvJ,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,aAAa,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/MarkdownCMD/index.tsx"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,6 @@ interface CodeBlockActionsProps {
|
|
|
3
3
|
codeContent?: string;
|
|
4
4
|
language: string;
|
|
5
5
|
}
|
|
6
|
-
declare const
|
|
7
|
-
export default
|
|
6
|
+
declare const _default: React.NamedExoticComponent<CodeBlockActionsProps>;
|
|
7
|
+
export default _default;
|
|
8
8
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/CodeComponent/CodeBlockActions/index.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/CodeComponent/CodeBlockActions/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAe,MAAM,OAAO,CAAC;AAOpC,UAAU,qBAAqB;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB;;AAWD,wBAAsC"}
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { memo } from 'react';
|
|
2
3
|
import CopyButton from '../../CopyButton/index.js';
|
|
3
4
|
import DownloadButton from '../../DownloadButton/index.js';
|
|
5
|
+
// Extract style constant to avoid creating new object on each render
|
|
6
|
+
const ACTION_BUTTON_STYLE = { fontSize: 13, padding: '0 4px' };
|
|
4
7
|
const CodeBlockActions = ({ codeContent, language }) => {
|
|
5
|
-
return (_jsxs("div", { className: "md-code-block-header-actions", children: [_jsx(CopyButton, { codeContent: codeContent, style:
|
|
8
|
+
return (_jsxs("div", { className: "md-code-block-header-actions", children: [_jsx(CopyButton, { codeContent: codeContent, style: ACTION_BUTTON_STYLE }), _jsx(DownloadButton, { codeContent: codeContent, language: language, style: ACTION_BUTTON_STYLE })] }));
|
|
6
9
|
};
|
|
7
|
-
export default CodeBlockActions;
|
|
10
|
+
export default memo(CodeBlockActions);
|
|
8
11
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/CodeComponent/CodeBlockActions/index.tsx"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/CodeComponent/CodeBlockActions/index.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,UAAU,MAAM,kBAAkB,CAAC;AAC1C,OAAO,cAAc,MAAM,sBAAsB,CAAC;AAElD,qEAAqE;AACrE,MAAM,mBAAmB,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AAO/D,MAAM,gBAAgB,GAAoC,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE,EAAE;IACtF,OAAO,CACL,eAAK,SAAS,EAAC,8BAA8B,aAC3C,KAAC,UAAU,IAAC,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,mBAAmB,GAAI,EACpE,KAAC,cAAc,IAAC,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,mBAAmB,GAAI,IACxF,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,IAAI,CAAC,gBAAgB,CAAC,CAAC"}
|
|
@@ -2,7 +2,8 @@ import React from 'react';
|
|
|
2
2
|
interface HighlightCodeProps {
|
|
3
3
|
code: string;
|
|
4
4
|
language: string;
|
|
5
|
+
cursorPlaceholder?: React.ReactElement | null;
|
|
5
6
|
}
|
|
6
|
-
declare const
|
|
7
|
-
export default
|
|
7
|
+
declare const _default: React.NamedExoticComponent<HighlightCodeProps>;
|
|
8
|
+
export default _default;
|
|
8
9
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/CodeComponent/HighlightCode/index.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/CodeComponent/HighlightCode/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAe,MAAM,OAAO,CAAC;AAMpC,UAAU,kBAAkB;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,CAAC,EAAE,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;CAC/C;;AAsBD,wBAAmC"}
|
|
@@ -1,7 +1,11 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
1
|
+
import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { memo } from 'react';
|
|
2
3
|
import { Prism as SyntaxHighlighter } from 'react-syntax-highlighter';
|
|
3
|
-
|
|
4
|
-
|
|
4
|
+
// Extract empty style object as constant to avoid creating new object on each render
|
|
5
|
+
const EMPTY_STYLE = {};
|
|
6
|
+
const HighlightCode = ({ code, language, cursorPlaceholder }) => {
|
|
7
|
+
console.log('code', code);
|
|
8
|
+
return (_jsx(SyntaxHighlighter, { useInlineStyles: false, language: language, style: EMPTY_STYLE, CodeTag: ({ children, ...props }) => (_jsxs("code", { ...props, children: [children, cursorPlaceholder && cursorPlaceholder] })), children: code }));
|
|
5
9
|
};
|
|
6
|
-
export default HighlightCode;
|
|
10
|
+
export default memo(HighlightCode);
|
|
7
11
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/CodeComponent/HighlightCode/index.tsx"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/CodeComponent/HighlightCode/index.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,EAAE,KAAK,IAAI,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAEtE,qFAAqF;AACrF,MAAM,WAAW,GAAG,EAAE,CAAC;AAQvB,MAAM,aAAa,GAAiC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,iBAAiB,EAAE,EAAE,EAAE;IAC5F,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC1B,OAAO,CACL,KAAC,iBAAiB,IAChB,eAAe,EAAE,KAAK,EACtB,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE,CAAC,CACnC,mBAAU,KAAK,aACZ,QAAQ,EAER,iBAAiB,IAAI,iBAAiB,IAClC,CACR,YAEA,IAAI,GACa,CACrB,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,IAAI,CAAC,aAAa,CAAC,CAAC"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import './index.css';
|
|
3
|
-
declare const
|
|
3
|
+
declare const _default: React.NamedExoticComponent<{
|
|
4
4
|
className: string;
|
|
5
|
-
children:
|
|
5
|
+
children: React.ReactNode;
|
|
6
6
|
}>;
|
|
7
|
-
export default
|
|
7
|
+
export default _default;
|
|
8
8
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/CodeComponent/index.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/CodeComponent/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAwB,MAAM,OAAO,CAAC;AAI7C,OAAO,cAAc,CAAC;;eA2DqB,MAAM;cAAY,KAAK,CAAC,SAAS;;AA6B5E,wBAAmC"}
|
|
@@ -1,11 +1,70 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import React, { memo, useMemo } from 'react';
|
|
2
3
|
import BlockWrap from './BlockWrap/index.js';
|
|
3
4
|
import HighlightCode from './HighlightCode/index.js';
|
|
4
5
|
import './index.css';
|
|
6
|
+
// Extract regex to avoid recompilation on each render
|
|
7
|
+
const LANGUAGE_REGEX = /language-(\w+)/;
|
|
8
|
+
// Helper function to extract string content from children, filtering out React elements
|
|
9
|
+
const extractStringContent = (children) => {
|
|
10
|
+
if (typeof children === 'string') {
|
|
11
|
+
return children;
|
|
12
|
+
}
|
|
13
|
+
if (typeof children === 'number') {
|
|
14
|
+
return String(children);
|
|
15
|
+
}
|
|
16
|
+
if (Array.isArray(children)) {
|
|
17
|
+
return children
|
|
18
|
+
.map(child => extractStringContent(child))
|
|
19
|
+
.join('');
|
|
20
|
+
}
|
|
21
|
+
// If it's a React element (like cursor), return empty string
|
|
22
|
+
if (React.isValidElement(children)) {
|
|
23
|
+
return '';
|
|
24
|
+
}
|
|
25
|
+
// Fallback to string conversion
|
|
26
|
+
return String(children || '');
|
|
27
|
+
};
|
|
28
|
+
// Helper function to check if element is a cursor placeholder from react-markdown-typer
|
|
29
|
+
const isCursorPlaceholder = (element) => {
|
|
30
|
+
const props = element.props;
|
|
31
|
+
return (props === null || props === void 0 ? void 0 : props['data-cursor-placeholder']) === 'true';
|
|
32
|
+
};
|
|
33
|
+
// Helper function to extract cursor placeholder from children
|
|
34
|
+
const extractCursorPlaceholder = (children) => {
|
|
35
|
+
if (React.isValidElement(children)) {
|
|
36
|
+
// Check if it's a cursor placeholder from react-markdown-typer
|
|
37
|
+
if (isCursorPlaceholder(children)) {
|
|
38
|
+
return children;
|
|
39
|
+
}
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
if (Array.isArray(children)) {
|
|
43
|
+
// Find the first cursor placeholder in the array
|
|
44
|
+
for (const child of children) {
|
|
45
|
+
const cursor = extractCursorPlaceholder(child);
|
|
46
|
+
if (cursor) {
|
|
47
|
+
return cursor;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return null;
|
|
52
|
+
};
|
|
5
53
|
const CodeComponent = ({ className, children = '' }) => {
|
|
6
|
-
const match =
|
|
7
|
-
const codeContent =
|
|
8
|
-
|
|
54
|
+
const match = useMemo(() => LANGUAGE_REGEX.exec(className || ''), [className]);
|
|
55
|
+
const codeContent = useMemo(() => extractStringContent(children).replace(/\n$/, ''), [children]);
|
|
56
|
+
const cursorPlaceholder = useMemo(() => extractCursorPlaceholder(children), [children]);
|
|
57
|
+
// For inline code, also filter out React elements (like cursor) to avoid "object Object" issue
|
|
58
|
+
const inlineCodeContent = useMemo(() => {
|
|
59
|
+
if (typeof children === 'string') {
|
|
60
|
+
return children;
|
|
61
|
+
}
|
|
62
|
+
return extractStringContent(children);
|
|
63
|
+
}, [children]);
|
|
64
|
+
if (match) {
|
|
65
|
+
return (_jsx(BlockWrap, { language: match[1], codeContent: codeContent, children: _jsx(HighlightCode, { code: codeContent, language: match[1], cursorPlaceholder: cursorPlaceholder }) }));
|
|
66
|
+
}
|
|
67
|
+
return (_jsxs("code", { className: className, children: [inlineCodeContent, cursorPlaceholder && cursorPlaceholder] }));
|
|
9
68
|
};
|
|
10
|
-
export default CodeComponent;
|
|
69
|
+
export default memo(CodeComponent);
|
|
11
70
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/CodeComponent/index.tsx"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/CodeComponent/index.tsx"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,6 @@ interface CopyButtonProps {
|
|
|
4
4
|
style?: React.CSSProperties;
|
|
5
5
|
className?: string;
|
|
6
6
|
}
|
|
7
|
-
declare const
|
|
8
|
-
export default
|
|
7
|
+
declare const _default: React.NamedExoticComponent<CopyButtonProps>;
|
|
8
|
+
export default _default;
|
|
9
9
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/CopyButton/index.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/CopyButton/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4B,MAAM,OAAO,CAAC;AAKjD,UAAU,eAAe;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;;AA4BD,wBAAgC"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { memo, useCallback } from 'react';
|
|
2
3
|
import { CopyIcon } from '../Icon/index.js';
|
|
3
4
|
import { useConfig } from '../../context/ConfigProvider/index.js';
|
|
4
5
|
import SuccessButton from '../ui/SuccessButton/index.js';
|
|
5
6
|
const CopyButton = ({ codeContent, style, className }) => {
|
|
6
7
|
const { locale } = useConfig();
|
|
7
|
-
const handleCopy = async () => {
|
|
8
|
+
const handleCopy = useCallback(async () => {
|
|
8
9
|
try {
|
|
9
10
|
await navigator.clipboard.writeText(codeContent || '');
|
|
10
11
|
return true;
|
|
@@ -13,12 +14,14 @@ const CopyButton = ({ codeContent, style, className }) => {
|
|
|
13
14
|
// Fallback: use traditional method
|
|
14
15
|
const textArea = document.createElement('textarea');
|
|
15
16
|
textArea.value = codeContent || '';
|
|
17
|
+
document.body.appendChild(textArea);
|
|
16
18
|
textArea.select();
|
|
17
19
|
document.execCommand('copy');
|
|
20
|
+
document.body.removeChild(textArea);
|
|
18
21
|
return true;
|
|
19
22
|
}
|
|
20
|
-
};
|
|
23
|
+
}, [codeContent]);
|
|
21
24
|
return (_jsx(SuccessButton, { onClick: handleCopy, icon: _jsx(CopyIcon, { size: 24 }), executeText: locale.codeBlock.copied || 'copied', style: style, className: className, children: locale.codeBlock.copy || 'copy' }));
|
|
22
25
|
};
|
|
23
|
-
export default CopyButton;
|
|
26
|
+
export default memo(CopyButton);
|
|
24
27
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/CopyButton/index.tsx"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/CopyButton/index.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,aAAa,MAAM,qBAAqB,CAAC;AAQhD,MAAM,UAAU,GAA8B,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE;IAClF,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,CAAC;IAE/B,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QACxC,IAAI,CAAC;YACH,MAAM,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;YACvD,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,mCAAmC;YACnC,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;YACpD,QAAQ,CAAC,KAAK,GAAG,WAAW,IAAI,EAAE,CAAC;YACnC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YACpC,QAAQ,CAAC,MAAM,EAAE,CAAC;YAClB,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAC7B,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YACpC,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IAElB,OAAO,CACL,KAAC,aAAa,IAAC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,KAAC,QAAQ,IAAC,IAAI,EAAE,EAAE,GAAI,EAAE,WAAW,EAAE,MAAM,CAAC,SAAS,CAAC,MAAM,IAAI,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,YACnJ,MAAM,CAAC,SAAS,CAAC,IAAI,IAAI,MAAM,GAClB,CACjB,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,IAAI,CAAC,UAAU,CAAC,CAAC"}
|
|
@@ -5,6 +5,6 @@ interface DownloadButtonProps {
|
|
|
5
5
|
style?: React.CSSProperties;
|
|
6
6
|
className?: string;
|
|
7
7
|
}
|
|
8
|
-
declare const
|
|
9
|
-
export default
|
|
8
|
+
declare const _default: React.NamedExoticComponent<DownloadButtonProps>;
|
|
9
|
+
export default _default;
|
|
10
10
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/DownloadButton/index.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/DownloadButton/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4B,MAAM,OAAO,CAAC;AA0CjD,UAAU,mBAAmB;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;;AAwCD,wBAAoC"}
|
|
@@ -1,61 +1,72 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { memo, useCallback } from 'react';
|
|
2
3
|
import { DownloadIcon } from '../Icon/index.js';
|
|
3
4
|
import { useConfig } from '../../context/ConfigProvider/index.js';
|
|
4
5
|
import SuccessButton from '../ui/SuccessButton/index.js';
|
|
6
|
+
// File extension mapping - extracted as constant
|
|
7
|
+
const FILE_EXTENSIONS = {
|
|
8
|
+
javascript: 'js',
|
|
9
|
+
typescript: 'ts',
|
|
10
|
+
jsx: 'jsx',
|
|
11
|
+
tsx: 'tsx',
|
|
12
|
+
python: 'py',
|
|
13
|
+
java: 'java',
|
|
14
|
+
cpp: 'cpp',
|
|
15
|
+
c: 'c',
|
|
16
|
+
csharp: 'cs',
|
|
17
|
+
php: 'php',
|
|
18
|
+
ruby: 'rb',
|
|
19
|
+
go: 'go',
|
|
20
|
+
rust: 'rs',
|
|
21
|
+
swift: 'swift',
|
|
22
|
+
kotlin: 'kt',
|
|
23
|
+
scala: 'scala',
|
|
24
|
+
shell: 'sh',
|
|
25
|
+
bash: 'sh',
|
|
26
|
+
powershell: 'ps1',
|
|
27
|
+
sql: 'sql',
|
|
28
|
+
html: 'html',
|
|
29
|
+
css: 'css',
|
|
30
|
+
scss: 'scss',
|
|
31
|
+
less: 'less',
|
|
32
|
+
json: 'json',
|
|
33
|
+
xml: 'xml',
|
|
34
|
+
yaml: 'yml',
|
|
35
|
+
markdown: 'md',
|
|
36
|
+
dockerfile: 'dockerfile',
|
|
37
|
+
};
|
|
38
|
+
const getFileExtension = (lang) => {
|
|
39
|
+
return FILE_EXTENSIONS[lang.toLowerCase()] || 'txt';
|
|
40
|
+
};
|
|
5
41
|
const DownloadButton = ({ codeContent, language, style, className }) => {
|
|
6
42
|
const { locale } = useConfig();
|
|
7
|
-
|
|
8
|
-
const handleDownload = async () => {
|
|
43
|
+
const handleDownload = useCallback(async () => {
|
|
9
44
|
if (!codeContent)
|
|
10
45
|
return false;
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
bash: 'sh',
|
|
35
|
-
powershell: 'ps1',
|
|
36
|
-
sql: 'sql',
|
|
37
|
-
html: 'html',
|
|
38
|
-
css: 'css',
|
|
39
|
-
scss: 'scss',
|
|
40
|
-
less: 'less',
|
|
41
|
-
json: 'json',
|
|
42
|
-
xml: 'xml',
|
|
43
|
-
yaml: 'yml',
|
|
44
|
-
markdown: 'md',
|
|
45
|
-
dockerfile: 'dockerfile',
|
|
46
|
-
};
|
|
47
|
-
return extensions[lang.toLowerCase()] || 'txt';
|
|
48
|
-
};
|
|
49
|
-
const fileName = `code.${getFileExtension(language)}`;
|
|
50
|
-
link.href = url;
|
|
51
|
-
link.download = fileName;
|
|
52
|
-
document.body.appendChild(link);
|
|
53
|
-
link.click();
|
|
54
|
-
document.body.removeChild(link);
|
|
55
|
-
URL.revokeObjectURL(url);
|
|
56
|
-
return true;
|
|
57
|
-
};
|
|
46
|
+
let url = null;
|
|
47
|
+
let link = null;
|
|
48
|
+
try {
|
|
49
|
+
const blob = new Blob([codeContent], { type: 'text/plain;charset=utf-8' });
|
|
50
|
+
url = URL.createObjectURL(blob);
|
|
51
|
+
link = document.createElement('a');
|
|
52
|
+
const fileName = `code.${getFileExtension(language)}`;
|
|
53
|
+
link.href = url;
|
|
54
|
+
link.download = fileName;
|
|
55
|
+
document.body.appendChild(link);
|
|
56
|
+
link.click();
|
|
57
|
+
return true;
|
|
58
|
+
}
|
|
59
|
+
finally {
|
|
60
|
+
// Ensure cleanup always runs
|
|
61
|
+
if (link && document.body.contains(link)) {
|
|
62
|
+
document.body.removeChild(link);
|
|
63
|
+
}
|
|
64
|
+
if (url) {
|
|
65
|
+
URL.revokeObjectURL(url);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}, [codeContent, language]);
|
|
58
69
|
return (_jsx(SuccessButton, { onClick: handleDownload, icon: _jsx(DownloadIcon, { size: 24 }), executeText: locale.codeBlock.downloaded || 'Downloaded', style: style, className: className, children: locale.codeBlock.download || 'Download' }));
|
|
59
70
|
};
|
|
60
|
-
export default DownloadButton;
|
|
71
|
+
export default memo(DownloadButton);
|
|
61
72
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/DownloadButton/index.tsx"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/DownloadButton/index.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/SuccessButton/index.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/SuccessButton/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmD,MAAM,OAAO,CAAC;AACxE,OAAO,MAAM,MAAM,iBAAiB,CAAC;AAIrC,KAAK,WAAW,GAAG,KAAK,CAAC,cAAc,CAAC,OAAO,MAAM,CAAC,CAAC;AAEvD,UAAU,kBAAmB,SAAQ,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC;IAC/D,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,OAAO,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,QAAA,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CA+C/C,CAAC;AAEF,eAAe,aAAa,CAAC"}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { useEffect, useRef, useState } from 'react';
|
|
2
|
+
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
3
3
|
import Button from '../../ui/Button/index.js';
|
|
4
4
|
import { CheckMarkIcon } from '../../Icon/index.js';
|
|
5
5
|
const SuccessButton = (props) => {
|
|
6
6
|
const { onClick, icon, executeText, children, ...rest } = props;
|
|
7
7
|
const [isLoading, setIsLoading] = useState(false);
|
|
8
8
|
const [isSuccess, setIsSuccess] = useState(false);
|
|
9
|
-
const
|
|
10
|
-
const handleClick = async () => {
|
|
9
|
+
const timerRef = useRef(null);
|
|
10
|
+
const handleClick = useCallback(async () => {
|
|
11
11
|
if (isLoading || isSuccess) {
|
|
12
12
|
return;
|
|
13
13
|
}
|
|
@@ -19,11 +19,6 @@ const SuccessButton = (props) => {
|
|
|
19
19
|
const result = await returnValue;
|
|
20
20
|
if (result) {
|
|
21
21
|
setIsSuccess(true);
|
|
22
|
-
setTimeout(() => {
|
|
23
|
-
if (!isUnmounted.current) {
|
|
24
|
-
setIsSuccess(false);
|
|
25
|
-
}
|
|
26
|
-
}, 1000);
|
|
27
22
|
}
|
|
28
23
|
}
|
|
29
24
|
}
|
|
@@ -33,13 +28,21 @@ const SuccessButton = (props) => {
|
|
|
33
28
|
finally {
|
|
34
29
|
setIsLoading(false);
|
|
35
30
|
}
|
|
36
|
-
};
|
|
31
|
+
}, [isLoading, isSuccess, onClick]);
|
|
32
|
+
// Handle success state timeout with proper cleanup
|
|
37
33
|
useEffect(() => {
|
|
38
|
-
|
|
34
|
+
if (isSuccess) {
|
|
35
|
+
timerRef.current = setTimeout(() => {
|
|
36
|
+
setIsSuccess(false);
|
|
37
|
+
}, 1000);
|
|
38
|
+
}
|
|
39
39
|
return () => {
|
|
40
|
-
|
|
40
|
+
if (timerRef.current) {
|
|
41
|
+
clearTimeout(timerRef.current);
|
|
42
|
+
timerRef.current = null;
|
|
43
|
+
}
|
|
41
44
|
};
|
|
42
|
-
}, []);
|
|
45
|
+
}, [isSuccess]);
|
|
43
46
|
return (_jsx(Button, { ...rest, onClick: handleClick, icon: isSuccess ? _jsx(CheckMarkIcon, { size: 24 }) : icon, children: isSuccess ? executeText || children : children }));
|
|
44
47
|
};
|
|
45
48
|
export default SuccessButton;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/ui/SuccessButton/index.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/ui/SuccessButton/index.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACxE,OAAO,MAAM,MAAM,iBAAiB,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAW3C,MAAM,aAAa,GAAiC,CAAC,KAAyB,EAAE,EAAE;IAChF,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC;IAChE,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,QAAQ,GAAG,MAAM,CAAuC,IAAI,CAAC,CAAC;IAEpE,MAAM,WAAW,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QACzC,IAAI,SAAS,IAAI,SAAS,EAAE,CAAC;YAC3B,OAAO;QACT,CAAC;QACD,IAAI,CAAC;YACH,yCAAyC;YACzC,MAAM,WAAW,GAAG,OAAO,EAAE,CAAC;YAC9B,IAAI,WAAW,YAAY,OAAO,EAAE,CAAC;gBACnC,YAAY,CAAC,IAAI,CAAC,CAAC;gBACnB,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC;gBACjC,IAAI,MAAM,EAAE,CAAC;oBACX,YAAY,CAAC,IAAI,CAAC,CAAC;gBACrB,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,YAAY,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;IACH,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;IAEpC,mDAAmD;IACnD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,SAAS,EAAE,CAAC;YACd,QAAQ,CAAC,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;gBACjC,YAAY,CAAC,KAAK,CAAC,CAAC;YACtB,CAAC,EAAE,IAAI,CAAC,CAAC;QACX,CAAC;QACD,OAAO,GAAG,EAAE;YACV,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;gBACrB,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;gBAC/B,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC;YAC1B,CAAC;QACH,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhB,OAAO,CACL,KAAC,MAAM,OAAK,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,KAAC,aAAa,IAAC,IAAI,EAAE,EAAE,GAAI,CAAC,CAAC,CAAC,IAAI,YACzF,SAAS,CAAC,CAAC,CAAC,WAAW,IAAI,QAAQ,CAAC,CAAC,CAAC,QAAQ,GACxC,CACV,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,aAAa,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarkdownProvider.d.ts","sourceRoot":"","sources":["../../src/context/MarkdownProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"MarkdownProvider.d.ts","sourceRoot":"","sources":["../../src/context/MarkdownProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoC,MAAM,OAAO,CAAC;AACzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAGpD,MAAM,MAAM,mBAAmB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAI7D,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC;IACtC,KAAK,EAAE,mBAAmB,CAAC;IAC3B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,CAGA,CAAC;AAGF,eAAO,MAAM,kBAAkB,kCAAoC,CAAC"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { createContext, useContext
|
|
2
|
+
import { createContext, useContext } from 'react';
|
|
3
3
|
const MarkdownContext = createContext({});
|
|
4
4
|
export const MarkdownProvider = ({ value, children }) => {
|
|
5
|
-
|
|
6
|
-
return _jsx(MarkdownContext.Provider, { value:
|
|
5
|
+
// Removed unnecessary useMemo - the value is already memoized by the parent component
|
|
6
|
+
return _jsx(MarkdownContext.Provider, { value: value, children: children });
|
|
7
7
|
};
|
|
8
8
|
// eslint-disable-next-line react-refresh/only-export-components
|
|
9
9
|
export const useMarkdownContext = () => useContext(MarkdownContext);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarkdownProvider.js","sourceRoot":"","sources":["../../src/context/MarkdownProvider.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,aAAa,EAAE,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"MarkdownProvider.js","sourceRoot":"","sources":["../../src/context/MarkdownProvider.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAMzD,MAAM,eAAe,GAAG,aAAa,CAAsB,EAAE,CAAC,CAAC;AAE/D,MAAM,CAAC,MAAM,gBAAgB,GAGxB,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE;IAC3B,sFAAsF;IACtF,OAAO,KAAC,eAAe,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,YAAG,QAAQ,GAA4B,CAAC;AACvF,CAAC,CAAC;AAEF,gEAAgE;AAChE,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC"}
|
package/es/defined/index.d.ts
CHANGED
|
@@ -34,6 +34,7 @@ export interface MarkdownBaseProps extends MarkdownTyperBaseProps {
|
|
|
34
34
|
}
|
|
35
35
|
export interface MarkdownProps extends MarkdownTyperBaseProps, IMarkdownThemeProps {
|
|
36
36
|
children: string | undefined;
|
|
37
|
+
cursor?: React.ReactNode | string | 'circle' | 'block' | 'underline' | 'line';
|
|
37
38
|
}
|
|
38
39
|
/** MarkdownCMD component does not need children */
|
|
39
40
|
export interface MarkdownCMDProps extends MarkdownTyperBaseProps, IMarkdownThemeProps {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/defined/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,OAAO,MAAM,gBAAgB,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAErC,OAAO,KAAK,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAG/F;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,UAAU,CAAC;AAE/C,MAAM,MAAM,KAAK,GAAG,OAAO,GAAG,MAAM,CAAC;AAErC,MAAM,WAAW,mBAAmB;IAClC,YAAY;IACZ,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,iCAAiC;IACjC,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,+BAA+B;IAC/B,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,2BAA2B;IAC3B,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;IAC5B,kBAAkB;IAClB,UAAU,CAAC,EAAE,UAAU,GAAG,QAAQ,CAAC;CACpC;AAED,MAAM,WAAW,wBAAyB,SAAQ,mBAAmB;IACnE,KAAK,EAAE,KAAK,CAAC;IACb,UAAU,EAAE,UAAU,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC;CAC3C;AAED,MAAM,WAAW,iBAAkB,SAAQ,sBAAsB;CAAG;AAEpE,MAAM,WAAW,aAAc,SAAQ,sBAAsB,EAAE,mBAAmB;IAChF,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/defined/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,OAAO,MAAM,gBAAgB,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAErC,OAAO,KAAK,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAG/F;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,UAAU,CAAC;AAE/C,MAAM,MAAM,KAAK,GAAG,OAAO,GAAG,MAAM,CAAC;AAErC,MAAM,WAAW,mBAAmB;IAClC,YAAY;IACZ,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,iCAAiC;IACjC,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,+BAA+B;IAC/B,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,2BAA2B;IAC3B,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;IAC5B,kBAAkB;IAClB,UAAU,CAAC,EAAE,UAAU,GAAG,QAAQ,CAAC;CACpC;AAED,MAAM,WAAW,wBAAyB,SAAQ,mBAAmB;IACnE,KAAK,EAAE,KAAK,CAAC;IACb,UAAU,EAAE,UAAU,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC;CAC3C;AAED,MAAM,WAAW,iBAAkB,SAAQ,sBAAsB;CAAG;AAEpE,MAAM,WAAW,aAAc,SAAQ,sBAAsB,EAAE,mBAAmB;IAChF,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,WAAW,GAAG,MAAM,CAAC;CAC/E;AAED,mDAAmD;AACnD,MAAM,WAAW,gBAAiB,SAAQ,sBAAsB,EAAE,mBAAmB;IACnF,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,IAAI,EAAE,SAAS,GAAG,QAAQ,CAAC;IAE3B,EAAE,CAAC,EAAE,GAAG,CAAC;IACT,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;CAC3D;AAED,MAAM,WAAW,aAAa;IAC5B,8DAA8D;IAC9D,WAAW,EAAE,SAAS,GAAG,QAAQ,CAAC;IAClC,wCAAwC;IACxC,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;CAChD;AAED,kCAAkC;AAClC,MAAM,MAAM,WAAW,GAAG,eAAe,CAAC;AAE1C,qCAAqC;AACrC,MAAM,WAAW,cAAe,SAAQ,eAAe;IACrD,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC;IACzD,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,eAAe,EAAE,MAAM,IAAI,CAAC;CAC7B;AACD,MAAM,WAAW,sBAAuB,SAAQ,OAAO,CAAC,aAAa;IACnE;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,IAAI,EAAE;QAAE,QAAQ,EAAE,UAAU,CAAA;KAAE,KAAK,KAAK,CAAC,SAAS,CAAC,CAAC;CACnG;AAED,MAAM,WAAW,oBAAqB,SAAQ,YAAY;CAAG"}
|
package/es/index.css
CHANGED
|
@@ -328,3 +328,47 @@ ds-markdown-math {
|
|
|
328
328
|
.ds-button.ds-icon-button .ds-button__icon {
|
|
329
329
|
margin-right: 0;
|
|
330
330
|
}
|
|
331
|
+
@keyframes ds-cursor-blink {
|
|
332
|
+
0%,
|
|
333
|
+
50% {
|
|
334
|
+
opacity: 1;
|
|
335
|
+
}
|
|
336
|
+
51%,
|
|
337
|
+
100% {
|
|
338
|
+
opacity: 0;
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
.ds-markdown-cursor,
|
|
342
|
+
.ds-markdown-cursor-line,
|
|
343
|
+
.ds-markdown-cursor-block,
|
|
344
|
+
.ds-markdown-cursor-underline,
|
|
345
|
+
.ds-markdown-cursor-circle {
|
|
346
|
+
display: inline-block;
|
|
347
|
+
margin-left: 2px;
|
|
348
|
+
vertical-align: middle;
|
|
349
|
+
animation: ds-cursor-blink 1s infinite;
|
|
350
|
+
background-color: rgb(var(--ds-rgb-label-1));
|
|
351
|
+
}
|
|
352
|
+
.ds-markdown-cursor,
|
|
353
|
+
.ds-markdown-cursor-line {
|
|
354
|
+
width: 2px;
|
|
355
|
+
height: 1.2em;
|
|
356
|
+
}
|
|
357
|
+
.ds-markdown-cursor-block {
|
|
358
|
+
width: 0.6em;
|
|
359
|
+
height: 1em;
|
|
360
|
+
border-radius: 2px;
|
|
361
|
+
}
|
|
362
|
+
.ds-markdown-cursor-underline {
|
|
363
|
+
width: 0.8em;
|
|
364
|
+
height: 2px;
|
|
365
|
+
margin-bottom: -2px;
|
|
366
|
+
vertical-align: baseline;
|
|
367
|
+
}
|
|
368
|
+
.ds-markdown-cursor-circle {
|
|
369
|
+
width: 0.5em;
|
|
370
|
+
height: 0.5em;
|
|
371
|
+
border-radius: 50%;
|
|
372
|
+
margin-left: 3px;
|
|
373
|
+
margin-right: 1px;
|
|
374
|
+
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ds-markdown",
|
|
3
3
|
"private": false,
|
|
4
|
-
"version": "1.0.
|
|
4
|
+
"version": "1.0.5-beta.0",
|
|
5
5
|
"main": "./dist/esm/index.js",
|
|
6
6
|
"module": "./dist/esm/index.js",
|
|
7
7
|
"style": "./dist/style.css",
|
|
@@ -77,7 +77,7 @@
|
|
|
77
77
|
"classnames": "^2.5.1",
|
|
78
78
|
"katex": "^0.16.22",
|
|
79
79
|
"react-markdown": "^10.1.0",
|
|
80
|
-
"react-markdown-typer": "^1.0.
|
|
80
|
+
"react-markdown-typer": "^1.0.4-beta.0",
|
|
81
81
|
"react-router-dom": "^7.7.1",
|
|
82
82
|
"react-syntax-highlighter": "^15.6.1",
|
|
83
83
|
"rehype-katex": "^7.0.1",
|
|
@@ -156,6 +156,6 @@
|
|
|
156
156
|
"react-markdown"
|
|
157
157
|
],
|
|
158
158
|
"publishConfig": {
|
|
159
|
-
"tag": "
|
|
159
|
+
"tag": "beta"
|
|
160
160
|
}
|
|
161
161
|
}
|