@ibiz-template/vue3-components 0.7.41-alpha.42 → 0.7.41-alpha.44

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 (82) hide show
  1. package/dist/ibiz-markdown-editor-CUzKkFER.js +1 -0
  2. package/dist/{index-CaWTEUU1.js → index-DgqTP4Vw.js} +1 -1
  3. package/dist/{index-CD2XM6M6.js → index-Dr0VM8iS.js} +1 -1
  4. package/dist/index-DtEaU3-5.js +11 -0
  5. package/dist/index.min.css +1 -1
  6. package/dist/index.system.min.js +1 -1
  7. package/dist/wang-editor-CRWSwyXY.js +1 -0
  8. package/dist/{xlsx-util-B1eGfH7d.js → xlsx-util-CMJON8Uq.js} +1 -1
  9. package/es/control/grid/grid-column/grid-field-column/attachment-column/attachment-column.mjs +2 -1
  10. package/es/control/grid/grid-column/grid-field-column/attachment-column/file-util.mjs +22 -11
  11. package/es/control/toolbar/export-excel/export-excel.mjs +19 -4
  12. package/es/editor/carousel/ibiz-carousel/ibiz-carousel.mjs +5 -2
  13. package/es/editor/code/monaco-editor/monaco-editor.mjs +8 -194
  14. package/es/editor/html/wang-editor/module/ai-module.mjs +1 -1
  15. package/es/editor/html/wang-editor/wang-editor.mjs +35 -207
  16. package/es/editor/markdown/ibiz-markdown-editor/custom-menu.mjs +11 -222
  17. package/es/editor/markdown/ibiz-markdown-editor/ibiz-markdown-editor.css +1 -1
  18. package/es/editor/markdown/ibiz-markdown-editor/ibiz-markdown-editor.mjs +23 -12
  19. package/es/editor/text-box/input/input.mjs +11 -197
  20. package/es/editor/text-box/signature/signature.mjs +28 -15
  21. package/es/editor/upload/upload-editor.controller.mjs +12 -1
  22. package/es/editor/upload/use/use-iview-upload.mjs +28 -13
  23. package/es/locale/en/index.mjs +29 -2
  24. package/es/locale/zh-CN/index.mjs +29 -2
  25. package/es/panel-component/coop-pos/coop-pos.controller.mjs +11 -1
  26. package/es/panel-component/panel-app-title/panel-app-title.controller.mjs +3 -1
  27. package/es/panel-component/panel-app-title/panel-app-title.mjs +22 -43
  28. package/es/util/ai-chat-util/ai-chat-util.mjs +672 -7
  29. package/es/util/ai-chat-util/ai-feedback/ai-feedback.css +1 -0
  30. package/es/util/ai-chat-util/ai-feedback/ai-feedback.mjs +130 -0
  31. package/es/util/app-util/app-util.mjs +26 -247
  32. package/es/util/inline-ai-util/inline-ai-textarea/common/ai-think/ai-think.css +1 -0
  33. package/es/util/inline-ai-util/inline-ai-textarea/common/ai-think/ai-think.mjs +56 -0
  34. package/es/util/inline-ai-util/inline-ai-textarea/common/ai-tool-call/ai-tool-call.css +1 -0
  35. package/es/util/inline-ai-util/inline-ai-textarea/common/ai-tool-call/ai-tool-call.mjs +52 -0
  36. package/es/util/inline-ai-util/inline-ai-textarea/common/ai-tool-call-item/ai-tool-call-item.css +1 -0
  37. package/es/util/inline-ai-util/inline-ai-textarea/common/ai-tool-call-item/ai-tool-call-item.mjs +143 -0
  38. package/es/util/inline-ai-util/inline-ai-textarea/common/index.mjs +4 -0
  39. package/es/util/inline-ai-util/inline-ai-textarea/icon.mjs +52 -1
  40. package/es/util/inline-ai-util/inline-ai-textarea/inline-ai-textarea.css +1 -1
  41. package/es/util/inline-ai-util/inline-ai-textarea/inline-ai-textarea.hook.mjs +34 -4
  42. package/es/util/inline-ai-util/inline-ai-textarea/inline-ai-textarea.mjs +32 -25
  43. package/es/util/inline-ai-util/inline-ai-textarea/interface.mjs +1 -0
  44. package/lib/control/grid/grid-column/grid-field-column/attachment-column/attachment-column.cjs +2 -1
  45. package/lib/control/grid/grid-column/grid-field-column/attachment-column/file-util.cjs +22 -11
  46. package/lib/control/toolbar/export-excel/export-excel.cjs +18 -3
  47. package/lib/editor/carousel/ibiz-carousel/ibiz-carousel.cjs +5 -2
  48. package/lib/editor/code/monaco-editor/monaco-editor.cjs +8 -194
  49. package/lib/editor/html/wang-editor/module/ai-module.cjs +1 -1
  50. package/lib/editor/html/wang-editor/wang-editor.cjs +34 -206
  51. package/lib/editor/markdown/ibiz-markdown-editor/custom-menu.cjs +11 -222
  52. package/lib/editor/markdown/ibiz-markdown-editor/ibiz-markdown-editor.cjs +23 -12
  53. package/lib/editor/markdown/ibiz-markdown-editor/ibiz-markdown-editor.css +1 -1
  54. package/lib/editor/text-box/input/input.cjs +10 -196
  55. package/lib/editor/text-box/signature/signature.cjs +28 -15
  56. package/lib/editor/upload/upload-editor.controller.cjs +12 -1
  57. package/lib/editor/upload/use/use-iview-upload.cjs +28 -13
  58. package/lib/locale/en/index.cjs +29 -2
  59. package/lib/locale/zh-CN/index.cjs +29 -2
  60. package/lib/panel-component/coop-pos/coop-pos.controller.cjs +11 -1
  61. package/lib/panel-component/panel-app-title/panel-app-title.cjs +21 -42
  62. package/lib/panel-component/panel-app-title/panel-app-title.controller.cjs +3 -1
  63. package/lib/util/ai-chat-util/ai-chat-util.cjs +670 -5
  64. package/lib/util/ai-chat-util/ai-feedback/ai-feedback.cjs +132 -0
  65. package/lib/util/ai-chat-util/ai-feedback/ai-feedback.css +1 -0
  66. package/lib/util/app-util/app-util.cjs +25 -246
  67. package/lib/util/inline-ai-util/inline-ai-textarea/common/ai-think/ai-think.cjs +58 -0
  68. package/lib/util/inline-ai-util/inline-ai-textarea/common/ai-think/ai-think.css +1 -0
  69. package/lib/util/inline-ai-util/inline-ai-textarea/common/ai-tool-call/ai-tool-call.cjs +54 -0
  70. package/lib/util/inline-ai-util/inline-ai-textarea/common/ai-tool-call/ai-tool-call.css +1 -0
  71. package/lib/util/inline-ai-util/inline-ai-textarea/common/ai-tool-call-item/ai-tool-call-item.cjs +145 -0
  72. package/lib/util/inline-ai-util/inline-ai-textarea/common/ai-tool-call-item/ai-tool-call-item.css +1 -0
  73. package/lib/util/inline-ai-util/inline-ai-textarea/common/index.cjs +9 -0
  74. package/lib/util/inline-ai-util/inline-ai-textarea/icon.cjs +54 -0
  75. package/lib/util/inline-ai-util/inline-ai-textarea/inline-ai-textarea.cjs +31 -24
  76. package/lib/util/inline-ai-util/inline-ai-textarea/inline-ai-textarea.css +1 -1
  77. package/lib/util/inline-ai-util/inline-ai-textarea/inline-ai-textarea.hook.cjs +34 -4
  78. package/lib/util/inline-ai-util/inline-ai-textarea/interface.cjs +3 -0
  79. package/package.json +7 -7
  80. package/dist/ibiz-markdown-editor-pEdb_gS_.js +0 -1
  81. package/dist/index-BObZTN7-.js +0 -11
  82. package/dist/wang-editor-Ck-JCWqK.js +0 -1
@@ -0,0 +1,145 @@
1
+ 'use strict';
2
+
3
+ var vue = require('vue');
4
+ var vue3Util = require('@ibiz-template/vue3-util');
5
+ var icon = require('../../icon.cjs');
6
+ require('./ai-tool-call-item.css');
7
+
8
+ "use strict";
9
+ const AIToolCallItem = /* @__PURE__ */ vue.defineComponent({
10
+ props: {
11
+ toolCall: {
12
+ type: Object,
13
+ required: true
14
+ }
15
+ },
16
+ setup(props) {
17
+ const ns = vue3Util.useNamespace("ai-tool-call-item");
18
+ const isExpanded = vue.ref(false);
19
+ const handleExpandChange = () => {
20
+ isExpanded.value = !isExpanded.value;
21
+ };
22
+ const onCopy = (event) => {
23
+ event.stopPropagation();
24
+ ibiz.util.text.copy(JSON.stringify(props.toolCall, void 0, 2));
25
+ ibiz.message.success(ibiz.i18n.t("util.inlineAiUtil.copy"));
26
+ };
27
+ const formatValue = (value) => {
28
+ if (typeof value === "string") {
29
+ if (value.includes("Failed") || value.includes("Error") || value.includes("ERR_")) {
30
+ return '<span class="'.concat(ns.e("error"), '">"').concat(value, '"</span>');
31
+ }
32
+ return '<span class="'.concat(ns.e("string"), '">"').concat(value, '"</span>');
33
+ }
34
+ if (typeof value === "number") {
35
+ return '<span class="'.concat(ns.e("number"), '">').concat(value, "</span>");
36
+ }
37
+ if (typeof value === "boolean") {
38
+ return '<span class="'.concat(ns.e("boolean"), '">').concat(value, "</span>");
39
+ }
40
+ if (value === null) {
41
+ return '<span class="'.concat(ns.e("null"), '">null</span>');
42
+ }
43
+ return "";
44
+ };
45
+ const formatJSON = (data, indentLevel = 0) => {
46
+ const indent = " ".repeat(indentLevel);
47
+ const lines2 = [];
48
+ if (Array.isArray(data)) {
49
+ if (data.length === 0) {
50
+ return ["".concat(indent, '<span class="').concat(ns.e("array"), '">[]</span>')];
51
+ }
52
+ lines2.push("".concat(indent, '<span class="').concat(ns.e("array"), '">[</span>'));
53
+ data.forEach((item, index) => {
54
+ const itemLines = formatJSON(item, indentLevel + 1);
55
+ const comma = index < data.length - 1 ? "," : "";
56
+ if (typeof item === "object" && item !== null) {
57
+ lines2.push(...itemLines.slice(0, -1));
58
+ lines2.push("".concat(itemLines[itemLines.length - 1]).concat(comma));
59
+ } else {
60
+ lines2.push("".concat(itemLines[0]).concat(comma));
61
+ }
62
+ });
63
+ lines2.push("".concat(indent, '<span class="').concat(ns.e("array"), '">]</span>'));
64
+ } else if (typeof data === "object" && data !== null) {
65
+ const keys = Object.keys(data);
66
+ if (keys.length === 0) {
67
+ return ["".concat(indent, '<span class="').concat(ns.e("property"), '">{}</span>')];
68
+ }
69
+ lines2.push("".concat(indent, '<span class="').concat(ns.e("property"), '">{</span>'));
70
+ keys.forEach((key, index) => {
71
+ const value = data[key];
72
+ const comma = index < keys.length - 1 ? "," : "";
73
+ const keyElement = '<span class="'.concat(ns.e("json-key"), '">"').concat(key, '":</span>');
74
+ if (typeof value === "object" && value !== null) {
75
+ const valueLines = formatJSON(value, indentLevel + 1);
76
+ lines2.push("".concat(indent, " ").concat(keyElement, " ").concat(valueLines[0].trim()));
77
+ if (valueLines.length > 1) {
78
+ lines2.push(...valueLines.slice(1, -1));
79
+ lines2.push("".concat(valueLines[valueLines.length - 1]).concat(comma));
80
+ }
81
+ } else {
82
+ const valueElement = formatValue(value);
83
+ lines2.push("".concat(indent, " ").concat(keyElement, " ").concat(valueElement).concat(comma));
84
+ }
85
+ });
86
+ lines2.push("".concat(indent, '<span class="').concat(ns.e("property"), '">}</span>'));
87
+ } else {
88
+ lines2.push("".concat(indent).concat(formatValue(data)));
89
+ }
90
+ return lines2;
91
+ };
92
+ const lines = vue.ref([]);
93
+ const onInit = () => {
94
+ const items = formatJSON(props.toolCall, 0);
95
+ lines.value = items.map((item, index) => '<span class="'.concat(ns.em("code-line", "line-number"), '">').concat(index + 1, "</span>").concat(item));
96
+ };
97
+ vue.onMounted(() => {
98
+ onInit();
99
+ });
100
+ return {
101
+ ns,
102
+ lines,
103
+ isExpanded,
104
+ onCopy,
105
+ handleExpandChange
106
+ };
107
+ },
108
+ render() {
109
+ var _a;
110
+ return vue.createVNode("div", {
111
+ "class": this.ns.b()
112
+ }, [vue.createVNode("div", {
113
+ "class": this.ns.e("header"),
114
+ "onClick": this.handleExpandChange
115
+ }, [vue.createVNode("div", {
116
+ "class": this.ns.e("header-left")
117
+ }, [vue.createVNode("div", {
118
+ "class": this.ns.em("header-left", "caption")
119
+ }, [this.toolCall.name]), vue.createVNode("div", {
120
+ "class": this.ns.em("header-left", "desc")
121
+ }, [(_a = this.toolCall.parameters) == null ? void 0 : _a.desc])]), vue.createVNode("div", {
122
+ "class": this.ns.e("header-right")
123
+ }, [this.toolCall.error && vue.createVNode("div", {
124
+ "class": this.ns.em("header-right", "error")
125
+ }, [vue.createVNode("span", {
126
+ "class": this.ns.em("header-right", "error-text")
127
+ }, [ibiz.i18n.t("util.inlineAiUtil.error")]), vue.createVNode("div", {
128
+ "class": this.ns.em("header-right", "icon")
129
+ }, [icon.ErrorIcon])]), vue.createVNode("div", {
130
+ "onClick": this.onCopy,
131
+ "class": this.ns.em("header-right", "icon")
132
+ }, [icon.CopyIcon]), vue.createVNode("div", {
133
+ "class": this.ns.em("header-right", "icon")
134
+ }, [this.isExpanded ? icon.DownIcon : icon.RightIcon])])]), this.isExpanded && vue.createVNode("div", {
135
+ "class": this.ns.e("content")
136
+ }, [this.lines.map((line) => {
137
+ return vue.createVNode("div", {
138
+ "class": this.ns.e("code-line"),
139
+ "innerHTML": line
140
+ }, null);
141
+ })])]);
142
+ }
143
+ });
144
+
145
+ exports.AIToolCallItem = AIToolCallItem;
@@ -0,0 +1 @@
1
+ .ibiz-ai-tool-call-item{--ibiz-ai-tool-call-item-bg-primary:#1e1e1e;--ibiz-ai-tool-call-item-bg-secondary:#2d2d2d;--ibiz-ai-tool-call-item-bg-tertiary:#3c3c3c;--ibiz-ai-tool-call-item-text-primary:#d4d4d4;--ibiz-ai-tool-call-item-text-secondary:#9cdcfe;--ibiz-ai-tool-call-item-text-error:#f44747;--ibiz-ai-tool-call-item-text-string:#ce9178;--ibiz-ai-tool-call-item-text-boolean:#569cd6;--ibiz-ai-tool-call-item-text-property:#9cdcfe;--ibiz-ai-tool-call-item-text-number:#b5cea8;--ibiz-ai-tool-call-item-accent-primary:#0e639c;--ibiz-ai-tool-call-item-accent-error:rgba(244, 71, 71, 0.2);--ibiz-ai-tool-call-item-color-bg:var(--ibiz-inline-ai-textarea-container-color-bg-1);--ibiz-ai-tool-call-item-color-border:var(--ibiz-inline-ai-textarea-container-color-border);margin-bottom:var(--ibiz-spacing-tight);background-color:var(--ibiz-ai-tool-call-item-color-bg);border:1px solid var(--ibiz-ai-tool-call-item-color-border);border-radius:var(--ibiz-border-radius-small)}.ibiz-ai-tool-call-item__header{display:flex;gap:var(--ibiz-spacing-tight);align-items:center;justify-content:space-between;width:100%;padding:var(--ibiz-spacing-tight)}.ibiz-ai-tool-call-item__header-left{display:flex;gap:var(--ibiz-spacing-tight);align-items:center}.ibiz-ai-tool-call-item__header-left--caption{flex-shrink:0}.ibiz-ai-tool-call-item__header-left--desc{flex-grow:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ibiz-ai-tool-call-item__header-right{display:flex;flex-shrink:0;gap:var(--ibiz-spacing-tight);align-items:center}.ibiz-ai-tool-call-item__header-right--icon{display:flex;align-items:center;cursor:pointer}.ibiz-ai-tool-call-item__header-right--error-text{color:var(--ibiz-color-danger)}.ibiz-ai-tool-call-item__content{padding:var(--ibiz-spacing-tight) 0}.ibiz-ai-tool-call-item__code-line{display:flex;min-height:18px;margin-bottom:var(--ibiz-spacing-base-tight);font-family:Consolas,monospace;font-size:.95rem}.ibiz-ai-tool-call-item__code-line--line-number{min-width:20px;margin-right:15px;color:var(--ibiz-color-success);text-align:right;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ibiz-ai-tool-call-item__property{color:var(--ibiz-ai-tool-call-item-text-property)}.ibiz-ai-tool-call-item__string{overflow:hidden;color:var(--ibiz-ai-tool-call-item-text-string);text-overflow:ellipsis;white-space:nowrap}.ibiz-ai-tool-call-item__boolean{color:var(--ibiz-ai-tool-call-item-text-boolean)}.ibiz-ai-tool-call-item__number{color:var(--ibiz-ai-tool-call-item-text-number)}.ibiz-ai-tool-call-item__null{color:var(--ibiz-ai-tool-call-item-text-boolean)}.ibiz-ai-tool-call-item__error{color:var(--ibiz-ai-tool-call-item-text-error)}
@@ -0,0 +1,9 @@
1
+ 'use strict';
2
+
3
+ var aiThink = require('./ai-think/ai-think.cjs');
4
+ var aiToolCall = require('./ai-tool-call/ai-tool-call.cjs');
5
+
6
+ "use strict";
7
+
8
+ exports.AIThink = aiThink.AIThink;
9
+ exports.AIToolCall = aiToolCall.AIToolCall;
@@ -214,14 +214,68 @@ const DownIcon = vue.createVNode("svg", {
214
214
  "id": "abf\u5F62\u72B6\u7ED3\u5408",
215
215
  "transform": "rotate(-90 7.978 8.252)"
216
216
  }, null)])]);
217
+ const RightIcon = vue.createVNode("svg", {
218
+ "viewBox": "0 0 1024 1024",
219
+ "version": "1.1",
220
+ "xmlns": "http://www.w3.org/2000/svg",
221
+ "p-id": "4832",
222
+ "width": "16",
223
+ "height": "16",
224
+ "fill": "currentColor"
225
+ }, [vue.createVNode("path", {
226
+ "d": "M707.61856 495.14624l-357.5296-357.5296c-9.30816-9.30688-24.40064-9.30688-33.70752 0-9.30816 9.30816-9.30816 24.40064 0 33.7088L657.056 512 316.38144 852.67456c-9.30816 9.30688-9.30816 24.40064 0 33.7088 4.65408 4.65536 10.75328 6.98112 16.85376 6.98112 6.10048 0 12.19968-2.32576 16.85376-6.98112l357.5296-357.5296C716.92672 519.5456 716.92672 504.4544 707.61856 495.14624z",
227
+ "p-id": "4833"
228
+ }, null)]);
229
+ const ErrorIcon = vue.createVNode("svg", {
230
+ "xmlns": "http://www.w3.org/2000/svg",
231
+ "width": "16",
232
+ "height": "16",
233
+ "viewBox": "0 0 24 24",
234
+ "fill": "none",
235
+ "stroke": "red",
236
+ "stroke-width": "2",
237
+ "stroke-linecap": "round",
238
+ "stroke-linejoin": "round",
239
+ "aria-hidden": "true"
240
+ }, [vue.createVNode("path", {
241
+ "d": "m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3"
242
+ }, null), vue.createVNode("path", {
243
+ "d": "M12 9v4"
244
+ }, null), vue.createVNode("path", {
245
+ "d": "M12 17h.01"
246
+ }, null)]);
247
+ const CopyIcon = vue.createVNode("svg", {
248
+ "xmlns": "http://www.w3.org/2000/svg",
249
+ "width": "16",
250
+ "height": "16",
251
+ "viewBox": "0 0 24 24",
252
+ "fill": "none",
253
+ "stroke": "currentColor",
254
+ "stroke-width": "2",
255
+ "stroke-linecap": "round",
256
+ "stroke-linejoin": "round",
257
+ "aria-hidden": "true"
258
+ }, [vue.createVNode("rect", {
259
+ "width": "14",
260
+ "height": "14",
261
+ "x": "8",
262
+ "y": "8",
263
+ "rx": "2",
264
+ "ry": "2"
265
+ }, null), vue.createVNode("path", {
266
+ "d": "M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"
267
+ }, null)]);
217
268
 
218
269
  exports.AIIcon = AIIcon;
219
270
  exports.CancelIcon = CancelIcon;
271
+ exports.CopyIcon = CopyIcon;
220
272
  exports.CopyTextIcon = CopyTextIcon;
221
273
  exports.DownIcon = DownIcon;
274
+ exports.ErrorIcon = ErrorIcon;
222
275
  exports.LoadingIcon = LoadingIcon;
223
276
  exports.RegenerateIcon = RegenerateIcon;
224
277
  exports.ReplaceTextIcon = ReplaceTextIcon;
278
+ exports.RightIcon = RightIcon;
225
279
  exports.SendIcon = SendIcon;
226
280
  exports.StopIcon = StopIcon;
227
281
  exports.ThinkSuccessIcon = ThinkSuccessIcon;
@@ -4,7 +4,10 @@ var vue = require('vue');
4
4
  var vue3Util = require('@ibiz-template/vue3-util');
5
5
  var inlineAiTextarea_hook = require('./inline-ai-textarea.hook.cjs');
6
6
  var icon = require('./icon.cjs');
7
+ require('./common/index.cjs');
7
8
  require('./inline-ai-textarea.css');
9
+ var aiToolCall = require('./common/ai-tool-call/ai-tool-call.cjs');
10
+ var aiThink = require('./common/ai-think/ai-think.cjs');
8
11
 
9
12
  "use strict";
10
13
  const InlineAITextArea = /* @__PURE__ */ vue.defineComponent({
@@ -61,6 +64,7 @@ const InlineAITextArea = /* @__PURE__ */ vue.defineComponent({
61
64
  const textareaRef = vue.ref();
62
65
  const message = vue.ref({
63
66
  role: "USER",
67
+ toolcalls: [],
64
68
  error: void 0,
65
69
  think: void 0,
66
70
  content: props.content
@@ -118,14 +122,22 @@ const InlineAITextArea = /* @__PURE__ */ vue.defineComponent({
118
122
  break;
119
123
  case 30:
120
124
  answerContent = answer.content;
121
- Object.assign(message.value, parseContent(answerContent));
125
+ const {
126
+ think,
127
+ content
128
+ } = parseContent(answerContent);
129
+ Object.assign(message.value, {
130
+ think,
131
+ content
132
+ });
122
133
  break;
123
134
  case 40:
124
135
  isCollapse.value = true;
125
136
  Object.assign(message.value, {
126
- error: answer.content,
137
+ toolcalls: [],
127
138
  think: void 0,
128
- content: void 0
139
+ content: void 0,
140
+ error: answer.content
129
141
  });
130
142
  break;
131
143
  default:
@@ -144,6 +156,7 @@ const InlineAITextArea = /* @__PURE__ */ vue.defineComponent({
144
156
  question = content;
145
157
  answerContent = void 0;
146
158
  Object.assign(message.value, {
159
+ toolcalls: [],
147
160
  error: void 0,
148
161
  think: void 0,
149
162
  content: void 0
@@ -170,9 +183,6 @@ const InlineAITextArea = /* @__PURE__ */ vue.defineComponent({
170
183
  sendQuestion(message.value.content);
171
184
  }
172
185
  };
173
- const onCollapseChange = () => {
174
- isCollapse.value = !isCollapse.value;
175
- };
176
186
  const handleAction = (_e, actionName) => {
177
187
  const content = message.value.content;
178
188
  switch (actionName) {
@@ -221,26 +231,11 @@ const InlineAITextArea = /* @__PURE__ */ vue.defineComponent({
221
231
  "class": ns.em("loading", "dot")
222
232
  }, null)]);
223
233
  };
224
- const renderContent = () => {
234
+ const renderError = () => {
225
235
  if (message.value.error)
226
236
  return vue.createVNode("div", {
227
237
  "class": ns.e("error")
228
238
  }, [message.value.error]);
229
- if (message.value.think)
230
- return vue.createVNode("div", {
231
- "class": ns.e("think")
232
- }, [vue.createVNode("div", {
233
- "class": ns.em("think", "header"),
234
- "onClick": onCollapseChange
235
- }, [vue.createVNode("div", {
236
- "class": [ns.em("think", "state-icon"), ns.is("loading", isLoading.value)]
237
- }, [isLoading.value ? icon.LoadingIcon : icon.ThinkSuccessIcon]), vue.createVNode("div", {
238
- "class": ns.em("think", "title")
239
- }, [isLoading.value ? ibiz.i18n.t("util.inlineAiUtil.thinking") : ibiz.i18n.t("util.inlineAiUtil.thinked")]), vue.createVNode("div", {
240
- "class": ns.em("think", "collapse-icon")
241
- }, [isCollapse.value ? icon.DownIcon : icon.UpIcon])]), !isCollapse.value && vue.createVNode("div", {
242
- "class": ns.em("think", "content")
243
- }, [message.value.think])]);
244
239
  };
245
240
  return {
246
241
  ns,
@@ -250,6 +245,7 @@ const InlineAITextArea = /* @__PURE__ */ vue.defineComponent({
250
245
  message,
251
246
  disabled,
252
247
  isLoading,
248
+ isCollapse,
253
249
  actionsRef,
254
250
  textareaRef,
255
251
  actionStyle,
@@ -257,10 +253,10 @@ const InlineAITextArea = /* @__PURE__ */ vue.defineComponent({
257
253
  contentStyle,
258
254
  containerStyle,
259
255
  onKeydown,
256
+ renderError,
260
257
  sendQuestion,
261
258
  handleAction,
262
259
  renderLoading,
263
- renderContent,
264
260
  stopQuestionAndClose
265
261
  };
266
262
  },
@@ -278,7 +274,18 @@ const InlineAITextArea = /* @__PURE__ */ vue.defineComponent({
278
274
  "class": this.ns.em("content", "ai-icon")
279
275
  }, [icon.AIIcon])]), vue.createVNode("div", {
280
276
  "class": this.ns.em("content", "textarea")
281
- }, [this.renderLoading(), this.renderContent(), vue.withDirectives(vue.createVNode("textarea", {
277
+ }, [this.renderLoading(), vue.createVNode(aiToolCall.AIToolCall, {
278
+ "class": this.ns.e("tool-call"),
279
+ "toolCalls": this.message.toolcalls
280
+ }, null), vue.createVNode(aiThink.AIThink, {
281
+ "class": this.ns.e("think"),
282
+ "think": this.message.think,
283
+ "isLoading": this.isLoading,
284
+ "isCollapse": this.isCollapse,
285
+ "onCollapseChange": (val) => {
286
+ this.isCollapse = val;
287
+ }
288
+ }, null), this.renderError(), vue.withDirectives(vue.createVNode("textarea", {
282
289
  "ref": "textareaRef",
283
290
  "disabled": this.disabled,
284
291
  "onKeydown": this.onKeydown,
@@ -1 +1 @@
1
- .ibiz-inline-ai-container-context-menu{--ibiz-inline-ai-context-menu-color-bg:var(--ibiz-color-bg-2);--ibiz-inline-ai-context-menu-color-text:var(--ibiz-color-text-0);--ibiz-inline-ai-context-menu-color-bg-active:var(--ibiz-color-fill-0);--mx-menu-text:var(--ibiz-inline-ai-context-menu-color-text);--mx-menu-backgroud:var(--ibiz-inline-ai-context-menu-color-bg);--mx-menu-hover-backgroud:var(--ibiz-inline-ai-context-menu-color-bg-active);--mx-menu-hover-text:var(--ibiz-inline-ai-context-menu-color-text);--mx-menu-open-text:var(--ibiz-inline-ai-context-menu-color-text);--mx-menu-open-backgroud:var(--ibiz-inline-ai-context-menu-color-bg-active);--mx-menu-open-hover-text:var(--ibiz-inline-ai-context-menu-color-text);--mx-menu-open-hover-backgroud:var(--ibiz-inline-ai-context-menu-color-bg-active);--mx-menu-active-backgroud:var(--ibiz-inline-ai-context-menu-color-bg-active);--mx-menu-active-text:var(--ibiz-inline-ai-context-menu-color-text);--mx-menu-backgroud-radius:0}.ibiz-inline-ai-container-context-menu .scroll-content{pointer-events:unset}.ibiz-inline-ai-container-context-menu .mx-context-menu-item{cursor:pointer}.ibiz-inline-ai-textarea-container{--ibiz-inline-ai-textarea-container-color-bg-0:rgb(255, 255, 255);--ibiz-inline-ai-textarea-container-color-bg-1:rgb(249, 249, 249);--ibiz-inline-ai-textarea-container-color-border:rgba(29, 31, 35, 0.1);--ibiz-inline-ai-textarea-container-color-text-0:rgb(29, 31, 35);--ibiz-inline-ai-textarea-container-color-text-1:rgba(0, 0, 0, 0.45);--ibiz-inline-ai-textarea-container-color-text-2:rgb(85, 125, 165);--ibiz-inline-ai-textarea-container-color-text-hove-1:rgb(105, 148, 190);--ibiz-inline-ai-textarea-container-color-bg-hover-1:rgb(217, 236, 255);--ibiz-inline-ai-textarea-container-color-bg-hover-2:rgba(46, 50, 55, 0.05);--ibiz-inline-ai-textarea-container-color-loading:#65b3fc}.ibiz-inline-ai-textarea-container--dark{--ibiz-inline-ai-textarea-container-color-bg-0:rgb(28, 28, 28);--ibiz-inline-ai-textarea-container-color-bg-1:rgb(53, 54, 60);--ibiz-inline-ai-textarea-container-color-border:rgba(255, 255, 255, 0.08);--ibiz-inline-ai-textarea-container-color-text-0:rgb(255, 255, 255);--ibiz-inline-ai-textarea-container-color-text-1:rgba(249, 249, 249, 0.35);--ibiz-inline-ai-textarea-container-color-text-2:rgb(70, 107, 144);--ibiz-inline-ai-textarea-container-color-text-hove-1:rgb(105, 148, 190);--ibiz-inline-ai-textarea-container-color-bg-hover-1:rgba(85, 125, 165, 0.2);--ibiz-inline-ai-textarea-container-color-bg-hover-2:rgb(67, 68, 74);--ibiz-inline-ai-textarea-container-color-loading:rgba(204, 204, 204, 0.6)}.ibiz-inline-ai-textarea-container{position:absolute;color:var(--ibiz-inline-ai-textarea-container-color-text-0);-webkit-user-select:none;-moz-user-select:none;user-select:none}.ibiz-inline-ai-textarea-container .ibiz-inline-ai-textarea-container__content{border:1px solid var(--ibiz-inline-ai-textarea-container-color-border);border-radius:var(--ibiz-border-radius-small);box-shadow:0 0 16px var(--ibiz-color-shadow)}.ibiz-inline-ai-textarea-container.is-show-ai{border:1px solid var(--ibiz-inline-ai-textarea-container-color-border);border-radius:var(--ibiz-border-radius-small);box-shadow:0 0 16px var(--ibiz-color-shadow)}.ibiz-inline-ai-textarea-container.is-show-ai .ibiz-inline-ai-textarea-container__content{border:none;border-radius:var(--ibiz-border-radius-small) var(--ibiz-border-radius-small) 0 0;box-shadow:none}.ibiz-inline-ai-textarea-container.is-show-ai .ibiz-inline-ai-textarea-container__footer{border-radius:0 0 var(--ibiz-border-radius-small) var(--ibiz-border-radius-small)}.ibiz-inline-ai-textarea-container__content{position:relative;display:flex;gap:var(--ibiz-spacing-tight);padding:var(--ibiz-spacing-base-tight);background-color:var(--ibiz-inline-ai-textarea-container-color-bg-0)}.ibiz-inline-ai-textarea-container__content--prefix{flex-shrink:0;color:var(--ibiz-inline-ai-textarea-container-color-text-1)}.ibiz-inline-ai-textarea-container__content--textarea{position:relative;display:flex;flex-direction:column;flex-grow:1;gap:var(--ibiz-spacing-tight);overflow-y:auto}.ibiz-inline-ai-textarea-container__content--textarea textarea{flex-shrink:0;padding:0;overflow:hidden;color:var(--ibiz-inline-ai-textarea-container-color-text-0);resize:none;background-color:var(--ibiz-inline-ai-textarea-container-color-bg-0);border:none;outline:0;transition:height .3s cubic-bezier(.4,0,.2,1),opacity .3s cubic-bezier(.4,0,.2,1)}.ibiz-inline-ai-textarea-container__content--textarea textarea:disabled{background-color:var(--ibiz-inline-ai-textarea-container-color-bg-0)}.ibiz-inline-ai-textarea-container__content--textarea textarea.is-hidden{display:none}.ibiz-inline-ai-textarea-container__content--suffix{display:flex;flex-direction:column-reverse;flex-shrink:0}.ibiz-inline-ai-textarea-container__content--sand-icon{display:flex;align-items:center;justify-content:center;width:28px;height:28px;color:var(--ibiz-inline-ai-textarea-container-color-text-2);cursor:pointer;border-radius:var(--ibiz-spacing-extra-tight)}.ibiz-inline-ai-textarea-container__content--sand-icon:hover{background-color:var(--ibiz-inline-ai-textarea-container-color-bg-hover-1)}.ibiz-inline-ai-textarea-container__content--stop-icon{display:flex;gap:var(--ibiz-spacing-extra-tight);align-items:center;font-size:var(--ibiz-font-size-small);color:var(--ibiz-inline-ai-textarea-container-color-text-1);cursor:pointer}.ibiz-inline-ai-textarea-container__content--stop-icon:hover{color:var(--ibiz-inline-ai-textarea-container-color-text-hove-1)}.ibiz-inline-ai-textarea-container__footer{padding:var(--ibiz-spacing-base-tight) var(--ibiz-spacing-base);font-size:var(--ibiz-font-size-small);color:var(--ibiz-inline-ai-textarea-container-color-text-1);background-color:var(--ibiz-inline-ai-textarea-container-color-bg-1);border-top:1px solid var(--ibiz-inline-ai-textarea-container-color-border)}.ibiz-inline-ai-textarea-container__actions{position:absolute;width:240px;padding:var(--ibiz-spacing-base-tight) 0;font-size:var(--ibiz-font-size-regular);background-color:var(--ibiz-inline-ai-textarea-container-color-bg-0);border:1px solid var(--ibiz-inline-ai-textarea-container-color-border);border-radius:var(--ibiz-border-radius-small);box-shadow:0 0 16px var(--ibiz-color-shadow)}.ibiz-inline-ai-textarea-container__actions--action{display:flex;gap:var(--ibiz-spacing-tight);align-items:center;padding:var(--ibiz-spacing-tight) var(--ibiz-spacing-base-loose);cursor:pointer}.ibiz-inline-ai-textarea-container__actions--action:hover{background-color:var(--ibiz-inline-ai-textarea-container-color-bg-hover-2)}.ibiz-inline-ai-textarea-container__actions--action.is-danger:hover{color:var(--ibiz-color-danger)}.ibiz-inline-ai-textarea-container__actions--divider{margin:var(--ibiz-spacing-extra-tight) var(--ibiz-spacing-base-loose);border-top:1px solid var(--ibiz-inline-ai-textarea-container-color-border)}.ibiz-inline-ai-textarea-container__error{flex-grow:1;color:var(--ibiz-color-danger)}.ibiz-inline-ai-textarea-container__think{flex-shrink:0;width:100%;height:auto;font-size:var(--ibiz-font-size-small);color:var(--ibiz-inline-ai-textarea-container-color-text-1)}.ibiz-inline-ai-textarea-container__think--header{display:flex;gap:var(--ibiz-spacing-extra-tight);align-items:center;margin-bottom:var(--ibiz-spacing-tight);cursor:pointer}.ibiz-inline-ai-textarea-container__think--header:hover{color:var(--ibiz-inline-ai-textarea-container-color-text-hove-1)}.ibiz-inline-ai-textarea-container__think--state-icon{display:flex;align-items:center;color:var(--ibiz-color-success)}.ibiz-inline-ai-textarea-container__think--state-icon.is-loading{color:var(--ibiz-inline-ai-textarea-container-color-loading)}.ibiz-inline-ai-textarea-container__think--collapse-icon{display:flex;align-items:center}.ibiz-inline-ai-textarea-container__think--content{position:relative;padding-left:var(--ibiz-spacing-tight);word-wrap:break-word;white-space:pre-wrap;transition:height .3s cubic-bezier(.4,0,.2,1),opacity .3s cubic-bezier(.4,0,.2,1)}.ibiz-inline-ai-textarea-container__think--content::before{position:absolute;top:0;bottom:0;left:0;width:2px;content:"";background-color:var(--ibiz-inline-ai-textarea-container-color-border)}.ibiz-inline-ai-textarea-container__loading{position:absolute;top:0;left:0;display:flex;gap:8px;align-items:center;width:100%;height:100%;overflow:hidden}@keyframes bounce{0%,100%,80%{transform:scale(0)}40%{transform:scale(1)}}.ibiz-inline-ai-textarea-container__loading--dot{width:12px;height:12px;background:var(--ibiz-inline-ai-textarea-container-color-loading);border-radius:50%;animation:bounce 1.5s infinite ease-in-out}.ibiz-inline-ai-textarea-container__loading--dot:nth-child(2){animation-delay:.2s}.ibiz-inline-ai-textarea-container__loading--dot:nth-child(3){animation-delay:.4s}
1
+ .ibiz-inline-ai-container-context-menu{--ibiz-inline-ai-context-menu-color-bg:var(--ibiz-color-bg-2);--ibiz-inline-ai-context-menu-color-text:var(--ibiz-color-text-0);--ibiz-inline-ai-context-menu-color-bg-active:var(--ibiz-color-fill-0);--mx-menu-text:var(--ibiz-inline-ai-context-menu-color-text);--mx-menu-backgroud:var(--ibiz-inline-ai-context-menu-color-bg);--mx-menu-hover-backgroud:var(--ibiz-inline-ai-context-menu-color-bg-active);--mx-menu-hover-text:var(--ibiz-inline-ai-context-menu-color-text);--mx-menu-open-text:var(--ibiz-inline-ai-context-menu-color-text);--mx-menu-open-backgroud:var(--ibiz-inline-ai-context-menu-color-bg-active);--mx-menu-open-hover-text:var(--ibiz-inline-ai-context-menu-color-text);--mx-menu-open-hover-backgroud:var(--ibiz-inline-ai-context-menu-color-bg-active);--mx-menu-active-backgroud:var(--ibiz-inline-ai-context-menu-color-bg-active);--mx-menu-active-text:var(--ibiz-inline-ai-context-menu-color-text);--mx-menu-backgroud-radius:0}.ibiz-inline-ai-container-context-menu .scroll-content{pointer-events:unset}.ibiz-inline-ai-container-context-menu .mx-context-menu-item{cursor:pointer}.ibiz-inline-ai-textarea-container{--ibiz-inline-ai-textarea-container-color-bg-0:rgb(255, 255, 255);--ibiz-inline-ai-textarea-container-color-bg-1:rgb(249, 249, 249);--ibiz-inline-ai-textarea-container-color-border:rgba(29, 31, 35, 0.1);--ibiz-inline-ai-textarea-container-color-text-0:rgb(29, 31, 35);--ibiz-inline-ai-textarea-container-color-text-1:rgba(0, 0, 0, 0.45);--ibiz-inline-ai-textarea-container-color-text-2:rgb(85, 125, 165);--ibiz-inline-ai-textarea-container-color-text-hove-1:rgb(105, 148, 190);--ibiz-inline-ai-textarea-container-color-bg-hover-1:rgb(217, 236, 255);--ibiz-inline-ai-textarea-container-color-bg-hover-2:rgba(46, 50, 55, 0.05);--ibiz-inline-ai-textarea-container-color-loading:#65b3fc}.ibiz-inline-ai-textarea-container--dark{--ibiz-inline-ai-textarea-container-color-bg-0:rgb(28, 28, 28);--ibiz-inline-ai-textarea-container-color-bg-1:rgb(53, 54, 60);--ibiz-inline-ai-textarea-container-color-border:rgba(255, 255, 255, 0.08);--ibiz-inline-ai-textarea-container-color-text-0:rgb(255, 255, 255);--ibiz-inline-ai-textarea-container-color-text-1:rgba(249, 249, 249, 0.35);--ibiz-inline-ai-textarea-container-color-text-2:rgb(70, 107, 144);--ibiz-inline-ai-textarea-container-color-text-hove-1:rgb(105, 148, 190);--ibiz-inline-ai-textarea-container-color-bg-hover-1:rgba(85, 125, 165, 0.2);--ibiz-inline-ai-textarea-container-color-bg-hover-2:rgb(67, 68, 74);--ibiz-inline-ai-textarea-container-color-loading:rgba(204, 204, 204, 0.6)}.ibiz-inline-ai-textarea-container{position:absolute;color:var(--ibiz-inline-ai-textarea-container-color-text-0);-webkit-user-select:none;-moz-user-select:none;user-select:none}.ibiz-inline-ai-textarea-container .ibiz-inline-ai-textarea-container__content{border:1px solid var(--ibiz-inline-ai-textarea-container-color-border);border-radius:var(--ibiz-border-radius-small);box-shadow:0 0 16px var(--ibiz-color-shadow)}.ibiz-inline-ai-textarea-container.is-show-ai{border:1px solid var(--ibiz-inline-ai-textarea-container-color-border);border-radius:var(--ibiz-border-radius-small);box-shadow:0 0 16px var(--ibiz-color-shadow)}.ibiz-inline-ai-textarea-container.is-show-ai .ibiz-inline-ai-textarea-container__content{border:none;border-radius:var(--ibiz-border-radius-small) var(--ibiz-border-radius-small) 0 0;box-shadow:none}.ibiz-inline-ai-textarea-container.is-show-ai .ibiz-inline-ai-textarea-container__footer{border-radius:0 0 var(--ibiz-border-radius-small) var(--ibiz-border-radius-small)}.ibiz-inline-ai-textarea-container__content{position:relative;display:flex;gap:var(--ibiz-spacing-tight);padding:var(--ibiz-spacing-base-tight);background-color:var(--ibiz-inline-ai-textarea-container-color-bg-0)}.ibiz-inline-ai-textarea-container__content--prefix{flex-shrink:0;color:var(--ibiz-inline-ai-textarea-container-color-text-1)}.ibiz-inline-ai-textarea-container__content--textarea{position:relative;display:flex;flex-direction:column;flex-grow:1;overflow-y:auto}.ibiz-inline-ai-textarea-container__content--textarea textarea{flex-shrink:0;padding:0;overflow:hidden;color:var(--ibiz-inline-ai-textarea-container-color-text-0);resize:none;background-color:var(--ibiz-inline-ai-textarea-container-color-bg-0);border:none;outline:0;transition:height .3s cubic-bezier(.4,0,.2,1),opacity .3s cubic-bezier(.4,0,.2,1)}.ibiz-inline-ai-textarea-container__content--textarea textarea:disabled{background-color:var(--ibiz-inline-ai-textarea-container-color-bg-0)}.ibiz-inline-ai-textarea-container__content--textarea textarea.is-hidden{display:none}.ibiz-inline-ai-textarea-container__content--suffix{display:flex;flex-direction:column-reverse;flex-shrink:0}.ibiz-inline-ai-textarea-container__content--sand-icon{display:flex;align-items:center;justify-content:center;width:28px;height:28px;color:var(--ibiz-inline-ai-textarea-container-color-text-2);cursor:pointer;border-radius:var(--ibiz-spacing-extra-tight)}.ibiz-inline-ai-textarea-container__content--sand-icon:hover{background-color:var(--ibiz-inline-ai-textarea-container-color-bg-hover-1)}.ibiz-inline-ai-textarea-container__content--stop-icon{display:flex;gap:var(--ibiz-spacing-extra-tight);align-items:center;font-size:var(--ibiz-font-size-small);color:var(--ibiz-inline-ai-textarea-container-color-text-1);cursor:pointer}.ibiz-inline-ai-textarea-container__content--stop-icon:hover{color:var(--ibiz-inline-ai-textarea-container-color-text-hove-1)}.ibiz-inline-ai-textarea-container__footer{padding:var(--ibiz-spacing-base-tight) var(--ibiz-spacing-base);font-size:var(--ibiz-font-size-small);color:var(--ibiz-inline-ai-textarea-container-color-text-1);background-color:var(--ibiz-inline-ai-textarea-container-color-bg-1);border-top:1px solid var(--ibiz-inline-ai-textarea-container-color-border)}.ibiz-inline-ai-textarea-container__actions{position:absolute;width:240px;padding:var(--ibiz-spacing-base-tight) 0;font-size:var(--ibiz-font-size-regular);background-color:var(--ibiz-inline-ai-textarea-container-color-bg-0);border:1px solid var(--ibiz-inline-ai-textarea-container-color-border);border-radius:var(--ibiz-border-radius-small);box-shadow:0 0 16px var(--ibiz-color-shadow)}.ibiz-inline-ai-textarea-container__actions--action{display:flex;gap:var(--ibiz-spacing-tight);align-items:center;padding:var(--ibiz-spacing-tight) var(--ibiz-spacing-base-loose);cursor:pointer}.ibiz-inline-ai-textarea-container__actions--action:hover{background-color:var(--ibiz-inline-ai-textarea-container-color-bg-hover-2)}.ibiz-inline-ai-textarea-container__actions--action.is-danger:hover{color:var(--ibiz-color-danger)}.ibiz-inline-ai-textarea-container__actions--divider{margin:var(--ibiz-spacing-extra-tight) var(--ibiz-spacing-base-loose);border-top:1px solid var(--ibiz-inline-ai-textarea-container-color-border)}.ibiz-inline-ai-textarea-container__error{flex-grow:1;color:var(--ibiz-color-danger)}.ibiz-inline-ai-textarea-container__think{flex-shrink:0;margin-bottom:var(--ibiz-spacing-tight)}.ibiz-inline-ai-textarea-container__tool-call{flex-shrink:0;margin-bottom:var(--ibiz-spacing-tight)}.ibiz-inline-ai-textarea-container__loading{position:absolute;top:0;left:0;display:flex;gap:8px;align-items:center;width:100%;height:100%;overflow:hidden}@keyframes bounce{0%,100%,80%{transform:scale(0)}40%{transform:scale(1)}}.ibiz-inline-ai-textarea-container__loading--dot{width:12px;height:12px;background:var(--ibiz-inline-ai-textarea-container-color-loading);border-radius:50%;animation:bounce 1.5s infinite ease-in-out}.ibiz-inline-ai-textarea-container__loading--dot:nth-child(2){animation-delay:.2s}.ibiz-inline-ai-textarea-container__loading--dot:nth-child(3){animation-delay:.4s}
@@ -60,6 +60,7 @@ const useAI = (props, opts) => {
60
60
  const { context, data, deACMode } = props;
61
61
  const { srfaiappendcurdata, srfmode, srfaiagent } = opts;
62
62
  const params = { srfactag: deACMode.codeName };
63
+ const sessionid = ibiz.aiChatUtil.getChatSessionId("INLINE");
63
64
  const app = ibiz.hub.getApp(deACMode.appId);
64
65
  let history = [];
65
66
  let appDataEntity;
@@ -77,7 +78,9 @@ const useAI = (props, opts) => {
77
78
  deACMode.appId
78
79
  );
79
80
  const path = calcAIPath(true);
80
- const body = {};
81
+ const body = {
82
+ sessionid
83
+ };
81
84
  if (srfaiappendcurdata)
82
85
  Object.assign(body, data);
83
86
  if (srfmode)
@@ -114,6 +117,7 @@ const useAI = (props, opts) => {
114
117
  };
115
118
  const prepareData = (question, isAsync = false) => {
116
119
  const body = {
120
+ sessionid,
117
121
  messages: [
118
122
  ...history,
119
123
  {
@@ -134,17 +138,40 @@ const useAI = (props, opts) => {
134
138
  const parseContent = (text) => {
135
139
  let think;
136
140
  let content;
141
+ const toolcalls = [];
137
142
  if (!text)
138
- return { think, content };
143
+ return { think, content, toolcalls };
139
144
  const openThinkIndex = text.indexOf("<think>");
140
145
  const closeThinkIndex = text.indexOf("</think>");
141
146
  if (openThinkIndex !== -1) {
142
147
  think = closeThinkIndex === -1 ? text.slice(openThinkIndex + 7) : text.slice(openThinkIndex + 7, closeThinkIndex);
143
148
  content = closeThinkIndex === -1 ? void 0 : text.slice(closeThinkIndex + 8);
144
149
  } else {
145
- content = text;
150
+ const toolCallRegex = new RegExp(
151
+ "<tool_call>\\s*({[\\s\\S]*?})\\s*</tool_call>",
152
+ "g"
153
+ );
154
+ const matches = text.matchAll(toolCallRegex);
155
+ for (const match of matches) {
156
+ try {
157
+ const toolCallData = JSON.parse(match[1]);
158
+ const tempToolCall = {
159
+ name: toolCallData.name,
160
+ parameters: toolCallData.parameters,
161
+ error: toolCallData.error || false
162
+ };
163
+ if (toolCallData.result)
164
+ Object.assign(tempToolCall, {
165
+ result: toolCallData.result
166
+ });
167
+ toolcalls.push(tempToolCall);
168
+ } catch (e) {
169
+ console.error("\u89E3\u6790\u5DE5\u5177\u8C03\u7528\u5931\u8D25:", e);
170
+ }
171
+ }
172
+ content = text.replace(new RegExp("\\<tool_call\\>[^]*?\\<\\/tool_call\\>", "gs"), "").trim();
146
173
  }
147
- return { think, content };
174
+ return { think, content, toolcalls };
148
175
  };
149
176
  const asyncAskAI = (question, callBack, errorBack) => {
150
177
  return new Promise((resolve) => {
@@ -278,6 +305,9 @@ const useBase = (props, element, message) => {
278
305
  textareaRef.value.style.height = "auto";
279
306
  textareaRef.value.style.height = "".concat(textareaRef.value.scrollHeight, "px");
280
307
  });
308
+ },
309
+ {
310
+ immediate: true
281
311
  }
282
312
  );
283
313
  const updatePosition = () => {
@@ -0,0 +1,3 @@
1
+ 'use strict';
2
+
3
+ "use strict";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ibiz-template/vue3-components",
3
- "version": "0.7.41-alpha.42",
3
+ "version": "0.7.41-alpha.44",
4
4
  "description": "web端组件库(vue3)",
5
5
  "main": "lib/index.cjs",
6
6
  "module": "es/index.mjs",
@@ -30,18 +30,18 @@
30
30
  "dependencies": {
31
31
  "@amap/amap-jsapi-loader": "^1.0.1",
32
32
  "@floating-ui/dom": "^1.5.3",
33
- "@ibiz-template-plugin/ai-chat": "^0.0.35",
33
+ "@ibiz-template-plugin/ai-chat": "^0.0.37",
34
34
  "@ibiz-template-plugin/gantt": "0.1.8-alpha.316",
35
35
  "@ibiz-template-plugin/bi-report": "0.0.30",
36
36
  "@ibiz-template-plugin/data-view": "0.0.6",
37
37
  "@ibiz-template/core": "0.7.41-alpha.35",
38
38
  "@ibiz-template/devtool": "0.0.13",
39
- "@ibiz-template/model-helper": "0.7.41-alpha.41",
40
- "@ibiz-template/runtime": "0.7.41-alpha.41",
39
+ "@ibiz-template/model-helper": "0.7.41-alpha.43",
40
+ "@ibiz-template/runtime": "0.7.41-alpha.43",
41
41
  "@ibiz-template/theme": "0.7.39",
42
- "@ibiz-template/vue3-util": "0.7.41-alpha.41",
42
+ "@ibiz-template/vue3-util": "0.7.41-alpha.43",
43
43
  "@ibiz-template/web-theme": "3.9.0",
44
- "@ibiz/model-core": "^0.1.83",
44
+ "@ibiz/model-core": "^0.1.84",
45
45
  "@imengyu/vue3-context-menu": "^1.3.5",
46
46
  "@monaco-editor/loader": "^1.4.0",
47
47
  "@wangeditor/editor": "^5.1.23",
@@ -108,7 +108,7 @@
108
108
  "@ibiz-template/runtime": "^0.7.0",
109
109
  "@ibiz-template/theme": "^0.7.0",
110
110
  "@ibiz-template/vue3-util": "^0.7.0",
111
- "@ibiz/model-core": "^0.1.83",
111
+ "@ibiz/model-core": "^0.1.84",
112
112
  "@imengyu/vue3-context-menu": "^1.3.3",
113
113
  "@monaco-editor/loader": "^1.3.3",
114
114
  "@wangeditor/editor": "^5.1.23",
@@ -1 +0,0 @@
1
- System.register(["vue","@ibiz-template/vue3-util","qx-util","cherry-markdown","@ibiz-template/core","@ibiz-template/runtime"],function(e){"use strict";var t,n,a,i,o,l,r,s,c,d,u,m,h,p,v,f,b,g;return{setters:[function(e){t=e.nextTick,n=e.ref,a=e.onBeforeUnmount,i=e.createVNode,o=e.resolveComponent,l=e.defineComponent,r=e.watch,s=e.onMounted,c=e.onUnmounted},function(e){d=e.useUIStore,u=e.getEditorEmits,m=e.getMarkDownProps,h=e.useNamespace},function(e){p=e.createUUID},function(e){v=e.default},function(e){f=e.IBizContext},function(e){b=e.UIActionUtil,g=e.SysUIActionTag}],execute:function(){function w(e,t){return!(!e||1!==e.nodeType||e.nodeName!==t)}function y(e){const l=n(""),r=n([]),s=n();let c=null;const d=async e=>{var n;if(l.value=e,r.value=[e],await t(),s.value){const{container:e}=s.value.$refs;e&&(null==(n=e.children[0])||n.click())}},u=e=>{"Escape"!==e.key&&27!==e.keyCode||(e.stopPropagation(),e.preventDefault(),r.value=[],h())},m=async()=>{var e;await t();const n=null==(e=s.value)?void 0:e.$refs.container;if(!n)return;const a=n.querySelector(".el-image-viewer__wrapper");null==a||a.addEventListener("keydown",u)},h=()=>{var e;const t=null==(e=s.value)?void 0:e.$refs.container;if(!t)return;const n=t.querySelector(".el-image-viewer__wrapper");null==n||n.removeEventListener("keydown",u)},p=e=>{const t=null==e?void 0:e.target;if(w(t,"IMG")&&t)return void d(t.src);const n=function(e){let t=e;for(;t;){if(t.classList.contains("cherry-previewer"))return null;const e=t.parentElement;if(w(t,"svg")&&e&&"mermaid"===e.dataset.type)return t;t=t.parentElement}return null}(t);n&&d(function(e){const t=e.cloneNode(!0),n=e.width.baseVal.value||e.clientWidth,a=e.height.baseVal.value||e.clientHeight;t.setAttribute("width",n),t.setAttribute("height",a),t.style.backgroundColor="white";const i=(new XMLSerializer).serializeToString(t),o=btoa(unescape(encodeURIComponent(i)));return"data:image/svg+xml;base64,".concat(o)}(n))};return a(()=>{c&&(c.removeEventListener("click",p),c=null),h()}),{renderImgPreview:()=>i(o("el-image"),{class:e.e("img-preview"),ref:s,"zoom-rate":1.1,src:l.value,"preview-src-list":r.value,"hide-on-click-modal":!0,onShow:m,fit:"cover"},null),onMDEditorCreated:e=>{var t,n;c=(null==(n=null==(t=null==e?void 0:e.previewer)?void 0:t.previewerBubble)?void 0:n.previewerDom)||null,null==c||c.addEventListener("click",p)}}}e("default",l({name:"IBizMarkDown",props:m(),emits:u(),setup(e,{emit:o,slots:l}){var u,m,w;const C=h("markdown"),I=e.controller,k=n("");let A=null;const z=p(),{onMDEditorCreated:E,renderImgPreview:M}=y(C),T=ibiz.util.file.getUploadHeaders(),x=n({...T}),S=n(""),U=(null==(u=null==I?void 0:I.editorParams)?void 0:u.customTheme)||(null==(m=null==I?void 0:I.editorParams)?void 0:m.customtheme),{UIStore:D}=d(),P=n(U||D.theme),R=n(!1);let O="default";I&&(null==(w=I.editorParams)?void 0:w.showmode)&&(O=I.editorParams.showmode);const L=n(!1),B=n("editOnly");let N=null,V=null,H=0;const F=n({}),q=n({}),j=n("pure");let $=!1;const[_,J]=function(e,n){const{props:a,isEditing:i,currentVal:o,emit:l}=n;let r=n.chatInstance;return[v.createMenuHook("AI",{icon:{type:"svg",content:"<svg\n viewBox='0 0 16 16'\n xmlns='http://www.w3.org/2000/svg'\n fill='currentColor'\n height='1em'\n width='1em'\n preserveAspectRatio='xMidYMid meet'\n focusable='false'\n >\n <g\n id='aae1.Base基础/1.icon图标/2.normal/ai-star'\n stroke-width='1'\n fill-rule='evenodd'\n >\n <path\n d='M5.817 1.53l3.158 8.797h.054v.152l1.443 4.021-1.402.001-1.041-2.982H2.495l-1.03 2.982L0 14.5 4.671 1.533l1.146-.003zm7.86 5.424V14.5h-1.213V6.954h1.212zM5.248 3.549l-2.342 6.778h4.706L5.249 3.55zM13.046 0c.075 0 .147.02.204.071a.318.318 0 01.094.181l.064.273c.097.417.17.727.255.968.084.24.177.4.31.523.134.124.318.218.599.306.281.088.65.166 1.15.265a.358.358 0 01.195.095c.056.057.083.13.083.213a.289.289 0 01-.083.21.362.362 0 01-.197.094c-.528.093-.918.167-1.214.255-.295.088-.485.187-.621.324-.137.138-.23.324-.31.606-.08.283-.145.651-.23 1.147a.329.329 0 01-.093.184.293.293 0 01-.206.075.308.308 0 01-.207-.072.322.322 0 01-.1-.188l-.006-.033c-.085-.486-.149-.845-.228-1.12-.079-.274-.17-.452-.305-.585-.135-.133-.323-.23-.618-.32s-.683-.168-1.21-.273a.353.353 0 01-.2-.096.29.29 0 01-.08-.208c0-.079.023-.153.079-.211a.35.35 0 01.2-.097c.5-.098.869-.176 1.15-.263.282-.087.465-.18.597-.302.132-.12.224-.278.306-.511.082-.236.151-.539.244-.947l.071-.312a.312.312 0 01.102-.183.311.311 0 01.205-.069z'\n id='aae形状结合'\n ></path>\n </g>\n </svg>\n "},onClick:(n,a,i)=>{i.stopPropagation(),i.preventDefault(),t(()=>{var t;if(null==(t=e.mdeditor)?void 0:t.bubble){e.mdeditor.bubble.showBubble();const t=e.mdeditor.bubble.bubbleDom.getBoundingClientRect();if(!t||!t.left||!t.top)return;const n=ibiz.inLineAIUtil.calcContextMenus(e.deACMode,t=>{e.doInLineAIUIAction(t,e.model.appId)});if(0===n.length)return;const{zIndex:a}=d(),i=a.increment();ibiz.inLineAIUtil.showContextMenus(t.left,t.top+43,n,{zIndex:i,onClose:()=>{a.decrement()}})}})}}),v.createMenuHook("AIChart",{icon:{type:"svg",content:"<svg\n viewBox='0 0 16 16'\n xmlns='http://www.w3.org/2000/svg'\n fill='currentColor'\n height='1em'\n width='1em'\n preserveAspectRatio='xMidYMid meet'\n focusable='false'\n >\n <g\n id='aae1.Base基础/1.icon图标/2.normal/ai-star'\n stroke-width='1'\n fill-rule='evenodd'\n >\n <path\n d='M5.817 1.53l3.158 8.797h.054v.152l1.443 4.021-1.402.001-1.041-2.982H2.495l-1.03 2.982L0 14.5 4.671 1.533l1.146-.003zm7.86 5.424V14.5h-1.213V6.954h1.212zM5.248 3.549l-2.342 6.778h4.706L5.249 3.55zM13.046 0c.075 0 .147.02.204.071a.318.318 0 01.094.181l.064.273c.097.417.17.727.255.968.084.24.177.4.31.523.134.124.318.218.599.306.281.088.65.166 1.15.265a.358.358 0 01.195.095c.056.057.083.13.083.213a.289.289 0 01-.083.21.362.362 0 01-.197.094c-.528.093-.918.167-1.214.255-.295.088-.485.187-.621.324-.137.138-.23.324-.31.606-.08.283-.145.651-.23 1.147a.329.329 0 01-.093.184.293.293 0 01-.206.075.308.308 0 01-.207-.072.322.322 0 01-.1-.188l-.006-.033c-.085-.486-.149-.845-.228-1.12-.079-.274-.17-.452-.305-.585-.135-.133-.323-.23-.618-.32s-.683-.168-1.21-.273a.353.353 0 01-.2-.096.29.29 0 01-.08-.208c0-.079.023-.153.079-.211a.35.35 0 01.2-.097c.5-.098.869-.176 1.15-.263.282-.087.465-.18.597-.302.132-.12.224-.278.306-.511.082-.236.151-.539.244-.947l.071-.312a.312.312 0 01.102-.183.311.311 0 01.205-.069z'\n id='aae形状结合'\n ></path>\n </g>\n </svg>\n "},onClick:async()=>{const t=e.model.appDataEntityId;if(!t||!e.deACMode)return;const n=await ibiz.aiChatUtil.getAIAgentList(e.context,e.params,e.editorParams),{contentToolbarItems:s,footerToolbarItems:c,questionToolbarItems:u,otherToolbarItems:m}=ibiz.aiChatUtil.calcAiToolbarItemsByAc(e.deACMode),{containerOptions:h,chatOptions:v}=ibiz.aiChatUtil.getEditorExAIChatParams(e.editorParams,e.context,e.params,a.data),{zIndex:w}=d(),y=w.increment();r=await ibiz.aiChatUtil.getAIChat();let C,I="";r.create({containerOptions:{zIndex:y,...h},chatOptions:{caption:e.deACMode.logicName,context:{...e.context},params:{...e.params,srfactag:e.deACMode.codeName},appDataEntityId:t,contentToolbarItems:s,footerToolbarItems:c,questionToolbarItems:u,otherToolbarItems:m,aiAgentlist:n,...v,question:async(e,t,n,a,i,o,l,r)=>{I=p(),C=new AbortController;const s=await ibiz.hub.getApp(t.srfappid).deService.getService(t,a.appDataEntityId);try{const a={messages:i,sessionid:o};l&&(a.srfaiagent=l),r&&(a.mode=r),await s.aiChatSse(t=>{if(20===t.actionstate&&t.actionresult)e.addMessage({messageid:I,state:t.actionstate,type:"DEFAULT",role:"ASSISTANT",content:t.actionresult});else if(30===t.actionstate&&t.actionresult){const n=JSON.parse(t.actionresult).choices;n&&n.length>0&&e.replaceMessage({messageid:I,state:t.actionstate,type:"DEFAULT",role:"ASSISTANT",content:n[0].content||""})}else 40===t.actionstate&&e.replaceMessage({messageid:I,state:t.actionstate,type:"ERROR",role:"ASSISTANT",content:t.actionresult})},C,t,n,{...a})}catch(t){e.replaceMessage({messageid:I,state:40,type:"ERROR",role:"ASSISTANT",content:t.message||ibiz.i18n.t("app.aiError")}),null==C||C.abort()}finally{return e.completeMessage(I,!0),!0}},abortQuestion:async e=>{null==C||C.abort(),await e.stopMessage({messageid:I,state:30,type:"DEFAULT",role:"ASSISTANT",content:""}),await e.completeMessage(I,!0)},action:(e,t)=>{"backfill"===e&&(i.value?o.value=t.realcontent||"":l("change",t.realcontent))},history:async(e,t,n)=>{const a=await ibiz.hub.getApp(e.srfappid).deService.getService(e,n.appDataEntityId),i={};n.appendCurData&&Object.assign(i,{...n.appendCurData}),n.srfaiagent&&Object.assign(i,{srfaiagent:n.srfaiagent}),n.srfmode&&Object.assign(i,{mode:n.srfmode});const o=await a.aiChatHistory(e,t,i);if(o.data&&Array.isArray(o.data)){let e;o.data.forEach(t=>{if("TOOL"===t.role)e&&t.content&&r.aiChat.updateRecommendPrompt(e,t.content);else{const n={messageid:p(),state:30,type:"DEFAULT",role:t.role,content:t.content,completed:!0};e=n,r.aiChat.addMessage(n)}})}return!0},recommendPrompt:async(e,t,n)=>{const a=await ibiz.hub.getApp(e.srfappid).deService.getService(e,n.appDataEntityId),i=await a.aiChatRecommendPrompt(e,t,n.message);if(i.ok&&i.data){const e=i.data.choices;return e&&e.length>0?e[0]:null}return null},uploader:{onUpload:async(t,n,a)=>{const i=ibiz.util.file.calcFileUpDownUrl((null==a?void 0:a.context)||e.context,(null==a?void 0:a.params)||e.params,{}),o=ibiz.util.file.getUploadHeaders(),l=new FormData;return l.append("file",t),(await ibiz.net.axios({url:i.uploadUrl,method:"post",headers:o,data:l,onUploadProgress:e=>{const t=e.loaded/e.total*100;n(t)}})).data}},extendToolbarClick:async(t,n,a,i,o)=>{var l,r;const s=await b.exec(n.id,{view:e.view,ctrl:e.ctrl,context:f.create(a),params:i,data:[o],event:t},n.appId);if(s.closeView)e.view.closeView({ok:!0});else if(s.refresh)switch(s.refreshMode){case 1:e.view.callUIAction(g.REFRESH);break;case 2:null==(l=e.view.parentView)||l.callUIAction(g.REFRESH);break;case 3:null==(r=e.view.getTopView())||r.callUIAction(g.REFRESH)}return s}}})}})]}(I,{props:e,chatInstance:undefined,isEditing:R,currentVal:k,emit:o});r(()=>e.data,e=>{if(e&&I){const t={...I.editorParams};t.uploadparams&&(t.uploadParams=JSON.parse(t.uploadparams));const n=ibiz.util.file.calcFileUpDownUrl(I.context,I.params,e,t);S.value=n.uploadUrl}},{immediate:!0,deep:!0});const W=n(),Y=async(t,n)=>{const a=await ibiz.util.file.fileUpload(S.value,t,x.value),i=((e,t)=>{if(!I)return"";const n={...I.editorParams};return n.exportparams&&(n.exportParams=JSON.parse(n.exportparams)),t&&t.folder&&(n.osscat=t.folder),ibiz.util.file.calcFileUpDownUrl(I.context,I.params,e,n).downloadUrl})(e.data||{},a.fileid);let o=i.replace("%fileId%",a.fileid);if(ibiz.config.common.enableDownloadTicket&&I){const t=await ibiz.util.file.getDownloadTicket(I.context,I.params,e.data||{},{fileId:a.fileid},I.downloadTicketParams);t&&t.ticket&&(o=i.replace("%fileId%",t.ticket),n(o))}else n(o)},G=()=>null==A?void 0:A.getMarkdown(),Q=e=>{$=!0,null==A||A.setMarkdown(e,!0)};r(()=>e.value,(e,t)=>{e!==t&&(k.value=e||"")},{immediate:!0}),r(k,(e,t)=>{const n=G();e!==t&&n!==e&&Q(e)});const X=e=>{"manual"!==O&&(o("change",G(),null==I?void 0:I.model.id,$),$=!1)},K=(e,t)=>({[e]:t}),Z=(e,t="")=>{const n=document.createElement(e);return n.className=t,n},ee=e=>Z("i","ch-icon ch-icon-".concat(e)),te=C.e("fullscreen"),ne=e=>{for(;e.firstChild;)e.removeChild(e.firstChild)},ae=()=>{if(A&&W.value){const e=A.editor.options.editorDom.parentElement;if(!e)return{};const t=e.classList,n=W.value.querySelector(".".concat(te));return n?{parentElement:e,cherryClass:t,fullscreenNode:n}:{}}return{}},ie=()=>{const{parentElement:e,cherryClass:t,fullscreenNode:n}=ae();e&&t&&n&&(ne(n),n.appendChild(ee("fullscreen")),n.title=ibiz.i18n.t("editor.common.fullscreen"),t.remove("fullscreen"),null==e||e.blur(),e.setAttribute("tabindex","-1"))},oe=()=>{const{cherryClass:e}=ae();return null==e?void 0:e.contains("fullscreen")},le=()=>{A&&W.value&&(oe()?(ie(),A.toggleToc(j.value),L.value=!1):((()=>{const{parentElement:e,cherryClass:n,fullscreenNode:a}=ae();e&&n&&a&&(ne(a),a.appendChild(ee("minscreen")),n.add("fullscreen"),a.title=ibiz.i18n.t("editor.common.minimize"),e.setAttribute("tabindex","-1"),t(()=>null==e?void 0:e.focus()))})(),j.value=A.toc.model,A.toggleToc("full"),L.value=!0))},re=e=>{e.stopPropagation(),"Escape"===e.key&&(e.preventDefault(),oe()&&(ie(),A.toggleToc(j.value),L.value=!1))},se=e=>{null==I||I.setCurrentEditorTheme(e)},ce=e=>{var t,n;const{info:a}=e;let i=!0;const o=a.ranges&&a.ranges[0];if(o){const{anchor:e,head:t}=o;i=I.isPositionBefore(e,t)}else i=!0;const l=null==(t=I.mdeditor)?void 0:t.editor.editor.getCursor("start"),r=null==(n=I.mdeditor)?void 0:n.editor.editor.getCursor("end");I.setCursorPos(l,r),I.setSelectionDirection(i)};r(()=>D.theme,e=>{P.value=U||e,null==A||A.setTheme(P.value),null==A||A.setCodeBlockTheme(P.value)});const de=()=>{R.value=!0,B.value="editOnly",null==A||A.switchModel(B.value)},ue=()=>{R.value=!1,B.value="previewOnly",null==A||A.switchModel(B.value)},me=()=>{Q(k.value),ue()},he=()=>{o("change",G(),null==I?void 0:I.model.id,$),$=!1,ue()},pe=()=>{const e=document.getElementById(z);null==e||e.focus()};return s(()=>{var n;(e.disabled||e.readonly||"manual"===O)&&(B.value="previewOnly"),t(()=>{var t;const n=["bold","italic","underline","strikethrough","sub","sup","|","size","color"],a=["bold","italic","underline","strikethrough","|","color","header","|","list","image",{insert:["link","hr","br","code","formula","toc","table","line-table","bar-table"]},"settings","togglePreview"];I&&I.chatCompletion&&(a.unshift("AIChart"),n.unshift("AI")),A=new v({id:z,value:k.value,previewer:{enablePreviewerBubble:!(e.disabled||e.readonly)},themeSettings:{mainTheme:P.value,codeBlockTheme:P.value},fileUpload:Y,emoji:{useUnicode:!0},header:{anchorStyle:"autonumber"},editor:{height:"100%",defaultModel:B.value,codemirror:{autofocus:!1}},toolbars:{toolbar:a,bubble:n,float:["h1","h2","h3","|","checklist","quote","quickTable","code"],customMenu:{AI:_,AIChart:J},sidebar:["theme","copy"],toolbarRight:[],toc:{updateLocationHash:!1,defaultModel:"pure",showAutoNumber:!0,position:"absolute",cssText:""}},callback:{afterChange:X,beforeImageMounted:K},event:{changeMainTheme:se,selectionChange:ce},engine:{syntax:{table:{enableChart:!1,externals:["echarts"]}}}}),A.toggleToc("pure"),A.setTheme(P.value),U&&(A.setTheme(U),A.setCodeBlockTheme(U));const i=Z("span","".concat(te," cherry-toolbar-button"));i.title=ibiz.i18n.t("editor.common.fullscreen"),i.onclick=le,i.appendChild(ee("fullscreen"));const o=e.disabled?A.editor.options.editorDom.parentElement:null==(t=A.editor.options.editorDom.parentElement)?void 0:t.querySelector(".cherry-toolbar>.toolbar-right");if(null==o||o.appendChild(i),null==I||I.setMDEditor(A),E(A),l.editorSwitchMenu&&window.ResizeObserver&&W.value){const e=W.value.querySelector(".cherry-toolbar");e&&(V=new ResizeObserver(e=>{var t;const n=null==(t=e[0])?void 0:t.contentRect.height;q.value=C.cssVarBlock({"toolbar-height":"".concat(n,"px")})}),V.observe(e))}}),(()=>{if(window.ResizeObserver&&W.value){const e={width:W.value.offsetWidth?"".concat(W.value.offsetWidth,"px"):"100%"};I&&"number"==typeof I.parent.model.height&&Object.assign(e,{height:"".concat(I.parent.model.height,"px")}),F.value=C.cssVarBlock(e),N=new ResizeObserver(e=>{const t=e[0].contentRect.width;if(t!==H){const n={width:"".concat(e[0].contentRect.width,"px")};I&&"number"==typeof I.parent.model.height&&Object.assign(n,{height:"".concat(I.parent.model.height,"px")}),F.value=C.cssVarBlock(n),H=t}}),N.observe(W.value)}})(),null==(n=W.value)||n.addEventListener("keydown",re.bind(this))}),a(()=>{var e;null==(e=W.value)||e.removeEventListener("keydown",re.bind(this))}),c(()=>{A=null,N&&N.disconnect(),V&&V.disconnect()}),{ns:C,currentVal:k,id:z,editor:A,markDownBox:W,headers:x,theme:P,defaultModel:B,cssVars:F,isEditing:R,showmode:O,getCherryHtml:()=>null==A?void 0:A.getHtml(),getCherryContent:G,setCherryContent:Q,renderHeader:()=>{if("manual"===O&&!R.value)return i("div",{onClick:pe,class:[C.e("header"),C.is("fullscreen",L.value)]},[!e.disabled&&!e.readonly&&i("div",{class:C.em("header","edit"),onClick:de,title:ibiz.i18n.t("editor.markdown.edit")},[i("i",{class:"fa fa-edit","aria-hidden":"true"},null)]),i("div",{class:C.em("header","full"),onClick:le},[L.value?i("i",{class:"fa fa-compress","aria-hidden":"true",title:ibiz.i18n.t("editor.html.reduce")},null):i("i",{class:"fa fa-expand","aria-hidden":"true",title:ibiz.i18n.t("editor.common.fullscreen")},null)])])},renderFooter:()=>{if("manual"===O&&R.value&&!e.disabled&&!e.readonly)return i("div",{onClick:pe,class:[C.e("footer"),C.is("fullscreen",L.value)]},[i("div",{class:C.em("footer","cancel"),onClick:me},[ibiz.i18n.t("editor.common.cancel")]),i("div",{class:C.em("footer","save"),onClick:he},[ibiz.i18n.t("editor.common.confirm")])])},renderImgPreview:M,renderEditorSwitchMenu:()=>{var e;return i("div",{class:[C.b("menu"),C.is("fullscreen",L.value)],style:q.value},[null==(e=l.editorSwitchMenu)?void 0:e.call(l)])}}},render(){const e=!!this.$slots.editorSwitchMenu;return i("div",{ref:"markDownBox",class:[this.ns.b(),this.ns.is("disabled",this.disabled),this.ns.is("manual","manual"===this.showmode),this.ns.is("editing",this.isEditing),this.ns.is("show-editor-switch-menu",e)]},[e?this.renderEditorSwitchMenu():null,this.renderHeader(),this.renderFooter(),this.renderImgPreview(),i("div",{tabindex:"-1",id:this.id,style:this.cssVars,class:[this.ns.b("cherry"),this.ns.m("dark"===this.theme?"dark":"light")]},null)])}}))}}});