@lobehub/ui 2.15.4 → 2.16.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.
@@ -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
- _context.next = 2;
47
- return copyToClipboard(content);
48
- case 2:
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 4:
53
+ case 5:
52
54
  case "end":
53
55
  return _context.stop();
54
56
  }
@@ -1,4 +1,4 @@
1
1
  import type { ActionIconProps } from "../ActionIcon";
2
- export interface CopyButtonProps extends ActionIconProps {
3
- content: string;
2
+ export interface CopyButtonProps extends Omit<ActionIconProps, 'content'> {
3
+ content: string | (() => string);
4
4
  }
@@ -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
- export var HighlighterFullFeatured = /*#__PURE__*/memo(function (_ref) {
32
- var content = _ref.content,
33
- language = _ref.language,
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
- actionsRender = _ref.actionsRender,
43
- copyable = _ref.copyable,
44
- variant = _ref.variant,
45
- shadow = _ref.shadow,
46
- wrap = _ref.wrap,
47
- _ref$defaultExpand = _ref.defaultExpand,
48
- defaultExpand = _ref$defaultExpand === void 0 ? true : _ref$defaultExpand,
49
- children = _ref.children,
50
- rest = _objectWithoutProperties(_ref, _excluded);
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 = copyable && /*#__PURE__*/_jsx(CopyButton, {
114
- content: content,
115
- size: 'small'
116
- });
117
- var actions = actionsRender ? actionsRender({
118
- actionIconSize: 'small',
119
- content: content,
120
- language: language,
121
- originalNode: originalActions
122
- }) : originalActions;
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: function onClick() {
150
- return setExpand(!expand);
151
- },
206
+ onClick: handleToggleExpand,
152
207
  size: 'small'
153
- }), allowChangeLanguage && !fileName ? showLanguage && /*#__PURE__*/_jsx(LangSelect, {
154
- onSelect: setLanguage,
155
- value: language.toLowerCase()
156
- }) : /*#__PURE__*/_jsxs(Flexbox, {
157
- align: 'center',
158
- className: 'languageTitle',
159
- gap: 4,
160
- horizontal: true,
161
- children: [icon || /*#__PURE__*/_jsx(MaterialFileTypeIcon, {
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 originalActions = copyable && /*#__PURE__*/_jsx(CopyButton, {
90
- content: tirmedChildren,
91
- glass: true,
92
- size: actionIconSize
93
- });
94
- var actions = actionsRender ? actionsRender({
95
- actionIconSize: actionIconSize,
96
- content: tirmedChildren,
97
- language: lang,
98
- originalNode: originalActions
99
- }) : originalActions;
100
- var originalBody = /*#__PURE__*/_jsx(SyntaxHighlighter, {
101
- animated: animated,
102
- enableTransformer: enableTransformer,
103
- language: lang === null || lang === void 0 ? void 0 : lang.toLowerCase(),
104
- theme: theme,
105
- variant: variant,
106
- children: tirmedChildren
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 = bodyRender ? bodyRender({
113
- content: tirmedChildren,
114
- language: lang,
115
- originalNode: originalBody
116
- }) : originalBody;
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;