ds-markdown 1.0.4 → 1.0.5-beta.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.
Files changed (39) hide show
  1. package/README.md +36 -0
  2. package/README.zh.md +36 -0
  3. package/es/AutoScroll/index.d.ts.map +1 -1
  4. package/es/AutoScroll/index.js +2 -3
  5. package/es/AutoScroll/index.js.map +1 -1
  6. package/es/MarkdownCMD/index.d.ts +1 -0
  7. package/es/MarkdownCMD/index.d.ts.map +1 -1
  8. package/es/MarkdownCMD/index.js +27 -3
  9. package/es/MarkdownCMD/index.js.map +1 -1
  10. package/es/components/CodeComponent/CodeBlockActions/index.d.ts +2 -2
  11. package/es/components/CodeComponent/CodeBlockActions/index.d.ts.map +1 -1
  12. package/es/components/CodeComponent/CodeBlockActions/index.js +5 -2
  13. package/es/components/CodeComponent/CodeBlockActions/index.js.map +1 -1
  14. package/es/components/CodeComponent/HighlightCode/index.d.ts +3 -2
  15. package/es/components/CodeComponent/HighlightCode/index.d.ts.map +1 -1
  16. package/es/components/CodeComponent/HighlightCode/index.js +8 -4
  17. package/es/components/CodeComponent/HighlightCode/index.js.map +1 -1
  18. package/es/components/CodeComponent/index.d.ts +3 -3
  19. package/es/components/CodeComponent/index.d.ts.map +1 -1
  20. package/es/components/CodeComponent/index.js +64 -5
  21. package/es/components/CodeComponent/index.js.map +1 -1
  22. package/es/components/CopyButton/index.d.ts +2 -2
  23. package/es/components/CopyButton/index.d.ts.map +1 -1
  24. package/es/components/CopyButton/index.js +6 -3
  25. package/es/components/CopyButton/index.js.map +1 -1
  26. package/es/components/DownloadButton/index.d.ts +2 -2
  27. package/es/components/DownloadButton/index.d.ts.map +1 -1
  28. package/es/components/DownloadButton/index.js +61 -50
  29. package/es/components/DownloadButton/index.js.map +1 -1
  30. package/es/components/ui/SuccessButton/index.d.ts.map +1 -1
  31. package/es/components/ui/SuccessButton/index.js +15 -12
  32. package/es/components/ui/SuccessButton/index.js.map +1 -1
  33. package/es/context/MarkdownProvider.d.ts.map +1 -1
  34. package/es/context/MarkdownProvider.js +3 -3
  35. package/es/context/MarkdownProvider.js.map +1 -1
  36. package/es/defined/index.d.ts +1 -0
  37. package/es/defined/index.d.ts.map +1 -1
  38. package/es/index.css +44 -0
  39. package/package.json +3 -3
package/README.md CHANGED
@@ -93,6 +93,40 @@ function App() {
93
93
  }
94
94
  ```
95
95
 
96
+ ### Typing Cursor Examples
97
+
98
+ ```tsx
99
+ // Show default line cursor
100
+ <DsMarkdown showCursor>
101
+ Your markdown content here...
102
+ </DsMarkdown>
103
+
104
+ // Use built-in cursor styles
105
+ <DsMarkdown showCursor cursor="block">
106
+ Your markdown content...
107
+ </DsMarkdown>
108
+
109
+ <DsMarkdown showCursor cursor="underline">
110
+ Your markdown content...
111
+ </DsMarkdown>
112
+
113
+ <DsMarkdown showCursor cursor="circle">
114
+ Your markdown content...
115
+ </DsMarkdown>
116
+
117
+ // Custom cursor element
118
+ <DsMarkdown showCursor cursor={<span style={{ color: 'red' }}>|</span>}>
119
+ Your markdown content...
120
+ </DsMarkdown>
121
+ ```
122
+
123
+ **Available cursor types:**
124
+ - `line` - Vertical line (default)
125
+ - `block` - Filled block
126
+ - `underline` - Horizontal underline
127
+ - `circle` - Circular dot
128
+ - Custom `React.ReactNode` - Any custom React element
129
+
96
130
  ## Core API Documentation
97
131
 
98
132
  For detailed documentation, please visit: [Full Documentation](https://onshinpei.github.io/ds-markdown/#get-started)
@@ -111,6 +145,8 @@ import DsMarkdown, { MarkdownCMD } from 'ds-markdown';
111
145
  | `theme` | `'light'` \| `'dark'` | Theme type | `'light'` |
112
146
  | `plugins` | `IMarkdownPlugin[]` | Plugin configuration | `[]` |
113
147
  | `math` | `IMarkdownMath` | Mathematical formula configuration | `{ splitSymbol: 'dollar' }` |
148
+ | `showCursor` | `boolean` | Whether to show typing cursor during animation | `false` |
149
+ | `cursor` | `React.ReactNode` \| `'line'` \| `'block'` \| `'underline'` \| `'circle'` | Custom cursor element or built-in cursor type | `'line'` (when `showCursor` is `true`) |
114
150
  | `onEnd` | `(data: EndData) => void` | Typing completion callback | - |
115
151
  | `onStart` | `(data: StartData) => void` | Typing start callback | - |
116
152
  | `onBeforeTypedChar` | `(data: IBeforeTypedChar) => Promise<void>` | Callback before character typing, supports async operations, blocks subsequent typing | - |
package/README.zh.md CHANGED
@@ -93,6 +93,40 @@ function App() {
93
93
  }
94
94
  ```
95
95
 
96
+ ### 打字光标示例
97
+
98
+ ```tsx
99
+ // 显示默认竖线光标
100
+ <DsMarkdown showCursor>
101
+ 这里是你的 markdown 内容...
102
+ </DsMarkdown>
103
+
104
+ // 使用内置光标样式
105
+ <DsMarkdown showCursor cursor="block">
106
+ 你的 markdown 内容...
107
+ </DsMarkdown>
108
+
109
+ <DsMarkdown showCursor cursor="underline">
110
+ 你的 markdown 内容...
111
+ </DsMarkdown>
112
+
113
+ <DsMarkdown showCursor cursor="circle">
114
+ 你的 markdown 内容...
115
+ </DsMarkdown>
116
+
117
+ // 自定义光标元素
118
+ <DsMarkdown showCursor cursor={<span style={{ color: 'red' }}>|</span>}>
119
+ 你的 markdown 内容...
120
+ </DsMarkdown>
121
+ ```
122
+
123
+ **可用的光标类型:**
124
+ - `line` - 竖线(默认)
125
+ - `block` - 实心块
126
+ - `underline` - 下划线
127
+ - `circle` - 圆点
128
+ - 自定义 `React.ReactNode` - 任何自定义的 React 元素
129
+
96
130
  ## 核心API文档
97
131
 
98
132
  详细文档可查看:[完整文档](https://onshinpei.github.io/ds-markdown/#get-started)
@@ -111,6 +145,8 @@ import DsMarkdown, { MarkdownCMD } from 'ds-markdown';
111
145
  | `theme` | `'light'` \| `'dark'` | 主题类型 | `'light'` |
112
146
  | `plugins` | `IMarkdownPlugin[]` | 插件配置 | `[]` |
113
147
  | `math` | `IMarkdownMath` | 数学公式配置 | `{ splitSymbol: 'dollar' }` |
148
+ | `showCursor` | `boolean` | 打字动画时是否显示光标 | `false` |
149
+ | `cursor` | `React.ReactNode` \| `'line'` \| `'block'` \| `'underline'` \| `'circle'` | 自定义光标元素或内置光标类型 | `'line'` (当 `showCursor` 为 `true` 时) |
114
150
  | `onEnd` | `(data: EndData) => void` | 打字结束回调 | - |
115
151
  | `onStart` | `(data: StartData) => void` | 打字开始回调 | - |
116
152
  | `onBeforeTypedChar` | `(data: IBeforeTypedChar) => Promise<void>` | 字符打字前的回调,支持异步操作,会阻塞之后的打字 | - |
@@ -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;AAGD,QAAA,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CAEzC,CAAC;AAEF,eAAe,UAAU,CAAC"}
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"}
@@ -1,7 +1,6 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- const modulePrefix = 'AutoScroll';
3
- const AutoScroll = (props) => {
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,YAAY,GAAG,YAAY,CAAC;AAClC,MAAM,UAAU,GAA8B,CAAC,KAAsB,EAAE,EAAE;IACvE,OAAO,cAAK,SAAS,EAAC,yBAAyB,YAAE,KAAK,CAAC,QAAQ,GAAO,CAAC;AACzE,CAAC,CAAC;AAEF,eAAe,UAAU,CAAC"}
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;CACzB;AAoHD,QAAA,MAAM,WAAW,oIAsCf,CAAC;AAEH,eAAe,WAAW,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"}
@@ -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
- const MarkdownCMDInner = forwardRef(({ answerType = 'answer', timerType = 'requestAnimationFrame', ...rest }, ref) => {
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, ...props }) => {
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":"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"}
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 CodeBlockActions: React.FC<CodeBlockActionsProps>;
7
- export default CodeBlockActions;
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,KAAK,MAAM,OAAO,CAAC;AAI1B,UAAU,qBAAqB;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,QAAA,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CAOrD,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
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: { fontSize: 13, padding: '0 4px' } }), _jsx(DownloadButton, { codeContent: codeContent, language: language, style: { fontSize: 13, padding: '0 4px' } })] }));
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":";AACA,OAAO,UAAU,MAAM,kBAAkB,CAAC;AAC1C,OAAO,cAAc,MAAM,sBAAsB,CAAC;AAOlD,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,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,GAAI,EACnF,KAAC,cAAc,IAAC,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,GAAI,IACvG,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
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 HighlightCode: React.FC<HighlightCodeProps>;
7
- export default HighlightCode;
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,KAAK,MAAM,OAAO,CAAC;AAG1B,UAAU,kBAAkB;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,QAAA,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAM/C,CAAC;AAEF,eAAe,aAAa,CAAC"}
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
- const HighlightCode = ({ code, language }) => {
4
- return (_jsx(SyntaxHighlighter, { useInlineStyles: false, language: language, style: {}, children: code }));
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":";AACA,OAAO,EAAE,KAAK,IAAI,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAOtE,MAAM,aAAa,GAAiC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE;IACzE,OAAO,CACL,KAAC,iBAAiB,IAAC,eAAe,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,YACrE,IAAI,GACa,CACrB,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,aAAa,CAAC"}
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 CodeComponent: React.FC<{
3
+ declare const _default: React.NamedExoticComponent<{
4
4
  className: string;
5
- children: string;
5
+ children: React.ReactNode;
6
6
  }>;
7
- export default CodeComponent;
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,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,cAAc,CAAC;AAEtB,QAAA,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAUpE,CAAC;AACF,eAAe,aAAa,CAAC"}
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 = /language-(\w+)/.exec(className || '');
7
- const codeContent = String(children).replace(/\n$/, '');
8
- return match ? (_jsx(BlockWrap, { language: match[1], codeContent: codeContent, children: _jsx(HighlightCode, { code: codeContent, language: match[1] }) })) : (_jsx("code", { className: className, children: children }));
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":";AACA,OAAO,SAAS,MAAM,aAAa,CAAC;AACpC,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAE5C,OAAO,cAAc,CAAC;AAEtB,MAAM,aAAa,GAAsD,CAAC,EAAE,SAAS,EAAE,QAAQ,GAAG,EAAE,EAAE,EAAE,EAAE;IACxG,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;IACrD,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACxD,OAAO,KAAK,CAAC,CAAC,CAAC,CACb,KAAC,SAAS,IAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,WAAW,YACrD,KAAC,aAAa,IAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,GAAI,GAC9C,CACb,CAAC,CAAC,CAAC,CACF,eAAM,SAAS,EAAE,SAAS,YAAG,QAAQ,GAAQ,CAC9C,CAAC;AACJ,CAAC,CAAC;AACF,eAAe,aAAa,CAAC"}
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 CopyButton: React.FC<CopyButtonProps>;
8
- export default CopyButton;
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,KAAoB,MAAM,OAAO,CAAC;AAKzC,UAAU,eAAe;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,QAAA,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CAqBzC,CAAC;AAEF,eAAe,UAAU,CAAC"}
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":";AACA,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;IAC/B,MAAM,UAAU,GAAG,KAAK,IAAI,EAAE;QAC5B,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,MAAM,EAAE,CAAC;YAClB,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAC7B,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC,CAAC;IAEF,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,UAAU,CAAC"}
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 DownloadButton: React.FC<DownloadButtonProps>;
9
- export default DownloadButton;
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,KAAK,MAAM,OAAO,CAAC;AAK1B,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;AAED,QAAA,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CA6DjD,CAAC;AAEF,eAAe,cAAc,CAAC"}
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
- // Download file
8
- const handleDownload = async () => {
43
+ const handleDownload = useCallback(async () => {
9
44
  if (!codeContent)
10
45
  return false;
11
- const blob = new Blob([codeContent], { type: 'text/plain;charset=utf-8' });
12
- const url = URL.createObjectURL(blob);
13
- const link = document.createElement('a');
14
- // Set file extension based on language
15
- const getFileExtension = (lang) => {
16
- const extensions = {
17
- javascript: 'js',
18
- typescript: 'ts',
19
- jsx: 'jsx',
20
- tsx: 'tsx',
21
- python: 'py',
22
- java: 'java',
23
- cpp: 'cpp',
24
- c: 'c',
25
- csharp: 'cs',
26
- php: 'php',
27
- ruby: 'rb',
28
- go: 'go',
29
- rust: 'rs',
30
- swift: 'swift',
31
- kotlin: 'kt',
32
- scala: 'scala',
33
- shell: 'sh',
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":";AACA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,aAAa,MAAM,qBAAqB,CAAC;AAShD,MAAM,cAAc,GAAkC,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE;IACpG,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,CAAC;IAC/B,gBAAgB;IAChB,MAAM,cAAc,GAAG,KAAK,IAAI,EAAE;QAChC,IAAI,CAAC,WAAW;YAAE,OAAO,KAAK,CAAC;QAE/B,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,WAAW,CAAC,EAAE,EAAE,IAAI,EAAE,0BAA0B,EAAE,CAAC,CAAC;QAC3E,MAAM,GAAG,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QACtC,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QAEzC,uCAAuC;QACvC,MAAM,gBAAgB,GAAG,CAAC,IAAY,EAAE,EAAE;YACxC,MAAM,UAAU,GAA2B;gBACzC,UAAU,EAAE,IAAI;gBAChB,UAAU,EAAE,IAAI;gBAChB,GAAG,EAAE,KAAK;gBACV,GAAG,EAAE,KAAK;gBACV,MAAM,EAAE,IAAI;gBACZ,IAAI,EAAE,MAAM;gBACZ,GAAG,EAAE,KAAK;gBACV,CAAC,EAAE,GAAG;gBACN,MAAM,EAAE,IAAI;gBACZ,GAAG,EAAE,KAAK;gBACV,IAAI,EAAE,IAAI;gBACV,EAAE,EAAE,IAAI;gBACR,IAAI,EAAE,IAAI;gBACV,KAAK,EAAE,OAAO;gBACd,MAAM,EAAE,IAAI;gBACZ,KAAK,EAAE,OAAO;gBACd,KAAK,EAAE,IAAI;gBACX,IAAI,EAAE,IAAI;gBACV,UAAU,EAAE,KAAK;gBACjB,GAAG,EAAE,KAAK;gBACV,IAAI,EAAE,MAAM;gBACZ,GAAG,EAAE,KAAK;gBACV,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,MAAM;gBACZ,GAAG,EAAE,KAAK;gBACV,IAAI,EAAE,KAAK;gBACX,QAAQ,EAAE,IAAI;gBACd,UAAU,EAAE,YAAY;aACzB,CAAC;YACF,OAAO,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,KAAK,CAAC;QACjD,CAAC,CAAC;QAEF,MAAM,QAAQ,GAAG,QAAQ,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtD,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;QAChB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAChC,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IAEF,OAAO,CACL,KAAC,aAAa,IAAC,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,KAAC,YAAY,IAAC,IAAI,EAAE,EAAE,GAAI,EAAE,WAAW,EAAE,MAAM,CAAC,SAAS,CAAC,UAAU,IAAI,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,YACnK,MAAM,CAAC,SAAS,CAAC,QAAQ,IAAI,UAAU,GAC1B,CACjB,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,cAAc,CAAC"}
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,KAAsC,MAAM,OAAO,CAAC;AAC3D,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,CA2C/C,CAAC;AAEF,eAAe,aAAa,CAAC"}
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 isUnmounted = useRef(false);
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
- isUnmounted.current = false;
34
+ if (isSuccess) {
35
+ timerRef.current = setTimeout(() => {
36
+ setIsSuccess(false);
37
+ }, 1000);
38
+ }
39
39
  return () => {
40
- isUnmounted.current = true;
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;AAC3D,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,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,WAAW,GAAG,KAAK,IAAI,EAAE;QAC7B,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;oBACnB,UAAU,CAAC,GAAG,EAAE;wBACd,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;4BACzB,YAAY,CAAC,KAAK,CAAC,CAAC;wBACtB,CAAC;oBACH,CAAC,EAAE,IAAI,CAAC,CAAC;gBACX,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,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE;QACb,WAAW,CAAC,OAAO,GAAG,KAAK,CAAC;QAC5B,OAAO,GAAG,EAAE;YACV,WAAW,CAAC,OAAO,GAAG,IAAI,CAAC;QAC7B,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,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
+ {"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,KAA6C,MAAM,OAAO,CAAC;AAClE,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
+ {"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, useMemo } from 'react';
2
+ import { createContext, useContext } from 'react';
3
3
  const MarkdownContext = createContext({});
4
4
  export const MarkdownProvider = ({ value, children }) => {
5
- const contextValue = useMemo(() => value, [value]);
6
- return _jsx(MarkdownContext.Provider, { value: contextValue, children: children });
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,OAAO,EAAE,MAAM,OAAO,CAAC;AAMlE,MAAM,eAAe,GAAG,aAAa,CAAsB,EAAE,CAAC,CAAC;AAE/D,MAAM,CAAC,MAAM,gBAAgB,GAGxB,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE;IAC3B,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IACnD,OAAO,KAAC,eAAe,CAAC,QAAQ,IAAC,KAAK,EAAE,YAAY,YAAG,QAAQ,GAA4B,CAAC;AAC9F,CAAC,CAAC;AAEF,gEAAgE;AAChE,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC"}
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"}
@@ -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;CAC9B;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"}
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",
4
+ "version": "1.0.5-beta.1",
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.3",
80
+ "react-markdown-typer": "^1.0.4-beta.1",
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": "latest"
159
+ "tag": "beta"
160
160
  }
161
161
  }