@ant-design/agentic-ui 2.14.0 → 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.
Files changed (53) hide show
  1. package/dist/Bubble/List/PureBubbleList.js +1 -1
  2. package/dist/Bubble/MessagesContent/EXCEPTION.js +1 -1
  3. package/dist/ChatLayout/style.js +16 -17
  4. package/dist/Constants/mobile.d.ts +3 -0
  5. package/dist/Constants/mobile.js +7 -0
  6. package/dist/Hooks/useLanguage.d.ts +2 -0
  7. package/dist/I18n/locales.d.ts +2 -0
  8. package/dist/I18n/locales.js +4 -0
  9. package/dist/MarkdownEditor/BaseMarkdownEditor.js +1 -1
  10. package/dist/MarkdownEditor/editor/Editor.js +16 -8
  11. package/dist/MarkdownEditor/editor/code.css +2 -2
  12. package/dist/MarkdownEditor/editor/elements/FootnoteDefinition.js +2 -1
  13. package/dist/MarkdownEditor/editor/elements/FootnoteReference.js +2 -1
  14. package/dist/MarkdownEditor/editor/elements/Head.d.ts +1 -0
  15. package/dist/MarkdownEditor/editor/elements/Head.js +1 -1
  16. package/dist/MarkdownEditor/editor/elements/Image/index.js +19 -7
  17. package/dist/MarkdownEditor/editor/elements/LinkCard/index.js +2 -1
  18. package/dist/MarkdownEditor/editor/elements/LinkCard/style.js +1 -1
  19. package/dist/MarkdownEditor/editor/elements/List/ListItem.js +1 -0
  20. package/dist/MarkdownEditor/editor/elements/List/style.js +2 -2
  21. package/dist/MarkdownEditor/editor/elements/Media.js +22 -10
  22. package/dist/MarkdownEditor/editor/elements/Paragraph.js +2 -1
  23. package/dist/MarkdownEditor/editor/elements/Schema.js +1 -1
  24. package/dist/MarkdownEditor/editor/elements/Table/ReadonlyTableComponent.js +1 -1
  25. package/dist/MarkdownEditor/editor/elements/Table/Table.js +25 -16
  26. package/dist/MarkdownEditor/editor/elements/Table/Td/style.js +5 -2
  27. package/dist/MarkdownEditor/editor/elements/Table/index.js +0 -2
  28. package/dist/MarkdownEditor/editor/elements/Table/style.js +7 -8
  29. package/dist/MarkdownEditor/editor/elements/TagPopup/index.js +5 -3
  30. package/dist/MarkdownEditor/editor/elements/TagPopup/style.js +2 -2
  31. package/dist/MarkdownEditor/editor/plugins/useKeyboard.js +8 -19
  32. package/dist/MarkdownEditor/editor/store.js +3 -3
  33. package/dist/MarkdownEditor/editor/style.js +41 -6
  34. package/dist/MarkdownEditor/editor/tools/DragHandle.js +3 -3
  35. package/dist/MarkdownEditor/style.js +8 -2
  36. package/dist/MarkdownEditor/types.d.ts +1 -1
  37. package/dist/MarkdownEditor/utils/exportHtml.js +1 -1
  38. package/dist/MarkdownInputField/MarkdownInputField.d.ts +7 -7
  39. package/dist/MarkdownInputField/MarkdownInputField.js +11 -35
  40. package/dist/MarkdownInputField/SendButton/index.js +17 -3
  41. package/dist/MarkdownInputField/style.js +25 -3
  42. package/dist/Plugins/chart/components/ChartContainer/ChartErrorBoundaryExample.js +1 -1
  43. package/dist/Plugins/chart/index.js +2 -2
  44. package/dist/Plugins/code/components/CodeContainer.js +2 -3
  45. package/dist/Plugins/katex/InlineKatex.js +1 -1
  46. package/dist/Plugins/katex/Katex.js +1 -1
  47. package/dist/Plugins/mermaid/index.js +1 -1
  48. package/dist/ThoughtChainList/index.js +21 -2
  49. package/dist/ThoughtChainList/style.js +1 -0
  50. package/dist/Utils/loadCSS.js +6 -6
  51. package/dist/WelcomeMessage/index.js +21 -2
  52. package/dist/Workspace/Task/index.js +1 -1
  53. package/package.json +1 -1
@@ -199,14 +199,12 @@ export var tableRenderElement = function(props, config) {
199
199
  case 'header-cell':
200
200
  return /*#__PURE__*/ React.createElement(ThWrapper, _object_spread({
201
201
  style: {
202
- padding: '8px',
203
202
  verticalAlign: 'middle'
204
203
  }
205
204
  }, props));
206
205
  case 'table-cell':
207
206
  return /*#__PURE__*/ React.createElement(TdWrapper, _object_spread({
208
207
  style: {
209
- padding: '8px',
210
208
  verticalAlign: 'middle'
211
209
  }
212
210
  }, props));
@@ -50,10 +50,13 @@ function _object_spread_props(target, source) {
50
50
  }
51
51
  return target;
52
52
  }
53
+ import { MOBILE_BREAKPOINT, MOBILE_PADDING } from "../../../../Constants/mobile";
53
54
  import { resetComponent, useEditorStyleRegister } from "../../../../Hooks/useStyle";
54
55
  var genStyle = function(token) {
55
56
  var _obj;
56
57
  return _define_property({}, token.componentCls, {
58
+ width: '100%',
59
+ overflow: 'auto',
57
60
  '--table-border-radius': '8px',
58
61
  '--table-border-color': '#E7E9E8',
59
62
  '--table-header-bg': '#f7f7f9',
@@ -94,7 +97,6 @@ var genStyle = function(token) {
94
97
  table: (_obj = {
95
98
  borderCollapse: 'separate',
96
99
  borderSpacing: 0,
97
- display: 'block',
98
100
  width: '100%',
99
101
  tableLayout: 'fixed',
100
102
  margin: '16px 0',
@@ -123,13 +125,6 @@ var genStyle = function(token) {
123
125
  'tr:not(.config-tr):last-child td:last-child:not(.config-td):not([colspan]):not([rowspan]), tr:not(.config-tr):last-child th:last-child:not(.config-td):not([colspan]):not([rowspan])': {
124
126
  borderBottomRightRadius: 'unset'
125
127
  }
126
- }), // 表格主体和表头使用 table 布局
127
- _define_property(_obj, 'tbody, thead', {
128
- display: 'table',
129
- width: '100%',
130
- tableLayout: 'fixed',
131
- position: 'relative',
132
- background: 'inherit'
133
128
  }), _define_property(_obj, 'th.config-th,td.config-td', {
134
129
  borderBottom: '1px solid var(--table-border-color)',
135
130
  borderLeft: '1px solid var(--table-border-color)'
@@ -226,6 +221,10 @@ var genStyle = function(token) {
226
221
  _define_property(_obj, 'th:not(.config-td)[rowspan]:first-child:last-child, td:not(.config-td)[rowspan]:first-child:last-child', {
227
222
  borderTopLeftRadius: 'var(--table-border-radius)',
228
223
  borderBottomLeftRadius: 'var(--table-border-radius)'
224
+ }), _define_property(_obj, "@media (max-width: ".concat(MOBILE_BREAKPOINT, ")"), {
225
+ 'th:not(.config-td), td:not(.config-td)': {
226
+ padding: "".concat(MOBILE_PADDING)
227
+ }
229
228
  }), _obj),
230
229
  'table.htCore': {
231
230
  boxSizing: 'content-box',
@@ -314,12 +314,12 @@ var initializeAutoOpen = function(autoOpen, type, setOpen, suggestionConnext) {
314
314
  var handleMouseEnter = function(domRef) {
315
315
  var target = domRef.current;
316
316
  if (!target) return;
317
- target.classList.remove('no-focus');
317
+ target.removeAttribute('data-no-focus');
318
318
  };
319
319
  var handleMouseLeave = function(domRef) {
320
320
  var target = domRef.current;
321
321
  if (!target) return;
322
- target.classList.add('no-focus');
322
+ target.setAttribute('data-no-focus', '');
323
323
  };
324
324
  var createDefaultDom = function(domRef, baseCls, hashId, loading, selectedItems, children, text, placeholder, isOpen) {
325
325
  var isEmpty = !(text === null || text === void 0 ? void 0 : text.trim());
@@ -327,7 +327,9 @@ var createDefaultDom = function(domRef, baseCls, hashId, loading, selectedItems,
327
327
  var _obj;
328
328
  return /*#__PURE__*/ React.createElement("div", {
329
329
  ref: domRef,
330
- className: classNames("".concat(baseCls, "-tag-popup-input"), 'no-focus', hashId, (_obj = {
330
+ "data-tag-popup-input": true,
331
+ "data-no-focus": true,
332
+ className: classNames("".concat(baseCls, "-tag-popup-input"), hashId, (_obj = {
331
333
  empty: isEmpty
332
334
  }, _define_property(_obj, "".concat(baseCls, "-tag-popup-input-loading"), loading), _define_property(_obj, "".concat(baseCls, "-tag-popup-input-has-arrow"), hasItems), _obj)),
333
335
  onMouseEnter: function() {
@@ -62,8 +62,8 @@ var genStyle = function(token) {
62
62
  color: 'var(--color-primary-text-secondary)',
63
63
  borderRadius: 'var(--radius-control-sm)',
64
64
  background: 'var(--color-primary-bg-tip)',
65
- '&-tag-popup-input': {
66
- '&:not(.tag-popup-input-composition).empty::before': {
65
+ '[data-tag-popup-input]': {
66
+ '&:not([data-composition]).empty::before': {
67
67
  color: 'var(--color-primary-text-disabled)',
68
68
  content: 'attr(title)',
69
69
  userSelect: 'none',
@@ -101,7 +101,7 @@ import { useEditorStore } from "../store";
101
101
  var enter = new EnterKey(store, backspace);
102
102
  var match = new MatchKey(markdownEditorRef.current);
103
103
  return function(e) {
104
- var _props_markdown, _props_textAreaProps, _props_textAreaProps1, _node_;
104
+ var _props_markdown, _node_;
105
105
  // 处理表格键盘事件
106
106
  if (NativeTableKeyboard.shouldHandle(markdownEditorRef.current)) {
107
107
  if (NativeTableKeyboard.handleKeyDown(markdownEditorRef.current, e.nativeEvent)) {
@@ -190,27 +190,16 @@ import { useEditorStore } from "../store";
190
190
  return;
191
191
  }
192
192
  if (e.key === 'Tab') tab.run(e);
193
- if (((_props_textAreaProps = props.textAreaProps) === null || _props_textAreaProps === void 0 ? void 0 : _props_textAreaProps.triggerSendKey) === 'Enter') {
194
- if (e.key === 'Enter' && (e.ctrlKey || e.metaKey)) {
195
- e.stopPropagation();
196
- e.preventDefault();
197
- enter.run(e);
198
- return;
199
- }
200
- return;
201
- }
202
- if (((_props_textAreaProps1 = props.textAreaProps) === null || _props_textAreaProps1 === void 0 ? void 0 : _props_textAreaProps1.triggerSendKey) === 'Mod+Enter') {
203
- if (e.key === 'Enter' && !(e.ctrlKey || e.metaKey)) {
204
- e.stopPropagation();
205
- e.preventDefault();
206
- enter.run(e);
207
- }
208
- return;
209
- }
210
- if (e.key === 'Enter' && !(e.ctrlKey || e.metaKey)) {
193
+ // Enter 发送,Shift+Enter 换行
194
+ if (e.key === 'Enter' && e.shiftKey && !(e.ctrlKey || e.metaKey)) {
211
195
  e.stopPropagation();
212
196
  e.preventDefault();
213
197
  enter.run(e);
198
+ return;
199
+ }
200
+ // Enter 键(无 Shift)由 MarkdownInputField 处理发送,这里不处理
201
+ if (e.key === 'Enter' && !(e.ctrlKey || e.metaKey) && !e.shiftKey) {
202
+ return;
214
203
  }
215
204
  var _Editor_nodes1 = _sliced_to_array(Editor.nodes(markdownEditorRef.current, {
216
205
  match: function(n) {
@@ -1606,9 +1606,9 @@ export var EditorStoreContext = createContext(null);
1606
1606
  var el = _step.value;
1607
1607
  var _this_draggedElement1;
1608
1608
  if (!ableToEnter.has(el.dataset.be)) continue;
1609
- if (el.classList.contains('frontmatter')) continue;
1609
+ if (el.hasAttribute('data-frontmatter')) continue;
1610
1610
  var pre = el.previousSibling;
1611
- if (el.dataset.be === 'paragraph' && ((_this_draggedElement1 = this.draggedElement) === null || _this_draggedElement1 === void 0 ? void 0 : _this_draggedElement1.dataset.be) === 'list-item' && (!pre || pre.classList.contains('check-item'))) {
1611
+ if (el.dataset.be === 'paragraph' && ((_this_draggedElement1 = this.draggedElement) === null || _this_draggedElement1 === void 0 ? void 0 : _this_draggedElement1.dataset.be) === 'list-item' && (!pre || pre.hasAttribute('data-check-item'))) {
1612
1612
  continue;
1613
1613
  }
1614
1614
  if (el === this.draggedElement) continue;
@@ -1679,7 +1679,7 @@ export var EditorStoreContext = createContext(null);
1679
1679
  var width = last.el.dataset.be === 'list-item' ? last.el.clientWidth + 20 + 'px' : last.el.clientWidth + 'px';
1680
1680
  if (!mark) {
1681
1681
  mark = document.createElement('div');
1682
- mark.classList.add('move-mark');
1682
+ mark.setAttribute('data-move-mark', '');
1683
1683
  mark.style.width = width;
1684
1684
  mark.style.height = '2px';
1685
1685
  mark.style.transform = "translate(".concat(last.left - rect.left - scrollLeft, "px, ").concat(last.top - rect.top - scrollTop, "px)");
@@ -51,6 +51,7 @@ function _object_spread_props(target, source) {
51
51
  return target;
52
52
  }
53
53
  import { Keyframes } from "@ant-design/cssinjs";
54
+ import { MOBILE_BREAKPOINT } from "../../Constants/mobile";
54
55
  import { resetComponent, useEditorStyleRegister } from "../../Hooks/useStyle";
55
56
  import "./code.css";
56
57
  // 导入统一的标签样式配置
@@ -80,7 +81,7 @@ var genStyle = function(token) {
80
81
  var _obj;
81
82
  return _obj = {
82
83
  // 拖拽手柄样式
83
- '.ant-agentic-md-editor-drag-handle': {
84
+ '[data-drag-handle]': {
84
85
  position: 'absolute',
85
86
  display: 'flex',
86
87
  userSelect: 'none',
@@ -93,7 +94,7 @@ var genStyle = function(token) {
93
94
  top: 'calc(3px + 0.75em - 14px)'
94
95
  },
95
96
  // 拖拽图标样式
96
- '.ant-agentic-md-editor-drag-icon': {
97
+ '[data-drag-icon]': {
97
98
  display: 'flex',
98
99
  alignItems: 'center',
99
100
  borderRadius: '18px',
@@ -106,7 +107,7 @@ var genStyle = function(token) {
106
107
  }
107
108
  },
108
109
  // 拖拽元素悬浮效果
109
- '.ant-agentic-md-editor-drag-el:hover > .ant-agentic-md-editor-drag-handle': {
110
+ '[data-drag-el]:hover > [data-drag-handle]': {
110
111
  opacity: 1
111
112
  },
112
113
  // 可调整大小组件样式
@@ -144,7 +145,7 @@ var genStyle = function(token) {
144
145
  pointerEvents: 'all'
145
146
  },
146
147
  // 移动标记样式
147
- '.move-mark': {
148
+ '[data-move-mark]': {
148
149
  height: '0.125em',
149
150
  backgroundColor: 'var(--color-primary-control-fill-primary)',
150
151
  left: 0,
@@ -156,7 +157,7 @@ var genStyle = function(token) {
156
157
  transitionDuration: '200ms'
157
158
  },
158
159
  // 隐藏样式
159
- '.ant-agentic-md-editor-hidden': {
160
+ '[data-hidden]': {
160
161
  display: 'none'
161
162
  },
162
163
  // KaTeX容器样式
@@ -275,7 +276,7 @@ var genStyle = function(token) {
275
276
  'h1,h2,h3,h4,h5,h6': {
276
277
  position: 'relative',
277
278
  textWrap: 'balance',
278
- '.ant-agentic-md-editor-drag-handle': {
279
+ '[data-drag-handle]': {
279
280
  top: 'calc(3px + 0.05em) !important'
280
281
  }
281
282
  },
@@ -424,6 +425,34 @@ var genStyle = function(token) {
424
425
  },
425
426
  'ol,ul': {
426
427
  paddingLeft: '1em'
428
+ },
429
+ // 移动端图片和视频响应式样式
430
+ '[data-be="image"], [data-be="media"]': {
431
+ width: '100%',
432
+ maxWidth: '100%',
433
+ boxSizing: 'border-box',
434
+ overflow: 'hidden',
435
+ '[data-be="media-container"]': {
436
+ width: '100%',
437
+ maxWidth: '100%',
438
+ padding: '2px',
439
+ boxSizing: 'border-box'
440
+ },
441
+ 'img, video': {
442
+ maxWidth: '100%',
443
+ height: 'auto',
444
+ display: 'block'
445
+ },
446
+ '[data-testid="resize-image-container"]': {
447
+ maxWidth: '100%',
448
+ width: '100% !important',
449
+ boxSizing: 'border-box'
450
+ },
451
+ '[data-testid="video-element"]': {
452
+ maxWidth: '100%',
453
+ width: '100% !important',
454
+ height: 'auto'
455
+ }
427
456
  }
428
457
  },
429
458
  '[data-be]:not(p):not(data-be="list")': {
@@ -521,6 +550,12 @@ var genStyle = function(token) {
521
550
  marginTop: '0.3em',
522
551
  marginBottom: '0.3em'
523
552
  }
553
+ }), _define_property(_obj, "@media (max-width: ".concat(MOBILE_BREAKPOINT, ")"), {
554
+ 'div[data-be="paragraph"]': {
555
+ fontSize: '0.95em',
556
+ lineHeight: '1.4em',
557
+ margin: 'var(--margin-1x) 0'
558
+ }
524
559
  }), _obj;
525
560
  };
526
561
  var genSlideStyle = function(token) {
@@ -40,7 +40,7 @@ export var DragHandle = function(props) {
40
40
  return /*#__PURE__*/ React.createElement(Tooltip, {
41
41
  title: "拖拽移动"
42
42
  }, /*#__PURE__*/ React.createElement("span", {
43
- className: 'ant-agentic-md-editor-drag-handle',
43
+ "data-drag-handle": true,
44
44
  "data-testid": "drag-handle",
45
45
  style: _object_spread({}, props.style),
46
46
  contentEditable: false,
@@ -49,7 +49,7 @@ export var DragHandle = function(props) {
49
49
  var _parent_parentElement;
50
50
  var parent = ref.current.parentElement;
51
51
  if (((_parent_parentElement = parent.parentElement) === null || _parent_parentElement === void 0 ? void 0 : _parent_parentElement.dataset.be) === 'list-item') {
52
- if (!parent.previousSibling || parent.previousSibling.classList.contains('check-item')) {
52
+ if (!parent.previousSibling || parent.previousSibling.hasAttribute('data-check-item')) {
53
53
  parent = parent.parentElement;
54
54
  }
55
55
  }
@@ -58,6 +58,6 @@ export var DragHandle = function(props) {
58
58
  store.draggedElement = parent;
59
59
  }
60
60
  }, /*#__PURE__*/ React.createElement("div", {
61
- className: "ant-agentic-md-editor-drag-icon"
61
+ "data-drag-icon": true
62
62
  }, /*#__PURE__*/ React.createElement(HolderOutlined, null))));
63
63
  };
@@ -50,6 +50,7 @@ function _object_spread_props(target, source) {
50
50
  }
51
51
  return target;
52
52
  }
53
+ import { MOBILE_BREAKPOINT } from "../Constants/mobile";
53
54
  import { resetComponent, useEditorStyleRegister } from "../Hooks/useStyle";
54
55
  var genStyle = function(token) {
55
56
  return _define_property({}, token.componentCls, {
@@ -67,7 +68,7 @@ var genStyle = function(token) {
67
68
  scrollbarColor: 'hsl(240 5.9% 90%) transparent',
68
69
  boxSizing: 'border-box'
69
70
  },
70
- 'div.composition div:not(.no-focus).empty:first-child::before': {
71
+ 'div[data-composition] div:not([data-no-focus]).empty:first-child::before': {
71
72
  display: 'none'
72
73
  },
73
74
  '> *': {
@@ -81,7 +82,12 @@ var genStyle = function(token) {
81
82
  },
82
83
  '&-edit-area': {
83
84
  outline: 'none !important'
84
- }
85
+ },
86
+ '&-content': _define_property({
87
+ padding: '4px 20px'
88
+ }, "@media (max-width: ".concat(MOBILE_BREAKPOINT, ")"), {
89
+ padding: '4px 4px'
90
+ })
85
91
  });
86
92
  };
87
93
  /**
@@ -4,10 +4,10 @@ import React from 'react';
4
4
  import { BaseEditor, Selection } from 'slate';
5
5
  import { HistoryEditor } from 'slate-history';
6
6
  import { ReactEditor, RenderElementProps } from 'slate-react';
7
- import type { MarkdownToHtmlOptions } from './editor/utils/markdownToHtml';
8
7
  import { TagPopupProps } from './editor/elements/TagPopup';
9
8
  import { EditorStore } from './editor/store';
10
9
  import { InsertAutocompleteProps } from './editor/tools/InsertAutocomplete';
10
+ import type { MarkdownToHtmlOptions } from './editor/utils/markdownToHtml';
11
11
  import { CustomLeaf, Elements } from './el';
12
12
  /**
13
13
  * @typedef CommentDataType
@@ -7,7 +7,7 @@
7
7
  * @returns A complete HTML document as a string
8
8
  */ export var generateHtmlDocument = function(content) {
9
9
  var title = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 'Markdown Export', styles = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : '';
10
- return '<!DOCTYPE html>\n<html>\n<head>\n <meta charset="UTF-8">\n <meta name="viewport" content="width=device-width, initial-scale=1.0">\n <title>'.concat(title, "</title>\n <style>\n body {\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;\n line-height: 1.6;\n padding: 20px;\n max-width: 900px;\n margin: 0 auto;\n color: #333;\n }\n pre {\n background-color: #f6f8fa;\n border-radius: 3px;\n padding: 16px;\n overflow: auto;\n }\n code {\n background-color: rgba(27, 31, 35, 0.05);\n border-radius: 3px;\n padding: 0.2em 0.4em;\n font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace;\n }\n blockquote {\n border-left: 4px solid #ddd;\n padding-left: 16px;\n margin-left: 0;\n color: #666;\n }\n img {\n max-width: 100%;\n }\n table {\n border-collapse: collapse;\n width: 100%;\n margin-bottom: 16px;\n }\n table, th, td {\n border: 1px solid #ddd;\n }\n th, td {\n padding: 8px;\n text-align: left;\n }\n th {\n background-color: #f6f8fa;\n }\n ").concat(styles, "\n </style>\n</head>\n<body>\n ").concat(content, "\n</body>\n</html>");
10
+ return '<!DOCTYPE html>\n<html>\n<head>\n <meta charset="UTF-8">\n <meta name="viewport" content="width=device-width, initial-scale=1.0">\n <title>'.concat(title, "</title>\n <style>\n body {\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;\n line-height: 1.6;\n padding: 12px;\n max-width: 900px;\n margin: 0 auto;\n color: #333;\n }\n pre {\n background-color: #f6f8fa;\n border-radius: 3px;\n padding: 16px;\n overflow: auto;\n }\n code {\n background-color: rgba(27, 31, 35, 0.05);\n border-radius: 3px;\n padding: 0.2em 0.4em;\n font-family: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace;\n }\n blockquote {\n border-left: 4px solid #ddd;\n padding-left: 16px;\n margin-left: 0;\n color: #666;\n }\n img {\n max-width: 100%;\n }\n table {\n border-collapse: collapse;\n width: 100%;\n margin-bottom: 16px;\n }\n table, th, td {\n border: 1px solid #ddd;\n }\n th, td {\n padding: 8px;\n text-align: left;\n vertical-align: middle;\n }\n th {\n background-color: #f6f8fa;\n }\n @media screen and (max-width: 768px) {\n th, td {\n padding: 2px;\n }\n }\n ").concat(styles, "\n </style>\n</head>\n<body>\n ").concat(content, "\n</body>\n</html>");
11
11
  };
12
12
  /**
13
13
  * Export HTML content to a file
@@ -14,7 +14,7 @@ import type { CreateRecognizer } from './VoiceInput';
14
14
  * @property {string} [className] - 应用于输入字段的 CSS 类名
15
15
  * @property {boolean} [disabled] - 是否禁用输入字段
16
16
  * @property {boolean} [typing] - 用户是否正在输入的状态标志
17
- * @property {'Enter' | 'Mod+Enter'} [triggerSendKey] - 触发发送操作的键盘快捷键
17
+ * @property {'Enter'} [triggerSendKey] - 触发发送操作的键盘快捷键(Enter 发送,Shift+Enter 换行)
18
18
  * @property {function} [onSend] - 当内容发送时触发的异步回调函数
19
19
  */
20
20
  export type MarkdownInputFieldProps = {
@@ -56,11 +56,11 @@ export type MarkdownInputFieldProps = {
56
56
  typing?: boolean;
57
57
  /**
58
58
  * 触发发送操作的键盘快捷键。
59
- * - 'Enter': 回车键触发发送
60
- * - 'Mod+Enter': 按下 Ctrl/Command + Enter 触发发送
61
- * @example triggerSendKey="Mod+Enter"
59
+ * - 'Enter': 回车键触发发送,Shift+Enter 换行
60
+ * @deprecated 此属性已废弃,现在固定使用 Enter 发送,Shift+Enter 换行
61
+ * @example triggerSendKey="Enter"
62
62
  */
63
- triggerSendKey?: 'Enter' | 'Mod+Enter';
63
+ triggerSendKey?: 'Enter';
64
64
  /**
65
65
  * 当内容发送时触发的异步回调函数。
66
66
  * 返回一个 Promise 对象,当发送成功后 resolve。
@@ -429,7 +429,7 @@ export type MarkdownInputFieldProps = {
429
429
  * @param {(value: string) => void} [props.onChange] - 值变化时的回调
430
430
  * @param {(value: string) => Promise<void>} [props.onSend] - 发送消息的回调
431
431
  * @param {string} [props.placeholder] - 占位符文本
432
- * @param {string} [props.triggerSendKey='Mod+Enter'] - 触发发送的快捷键
432
+ * @param {string} [props.triggerSendKey='Enter'] - 触发发送的快捷键(Enter 发送,Shift+Enter 换行)
433
433
  * @param {boolean} [props.disabled] - 是否禁用
434
434
  * @param {boolean} [props.typing] - 是否正在输入
435
435
  * @param {AttachmentProps} [props.attachment] - 附件配置
@@ -445,7 +445,7 @@ export type MarkdownInputFieldProps = {
445
445
  * onChange={(value) => console.log(value)}
446
446
  * onSend={(value) => Promise.resolve()}
447
447
  * placeholder="请输入Markdown文本..."
448
- * triggerSendKey="Mod+Enter"
448
+ * triggerSendKey="Enter"
449
449
  * />
450
450
  * ```
451
451
  *
@@ -277,7 +277,7 @@ import { useVoiceInputManager } from "./VoiceInputManager";
277
277
  * @param {(value: string) => void} [props.onChange] - 值变化时的回调
278
278
  * @param {(value: string) => Promise<void>} [props.onSend] - 发送消息的回调
279
279
  * @param {string} [props.placeholder] - 占位符文本
280
- * @param {string} [props.triggerSendKey='Mod+Enter'] - 触发发送的快捷键
280
+ * @param {string} [props.triggerSendKey='Enter'] - 触发发送的快捷键(Enter 发送,Shift+Enter 换行)
281
281
  * @param {boolean} [props.disabled] - 是否禁用
282
282
  * @param {boolean} [props.typing] - 是否正在输入
283
283
  * @param {AttachmentProps} [props.attachment] - 附件配置
@@ -293,7 +293,7 @@ import { useVoiceInputManager } from "./VoiceInputManager";
293
293
  * onChange={(value) => console.log(value)}
294
294
  * onSend={(value) => Promise.resolve()}
295
295
  * placeholder="请输入Markdown文本..."
296
- * triggerSendKey="Mod+Enter"
296
+ * triggerSendKey="Enter"
297
297
  * />
298
298
  * ```
299
299
  *
@@ -638,26 +638,16 @@ import { useVoiceInputManager } from "./VoiceInputManager";
638
638
  // 键盘事件:早返回减少嵌套
639
639
  var handleKeyDown = useRefFunction(function(e) {
640
640
  var _markdownEditorRef_current;
641
- var triggerSendKey = props.triggerSendKey || 'Enter';
642
641
  if (markdownEditorRef === null || markdownEditorRef === void 0 ? void 0 : (_markdownEditorRef_current = markdownEditorRef.current) === null || _markdownEditorRef_current === void 0 ? void 0 : _markdownEditorRef_current.store.inputComposition) return;
643
642
  var isEnter = e.key === 'Enter';
644
643
  var isMod = e.ctrlKey || e.metaKey;
645
- if (triggerSendKey === 'Enter') {
646
- if (!(isEnter && !isMod)) return;
647
- e.stopPropagation();
648
- e.preventDefault();
649
- if (props.onSend) sendMessage();
650
- return;
651
- }
652
- if (triggerSendKey === 'Mod+Enter') {
653
- if (!(isEnter && isMod)) return;
654
- e.stopPropagation();
655
- e.preventDefault();
656
- // 防止重复触发:检查是否已经在加载中
657
- if (props.onSend && !isLoading && !props.disabled && !props.typing) {
658
- sendMessage();
659
- }
660
- }
644
+ var isShift = e.shiftKey;
645
+ // Enter 发送,Shift+Enter 换行
646
+ if (!isEnter || isMod) return;
647
+ if (isShift) return; // Shift+Enter 时让编辑器处理换行
648
+ e.stopPropagation();
649
+ e.preventDefault();
650
+ if (props.onSend) sendMessage();
661
651
  });
662
652
  // 预计算:SendActions 节点,统一渲染,避免重复 JSX
663
653
  var sendActionsNode = /*#__PURE__*/ React.createElement(SendActions, {
@@ -773,8 +763,7 @@ import { useVoiceInputManager } from "./VoiceInputManager";
773
763
  },
774
764
  textAreaProps: {
775
765
  enable: true,
776
- placeholder: props.placeholder,
777
- triggerSendKey: props.triggerSendKey || 'Enter'
766
+ placeholder: props.placeholder
778
767
  },
779
768
  tagInputProps: _object_spread({
780
769
  enable: true,
@@ -814,20 +803,7 @@ import { useVoiceInputManager } from "./VoiceInputManager";
814
803
  toc: false,
815
804
  pasteConfig: props.pasteConfig
816
805
  }, markdownProps)))), props.toolsRender ? /*#__PURE__*/ React.createElement("div", {
817
- style: {
818
- backgroundColor: '#fff',
819
- display: 'flex',
820
- boxSizing: 'border-box',
821
- borderRadius: 'inherit',
822
- flexDirection: 'row',
823
- alignItems: 'center',
824
- justifyContent: 'space-between',
825
- gap: 8,
826
- width: '100%',
827
- paddingRight: 'var(--padding-3x)',
828
- paddingLeft: 'var(--padding-3x)',
829
- paddingBottom: 'var(--padding-3x)'
830
- }
806
+ className: classNames("".concat(baseCls, "-tools-wrapper"), hashId)
831
807
  }, /*#__PURE__*/ React.createElement("div", {
832
808
  ref: actionsRef,
833
809
  contentEditable: false,
@@ -53,12 +53,13 @@ function _object_without_properties_loose(source, excluded) {
53
53
  }
54
54
  return target;
55
55
  }
56
- import { ConfigProvider } from "antd";
56
+ import { ConfigProvider, Tooltip } from "antd";
57
57
  import classNames from "classnames";
58
58
  import { motion } from "framer-motion";
59
59
  import React, { useContext, useEffect } from "react";
60
60
  import { ErrorBoundary } from "react-error-boundary";
61
61
  import { StopIcon } from "../../AgentRunBar/icons";
62
+ import { I18nContext } from "../../I18n";
62
63
  import { useStyle } from "./style";
63
64
  function SendIcon(props) {
64
65
  var hover = props.hover, typing = props.typing, onInit = props.onInit, rest = _object_without_properties(props, [
@@ -145,14 +146,27 @@ function SendIcon(props) {
145
146
  (_props_onInit = props.onInit) === null || _props_onInit === void 0 ? void 0 : _props_onInit.call(props);
146
147
  }, []);
147
148
  var getPrefixCls = useContext(ConfigProvider.ConfigContext).getPrefixCls;
149
+ var locale = useContext(I18nContext).locale;
148
150
  var baseCls = getPrefixCls('agentic-md-input-field-send-button');
149
151
  var _useStyle = useStyle(baseCls), wrapSSR = _useStyle.wrapSSR, hashId = _useStyle.hashId;
150
152
  if (typeof window === 'undefined' || typeof document === 'undefined' || !window.document) {
151
153
  // SSR 环境下不渲染
152
154
  return null;
153
155
  }
156
+ var sendText = (locale === null || locale === void 0 ? void 0 : locale['input.sendButtonTooltip.send']) || '按 Enter 键发送';
157
+ var newlineText = (locale === null || locale === void 0 ? void 0 : locale['input.sendButtonTooltip.newline']) || '按 Shift+Enter 键换行';
158
+ var tooltipTitle = /*#__PURE__*/ React.createElement("div", {
159
+ style: {
160
+ lineHeight: '1.5',
161
+ textAlign: 'left'
162
+ }
163
+ }, /*#__PURE__*/ React.createElement("div", null, sendText), /*#__PURE__*/ React.createElement("div", null, newlineText));
154
164
  var _obj;
155
- return wrapSSR(/*#__PURE__*/ React.createElement("div", {
165
+ return wrapSSR(/*#__PURE__*/ React.createElement(Tooltip, {
166
+ arrow: false,
167
+ title: tooltipTitle,
168
+ mouseEnterDelay: 0.5
169
+ }, /*#__PURE__*/ React.createElement("div", {
156
170
  "data-testid": "send-button",
157
171
  onClick: function() {
158
172
  if (!disabled) {
@@ -176,5 +190,5 @@ function SendIcon(props) {
176
190
  hover: isSendable && !disabled,
177
191
  disabled: disabled,
178
192
  typing: typing
179
- }))));
193
+ })))));
180
194
  };
@@ -51,6 +51,7 @@ function _object_spread_props(target, source) {
51
51
  return target;
52
52
  }
53
53
  import { Keyframes } from "@ant-design/cssinjs";
54
+ import { MOBILE_BREAKPOINT, MOBILE_PADDING } from "../Constants/mobile";
54
55
  import { resetComponent, useEditorStyleRegister } from "../Hooks/useStyle";
55
56
  // MarkdownInputField 样式常量
56
57
  // Glow border effect constants - 辉光边框效果常量
@@ -152,7 +153,8 @@ var genStyle = function(token) {
152
153
  boxSizing: 'border-box'
153
154
  },
154
155
  '&:active,&.active': {
155
- outline: '1px solid transparent'
156
+ outline: '1px solid transparent',
157
+ outlineColor: 'var(--mif-active-outline-color, transparent)'
156
158
  },
157
159
  '&-enlarged': (_obj = {}, _define_property(_obj, "".concat(token.componentCls, "-editor"), {
158
160
  flex: 1,
@@ -203,13 +205,15 @@ var genStyle = function(token) {
203
205
  padding: '0 !important'
204
206
  }
205
207
  },
206
- '&-editor-content': {
208
+ '&-editor-content': _define_property({
207
209
  overflowY: 'auto',
208
210
  maxHeight: 'inherit',
209
211
  borderRadius: 'inherit',
210
212
  scrollbarColor: 'var(--color-gray-text-tertiary) transparent',
211
213
  scrollbarWidth: 'thin'
212
- },
214
+ }, "@media (max-width: ".concat(MOBILE_BREAKPOINT, ")"), {
215
+ padding: "".concat(MOBILE_PADDING, " !important")
216
+ }),
213
217
  '&&-disabled': {
214
218
  backgroundColor: 'rgba(0,0,0,0.04)',
215
219
  cursor: 'not-allowed',
@@ -223,6 +227,24 @@ var genStyle = function(token) {
223
227
  font: 'var(--font-text-body-base)',
224
228
  color: 'var(--color-gray-text-default)'
225
229
  },
230
+ '&-tools-wrapper': _define_property({
231
+ backgroundColor: '#fff',
232
+ display: 'flex',
233
+ boxSizing: 'border-box',
234
+ borderRadius: 'inherit',
235
+ flexDirection: 'row',
236
+ alignItems: 'center',
237
+ justifyContent: 'space-between',
238
+ gap: 8,
239
+ width: '100%',
240
+ paddingLeft: 'var(--padding-3x)',
241
+ paddingRight: 'var(--padding-3x)',
242
+ paddingBottom: 'var(--padding-3x)'
243
+ }, "@media (max-width: ".concat(MOBILE_BREAKPOINT, ")"), {
244
+ paddingLeft: MOBILE_PADDING,
245
+ paddingRight: MOBILE_PADDING,
246
+ paddingBottom: MOBILE_PADDING
247
+ }),
226
248
  '&-send-actions': {
227
249
  position: 'absolute',
228
250
  userSelect: 'none',
@@ -22,7 +22,7 @@ var NormalChart = function() {
22
22
  */ export var ChartErrorBoundaryExample = function() {
23
23
  return /*#__PURE__*/ React.createElement("div", {
24
24
  style: {
25
- padding: '20px'
25
+ padding: '12px'
26
26
  }
27
27
  }, /*#__PURE__*/ React.createElement("h2", null, "图表错误边界示例(antd Result 简洁版)"), /*#__PURE__*/ React.createElement("div", {
28
28
  style: {
@@ -316,7 +316,7 @@ export { ChartFilter, ChartToolBar, downloadChart } from "./components";
316
316
  ]);
317
317
  return useMemo(function() {
318
318
  return /*#__PURE__*/ React.createElement("div", _object_spread_props(_object_spread({
319
- className: 'ant-agentic-md-editor-drag-el'
319
+ "data-drag-el": true
320
320
  }, attributes), {
321
321
  "data-be": 'chart',
322
322
  style: {
@@ -332,7 +332,7 @@ export { ChartFilter, ChartToolBar, downloadChart } from "./components";
332
332
  return store.dragStart(e, markdownContainerRef.current);
333
333
  }
334
334
  }), /*#__PURE__*/ React.createElement(DragHandle, null), /*#__PURE__*/ React.createElement("div", {
335
- className: "ant-agentic-md-editor-chart-box",
335
+ "data-chart-box": true,
336
336
  style: {
337
337
  display: 'flex',
338
338
  flexDirection: 'column',
@@ -41,8 +41,7 @@ export function CodeContainer(param) {
41
41
  height: hide ? 0 : 'auto',
42
42
  opacity: hide ? 0 : 1
43
43
  },
44
- className: classNames('ace-container', 'code-editor-container', 'drag-el', {
45
- frontmatter: safeElement.frontmatter
46
- })
44
+ "data-frontmatter": safeElement.frontmatter ? '' : undefined,
45
+ className: classNames('ace-container', 'code-editor-container', 'drag-el')
47
46
  }, children));
48
47
  }