@easyv/biz-components 2.1.5 → 2.1.6
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.
- package/dist/lib/components/ai-components/mobile-voice-input/icon-button.es.js +1 -1
- package/dist/lib/components/ai-components/mobile-voice-input/mobile-voice-input.es.js +5 -5
- package/dist/lib/components/code-mirror-editor/code-mirror-editor.es.js +9 -9
- package/dist/lib/components/code-mirror-editor/code-mirror-editor.es.js.map +1 -1
- package/dist/lib/components/easyv-reactgrid-plus/easyv-react-grid-plus-context-menu.es.js +84 -0
- package/dist/lib/components/easyv-reactgrid-plus/easyv-react-grid-plus-context-menu.es.js.map +1 -0
- package/dist/lib/components/easyv-reactgrid-plus/easyv-react-grid-plus-editable-cell.es.js +58 -0
- package/dist/lib/components/easyv-reactgrid-plus/easyv-react-grid-plus-editable-cell.es.js.map +1 -0
- package/dist/lib/components/easyv-reactgrid-plus/easyv-react-grid-plus-selection.hook.es.js +97 -0
- package/dist/lib/components/easyv-reactgrid-plus/easyv-react-grid-plus-selection.hook.es.js.map +1 -0
- package/dist/lib/components/easyv-reactgrid-plus/easyv-react-grid-plus.es.js +1063 -0
- package/dist/lib/components/easyv-reactgrid-plus/easyv-react-grid-plus.es.js.map +1 -0
- package/dist/lib/components/easyv-reactgrid-plus/easyv-react-grid.module.less.es.js +7 -0
- package/dist/lib/components/easyv-reactgrid-plus/easyv-react-grid.module.less.es.js.map +1 -0
- package/dist/lib/components/easyv-reactgrid-plus/utils.es.js +93 -0
- package/dist/lib/components/easyv-reactgrid-plus/utils.es.js.map +1 -0
- package/dist/lib/easyv-biz-components/src/components/code-mirror-editor/code-mirror-editor.d.ts +2 -2
- package/dist/lib/easyv-biz-components/src/components/easyv-reactgrid-plus/easyv-react-grid-plus-context-menu.d.ts +14 -0
- package/dist/lib/easyv-biz-components/src/components/easyv-reactgrid-plus/easyv-react-grid-plus-editable-cell.d.ts +11 -0
- package/dist/lib/easyv-biz-components/src/components/easyv-reactgrid-plus/easyv-react-grid-plus-selection.hook.d.ts +16 -0
- package/dist/lib/easyv-biz-components/src/components/easyv-reactgrid-plus/easyv-react-grid-plus.d.ts +16 -0
- package/dist/lib/easyv-biz-components/src/components/easyv-reactgrid-plus/easyv-react-grid-plus.types.d.ts +18 -0
- package/dist/lib/easyv-biz-components/src/components/easyv-reactgrid-plus/index.d.ts +1 -0
- package/dist/lib/easyv-biz-components/src/components/easyv-reactgrid-plus/test/easyv-react-grid-plus.cy.d.ts +1 -0
- package/dist/lib/easyv-biz-components/src/components/easyv-reactgrid-plus/utils.d.ts +6 -0
- package/dist/lib/easyv-biz-components/src/components/index.d.ts +1 -0
- package/dist/lib/easyv-biz-components/src/utils/ai-agent-message-manager/constants.d.ts +3 -1
- package/dist/lib/easyv-biz-components/src/utils/ai-agent-message-manager/types.d.ts +1 -0
- package/dist/lib/easyv-biz-components/src/utils/ai-agent-message-manager/utils.d.ts +1 -0
- package/dist/lib/easyv-biz-components/src/utils/easy-fetch/easy-fetch.d.ts +13 -0
- package/dist/lib/easyv-biz-components/src/utils/easy-fetch/index.d.ts +1 -0
- package/dist/lib/easyv-biz-components/src/utils/easy-fetch/test/easy-fetch.cy.d.ts +1 -0
- package/dist/lib/easyv-biz-components/src/utils/easy-fetch/types.d.ts +6 -0
- package/dist/lib/easyv-biz-components/src/utils/easyv-gui-helper/component-dimension.d.ts +2 -0
- package/dist/lib/easyv-biz-components/src/utils/easyv-gui-helper/easyv-gui-helper.d.ts +3 -0
- package/dist/lib/easyv-biz-components/src/utils/easyv-gui-helper/types.d.ts +3 -0
- package/dist/lib/easyv-biz-components/src/utils/index.d.ts +2 -0
- package/dist/lib/easyv-biz-components/src/utils/twin/index.d.ts +1 -0
- package/dist/lib/easyv-biz-components/src/utils/twin/utils.d.ts +5 -0
- package/dist/lib/hooks/use-tencent-sentence-recognition/use-tencent-sentence-recognition.es.js +2 -2
- package/dist/lib/index.es.js +8 -1
- package/dist/lib/index.es.js.map +1 -1
- package/dist/lib/node_modules/.pnpm/@tanstack_react-table@8.21.3_react-dom@18.2.0_react@18.2.0__react@18.2.0/node_modules/@tanstack/react-table/build/lib/index.es.js +103 -0
- package/dist/lib/node_modules/.pnpm/@tanstack_react-table@8.21.3_react-dom@18.2.0_react@18.2.0__react@18.2.0/node_modules/@tanstack/react-table/build/lib/index.es.js.map +1 -0
- package/dist/lib/node_modules/.pnpm/@tanstack_react-virtual@3.13.23_react-dom@18.2.0_react@18.2.0__react@18.2.0/node_modules/@tanstack/react-virtual/dist/esm/index.es.js +53 -0
- package/dist/lib/node_modules/.pnpm/@tanstack_react-virtual@3.13.23_react-dom@18.2.0_react@18.2.0__react@18.2.0/node_modules/@tanstack/react-virtual/dist/esm/index.es.js.map +1 -0
- package/dist/lib/node_modules/.pnpm/@tanstack_table-core@8.21.3/node_modules/@tanstack/table-core/build/lib/index.es.js +2672 -0
- package/dist/lib/node_modules/.pnpm/@tanstack_table-core@8.21.3/node_modules/@tanstack/table-core/build/lib/index.es.js.map +1 -0
- package/dist/lib/node_modules/.pnpm/@tanstack_virtual-core@3.13.23/node_modules/@tanstack/virtual-core/dist/esm/index.es.js +871 -0
- package/dist/lib/node_modules/.pnpm/@tanstack_virtual-core@3.13.23/node_modules/@tanstack/virtual-core/dist/esm/index.es.js.map +1 -0
- package/dist/lib/node_modules/.pnpm/@tanstack_virtual-core@3.13.23/node_modules/@tanstack/virtual-core/dist/esm/utils.es.js +73 -0
- package/dist/lib/node_modules/.pnpm/@tanstack_virtual-core@3.13.23/node_modules/@tanstack/virtual-core/dist/esm/utils.es.js.map +1 -0
- package/dist/lib/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isString.es.js +11 -0
- package/dist/lib/node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isString.es.js.map +1 -0
- package/dist/lib/packages/easyv-arco/dist/lib/chunks/{button-Dip6wfc7.es.es.js → button-VOE5PncW.es.es.js} +2 -2
- package/dist/lib/packages/easyv-arco/dist/lib/chunks/{button-Dip6wfc7.es.es.js.map → button-VOE5PncW.es.es.js.map} +1 -1
- package/dist/lib/packages/easyv-arco/dist/lib/chunks/{index-EAFzPBke.es.es.js → index-6AIVHTQ0.es.es.js} +11 -11
- package/dist/lib/packages/easyv-arco/dist/lib/chunks/{index-EAFzPBke.es.es.js.map → index-6AIVHTQ0.es.es.js.map} +1 -1
- package/dist/lib/packages/easyv-arco/dist/lib/chunks/{index-zvVd1BJp.es.es.js → index-DttpqRHH.es.es.js} +596 -605
- package/dist/lib/packages/easyv-arco/dist/lib/chunks/index-DttpqRHH.es.es.js.map +1 -0
- package/dist/lib/packages/easyv-arco/dist/lib/chunks/{input-Dhdn9e9Z.es.es.js → input-CqQJPvav.es.es.js} +54 -54
- package/dist/lib/packages/easyv-arco/dist/lib/chunks/{input-Dhdn9e9Z.es.es.js.map → input-CqQJPvav.es.es.js.map} +1 -1
- package/dist/lib/packages/easyv-arco/dist/lib/chunks/{keycode-DOHuQiUY.es.es.js → keycode-cVKDBtW_.es.es.js} +4 -4
- package/dist/lib/packages/easyv-arco/dist/lib/chunks/{keycode-DOHuQiUY.es.es.js.map → keycode-cVKDBtW_.es.es.js.map} +1 -1
- package/dist/lib/packages/easyv-arco/dist/lib/index.es.es.js.map +1 -1
- package/dist/lib/stats.html +1 -1
- package/dist/lib/style.pkg.css +1 -1
- package/dist/lib/utils/ai-agent-message-manager/ai-agent-message-manager.es.js +9 -1
- package/dist/lib/utils/ai-agent-message-manager/ai-agent-message-manager.es.js.map +1 -1
- package/dist/lib/utils/ai-agent-message-manager/constants.es.js +4 -2
- package/dist/lib/utils/ai-agent-message-manager/constants.es.js.map +1 -1
- package/dist/lib/utils/ai-agent-message-manager/types.es.js.map +1 -1
- package/dist/lib/utils/ai-agent-message-manager/utils.es.js +10 -0
- package/dist/lib/utils/ai-agent-message-manager/utils.es.js.map +1 -0
- package/dist/lib/utils/easy-fetch/easy-fetch.es.js +88 -0
- package/dist/lib/utils/easy-fetch/easy-fetch.es.js.map +1 -0
- package/dist/lib/utils/easyv-gui-helper/easyv-gui-helper.es.js +13 -4
- package/dist/lib/utils/easyv-gui-helper/easyv-gui-helper.es.js.map +1 -1
- package/dist/lib/utils/show-modal/show-modal.es.js +5 -5
- package/dist/lib/utils/twin/utils.es.js +30 -0
- package/dist/lib/utils/twin/utils.es.js.map +1 -0
- package/dist/tailwindcss.pkg.css +113 -0
- package/package.json +13 -7
- package/dist/lib/packages/easyv-arco/dist/lib/chunks/index-zvVd1BJp.es.es.js.map +0 -1
package/dist/lib/style.pkg.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
@charset "UTF-8";.index-module__step-hint-animated___LSNLd{animation:index-module__step-hint-pulse___eS13K 1s ease-in-out infinite}@keyframes index-module__step-hint-pulse___eS13K{0%,to{opacity:.3}50%{opacity:1}}.voice-animation .wave-bar{animation:wave 1.6s ease-in-out infinite;animation-play-state:running}.voice-animation .wave-bar.paused{animation-play-state:paused}@keyframes wave{0%,to{transform:scaleY(1)}50%{transform:scaleY(.2)}}.cm-completionIcon{background-position:50%;background-repeat:no-repeat;background-size:contain;flex-shrink:0;height:12px;margin-right:8px;width:12px}.cm-editor.cm-focused .cm-completionIcon{opacity:.9}.cm-completionListItem:hover .cm-completionIcon{opacity:1;transform:scale(1.1);transition:all .2s ease}.biz-components-dom .easyv-monaco-editor .mtk11{color:#9cdcfe}.rg-celleditor .rg-input,.rg-celleditor-input{background:#0000;border:0;font-size:1em;height:100%;margin:0;outline:none;padding:0;width:100%}.rg-celleditor{background-color:#fff;border:2px solid #3579f8;box-shadow:1px 1px 6px #0000000f;box-sizing:border-box;display:flex;padding:0 4px;z-index:5}.rg-number-celleditor input{text-align:right}.reactgrid-content .rg-pane .rg-cell .rg-date-cell,.reactgrid-content .rg-pane .rg-cell .rg-time-cell,.reactgrid-content .rg-pane .rg-cell.rg-number-cell{justify-content:flex-end}.reactgrid-content .rg-pane .rg-cell.rg-email-cell.rg-invalid{color:red}.reactgrid-content .rg-pane .rg-cell.rg-text-cell.placeholder{color:#999;font-size:.8em}.reactgrid-content .rg-pane .rg-cell.rg-checkbox-cell{align-items:center;background:#0000;margin:0;padding:0;pointer-events:auto}.reactgrid-content .rg-pane .rg-cell.rg-checkbox-cell input{height:20px;width:20px}.reactgrid-content .rg-pane .rg-cell.rg-chevron-cell .chevron{align-items:center;cursor:pointer;display:flex;font-weight:700;height:1em;justify-content:center;margin-right:.1em;pointer-events:auto;transition:all .2s ease-in-out;width:1em}.reactgrid-content .rg-pane .rg-cell.rg-chevron-cell .no-child{width:.5em}.reactgrid-content .rg-pane .rg-cell.rg-chevron-cell.expanded .chevron{transform:rotate(90deg)}.reactgrid-content .rg-pane .rg-cell.rg-chevron-cell.collapsed .chevron{transform:rotate(0)}.reactgrid-content .rg-pane .rg-cell.rg-checkbox-cell{justify-content:center}.reactgrid-content .rg-pane .rg-cell.rg-checkbox-cell label{cursor:pointer;height:18px;margin:0;position:relative;-webkit-user-select:none;user-select:none;width:18px}.reactgrid-content .rg-pane .rg-cell.rg-checkbox-cell label input{cursor:pointer;height:18px;margin:0;opacity:0;position:absolute;width:18px}.reactgrid-content .rg-pane .rg-cell.rg-checkbox-cell span{background-color:#eee;height:18px;left:0;position:absolute;top:0;width:18px}.reactgrid-content .rg-pane .rg-cell.rg-checkbox-cell label:hover input~span{background-color:#ccc}.reactgrid-content .rg-pane .rg-cell.rg-checkbox-cell label input:checked~span{background-color:#3579f8}.reactgrid-content .rg-pane .rg-cell.rg-checkbox-cell span:after{content:"";display:none;position:absolute}.reactgrid-content .rg-pane .rg-cell.rg-checkbox-cell label input:checked~span:after{display:block}.reactgrid-content .rg-pane .rg-cell.rg-checkbox-cell label span:after{border:solid #fff;border-width:0 3px 3px 0;height:12px;left:7px;top:2px;transform:rotate(45deg);width:4px}.reactgrid-content .rg-pane .rg-cell.rg-dropdown-cell{overflow:visible;padding:0}.reactgrid-content .rg-pane .rg-cell.rg-dropdown-cell .rg-dropdown-menu{background-color:#fff;border-radius:4px;box-shadow:0 0 7px #00000080;box-sizing:border-box;margin-bottom:8px;margin-top:2px;position:absolute;top:100%;width:100%;z-index:1}.reactgrid-content .rg-pane .rg-cell.rg-dropdown-cell .rg-dropdown-option{align-items:center;display:flex;min-height:1.5em;padding:.3em .5em}.reactgrid-content .rg-pane .rg-cell.rg-dropdown-cell .rg-dropdown-option.selected:before{content:"✓";padding-right:.2em}.reactgrid-content .rg-pane .rg-cell.rg-dropdown-cell .rg-dropdown-option.focused{background-color:#f1f6ff;color:#000}.rg-copy-container[contenteditable]{-webkit-user-select:text;user-select:text}.reactgrid-content{align-items:flex-start;color:#000;display:flex;flex-wrap:wrap;justify-content:flex-start;user-select:none;-moz-user-select:none;-webkit-user-select:none}.reactgrid-content .rg-pane.rg-pane-bottom,.reactgrid-content .rg-pane.rg-pane-left,.reactgrid-content .rg-pane.rg-pane-right,.reactgrid-content .rg-pane.rg-pane-top{background-color:#fff;position:sticky;position:-webkit-sticky}.reactgrid-content .rg-pane.rg-pane-top{top:0}.reactgrid-content .rg-pane.rg-pane-bottom{bottom:0}.reactgrid-content .rg-pane.rg-pane-left{left:0}.reactgrid-content .rg-pane.rg-pane-right{right:0}.reactgrid-content .rg-pane .rg-cell{align-items:center;border-color:#e8e8e8;box-sizing:border-box;color:#000;display:flex;flex-direction:row;font-size:1em;outline:none;overflow:hidden;padding:0 4px;position:absolute;touch-action:auto;white-space:nowrap}.reactgrid-content .rg-pane .rg-cell .rg-touch-column-resize-handle{height:100%;pointer-events:auto;position:absolute;right:0;top:0;width:11px}.reactgrid-content .rg-pane .rg-cell .rg-touch-column-resize-handle .rg-resize-handle{height:100%;position:absolute;right:0;width:6px}.reactgrid-content .rg-pane .rg-cell .rg-touch-column-resize-handle .rg-resize-handle:hover{background-color:#3579f8;cursor:col-resize}.reactgrid-content .rg-pane .rg-cell .rg-touch-row-resize-handle{bottom:0;height:11px;left:0;pointer-events:auto;position:absolute;width:100%}.reactgrid-content .rg-pane .rg-cell .rg-touch-row-resize-handle .rg-resize-handle{bottom:0;height:6px;position:absolute;width:100%}.reactgrid-content .rg-pane .rg-cell .rg-touch-row-resize-handle .rg-resize-handle:hover{background-color:#3579f8;cursor:row-resize}.reactgrid-content .rg-pane .rg-cell .rg-groupId{font-size:.8em;position:absolute;right:4px;top:4px}.reactgrid-content .rg-pane .rg-cell-focus,.reactgrid-content .rg-pane .rg-cell-highlight{border:2px solid #3579f8;box-sizing:border-box;pointer-events:none;position:absolute}.reactgrid-content .rg-pane .rg-touch-fill-handle{background-color:#ffffff03;height:40px;pointer-events:auto;position:absolute;touch-action:none;width:40px}.reactgrid-content .rg-pane .rg-touch-fill-handle .rg-fill-handle{background-clip:content-box;background-color:#3579f8;border:1px solid #fff;cursor:crosshair;height:6.5px;left:50%;position:absolute;top:50%;transform:translate(calc(-50% - .5px),calc(-50% - .5px));width:6.5px}.reactgrid-content .rg-pane .rg-partial-area{box-sizing:border-box;pointer-events:none;position:absolute}.reactgrid-content .rg-pane .rg-partial-area.rg-partial-area-part{border:1px dashed #000}.reactgrid-content .rg-pane .rg-partial-area.rg-partial-area-selected-range{background-color:#3579f859;border:1px solid #3579f8}.reactgrid-content .rg-pane-shadow{position:sticky}.reactgrid-content .rg-pane-shadow.shadow-top{box-shadow:2px 2px 3px 1px #0000000f;pointer-events:none;top:0}.reactgrid-content .rg-pane-shadow.shadow-left{box-shadow:5px 0 3px -2px #0000000f;left:0;pointer-events:none}.reactgrid-content .rg-pane-shadow.shadow-bottom{bottom:0;box-shadow:2px -1px 3px 1px #0000000f;pointer-events:none}.reactgrid-content .rg-pane-shadow.shadow-right{box-shadow:-5px 0 3px -2px #0000000f;pointer-events:none;right:0}.reactgrid-content .rg-pane-shadow.shadow-top-left-corner{box-shadow:2px 3px 3px 1px #0000000f}.reactgrid-content .rg-pane-shadow.shadow-top-right-corner{box-shadow:-2px 2px 3px 1px #0000000f}.reactgrid-content .rg-pane-shadow.shadow-bottom-left-corner{box-shadow:2px -2px 3px 1px #0000000f}.reactgrid-content .rg-pane-shadow.shadow-bottom-right-corner{box-shadow:-2px -2px 3px 1px #0000000f}.reactgrid-content .rg-context-menu{background-color:#fff;box-shadow:0 0 8px 2px #0000000f;font-size:1em;position:fixed;z-index:1000}.reactgrid-content .rg-context-menu .rg-context-menu-option{cursor:pointer;padding:8px 20px 8px 15px}.reactgrid-content .rg-context-menu .rg-context-menu-option:hover{background-color:#f2f2f2}.reactgrid-content .rg-shadow{background-color:#000;opacity:.1;position:absolute;z-index:4}.reactgrid-content .rg-column-resize-hint,.reactgrid-content .rg-row-resize-hint{background-color:#74b9ff;border-radius:0 5px 5px 0;padding:5px;position:absolute}.reactgrid-content .rg-line{background-color:#74b9ff;position:absolute;z-index:4}.reactgrid-content .rg-line-horizontal{height:2px;left:0}.reactgrid-content .rg-line-vertical{top:0;width:2px}.reactgrid-content .rg-hidden-element{border:0;height:1px;left:50%;margin:0;opacity:0;padding:0;position:fixed;top:50%;width:1px}.easyv-react-grid-module__easyv-react-grid___T-8rm{--cell-border-color:hsla(0,0%,100%,.12);--cell-bg-color:#13171d;--header-cell-bg-color:hsla(0,0%,100%,.04);--scrollbar-track-color:hsla(0,0%,100%,.1);--scrollbar-thumb-color:hsla(0,0%,100%,.2);background-color:var(--cell-bg-color);border-radius:8px;color:#c9cbd3;overflow:auto;scrollbar-color:var(--scrollbar-thumb-color) var(--scrollbar-track-color);scrollbar-width:thin}.easyv-react-grid-module__easyv-react-grid___T-8rm::-webkit-scrollbar{height:10px;width:10px}.easyv-react-grid-module__easyv-react-grid___T-8rm::-webkit-scrollbar-track{background:var(--scrollbar-track-color);padding:2px}.easyv-react-grid-module__easyv-react-grid___T-8rm::-webkit-scrollbar-thumb{background:#fff3;border-radius:8px}.easyv-react-grid-module__easyv-react-grid___T-8rm::-webkit-scrollbar-corner{background:#ffffff1a}.easyv-react-grid-module__easyv-react-grid___T-8rm .rg-pane{background-color:var(--cell-bg-color)!important}.easyv-react-grid-module__easyv-react-grid___T-8rm .rg-pane-top{pointer-events:auto;z-index:1000}.easyv-react-grid-module__easyv-react-grid___T-8rm .rg-pane-left{pointer-events:auto;z-index:1001}.easyv-react-grid-module__easyv-react-grid___T-8rm .rg-pane-middle{z-index:1}.easyv-react-grid-module__easyv-react-grid___T-8rm .rg-celleditor{background:#1c2338;color:#fff!important}.easyv-react-grid-module__easyv-react-grid___T-8rm .rg-celleditor .rg-input{color:#fff!important;font-size:12px!important;text-align:center}.easyv-react-grid-module__easyv-react-grid___T-8rm .reactgrid{background:var(--cell-bg-color)}.easyv-react-grid-module__easyv-react-grid___T-8rm .rg-cell:not(.rg-header-cell){background:var(--cell-bg-color);border-color:var(--cell-border-color)!important;color:#fff!important;font-size:12px!important;font-weight:400!important;justify-content:center!important}.easyv-react-grid-module__easyv-react-grid___T-8rm .rg-header-cell{background-color:var(--header-cell-bg-color)!important;border-color:var(--cell-border-color)!important;color:#b4b7c1!important;font-size:12px!important;font-weight:400!important;justify-content:center}.easyv-react-grid-module__easyv-react-grid___T-8rm [data-cell-colidx="0"][data-cell-rowidx="0"].rg-cell{border-top-left-radius:8px!important}.easyv-react-grid-module__easyv-react-grid___T-8rm .rg-partial-area-part{border-color:#337efe!important}.easyv-react-grid-module__easyv-react-grid___T-8rm .rg-partial-area-selected-range{background-color:#3a89fe1a!important}.easyv-react-grid-module__easyv-react-grid___T-8rm .rg-context-menu{background-color:#232630!important;border:none!important;box-shadow:1px 2px 5px 2px #33333326!important;font-size:12px;padding:4px 0!important;width:160px}.easyv-react-grid-module__easyv-react-grid___T-8rm .rg-context-menu .rg-context-menu-option{background-color:transparent!important;color:#b4b7c1!important;height:26px!important;line-height:26px!important;padding:0 12px!important;transition:all .2s}.easyv-react-grid-module__easyv-react-grid___T-8rm .rg-context-menu .rg-context-menu-option:hover{background-color:#3a89fe!important;color:#fff!important}.easyv-react-grid-module__easyv-react-grid___T-8rm .reactgrid .rg-cell.rg-selected .reactgrid .rg-cell.rg-cell-selected .reactgrid .rg-cell.rg-focused .reactgrid .rg-cell.rg-cell-focused{background:#1c2338;border-color:#3a89fe1a}.easyv-react-grid-module__easyv-react-grid___T-8rm .reactgrid .rg-range-border .reactgrid .rg-selected-range .reactgrid .rg-selected-range-border{border-color:#3a89fe1a}
|
|
1
|
+
@charset "UTF-8";.index-module__step-hint-animated___LSNLd{animation:index-module__step-hint-pulse___eS13K 1s ease-in-out infinite}@keyframes index-module__step-hint-pulse___eS13K{0%,to{opacity:.3}50%{opacity:1}}.voice-animation .wave-bar{animation:wave 1.6s ease-in-out infinite;animation-play-state:running}.voice-animation .wave-bar.paused{animation-play-state:paused}@keyframes wave{0%,to{transform:scaleY(1)}50%{transform:scaleY(.2)}}.cm-completionIcon{background-position:50%;background-repeat:no-repeat;background-size:contain;flex-shrink:0;height:12px;margin-right:8px;width:12px}.cm-editor.cm-focused .cm-completionIcon{opacity:.9}.cm-completionListItem:hover .cm-completionIcon{opacity:1;transform:scale(1.1);transition:all .2s ease}.biz-components-dom .easyv-monaco-editor .mtk11{color:#9cdcfe}.rg-celleditor .rg-input,.rg-celleditor-input{background:#0000;border:0;font-size:1em;height:100%;margin:0;outline:none;padding:0;width:100%}.rg-celleditor{background-color:#fff;border:2px solid #3579f8;box-shadow:1px 1px 6px #0000000f;box-sizing:border-box;display:flex;padding:0 4px;z-index:5}.rg-number-celleditor input{text-align:right}.reactgrid-content .rg-pane .rg-cell .rg-date-cell,.reactgrid-content .rg-pane .rg-cell .rg-time-cell,.reactgrid-content .rg-pane .rg-cell.rg-number-cell{justify-content:flex-end}.reactgrid-content .rg-pane .rg-cell.rg-email-cell.rg-invalid{color:red}.reactgrid-content .rg-pane .rg-cell.rg-text-cell.placeholder{color:#999;font-size:.8em}.reactgrid-content .rg-pane .rg-cell.rg-checkbox-cell{align-items:center;background:#0000;margin:0;padding:0;pointer-events:auto}.reactgrid-content .rg-pane .rg-cell.rg-checkbox-cell input{height:20px;width:20px}.reactgrid-content .rg-pane .rg-cell.rg-chevron-cell .chevron{align-items:center;cursor:pointer;display:flex;font-weight:700;height:1em;justify-content:center;margin-right:.1em;pointer-events:auto;transition:all .2s ease-in-out;width:1em}.reactgrid-content .rg-pane .rg-cell.rg-chevron-cell .no-child{width:.5em}.reactgrid-content .rg-pane .rg-cell.rg-chevron-cell.expanded .chevron{transform:rotate(90deg)}.reactgrid-content .rg-pane .rg-cell.rg-chevron-cell.collapsed .chevron{transform:rotate(0)}.reactgrid-content .rg-pane .rg-cell.rg-checkbox-cell{justify-content:center}.reactgrid-content .rg-pane .rg-cell.rg-checkbox-cell label{cursor:pointer;height:18px;margin:0;position:relative;-webkit-user-select:none;user-select:none;width:18px}.reactgrid-content .rg-pane .rg-cell.rg-checkbox-cell label input{cursor:pointer;height:18px;margin:0;opacity:0;position:absolute;width:18px}.reactgrid-content .rg-pane .rg-cell.rg-checkbox-cell span{background-color:#eee;height:18px;left:0;position:absolute;top:0;width:18px}.reactgrid-content .rg-pane .rg-cell.rg-checkbox-cell label:hover input~span{background-color:#ccc}.reactgrid-content .rg-pane .rg-cell.rg-checkbox-cell label input:checked~span{background-color:#3579f8}.reactgrid-content .rg-pane .rg-cell.rg-checkbox-cell span:after{content:"";display:none;position:absolute}.reactgrid-content .rg-pane .rg-cell.rg-checkbox-cell label input:checked~span:after{display:block}.reactgrid-content .rg-pane .rg-cell.rg-checkbox-cell label span:after{border:solid #fff;border-width:0 3px 3px 0;height:12px;left:7px;top:2px;transform:rotate(45deg);width:4px}.reactgrid-content .rg-pane .rg-cell.rg-dropdown-cell{overflow:visible;padding:0}.reactgrid-content .rg-pane .rg-cell.rg-dropdown-cell .rg-dropdown-menu{background-color:#fff;border-radius:4px;box-shadow:0 0 7px #00000080;box-sizing:border-box;margin-bottom:8px;margin-top:2px;position:absolute;top:100%;width:100%;z-index:1}.reactgrid-content .rg-pane .rg-cell.rg-dropdown-cell .rg-dropdown-option{align-items:center;display:flex;min-height:1.5em;padding:.3em .5em}.reactgrid-content .rg-pane .rg-cell.rg-dropdown-cell .rg-dropdown-option.selected:before{content:"✓";padding-right:.2em}.reactgrid-content .rg-pane .rg-cell.rg-dropdown-cell .rg-dropdown-option.focused{background-color:#f1f6ff;color:#000}.rg-copy-container[contenteditable]{-webkit-user-select:text;user-select:text}.reactgrid-content{align-items:flex-start;color:#000;display:flex;flex-wrap:wrap;justify-content:flex-start;user-select:none;-moz-user-select:none;-webkit-user-select:none}.reactgrid-content .rg-pane.rg-pane-bottom,.reactgrid-content .rg-pane.rg-pane-left,.reactgrid-content .rg-pane.rg-pane-right,.reactgrid-content .rg-pane.rg-pane-top{background-color:#fff;position:sticky;position:-webkit-sticky}.reactgrid-content .rg-pane.rg-pane-top{top:0}.reactgrid-content .rg-pane.rg-pane-bottom{bottom:0}.reactgrid-content .rg-pane.rg-pane-left{left:0}.reactgrid-content .rg-pane.rg-pane-right{right:0}.reactgrid-content .rg-pane .rg-cell{align-items:center;border-color:#e8e8e8;box-sizing:border-box;color:#000;display:flex;flex-direction:row;font-size:1em;outline:none;overflow:hidden;padding:0 4px;position:absolute;touch-action:auto;white-space:nowrap}.reactgrid-content .rg-pane .rg-cell .rg-touch-column-resize-handle{height:100%;pointer-events:auto;position:absolute;right:0;top:0;width:11px}.reactgrid-content .rg-pane .rg-cell .rg-touch-column-resize-handle .rg-resize-handle{height:100%;position:absolute;right:0;width:6px}.reactgrid-content .rg-pane .rg-cell .rg-touch-column-resize-handle .rg-resize-handle:hover{background-color:#3579f8;cursor:col-resize}.reactgrid-content .rg-pane .rg-cell .rg-touch-row-resize-handle{bottom:0;height:11px;left:0;pointer-events:auto;position:absolute;width:100%}.reactgrid-content .rg-pane .rg-cell .rg-touch-row-resize-handle .rg-resize-handle{bottom:0;height:6px;position:absolute;width:100%}.reactgrid-content .rg-pane .rg-cell .rg-touch-row-resize-handle .rg-resize-handle:hover{background-color:#3579f8;cursor:row-resize}.reactgrid-content .rg-pane .rg-cell .rg-groupId{font-size:.8em;position:absolute;right:4px;top:4px}.reactgrid-content .rg-pane .rg-cell-focus,.reactgrid-content .rg-pane .rg-cell-highlight{border:2px solid #3579f8;box-sizing:border-box;pointer-events:none;position:absolute}.reactgrid-content .rg-pane .rg-touch-fill-handle{background-color:#ffffff03;height:40px;pointer-events:auto;position:absolute;touch-action:none;width:40px}.reactgrid-content .rg-pane .rg-touch-fill-handle .rg-fill-handle{background-clip:content-box;background-color:#3579f8;border:1px solid #fff;cursor:crosshair;height:6.5px;left:50%;position:absolute;top:50%;transform:translate(calc(-50% - .5px),calc(-50% - .5px));width:6.5px}.reactgrid-content .rg-pane .rg-partial-area{box-sizing:border-box;pointer-events:none;position:absolute}.reactgrid-content .rg-pane .rg-partial-area.rg-partial-area-part{border:1px dashed #000}.reactgrid-content .rg-pane .rg-partial-area.rg-partial-area-selected-range{background-color:#3579f859;border:1px solid #3579f8}.reactgrid-content .rg-pane-shadow{position:sticky}.reactgrid-content .rg-pane-shadow.shadow-top{box-shadow:2px 2px 3px 1px #0000000f;pointer-events:none;top:0}.reactgrid-content .rg-pane-shadow.shadow-left{box-shadow:5px 0 3px -2px #0000000f;left:0;pointer-events:none}.reactgrid-content .rg-pane-shadow.shadow-bottom{bottom:0;box-shadow:2px -1px 3px 1px #0000000f;pointer-events:none}.reactgrid-content .rg-pane-shadow.shadow-right{box-shadow:-5px 0 3px -2px #0000000f;pointer-events:none;right:0}.reactgrid-content .rg-pane-shadow.shadow-top-left-corner{box-shadow:2px 3px 3px 1px #0000000f}.reactgrid-content .rg-pane-shadow.shadow-top-right-corner{box-shadow:-2px 2px 3px 1px #0000000f}.reactgrid-content .rg-pane-shadow.shadow-bottom-left-corner{box-shadow:2px -2px 3px 1px #0000000f}.reactgrid-content .rg-pane-shadow.shadow-bottom-right-corner{box-shadow:-2px -2px 3px 1px #0000000f}.reactgrid-content .rg-context-menu{background-color:#fff;box-shadow:0 0 8px 2px #0000000f;font-size:1em;position:fixed;z-index:1000}.reactgrid-content .rg-context-menu .rg-context-menu-option{cursor:pointer;padding:8px 20px 8px 15px}.reactgrid-content .rg-context-menu .rg-context-menu-option:hover{background-color:#f2f2f2}.reactgrid-content .rg-shadow{background-color:#000;opacity:.1;position:absolute;z-index:4}.reactgrid-content .rg-column-resize-hint,.reactgrid-content .rg-row-resize-hint{background-color:#74b9ff;border-radius:0 5px 5px 0;padding:5px;position:absolute}.reactgrid-content .rg-line{background-color:#74b9ff;position:absolute;z-index:4}.reactgrid-content .rg-line-horizontal{height:2px;left:0}.reactgrid-content .rg-line-vertical{top:0;width:2px}.reactgrid-content .rg-hidden-element{border:0;height:1px;left:50%;margin:0;opacity:0;padding:0;position:fixed;top:50%;width:1px}.easyv-react-grid-module__easyv-react-grid___T-8rm{--cell-border-color:hsla(0,0%,100%,.12);--cell-bg-color:#13171d;--header-cell-bg-color:hsla(0,0%,100%,.04);--scrollbar-track-color:hsla(0,0%,100%,.1);--scrollbar-thumb-color:hsla(0,0%,100%,.2);background-color:var(--cell-bg-color);border-radius:8px;color:#c9cbd3;overflow:auto;scrollbar-color:var(--scrollbar-thumb-color) var(--scrollbar-track-color);scrollbar-width:thin}.easyv-react-grid-module__easyv-react-grid___T-8rm::-webkit-scrollbar{height:10px;width:10px}.easyv-react-grid-module__easyv-react-grid___T-8rm::-webkit-scrollbar-track{background:var(--scrollbar-track-color);padding:2px}.easyv-react-grid-module__easyv-react-grid___T-8rm::-webkit-scrollbar-thumb{background:#fff3;border-radius:8px}.easyv-react-grid-module__easyv-react-grid___T-8rm::-webkit-scrollbar-corner{background:#ffffff1a}.easyv-react-grid-module__easyv-react-grid___T-8rm .rg-pane{background-color:var(--cell-bg-color)!important}.easyv-react-grid-module__easyv-react-grid___T-8rm .rg-pane-top{pointer-events:auto;z-index:1000}.easyv-react-grid-module__easyv-react-grid___T-8rm .rg-pane-left{pointer-events:auto;z-index:1001}.easyv-react-grid-module__easyv-react-grid___T-8rm .rg-pane-middle{z-index:1}.easyv-react-grid-module__easyv-react-grid___T-8rm .rg-celleditor{background:#1c2338;color:#fff!important}.easyv-react-grid-module__easyv-react-grid___T-8rm .rg-celleditor .rg-input{color:#fff!important;font-size:12px!important;text-align:center}.easyv-react-grid-module__easyv-react-grid___T-8rm .reactgrid{background:var(--cell-bg-color)}.easyv-react-grid-module__easyv-react-grid___T-8rm .rg-cell:not(.rg-header-cell){background:var(--cell-bg-color);border-color:var(--cell-border-color)!important;color:#fff!important;font-size:12px!important;font-weight:400!important;justify-content:center!important}.easyv-react-grid-module__easyv-react-grid___T-8rm .rg-header-cell{background-color:var(--header-cell-bg-color)!important;border-color:var(--cell-border-color)!important;color:#b4b7c1!important;font-size:12px!important;font-weight:400!important;justify-content:center}.easyv-react-grid-module__easyv-react-grid___T-8rm [data-cell-colidx="0"][data-cell-rowidx="0"].rg-cell{border-top-left-radius:8px!important}.easyv-react-grid-module__easyv-react-grid___T-8rm .rg-partial-area-part{border-color:#337efe!important}.easyv-react-grid-module__easyv-react-grid___T-8rm .rg-partial-area-selected-range{background-color:#3a89fe1a!important}.easyv-react-grid-module__easyv-react-grid___T-8rm .rg-context-menu{background-color:#232630!important;border:none!important;box-shadow:1px 2px 5px 2px #33333326!important;font-size:12px;padding:4px 0!important;width:160px}.easyv-react-grid-module__easyv-react-grid___T-8rm .rg-context-menu .rg-context-menu-option{background-color:transparent!important;color:#b4b7c1!important;height:26px!important;line-height:26px!important;padding:0 12px!important;transition:all .2s}.easyv-react-grid-module__easyv-react-grid___T-8rm .rg-context-menu .rg-context-menu-option:hover{background-color:#3a89fe!important;color:#fff!important}.easyv-react-grid-module__easyv-react-grid___T-8rm .reactgrid .rg-cell.rg-selected .reactgrid .rg-cell.rg-cell-selected .reactgrid .rg-cell.rg-focused .reactgrid .rg-cell.rg-cell-focused{background:#1c2338;border-color:#3a89fe1a}.easyv-react-grid-module__easyv-react-grid___T-8rm .reactgrid .rg-range-border .reactgrid .rg-selected-range .reactgrid .rg-selected-range-border{border-color:#3a89fe1a}.easyv-react-grid-module__easyv-react-grid___lmSr5{--cell-border-color:hsla(0,0%,100%,.12);--cell-bg-color:#13171d;--header-cell-bg-color:hsla(0,0%,100%,.04);--scrollbar-track-color:hsla(0,0%,100%,.1);--scrollbar-thumb-color:hsla(0,0%,100%,.2);background-color:var(--cell-bg-color);border-radius:8px;color:#c9cbd3;overflow:auto;scrollbar-color:var(--scrollbar-thumb-color) var(--scrollbar-track-color);scrollbar-width:thin}.easyv-react-grid-module__easyv-react-grid___lmSr5::-webkit-scrollbar{height:10px;width:10px}.easyv-react-grid-module__easyv-react-grid___lmSr5::-webkit-scrollbar-track{background:var(--scrollbar-track-color);padding:2px}.easyv-react-grid-module__easyv-react-grid___lmSr5::-webkit-scrollbar-thumb{background:#fff3;border-radius:8px}.easyv-react-grid-module__easyv-react-grid___lmSr5::-webkit-scrollbar-corner{background:#ffffff1a}.easyv-react-grid-module__easyv-react-grid___lmSr5 .rg-pane{background-color:var(--cell-bg-color)!important}.easyv-react-grid-module__easyv-react-grid___lmSr5 .rg-pane-top{pointer-events:auto;z-index:1000}.easyv-react-grid-module__easyv-react-grid___lmSr5 .rg-pane-left{pointer-events:auto;z-index:1001}.easyv-react-grid-module__easyv-react-grid___lmSr5 .rg-pane-middle{z-index:1}.easyv-react-grid-module__easyv-react-grid___lmSr5 .rg-celleditor{background:#1c2338;color:#fff!important}.easyv-react-grid-module__easyv-react-grid___lmSr5 .rg-celleditor .rg-input{color:#fff!important;font-size:12px!important;text-align:center}.easyv-react-grid-module__easyv-react-grid___lmSr5 .reactgrid{background:var(--cell-bg-color)}.easyv-react-grid-module__easyv-react-grid___lmSr5 .rg-cell:not(.rg-header-cell){background:var(--cell-bg-color);border-color:var(--cell-border-color)!important;color:#fff!important;font-size:12px!important;font-weight:400!important;justify-content:center!important}.easyv-react-grid-module__easyv-react-grid___lmSr5 .rg-header-cell{background-color:var(--header-cell-bg-color)!important;border-color:var(--cell-border-color)!important;color:#b4b7c1!important;font-size:12px!important;font-weight:400!important;justify-content:center}.easyv-react-grid-module__easyv-react-grid___lmSr5 [data-cell-colidx="0"][data-cell-rowidx="0"].rg-cell{border-top-left-radius:8px!important}.easyv-react-grid-module__easyv-react-grid___lmSr5 .rg-partial-area-part{border-color:#337efe!important}.easyv-react-grid-module__easyv-react-grid___lmSr5 .rg-partial-area-selected-range{background-color:#3a89fe1a!important}.easyv-react-grid-module__easyv-react-grid___lmSr5 .rg-context-menu{background-color:#232630!important;border:none!important;box-shadow:1px 2px 5px 2px #33333326!important;font-size:12px;padding:4px 0!important;width:160px}.easyv-react-grid-module__easyv-react-grid___lmSr5 .rg-context-menu .rg-context-menu-option{background-color:transparent!important;color:#b4b7c1!important;height:26px!important;line-height:26px!important;padding:0 12px!important;transition:all .2s}.easyv-react-grid-module__easyv-react-grid___lmSr5 .rg-context-menu .rg-context-menu-option:hover{background-color:#3a89fe!important;color:#fff!important}.easyv-react-grid-module__easyv-react-grid___lmSr5 .reactgrid .rg-cell.rg-selected .reactgrid .rg-cell.rg-cell-selected .reactgrid .rg-cell.rg-focused .reactgrid .rg-cell.rg-cell-focused{background:#1c2338;border-color:#3a89fe1a}.easyv-react-grid-module__easyv-react-grid___lmSr5 .reactgrid .rg-range-border .reactgrid .rg-selected-range .reactgrid .rg-selected-range-border{border-color:#3a89fe1a}
|
|
@@ -4,6 +4,7 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
4
4
|
import { generateRandomId } from "../common/common.es.js";
|
|
5
5
|
import { waitSomeThingBeTrue } from "../wait-something/index.es.js";
|
|
6
6
|
import { AskWsListenEventList, MsgWsListenEventList, AgentSocketEmitEvent, AgentSocketListenEvent, AiAgentMessageType } from "./constants.es.js";
|
|
7
|
+
import { getErrorStr } from "./utils.es.js";
|
|
7
8
|
import { RoomType } from "../../hooks/use-socket-events/constant.es.js";
|
|
8
9
|
class AiAgentMessageManager {
|
|
9
10
|
constructor(config) {
|
|
@@ -110,7 +111,7 @@ class AiAgentMessageManager {
|
|
|
110
111
|
});
|
|
111
112
|
}
|
|
112
113
|
handleAskWsInfo(event, data) {
|
|
113
|
-
var _a, _b, _c, _d;
|
|
114
|
+
var _a, _b, _c, _d, _e, _f;
|
|
114
115
|
if (event === AgentSocketListenEvent.AI_AGENT_TOOL_CALL) {
|
|
115
116
|
(_b = (_a = this.config) == null ? void 0 : _a.onAiAgentToolCall) == null ? void 0 : _b.call(_a, data);
|
|
116
117
|
}
|
|
@@ -120,6 +121,13 @@ class AiAgentMessageManager {
|
|
|
120
121
|
errorMsg: data
|
|
121
122
|
});
|
|
122
123
|
}
|
|
124
|
+
if (event === AgentSocketListenEvent.ERROR) {
|
|
125
|
+
(_f = (_e = this.config) == null ? void 0 : _e.onError) == null ? void 0 : _f.call(_e, {
|
|
126
|
+
type: "socketError",
|
|
127
|
+
errorMsg: getErrorStr(data),
|
|
128
|
+
extraData: data
|
|
129
|
+
});
|
|
130
|
+
}
|
|
123
131
|
}
|
|
124
132
|
handleMsgWsInfo(event, data) {
|
|
125
133
|
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-agent-message-manager.es.js","sources":["../../../../src/utils/ai-agent-message-manager/ai-agent-message-manager.ts"],"sourcesContent":["import { type Socket } from \"socket.io-client\";\nimport { RoomType } from \"@/hooks\";\nimport { generateRandomId } from \"../common/common\";\nimport { waitSomeThingBeTrue } from \"../wait-something\";\nimport {\n AgentSocketEmitEvent,\n AgentSocketListenEvent,\n AiAgentMessageType,\n AskWsListenEventList,\n MsgWsListenEventList,\n} from \"./constants\";\nimport {\n AgentSocketEmitEventPayloadMap,\n AiAgentExclusiveEventsDataType,\n AiAgentMessageManagerConfig,\n AiAgentSocketData,\n AiAgentSocketMessagePayload,\n JoinOrLeaveRoomParams,\n SendMsgToAiAgentComponentParams,\n SendMsgToAiAgentParams,\n SocketErrorData,\n ToolCallInfo,\n UserBroadcastData,\n} from \"./types\";\n\nexport class AiAgentMessageManager {\n /** 向 ai 问问题的 ws */\n wsForAsk: Socket | null = null;\n /** 和 ai 进行消息互动的 ws,主要两个功能:接收 ai 消息,前端广播消息 */\n wsForMsg: Socket | null = null;\n\n private config: AiAgentMessageManagerConfig | null = null;\n\n status: \"beforeInit\" | \"initialized\" | \"initializing\" = \"beforeInit\";\n\n currChatInfo: { taskId?: string; question?: string } = {};\n\n constructor(config: AiAgentMessageManagerConfig) {\n this.config = config;\n }\n\n setConfig(config: Partial<AiAgentMessageManagerConfig>) {\n const originConfig = this.config || ({} as AiAgentMessageManagerConfig);\n this.config = { ...originConfig, ...config };\n }\n\n async init() {\n this.status = \"initializing\";\n if (!this.config) {\n return;\n }\n if (!this.config?.getAuthInfo) {\n this.config.onError?.({\n type: \"configError\",\n errorMsg: \"AiAgentMessageManager init error: getAuthInfo is required\",\n });\n return;\n }\n const authInfo = await this.config?.getAuthInfo?.();\n if (!authInfo) {\n return;\n }\n const { SocketIoManager } = this.config;\n\n const finalAuthInfo = (() => {\n let guestToken = \"\";\n let spaceId = 0;\n let customSocketId = \"\";\n if (\"guestToken\" in authInfo) {\n guestToken = authInfo.guestToken;\n customSocketId = `guest-${generateRandomId()}`;\n }\n if (\"spaceId\" in authInfo) {\n spaceId = authInfo.spaceId;\n customSocketId = `${authInfo.userId}-${generateRandomId()}`;\n }\n return {\n \"guest-token\": guestToken,\n \"custom-socket-id\": customSocketId,\n \"space-id\": spaceId,\n };\n })();\n this.wsForAsk = new SocketIoManager(this.config.host || location.origin, {\n transports: [\"websocket\"],\n forceNew: true,\n path: \"/socket/easyv-ai/agent\",\n timeout: 5000,\n reconnection: true,\n reconnectionAttempts: 10,\n reconnectionDelay: 500,\n reconnectionDelayMax: 500,\n }).socket(\"/easyv-ai/agent\", {\n auth: finalAuthInfo,\n });\n this.wsForMsg = new SocketIoManager(this.config.host, {\n transports: [\"websocket\"],\n forceNew: true,\n path: \"/socket/easyv-mps\",\n timeout: 5000,\n reconnection: true,\n reconnectionAttempts: 10,\n reconnectionDelay: 500,\n reconnectionDelayMax: 500,\n }).socket(\"/easyv-mps\", {\n auth: finalAuthInfo,\n });\n\n AskWsListenEventList.forEach((event) => {\n this.wsForAsk?.on(event, (data) => {\n this.handleAskWsInfo(event, data);\n });\n });\n MsgWsListenEventList.forEach((event) => {\n this.wsForMsg?.on(event, (data) => {\n this.handleMsgWsInfo(event, data);\n });\n });\n this.status = \"initialized\";\n }\n\n sendMsgToAiAgent(params: SendMsgToAiAgentParams | SendMsgToAiAgentComponentParams) {\n const { type, ...restParams } = params;\n const path = type === RoomType.AI_AGENT ? \"ai-agent-chat\" : \"ai-agent-component-chat\";\n this.currChatInfo.question = restParams.question;\n this.wsForAsk?.emit(path, restParams);\n this.config?.onSendMsgToAi?.(params);\n }\n sendToolResultToAiAgent(result: string) {\n this.wsForAsk?.emit(AgentSocketEmitEvent.AI_AGENT_TOOL_RESULT, {\n id: this.currChatInfo.taskId,\n result,\n });\n }\n\n private handleAskWsInfo(event: AgentSocketListenEvent, data: unknown) {\n if (event === AgentSocketListenEvent.AI_AGENT_TOOL_CALL) {\n this.config?.onAiAgentToolCall?.(data as ToolCallInfo);\n }\n if (event === AgentSocketListenEvent.EXCEPTION) {\n this.config?.onError?.({\n type: \"sendMsgError\",\n errorMsg: data,\n });\n }\n }\n private handleMsgWsInfo(event: AgentSocketListenEvent, data: unknown) {\n if (event === AgentSocketListenEvent.EXCLUSIVE_MESSAGE_JOIN_ROOM) {\n const _data = data as AiAgentExclusiveEventsDataType;\n this.config?.onJoinRoom?.(_data?.data as JoinOrLeaveRoomParams);\n if (_data.success === false)\n this.config?.onError?.({\n type: \"joinRoomError\",\n errorMsg: \"加入房间失败\",\n });\n }\n if (event === AgentSocketListenEvent.AI_AGENT_MESSAGE) {\n const _data = data as AiAgentSocketData;\n try {\n const payload = JSON.parse(_data.payload) as AiAgentSocketMessagePayload;\n this.config?.onAiAgentMessage?.(payload);\n if (payload.type === AiAgentMessageType.TASK_ID) {\n this.currChatInfo.taskId = payload.id;\n }\n } catch {\n this.config?.onError?.({\n type: \"messageError\",\n errorMsg: \"智能体消息解析失败!\",\n });\n }\n }\n if (event === AgentSocketListenEvent.EXCEPTION) {\n const _data = data as SocketErrorData;\n if (_data.status === \"error\") {\n this.config?.onError?.({\n type: \"socketError\",\n errorMsg: _data.message,\n errorCode: _data.errorCode,\n });\n }\n }\n if (event === AgentSocketListenEvent.USER_BROADCAST) {\n const _data = data as UserBroadcastData;\n this.config?.onUserBroadcast?.(_data);\n }\n }\n\n async joinRoom(params: JoinOrLeaveRoomParams) {\n if (this.status === \"beforeInit\") {\n await this.init();\n }\n if (this.status === \"initializing\") {\n await waitSomeThingBeTrue(() => this.status === \"initialized\", 100);\n }\n this.wsForMsg?.emit(AgentSocketEmitEvent.ROOM_JOIN, params);\n }\n leaveRoom(params: JoinOrLeaveRoomParams) {\n this.wsForMsg?.emit(AgentSocketEmitEvent.ROOM_LEAVE, params);\n }\n\n stopOneChat() {\n this.wsForAsk?.emit(AgentSocketEmitEvent.AI_AGENT_REVOKE, {\n id: this.currChatInfo.taskId,\n });\n this.config?.onStopChat?.(this.currChatInfo.taskId);\n }\n\n broadcastMessage(params: AgentSocketEmitEventPayloadMap[AgentSocketEmitEvent.USER_BROADCAST]) {\n this.wsForMsg?.emit(AgentSocketEmitEvent.USER_BROADCAST, params);\n }\n\n closeWs() {\n this.wsForAsk?.close();\n this.wsForMsg?.close();\n }\n}\n"],"names":["_a"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ai-agent-message-manager.es.js","sources":["../../../../src/utils/ai-agent-message-manager/ai-agent-message-manager.ts"],"sourcesContent":["import { type Socket } from \"socket.io-client\";\nimport { RoomType } from \"@/hooks\";\nimport { generateRandomId } from \"../common/common\";\nimport { waitSomeThingBeTrue } from \"../wait-something\";\nimport {\n AgentSocketEmitEvent,\n AgentSocketListenEvent,\n AiAgentMessageType,\n AskWsListenEventList,\n MsgWsListenEventList,\n} from \"./constants\";\nimport {\n AgentSocketEmitEventPayloadMap,\n AiAgentExclusiveEventsDataType,\n AiAgentMessageManagerConfig,\n AiAgentSocketData,\n AiAgentSocketMessagePayload,\n JoinOrLeaveRoomParams,\n SendMsgToAiAgentComponentParams,\n SendMsgToAiAgentParams,\n SocketErrorData,\n ToolCallInfo,\n UserBroadcastData,\n} from \"./types\";\nimport { getErrorStr } from \"./utils\";\n\nexport class AiAgentMessageManager {\n /** 向 ai 问问题的 ws */\n wsForAsk: Socket | null = null;\n /** 和 ai 进行消息互动的 ws,主要两个功能:接收 ai 消息,前端广播消息 */\n wsForMsg: Socket | null = null;\n\n private config: AiAgentMessageManagerConfig | null = null;\n\n status: \"beforeInit\" | \"initialized\" | \"initializing\" = \"beforeInit\";\n\n currChatInfo: { taskId?: string; question?: string } = {};\n\n constructor(config: AiAgentMessageManagerConfig) {\n this.config = config;\n }\n\n setConfig(config: Partial<AiAgentMessageManagerConfig>) {\n const originConfig = this.config || ({} as AiAgentMessageManagerConfig);\n this.config = { ...originConfig, ...config };\n }\n\n async init() {\n this.status = \"initializing\";\n if (!this.config) {\n return;\n }\n if (!this.config?.getAuthInfo) {\n this.config.onError?.({\n type: \"configError\",\n errorMsg: \"AiAgentMessageManager init error: getAuthInfo is required\",\n });\n return;\n }\n const authInfo = await this.config?.getAuthInfo?.();\n if (!authInfo) {\n return;\n }\n const { SocketIoManager } = this.config;\n\n const finalAuthInfo = (() => {\n let guestToken = \"\";\n let spaceId = 0;\n let customSocketId = \"\";\n if (\"guestToken\" in authInfo) {\n guestToken = authInfo.guestToken;\n customSocketId = `guest-${generateRandomId()}`;\n }\n if (\"spaceId\" in authInfo) {\n spaceId = authInfo.spaceId;\n customSocketId = `${authInfo.userId}-${generateRandomId()}`;\n }\n return {\n \"guest-token\": guestToken,\n \"custom-socket-id\": customSocketId,\n \"space-id\": spaceId,\n };\n })();\n this.wsForAsk = new SocketIoManager(this.config.host || location.origin, {\n transports: [\"websocket\"],\n forceNew: true,\n path: \"/socket/easyv-ai/agent\",\n timeout: 5000,\n reconnection: true,\n reconnectionAttempts: 10,\n reconnectionDelay: 500,\n reconnectionDelayMax: 500,\n }).socket(\"/easyv-ai/agent\", {\n auth: finalAuthInfo,\n });\n this.wsForMsg = new SocketIoManager(this.config.host, {\n transports: [\"websocket\"],\n forceNew: true,\n path: \"/socket/easyv-mps\",\n timeout: 5000,\n reconnection: true,\n reconnectionAttempts: 10,\n reconnectionDelay: 500,\n reconnectionDelayMax: 500,\n }).socket(\"/easyv-mps\", {\n auth: finalAuthInfo,\n });\n\n AskWsListenEventList.forEach((event) => {\n this.wsForAsk?.on(event, (data) => {\n this.handleAskWsInfo(event, data);\n });\n });\n MsgWsListenEventList.forEach((event) => {\n this.wsForMsg?.on(event, (data) => {\n this.handleMsgWsInfo(event, data);\n });\n });\n this.status = \"initialized\";\n }\n\n sendMsgToAiAgent(params: SendMsgToAiAgentParams | SendMsgToAiAgentComponentParams) {\n const { type, ...restParams } = params;\n const path = type === RoomType.AI_AGENT ? \"ai-agent-chat\" : \"ai-agent-component-chat\";\n this.currChatInfo.question = restParams.question;\n this.wsForAsk?.emit(path, restParams);\n this.config?.onSendMsgToAi?.(params);\n }\n sendToolResultToAiAgent(result: string) {\n this.wsForAsk?.emit(AgentSocketEmitEvent.AI_AGENT_TOOL_RESULT, {\n id: this.currChatInfo.taskId,\n result,\n });\n }\n\n private handleAskWsInfo(event: AgentSocketListenEvent, data: unknown) {\n if (event === AgentSocketListenEvent.AI_AGENT_TOOL_CALL) {\n this.config?.onAiAgentToolCall?.(data as ToolCallInfo);\n }\n if (event === AgentSocketListenEvent.EXCEPTION) {\n this.config?.onError?.({\n type: \"sendMsgError\",\n errorMsg: data,\n });\n }\n if (event === AgentSocketListenEvent.ERROR) {\n this.config?.onError?.({\n type: \"socketError\",\n errorMsg: getErrorStr(data),\n extraData: data,\n });\n }\n }\n private handleMsgWsInfo(event: AgentSocketListenEvent, data: unknown) {\n if (event === AgentSocketListenEvent.EXCLUSIVE_MESSAGE_JOIN_ROOM) {\n const _data = data as AiAgentExclusiveEventsDataType;\n this.config?.onJoinRoom?.(_data?.data as JoinOrLeaveRoomParams);\n if (_data.success === false)\n this.config?.onError?.({\n type: \"joinRoomError\",\n errorMsg: \"加入房间失败\",\n });\n }\n if (event === AgentSocketListenEvent.AI_AGENT_MESSAGE) {\n const _data = data as AiAgentSocketData;\n try {\n const payload = JSON.parse(_data.payload) as AiAgentSocketMessagePayload;\n this.config?.onAiAgentMessage?.(payload);\n if (payload.type === AiAgentMessageType.TASK_ID) {\n this.currChatInfo.taskId = payload.id;\n }\n } catch {\n this.config?.onError?.({\n type: \"messageError\",\n errorMsg: \"智能体消息解析失败!\",\n });\n }\n }\n if (event === AgentSocketListenEvent.EXCEPTION) {\n const _data = data as SocketErrorData;\n if (_data.status === \"error\") {\n this.config?.onError?.({\n type: \"socketError\",\n errorMsg: _data.message,\n errorCode: _data.errorCode,\n });\n }\n }\n if (event === AgentSocketListenEvent.USER_BROADCAST) {\n const _data = data as UserBroadcastData;\n this.config?.onUserBroadcast?.(_data);\n }\n }\n\n async joinRoom(params: JoinOrLeaveRoomParams) {\n if (this.status === \"beforeInit\") {\n await this.init();\n }\n if (this.status === \"initializing\") {\n await waitSomeThingBeTrue(() => this.status === \"initialized\", 100);\n }\n this.wsForMsg?.emit(AgentSocketEmitEvent.ROOM_JOIN, params);\n }\n leaveRoom(params: JoinOrLeaveRoomParams) {\n this.wsForMsg?.emit(AgentSocketEmitEvent.ROOM_LEAVE, params);\n }\n\n stopOneChat() {\n this.wsForAsk?.emit(AgentSocketEmitEvent.AI_AGENT_REVOKE, {\n id: this.currChatInfo.taskId,\n });\n this.config?.onStopChat?.(this.currChatInfo.taskId);\n }\n\n broadcastMessage(params: AgentSocketEmitEventPayloadMap[AgentSocketEmitEvent.USER_BROADCAST]) {\n this.wsForMsg?.emit(AgentSocketEmitEvent.USER_BROADCAST, params);\n }\n\n closeWs() {\n this.wsForAsk?.close();\n this.wsForMsg?.close();\n }\n}\n"],"names":["_a"],"mappings":"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"}
|
|
@@ -38,6 +38,7 @@ var AgentSocketListenEvent = /* @__PURE__ */ ((AgentSocketListenEvent2) => {
|
|
|
38
38
|
AgentSocketListenEvent2["EXCLUSIVE_MESSAGE_JOIN_ROOM"] = "exclusive-message-join-room";
|
|
39
39
|
AgentSocketListenEvent2["EXCLUSIVE_MESSAGE_AI_AGENT_CHAT"] = "exclusive-message-ai-agent-chat";
|
|
40
40
|
AgentSocketListenEvent2["EXCLUSIVE_MESSAGE_AI_AGENT_COMPONENT_CHAT"] = "exclusive-message-ai-agent-component-chat";
|
|
41
|
+
AgentSocketListenEvent2["ERROR"] = "error";
|
|
41
42
|
AgentSocketListenEvent2["AI_AGENT_MESSAGE"] = "broadcast-ai-agent-message";
|
|
42
43
|
AgentSocketListenEvent2["USER_BROADCAST"] = "broadcast-user-broadcast";
|
|
43
44
|
AgentSocketListenEvent2["AI_AGENT_TOOL_CALL"] = "ai-agent-tool-call";
|
|
@@ -52,8 +53,9 @@ const AskWsListenEventList = [
|
|
|
52
53
|
"exclusive-message-ai-agent-chat",
|
|
53
54
|
"exclusive-message-ai-agent-component-chat",
|
|
54
55
|
"ai-agent-tool-call",
|
|
55
|
-
"exception"
|
|
56
|
-
|
|
56
|
+
"exception",
|
|
57
|
+
"error"
|
|
58
|
+
/* ERROR */
|
|
57
59
|
];
|
|
58
60
|
const MsgWsListenEventList = [
|
|
59
61
|
"connect-timeout",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.es.js","sources":["../../../../src/utils/ai-agent-message-manager/constants.ts"],"sourcesContent":["export enum AiAgentMessageType {\n CONVERSION_START = \"conversation_start\",\n CONVERSION_END = \"conversation_end\",\n DASHBOARD = \"dashboard\", // 消息为组件渲染相关内容, content 为 DashboardContext\n TEXT = \"text\", // 常规文字消息, content 为纯文本\n QUESTION = \"question\", // 问题, content 为纯文本\n TITLE = \"title\", // 标题, content 为纯文本\n ERROR = \"error\",\n /** 数字人信息 */\n DIGITAL_MAN_STATUS = \"digital_man_status\",\n /** 智能体执行步骤,包括工具执行、模型调用、数据处理等,纯文本 */\n EXECUTION_STEP = \"execution_step\",\n /** 任务id,用于关联智能体执行过程中的消息 */\n TASK_ID = \"task_id\",\n /** 数字人发送指令 */\n INSTRUCTION_MESSAGE = \"instruction_message\",\n DIGITAL_HUMAN_MESSAGE = \"digital_human_message\",\n}\n\nexport enum AgentDataSource {\n KNOWLEDGE = \"knowledge\",\n WEB = \"web\",\n DATASET = \"dataset\",\n}\n/** 智能体 ws 中发送的事件 */\nexport enum AgentSocketEmitEvent {\n AI_AGENT_CHAT = \"ai-agent-chat\", // 智能体发送对话\n AI_AGENT_COMPONENT_CHAT = \"ai-agent-component-chat\",\n AI_AGENT_REVOKE = \"ai-agent-revoke\", // 撤销某个对话,智能体和组件都用这个接口\n AI_AGENT_TOOL_RESULT = \"ai-agent-tool-result\", // 前端调用某个工具后发送结果\n ROOM_JOIN = \"join-room\", // 加入房间\n ROOM_LEAVE = \"leave-room\", // 离开房间\n /** 前端主动发送的广播消息 */\n USER_BROADCAST = \"user-broadcast\",\n}\n\n/** 智能体 ws 中监听的事件, 实际上这个 ws 连接可以使用 SocketEventType 上的所有事件。\n * - 应该继承于 SocketEventType ,但是枚举无法继承 */\nexport enum AgentSocketListenEvent {\n CONNECT_TIMEOUT = \"connect-timeout\",\n CONNECT = \"connect\",\n CONNECT_ERROR = \"connect-error\",\n RECONNECT = \"reconnect\",\n /** 后端错误 */\n EXCEPTION = \"exception\",\n EXCLUSIVE_MESSAGE_JOIN_ROOM = \"exclusive-message-join-room\",\n EXCLUSIVE_MESSAGE_AI_AGENT_CHAT = \"exclusive-message-ai-agent-chat\",\n EXCLUSIVE_MESSAGE_AI_AGENT_COMPONENT_CHAT = \"exclusive-message-ai-agent-component-chat\",\n /** ai 智能体消息 */\n AI_AGENT_MESSAGE = \"broadcast-ai-agent-message\",\n /** 前端主动发送的广播消息 */\n USER_BROADCAST = \"broadcast-user-broadcast\",\n /** 后端通知前端调用某个工具的事件 */\n AI_AGENT_TOOL_CALL = \"ai-agent-tool-call\",\n}\n\nexport enum AiAgentRoomType {\n AI_AGENT = \"ai_agent\",\n AI_AGENT_COMPONENT = \"ai_agent_component\",\n}\n\nexport const AskWsListenEventList = [\n AgentSocketListenEvent.EXCLUSIVE_MESSAGE_AI_AGENT_CHAT,\n AgentSocketListenEvent.EXCLUSIVE_MESSAGE_AI_AGENT_COMPONENT_CHAT,\n AgentSocketListenEvent.AI_AGENT_TOOL_CALL,\n AgentSocketListenEvent.EXCEPTION,\n] as const;\n\nexport const MsgWsListenEventList = [\n AgentSocketListenEvent.CONNECT_TIMEOUT,\n AgentSocketListenEvent.CONNECT,\n AgentSocketListenEvent.CONNECT_ERROR,\n AgentSocketListenEvent.RECONNECT,\n AgentSocketListenEvent.EXCEPTION,\n AgentSocketListenEvent.EXCLUSIVE_MESSAGE_AI_AGENT_CHAT,\n AgentSocketListenEvent.EXCLUSIVE_MESSAGE_AI_AGENT_COMPONENT_CHAT,\n AgentSocketListenEvent.EXCLUSIVE_MESSAGE_JOIN_ROOM,\n AgentSocketListenEvent.AI_AGENT_MESSAGE,\n AgentSocketListenEvent.USER_BROADCAST,\n];\n\n/** 智能体在回答问题的状态 */\nexport enum AgentStatus {\n RUNNING = \"running\",\n /** 不存在认为未执行 */\n END = \"end\",\n PAUSED = \"paused\",\n}\n"],"names":["AiAgentMessageType","AgentDataSource","AgentSocketEmitEvent","AgentSocketListenEvent","AiAgentRoomType","AgentStatus"],"mappings":"AAAY,IAAA,uCAAAA,wBAAL;AACLA,sBAAA,kBAAmB,IAAA;AACnBA,sBAAA,gBAAiB,IAAA;AACjBA,sBAAA,WAAY,IAAA;AACZA,sBAAA,MAAO,IAAA;AACPA,sBAAA,UAAW,IAAA;AACXA,sBAAA,OAAQ,IAAA;AACRA,sBAAA,OAAQ,IAAA;AAERA,sBAAA,oBAAqB,IAAA;AAErBA,sBAAA,gBAAiB,IAAA;AAEjBA,sBAAA,SAAU,IAAA;AAEVA,sBAAA,qBAAsB,IAAA;AACtBA,sBAAA,uBAAwB,IAAA;AAhBdA,SAAAA;AAAA,GAAA,sBAAA,CAAA,CAAA;AAmBA,IAAA,oCAAAC,qBAAL;AACLA,mBAAA,WAAY,IAAA;AACZA,mBAAA,KAAM,IAAA;AACNA,mBAAA,SAAU,IAAA;AAHAA,SAAAA;AAAA,GAAA,mBAAA,CAAA,CAAA;AAMA,IAAA,yCAAAC,0BAAL;AACLA,wBAAA,eAAgB,IAAA;AAChBA,wBAAA,yBAA0B,IAAA;AAC1BA,wBAAA,iBAAkB,IAAA;AAClBA,wBAAA,sBAAuB,IAAA;AACvBA,wBAAA,WAAY,IAAA;AACZA,wBAAA,YAAa,IAAA;AAEbA,wBAAA,gBAAiB,IAAA;AARPA,SAAAA;AAAA,GAAA,wBAAA,CAAA,CAAA;AAaA,IAAA,2CAAAC,4BAAL;AACLA,0BAAA,iBAAkB,IAAA;AAClBA,0BAAA,SAAU,IAAA;AACVA,0BAAA,eAAgB,IAAA;AAChBA,0BAAA,WAAY,IAAA;AAEZA,0BAAA,WAAY,IAAA;AACZA,0BAAA,6BAA8B,IAAA;AAC9BA,0BAAA,iCAAkC,IAAA;AAClCA,0BAAA,2CAA4C,IAAA;AAE5CA,0BAAA,kBAAmB,IAAA;AAEnBA,0BAAA,gBAAiB,IAAA;AAEjBA,0BAAA,oBAAqB,IAAA;
|
|
1
|
+
{"version":3,"file":"constants.es.js","sources":["../../../../src/utils/ai-agent-message-manager/constants.ts"],"sourcesContent":["export enum AiAgentMessageType {\n CONVERSION_START = \"conversation_start\",\n CONVERSION_END = \"conversation_end\",\n DASHBOARD = \"dashboard\", // 消息为组件渲染相关内容, content 为 DashboardContext\n TEXT = \"text\", // 常规文字消息, content 为纯文本\n QUESTION = \"question\", // 问题, content 为纯文本\n TITLE = \"title\", // 标题, content 为纯文本\n ERROR = \"error\",\n /** 数字人信息 */\n DIGITAL_MAN_STATUS = \"digital_man_status\",\n /** 智能体执行步骤,包括工具执行、模型调用、数据处理等,纯文本 */\n EXECUTION_STEP = \"execution_step\",\n /** 任务id,用于关联智能体执行过程中的消息 */\n TASK_ID = \"task_id\",\n /** 数字人发送指令 */\n INSTRUCTION_MESSAGE = \"instruction_message\",\n DIGITAL_HUMAN_MESSAGE = \"digital_human_message\",\n}\n\nexport enum AgentDataSource {\n KNOWLEDGE = \"knowledge\",\n WEB = \"web\",\n DATASET = \"dataset\",\n}\n/** 智能体 ws 中发送的事件 */\nexport enum AgentSocketEmitEvent {\n AI_AGENT_CHAT = \"ai-agent-chat\", // 智能体发送对话\n AI_AGENT_COMPONENT_CHAT = \"ai-agent-component-chat\",\n AI_AGENT_REVOKE = \"ai-agent-revoke\", // 撤销某个对话,智能体和组件都用这个接口\n AI_AGENT_TOOL_RESULT = \"ai-agent-tool-result\", // 前端调用某个工具后发送结果\n ROOM_JOIN = \"join-room\", // 加入房间\n ROOM_LEAVE = \"leave-room\", // 离开房间\n /** 前端主动发送的广播消息 */\n USER_BROADCAST = \"user-broadcast\",\n}\n\n/** 智能体 ws 中监听的事件, 实际上这个 ws 连接可以使用 SocketEventType 上的所有事件。\n * - 应该继承于 SocketEventType ,但是枚举无法继承 */\nexport enum AgentSocketListenEvent {\n CONNECT_TIMEOUT = \"connect-timeout\",\n CONNECT = \"connect\",\n CONNECT_ERROR = \"connect-error\",\n RECONNECT = \"reconnect\",\n /** 后端错误 */\n EXCEPTION = \"exception\",\n EXCLUSIVE_MESSAGE_JOIN_ROOM = \"exclusive-message-join-room\",\n EXCLUSIVE_MESSAGE_AI_AGENT_CHAT = \"exclusive-message-ai-agent-chat\",\n EXCLUSIVE_MESSAGE_AI_AGENT_COMPONENT_CHAT = \"exclusive-message-ai-agent-component-chat\",\n /** 错误 */\n ERROR = \"error\",\n /** ai 智能体消息 */\n AI_AGENT_MESSAGE = \"broadcast-ai-agent-message\",\n /** 前端主动发送的广播消息 */\n USER_BROADCAST = \"broadcast-user-broadcast\",\n /** 后端通知前端调用某个工具的事件 */\n AI_AGENT_TOOL_CALL = \"ai-agent-tool-call\",\n}\n\nexport enum AiAgentRoomType {\n AI_AGENT = \"ai_agent\",\n AI_AGENT_COMPONENT = \"ai_agent_component\",\n}\n\nexport const AskWsListenEventList = [\n AgentSocketListenEvent.EXCLUSIVE_MESSAGE_AI_AGENT_CHAT,\n AgentSocketListenEvent.EXCLUSIVE_MESSAGE_AI_AGENT_COMPONENT_CHAT,\n AgentSocketListenEvent.AI_AGENT_TOOL_CALL,\n AgentSocketListenEvent.EXCEPTION,\n AgentSocketListenEvent.ERROR,\n] as const;\n\nexport const MsgWsListenEventList = [\n AgentSocketListenEvent.CONNECT_TIMEOUT,\n AgentSocketListenEvent.CONNECT,\n AgentSocketListenEvent.CONNECT_ERROR,\n AgentSocketListenEvent.RECONNECT,\n AgentSocketListenEvent.EXCEPTION,\n AgentSocketListenEvent.EXCLUSIVE_MESSAGE_AI_AGENT_CHAT,\n AgentSocketListenEvent.EXCLUSIVE_MESSAGE_AI_AGENT_COMPONENT_CHAT,\n AgentSocketListenEvent.EXCLUSIVE_MESSAGE_JOIN_ROOM,\n AgentSocketListenEvent.AI_AGENT_MESSAGE,\n AgentSocketListenEvent.USER_BROADCAST,\n];\n\n/** 智能体在回答问题的状态 */\nexport enum AgentStatus {\n RUNNING = \"running\",\n /** 不存在认为未执行 */\n END = \"end\",\n PAUSED = \"paused\",\n}\n"],"names":["AiAgentMessageType","AgentDataSource","AgentSocketEmitEvent","AgentSocketListenEvent","AiAgentRoomType","AgentStatus"],"mappings":"AAAY,IAAA,uCAAAA,wBAAL;AACLA,sBAAA,kBAAmB,IAAA;AACnBA,sBAAA,gBAAiB,IAAA;AACjBA,sBAAA,WAAY,IAAA;AACZA,sBAAA,MAAO,IAAA;AACPA,sBAAA,UAAW,IAAA;AACXA,sBAAA,OAAQ,IAAA;AACRA,sBAAA,OAAQ,IAAA;AAERA,sBAAA,oBAAqB,IAAA;AAErBA,sBAAA,gBAAiB,IAAA;AAEjBA,sBAAA,SAAU,IAAA;AAEVA,sBAAA,qBAAsB,IAAA;AACtBA,sBAAA,uBAAwB,IAAA;AAhBdA,SAAAA;AAAA,GAAA,sBAAA,CAAA,CAAA;AAmBA,IAAA,oCAAAC,qBAAL;AACLA,mBAAA,WAAY,IAAA;AACZA,mBAAA,KAAM,IAAA;AACNA,mBAAA,SAAU,IAAA;AAHAA,SAAAA;AAAA,GAAA,mBAAA,CAAA,CAAA;AAMA,IAAA,yCAAAC,0BAAL;AACLA,wBAAA,eAAgB,IAAA;AAChBA,wBAAA,yBAA0B,IAAA;AAC1BA,wBAAA,iBAAkB,IAAA;AAClBA,wBAAA,sBAAuB,IAAA;AACvBA,wBAAA,WAAY,IAAA;AACZA,wBAAA,YAAa,IAAA;AAEbA,wBAAA,gBAAiB,IAAA;AARPA,SAAAA;AAAA,GAAA,wBAAA,CAAA,CAAA;AAaA,IAAA,2CAAAC,4BAAL;AACLA,0BAAA,iBAAkB,IAAA;AAClBA,0BAAA,SAAU,IAAA;AACVA,0BAAA,eAAgB,IAAA;AAChBA,0BAAA,WAAY,IAAA;AAEZA,0BAAA,WAAY,IAAA;AACZA,0BAAA,6BAA8B,IAAA;AAC9BA,0BAAA,iCAAkC,IAAA;AAClCA,0BAAA,2CAA4C,IAAA;AAE5CA,0BAAA,OAAQ,IAAA;AAERA,0BAAA,kBAAmB,IAAA;AAEnBA,0BAAA,gBAAiB,IAAA;AAEjBA,0BAAA,oBAAqB,IAAA;AAjBXA,SAAAA;AAAA,GAAA,0BAAA,CAAA,CAAA;AAoBA,IAAA,oCAAAC,qBAAL;AACLA,mBAAA,UAAW,IAAA;AACXA,mBAAA,oBAAqB,IAAA;AAFXA,SAAAA;AAAA,GAAA,mBAAA,CAAA,CAAA;AAKL,MAAM,uBAAuB;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AACF;AAEO,MAAM,uBAAuB;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AACF;AAGY,IAAA,gCAAAC,iBAAL;AACLA,eAAA,SAAU,IAAA;AAEVA,eAAA,KAAM,IAAA;AACNA,eAAA,QAAS,IAAA;AAJCA,SAAAA;AAAA,GAAA,eAAA,CAAA,CAAA;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.es.js","sources":["../../../../src/utils/ai-agent-message-manager/types.ts"],"sourcesContent":["import { type Manager } from \"socket.io-client\";\nimport {\n AiMessageContentItem,\n EasyvPlot,\n EchartsPlot,\n} from \"@/components/ai-components/ai-message-render\";\nimport { RoomType } from \"@/hooks\";\nimport {\n AgentDataSource,\n AgentSocketEmitEvent,\n AgentStatus,\n AiAgentMessageType,\n} from \"./constants\";\n\nexport interface AiChatHistory {\n question: string;\n response: (Pick<AiMessageContentItem, \"plotContext\" | \"echartsContext\"> & {\n content?: string | undefined;\n })[];\n}\n\nexport interface ToolCallInfo {\n /** 此次任务的 唯一 id */\n id: string;\n /** 此次需要调用的工具名称 */\n toolName: string;\n /** 工具调用相关信息,不同工具有差异 */\n toolInfo: Record<string, unknown>;\n}\n\nexport interface AiAgentExclusiveEventsDataType {\n success: boolean;\n data?: unknown;\n}\n\nexport interface AiAgentSocketData {\n /** 消息 id, 断开重联后,可以通过这个id来获取miss的消息 */\n id: string;\n origin: \"server\" | \"client\";\n /** JSON.parse 后得到结构化数据 */\n payload: string; // ;\n /** 房间 id,从会话id 派生出来 */\n roomId: string;\n}\n\nexport interface AiAgentSocketMessagePayload {\n type: AiAgentMessageType;\n /** type 为 digital_human_message 时为对象。 */\n content?: string | Record<string, any>;\n data?: any;\n /** easyv 图表数据 */\n plotContext?: EasyvPlot;\n /** eCharts 图表数据 */\n echartsContext?: EchartsPlot;\n /** task_id 的消息类型时才有 */\n id?: string;\n /** 图表占位符 */\n dashboardPlaceholder?: number;\n}\n\nexport type AiAgentAuthConfig =\n | {\n spaceId: number;\n userId: number;\n }\n | {\n guestToken: string;\n };\nexport type SocketIoManager = typeof Manager;\n\nexport interface AgentError {\n type:\n | \"connectError\"\n | \"messageError\"\n | \"joinRoomError\"\n | \"configError\"\n | \"socketError\"\n | \"sendMsgError\";\n errorMsg: any;\n errorCode?: number;\n}\n\nexport type UserBroadcastData = {\n id: string;\n roomId: string;\n origin: string;\n payload: string;\n};\n\n/** 这个 config 里的函数因为只在初始化调用,所以函数内部拿到的 state 是初始化时的 state,需要用 ref 透传才能拿到最新的 */\nexport interface AiAgentMessageManagerConfig {\n SocketIoManager: SocketIoManager;\n host?: string;\n /** 传入用 useMemoizedFn 包裹的函数 */\n getAuthInfo: () => Promise<AiAgentAuthConfig>;\n /** 传入用 useMemoizedFn 包裹的函数 */\n onAiAgentMessage?: (data: AiAgentSocketMessagePayload) => void;\n /** 传入用 useMemoizedFn 包裹的函数。 前端主动发送的广播消息 */\n onUserBroadcast?: (data: UserBroadcastData) => void;\n /** 传入用 useMemoizedFn 包裹的函数。 后端通知前端调用某个工具的事件 */\n onAiAgentToolCall?: (data: ToolCallInfo) => void;\n /** 传入用 useMemoizedFn 包裹的函数 */\n onError?: (error: AgentError) => void;\n /** @param id 单次会话,后端返回的 id,stop 时立刻调用,真正的会话停止时 conversion_end 消息 */\n /** 传入用 useMemoizedFn 包裹的函数 */\n onStopChat?: (id?: string) => void;\n /** 传入用 useMemoizedFn 包裹的函数 */\n onSendMsgToAi?: (data: SendMsgToAiAgentParams | SendMsgToAiAgentComponentParams) => void;\n /** 传入用 useMemoizedFn 包裹的函数 */\n onJoinRoom?: (data: JoinOrLeaveRoomParams) => void;\n}\nexport interface SendMsgToAiAgentParams {\n type: RoomType.AI_AGENT;\n agentId: number;\n question: string;\n agentDataSource: AgentDataSource[];\n sessionId: string;\n}\nexport interface SendMsgToAiAgentComponentParams {\n type: RoomType.AI_AGENT_COMPONENT;\n agentComponentId: number;\n question: string;\n history: AiChatHistory[];\n /** 智能体组件的整个会话的 id,第一次聊天时前端生成\n * - 独立模式需要,共享模式不需要\n */\n sessionId?: string;\n}\nexport interface JoinOrLeaveRoomParams {\n roomType: RoomType;\n /** 智能体 id 或 智能体组件 id */\n id: number;\n /** 如果是独立对话,那么需要 subIds,共享会话不需要,共享会话会根据id去发 */\n subIds?: string[]; // 对话 id\n /** 智能体在回答问题的状态 */\n agentStatus?: AgentStatus;\n}\n\nexport interface SocketErrorData {\n status: string;\n message: string;\n errorCode: AiAgentMpsErrorCode;\n}\n\n/** 消息推送的错误码 */\nexport enum AiAgentMpsErrorCode {\n GUEST_TOKEN_ERROR = 1000,\n UNAUTH = 1001,\n}\n\nexport interface AgentSocketEmitEventPayloadMap {\n [AgentSocketEmitEvent.USER_BROADCAST]: JoinOrLeaveRoomParams & { data: string };\n [AgentSocketEmitEvent.AI_AGENT_REVOKE]: {\n /** 开始对话返回的任务id */\n id: string;\n };\n [AgentSocketEmitEvent.AI_AGENT_TOOL_RESULT]: {\n /** 开始对话返回的任务id */\n id: string;\n result: string;\n };\n}\n"],"names":["AiAgentMpsErrorCode"],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.es.js","sources":["../../../../src/utils/ai-agent-message-manager/types.ts"],"sourcesContent":["import { type Manager } from \"socket.io-client\";\nimport {\n AiMessageContentItem,\n EasyvPlot,\n EchartsPlot,\n} from \"@/components/ai-components/ai-message-render\";\nimport { RoomType } from \"@/hooks\";\nimport {\n AgentDataSource,\n AgentSocketEmitEvent,\n AgentStatus,\n AiAgentMessageType,\n} from \"./constants\";\n\nexport interface AiChatHistory {\n question: string;\n response: (Pick<AiMessageContentItem, \"plotContext\" | \"echartsContext\"> & {\n content?: string | undefined;\n })[];\n}\n\nexport interface ToolCallInfo {\n /** 此次任务的 唯一 id */\n id: string;\n /** 此次需要调用的工具名称 */\n toolName: string;\n /** 工具调用相关信息,不同工具有差异 */\n toolInfo: Record<string, unknown>;\n}\n\nexport interface AiAgentExclusiveEventsDataType {\n success: boolean;\n data?: unknown;\n}\n\nexport interface AiAgentSocketData {\n /** 消息 id, 断开重联后,可以通过这个id来获取miss的消息 */\n id: string;\n origin: \"server\" | \"client\";\n /** JSON.parse 后得到结构化数据 */\n payload: string; // ;\n /** 房间 id,从会话id 派生出来 */\n roomId: string;\n}\n\nexport interface AiAgentSocketMessagePayload {\n type: AiAgentMessageType;\n /** type 为 digital_human_message 时为对象。 */\n content?: string | Record<string, any>;\n data?: any;\n /** easyv 图表数据 */\n plotContext?: EasyvPlot;\n /** eCharts 图表数据 */\n echartsContext?: EchartsPlot;\n /** task_id 的消息类型时才有 */\n id?: string;\n /** 图表占位符 */\n dashboardPlaceholder?: number;\n}\n\nexport type AiAgentAuthConfig =\n | {\n spaceId: number;\n userId: number;\n }\n | {\n guestToken: string;\n };\nexport type SocketIoManager = typeof Manager;\n\nexport interface AgentError {\n type:\n | \"connectError\"\n | \"messageError\"\n | \"joinRoomError\"\n | \"configError\"\n | \"socketError\"\n | \"sendMsgError\";\n errorMsg: any;\n errorCode?: number;\n extraData?: any;\n}\n\nexport type UserBroadcastData = {\n id: string;\n roomId: string;\n origin: string;\n payload: string;\n};\n\n/** 这个 config 里的函数因为只在初始化调用,所以函数内部拿到的 state 是初始化时的 state,需要用 ref 透传才能拿到最新的 */\nexport interface AiAgentMessageManagerConfig {\n SocketIoManager: SocketIoManager;\n host?: string;\n /** 传入用 useMemoizedFn 包裹的函数 */\n getAuthInfo: () => Promise<AiAgentAuthConfig>;\n /** 传入用 useMemoizedFn 包裹的函数 */\n onAiAgentMessage?: (data: AiAgentSocketMessagePayload) => void;\n /** 传入用 useMemoizedFn 包裹的函数。 前端主动发送的广播消息 */\n onUserBroadcast?: (data: UserBroadcastData) => void;\n /** 传入用 useMemoizedFn 包裹的函数。 后端通知前端调用某个工具的事件 */\n onAiAgentToolCall?: (data: ToolCallInfo) => void;\n /** 传入用 useMemoizedFn 包裹的函数 */\n onError?: (error: AgentError) => void;\n /** @param id 单次会话,后端返回的 id,stop 时立刻调用,真正的会话停止时 conversion_end 消息 */\n /** 传入用 useMemoizedFn 包裹的函数 */\n onStopChat?: (id?: string) => void;\n /** 传入用 useMemoizedFn 包裹的函数 */\n onSendMsgToAi?: (data: SendMsgToAiAgentParams | SendMsgToAiAgentComponentParams) => void;\n /** 传入用 useMemoizedFn 包裹的函数 */\n onJoinRoom?: (data: JoinOrLeaveRoomParams) => void;\n}\nexport interface SendMsgToAiAgentParams {\n type: RoomType.AI_AGENT;\n agentId: number;\n question: string;\n agentDataSource: AgentDataSource[];\n sessionId: string;\n}\nexport interface SendMsgToAiAgentComponentParams {\n type: RoomType.AI_AGENT_COMPONENT;\n agentComponentId: number;\n question: string;\n history: AiChatHistory[];\n /** 智能体组件的整个会话的 id,第一次聊天时前端生成\n * - 独立模式需要,共享模式不需要\n */\n sessionId?: string;\n}\nexport interface JoinOrLeaveRoomParams {\n roomType: RoomType;\n /** 智能体 id 或 智能体组件 id */\n id: number;\n /** 如果是独立对话,那么需要 subIds,共享会话不需要,共享会话会根据id去发 */\n subIds?: string[]; // 对话 id\n /** 智能体在回答问题的状态 */\n agentStatus?: AgentStatus;\n}\n\nexport interface SocketErrorData {\n status: string;\n message: string;\n errorCode: AiAgentMpsErrorCode;\n}\n\n/** 消息推送的错误码 */\nexport enum AiAgentMpsErrorCode {\n GUEST_TOKEN_ERROR = 1000,\n UNAUTH = 1001,\n}\n\nexport interface AgentSocketEmitEventPayloadMap {\n [AgentSocketEmitEvent.USER_BROADCAST]: JoinOrLeaveRoomParams & { data: string };\n [AgentSocketEmitEvent.AI_AGENT_REVOKE]: {\n /** 开始对话返回的任务id */\n id: string;\n };\n [AgentSocketEmitEvent.AI_AGENT_TOOL_RESULT]: {\n /** 开始对话返回的任务id */\n id: string;\n result: string;\n };\n}\n"],"names":["AiAgentMpsErrorCode"],"mappings":"AAkJY,IAAA,wCAAAA,yBAAL;AACLA,uBAAAA,qBAAA,uBAAoB,GAApB,IAAA;AACAA,uBAAAA,qBAAA,YAAS,IAAT,IAAA;AAFUA,SAAAA;AAAA,GAAA,uBAAA,CAAA,CAAA;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.es.js","sources":["../../../../src/utils/ai-agent-message-manager/utils.ts"],"sourcesContent":["export const getCookieString = () => {\n if (typeof document !== \"undefined\" && document.cookie) {\n return document.cookie;\n }\n return \"\";\n};\n\nexport const getErrorStr = (data: any) => {\n if (data?.name === \"TokenExpiredError\") {\n return \"token 已过期,请检查权限是否已到期\";\n }\n return \"未知错误\";\n};\n"],"names":[],"mappings":"AAOa,MAAA,cAAc,CAAC,SAAc;AACpC,OAAA,6BAAM,UAAS,qBAAqB;AAC/B,WAAA;AAAA,EAAA;AAEF,SAAA;AACT;"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
function buildQueryString(params) {
|
|
2
|
+
const queryParts = [];
|
|
3
|
+
for (const [key, value] of Object.entries(params)) {
|
|
4
|
+
if (value !== void 0 && value !== null) {
|
|
5
|
+
const encodedKey = encodeURIComponent(key);
|
|
6
|
+
const encodedValue = encodeURIComponent(String(value));
|
|
7
|
+
queryParts.push(`${encodedKey}=${encodedValue}`);
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
return queryParts.length > 0 ? `?${queryParts.join("&")}` : "";
|
|
11
|
+
}
|
|
12
|
+
function easyFetch(url, options = {}) {
|
|
13
|
+
const {
|
|
14
|
+
method = "GET",
|
|
15
|
+
headers = {},
|
|
16
|
+
body,
|
|
17
|
+
timeout = 2e4,
|
|
18
|
+
// 默认 10 秒超时
|
|
19
|
+
signal,
|
|
20
|
+
query,
|
|
21
|
+
getAbortFn
|
|
22
|
+
} = options;
|
|
23
|
+
let finalUrl = url;
|
|
24
|
+
if (query && Object.keys(query).length > 0) {
|
|
25
|
+
const queryString = buildQueryString(query);
|
|
26
|
+
finalUrl = url + queryString;
|
|
27
|
+
}
|
|
28
|
+
const controller = new AbortController();
|
|
29
|
+
if (signal) {
|
|
30
|
+
signal.addEventListener("abort", () => controller.abort());
|
|
31
|
+
controller.signal.addEventListener("abort", () => {
|
|
32
|
+
if (!signal.aborted) {
|
|
33
|
+
const error = new Error("Request was aborted");
|
|
34
|
+
error.name = "AbortError";
|
|
35
|
+
throw error;
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
const timeoutId = setTimeout(() => controller.abort(), timeout);
|
|
40
|
+
const requestOptions = {
|
|
41
|
+
method,
|
|
42
|
+
headers: {
|
|
43
|
+
"Content-Type": "application/json",
|
|
44
|
+
...headers
|
|
45
|
+
},
|
|
46
|
+
signal: controller.signal
|
|
47
|
+
};
|
|
48
|
+
if (body && method !== "GET") {
|
|
49
|
+
requestOptions.body = JSON.stringify(body);
|
|
50
|
+
}
|
|
51
|
+
const promise = (async () => {
|
|
52
|
+
try {
|
|
53
|
+
getAbortFn == null ? void 0 : getAbortFn(controller.abort);
|
|
54
|
+
const response = await fetch(finalUrl, requestOptions);
|
|
55
|
+
clearTimeout(timeoutId);
|
|
56
|
+
if (!response.ok) {
|
|
57
|
+
throw new Error(`HTTP Error: ${response.status} ${response.statusText}`);
|
|
58
|
+
}
|
|
59
|
+
let data;
|
|
60
|
+
const contentType = response.headers.get("content-type");
|
|
61
|
+
if (contentType && contentType.includes("application/json")) {
|
|
62
|
+
data = await response.json();
|
|
63
|
+
} else {
|
|
64
|
+
data = await response.text();
|
|
65
|
+
}
|
|
66
|
+
console.log("%c 🐱 ==== easyv fetch res:", "color: orange; font-size: 16px;", data);
|
|
67
|
+
if ((data == null ? void 0 : data.success) === false) {
|
|
68
|
+
throw new Error((data == null ? void 0 : data.message) || "Request failed");
|
|
69
|
+
}
|
|
70
|
+
return data;
|
|
71
|
+
} catch (error) {
|
|
72
|
+
clearTimeout(timeoutId);
|
|
73
|
+
if (error instanceof Error) {
|
|
74
|
+
if (error.name === "AbortError") {
|
|
75
|
+
console.error("Request was cancelled");
|
|
76
|
+
} else {
|
|
77
|
+
console.error("Request failed:", error.message);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
throw error;
|
|
81
|
+
}
|
|
82
|
+
})();
|
|
83
|
+
return promise;
|
|
84
|
+
}
|
|
85
|
+
export {
|
|
86
|
+
easyFetch
|
|
87
|
+
};
|
|
88
|
+
//# sourceMappingURL=easy-fetch.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"easy-fetch.es.js","sources":["../../../../src/utils/easy-fetch/easy-fetch.ts"],"sourcesContent":["import { EasyFetchRes } from \"./types\";\n\ninterface EasyFetchOptions {\n method?: \"GET\" | \"POST\" | \"PUT\" | \"DELETE\" | \"PATCH\";\n headers?: Record<string, string>;\n body?: any;\n timeout?: number;\n signal?: AbortSignal;\n query?: Record<string, any>;\n getAbortFn?: (abort: () => void) => void; // 供用户获取取消函数的回调\n}\n\n// 辅助函数:将对象转换为查询字符串\nfunction buildQueryString(params: Record<string, any>): string {\n const queryParts: string[] = [];\n\n for (const [key, value] of Object.entries(params)) {\n if (value !== undefined && value !== null) {\n const encodedKey = encodeURIComponent(key);\n const encodedValue = encodeURIComponent(String(value));\n queryParts.push(`${encodedKey}=${encodedValue}`);\n }\n }\n\n return queryParts.length > 0 ? `?${queryParts.join(\"&\")}` : \"\";\n}\n\nexport function easyFetch<T = any>(\n url: string,\n options: EasyFetchOptions = {},\n): Promise<EasyFetchRes<T>> {\n const {\n method = \"GET\",\n headers = {},\n body,\n timeout = 20000, // 默认 10 秒超时\n signal,\n query,\n getAbortFn,\n } = options;\n\n // 处理 URL 和查询参数\n let finalUrl = url;\n if (query && Object.keys(query).length > 0) {\n const queryString = buildQueryString(query);\n finalUrl = url + queryString;\n }\n\n // 创建 AbortController 用于取消请求\n const controller = new AbortController();\n\n // 如果提供了外部 signal,将其与内部 controller 结合\n if (signal) {\n signal.addEventListener(\"abort\", () => controller.abort());\n controller.signal.addEventListener(\"abort\", () => {\n if (!signal.aborted) {\n // 如果是内部取消,抛出 AbortError\n const error = new Error(\"Request was aborted\");\n error.name = \"AbortError\";\n throw error;\n }\n });\n }\n\n // 设置超时\n const timeoutId = setTimeout(() => controller.abort(), timeout);\n\n // 准备请求配置\n const requestOptions: RequestInit = {\n method,\n headers: {\n \"Content-Type\": \"application/json\",\n ...headers,\n },\n signal: controller.signal,\n };\n\n // 如果有 body,序列化为 JSON\n if (body && method !== \"GET\") {\n requestOptions.body = JSON.stringify(body);\n }\n\n const promise = (async (): Promise<EasyFetchRes<T>> => {\n try {\n getAbortFn?.(controller.abort);\n const response = await fetch(finalUrl, requestOptions);\n clearTimeout(timeoutId);\n\n // 检查响应状态\n if (!response.ok) {\n // TODO: 用户可以在这里补充特定的错误处理逻辑\n // 例如:根据状态码抛出不同类型的错误\n throw new Error(`HTTP Error: ${response.status} ${response.statusText}`);\n }\n\n // 解析响应数据\n let data: EasyFetchRes<T>;\n const contentType = response.headers.get(\"content-type\");\n if (contentType && contentType.includes(\"application/json\")) {\n data = await response.json();\n } else {\n data = (await response.text()) as unknown as EasyFetchRes<T>;\n }\n\n console.log(\"%c 🐱 ==== easyv fetch res:\", \"color: orange; font-size: 16px;\", data);\n if (data?.success === false) {\n throw new Error(data?.message || \"Request failed\");\n }\n\n return data;\n } catch (error) {\n clearTimeout(timeoutId);\n\n // TODO: 用户可以在这里补充详细的错误处理逻辑\n // 例如:网络错误、超时错误、解析错误等\n if (error instanceof Error) {\n if (error.name === \"AbortError\") {\n // TODO: 处理取消请求的逻辑\n console.error(\"Request was cancelled\");\n } else {\n // TODO: 处理其他错误\n console.error(\"Request failed:\", error.message);\n }\n }\n\n // 重新抛出错误,让调用者处理\n throw error;\n }\n })();\n\n return promise;\n}\n"],"names":[],"mappings":"AAaA,SAAS,iBAAiB,QAAqC;AAC7D,QAAM,aAAuB,CAAC;AAE9B,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,MAAM,GAAG;AAC7C,QAAA,UAAU,UAAa,UAAU,MAAM;AACnC,YAAA,aAAa,mBAAmB,GAAG;AACzC,YAAM,eAAe,mBAAmB,OAAO,KAAK,CAAC;AACrD,iBAAW,KAAK,GAAG,UAAU,IAAI,YAAY,EAAE;AAAA,IAAA;AAAA,EACjD;AAGK,SAAA,WAAW,SAAS,IAAI,IAAI,WAAW,KAAK,GAAG,CAAC,KAAK;AAC9D;AAEO,SAAS,UACd,KACA,UAA4B,IACF;AACpB,QAAA;AAAA,IACJ,SAAS;AAAA,IACT,UAAU,CAAC;AAAA,IACX;AAAA,IACA,UAAU;AAAA;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,EAAA,IACE;AAGJ,MAAI,WAAW;AACf,MAAI,SAAS,OAAO,KAAK,KAAK,EAAE,SAAS,GAAG;AACpC,UAAA,cAAc,iBAAiB,KAAK;AAC1C,eAAW,MAAM;AAAA,EAAA;AAIb,QAAA,aAAa,IAAI,gBAAgB;AAGvC,MAAI,QAAQ;AACV,WAAO,iBAAiB,SAAS,MAAM,WAAW,OAAO;AAC9C,eAAA,OAAO,iBAAiB,SAAS,MAAM;AAC5C,UAAA,CAAC,OAAO,SAAS;AAEb,cAAA,QAAQ,IAAI,MAAM,qBAAqB;AAC7C,cAAM,OAAO;AACP,cAAA;AAAA,MAAA;AAAA,IACR,CACD;AAAA,EAAA;AAIH,QAAM,YAAY,WAAW,MAAM,WAAW,MAAA,GAAS,OAAO;AAG9D,QAAM,iBAA8B;AAAA,IAClC;AAAA,IACA,SAAS;AAAA,MACP,gBAAgB;AAAA,MAChB,GAAG;AAAA,IACL;AAAA,IACA,QAAQ,WAAW;AAAA,EACrB;AAGI,MAAA,QAAQ,WAAW,OAAO;AACb,mBAAA,OAAO,KAAK,UAAU,IAAI;AAAA,EAAA;AAG3C,QAAM,WAAW,YAAsC;AACjD,QAAA;AACF,+CAAa,WAAW;AACxB,YAAM,WAAW,MAAM,MAAM,UAAU,cAAc;AACrD,mBAAa,SAAS;AAGlB,UAAA,CAAC,SAAS,IAAI;AAGV,cAAA,IAAI,MAAM,eAAe,SAAS,MAAM,IAAI,SAAS,UAAU,EAAE;AAAA,MAAA;AAIrE,UAAA;AACJ,YAAM,cAAc,SAAS,QAAQ,IAAI,cAAc;AACvD,UAAI,eAAe,YAAY,SAAS,kBAAkB,GAAG;AACpD,eAAA,MAAM,SAAS,KAAK;AAAA,MAAA,OACtB;AACG,eAAA,MAAM,SAAS,KAAK;AAAA,MAAA;AAGtB,cAAA,IAAI,iCAAiC,mCAAmC,IAAI;AAChF,WAAA,6BAAM,aAAY,OAAO;AAC3B,cAAM,IAAI,OAAM,6BAAM,YAAW,gBAAgB;AAAA,MAAA;AAG5C,aAAA;AAAA,aACA,OAAO;AACd,mBAAa,SAAS;AAItB,UAAI,iBAAiB,OAAO;AACtB,YAAA,MAAM,SAAS,cAAc;AAE/B,kBAAQ,MAAM,uBAAuB;AAAA,QAAA,OAChC;AAEG,kBAAA,MAAM,mBAAmB,MAAM,OAAO;AAAA,QAAA;AAAA,MAChD;AAII,YAAA;AAAA,IAAA;AAAA,EACR,GACC;AAEI,SAAA;AACT;"}
|
|
@@ -77,6 +77,14 @@ function getUpdatedGUIConfigOld(params) {
|
|
|
77
77
|
};
|
|
78
78
|
});
|
|
79
79
|
}
|
|
80
|
+
function isGUIItemValueInConfig(item) {
|
|
81
|
+
const oldConfig = item;
|
|
82
|
+
const newConfig = item;
|
|
83
|
+
if (isOldConfig([item])) {
|
|
84
|
+
return GUIHasLockValueInConfig.includes(oldConfig._type) || oldConfig._name === EasyvGUIType.chartDimension;
|
|
85
|
+
}
|
|
86
|
+
return GUIHasLockValueInConfig.includes(newConfig.type) || newConfig.name === EasyvGUIType.chartDimension;
|
|
87
|
+
}
|
|
80
88
|
function getEasyvGUIConfigValue(configList, defaultConfig) {
|
|
81
89
|
const defaultValue = defaultConfig ? getEasyvGUIConfigValue(defaultConfig) : {};
|
|
82
90
|
if (!configList || configList.length === 0) {
|
|
@@ -88,7 +96,7 @@ function getEasyvGUIConfigValue(configList, defaultConfig) {
|
|
|
88
96
|
var _a;
|
|
89
97
|
if (judgeValueIsGUIConfigList(item)) {
|
|
90
98
|
result[item.name] = getEasyvGUIConfigValue(item.value);
|
|
91
|
-
if (
|
|
99
|
+
if (isGUIItemValueInConfig(item)) {
|
|
92
100
|
result[item.name] = {
|
|
93
101
|
...result[item.name],
|
|
94
102
|
lock: (_a = item.config) == null ? void 0 : _a.lock
|
|
@@ -117,7 +125,7 @@ function getEasyvGUIConfigValueOld(configList, defaultConfig) {
|
|
|
117
125
|
if (GUIHasLockValueInConfig.includes(item._type) || item._name === EasyvGUIType.chartDimension) {
|
|
118
126
|
result[item._name] = {
|
|
119
127
|
...result[item._name],
|
|
120
|
-
lock: (_a = item._config) == null ? void 0 : _a._lock
|
|
128
|
+
lock: item._lock ?? ((_a = item._config) == null ? void 0 : _a._lock)
|
|
121
129
|
};
|
|
122
130
|
}
|
|
123
131
|
} else {
|
|
@@ -140,7 +148,7 @@ function getNewEasyvGUIConfigFromValue(value, configList) {
|
|
|
140
148
|
item.value
|
|
141
149
|
);
|
|
142
150
|
let nextItem = { ...item, value: nextValue };
|
|
143
|
-
if (item
|
|
151
|
+
if (isGUIItemValueInConfig(item) && item.config && (value == null ? void 0 : value[item.name])) {
|
|
144
152
|
const itemValue = value[item.name];
|
|
145
153
|
if (itemValue && typeof itemValue === "object" && "lock" in itemValue) {
|
|
146
154
|
nextItem = { ...nextItem, config: { ...item.config, lock: itemValue.lock } };
|
|
@@ -162,7 +170,7 @@ function getNewEasyvGUIConfigFromValueOld(value, configList) {
|
|
|
162
170
|
item._value
|
|
163
171
|
);
|
|
164
172
|
let nextItem = { ...item, _value: nextValue };
|
|
165
|
-
if (item
|
|
173
|
+
if (isGUIItemValueInConfig(item) && item._config && (value == null ? void 0 : value[item._name])) {
|
|
166
174
|
const itemValue = value[item._name];
|
|
167
175
|
if (itemValue && typeof itemValue === "object" && "lock" in itemValue) {
|
|
168
176
|
nextItem = { ...nextItem, _config: { ...item._config, lock: itemValue.lock } };
|
|
@@ -265,6 +273,7 @@ export {
|
|
|
265
273
|
getShadowStyleFromGuiConfig,
|
|
266
274
|
getUpdatedGUIConfig,
|
|
267
275
|
getUpdatedGUIConfigOld,
|
|
276
|
+
isGUIItemValueInConfig,
|
|
268
277
|
judgeValueIsGUIConfigList,
|
|
269
278
|
updateConfigWithNewValue,
|
|
270
279
|
updateGUIConfigList
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"easyv-gui-helper.es.js","sources":["../../../../src/utils/easyv-gui-helper/easyv-gui-helper.ts"],"sourcesContent":["import { isNil } from \"lodash-es\";\nimport { isOldConfig } from \"./common\";\nimport { EasyvGUIType, GUIHasLockValueInConfig, GUITypeWhichHasConfigListValue } from \"./constants\";\nimport {\n EasyvGUIConfigItem,\n EasyvGUIConfigItemOld,\n EasyvGUIConfigList,\n EasyvGUIConfigListOld,\n EasyvGUIValue,\n GUIConfigShadow,\n GUIShadowStyleNormalConfig,\n} from \"./types\";\n\n/** 升级 EasyvGUIConfigList,采用新的配置,但是会取旧的值 */\nexport const updateGUIConfigList = (\n newConfig: EasyvGUIConfigList,\n oldConfig?: EasyvGUIConfigList,\n): EasyvGUIConfigList => {\n if (!oldConfig) {\n return newConfig;\n }\n const currConfigValue = getEasyvGUIConfigValue(oldConfig);\n const newConfigWithCurrValue = getNewEasyvGUIConfigFromValue(currConfigValue, newConfig);\n return newConfigWithCurrValue;\n};\n\n/** 判断 GUI 的配置,他的值是否为 EasyvGUIConfigList\n */\nexport function judgeValueIsGUIConfigList(config: EasyvGUIConfigItem | EasyvGUIConfigItemOld) {\n const oldConfig = config as EasyvGUIConfigItemOld;\n const newConfig = config as EasyvGUIConfigItem;\n const isInValueGroupList = GUITypeWhichHasConfigListValue.includes(\n (oldConfig._type || newConfig.type) as EasyvGUIType,\n );\n /** 隐式的分组\n * > 良好的分类划分和命名利于用户使用,平台也提供分组功能,一个没有type属性并且value为数组的json对象会被解析为一个分组。\n */\n const isImplicitGroup = !newConfig.type && Array.isArray(newConfig.value) && newConfig.name;\n const isOldImplicitGroup = !oldConfig._type && Array.isArray(oldConfig._value) && oldConfig._name;\n return isInValueGroupList || Boolean(isImplicitGroup || isOldImplicitGroup);\n}\n\n/** 传入新老的 GUI 配置,会根据新的配置,对原配置进行增删。\n * - 如果在同一层能找到同名 name ,那么会采用旧值,否则用新值。\n */\nexport function getUpdatedGUIConfig(params: {\n oldConfig?: EasyvGUIConfigList;\n newConfig?: EasyvGUIConfigList;\n}): EasyvGUIConfigList {\n const { oldConfig, newConfig } = params;\n if (!newConfig && !oldConfig) {\n return [];\n }\n if (!newConfig) {\n return oldConfig || [];\n }\n if (!oldConfig) {\n return newConfig;\n }\n const resConfig = [...newConfig];\n return resConfig.map((item) => {\n const originItem = oldConfig.find((i) => i.name === item.name);\n if (!judgeValueIsGUIConfigList(item)) {\n return {\n ...item,\n value: originItem?.value || item.value,\n };\n }\n return {\n ...item,\n value: getUpdatedGUIConfig({\n oldConfig: originItem?.value as EasyvGUIConfigList,\n newConfig: item.value as EasyvGUIConfigList,\n }),\n };\n });\n}\n/** 传入新老的 GUI 配置,会根据新的配置,对原配置进行增删。\n * - 如果在同一层能找到同名 name ,那么会采用旧值,否则用新值。\n */\nexport function getUpdatedGUIConfigOld(params: {\n oldConfig?: EasyvGUIConfigListOld;\n newConfig?: EasyvGUIConfigListOld;\n}): EasyvGUIConfigListOld {\n const { oldConfig, newConfig } = params;\n if (!newConfig && !oldConfig) {\n return [];\n }\n if (!newConfig) {\n return oldConfig || [];\n }\n if (!oldConfig) {\n return newConfig;\n }\n const resConfig = [...newConfig];\n return resConfig.map((item) => {\n const originItem = oldConfig.find((i) => i._name === item._name);\n if (!judgeValueIsGUIConfigList(item)) {\n return {\n ...item,\n _value: originItem?._value || item._value,\n };\n }\n return {\n ...item,\n _value: getUpdatedGUIConfigOld({\n oldConfig: originItem?._value as EasyvGUIConfigListOld,\n newConfig: item._value as EasyvGUIConfigListOld,\n }),\n };\n });\n}\n\n/** 传入一个 EasyvGUIConfigList ,会以 name 为 path 向下取值, 同一层级返回一个对象。\n * - 如果传入了 defaultConfig 会把 defaultConfig 变成一个默认值,\n * - 也就是优先取 configList 上的值,没有的话就用 defaultConfig 上的值。\n */\nexport function getEasyvGUIConfigValue(\n configList: EasyvGUIConfigList,\n defaultConfig?: EasyvGUIConfigList,\n): Record<string, any> {\n const defaultValue = defaultConfig\n ? getEasyvGUIConfigValue(defaultConfig)\n : ({} as Record<string, any>);\n if (!configList || configList.length === 0) {\n return defaultValue;\n }\n const result = {} as Record<string, any>;\n const finalConfigList = getUpdatedGUIConfig({ oldConfig: configList, newConfig: defaultConfig });\n finalConfigList.forEach((item) => {\n if (judgeValueIsGUIConfigList(item)) {\n result[item.name] = getEasyvGUIConfigValue(item.value as EasyvGUIConfigList);\n // 对于图片等控件,需要把 config 中的 lock 值放到最终的值里\n // 有一个很恶心的是 chartDimension 控件,他没有 type 只有 name 所以用 name 多判断一下\n if (\n GUIHasLockValueInConfig.includes(item.type as EasyvGUIType) ||\n item.name === EasyvGUIType.chartDimension\n ) {\n result[item.name] = {\n ...result[item.name],\n lock: item.config?.lock,\n };\n }\n } else {\n result[item.name] = item.value ?? defaultValue?.[item.name];\n }\n });\n return result;\n}\n/** 传入一个 EasyvGUIConfigList ,会以 name 为 path 向下取值, 同一层级返回一个对象。\n * - 如果传入了 defaultConfig 会把 defaultConfig 变成一个默认值,\n * - 也就是优先取 configList 上的值,没有的话就用 defaultConfig 上的值。\n */\nexport function getEasyvGUIConfigValueOld(\n configList: EasyvGUIConfigListOld,\n defaultConfig?: EasyvGUIConfigListOld,\n): Record<string, any> {\n const defaultValue = defaultConfig\n ? getEasyvGUIConfigValueOld(defaultConfig)\n : ({} as Record<string, any>);\n if (!configList || configList.length === 0) {\n return defaultValue;\n }\n const result = {} as Record<string, any>;\n const finalConfigList = getUpdatedGUIConfigOld({\n oldConfig: configList,\n newConfig: defaultConfig,\n });\n finalConfigList.forEach((item) => {\n if (judgeValueIsGUIConfigList(item)) {\n result[item._name] = getEasyvGUIConfigValueOld(item._value as EasyvGUIConfigListOld);\n // 对于图片等控件,需要把 config 中的 lock 值放到最终的值里\n // 有一个很恶心的是 chartDimension 控件,他没有 type 只有 name 所以用 name 多判断一下\n if (\n GUIHasLockValueInConfig.includes(item._type as EasyvGUIType) ||\n item._name === EasyvGUIType.chartDimension\n ) {\n result[item._name] = {\n ...result[item._name],\n lock: item._config?._lock,\n };\n }\n } else {\n result[item._name] = item._value ?? defaultValue?.[item._name];\n }\n });\n return result;\n}\n\nexport function getEasyvGUIConfigValueCompatibleOld(\n configList: (EasyvGUIConfigItem | EasyvGUIConfigItemOld)[],\n) {\n return isOldConfig(configList)\n ? getEasyvGUIConfigValueOld(configList as EasyvGUIConfigListOld)\n : getEasyvGUIConfigValue(configList as EasyvGUIConfigList);\n}\n\n/** 把 value 的值放到 configList 中\n * 为什么要这样做,因为 gui 组件的渲染是用 config 渲染的。\n */\nexport function getNewEasyvGUIConfigFromValue(\n value: Record<string, any> | undefined,\n configList: EasyvGUIConfigList,\n) {\n if (!Array.isArray(configList)) {\n return configList;\n }\n return configList.map((item) => {\n if (judgeValueIsGUIConfigList(item)) {\n const nextValue = getNewEasyvGUIConfigFromValue(\n value?.[item.name] as Record<string, EasyvGUIValue>,\n item.value as EasyvGUIConfigList,\n );\n let nextItem: EasyvGUIConfigItem = { ...item, value: nextValue };\n if (item.type === EasyvGUIType.imgSize && item.config && value?.[item.name]) {\n const itemValue = value[item.name] as Record<string, EasyvGUIValue>;\n if (itemValue && typeof itemValue === \"object\" && \"lock\" in itemValue) {\n nextItem = { ...nextItem, config: { ...item.config, lock: itemValue.lock } };\n }\n }\n return nextItem;\n }\n if (!isNil(value?.[item.name])) {\n return { ...item, value: value?.[item.name] };\n }\n return item;\n });\n}\n/** 把 value 的值放到 configList 中\n * 为什么要这样做,因为 gui 组件的渲染是用 config 渲染的。\n */\nexport function getNewEasyvGUIConfigFromValueOld(\n value: Record<string, any> | undefined,\n configList: EasyvGUIConfigListOld,\n) {\n return configList.map((item) => {\n if (judgeValueIsGUIConfigList(item)) {\n const nextValue = getNewEasyvGUIConfigFromValueOld(\n value?.[item._name] as Record<string, EasyvGUIValue>,\n item._value as EasyvGUIConfigListOld,\n );\n let nextItem: EasyvGUIConfigItemOld = { ...item, _value: nextValue };\n if (item._type === EasyvGUIType.imgSize && item._config && value?.[item._name]) {\n const itemValue = value[item._name] as Record<string, EasyvGUIValue>;\n if (itemValue && typeof itemValue === \"object\" && \"lock\" in itemValue) {\n nextItem = { ...nextItem, _config: { ...item._config, lock: itemValue.lock } };\n }\n }\n return nextItem;\n }\n if (!isNil(value?.[item._name])) {\n return { ...item, _value: value?.[item._name] };\n }\n return item;\n });\n}\n/**\n * 把 gui 配置里的圆角转换成 dom 的 style\n * - 圆角格式:左上,右上,右下,左下(例如:10,20,30,19)或者只输入一个值,此时四个角圆角相同(例如:10)\n * */\nexport function getRadiusStyleFromGuiString(radius?: string) {\n if (!radius) {\n return undefined;\n }\n const radiusArr = radius.split(/,|,/);\n return radiusArr\n .map((item) => {\n return `${item}px`;\n })\n .join(\" \");\n}\n/**\n * 把 gui 的模糊配置转换成 dom 的 style。\n * - 返回值 应用于 backdropFilter。\n */\nexport function getBackgroundBlurStyleFromGuiConfig(blur?: string) {\n if (!blur) {\n return undefined;\n }\n return Number(blur) ? `blur(${blur}px) ` : \"unset\";\n}\n\nexport function getShadowStyleFromGuiConfig(shadow?: GUIConfigShadow, isInner?: boolean) {\n if (!shadow) {\n return \"\";\n }\n const shadowString = `${shadow.hShadow}px ${shadow.vShadow}px ${shadow.blur}px ${shadow.color}`;\n if (isInner) {\n return `inset ${shadowString}`;\n }\n return shadowString;\n}\n\nexport function getShadowFromGuiConfig(shadow: GUIShadowStyleNormalConfig | undefined) {\n if (!shadow?.show) {\n return undefined;\n }\n const { inShadow, outShadow } = shadow || {};\n const inShadowStyle = getShadowStyleFromGuiConfig(inShadow, true);\n const outShadowStyle = getShadowStyleFromGuiConfig(outShadow);\n if (inShadow && outShadow) {\n return `${inShadowStyle}, ${outShadowStyle}`;\n }\n if (inShadow) {\n return inShadowStyle;\n }\n if (outShadow) {\n return outShadowStyle;\n }\n return \"none\";\n}\n\nexport function updateConfigWithNewValue(params: {\n config: EasyvGUIConfigList | EasyvGUIConfigListOld;\n path: string[];\n value: EasyvGUIValue;\n}) {\n const { config, path, value } = params;\n if (!Array.isArray(config) || !path?.length) {\n return config;\n }\n function applyAt(\n list: EasyvGUIConfigList | EasyvGUIConfigListOld,\n depth: number,\n ): EasyvGUIConfigList | EasyvGUIConfigListOld {\n const key = path[depth];\n const mapped = (list as (EasyvGUIConfigItem | EasyvGUIConfigItemOld)[]).map(\n (item: EasyvGUIConfigItem | EasyvGUIConfigItemOld) => {\n const itemName = (item as EasyvGUIConfigItem).name ?? (item as EasyvGUIConfigItemOld)._name;\n if (itemName !== key) {\n return item;\n }\n if (depth === path.length - 1) {\n if (\"value\" in item) {\n return { ...(item as EasyvGUIConfigItem), value };\n }\n if (\"_value\" in item) {\n return { ...(item as EasyvGUIConfigItemOld), _value: value };\n }\n return item;\n }\n const nextList = (\n \"value\" in item\n ? (item as EasyvGUIConfigItem).value\n : (item as EasyvGUIConfigItemOld)._value\n ) as EasyvGUIConfigList | EasyvGUIConfigListOld;\n const updated = applyAt(nextList, depth + 1);\n if (\"value\" in item) {\n return { ...(item as EasyvGUIConfigItem), value: updated as EasyvGUIConfigList };\n }\n return { ...(item as EasyvGUIConfigItemOld), _value: updated as EasyvGUIConfigListOld };\n },\n );\n return mapped as EasyvGUIConfigList | EasyvGUIConfigListOld;\n }\n return applyAt(config, 0);\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"easyv-gui-helper.es.js","sources":["../../../../src/utils/easyv-gui-helper/easyv-gui-helper.ts"],"sourcesContent":["import { isNil } from \"lodash-es\";\nimport { isOldConfig } from \"./common\";\nimport { EasyvGUIType, GUIHasLockValueInConfig, GUITypeWhichHasConfigListValue } from \"./constants\";\nimport {\n EasyvGUIConfigItem,\n EasyvGUIConfigItemOld,\n EasyvGUIConfigList,\n EasyvGUIConfigListOld,\n EasyvGUIValue,\n GUIConfigShadow,\n GUIShadowStyleNormalConfig,\n} from \"./types\";\n\n/** 升级 EasyvGUIConfigList,采用新的配置,但是会取旧的值 */\nexport const updateGUIConfigList = (\n newConfig: EasyvGUIConfigList,\n oldConfig?: EasyvGUIConfigList,\n): EasyvGUIConfigList => {\n if (!oldConfig) {\n return newConfig;\n }\n const currConfigValue = getEasyvGUIConfigValue(oldConfig);\n const newConfigWithCurrValue = getNewEasyvGUIConfigFromValue(currConfigValue, newConfig);\n return newConfigWithCurrValue;\n};\n\n/** 判断 GUI 的配置,他的值是否为 EasyvGUIConfigList\n */\nexport function judgeValueIsGUIConfigList(config: EasyvGUIConfigItem | EasyvGUIConfigItemOld) {\n const oldConfig = config as EasyvGUIConfigItemOld;\n const newConfig = config as EasyvGUIConfigItem;\n const isInValueGroupList = GUITypeWhichHasConfigListValue.includes(\n (oldConfig._type || newConfig.type) as EasyvGUIType,\n );\n /** 隐式的分组\n * > 良好的分类划分和命名利于用户使用,平台也提供分组功能,一个没有type属性并且value为数组的json对象会被解析为一个分组。\n */\n const isImplicitGroup = !newConfig.type && Array.isArray(newConfig.value) && newConfig.name;\n const isOldImplicitGroup = !oldConfig._type && Array.isArray(oldConfig._value) && oldConfig._name;\n return isInValueGroupList || Boolean(isImplicitGroup || isOldImplicitGroup);\n}\n\n/** 传入新老的 GUI 配置,会根据新的配置,对原配置进行增删。\n * - 如果在同一层能找到同名 name ,那么会采用旧值,否则用新值。\n */\nexport function getUpdatedGUIConfig(params: {\n oldConfig?: EasyvGUIConfigList;\n newConfig?: EasyvGUIConfigList;\n}): EasyvGUIConfigList {\n const { oldConfig, newConfig } = params;\n if (!newConfig && !oldConfig) {\n return [];\n }\n if (!newConfig) {\n return oldConfig || [];\n }\n if (!oldConfig) {\n return newConfig;\n }\n const resConfig = [...newConfig];\n return resConfig.map((item) => {\n const originItem = oldConfig.find((i) => i.name === item.name);\n if (!judgeValueIsGUIConfigList(item)) {\n return {\n ...item,\n value: originItem?.value || item.value,\n };\n }\n return {\n ...item,\n value: getUpdatedGUIConfig({\n oldConfig: originItem?.value as EasyvGUIConfigList,\n newConfig: item.value as EasyvGUIConfigList,\n }),\n };\n });\n}\n/** 传入新老的 GUI 配置,会根据新的配置,对原配置进行增删。\n * - 如果在同一层能找到同名 name ,那么会采用旧值,否则用新值。\n */\nexport function getUpdatedGUIConfigOld(params: {\n oldConfig?: EasyvGUIConfigListOld;\n newConfig?: EasyvGUIConfigListOld;\n}): EasyvGUIConfigListOld {\n const { oldConfig, newConfig } = params;\n if (!newConfig && !oldConfig) {\n return [];\n }\n if (!newConfig) {\n return oldConfig || [];\n }\n if (!oldConfig) {\n return newConfig;\n }\n const resConfig = [...newConfig];\n return resConfig.map((item) => {\n const originItem = oldConfig.find((i) => i._name === item._name);\n if (!judgeValueIsGUIConfigList(item)) {\n return {\n ...item,\n _value: originItem?._value || item._value,\n };\n }\n return {\n ...item,\n _value: getUpdatedGUIConfigOld({\n oldConfig: originItem?._value as EasyvGUIConfigListOld,\n newConfig: item._value as EasyvGUIConfigListOld,\n }),\n };\n });\n}\n\nexport function isGUIItemValueInConfig(item: EasyvGUIConfigItem | EasyvGUIConfigItemOld) {\n const oldConfig = item as EasyvGUIConfigItemOld;\n const newConfig = item as EasyvGUIConfigItem;\n if (isOldConfig([item])) {\n // 有一个很恶心的是 chartDimension 控件,他没有 type 只有 name 所以用 name 多判断一下\n return (\n GUIHasLockValueInConfig.includes(oldConfig._type as EasyvGUIType) ||\n oldConfig._name === EasyvGUIType.chartDimension\n );\n }\n return (\n GUIHasLockValueInConfig.includes(newConfig.type as EasyvGUIType) ||\n newConfig.name === EasyvGUIType.chartDimension\n );\n}\n\n/** 传入一个 EasyvGUIConfigList ,会以 name 为 path 向下取值, 同一层级返回一个对象。\n * - 如果传入了 defaultConfig 会把 defaultConfig 变成一个默认值,\n * - 也就是优先取 configList 上的值,没有的话就用 defaultConfig 上的值。\n */\nexport function getEasyvGUIConfigValue(\n configList: EasyvGUIConfigList,\n defaultConfig?: EasyvGUIConfigList,\n): Record<string, any> {\n const defaultValue = defaultConfig\n ? getEasyvGUIConfigValue(defaultConfig)\n : ({} as Record<string, any>);\n if (!configList || configList.length === 0) {\n return defaultValue;\n }\n const result = {} as Record<string, any>;\n const finalConfigList = getUpdatedGUIConfig({ oldConfig: configList, newConfig: defaultConfig });\n finalConfigList.forEach((item) => {\n if (judgeValueIsGUIConfigList(item)) {\n result[item.name] = getEasyvGUIConfigValue(item.value as EasyvGUIConfigList);\n // 对于图片等控件,需要把 config 中的 lock 值放到最终的值里\n if (isGUIItemValueInConfig(item)) {\n result[item.name] = {\n ...result[item.name],\n lock: item.config?.lock,\n };\n }\n } else {\n result[item.name] = item.value ?? defaultValue?.[item.name];\n }\n });\n return result;\n}\n/** 传入一个 EasyvGUIConfigList ,会以 name 为 path 向下取值, 同一层级返回一个对象。\n * - 如果传入了 defaultConfig 会把 defaultConfig 变成一个默认值,\n * - 也就是优先取 configList 上的值,没有的话就用 defaultConfig 上的值。\n */\nexport function getEasyvGUIConfigValueOld(\n configList: EasyvGUIConfigListOld,\n defaultConfig?: EasyvGUIConfigListOld,\n): Record<string, any> {\n const defaultValue = defaultConfig\n ? getEasyvGUIConfigValueOld(defaultConfig)\n : ({} as Record<string, any>);\n if (!configList || configList.length === 0) {\n return defaultValue;\n }\n const result = {} as Record<string, any>;\n const finalConfigList = getUpdatedGUIConfigOld({\n oldConfig: configList,\n newConfig: defaultConfig,\n });\n finalConfigList.forEach((item) => {\n if (judgeValueIsGUIConfigList(item)) {\n result[item._name] = getEasyvGUIConfigValueOld(item._value as EasyvGUIConfigListOld);\n // 对于图片等控件,需要把 config 中的 lock 值放到最终的值里\n // 有一个很恶心的是 chartDimension 控件,他没有 type 只有 name 所以用 name 多判断一下\n if (\n GUIHasLockValueInConfig.includes(item._type as EasyvGUIType) ||\n item._name === EasyvGUIType.chartDimension\n ) {\n result[item._name] = {\n ...result[item._name],\n lock: item._lock ?? item._config?._lock,\n };\n }\n } else {\n result[item._name] = item._value ?? defaultValue?.[item._name];\n }\n });\n return result;\n}\n\nexport function getEasyvGUIConfigValueCompatibleOld(\n configList: (EasyvGUIConfigItem | EasyvGUIConfigItemOld)[],\n) {\n return isOldConfig(configList)\n ? getEasyvGUIConfigValueOld(configList as EasyvGUIConfigListOld)\n : getEasyvGUIConfigValue(configList as EasyvGUIConfigList);\n}\n\n/** 把 value 的值放到 configList 中\n * 为什么要这样做,因为 gui 组件的渲染是用 config 渲染的。\n */\nexport function getNewEasyvGUIConfigFromValue(\n value: Record<string, any> | undefined,\n configList: EasyvGUIConfigList,\n) {\n if (!Array.isArray(configList)) {\n return configList;\n }\n return configList.map((item) => {\n if (judgeValueIsGUIConfigList(item)) {\n const nextValue = getNewEasyvGUIConfigFromValue(\n value?.[item.name] as Record<string, EasyvGUIValue>,\n item.value as EasyvGUIConfigList,\n );\n let nextItem: EasyvGUIConfigItem = { ...item, value: nextValue };\n if (isGUIItemValueInConfig(item) && item.config && value?.[item.name]) {\n const itemValue = value[item.name] as Record<string, EasyvGUIValue>;\n if (itemValue && typeof itemValue === \"object\" && \"lock\" in itemValue) {\n nextItem = { ...nextItem, config: { ...item.config, lock: itemValue.lock } };\n }\n }\n return nextItem;\n }\n if (!isNil(value?.[item.name])) {\n return { ...item, value: value?.[item.name] };\n }\n return item;\n });\n}\n/** 把 value 的值放到 configList 中\n * 为什么要这样做,因为 gui 组件的渲染是用 config 渲染的。\n */\nexport function getNewEasyvGUIConfigFromValueOld(\n value: Record<string, any> | undefined,\n configList: EasyvGUIConfigListOld,\n) {\n return configList.map((item) => {\n if (judgeValueIsGUIConfigList(item)) {\n const nextValue = getNewEasyvGUIConfigFromValueOld(\n value?.[item._name] as Record<string, EasyvGUIValue>,\n item._value as EasyvGUIConfigListOld,\n );\n let nextItem: EasyvGUIConfigItemOld = { ...item, _value: nextValue };\n if (isGUIItemValueInConfig(item) && item._config && value?.[item._name]) {\n const itemValue = value[item._name] as Record<string, EasyvGUIValue>;\n if (itemValue && typeof itemValue === \"object\" && \"lock\" in itemValue) {\n nextItem = { ...nextItem, _config: { ...item._config, lock: itemValue.lock } };\n }\n }\n return nextItem;\n }\n if (!isNil(value?.[item._name])) {\n return { ...item, _value: value?.[item._name] };\n }\n return item;\n });\n}\n/**\n * 把 gui 配置里的圆角转换成 dom 的 style\n * - 圆角格式:左上,右上,右下,左下(例如:10,20,30,19)或者只输入一个值,此时四个角圆角相同(例如:10)\n * */\nexport function getRadiusStyleFromGuiString(radius?: string) {\n if (!radius) {\n return undefined;\n }\n const radiusArr = radius.split(/,|,/);\n return radiusArr\n .map((item) => {\n return `${item}px`;\n })\n .join(\" \");\n}\n/**\n * 把 gui 的模糊配置转换成 dom 的 style。\n * - 返回值 应用于 backdropFilter。\n */\nexport function getBackgroundBlurStyleFromGuiConfig(blur?: string) {\n if (!blur) {\n return undefined;\n }\n return Number(blur) ? `blur(${blur}px) ` : \"unset\";\n}\n\nexport function getShadowStyleFromGuiConfig(shadow?: GUIConfigShadow, isInner?: boolean) {\n if (!shadow) {\n return \"\";\n }\n const shadowString = `${shadow.hShadow}px ${shadow.vShadow}px ${shadow.blur}px ${shadow.color}`;\n if (isInner) {\n return `inset ${shadowString}`;\n }\n return shadowString;\n}\n\nexport function getShadowFromGuiConfig(shadow: GUIShadowStyleNormalConfig | undefined) {\n if (!shadow?.show) {\n return undefined;\n }\n const { inShadow, outShadow } = shadow || {};\n const inShadowStyle = getShadowStyleFromGuiConfig(inShadow, true);\n const outShadowStyle = getShadowStyleFromGuiConfig(outShadow);\n if (inShadow && outShadow) {\n return `${inShadowStyle}, ${outShadowStyle}`;\n }\n if (inShadow) {\n return inShadowStyle;\n }\n if (outShadow) {\n return outShadowStyle;\n }\n return \"none\";\n}\n\nexport function updateConfigWithNewValue(params: {\n config: EasyvGUIConfigList | EasyvGUIConfigListOld;\n path: string[];\n value: EasyvGUIValue;\n}) {\n const { config, path, value } = params;\n if (!Array.isArray(config) || !path?.length) {\n return config;\n }\n function applyAt(\n list: EasyvGUIConfigList | EasyvGUIConfigListOld,\n depth: number,\n ): EasyvGUIConfigList | EasyvGUIConfigListOld {\n const key = path[depth];\n const mapped = (list as (EasyvGUIConfigItem | EasyvGUIConfigItemOld)[]).map(\n (item: EasyvGUIConfigItem | EasyvGUIConfigItemOld) => {\n const itemName = (item as EasyvGUIConfigItem).name ?? (item as EasyvGUIConfigItemOld)._name;\n if (itemName !== key) {\n return item;\n }\n if (depth === path.length - 1) {\n if (\"value\" in item) {\n return { ...(item as EasyvGUIConfigItem), value };\n }\n if (\"_value\" in item) {\n return { ...(item as EasyvGUIConfigItemOld), _value: value };\n }\n return item;\n }\n const nextList = (\n \"value\" in item\n ? (item as EasyvGUIConfigItem).value\n : (item as EasyvGUIConfigItemOld)._value\n ) as EasyvGUIConfigList | EasyvGUIConfigListOld;\n const updated = applyAt(nextList, depth + 1);\n if (\"value\" in item) {\n return { ...(item as EasyvGUIConfigItem), value: updated as EasyvGUIConfigList };\n }\n return { ...(item as EasyvGUIConfigItemOld), _value: updated as EasyvGUIConfigListOld };\n },\n );\n return mapped as EasyvGUIConfigList | EasyvGUIConfigListOld;\n }\n return applyAt(config, 0);\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import * as
|
|
2
|
-
const hasCreateRoot = "createRoot" in
|
|
1
|
+
import * as ne from "react-dom";
|
|
2
|
+
const hasCreateRoot = "createRoot" in ne;
|
|
3
3
|
const showModalContainerClass = "easyv-biz-show-modal-container";
|
|
4
4
|
const showModal = (params) => {
|
|
5
5
|
const { children } = params;
|
|
@@ -14,7 +14,7 @@ const showModal = (params) => {
|
|
|
14
14
|
if (hasCreateRoot && root) {
|
|
15
15
|
root.unmount();
|
|
16
16
|
} else {
|
|
17
|
-
|
|
17
|
+
ne.unmountComponentAtNode(container);
|
|
18
18
|
}
|
|
19
19
|
if (container.parentNode) {
|
|
20
20
|
container.parentNode.removeChild(container);
|
|
@@ -32,11 +32,11 @@ const showModal = (params) => {
|
|
|
32
32
|
visible: true
|
|
33
33
|
});
|
|
34
34
|
if (hasCreateRoot) {
|
|
35
|
-
const { createRoot } =
|
|
35
|
+
const { createRoot } = ne;
|
|
36
36
|
root = createRoot(container);
|
|
37
37
|
root.render(modalElement);
|
|
38
38
|
} else {
|
|
39
|
-
|
|
39
|
+
ne.render(modalElement, container);
|
|
40
40
|
}
|
|
41
41
|
return {
|
|
42
42
|
destroy
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import isPlainObject from "../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isPlainObject.es.js";
|
|
2
|
+
import isString from "../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isString.es.js";
|
|
3
|
+
const getEasyTwinResourcesFromSceneInfo = async (params) => {
|
|
4
|
+
const { collectAllDownloadUrls, content, contentFileUrl } = params;
|
|
5
|
+
const getProjectInfos = async () => {
|
|
6
|
+
try {
|
|
7
|
+
if (contentFileUrl) {
|
|
8
|
+
const url = window.appConfig.ASSETS_URL + contentFileUrl;
|
|
9
|
+
const finalUrl = url.replace(/\/{2,}/g, "/").replace(":/", "://");
|
|
10
|
+
const response = await fetch(finalUrl);
|
|
11
|
+
const result = await response.json();
|
|
12
|
+
if (isPlainObject(result)) {
|
|
13
|
+
return result;
|
|
14
|
+
}
|
|
15
|
+
return {};
|
|
16
|
+
}
|
|
17
|
+
return isString(content) ? JSON.parse(content) : content;
|
|
18
|
+
} catch (error) {
|
|
19
|
+
console.log("解析 scene content 失败:", error);
|
|
20
|
+
return {};
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
const projectInfos = await getProjectInfos();
|
|
24
|
+
const newSceneFiles = collectAllDownloadUrls(projectInfos);
|
|
25
|
+
return newSceneFiles;
|
|
26
|
+
};
|
|
27
|
+
export {
|
|
28
|
+
getEasyTwinResourcesFromSceneInfo
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=utils.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.es.js","sources":["../../../../src/utils/twin/utils.ts"],"sourcesContent":["import { isPlainObject, isString } from \"lodash-es\";\n\nexport const getEasyTwinResourcesFromSceneInfo = async (params: {\n collectAllDownloadUrls: (projectInfos: any) => string[];\n contentFileUrl?: string;\n content: Record<string, any>;\n}) => {\n const { collectAllDownloadUrls, content, contentFileUrl } = params;\n\n const getProjectInfos = async () => {\n try {\n if (contentFileUrl) {\n // 如果 contentFileUrl 存在,优先使用 contentFileUrl 获取内容\n const url = (window as any).appConfig.ASSETS_URL + contentFileUrl;\n const finalUrl = url.replace(/\\/{2,}/g, \"/\").replace(\":/\", \"://\");\n const response = await fetch(finalUrl);\n const result = await response.json();\n if (isPlainObject(result)) {\n return result;\n }\n return {};\n }\n return isString(content) ? JSON.parse(content) : content;\n } catch (error) {\n console.log(\"解析 scene content 失败:\", error);\n return {};\n }\n };\n const projectInfos = await getProjectInfos();\n const newSceneFiles = collectAllDownloadUrls(projectInfos);\n return newSceneFiles;\n};\n"],"names":[],"mappings":";;AAEa,MAAA,oCAAoC,OAAO,WAIlD;AACJ,QAAM,EAAE,wBAAwB,SAAS,eAAmB,IAAA;AAE5D,QAAM,kBAAkB,YAAY;AAC9B,QAAA;AACF,UAAI,gBAAgB;AAEZ,cAAA,MAAO,OAAe,UAAU,aAAa;AAC7C,cAAA,WAAW,IAAI,QAAQ,WAAW,GAAG,EAAE,QAAQ,MAAM,KAAK;AAC1D,cAAA,WAAW,MAAM,MAAM,QAAQ;AAC/B,cAAA,SAAS,MAAM,SAAS,KAAK;AAC/B,YAAA,cAAc,MAAM,GAAG;AAClB,iBAAA;AAAA,QAAA;AAET,eAAO,CAAC;AAAA,MAAA;AAEV,aAAO,SAAS,OAAO,IAAI,KAAK,MAAM,OAAO,IAAI;AAAA,aAC1C,OAAO;AACN,cAAA,IAAI,wBAAwB,KAAK;AACzC,aAAO,CAAC;AAAA,IAAA;AAAA,EAEZ;AACM,QAAA,eAAe,MAAM,gBAAgB;AACrC,QAAA,gBAAgB,uBAAuB,YAAY;AAClD,SAAA;AACT;"}
|