@king-design/vue 3.8.0-beta.0 → 3.8.0-beta.2
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/__tests__/__snapshots__/Vue Next Demos.md +74 -74
- package/components/bubble/bubble.d.ts +3 -0
- package/components/bubble/bubble.vdt.js +6 -2
- package/components/bubble/index.spec.js +231 -5
- package/components/bubble/styles.js +1 -1
- package/components/bubble/useBubbleDisplay.d.ts +1 -0
- package/components/bubble/useBubbleDisplay.js +68 -22
- package/components/bubbleList/bubbleList.vdt.js +3 -1
- package/components/bubbleList/index.spec.js +378 -237
- package/components/bubbleList/styles.js +2 -2
- package/components/bubbleList/useBubbleList.js +7 -0
- package/components/fileCard/fileCard.vdt.js +4 -4
- package/components/fileCard/index.spec.js +179 -107
- package/components/fileCard/list.d.ts +2 -1
- package/components/fileCard/list.vdt.js +7 -5
- package/components/fileCard/styles.js +10 -8
- package/components/fileCard/useFileCard.d.ts +1 -1
- package/components/fileCard/useFileCard.js +6 -35
- package/components/media/index.spec.js +774 -585
- package/components/media/media.vdt.js +17 -6
- package/components/media/mediaAssets.d.ts +2 -0
- package/components/media/mediaAssets.js +4 -0
- package/components/media/styles.js +5 -3
- package/components/media/useMedia.d.ts +6 -2
- package/components/media/useMedia.js +28 -6
- package/components/sender/index.spec.js +1146 -476
- package/components/sender/sender.d.ts +28 -5
- package/components/sender/sender.js +17 -6
- package/components/sender/sender.vdt.js +121 -49
- package/components/sender/styles.js +18 -9
- package/components/sender/useAutoResize.js +7 -6
- package/components/sender/useSenderDrag.js +12 -3
- package/components/sender/useSenderInput.d.ts +3 -0
- package/components/sender/useSenderInput.js +20 -3
- package/components/sender/useSenderPaste.js +1 -1
- package/components/sender/useSenderUpload.js +38 -29
- package/components/xmarkdown/index.spec.js +492 -263
- package/components/xmarkdown/markdown/streaming.js +41 -8
- package/components/xmarkdown/styles.js +2 -2
- package/components/xmarkdown/useXMarkdownDisplay.d.ts +1 -0
- package/components/xmarkdown/useXMarkdownDisplay.js +69 -24
- package/components/xmarkdown/xmarkdown.d.ts +3 -0
- package/components/xmarkdown/xmarkdown.vdt.js +6 -2
- package/dist/i18n/en-US.js +1 -0
- package/dist/i18n/en-US.js.map +1 -1
- package/dist/i18n/en-US.min.js +1 -1
- package/dist/index.js +795 -512
- package/dist/index.js.map +1 -1
- package/dist/index.min.js +2 -2
- package/i18n/en-US.d.ts +1 -0
- package/i18n/en-US.js +1 -0
- package/index.d.ts +2 -2
- package/index.js +2 -2
- package/package.json +1 -1
|
@@ -3,14 +3,14 @@ import _Symbol from "@babel/runtime-corejs3/core-js/symbol";
|
|
|
3
3
|
import _getIteratorMethod from "@babel/runtime-corejs3/core-js/get-iterator-method";
|
|
4
4
|
import _extends from "@babel/runtime-corejs3/helpers/extends";
|
|
5
5
|
function _createForOfIteratorHelperLoose(o, allowArrayLike) { var it = typeof _Symbol !== "undefined" && _getIteratorMethod(o) || o["@@iterator"]; if (it) return (it = it.call(o)).next.bind(it); if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
6
|
-
function _unsupportedIterableToArray(o, minLen) { var
|
|
6
|
+
function _unsupportedIterableToArray(o, minLen) { var _context15; if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = _sliceInstanceProperty(_context15 = Object.prototype.toString.call(o)).call(_context15, 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); }
|
|
7
7
|
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; }
|
|
8
8
|
import _includesInstanceProperty from "@babel/runtime-corejs3/core-js/instance/includes";
|
|
9
9
|
import _sliceInstanceProperty from "@babel/runtime-corejs3/core-js/instance/slice";
|
|
10
10
|
import _startsWithInstanceProperty from "@babel/runtime-corejs3/core-js/instance/starts-with";
|
|
11
|
-
import _trimInstanceProperty from "@babel/runtime-corejs3/core-js/instance/trim";
|
|
12
11
|
import _filterInstanceProperty from "@babel/runtime-corejs3/core-js/instance/filter";
|
|
13
12
|
import _mapInstanceProperty from "@babel/runtime-corejs3/core-js/instance/map";
|
|
13
|
+
import _trimInstanceProperty from "@babel/runtime-corejs3/core-js/instance/trim";
|
|
14
14
|
import _endsWithInstanceProperty from "@babel/runtime-corejs3/core-js/instance/ends-with";
|
|
15
15
|
/**
|
|
16
16
|
* 流式渲染
|
|
@@ -203,7 +203,7 @@ function recognizeToken(cache) {
|
|
|
203
203
|
cache.token = 'list';
|
|
204
204
|
return;
|
|
205
205
|
}
|
|
206
|
-
if (_startsWithInstanceProperty(_context6 = cache.pending).call(_context6, '|')) {
|
|
206
|
+
if (_startsWithInstanceProperty(_context6 = cache.pending).call(_context6, '|') && !isInTableContext(cache.completeMarkdown)) {
|
|
207
207
|
cache.token = 'table';
|
|
208
208
|
return;
|
|
209
209
|
}
|
|
@@ -308,13 +308,46 @@ function isTableIncomplete(markdown) {
|
|
|
308
308
|
if (lines.length <= 1) return true;
|
|
309
309
|
var header = lines[0],
|
|
310
310
|
separator = lines[1];
|
|
311
|
-
if (
|
|
311
|
+
if (!isTableRow(header)) return false;
|
|
312
312
|
var columns = _filterInstanceProperty(_context9 = _mapInstanceProperty(_context10 = _trimInstanceProperty(separator).call(separator).split('|')).call(_context10, function (column) {
|
|
313
313
|
return _trimInstanceProperty(column).call(column);
|
|
314
314
|
})).call(_context9, Boolean);
|
|
315
|
+
return isTableSeparatorColumns(columns, true);
|
|
316
|
+
}
|
|
317
|
+
/**
|
|
318
|
+
* 判断当前 pending 是否是在已有表格后继续追加新行。
|
|
319
|
+
* 这种场景直接进入 stable 渲染,让 markdown-it 增量填充各列,避免整行原样压在 tail 中。
|
|
320
|
+
*/
|
|
321
|
+
function isInTableContext(completeMarkdown) {
|
|
322
|
+
var _context12, _context13;
|
|
323
|
+
var lines = completeMarkdown.split('\n');
|
|
324
|
+
var block = [];
|
|
325
|
+
var end = lines.length - 1;
|
|
326
|
+
while (end >= 0 && !_trimInstanceProperty(_context11 = lines[end]).call(_context11)) {
|
|
327
|
+
var _context11;
|
|
328
|
+
end--;
|
|
329
|
+
}
|
|
330
|
+
for (var i = end; i >= 0; i--) {
|
|
331
|
+
var line = lines[i];
|
|
332
|
+
if (!_trimInstanceProperty(line).call(line)) break;
|
|
333
|
+
block.unshift(line);
|
|
334
|
+
}
|
|
335
|
+
if (block.length < 2) return false;
|
|
336
|
+
var header = block[0],
|
|
337
|
+
separator = block[1];
|
|
338
|
+
if (!isTableRow(header)) return false;
|
|
339
|
+
var columns = _filterInstanceProperty(_context12 = _mapInstanceProperty(_context13 = _trimInstanceProperty(separator).call(separator).split('|')).call(_context13, function (column) {
|
|
340
|
+
return _trimInstanceProperty(column).call(column);
|
|
341
|
+
})).call(_context12, Boolean);
|
|
342
|
+
return isTableSeparatorColumns(columns, false);
|
|
343
|
+
}
|
|
344
|
+
function isTableRow(line) {
|
|
345
|
+
return /^\|.*\|$/.test(_trimInstanceProperty(line).call(line));
|
|
346
|
+
}
|
|
347
|
+
function isTableSeparatorColumns(columns, allowTrailingColon) {
|
|
315
348
|
var separatorRegex = /^:?-+:?$/;
|
|
316
|
-
return columns.every(function (column, index) {
|
|
317
|
-
return index === columns.length - 1 ? column === ':' || separatorRegex.test(column) : separatorRegex.test(column);
|
|
349
|
+
return columns.length > 0 && columns.every(function (column, index) {
|
|
350
|
+
return allowTrailingColon && index === columns.length - 1 ? column === ':' || separatorRegex.test(column) : separatorRegex.test(column);
|
|
318
351
|
});
|
|
319
352
|
}
|
|
320
353
|
/**
|
|
@@ -388,11 +421,11 @@ function findOpenMathBlock(source) {
|
|
|
388
421
|
* 提取未闭合代码围栏的语言标记
|
|
389
422
|
*/
|
|
390
423
|
function extractLanguageFromFence(tailText) {
|
|
391
|
-
var
|
|
424
|
+
var _context14;
|
|
392
425
|
var firstLineEnd = tailText.indexOf('\n');
|
|
393
426
|
var firstLine = firstLineEnd === -1 ? tailText : _sliceInstanceProperty(tailText).call(tailText, 0, firstLineEnd);
|
|
394
427
|
var match = firstLine.match(/^ {0,3}`{3,}(\S*)/);
|
|
395
|
-
return match && match[1] ? _trimInstanceProperty(
|
|
428
|
+
return match && match[1] ? _trimInstanceProperty(_context14 = match[1]).call(_context14).toLowerCase() : undefined;
|
|
396
429
|
}
|
|
397
430
|
/**
|
|
398
431
|
* 渲染未闭合的代码围栏
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { css } from '@emotion/css';
|
|
2
2
|
import { theme, setDefault } from '../../styles/theme';
|
|
3
|
-
import { deepDefaults } from '../../styles/utils';
|
|
3
|
+
import { deepDefaults, setAlpha } from '../../styles/utils';
|
|
4
4
|
import '../../styles/global';
|
|
5
5
|
import { cache } from '../utils';
|
|
6
6
|
var defaults = {
|
|
@@ -46,5 +46,5 @@ setDefault(function () {
|
|
|
46
46
|
makeStyles == null || makeStyles.clearCache();
|
|
47
47
|
});
|
|
48
48
|
export var makeStyles = cache(function makeStyles(k) {
|
|
49
|
-
return /*#__PURE__*/css("display:block;color:", xmarkdown.color, ";line-height:1.7;font-size:14px;min-width:0;max-width:100%;width:100%;box-sizing:border-box;.", k, "-xmarkdown-loading,.", k, "-xmarkdown-empty{display:inline-flex;align-items:center;gap:8px;color:", xmarkdown.mutedColor, ";min-height:24px;}.", k, "-xmarkdown-loading-dots{display:inline-flex;align-items:center;gap:4px;margin-right:4px;}.", k, "-xmarkdown-loading-dot{width:", xmarkdown.loadingDotSize, ";height:", xmarkdown.loadingDotSize, ";border-radius:50%;background:", xmarkdown.loadingDotColor, ";display:inline-block;animation:", k, "-xmarkdown-loading-bounce 1s ease-in-out infinite;opacity:0.45;}.", k, "-xmarkdown-loading-dot:nth-of-type(2){animation-delay:0.14s;}.", k, "-xmarkdown-loading-dot:nth-of-type(3){animation-delay:0.28s;}@keyframes ", k, "-xmarkdown-loading-bounce{0%,80%,100%{transform:translateY(0) scale(0.9);opacity:0.45;}40%{transform:translateY(-4px) scale(1);opacity:1;}}.", k, "-xmarkdown-content{color:inherit;min-width:0;max-width:100%;overflow-wrap:anywhere;word-break:break-word;}.", k, "-xmarkdown-content p{font-size:12px;}.", k, "-xmarkdown-stable,.", k, "-xmarkdown-tail{display:contents;}.", k, "-xmarkdown-stable>:first-child{margin-top:0;}.", k, "-xmarkdown-stable>:last-child,.", k, "-xmarkdown-tail>:last-child{margin-bottom:0;}.", k, "-xmarkdown-content [data-kpc-xmarkdown-tail=\"true\"]{display:inline;white-space:pre-wrap;word-break:break-word;}.", k, "-xmarkdown-stable>p,.", k, "-xmarkdown-stable>ul,.", k, "-xmarkdown-stable>ol,.", k, "-xmarkdown-stable>blockquote,.", k, "-xmarkdown-stable>pre,.", k, "-xmarkdown-stable>table,.", k, "-xmarkdown-stable>hr,.", k, "-xmarkdown-stable>h1,.", k, "-xmarkdown-stable>h2,.", k, "-xmarkdown-stable>h3,.", k, "-xmarkdown-stable>h4,.", k, "-xmarkdown-stable>h5,.", k, "-xmarkdown-stable>h6{margin:0 0 12px;}.", k, "-xmarkdown-content blockquote>:first-child{margin-top:0;}.", k, "-xmarkdown-content blockquote>:last-child{margin-bottom:0;}.", k, "-xmarkdown-content ul,.", k, "-xmarkdown-content ol{padding-left:20px;}.", k, "-xmarkdown-content li{margin:6px 0;}.", k, "-xmarkdown-content li>p{margin:6px 0;}.", k, "-xmarkdown-content li>p:first-child{margin-top:0;}.", k, "-xmarkdown-content li>p:last-child{margin-bottom:0;}.", k, "-xmarkdown-content h1,.", k, "-xmarkdown-content h2,.", k, "-xmarkdown-content h3,.", k, "-xmarkdown-content h4,.", k, "-xmarkdown-content h5,.", k, "-xmarkdown-content h6{color:", xmarkdown.headingColor, ";font-weight:600;line-height:1.35;}.", k, "-xmarkdown-content h1{font-size:24px;}.", k, "-xmarkdown-content h2{font-size:20px;}.", k, "-xmarkdown-content h3{font-size:18px;}.", k, "-xmarkdown-content h4,.", k, "-xmarkdown-content h5,.", k, "-xmarkdown-content h6{font-size:16px;}.", k, "-xmarkdown-content a{color:", theme.color.primary, ";text-decoration:none;}.", k, "-xmarkdown-content a:hover{text-decoration:underline;}.", k, "-xmarkdown-content img{display:block;max-width:100%;height:auto;border-radius:8px;}.", k, "-xmarkdown-content hr{border:0;border-top:1px solid ", xmarkdown.hrColor, ";}.", k, "-xmarkdown-inline-code{display:inline-block;padding:0 6px;border-radius:6px;font-size:12px;line-height:1.7;vertical-align:baseline;background:", xmarkdown.inlineCodeBg, ";color:", xmarkdown.inlineCodeColor, ";border:1px solid ", xmarkdown.inlineCodeBorder, ";}.", k, "-xmarkdown-content pre{margin:0;overflow:auto;}.", k, "-xmarkdown-code-block,.", k, "-xmarkdown-mermaid-block{margin:0 0 12px;min-width:0;max-width:100%;overflow:hidden;border:1px solid ", xmarkdown.codeBlockBorder, ";border-radius:18px;background:", xmarkdown.codeBlockBg, ";box-sizing:border-box;}.", k, "-xmarkdown-code-toolbar{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;padding:8px 12px;border-bottom:1px solid ", xmarkdown.codeBlockBorder, ";background:", xmarkdown.codeToolbarBg, ";color:", xmarkdown.codeToolbarColor, ";}.", k, "-xmarkdown-code-language{min-width:0;font-size:13px;font-weight:700;letter-spacing:0.02em;text-transform:uppercase;color:inherit;flex:1 1 auto;}.", k, "-xmarkdown-code-actions{display:flex;align-items:center;gap:6px;flex-wrap:wrap;justify-content:flex-end;max-width:100%;margin-left:auto;}.", k, "-xmarkdown-toolbar-toggle-group,.", k, "-xmarkdown-toolbar-action-group{display:flex;align-items:center;gap:4px;flex-wrap:wrap;max-width:100%;}.", k, "-xmarkdown-toolbar-toggle-group{margin-right:2px;}.", k, "-xmarkdown-toolbar-toggle{border:0;padding:0 6px;background:transparent;color:", xmarkdown.mutedColor, ";font-size:12px;line-height:20px;cursor:pointer;transition:color ", theme.transition.small, ";}.", k, "-xmarkdown-toolbar-toggle[data-kpc-selected=\"true\"]{color:", xmarkdown.codeToolbarColor, ";font-weight:600;}.", k, "-xmarkdown-toolbar-toggle:hover{color:", xmarkdown.codeToolbarColor, ";}.", k, "-xmarkdown-toolbar-icon-button{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;padding:0;border:0;background:transparent;color:", xmarkdown.codeActionColor, ";cursor:pointer;transition:color ", theme.transition.small, ",background ", theme.transition.small, ";}.", k, "-xmarkdown-toolbar-icon-button:hover:not(:disabled){background:", xmarkdown.codeActionHoverBg, ";color:", theme.color.primary, ";}.", k, "-xmarkdown-toolbar-icon-button:disabled{opacity:0.4;cursor:not-allowed;background:transparent;color:", xmarkdown.codeActionColor, ";}.", k, "-xmarkdown-toolbar-icon{font-size:14px;line-height:1;}.", k, "-xmarkdown-code-body,.", k, "-xmarkdown-mermaid-body{min-width:0;max-width:100%;overflow:auto;background:", xmarkdown.codeBlockBg, ";}.", k, "-xmarkdown-code-block pre,.", k, "-xmarkdown-mermaid-source{padding:0px;background:transparent;color:", xmarkdown.codeTextColor, ";}.", k, "-xmarkdown-code-block pre,.", k, "-xmarkdown-mermaid-source{font-family:SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace;font-size:12px;line-height:1.7;}.", k, "-xmarkdown-code-block pre code,.", k, "-xmarkdown-mermaid-source code{display:block;min-width:fit-content;color:inherit;white-space:pre;word-break:normal;overflow-wrap:normal;padding:12px;}.", k, "-xmarkdown-code-block .hljs,.", k, "-xmarkdown-mermaid-source .hljs{background:transparent;color:", xmarkdown.codeTextColor, ";border:0;}.", k, "-xmarkdown-code-block .hljs-comment,.", k, "-xmarkdown-code-block .hljs-quote,.", k, "-xmarkdown-mermaid-source .hljs-comment,.", k, "-xmarkdown-mermaid-source .hljs-quote{color:", xmarkdown.codeCommentColor, ";}.", k, "-xmarkdown-code-block .hljs-keyword,.", k, "-xmarkdown-code-block .hljs-selector-tag,.", k, "-xmarkdown-code-block .hljs-literal,.", k, "-xmarkdown-code-block .hljs-link,.", k, "-xmarkdown-mermaid-source .hljs-keyword,.", k, "-xmarkdown-mermaid-source .hljs-selector-tag,.", k, "-xmarkdown-mermaid-source .hljs-literal,.", k, "-xmarkdown-mermaid-source .hljs-link{color:", xmarkdown.codeKeywordColor, ";}.", k, "-xmarkdown-code-block .hljs-string,.", k, "-xmarkdown-code-block .hljs-title,.", k, "-xmarkdown-code-block .hljs-type,.", k, "-xmarkdown-code-block .hljs-attribute,.", k, "-xmarkdown-code-block .hljs-symbol,.", k, "-xmarkdown-code-block .hljs-bullet,.", k, "-xmarkdown-code-block .hljs-addition,.", k, "-xmarkdown-mermaid-source .hljs-string,.", k, "-xmarkdown-mermaid-source .hljs-title,.", k, "-xmarkdown-mermaid-source .hljs-type,.", k, "-xmarkdown-mermaid-source .hljs-attribute,.", k, "-xmarkdown-mermaid-source .hljs-symbol,.", k, "-xmarkdown-mermaid-source .hljs-bullet,.", k, "-xmarkdown-mermaid-source .hljs-addition{color:", xmarkdown.codeStringColor, ";}.", k, "-xmarkdown-code-block .hljs-number,.", k, "-xmarkdown-code-block .hljs-built_in,.", k, "-xmarkdown-code-block .hljs-builtin-name,.", k, "-xmarkdown-code-block .hljs-variable,.", k, "-xmarkdown-code-block .hljs-template-variable,.", k, "-xmarkdown-code-block .hljs-params,.", k, "-xmarkdown-mermaid-source .hljs-number,.", k, "-xmarkdown-mermaid-source .hljs-built_in,.", k, "-xmarkdown-mermaid-source .hljs-builtin-name,.", k, "-xmarkdown-mermaid-source .hljs-variable,.", k, "-xmarkdown-mermaid-source .hljs-template-variable,.", k, "-xmarkdown-mermaid-source .hljs-params{color:", xmarkdown.codeNumberColor, ";}.", k, "-xmarkdown-code-block .hljs-function,.", k, "-xmarkdown-code-block .hljs-title.function_,.", k, "-xmarkdown-code-block .hljs-title.class_,.", k, "-xmarkdown-code-block .hljs-property,.", k, "-xmarkdown-mermaid-source .hljs-function,.", k, "-xmarkdown-mermaid-source .hljs-title.function_,.", k, "-xmarkdown-mermaid-source .hljs-title.class_,.", k, "-xmarkdown-mermaid-source .hljs-property{color:", xmarkdown.codeFunctionColor, ";}.", k, "-xmarkdown-code-block .hljs-deletion,.", k, "-xmarkdown-mermaid-source .hljs-deletion{color:", xmarkdown.mermaidErrorColor, ";}.", k, "-xmarkdown-mermaid-block{background:", xmarkdown.mermaidBg, ";}.", k, "-xmarkdown-mermaid-block .", k, "-xmarkdown-code-toolbar{border-bottom-color:", xmarkdown.borderColor, ";background:", xmarkdown.codeToolbarBg, ";color:", xmarkdown.codeToolbarColor, ";}.", k, "-xmarkdown-mermaid-canvas{position:relative;min-height:0;min-width:0;max-width:100%;padding:8px;box-sizing:border-box;overflow:hidden;background:", xmarkdown.mermaidCanvasBg, ";}.", k, "-xmarkdown-mermaid-viewport{overflow:auto;min-height:120px;min-width:0;max-width:100%;width:100%;box-sizing:border-box;max-height:480px;border-radius:12px;background:linear-gradient(180deg, rgba(255, 255, 255, 0.94) 0%, rgba(247, 249, 252, 0.96) 100%);cursor:default;user-select:none;scrollbar-width:thin;scrollbar-color:", xmarkdown.scrollbarThumb, " transparent;}.", k, "-xmarkdown-mermaid-viewport[data-kpc-can-drag=\"true\"]{cursor:grab;}.", k, "-xmarkdown-mermaid-viewport[data-kpc-dragging=\"true\"]{cursor:grabbing;}.", k, "-xmarkdown-mermaid-viewport::-webkit-scrollbar{width:10px;height:10px;}.", k, "-xmarkdown-mermaid-viewport::-webkit-scrollbar-track{background:transparent;}.", k, "-xmarkdown-mermaid-viewport::-webkit-scrollbar-thumb{background:", xmarkdown.scrollbarThumb, ";border:2px solid transparent;border-radius:999px;background-clip:padding-box;}.", k, "-xmarkdown-mermaid-viewport::-webkit-scrollbar-thumb:hover{background:", xmarkdown.scrollbarThumbHover, ";background-clip:padding-box;}.", k, "-xmarkdown-mermaid-viewport::-webkit-scrollbar-corner{background:transparent;}.", k, "-xmarkdown-mermaid-stage{display:flex;justify-content:center;align-items:center;min-width:100%;min-height:120px;padding:8px;box-sizing:border-box;}.", k, "-xmarkdown-mermaid-stage svg{display:block;margin:0 auto;transition:width ", theme.transition.small, ",height ", theme.transition.small, ";will-change:width,height;}.", k, "-xmarkdown-mermaid-source{display:none;margin:0;background:", xmarkdown.codeBlockBg, ";}.", k, "-xmarkdown-mermaid-block[data-kpc-view=\"source\"] .", k, "-xmarkdown-mermaid-source{display:block;}.", k, "-xmarkdown-mermaid-block[data-kpc-view=\"source\"] .", k, "-xmarkdown-mermaid-canvas{display:none;}.", k, "-xmarkdown-mermaid-error{padding:14px 16px;border-radius:8px;background:", xmarkdown.mermaidErrorBg, ";color:", xmarkdown.mermaidErrorColor, ";white-space:pre-wrap;}.", k, "-xmarkdown-content blockquote{padding:12px 16px;border-left:4px solid ", xmarkdown.blockquoteBorder, ";border-radius:0 10px 10px 0;background:", xmarkdown.blockquoteBg, ";color:", xmarkdown.mutedColor, ";}.", k, "-xmarkdown-table-wrap>table{width:max-content;min-width:100%;font-size:12px;border-collapse:collapse;border:1px solid ", xmarkdown.borderColor, ";border-radius:10px;}.", k, "-xmarkdown-table-wrap{max-width:100%;overflow-x:auto;overflow-y:hidden;margin:0 0 12px;}.", k, "-xmarkdown-table-wrap>table{margin:0;}.", k, "-xmarkdown-table-wrap>table>thead{background:", xmarkdown.tableHeadBg, ";}.", k, "-xmarkdown-table-wrap>table th,.", k, "-xmarkdown-table-wrap>table td{padding:10px 12px;border:1px solid ", xmarkdown.borderColor, ";text-align:left;vertical-align:top;}");
|
|
49
|
+
return /*#__PURE__*/css("display:block;color:", xmarkdown.color, ";line-height:1.7;font-size:14px;min-width:0;max-width:100%;width:100%;box-sizing:border-box;.", k, "-xmarkdown-loading,.", k, "-xmarkdown-empty{display:inline-flex;align-items:center;gap:8px;color:", xmarkdown.mutedColor, ";min-height:24px;}.", k, "-xmarkdown-loading-dots{display:inline-flex;align-items:center;gap:4px;margin-right:4px;}.", k, "-xmarkdown-loading-dot{width:", xmarkdown.loadingDotSize, ";height:", xmarkdown.loadingDotSize, ";border-radius:50%;background:", xmarkdown.loadingDotColor, ";display:inline-block;animation:", k, "-xmarkdown-loading-bounce 1s ease-in-out infinite;opacity:0.45;}.", k, "-xmarkdown-loading-dot:nth-of-type(2){animation-delay:0.14s;}.", k, "-xmarkdown-loading-dot:nth-of-type(3){animation-delay:0.28s;}@keyframes ", k, "-xmarkdown-loading-bounce{0%,80%,100%{transform:translateY(0) scale(0.9);opacity:0.45;}40%{transform:translateY(-4px) scale(1);opacity:1;}}.", k, "-xmarkdown-content{color:inherit;min-width:0;max-width:100%;overflow-wrap:anywhere;word-break:break-word;}.", k, "-xmarkdown-content p{font-size:12px;}.", k, "-xmarkdown-stable,.", k, "-xmarkdown-tail{display:contents;}.", k, "-xmarkdown-content .", k, "-xmarkdown-typing-suffix{display:inline-flex;align-items:center;gap:4px;width:26px;height:6px;margin-top:8px;line-height:0;}.", k, "-xmarkdown-content .", k, "-xmarkdown-typing-suffix span{width:6px;height:6px;border-radius:50%;background:radial-gradient(circle at center, #F8F9FA 0%, #D0D5D9 100%);animation:", k, "-xmarkdown-typing-suffix-pulse 1.2s ease-in-out infinite;}.", k, "-xmarkdown-content .", k, "-xmarkdown-typing-suffix span:nth-child(2){animation-delay:0.16s;}.", k, "-xmarkdown-content .", k, "-xmarkdown-typing-suffix span:nth-child(3){animation-delay:0.32s;}@keyframes ", k, "-xmarkdown-typing-suffix-pulse{0%,80%,100%{background:radial-gradient(circle at center, #F8F9FA 0%, #D0D5D9 100%);transform:translateY(0);}40%{background:radial-gradient(circle at center, ", setAlpha(theme.color.primary, 0.45), " 0%, ", theme.color.primary, " 100%);transform:translateY(-1px);}}.", k, "-xmarkdown-stable>:first-child{margin-top:0;}.", k, "-xmarkdown-stable>:last-child,.", k, "-xmarkdown-tail>:last-child{margin-bottom:0;}.", k, "-xmarkdown-content [data-kpc-xmarkdown-tail=\"true\"]{display:inline;white-space:pre-wrap;word-break:break-word;}.", k, "-xmarkdown-stable>p,.", k, "-xmarkdown-stable>ul,.", k, "-xmarkdown-stable>ol,.", k, "-xmarkdown-stable>blockquote,.", k, "-xmarkdown-stable>pre,.", k, "-xmarkdown-stable>table,.", k, "-xmarkdown-stable>hr,.", k, "-xmarkdown-stable>h1,.", k, "-xmarkdown-stable>h2,.", k, "-xmarkdown-stable>h3,.", k, "-xmarkdown-stable>h4,.", k, "-xmarkdown-stable>h5,.", k, "-xmarkdown-stable>h6{margin:0 0 12px;}.", k, "-xmarkdown-content blockquote>:first-child{margin-top:0;}.", k, "-xmarkdown-content blockquote>:last-child{margin-bottom:0;}.", k, "-xmarkdown-content ul,.", k, "-xmarkdown-content ol{padding-left:20px;}.", k, "-xmarkdown-content li{margin:6px 0;}.", k, "-xmarkdown-content li>p{margin:6px 0;}.", k, "-xmarkdown-content li>p:first-child{margin-top:0;}.", k, "-xmarkdown-content li>p:last-child{margin-bottom:0;}.", k, "-xmarkdown-content h1,.", k, "-xmarkdown-content h2,.", k, "-xmarkdown-content h3,.", k, "-xmarkdown-content h4,.", k, "-xmarkdown-content h5,.", k, "-xmarkdown-content h6{color:", xmarkdown.headingColor, ";font-weight:600;line-height:1.35;}.", k, "-xmarkdown-content h1{font-size:24px;}.", k, "-xmarkdown-content h2{font-size:20px;}.", k, "-xmarkdown-content h3{font-size:18px;}.", k, "-xmarkdown-content h4,.", k, "-xmarkdown-content h5,.", k, "-xmarkdown-content h6{font-size:16px;}.", k, "-xmarkdown-content a{color:", theme.color.primary, ";text-decoration:none;}.", k, "-xmarkdown-content a:hover{text-decoration:underline;}.", k, "-xmarkdown-content img{display:block;max-width:100%;height:auto;border-radius:8px;}.", k, "-xmarkdown-content hr{border:0;border-top:1px solid ", xmarkdown.hrColor, ";}.", k, "-xmarkdown-inline-code{display:inline-block;padding:0 6px;border-radius:6px;font-size:12px;line-height:1.7;vertical-align:baseline;background:", xmarkdown.inlineCodeBg, ";color:", xmarkdown.inlineCodeColor, ";border:1px solid ", xmarkdown.inlineCodeBorder, ";}.", k, "-xmarkdown-content pre{margin:0;overflow:auto;}.", k, "-xmarkdown-code-block,.", k, "-xmarkdown-mermaid-block{margin:0 0 12px;min-width:0;max-width:100%;overflow:hidden;border:1px solid ", xmarkdown.codeBlockBorder, ";border-radius:18px;background:", xmarkdown.codeBlockBg, ";box-sizing:border-box;}.", k, "-xmarkdown-stable:not(:empty)+.", k, "-xmarkdown-tail>.", k, "-xmarkdown-code-block:first-child,.", k, "-xmarkdown-stable:not(:empty)+.", k, "-xmarkdown-tail>.", k, "-xmarkdown-mermaid-block:first-child{margin-top:12px;}.", k, "-xmarkdown-code-toolbar{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;padding:8px 12px;border-bottom:1px solid ", xmarkdown.codeBlockBorder, ";background:", xmarkdown.codeToolbarBg, ";color:", xmarkdown.codeToolbarColor, ";}.", k, "-xmarkdown-code-language{min-width:0;font-size:13px;font-weight:700;letter-spacing:0.02em;text-transform:uppercase;color:inherit;flex:1 1 auto;}.", k, "-xmarkdown-code-actions{display:flex;align-items:center;gap:6px;flex-wrap:wrap;justify-content:flex-end;max-width:100%;margin-left:auto;}.", k, "-xmarkdown-toolbar-toggle-group,.", k, "-xmarkdown-toolbar-action-group{display:flex;align-items:center;gap:4px;flex-wrap:wrap;max-width:100%;}.", k, "-xmarkdown-toolbar-toggle-group{margin-right:2px;}.", k, "-xmarkdown-toolbar-toggle{border:0;padding:0 6px;background:transparent;color:", xmarkdown.mutedColor, ";font-size:12px;line-height:20px;cursor:pointer;transition:color ", theme.transition.small, ";}.", k, "-xmarkdown-toolbar-toggle[data-kpc-selected=\"true\"]{color:", xmarkdown.codeToolbarColor, ";font-weight:600;}.", k, "-xmarkdown-toolbar-toggle:hover{color:", xmarkdown.codeToolbarColor, ";}.", k, "-xmarkdown-toolbar-icon-button{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;padding:0;border:0;background:transparent;color:", xmarkdown.codeActionColor, ";cursor:pointer;transition:color ", theme.transition.small, ",background ", theme.transition.small, ";}.", k, "-xmarkdown-toolbar-icon-button:hover:not(:disabled){background:", xmarkdown.codeActionHoverBg, ";color:", theme.color.primary, ";}.", k, "-xmarkdown-toolbar-icon-button:disabled{opacity:0.4;cursor:not-allowed;background:transparent;color:", xmarkdown.codeActionColor, ";}.", k, "-xmarkdown-toolbar-icon{font-size:14px;line-height:1;}.", k, "-xmarkdown-code-body,.", k, "-xmarkdown-mermaid-body{min-width:0;max-width:100%;overflow:auto;background:", xmarkdown.codeBlockBg, ";}.", k, "-xmarkdown-code-block pre,.", k, "-xmarkdown-mermaid-source{padding:0px;background:transparent;color:", xmarkdown.codeTextColor, ";}.", k, "-xmarkdown-code-block pre,.", k, "-xmarkdown-mermaid-source{font-family:SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace;font-size:12px;line-height:1.7;}.", k, "-xmarkdown-code-block pre code,.", k, "-xmarkdown-mermaid-source code{display:block;min-width:fit-content;color:inherit;white-space:pre;word-break:normal;overflow-wrap:normal;padding:12px;}.", k, "-xmarkdown-code-block .hljs,.", k, "-xmarkdown-mermaid-source .hljs{background:transparent;color:", xmarkdown.codeTextColor, ";border:0;}.", k, "-xmarkdown-code-block .hljs-comment,.", k, "-xmarkdown-code-block .hljs-quote,.", k, "-xmarkdown-mermaid-source .hljs-comment,.", k, "-xmarkdown-mermaid-source .hljs-quote{color:", xmarkdown.codeCommentColor, ";}.", k, "-xmarkdown-code-block .hljs-keyword,.", k, "-xmarkdown-code-block .hljs-selector-tag,.", k, "-xmarkdown-code-block .hljs-literal,.", k, "-xmarkdown-code-block .hljs-link,.", k, "-xmarkdown-mermaid-source .hljs-keyword,.", k, "-xmarkdown-mermaid-source .hljs-selector-tag,.", k, "-xmarkdown-mermaid-source .hljs-literal,.", k, "-xmarkdown-mermaid-source .hljs-link{color:", xmarkdown.codeKeywordColor, ";}.", k, "-xmarkdown-code-block .hljs-string,.", k, "-xmarkdown-code-block .hljs-title,.", k, "-xmarkdown-code-block .hljs-type,.", k, "-xmarkdown-code-block .hljs-attribute,.", k, "-xmarkdown-code-block .hljs-symbol,.", k, "-xmarkdown-code-block .hljs-bullet,.", k, "-xmarkdown-code-block .hljs-addition,.", k, "-xmarkdown-mermaid-source .hljs-string,.", k, "-xmarkdown-mermaid-source .hljs-title,.", k, "-xmarkdown-mermaid-source .hljs-type,.", k, "-xmarkdown-mermaid-source .hljs-attribute,.", k, "-xmarkdown-mermaid-source .hljs-symbol,.", k, "-xmarkdown-mermaid-source .hljs-bullet,.", k, "-xmarkdown-mermaid-source .hljs-addition{color:", xmarkdown.codeStringColor, ";}.", k, "-xmarkdown-code-block .hljs-number,.", k, "-xmarkdown-code-block .hljs-built_in,.", k, "-xmarkdown-code-block .hljs-builtin-name,.", k, "-xmarkdown-code-block .hljs-variable,.", k, "-xmarkdown-code-block .hljs-template-variable,.", k, "-xmarkdown-code-block .hljs-params,.", k, "-xmarkdown-mermaid-source .hljs-number,.", k, "-xmarkdown-mermaid-source .hljs-built_in,.", k, "-xmarkdown-mermaid-source .hljs-builtin-name,.", k, "-xmarkdown-mermaid-source .hljs-variable,.", k, "-xmarkdown-mermaid-source .hljs-template-variable,.", k, "-xmarkdown-mermaid-source .hljs-params{color:", xmarkdown.codeNumberColor, ";}.", k, "-xmarkdown-code-block .hljs-function,.", k, "-xmarkdown-code-block .hljs-title.function_,.", k, "-xmarkdown-code-block .hljs-title.class_,.", k, "-xmarkdown-code-block .hljs-property,.", k, "-xmarkdown-mermaid-source .hljs-function,.", k, "-xmarkdown-mermaid-source .hljs-title.function_,.", k, "-xmarkdown-mermaid-source .hljs-title.class_,.", k, "-xmarkdown-mermaid-source .hljs-property{color:", xmarkdown.codeFunctionColor, ";}.", k, "-xmarkdown-code-block .hljs-deletion,.", k, "-xmarkdown-mermaid-source .hljs-deletion{color:", xmarkdown.mermaidErrorColor, ";}.", k, "-xmarkdown-mermaid-block{background:", xmarkdown.mermaidBg, ";}.", k, "-xmarkdown-mermaid-block .", k, "-xmarkdown-code-toolbar{border-bottom-color:", xmarkdown.borderColor, ";background:", xmarkdown.codeToolbarBg, ";color:", xmarkdown.codeToolbarColor, ";}.", k, "-xmarkdown-mermaid-canvas{position:relative;min-height:0;min-width:0;max-width:100%;padding:8px;box-sizing:border-box;overflow:hidden;background:", xmarkdown.mermaidCanvasBg, ";}.", k, "-xmarkdown-mermaid-viewport{overflow:auto;min-height:120px;min-width:0;max-width:100%;width:100%;box-sizing:border-box;max-height:480px;border-radius:12px;background:linear-gradient(180deg, rgba(255, 255, 255, 0.94) 0%, rgba(247, 249, 252, 0.96) 100%);cursor:default;user-select:none;scrollbar-width:thin;scrollbar-color:", xmarkdown.scrollbarThumb, " transparent;}.", k, "-xmarkdown-mermaid-viewport[data-kpc-can-drag=\"true\"]{cursor:grab;}.", k, "-xmarkdown-mermaid-viewport[data-kpc-dragging=\"true\"]{cursor:grabbing;}.", k, "-xmarkdown-mermaid-viewport::-webkit-scrollbar{width:10px;height:10px;}.", k, "-xmarkdown-mermaid-viewport::-webkit-scrollbar-track{background:transparent;}.", k, "-xmarkdown-mermaid-viewport::-webkit-scrollbar-thumb{background:", xmarkdown.scrollbarThumb, ";border:2px solid transparent;border-radius:999px;background-clip:padding-box;}.", k, "-xmarkdown-mermaid-viewport::-webkit-scrollbar-thumb:hover{background:", xmarkdown.scrollbarThumbHover, ";background-clip:padding-box;}.", k, "-xmarkdown-mermaid-viewport::-webkit-scrollbar-corner{background:transparent;}.", k, "-xmarkdown-mermaid-stage{display:flex;justify-content:center;align-items:center;min-width:100%;min-height:120px;padding:8px;box-sizing:border-box;}.", k, "-xmarkdown-mermaid-stage svg{display:block;margin:0 auto;transition:width ", theme.transition.small, ",height ", theme.transition.small, ";will-change:width,height;}.", k, "-xmarkdown-mermaid-source{display:none;margin:0;background:", xmarkdown.codeBlockBg, ";}.", k, "-xmarkdown-mermaid-block[data-kpc-view=\"source\"] .", k, "-xmarkdown-mermaid-source{display:block;}.", k, "-xmarkdown-mermaid-block[data-kpc-view=\"source\"] .", k, "-xmarkdown-mermaid-canvas{display:none;}.", k, "-xmarkdown-mermaid-error{padding:14px 16px;border-radius:8px;background:", xmarkdown.mermaidErrorBg, ";color:", xmarkdown.mermaidErrorColor, ";white-space:pre-wrap;}.", k, "-xmarkdown-content blockquote{padding:12px 16px;border-left:4px solid ", xmarkdown.blockquoteBorder, ";border-radius:0 10px 10px 0;background:", xmarkdown.blockquoteBg, ";color:", xmarkdown.mutedColor, ";}.", k, "-xmarkdown-table-wrap>table{width:max-content;min-width:100%;font-size:12px;border-collapse:collapse;border:1px solid ", xmarkdown.borderColor, ";border-radius:10px;}.", k, "-xmarkdown-table-wrap{max-width:100%;overflow-x:auto;overflow-y:hidden;margin:0 0 12px;}.", k, "-xmarkdown-table-wrap>table{margin:0;}.", k, "-xmarkdown-table-wrap>table>thead{background:", xmarkdown.tableHeadBg, ";}.", k, "-xmarkdown-table-wrap>table th,.", k, "-xmarkdown-table-wrap>table td{padding:10px 12px;border:1px solid ", xmarkdown.borderColor, ";text-align:left;vertical-align:top;}");
|
|
50
50
|
});
|
|
@@ -24,6 +24,7 @@ export function useXMarkdownDisplay(getPrefixCls) {
|
|
|
24
24
|
var previousContent = instance.get('content');
|
|
25
25
|
var previousLoading = !!instance.get('loading');
|
|
26
26
|
var previousStreaming = !!instance.get('streaming');
|
|
27
|
+
var typingTargetKey = '';
|
|
27
28
|
// Markdown 渲染缓存
|
|
28
29
|
var lastStableMarkdownSource = '';
|
|
29
30
|
var lastStableMarkdownBlocks = [];
|
|
@@ -130,12 +131,16 @@ export function useXMarkdownDisplay(getPrefixCls) {
|
|
|
130
131
|
if (typing && typeof typing === 'object') {
|
|
131
132
|
return {
|
|
132
133
|
interval: Math.max(typing.interval || 24, 16),
|
|
133
|
-
step: Math.max(typing.step || 2, 1)
|
|
134
|
+
step: Math.max(typing.step || 2, 1),
|
|
135
|
+
keepPrefix: typing.keepPrefix !== false,
|
|
136
|
+
resumeFrom: typing.resumeFrom
|
|
134
137
|
};
|
|
135
138
|
}
|
|
136
139
|
return {
|
|
137
140
|
interval: 24,
|
|
138
|
-
step: 2
|
|
141
|
+
step: 2,
|
|
142
|
+
keepPrefix: true,
|
|
143
|
+
resumeFrom: undefined
|
|
139
144
|
};
|
|
140
145
|
}
|
|
141
146
|
/**
|
|
@@ -209,19 +214,50 @@ export function useXMarkdownDisplay(getPrefixCls) {
|
|
|
209
214
|
function getDisplayedContent() {
|
|
210
215
|
return instance.get('$displayContent') || '';
|
|
211
216
|
}
|
|
217
|
+
function getSafeContentPrefix(content, prefix) {
|
|
218
|
+
if (!prefix) return '';
|
|
219
|
+
if (_startsWithInstanceProperty(content).call(content, prefix)) return prefix;
|
|
220
|
+
var i = 0;
|
|
221
|
+
while (i < prefix.length && i < content.length && prefix[i] === content[i]) {
|
|
222
|
+
i++;
|
|
223
|
+
}
|
|
224
|
+
return _sliceInstanceProperty(prefix).call(prefix, 0, i);
|
|
225
|
+
}
|
|
226
|
+
function getResumePrefix(content) {
|
|
227
|
+
var _getTypingOptions = getTypingOptions(),
|
|
228
|
+
resumeFrom = _getTypingOptions.resumeFrom;
|
|
229
|
+
if (resumeFrom === undefined || resumeFrom === null) return '';
|
|
230
|
+
if (resumeFrom === 'content') return content;
|
|
231
|
+
if (typeof resumeFrom === 'number') return _sliceInstanceProperty(content).call(content, 0, Math.max(0, resumeFrom));
|
|
232
|
+
return getSafeContentPrefix(content, String(resumeFrom));
|
|
233
|
+
}
|
|
234
|
+
function getTypingTargetKey(content) {
|
|
235
|
+
var _getTypingOptions2 = getTypingOptions(),
|
|
236
|
+
keepPrefix = _getTypingOptions2.keepPrefix,
|
|
237
|
+
resumeFrom = _getTypingOptions2.resumeFrom;
|
|
238
|
+
return (keepPrefix ? '1' : '0') + "\0" + String(resumeFrom) + "\0" + content;
|
|
239
|
+
}
|
|
240
|
+
function syncTypingStart(content) {
|
|
241
|
+
var targetKey = getTypingTargetKey(content);
|
|
242
|
+
if (targetKey === typingTargetKey) return;
|
|
243
|
+
typingTargetKey = targetKey;
|
|
244
|
+
var sharedPrefix = getSharedPrefix(content);
|
|
245
|
+
if (sharedPrefix !== getDisplayedContent()) {
|
|
246
|
+
resetTypingComplete();
|
|
247
|
+
setDisplayContent(sharedPrefix);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
212
250
|
/**
|
|
213
251
|
* 获取共享前缀
|
|
214
252
|
*/
|
|
215
253
|
function getSharedPrefix(content) {
|
|
216
254
|
var displayedContent = getDisplayedContent();
|
|
217
|
-
if (!displayedContent
|
|
255
|
+
if (!displayedContent) return getResumePrefix(content);
|
|
256
|
+
if (!getTypingOptions().keepPrefix) return '';
|
|
257
|
+
if (_startsWithInstanceProperty(content).call(content, displayedContent)) {
|
|
218
258
|
return displayedContent;
|
|
219
259
|
}
|
|
220
|
-
|
|
221
|
-
while (i < displayedContent.length && i < content.length && displayedContent[i] === content[i]) {
|
|
222
|
-
i++;
|
|
223
|
-
}
|
|
224
|
-
return _sliceInstanceProperty(displayedContent).call(displayedContent, 0, i);
|
|
260
|
+
return getSafeContentPrefix(content, displayedContent);
|
|
225
261
|
}
|
|
226
262
|
/**
|
|
227
263
|
* 立即渲染 Markdown
|
|
@@ -352,8 +388,8 @@ export function useXMarkdownDisplay(getPrefixCls) {
|
|
|
352
388
|
runTyping();
|
|
353
389
|
return;
|
|
354
390
|
}
|
|
355
|
-
var
|
|
356
|
-
interval =
|
|
391
|
+
var _getTypingOptions3 = getTypingOptions(),
|
|
392
|
+
interval = _getTypingOptions3.interval;
|
|
357
393
|
setTypingActive(true);
|
|
358
394
|
typingTimer = window.setTimeout(function () {
|
|
359
395
|
typingTimer = null;
|
|
@@ -371,6 +407,7 @@ export function useXMarkdownDisplay(getPrefixCls) {
|
|
|
371
407
|
if (instance.get('loading')) {
|
|
372
408
|
stopTyping();
|
|
373
409
|
resetTypingComplete();
|
|
410
|
+
typingTargetKey = '';
|
|
374
411
|
if (!setDisplayContent('')) {
|
|
375
412
|
syncRenderedMarkdown();
|
|
376
413
|
}
|
|
@@ -379,6 +416,7 @@ export function useXMarkdownDisplay(getPrefixCls) {
|
|
|
379
416
|
// 无内容或禁用打字
|
|
380
417
|
if (!instance.get('typing') || !nextValue) {
|
|
381
418
|
stopTyping();
|
|
419
|
+
typingTargetKey = '';
|
|
382
420
|
if (!setDisplayContent(nextValue)) {
|
|
383
421
|
syncRenderedMarkdown();
|
|
384
422
|
}
|
|
@@ -388,15 +426,11 @@ export function useXMarkdownDisplay(getPrefixCls) {
|
|
|
388
426
|
return;
|
|
389
427
|
}
|
|
390
428
|
// 内容变化检测
|
|
391
|
-
|
|
392
|
-
if (sharedPrefix !== getDisplayedContent()) {
|
|
393
|
-
resetTypingComplete();
|
|
394
|
-
setDisplayContent(sharedPrefix);
|
|
395
|
-
}
|
|
429
|
+
syncTypingStart(nextValue);
|
|
396
430
|
var currentValue = getDisplayedContent();
|
|
397
|
-
var
|
|
398
|
-
interval =
|
|
399
|
-
step =
|
|
431
|
+
var _getTypingOptions4 = getTypingOptions(),
|
|
432
|
+
interval = _getTypingOptions4.interval,
|
|
433
|
+
step = _getTypingOptions4.step;
|
|
400
434
|
// 逐步显示内容
|
|
401
435
|
if (currentValue !== nextValue) {
|
|
402
436
|
var nextLength = Math.min(currentValue.length + step, nextValue.length);
|
|
@@ -430,6 +464,7 @@ export function useXMarkdownDisplay(getPrefixCls) {
|
|
|
430
464
|
if (instance.get('loading')) {
|
|
431
465
|
stopTyping();
|
|
432
466
|
resetTypingComplete();
|
|
467
|
+
typingTargetKey = '';
|
|
433
468
|
if (!setDisplayContent('')) {
|
|
434
469
|
syncRenderedMarkdown();
|
|
435
470
|
}
|
|
@@ -442,6 +477,7 @@ export function useXMarkdownDisplay(getPrefixCls) {
|
|
|
442
477
|
// 空内容或禁用打字效果,直接显示
|
|
443
478
|
if (!nextValue || !typing) {
|
|
444
479
|
stopTyping();
|
|
480
|
+
typingTargetKey = '';
|
|
445
481
|
if (!setDisplayContent(nextValue)) {
|
|
446
482
|
syncRenderedMarkdown();
|
|
447
483
|
}
|
|
@@ -451,12 +487,11 @@ export function useXMarkdownDisplay(getPrefixCls) {
|
|
|
451
487
|
return;
|
|
452
488
|
}
|
|
453
489
|
// 内容变化检测
|
|
454
|
-
var
|
|
490
|
+
var previousDisplayContent = getDisplayedContent();
|
|
491
|
+
syncTypingStart(nextValue);
|
|
455
492
|
// 内容发生"非追加"变化时
|
|
456
|
-
if (
|
|
493
|
+
if (getDisplayedContent() !== previousDisplayContent) {
|
|
457
494
|
stopTyping();
|
|
458
|
-
resetTypingComplete();
|
|
459
|
-
setDisplayContent(sharedPrefix);
|
|
460
495
|
}
|
|
461
496
|
// 已完成
|
|
462
497
|
if (getDisplayedContent() === nextValue) {
|
|
@@ -475,8 +510,10 @@ export function useXMarkdownDisplay(getPrefixCls) {
|
|
|
475
510
|
*/
|
|
476
511
|
function bootstrap() {
|
|
477
512
|
var content = instance.get('content');
|
|
513
|
+
var nextValue = content === undefined || content === null ? '' : String(content);
|
|
478
514
|
setTypingActive(false);
|
|
479
|
-
|
|
515
|
+
var initialDisplayContent = !instance.get('loading') && nextValue ? instance.get('typing') ? getResumePrefix(nextValue) : nextValue : '';
|
|
516
|
+
setDisplayContent(initialDisplayContent);
|
|
480
517
|
// 监听核心属性变化
|
|
481
518
|
['content', 'loading', 'streaming', 'typing'].forEach(function (key) {
|
|
482
519
|
instance.watch(key, function () {
|
|
@@ -538,6 +575,13 @@ export function useXMarkdownDisplay(getPrefixCls) {
|
|
|
538
575
|
function isTypingActive() {
|
|
539
576
|
return !!instance.get('$typingActive');
|
|
540
577
|
}
|
|
578
|
+
function shouldShowTypingSuffix() {
|
|
579
|
+
var typing = instance.get('typing');
|
|
580
|
+
if (!typing) return false;
|
|
581
|
+
if (typeof typing === 'boolean') return false;
|
|
582
|
+
if (typing.suffix !== true) return false;
|
|
583
|
+
return !instance.get('loading') && (isTypingActive() || !!instance.get('streaming'));
|
|
584
|
+
}
|
|
541
585
|
return {
|
|
542
586
|
onMounted: function onMounted() {
|
|
543
587
|
mounted = true;
|
|
@@ -564,6 +608,7 @@ export function useXMarkdownDisplay(getPrefixCls) {
|
|
|
564
608
|
getRenderedBlockData: getRenderedBlockData,
|
|
565
609
|
getRenderedNodes: getRenderedNodes,
|
|
566
610
|
// 状态查询
|
|
567
|
-
isTypingActive: isTypingActive
|
|
611
|
+
isTypingActive: isTypingActive,
|
|
612
|
+
shouldShowTypingSuffix: shouldShowTypingSuffix
|
|
568
613
|
};
|
|
569
614
|
}
|
|
@@ -5,6 +5,9 @@ import type { XMarkdownCodeBlockRenderers, XMarkdownFormulaDelimiter, XMarkdownP
|
|
|
5
5
|
export interface XMarkdownTyping {
|
|
6
6
|
interval?: number;
|
|
7
7
|
step?: number;
|
|
8
|
+
suffix?: boolean;
|
|
9
|
+
keepPrefix?: boolean;
|
|
10
|
+
resumeFrom?: string | number | 'content';
|
|
8
11
|
}
|
|
9
12
|
export interface XMarkdownProps {
|
|
10
13
|
content?: string | number;
|
|
@@ -3,6 +3,9 @@ import { createVNode as _$cv, className as _$cn, createElementVNode as _$ce } fr
|
|
|
3
3
|
import { isInvalid, noop } from 'intact-shared';
|
|
4
4
|
import { getRestProps, isEmptyString } from '../utils';
|
|
5
5
|
import { makeStyles } from './styles';
|
|
6
|
+
var _$tmp0 = {
|
|
7
|
+
'aria-hidden': 'true'
|
|
8
|
+
};
|
|
6
9
|
export default function ($props, $blocks, $__proto__) {
|
|
7
10
|
var _classNameObj;
|
|
8
11
|
$blocks || ($blocks = {});
|
|
@@ -16,7 +19,8 @@ export default function ($props, $blocks, $__proto__) {
|
|
|
16
19
|
contentRef = _this$contentModel.contentRef;
|
|
17
20
|
var _this$display = this.display,
|
|
18
21
|
shouldShowLoadingShell = _this$display.shouldShowLoadingShell,
|
|
19
|
-
shouldShowEmpty = _this$display.shouldShowEmpty
|
|
22
|
+
shouldShowEmpty = _this$display.shouldShowEmpty,
|
|
23
|
+
shouldShowTypingSuffix = _this$display.shouldShowTypingSuffix;
|
|
20
24
|
var stableNodes = this.display.getRenderedStableNodes();
|
|
21
25
|
var tailNodes = this.display.getRenderedTailNodes();
|
|
22
26
|
var showLoadingShell = shouldShowLoadingShell();
|
|
@@ -38,6 +42,6 @@ export default function ($props, $blocks, $__proto__) {
|
|
|
38
42
|
'className': _$cn(classNameObj)
|
|
39
43
|
}, getRestProps(this), {
|
|
40
44
|
'ref': rootRef
|
|
41
|
-
}), showLoadingShell ? hasLoadingSlot ? loadingSlot : _$ce(2, 'div', _$ce(2, 'div', [_$ce(2, 'div', null, 1, _$cn(k + "-xmarkdown-loading-dot")), _$ce(2, 'div', null, 1, _$cn(k + "-xmarkdown-loading-dot")), _$ce(2, 'div', null, 1, _$cn(k + "-xmarkdown-loading-dot"))], 4, _$cn(k + "-xmarkdown-loading-dots")), 2, _$cn(k + "-xmarkdown-loading")) : showEmpty ? hasEmptySlot ? _$ce(2, 'div', emptySlot, 0, _$cn(k + "-xmarkdown-empty")) : undefined : _$ce(2, 'div', [_$ce(2, 'div', stableNodes, 0, _$cn(k + "-xmarkdown-stable")), _$ce(2, 'div', tailNodes, 0, _$cn(k + "-xmarkdown-tail"))], 4, _$cn(k + "-xmarkdown-content"), null, null, contentRef));
|
|
45
|
+
}), showLoadingShell ? hasLoadingSlot ? loadingSlot : _$ce(2, 'div', _$ce(2, 'div', [_$ce(2, 'div', null, 1, _$cn(k + "-xmarkdown-loading-dot")), _$ce(2, 'div', null, 1, _$cn(k + "-xmarkdown-loading-dot")), _$ce(2, 'div', null, 1, _$cn(k + "-xmarkdown-loading-dot"))], 4, _$cn(k + "-xmarkdown-loading-dots")), 2, _$cn(k + "-xmarkdown-loading")) : showEmpty ? hasEmptySlot ? _$ce(2, 'div', emptySlot, 0, _$cn(k + "-xmarkdown-empty")) : undefined : _$ce(2, 'div', [_$ce(2, 'div', [_$ce(2, 'div', stableNodes, 0, _$cn(k + "-xmarkdown-stable")), _$ce(2, 'div', tailNodes, 0, _$cn(k + "-xmarkdown-tail"))], 4, _$cn(k + "-xmarkdown-body")), shouldShowTypingSuffix() ? _$ce(2, 'div', [_$ce(2, 'span'), _$ce(2, 'span'), _$ce(2, 'span')], 4, _$cn(k + "-xmarkdown-typing-suffix"), _$tmp0) : undefined], 0, _$cn(k + "-xmarkdown-content"), null, null, contentRef));
|
|
42
46
|
}
|
|
43
47
|
;
|
package/dist/i18n/en-US.js
CHANGED
|
@@ -1388,6 +1388,7 @@ var i18n = {
|
|
|
1388
1388
|
'查看文件夹': 'View Folder',
|
|
1389
1389
|
'查看文件': 'View File',
|
|
1390
1390
|
'上传图片': 'Upload Image',
|
|
1391
|
+
'参考内容': 'Reference',
|
|
1391
1392
|
'上传文件夹': 'Upload Folder',
|
|
1392
1393
|
'超出文件数量最大限制:{limit}': 'Exceed the maximum limit of the number of files: {limit}',
|
|
1393
1394
|
'"{name}" 超出文件最大限制:{maxSize}kb': '"{name}" exceeds the maximum size of file: {maxSize}kb',
|