@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
@@ -1,10 +1,8 @@
1
1
  import { defineComponent, createVNode, resolveComponent, ref, shallowRef, watch, onBeforeUnmount, onMounted, nextTick, onUnmounted } from 'vue';
2
2
  import { Toolbar, Editor } from '@wangeditor/editor-for-vue';
3
- import { createUUID } from 'qx-util';
4
3
  import { isNil } from 'ramda';
5
4
  import { useNamespace, useUIStore, getEditorEmits, getHtmlProps } from '@ibiz-template/vue3-util';
6
- import { IBizContext, awaitTimeout } from '@ibiz-template/core';
7
- import { UIActionUtil, SysUIActionTag } from '@ibiz-template/runtime';
5
+ import { awaitTimeout } from '@ibiz-template/core';
8
6
  import { ElMessageBox } from 'element-plus';
9
7
  import './module/index.mjs';
10
8
  import './config/index.mjs';
@@ -21,6 +19,7 @@ const IBizHtml = /* @__PURE__ */ defineComponent({
21
19
  emit,
22
20
  slots
23
21
  }) {
22
+ var _a;
24
23
  const ns = useNamespace("html");
25
24
  const c = props.controller;
26
25
  const htmlContent = ref();
@@ -40,6 +39,7 @@ const IBizHtml = /* @__PURE__ */ defineComponent({
40
39
  const readonlyState = ref(false);
41
40
  const enableFullScreen = ref(false);
42
41
  const isFullScreen = ref(false);
42
+ let enableNoAccess = false;
43
43
  const editorModel = c.model;
44
44
  if (editorModel.editorParams) {
45
45
  if (editorModel.editorParams.enableEdit) {
@@ -58,6 +58,9 @@ const IBizHtml = /* @__PURE__ */ defineComponent({
58
58
  if (editorModel.editorParams.enablefullscreen) {
59
59
  enableFullScreen.value = c.toBoolean(editorModel.editorParams.enablefullscreen);
60
60
  }
61
+ if (editorModel.editorParams.enablenoaccess) {
62
+ enableNoAccess = ((_a = c == null ? void 0 : c.editorParams) == null ? void 0 : _a.enablenoaccess) === "true";
63
+ }
61
64
  }
62
65
  if (props.readonly) {
63
66
  hasEnableEdit.value = false;
@@ -65,7 +68,8 @@ const IBizHtml = /* @__PURE__ */ defineComponent({
65
68
  }
66
69
  const getDownloadUrl = (data, file) => {
67
70
  const editorParams = {
68
- ...c.editorParams
71
+ ...c.editorParams,
72
+ enableNoAccess
69
73
  };
70
74
  if (editorParams.exportparams) {
71
75
  editorParams.exportParams = JSON.parse(editorParams.exportparams);
@@ -79,7 +83,8 @@ const IBizHtml = /* @__PURE__ */ defineComponent({
79
83
  watch(() => props.data, (newVal) => {
80
84
  if (newVal) {
81
85
  const editorParams = {
82
- ...c.editorParams
86
+ ...c.editorParams,
87
+ enableNoAccess
83
88
  };
84
89
  if (editorParams.uploadparams) {
85
90
  editorParams.uploadParams = JSON.parse(editorParams.uploadparams);
@@ -138,7 +143,7 @@ const IBizHtml = /* @__PURE__ */ defineComponent({
138
143
  },
139
144
  // 单个文件上传成功之后
140
145
  onSuccess(file, res) {
141
- if (ibiz.config.common.enableDownloadTicket && res.ticket) {
146
+ if (ibiz.config.common.enableDownloadTicket && !enableNoAccess && res.ticket) {
142
147
  ibiz.util.file.setDownloadTicket(res.id, res.ticket);
143
148
  }
144
149
  console.log("".concat(file.name, " \u4E0A\u4F20\u6210\u529F"), res);
@@ -156,7 +161,7 @@ const IBizHtml = /* @__PURE__ */ defineComponent({
156
161
  const downloadUrl = getDownloadUrl(props.data, res);
157
162
  let url = downloadUrl.replace("%fileId%", res.id);
158
163
  const alt = res.filename;
159
- if (ibiz.config.common.enableDownloadTicket) {
164
+ if (ibiz.config.common.enableDownloadTicket && !enableNoAccess) {
160
165
  const downloadTicket = await ibiz.util.file.getDownloadTicket(c.context, c.params, props.data, {
161
166
  fileId: res.id
162
167
  }, c.downloadTicketParams);
@@ -197,25 +202,22 @@ const IBizHtml = /* @__PURE__ */ defineComponent({
197
202
  const appDataEntityId = c.model.appDataEntityId;
198
203
  if (!appDataEntityId || !c.deACMode)
199
204
  return;
200
- const aiAgentlist = await ibiz.aiChatUtil.getAIAgentList(c.context, c.params, c.editorParams);
201
- const {
202
- contentToolbarItems,
203
- footerToolbarItems,
204
- questionToolbarItems,
205
- otherToolbarItems
206
- } = ibiz.aiChatUtil.calcAiToolbarItemsByAc(c.deACMode);
207
- const {
208
- containerOptions,
209
- chatOptions
210
- } = ibiz.aiChatUtil.getEditorExAIChatParams(c.editorParams, c.context, c.params, props.data);
211
205
  const {
212
206
  zIndex
213
207
  } = useUIStore();
214
208
  const containerZIndex = zIndex.increment();
215
209
  chatInstance = await ibiz.aiChatUtil.getAIChat();
216
- let id = "";
217
- let abortController;
210
+ const {
211
+ containerOptions,
212
+ chatOptions
213
+ } = await ibiz.aiChatUtil.getEditorExAIChatParams(c.editorParams, c.context, c.params, props.data, c.deACMode, {
214
+ chatInstance,
215
+ view: c.view,
216
+ ctrl: c.ctrl
217
+ });
218
+ const resourceOptions = await ibiz.aiChatUtil.getAIResourceOptions(c.context, c.params);
218
219
  chatInstance.create({
220
+ resourceOptions,
219
221
  containerOptions: {
220
222
  zIndex: containerZIndex,
221
223
  ...containerOptions
@@ -230,85 +232,7 @@ const IBizHtml = /* @__PURE__ */ defineComponent({
230
232
  srfactag: c.deACMode.codeName
231
233
  },
232
234
  appDataEntityId,
233
- contentToolbarItems,
234
- footerToolbarItems,
235
- questionToolbarItems,
236
- otherToolbarItems,
237
- aiAgentlist,
238
235
  ...chatOptions,
239
- question: async (aiChat, ctx, param, other, arr, sessionid, srfaiagent, srfmode) => {
240
- id = createUUID();
241
- abortController = new AbortController();
242
- const deService = await ibiz.hub.getApp(ctx.srfappid).deService.getService(ctx, other.appDataEntityId);
243
- try {
244
- const questionRequestData = {
245
- messages: arr,
246
- sessionid
247
- };
248
- if (srfaiagent) {
249
- questionRequestData.srfaiagent = srfaiagent;
250
- }
251
- if (srfmode) {
252
- questionRequestData.mode = srfmode;
253
- }
254
- await deService.aiChatSse((msg) => {
255
- if (msg.actionstate === 20 && msg.actionresult) {
256
- aiChat.addMessage({
257
- messageid: id,
258
- state: msg.actionstate,
259
- type: "DEFAULT",
260
- role: "ASSISTANT",
261
- content: msg.actionresult
262
- });
263
- } else if (msg.actionstate === 30 && msg.actionresult) {
264
- const result = JSON.parse(msg.actionresult);
265
- const choices = result.choices;
266
- if (choices && choices.length > 0) {
267
- aiChat.replaceMessage({
268
- messageid: id,
269
- state: msg.actionstate,
270
- type: "DEFAULT",
271
- role: "ASSISTANT",
272
- content: choices[0].content || ""
273
- });
274
- }
275
- } else if (msg.actionstate === 40) {
276
- aiChat.replaceMessage({
277
- messageid: id,
278
- state: msg.actionstate,
279
- type: "ERROR",
280
- role: "ASSISTANT",
281
- content: msg.actionresult
282
- });
283
- }
284
- }, abortController, ctx, param, {
285
- ...questionRequestData
286
- });
287
- } catch (error) {
288
- aiChat.replaceMessage({
289
- messageid: id,
290
- state: 40,
291
- type: "ERROR",
292
- role: "ASSISTANT",
293
- content: error.message || ibiz.i18n.t("app.aiError")
294
- });
295
- abortController == null ? void 0 : abortController.abort();
296
- } finally {
297
- aiChat.completeMessage(id, true);
298
- return true;
299
- }
300
- },
301
- abortQuestion: async (aiChat) => {
302
- abortController == null ? void 0 : abortController.abort();
303
- await aiChat.stopMessage({
304
- messageid: id,
305
- state: 30,
306
- type: "DEFAULT",
307
- role: "ASSISTANT",
308
- content: ""
309
- });
310
- await aiChat.completeMessage(id, true);
311
- },
312
236
  action: (action, message) => {
313
237
  if (action === "backfill") {
314
238
  if (hasEnableEdit.value) {
@@ -317,109 +241,6 @@ const IBizHtml = /* @__PURE__ */ defineComponent({
317
241
  emit("change", message.realcontent);
318
242
  }
319
243
  }
320
- },
321
- history: async (ctx, param, other) => {
322
- const deService = await ibiz.hub.getApp(ctx.srfappid).deService.getService(ctx, other.appDataEntityId);
323
- const historyRequestData = {};
324
- if (other.appendCurData) {
325
- Object.assign(historyRequestData, {
326
- ...other.appendCurData
327
- });
328
- }
329
- if (other.srfaiagent) {
330
- Object.assign(historyRequestData, {
331
- srfaiagent: other.srfaiagent
332
- });
333
- }
334
- if (other.srfmode) {
335
- Object.assign(historyRequestData, {
336
- mode: other.srfmode
337
- });
338
- }
339
- const result = await deService.aiChatHistory(ctx, param, historyRequestData);
340
- if (result.data && Array.isArray(result.data)) {
341
- let preMsg;
342
- result.data.forEach((item) => {
343
- if (item.role === "TOOL") {
344
- if (preMsg && item.content) {
345
- chatInstance.aiChat.updateRecommendPrompt(preMsg, item.content);
346
- }
347
- } else {
348
- const msg = {
349
- messageid: createUUID(),
350
- state: 30,
351
- type: "DEFAULT",
352
- role: item.role,
353
- content: item.content,
354
- completed: true
355
- };
356
- preMsg = msg;
357
- chatInstance.aiChat.addMessage(msg);
358
- }
359
- });
360
- }
361
- return true;
362
- },
363
- recommendPrompt: async (ctx, param, other) => {
364
- const deService = await ibiz.hub.getApp(ctx.srfappid).deService.getService(ctx, other.appDataEntityId);
365
- const result = await deService.aiChatRecommendPrompt(ctx, param, other.message);
366
- if (result.ok && result.data) {
367
- const choices = result.data.choices;
368
- if (choices && choices.length > 0) {
369
- return choices[0];
370
- }
371
- return null;
372
- }
373
- return null;
374
- },
375
- uploader: {
376
- onUpload: async (file, reportProgress, options) => {
377
- const fileMeata = ibiz.util.file.calcFileUpDownUrl((options == null ? void 0 : options.context) || c.context, (options == null ? void 0 : options.params) || c.params, {});
378
- const fielUploadHeaders = ibiz.util.file.getUploadHeaders();
379
- const formData = new FormData();
380
- formData.append("file", file);
381
- const res = await ibiz.net.axios({
382
- url: fileMeata.uploadUrl,
383
- method: "post",
384
- headers: fielUploadHeaders,
385
- data: formData,
386
- onUploadProgress: (progressEvent) => {
387
- const percent = progressEvent.loaded / progressEvent.total * 100;
388
- reportProgress(percent);
389
- }
390
- });
391
- return res.data;
392
- }
393
- },
394
- extendToolbarClick: async (event, source, context, params, data) => {
395
- var _a, _b;
396
- const result = await UIActionUtil.exec(source.id, {
397
- view: c.view,
398
- ctrl: c.ctrl,
399
- context: IBizContext.create(context),
400
- params,
401
- data: [data],
402
- event
403
- }, source.appId);
404
- if (result.closeView) {
405
- c.view.closeView({
406
- ok: true
407
- });
408
- } else if (result.refresh) {
409
- switch (result.refreshMode) {
410
- case 1:
411
- c.view.callUIAction(SysUIActionTag.REFRESH);
412
- break;
413
- case 2:
414
- (_a = c.view.parentView) == null ? void 0 : _a.callUIAction(SysUIActionTag.REFRESH);
415
- break;
416
- case 3:
417
- (_b = c.view.getTopView()) == null ? void 0 : _b.callUIAction(SysUIActionTag.REFRESH);
418
- break;
419
- default:
420
- }
421
- }
422
- return result;
423
244
  }
424
245
  }
425
246
  });
@@ -432,9 +253,16 @@ const IBizHtml = /* @__PURE__ */ defineComponent({
432
253
  onClickAI();
433
254
  });
434
255
  editor.on("lineAiClick", () => {
435
- const selectionPosition = editor.getSelectionPosition();
436
- if (!selectionPosition || !selectionPosition.left || !selectionPosition.top)
256
+ const container = editor.getEditableContainer();
257
+ const hoverToolbar = container.querySelector(".w-e-hover-bar");
258
+ if (!hoverToolbar) {
437
259
  return;
260
+ }
261
+ const {
262
+ offsetLeft,
263
+ offsetTop,
264
+ offsetHeight
265
+ } = hoverToolbar;
438
266
  const items = ibiz.inLineAIUtil.calcContextMenus(c.deACMode, (tag) => {
439
267
  c.doInLineAIUIAction(tag, c.model.appId);
440
268
  });
@@ -447,9 +275,9 @@ const IBizHtml = /* @__PURE__ */ defineComponent({
447
275
  const popoverZIndex = zIndex.increment();
448
276
  ibiz.inLineAIUtil.showContextMenus(
449
277
  // 编辑器的左侧距离+选区距离编辑器左侧距离
450
- editorBoundingClientRect.x + Number(selectionPosition.left.replace("px", "")),
278
+ editorBoundingClientRect.x + offsetLeft,
451
279
  // 编辑器的上方距离+选区距离编辑器上方距离+悬浮工具栏高度
452
- editorBoundingClientRect.y + Number(selectionPosition.top.replace("px", "")) + 42,
280
+ editorBoundingClientRect.y + offsetTop + offsetHeight,
453
281
  items,
454
282
  {
455
283
  zIndex: popoverZIndex,
@@ -556,11 +384,11 @@ const IBizHtml = /* @__PURE__ */ defineComponent({
556
384
  });
557
385
  };
558
386
  const moveToLastStr = () => {
559
- var _a, _b;
387
+ var _a2, _b;
560
388
  if (props.value) {
561
389
  const index = props.value.indexOf("</p>");
562
390
  if (index >= 0) {
563
- const offset = (_a = editorRef.value.selection.anchor) == null ? void 0 : _a.offset;
391
+ const offset = (_a2 = editorRef.value.selection.anchor) == null ? void 0 : _a2.offset;
564
392
  const path = (_b = editorRef.value.selection.anchor) == null ? void 0 : _b.path;
565
393
  if (offset === 0 && path.length > 0 && path[0] === 0) {
566
394
  editorRef.value.move(index - 3);
@@ -1,9 +1,6 @@
1
1
  import Cherry from 'cherry-markdown';
2
2
  import { nextTick } from 'vue';
3
- import { createUUID } from 'qx-util';
4
3
  import { useUIStore } from '@ibiz-template/vue3-util';
5
- import { IBizContext } from '@ibiz-template/core';
6
- import { UIActionUtil, SysUIActionTag } from '@ibiz-template/runtime';
7
4
 
8
5
  "use strict";
9
6
  function initCustomMenu(c, opts) {
@@ -60,29 +57,23 @@ function initCustomMenu(c, opts) {
60
57
  const appDataEntityId = c.model.appDataEntityId;
61
58
  if (!appDataEntityId || !c.deACMode)
62
59
  return;
63
- const aiAgentlist = await ibiz.aiChatUtil.getAIAgentList(
60
+ const { zIndex } = useUIStore();
61
+ const containerZIndex = zIndex.increment();
62
+ chatInstance = await ibiz.aiChatUtil.getAIChat();
63
+ const { containerOptions, chatOptions } = await ibiz.aiChatUtil.getEditorExAIChatParams(
64
+ c.editorParams,
64
65
  c.context,
65
66
  c.params,
66
- c.editorParams
67
+ props.data,
68
+ c.deACMode,
69
+ { chatInstance, view: c.view, ctrl: c.ctrl }
67
70
  );
68
- const {
69
- contentToolbarItems,
70
- footerToolbarItems,
71
- questionToolbarItems,
72
- otherToolbarItems
73
- } = ibiz.aiChatUtil.calcAiToolbarItemsByAc(c.deACMode);
74
- const { containerOptions, chatOptions } = ibiz.aiChatUtil.getEditorExAIChatParams(
75
- c.editorParams,
71
+ const resourceOptions = await ibiz.aiChatUtil.getAIResourceOptions(
76
72
  c.context,
77
- c.params,
78
- props.data
73
+ c.params
79
74
  );
80
- const { zIndex } = useUIStore();
81
- const containerZIndex = zIndex.increment();
82
- chatInstance = await ibiz.aiChatUtil.getAIChat();
83
- let id = "";
84
- let abortController;
85
75
  chatInstance.create({
76
+ resourceOptions,
86
77
  containerOptions: {
87
78
  zIndex: containerZIndex,
88
79
  ...containerOptions
@@ -92,89 +83,7 @@ function initCustomMenu(c, opts) {
92
83
  context: { ...c.context },
93
84
  params: { ...c.params, srfactag: c.deACMode.codeName },
94
85
  appDataEntityId,
95
- contentToolbarItems,
96
- footerToolbarItems,
97
- questionToolbarItems,
98
- otherToolbarItems,
99
- aiAgentlist,
100
86
  ...chatOptions,
101
- question: async (aiChat, ctx, param, other, arr, sessionid, srfaiagent, srfmode) => {
102
- id = createUUID();
103
- abortController = new AbortController();
104
- const deService = await ibiz.hub.getApp(ctx.srfappid).deService.getService(ctx, other.appDataEntityId);
105
- try {
106
- const questionRequestData = {
107
- messages: arr,
108
- sessionid
109
- };
110
- if (srfaiagent) {
111
- questionRequestData.srfaiagent = srfaiagent;
112
- }
113
- if (srfmode) {
114
- questionRequestData.mode = srfmode;
115
- }
116
- await deService.aiChatSse(
117
- (msg) => {
118
- if (msg.actionstate === 20 && msg.actionresult) {
119
- aiChat.addMessage({
120
- messageid: id,
121
- state: msg.actionstate,
122
- type: "DEFAULT",
123
- role: "ASSISTANT",
124
- content: msg.actionresult
125
- });
126
- } else if (msg.actionstate === 30 && msg.actionresult) {
127
- const result = JSON.parse(msg.actionresult);
128
- const choices = result.choices;
129
- if (choices && choices.length > 0) {
130
- aiChat.replaceMessage({
131
- messageid: id,
132
- state: msg.actionstate,
133
- type: "DEFAULT",
134
- role: "ASSISTANT",
135
- content: choices[0].content || ""
136
- });
137
- }
138
- } else if (msg.actionstate === 40) {
139
- aiChat.replaceMessage({
140
- messageid: id,
141
- state: msg.actionstate,
142
- type: "ERROR",
143
- role: "ASSISTANT",
144
- content: msg.actionresult
145
- });
146
- }
147
- },
148
- abortController,
149
- ctx,
150
- param,
151
- { ...questionRequestData }
152
- );
153
- } catch (error) {
154
- aiChat.replaceMessage({
155
- messageid: id,
156
- state: 40,
157
- type: "ERROR",
158
- role: "ASSISTANT",
159
- content: error.message || ibiz.i18n.t("app.aiError")
160
- });
161
- abortController == null ? void 0 : abortController.abort();
162
- } finally {
163
- aiChat.completeMessage(id, true);
164
- return true;
165
- }
166
- },
167
- abortQuestion: async (aiChat) => {
168
- abortController == null ? void 0 : abortController.abort();
169
- await aiChat.stopMessage({
170
- messageid: id,
171
- state: 30,
172
- type: "DEFAULT",
173
- role: "ASSISTANT",
174
- content: ""
175
- });
176
- await aiChat.completeMessage(id, true);
177
- },
178
87
  action: (action, message) => {
179
88
  if (action === "backfill") {
180
89
  if (isEditing.value) {
@@ -183,126 +92,6 @@ function initCustomMenu(c, opts) {
183
92
  emit("change", message.realcontent);
184
93
  }
185
94
  }
186
- },
187
- history: async (ctx, param, other) => {
188
- const deService = await ibiz.hub.getApp(ctx.srfappid).deService.getService(ctx, other.appDataEntityId);
189
- const historyRequestData = {};
190
- if (other.appendCurData) {
191
- Object.assign(historyRequestData, {
192
- ...other.appendCurData
193
- });
194
- }
195
- if (other.srfaiagent) {
196
- Object.assign(historyRequestData, {
197
- srfaiagent: other.srfaiagent
198
- });
199
- }
200
- if (other.srfmode) {
201
- Object.assign(historyRequestData, {
202
- mode: other.srfmode
203
- });
204
- }
205
- const result = await deService.aiChatHistory(
206
- ctx,
207
- param,
208
- historyRequestData
209
- );
210
- if (result.data && Array.isArray(result.data)) {
211
- let preMsg;
212
- result.data.forEach((item) => {
213
- if (item.role === "TOOL") {
214
- if (preMsg && item.content) {
215
- chatInstance.aiChat.updateRecommendPrompt(
216
- preMsg,
217
- item.content
218
- );
219
- }
220
- } else {
221
- const msg = {
222
- messageid: createUUID(),
223
- state: 30,
224
- type: "DEFAULT",
225
- role: item.role,
226
- content: item.content,
227
- completed: true
228
- };
229
- preMsg = msg;
230
- chatInstance.aiChat.addMessage(msg);
231
- }
232
- });
233
- }
234
- return true;
235
- },
236
- recommendPrompt: async (ctx, param, other) => {
237
- const deService = await ibiz.hub.getApp(ctx.srfappid).deService.getService(ctx, other.appDataEntityId);
238
- const result = await deService.aiChatRecommendPrompt(
239
- ctx,
240
- param,
241
- other.message
242
- );
243
- if (result.ok && result.data) {
244
- const choices = result.data.choices;
245
- if (choices && choices.length > 0) {
246
- return choices[0];
247
- }
248
- return null;
249
- }
250
- return null;
251
- },
252
- uploader: {
253
- onUpload: async (file, reportProgress, options) => {
254
- const fileMeata = ibiz.util.file.calcFileUpDownUrl(
255
- (options == null ? void 0 : options.context) || c.context,
256
- (options == null ? void 0 : options.params) || c.params,
257
- {}
258
- );
259
- const fielUploadHeaders = ibiz.util.file.getUploadHeaders();
260
- const formData = new FormData();
261
- formData.append("file", file);
262
- const res = await ibiz.net.axios({
263
- url: fileMeata.uploadUrl,
264
- method: "post",
265
- headers: fielUploadHeaders,
266
- data: formData,
267
- onUploadProgress: (progressEvent) => {
268
- const percent = progressEvent.loaded / progressEvent.total * 100;
269
- reportProgress(percent);
270
- }
271
- });
272
- return res.data;
273
- }
274
- },
275
- extendToolbarClick: async (event, source, context, params, data) => {
276
- var _a, _b;
277
- const result = await UIActionUtil.exec(
278
- source.id,
279
- {
280
- view: c.view,
281
- ctrl: c.ctrl,
282
- context: IBizContext.create(context),
283
- params,
284
- data: [data],
285
- event
286
- },
287
- source.appId
288
- );
289
- if (result.closeView) {
290
- c.view.closeView({ ok: true });
291
- } else if (result.refresh) {
292
- switch (result.refreshMode) {
293
- case 1:
294
- c.view.callUIAction(SysUIActionTag.REFRESH);
295
- break;
296
- case 2:
297
- (_a = c.view.parentView) == null ? void 0 : _a.callUIAction(SysUIActionTag.REFRESH);
298
- break;
299
- case 3:
300
- (_b = c.view.getTopView()) == null ? void 0 : _b.callUIAction(SysUIActionTag.REFRESH);
301
- break;
302
- default:
303
- }
304
- }
305
- return result;
306
95
  }
307
96
  }
308
97
  });
@@ -1 +1 @@
1
- .ibiz-markdown{--ibiz-markdown-width:100%;--ibiz-markdown-color-manual-toolbar-bg-save:var(--ibiz-color-primary);--ibiz-markdown-color-manual-toolbar-text-save:var(--ibiz-color-primary-active-text);--ibiz-markdown-color-manual-toolbar-text-cancel:var(--ibiz-color-text-1);--ibiz-markdown-color-manual-toolbar-text-cancel-hover:var(--ibiz-color-primary);--ibiz-markdown-color-dark-scrollbar-thumb-dark:rgb(var(--ibiz-grey-4));--ibiz-markdown-color-light-scrollbar-thumb-dark:rgb(var(--ibiz-grey-4));--ibiz-markdown-color-scrollbar-thumb-dark-hover:rgba(var(--ibiz-grey-4), 0.5);--ibiz-markdown-color-dark-toc-text:var(--ibiz-color-fill-0);--ibiz-markdown-color-toc-header-text:var(--ibiz-color-text-0);--ibiz-markdown-color-dark-mardown-border:rgb(var(--ibiz-grey-2));--ibiz-markdown-spacing-manual-toolbar-height:32px;--ibiz-markdown-spacing-manual-toolbar-gap:var(--ibiz-spacing-base);--ibiz-markdown-spacing-manual-toolbar-item-padding:0 var(--ibiz-spacing-base);--ibiz-markdown-spacing-manual-toolbar-margin:var(--ibiz-spacing-base-tight) var(--ibiz-spacing-tight) 0 0;--ibiz-markdown-spacing-manual-toolbar-fullscreen-height:var(--ibiz-height-control-default);--ibiz-markdown-spacing-manual-toolbar-fullscreen-padding:0 var(--ibiz-spacing-extra-loose);--ibiz-markdown-spacing-manual-toolbar-fullscreen-height-header:var(--ibiz-spacing-super-loose);--ibiz-markdown-height-manual-toolbar-height:var(--ibiz-height-control-default);--ibiz-markdown-border-radius-manual-toolbar-item:var(--ibiz-border-radius-small);--ibiz-markdown-border-manual-toolbar-fullscreen-footer:1px solid var(--ibiz-color-border);--ibiz-markdown-img-preview-top:-32px;--ibiz-markdown-img-preview-right:-36px;--ibiz-markdown-img-preview-width:32px;--ibiz-markdown-img-preview-height:32px}.ibiz-markdown__header{display:flex;flex-shrink:0;gap:var(--ibiz-markdown-spacing-manual-toolbar-gap);align-items:center;justify-content:end;height:var(--ibiz-markdown-spacing-manual-toolbar-height)}.ibiz-markdown__header--edit{cursor:pointer}.ibiz-markdown__header--full{cursor:pointer}.ibiz-markdown__header.is-fullscreen{position:fixed;top:0;right:0;left:0;z-index:999;width:100%;height:calc(var(--ibiz-markdown-spacing-manual-toolbar-fullscreen-height-header));padding:var(--ibiz-markdown-spacing-manual-toolbar-fullscreen-padding);margin-top:0;background-color:var(--ibiz-view-bg-color)}.ibiz-markdown__header.is-fullscreen+.ibiz-markdown-cherry .cherry.fullscreen{top:calc(var(--ibiz-markdown-spacing-manual-toolbar-fullscreen-height-header));height:calc(100% - var(--ibiz-markdown-spacing-manual-toolbar-fullscreen-height-header))}.ibiz-markdown__footer{display:flex;gap:var(--ibiz-markdown-spacing-manual-toolbar-gap);align-items:center;justify-content:end;height:var(--ibiz-markdown-spacing-manual-toolbar-height);margin:var(--ibiz-markdown-spacing-manual-toolbar-margin)}.ibiz-markdown__footer--save{height:var(--ibiz-markdown-height-manual-toolbar-height);padding:var(--ibiz-markdown-spacing-manual-toolbar-item-padding);line-height:var(--ibiz-markdown-height-manual-toolbar-height);color:var(--ibiz-markdown-color-manual-toolbar-text-save);text-align:center;cursor:pointer;background-color:var(--ibiz-markdown-color-manual-toolbar-bg-save);border-radius:var(--ibiz-markdown-border-radius-manual-toolbar-item)}.ibiz-markdown__footer--cancel{color:var(--ibiz-markdown-color-manual-toolbar-text-cancel);cursor:pointer}.ibiz-markdown__footer--cancel:hover{color:var(--ibiz-markdown-color-manual-toolbar-text-cancel-hover)}.ibiz-markdown__footer.is-fullscreen{position:fixed;right:0;bottom:0;left:0;z-index:999;width:100%;height:calc(var(--ibiz-markdown-spacing-manual-toolbar-fullscreen-height) * 2);padding:var(--ibiz-markdown-spacing-manual-toolbar-fullscreen-padding);margin-top:0;background-color:var(--ibiz-view-bg-color);border-top:var(--ibiz-markdown-border-manual-toolbar-fullscreen-footer)}.ibiz-markdown__footer.is-fullscreen+.ibiz-markdown-cherry .cherry.fullscreen{height:calc(100% - var(--ibiz-markdown-spacing-manual-toolbar-fullscreen-height) * 2)}.ibiz-markdown__img-preview.el-image{position:absolute;height:0}.ibiz-markdown__img-preview .el-image-viewer__wrapper{width:90%;height:90%;margin:auto}.ibiz-markdown__img-preview .el-image-viewer__mask{position:fixed;width:100vw;height:100vh;cursor:zoom-out;opacity:.7}.ibiz-markdown__img-preview .el-image-viewer__close{top:var(--ibiz-markdown-img-preview-top);right:var(--ibiz-markdown-img-preview-right);width:var(--ibiz-markdown-img-preview-width);height:var(--ibiz-markdown-img-preview-height)}.ibiz-markdown .ibiz-markdown-cherry{width:var(--ibiz-markdown-width);outline:0}.ibiz-markdown .ibiz-markdown-cherry .cherry{width:100%;border:1px solid var(--ibiz-color-border);box-shadow:none}.ibiz-markdown .ibiz-markdown-cherry .cherry .cherry-toolbar{box-shadow:none}.ibiz-markdown .ibiz-markdown-cherry .cherry .cherry-editor{border-top:1px solid var(--ibiz-color-border)}.ibiz-markdown .ibiz-markdown-cherry .cherry .cherry-previewer{border-top:1px solid var(--ibiz-color-border)}.ibiz-markdown .ibiz-markdown-cherry .cherry .cherry-previewer img{cursor:zoom-in}.ibiz-markdown .ibiz-markdown-cherry .cherry .cherry-sidebar{top:49px;border-left:1px solid var(--ibiz-color-border);box-shadow:none}.ibiz-markdown.is-disabled .cherry{min-height:auto}.ibiz-markdown.is-disabled .ibiz-markdown__fullscreen{position:absolute;top:8px;right:12px;z-index:98;font-size:var(--ibiz-font-size-regular);line-height:2.8}.ibiz-markdown.is-disabled .theme__dark .ibiz-markdown__fullscreen{color:var(--ibiz-color-text-0)}.ibiz-markdown.is-disabled .theme__dark .ibiz-markdown__fullscreen:hover{background-color:var(--ibiz-color-bg-3)}.ibiz-markdown.is-manual{display:flex;flex-direction:column}.ibiz-markdown.is-manual .ibiz-markdown-cherry{flex-grow:1;height:calc(100% - var(--ibiz-markdown-spacing-manual-toolbar-height))!important}.ibiz-markdown.is-manual.is-editing{flex-direction:column-reverse}.ibiz-markdown.is-manual .ibiz-markdown-menu{display:none}.ibiz-markdown.is-manual.is-editing .ibiz-markdown-menu{display:block}.ibiz-markdown.is-show-editor-switch-menu .ibiz-composite-form-item-ex-menu{--ibiz-composite-form-item-ex-menu-height:47px;--ibiz-composite-form-item-ex-menu-padding:var(--ibiz-spacing-tight) var(--ibiz-spacing-base-tight) 0;max-height:100%}.ibiz-markdown.is-show-editor-switch-menu .cherry-toolbar{padding-right:calc(var(--ibiz-composite-form-item-ex-menu-width) + var(--ibiz-spacing-extra-tight))}.ibiz-markdown.is-show-editor-switch-menu .ibiz-markdown-menu{position:absolute;top:1px;right:1px;z-index:var(--ibiz-composite-form-item-ex-menu-z-index);display:flex;align-items:center;height:calc(var(--ibiz-markdown-toolbar-height) - 1px);background:var(--ibiz-composite-form-item-ex-menu-bg-color);border-right:1px solid var(--ibiz-color-border);border-left:1px solid var(--ibiz-color-border)}.ibiz-markdown.is-show-editor-switch-menu .ibiz-markdown-menu.is-fullscreen{position:fixed;z-index:1000}.ibiz-markdown.is-show-editor-switch-menu .ibiz-markdown-menu .ibiz-composite-form-item-ex-menu{position:relative}.ibiz-markdown .cherry-preview--full{border-left:none}.ibiz-markdown .theme__dark,.ibiz-markdown .theme__light{color:var(--ibiz-form-item-text-color)}.ibiz-markdown .cherry-markdown h1 a::before,.ibiz-markdown .cherry-markdown h2 a::before,.ibiz-markdown .cherry-markdown h3 a::before,.ibiz-markdown .cherry-markdown h4 a::before,.ibiz-markdown .cherry-markdown h5 a::before,.ibiz-markdown .cherry-markdown h6 a::before{display:none}.ibiz-markdown .cherry.fullscreen{z-index:999}.ibiz-markdown--light .theme__green .cherry-toolbar,.ibiz-markdown--light .theme__light .cherry-toolbar,.ibiz-markdown--light .theme__violet .cherry-toolbar{background-color:var(--ibiz-color-bg-0)}.ibiz-markdown--light .theme__dark.cherry .cherry-flex-toc{color:var(--ibiz-markdown-color-toc-header-text)}.ibiz-markdown--light .theme__dark.cherry ::-webkit-scrollbar-thumb{background:var(--ibiz-markdown-color-light-scrollbar-thumb-dark)}.ibiz-markdown--light .theme__dark.cherry ::-webkit-scrollbar-thumb:hover{background:var(--ibiz-markdown-color-scrollbar-thumb-dark-hover)}.ibiz-markdown--dark.ibiz-markdown-cherry .cherry{border:1px solid var(--ibiz-markdown-color-dark-mardown-border)}.ibiz-markdown--dark .theme__green .cherry-toolbar,.ibiz-markdown--dark .theme__light .cherry-toolbar,.ibiz-markdown--dark .theme__violet .cherry-toolbar{background-color:var(--ibiz-color-shadow)}.ibiz-markdown--dark .theme__dark.cherry .cherry-toc-head{color:var(--ibiz-markdown-color-dark-toc-text)}.ibiz-markdown--dark .theme__dark.cherry ::-webkit-scrollbar-thumb{background:var(--ibiz-markdown-color-dark-scrollbar-thumb-dark)}.ibiz-markdown--dark .theme__dark.cherry ::-webkit-scrollbar-thumb:hover{background:var(--ibiz-markdown-color-scrollbar-thumb-dark-hover)}
1
+ .ibiz-markdown{--ibiz-markdown-width:100%;--ibiz-markdown-color-manual-toolbar-bg-save:var(--ibiz-color-primary);--ibiz-markdown-color-manual-toolbar-text-save:var(--ibiz-color-primary-active-text);--ibiz-markdown-color-manual-toolbar-text-cancel:var(--ibiz-color-text-1);--ibiz-markdown-color-manual-toolbar-text-cancel-hover:var(--ibiz-color-primary);--ibiz-markdown-color-dark-scrollbar-thumb-dark:rgb(var(--ibiz-grey-4));--ibiz-markdown-color-light-scrollbar-thumb-dark:rgb(var(--ibiz-grey-4));--ibiz-markdown-color-scrollbar-thumb-dark-hover:rgba(var(--ibiz-grey-4), 0.5);--ibiz-markdown-color-dark-toc-text:var(--ibiz-color-fill-0);--ibiz-markdown-color-toc-header-text:var(--ibiz-color-text-0);--ibiz-markdown-color-dark-mardown-border:rgb(var(--ibiz-grey-2));--ibiz-markdown-color-fixed-toc-text:var(--ibiz-color-black);--ibiz-markdown-color-fixed-toc-arrow-text:var(--ibiz-color-primary);--ibiz-markdown-spacing-manual-toolbar-height:32px;--ibiz-markdown-spacing-manual-toolbar-gap:var(--ibiz-spacing-base);--ibiz-markdown-spacing-manual-toolbar-item-padding:0 var(--ibiz-spacing-base);--ibiz-markdown-spacing-manual-toolbar-margin:var(--ibiz-spacing-base-tight) var(--ibiz-spacing-tight) 0 0;--ibiz-markdown-spacing-manual-toolbar-fullscreen-height:var(--ibiz-height-control-default);--ibiz-markdown-spacing-manual-toolbar-fullscreen-padding:0 var(--ibiz-spacing-extra-loose);--ibiz-markdown-spacing-manual-toolbar-fullscreen-height-header:var(--ibiz-spacing-super-loose);--ibiz-markdown-height-manual-toolbar-height:var(--ibiz-height-control-default);--ibiz-markdown-border-radius-manual-toolbar-item:var(--ibiz-border-radius-small);--ibiz-markdown-border-manual-toolbar-fullscreen-footer:1px solid var(--ibiz-color-border);--ibiz-markdown-img-preview-top:-32px;--ibiz-markdown-img-preview-right:-36px;--ibiz-markdown-img-preview-width:32px;--ibiz-markdown-img-preview-height:32px}.ibiz-markdown__header{display:flex;flex-shrink:0;gap:var(--ibiz-markdown-spacing-manual-toolbar-gap);align-items:center;justify-content:end;height:var(--ibiz-markdown-spacing-manual-toolbar-height)}.ibiz-markdown__header--edit{cursor:pointer}.ibiz-markdown__header--full{cursor:pointer}.ibiz-markdown__header.is-fullscreen{position:fixed;top:0;right:0;left:0;z-index:999;width:100%;height:calc(var(--ibiz-markdown-spacing-manual-toolbar-fullscreen-height-header));padding:var(--ibiz-markdown-spacing-manual-toolbar-fullscreen-padding);margin-top:0;background-color:var(--ibiz-view-bg-color)}.ibiz-markdown__header.is-fullscreen+.ibiz-markdown-cherry .cherry.fullscreen{top:calc(var(--ibiz-markdown-spacing-manual-toolbar-fullscreen-height-header));height:calc(100% - var(--ibiz-markdown-spacing-manual-toolbar-fullscreen-height-header))}.ibiz-markdown__footer{display:flex;gap:var(--ibiz-markdown-spacing-manual-toolbar-gap);align-items:center;justify-content:end;height:var(--ibiz-markdown-spacing-manual-toolbar-height);margin:var(--ibiz-markdown-spacing-manual-toolbar-margin)}.ibiz-markdown__footer--save{height:var(--ibiz-markdown-height-manual-toolbar-height);padding:var(--ibiz-markdown-spacing-manual-toolbar-item-padding);line-height:var(--ibiz-markdown-height-manual-toolbar-height);color:var(--ibiz-markdown-color-manual-toolbar-text-save);text-align:center;cursor:pointer;background-color:var(--ibiz-markdown-color-manual-toolbar-bg-save);border-radius:var(--ibiz-markdown-border-radius-manual-toolbar-item)}.ibiz-markdown__footer--cancel{color:var(--ibiz-markdown-color-manual-toolbar-text-cancel);cursor:pointer}.ibiz-markdown__footer--cancel:hover{color:var(--ibiz-markdown-color-manual-toolbar-text-cancel-hover)}.ibiz-markdown__footer.is-fullscreen{position:fixed;right:0;bottom:0;left:0;z-index:999;width:100%;height:calc(var(--ibiz-markdown-spacing-manual-toolbar-fullscreen-height) * 2);padding:var(--ibiz-markdown-spacing-manual-toolbar-fullscreen-padding);margin-top:0;background-color:var(--ibiz-view-bg-color);border-top:var(--ibiz-markdown-border-manual-toolbar-fullscreen-footer)}.ibiz-markdown__footer.is-fullscreen+.ibiz-markdown-cherry .cherry.fullscreen{height:calc(100% - var(--ibiz-markdown-spacing-manual-toolbar-fullscreen-height) * 2)}.ibiz-markdown__img-preview.el-image{position:absolute;height:0}.ibiz-markdown__img-preview .el-image-viewer__wrapper{width:90%;height:90%;margin:auto}.ibiz-markdown__img-preview .el-image-viewer__mask{position:fixed;width:100vw;height:100vh;cursor:zoom-out;opacity:.7}.ibiz-markdown__img-preview .el-image-viewer__close{top:var(--ibiz-markdown-img-preview-top);right:var(--ibiz-markdown-img-preview-right);width:var(--ibiz-markdown-img-preview-width);height:var(--ibiz-markdown-img-preview-height)}.ibiz-markdown .ibiz-markdown-cherry{width:var(--ibiz-markdown-width);outline:0}.ibiz-markdown .ibiz-markdown-cherry .cherry{width:100%;border:1px solid var(--ibiz-color-border);box-shadow:none}.ibiz-markdown .ibiz-markdown-cherry .cherry .cherry-toolbar{box-shadow:none}.ibiz-markdown .ibiz-markdown-cherry .cherry .cherry-editor{border-top:1px solid var(--ibiz-color-border)}.ibiz-markdown .ibiz-markdown-cherry .cherry .cherry-previewer{border-top:1px solid var(--ibiz-color-border)}.ibiz-markdown .ibiz-markdown-cherry .cherry .cherry-previewer img{cursor:zoom-in}.ibiz-markdown .ibiz-markdown-cherry .cherry .cherry-sidebar{top:49px;border-left:1px solid var(--ibiz-color-border);box-shadow:none}.ibiz-markdown.is-disabled .cherry{min-height:auto}.ibiz-markdown.is-disabled .ibiz-markdown__fullscreen{position:absolute;top:8px;right:12px;z-index:98;font-size:var(--ibiz-font-size-regular);line-height:2.8}.ibiz-markdown.is-disabled .theme__dark .ibiz-markdown__fullscreen{color:var(--ibiz-color-text-0)}.ibiz-markdown.is-disabled .theme__dark .ibiz-markdown__fullscreen:hover{background-color:var(--ibiz-color-bg-3)}.ibiz-markdown.is-manual{display:flex;flex-direction:column}.ibiz-markdown.is-manual .ibiz-markdown-cherry{flex-grow:1;height:calc(100% - var(--ibiz-markdown-spacing-manual-toolbar-height))!important}.ibiz-markdown.is-manual.is-editing{flex-direction:column-reverse}.ibiz-markdown.is-manual .ibiz-markdown-menu{display:none}.ibiz-markdown.is-manual.is-editing .ibiz-markdown-menu{display:block}.ibiz-markdown.is-show-editor-switch-menu .ibiz-composite-form-item-ex-menu{--ibiz-composite-form-item-ex-menu-height:47px;--ibiz-composite-form-item-ex-menu-padding:var(--ibiz-spacing-tight) var(--ibiz-spacing-base-tight) 0;max-height:100%}.ibiz-markdown.is-show-editor-switch-menu .cherry-toolbar{padding-right:calc(var(--ibiz-composite-form-item-ex-menu-width) + var(--ibiz-spacing-extra-tight))}.ibiz-markdown.is-show-editor-switch-menu .ibiz-markdown-menu{position:absolute;top:1px;right:1px;z-index:var(--ibiz-composite-form-item-ex-menu-z-index);display:flex;align-items:center;height:calc(var(--ibiz-markdown-toolbar-height) - 1px);background:var(--ibiz-composite-form-item-ex-menu-bg-color);border-right:1px solid var(--ibiz-color-border);border-left:1px solid var(--ibiz-color-border)}.ibiz-markdown.is-show-editor-switch-menu .ibiz-markdown-menu.is-fullscreen{position:fixed;z-index:1000}.ibiz-markdown.is-show-editor-switch-menu .ibiz-markdown-menu .ibiz-composite-form-item-ex-menu{position:relative}.ibiz-markdown .cherry-preview--full{border-left:none}.ibiz-markdown .cherry-flex-toc__fixed{color:var(--ibiz-markdown-color-fixed-toc-text)}.ibiz-markdown .cherry-flex-toc__fixed.cherry-flex-toc__pure .cherry-toc-head{color:var(--ibiz-markdown-color-fixed-toc-arrow-text)}.ibiz-markdown .cherry-flex-toc__fixed:hover{z-index:100}.ibiz-markdown .theme__dark,.ibiz-markdown .theme__light{color:var(--ibiz-form-item-text-color)}.ibiz-markdown .cherry-markdown h1 a::before,.ibiz-markdown .cherry-markdown h2 a::before,.ibiz-markdown .cherry-markdown h3 a::before,.ibiz-markdown .cherry-markdown h4 a::before,.ibiz-markdown .cherry-markdown h5 a::before,.ibiz-markdown .cherry-markdown h6 a::before{display:none}.ibiz-markdown .cherry.fullscreen{z-index:999}.ibiz-markdown--light .theme__green .cherry-toolbar,.ibiz-markdown--light .theme__light .cherry-toolbar,.ibiz-markdown--light .theme__violet .cherry-toolbar{background-color:var(--ibiz-color-bg-0)}.ibiz-markdown--light .theme__dark.cherry .cherry-flex-toc{color:var(--ibiz-markdown-color-toc-header-text)}.ibiz-markdown--light .theme__dark.cherry ::-webkit-scrollbar-thumb{background:var(--ibiz-markdown-color-light-scrollbar-thumb-dark)}.ibiz-markdown--light .theme__dark.cherry ::-webkit-scrollbar-thumb:hover{background:var(--ibiz-markdown-color-scrollbar-thumb-dark-hover)}.ibiz-markdown--dark.ibiz-markdown-cherry .cherry{border:1px solid var(--ibiz-markdown-color-dark-mardown-border)}.ibiz-markdown--dark .theme__green .cherry-toolbar,.ibiz-markdown--dark .theme__light .cherry-toolbar,.ibiz-markdown--dark .theme__violet .cherry-toolbar{background-color:var(--ibiz-color-shadow)}.ibiz-markdown--dark .theme__dark.cherry .cherry-toc-head{color:var(--ibiz-markdown-color-dark-toc-text)}.ibiz-markdown--dark .theme__dark.cherry ::-webkit-scrollbar-thumb{background:var(--ibiz-markdown-color-dark-scrollbar-thumb-dark)}.ibiz-markdown--dark .theme__dark.cherry ::-webkit-scrollbar-thumb:hover{background:var(--ibiz-markdown-color-scrollbar-thumb-dark-hover)}