@lobehub/ui 2.15.4 → 2.15.5
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/CopyButton/CopyButton.js +6 -4
- package/es/CopyButton/type.d.ts +2 -2
- package/es/Highlighter/FullFeatured.js +96 -51
- package/es/Highlighter/Highlighter.js +44 -25
- package/es/Highlighter/SyntaxHighlighter/StaticRenderer.d.ts +17 -0
- package/es/Highlighter/SyntaxHighlighter/StaticRenderer.js +36 -0
- package/es/Highlighter/SyntaxHighlighter/StreamRenderer.d.ts +13 -0
- package/es/Highlighter/SyntaxHighlighter/StreamRenderer.js +147 -0
- package/es/Highlighter/SyntaxHighlighter/index.js +36 -139
- package/es/Highlighter/type.d.ts +1 -0
- package/es/Mermaid/FullFeatured.js +77 -45
- package/es/Mermaid/Mermaid.js +39 -20
- package/es/Mermaid/type.d.ts +1 -0
- package/es/hooks/useHighlight.d.ts +19 -3
- package/es/hooks/useHighlight.js +303 -35
- package/package.json +3 -1
- package/es/Highlighter/SyntaxHighlighter/Line.d.ts +0 -5
- package/es/Highlighter/SyntaxHighlighter/Line.js +0 -80
- package/es/Highlighter/SyntaxHighlighter/Span.d.ts +0 -5
- package/es/Highlighter/SyntaxHighlighter/Span.js +0 -16
|
@@ -40,15 +40,17 @@ var CopyButton = /*#__PURE__*/memo(function (_ref) {
|
|
|
40
40
|
icon: copied ? Check : Icon,
|
|
41
41
|
onClick: ( /*#__PURE__*/function () {
|
|
42
42
|
var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(e) {
|
|
43
|
+
var resolvedContent;
|
|
43
44
|
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
44
45
|
while (1) switch (_context.prev = _context.next) {
|
|
45
46
|
case 0:
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
47
|
+
resolvedContent = typeof content === 'function' ? content() : content;
|
|
48
|
+
_context.next = 3;
|
|
49
|
+
return copyToClipboard(resolvedContent);
|
|
50
|
+
case 3:
|
|
49
51
|
setCopied();
|
|
50
52
|
onClick === null || onClick === void 0 || onClick(e);
|
|
51
|
-
case
|
|
53
|
+
case 5:
|
|
52
54
|
case "end":
|
|
53
55
|
return _context.stop();
|
|
54
56
|
}
|
package/es/CopyButton/type.d.ts
CHANGED
|
@@ -17,7 +17,7 @@ function _objectWithoutProperties(source, excluded) { if (source == null) return
|
|
|
17
17
|
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
|
18
18
|
import { cva } from 'class-variance-authority';
|
|
19
19
|
import { ChevronDown, ChevronRight } from 'lucide-react';
|
|
20
|
-
import { memo, useMemo, useState } from 'react';
|
|
20
|
+
import { memo, useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
21
21
|
import { Flexbox } from 'react-layout-kit';
|
|
22
22
|
import ActionIcon from "../ActionIcon";
|
|
23
23
|
import CopyButton from "../CopyButton";
|
|
@@ -27,27 +27,65 @@ import Text from "../Text";
|
|
|
27
27
|
import LangSelect from "./LangSelect";
|
|
28
28
|
import { useStyles } from "./style";
|
|
29
29
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
30
|
+
import { Fragment as _Fragment } from "react/jsx-runtime";
|
|
30
31
|
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
31
|
-
|
|
32
|
-
var
|
|
33
|
-
|
|
34
|
-
setLanguage = _ref.setLanguage,
|
|
35
|
-
showLanguage = _ref.showLanguage,
|
|
36
|
-
className = _ref.className,
|
|
37
|
-
style = _ref.style,
|
|
38
|
-
_ref$allowChangeLangu = _ref.allowChangeLanguage,
|
|
39
|
-
allowChangeLanguage = _ref$allowChangeLangu === void 0 ? false : _ref$allowChangeLangu,
|
|
32
|
+
var HeaderLanguage = /*#__PURE__*/memo(function (_ref) {
|
|
33
|
+
var allowChangeLanguage = _ref.allowChangeLanguage,
|
|
34
|
+
displayName = _ref.displayName,
|
|
40
35
|
fileName = _ref.fileName,
|
|
36
|
+
filetype = _ref.filetype,
|
|
41
37
|
icon = _ref.icon,
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
38
|
+
language = _ref.language,
|
|
39
|
+
setLanguage = _ref.setLanguage,
|
|
40
|
+
showLanguage = _ref.showLanguage;
|
|
41
|
+
if (!showLanguage) return null;
|
|
42
|
+
return /*#__PURE__*/_jsx(Flexbox, {
|
|
43
|
+
align: 'center',
|
|
44
|
+
className: 'languageTitle',
|
|
45
|
+
flex: 1,
|
|
46
|
+
gap: 4,
|
|
47
|
+
horizontal: true,
|
|
48
|
+
justify: 'center',
|
|
49
|
+
children: allowChangeLanguage && !fileName ? /*#__PURE__*/_jsx(LangSelect, {
|
|
50
|
+
onSelect: setLanguage,
|
|
51
|
+
value: language.toLowerCase()
|
|
52
|
+
}) : /*#__PURE__*/_jsxs(_Fragment, {
|
|
53
|
+
children: [icon || /*#__PURE__*/_jsx(MaterialFileTypeIcon, {
|
|
54
|
+
fallbackUnknownType: false,
|
|
55
|
+
filename: filetype,
|
|
56
|
+
size: 18,
|
|
57
|
+
type: 'file',
|
|
58
|
+
variant: 'raw'
|
|
59
|
+
}), /*#__PURE__*/_jsx(Text, {
|
|
60
|
+
ellipsis: true,
|
|
61
|
+
fontSize: 13,
|
|
62
|
+
children: displayName
|
|
63
|
+
})]
|
|
64
|
+
})
|
|
65
|
+
});
|
|
66
|
+
}, function (prev, next) {
|
|
67
|
+
return prev.allowChangeLanguage === next.allowChangeLanguage && prev.displayName === next.displayName && prev.fileName === next.fileName && prev.filetype === next.filetype && prev.icon === next.icon && prev.language === next.language && prev.setLanguage === next.setLanguage && prev.showLanguage === next.showLanguage;
|
|
68
|
+
});
|
|
69
|
+
export var HighlighterFullFeatured = /*#__PURE__*/memo(function (_ref2) {
|
|
70
|
+
var content = _ref2.content,
|
|
71
|
+
language = _ref2.language,
|
|
72
|
+
setLanguage = _ref2.setLanguage,
|
|
73
|
+
showLanguage = _ref2.showLanguage,
|
|
74
|
+
className = _ref2.className,
|
|
75
|
+
style = _ref2.style,
|
|
76
|
+
_ref2$allowChangeLang = _ref2.allowChangeLanguage,
|
|
77
|
+
allowChangeLanguage = _ref2$allowChangeLang === void 0 ? false : _ref2$allowChangeLang,
|
|
78
|
+
fileName = _ref2.fileName,
|
|
79
|
+
icon = _ref2.icon,
|
|
80
|
+
actionsRender = _ref2.actionsRender,
|
|
81
|
+
copyable = _ref2.copyable,
|
|
82
|
+
variant = _ref2.variant,
|
|
83
|
+
shadow = _ref2.shadow,
|
|
84
|
+
wrap = _ref2.wrap,
|
|
85
|
+
_ref2$defaultExpand = _ref2.defaultExpand,
|
|
86
|
+
defaultExpand = _ref2$defaultExpand === void 0 ? true : _ref2$defaultExpand,
|
|
87
|
+
children = _ref2.children,
|
|
88
|
+
rest = _objectWithoutProperties(_ref2, _excluded);
|
|
51
89
|
var _useState = useState(defaultExpand),
|
|
52
90
|
_useState2 = _slicedToArray(_useState, 2),
|
|
53
91
|
expand = _useState2[0],
|
|
@@ -55,6 +93,13 @@ export var HighlighterFullFeatured = /*#__PURE__*/memo(function (_ref) {
|
|
|
55
93
|
var _useStyles = useStyles(),
|
|
56
94
|
styles = _useStyles.styles,
|
|
57
95
|
cx = _useStyles.cx;
|
|
96
|
+
var contentRef = useRef(content);
|
|
97
|
+
useEffect(function () {
|
|
98
|
+
contentRef.current = content;
|
|
99
|
+
}, [content]);
|
|
100
|
+
var getContent = useCallback(function () {
|
|
101
|
+
return contentRef.current;
|
|
102
|
+
}, []);
|
|
58
103
|
var variants = useMemo(function () {
|
|
59
104
|
return cva(styles.root, {
|
|
60
105
|
defaultVariants: {
|
|
@@ -110,16 +155,23 @@ export var HighlighterFullFeatured = /*#__PURE__*/memo(function (_ref) {
|
|
|
110
155
|
}
|
|
111
156
|
});
|
|
112
157
|
}, [styles]);
|
|
113
|
-
var originalActions =
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
158
|
+
var originalActions = useMemo(function () {
|
|
159
|
+
if (!copyable) return null;
|
|
160
|
+
return /*#__PURE__*/_jsx(CopyButton, {
|
|
161
|
+
content: getContent,
|
|
162
|
+
size: 'small'
|
|
163
|
+
});
|
|
164
|
+
}, [copyable, getContent]);
|
|
165
|
+
var actions = useMemo(function () {
|
|
166
|
+
if (!actionsRender) return originalActions;
|
|
167
|
+
return actionsRender({
|
|
168
|
+
actionIconSize: 'small',
|
|
169
|
+
content: content,
|
|
170
|
+
getContent: getContent,
|
|
171
|
+
language: language,
|
|
172
|
+
originalNode: originalActions
|
|
173
|
+
});
|
|
174
|
+
}, [actionsRender, content, getContent, language, originalActions]);
|
|
123
175
|
var displayName = useMemo(function () {
|
|
124
176
|
if (fileName) return fileName;
|
|
125
177
|
return getCodeLanguageDisplayName(language);
|
|
@@ -128,6 +180,11 @@ export var HighlighterFullFeatured = /*#__PURE__*/memo(function (_ref) {
|
|
|
128
180
|
if (fileName) return fileName;
|
|
129
181
|
return getCodeLanguageFilename(language);
|
|
130
182
|
}, [fileName, language]);
|
|
183
|
+
var handleToggleExpand = useCallback(function () {
|
|
184
|
+
setExpand(function (prev) {
|
|
185
|
+
return !prev;
|
|
186
|
+
});
|
|
187
|
+
}, []);
|
|
131
188
|
return /*#__PURE__*/_jsxs(Flexbox, _objectSpread(_objectSpread({
|
|
132
189
|
className: cx(variants({
|
|
133
190
|
shadow: shadow,
|
|
@@ -146,29 +203,17 @@ export var HighlighterFullFeatured = /*#__PURE__*/memo(function (_ref) {
|
|
|
146
203
|
justify: 'space-between',
|
|
147
204
|
children: [/*#__PURE__*/_jsx(ActionIcon, {
|
|
148
205
|
icon: expand ? ChevronDown : ChevronRight,
|
|
149
|
-
onClick:
|
|
150
|
-
return setExpand(!expand);
|
|
151
|
-
},
|
|
206
|
+
onClick: handleToggleExpand,
|
|
152
207
|
size: 'small'
|
|
153
|
-
}),
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
fallbackUnknownType: false,
|
|
163
|
-
filename: filetype,
|
|
164
|
-
size: 18,
|
|
165
|
-
type: 'file',
|
|
166
|
-
variant: 'raw'
|
|
167
|
-
}), /*#__PURE__*/_jsx(Text, {
|
|
168
|
-
ellipsis: true,
|
|
169
|
-
fontSize: 13,
|
|
170
|
-
children: displayName
|
|
171
|
-
})]
|
|
208
|
+
}), /*#__PURE__*/_jsx(HeaderLanguage, {
|
|
209
|
+
allowChangeLanguage: allowChangeLanguage,
|
|
210
|
+
displayName: displayName,
|
|
211
|
+
fileName: fileName,
|
|
212
|
+
filetype: filetype,
|
|
213
|
+
icon: icon,
|
|
214
|
+
language: language,
|
|
215
|
+
setLanguage: setLanguage,
|
|
216
|
+
showLanguage: showLanguage
|
|
172
217
|
}), /*#__PURE__*/_jsx(Flexbox, {
|
|
173
218
|
align: 'center',
|
|
174
219
|
flex: 'none',
|
|
@@ -16,7 +16,7 @@ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
|
16
16
|
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
|
17
17
|
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
|
18
18
|
import { cva } from 'class-variance-authority';
|
|
19
|
-
import { memo, useMemo, useState } from 'react';
|
|
19
|
+
import { memo, useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
20
20
|
import { Flexbox } from 'react-layout-kit';
|
|
21
21
|
import CopyButton from "../CopyButton";
|
|
22
22
|
import { getCodeLanguageDisplayName } from "./const";
|
|
@@ -86,34 +86,53 @@ export var Highlighter = /*#__PURE__*/memo(function (_ref) {
|
|
|
86
86
|
});
|
|
87
87
|
}, [styles]);
|
|
88
88
|
var tirmedChildren = children.trim();
|
|
89
|
-
var
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
89
|
+
var copyContentRef = useRef(tirmedChildren);
|
|
90
|
+
useEffect(function () {
|
|
91
|
+
copyContentRef.current = tirmedChildren;
|
|
92
|
+
}, [tirmedChildren]);
|
|
93
|
+
var getCopyContent = useCallback(function () {
|
|
94
|
+
return copyContentRef.current;
|
|
95
|
+
}, []);
|
|
96
|
+
var originalActions = useMemo(function () {
|
|
97
|
+
if (!copyable) return null;
|
|
98
|
+
return /*#__PURE__*/_jsx(CopyButton, {
|
|
99
|
+
content: getCopyContent,
|
|
100
|
+
glass: true,
|
|
101
|
+
size: actionIconSize
|
|
102
|
+
});
|
|
103
|
+
}, [actionIconSize, copyable, getCopyContent]);
|
|
104
|
+
var actions = useMemo(function () {
|
|
105
|
+
if (!actionsRender) return originalActions;
|
|
106
|
+
return actionsRender({
|
|
107
|
+
actionIconSize: actionIconSize,
|
|
108
|
+
content: tirmedChildren,
|
|
109
|
+
getContent: getCopyContent,
|
|
110
|
+
language: lang,
|
|
111
|
+
originalNode: originalActions
|
|
112
|
+
});
|
|
113
|
+
}, [actionIconSize, actionsRender, getCopyContent, lang, originalActions, tirmedChildren]);
|
|
114
|
+
var originalBody = useMemo(function () {
|
|
115
|
+
return /*#__PURE__*/_jsx(SyntaxHighlighter, {
|
|
116
|
+
animated: animated,
|
|
117
|
+
enableTransformer: enableTransformer,
|
|
118
|
+
language: lang === null || lang === void 0 ? void 0 : lang.toLowerCase(),
|
|
119
|
+
theme: theme,
|
|
120
|
+
variant: variant,
|
|
121
|
+
children: tirmedChildren
|
|
122
|
+
});
|
|
123
|
+
}, [animated, enableTransformer, lang, theme, tirmedChildren, variant]);
|
|
108
124
|
var displayName = useMemo(function () {
|
|
109
125
|
if (fileName) return fileName;
|
|
110
126
|
return getCodeLanguageDisplayName(language);
|
|
111
127
|
}, [fileName, language]);
|
|
112
|
-
var body =
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
128
|
+
var body = useMemo(function () {
|
|
129
|
+
if (!bodyRender) return originalBody;
|
|
130
|
+
return bodyRender({
|
|
131
|
+
content: tirmedChildren,
|
|
132
|
+
language: lang,
|
|
133
|
+
originalNode: originalBody
|
|
134
|
+
});
|
|
135
|
+
}, [bodyRender, lang, originalBody, tirmedChildren]);
|
|
117
136
|
if (fullFeatured) return /*#__PURE__*/_jsx(FullFeatured, _objectSpread(_objectSpread({
|
|
118
137
|
actionsRender: actionsRender,
|
|
119
138
|
allowChangeLanguage: allowChangeLanguage,
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { CSSProperties } from 'react';
|
|
2
|
+
import type { BuiltinTheme } from 'shiki';
|
|
3
|
+
interface StaticRendererProps {
|
|
4
|
+
children: string;
|
|
5
|
+
className?: string;
|
|
6
|
+
enableTransformer?: boolean;
|
|
7
|
+
fallbackClassName?: string;
|
|
8
|
+
language: string;
|
|
9
|
+
style?: CSSProperties;
|
|
10
|
+
theme?: BuiltinTheme;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Static renderer for syntax highlighting without animation
|
|
14
|
+
* Uses useHighlight hook to generate HTML and renders it directly
|
|
15
|
+
*/
|
|
16
|
+
declare const StaticRenderer: import("react").NamedExoticComponent<StaticRendererProps>;
|
|
17
|
+
export default StaticRenderer;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { memo } from 'react';
|
|
4
|
+
import { useHighlight } from "../../hooks/useHighlight";
|
|
5
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
6
|
+
/**
|
|
7
|
+
* Static renderer for syntax highlighting without animation
|
|
8
|
+
* Uses useHighlight hook to generate HTML and renders it directly
|
|
9
|
+
*/
|
|
10
|
+
var StaticRenderer = /*#__PURE__*/memo(function (_ref) {
|
|
11
|
+
var children = _ref.children,
|
|
12
|
+
className = _ref.className,
|
|
13
|
+
enableTransformer = _ref.enableTransformer,
|
|
14
|
+
fallbackClassName = _ref.fallbackClassName,
|
|
15
|
+
language = _ref.language,
|
|
16
|
+
style = _ref.style,
|
|
17
|
+
theme = _ref.theme;
|
|
18
|
+
var _useHighlight = useHighlight(children, {
|
|
19
|
+
enableTransformer: enableTransformer,
|
|
20
|
+
language: language,
|
|
21
|
+
theme: theme
|
|
22
|
+
}),
|
|
23
|
+
data = _useHighlight.data;
|
|
24
|
+
var hasData = typeof data === 'string' && data.length > 0;
|
|
25
|
+
var containerClassName = hasData ? className : fallbackClassName;
|
|
26
|
+
return /*#__PURE__*/_jsx("div", {
|
|
27
|
+
className: containerClassName,
|
|
28
|
+
dangerouslySetInnerHTML: {
|
|
29
|
+
__html: data || "<pre><code>".concat(children, "</code></pre>")
|
|
30
|
+
},
|
|
31
|
+
dir: "ltr",
|
|
32
|
+
style: style
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
StaticRenderer.displayName = 'StaticRenderer';
|
|
36
|
+
export default StaticRenderer;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { CSSProperties } from 'react';
|
|
2
|
+
import type { BuiltinTheme } from 'shiki';
|
|
3
|
+
interface StreamRendererProps {
|
|
4
|
+
children: string;
|
|
5
|
+
className?: string;
|
|
6
|
+
enableTransformer?: boolean;
|
|
7
|
+
fallbackClassName?: string;
|
|
8
|
+
language: string;
|
|
9
|
+
style?: CSSProperties;
|
|
10
|
+
theme?: BuiltinTheme;
|
|
11
|
+
}
|
|
12
|
+
declare const StreamRenderer: import("react").NamedExoticComponent<StreamRendererProps>;
|
|
13
|
+
export default StreamRenderer;
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
4
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
5
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
6
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
7
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
|
|
8
|
+
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
9
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
10
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
11
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
12
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
13
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
14
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
15
|
+
import { getTokenStyleObject } from '@shikijs/core';
|
|
16
|
+
import { memo } from 'react';
|
|
17
|
+
import { useHighlight } from "../../hooks/useHighlight";
|
|
18
|
+
import { useStyles } from "./style";
|
|
19
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
20
|
+
var applyColorReplacement = function applyColorReplacement(color, replacements) {
|
|
21
|
+
if (!color || !replacements) return color;
|
|
22
|
+
return replacements[color.toLowerCase()] || color;
|
|
23
|
+
};
|
|
24
|
+
var normalizeStyleKeys = function normalizeStyleKeys(style) {
|
|
25
|
+
var normalized = {};
|
|
26
|
+
Object.entries(style).forEach(function (_ref) {
|
|
27
|
+
var _ref2 = _slicedToArray(_ref, 2),
|
|
28
|
+
key = _ref2[0],
|
|
29
|
+
value = _ref2[1];
|
|
30
|
+
var normalizedKey = key.replaceAll(/-([a-z])/g, function (_, char) {
|
|
31
|
+
return char.toUpperCase();
|
|
32
|
+
});
|
|
33
|
+
normalized[normalizedKey] = value;
|
|
34
|
+
});
|
|
35
|
+
return normalized;
|
|
36
|
+
};
|
|
37
|
+
var getTokenInlineStyle = function getTokenInlineStyle(token, replacements) {
|
|
38
|
+
var rawStyle = token.htmlStyle || getTokenStyleObject(token);
|
|
39
|
+
var baseStyle = normalizeStyleKeys(rawStyle);
|
|
40
|
+
if (!replacements) return _objectSpread(_objectSpread({}, baseStyle), {}, {
|
|
41
|
+
whiteSpace: 'pre'
|
|
42
|
+
});
|
|
43
|
+
var style = _objectSpread(_objectSpread({}, baseStyle), {}, {
|
|
44
|
+
whiteSpace: 'pre'
|
|
45
|
+
});
|
|
46
|
+
if (style.color && typeof style.color === 'string') {
|
|
47
|
+
style.color = applyColorReplacement(style.color, replacements);
|
|
48
|
+
}
|
|
49
|
+
if (style.backgroundColor && typeof style.backgroundColor === 'string') {
|
|
50
|
+
style.backgroundColor = applyColorReplacement(style.backgroundColor, replacements);
|
|
51
|
+
}
|
|
52
|
+
return style;
|
|
53
|
+
};
|
|
54
|
+
var TokenSpan = /*#__PURE__*/memo(function (_ref3) {
|
|
55
|
+
var token = _ref3.token,
|
|
56
|
+
replacements = _ref3.replacements;
|
|
57
|
+
return /*#__PURE__*/_jsx("span", {
|
|
58
|
+
style: getTokenInlineStyle(token, replacements),
|
|
59
|
+
children: token.content
|
|
60
|
+
}, token.content);
|
|
61
|
+
}, function (prev, next) {
|
|
62
|
+
return prev.token === next.token;
|
|
63
|
+
});
|
|
64
|
+
var TokenLine = /*#__PURE__*/memo(function (_ref4) {
|
|
65
|
+
var line = _ref4.line,
|
|
66
|
+
replacements = _ref4.replacements;
|
|
67
|
+
if (!line.length) {
|
|
68
|
+
return /*#__PURE__*/_jsx("span", {
|
|
69
|
+
className: "line",
|
|
70
|
+
children: /*#__PURE__*/_jsx("span", {
|
|
71
|
+
style: {
|
|
72
|
+
whiteSpace: 'pre'
|
|
73
|
+
},
|
|
74
|
+
children: "\xA0"
|
|
75
|
+
})
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
return /*#__PURE__*/_jsx("span", {
|
|
79
|
+
className: "line",
|
|
80
|
+
children: line.map(function (token, tokenIndex) {
|
|
81
|
+
return /*#__PURE__*/_jsx(TokenSpan, {
|
|
82
|
+
replacements: replacements,
|
|
83
|
+
token: token
|
|
84
|
+
}, "token-".concat(tokenIndex));
|
|
85
|
+
})
|
|
86
|
+
});
|
|
87
|
+
}, function (prev, next) {
|
|
88
|
+
return prev.line === next.line;
|
|
89
|
+
});
|
|
90
|
+
var StreamRenderer = /*#__PURE__*/memo(function (_ref5) {
|
|
91
|
+
var children = _ref5.children,
|
|
92
|
+
className = _ref5.className,
|
|
93
|
+
enableTransformer = _ref5.enableTransformer,
|
|
94
|
+
fallbackClassName = _ref5.fallbackClassName,
|
|
95
|
+
language = _ref5.language,
|
|
96
|
+
style = _ref5.style,
|
|
97
|
+
theme = _ref5.theme;
|
|
98
|
+
var _useStyles = useStyles(),
|
|
99
|
+
cx = _useStyles.cx;
|
|
100
|
+
var _useHighlight = useHighlight(children, {
|
|
101
|
+
enableTransformer: enableTransformer,
|
|
102
|
+
language: language,
|
|
103
|
+
streaming: true,
|
|
104
|
+
theme: theme
|
|
105
|
+
}),
|
|
106
|
+
streaming = _useHighlight.streaming;
|
|
107
|
+
var lines = streaming === null || streaming === void 0 ? void 0 : streaming.lines;
|
|
108
|
+
var preStyle = streaming === null || streaming === void 0 ? void 0 : streaming.preStyle;
|
|
109
|
+
var replacements = streaming === null || streaming === void 0 ? void 0 : streaming.colorReplacements;
|
|
110
|
+
if (!lines || lines.length === 0) {
|
|
111
|
+
return /*#__PURE__*/_jsx("div", {
|
|
112
|
+
className: fallbackClassName,
|
|
113
|
+
dir: "ltr",
|
|
114
|
+
style: style,
|
|
115
|
+
children: /*#__PURE__*/_jsx("pre", {
|
|
116
|
+
children: /*#__PURE__*/_jsx("code", {
|
|
117
|
+
children: children
|
|
118
|
+
})
|
|
119
|
+
})
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
return /*#__PURE__*/_jsx("div", {
|
|
123
|
+
className: className,
|
|
124
|
+
dir: "ltr",
|
|
125
|
+
style: style,
|
|
126
|
+
children: /*#__PURE__*/_jsx("pre", {
|
|
127
|
+
className: cx('shiki', theme),
|
|
128
|
+
style: preStyle,
|
|
129
|
+
tabIndex: 0,
|
|
130
|
+
children: /*#__PURE__*/_jsx("code", {
|
|
131
|
+
style: {
|
|
132
|
+
display: 'flex',
|
|
133
|
+
flexDirection: 'column',
|
|
134
|
+
whiteSpace: 'pre'
|
|
135
|
+
},
|
|
136
|
+
children: lines.map(function (line, index) {
|
|
137
|
+
return /*#__PURE__*/_jsx(TokenLine, {
|
|
138
|
+
line: line,
|
|
139
|
+
replacements: replacements
|
|
140
|
+
}, "line-".concat(index));
|
|
141
|
+
})
|
|
142
|
+
})
|
|
143
|
+
})
|
|
144
|
+
});
|
|
145
|
+
});
|
|
146
|
+
StreamRenderer.displayName = 'StreamRenderer';
|
|
147
|
+
export default StreamRenderer;
|