@ant-design/agentic-ui 2.29.7 → 2.29.8
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/dist/ChatLayout/components/FooterBackgroundLottie/index.js +1 -1
- package/dist/MarkdownEditor/BaseMarkdownEditor.js +1 -1
- package/dist/MarkdownEditor/editor/elements/Blockquote/ReadonlyBlockquote.d.ts +33 -0
- package/dist/MarkdownEditor/editor/elements/Blockquote/ReadonlyBlockquote.js +69 -0
- package/dist/MarkdownEditor/editor/elements/Break/ReadonlyBreak.d.ts +30 -0
- package/dist/MarkdownEditor/editor/elements/Break/ReadonlyBreak.js +88 -0
- package/dist/MarkdownEditor/editor/elements/Card/ReadonlyCard.d.ts +34 -0
- package/dist/MarkdownEditor/editor/elements/Card/ReadonlyCard.js +96 -0
- package/dist/MarkdownEditor/editor/elements/Code/ReadonlyCode.d.ts +33 -0
- package/dist/MarkdownEditor/editor/elements/Code/ReadonlyCode.js +145 -0
- package/dist/MarkdownEditor/editor/elements/FootnoteDefinition/ReadonlyFootnoteDefinition.d.ts +34 -0
- package/dist/MarkdownEditor/editor/elements/FootnoteDefinition/ReadonlyFootnoteDefinition.js +125 -0
- package/dist/MarkdownEditor/editor/elements/FootnoteReference/ReadonlyFootnoteReference.d.ts +34 -0
- package/dist/MarkdownEditor/editor/elements/FootnoteReference/ReadonlyFootnoteReference.js +101 -0
- package/dist/MarkdownEditor/editor/elements/Head/ReadonlyHead.d.ts +35 -0
- package/dist/MarkdownEditor/editor/elements/Head/ReadonlyHead.js +111 -0
- package/dist/MarkdownEditor/editor/elements/Head/index.d.ts +3 -0
- package/dist/MarkdownEditor/editor/elements/Head/index.js +3 -1
- package/dist/MarkdownEditor/editor/elements/Hr/ReadonlyHr.d.ts +30 -0
- package/dist/MarkdownEditor/editor/elements/Hr/ReadonlyHr.js +95 -0
- package/dist/MarkdownEditor/editor/elements/Image/ReadonlyEditorImage.d.ts +35 -0
- package/dist/MarkdownEditor/editor/elements/Image/ReadonlyEditorImage.js +426 -0
- package/dist/MarkdownEditor/editor/elements/Image/index.js +38 -50
- package/dist/MarkdownEditor/editor/elements/InlineKatex/ReadonlyInlineKatex.d.ts +32 -0
- package/dist/MarkdownEditor/editor/elements/InlineKatex/ReadonlyInlineKatex.js +100 -0
- package/dist/MarkdownEditor/editor/elements/Katex/ReadonlyKatex.d.ts +32 -0
- package/dist/MarkdownEditor/editor/elements/Katex/ReadonlyKatex.js +110 -0
- package/dist/MarkdownEditor/editor/elements/LinkCard/ReadonlyLinkCard.d.ts +40 -0
- package/dist/MarkdownEditor/editor/elements/LinkCard/ReadonlyLinkCard.js +215 -0
- package/dist/MarkdownEditor/editor/elements/List/List.js +27 -12
- package/dist/MarkdownEditor/editor/elements/List/ReadonlyList.d.ts +33 -0
- package/dist/MarkdownEditor/editor/elements/List/ReadonlyList.js +93 -0
- package/dist/MarkdownEditor/editor/elements/List/ReadonlyListItem.d.ts +35 -0
- package/dist/MarkdownEditor/editor/elements/List/ReadonlyListItem.js +138 -0
- package/dist/MarkdownEditor/editor/elements/Media/ReadonlyMedia.d.ts +36 -0
- package/dist/MarkdownEditor/editor/elements/Media/ReadonlyMedia.js +600 -0
- package/dist/MarkdownEditor/editor/elements/Mermaid/ReadonlyMermaid.d.ts +32 -0
- package/dist/MarkdownEditor/editor/elements/Mermaid/ReadonlyMermaid.js +101 -0
- package/dist/MarkdownEditor/editor/elements/Paragraph/ReadonlyParagraph.d.ts +35 -0
- package/dist/MarkdownEditor/editor/elements/Paragraph/ReadonlyParagraph.js +109 -0
- package/dist/MarkdownEditor/editor/elements/Paragraph/index.js +2 -1
- package/dist/MarkdownEditor/editor/elements/Schema/ReadonlySchema.d.ts +33 -0
- package/dist/MarkdownEditor/editor/elements/Schema/ReadonlySchema.js +163 -0
- package/dist/MarkdownEditor/editor/elements/index.d.ts +20 -1
- package/dist/MarkdownEditor/editor/elements/index.js +65 -29
- package/dist/MarkdownEditor/editor/parser/parse/parseBlockElements.js +18 -10
- package/dist/MarkdownEditor/editor/parser/parserSlateNodeToMarkdown.js +64 -21
- package/dist/MarkdownEditor/editor/plugins/elements.js +60 -6
- package/dist/MarkdownEditor/editor/plugins/hotKeyCommands/backspace.js +97 -39
- package/dist/MarkdownEditor/editor/plugins/hotKeyCommands/tab.d.ts +14 -0
- package/dist/MarkdownEditor/editor/plugins/hotKeyCommands/tab.js +117 -90
- package/dist/MarkdownEditor/editor/plugins/index.d.ts +8 -0
- package/dist/MarkdownEditor/editor/plugins/index.js +8 -0
- package/dist/MarkdownEditor/editor/plugins/insertParsedHtmlNodes.d.ts +12 -6
- package/dist/MarkdownEditor/editor/plugins/insertParsedHtmlNodes.js +67 -42
- package/dist/MarkdownEditor/editor/plugins/utils.d.ts +31 -0
- package/dist/MarkdownEditor/editor/plugins/utils.js +75 -0
- package/dist/MarkdownEditor/editor/plugins/withCardPlugin.d.ts +15 -0
- package/dist/MarkdownEditor/editor/plugins/withCardPlugin.js +329 -0
- package/dist/MarkdownEditor/editor/plugins/withCodeTagPlugin.d.ts +11 -0
- package/dist/MarkdownEditor/editor/plugins/withCodeTagPlugin.js +299 -0
- package/dist/MarkdownEditor/editor/plugins/withInlineNodes.d.ts +12 -0
- package/dist/MarkdownEditor/editor/plugins/withInlineNodes.js +17 -0
- package/dist/MarkdownEditor/editor/plugins/withLinkAndMediaPlugin.d.ts +11 -0
- package/dist/MarkdownEditor/editor/plugins/withLinkAndMediaPlugin.js +70 -0
- package/dist/MarkdownEditor/editor/plugins/withListsPlugin.d.ts +23 -0
- package/dist/MarkdownEditor/editor/plugins/withListsPlugin.js +204 -0
- package/dist/MarkdownEditor/editor/plugins/withMarkdown.d.ts +9 -12
- package/dist/MarkdownEditor/editor/plugins/withMarkdown.js +17 -764
- package/dist/MarkdownEditor/editor/plugins/withSchemaPlugin.d.ts +11 -0
- package/dist/MarkdownEditor/editor/plugins/withSchemaPlugin.js +55 -0
- package/dist/MarkdownEditor/editor/plugins/withVoidNodes.d.ts +12 -0
- package/dist/MarkdownEditor/editor/plugins/withVoidNodes.js +17 -0
- package/dist/MarkdownEditor/editor/store.js +1 -1
- package/dist/MarkdownEditor/editor/utils/docx/module.js +41 -8
- package/dist/MarkdownEditor/editor/utils/editorCommands.d.ts +97 -0
- package/dist/MarkdownEditor/editor/utils/editorCommands.js +966 -0
- package/dist/MarkdownEditor/editor/utils/editorUtils.js +2 -2
- package/dist/MarkdownEditor/editor/utils/keyboard.js +15 -391
- package/dist/MarkdownEditor/el.d.ts +12 -5
- package/dist/MarkdownInputField/MarkdownInputField.js +10 -23
- package/dist/MarkdownInputField/style.js +9 -4
- package/package.json +8 -8
|
@@ -0,0 +1,426 @@
|
|
|
1
|
+
function _array_like_to_array(arr, len) {
|
|
2
|
+
if (len == null || len > arr.length) len = arr.length;
|
|
3
|
+
for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
|
|
4
|
+
return arr2;
|
|
5
|
+
}
|
|
6
|
+
function _array_with_holes(arr) {
|
|
7
|
+
if (Array.isArray(arr)) return arr;
|
|
8
|
+
}
|
|
9
|
+
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
|
|
10
|
+
try {
|
|
11
|
+
var info = gen[key](arg);
|
|
12
|
+
var value = info.value;
|
|
13
|
+
} catch (error) {
|
|
14
|
+
reject(error);
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
if (info.done) {
|
|
18
|
+
resolve(value);
|
|
19
|
+
} else {
|
|
20
|
+
Promise.resolve(value).then(_next, _throw);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
function _async_to_generator(fn) {
|
|
24
|
+
return function() {
|
|
25
|
+
var self = this, args = arguments;
|
|
26
|
+
return new Promise(function(resolve, reject) {
|
|
27
|
+
var gen = fn.apply(self, args);
|
|
28
|
+
function _next(value) {
|
|
29
|
+
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
|
|
30
|
+
}
|
|
31
|
+
function _throw(err) {
|
|
32
|
+
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
|
|
33
|
+
}
|
|
34
|
+
_next(undefined);
|
|
35
|
+
});
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
function _define_property(obj, key, value) {
|
|
39
|
+
if (key in obj) {
|
|
40
|
+
Object.defineProperty(obj, key, {
|
|
41
|
+
value: value,
|
|
42
|
+
enumerable: true,
|
|
43
|
+
configurable: true,
|
|
44
|
+
writable: true
|
|
45
|
+
});
|
|
46
|
+
} else {
|
|
47
|
+
obj[key] = value;
|
|
48
|
+
}
|
|
49
|
+
return obj;
|
|
50
|
+
}
|
|
51
|
+
function _iterable_to_array_limit(arr, i) {
|
|
52
|
+
var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
|
|
53
|
+
if (_i == null) return;
|
|
54
|
+
var _arr = [];
|
|
55
|
+
var _n = true;
|
|
56
|
+
var _d = false;
|
|
57
|
+
var _s, _e;
|
|
58
|
+
try {
|
|
59
|
+
for(_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true){
|
|
60
|
+
_arr.push(_s.value);
|
|
61
|
+
if (i && _arr.length === i) break;
|
|
62
|
+
}
|
|
63
|
+
} catch (err) {
|
|
64
|
+
_d = true;
|
|
65
|
+
_e = err;
|
|
66
|
+
} finally{
|
|
67
|
+
try {
|
|
68
|
+
if (!_n && _i["return"] != null) _i["return"]();
|
|
69
|
+
} finally{
|
|
70
|
+
if (_d) throw _e;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return _arr;
|
|
74
|
+
}
|
|
75
|
+
function _non_iterable_rest() {
|
|
76
|
+
throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
77
|
+
}
|
|
78
|
+
function _object_spread(target) {
|
|
79
|
+
for(var i = 1; i < arguments.length; i++){
|
|
80
|
+
var source = arguments[i] != null ? arguments[i] : {};
|
|
81
|
+
var ownKeys = Object.keys(source);
|
|
82
|
+
if (typeof Object.getOwnPropertySymbols === "function") {
|
|
83
|
+
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
|
|
84
|
+
return Object.getOwnPropertyDescriptor(source, sym).enumerable;
|
|
85
|
+
}));
|
|
86
|
+
}
|
|
87
|
+
ownKeys.forEach(function(key) {
|
|
88
|
+
_define_property(target, key, source[key]);
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
return target;
|
|
92
|
+
}
|
|
93
|
+
function ownKeys(object, enumerableOnly) {
|
|
94
|
+
var keys = Object.keys(object);
|
|
95
|
+
if (Object.getOwnPropertySymbols) {
|
|
96
|
+
var symbols = Object.getOwnPropertySymbols(object);
|
|
97
|
+
if (enumerableOnly) {
|
|
98
|
+
symbols = symbols.filter(function(sym) {
|
|
99
|
+
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
keys.push.apply(keys, symbols);
|
|
103
|
+
}
|
|
104
|
+
return keys;
|
|
105
|
+
}
|
|
106
|
+
function _object_spread_props(target, source) {
|
|
107
|
+
source = source != null ? source : {};
|
|
108
|
+
if (Object.getOwnPropertyDescriptors) {
|
|
109
|
+
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
|
|
110
|
+
} else {
|
|
111
|
+
ownKeys(Object(source)).forEach(function(key) {
|
|
112
|
+
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
return target;
|
|
116
|
+
}
|
|
117
|
+
function _sliced_to_array(arr, i) {
|
|
118
|
+
return _array_with_holes(arr) || _iterable_to_array_limit(arr, i) || _unsupported_iterable_to_array(arr, i) || _non_iterable_rest();
|
|
119
|
+
}
|
|
120
|
+
function _unsupported_iterable_to_array(o, minLen) {
|
|
121
|
+
if (!o) return;
|
|
122
|
+
if (typeof o === "string") return _array_like_to_array(o, minLen);
|
|
123
|
+
var n = Object.prototype.toString.call(o).slice(8, -1);
|
|
124
|
+
if (n === "Object" && o.constructor) n = o.constructor.name;
|
|
125
|
+
if (n === "Map" || n === "Set") return Array.from(n);
|
|
126
|
+
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
|
|
127
|
+
}
|
|
128
|
+
function _ts_generator(thisArg, body) {
|
|
129
|
+
var f, y, t, _ = {
|
|
130
|
+
label: 0,
|
|
131
|
+
sent: function() {
|
|
132
|
+
if (t[0] & 1) throw t[1];
|
|
133
|
+
return t[1];
|
|
134
|
+
},
|
|
135
|
+
trys: [],
|
|
136
|
+
ops: []
|
|
137
|
+
}, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype), d = Object.defineProperty;
|
|
138
|
+
return d(g, "next", {
|
|
139
|
+
value: verb(0)
|
|
140
|
+
}), d(g, "throw", {
|
|
141
|
+
value: verb(1)
|
|
142
|
+
}), d(g, "return", {
|
|
143
|
+
value: verb(2)
|
|
144
|
+
}), typeof Symbol === "function" && d(g, Symbol.iterator, {
|
|
145
|
+
value: function() {
|
|
146
|
+
return this;
|
|
147
|
+
}
|
|
148
|
+
}), g;
|
|
149
|
+
function verb(n) {
|
|
150
|
+
return function(v) {
|
|
151
|
+
return step([
|
|
152
|
+
n,
|
|
153
|
+
v
|
|
154
|
+
]);
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
function step(op) {
|
|
158
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
159
|
+
while(g && (g = 0, op[0] && (_ = 0)), _)try {
|
|
160
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
161
|
+
if (y = 0, t) op = [
|
|
162
|
+
op[0] & 2,
|
|
163
|
+
t.value
|
|
164
|
+
];
|
|
165
|
+
switch(op[0]){
|
|
166
|
+
case 0:
|
|
167
|
+
case 1:
|
|
168
|
+
t = op;
|
|
169
|
+
break;
|
|
170
|
+
case 4:
|
|
171
|
+
_.label++;
|
|
172
|
+
return {
|
|
173
|
+
value: op[1],
|
|
174
|
+
done: false
|
|
175
|
+
};
|
|
176
|
+
case 5:
|
|
177
|
+
_.label++;
|
|
178
|
+
y = op[1];
|
|
179
|
+
op = [
|
|
180
|
+
0
|
|
181
|
+
];
|
|
182
|
+
continue;
|
|
183
|
+
case 7:
|
|
184
|
+
op = _.ops.pop();
|
|
185
|
+
_.trys.pop();
|
|
186
|
+
continue;
|
|
187
|
+
default:
|
|
188
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
|
|
189
|
+
_ = 0;
|
|
190
|
+
continue;
|
|
191
|
+
}
|
|
192
|
+
if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
|
|
193
|
+
_.label = op[1];
|
|
194
|
+
break;
|
|
195
|
+
}
|
|
196
|
+
if (op[0] === 6 && _.label < t[1]) {
|
|
197
|
+
_.label = t[1];
|
|
198
|
+
t = op;
|
|
199
|
+
break;
|
|
200
|
+
}
|
|
201
|
+
if (t && _.label < t[2]) {
|
|
202
|
+
_.label = t[2];
|
|
203
|
+
_.ops.push(op);
|
|
204
|
+
break;
|
|
205
|
+
}
|
|
206
|
+
if (t[2]) _.ops.pop();
|
|
207
|
+
_.trys.pop();
|
|
208
|
+
continue;
|
|
209
|
+
}
|
|
210
|
+
op = body.call(thisArg, _);
|
|
211
|
+
} catch (e) {
|
|
212
|
+
op = [
|
|
213
|
+
6,
|
|
214
|
+
e
|
|
215
|
+
];
|
|
216
|
+
y = 0;
|
|
217
|
+
} finally{
|
|
218
|
+
f = t = 0;
|
|
219
|
+
}
|
|
220
|
+
if (op[0] & 5) throw op[1];
|
|
221
|
+
return {
|
|
222
|
+
value: op[0] ? op[1] : void 0,
|
|
223
|
+
done: true
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
import { Skeleton } from "antd";
|
|
228
|
+
import React, { useEffect, useLayoutEffect, useState } from "react";
|
|
229
|
+
import { useRefFunction } from "../../../../Hooks/useRefFunction";
|
|
230
|
+
import { MediaErrorLink } from "../../components/MediaErrorLink";
|
|
231
|
+
import { useGetSetState } from "../../utils";
|
|
232
|
+
import { getMediaType } from "../../utils/dom";
|
|
233
|
+
import { ReadonlyImage } from "./index";
|
|
234
|
+
/**
|
|
235
|
+
* ReadonlyEditorImage 组件 - 只读图片预览组件
|
|
236
|
+
*
|
|
237
|
+
* 专门针对 readonly 模式优化的图片组件,移除了调整大小、选择等编辑相关功能。
|
|
238
|
+
* 简化渲染逻辑,提升预览模式性能。
|
|
239
|
+
*
|
|
240
|
+
* @component
|
|
241
|
+
* @description 只读图片预览组件,用于预览模式下的图片渲染
|
|
242
|
+
* @param {ElementProps<MediaNode>} props - 组件属性
|
|
243
|
+
* @param {MediaNode} props.element - 图片节点元素
|
|
244
|
+
* @param {React.ReactNode} props.children - 子组件内容
|
|
245
|
+
* @param {Object} props.attributes - 元素属性
|
|
246
|
+
*
|
|
247
|
+
* @example
|
|
248
|
+
* ```tsx
|
|
249
|
+
* <ReadonlyEditorImage
|
|
250
|
+
* element={imageNode}
|
|
251
|
+
* attributes={attributes}
|
|
252
|
+
* >
|
|
253
|
+
* 内容
|
|
254
|
+
* </ReadonlyEditorImage>
|
|
255
|
+
* ```
|
|
256
|
+
*
|
|
257
|
+
* @returns {React.ReactElement} 渲染的只读图片组件
|
|
258
|
+
*
|
|
259
|
+
* @remarks
|
|
260
|
+
* - 移除调整大小功能
|
|
261
|
+
* - 移除选择状态管理
|
|
262
|
+
* - 保留加载状态和错误处理
|
|
263
|
+
* - 使用 React.memo 优化性能
|
|
264
|
+
* - 保持预览模式的视觉效果
|
|
265
|
+
*/ export var ReadonlyEditorImage = /*#__PURE__*/ React.memo(function(props) {
|
|
266
|
+
var _state;
|
|
267
|
+
var element = props.element, attributes = props.attributes, children = props.children;
|
|
268
|
+
var htmlRef = React.useRef(null);
|
|
269
|
+
var _useState = _sliced_to_array(useState(false), 2), showAsText = _useState[0], setShowAsText = _useState[1];
|
|
270
|
+
var _useGetSetState = _sliced_to_array(useGetSetState({
|
|
271
|
+
loadSuccess: true,
|
|
272
|
+
url: '',
|
|
273
|
+
type: getMediaType(element === null || element === void 0 ? void 0 : element.url, element.alt)
|
|
274
|
+
}), 2), state = _useGetSetState[0], setState = _useGetSetState[1];
|
|
275
|
+
// 如果 finished 为 false,设置 5 秒超时,超时后显示为文本
|
|
276
|
+
useEffect(function() {
|
|
277
|
+
if (element.finished === false) {
|
|
278
|
+
setShowAsText(false);
|
|
279
|
+
var timer = setTimeout(function() {
|
|
280
|
+
setShowAsText(true);
|
|
281
|
+
}, 5000);
|
|
282
|
+
return function() {
|
|
283
|
+
clearTimeout(timer);
|
|
284
|
+
};
|
|
285
|
+
} else {
|
|
286
|
+
setShowAsText(false);
|
|
287
|
+
}
|
|
288
|
+
}, [
|
|
289
|
+
element.finished
|
|
290
|
+
]);
|
|
291
|
+
var initial = useRefFunction(function() {
|
|
292
|
+
return _async_to_generator(function() {
|
|
293
|
+
var type, realUrl, img;
|
|
294
|
+
return _ts_generator(this, function(_state) {
|
|
295
|
+
type = getMediaType(element === null || element === void 0 ? void 0 : element.url, element.alt);
|
|
296
|
+
type = !type ? 'image' : type;
|
|
297
|
+
setState({
|
|
298
|
+
type: [
|
|
299
|
+
'image',
|
|
300
|
+
'video',
|
|
301
|
+
'autio',
|
|
302
|
+
'attachment'
|
|
303
|
+
].includes(type) ? type : 'other'
|
|
304
|
+
});
|
|
305
|
+
realUrl = element === null || element === void 0 ? void 0 : element.url;
|
|
306
|
+
setState({
|
|
307
|
+
url: realUrl
|
|
308
|
+
});
|
|
309
|
+
if (state().type === 'image' || state().type === 'other') {
|
|
310
|
+
img = document.createElement('img');
|
|
311
|
+
img.referrerPolicy = 'no-referrer';
|
|
312
|
+
img.crossOrigin = 'anonymous';
|
|
313
|
+
img.src = realUrl;
|
|
314
|
+
img.onerror = function() {
|
|
315
|
+
setState({
|
|
316
|
+
loadSuccess: false
|
|
317
|
+
});
|
|
318
|
+
};
|
|
319
|
+
img.onload = function() {
|
|
320
|
+
setState({
|
|
321
|
+
loadSuccess: true
|
|
322
|
+
});
|
|
323
|
+
};
|
|
324
|
+
}
|
|
325
|
+
return [
|
|
326
|
+
2
|
|
327
|
+
];
|
|
328
|
+
});
|
|
329
|
+
})();
|
|
330
|
+
});
|
|
331
|
+
useLayoutEffect(function() {
|
|
332
|
+
initial();
|
|
333
|
+
}, [
|
|
334
|
+
element === null || element === void 0 ? void 0 : element.url,
|
|
335
|
+
initial
|
|
336
|
+
]);
|
|
337
|
+
// 图片预览 DOM
|
|
338
|
+
var imageDom = React.useMemo(function() {
|
|
339
|
+
var _state;
|
|
340
|
+
// 检查是否为不完整的图片(finished 状态)
|
|
341
|
+
if (element.finished === false) {
|
|
342
|
+
// 如果 5 秒后仍未完成,显示为文本
|
|
343
|
+
if (showAsText) {
|
|
344
|
+
return /*#__PURE__*/ React.createElement("div", {
|
|
345
|
+
style: {
|
|
346
|
+
padding: '8px 12px',
|
|
347
|
+
border: '1px solid #d9d9d9',
|
|
348
|
+
borderRadius: '4px',
|
|
349
|
+
color: 'rgba(0, 0, 0, 0.65)',
|
|
350
|
+
wordBreak: 'break-all'
|
|
351
|
+
}
|
|
352
|
+
}, element.alt || element.url || '图片链接');
|
|
353
|
+
}
|
|
354
|
+
// 5 秒内显示 loading 状态的占位符
|
|
355
|
+
return /*#__PURE__*/ React.createElement(Skeleton.Image, {
|
|
356
|
+
active: true
|
|
357
|
+
});
|
|
358
|
+
}
|
|
359
|
+
// 如果图片加载失败,显示为链接
|
|
360
|
+
if (!state().loadSuccess) {
|
|
361
|
+
var _state1, _state2;
|
|
362
|
+
return /*#__PURE__*/ React.createElement(MediaErrorLink, {
|
|
363
|
+
url: (_state1 = state()) === null || _state1 === void 0 ? void 0 : _state1.url,
|
|
364
|
+
fallbackUrl: element === null || element === void 0 ? void 0 : element.url,
|
|
365
|
+
displayText: (element === null || element === void 0 ? void 0 : element.alt) || ((_state2 = state()) === null || _state2 === void 0 ? void 0 : _state2.url) || (element === null || element === void 0 ? void 0 : element.url) || '图片链接',
|
|
366
|
+
style: {
|
|
367
|
+
fontSize: '13px',
|
|
368
|
+
lineHeight: '1.5'
|
|
369
|
+
}
|
|
370
|
+
});
|
|
371
|
+
}
|
|
372
|
+
return /*#__PURE__*/ React.createElement(ReadonlyImage, {
|
|
373
|
+
src: ((_state = state()) === null || _state === void 0 ? void 0 : _state.url) || (element === null || element === void 0 ? void 0 : element.url),
|
|
374
|
+
alt: (element === null || element === void 0 ? void 0 : element.alt) || 'image',
|
|
375
|
+
width: element.width,
|
|
376
|
+
height: element.height,
|
|
377
|
+
crossOrigin: "anonymous"
|
|
378
|
+
});
|
|
379
|
+
}, [
|
|
380
|
+
state().type,
|
|
381
|
+
(_state = state()) === null || _state === void 0 ? void 0 : _state.url,
|
|
382
|
+
state().loadSuccess,
|
|
383
|
+
element.finished,
|
|
384
|
+
showAsText,
|
|
385
|
+
element.url,
|
|
386
|
+
element.alt,
|
|
387
|
+
element.width,
|
|
388
|
+
element.height
|
|
389
|
+
]);
|
|
390
|
+
return /*#__PURE__*/ React.createElement("div", _object_spread_props(_object_spread({}, attributes), {
|
|
391
|
+
"data-be": "image",
|
|
392
|
+
"data-testid": "image-container",
|
|
393
|
+
style: {
|
|
394
|
+
position: 'relative',
|
|
395
|
+
userSelect: 'none',
|
|
396
|
+
WebkitUserSelect: 'none',
|
|
397
|
+
MozUserSelect: 'none',
|
|
398
|
+
msUserSelect: 'none',
|
|
399
|
+
width: '100%',
|
|
400
|
+
maxWidth: '100%',
|
|
401
|
+
boxSizing: 'border-box'
|
|
402
|
+
},
|
|
403
|
+
draggable: false
|
|
404
|
+
}), /*#__PURE__*/ React.createElement("div", {
|
|
405
|
+
tabIndex: -1,
|
|
406
|
+
style: {
|
|
407
|
+
color: 'transparent',
|
|
408
|
+
padding: 4,
|
|
409
|
+
userSelect: 'none',
|
|
410
|
+
display: 'flex',
|
|
411
|
+
flexDirection: 'column',
|
|
412
|
+
width: imageDom ? '100%' : undefined,
|
|
413
|
+
maxWidth: '100%',
|
|
414
|
+
boxSizing: 'border-box'
|
|
415
|
+
},
|
|
416
|
+
ref: htmlRef,
|
|
417
|
+
draggable: false,
|
|
418
|
+
contentEditable: false,
|
|
419
|
+
"data-be": "image-container"
|
|
420
|
+
}, imageDom, /*#__PURE__*/ React.createElement("div", {
|
|
421
|
+
style: {
|
|
422
|
+
display: 'none'
|
|
423
|
+
}
|
|
424
|
+
}, children)));
|
|
425
|
+
});
|
|
426
|
+
ReadonlyEditorImage.displayName = 'ReadonlyEditorImage';
|
|
@@ -466,7 +466,7 @@ export function EditorImage(param) {
|
|
|
466
466
|
});
|
|
467
467
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
468
468
|
var _useSelStatus = _sliced_to_array(useSelStatus(element), 2), _ = _useSelStatus[0], path = _useSelStatus[1];
|
|
469
|
-
var
|
|
469
|
+
var markdownEditorRef = useEditorStore().markdownEditorRef;
|
|
470
470
|
var htmlRef = React.useRef(null);
|
|
471
471
|
var _useState = _sliced_to_array(useState(false), 2), showAsText = _useState[0], setShowAsText = _useState[1];
|
|
472
472
|
var _useGetSetState = _sliced_to_array(useGetSetState({
|
|
@@ -561,11 +561,11 @@ export function EditorImage(param) {
|
|
|
561
561
|
element.finished
|
|
562
562
|
]);
|
|
563
563
|
var imageDom = useMemo(function() {
|
|
564
|
+
var _state;
|
|
564
565
|
debugInfo('EditorImage - 生成图片 DOM', {
|
|
565
566
|
finished: element.finished,
|
|
566
567
|
showAsText: showAsText,
|
|
567
|
-
loadSuccess: state().loadSuccess
|
|
568
|
-
readonly: readonly
|
|
568
|
+
loadSuccess: state().loadSuccess
|
|
569
569
|
});
|
|
570
570
|
// 检查是否为不完整的图片(finished 状态)
|
|
571
571
|
if (element.finished === false) {
|
|
@@ -590,64 +590,52 @@ export function EditorImage(param) {
|
|
|
590
590
|
}
|
|
591
591
|
// 如果图片加载失败,显示为链接
|
|
592
592
|
if (!state().loadSuccess) {
|
|
593
|
-
var
|
|
593
|
+
var _state1, _state2;
|
|
594
594
|
debugInfo('EditorImage - 显示错误链接');
|
|
595
595
|
return /*#__PURE__*/ React.createElement(MediaErrorLink, {
|
|
596
|
-
url: (
|
|
596
|
+
url: (_state1 = state()) === null || _state1 === void 0 ? void 0 : _state1.url,
|
|
597
597
|
fallbackUrl: element === null || element === void 0 ? void 0 : element.url,
|
|
598
|
-
displayText: (element === null || element === void 0 ? void 0 : element.alt) || ((
|
|
598
|
+
displayText: (element === null || element === void 0 ? void 0 : element.alt) || ((_state2 = state()) === null || _state2 === void 0 ? void 0 : _state2.url) || (element === null || element === void 0 ? void 0 : element.url) || '图片链接',
|
|
599
599
|
style: {
|
|
600
600
|
fontSize: '13px',
|
|
601
601
|
lineHeight: '1.5'
|
|
602
602
|
}
|
|
603
603
|
});
|
|
604
604
|
}
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
});
|
|
637
|
-
}() : function() {
|
|
638
|
-
var _state;
|
|
639
|
-
debugInfo('EditorImage - 使用只读图片');
|
|
640
|
-
return /*#__PURE__*/ React.createElement(ReadonlyImage, {
|
|
641
|
-
src: ((_state = state()) === null || _state === void 0 ? void 0 : _state.url) || (element === null || element === void 0 ? void 0 : element.url),
|
|
642
|
-
alt: (element === null || element === void 0 ? void 0 : element.alt) || 'image',
|
|
643
|
-
width: element.width,
|
|
644
|
-
height: element.height
|
|
645
|
-
});
|
|
646
|
-
}();
|
|
605
|
+
// 编辑模式:使用可调整大小的图片
|
|
606
|
+
debugInfo('EditorImage - 使用可调整大小的图片', {
|
|
607
|
+
width: element.width,
|
|
608
|
+
height: element.height
|
|
609
|
+
});
|
|
610
|
+
return /*#__PURE__*/ React.createElement(ResizeImage, {
|
|
611
|
+
defaultSize: {
|
|
612
|
+
width: Number(element.width) || element.width || 400,
|
|
613
|
+
height: Number(element.height) || 400
|
|
614
|
+
},
|
|
615
|
+
selected: state().selected,
|
|
616
|
+
src: (_state = state()) === null || _state === void 0 ? void 0 : _state.url,
|
|
617
|
+
onResizeStart: function() {
|
|
618
|
+
debugInfo('EditorImage - 开始调整大小');
|
|
619
|
+
setState({
|
|
620
|
+
selected: true
|
|
621
|
+
});
|
|
622
|
+
},
|
|
623
|
+
onResizeStop: function(size) {
|
|
624
|
+
debugInfo('EditorImage - 调整大小完成', {
|
|
625
|
+
size: size
|
|
626
|
+
});
|
|
627
|
+
if (!(markdownEditorRef === null || markdownEditorRef === void 0 ? void 0 : markdownEditorRef.current)) return;
|
|
628
|
+
Transforms.setNodes(markdownEditorRef.current, size, {
|
|
629
|
+
at: path
|
|
630
|
+
});
|
|
631
|
+
setState({
|
|
632
|
+
selected: false
|
|
633
|
+
});
|
|
634
|
+
}
|
|
635
|
+
});
|
|
647
636
|
}, [
|
|
648
637
|
state().type,
|
|
649
638
|
(_state = state()) === null || _state === void 0 ? void 0 : _state.url,
|
|
650
|
-
readonly,
|
|
651
639
|
state().selected,
|
|
652
640
|
state().loadSuccess,
|
|
653
641
|
element.finished,
|
|
@@ -688,7 +676,7 @@ export function EditorImage(param) {
|
|
|
688
676
|
}
|
|
689
677
|
},
|
|
690
678
|
trigger: "hover",
|
|
691
|
-
open: state().selected
|
|
679
|
+
open: state().selected ? undefined : false,
|
|
692
680
|
content: /*#__PURE__*/ React.createElement(Space, null, /*#__PURE__*/ React.createElement(ActionIconBox, {
|
|
693
681
|
title: (locale === null || locale === void 0 ? void 0 : locale.delete) || '删除',
|
|
694
682
|
type: "danger",
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { RenderElementProps } from 'slate-react';
|
|
3
|
+
/**
|
|
4
|
+
* ReadonlyInlineKatex 组件 - 只读行内数学公式预览组件
|
|
5
|
+
*
|
|
6
|
+
* 专门针对 readonly 模式优化的行内数学公式组件。
|
|
7
|
+
* 简化渲染逻辑,提升预览模式性能。
|
|
8
|
+
*
|
|
9
|
+
* @component
|
|
10
|
+
* @description 只读行内数学公式预览组件,用于预览模式下的行内数学公式渲染
|
|
11
|
+
* @param {RenderElementProps} props - 组件属性
|
|
12
|
+
* @param {any} props.element - 行内数学公式节点元素
|
|
13
|
+
* @param {React.ReactNode} props.children - 子组件内容
|
|
14
|
+
* @param {Object} props.attributes - 元素属性
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```tsx
|
|
18
|
+
* <ReadonlyInlineKatex
|
|
19
|
+
* element={inlineKatexNode}
|
|
20
|
+
* attributes={attributes}
|
|
21
|
+
* >
|
|
22
|
+
* 公式内容
|
|
23
|
+
* </ReadonlyInlineKatex>
|
|
24
|
+
* ```
|
|
25
|
+
*
|
|
26
|
+
* @returns {React.ReactElement} 渲染的只读行内数学公式组件
|
|
27
|
+
*
|
|
28
|
+
* @remarks
|
|
29
|
+
* - 使用 React.memo 优化性能
|
|
30
|
+
* - 保持预览模式的视觉效果
|
|
31
|
+
*/
|
|
32
|
+
export declare const ReadonlyInlineKatex: React.FC<RenderElementProps>;
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
function _define_property(obj, key, value) {
|
|
2
|
+
if (key in obj) {
|
|
3
|
+
Object.defineProperty(obj, key, {
|
|
4
|
+
value: value,
|
|
5
|
+
enumerable: true,
|
|
6
|
+
configurable: true,
|
|
7
|
+
writable: true
|
|
8
|
+
});
|
|
9
|
+
} else {
|
|
10
|
+
obj[key] = value;
|
|
11
|
+
}
|
|
12
|
+
return obj;
|
|
13
|
+
}
|
|
14
|
+
function _object_spread(target) {
|
|
15
|
+
for(var i = 1; i < arguments.length; i++){
|
|
16
|
+
var source = arguments[i] != null ? arguments[i] : {};
|
|
17
|
+
var ownKeys = Object.keys(source);
|
|
18
|
+
if (typeof Object.getOwnPropertySymbols === "function") {
|
|
19
|
+
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
|
|
20
|
+
return Object.getOwnPropertyDescriptor(source, sym).enumerable;
|
|
21
|
+
}));
|
|
22
|
+
}
|
|
23
|
+
ownKeys.forEach(function(key) {
|
|
24
|
+
_define_property(target, key, source[key]);
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
return target;
|
|
28
|
+
}
|
|
29
|
+
function ownKeys(object, enumerableOnly) {
|
|
30
|
+
var keys = Object.keys(object);
|
|
31
|
+
if (Object.getOwnPropertySymbols) {
|
|
32
|
+
var symbols = Object.getOwnPropertySymbols(object);
|
|
33
|
+
if (enumerableOnly) {
|
|
34
|
+
symbols = symbols.filter(function(sym) {
|
|
35
|
+
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
keys.push.apply(keys, symbols);
|
|
39
|
+
}
|
|
40
|
+
return keys;
|
|
41
|
+
}
|
|
42
|
+
function _object_spread_props(target, source) {
|
|
43
|
+
source = source != null ? source : {};
|
|
44
|
+
if (Object.getOwnPropertyDescriptors) {
|
|
45
|
+
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
|
|
46
|
+
} else {
|
|
47
|
+
ownKeys(Object(source)).forEach(function(key) {
|
|
48
|
+
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
return target;
|
|
52
|
+
}
|
|
53
|
+
import React from "react";
|
|
54
|
+
import { debugInfo } from "../../../../Utils/debugUtils";
|
|
55
|
+
/**
|
|
56
|
+
* ReadonlyInlineKatex 组件 - 只读行内数学公式预览组件
|
|
57
|
+
*
|
|
58
|
+
* 专门针对 readonly 模式优化的行内数学公式组件。
|
|
59
|
+
* 简化渲染逻辑,提升预览模式性能。
|
|
60
|
+
*
|
|
61
|
+
* @component
|
|
62
|
+
* @description 只读行内数学公式预览组件,用于预览模式下的行内数学公式渲染
|
|
63
|
+
* @param {RenderElementProps} props - 组件属性
|
|
64
|
+
* @param {any} props.element - 行内数学公式节点元素
|
|
65
|
+
* @param {React.ReactNode} props.children - 子组件内容
|
|
66
|
+
* @param {Object} props.attributes - 元素属性
|
|
67
|
+
*
|
|
68
|
+
* @example
|
|
69
|
+
* ```tsx
|
|
70
|
+
* <ReadonlyInlineKatex
|
|
71
|
+
* element={inlineKatexNode}
|
|
72
|
+
* attributes={attributes}
|
|
73
|
+
* >
|
|
74
|
+
* 公式内容
|
|
75
|
+
* </ReadonlyInlineKatex>
|
|
76
|
+
* ```
|
|
77
|
+
*
|
|
78
|
+
* @returns {React.ReactElement} 渲染的只读行内数学公式组件
|
|
79
|
+
*
|
|
80
|
+
* @remarks
|
|
81
|
+
* - 使用 React.memo 优化性能
|
|
82
|
+
* - 保持预览模式的视觉效果
|
|
83
|
+
*/ export var ReadonlyInlineKatex = /*#__PURE__*/ React.memo(function(param) {
|
|
84
|
+
var attributes = param.attributes, children = param.children, element = param.element;
|
|
85
|
+
var _element_value;
|
|
86
|
+
debugInfo('ReadonlyInlineKatex - 渲染只读行内数学公式', {
|
|
87
|
+
valueLength: element === null || element === void 0 ? void 0 : (_element_value = element.value) === null || _element_value === void 0 ? void 0 : _element_value.length
|
|
88
|
+
});
|
|
89
|
+
return /*#__PURE__*/ React.createElement("code", _object_spread_props(_object_spread({}, attributes), {
|
|
90
|
+
style: {
|
|
91
|
+
background: 'rgb(242, 241, 241)',
|
|
92
|
+
color: 'rgb(27, 27, 27)',
|
|
93
|
+
padding: '0.2em 0.4em',
|
|
94
|
+
borderRadius: '0.25em',
|
|
95
|
+
fontSize: '0.9em',
|
|
96
|
+
fontFamily: 'monospace'
|
|
97
|
+
}
|
|
98
|
+
}), element.value, children);
|
|
99
|
+
});
|
|
100
|
+
ReadonlyInlineKatex.displayName = 'ReadonlyInlineKatex';
|