@ibiz-template/vue3-components 0.7.41-alpha.43 → 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 (74) hide show
  1. package/dist/ibiz-markdown-editor-CUzKkFER.js +1 -0
  2. package/dist/{index-CG3sQH0b.js → index-DgqTP4Vw.js} +1 -1
  3. package/dist/{index-kZrZndeH.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-8YSXhmdI.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/editor/carousel/ibiz-carousel/ibiz-carousel.mjs +5 -2
  12. package/es/editor/code/monaco-editor/monaco-editor.mjs +2 -0
  13. package/es/editor/html/wang-editor/wang-editor.mjs +15 -6
  14. package/es/editor/markdown/ibiz-markdown-editor/custom-menu.mjs +5 -0
  15. package/es/editor/markdown/ibiz-markdown-editor/ibiz-markdown-editor.css +1 -1
  16. package/es/editor/markdown/ibiz-markdown-editor/ibiz-markdown-editor.mjs +23 -12
  17. package/es/editor/text-box/input/input.mjs +2 -0
  18. package/es/editor/text-box/signature/signature.mjs +28 -15
  19. package/es/editor/upload/upload-editor.controller.mjs +12 -1
  20. package/es/editor/upload/use/use-iview-upload.mjs +28 -13
  21. package/es/locale/en/index.mjs +5 -1
  22. package/es/locale/zh-CN/index.mjs +5 -1
  23. package/es/panel-component/coop-pos/coop-pos.controller.mjs +11 -1
  24. package/es/panel-component/panel-app-title/panel-app-title.controller.mjs +3 -1
  25. package/es/panel-component/panel-app-title/panel-app-title.mjs +4 -2
  26. package/es/util/ai-chat-util/ai-chat-util.mjs +70 -35
  27. package/es/util/app-util/app-util.mjs +2 -1
  28. package/es/util/inline-ai-util/inline-ai-textarea/common/ai-think/ai-think.css +1 -0
  29. package/es/util/inline-ai-util/inline-ai-textarea/common/ai-think/ai-think.mjs +56 -0
  30. package/es/util/inline-ai-util/inline-ai-textarea/common/ai-tool-call/ai-tool-call.css +1 -0
  31. package/es/util/inline-ai-util/inline-ai-textarea/common/ai-tool-call/ai-tool-call.mjs +52 -0
  32. package/es/util/inline-ai-util/inline-ai-textarea/common/ai-tool-call-item/ai-tool-call-item.css +1 -0
  33. package/es/util/inline-ai-util/inline-ai-textarea/common/ai-tool-call-item/ai-tool-call-item.mjs +143 -0
  34. package/es/util/inline-ai-util/inline-ai-textarea/common/index.mjs +4 -0
  35. package/es/util/inline-ai-util/inline-ai-textarea/icon.mjs +52 -1
  36. package/es/util/inline-ai-util/inline-ai-textarea/inline-ai-textarea.css +1 -1
  37. package/es/util/inline-ai-util/inline-ai-textarea/inline-ai-textarea.hook.mjs +29 -3
  38. package/es/util/inline-ai-util/inline-ai-textarea/inline-ai-textarea.mjs +32 -25
  39. package/es/util/inline-ai-util/inline-ai-textarea/interface.mjs +1 -0
  40. package/lib/control/grid/grid-column/grid-field-column/attachment-column/attachment-column.cjs +2 -1
  41. package/lib/control/grid/grid-column/grid-field-column/attachment-column/file-util.cjs +22 -11
  42. package/lib/editor/carousel/ibiz-carousel/ibiz-carousel.cjs +5 -2
  43. package/lib/editor/code/monaco-editor/monaco-editor.cjs +2 -0
  44. package/lib/editor/html/wang-editor/wang-editor.cjs +15 -6
  45. package/lib/editor/markdown/ibiz-markdown-editor/custom-menu.cjs +5 -0
  46. package/lib/editor/markdown/ibiz-markdown-editor/ibiz-markdown-editor.cjs +23 -12
  47. package/lib/editor/markdown/ibiz-markdown-editor/ibiz-markdown-editor.css +1 -1
  48. package/lib/editor/text-box/input/input.cjs +2 -0
  49. package/lib/editor/text-box/signature/signature.cjs +28 -15
  50. package/lib/editor/upload/upload-editor.controller.cjs +12 -1
  51. package/lib/editor/upload/use/use-iview-upload.cjs +28 -13
  52. package/lib/locale/en/index.cjs +5 -1
  53. package/lib/locale/zh-CN/index.cjs +5 -1
  54. package/lib/panel-component/coop-pos/coop-pos.controller.cjs +11 -1
  55. package/lib/panel-component/panel-app-title/panel-app-title.cjs +4 -2
  56. package/lib/panel-component/panel-app-title/panel-app-title.controller.cjs +3 -1
  57. package/lib/util/ai-chat-util/ai-chat-util.cjs +70 -35
  58. package/lib/util/app-util/app-util.cjs +2 -1
  59. package/lib/util/inline-ai-util/inline-ai-textarea/common/ai-think/ai-think.cjs +58 -0
  60. package/lib/util/inline-ai-util/inline-ai-textarea/common/ai-think/ai-think.css +1 -0
  61. package/lib/util/inline-ai-util/inline-ai-textarea/common/ai-tool-call/ai-tool-call.cjs +54 -0
  62. package/lib/util/inline-ai-util/inline-ai-textarea/common/ai-tool-call/ai-tool-call.css +1 -0
  63. package/lib/util/inline-ai-util/inline-ai-textarea/common/ai-tool-call-item/ai-tool-call-item.cjs +145 -0
  64. package/lib/util/inline-ai-util/inline-ai-textarea/common/ai-tool-call-item/ai-tool-call-item.css +1 -0
  65. package/lib/util/inline-ai-util/inline-ai-textarea/common/index.cjs +9 -0
  66. package/lib/util/inline-ai-util/inline-ai-textarea/icon.cjs +54 -0
  67. package/lib/util/inline-ai-util/inline-ai-textarea/inline-ai-textarea.cjs +31 -24
  68. package/lib/util/inline-ai-util/inline-ai-textarea/inline-ai-textarea.css +1 -1
  69. package/lib/util/inline-ai-util/inline-ai-textarea/inline-ai-textarea.hook.cjs +29 -3
  70. package/lib/util/inline-ai-util/inline-ai-textarea/interface.cjs +3 -0
  71. package/package.json +5 -5
  72. package/dist/ibiz-markdown-editor-DJ662N4_.js +0 -1
  73. package/dist/index-D3x_MFr-.js +0 -11
  74. package/dist/wang-editor-DDSO3Ha9.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}
@@ -138,17 +138,40 @@ const useAI = (props, opts) => {
138
138
  const parseContent = (text) => {
139
139
  let think;
140
140
  let content;
141
+ const toolcalls = [];
141
142
  if (!text)
142
- return { think, content };
143
+ return { think, content, toolcalls };
143
144
  const openThinkIndex = text.indexOf("<think>");
144
145
  const closeThinkIndex = text.indexOf("</think>");
145
146
  if (openThinkIndex !== -1) {
146
147
  think = closeThinkIndex === -1 ? text.slice(openThinkIndex + 7) : text.slice(openThinkIndex + 7, closeThinkIndex);
147
148
  content = closeThinkIndex === -1 ? void 0 : text.slice(closeThinkIndex + 8);
148
149
  } else {
149
- 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();
150
173
  }
151
- return { think, content };
174
+ return { think, content, toolcalls };
152
175
  };
153
176
  const asyncAskAI = (question, callBack, errorBack) => {
154
177
  return new Promise((resolve) => {
@@ -282,6 +305,9 @@ const useBase = (props, element, message) => {
282
305
  textareaRef.value.style.height = "auto";
283
306
  textareaRef.value.style.height = "".concat(textareaRef.value.scrollHeight, "px");
284
307
  });
308
+ },
309
+ {
310
+ immediate: true
285
311
  }
286
312
  );
287
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.43",
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,16 +30,16 @@
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.36",
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.42",
40
- "@ibiz-template/runtime": "0.7.41-alpha.42",
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.42",
42
+ "@ibiz-template/vue3-util": "0.7.41-alpha.43",
43
43
  "@ibiz-template/web-theme": "3.9.0",
44
44
  "@ibiz/model-core": "^0.1.84",
45
45
  "@imengyu/vue3-context-menu": "^1.3.5",
@@ -1 +0,0 @@
1
- System.register(["vue","@ibiz-template/vue3-util","qx-util","cherry-markdown"],function(e){"use strict";var t,n,i,l,o,a,r,s,c,d,u,h,m,v,p;return{setters:[function(e){t=e.nextTick,n=e.ref,i=e.onBeforeUnmount,l=e.createVNode,o=e.resolveComponent,a=e.defineComponent,r=e.watch,s=e.onMounted,c=e.onUnmounted},function(e){d=e.useUIStore,u=e.getEditorEmits,h=e.getMarkDownProps,m=e.useNamespace},function(e){v=e.createUUID},function(e){p=e.default}],execute:function(){function f(e,t){return!(!e||1!==e.nodeType||e.nodeName!==t)}function b(e){const a=n(""),r=n([]),s=n();let c=null;const d=async e=>{var n;if(a.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=[],m())},h=async()=>{var e;await t();const n=null==(e=s.value)?void 0:e.$refs.container;if(!n)return;const i=n.querySelector(".el-image-viewer__wrapper");null==i||i.addEventListener("keydown",u)},m=()=>{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)},v=e=>{const t=null==e?void 0:e.target;if(f(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(f(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,i=e.height.baseVal.value||e.clientHeight;t.setAttribute("width",n),t.setAttribute("height",i),t.style.backgroundColor="white";const l=(new XMLSerializer).serializeToString(t),o=btoa(unescape(encodeURIComponent(l)));return"data:image/svg+xml;base64,".concat(o)}(n))};return i(()=>{c&&(c.removeEventListener("click",v),c=null),m()}),{renderImgPreview:()=>l(o("el-image"),{class:e.e("img-preview"),ref:s,"zoom-rate":1.1,src:a.value,"preview-src-list":r.value,"hide-on-click-modal":!0,onShow:h,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",v)}}}e("default",a({name:"IBizMarkDown",props:h(),emits:u(),setup(e,{emit:o,slots:a}){var u,h,f;const g=m("markdown"),w=e.controller,C=n("");let k=null;const y=v(),{onMDEditorCreated:M,renderImgPreview:z}=b(g),x=ibiz.util.file.getUploadHeaders(),I=n({...x}),E=n(""),A=(null==(u=null==w?void 0:w.editorParams)?void 0:u.customTheme)||(null==(h=null==w?void 0:w.editorParams)?void 0:h.customtheme),{UIStore:D}=d(),P=n(A||D.theme),T=n(!1);let U="default";w&&(null==(f=w.editorParams)?void 0:f.showmode)&&(U=w.editorParams.showmode);const S=n(!1),B=n("editOnly");let L=null,O=null,V=0;const N=n({}),R=n({}),H=n("pure");let q=!1;const[F,$]=function(e,n){const{props:i,isEditing:l,currentVal:o,emit:a}=n;let r=n.chatInstance;return[p.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,i,l)=>{l.stopPropagation(),l.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:i}=d(),l=i.increment();ibiz.inLineAIUtil.showContextMenus(t.left,t.top+43,n,{zIndex:l,onClose:()=>{i.decrement()}})}})}}),p.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{zIndex:n}=d(),s=n.increment();r=await ibiz.aiChatUtil.getAIChat();const{containerOptions:c,chatOptions:u}=await ibiz.aiChatUtil.getEditorExAIChatParams(e.editorParams,e.context,e.params,i.data,e.deACMode,{chatInstance:r,view:e.view,ctrl:e.ctrl});r.create({containerOptions:{zIndex:s,...c},chatOptions:{caption:e.deACMode.logicName,context:{...e.context},params:{...e.params,srfactag:e.deACMode.codeName},appDataEntityId:t,...u,action:(e,t)=>{"backfill"===e&&(l.value?o.value=t.realcontent||"":a("change",t.realcontent))}}})}})]}(w,{props:e,chatInstance:undefined,isEditing:T,currentVal:C,emit:o});r(()=>e.data,e=>{if(e&&w){const t={...w.editorParams};t.uploadparams&&(t.uploadParams=JSON.parse(t.uploadparams));const n=ibiz.util.file.calcFileUpDownUrl(w.context,w.params,e,t);E.value=n.uploadUrl}},{immediate:!0,deep:!0});const _=n(),j=async(t,n)=>{const i=await ibiz.util.file.fileUpload(E.value,t,I.value),l=((e,t)=>{if(!w)return"";const n={...w.editorParams};return n.exportparams&&(n.exportParams=JSON.parse(n.exportparams)),t&&t.folder&&(n.osscat=t.folder),ibiz.util.file.calcFileUpDownUrl(w.context,w.params,e,n).downloadUrl})(e.data||{},i.fileid);let o=l.replace("%fileId%",i.fileid);if(ibiz.config.common.enableDownloadTicket&&w){const t=await ibiz.util.file.getDownloadTicket(w.context,w.params,e.data||{},{fileId:i.fileid},w.downloadTicketParams);t&&t.ticket&&(o=l.replace("%fileId%",t.ticket),n(o))}else n(o)},W=()=>null==k?void 0:k.getMarkdown(),J=e=>{q=!0,null==k||k.setMarkdown(e,!0)};r(()=>e.value,(e,t)=>{e!==t&&(C.value=e||"")},{immediate:!0}),r(C,(e,t)=>{const n=W();e!==t&&n!==e&&J(e)});const Y=e=>{"manual"!==U&&(o("change",W(),null==w?void 0:w.model.id,q),q=!1)},G=(e,t)=>({[e]:t}),X=(e,t="")=>{const n=document.createElement(e);return n.className=t,n},K=e=>X("i","ch-icon ch-icon-".concat(e)),Q=g.e("fullscreen"),Z=e=>{for(;e.firstChild;)e.removeChild(e.firstChild)},ee=()=>{if(k&&_.value){const e=k.editor.options.editorDom.parentElement;if(!e)return{};const t=e.classList,n=_.value.querySelector(".".concat(Q));return n?{parentElement:e,cherryClass:t,fullscreenNode:n}:{}}return{}},te=()=>{const{parentElement:e,cherryClass:t,fullscreenNode:n}=ee();e&&t&&n&&(Z(n),n.appendChild(K("fullscreen")),n.title=ibiz.i18n.t("editor.common.fullscreen"),t.remove("fullscreen"),null==e||e.blur(),e.setAttribute("tabindex","-1"))},ne=()=>{const{cherryClass:e}=ee();return null==e?void 0:e.contains("fullscreen")},ie=()=>{k&&_.value&&(ne()?(te(),k.toggleToc(H.value),S.value=!1):((()=>{const{parentElement:e,cherryClass:n,fullscreenNode:i}=ee();e&&n&&i&&(Z(i),i.appendChild(K("minscreen")),n.add("fullscreen"),i.title=ibiz.i18n.t("editor.common.minimize"),e.setAttribute("tabindex","-1"),t(()=>null==e?void 0:e.focus()))})(),H.value=k.toc.model,k.toggleToc("full"),S.value=!0))},le=e=>{e.stopPropagation(),"Escape"===e.key&&(e.preventDefault(),ne()&&(te(),k.toggleToc(H.value),S.value=!1))},oe=e=>{null==w||w.setCurrentEditorTheme(e)},ae=e=>{var t,n;const{info:i}=e;let l=!0;const o=i.ranges&&i.ranges[0];if(o){const{anchor:e,head:t}=o;l=w.isPositionBefore(e,t)}else l=!0;const a=null==(t=w.mdeditor)?void 0:t.editor.editor.getCursor("start"),r=null==(n=w.mdeditor)?void 0:n.editor.editor.getCursor("end");w.setCursorPos(a,r),w.setSelectionDirection(l)};r(()=>D.theme,e=>{P.value=A||e,null==k||k.setTheme(P.value),null==k||k.setCodeBlockTheme(P.value)});const re=()=>{T.value=!0,B.value="editOnly",null==k||k.switchModel(B.value)},se=()=>{T.value=!1,B.value="previewOnly",null==k||k.switchModel(B.value)},ce=()=>{J(C.value),se()},de=()=>{o("change",W(),null==w?void 0:w.model.id,q),q=!1,se()},ue=()=>{const e=document.getElementById(y);null==e||e.focus()};return s(()=>{var n;(e.disabled||e.readonly||"manual"===U)&&(B.value="previewOnly"),t(()=>{var t;const n=["bold","italic","underline","strikethrough","sub","sup","|","size","color"],i=["bold","italic","underline","strikethrough","|","color","header","|","list","image",{insert:["link","hr","br","code","formula","toc","table","line-table","bar-table"]},"settings","togglePreview"];w&&w.chatCompletion&&(i.unshift("AIChart"),n.unshift("AI")),k=new p({id:y,value:C.value,previewer:{enablePreviewerBubble:!(e.disabled||e.readonly)},themeSettings:{mainTheme:P.value,codeBlockTheme:P.value},fileUpload:j,emoji:{useUnicode:!0},header:{anchorStyle:"autonumber"},editor:{height:"100%",defaultModel:B.value,codemirror:{autofocus:!1}},toolbars:{toolbar:i,bubble:n,float:["h1","h2","h3","|","checklist","quote","quickTable","code"],customMenu:{AI:F,AIChart:$},sidebar:["theme","copy"],toolbarRight:[],toc:{updateLocationHash:!1,defaultModel:"pure",showAutoNumber:!0,position:"absolute",cssText:""}},callback:{afterChange:Y,beforeImageMounted:G},event:{changeMainTheme:oe,selectionChange:ae},engine:{syntax:{table:{enableChart:!1,externals:["echarts"]}}}}),k.toggleToc("pure"),k.setTheme(P.value),A&&(k.setTheme(A),k.setCodeBlockTheme(A));const l=X("span","".concat(Q," cherry-toolbar-button"));l.title=ibiz.i18n.t("editor.common.fullscreen"),l.onclick=ie,l.appendChild(K("fullscreen"));const o=e.disabled?k.editor.options.editorDom.parentElement:null==(t=k.editor.options.editorDom.parentElement)?void 0:t.querySelector(".cherry-toolbar>.toolbar-right");if(null==o||o.appendChild(l),null==w||w.setMDEditor(k),M(k),a.editorSwitchMenu&&window.ResizeObserver&&_.value){const e=_.value.querySelector(".cherry-toolbar");e&&(O=new ResizeObserver(e=>{var t;const n=null==(t=e[0])?void 0:t.contentRect.height;R.value=g.cssVarBlock({"toolbar-height":"".concat(n,"px")})}),O.observe(e))}}),(()=>{if(window.ResizeObserver&&_.value){const e={width:_.value.offsetWidth?"".concat(_.value.offsetWidth,"px"):"100%"};w&&"number"==typeof w.parent.model.height&&Object.assign(e,{height:"".concat(w.parent.model.height,"px")}),N.value=g.cssVarBlock(e),L=new ResizeObserver(e=>{const t=e[0].contentRect.width;if(t!==V){const n={width:"".concat(e[0].contentRect.width,"px")};w&&"number"==typeof w.parent.model.height&&Object.assign(n,{height:"".concat(w.parent.model.height,"px")}),N.value=g.cssVarBlock(n),V=t}}),L.observe(_.value)}})(),null==(n=_.value)||n.addEventListener("keydown",le.bind(this))}),i(()=>{var e;null==(e=_.value)||e.removeEventListener("keydown",le.bind(this))}),c(()=>{k=null,L&&L.disconnect(),O&&O.disconnect()}),{ns:g,currentVal:C,id:y,editor:k,markDownBox:_,headers:I,theme:P,defaultModel:B,cssVars:N,isEditing:T,showmode:U,getCherryHtml:()=>null==k?void 0:k.getHtml(),getCherryContent:W,setCherryContent:J,renderHeader:()=>{if("manual"===U&&!T.value)return l("div",{onClick:ue,class:[g.e("header"),g.is("fullscreen",S.value)]},[!e.disabled&&!e.readonly&&l("div",{class:g.em("header","edit"),onClick:re,title:ibiz.i18n.t("editor.markdown.edit")},[l("i",{class:"fa fa-edit","aria-hidden":"true"},null)]),l("div",{class:g.em("header","full"),onClick:ie},[S.value?l("i",{class:"fa fa-compress","aria-hidden":"true",title:ibiz.i18n.t("editor.html.reduce")},null):l("i",{class:"fa fa-expand","aria-hidden":"true",title:ibiz.i18n.t("editor.common.fullscreen")},null)])])},renderFooter:()=>{if("manual"===U&&T.value&&!e.disabled&&!e.readonly)return l("div",{onClick:ue,class:[g.e("footer"),g.is("fullscreen",S.value)]},[l("div",{class:g.em("footer","cancel"),onClick:ce},[ibiz.i18n.t("editor.common.cancel")]),l("div",{class:g.em("footer","save"),onClick:de},[ibiz.i18n.t("editor.common.confirm")])])},renderImgPreview:z,renderEditorSwitchMenu:()=>{var e;return l("div",{class:[g.b("menu"),g.is("fullscreen",S.value)],style:R.value},[null==(e=a.editorSwitchMenu)?void 0:e.call(a)])}}},render(){const e=!!this.$slots.editorSwitchMenu;return l("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(),l("div",{tabindex:"-1",id:this.id,style:this.cssVars,class:[this.ns.b("cherry"),this.ns.m("dark"===this.theme?"dark":"light")]},null)])}}))}}});