@ibiz-template/vue3-components 0.7.41-alpha.39 → 0.7.41-alpha.40

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 (58) hide show
  1. package/dist/ibiz-markdown-editor-CxFS8frQ.js +1 -0
  2. package/dist/index-2eZnbrr4.js +11 -0
  3. package/dist/index.min.css +1 -1
  4. package/dist/index.system.min.js +1 -1
  5. package/dist/wang-editor-BPl509oX.js +1 -0
  6. package/dist/{xlsx-util-DpgMzatq.js → xlsx-util-Cg5zMYCC.js} +1 -1
  7. package/es/control/form/form-detail/form-item/composite-form-item-ex/composite-form-item-ex.controller.mjs +146 -0
  8. package/es/control/form/form-detail/form-item/composite-form-item-ex/composite-form-item-ex.css +1 -0
  9. package/es/control/form/form-detail/form-item/composite-form-item-ex/composite-form-item-ex.mjs +165 -0
  10. package/es/control/form/form-detail/form-item/composite-form-item-ex/composite-form-item-ex.provider.mjs +21 -0
  11. package/es/control/form/form-detail/form-item/composite-form-item-ex/composite-form-item-ex.state.mjs +22 -0
  12. package/es/control/form/form-detail/form-item/composite-form-item-ex/index.mjs +16 -0
  13. package/es/control/form/form-detail/form-item/index.mjs +2 -0
  14. package/es/control/grid/grid/grid.css +1 -1
  15. package/es/control/grid/grid-column/grid-field-column/grid-field-column.css +1 -1
  16. package/es/editor/code/code-editor.controller.mjs +17 -1
  17. package/es/editor/data-picker/ibiz-picker-dropdown/ibiz-picker-dropdown.css +1 -1
  18. package/es/editor/html/html-editor.controller.mjs +21 -2
  19. package/es/editor/html/wang-editor/wang-editor.css +1 -1
  20. package/es/editor/html/wang-editor/wang-editor.mjs +7 -4
  21. package/es/editor/markdown/ibiz-markdown-editor/custom-menu.mjs +1 -1
  22. package/es/editor/markdown/ibiz-markdown-editor/ibiz-markdown-editor.css +1 -1
  23. package/es/editor/markdown/ibiz-markdown-editor/ibiz-markdown-editor.mjs +27 -6
  24. package/es/editor/markdown/ibiz-markdown-editor/render-util.mjs +88 -0
  25. package/es/editor/markdown/markdown-editor.controller.mjs +21 -5
  26. package/es/util/ai-util/ai-util.mjs +17 -1
  27. package/es/util/app-util/app-util.mjs +24 -8
  28. package/es/util/inline-ai-util/inline-ai-textarea/inline-ai-textarea.hook.mjs +38 -5
  29. package/es/util/inline-ai-util/inline-ai-textarea/inline-ai-textarea.mjs +24 -16
  30. package/es/util/inline-ai-util/inline-ai-util.mjs +3 -2
  31. package/lib/control/form/form-detail/form-item/composite-form-item-ex/composite-form-item-ex.cjs +170 -0
  32. package/lib/control/form/form-detail/form-item/composite-form-item-ex/composite-form-item-ex.controller.cjs +148 -0
  33. package/lib/control/form/form-detail/form-item/composite-form-item-ex/composite-form-item-ex.css +1 -0
  34. package/lib/control/form/form-detail/form-item/composite-form-item-ex/composite-form-item-ex.provider.cjs +23 -0
  35. package/lib/control/form/form-detail/form-item/composite-form-item-ex/composite-form-item-ex.state.cjs +24 -0
  36. package/lib/control/form/form-detail/form-item/composite-form-item-ex/index.cjs +20 -0
  37. package/lib/control/form/form-detail/form-item/index.cjs +2 -0
  38. package/lib/control/grid/grid/grid.css +1 -1
  39. package/lib/control/grid/grid-column/grid-field-column/grid-field-column.css +1 -1
  40. package/lib/editor/code/code-editor.controller.cjs +17 -1
  41. package/lib/editor/data-picker/ibiz-picker-dropdown/ibiz-picker-dropdown.css +1 -1
  42. package/lib/editor/html/html-editor.controller.cjs +21 -2
  43. package/lib/editor/html/wang-editor/wang-editor.cjs +7 -4
  44. package/lib/editor/html/wang-editor/wang-editor.css +1 -1
  45. package/lib/editor/markdown/ibiz-markdown-editor/custom-menu.cjs +1 -1
  46. package/lib/editor/markdown/ibiz-markdown-editor/ibiz-markdown-editor.cjs +27 -6
  47. package/lib/editor/markdown/ibiz-markdown-editor/ibiz-markdown-editor.css +1 -1
  48. package/lib/editor/markdown/ibiz-markdown-editor/render-util.cjs +90 -0
  49. package/lib/editor/markdown/markdown-editor.controller.cjs +21 -5
  50. package/lib/util/ai-util/ai-util.cjs +17 -0
  51. package/lib/util/app-util/app-util.cjs +23 -7
  52. package/lib/util/inline-ai-util/inline-ai-textarea/inline-ai-textarea.cjs +23 -15
  53. package/lib/util/inline-ai-util/inline-ai-textarea/inline-ai-textarea.hook.cjs +38 -5
  54. package/lib/util/inline-ai-util/inline-ai-util.cjs +3 -2
  55. package/package.json +5 -5
  56. package/dist/ibiz-markdown-editor-D4Og0fLv.js +0 -1
  57. package/dist/index-DHKZJQyN.js +0 -11
  58. package/dist/wang-editor-BYeoazrn.js +0 -1
@@ -1 +1 @@
1
- .ibiz-html{--ibiz-html-height:300px;display:inline-block;width:100%;height:100%}.ibiz-html .ibiz-html-content{display:flex;flex-direction:column;height:100%;background-color:var(--ibiz-color-bg-0)}.ibiz-html .ibiz-html-editor{height:var(--ibiz-html-height)!important;padding:0;overflow-y:scroll;border:1px solid var(--ibiz-color-border)}.ibiz-html .ibiz-html-editor.is-readonly{height:auto!important}.ibiz-html .ibiz-html-editor table{width:100%!important;border-collapse:collapse}.ibiz-html .ibiz-html-editor table th{height:var(--ibiz-height-control-large);min-height:var(--ibiz-height-control-large);padding:var(--ibiz-spacing-tight);border:1px solid var(--ibiz-color-border)}.ibiz-html .ibiz-html-editor table td{height:var(--ibiz-height-control-large);min-height:var(--ibiz-height-control-large);padding:var(--ibiz-spacing-tight);empty-cells:show;border:1px solid var(--ibiz-color-border)}.ibiz-html{--w-e-textarea-bg-color:var(--ibiz-color-bg-1);--w-e-textarea-color:var(--ibiz-color-text-2);--w-e-textarea-border-color:var(--ibiz-color-border);--w-e-textarea-slight-border-color:var(--ibiz-color-border);--w-e-textarea-slight-color:var(--ibiz-color-text-3);--w-e-textarea-slight-bg-color:var(--ibiz-color-bg-1);--w-e-textarea-selected-border-color:var(--ibiz-color-border);--w-e-textarea-handler-bg-color:var(--ibiz-color-primary);--w-e-toolbar-color:var(--ibiz-color-text-0);--w-e-toolbar-bg-color:var(--ibiz-color-bg-1);--w-e-toolbar-active-color:var(--ibiz-color-text-0);--w-e-toolbar-active-bg-color:var(--ibiz-color-bg-1);--w-e-toolbar-disabled-color:var(--ibiz-color-disabled-text);--w-e-toolbar-border-color:var(--ibiz-color-border);--w-e-modal-button-bg-color:var(--ibiz-color-bg-1);--w-e-modal-button-border-color:var(--ibiz-color-border)}.ibiz-html .w-e-menu-tooltip-v5::before{color:var(--ibiz-color-text-0);background-color:var(--w-e-toolbar-bg-color)}.ibiz-html .w-e-full-screen-container{z-index:9999}.ibiz-html .w-e-scroll>div{background-color:var(--ibiz-color-bg-1)}.ibiz-html .table-container table{width:100%}.ibiz-html.is-enable-edit .w-e-bar-item>button{color:var(--w-e-toolbar-color);cursor:pointer}.ibiz-html.is-enable-edit .w-e-bar-item>button svg{fill:var(--w-e-toolbar-color)}.ibiz-html-editor-readonly .ibiz-html-toolbar{display:none}.ibiz-html-editor-readonly .ibiz-html-editor{border:none}.ibiz-html-toolbar .w-e-toolbar{background-color:var(--ibiz-color-bg-0);border:1px solid var(--ibiz-color-border);border-bottom:none;box-shadow:none}.ibiz-html-toolbar .w-e-toolbar .w-e-bar-item>button:hover{background-color:var(--ibiz-color-bg-0)}.ibiz-html-footer{display:flex;align-items:center;justify-content:end;margin-top:var(--ibiz-spacing-base-tight);margin-right:var(--ibiz-spacing-tight)}.ibiz-html-footer>*+*{margin-left:var(--ibiz-spacing-base)}.ibiz-html-footer__cancel{height:var(--ibiz-height-control-default);line-height:var(--ibiz-height-control-default);color:var(--ibiz-color-text-1);cursor:pointer;opacity:.7}.ibiz-html-footer__cancel:hover{color:var(--ibiz-color-primary);opacity:1}.ibiz-html-footer__save{height:var(--ibiz-height-control-default);padding:0 var(--ibiz-spacing-base);line-height:var(--ibiz-height-control-default);color:var(--ibiz-color-primary-active-text);text-align:center;cursor:pointer;background-color:var(--ibiz-color-primary);border-radius:var(--ibiz-border-radius-small)}.ibiz-html-custom-toolbar{display:flex;align-items:center;justify-content:end;width:100%;height:var(--ibiz-height-control-default);padding-right:var(--ibiz-spacing-base);font-size:var(--ibiz-font-size-header-6)}.ibiz-html-custom-toolbar>*+*{margin-left:var(--ibiz-spacing-base-loose)}.ibiz-html-custom-toolbar i{cursor:pointer}.ibiz-html-custom-toolbar i:hover{color:var(--ibiz-color-primary)}.ibiz-html-message{width:500px;max-width:unset}.ibiz-html-message__message-content--message-tip{color:var(--ibiz-color-text-3)}.ibiz-html-message__message-cancel{color:var(--ibiz-color-text-1);background-color:transparent}.ibiz-html-message__message-cancel:hover{color:var(--ibiz-color-primary);background-color:transparent}.ibiz-html-message__message-comfire{background-color:var(--ibiz-color-danger)!important}.ibiz-html-message__message-comfire:hover{box-shadow:0 2px 5px 1px var(--ibiz-color-danger)}.ibiz-html-dialog-full-screen{height:80%}.ibiz-html-dialog-full-screen .el-dialog__header{display:none}.ibiz-html-dialog-full-screen .el-dialog__body{height:100%;padding-top:0}.ibiz-html-dialog-full-screen.is-editing .el-dialog__body{padding-bottom:0}.ibiz-html-dialog-full-screen .ibiz-html{padding:0;--w-e-toolbar-bg-color:var(--ibiz-color-bg-0)}.ibiz-html-dialog-full-screen .ibiz-html-custom-toolbar{height:56px;padding-right:0}.ibiz-html-dialog-full-screen .ibiz-html-content{height:calc(100% - 56px)}.ibiz-html-dialog-full-screen .ibiz-html-content .ibiz-html-editor{height:100%!important}.ibiz-html-dialog-full-screen .ibiz-html-content.is-editing{height:calc(100% - 128px)}.ibiz-html-footer-dialog{height:68px;margin-top:0;margin-right:0}emoji-elem{margin:0 1px!important}
1
+ .ibiz-html{--ibiz-html-height:300px;display:inline-block;width:100%;height:100%}.ibiz-html .ibiz-html-content{display:flex;flex-direction:column;height:100%;background-color:var(--ibiz-color-bg-0)}.ibiz-html .ibiz-html-editor{height:var(--ibiz-html-height)!important;padding:0;overflow-y:scroll;border:1px solid var(--ibiz-color-border)}.ibiz-html .ibiz-html-editor.is-readonly{height:auto!important}.ibiz-html .ibiz-html-editor table{width:100%!important;border-collapse:collapse}.ibiz-html .ibiz-html-editor table th{height:var(--ibiz-height-control-large);min-height:var(--ibiz-height-control-large);padding:var(--ibiz-spacing-tight);border:1px solid var(--ibiz-color-border)}.ibiz-html .ibiz-html-editor table td{height:var(--ibiz-height-control-large);min-height:var(--ibiz-height-control-large);padding:var(--ibiz-spacing-tight);empty-cells:show;border:1px solid var(--ibiz-color-border)}.ibiz-html{--w-e-textarea-bg-color:var(--ibiz-color-bg-1);--w-e-textarea-color:var(--ibiz-color-text-2);--w-e-textarea-border-color:var(--ibiz-color-border);--w-e-textarea-slight-border-color:var(--ibiz-color-border);--w-e-textarea-slight-color:var(--ibiz-color-text-3);--w-e-textarea-slight-bg-color:var(--ibiz-color-bg-1);--w-e-textarea-selected-border-color:var(--ibiz-color-border);--w-e-textarea-handler-bg-color:var(--ibiz-color-primary);--w-e-toolbar-color:var(--ibiz-color-text-0);--w-e-toolbar-bg-color:var(--ibiz-color-bg-1);--w-e-toolbar-active-color:var(--ibiz-color-text-0);--w-e-toolbar-active-bg-color:var(--ibiz-color-bg-1);--w-e-toolbar-disabled-color:var(--ibiz-color-disabled-text);--w-e-toolbar-border-color:var(--ibiz-color-border);--w-e-modal-button-bg-color:var(--ibiz-color-bg-1);--w-e-modal-button-border-color:var(--ibiz-color-border)}.ibiz-html .w-e-menu-tooltip-v5::before{color:var(--ibiz-color-text-0);background-color:var(--w-e-toolbar-bg-color)}.ibiz-html .w-e-full-screen-container{z-index:9999}.ibiz-html .w-e-scroll>div{background-color:var(--ibiz-color-bg-1)}.ibiz-html .table-container table{width:100%}.ibiz-html.is-enable-edit .w-e-bar-item>button{color:var(--w-e-toolbar-color);cursor:pointer}.ibiz-html.is-enable-edit .w-e-bar-item>button svg{fill:var(--w-e-toolbar-color)}.ibiz-html.is-show-editor-switch-menu .ibiz-html-content{position:relative}.ibiz-html.is-show-editor-switch-menu .ibiz-composite-form-item-ex-menu{--ibiz-composite-form-item-ex-menu-height:41px}.ibiz-html.is-show-editor-switch-menu .ibiz-html-toolbar>.w-e-toolbar.w-e-bar{padding-right:var(--ibiz-composite-form-item-ex-menu-width)}.ibiz-html-editor-readonly .ibiz-html-toolbar{display:none}.ibiz-html-editor-readonly .ibiz-html-editor{border:none}.ibiz-html-editor-readonly .ibiz-composite-form-item-ex-menu{display:none}.ibiz-html-toolbar .w-e-toolbar{background-color:var(--ibiz-color-bg-0);border:1px solid var(--ibiz-color-border);border-bottom:none;box-shadow:none}.ibiz-html-toolbar .w-e-toolbar .w-e-bar-item>button:hover{background-color:var(--ibiz-color-bg-0)}.ibiz-html-footer{display:flex;align-items:center;justify-content:end;margin-top:var(--ibiz-spacing-base-tight);margin-right:var(--ibiz-spacing-tight)}.ibiz-html-footer>*+*{margin-left:var(--ibiz-spacing-base)}.ibiz-html-footer__cancel{height:var(--ibiz-height-control-default);line-height:var(--ibiz-height-control-default);color:var(--ibiz-color-text-1);cursor:pointer;opacity:.7}.ibiz-html-footer__cancel:hover{color:var(--ibiz-color-primary);opacity:1}.ibiz-html-footer__save{height:var(--ibiz-height-control-default);padding:0 var(--ibiz-spacing-base);line-height:var(--ibiz-height-control-default);color:var(--ibiz-color-primary-active-text);text-align:center;cursor:pointer;background-color:var(--ibiz-color-primary);border-radius:var(--ibiz-border-radius-small)}.ibiz-html-custom-toolbar{display:flex;align-items:center;justify-content:end;width:100%;height:var(--ibiz-height-control-default);padding-right:var(--ibiz-spacing-base);font-size:var(--ibiz-font-size-header-6)}.ibiz-html-custom-toolbar>*+*{margin-left:var(--ibiz-spacing-base-loose)}.ibiz-html-custom-toolbar i{cursor:pointer}.ibiz-html-custom-toolbar i:hover{color:var(--ibiz-color-primary)}.ibiz-html-message{width:500px;max-width:unset}.ibiz-html-message__message-content--message-tip{color:var(--ibiz-color-text-3)}.ibiz-html-message__message-cancel{color:var(--ibiz-color-text-1);background-color:transparent}.ibiz-html-message__message-cancel:hover{color:var(--ibiz-color-primary);background-color:transparent}.ibiz-html-message__message-comfire{background-color:var(--ibiz-color-danger)!important}.ibiz-html-message__message-comfire:hover{box-shadow:0 2px 5px 1px var(--ibiz-color-danger)}.ibiz-html-dialog-full-screen{height:80%}.ibiz-html-dialog-full-screen .el-dialog__header{display:none}.ibiz-html-dialog-full-screen .el-dialog__body{height:100%;padding-top:0}.ibiz-html-dialog-full-screen.is-editing .el-dialog__body{padding-bottom:0}.ibiz-html-dialog-full-screen .ibiz-html{padding:0;--w-e-toolbar-bg-color:var(--ibiz-color-bg-0)}.ibiz-html-dialog-full-screen .ibiz-html-custom-toolbar{height:56px;padding-right:0}.ibiz-html-dialog-full-screen .ibiz-html-content{height:calc(100% - 56px)}.ibiz-html-dialog-full-screen .ibiz-html-content .ibiz-html-editor{height:100%!important}.ibiz-html-dialog-full-screen .ibiz-html-content.is-editing{height:calc(100% - 128px)}.ibiz-html-footer-dialog{height:68px;margin-top:0;margin-right:0}emoji-elem{margin:0 1px!important}
@@ -16,7 +16,7 @@ function initCustomMenu(c) {
16
16
  vue.nextTick(() => {
17
17
  var _a;
18
18
  if ((_a = c.mdeditor) == null ? void 0 : _a.bubble) {
19
- c.mdeditor.bubble.visible = true;
19
+ c.mdeditor.bubble.showBubble();
20
20
  const selectionPosition = c.mdeditor.bubble.bubbleDom.getBoundingClientRect();
21
21
  if (!selectionPosition || !selectionPosition.left || !selectionPosition.top)
22
22
  return;
@@ -6,8 +6,9 @@ var vue = require('vue');
6
6
  var vue3Util = require('@ibiz-template/vue3-util');
7
7
  var qxUtil = require('qx-util');
8
8
  var Cherry = require('cherry-markdown');
9
- require('./ibiz-markdown-editor.css');
10
9
  var customMenu = require('./custom-menu.cjs');
10
+ var renderUtil = require('./render-util.cjs');
11
+ require('./ibiz-markdown-editor.css');
11
12
 
12
13
  "use strict";
13
14
  const IBizMarkDown = /* @__PURE__ */ vue.defineComponent({
@@ -15,7 +16,8 @@ const IBizMarkDown = /* @__PURE__ */ vue.defineComponent({
15
16
  props: vue3Util.getMarkDownProps(),
16
17
  emits: vue3Util.getEditorEmits(),
17
18
  setup(props, {
18
- emit
19
+ emit,
20
+ slots
19
21
  }) {
20
22
  var _a, _b, _c;
21
23
  const ns = vue3Util.useNamespace("markdown");
@@ -24,6 +26,10 @@ const IBizMarkDown = /* @__PURE__ */ vue.defineComponent({
24
26
  let editor = null;
25
27
  const id = qxUtil.createUUID();
26
28
  const [AIMenu] = customMenu.initCustomMenu(c);
29
+ const {
30
+ onMDEditorCreated,
31
+ renderImgPreview
32
+ } = renderUtil.useImgPreviewRender(ns);
27
33
  const uploadHeaders = ibiz.util.file.getUploadHeaders();
28
34
  const headers = vue.ref({
29
35
  ...uploadHeaders
@@ -44,6 +50,7 @@ const IBizMarkDown = /* @__PURE__ */ vue.defineComponent({
44
50
  let resizeObserver = null;
45
51
  let lastMarkDownWidth = 0;
46
52
  const cssVars = vue.ref({});
53
+ const lastDirectoryState = vue.ref("full");
47
54
  let isIgnoreChange = false;
48
55
  vue.watch(() => props.data, (newVal) => {
49
56
  if (newVal && c) {
@@ -205,9 +212,12 @@ const IBizMarkDown = /* @__PURE__ */ vue.defineComponent({
205
212
  if (editor && markDownBox.value) {
206
213
  if (isFullscreen()) {
207
214
  closeFullscreen();
215
+ editor.toggleToc(lastDirectoryState.value);
208
216
  isFullScreen.value = false;
209
217
  } else {
210
218
  openFullscreen();
219
+ lastDirectoryState.value = editor.toc.model;
220
+ editor.toggleToc("full");
211
221
  isFullScreen.value = true;
212
222
  }
213
223
  }
@@ -218,6 +228,7 @@ const IBizMarkDown = /* @__PURE__ */ vue.defineComponent({
218
228
  _e.preventDefault();
219
229
  if (isFullscreen()) {
220
230
  closeFullscreen();
231
+ editor.toggleToc(lastDirectoryState.value);
221
232
  isFullScreen.value = false;
222
233
  }
223
234
  }
@@ -344,6 +355,7 @@ const IBizMarkDown = /* @__PURE__ */ vue.defineComponent({
344
355
  const parentElement = props.disabled ? editor.editor.options.editorDom.parentElement : (_a2 = editor.editor.options.editorDom.parentElement) == null ? void 0 : _a2.querySelector(".cherry-toolbar>.toolbar-right");
345
356
  parentElement == null ? void 0 : parentElement.appendChild(span);
346
357
  c == null ? void 0 : c.setMDEditor(editor);
358
+ onMDEditorCreated(editor);
347
359
  });
348
360
  };
349
361
  vue.watch(() => UIStore.theme, (newVal) => {
@@ -443,6 +455,12 @@ const IBizMarkDown = /* @__PURE__ */ vue.defineComponent({
443
455
  }, [ibiz.i18n.t("editor.common.confirm")])]);
444
456
  }
445
457
  };
458
+ const renderEditorSwitchMenu = () => {
459
+ var _a2;
460
+ return vue.createVNode("div", {
461
+ "class": [ns.b("menu"), ns.is("fullscreen", isFullScreen.value)]
462
+ }, [(_a2 = slots.editorSwitchMenu) == null ? void 0 : _a2.call(slots)]);
463
+ };
446
464
  vue.onMounted(() => {
447
465
  var _a2;
448
466
  editorInit();
@@ -475,18 +493,21 @@ const IBizMarkDown = /* @__PURE__ */ vue.defineComponent({
475
493
  getCherryContent,
476
494
  setCherryContent,
477
495
  renderHeader,
478
- renderFooter
496
+ renderFooter,
497
+ renderImgPreview,
498
+ renderEditorSwitchMenu
479
499
  };
480
500
  },
481
501
  render() {
502
+ const isShowEditorSwitchMenu = !!this.$slots.editorSwitchMenu;
482
503
  return vue.createVNode("div", {
483
504
  "ref": "markDownBox",
484
- "class": [this.ns.b(), this.ns.is("disabled", this.disabled), this.ns.is("manual", this.showmode === "manual"), this.ns.is("editing", this.isEditing)]
485
- }, [this.renderHeader(), this.renderFooter(), vue.createVNode("div", {
505
+ "class": [this.ns.b(), this.ns.is("disabled", this.disabled), this.ns.is("manual", this.showmode === "manual"), this.ns.is("editing", this.isEditing), this.ns.is("show-editor-switch-menu", isShowEditorSwitchMenu)]
506
+ }, [isShowEditorSwitchMenu ? this.renderEditorSwitchMenu() : null, this.renderHeader(), this.renderFooter(), this.renderImgPreview(), vue.createVNode("div", {
486
507
  "tabindex": "-1",
487
508
  "id": this.id,
488
509
  "style": this.cssVars,
489
- "class": this.ns.b("cherry")
510
+ "class": [this.ns.b("cherry"), this.ns.m(this.theme === "dark" ? "dark" : "light")]
490
511
  }, null)]);
491
512
  }
492
513
  });
@@ -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-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__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 .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{background-color:var(--ibiz-color-bg-0);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-sidebar{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 .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}
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{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:48px;--ibiz-composite-form-item-ex-menu-padding:var(--ibiz-spacing-tight) var(--ibiz-spacing-tight) 0}.ibiz-markdown.is-show-editor-switch-menu .cherry-toolbar{padding-right:var(--ibiz-composite-form-item-ex-menu-width)}.ibiz-markdown.is-show-editor-switch-menu .ibiz-markdown-menu{position:absolute;top:0;right:0}.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)}
@@ -0,0 +1,90 @@
1
+ 'use strict';
2
+
3
+ var vue = require('vue');
4
+
5
+ "use strict";
6
+ function isElement(element, nodeName) {
7
+ return !!(element && element.nodeType === 1 && element.nodeName === nodeName);
8
+ }
9
+ function useImgPreviewRender(ns) {
10
+ const imgPreviewUrl = vue.ref("");
11
+ const imgPreviewUrlList = vue.ref([]);
12
+ const imgPreviewRef = vue.ref();
13
+ let mdPreviewerDom = null;
14
+ const openImgPreview = async (url) => {
15
+ var _a;
16
+ imgPreviewUrl.value = url;
17
+ imgPreviewUrlList.value = [url];
18
+ await vue.nextTick();
19
+ if (imgPreviewRef.value) {
20
+ const {
21
+ container
22
+ } = imgPreviewRef.value.$refs;
23
+ if (container) {
24
+ (_a = container.children[0]) == null ? void 0 : _a.click();
25
+ }
26
+ }
27
+ };
28
+ const handleKeyPress = (event) => {
29
+ if (event.key === "Escape" || event.keyCode === 27) {
30
+ event.stopPropagation();
31
+ event.preventDefault();
32
+ imgPreviewUrlList.value = [];
33
+ removeKeydownListener();
34
+ }
35
+ };
36
+ const addKeydownListener = async () => {
37
+ var _a;
38
+ await vue.nextTick();
39
+ const container = (_a = imgPreviewRef.value) == null ? void 0 : _a.$refs.container;
40
+ if (!container)
41
+ return;
42
+ const imgViewerWrapper = container.querySelector(".el-image-viewer__wrapper");
43
+ imgViewerWrapper == null ? void 0 : imgViewerWrapper.addEventListener("keydown", handleKeyPress);
44
+ };
45
+ const removeKeydownListener = () => {
46
+ var _a;
47
+ const container = (_a = imgPreviewRef.value) == null ? void 0 : _a.$refs.container;
48
+ if (!container)
49
+ return;
50
+ const imgViewerWrapper = container.querySelector(".el-image-viewer__wrapper");
51
+ imgViewerWrapper == null ? void 0 : imgViewerWrapper.removeEventListener("keydown", handleKeyPress);
52
+ };
53
+ const handlePreviewerImgClick = (event) => {
54
+ var _a;
55
+ const imgUrl = (_a = event == null ? void 0 : event.target) == null ? void 0 : _a.src;
56
+ if (isElement(event == null ? void 0 : event.target, "IMG") && imgUrl) {
57
+ openImgPreview(imgUrl);
58
+ }
59
+ };
60
+ const renderImgPreview = () => {
61
+ return vue.createVNode(vue.resolveComponent("el-image"), {
62
+ "class": ns.e("img-preview"),
63
+ "ref": imgPreviewRef,
64
+ "zoom-rate": 1.1,
65
+ "src": imgPreviewUrl.value,
66
+ "preview-src-list": imgPreviewUrlList.value,
67
+ "hide-on-click-modal": true,
68
+ "onShow": addKeydownListener,
69
+ "fit": "cover"
70
+ }, null);
71
+ };
72
+ const onMDEditorCreated = (mdeditor) => {
73
+ var _a, _b;
74
+ mdPreviewerDom = ((_b = (_a = mdeditor == null ? void 0 : mdeditor.previewer) == null ? void 0 : _a.previewerBubble) == null ? void 0 : _b.previewerDom) || null;
75
+ mdPreviewerDom == null ? void 0 : mdPreviewerDom.addEventListener("click", handlePreviewerImgClick);
76
+ };
77
+ vue.onBeforeUnmount(() => {
78
+ if (mdPreviewerDom) {
79
+ mdPreviewerDom.removeEventListener("click", handlePreviewerImgClick);
80
+ mdPreviewerDom = null;
81
+ }
82
+ removeKeydownListener();
83
+ });
84
+ return {
85
+ renderImgPreview,
86
+ onMDEditorCreated
87
+ };
88
+ }
89
+
90
+ exports.useImgPreviewRender = useImgPreviewRender;
@@ -2,6 +2,7 @@
2
2
 
3
3
  var core = require('@ibiz-template/core');
4
4
  var runtime = require('@ibiz-template/runtime');
5
+ var ramda = require('ramda');
5
6
 
6
7
  "use strict";
7
8
  var __defProp = Object.defineProperty;
@@ -105,6 +106,13 @@ class MarkDownEditorController extends runtime.EditorController {
105
106
  * @memberof MarkDownEditorController
106
107
  */
107
108
  __publicField(this, "currentEditorTheme", "light");
109
+ /**
110
+ * AI行内聊天框高度
111
+ *
112
+ * @type {number}
113
+ * @memberof MarkDownEditorController
114
+ */
115
+ __publicField(this, "inlineAiChatHeight");
108
116
  }
109
117
  async onInit() {
110
118
  await super.onInit();
@@ -112,7 +120,7 @@ class MarkDownEditorController extends runtime.EditorController {
112
120
  this.style.height = "600px";
113
121
  }
114
122
  if (this.editorParams) {
115
- const { uploadparams, exportparams } = this.editorParams;
123
+ const { uploadparams, exportparams, inlineaichatheight } = this.editorParams;
116
124
  if (uploadparams) {
117
125
  try {
118
126
  this.uploadParams = JSON.parse(uploadparams);
@@ -133,6 +141,9 @@ class MarkDownEditorController extends runtime.EditorController {
133
141
  );
134
142
  }
135
143
  }
144
+ if (inlineaichatheight) {
145
+ this.inlineAiChatHeight = Number(inlineaichatheight);
146
+ }
136
147
  }
137
148
  const model = this.model;
138
149
  if (model.appDEACModeId) {
@@ -314,9 +325,12 @@ class MarkDownEditorController extends runtime.EditorController {
314
325
  * @memberof MarkDownEditorController
315
326
  */
316
327
  getInLineAiChatOptions() {
317
- var _a, _b, _c;
328
+ var _a, _b, _c, _d, _e;
318
329
  const editorRect = (_a = this.mdeditor) == null ? void 0 : _a.wrapperDom.getBoundingClientRect();
319
- const bubbleRect = (_b = this.mdeditor) == null ? void 0 : _b.bubble.bubbleDom.getBoundingClientRect();
330
+ if (!((_b = this.mdeditor) == null ? void 0 : _b.bubble.visible)) {
331
+ (_c = this.mdeditor) == null ? void 0 : _c.bubble.showBubble();
332
+ }
333
+ const bubbleRect = (_d = this.mdeditor) == null ? void 0 : _d.bubble.bubbleDom.getBoundingClientRect();
320
334
  return {
321
335
  // 编辑器的左侧距离 + 10px
322
336
  left: editorRect.left + 10,
@@ -324,8 +338,9 @@ class MarkDownEditorController extends runtime.EditorController {
324
338
  top: bubbleRect.top,
325
339
  // 编辑器的宽度 - 右侧工具栏的宽度(38px) - 左侧边距(10px)- 右侧边距(10px)
326
340
  width: editorRect.width - 58,
327
- editorElement: (_c = this.mdeditor) == null ? void 0 : _c.wrapperDom,
328
- editorTheme: this.getCurrentTheme()
341
+ editorElement: (_e = this.mdeditor) == null ? void 0 : _e.wrapperDom,
342
+ editorTheme: this.getCurrentTheme(),
343
+ height: this.inlineAiChatHeight
329
344
  };
330
345
  }
331
346
  /**
@@ -348,6 +363,7 @@ class MarkDownEditorController extends runtime.EditorController {
348
363
  */
349
364
  async doInLineAIUIAction(uiActionId, appId) {
350
365
  const eventArgs = this.ctrl.getEventArgs();
366
+ eventArgs.params = ramda.clone(eventArgs.params);
351
367
  eventArgs.params.editor = this;
352
368
  if (this.editorParams.srfaiappendcurdata && this.editorParams.srfaiappendcurdata === "true") {
353
369
  eventArgs.context.srfaiappendcurdata = true;
@@ -1,5 +1,7 @@
1
1
  'use strict';
2
2
 
3
+ var runtime = require('@ibiz-template/runtime');
4
+
3
5
  "use strict";
4
6
  function calcAiToolbarItemsByAc(deACMode) {
5
7
  var _a, _b;
@@ -50,5 +52,20 @@ function calcAiToolbarItemsByAc(deACMode) {
50
52
  inlineToolbarItems
51
53
  };
52
54
  }
55
+ const getAIAgentList = async (context, params) => {
56
+ const emptyList = [];
57
+ const app = ibiz.hub.getApp(ibiz.env.appId);
58
+ const aiAgentUtil = app.getAppUtil("DYNAMICAIGENT", "CUSTOM");
59
+ if (!aiAgentUtil) {
60
+ return emptyList;
61
+ }
62
+ const utilService = new runtime.UtilService(aiAgentUtil);
63
+ const data = await utilService.load("", context, params);
64
+ if (!data || data.length === 0) {
65
+ return emptyList;
66
+ }
67
+ return data;
68
+ };
53
69
 
54
70
  exports.calcAiToolbarItemsByAc = calcAiToolbarItemsByAc;
71
+ exports.getAIAgentList = getAIAgentList;
@@ -239,6 +239,7 @@ class AppUtil {
239
239
  appDEACModeId,
240
240
  appDataEntityId
241
241
  } = chartParams;
242
+ const aiAgentlist = await aiUtil.getAIAgentList(context, params);
242
243
  const exParams = this.computeAiExParams(context, params, data);
243
244
  const deACMode = await runtime.getDeACMode(
244
245
  appDEACModeId,
@@ -311,11 +312,19 @@ class AppUtil {
311
312
  footerToolbarItems,
312
313
  questionToolbarItems,
313
314
  otherToolbarItems,
314
- question: async (aiChat, ctx, param, other, arr, sessionid) => {
315
+ aiAgentlist,
316
+ question: async (aiChat, ctx, param, other, arr, sessionid, srfaiagent) => {
315
317
  id = qxUtil.createUUID();
316
318
  abortController = new AbortController();
317
319
  const deService = await ibiz.hub.getApp(ctx.srfappid).deService.getService(ctx, other.appDataEntityId);
318
320
  try {
321
+ const questionRequestData = {
322
+ messages: arr,
323
+ sessionid
324
+ };
325
+ if (srfaiagent) {
326
+ questionRequestData.srfaiagent = srfaiagent;
327
+ }
319
328
  await deService.aiChatSse(
320
329
  (msg) => {
321
330
  if (msg.actionstate === 20 && msg.actionresult) {
@@ -351,10 +360,7 @@ class AppUtil {
351
360
  abortController,
352
361
  ctx,
353
362
  param,
354
- {
355
- messages: arr,
356
- sessionid
357
- }
363
+ { ...questionRequestData }
358
364
  );
359
365
  } catch (error) {
360
366
  aiChat.replaceMessage({
@@ -386,11 +392,21 @@ class AppUtil {
386
392
  },
387
393
  history: async (ctx, param, other) => {
388
394
  const deService = await ibiz.hub.getApp(ctx.srfappid).deService.getService(ctx, other.appDataEntityId);
389
- const historyData = other.appendCurData ? other.appendCurData : {};
395
+ const historyRequestData = {};
396
+ if (other.appendCurData) {
397
+ Object.assign(historyRequestData, {
398
+ ...other.appendCurData
399
+ });
400
+ }
401
+ if (other.srfaiagent) {
402
+ Object.assign(historyRequestData, {
403
+ srfaiagent: other.srfaiagent
404
+ });
405
+ }
390
406
  const result = await deService.aiChatHistory(
391
407
  ctx,
392
408
  param,
393
- historyData
409
+ historyRequestData
394
410
  );
395
411
  if (result.data && Array.isArray(result.data)) {
396
412
  let preMsg;
@@ -78,30 +78,38 @@ const InlineAITextArea = /* @__PURE__ */ vue.defineComponent({
78
78
  containerStyle,
79
79
  contentStyle
80
80
  } = inlineAiTextarea_hook.useBase(props, containerRef, actionsRef);
81
- inlineAiTextarea_hook.useInLineAIContainerClick(props, textareaContent, isLoading);
82
81
  const {
83
- askAI
82
+ askAI,
83
+ abortController
84
84
  } = inlineAiTextarea_hook.useAI(props, {
85
85
  srfaiappendcurdata,
86
86
  srfmode,
87
87
  srfaiagent
88
88
  });
89
+ const stopQuestionAndClose = () => {
90
+ var _a;
91
+ (_a = abortController.value) == null ? void 0 : _a.abort();
92
+ props.unMountAIChat();
93
+ };
94
+ inlineAiTextarea_hook.useInLineAIContainerClick(props, textareaContent, isLoading);
89
95
  const restoreFocus = () => {
90
96
  var _a;
91
97
  (_a = textareaRef.value) == null ? void 0 : _a.blur();
92
98
  props.restoreSelection();
93
99
  };
94
100
  const sendQuestion = async (content) => {
95
- restoreFocus();
96
- question = content;
97
- textareaContent.value = "";
98
- isLoading.value = true;
99
- textareaContent.value = await askAI(question);
100
- isLoading.value = false;
101
- contentType.value = "ASSISTANT";
102
- };
103
- const stopQuestion = () => {
104
- props.unMountAIChat();
101
+ try {
102
+ isLoading.value = true;
103
+ restoreFocus();
104
+ question = content;
105
+ textareaContent.value = "";
106
+ textareaContent.value = await askAI(question);
107
+ contentType.value = "ASSISTANT";
108
+ } catch (error) {
109
+ ibiz.log.error(error);
110
+ } finally {
111
+ isLoading.value = false;
112
+ }
105
113
  };
106
114
  const onKeydown = (e) => {
107
115
  if (e.code === "Enter" && !e.isComposing) {
@@ -161,8 +169,8 @@ const InlineAITextArea = /* @__PURE__ */ vue.defineComponent({
161
169
  textareaContent,
162
170
  onKeydown,
163
171
  sendQuestion,
164
- stopQuestion,
165
- handleAction
172
+ handleAction,
173
+ stopQuestionAndClose
166
174
  };
167
175
  },
168
176
  render() {
@@ -196,7 +204,7 @@ const InlineAITextArea = /* @__PURE__ */ vue.defineComponent({
196
204
  "class": this.ns.em("content", "suffix")
197
205
  }, [this.isLoading && vue.createVNode("div", {
198
206
  "class": this.ns.em("content", "stop-icon"),
199
- "onClick": () => this.stopQuestion()
207
+ "onClick": () => this.stopQuestionAndClose()
200
208
  }, [icon.StopIcon, vue.createVNode("span", null, [ibiz.i18n.t("util.inlineAiUtil.stopEdit")])]), !this.disabled && vue.createVNode("div", {
201
209
  "class": this.ns.em("content", "sand-icon"),
202
210
  "onClick": () => this.sendQuestion(this.textareaContent)
@@ -1,5 +1,7 @@
1
1
  'use strict';
2
2
 
3
+ var qs = require('qs');
4
+ var qxUtil = require('qx-util');
3
5
  var vue = require('vue');
4
6
  var runtime = require('@ibiz-template/runtime');
5
7
  var icon = require('./icon.cjs');
@@ -17,7 +19,11 @@ const computedInLineAIParams = (props) => {
17
19
  const useInLineAIContainerClick = (props, content, isLoading) => {
18
20
  const handclick = async (evt) => {
19
21
  const target = evt.target;
20
- if (!target.closest(".ibiz-inline-ai-textarea-container") && !target.closest(".ibiz-inline-ai-alert") && !isLoading.value) {
22
+ if (!target.closest(".ibiz-inline-ai-textarea-container") && !target.closest(".ibiz-inline-ai-alert")) {
23
+ if (isLoading.value) {
24
+ evt.stopPropagation();
25
+ return;
26
+ }
21
27
  const isChange = props.content !== content.value;
22
28
  let isClose = true;
23
29
  if (isChange) {
@@ -72,6 +78,27 @@ const useAI = (props, opts) => {
72
78
  );
73
79
  }
74
80
  };
81
+ const abortController = vue.ref();
82
+ const attachUrlParam = (url) => {
83
+ {
84
+ const urlSplit = url.split("?");
85
+ urlSplit[0] = urlSplit[0].split("/").map((item) => encodeURIComponent(item)).join("/");
86
+ url = urlSplit.length > 1 ? urlSplit.join("?") : urlSplit[0];
87
+ }
88
+ const strParams = qs.stringify(params);
89
+ if (qxUtil.notNilEmpty(strParams)) {
90
+ if (url.endsWith("?")) {
91
+ url = "".concat(url).concat(strParams);
92
+ } else if (url.indexOf("?") !== -1 && url.endsWith("&")) {
93
+ url = "".concat(url).concat(strParams);
94
+ } else if (url.indexOf("?") !== -1 && !url.endsWith("&")) {
95
+ url = "".concat(url, "&").concat(strParams);
96
+ } else {
97
+ url = "".concat(url, "?").concat(strParams);
98
+ }
99
+ }
100
+ return url;
101
+ };
75
102
  const askAI = async (content) => {
76
103
  var _a, _b;
77
104
  const body = {
@@ -87,12 +114,17 @@ const useAI = (props, opts) => {
87
114
  Object.assign(body, { mode: srfmode });
88
115
  if (srfaiagent)
89
116
  Object.assign(body, { srfaiagent });
117
+ abortController.value = new AbortController();
90
118
  const appDataEntity = await ibiz.hub.getAppDataEntity(
91
119
  deACMode.appDataEntityId,
92
120
  deACMode.appId
93
121
  );
94
- const path = calcAIPath(appDataEntity);
95
- const response = await app.net.post(path, body, params);
122
+ const path = attachUrlParam(calcAIPath(appDataEntity));
123
+ const response = await app.net.request(path, {
124
+ method: "post",
125
+ data: body,
126
+ signal: abortController.value.signal
127
+ });
96
128
  if (response.ok) {
97
129
  const result = (_b = (_a = response.data.choices) == null ? void 0 : _a[0]) == null ? void 0 : _b.content;
98
130
  return result;
@@ -103,7 +135,8 @@ const useAI = (props, opts) => {
103
135
  loadAiHistory();
104
136
  });
105
137
  return {
106
- askAI
138
+ askAI,
139
+ abortController
107
140
  };
108
141
  };
109
142
  const useBase = (props, container, target) => {
@@ -154,7 +187,7 @@ const useBase = (props, container, target) => {
154
187
  top: "".concat(options.top, "px")
155
188
  });
156
189
  const contentStyle = vue.ref({
157
- height: "".concat(options.height || 80, "px"),
190
+ height: "".concat(options.height || 300, "px"),
158
191
  "max-height": "".concat(options.maxHeight, "px")
159
192
  });
160
193
  const updatePosition = () => {
@@ -83,12 +83,13 @@ class InLineAIUtil {
83
83
  * @param y 距离上方距离
84
84
  * @param menus 菜单集合
85
85
  */
86
- showContextMenus(x, y, menus) {
86
+ showContextMenus(x, y, menus, options = {}) {
87
87
  ContextMenu.showContextMenu({
88
88
  x,
89
89
  y,
90
90
  customClass: this.ns.b("context-menu"),
91
- items: menus
91
+ items: menus,
92
+ ...options
92
93
  });
93
94
  }
94
95
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ibiz-template/vue3-components",
3
- "version": "0.7.41-alpha.39",
3
+ "version": "0.7.41-alpha.40",
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.33",
33
+ "@ibiz-template-plugin/ai-chat": "^0.0.34",
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.38",
40
- "@ibiz-template/runtime": "0.7.41-alpha.38",
39
+ "@ibiz-template/model-helper": "0.7.41-alpha.39",
40
+ "@ibiz-template/runtime": "0.7.41-alpha.39",
41
41
  "@ibiz-template/theme": "0.7.39",
42
- "@ibiz-template/vue3-util": "0.7.41-alpha.38",
42
+ "@ibiz-template/vue3-util": "0.7.41-alpha.39",
43
43
  "@ibiz-template/web-theme": "3.9.0",
44
44
  "@ibiz/model-core": "^0.1.83",
45
45
  "@imengyu/vue3-context-menu": "^1.3.5",