@billtaofbj/explosion-diagram 1.0.0 → 1.1.0
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/explosion-diagram.css +1 -1
- package/dist/index.cjs.js +2 -2
- package/dist/index.es.js +500 -423
- package/package.json +33 -26
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
.ai-chat-panel[data-v-01960100]{z-index:2000;background:#fff;border-left:1px solid #e4e7ed;flex-direction:column;height:100vh;display:flex;position:fixed;top:0;right:0;box-shadow:-2px 0 12px #0000001a}.chat-header[data-v-01960100]{background:linear-gradient(#fff,#fafafa);border-bottom:1px solid #e4e7ed;justify-content:space-between;align-items:center;min-height:44px;padding:10px 16px;display:flex}.chat-header-left[data-v-01960100]{align-items:center;gap:8px;display:flex}.chat-title[data-v-01960100]{color:#303133;font-size:14px;font-weight:600}.chat-header-right[data-v-01960100]{align-items:center;gap:2px;display:flex}.online-tag[data-v-01960100]{cursor:pointer}.mention-bell[data-v-01960100]{cursor:pointer;justify-content:center;align-items:center;padding:2px;animation:.8s ease-in-out infinite bellShake-01960100;display:flex}.mention-bell[data-v-01960100]:hover{opacity:.8}@keyframes bellShake-01960100{0%,to{transform:rotate(0)}15%{transform:rotate(15deg)}30%{transform:rotate(-15deg)}45%{transform:rotate(10deg)}60%{transform:rotate(-10deg)}75%{transform:rotate(5deg)}}.online-users-list[data-v-01960100]{flex-direction:column;gap:8px;max-height:280px;display:flex;overflow-y:auto}.online-user-item[data-v-01960100]{align-items:center;gap:10px;display:flex}.online-user-avatar[data-v-01960100]{color:#fff;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:28px;height:28px;font-size:13px;font-weight:600;display:flex}.online-user-name[data-v-01960100]{color:#303133;text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:13px;overflow:hidden}.role-tag[data-v-01960100]{flex-shrink:0}.self-tag[data-v-01960100]{color:#909399;flex-shrink:0;font-size:12px}.chat-messages[data-v-01960100]{flex-direction:column;flex:1;gap:12px;padding:16px;display:flex;overflow-y:auto}.chat-empty[data-v-01960100]{color:#909399;flex-direction:column;justify-content:center;align-items:center;height:100%;display:flex}.chat-empty p[data-v-01960100]{margin:8px 0 0;font-size:14px}.chat-empty-hint[data-v-01960100]{color:#c0c4cc!important;font-size:12px!important}.chat-message[data-v-01960100]{gap:10px;max-width:90%;display:flex}.chat-message-user[data-v-01960100]{flex-direction:row-reverse;align-self:flex-end}.chat-message-ai[data-v-01960100],.chat-message-other[data-v-01960100]{align-self:flex-start}.message-avatar[data-v-01960100]{color:#fff;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:32px;height:32px;font-size:13px;font-weight:600;display:flex}.message-avatar.ai[data-v-01960100]{background:linear-gradient(135deg,#409eff,#337ecc)}.message-content[data-v-01960100]{flex-direction:column;gap:4px;display:flex}.chat-message-user .message-content[data-v-01960100]{align-items:flex-end}.message-meta[data-v-01960100]{align-items:center;gap:6px;padding:0 4px;display:flex}.message-sender[data-v-01960100]{font-size:11px;font-weight:600}.message-mention[data-v-01960100]{color:#409eff;font-size:11px;font-weight:600}.message-text[data-v-01960100]{word-break:break-word;border-radius:12px;padding:10px 14px;font-size:13px;line-height:1.6}.chat-message-ai .message-text[data-v-01960100]{color:#303133;background:#f4f4f5;border-top-left-radius:4px}.chat-message-user .message-text[data-v-01960100]{color:#fff;background:linear-gradient(135deg,#409eff,#337ecc);border-top-right-radius:4px}.chat-message-other .message-text[data-v-01960100]{color:#303133;background:#f0f9ff;border:1px solid #d9ecff;border-top-left-radius:4px}.message-time[data-v-01960100]{color:#c0c4cc;padding:0 4px;font-size:11px}.chat-input-area[data-v-01960100]{background:#fafafa;border-top:1px solid #e4e7ed;padding:12px 16px}.chat-input-wrapper[data-v-01960100]{align-items:flex-end;gap:8px;display:flex;position:relative}.chat-input-wrapper[data-v-01960100] .el-textarea__inner{border:1px solid #dcdfe6;border-radius:10px;padding:8px 12px;font-size:13px;box-shadow:0 1px 4px #0000000f}.chat-input-wrapper[data-v-01960100] .el-textarea__inner:focus{border-color:#409eff;box-shadow:0 1px 6px #409eff26}.send-btn[data-v-01960100]{flex-shrink:0;width:34px;height:34px}.mention-popup[data-v-01960100]{z-index:10;background:#fff;border:1px solid #e4e7ed;border-radius:8px;min-width:160px;max-height:200px;margin-bottom:4px;position:absolute;bottom:100%;left:0;overflow-y:auto;box-shadow:0 4px 12px #0000001a}.mention-item[data-v-01960100]{cursor:pointer;align-items:center;gap:8px;padding:8px 12px;font-size:13px;display:flex}.mention-item[data-v-01960100]:hover,.mention-item.active[data-v-01960100]{background:#f5f7fa}.mention-avatar[data-v-01960100]{color:#fff;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:24px;height:24px;font-size:12px;font-weight:600;display:flex}.typing-indicator[data-v-01960100]{align-items:center;gap:4px;display:flex;padding:12px 16px!important}.typing-indicator span[data-v-01960100]{background:#c0c4cc;border-radius:50%;width:6px;height:6px;animation:1.2s infinite typingBounce-01960100}.typing-indicator span[data-v-01960100]:nth-child(2){animation-delay:.2s}.typing-indicator span[data-v-01960100]:nth-child(3){animation-delay:.4s}@keyframes typingBounce-01960100{0%,60%,to{opacity:.4;transform:translateY(0)}30%{opacity:1;transform:translateY(-4px)}}.version-history-panel[data-v-87924b7c]{flex-direction:column;height:100%;display:flex}.loading-state[data-v-87924b7c],.empty-state[data-v-87924b7c]{color:#909399;flex-direction:column;justify-content:center;align-items:center;height:200px;display:flex}.empty-state p[data-v-87924b7c]{margin-top:12px}.version-list[data-v-87924b7c]{flex:1;padding:0 4px;overflow-y:auto}.current-version[data-v-87924b7c]{background:#f0f9eb;border-radius:6px;flex-direction:column;gap:4px;margin-bottom:16px;padding:8px 12px;display:flex}.current-version-header[data-v-87924b7c]{align-items:center;gap:8px;display:flex}.version-meta[data-v-87924b7c]{color:#606266;font-size:13px}.version-item[data-v-87924b7c]{cursor:pointer;border-radius:6px;align-items:center;gap:20px;padding:8px 12px;transition:background .2s;display:flex}.version-item[data-v-87924b7c]:hover{background:#f5f7fa}.version-item.active[data-v-87924b7c]{background:#ecf5ff}.version-number[data-v-87924b7c]{color:#409eff;font-size:14px;font-weight:600}.version-user[data-v-87924b7c]{color:#303133;font-size:14px}.version-time[data-v-87924b7c]{color:#909399;margin-top:2px;font-size:12px}.panel-footer[data-v-87924b7c]{justify-content:flex-end;padding:12px 0;display:flex}.toolbar[data-v-
|
|
1
|
+
.ai-chat-panel[data-v-01960100]{z-index:2000;background:#fff;border-left:1px solid #e4e7ed;flex-direction:column;height:100vh;display:flex;position:fixed;top:0;right:0;box-shadow:-2px 0 12px #0000001a}.chat-header[data-v-01960100]{background:linear-gradient(#fff,#fafafa);border-bottom:1px solid #e4e7ed;justify-content:space-between;align-items:center;min-height:44px;padding:10px 16px;display:flex}.chat-header-left[data-v-01960100]{align-items:center;gap:8px;display:flex}.chat-title[data-v-01960100]{color:#303133;font-size:14px;font-weight:600}.chat-header-right[data-v-01960100]{align-items:center;gap:2px;display:flex}.online-tag[data-v-01960100]{cursor:pointer}.mention-bell[data-v-01960100]{cursor:pointer;justify-content:center;align-items:center;padding:2px;animation:.8s ease-in-out infinite bellShake-01960100;display:flex}.mention-bell[data-v-01960100]:hover{opacity:.8}@keyframes bellShake-01960100{0%,to{transform:rotate(0)}15%{transform:rotate(15deg)}30%{transform:rotate(-15deg)}45%{transform:rotate(10deg)}60%{transform:rotate(-10deg)}75%{transform:rotate(5deg)}}.online-users-list[data-v-01960100]{flex-direction:column;gap:8px;max-height:280px;display:flex;overflow-y:auto}.online-user-item[data-v-01960100]{align-items:center;gap:10px;display:flex}.online-user-avatar[data-v-01960100]{color:#fff;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:28px;height:28px;font-size:13px;font-weight:600;display:flex}.online-user-name[data-v-01960100]{color:#303133;text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:13px;overflow:hidden}.role-tag[data-v-01960100]{flex-shrink:0}.self-tag[data-v-01960100]{color:#909399;flex-shrink:0;font-size:12px}.chat-messages[data-v-01960100]{flex-direction:column;flex:1;gap:12px;padding:16px;display:flex;overflow-y:auto}.chat-empty[data-v-01960100]{color:#909399;flex-direction:column;justify-content:center;align-items:center;height:100%;display:flex}.chat-empty p[data-v-01960100]{margin:8px 0 0;font-size:14px}.chat-empty-hint[data-v-01960100]{color:#c0c4cc!important;font-size:12px!important}.chat-message[data-v-01960100]{gap:10px;max-width:90%;display:flex}.chat-message-user[data-v-01960100]{flex-direction:row-reverse;align-self:flex-end}.chat-message-ai[data-v-01960100],.chat-message-other[data-v-01960100]{align-self:flex-start}.message-avatar[data-v-01960100]{color:#fff;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:32px;height:32px;font-size:13px;font-weight:600;display:flex}.message-avatar.ai[data-v-01960100]{background:linear-gradient(135deg,#409eff,#337ecc)}.message-content[data-v-01960100]{flex-direction:column;gap:4px;display:flex}.chat-message-user .message-content[data-v-01960100]{align-items:flex-end}.message-meta[data-v-01960100]{align-items:center;gap:6px;padding:0 4px;display:flex}.message-sender[data-v-01960100]{font-size:11px;font-weight:600}.message-mention[data-v-01960100]{color:#409eff;font-size:11px;font-weight:600}.message-text[data-v-01960100]{word-break:break-word;border-radius:12px;padding:10px 14px;font-size:13px;line-height:1.6}.chat-message-ai .message-text[data-v-01960100]{color:#303133;background:#f4f4f5;border-top-left-radius:4px}.chat-message-user .message-text[data-v-01960100]{color:#fff;background:linear-gradient(135deg,#409eff,#337ecc);border-top-right-radius:4px}.chat-message-other .message-text[data-v-01960100]{color:#303133;background:#f0f9ff;border:1px solid #d9ecff;border-top-left-radius:4px}.message-time[data-v-01960100]{color:#c0c4cc;padding:0 4px;font-size:11px}.chat-input-area[data-v-01960100]{background:#fafafa;border-top:1px solid #e4e7ed;padding:12px 16px}.chat-input-wrapper[data-v-01960100]{align-items:flex-end;gap:8px;display:flex;position:relative}.chat-input-wrapper[data-v-01960100] .el-textarea__inner{border:1px solid #dcdfe6;border-radius:10px;padding:8px 12px;font-size:13px;box-shadow:0 1px 4px #0000000f}.chat-input-wrapper[data-v-01960100] .el-textarea__inner:focus{border-color:#409eff;box-shadow:0 1px 6px #409eff26}.send-btn[data-v-01960100]{flex-shrink:0;width:34px;height:34px}.mention-popup[data-v-01960100]{z-index:10;background:#fff;border:1px solid #e4e7ed;border-radius:8px;min-width:160px;max-height:200px;margin-bottom:4px;position:absolute;bottom:100%;left:0;overflow-y:auto;box-shadow:0 4px 12px #0000001a}.mention-item[data-v-01960100]{cursor:pointer;align-items:center;gap:8px;padding:8px 12px;font-size:13px;display:flex}.mention-item[data-v-01960100]:hover,.mention-item.active[data-v-01960100]{background:#f5f7fa}.mention-avatar[data-v-01960100]{color:#fff;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:24px;height:24px;font-size:12px;font-weight:600;display:flex}.typing-indicator[data-v-01960100]{align-items:center;gap:4px;display:flex;padding:12px 16px!important}.typing-indicator span[data-v-01960100]{background:#c0c4cc;border-radius:50%;width:6px;height:6px;animation:1.2s infinite typingBounce-01960100}.typing-indicator span[data-v-01960100]:nth-child(2){animation-delay:.2s}.typing-indicator span[data-v-01960100]:nth-child(3){animation-delay:.4s}@keyframes typingBounce-01960100{0%,60%,to{opacity:.4;transform:translateY(0)}30%{opacity:1;transform:translateY(-4px)}}.version-history-panel[data-v-87924b7c]{flex-direction:column;height:100%;display:flex}.loading-state[data-v-87924b7c],.empty-state[data-v-87924b7c]{color:#909399;flex-direction:column;justify-content:center;align-items:center;height:200px;display:flex}.empty-state p[data-v-87924b7c]{margin-top:12px}.version-list[data-v-87924b7c]{flex:1;padding:0 4px;overflow-y:auto}.current-version[data-v-87924b7c]{background:#f0f9eb;border-radius:6px;flex-direction:column;gap:4px;margin-bottom:16px;padding:8px 12px;display:flex}.current-version-header[data-v-87924b7c]{align-items:center;gap:8px;display:flex}.version-meta[data-v-87924b7c]{color:#606266;font-size:13px}.version-item[data-v-87924b7c]{cursor:pointer;border-radius:6px;align-items:center;gap:20px;padding:8px 12px;transition:background .2s;display:flex}.version-item[data-v-87924b7c]:hover{background:#f5f7fa}.version-item.active[data-v-87924b7c]{background:#ecf5ff}.version-number[data-v-87924b7c]{color:#409eff;font-size:14px;font-weight:600}.version-user[data-v-87924b7c]{color:#303133;font-size:14px}.version-time[data-v-87924b7c]{color:#909399;margin-top:2px;font-size:12px}.panel-footer[data-v-87924b7c]{justify-content:flex-end;padding:12px 0;display:flex}.toolbar[data-v-5c549dd2]{background:#fff;border-bottom:1px solid #e4e7ed;justify-content:space-between;align-items:center;height:48px;padding:6px 12px;display:flex}.toolbar-left[data-v-5c549dd2],.toolbar-center[data-v-5c549dd2],.toolbar-right[data-v-5c549dd2]{align-items:center;gap:4px;display:flex}.title-input[data-v-5c549dd2]{width:180px}.collab-users[data-v-5c549dd2]{align-items:center;gap:2px;margin-right:4px;display:flex}.collab-avatar[data-v-5c549dd2]{color:#fff;border:2px solid #fff;border-radius:50%;justify-content:center;align-items:center;width:22px;height:22px;margin-left:-4px;font-size:10px;font-weight:600;display:flex}.diagram-canvas[data-v-f89f4797]{background:#f8f9fa;flex:1;position:relative;overflow:hidden}.diagram-svg[data-v-f89f4797]{width:100%;height:100%}.popup-tooltip[data-v-f89f4797]{z-index:999;pointer-events:none;color:#fff;background:#000c;border-radius:6px;max-width:280px;padding:8px 12px;font-size:12px;line-height:1.6;position:absolute;box-shadow:0 2px 8px #00000040}.popup-tooltip-row[data-v-f89f4797]{white-space:nowrap}.popup-tooltip-key[data-v-f89f4797]{color:#aaa;margin-right:4px}.popup-tooltip-val[data-v-f89f4797]{color:#fff}.explosion-diagram-editor[data-v-f79e9aab]{background:#f5f5f5;flex-direction:column;height:100vh;display:flex}.ai-chat-fab[data-v-f79e9aab]{z-index:1000;position:fixed;bottom:24px;right:24px;box-shadow:0 4px 12px #00000026}.editor-body[data-v-f79e9aab]{flex:1;display:flex;overflow:hidden}.group-breadcrumb[data-v-f79e9aab]{background:#fff;border-bottom:1px solid #e4e7ed;justify-content:space-between;align-items:center;min-height:36px;padding:4px 12px;display:flex}.group-image-preview[data-v-f79e9aab]{align-items:center;gap:8px;display:flex}.props-panel[data-v-f79e9aab]{background:#fff;border-left:1px solid #e4e7ed;width:240px;padding:16px;overflow-y:auto}.props-panel h4[data-v-f79e9aab]{color:#333;margin:0 0 12px;font-size:14px}.prop-row[data-v-f79e9aab]{margin-bottom:12px}.prop-row label[data-v-f79e9aab]{color:#666;margin-bottom:4px;font-size:12px;display:block}.slide-enter-active[data-v-f79e9aab],.slide-leave-active[data-v-f79e9aab]{transition:width .2s}.slide-enter-from[data-v-f79e9aab],.slide-leave-to[data-v-f79e9aab]{width:0;overflow:hidden}
|
|
2
2
|
/*$vite$:1*/
|
package/dist/index.cjs.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
(function(e,t){typeof exports==`object`&&typeof module<`u`?module.exports=t(require("vue"),require("@billtaofbj/core"),require("vue-router"),require("element-plus"),require("@element-plus/icons-vue"),require("axios"),require("yjs"),require("@hocuspocus/provider")):typeof define==`function`&&define.amd?define([`vue`,`@billtaofbj/core`,`vue-router`,`element-plus`,`@element-plus/icons-vue`,`axios`,`yjs`,`@hocuspocus/provider`],t):(e=typeof globalThis<`u`?globalThis:e||self,e.YourCompanyExplosionDiagram=t(e.Vue,e._billtaofbj_core,e.VueRouter,e.ElementPlus,e.ElementPlusIconsVue,e.axios,e.yjs,e._hocuspocus_provider))})(this,function(e,t,n,r,i,a,o,s){var c=Object.create,l=Object.defineProperty,u=Object.getOwnPropertyDescriptor,d=Object.getOwnPropertyNames,f=Object.getPrototypeOf,p=Object.prototype.hasOwnProperty,m=(e,t,n,r)=>{if(t&&typeof t==`object`||typeof t==`function`)for(var i=d(t),a=0,o=i.length,s;a<o;a++)s=i[a],!p.call(e,s)&&s!==n&&l(e,s,{get:(e=>t[e]).bind(null,s),enumerable:!(r=u(t,s))||r.enumerable});return e},h=(e,t,n)=>(n=e==null?{}:c(f(e)),m(t||!e||!e.__esModule?l(n,`default`,{value:e,enumerable:!0}):n,e));let g=h(a,1);a=h(a),o=h(o,1);var _=(e,t)=>{let n=e.__vccOpts||e;for(let[e,r]of t)n[e]=r;return n},v={class:`chat-header`},y={class:`chat-header-left`},b={class:`chat-title`},x={class:`online-users-list`},S={class:`online-user-item`},C={class:`online-user-name`},w={key:1},T={class:`online-user-name`},E={class:`chat-header-right`},D={key:0,class:`chat-empty`},O={class:`chat-empty-hint`},k={key:1},A={class:`message-content`},j={key:0,class:`message-meta`},M={key:0,class:`message-mention`},N=[`innerHTML`],P={class:`message-time`},
|
|
2
|
-
`)){f=e,p=i,u.value=h.value.filter(t=>t.name&&t.name.toLowerCase().includes(e.toLowerCase())),l.value=u.value.length>0,d.value=0;return}}l.value=!1},B=()=>{l.value&&(d.value=Math.min(d.value+1,u.value.length-1))},V=()=>{l.value&&(d.value=Math.max(d.value-1,0))},H=e=>{let t=o.value.slice(0,p),n=o.value.slice(p+f.length+1);o.value=`${t}@${e.name} ${n}`,l.value=!1},U=e=>{if(e){if(e.shiftKey)return;if(l.value){let t=u.value[d.value];if(t){e.preventDefault(),H(t);return}}e.preventDefault()}let t=o.value.trim();if(!t||r.loading)return;let n=null;if(r.isCollab){let e=t.match(/@(\S+)/);e&&(n=e[1])}a(`send`,t,{mentionedUser:n}),o.value=``,l.value=!1},W=()=>{(0,e.nextTick)(()=>{s.value&&(s.value.scrollTop=s.value.scrollHeight)})};return(0,e.watch)(()=>r.messages.length,W),(0,e.watch)(()=>r.messages,W,{deep:!0}),(n,r)=>{let f=(0,e.resolveComponent)(`el-icon`),p=(0,e.resolveComponent)(`el-tag`),m=(0,e.resolveComponent)(`el-popover`),W=(0,e.resolveComponent)(`el-button`),G=(0,e.resolveComponent)(`el-input`);return t.visible?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:0,class:`ai-chat-panel`,style:(0,e.normalizeStyle)({width:t.panelWidth+`px`})},[(0,e.createElementVNode)(`div`,v,[(0,e.createElementVNode)(`div`,y,[(0,e.createVNode)(f,{size:18,color:`#409EFF`},{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.Monitor))]),_:1}),(0,e.createElementVNode)(`span`,b,(0,e.toDisplayString)(t.isCollab?`协作聊天`:`AI 助手`),1),t.isCollab?((0,e.openBlock)(),(0,e.createBlock)(m,{key:0,width:200,placement:`bottom-start`,trigger:`click`},{reference:(0,e.withCtx)(()=>[(0,e.createVNode)(p,{size:`small`,type:`success`,effect:`plain`,class:`online-tag`},{default:(0,e.withCtx)(()=>[(0,e.createTextVNode)((0,e.toDisplayString)(g.value)+`人在线 `,1)]),_:1})]),default:(0,e.withCtx)(()=>[(0,e.createElementVNode)(`div`,x,[(0,e.createElementVNode)(`div`,S,[(0,e.createElementVNode)(`div`,{class:`online-user-avatar`,style:(0,e.normalizeStyle)({background:t.currentUser.color||`#409EFF`})},(0,e.toDisplayString)((t.currentUser.name||`U`).charAt(0)),5),(0,e.createElementVNode)(`span`,C,(0,e.toDisplayString)(t.currentUser.name||`我`),1),(0,e.createVNode)(p,{size:`small`,type:t.isOwner?`warning`:`success`,effect:`plain`,class:`role-tag`},{default:(0,e.withCtx)(()=>[(0,e.createTextVNode)((0,e.toDisplayString)(t.isOwner?`发起人`:`协作人`),1)]),_:1},8,[`type`]),r[4]||=(0,e.createElementVNode)(`span`,{class:`self-tag`},`(我)`,-1)]),((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(h.value,t=>((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:t.id||t.clientId,class:`online-user-item`},[(0,e.createElementVNode)(`div`,{class:`online-user-avatar`,style:(0,e.normalizeStyle)({background:t.color||`#909399`})},[t.isAi?((0,e.openBlock)(),(0,e.createBlock)(f,{key:0,size:14},{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.Monitor))]),_:1})):((0,e.openBlock)(),(0,e.createElementBlock)(`span`,w,(0,e.toDisplayString)((t.name||`U`).charAt(0)),1))],4),(0,e.createElementVNode)(`span`,T,(0,e.toDisplayString)(t.name||`未知用户`),1),t.isAi?((0,e.openBlock)(),(0,e.createBlock)(p,{key:0,size:`small`,type:`primary`,effect:`plain`,class:`role-tag`},{default:(0,e.withCtx)(()=>[...r[5]||=[(0,e.createTextVNode)(`AI助手`,-1)]]),_:1})):((0,e.openBlock)(),(0,e.createBlock)(p,{key:1,size:`small`,type:`success`,effect:`plain`,class:`role-tag`},{default:(0,e.withCtx)(()=>[...r[6]||=[(0,e.createTextVNode)(`协作人`,-1)]]),_:1}))]))),128))])]),_:1})):(0,e.createCommentVNode)(``,!0)]),(0,e.createElementVNode)(`div`,E,[t.isCollab&&t.unreadMention?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:0,class:`mention-bell`,title:`有新消息`,onClick:r[0]||=e=>a(`clear-unread`)},[(0,e.createVNode)(f,{size:18,color:`#F56C6C`},{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.Bell))]),_:1})])):(0,e.createCommentVNode)(``,!0),(0,e.createVNode)(W,{text:``,circle:``,size:`small`,onClick:r[1]||=e=>n.$emit(`clear`),title:`清空对话`},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(f,null,{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.Delete))]),_:1})]),_:1}),(0,e.createVNode)(W,{text:``,circle:``,size:`small`,onClick:r[2]||=e=>n.$emit(`close`),title:`关闭`},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(f,null,{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.Close))]),_:1})]),_:1})])]),(0,e.createElementVNode)(`div`,{class:`chat-messages`,ref_key:`messagesRef`,ref:s},[t.messages.length===0?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,D,[(0,e.createVNode)(f,{size:40,color:`#c0c4cc`},{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.Monitor))]),_:1}),(0,e.createElementVNode)(`p`,null,(0,e.toDisplayString)(t.isCollab?`协作聊天室`:`你好!我是 AI 助手`),1),(0,e.createElementVNode)(`p`,O,(0,e.toDisplayString)(t.isCollab?`与团队成员和AI助手实时聊天`:`可以问我任何关于文档编辑的问题`),1)])):(0,e.createCommentVNode)(``,!0),((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(t.messages,n=>((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:n._msgId||n.time+n.content,class:(0,e.normalizeClass)([`chat-message`,_(n)])},[(0,e.createElementVNode)(`div`,{class:`message-avatar`,style:(0,e.normalizeStyle)(re(n))},[n.role===`ai`?((0,e.openBlock)(),(0,e.createBlock)(f,{key:0,size:16},{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.Monitor))]),_:1})):((0,e.openBlock)(),(0,e.createElementBlock)(`span`,k,(0,e.toDisplayString)(R(n)),1))],4),(0,e.createElementVNode)(`div`,A,[t.isCollab&&n.role===`user`?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,j,[(0,e.createElementVNode)(`span`,{class:`message-sender`,style:(0,e.normalizeStyle)({color:n.user_color||`#67C23A`})},(0,e.toDisplayString)(n.user_name||`用户`),5),n.mentioned_user?((0,e.openBlock)(),(0,e.createElementBlock)(`span`,M,`@`+(0,e.toDisplayString)(n.mentioned_user),1)):(0,e.createCommentVNode)(``,!0)])):(0,e.createCommentVNode)(``,!0),(0,e.createElementVNode)(`div`,{class:`message-text`,innerHTML:n.content},null,8,N),(0,e.createElementVNode)(`div`,P,(0,e.toDisplayString)(n.time),1)])],2))),128)),t.loading?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,ee,[(0,e.createElementVNode)(`div`,te,[(0,e.createVNode)(f,{size:16},{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.Monitor))]),_:1})]),r[7]||=(0,e.createElementVNode)(`div`,{class:`message-content`},[(0,e.createElementVNode)(`div`,{class:`message-text typing-indicator`},[(0,e.createElementVNode)(`span`),(0,e.createElementVNode)(`span`),(0,e.createElementVNode)(`span`)])],-1)])):(0,e.createCommentVNode)(``,!0)],512),(0,e.createElementVNode)(`div`,ne,[(0,e.createElementVNode)(`div`,{class:`chat-input-wrapper`,ref_key:`inputWrapperRef`,ref:c},[(0,e.createVNode)(G,{modelValue:o.value,"onUpdate:modelValue":r[3]||=e=>o.value=e,type:`textarea`,autosize:{minRows:1,maxRows:4},placeholder:t.isCollab?`输入消息... @提及成员`:`输入消息...`,onKeydown:[(0,e.withKeys)((0,e.withModifiers)(U,[`exact`]),[`enter`]),(0,e.withKeys)((0,e.withModifiers)(B,[`prevent`]),[`down`]),(0,e.withKeys)((0,e.withModifiers)(V,[`prevent`]),[`up`])],onInput:z,resize:`none`},null,8,[`modelValue`,`placeholder`,`onKeydown`]),l.value?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,F,[((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(u.value,(t,n)=>((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:t.id||t.clientId,class:(0,e.normalizeClass)([`mention-item`,{active:n===d.value}]),onClick:e=>H(t),onMouseenter:e=>d.value=n},[(0,e.createElementVNode)(`div`,{class:`mention-avatar`,style:(0,e.normalizeStyle)({background:t.color||`#909399`})},[t.isAi?((0,e.openBlock)(),(0,e.createBlock)(f,{key:0,size:12},{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.Monitor))]),_:1})):((0,e.openBlock)(),(0,e.createElementBlock)(`span`,L,(0,e.toDisplayString)((t.name||`U`).charAt(0)),1))],4),(0,e.createElementVNode)(`span`,null,(0,e.toDisplayString)(t.name),1)],42,I))),128))])):(0,e.createCommentVNode)(``,!0),(0,e.createVNode)(W,{class:`send-btn`,type:`primary`,circle:``,disabled:!o.value.trim()||t.loading,onClick:U},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(f,null,{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.Promotion))]),_:1})]),_:1},8,[`disabled`])],512)])],4)):(0,e.createCommentVNode)(``,!0)}}},[[`__scopeId`,`data-v-01960100`]]);function R(){let t=(0,e.ref)([]),n=(0,e.ref)(!1),r=(0,e.ref)(!1),i=(0,e.ref)([]),a=(0,e.ref)({id:``,name:``,color:``}),o=(0,e.ref)(!1),s=null,c=null,l=null,u=new Set,d=`/api/chat`,f=null,p=({ydoc:n,provider:c,onlineUsers:d})=>{if(n){r.value=!0,l=d,f&&f(),f=(0,e.watch)(l,e=>{i.value=Array.isArray(e)?e:[]},{immediate:!0,deep:!0});try{s=n.getArray(`chat-messages`),s.observe(e=>{try{e.changes.added.forEach(e=>{e.content.getContent().forEach(e=>{e&&e._msgId&&!u.has(e._msgId)&&(u.add(e._msgId),t.value=[...t.value,e],e.mentioned_user&&e.user_id!==a.value.id&&(o.value=!0))})})}catch(e){console.warn(`[useChat] Y.Array observer error:`,e)}})}catch(e){console.warn(`[useChat] Failed to create Y.Array:`,e)}}},m=e=>{a.value={...a.value,...e}},h=e=>{i.value=e||[]},_=()=>{let e=new Date;return`${e.getHours().toString().padStart(2,`0`)}:${e.getMinutes().toString().padStart(2,`0`)}`},v=async(n,i={})=>{let o={_msgId:`msg-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,role:`user`,content:n,time:_(),user_id:a.value.id,user_name:a.value.name,user_color:a.value.color,mentioned_user:i.mentionedUser||null};if(u.add(o._msgId),t.value=[...t.value,o],s&&(0,e.unref)(r))try{s.push([o])}catch(e){console.warn(`[useChat] Failed to push to Y.Array:`,e)}if(i.roomId)try{await g.default.post(d,{room_id:i.roomId,role:`user`,content:n,user_id:a.value.id,user_name:a.value.name,mentioned_user:i.mentionedUser||null})}catch(e){console.warn(`[useChat] Failed to persist message:`,e)}},y=async(n,i)=>{let a={_msgId:`msg-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,role:`ai`,content:n,time:_(),user_id:`ai-assistant`,user_name:`AI助手`};if(u.add(a._msgId),t.value=[...t.value,a],s&&(0,e.unref)(r))try{s.push([a])}catch(e){console.warn(`[useChat] Failed to push AI message to Y.Array:`,e)}if(i)try{await g.default.post(d,{room_id:i,role:`ai`,content:n,user_id:`ai-assistant`,user_name:`AI助手`})}catch(e){console.warn(`[useChat] Failed to persist AI message:`,e)}},b=async e=>{if(e)try{let n=await g.default.get(d,{params:{room_id:e}});if(Array.isArray(n.data)){let e=n.data.map(e=>({_msgId:e._msgId||`hist-${e.id||Date.now()}`,role:e.role,content:e.content,time:e.time||_(),user_id:e.user_id||``,user_name:e.user_name||``,user_color:e.user_color||``,mentioned_user:e.mentioned_user||null}));e.forEach(e=>u.add(e._msgId)),t.value=[...e,...t.value]}}catch(e){console.warn(`[useChat] Failed to load history:`,e)}},x=async e=>{if(t.value=[],u.clear(),e)try{await g.default.delete(d,{params:{room_id:e}})}catch(e){console.warn(`[useChat] Failed to clear messages on server:`,e)}},S=()=>{o.value=!1},C=()=>{if(f&&=(f(),null),s&&c){try{s.unobserve(c)}catch{}c=null}s=null,l=null,u.clear()};return(0,e.onUnmounted)(()=>C()),{messages:t,loading:n,isCollabMode:r,collabUsers:i,currentUser:a,unreadMention:o,setCollabContext:p,setCurrentUser:m,updateCollabUsers:h,sendMessage:v,sendAiMessage:y,loadHistory:b,clearMessages:x,clearUnreadMention:S,destroy:C}}var z=`/api/document-versions`,B=5e3,V=()=>{let t=(0,e.ref)([]),n=(0,e.ref)(!1);return{versions:t,loading:n,saveVersion:async({documentId:e,docType:t,content:n,userId:r,userName:i})=>{if(!e||!t||!n)return null;try{let{data:a}=await g.default.post(z,{document_id:e,doc_type:t,content:typeof n==`string`?n:JSON.stringify(n),user_id:r||null,user_name:i||null},{timeout:B});return a}catch(e){return console.warn(`[useVersionHistory] Failed to save version:`,e),null}},loadVersions:async e=>{if(!e)return[];n.value=!0;try{let{data:n}=await g.default.get(z,{params:{document_id:e},timeout:B});return t.value=n,n}catch(e){return console.warn(`[useVersionHistory] Failed to load versions:`,e),t.value=[],[]}finally{n.value=!1}},getVersionContent:async e=>{try{let{data:t}=await g.default.get(`${z}/${e}`,{timeout:B});return t}catch(e){return console.warn(`[useVersionHistory] Failed to get version content:`,e),null}}}},H={class:`version-history-panel`},U={key:0,class:`loading-state`},W={key:1,class:`empty-state`},G={key:2,class:`version-list`},K={key:0,class:`current-version`},q={class:`current-version-header`},J={class:`version-number`},ie=[`onClick`],Y={class:`version-number`},ae={class:`version-user`},X={class:`panel-footer`},oe=_({__name:`VersionHistoryPanel`,props:{modelValue:{type:Boolean,default:!1},documentId:{type:[Number,String],default:null}},emits:[`update:modelValue`,`apply`],setup(t,{expose:n,emit:a}){let o=t,s=a,{versions:c,loading:l,loadVersions:u,getVersionContent:d}=V(),f=(0,e.ref)(!1),p=(0,e.ref)(null),m=(0,e.ref)(!1),h=(0,e.ref)(null);(0,e.watch)(()=>o.modelValue,e=>{f.value=e,e&&o.documentId&&(p.value=null,u(o.documentId).then(e=>{e&&e.length>0&&(h.value=e[0])}))}),(0,e.watch)(f,e=>{s(`update:modelValue`,e)});let g=e=>{p.value=e},_=async()=>{if(p.value){m.value=!0;try{let e=await d(p.value.id);e&&e.content?(h.value=p.value,p.value=null,s(`apply`,e.content),r.ElMessage.success(`已切换到版本 v`+h.value.version_number)):r.ElMessage.error(`获取版本内容失败`)}finally{m.value=!1}}},v=()=>{f.value=!1},y=e=>{if(!e)return``;let t=new Date(e),n=e=>String(e).padStart(2,`0`);return`${t.getFullYear()}-${n(t.getMonth()+1)}-${n(t.getDate())} ${n(t.getHours())}:${n(t.getMinutes())}:${n(t.getSeconds())}`};return n({currentVersion:h}),(t,n)=>{let r=(0,e.resolveComponent)(`el-icon`),a=(0,e.resolveComponent)(`el-tag`),o=(0,e.resolveComponent)(`el-timeline-item`),s=(0,e.resolveComponent)(`el-timeline`),u=(0,e.resolveComponent)(`el-button`),d=(0,e.resolveComponent)(`el-drawer`);return(0,e.openBlock)(),(0,e.createBlock)(d,{modelValue:f.value,"onUpdate:modelValue":n[0]||=e=>f.value=e,title:`更新履历`,direction:`rtl`,size:`420px`,"before-close":v},{footer:(0,e.withCtx)(()=>[(0,e.createElementVNode)(`div`,X,[(0,e.createVNode)(u,{type:`primary`,disabled:!p.value,loading:m.value,onClick:_},{default:(0,e.withCtx)(()=>[...n[4]||=[(0,e.createTextVNode)(` 切换到此版本 `,-1)]]),_:1},8,[`disabled`,`loading`])])]),default:(0,e.withCtx)(()=>[(0,e.createElementVNode)(`div`,H,[(0,e.unref)(l)?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,U,[(0,e.createVNode)(r,{class:`is-loading`},{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.Loading))]),_:1}),n[1]||=(0,e.createElementVNode)(`span`,null,`加载中...`,-1)])):(0,e.unref)(c).length===0?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,W,[(0,e.createVNode)(r,{size:48,color:`#c0c4cc`},{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.Clock))]),_:1}),n[2]||=(0,e.createElementVNode)(`p`,null,`暂无历史版本`,-1)])):((0,e.openBlock)(),(0,e.createElementBlock)(`div`,G,[h.value?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,K,[(0,e.createElementVNode)(`div`,q,[(0,e.createVNode)(a,{type:`success`,size:`small`},{default:(0,e.withCtx)(()=>[...n[3]||=[(0,e.createTextVNode)(`当前版本`,-1)]]),_:1}),(0,e.createElementVNode)(`span`,J,`v`+(0,e.toDisplayString)(h.value.version_number),1)])])):(0,e.createCommentVNode)(``,!0),(0,e.createVNode)(s,null,{default:(0,e.withCtx)(()=>[((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)((0,e.unref)(c),t=>((0,e.openBlock)(),(0,e.createBlock)(o,{key:t.id,timestamp:y(t.created_at),placement:`top`,type:p.value?.id===t.id?`primary`:``,hollow:p.value?.id!==t.id},{default:(0,e.withCtx)(()=>[(0,e.createElementVNode)(`div`,{class:(0,e.normalizeClass)([`version-item`,{active:p.value?.id===t.id}]),onClick:e=>g(t)},[(0,e.createElementVNode)(`span`,Y,`版本号:v`+(0,e.toDisplayString)(t.version_number),1),(0,e.createElementVNode)(`span`,ae,`提交人:`+(0,e.toDisplayString)(t.user_name||`未知用户`),1)],10,ie)]),_:2},1032,[`timestamp`,`type`,`hollow`]))),128))]),_:1})]))])]),_:1},8,[`modelValue`])}}},[[`__scopeId`,`data-v-87924b7c`]]),se={class:`toolbar`},Z={class:`toolbar-left`},ce={class:`toolbar-center`},le={class:`toolbar-right`},Q={key:0,class:`collab-users`},ue=[`title`],de=_({__name:`Toolbar`,props:{title:{type:String,default:``},canUndo:Boolean,canRedo:Boolean,connectingMode:Boolean,isConnected:Boolean,onlineUsers:{type:Array,default:()=>[]},isJoinMode:Boolean,showHistory:{type:Boolean,default:!1}},emits:[`update:title`,`back`,`add-component`,`group-selected`,`toggle-connecting`,`auto-layout`,`undo`,`redo`,`zoom-in`,`zoom-out`,`export`,`save`,`toggle-collab`,`share-collab`,`export-json`,`import-json`,`history`],setup(t){let n=t,r=(0,e.ref)(n.title);return(0,e.watch)(()=>n.title,e=>r.value=e),(n,a)=>{let o=(0,e.resolveComponent)(`el-icon`),s=(0,e.resolveComponent)(`el-button`),c=(0,e.resolveComponent)(`el-input`),l=(0,e.resolveComponent)(`el-dropdown-item`),u=(0,e.resolveComponent)(`el-dropdown-menu`),d=(0,e.resolveComponent)(`el-dropdown`),f=(0,e.resolveComponent)(`el-tooltip`),p=(0,e.resolveComponent)(`el-divider`);return(0,e.openBlock)(),(0,e.createElementBlock)(`div`,se,[(0,e.createElementVNode)(`div`,Z,[(0,e.createVNode)(s,{onClick:a[0]||=e=>n.$emit(`back`),size:`small`,circle:``},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(o,null,{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.ArrowLeft))]),_:1})]),_:1}),(0,e.createVNode)(c,{modelValue:r.value,"onUpdate:modelValue":a[1]||=e=>r.value=e,onBlur:a[2]||=e=>n.$emit(`update:title`,r.value),placeholder:`输入标题`,class:`title-input`,size:`small`},null,8,[`modelValue`])]),(0,e.createElementVNode)(`div`,ce,[(0,e.createVNode)(d,{trigger:`click`,onCommand:a[3]||=e=>n.$emit(`add-component`,e)},{dropdown:(0,e.withCtx)(()=>[(0,e.createVNode)(u,null,{default:(0,e.withCtx)(()=>[(0,e.createVNode)(l,{command:`rect`},{default:(0,e.withCtx)(()=>[...a[19]||=[(0,e.createTextVNode)(`矩形`,-1)]]),_:1}),(0,e.createVNode)(l,{command:`circle`},{default:(0,e.withCtx)(()=>[...a[20]||=[(0,e.createTextVNode)(`圆形`,-1)]]),_:1}),(0,e.createVNode)(l,{command:`diamond`},{default:(0,e.withCtx)(()=>[...a[21]||=[(0,e.createTextVNode)(`菱形`,-1)]]),_:1}),(0,e.createVNode)(l,{command:`triangle`},{default:(0,e.withCtx)(()=>[...a[22]||=[(0,e.createTextVNode)(`三角形`,-1)]]),_:1}),(0,e.createVNode)(l,{command:`text`},{default:(0,e.withCtx)(()=>[...a[23]||=[(0,e.createTextVNode)(`文本`,-1)]]),_:1}),(0,e.createVNode)(l,{divided:``,command:`image`},{default:(0,e.withCtx)(()=>[...a[24]||=[(0,e.createTextVNode)(`图片零件`,-1)]]),_:1}),(0,e.createVNode)(l,{command:`polygon`},{default:(0,e.withCtx)(()=>[...a[25]||=[(0,e.createTextVNode)(`自定义多边形`,-1)]]),_:1}),(0,e.createVNode)(l,{command:`svg`},{default:(0,e.withCtx)(()=>[...a[26]||=[(0,e.createTextVNode)(`SVG导入`,-1)]]),_:1})]),_:1})]),default:(0,e.withCtx)(()=>[(0,e.createVNode)(s,{size:`small`},{default:(0,e.withCtx)(()=>[a[18]||=(0,e.createTextVNode)(`形状`,-1),(0,e.createVNode)(o,{class:`el-icon--right`},{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.ArrowDown))]),_:1})]),_:1})]),_:1}),(0,e.createVNode)(f,{content:`导出JSON`,placement:`bottom`},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(s,{size:`small`,circle:``,onClick:a[4]||=e=>n.$emit(`export-json`)},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(o,null,{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.Download))]),_:1})]),_:1})]),_:1}),(0,e.createVNode)(f,{content:`导入JSON`,placement:`bottom`},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(s,{size:`small`,circle:``,onClick:a[5]||=e=>n.$emit(`import-json`)},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(o,null,{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.Upload))]),_:1})]),_:1})]),_:1}),(0,e.createVNode)(f,{content:`组合`,placement:`bottom`},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(s,{size:`small`,circle:``,onClick:a[6]||=e=>n.$emit(`group-selected`),title:`将选中零件组合为一个`},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(o,null,{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.Files))]),_:1})]),_:1})]),_:1}),(0,e.createVNode)(p,{direction:`vertical`}),(0,e.createVNode)(f,{content:`连线模式`,placement:`bottom`},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(s,{size:`small`,circle:``,type:t.connectingMode?`primary`:``,onClick:a[7]||=e=>n.$emit(`toggle-connecting`)},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(o,null,{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.Connection))]),_:1})]),_:1},8,[`type`])]),_:1}),(0,e.createVNode)(s,{size:`small`,onClick:a[8]||=e=>n.$emit(`auto-layout`)},{default:(0,e.withCtx)(()=>[...a[27]||=[(0,e.createTextVNode)(`自动布局`,-1)]]),_:1}),(0,e.createVNode)(p,{direction:`vertical`}),(0,e.createVNode)(s,{size:`small`,circle:``,onClick:a[9]||=e=>n.$emit(`undo`),disabled:!t.canUndo},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(o,null,{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.RefreshLeft))]),_:1})]),_:1},8,[`disabled`]),(0,e.createVNode)(s,{size:`small`,circle:``,onClick:a[10]||=e=>n.$emit(`redo`),disabled:!t.canRedo},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(o,null,{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.RefreshRight))]),_:1})]),_:1},8,[`disabled`]),(0,e.createVNode)(p,{direction:`vertical`}),(0,e.createVNode)(s,{size:`small`,circle:``,onClick:a[11]||=e=>n.$emit(`zoom-in`)},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(o,null,{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.ZoomIn))]),_:1})]),_:1}),(0,e.createVNode)(s,{size:`small`,circle:``,onClick:a[12]||=e=>n.$emit(`zoom-out`)},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(o,null,{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.ZoomOut))]),_:1})]),_:1})]),(0,e.createElementVNode)(`div`,le,[t.onlineUsers.length>0?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,Q,[((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(t.onlineUsers.slice(0,5),t=>((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:t.clientId,class:`collab-avatar`,style:(0,e.normalizeStyle)({background:t.color}),title:t.name},(0,e.toDisplayString)(t.name?.charAt(0)),13,ue))),128))])):(0,e.createCommentVNode)(``,!0),t.isJoinMode?(0,e.createCommentVNode)(``,!0):((0,e.openBlock)(),(0,e.createBlock)(s,{key:1,size:`small`,type:t.isConnected?`success`:`default`,onClick:a[13]||=e=>n.$emit(`toggle-collab`)},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(o,null,{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.Share))]),_:1}),(0,e.createElementVNode)(`span`,null,(0,e.toDisplayString)(t.isConnected?`协作中`:`协作`),1)]),_:1},8,[`type`])),!t.isJoinMode&&t.isConnected?((0,e.openBlock)(),(0,e.createBlock)(s,{key:2,size:`small`,circle:``,onClick:a[14]||=e=>n.$emit(`share-collab`),title:`分享链接`},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(o,null,{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.Link))]),_:1})]),_:1})):(0,e.createCommentVNode)(``,!0),(0,e.createVNode)(p,{direction:`vertical`}),(0,e.createVNode)(d,{trigger:`click`,onCommand:a[15]||=e=>n.$emit(`export`,e)},{dropdown:(0,e.withCtx)(()=>[(0,e.createVNode)(u,null,{default:(0,e.withCtx)(()=>[(0,e.createVNode)(l,{command:`png`},{default:(0,e.withCtx)(()=>[...a[29]||=[(0,e.createTextVNode)(`PNG`,-1)]]),_:1}),(0,e.createVNode)(l,{command:`svg`},{default:(0,e.withCtx)(()=>[...a[30]||=[(0,e.createTextVNode)(`SVG`,-1)]]),_:1}),(0,e.createVNode)(l,{command:`pdf`},{default:(0,e.withCtx)(()=>[...a[31]||=[(0,e.createTextVNode)(`PDF`,-1)]]),_:1}),(0,e.createVNode)(l,{command:`html`},{default:(0,e.withCtx)(()=>[...a[32]||=[(0,e.createTextVNode)(`HTML`,-1)]]),_:1})]),_:1})]),default:(0,e.withCtx)(()=>[(0,e.createVNode)(s,{size:`small`},{default:(0,e.withCtx)(()=>[a[28]||=(0,e.createTextVNode)(`导出`,-1),(0,e.createVNode)(o,{class:`el-icon--right`},{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.ArrowDown))]),_:1})]),_:1})]),_:1}),(0,e.createVNode)(s,{size:`small`,onClick:a[16]||=e=>n.$emit(`save`)},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(o,null,{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.Download))]),_:1})]),_:1}),t.showHistory?((0,e.openBlock)(),(0,e.createBlock)(s,{key:3,size:`small`,circle:``,title:`更新履历`,onClick:a[17]||=e=>n.$emit(`history`)},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(o,null,{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.Clock))]),_:1})]),_:1})):(0,e.createCommentVNode)(``,!0)])])}}},[[`__scopeId`,`data-v-919c0dae`]]),fe=[`viewBox`],pe=[`id`],me=[`x`,`y`,`width`,`height`],he=[`transform`,`onMousedown`,`onDblclick`,`onMouseenter`],ge=[`href`,`width`,`height`],_e=[`innerHTML`,`transform`],ve=[`points`,`fill`,`stroke`,`stroke-width`],ye=[`width`,`height`,`fill`,`stroke`,`stroke-width`],be=[`width`,`height`,`fill`,`stroke`,`stroke-width`],xe=[`cx`,`cy`,`rx`,`ry`,`fill`,`stroke`,`stroke-width`],Se=[`points`,`fill`,`stroke`,`stroke-width`],Ce=[`points`,`fill`,`stroke`,`stroke-width`],we=[`width`,`height`,`stroke`,`stroke-width`],$=[`x`,`y`,`fill`,`font-size`],Te=[`x`,`y`],Ee=[`x`,`y`,`fill`,`font-size`],De=[`x`,`y`,`fill`,`font-size`],Oe=[`x`,`y`],ke={key:12},Ae=[`x`,`y`,`onMousedown`],je=[`y`,`onMousedown`],Me=[`x`,`onMousedown`],Ne=[`onMousedown`],Pe={key:13},Fe=[`cx`,`cy`,`onMousedown`],Ie=[`x`,`y`],Le=[`d`,`stroke`,`stroke-width`,`stroke-dasharray`,`onMousedown`],Re=[`x`,`y`],ze=[`x1`,`y1`,`x2`,`y2`],Be={key:1},Ve=[`cx`,`cy`,`onMousedown`],He=[`href`,`x`,`y`,`width`,`height`,`clip-path`],Ue={class:`popup-tooltip-key`},We={class:`popup-tooltip-val`},Ge=_({__name:`DiagramCanvas`,props:{components:{type:Array,default:()=>[]},connections:{type:Array,default:()=>[]},selectedId:[String,Number,null],selectedIds:{type:Array,default:()=>[]},connectingMode:Boolean,drawingConn:Object,editingPolygon:Object,viewBox:{type:String,default:`0 0 2000 1500`},isExpanded:Boolean,expandedGroupId:[String,Number,null]},emits:[`select`,`edit`,`clear-selection`,`start-connect`,`start-resize`,`move-component`,`drag-polygon-vertex`],setup(t,{emit:n}){let r=t,i=n,a=(0,e.ref)(null),o=(0,e.ref)(null),s=(0,e.ref)(null),c=(0,e.ref)({x:0,y:0}),l=(0,e.computed)(()=>{let e=r.components.filter(e=>e.shape===`group`),t=r.components.filter(e=>e.shape!==`group`);return[...e,...t]}),u=(0,e.computed)(()=>r.viewBox),d=(0,e.computed)(()=>r.components.filter(e=>e.shape===`group`&&e.imageUrl)),f=e=>!r.isExpanded&&e.groupId,p=e=>{if(r.isExpanded)return!1;let t=r.components.find(t=>t.id===e.fromId),n=r.components.find(t=>t.id===e.toId);return t&&t.groupId||n&&n.groupId},m=(0,e.computed)(()=>r.editingPolygon?(r.editingPolygon.points||``).trim().split(/\s+/).map(e=>{let[t,n]=e.split(`,`).map(Number);return{x:t,y:n}}):[]),h=e=>[{x:e.width/2,y:0,dir:`top`},{x:e.width,y:e.height/2,dir:`right`},{x:e.width/2,y:e.height,dir:`bottom`},{x:0,y:e.height/2,dir:`left`}],g=e=>{let t=r.components.find(t=>t.id===e.fromId),n=r.components.find(t=>t.id===e.toId);if(!t||!n)return``;let i=t.x+(e.fromAnchor?.x??t.width/2),a=t.y+(e.fromAnchor?.y??t.height/2),o=n.x+(e.toAnchor?.x??n.width/2),s=n.y+(e.toAnchor?.y??n.height/2),c=o-i;return`M${i},${a} C${i+c*.3},${a} ${o-c*.3},${s} ${o},${s}`},_=e=>{let t=r.components.find(t=>t.id===e.fromId),n=r.components.find(t=>t.id===e.toId);return!t||!n?{x:0,y:0}:{x:(t.x+n.x)/2,y:(t.y+n.y)/2}},v=(e,t)=>{if(!e.popupConfig||!e.popupConfig.length)return;s.value=e;let n=a.value.getBoundingClientRect();c.value={x:t.clientX-n.left,y:t.clientY-n.top}},y=e=>{let t=o.value;if(!t)return{x:0,y:0};let n=t.getBoundingClientRect(),r=t.viewBox.baseVal;return{x:(e.clientX-n.left)/n.width*r.width+r.x,y:(e.clientY-n.top)/n.height*r.height+r.y}},b=(e,t)=>{if(t.ctrlKey||t.metaKey){i(`select`,e,`component`,t);return}if(i(`select`,e,`component`,t),r.connectingMode)return;let n=y(t),a=e.x,o=e.y,s=!1,c=t=>{let r=y(t),c=r.x-n.x,l=r.y-n.y;(Math.abs(c)>2||Math.abs(l)>2)&&(s=!0),i(`move-component`,e.id,a+c,o+l)},l=()=>{document.removeEventListener(`mousemove`,c),document.removeEventListener(`mouseup`,l),s&&i(`move-component`,e.id,e.x,e.y,!0)};document.addEventListener(`mousemove`,c),document.addEventListener(`mouseup`,l)},x=(e,t,n)=>{e.width,e.height;let r=(e.points||``).trim().split(/\s+/).map(e=>e.split(`,`).map(Number)),a=n=>{let i=y(n);r[t]=[Math.max(0,Math.min(e.width,Math.round(i.x-e.x))),Math.max(0,Math.min(e.height,Math.round(i.y-e.y)))],e.points=r.map(e=>e.join(`,`)).join(` `)},o=()=>{document.removeEventListener(`mousemove`,a),document.removeEventListener(`mouseup`,o),i(`drag-polygon-vertex`,e)};document.addEventListener(`mousemove`,a),document.addEventListener(`mouseup`,o)};return(n,r)=>((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{class:`diagram-canvas`,ref_key:`containerRef`,ref:a},[((0,e.openBlock)(),(0,e.createElementBlock)(`svg`,{ref_key:`svgRef`,ref:o,class:`diagram-svg`,viewBox:u.value,onMousedown:r[1]||=(0,e.withModifiers)(e=>n.$emit(`clear-selection`),[`self`])},[(0,e.createElementVNode)(`defs`,null,[r[2]||=(0,e.createElementVNode)(`marker`,{id:`arrowhead-end`,markerWidth:`10`,markerHeight:`7`,refX:`9`,refY:`3.5`,orient:`auto`},[(0,e.createElementVNode)(`polygon`,{points:`0 0, 10 3.5, 0 7`,fill:`#666`})],-1),((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(d.value,t=>((0,e.openBlock)(),(0,e.createElementBlock)(`clipPath`,{key:`clip-`+t.id,id:`clip-`+t.id},[(0,e.createElementVNode)(`rect`,{x:t.x,y:t.y,width:t.width,height:t.height,rx:`4`},null,8,me)],8,pe))),128))]),((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(l.value,i=>((0,e.openBlock)(),(0,e.createElementBlock)(`g`,{key:i.id,transform:`translate(${i.x}, ${i.y})`,onMousedown:(0,e.withModifiers)(e=>f(i)?null:b(i,e),[`stop`]),onDblclick:(0,e.withModifiers)(e=>f(i)?null:n.$emit(`edit`,i),[`stop`]),onMouseenter:e=>v(i,e),onMouseleave:r[0]||=e=>s.value=null,style:(0,e.normalizeStyle)(f(i)?`pointer-events:none;opacity:0.7;`:`cursor:move;`)},[i.shape===`image`?((0,e.openBlock)(),(0,e.createElementBlock)(`image`,{key:0,href:i.imageUrl,width:i.width,height:i.height,preserveAspectRatio:`xMidYMid meet`,style:(0,e.normalizeStyle)({pointerEvents:f(i)?`none`:`all`})},null,12,ge)):i.shape===`svg`?((0,e.openBlock)(),(0,e.createElementBlock)(`g`,{key:1,innerHTML:i.svgContent||``,transform:`scale(${i.width/(i.svgWidth||100)}, ${i.height/(i.svgHeight||100)})`,style:(0,e.normalizeStyle)({pointerEvents:f(i)?`none`:`all`})},null,12,_e)):i.shape===`polygon`?((0,e.openBlock)(),(0,e.createElementBlock)(`polygon`,{key:2,points:i.points||``,fill:i.fill||`#fff`,stroke:t.selectedIds.includes(i.id)?`#409EFF`:i.stroke||`#ccc`,"stroke-width":t.selectedIds.includes(i.id)?2:1,style:(0,e.normalizeStyle)({pointerEvents:f(i)?`none`:`all`})},null,12,ve)):i.shape===`group`&&i.id!==t.expandedGroupId?((0,e.openBlock)(),(0,e.createElementBlock)(`rect`,{key:3,width:i.width,height:i.height,fill:i.imageUrl?`none`:`rgba(64,158,255,0.05)`,stroke:(t.selectedIds.includes(i.id),`#409EFF`),"stroke-dasharray":`6,3`,"stroke-width":t.selectedIds.includes(i.id)?2:1,style:{"pointer-events":`all`}},null,8,ye)):i.shape===`rect`?((0,e.openBlock)(),(0,e.createElementBlock)(`rect`,{key:4,width:i.width,height:i.height,rx:4,fill:i.fill||`#fff`,stroke:t.selectedIds.includes(i.id)?`#409EFF`:i.stroke||`#ccc`,"stroke-width":t.selectedIds.includes(i.id)?2:1,style:(0,e.normalizeStyle)({pointerEvents:f(i)?`none`:`all`})},null,12,be)):i.shape===`circle`?((0,e.openBlock)(),(0,e.createElementBlock)(`ellipse`,{key:5,cx:i.width/2,cy:i.height/2,rx:i.width/2,ry:i.height/2,fill:i.fill||`#fff`,stroke:t.selectedIds.includes(i.id)?`#409EFF`:i.stroke||`#ccc`,"stroke-width":t.selectedIds.includes(i.id)?2:1,style:(0,e.normalizeStyle)({pointerEvents:f(i)?`none`:`all`})},null,12,xe)):i.shape===`diamond`?((0,e.openBlock)(),(0,e.createElementBlock)(`polygon`,{key:6,points:`${i.width/2},0 ${i.width},${i.height/2} ${i.width/2},${i.height} 0,${i.height/2}`,fill:i.fill||`#fff`,stroke:t.selectedIds.includes(i.id)?`#409EFF`:i.stroke||`#ccc`,"stroke-width":t.selectedIds.includes(i.id)?2:1,style:(0,e.normalizeStyle)({pointerEvents:f(i)?`none`:`all`})},null,12,Se)):i.shape===`triangle`?((0,e.openBlock)(),(0,e.createElementBlock)(`polygon`,{key:7,points:`${i.width/2},0 ${i.width},${i.height} 0,${i.height}`,fill:i.fill||`#fff`,stroke:t.selectedIds.includes(i.id)?`#409EFF`:i.stroke||`#ccc`,"stroke-width":t.selectedIds.includes(i.id)?2:1,style:(0,e.normalizeStyle)({pointerEvents:f(i)?`none`:`all`})},null,12,Ce)):((0,e.openBlock)(),(0,e.createElementBlock)(`rect`,{key:8,width:i.width,height:i.height,fill:`#fff`,stroke:t.selectedIds.includes(i.id)?`#409EFF`:`#ccc`,"stroke-width":t.selectedIds.includes(i.id)?2:1,style:(0,e.normalizeStyle)({pointerEvents:f(i)?`none`:`all`})},null,12,we)),i.shape===`image`?((0,e.openBlock)(),(0,e.createElementBlock)(e.Fragment,{key:9},[(0,e.createElementVNode)(`text`,{x:i.width/2,y:i.height+10,"text-anchor":`middle`,"dominant-baseline":`hanging`,fill:i.textColor||`#333`,"font-size":i.fontSize||14,style:{"pointer-events":`none`}},(0,e.toDisplayString)(i.label),9,$),i.description?((0,e.openBlock)(),(0,e.createElementBlock)(`text`,{key:0,x:i.width/2,y:i.height+10+(i.fontSize||14)+2,"text-anchor":`middle`,"dominant-baseline":`hanging`,fill:`#999`,"font-size":`11`,style:{"pointer-events":`none`}},(0,e.toDisplayString)(i.description),9,Te)):(0,e.createCommentVNode)(``,!0)],64)):i.shape===`group`&&i.id!==t.expandedGroupId?((0,e.openBlock)(),(0,e.createElementBlock)(`text`,{key:10,x:i.width/2,y:i.height+10,"text-anchor":`middle`,"dominant-baseline":`hanging`,fill:i.textColor||`#333`,"font-size":i.fontSize||14,style:{"pointer-events":`none`}},(0,e.toDisplayString)(i.label),9,Ee)):i.shape===`group`?(0,e.createCommentVNode)(``,!0):((0,e.openBlock)(),(0,e.createElementBlock)(e.Fragment,{key:11},[(0,e.createElementVNode)(`text`,{x:i.width/2,y:i.height/2-(i.description?6:0),"text-anchor":`middle`,"dominant-baseline":`central`,fill:i.textColor||`#333`,"font-size":i.fontSize||14,style:{"pointer-events":`none`}},(0,e.toDisplayString)(i.label),9,De),i.description?((0,e.openBlock)(),(0,e.createElementBlock)(`text`,{key:0,x:i.width/2,y:i.height/2+12,"text-anchor":`middle`,"dominant-baseline":`central`,fill:`#999`,"font-size":`11`,style:{"pointer-events":`none`}},(0,e.toDisplayString)(i.description),9,Oe)):(0,e.createCommentVNode)(``,!0)],64)),t.selectedIds.includes(i.id)&&!f(i)?((0,e.openBlock)(),(0,e.createElementBlock)(`g`,ke,[(0,e.createElementVNode)(`rect`,{x:i.width-5,y:i.height-5,width:`10`,height:`10`,fill:`#409EFF`,stroke:`#fff`,"stroke-width":`1`,style:{cursor:`nwse-resize`},onMousedown:(0,e.withModifiers)(e=>n.$emit(`start-resize`,i,`se`,e),[`stop`])},null,40,Ae),(0,e.createElementVNode)(`rect`,{x:-5,y:i.height-5,width:`10`,height:`10`,fill:`#409EFF`,stroke:`#fff`,"stroke-width":`1`,style:{cursor:`nesw-resize`},onMousedown:(0,e.withModifiers)(e=>n.$emit(`start-resize`,i,`sw`,e),[`stop`])},null,40,je),(0,e.createElementVNode)(`rect`,{x:i.width-5,y:-5,width:`10`,height:`10`,fill:`#409EFF`,stroke:`#fff`,"stroke-width":`1`,style:{cursor:`nesw-resize`},onMousedown:(0,e.withModifiers)(e=>n.$emit(`start-resize`,i,`ne`,e),[`stop`])},null,40,Me),(0,e.createElementVNode)(`rect`,{x:-5,y:-5,width:`10`,height:`10`,fill:`#409EFF`,stroke:`#fff`,"stroke-width":`1`,style:{cursor:`nwse-resize`},onMousedown:(0,e.withModifiers)(e=>n.$emit(`start-resize`,i,`nw`,e),[`stop`])},null,40,Ne)])):(0,e.createCommentVNode)(``,!0),(t.selectedIds.includes(i.id)||t.connectingMode)&&!f(i)&&!(t.editingPolygon&&t.editingPolygon.id===i.id)?((0,e.openBlock)(),(0,e.createElementBlock)(`g`,Pe,[((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(h(i),(t,r)=>((0,e.openBlock)(),(0,e.createElementBlock)(`circle`,{key:r,cx:t.x,cy:t.y,r:`4`,fill:`#409EFF`,stroke:`#fff`,"stroke-width":`1`,style:{cursor:`crosshair`},onMousedown:(0,e.withModifiers)(e=>n.$emit(`start-connect`,i,t,e),[`stop`])},null,40,Fe))),128))])):(0,e.createCommentVNode)(``,!0),t.editingPolygon&&t.editingPolygon.id===i.id?((0,e.openBlock)(),(0,e.createElementBlock)(`text`,{key:14,x:i.width/2,y:i.height+16,"text-anchor":`middle`,fill:`#409EFF`,"font-size":`11`,style:{"pointer-events":`none`}},`双击退出编辑`,8,Ie)):(0,e.createCommentVNode)(``,!0)],44,he))),128)),((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(t.connections,r=>((0,e.openBlock)(),(0,e.createElementBlock)(`g`,{key:r.id,style:(0,e.normalizeStyle)(p(r)?`pointer-events:none;opacity:0.5;`:``)},[(0,e.createElementVNode)(`path`,{d:g(r),fill:`none`,stroke:t.selectedId===r.id?`#409EFF`:`#666`,"stroke-width":r.lineWidth||2,"stroke-dasharray":r.dashed?`6,3`:`none`,"marker-end":`url(#arrowhead-end)`,"pointer-events":`stroke`,style:{cursor:`pointer`},onMousedown:(0,e.withModifiers)(e=>n.$emit(`select`,r,`connection`,e),[`stop`])},null,40,Le),r.label?((0,e.openBlock)(),(0,e.createElementBlock)(`text`,{key:0,x:_(r).x,y:_(r).y-6,"text-anchor":`middle`,fill:`#666`,"font-size":`12`},(0,e.toDisplayString)(r.label),9,Re)):(0,e.createCommentVNode)(``,!0)],4))),128)),t.drawingConn?((0,e.openBlock)(),(0,e.createElementBlock)(`line`,{key:0,x1:t.drawingConn.x1,y1:t.drawingConn.y1,x2:t.drawingConn.x2,y2:t.drawingConn.y2,stroke:`#409EFF`,"stroke-width":`2`,"stroke-dasharray":`4,4`},null,8,ze)):(0,e.createCommentVNode)(``,!0),t.editingPolygon?((0,e.openBlock)(),(0,e.createElementBlock)(`g`,Be,[((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(m.value,(n,r)=>((0,e.openBlock)(),(0,e.createElementBlock)(`circle`,{key:`pv-`+r,cx:t.editingPolygon.x+n.x,cy:t.editingPolygon.y+n.y,r:`5`,fill:`#409EFF`,stroke:`#fff`,"stroke-width":`1.5`,style:{cursor:`move`},onMousedown:(0,e.withModifiers)(e=>x(t.editingPolygon,r,e),[`stop`])},null,40,Ve))),128))])):(0,e.createCommentVNode)(``,!0),((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(l.value,n=>((0,e.openBlock)(),(0,e.createElementBlock)(`g`,{key:`img-`+n.id},[n.shape===`group`&&n.imageUrl&&n.id!==t.expandedGroupId?((0,e.openBlock)(),(0,e.createElementBlock)(`image`,{key:0,href:n.imageUrl,x:n.x,y:n.y,width:n.width,height:n.height,preserveAspectRatio:`xMidYMid slice`,"clip-path":`url(#clip-${n.id})`,style:{"pointer-events":`none`}},null,8,He)):(0,e.createCommentVNode)(``,!0)]))),128))],40,fe)),s.value&&s.value.popupConfig&&s.value.popupConfig.length?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:0,class:`popup-tooltip`,style:(0,e.normalizeStyle)({left:c.value.x+12+`px`,top:c.value.y+12+`px`})},[((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(s.value.popupConfig,(t,n)=>((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:n,class:`popup-tooltip-row`},[(0,e.createElementVNode)(`span`,Ue,(0,e.toDisplayString)(t.key)+`:`,1),(0,e.createElementVNode)(`span`,We,(0,e.toDisplayString)(t.value),1)]))),128))],4)):(0,e.createCommentVNode)(``,!0)],512))}},[[`__scopeId`,`data-v-f89f4797`]]);function Ke(t,{roomPrefix:n,syncKey:r=`_data`}={}){let i=new o.Doc,a=(0,e.ref)(!1),c=(0,e.ref)(!1),l=(0,e.ref)(!1),u=(0,e.ref)(!1),d=(0,e.ref)([]),f=null,p=null,m=null,h=null,g=!1,_=null,v=`ws://${window.location.hostname||`localhost`}:1234`,y=`${n}-${t}`,b=()=>{x(),_=setInterval(()=>{if(f&&f.connection&&f.connection.ws&&f.connection.ws.readyState===WebSocket.CLOSED)try{f.connect()}catch(e){console.warn(`[ExplosionCollab] reconnect failed:`,e)}},3e4)},x=()=>{_&&=(clearInterval(_),null)};f=new s.HocuspocusProvider({url:v,name:y,document:i,connect:!1,reconnect:!0,onConnect:()=>{a.value=!0,b()},onClose:()=>{a.value=!1,c.value=!1},onSynced:({state:e})=>{c.value=e}}),f.awareness.on(`change`,()=>{d.value=Array.from(f.awareness.getStates().entries()).filter(([e,t])=>t.user).map(([e,t])=>({clientId:e,...t.user}))}),p=i.getMap(n);let S=i.getMap(`_meta`);S.observe(e=>{e.keysChanged.has(`_closed`)&&(u.value=S.get(`_closed`)===!0,u.value&&console.log(`[ExplosionCollab] collaboration closed by owner`))});let C=()=>{f.connect()},w=()=>{if(x(),f){try{f.disconnect(),f.destroy()}catch(e){console.warn(`[ExplosionCollab] disconnect error:`,e)}f=null}a.value=!1,c.value=!1,d.value=[]},T=(e={})=>(g=!1,f.connect(),new Promise(t=>{let n=()=>{f&&c.value?(g=!0,e.userInfo&&f.awareness.setLocalStateField(`user`,e.userInfo),t()):setTimeout(n,100)};setTimeout(n,200)})),E=e=>{!a.value||!p||(m&&clearTimeout(m),m=setTimeout(()=>{let t=JSON.stringify(e);h=t,i.transact(()=>{p.set(r,t)})},50))},D=()=>{if(!p)return null;let e=p.get(r);if(!e)return null;h=e;try{return JSON.parse(e)}catch{return null}},O=e=>{f&&f.awareness.setLocalStateField(`user`,{id:e.id||`user-${Date.now()}`,name:e.name||`用户${Math.floor(Math.random()*1e3)}`,color:e.color||`#${Math.floor(Math.random()*16777215).toString(16).padStart(6,`0`)}`,...e})},k=()=>{u.value=!0,i.transact(()=>{S.set(`_closed`,!0)}),g=!1,f?.awareness?.setLocalState(null),w(),l.value=!1},A=()=>S.get(`_closed`)===!0?(u.value=!0,!0):!1,j=()=>{w(),i.destroy()};return(0,e.onUnmounted)(()=>j()),{ydoc:i,provider:f,yMap:p,isConnected:a,isSynced:c,isCollabOwner:l,collaborationClosed:u,onlineUsers:d,connect:C,disconnect:w,init:T,pushToYjs:E,pullFromYjs:D,setLocalUser:O,closeCollaboration:k,checkCollaborationClosed:A,destroy:j,_getSyncReady:()=>g,_setSyncReady:e=>{g=e},_getLastSyncedValue:()=>h,_setLastSyncedValue:e=>{h=e}}}var qe=(e,{onRemoteChange:t}={})=>{let n=Ke(e,{roomPrefix:`explosion-diagram`,syncKey:`_data`});t&&n.yMap.observe(e=>{if(!n._getSyncReady())return;let r=n.yMap.get(`_data`);if(r&&r!==n._getLastSyncedValue()){n._setLastSyncedValue(r);try{t(JSON.parse(r))}catch(e){console.error(`[EV-Diagram] remote data parse error:`,e)}}});let r=e=>{n.pushToYjs({title:e.title,components:e.components,connections:e.connections})},i=()=>n.pullFromYjs();return{...n,pushToYjs:r,pullFromYjs:i}},Je={class:`explosion-diagram-editor`},Ye={key:0,class:`group-breadcrumb`},Xe={class:`editor-body`},Ze={key:0,class:`props-panel`},Qe={class:`prop-row`},$e={class:`prop-row`},et={class:`prop-row`},tt={class:`prop-row`},nt={class:`prop-row`},rt={key:0,class:`group-image-preview`},it=[`src`],at={class:`prop-row`},ot={class:`prop-row`},st={class:`prop-row`},ct={class:`prop-row`},lt={class:`prop-row`},ut={class:`prop-row`},dt={class:`prop-row`},ft={class:`prop-row`},pt={class:`prop-row`},mt={style:{"margin-bottom":`8px`,display:`flex`,gap:`8px`}},ht=`explosion-diagram`,gt=_({__name:`ExplosionDiagramEditor`,setup(t){let o=(0,n.useRoute)(),s=(0,n.useRouter)(),c=(0,e.ref)(null),l=(0,e.ref)(!1),u=(0,e.ref)(!1),{saveVersion:d}=V(),f=R(),p=(0,e.reactive)({title:`爆炸图`,components:[],connections:[]}),m=(0,e.ref)(!1),h=(0,e.ref)(!1),g=(0,e.ref)(!1),_=null,v=(0,e.ref)([]),y=(0,e.ref)(-1),b=(0,e.ref)(null),x=(0,e.ref)([]),S=(0,e.ref)(null),C=(0,e.ref)(null),w=(0,e.ref)(!1),T=(0,e.ref)(null),E=(0,e.ref)(null),D=(0,e.ref)([]),O=(0,e.ref)(null),k=(0,e.ref)(null),A=(0,e.ref)(!1),j=(0,e.ref)(null),M=(0,e.ref)([]),N=(0,e.computed)(()=>D.value.length?D.value[D.value.length-1]:null),P=(0,e.computed)(()=>{if(!N.value)return p.components;let e=t=>{let n=new Set([t]);return p.components.filter(e=>e.groupId===t).forEach(t=>{n.add(t.id),t.shape===`group`&&e(t.id).forEach(e=>n.add(e))}),n},t=e(N.value);return p.components.filter(e=>t.has(e.id))}),ee=(0,e.computed)(()=>{if(!N.value)return p.connections;let e=new Set(P.value.map(e=>e.id));return p.connections.filter(t=>e.has(t.fromId)||e.has(t.toId))}),te=(0,e.computed)(()=>{if(!N.value)return`0 0 2000 1500`;let e=p.components.find(e=>e.id===N.value);if(!e)return`0 0 2000 1500`;let t=P.value.filter(e=>e.id!==N.value);if(!t.length)return`${e.x} ${e.y} ${e.width} ${e.height}`;let n=1/0,r=1/0,i=-1/0,a=-1/0;return t.forEach(e=>{n=Math.min(n,e.x),r=Math.min(r,e.y),i=Math.max(i,e.x+e.width),a=Math.max(a,e.y+e.height)}),`${n-40} ${r-40} ${i-n+80} ${a-r+80}`}),ne=e=>p.components.find(t=>t.id===e),F=()=>{v.value=v.value.slice(0,y.value+1),v.value.push(JSON.stringify({components:p.components,connections:p.connections})),y.value=v.value.length-1,I()},I=()=>{m.value&&_&&_.pushToYjs(p)},L=()=>{if(y.value>0){y.value--;let e=JSON.parse(v.value[y.value]);p.components=e.components,p.connections=e.connections,I()}},z=()=>{if(y.value<v.value.length-1){y.value++;let e=JSON.parse(v.value[y.value]);p.components=e.components,p.connections=e.connections,I()}},B=()=>{},H=()=>{},U=0,W=()=>`comp-${++U}-${Date.now()}`,G={rect:[140,60],circle:[80,80],diamond:[100,80],triangle:[100,80],text:[120,40],image:[150,150],polygon:[150,120],svg:[120,120],group:[200,150]},K=(0,e.ref)(null),q=(0,e.ref)(null),J=null,ie=e=>{if(e===`image`){J=`image`,K.value?.click();return}if(e===`svg`){J=`svg`,q.value?.click();return}if(e===`polygon`){let e={id:W(),shape:`polygon`,label:`${p.components.length+1}`,description:``,x:300+Math.random()*200,y:200+Math.random()*200,width:150,height:120,points:`0,60 40,0 110,0 150,60 110,120 40,120`,fill:`#fff`,stroke:`#ccc`,textColor:`#333`,fontSize:14};N.value&&(e.groupId=N.value),p.components.push(e),F();return}if(e===`group`){let e={id:W(),shape:`group`,label:`${p.components.length+1}`,description:``,x:300+Math.random()*200,y:200+Math.random()*200,width:200,height:150,childIds:[],fill:`transparent`,stroke:`#409EFF`,textColor:`#333`,fontSize:14};N.value&&(e.groupId=N.value),p.components.push(e),F();return}let[t,n]=G[e]||[120,60],r={id:W(),shape:e,label:`${p.components.length+1}`,description:``,x:300+Math.random()*200,y:200+Math.random()*200,width:t,height:n,fill:`#fff`,stroke:`#ccc`,textColor:`#333`,fontSize:14};N.value&&(r.groupId=N.value),p.components.push(r),F()},Y=async e=>{let t=e.target.files?.[0];if(!t)return;let n=new FormData;n.append(`file`,t),J===`image`&&n.append(`remove_bg`,`true`);try{let e=await a.default.post(`/api/files/upload/image`,n),r=e.data.url||e.data.file_path;if(J===`image`){let e={id:W(),shape:`image`,label:`${p.components.length+1}`,description:``,x:300+Math.random()*200,y:200+Math.random()*200,width:150,height:150,imageUrl:r,fill:`transparent`,stroke:`#ccc`,textColor:`#333`,fontSize:14};N.value&&(e.groupId=N.value),p.components.push(e)}else if(J===`svg`){let e=await t.text(),n=new DOMParser().parseFromString(e,`image/svg+xml`).querySelector(`svg`),r=n?.getAttribute(`width`)||100,i=n?.getAttribute(`height`)||100,a=n?.getAttribute(`viewBox`),o=parseFloat(r),s=parseFloat(i);if(a){let e=a.split(/[\s,]+/).map(Number);o=e[2]||o,s=e[3]||s}let c=n?.innerHTML||``,l={id:W(),shape:`svg`,label:`${p.components.length+1}`,description:``,x:300+Math.random()*200,y:200+Math.random()*200,width:o,height:s,svgContent:c,svgWidth:o,svgHeight:s,fill:`#fff`,stroke:`#ccc`,textColor:`#333`,fontSize:14};N.value&&(l.groupId=N.value),p.components.push(l)}F()}catch{r.ElMessage.error(`上传失败`)}e.target.value=``},ae=(e,t,n)=>{if(n&&(n.ctrlKey||n.metaKey)){x.value.includes(e.id)?x.value=x.value.filter(t=>t!==e.id):x.value.push(e.id),b.value=x.value[x.value.length-1]||null,C.value=b.value?p.components.find(e=>e.id===b.value):null,S.value=`component`;return}b.value=e.id,x.value=[e.id],S.value=t,C.value=e,E.value=null},X=()=>{b.value=null,x.value=[],S.value=null,C.value=null,E.value=null},se=(e,t,n)=>{let r=Z(n),i=e.x,a=e.y,o=e.width,s=e.height,c=e.shape===`polygon`?(e.points||``).trim().split(/\s+/).map(e=>e.split(`,`).map(Number)):null,l=e.shape===`group`,u=l?p.components.filter(t=>t.groupId===e.id&&t.id!==e.id):[],d=u.map(e=>({id:e.id,x:e.x,y:e.y,w:e.width,h:e.height})),f=new Set(l?u.map(e=>e.id):[e.id]),m=p.connections.filter(e=>f.has(e.fromId)||f.has(e.toId)).map(e=>({conn:e,fromAnchor:e.fromAnchor?{x:e.fromAnchor.x,y:e.fromAnchor.y}:null,toAnchor:e.toAnchor?{x:e.toAnchor.x,y:e.toAnchor.y}:null})),h=n=>{let p=Z(n),h=p.x-r.x,g=p.y-r.y,_=o,v=s,y=i,b=a;if(t===`se`?(_=o+h,v=s+g):t===`sw`?(y=i+h,_=o-h,v=s+g):t===`ne`?(_=o+h,b=a+g,v=s-g):t===`nw`&&(y=i+h,b=a+g,_=o-h,v=s-g),_=Math.max(30,_),v=Math.max(20,v),e.x=y,e.y=b,e.width=_,e.height=v,c&&o>0&&s>0&&(e.points=c.map(([e,t])=>`${Math.round(e*_/o)},${Math.round(t*v/s)}`).join(` `)),o>0&&s>0){let e=_/o,t=v/s;l&&u.forEach((n,r)=>{let o=d[r];if(n.x=y+(o.x-i)*e,n.y=b+(o.y-a)*t,n.width=o.w*e,n.height=o.h*t,n.shape===`polygon`&&n.points){let r=o._origPoints||(n.points||``).trim().split(/\s+/).map(e=>e.split(`,`).map(Number));o._origPoints||=r,n.points=r.map(([n,r])=>`${Math.round(n*e)},${Math.round(r*t)}`).join(` `)}}),m.forEach(({conn:n,fromAnchor:r,toAnchor:i})=>{r&&f.has(n.fromId)&&(n.fromAnchor={x:r.x*e,y:r.y*t}),i&&f.has(n.toId)&&(n.toAnchor={x:i.x*e,y:i.y*t})})}},g=()=>{document.removeEventListener(`mousemove`,h),document.removeEventListener(`mouseup`,g),F()};document.addEventListener(`mousemove`,h),document.addEventListener(`mouseup`,g)},Z=e=>{let t=document.querySelector(`.diagram-svg`);if(!t)return{x:0,y:0};let n=t.getBoundingClientRect(),r=t.viewBox.baseVal;return{x:(e.clientX-n.left)/n.width*r.width+r.x,y:(e.clientY-n.top)/n.height*r.height+r.y}},ce=(e,t,n,r=!1)=>{let i=p.components.find(t=>t.id===e);if(!i)return;let a=t-i.x,o=n-i.y;i.x=t,i.y=n,i.shape===`group`&&i.id&&p.components.forEach(e=>{e.groupId===i.id&&e.id!==i.id&&(e.x+=a,e.y+=o)}),r&&F()},le=e=>{if(e.shape===`group`){me(e);return}if(e.shape===`polygon`){E.value&&E.value.id===e.id?E.value=null:E.value=e;return}r.ElMessageBox.prompt(`编辑标签`,`组件`,{inputValue:e.label,inputPlaceholder:`标签文字`}).then(({value:t})=>{t!==null&&(e.label=t)}).catch(()=>{})},Q=()=>{b.value&&(S.value===`component`?(p.components=p.components.filter(e=>e.id!==b.value),p.connections=p.connections.filter(e=>e.fromId!==b.value&&e.toId!==b.value)):p.connections=p.connections.filter(e=>e.id!==b.value),X(),F())},ue=(e,t,n)=>{w.value=!0;let r=e.x+t.x,i=e.y+t.y;T.value={x1:r,y1:i,x2:r,y2:i};let a=n.target.closest(`svg`),o=e=>{if(!a)return;let t=a.getBoundingClientRect(),n=a.viewBox.baseVal;T.value.x2=(e.clientX-t.left)/t.width*n.width+n.x,T.value.y2=(e.clientY-t.top)/t.height*n.height+n.y},s=n=>{if(document.removeEventListener(`mousemove`,o),document.removeEventListener(`mouseup`,s),T.value=null,!a){w.value=!1;return}let r=a.getBoundingClientRect(),i=a.viewBox.baseVal,c=(n.clientX-r.left)/r.width*i.width+i.x,l=(n.clientY-r.top)/r.height*i.height+i.y,u=null,d=30;for(let t of p.components){if(t.id===e.id)continue;let n=[{x:t.x+t.width/2,y:t.y},{x:t.x+t.width,y:t.y+t.height/2},{x:t.x+t.width/2,y:t.y+t.height},{x:t.x,y:t.y+t.height/2}];for(let e of n){let n=Math.sqrt((c-e.x)**2+(l-e.y)**2);n<d&&(d=n,u=t)}}if(!u){for(let t of p.components)if(t.id!==e.id&&c>=t.x&&c<=t.x+t.width&&l>=t.y&&l<=t.y+t.height){u=t;break}}u&&(p.connections.find(t=>t.fromId===e.id&&t.toId===u.id)||(p.connections.push({id:W(),fromId:e.id,toId:u.id,fromAnchor:{x:t.x,y:t.y},toAnchor:{x:u.width/2,y:u.height/2},label:``,lineWidth:2,dashed:!1}),F())),w.value=!1};document.addEventListener(`mousemove`,o),document.addEventListener(`mouseup`,s)},fe=()=>{let e=p.components.filter(e=>x.value.includes(e.id));if(e.length<2){r.ElMessage.warning(`请至少选择2个零件进行组合`);return}let t=1/0,n=1/0,i=-1/0,a=-1/0;e.forEach(e=>{t=Math.min(t,e.x),n=Math.min(n,e.y),i=Math.max(i,e.x+e.width),a=Math.max(a,e.y+e.height)});let o=W();e.forEach(e=>{e.groupId=o});let s={id:o,shape:`group`,label:`组合`,description:``,x:t-10,y:n-10,width:i-t+20,height:a-n+20,fill:`transparent`,stroke:`#409EFF`,textColor:`#333`,fontSize:14,movable:!1};N.value&&(s.groupId=N.value),p.components=[...p.components.filter(e=>!x.value.includes(e.id)),s,...e],x.value=[],F()},pe=e=>{let t=p.components.filter(t=>t.groupId===e.id&&t.id!==e.id);if(!t.length)return;let n=1/0,r=1/0,i=-1/0,a=-1/0;t.forEach(e=>{n=Math.min(n,e.x),r=Math.min(r,e.y),i=Math.max(i,e.x+e.width),a=Math.max(a,e.y+e.height)}),e.x=n-10,e.y=r-10,e.width=i-n+20,e.height=a-r+20,F()},me=e=>{D.value.push(e.id),X()},he=()=>{D.value.length&&(D.value.pop(),X())},ge=e=>{D.value=D.value.slice(0,e+1),X()},_e=async e=>{let t=e.target.files?.[0];if(!t||!C.value)return;let n=new FormData;n.append(`file`,t);try{let e=await a.default.post(`/api/files/upload/image`,n);C.value.imageUrl=e.data.url||e.data.file_path,pe(C.value)}catch{r.ElMessage.error(`上传失败`)}e.target.value=``},ve=()=>{let e=p.components;if(!e.length)return;let t=Math.ceil(Math.sqrt(e.length));p.components=e.map((e,n)=>({...e,x:100+n%t*200,y:100+Math.floor(n/t)*120})),F()},ye=()=>s.push(`/`),be=[`我可以帮您优化爆炸图布局、检查组件标注,或者提供装配顺序建议。请问有什么需要帮助的?`,`这个爆炸图的组件分布很清晰。建议检查连接线是否准确反映了实际装配关系。`,`根据当前的爆炸图结构,我建议为关键组件添加编号说明,便于阅读理解。`,`我可以帮您检查爆炸图中是否有遗漏的零部件或多余的标注。需要我逐个分析吗?`,`建议在爆炸图中添加装配方向指示箭头,这样可以让装配流程更加直观。`,`这个爆炸图的层次感不错。如果需要,我可以帮您优化组件间距和标注位置。`,`我可以帮您将爆炸图的数据导出为BOM清单格式,方便采购和生产管理。`,`文档中的组件信息很详细。建议补充每个组件的规格参数和供应商信息。`],xe=async(e,t={})=>{let n=c.value?`${ht}-${c.value}`:null;await f.sendMessage(e,{...t,roomId:n});let r=t.mentionedUser,i=r&&r.toLowerCase().includes(`ai`),a=f.collabUsers.value.filter(e=>e.name!==f.currentUser.value.name);(!r||i||a.length===0)&&(f.loading.value=!0,setTimeout(()=>{f.sendAiMessage(be[Math.floor(Math.random()*be.length)],n),f.loading.value=!1},800+Math.random()*1200))},Se=()=>{let e=c.value?`${ht}-${c.value}`:null;f.clearMessages(e)},Ce=()=>{if(!c.value){r.ElMessage.warning(`请先保存文档`);return}u.value=!0},we=e=>{try{let t=typeof e==`string`?JSON.parse(e):e;t.components&&(p.components=t.components),t.connections&&(p.connections=t.connections),X()}catch(e){console.error(`Version apply error:`,e)}},$=async()=>{if(m.value&&_?.collaborationClosed.value&&!g.value){r.ElMessage.warning(`协作已关闭,无法保存`);return}try{let e={title:p.title,view_type:`diagram`,config:JSON.stringify({components:p.components,connections:p.connections})};c.value?await a.default.put(`/api/explosion-views/${c.value}`,e):c.value=(await a.default.post(`/api/explosion-views/`,e)).data.id,r.ElMessage.success(`保存成功`),d({documentId:c.value,docType:`diagram`,content:JSON.stringify({components:p.components,connections:p.connections}),userId:String(f.currentUser.value?.id||``),userName:f.currentUser.value?.name||`未知`})}catch{r.ElMessage.error(`保存失败`)}},Te=async()=>{if(o.params.id)try{let e=(await a.default.get(`/api/explosion-views/${o.params.id}`)).data;if(c.value=e.id,p.title=e.title,e.config){let t=JSON.parse(e.config);p.components=t.components||[],p.connections=t.connections||[]}F()}catch(e){console.error(`load error`,e)}else F()},Ee=async e=>{try{let t=document.querySelector(`.diagram-svg`);if(!t)return r.ElMessage.error(`未找到SVG元素`);let n=new XMLSerializer().serializeToString(t);if(e===`svg`){let e=new Blob([n],{type:`image/svg+xml;charset=utf-8`}),t=URL.createObjectURL(e),r=document.createElement(`a`);r.href=t,r.download=`${p.title||`爆炸图`}.svg`,r.click(),URL.revokeObjectURL(t)}else if(e===`png`){let e=document.createElement(`canvas`),t=e.getContext(`2d`),r=new Image,i=new Blob([n],{type:`image/svg+xml;charset=utf-8`}),a=URL.createObjectURL(i);r.onload=()=>{e.width=r.width,e.height=r.height,t.fillStyle=`#fff`,t.fillRect(0,0,e.width,e.height),t.drawImage(r,0,0),e.toBlob(e=>{let t=document.createElement(`a`);t.href=URL.createObjectURL(e),t.download=`${p.title||`爆炸图`}.png`,t.click()}),URL.revokeObjectURL(a)},r.src=a}else r.ElMessage.info(`导出 ${e} 开发中`)}catch{r.ElMessage.error(`导出失败`)}},De=e=>{_&&=(_.destroy(),null),_=qe(e,{onRemoteChange:e=>{e.title&&(p.title=e.title),e.components&&(p.components=e.components),e.connections&&(p.connections=e.connections),X()}}),_._setSyncReady(!1)},Oe=async()=>{if(m.value)return;if(!c.value&&(await $(),!c.value)){r.ElMessage.error(`请先保存文档`);return}De(String(c.value)),_.connect();let e={name:`用户${Math.floor(Math.random()*1e3)}`,color:`#${Math.floor(Math.random()*16777215).toString(16).padStart(6,`0`)}`},t=()=>{if(_.provider&&_.provider.synced){_._setSyncReady(!0),_.setLocalUser(e);let t=_.pullFromYjs();t?(t.title&&(p.title=t.title),t.components&&(p.components=t.components),t.connections&&(p.connections=t.connections),X()):p.components.length>0&&_.pushToYjs(p),m.value=!0,g.value=!0,h.value=!1,f.setCollabContext({ydoc:_.ydoc,provider:_.provider,onlineUsers:_.onlineUsers}),f.setCurrentUser({id:_.provider.awareness.clientID,name:e.name,color:e.color}),r.ElMessage.success(`协作已开启`)}else setTimeout(t,100)};setTimeout(t,200)},ke=()=>{_&&(_.closeCollaboration(),m.value=!1,g.value=!1,r.ElMessage.info(`协作已关闭`))},Ae=()=>{let e=o.params.id;if(!e)return;De(e),_.connect();let t={name:`协作人${Math.floor(Math.random()*1e3)}`,color:`#${Math.floor(Math.random()*16777215).toString(16).padStart(6,`0`)}`},n=()=>{if(_.provider&&_.provider.synced){if(_.checkCollaborationClosed()){_.disconnect(),m.value=!1,r.ElMessage.warning(`该协作已关闭,无法加入`);return}_._setSyncReady(!0),_.setLocalUser(t);let e=_.pullFromYjs();e&&(e.title&&(p.title=e.title),e.components&&(p.components=e.components),e.connections&&(p.connections=e.connections),X()),m.value=!0,g.value=!1,f.setCollabContext({ydoc:_.ydoc,provider:_.provider,onlineUsers:_.onlineUsers}),f.setCurrentUser({id:_.provider.awareness.clientID,name:t.name,color:t.color}),r.ElMessage.success(`已加入协作`)}else setTimeout(n,100)};setTimeout(n,200)},je=()=>{m.value?ke():Oe()},Me=async()=>{if(m.value||await Oe(),!c.value&&(await $(),!c.value)){r.ElMessage.warning(`请先保存文档后再分享`);return}let e=`${window.location.origin}/explosion-diagram/${c.value}?collab=1`;try{await navigator.clipboard.writeText(e),r.ElMessage.success(`协作链接已复制到剪贴板`)}catch{r.ElMessage.info(`协作链接: `+e)}},Ne=()=>{M.value=(C.value?.popupConfig||[]).map(e=>({...e})),A.value=!0},Pe=()=>{M.value.push({key:``,value:``})},Fe=()=>{C.value.popupConfig=M.value.filter(e=>e.key.trim()),A.value=!1,F()},Ie=e=>{let t=e.target.files?.[0];if(!t)return;let n=new FileReader;n.onload=()=>{try{let e=JSON.parse(n.result);Array.isArray(e)?M.value=e.map(e=>({key:String(e.key||``),value:String(e.value||``)})):typeof e==`object`&&(M.value=Object.entries(e).map(([e,t])=>({key:e,value:String(t)}))),r.ElMessage.success(`导入成功`)}catch{r.ElMessage.error(`JSON解析失败`)}},n.readAsText(t),e.target.value=``},Le=()=>{let e=JSON.stringify({title:p.title,components:p.components,connections:p.connections},null,2),t=new Blob([e],{type:`application/json`}),n=URL.createObjectURL(t),i=document.createElement(`a`);i.href=n,i.download=`${p.title||`爆炸图`}.json`,i.click(),URL.revokeObjectURL(n),r.ElMessage.success(`导出成功`)},Re=e=>{let t=e.target.files?.[0];if(!t)return;let n=new FileReader;n.onload=()=>{try{let e=JSON.parse(n.result);e.title&&(p.title=e.title),e.components&&(p.components=e.components),e.connections&&(p.connections=e.connections),X(),F(),r.ElMessage.success(`导入成功`)}catch{r.ElMessage.error(`JSON解析失败`)}},n.readAsText(t),e.target.value=``};(0,e.onMounted)(async()=>{let e=localStorage.getItem(`editor-user-name`)||`用户${Math.floor(Math.random()*1e3)}`;localStorage.setItem(`editor-user-name`,e),f.setCurrentUser({id:Date.now(),name:e,color:`#409eff`}),await Te(),o.params.id&&o.query.collab===`1`&&Ae()});let ze=e=>{e.key===`Delete`&&b.value&&Q(),(e.ctrlKey||e.metaKey)&&e.key===`z`&&(e.preventDefault(),L()),(e.ctrlKey||e.metaKey)&&e.key===`y`&&(e.preventDefault(),z())};return(0,e.onMounted)(()=>document.addEventListener(`keydown`,ze)),(0,e.onUnmounted)(()=>{document.removeEventListener(`keydown`,ze),_&&=(_.destroy(),null)}),(t,n)=>{let r=(0,e.resolveComponent)(`el-breadcrumb-item`),a=(0,e.resolveComponent)(`el-breadcrumb`),s=(0,e.resolveComponent)(`el-icon`),d=(0,e.resolveComponent)(`el-button`),h=(0,e.resolveComponent)(`el-tooltip`),I=(0,e.resolveComponent)(`el-input`),R=(0,e.resolveComponent)(`el-input-number`),V=(0,e.resolveComponent)(`el-color-picker`),U=(0,e.resolveComponent)(`el-switch`),W=(0,e.resolveComponent)(`el-table-column`),G=(0,e.resolveComponent)(`el-table`),J=(0,e.resolveComponent)(`el-dialog`),Z=(0,e.resolveComponent)(`Monitor`);return(0,e.openBlock)(),(0,e.createElementBlock)(`div`,Je,[(0,e.createVNode)(de,{title:p.title,"onUpdate:title":n[0]||=e=>p.title=e,"can-undo":y.value>0,"can-redo":y.value<v.value.length-1,"connecting-mode":w.value,"is-connected":m.value,"online-users":(0,e.unref)(_)?(0,e.unref)(_).onlineUsers.value:[],"is-join-mode":(0,e.unref)(o).query.collab===`1`,onBack:ye,onAddComponent:ie,onToggleConnecting:n[1]||=e=>w.value=!w.value,onGroupSelected:fe,onAutoLayout:ve,onUndo:L,onRedo:z,onZoomIn:B,onZoomOut:H,onExport:Ee,onSave:$,onToggleCollab:je,onShareCollab:Me,onExportJson:Le,onImportJson:n[2]||=e=>k.value?.click(),"show-history":!!c.value,onHistory:Ce},null,8,[`title`,`can-undo`,`can-redo`,`connecting-mode`,`is-connected`,`online-users`,`is-join-mode`,`show-history`]),(0,e.createElementVNode)(`input`,{ref_key:`fileInputRef`,ref:K,type:`file`,accept:`image/*,.svg`,style:{display:`none`},onChange:Y},null,544),(0,e.createElementVNode)(`input`,{ref_key:`svgInputRef`,ref:q,type:`file`,accept:`.svg`,style:{display:`none`},onChange:Y},null,544),(0,e.createElementVNode)(`input`,{ref_key:`groupImageInputRef`,ref:O,type:`file`,accept:`image/*`,style:{display:`none`},onChange:_e},null,544),(0,e.createElementVNode)(`input`,{ref_key:`importJsonInputRef`,ref:k,type:`file`,accept:`.json`,style:{display:`none`},onChange:Re},null,544),D.value.length?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,Ye,[(0,e.createVNode)(a,{separator:`/`},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(r,{onClick:n[3]||=e=>ge(-1),style:{cursor:`pointer`}},{default:(0,e.withCtx)(()=>[...n[27]||=[(0,e.createTextVNode)(`根目录`,-1)]]),_:1}),((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(D.value,(t,n)=>((0,e.openBlock)(),(0,e.createBlock)(r,{key:t,onClick:e=>ge(n),style:{cursor:`pointer`}},{default:(0,e.withCtx)(()=>[(0,e.createTextVNode)((0,e.toDisplayString)(ne(t)?.label||`组合`),1)]),_:2},1032,[`onClick`]))),128))]),_:1}),(0,e.createVNode)(h,{content:`返回上一层`,placement:`bottom`},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(d,{size:`small`,circle:``,onClick:he},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(s,null,{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.Back))]),_:1})]),_:1})]),_:1})])):(0,e.createCommentVNode)(``,!0),(0,e.createElementVNode)(`div`,Xe,[(0,e.createVNode)(Ge,{components:P.value,connections:ee.value,"selected-id":b.value,"selected-ids":x.value,"connecting-mode":w.value,"drawing-conn":T.value,"editing-polygon":E.value,"view-box":te.value,"is-expanded":!!N.value,"expanded-group-id":N.value,onSelect:ae,onEdit:le,onClearSelection:X,onStartConnect:ue,onStartResize:se,onMoveComponent:ce,onDragPolygonVertex:F},null,8,[`components`,`connections`,`selected-id`,`selected-ids`,`connecting-mode`,`drawing-conn`,`editing-polygon`,`view-box`,`is-expanded`,`expanded-group-id`]),(0,e.createVNode)(e.Transition,{name:`slide`},{default:(0,e.withCtx)(()=>[C.value?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,Ze,[(0,e.createElementVNode)(`h4`,null,(0,e.toDisplayString)(S.value===`component`?`组件属性`:`连线属性`),1),S.value===`component`?((0,e.openBlock)(),(0,e.createElementBlock)(e.Fragment,{key:0},[(0,e.createElementVNode)(`div`,Qe,[n[28]||=(0,e.createElementVNode)(`label`,null,`标签`,-1),(0,e.createVNode)(I,{modelValue:C.value.label,"onUpdate:modelValue":n[4]||=e=>C.value.label=e,size:`small`},null,8,[`modelValue`])]),(0,e.createElementVNode)(`div`,$e,[n[29]||=(0,e.createElementVNode)(`label`,null,`描述`,-1),(0,e.createVNode)(I,{modelValue:C.value.description,"onUpdate:modelValue":n[5]||=e=>C.value.description=e,size:`small`},null,8,[`modelValue`])]),C.value.shape===`group`?((0,e.openBlock)(),(0,e.createElementBlock)(e.Fragment,{key:0},[(0,e.createElementVNode)(`div`,et,[n[30]||=(0,e.createElementVNode)(`label`,null,`宽度`,-1),(0,e.createVNode)(R,{modelValue:C.value.width,"onUpdate:modelValue":n[6]||=e=>C.value.width=e,min:40,max:2e3,size:`small`},null,8,[`modelValue`])]),(0,e.createElementVNode)(`div`,tt,[n[31]||=(0,e.createElementVNode)(`label`,null,`高度`,-1),(0,e.createVNode)(R,{modelValue:C.value.height,"onUpdate:modelValue":n[7]||=e=>C.value.height=e,min:30,max:1500,size:`small`},null,8,[`modelValue`])]),(0,e.createElementVNode)(`div`,nt,[n[34]||=(0,e.createElementVNode)(`label`,null,`显示图片`,-1),C.value.imageUrl?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,rt,[(0,e.createElementVNode)(`img`,{src:C.value.imageUrl,style:{"max-width":`100%`,"max-height":`80px`,border:`1px solid #e4e7ed`,"border-radius":`4px`}},null,8,it),(0,e.createVNode)(d,{size:`small`,type:`danger`,text:``,onClick:n[8]||=e=>C.value.imageUrl=``},{default:(0,e.withCtx)(()=>[...n[32]||=[(0,e.createTextVNode)(`移除`,-1)]]),_:1})])):((0,e.openBlock)(),(0,e.createBlock)(d,{key:1,size:`small`,onClick:n[9]||=e=>O.value?.click()},{default:(0,e.withCtx)(()=>[...n[33]||=[(0,e.createTextVNode)(`上传图片`,-1)]]),_:1}))]),(0,e.createVNode)(d,{size:`small`,onClick:n[10]||=e=>pe(C.value)},{default:(0,e.withCtx)(()=>[...n[35]||=[(0,e.createTextVNode)(`适配子零件`,-1)]]),_:1})],64)):((0,e.openBlock)(),(0,e.createElementBlock)(e.Fragment,{key:1},[(0,e.createElementVNode)(`div`,at,[n[36]||=(0,e.createElementVNode)(`label`,null,`宽度`,-1),(0,e.createVNode)(R,{modelValue:C.value.width,"onUpdate:modelValue":n[11]||=e=>C.value.width=e,min:40,max:400,size:`small`},null,8,[`modelValue`])]),(0,e.createElementVNode)(`div`,ot,[n[37]||=(0,e.createElementVNode)(`label`,null,`高度`,-1),(0,e.createVNode)(R,{modelValue:C.value.height,"onUpdate:modelValue":n[12]||=e=>C.value.height=e,min:30,max:300,size:`small`},null,8,[`modelValue`])])],64)),(0,e.createElementVNode)(`div`,st,[n[38]||=(0,e.createElementVNode)(`label`,null,`填充色`,-1),(0,e.createVNode)(V,{modelValue:C.value.fill,"onUpdate:modelValue":n[13]||=e=>C.value.fill=e,size:`small`},null,8,[`modelValue`])]),(0,e.createElementVNode)(`div`,ct,[n[39]||=(0,e.createElementVNode)(`label`,null,`边框色`,-1),(0,e.createVNode)(V,{modelValue:C.value.stroke,"onUpdate:modelValue":n[14]||=e=>C.value.stroke=e,size:`small`},null,8,[`modelValue`])]),(0,e.createElementVNode)(`div`,lt,[n[40]||=(0,e.createElementVNode)(`label`,null,`文字色`,-1),(0,e.createVNode)(V,{modelValue:C.value.textColor,"onUpdate:modelValue":n[15]||=e=>C.value.textColor=e,size:`small`},null,8,[`modelValue`])]),(0,e.createElementVNode)(`div`,ut,[n[41]||=(0,e.createElementVNode)(`label`,null,`字号`,-1),(0,e.createVNode)(R,{modelValue:C.value.fontSize,"onUpdate:modelValue":n[16]||=e=>C.value.fontSize=e,min:10,max:32,size:`small`},null,8,[`modelValue`])]),(0,e.createVNode)(d,{size:`small`,onClick:Ne},{default:(0,e.withCtx)(()=>[...n[42]||=[(0,e.createTextVNode)(`属性弹框设置`,-1)]]),_:1}),(0,e.createVNode)(d,{size:`small`,type:`danger`,onClick:Q},{default:(0,e.withCtx)(()=>[...n[43]||=[(0,e.createTextVNode)(`删除`,-1)]]),_:1})],64)):S.value===`connection`?((0,e.openBlock)(),(0,e.createElementBlock)(e.Fragment,{key:1},[(0,e.createElementVNode)(`div`,dt,[n[44]||=(0,e.createElementVNode)(`label`,null,`标签`,-1),(0,e.createVNode)(I,{modelValue:C.value.label,"onUpdate:modelValue":n[17]||=e=>C.value.label=e,size:`small`},null,8,[`modelValue`])]),(0,e.createElementVNode)(`div`,ft,[n[45]||=(0,e.createElementVNode)(`label`,null,`线宽`,-1),(0,e.createVNode)(R,{modelValue:C.value.lineWidth,"onUpdate:modelValue":n[18]||=e=>C.value.lineWidth=e,min:1,max:6,size:`small`},null,8,[`modelValue`])]),(0,e.createElementVNode)(`div`,pt,[n[46]||=(0,e.createElementVNode)(`label`,null,`虚线`,-1),(0,e.createVNode)(U,{modelValue:C.value.dashed,"onUpdate:modelValue":n[19]||=e=>C.value.dashed=e},null,8,[`modelValue`])]),(0,e.createVNode)(d,{size:`small`,type:`danger`,onClick:Q},{default:(0,e.withCtx)(()=>[...n[47]||=[(0,e.createTextVNode)(`删除`,-1)]]),_:1})],64)):(0,e.createCommentVNode)(``,!0)])):(0,e.createCommentVNode)(``,!0)]),_:1})]),(0,e.createVNode)(J,{modelValue:A.value,"onUpdate:modelValue":n[22]||=e=>A.value=e,title:`属性弹框设置`,width:`500`,"append-to-body":``},{footer:(0,e.withCtx)(()=>[(0,e.createVNode)(d,{onClick:n[21]||=e=>A.value=!1},{default:(0,e.withCtx)(()=>[...n[51]||=[(0,e.createTextVNode)(`取消`,-1)]]),_:1}),(0,e.createVNode)(d,{type:`primary`,onClick:Fe},{default:(0,e.withCtx)(()=>[...n[52]||=[(0,e.createTextVNode)(`保存`,-1)]]),_:1})]),default:(0,e.withCtx)(()=>[(0,e.createElementVNode)(`div`,mt,[(0,e.createVNode)(d,{size:`small`,onClick:Pe},{default:(0,e.withCtx)(()=>[...n[48]||=[(0,e.createTextVNode)(`+ 添加一行`,-1)]]),_:1}),(0,e.createVNode)(d,{size:`small`,onClick:n[20]||=e=>j.value?.click()},{default:(0,e.withCtx)(()=>[...n[49]||=[(0,e.createTextVNode)(`导入JSON`,-1)]]),_:1}),(0,e.createElementVNode)(`input`,{ref_key:`popupConfigImportRef`,ref:j,type:`file`,accept:`.json`,style:{display:`none`},onChange:Ie},null,544)]),(0,e.createVNode)(G,{data:M.value,border:``,size:`small`,"max-height":`300`},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(W,{label:`属性名`,"min-width":`120`},{default:(0,e.withCtx)(({row:t})=>[(0,e.createVNode)(I,{modelValue:t.key,"onUpdate:modelValue":e=>t.key=e,size:`small`,placeholder:`属性名`},null,8,[`modelValue`,`onUpdate:modelValue`])]),_:1}),(0,e.createVNode)(W,{label:`悬浮内容`,"min-width":`200`},{default:(0,e.withCtx)(({row:t})=>[(0,e.createVNode)(I,{modelValue:t.value,"onUpdate:modelValue":e=>t.value=e,size:`small`,placeholder:`悬浮显示内容`},null,8,[`modelValue`,`onUpdate:modelValue`])]),_:1}),(0,e.createVNode)(W,{width:`60`,label:`操作`},{default:(0,e.withCtx)(({$index:t})=>[(0,e.createVNode)(d,{size:`small`,type:`danger`,text:``,onClick:e=>M.value.splice(t,1)},{default:(0,e.withCtx)(()=>[...n[50]||=[(0,e.createTextVNode)(`删除`,-1)]]),_:1},8,[`onClick`])]),_:1})]),_:1},8,[`data`])]),_:1},8,[`modelValue`]),(0,e.createVNode)(d,{class:`ai-chat-fab`,type:l.value?`primary`:`default`,circle:``,size:`large`,onClick:n[23]||=e=>l.value=!l.value,title:`AI助手`},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(s,null,{default:(0,e.withCtx)(()=>[(0,e.createVNode)(Z)]),_:1})]),_:1},8,[`type`]),(0,e.createVNode)(re,{visible:l.value,messages:(0,e.unref)(f).messages.value,loading:(0,e.unref)(f).loading.value,"is-collab":(0,e.unref)(f).isCollabMode.value,"collab-users":(0,e.unref)(f).collabUsers.value,"current-user":(0,e.unref)(f).currentUser.value,"is-owner":g.value,onSend:xe,onClose:n[24]||=e=>l.value=!1,"unread-mention":(0,e.unref)(f).unreadMention.value,onClearUnread:n[25]||=t=>(0,e.unref)(f).clearUnreadMention(),onClear:Se},null,8,[`visible`,`messages`,`loading`,`is-collab`,`collab-users`,`current-user`,`is-owner`,`unread-mention`]),(0,e.createVNode)(oe,{modelValue:u.value,"onUpdate:modelValue":n[26]||=e=>u.value=e,"document-id":c.value,onApply:we},null,8,[`modelValue`,`document-id`])])}}},[[`__scopeId`,`data-v-f2d3d8e9`]]);return(0,e.defineComponent)({name:`YourCompanyExplosionDiagram`,props:{docId:{type:[Number,String],default:null},apiBase:{type:String,default:`/api`},wsUrl:{type:String,default:``},user:{type:Object,default:()=>({id:``,name:``,color:``})},roomId:{type:String,default:``}},setup(n,{slots:r}){return()=>(0,e.h)(`div`,{class:`yourcompany-explosion-diagram-wrapper`,style:`position:relative`},[(0,e.h)(gt,{...n}),(0,e.h)(t.BrandWatermark)])}})});
|
|
1
|
+
(function(e,t){typeof exports==`object`&&typeof module<`u`?module.exports=t(require("vue"),require("@billtaofbj/core"),require("vue-router"),require("element-plus"),require("@element-plus/icons-vue"),require("axios"),require("yjs"),require("@hocuspocus/provider")):typeof define==`function`&&define.amd?define([`vue`,`@billtaofbj/core`,`vue-router`,`element-plus`,`@element-plus/icons-vue`,`axios`,`yjs`,`@hocuspocus/provider`],t):(e=typeof globalThis<`u`?globalThis:e||self,e.YourCompanyExplosionDiagram=t(e.Vue,e._billtaofbj_core,e.VueRouter,e.ElementPlus,e.ElementPlusIconsVue,e.axios,e.yjs,e._hocuspocus_provider))})(this,function(e,t,n,r,i,a,o,s){var c=Object.create,l=Object.defineProperty,u=Object.getOwnPropertyDescriptor,d=Object.getOwnPropertyNames,f=Object.getPrototypeOf,p=Object.prototype.hasOwnProperty,m=(e,t,n,r)=>{if(t&&typeof t==`object`||typeof t==`function`)for(var i=d(t),a=0,o=i.length,s;a<o;a++)s=i[a],!p.call(e,s)&&s!==n&&l(e,s,{get:(e=>t[e]).bind(null,s),enumerable:!(r=u(t,s))||r.enumerable});return e},h=(e,t,n)=>(n=e==null?{}:c(f(e)),m(t||!e||!e.__esModule?l(n,`default`,{value:e,enumerable:!0}):n,e));let g=h(a,1);a=h(a),o=h(o,1);var _=(e,t)=>{let n=e.__vccOpts||e;for(let[e,r]of t)n[e]=r;return n},v={class:`chat-header`},y={class:`chat-header-left`},b={class:`chat-title`},x={class:`online-users-list`},S={class:`online-user-item`},C={class:`online-user-name`},w={key:1},T={class:`online-user-name`},E={class:`chat-header-right`},D={key:0,class:`chat-empty`},O={class:`chat-empty-hint`},k={key:1},A={class:`message-content`},j={key:0,class:`message-meta`},M={key:0,class:`message-mention`},N=[`innerHTML`],P={class:`message-time`},F={key:1,class:`chat-message chat-message-ai`},I={class:`message-avatar ai`},L={class:`chat-input-area`},ee={key:0,class:`mention-popup`},te=[`onClick`,`onMouseenter`],ne={key:1},re=_({__name:`AiChatPanel`,props:{visible:{type:Boolean,default:!1},messages:{type:Array,default:()=>[]},loading:{type:Boolean,default:!1},panelWidth:{type:Number,default:360},isCollab:{type:Boolean,default:!1},collabUsers:{type:Array,default:()=>[]},currentUser:{type:Object,default:()=>({id:``,name:``,color:``})},isOwner:{type:Boolean,default:!0},unreadMention:{type:Boolean,default:!1}},emits:[`send`,`close`,`clear`,`clear-unread`],setup(t,{emit:n}){let r=t,a=n,o=(0,e.ref)(``),s=(0,e.ref)(null),c=(0,e.ref)(null),l=(0,e.ref)(!1),u=(0,e.ref)([]),d=(0,e.ref)(0),f=``,p=-1,m={id:`ai-assistant`,name:`AI助手`,color:`#409EFF`,isAi:!0},h=(0,e.computed)(()=>{let e=r.currentUser.id,t=new Set;return[m,...r.collabUsers.filter(n=>{let r=n.clientId||n.id||``;if(r&&r===e)return!1;let i=String(r||n.name||``);return t.has(i)?!1:(t.add(i),!0)})]}),g=(0,e.computed)(()=>h.value.length+1),_=e=>e.role===`ai`?`chat-message-ai`:r.isCollab&&e.user_id&&e.user_id!==r.currentUser.id?`chat-message-other`:`chat-message-user`,re=e=>e.role===`ai`?{background:`linear-gradient(135deg, #409EFF, #337ECC)`}:{background:e.user_color||`#67C23A`},R=e=>(e.user_name||`U`).charAt(0),z=e=>{if(!r.isCollab)return;let t=typeof e==`string`?e:e.target?.value||o.value,n=t.length,i=t.lastIndexOf(`@`,n);if(i!==-1&&i<n){let e=t.slice(i+1,n);if(!e.includes(` `)&&!e.includes(`
|
|
2
|
+
`)){f=e,p=i,u.value=h.value.filter(t=>t.name&&t.name.toLowerCase().includes(e.toLowerCase())),l.value=u.value.length>0,d.value=0;return}}l.value=!1},B=()=>{l.value&&(d.value=Math.min(d.value+1,u.value.length-1))},V=()=>{l.value&&(d.value=Math.max(d.value-1,0))},H=e=>{let t=o.value.slice(0,p),n=o.value.slice(p+f.length+1);o.value=`${t}@${e.name} ${n}`,l.value=!1},U=e=>{if(e){if(e.shiftKey)return;if(l.value){let t=u.value[d.value];if(t){e.preventDefault(),H(t);return}}e.preventDefault()}let t=o.value.trim();if(!t||r.loading)return;let n=null;if(r.isCollab){let e=t.match(/@(\S+)/);e&&(n=e[1])}a(`send`,t,{mentionedUser:n}),o.value=``,l.value=!1},W=()=>{(0,e.nextTick)(()=>{s.value&&(s.value.scrollTop=s.value.scrollHeight)})};return(0,e.watch)(()=>r.messages.length,W),(0,e.watch)(()=>r.messages,W,{deep:!0}),(n,r)=>{let f=(0,e.resolveComponent)(`el-icon`),p=(0,e.resolveComponent)(`el-tag`),m=(0,e.resolveComponent)(`el-popover`),W=(0,e.resolveComponent)(`el-button`),G=(0,e.resolveComponent)(`el-input`);return t.visible?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:0,class:`ai-chat-panel`,style:(0,e.normalizeStyle)({width:t.panelWidth+`px`})},[(0,e.createElementVNode)(`div`,v,[(0,e.createElementVNode)(`div`,y,[(0,e.createVNode)(f,{size:18,color:`#409EFF`},{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.Monitor))]),_:1}),(0,e.createElementVNode)(`span`,b,(0,e.toDisplayString)(t.isCollab?`协作聊天`:`AI 助手`),1),t.isCollab?((0,e.openBlock)(),(0,e.createBlock)(m,{key:0,width:200,placement:`bottom-start`,trigger:`click`},{reference:(0,e.withCtx)(()=>[(0,e.createVNode)(p,{size:`small`,type:`success`,effect:`plain`,class:`online-tag`},{default:(0,e.withCtx)(()=>[(0,e.createTextVNode)((0,e.toDisplayString)(g.value)+`人在线 `,1)]),_:1})]),default:(0,e.withCtx)(()=>[(0,e.createElementVNode)(`div`,x,[(0,e.createElementVNode)(`div`,S,[(0,e.createElementVNode)(`div`,{class:`online-user-avatar`,style:(0,e.normalizeStyle)({background:t.currentUser.color||`#409EFF`})},(0,e.toDisplayString)((t.currentUser.name||`U`).charAt(0)),5),(0,e.createElementVNode)(`span`,C,(0,e.toDisplayString)(t.currentUser.name||`我`),1),(0,e.createVNode)(p,{size:`small`,type:t.isOwner?`warning`:`success`,effect:`plain`,class:`role-tag`},{default:(0,e.withCtx)(()=>[(0,e.createTextVNode)((0,e.toDisplayString)(t.isOwner?`发起人`:`协作人`),1)]),_:1},8,[`type`]),r[4]||=(0,e.createElementVNode)(`span`,{class:`self-tag`},`(我)`,-1)]),((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(h.value,t=>((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:t.id||t.clientId,class:`online-user-item`},[(0,e.createElementVNode)(`div`,{class:`online-user-avatar`,style:(0,e.normalizeStyle)({background:t.color||`#909399`})},[t.isAi?((0,e.openBlock)(),(0,e.createBlock)(f,{key:0,size:14},{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.Monitor))]),_:1})):((0,e.openBlock)(),(0,e.createElementBlock)(`span`,w,(0,e.toDisplayString)((t.name||`U`).charAt(0)),1))],4),(0,e.createElementVNode)(`span`,T,(0,e.toDisplayString)(t.name||`未知用户`),1),t.isAi?((0,e.openBlock)(),(0,e.createBlock)(p,{key:0,size:`small`,type:`primary`,effect:`plain`,class:`role-tag`},{default:(0,e.withCtx)(()=>[...r[5]||=[(0,e.createTextVNode)(`AI助手`,-1)]]),_:1})):((0,e.openBlock)(),(0,e.createBlock)(p,{key:1,size:`small`,type:`success`,effect:`plain`,class:`role-tag`},{default:(0,e.withCtx)(()=>[...r[6]||=[(0,e.createTextVNode)(`协作人`,-1)]]),_:1}))]))),128))])]),_:1})):(0,e.createCommentVNode)(``,!0)]),(0,e.createElementVNode)(`div`,E,[t.isCollab&&t.unreadMention?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:0,class:`mention-bell`,title:`有新消息`,onClick:r[0]||=e=>a(`clear-unread`)},[(0,e.createVNode)(f,{size:18,color:`#F56C6C`},{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.Bell))]),_:1})])):(0,e.createCommentVNode)(``,!0),(0,e.createVNode)(W,{text:``,circle:``,size:`small`,onClick:r[1]||=e=>n.$emit(`clear`),title:`清空对话`},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(f,null,{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.Delete))]),_:1})]),_:1}),(0,e.createVNode)(W,{text:``,circle:``,size:`small`,onClick:r[2]||=e=>n.$emit(`close`),title:`关闭`},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(f,null,{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.Close))]),_:1})]),_:1})])]),(0,e.createElementVNode)(`div`,{class:`chat-messages`,ref_key:`messagesRef`,ref:s},[t.messages.length===0?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,D,[(0,e.createVNode)(f,{size:40,color:`#c0c4cc`},{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.Monitor))]),_:1}),(0,e.createElementVNode)(`p`,null,(0,e.toDisplayString)(t.isCollab?`协作聊天室`:`你好!我是 AI 助手`),1),(0,e.createElementVNode)(`p`,O,(0,e.toDisplayString)(t.isCollab?`与团队成员和AI助手实时聊天`:`可以问我任何关于文档编辑的问题`),1)])):(0,e.createCommentVNode)(``,!0),((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(t.messages,n=>((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:n._msgId||n.time+n.content,class:(0,e.normalizeClass)([`chat-message`,_(n)])},[(0,e.createElementVNode)(`div`,{class:`message-avatar`,style:(0,e.normalizeStyle)(re(n))},[n.role===`ai`?((0,e.openBlock)(),(0,e.createBlock)(f,{key:0,size:16},{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.Monitor))]),_:1})):((0,e.openBlock)(),(0,e.createElementBlock)(`span`,k,(0,e.toDisplayString)(R(n)),1))],4),(0,e.createElementVNode)(`div`,A,[t.isCollab&&n.role===`user`?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,j,[(0,e.createElementVNode)(`span`,{class:`message-sender`,style:(0,e.normalizeStyle)({color:n.user_color||`#67C23A`})},(0,e.toDisplayString)(n.user_name||`用户`),5),n.mentioned_user?((0,e.openBlock)(),(0,e.createElementBlock)(`span`,M,`@`+(0,e.toDisplayString)(n.mentioned_user),1)):(0,e.createCommentVNode)(``,!0)])):(0,e.createCommentVNode)(``,!0),(0,e.createElementVNode)(`div`,{class:`message-text`,innerHTML:n.content},null,8,N),(0,e.createElementVNode)(`div`,P,(0,e.toDisplayString)(n.time),1)])],2))),128)),t.loading?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,F,[(0,e.createElementVNode)(`div`,I,[(0,e.createVNode)(f,{size:16},{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.Monitor))]),_:1})]),r[7]||=(0,e.createElementVNode)(`div`,{class:`message-content`},[(0,e.createElementVNode)(`div`,{class:`message-text typing-indicator`},[(0,e.createElementVNode)(`span`),(0,e.createElementVNode)(`span`),(0,e.createElementVNode)(`span`)])],-1)])):(0,e.createCommentVNode)(``,!0)],512),(0,e.createElementVNode)(`div`,L,[(0,e.createElementVNode)(`div`,{class:`chat-input-wrapper`,ref_key:`inputWrapperRef`,ref:c},[(0,e.createVNode)(G,{modelValue:o.value,"onUpdate:modelValue":r[3]||=e=>o.value=e,type:`textarea`,autosize:{minRows:1,maxRows:4},placeholder:t.isCollab?`输入消息... @提及成员`:`输入消息...`,onKeydown:[(0,e.withKeys)((0,e.withModifiers)(U,[`exact`]),[`enter`]),(0,e.withKeys)((0,e.withModifiers)(B,[`prevent`]),[`down`]),(0,e.withKeys)((0,e.withModifiers)(V,[`prevent`]),[`up`])],onInput:z,resize:`none`},null,8,[`modelValue`,`placeholder`,`onKeydown`]),l.value?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,ee,[((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(u.value,(t,n)=>((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:t.id||t.clientId,class:(0,e.normalizeClass)([`mention-item`,{active:n===d.value}]),onClick:e=>H(t),onMouseenter:e=>d.value=n},[(0,e.createElementVNode)(`div`,{class:`mention-avatar`,style:(0,e.normalizeStyle)({background:t.color||`#909399`})},[t.isAi?((0,e.openBlock)(),(0,e.createBlock)(f,{key:0,size:12},{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.Monitor))]),_:1})):((0,e.openBlock)(),(0,e.createElementBlock)(`span`,ne,(0,e.toDisplayString)((t.name||`U`).charAt(0)),1))],4),(0,e.createElementVNode)(`span`,null,(0,e.toDisplayString)(t.name),1)],42,te))),128))])):(0,e.createCommentVNode)(``,!0),(0,e.createVNode)(W,{class:`send-btn`,type:`primary`,circle:``,disabled:!o.value.trim()||t.loading,onClick:U},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(f,null,{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.Promotion))]),_:1})]),_:1},8,[`disabled`])],512)])],4)):(0,e.createCommentVNode)(``,!0)}}},[[`__scopeId`,`data-v-01960100`]]);function R(){let t=(0,e.ref)([]),n=(0,e.ref)(!1),r=(0,e.ref)(!1),i=(0,e.ref)([]),a=(0,e.ref)({id:``,name:``,color:``}),o=(0,e.ref)(!1),s=null,c=null,l=null,u=new Set,d=`/api/chat`,f=null,p=({ydoc:n,provider:c,onlineUsers:d})=>{if(n){r.value=!0,l=d,f&&f(),f=(0,e.watch)(l,e=>{i.value=Array.isArray(e)?e:[]},{immediate:!0,deep:!0});try{s=n.getArray(`chat-messages`),s.observe(e=>{try{e.changes.added.forEach(e=>{e.content.getContent().forEach(e=>{e&&e._msgId&&!u.has(e._msgId)&&(u.add(e._msgId),t.value=[...t.value,e],e.mentioned_user&&e.user_id!==a.value.id&&(o.value=!0))})})}catch(e){console.warn(`[useChat] Y.Array observer error:`,e)}})}catch(e){console.warn(`[useChat] Failed to create Y.Array:`,e)}}},m=e=>{a.value={...a.value,...e}},h=e=>{i.value=e||[]},_=()=>{let e=new Date;return`${e.getHours().toString().padStart(2,`0`)}:${e.getMinutes().toString().padStart(2,`0`)}`},v=async(n,i={})=>{let o={_msgId:`msg-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,role:`user`,content:n,time:_(),user_id:a.value.id,user_name:a.value.name,user_color:a.value.color,mentioned_user:i.mentionedUser||null};if(u.add(o._msgId),t.value=[...t.value,o],s&&(0,e.unref)(r))try{s.push([o])}catch(e){console.warn(`[useChat] Failed to push to Y.Array:`,e)}if(i.roomId)try{await g.default.post(d,{room_id:i.roomId,role:`user`,content:n,user_id:a.value.id,user_name:a.value.name,mentioned_user:i.mentionedUser||null})}catch(e){console.warn(`[useChat] Failed to persist message:`,e)}},y=async(n,i)=>{let a={_msgId:`msg-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,role:`ai`,content:n,time:_(),user_id:`ai-assistant`,user_name:`AI助手`};if(u.add(a._msgId),t.value=[...t.value,a],s&&(0,e.unref)(r))try{s.push([a])}catch(e){console.warn(`[useChat] Failed to push AI message to Y.Array:`,e)}if(i)try{await g.default.post(d,{room_id:i,role:`ai`,content:n,user_id:`ai-assistant`,user_name:`AI助手`})}catch(e){console.warn(`[useChat] Failed to persist AI message:`,e)}},b=async e=>{if(e)try{let n=await g.default.get(d,{params:{room_id:e}});if(Array.isArray(n.data)){let e=n.data.map(e=>({_msgId:e._msgId||`hist-${e.id||Date.now()}`,role:e.role,content:e.content,time:e.time||_(),user_id:e.user_id||``,user_name:e.user_name||``,user_color:e.user_color||``,mentioned_user:e.mentioned_user||null}));e.forEach(e=>u.add(e._msgId)),t.value=[...e,...t.value]}}catch(e){console.warn(`[useChat] Failed to load history:`,e)}},x=async e=>{if(t.value=[],u.clear(),e)try{await g.default.delete(d,{params:{room_id:e}})}catch(e){console.warn(`[useChat] Failed to clear messages on server:`,e)}},S=()=>{o.value=!1},C=()=>{if(f&&=(f(),null),s&&c){try{s.unobserve(c)}catch{}c=null}s=null,l=null,u.clear()};return(0,e.onUnmounted)(()=>C()),{messages:t,loading:n,isCollabMode:r,collabUsers:i,currentUser:a,unreadMention:o,setCollabContext:p,setCurrentUser:m,updateCollabUsers:h,sendMessage:v,sendAiMessage:y,loadHistory:b,clearMessages:x,clearUnreadMention:S,destroy:C}}var z=`/api/document-versions`,B=5e3,V=()=>{let t=(0,e.ref)([]),n=(0,e.ref)(!1);return{versions:t,loading:n,saveVersion:async({documentId:e,docType:t,content:n,userId:r,userName:i})=>{if(!e||!t||!n)return null;try{let{data:a}=await g.default.post(z,{document_id:e,doc_type:t,content:typeof n==`string`?n:JSON.stringify(n),user_id:r||null,user_name:i||null},{timeout:B});return a}catch(e){return console.warn(`[useVersionHistory] Failed to save version:`,e),null}},loadVersions:async e=>{if(!e)return[];n.value=!0;try{let{data:n}=await g.default.get(z,{params:{document_id:e},timeout:B});return t.value=n,n}catch(e){return console.warn(`[useVersionHistory] Failed to load versions:`,e),t.value=[],[]}finally{n.value=!1}},getVersionContent:async e=>{try{let{data:t}=await g.default.get(`${z}/${e}`,{timeout:B});return t}catch(e){return console.warn(`[useVersionHistory] Failed to get version content:`,e),null}}}},H={class:`version-history-panel`},U={key:0,class:`loading-state`},W={key:1,class:`empty-state`},G={key:2,class:`version-list`},K={key:0,class:`current-version`},q={class:`current-version-header`},J={class:`version-number`},Y=[`onClick`],ie={class:`version-number`},X={class:`version-user`},ae={class:`panel-footer`},oe=_({__name:`VersionHistoryPanel`,props:{modelValue:{type:Boolean,default:!1},documentId:{type:[Number,String],default:null}},emits:[`update:modelValue`,`apply`],setup(t,{expose:n,emit:a}){let o=t,s=a,{versions:c,loading:l,loadVersions:u,getVersionContent:d}=V(),f=(0,e.ref)(!1),p=(0,e.ref)(null),m=(0,e.ref)(!1),h=(0,e.ref)(null);(0,e.watch)(()=>o.modelValue,e=>{f.value=e,e&&o.documentId&&(p.value=null,u(o.documentId).then(e=>{e&&e.length>0&&(h.value=e[0])}))}),(0,e.watch)(f,e=>{s(`update:modelValue`,e)});let g=e=>{p.value=e},_=async()=>{if(p.value){m.value=!0;try{let e=await d(p.value.id);e&&e.content?(h.value=p.value,p.value=null,s(`apply`,e.content),r.ElMessage.success(`已切换到版本 v`+h.value.version_number)):r.ElMessage.error(`获取版本内容失败`)}finally{m.value=!1}}},v=()=>{f.value=!1},y=e=>{if(!e)return``;let t=new Date(e),n=e=>String(e).padStart(2,`0`);return`${t.getFullYear()}-${n(t.getMonth()+1)}-${n(t.getDate())} ${n(t.getHours())}:${n(t.getMinutes())}:${n(t.getSeconds())}`};return n({currentVersion:h}),(t,n)=>{let r=(0,e.resolveComponent)(`el-icon`),a=(0,e.resolveComponent)(`el-tag`),o=(0,e.resolveComponent)(`el-timeline-item`),s=(0,e.resolveComponent)(`el-timeline`),u=(0,e.resolveComponent)(`el-button`),d=(0,e.resolveComponent)(`el-drawer`);return(0,e.openBlock)(),(0,e.createBlock)(d,{modelValue:f.value,"onUpdate:modelValue":n[0]||=e=>f.value=e,title:`更新履历`,direction:`rtl`,size:`420px`,"before-close":v},{footer:(0,e.withCtx)(()=>[(0,e.createElementVNode)(`div`,ae,[(0,e.createVNode)(u,{type:`primary`,disabled:!p.value,loading:m.value,onClick:_},{default:(0,e.withCtx)(()=>[...n[4]||=[(0,e.createTextVNode)(` 切换到此版本 `,-1)]]),_:1},8,[`disabled`,`loading`])])]),default:(0,e.withCtx)(()=>[(0,e.createElementVNode)(`div`,H,[(0,e.unref)(l)?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,U,[(0,e.createVNode)(r,{class:`is-loading`},{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.Loading))]),_:1}),n[1]||=(0,e.createElementVNode)(`span`,null,`加载中...`,-1)])):(0,e.unref)(c).length===0?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,W,[(0,e.createVNode)(r,{size:48,color:`#c0c4cc`},{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.Clock))]),_:1}),n[2]||=(0,e.createElementVNode)(`p`,null,`暂无历史版本`,-1)])):((0,e.openBlock)(),(0,e.createElementBlock)(`div`,G,[h.value?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,K,[(0,e.createElementVNode)(`div`,q,[(0,e.createVNode)(a,{type:`success`,size:`small`},{default:(0,e.withCtx)(()=>[...n[3]||=[(0,e.createTextVNode)(`当前版本`,-1)]]),_:1}),(0,e.createElementVNode)(`span`,J,`v`+(0,e.toDisplayString)(h.value.version_number),1)])])):(0,e.createCommentVNode)(``,!0),(0,e.createVNode)(s,null,{default:(0,e.withCtx)(()=>[((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)((0,e.unref)(c),t=>((0,e.openBlock)(),(0,e.createBlock)(o,{key:t.id,timestamp:y(t.created_at),placement:`top`,type:p.value?.id===t.id?`primary`:``,hollow:p.value?.id!==t.id},{default:(0,e.withCtx)(()=>[(0,e.createElementVNode)(`div`,{class:(0,e.normalizeClass)([`version-item`,{active:p.value?.id===t.id}]),onClick:e=>g(t)},[(0,e.createElementVNode)(`span`,ie,`版本号:v`+(0,e.toDisplayString)(t.version_number),1),(0,e.createElementVNode)(`span`,X,`提交人:`+(0,e.toDisplayString)(t.user_name||`未知用户`),1)],10,Y)]),_:2},1032,[`timestamp`,`type`,`hollow`]))),128))]),_:1})]))])]),_:1},8,[`modelValue`])}}},[[`__scopeId`,`data-v-87924b7c`]]),se={class:`toolbar`},ce={class:`toolbar-left`},Z={class:`toolbar-center`},le={class:`toolbar-right`},ue={key:0,class:`collab-users`},de=[`title`],fe=_({__name:`Toolbar`,props:{title:{type:String,default:``},canUndo:Boolean,canRedo:Boolean,connectingMode:Boolean,isConnected:Boolean,onlineUsers:{type:Array,default:()=>[]},isJoinMode:Boolean,showHistory:{type:Boolean,default:!1},showBackButton:{type:Boolean,default:!0},titleDisabled:{type:Boolean,default:!1}},emits:[`update:title`,`back`,`add-component`,`group-selected`,`toggle-connecting`,`auto-layout`,`undo`,`redo`,`zoom-in`,`zoom-out`,`export`,`save`,`toggle-collab`,`share-collab`,`export-json`,`import-json`,`history`],setup(t){let n=t,r=(0,e.ref)(n.title);return(0,e.watch)(()=>n.title,e=>r.value=e),(n,a)=>{let o=(0,e.resolveComponent)(`el-icon`),s=(0,e.resolveComponent)(`el-button`),c=(0,e.resolveComponent)(`el-input`),l=(0,e.resolveComponent)(`el-dropdown-item`),u=(0,e.resolveComponent)(`el-dropdown-menu`),d=(0,e.resolveComponent)(`el-dropdown`),f=(0,e.resolveComponent)(`el-tooltip`),p=(0,e.resolveComponent)(`el-divider`);return(0,e.openBlock)(),(0,e.createElementBlock)(`div`,se,[(0,e.createElementVNode)(`div`,ce,[t.showBackButton?((0,e.openBlock)(),(0,e.createBlock)(s,{key:0,onClick:a[0]||=e=>n.$emit(`back`),size:`small`,circle:``},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(o,null,{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.ArrowLeft))]),_:1})]),_:1})):(0,e.createCommentVNode)(``,!0),(0,e.createVNode)(c,{modelValue:r.value,"onUpdate:modelValue":a[1]||=e=>r.value=e,onBlur:a[2]||=e=>n.$emit(`update:title`,r.value),disabled:t.titleDisabled,placeholder:`输入标题`,class:`title-input`,size:`small`},null,8,[`modelValue`,`disabled`])]),(0,e.createElementVNode)(`div`,Z,[(0,e.createVNode)(d,{trigger:`click`,onCommand:a[3]||=e=>n.$emit(`add-component`,e)},{dropdown:(0,e.withCtx)(()=>[(0,e.createVNode)(u,null,{default:(0,e.withCtx)(()=>[(0,e.createVNode)(l,{command:`rect`},{default:(0,e.withCtx)(()=>[...a[19]||=[(0,e.createTextVNode)(`矩形`,-1)]]),_:1}),(0,e.createVNode)(l,{command:`circle`},{default:(0,e.withCtx)(()=>[...a[20]||=[(0,e.createTextVNode)(`圆形`,-1)]]),_:1}),(0,e.createVNode)(l,{command:`diamond`},{default:(0,e.withCtx)(()=>[...a[21]||=[(0,e.createTextVNode)(`菱形`,-1)]]),_:1}),(0,e.createVNode)(l,{command:`triangle`},{default:(0,e.withCtx)(()=>[...a[22]||=[(0,e.createTextVNode)(`三角形`,-1)]]),_:1}),(0,e.createVNode)(l,{command:`text`},{default:(0,e.withCtx)(()=>[...a[23]||=[(0,e.createTextVNode)(`文本`,-1)]]),_:1}),(0,e.createVNode)(l,{divided:``,command:`image`},{default:(0,e.withCtx)(()=>[...a[24]||=[(0,e.createTextVNode)(`图片零件`,-1)]]),_:1}),(0,e.createVNode)(l,{command:`polygon`},{default:(0,e.withCtx)(()=>[...a[25]||=[(0,e.createTextVNode)(`自定义多边形`,-1)]]),_:1}),(0,e.createVNode)(l,{command:`svg`},{default:(0,e.withCtx)(()=>[...a[26]||=[(0,e.createTextVNode)(`SVG导入`,-1)]]),_:1})]),_:1})]),default:(0,e.withCtx)(()=>[(0,e.createVNode)(s,{size:`small`},{default:(0,e.withCtx)(()=>[a[18]||=(0,e.createTextVNode)(`形状`,-1),(0,e.createVNode)(o,{class:`el-icon--right`},{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.ArrowDown))]),_:1})]),_:1})]),_:1}),(0,e.createVNode)(f,{content:`导出JSON`,placement:`bottom`},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(s,{size:`small`,circle:``,onClick:a[4]||=e=>n.$emit(`export-json`)},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(o,null,{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.Download))]),_:1})]),_:1})]),_:1}),(0,e.createVNode)(f,{content:`导入JSON`,placement:`bottom`},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(s,{size:`small`,circle:``,onClick:a[5]||=e=>n.$emit(`import-json`)},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(o,null,{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.Upload))]),_:1})]),_:1})]),_:1}),(0,e.createVNode)(f,{content:`组合`,placement:`bottom`},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(s,{size:`small`,circle:``,onClick:a[6]||=e=>n.$emit(`group-selected`),title:`将选中零件组合为一个`},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(o,null,{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.Files))]),_:1})]),_:1})]),_:1}),(0,e.createVNode)(p,{direction:`vertical`}),(0,e.createVNode)(f,{content:`连线模式`,placement:`bottom`},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(s,{size:`small`,circle:``,type:t.connectingMode?`primary`:``,onClick:a[7]||=e=>n.$emit(`toggle-connecting`)},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(o,null,{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.Connection))]),_:1})]),_:1},8,[`type`])]),_:1}),(0,e.createVNode)(s,{size:`small`,onClick:a[8]||=e=>n.$emit(`auto-layout`)},{default:(0,e.withCtx)(()=>[...a[27]||=[(0,e.createTextVNode)(`自动布局`,-1)]]),_:1}),(0,e.createVNode)(p,{direction:`vertical`}),(0,e.createVNode)(s,{size:`small`,circle:``,onClick:a[9]||=e=>n.$emit(`undo`),disabled:!t.canUndo},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(o,null,{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.RefreshLeft))]),_:1})]),_:1},8,[`disabled`]),(0,e.createVNode)(s,{size:`small`,circle:``,onClick:a[10]||=e=>n.$emit(`redo`),disabled:!t.canRedo},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(o,null,{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.RefreshRight))]),_:1})]),_:1},8,[`disabled`]),(0,e.createVNode)(p,{direction:`vertical`}),(0,e.createVNode)(s,{size:`small`,circle:``,onClick:a[11]||=e=>n.$emit(`zoom-in`)},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(o,null,{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.ZoomIn))]),_:1})]),_:1}),(0,e.createVNode)(s,{size:`small`,circle:``,onClick:a[12]||=e=>n.$emit(`zoom-out`)},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(o,null,{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.ZoomOut))]),_:1})]),_:1})]),(0,e.createElementVNode)(`div`,le,[t.onlineUsers.length>0?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,ue,[((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(t.onlineUsers.slice(0,5),t=>((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:t.clientId,class:`collab-avatar`,style:(0,e.normalizeStyle)({background:t.color}),title:t.name},(0,e.toDisplayString)(t.name?.charAt(0)),13,de))),128))])):(0,e.createCommentVNode)(``,!0),t.isJoinMode?(0,e.createCommentVNode)(``,!0):((0,e.openBlock)(),(0,e.createBlock)(s,{key:1,size:`small`,type:t.isConnected?`success`:`default`,onClick:a[13]||=e=>n.$emit(`toggle-collab`)},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(o,null,{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.Share))]),_:1}),(0,e.createElementVNode)(`span`,null,(0,e.toDisplayString)(t.isConnected?`协作中`:`协作`),1)]),_:1},8,[`type`])),!t.isJoinMode&&t.isConnected?((0,e.openBlock)(),(0,e.createBlock)(s,{key:2,size:`small`,circle:``,onClick:a[14]||=e=>n.$emit(`share-collab`),title:`分享链接`},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(o,null,{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.Link))]),_:1})]),_:1})):(0,e.createCommentVNode)(``,!0),(0,e.createVNode)(p,{direction:`vertical`}),(0,e.createVNode)(d,{trigger:`click`,onCommand:a[15]||=e=>n.$emit(`export`,e)},{dropdown:(0,e.withCtx)(()=>[(0,e.createVNode)(u,null,{default:(0,e.withCtx)(()=>[(0,e.createVNode)(l,{command:`png`},{default:(0,e.withCtx)(()=>[...a[29]||=[(0,e.createTextVNode)(`PNG`,-1)]]),_:1}),(0,e.createVNode)(l,{command:`svg`},{default:(0,e.withCtx)(()=>[...a[30]||=[(0,e.createTextVNode)(`SVG`,-1)]]),_:1}),(0,e.createVNode)(l,{command:`pdf`},{default:(0,e.withCtx)(()=>[...a[31]||=[(0,e.createTextVNode)(`PDF`,-1)]]),_:1}),(0,e.createVNode)(l,{command:`html`},{default:(0,e.withCtx)(()=>[...a[32]||=[(0,e.createTextVNode)(`HTML`,-1)]]),_:1})]),_:1})]),default:(0,e.withCtx)(()=>[(0,e.createVNode)(s,{size:`small`},{default:(0,e.withCtx)(()=>[a[28]||=(0,e.createTextVNode)(`导出`,-1),(0,e.createVNode)(o,{class:`el-icon--right`},{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.ArrowDown))]),_:1})]),_:1})]),_:1}),(0,e.createVNode)(s,{size:`small`,onClick:a[16]||=e=>n.$emit(`save`)},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(o,null,{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.Download))]),_:1})]),_:1}),t.showHistory?((0,e.openBlock)(),(0,e.createBlock)(s,{key:3,size:`small`,circle:``,title:`更新履历`,onClick:a[17]||=e=>n.$emit(`history`)},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(o,null,{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.Clock))]),_:1})]),_:1})):(0,e.createCommentVNode)(``,!0)])])}}},[[`__scopeId`,`data-v-5c549dd2`]]),pe=[`viewBox`],Q=[`id`],me=[`x`,`y`,`width`,`height`],he=[`transform`,`onMousedown`,`onDblclick`,`onMouseenter`],ge=[`href`,`width`,`height`],_e=[`innerHTML`,`transform`],ve=[`points`,`fill`,`stroke`,`stroke-width`],ye=[`width`,`height`,`fill`,`stroke`,`stroke-width`],be=[`width`,`height`,`fill`,`stroke`,`stroke-width`],xe=[`cx`,`cy`,`rx`,`ry`,`fill`,`stroke`,`stroke-width`],Se=[`points`,`fill`,`stroke`,`stroke-width`],Ce=[`points`,`fill`,`stroke`,`stroke-width`],we=[`width`,`height`,`stroke`,`stroke-width`],Te=[`x`,`y`,`fill`,`font-size`],Ee=[`x`,`y`],De=[`x`,`y`,`fill`,`font-size`],$=[`x`,`y`,`fill`,`font-size`],Oe=[`x`,`y`],ke={key:12},Ae=[`x`,`y`,`onMousedown`],je=[`y`,`onMousedown`],Me=[`x`,`onMousedown`],Ne=[`onMousedown`],Pe={key:13},Fe=[`cx`,`cy`,`onMousedown`],Ie=[`x`,`y`],Le=[`d`,`stroke`,`stroke-width`,`stroke-dasharray`,`onMousedown`],Re=[`x`,`y`],ze=[`x1`,`y1`,`x2`,`y2`],Be={key:1},Ve=[`cx`,`cy`,`onMousedown`],He=[`href`,`x`,`y`,`width`,`height`,`clip-path`],Ue={class:`popup-tooltip-key`},We={class:`popup-tooltip-val`},Ge=_({__name:`DiagramCanvas`,props:{components:{type:Array,default:()=>[]},connections:{type:Array,default:()=>[]},selectedId:[String,Number,null],selectedIds:{type:Array,default:()=>[]},connectingMode:Boolean,drawingConn:Object,editingPolygon:Object,viewBox:{type:String,default:`0 0 2000 1500`},isExpanded:Boolean,expandedGroupId:[String,Number,null]},emits:[`select`,`edit`,`clear-selection`,`start-connect`,`start-resize`,`move-component`,`drag-polygon-vertex`],setup(t,{emit:n}){let r=t,i=n,a=(0,e.ref)(null),o=(0,e.ref)(null),s=(0,e.ref)(null),c=(0,e.ref)({x:0,y:0}),l=(0,e.computed)(()=>{let e=r.components.filter(e=>e.shape===`group`),t=r.components.filter(e=>e.shape!==`group`);return[...e,...t]}),u=(0,e.computed)(()=>r.viewBox),d=(0,e.computed)(()=>r.components.filter(e=>e.shape===`group`&&e.imageUrl)),f=e=>!r.isExpanded&&e.groupId,p=e=>{if(r.isExpanded)return!1;let t=r.components.find(t=>t.id===e.fromId),n=r.components.find(t=>t.id===e.toId);return t&&t.groupId||n&&n.groupId},m=(0,e.computed)(()=>r.editingPolygon?(r.editingPolygon.points||``).trim().split(/\s+/).map(e=>{let[t,n]=e.split(`,`).map(Number);return{x:t,y:n}}):[]),h=e=>[{x:e.width/2,y:0,dir:`top`},{x:e.width,y:e.height/2,dir:`right`},{x:e.width/2,y:e.height,dir:`bottom`},{x:0,y:e.height/2,dir:`left`}],g=e=>{let t=r.components.find(t=>t.id===e.fromId),n=r.components.find(t=>t.id===e.toId);if(!t||!n)return``;let i=t.x+(e.fromAnchor?.x??t.width/2),a=t.y+(e.fromAnchor?.y??t.height/2),o=n.x+(e.toAnchor?.x??n.width/2),s=n.y+(e.toAnchor?.y??n.height/2),c=o-i;return`M${i},${a} C${i+c*.3},${a} ${o-c*.3},${s} ${o},${s}`},_=e=>{let t=r.components.find(t=>t.id===e.fromId),n=r.components.find(t=>t.id===e.toId);return!t||!n?{x:0,y:0}:{x:(t.x+n.x)/2,y:(t.y+n.y)/2}},v=(e,t)=>{if(!e.popupConfig||!e.popupConfig.length)return;s.value=e;let n=a.value.getBoundingClientRect();c.value={x:t.clientX-n.left,y:t.clientY-n.top}},y=e=>{let t=o.value;if(!t)return{x:0,y:0};let n=t.getBoundingClientRect(),r=t.viewBox.baseVal;return{x:(e.clientX-n.left)/n.width*r.width+r.x,y:(e.clientY-n.top)/n.height*r.height+r.y}},b=(e,t)=>{if(t.ctrlKey||t.metaKey){i(`select`,e,`component`,t);return}if(i(`select`,e,`component`,t),r.connectingMode)return;let n=y(t),a=e.x,o=e.y,s=!1,c=t=>{let r=y(t),c=r.x-n.x,l=r.y-n.y;(Math.abs(c)>2||Math.abs(l)>2)&&(s=!0),i(`move-component`,e.id,a+c,o+l)},l=()=>{document.removeEventListener(`mousemove`,c),document.removeEventListener(`mouseup`,l),s&&i(`move-component`,e.id,e.x,e.y,!0)};document.addEventListener(`mousemove`,c),document.addEventListener(`mouseup`,l)},x=(e,t,n)=>{e.width,e.height;let r=(e.points||``).trim().split(/\s+/).map(e=>e.split(`,`).map(Number)),a=n=>{let i=y(n);r[t]=[Math.max(0,Math.min(e.width,Math.round(i.x-e.x))),Math.max(0,Math.min(e.height,Math.round(i.y-e.y)))],e.points=r.map(e=>e.join(`,`)).join(` `)},o=()=>{document.removeEventListener(`mousemove`,a),document.removeEventListener(`mouseup`,o),i(`drag-polygon-vertex`,e)};document.addEventListener(`mousemove`,a),document.addEventListener(`mouseup`,o)};return(n,r)=>((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{class:`diagram-canvas`,ref_key:`containerRef`,ref:a},[((0,e.openBlock)(),(0,e.createElementBlock)(`svg`,{ref_key:`svgRef`,ref:o,class:`diagram-svg`,viewBox:u.value,onMousedown:r[1]||=(0,e.withModifiers)(e=>n.$emit(`clear-selection`),[`self`])},[(0,e.createElementVNode)(`defs`,null,[r[2]||=(0,e.createElementVNode)(`marker`,{id:`arrowhead-end`,markerWidth:`10`,markerHeight:`7`,refX:`9`,refY:`3.5`,orient:`auto`},[(0,e.createElementVNode)(`polygon`,{points:`0 0, 10 3.5, 0 7`,fill:`#666`})],-1),((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(d.value,t=>((0,e.openBlock)(),(0,e.createElementBlock)(`clipPath`,{key:`clip-`+t.id,id:`clip-`+t.id},[(0,e.createElementVNode)(`rect`,{x:t.x,y:t.y,width:t.width,height:t.height,rx:`4`},null,8,me)],8,Q))),128))]),((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(l.value,i=>((0,e.openBlock)(),(0,e.createElementBlock)(`g`,{key:i.id,transform:`translate(${i.x}, ${i.y})`,onMousedown:(0,e.withModifiers)(e=>f(i)?null:b(i,e),[`stop`]),onDblclick:(0,e.withModifiers)(e=>f(i)?null:n.$emit(`edit`,i),[`stop`]),onMouseenter:e=>v(i,e),onMouseleave:r[0]||=e=>s.value=null,style:(0,e.normalizeStyle)(f(i)?`pointer-events:none;opacity:0.7;`:`cursor:move;`)},[i.shape===`image`?((0,e.openBlock)(),(0,e.createElementBlock)(`image`,{key:0,href:i.imageUrl,width:i.width,height:i.height,preserveAspectRatio:`xMidYMid meet`,style:(0,e.normalizeStyle)({pointerEvents:f(i)?`none`:`all`})},null,12,ge)):i.shape===`svg`?((0,e.openBlock)(),(0,e.createElementBlock)(`g`,{key:1,innerHTML:i.svgContent||``,transform:`scale(${i.width/(i.svgWidth||100)}, ${i.height/(i.svgHeight||100)})`,style:(0,e.normalizeStyle)({pointerEvents:f(i)?`none`:`all`})},null,12,_e)):i.shape===`polygon`?((0,e.openBlock)(),(0,e.createElementBlock)(`polygon`,{key:2,points:i.points||``,fill:i.fill||`#fff`,stroke:t.selectedIds.includes(i.id)?`#409EFF`:i.stroke||`#ccc`,"stroke-width":t.selectedIds.includes(i.id)?2:1,style:(0,e.normalizeStyle)({pointerEvents:f(i)?`none`:`all`})},null,12,ve)):i.shape===`group`&&i.id!==t.expandedGroupId?((0,e.openBlock)(),(0,e.createElementBlock)(`rect`,{key:3,width:i.width,height:i.height,fill:i.imageUrl?`none`:`rgba(64,158,255,0.05)`,stroke:(t.selectedIds.includes(i.id),`#409EFF`),"stroke-dasharray":`6,3`,"stroke-width":t.selectedIds.includes(i.id)?2:1,style:{"pointer-events":`all`}},null,8,ye)):i.shape===`rect`?((0,e.openBlock)(),(0,e.createElementBlock)(`rect`,{key:4,width:i.width,height:i.height,rx:4,fill:i.fill||`#fff`,stroke:t.selectedIds.includes(i.id)?`#409EFF`:i.stroke||`#ccc`,"stroke-width":t.selectedIds.includes(i.id)?2:1,style:(0,e.normalizeStyle)({pointerEvents:f(i)?`none`:`all`})},null,12,be)):i.shape===`circle`?((0,e.openBlock)(),(0,e.createElementBlock)(`ellipse`,{key:5,cx:i.width/2,cy:i.height/2,rx:i.width/2,ry:i.height/2,fill:i.fill||`#fff`,stroke:t.selectedIds.includes(i.id)?`#409EFF`:i.stroke||`#ccc`,"stroke-width":t.selectedIds.includes(i.id)?2:1,style:(0,e.normalizeStyle)({pointerEvents:f(i)?`none`:`all`})},null,12,xe)):i.shape===`diamond`?((0,e.openBlock)(),(0,e.createElementBlock)(`polygon`,{key:6,points:`${i.width/2},0 ${i.width},${i.height/2} ${i.width/2},${i.height} 0,${i.height/2}`,fill:i.fill||`#fff`,stroke:t.selectedIds.includes(i.id)?`#409EFF`:i.stroke||`#ccc`,"stroke-width":t.selectedIds.includes(i.id)?2:1,style:(0,e.normalizeStyle)({pointerEvents:f(i)?`none`:`all`})},null,12,Se)):i.shape===`triangle`?((0,e.openBlock)(),(0,e.createElementBlock)(`polygon`,{key:7,points:`${i.width/2},0 ${i.width},${i.height} 0,${i.height}`,fill:i.fill||`#fff`,stroke:t.selectedIds.includes(i.id)?`#409EFF`:i.stroke||`#ccc`,"stroke-width":t.selectedIds.includes(i.id)?2:1,style:(0,e.normalizeStyle)({pointerEvents:f(i)?`none`:`all`})},null,12,Ce)):((0,e.openBlock)(),(0,e.createElementBlock)(`rect`,{key:8,width:i.width,height:i.height,fill:`#fff`,stroke:t.selectedIds.includes(i.id)?`#409EFF`:`#ccc`,"stroke-width":t.selectedIds.includes(i.id)?2:1,style:(0,e.normalizeStyle)({pointerEvents:f(i)?`none`:`all`})},null,12,we)),i.shape===`image`?((0,e.openBlock)(),(0,e.createElementBlock)(e.Fragment,{key:9},[(0,e.createElementVNode)(`text`,{x:i.width/2,y:i.height+10,"text-anchor":`middle`,"dominant-baseline":`hanging`,fill:i.textColor||`#333`,"font-size":i.fontSize||14,style:{"pointer-events":`none`}},(0,e.toDisplayString)(i.label),9,Te),i.description?((0,e.openBlock)(),(0,e.createElementBlock)(`text`,{key:0,x:i.width/2,y:i.height+10+(i.fontSize||14)+2,"text-anchor":`middle`,"dominant-baseline":`hanging`,fill:`#999`,"font-size":`11`,style:{"pointer-events":`none`}},(0,e.toDisplayString)(i.description),9,Ee)):(0,e.createCommentVNode)(``,!0)],64)):i.shape===`group`&&i.id!==t.expandedGroupId?((0,e.openBlock)(),(0,e.createElementBlock)(`text`,{key:10,x:i.width/2,y:i.height+10,"text-anchor":`middle`,"dominant-baseline":`hanging`,fill:i.textColor||`#333`,"font-size":i.fontSize||14,style:{"pointer-events":`none`}},(0,e.toDisplayString)(i.label),9,De)):i.shape===`group`?(0,e.createCommentVNode)(``,!0):((0,e.openBlock)(),(0,e.createElementBlock)(e.Fragment,{key:11},[(0,e.createElementVNode)(`text`,{x:i.width/2,y:i.height/2-(i.description?6:0),"text-anchor":`middle`,"dominant-baseline":`central`,fill:i.textColor||`#333`,"font-size":i.fontSize||14,style:{"pointer-events":`none`}},(0,e.toDisplayString)(i.label),9,$),i.description?((0,e.openBlock)(),(0,e.createElementBlock)(`text`,{key:0,x:i.width/2,y:i.height/2+12,"text-anchor":`middle`,"dominant-baseline":`central`,fill:`#999`,"font-size":`11`,style:{"pointer-events":`none`}},(0,e.toDisplayString)(i.description),9,Oe)):(0,e.createCommentVNode)(``,!0)],64)),t.selectedIds.includes(i.id)&&!f(i)?((0,e.openBlock)(),(0,e.createElementBlock)(`g`,ke,[(0,e.createElementVNode)(`rect`,{x:i.width-5,y:i.height-5,width:`10`,height:`10`,fill:`#409EFF`,stroke:`#fff`,"stroke-width":`1`,style:{cursor:`nwse-resize`},onMousedown:(0,e.withModifiers)(e=>n.$emit(`start-resize`,i,`se`,e),[`stop`])},null,40,Ae),(0,e.createElementVNode)(`rect`,{x:-5,y:i.height-5,width:`10`,height:`10`,fill:`#409EFF`,stroke:`#fff`,"stroke-width":`1`,style:{cursor:`nesw-resize`},onMousedown:(0,e.withModifiers)(e=>n.$emit(`start-resize`,i,`sw`,e),[`stop`])},null,40,je),(0,e.createElementVNode)(`rect`,{x:i.width-5,y:-5,width:`10`,height:`10`,fill:`#409EFF`,stroke:`#fff`,"stroke-width":`1`,style:{cursor:`nesw-resize`},onMousedown:(0,e.withModifiers)(e=>n.$emit(`start-resize`,i,`ne`,e),[`stop`])},null,40,Me),(0,e.createElementVNode)(`rect`,{x:-5,y:-5,width:`10`,height:`10`,fill:`#409EFF`,stroke:`#fff`,"stroke-width":`1`,style:{cursor:`nwse-resize`},onMousedown:(0,e.withModifiers)(e=>n.$emit(`start-resize`,i,`nw`,e),[`stop`])},null,40,Ne)])):(0,e.createCommentVNode)(``,!0),(t.selectedIds.includes(i.id)||t.connectingMode)&&!f(i)&&!(t.editingPolygon&&t.editingPolygon.id===i.id)?((0,e.openBlock)(),(0,e.createElementBlock)(`g`,Pe,[((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(h(i),(t,r)=>((0,e.openBlock)(),(0,e.createElementBlock)(`circle`,{key:r,cx:t.x,cy:t.y,r:`4`,fill:`#409EFF`,stroke:`#fff`,"stroke-width":`1`,style:{cursor:`crosshair`},onMousedown:(0,e.withModifiers)(e=>n.$emit(`start-connect`,i,t,e),[`stop`])},null,40,Fe))),128))])):(0,e.createCommentVNode)(``,!0),t.editingPolygon&&t.editingPolygon.id===i.id?((0,e.openBlock)(),(0,e.createElementBlock)(`text`,{key:14,x:i.width/2,y:i.height+16,"text-anchor":`middle`,fill:`#409EFF`,"font-size":`11`,style:{"pointer-events":`none`}},`双击退出编辑`,8,Ie)):(0,e.createCommentVNode)(``,!0)],44,he))),128)),((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(t.connections,r=>((0,e.openBlock)(),(0,e.createElementBlock)(`g`,{key:r.id,style:(0,e.normalizeStyle)(p(r)?`pointer-events:none;opacity:0.5;`:``)},[(0,e.createElementVNode)(`path`,{d:g(r),fill:`none`,stroke:t.selectedId===r.id?`#409EFF`:`#666`,"stroke-width":r.lineWidth||2,"stroke-dasharray":r.dashed?`6,3`:`none`,"marker-end":`url(#arrowhead-end)`,"pointer-events":`stroke`,style:{cursor:`pointer`},onMousedown:(0,e.withModifiers)(e=>n.$emit(`select`,r,`connection`,e),[`stop`])},null,40,Le),r.label?((0,e.openBlock)(),(0,e.createElementBlock)(`text`,{key:0,x:_(r).x,y:_(r).y-6,"text-anchor":`middle`,fill:`#666`,"font-size":`12`},(0,e.toDisplayString)(r.label),9,Re)):(0,e.createCommentVNode)(``,!0)],4))),128)),t.drawingConn?((0,e.openBlock)(),(0,e.createElementBlock)(`line`,{key:0,x1:t.drawingConn.x1,y1:t.drawingConn.y1,x2:t.drawingConn.x2,y2:t.drawingConn.y2,stroke:`#409EFF`,"stroke-width":`2`,"stroke-dasharray":`4,4`},null,8,ze)):(0,e.createCommentVNode)(``,!0),t.editingPolygon?((0,e.openBlock)(),(0,e.createElementBlock)(`g`,Be,[((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(m.value,(n,r)=>((0,e.openBlock)(),(0,e.createElementBlock)(`circle`,{key:`pv-`+r,cx:t.editingPolygon.x+n.x,cy:t.editingPolygon.y+n.y,r:`5`,fill:`#409EFF`,stroke:`#fff`,"stroke-width":`1.5`,style:{cursor:`move`},onMousedown:(0,e.withModifiers)(e=>x(t.editingPolygon,r,e),[`stop`])},null,40,Ve))),128))])):(0,e.createCommentVNode)(``,!0),((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(l.value,n=>((0,e.openBlock)(),(0,e.createElementBlock)(`g`,{key:`img-`+n.id},[n.shape===`group`&&n.imageUrl&&n.id!==t.expandedGroupId?((0,e.openBlock)(),(0,e.createElementBlock)(`image`,{key:0,href:n.imageUrl,x:n.x,y:n.y,width:n.width,height:n.height,preserveAspectRatio:`xMidYMid slice`,"clip-path":`url(#clip-${n.id})`,style:{"pointer-events":`none`}},null,8,He)):(0,e.createCommentVNode)(``,!0)]))),128))],40,pe)),s.value&&s.value.popupConfig&&s.value.popupConfig.length?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:0,class:`popup-tooltip`,style:(0,e.normalizeStyle)({left:c.value.x+12+`px`,top:c.value.y+12+`px`})},[((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(s.value.popupConfig,(t,n)=>((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:n,class:`popup-tooltip-row`},[(0,e.createElementVNode)(`span`,Ue,(0,e.toDisplayString)(t.key)+`:`,1),(0,e.createElementVNode)(`span`,We,(0,e.toDisplayString)(t.value),1)]))),128))],4)):(0,e.createCommentVNode)(``,!0)],512))}},[[`__scopeId`,`data-v-f89f4797`]]);function Ke(t,{roomPrefix:n,syncKey:r=`_data`}={}){let i=new o.Doc,a=(0,e.ref)(!1),c=(0,e.ref)(!1),l=(0,e.ref)(!1),u=(0,e.ref)(!1),d=(0,e.ref)([]),f=null,p=null,m=null,h=null,g=!1,_=null,v=`ws://${window.location.hostname||`localhost`}:1234`,y=`${n}-${t}`,b=()=>{x(),_=setInterval(()=>{if(f&&f.connection&&f.connection.ws&&f.connection.ws.readyState===WebSocket.CLOSED)try{f.connect()}catch(e){console.warn(`[ExplosionCollab] reconnect failed:`,e)}},3e4)},x=()=>{_&&=(clearInterval(_),null)};f=new s.HocuspocusProvider({url:v,name:y,document:i,connect:!1,reconnect:!0,onConnect:()=>{a.value=!0,b()},onClose:()=>{a.value=!1,c.value=!1},onSynced:({state:e})=>{c.value=e}}),f.awareness.on(`change`,()=>{d.value=Array.from(f.awareness.getStates().entries()).filter(([e,t])=>t.user).map(([e,t])=>({clientId:e,...t.user}))}),p=i.getMap(n);let S=i.getMap(`_meta`);S.observe(e=>{e.keysChanged.has(`_closed`)&&(u.value=S.get(`_closed`)===!0,u.value&&console.log(`[ExplosionCollab] collaboration closed by owner`))});let C=()=>{f.connect()},w=()=>{if(x(),f){try{f.disconnect(),f.destroy()}catch(e){console.warn(`[ExplosionCollab] disconnect error:`,e)}f=null}a.value=!1,c.value=!1,d.value=[]},T=(e={})=>(g=!1,f.connect(),new Promise(t=>{let n=()=>{f&&c.value?(g=!0,e.userInfo&&f.awareness.setLocalStateField(`user`,e.userInfo),t()):setTimeout(n,100)};setTimeout(n,200)})),E=e=>{!a.value||!p||(m&&clearTimeout(m),m=setTimeout(()=>{let t=JSON.stringify(e);h=t,i.transact(()=>{p.set(r,t)})},50))},D=()=>{if(!p)return null;let e=p.get(r);if(!e)return null;h=e;try{return JSON.parse(e)}catch{return null}},O=e=>{f&&f.awareness.setLocalStateField(`user`,{id:e.id||`user-${Date.now()}`,name:e.name||`用户${Math.floor(Math.random()*1e3)}`,color:e.color||`#${Math.floor(Math.random()*16777215).toString(16).padStart(6,`0`)}`,...e})},k=()=>{u.value=!0,i.transact(()=>{S.set(`_closed`,!0)}),g=!1,f?.awareness?.setLocalState(null),w(),l.value=!1},A=()=>S.get(`_closed`)===!0?(u.value=!0,!0):!1,j=()=>{w(),i.destroy()};return(0,e.onUnmounted)(()=>j()),{ydoc:i,provider:f,yMap:p,isConnected:a,isSynced:c,isCollabOwner:l,collaborationClosed:u,onlineUsers:d,connect:C,disconnect:w,init:T,pushToYjs:E,pullFromYjs:D,setLocalUser:O,closeCollaboration:k,checkCollaborationClosed:A,destroy:j,_getSyncReady:()=>g,_setSyncReady:e=>{g=e},_getLastSyncedValue:()=>h,_setLastSyncedValue:e=>{h=e}}}var qe=(e,{onRemoteChange:t}={})=>{let n=Ke(e,{roomPrefix:`explosion-diagram`,syncKey:`_data`});t&&n.yMap.observe(e=>{if(!n._getSyncReady())return;let r=n.yMap.get(`_data`);if(r&&r!==n._getLastSyncedValue()){n._setLastSyncedValue(r);try{t(JSON.parse(r))}catch(e){console.error(`[EV-Diagram] remote data parse error:`,e)}}});let r=e=>{n.pushToYjs({title:e.title,components:e.components,connections:e.connections})},i=()=>n.pullFromYjs();return{...n,pushToYjs:r,pullFromYjs:i}},Je={class:`explosion-diagram-editor`},Ye={key:0,class:`group-breadcrumb`},Xe={class:`editor-body`},Ze={key:0,class:`props-panel`},Qe={class:`prop-row`},$e={class:`prop-row`},et={class:`prop-row`},tt={class:`prop-row`},nt={class:`prop-row`},rt={key:0,class:`group-image-preview`},it=[`src`],at={class:`prop-row`},ot={class:`prop-row`},st={class:`prop-row`},ct={class:`prop-row`},lt={class:`prop-row`},ut={class:`prop-row`},dt={class:`prop-row`},ft={class:`prop-row`},pt={class:`prop-row`},mt={style:{"margin-bottom":`8px`,display:`flex`,gap:`8px`}},ht=`explosion-diagram`,gt=_({__name:`ExplosionDiagramEditor`,props:{docId:{type:[Number,String],default:null},apiBase:{type:String,default:`/api`},saveApi:{type:[String,Function],default:null},loadApi:{type:[String,Function],default:null},wsUrl:{type:String,default:``},user:{type:Object,default:null},uiConfig:{type:Object,default:()=>({})}},setup(t){let o=t,s=(0,e.computed)(()=>({backButton:`show`,titleEditable:!0,authorEditable:!0,...o.uiConfig})),c=(0,e.computed)(()=>o.docId??l.params.id),l=(0,n.useRoute)(),u=(0,n.useRouter)(),d=(0,e.ref)(o.docId??null),f=(0,e.ref)(!1),p=(0,e.ref)(!1),{saveVersion:m}=V(),h=R(),g=(0,e.reactive)({title:`爆炸图`,components:[],connections:[]}),_=(0,e.ref)(!1),v=(0,e.ref)(!1),y=(0,e.ref)(!1),b=null,x=(0,e.ref)([]),S=(0,e.ref)(-1),C=(0,e.ref)(null),w=(0,e.ref)([]),T=(0,e.ref)(null),E=(0,e.ref)(null),D=(0,e.ref)(!1),O=(0,e.ref)(null),k=(0,e.ref)(null),A=(0,e.ref)([]),j=(0,e.ref)(null),M=(0,e.ref)(null),N=(0,e.ref)(!1),P=(0,e.ref)(null),F=(0,e.ref)([]),I=(0,e.computed)(()=>A.value.length?A.value[A.value.length-1]:null),L=(0,e.computed)(()=>{if(!I.value)return g.components;let e=t=>{let n=new Set([t]);return g.components.filter(e=>e.groupId===t).forEach(t=>{n.add(t.id),t.shape===`group`&&e(t.id).forEach(e=>n.add(e))}),n},t=e(I.value);return g.components.filter(e=>t.has(e.id))}),ee=(0,e.computed)(()=>{if(!I.value)return g.connections;let e=new Set(L.value.map(e=>e.id));return g.connections.filter(t=>e.has(t.fromId)||e.has(t.toId))}),te=(0,e.computed)(()=>{if(!I.value)return`0 0 2000 1500`;let e=g.components.find(e=>e.id===I.value);if(!e)return`0 0 2000 1500`;let t=L.value.filter(e=>e.id!==I.value);if(!t.length)return`${e.x} ${e.y} ${e.width} ${e.height}`;let n=1/0,r=1/0,i=-1/0,a=-1/0;return t.forEach(e=>{n=Math.min(n,e.x),r=Math.min(r,e.y),i=Math.max(i,e.x+e.width),a=Math.max(a,e.y+e.height)}),`${n-40} ${r-40} ${i-n+80} ${a-r+80}`}),ne=e=>g.components.find(t=>t.id===e),z=()=>{x.value=x.value.slice(0,S.value+1),x.value.push(JSON.stringify({components:g.components,connections:g.connections})),S.value=x.value.length-1,B()},B=()=>{_.value&&b&&b.pushToYjs(g)},H=()=>{if(S.value>0){S.value--;let e=JSON.parse(x.value[S.value]);g.components=e.components,g.connections=e.connections,B()}},U=()=>{if(S.value<x.value.length-1){S.value++;let e=JSON.parse(x.value[S.value]);g.components=e.components,g.connections=e.connections,B()}},W=()=>{},G=()=>{},K=0,q=()=>`comp-${++K}-${Date.now()}`,J={rect:[140,60],circle:[80,80],diamond:[100,80],triangle:[100,80],text:[120,40],image:[150,150],polygon:[150,120],svg:[120,120],group:[200,150]},Y=(0,e.ref)(null),ie=(0,e.ref)(null),X=null,ae=e=>{if(e===`image`){X=`image`,Y.value?.click();return}if(e===`svg`){X=`svg`,ie.value?.click();return}if(e===`polygon`){let e={id:q(),shape:`polygon`,label:`${g.components.length+1}`,description:``,x:300+Math.random()*200,y:200+Math.random()*200,width:150,height:120,points:`0,60 40,0 110,0 150,60 110,120 40,120`,fill:`#fff`,stroke:`#ccc`,textColor:`#333`,fontSize:14};I.value&&(e.groupId=I.value),g.components.push(e),z();return}if(e===`group`){let e={id:q(),shape:`group`,label:`${g.components.length+1}`,description:``,x:300+Math.random()*200,y:200+Math.random()*200,width:200,height:150,childIds:[],fill:`transparent`,stroke:`#409EFF`,textColor:`#333`,fontSize:14};I.value&&(e.groupId=I.value),g.components.push(e),z();return}let[t,n]=J[e]||[120,60],r={id:q(),shape:e,label:`${g.components.length+1}`,description:``,x:300+Math.random()*200,y:200+Math.random()*200,width:t,height:n,fill:`#fff`,stroke:`#ccc`,textColor:`#333`,fontSize:14};I.value&&(r.groupId=I.value),g.components.push(r),z()},se=async e=>{let t=e.target.files?.[0];if(!t)return;let n=new FormData;n.append(`file`,t),X===`image`&&n.append(`remove_bg`,`true`);try{let e=await a.default.post(`${o.apiBase}/files/upload/image`,n),r=e.data.url||e.data.file_path;if(X===`image`){let e={id:q(),shape:`image`,label:`${g.components.length+1}`,description:``,x:300+Math.random()*200,y:200+Math.random()*200,width:150,height:150,imageUrl:r,fill:`transparent`,stroke:`#ccc`,textColor:`#333`,fontSize:14};I.value&&(e.groupId=I.value),g.components.push(e)}else if(X===`svg`){let e=await t.text(),n=new DOMParser().parseFromString(e,`image/svg+xml`).querySelector(`svg`),r=n?.getAttribute(`width`)||100,i=n?.getAttribute(`height`)||100,a=n?.getAttribute(`viewBox`),o=parseFloat(r),s=parseFloat(i);if(a){let e=a.split(/[\s,]+/).map(Number);o=e[2]||o,s=e[3]||s}let c=n?.innerHTML||``,l={id:q(),shape:`svg`,label:`${g.components.length+1}`,description:``,x:300+Math.random()*200,y:200+Math.random()*200,width:o,height:s,svgContent:c,svgWidth:o,svgHeight:s,fill:`#fff`,stroke:`#ccc`,textColor:`#333`,fontSize:14};I.value&&(l.groupId=I.value),g.components.push(l)}z()}catch{r.ElMessage.error(`上传失败`)}e.target.value=``},ce=(e,t,n)=>{if(n&&(n.ctrlKey||n.metaKey)){w.value.includes(e.id)?w.value=w.value.filter(t=>t!==e.id):w.value.push(e.id),C.value=w.value[w.value.length-1]||null,E.value=C.value?g.components.find(e=>e.id===C.value):null,T.value=`component`;return}C.value=e.id,w.value=[e.id],T.value=t,E.value=e,k.value=null},Z=()=>{C.value=null,w.value=[],T.value=null,E.value=null,k.value=null},le=(e,t,n)=>{let r=ue(n),i=e.x,a=e.y,o=e.width,s=e.height,c=e.shape===`polygon`?(e.points||``).trim().split(/\s+/).map(e=>e.split(`,`).map(Number)):null,l=e.shape===`group`,u=l?g.components.filter(t=>t.groupId===e.id&&t.id!==e.id):[],d=u.map(e=>({id:e.id,x:e.x,y:e.y,w:e.width,h:e.height})),f=new Set(l?u.map(e=>e.id):[e.id]),p=g.connections.filter(e=>f.has(e.fromId)||f.has(e.toId)).map(e=>({conn:e,fromAnchor:e.fromAnchor?{x:e.fromAnchor.x,y:e.fromAnchor.y}:null,toAnchor:e.toAnchor?{x:e.toAnchor.x,y:e.toAnchor.y}:null})),m=n=>{let m=ue(n),h=m.x-r.x,g=m.y-r.y,_=o,v=s,y=i,b=a;if(t===`se`?(_=o+h,v=s+g):t===`sw`?(y=i+h,_=o-h,v=s+g):t===`ne`?(_=o+h,b=a+g,v=s-g):t===`nw`&&(y=i+h,b=a+g,_=o-h,v=s-g),_=Math.max(30,_),v=Math.max(20,v),e.x=y,e.y=b,e.width=_,e.height=v,c&&o>0&&s>0&&(e.points=c.map(([e,t])=>`${Math.round(e*_/o)},${Math.round(t*v/s)}`).join(` `)),o>0&&s>0){let e=_/o,t=v/s;l&&u.forEach((n,r)=>{let o=d[r];if(n.x=y+(o.x-i)*e,n.y=b+(o.y-a)*t,n.width=o.w*e,n.height=o.h*t,n.shape===`polygon`&&n.points){let r=o._origPoints||(n.points||``).trim().split(/\s+/).map(e=>e.split(`,`).map(Number));o._origPoints||=r,n.points=r.map(([n,r])=>`${Math.round(n*e)},${Math.round(r*t)}`).join(` `)}}),p.forEach(({conn:n,fromAnchor:r,toAnchor:i})=>{r&&f.has(n.fromId)&&(n.fromAnchor={x:r.x*e,y:r.y*t}),i&&f.has(n.toId)&&(n.toAnchor={x:i.x*e,y:i.y*t})})}},h=()=>{document.removeEventListener(`mousemove`,m),document.removeEventListener(`mouseup`,h),z()};document.addEventListener(`mousemove`,m),document.addEventListener(`mouseup`,h)},ue=e=>{let t=document.querySelector(`.diagram-svg`);if(!t)return{x:0,y:0};let n=t.getBoundingClientRect(),r=t.viewBox.baseVal;return{x:(e.clientX-n.left)/n.width*r.width+r.x,y:(e.clientY-n.top)/n.height*r.height+r.y}},de=(e,t,n,r=!1)=>{let i=g.components.find(t=>t.id===e);if(!i)return;let a=t-i.x,o=n-i.y;i.x=t,i.y=n,i.shape===`group`&&i.id&&g.components.forEach(e=>{e.groupId===i.id&&e.id!==i.id&&(e.x+=a,e.y+=o)}),r&&z()},pe=e=>{if(e.shape===`group`){_e(e);return}if(e.shape===`polygon`){k.value&&k.value.id===e.id?k.value=null:k.value=e;return}r.ElMessageBox.prompt(`编辑标签`,`组件`,{inputValue:e.label,inputPlaceholder:`标签文字`}).then(({value:t})=>{t!==null&&(e.label=t)}).catch(()=>{})},Q=()=>{C.value&&(T.value===`component`?(g.components=g.components.filter(e=>e.id!==C.value),g.connections=g.connections.filter(e=>e.fromId!==C.value&&e.toId!==C.value)):g.connections=g.connections.filter(e=>e.id!==C.value),Z(),z())},me=(e,t,n)=>{D.value=!0;let r=e.x+t.x,i=e.y+t.y;O.value={x1:r,y1:i,x2:r,y2:i};let a=n.target.closest(`svg`),o=e=>{if(!a)return;let t=a.getBoundingClientRect(),n=a.viewBox.baseVal;O.value.x2=(e.clientX-t.left)/t.width*n.width+n.x,O.value.y2=(e.clientY-t.top)/t.height*n.height+n.y},s=n=>{if(document.removeEventListener(`mousemove`,o),document.removeEventListener(`mouseup`,s),O.value=null,!a){D.value=!1;return}let r=a.getBoundingClientRect(),i=a.viewBox.baseVal,c=(n.clientX-r.left)/r.width*i.width+i.x,l=(n.clientY-r.top)/r.height*i.height+i.y,u=null,d=30;for(let t of g.components){if(t.id===e.id)continue;let n=[{x:t.x+t.width/2,y:t.y},{x:t.x+t.width,y:t.y+t.height/2},{x:t.x+t.width/2,y:t.y+t.height},{x:t.x,y:t.y+t.height/2}];for(let e of n){let n=Math.sqrt((c-e.x)**2+(l-e.y)**2);n<d&&(d=n,u=t)}}if(!u){for(let t of g.components)if(t.id!==e.id&&c>=t.x&&c<=t.x+t.width&&l>=t.y&&l<=t.y+t.height){u=t;break}}u&&(g.connections.find(t=>t.fromId===e.id&&t.toId===u.id)||(g.connections.push({id:q(),fromId:e.id,toId:u.id,fromAnchor:{x:t.x,y:t.y},toAnchor:{x:u.width/2,y:u.height/2},label:``,lineWidth:2,dashed:!1}),z())),D.value=!1};document.addEventListener(`mousemove`,o),document.addEventListener(`mouseup`,s)},he=()=>{let e=g.components.filter(e=>w.value.includes(e.id));if(e.length<2){r.ElMessage.warning(`请至少选择2个零件进行组合`);return}let t=1/0,n=1/0,i=-1/0,a=-1/0;e.forEach(e=>{t=Math.min(t,e.x),n=Math.min(n,e.y),i=Math.max(i,e.x+e.width),a=Math.max(a,e.y+e.height)});let o=q();e.forEach(e=>{e.groupId=o});let s={id:o,shape:`group`,label:`组合`,description:``,x:t-10,y:n-10,width:i-t+20,height:a-n+20,fill:`transparent`,stroke:`#409EFF`,textColor:`#333`,fontSize:14,movable:!1};I.value&&(s.groupId=I.value),g.components=[...g.components.filter(e=>!w.value.includes(e.id)),s,...e],w.value=[],z()},ge=e=>{let t=g.components.filter(t=>t.groupId===e.id&&t.id!==e.id);if(!t.length)return;let n=1/0,r=1/0,i=-1/0,a=-1/0;t.forEach(e=>{n=Math.min(n,e.x),r=Math.min(r,e.y),i=Math.max(i,e.x+e.width),a=Math.max(a,e.y+e.height)}),e.x=n-10,e.y=r-10,e.width=i-n+20,e.height=a-r+20,z()},_e=e=>{A.value.push(e.id),Z()},ve=()=>{A.value.length&&(A.value.pop(),Z())},ye=e=>{A.value=A.value.slice(0,e+1),Z()},be=async e=>{let t=e.target.files?.[0];if(!t||!E.value)return;let n=new FormData;n.append(`file`,t);try{let e=await a.default.post(`${o.apiBase}/files/upload/image`,n);E.value.imageUrl=e.data.url||e.data.file_path,ge(E.value)}catch{r.ElMessage.error(`上传失败`)}e.target.value=``},xe=()=>{let e=g.components;if(!e.length)return;let t=Math.ceil(Math.sqrt(e.length));g.components=e.map((e,n)=>({...e,x:100+n%t*200,y:100+Math.floor(n/t)*120})),z()},Se=()=>{o.docId??u.push(`/`)},Ce=[`我可以帮您优化爆炸图布局、检查组件标注,或者提供装配顺序建议。请问有什么需要帮助的?`,`这个爆炸图的组件分布很清晰。建议检查连接线是否准确反映了实际装配关系。`,`根据当前的爆炸图结构,我建议为关键组件添加编号说明,便于阅读理解。`,`我可以帮您检查爆炸图中是否有遗漏的零部件或多余的标注。需要我逐个分析吗?`,`建议在爆炸图中添加装配方向指示箭头,这样可以让装配流程更加直观。`,`这个爆炸图的层次感不错。如果需要,我可以帮您优化组件间距和标注位置。`,`我可以帮您将爆炸图的数据导出为BOM清单格式,方便采购和生产管理。`,`文档中的组件信息很详细。建议补充每个组件的规格参数和供应商信息。`],we=async(e,t={})=>{let n=d.value?`${ht}-${d.value}`:null;await h.sendMessage(e,{...t,roomId:n});let r=t.mentionedUser,i=r&&r.toLowerCase().includes(`ai`),a=h.collabUsers.value.filter(e=>e.name!==h.currentUser.value.name);(!r||i||a.length===0)&&(h.loading.value=!0,setTimeout(()=>{h.sendAiMessage(Ce[Math.floor(Math.random()*Ce.length)],n),h.loading.value=!1},800+Math.random()*1200))},Te=()=>{let e=d.value?`${ht}-${d.value}`:null;h.clearMessages(e)},Ee=()=>{if(!d.value){r.ElMessage.warning(`请先保存文档`);return}p.value=!0},De=e=>{try{let t=typeof e==`string`?JSON.parse(e):e;t.components&&(g.components=t.components),t.connections&&(g.connections=t.connections),Z()}catch(e){console.error(`Version apply error:`,e)}},$=async()=>{if(_.value&&b?.collaborationClosed.value&&!y.value){r.ElMessage.warning(`协作已关闭,无法保存`);return}try{let e={title:g.title,view_type:`diagram`,config:JSON.stringify({components:g.components,connections:g.connections})};if(typeof o.saveApi==`function`){let t=await o.saveApi(e,d.value);t?.id&&(d.value=t.id)}else if(typeof o.saveApi==`string`)d.value?await a.default.put(o.saveApi,e):d.value=(await a.default.post(o.saveApi,e)).data.id;else{let t=o.apiBase;d.value?await a.default.put(`${t}/explosion-views/${d.value}`,e):d.value=(await a.default.post(`${t}/explosion-views/`,e)).data.id}r.ElMessage.success(`保存成功`),m({documentId:d.value,docType:`diagram`,content:JSON.stringify({components:g.components,connections:g.connections}),userId:String(h.currentUser.value?.id||``),userName:h.currentUser.value?.name||`未知`})}catch{r.ElMessage.error(`保存失败`)}},Oe=async()=>{if(c.value)try{let e;if(typeof o.loadApi==`function`)e=await o.loadApi(c.value);else if(typeof o.loadApi==`string`)e=(await a.default.get(o.loadApi)).data;else{let t=o.apiBase;e=(await a.default.get(`${t}/explosion-views/${c.value}`)).data}if(d.value=e.id,g.title=e.title,e.config){let t=JSON.parse(e.config);g.components=t.components||[],g.connections=t.connections||[]}z()}catch(e){console.error(`load error`,e)}else z()},ke=async e=>{try{let t=document.querySelector(`.diagram-svg`);if(!t)return r.ElMessage.error(`未找到SVG元素`);let n=new XMLSerializer().serializeToString(t);if(e===`svg`){let e=new Blob([n],{type:`image/svg+xml;charset=utf-8`}),t=URL.createObjectURL(e),r=document.createElement(`a`);r.href=t,r.download=`${g.title||`爆炸图`}.svg`,r.click(),URL.revokeObjectURL(t)}else if(e===`png`){let e=document.createElement(`canvas`),t=e.getContext(`2d`),r=new Image,i=new Blob([n],{type:`image/svg+xml;charset=utf-8`}),a=URL.createObjectURL(i);r.onload=()=>{e.width=r.width,e.height=r.height,t.fillStyle=`#fff`,t.fillRect(0,0,e.width,e.height),t.drawImage(r,0,0),e.toBlob(e=>{let t=document.createElement(`a`);t.href=URL.createObjectURL(e),t.download=`${g.title||`爆炸图`}.png`,t.click()}),URL.revokeObjectURL(a)},r.src=a}else r.ElMessage.info(`导出 ${e} 开发中`)}catch{r.ElMessage.error(`导出失败`)}},Ae=e=>{b&&=(b.destroy(),null),b=qe(e,{onRemoteChange:e=>{e.title&&(g.title=e.title),e.components&&(g.components=e.components),e.connections&&(g.connections=e.connections),Z()}}),b._setSyncReady(!1)},je=async()=>{if(_.value)return;if(!d.value&&(await $(),!d.value)){r.ElMessage.error(`请先保存文档`);return}Ae(String(d.value)),b.connect();let e={name:`用户${Math.floor(Math.random()*1e3)}`,color:`#${Math.floor(Math.random()*16777215).toString(16).padStart(6,`0`)}`},t=()=>{if(b.provider&&b.provider.synced){b._setSyncReady(!0),b.setLocalUser(e);let t=b.pullFromYjs();t?(t.title&&(g.title=t.title),t.components&&(g.components=t.components),t.connections&&(g.connections=t.connections),Z()):g.components.length>0&&b.pushToYjs(g),_.value=!0,y.value=!0,v.value=!1,h.setCollabContext({ydoc:b.ydoc,provider:b.provider,onlineUsers:b.onlineUsers}),h.setCurrentUser({id:b.provider.awareness.clientID,name:e.name,color:e.color}),r.ElMessage.success(`协作已开启`)}else setTimeout(t,100)};setTimeout(t,200)},Me=()=>{b&&(b.closeCollaboration(),_.value=!1,y.value=!1,r.ElMessage.info(`协作已关闭`))},Ne=()=>{let e=l.params.id;if(!e)return;Ae(e),b.connect();let t={name:`协作人${Math.floor(Math.random()*1e3)}`,color:`#${Math.floor(Math.random()*16777215).toString(16).padStart(6,`0`)}`},n=()=>{if(b.provider&&b.provider.synced){if(b.checkCollaborationClosed()){b.disconnect(),_.value=!1,r.ElMessage.warning(`该协作已关闭,无法加入`);return}b._setSyncReady(!0),b.setLocalUser(t);let e=b.pullFromYjs();e&&(e.title&&(g.title=e.title),e.components&&(g.components=e.components),e.connections&&(g.connections=e.connections),Z()),_.value=!0,y.value=!1,h.setCollabContext({ydoc:b.ydoc,provider:b.provider,onlineUsers:b.onlineUsers}),h.setCurrentUser({id:b.provider.awareness.clientID,name:t.name,color:t.color}),r.ElMessage.success(`已加入协作`)}else setTimeout(n,100)};setTimeout(n,200)},Pe=()=>{_.value?Me():je()},Fe=async()=>{if(_.value||await je(),!d.value&&(await $(),!d.value)){r.ElMessage.warning(`请先保存文档后再分享`);return}let e=`${window.location.origin}/explosion-diagram/${d.value}?collab=1`;try{await navigator.clipboard.writeText(e),r.ElMessage.success(`协作链接已复制到剪贴板`)}catch{r.ElMessage.info(`协作链接: `+e)}},Ie=()=>{F.value=(E.value?.popupConfig||[]).map(e=>({...e})),N.value=!0},Le=()=>{F.value.push({key:``,value:``})},Re=()=>{E.value.popupConfig=F.value.filter(e=>e.key.trim()),N.value=!1,z()},ze=e=>{let t=e.target.files?.[0];if(!t)return;let n=new FileReader;n.onload=()=>{try{let e=JSON.parse(n.result);Array.isArray(e)?F.value=e.map(e=>({key:String(e.key||``),value:String(e.value||``)})):typeof e==`object`&&(F.value=Object.entries(e).map(([e,t])=>({key:e,value:String(t)}))),r.ElMessage.success(`导入成功`)}catch{r.ElMessage.error(`JSON解析失败`)}},n.readAsText(t),e.target.value=``},Be=()=>{let e=JSON.stringify({title:g.title,components:g.components,connections:g.connections},null,2),t=new Blob([e],{type:`application/json`}),n=URL.createObjectURL(t),i=document.createElement(`a`);i.href=n,i.download=`${g.title||`爆炸图`}.json`,i.click(),URL.revokeObjectURL(n),r.ElMessage.success(`导出成功`)},Ve=e=>{let t=e.target.files?.[0];if(!t)return;let n=new FileReader;n.onload=()=>{try{let e=JSON.parse(n.result);e.title&&(g.title=e.title),e.components&&(g.components=e.components),e.connections&&(g.connections=e.connections),Z(),z(),r.ElMessage.success(`导入成功`)}catch{r.ElMessage.error(`JSON解析失败`)}},n.readAsText(t),e.target.value=``};(0,e.onMounted)(async()=>{let e=o.user?.name||localStorage.getItem(`editor-user-name`)||`用户${Math.floor(Math.random()*1e3)}`;localStorage.setItem(`editor-user-name`,e),h.setCurrentUser({id:o.user?.id||Date.now(),name:e,color:o.user?.color||`#409eff`}),await Oe(),c.value&&l.query.collab===`1`&&Ne()});let He=e=>{e.key===`Delete`&&C.value&&Q(),(e.ctrlKey||e.metaKey)&&e.key===`z`&&(e.preventDefault(),H()),(e.ctrlKey||e.metaKey)&&e.key===`y`&&(e.preventDefault(),U())};return(0,e.onMounted)(()=>document.addEventListener(`keydown`,He)),(0,e.onUnmounted)(()=>{document.removeEventListener(`keydown`,He),b&&=(b.destroy(),null)}),(t,n)=>{let r=(0,e.resolveComponent)(`el-breadcrumb-item`),a=(0,e.resolveComponent)(`el-breadcrumb`),o=(0,e.resolveComponent)(`el-icon`),c=(0,e.resolveComponent)(`el-button`),u=(0,e.resolveComponent)(`el-tooltip`),m=(0,e.resolveComponent)(`el-input`),v=(0,e.resolveComponent)(`el-input-number`),R=(0,e.resolveComponent)(`el-color-picker`),B=(0,e.resolveComponent)(`el-switch`),V=(0,e.resolveComponent)(`el-table-column`),K=(0,e.resolveComponent)(`el-table`),q=(0,e.resolveComponent)(`el-dialog`),J=(0,e.resolveComponent)(`Monitor`);return(0,e.openBlock)(),(0,e.createElementBlock)(`div`,Je,[(0,e.createVNode)(fe,{title:g.title,"onUpdate:title":n[0]||=e=>g.title=e,"can-undo":S.value>0,"can-redo":S.value<x.value.length-1,"connecting-mode":D.value,"is-connected":_.value,"online-users":(0,e.unref)(b)?(0,e.unref)(b).onlineUsers.value:[],"is-join-mode":(0,e.unref)(l).query.collab===`1`,"show-back-button":s.value.backButton===`show`,"title-disabled":!s.value.titleEditable,onBack:Se,onAddComponent:ae,onToggleConnecting:n[1]||=e=>D.value=!D.value,onGroupSelected:he,onAutoLayout:xe,onUndo:H,onRedo:U,onZoomIn:W,onZoomOut:G,onExport:ke,onSave:$,onToggleCollab:Pe,onShareCollab:Fe,onExportJson:Be,onImportJson:n[2]||=e=>M.value?.click(),"show-history":!!d.value,onHistory:Ee},null,8,[`title`,`can-undo`,`can-redo`,`connecting-mode`,`is-connected`,`online-users`,`is-join-mode`,`show-back-button`,`title-disabled`,`show-history`]),(0,e.createElementVNode)(`input`,{ref_key:`fileInputRef`,ref:Y,type:`file`,accept:`image/*,.svg`,style:{display:`none`},onChange:se},null,544),(0,e.createElementVNode)(`input`,{ref_key:`svgInputRef`,ref:ie,type:`file`,accept:`.svg`,style:{display:`none`},onChange:se},null,544),(0,e.createElementVNode)(`input`,{ref_key:`groupImageInputRef`,ref:j,type:`file`,accept:`image/*`,style:{display:`none`},onChange:be},null,544),(0,e.createElementVNode)(`input`,{ref_key:`importJsonInputRef`,ref:M,type:`file`,accept:`.json`,style:{display:`none`},onChange:Ve},null,544),A.value.length?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,Ye,[(0,e.createVNode)(a,{separator:`/`},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(r,{onClick:n[3]||=e=>ye(-1),style:{cursor:`pointer`}},{default:(0,e.withCtx)(()=>[...n[27]||=[(0,e.createTextVNode)(`根目录`,-1)]]),_:1}),((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(A.value,(t,n)=>((0,e.openBlock)(),(0,e.createBlock)(r,{key:t,onClick:e=>ye(n),style:{cursor:`pointer`}},{default:(0,e.withCtx)(()=>[(0,e.createTextVNode)((0,e.toDisplayString)(ne(t)?.label||`组合`),1)]),_:2},1032,[`onClick`]))),128))]),_:1}),(0,e.createVNode)(u,{content:`返回上一层`,placement:`bottom`},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(c,{size:`small`,circle:``,onClick:ve},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(o,null,{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.Back))]),_:1})]),_:1})]),_:1})])):(0,e.createCommentVNode)(``,!0),(0,e.createElementVNode)(`div`,Xe,[(0,e.createVNode)(Ge,{components:L.value,connections:ee.value,"selected-id":C.value,"selected-ids":w.value,"connecting-mode":D.value,"drawing-conn":O.value,"editing-polygon":k.value,"view-box":te.value,"is-expanded":!!I.value,"expanded-group-id":I.value,onSelect:ce,onEdit:pe,onClearSelection:Z,onStartConnect:me,onStartResize:le,onMoveComponent:de,onDragPolygonVertex:z},null,8,[`components`,`connections`,`selected-id`,`selected-ids`,`connecting-mode`,`drawing-conn`,`editing-polygon`,`view-box`,`is-expanded`,`expanded-group-id`]),(0,e.createVNode)(e.Transition,{name:`slide`},{default:(0,e.withCtx)(()=>[E.value?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,Ze,[(0,e.createElementVNode)(`h4`,null,(0,e.toDisplayString)(T.value===`component`?`组件属性`:`连线属性`),1),T.value===`component`?((0,e.openBlock)(),(0,e.createElementBlock)(e.Fragment,{key:0},[(0,e.createElementVNode)(`div`,Qe,[n[28]||=(0,e.createElementVNode)(`label`,null,`标签`,-1),(0,e.createVNode)(m,{modelValue:E.value.label,"onUpdate:modelValue":n[4]||=e=>E.value.label=e,size:`small`},null,8,[`modelValue`])]),(0,e.createElementVNode)(`div`,$e,[n[29]||=(0,e.createElementVNode)(`label`,null,`描述`,-1),(0,e.createVNode)(m,{modelValue:E.value.description,"onUpdate:modelValue":n[5]||=e=>E.value.description=e,size:`small`},null,8,[`modelValue`])]),E.value.shape===`group`?((0,e.openBlock)(),(0,e.createElementBlock)(e.Fragment,{key:0},[(0,e.createElementVNode)(`div`,et,[n[30]||=(0,e.createElementVNode)(`label`,null,`宽度`,-1),(0,e.createVNode)(v,{modelValue:E.value.width,"onUpdate:modelValue":n[6]||=e=>E.value.width=e,min:40,max:2e3,size:`small`},null,8,[`modelValue`])]),(0,e.createElementVNode)(`div`,tt,[n[31]||=(0,e.createElementVNode)(`label`,null,`高度`,-1),(0,e.createVNode)(v,{modelValue:E.value.height,"onUpdate:modelValue":n[7]||=e=>E.value.height=e,min:30,max:1500,size:`small`},null,8,[`modelValue`])]),(0,e.createElementVNode)(`div`,nt,[n[34]||=(0,e.createElementVNode)(`label`,null,`显示图片`,-1),E.value.imageUrl?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,rt,[(0,e.createElementVNode)(`img`,{src:E.value.imageUrl,style:{"max-width":`100%`,"max-height":`80px`,border:`1px solid #e4e7ed`,"border-radius":`4px`}},null,8,it),(0,e.createVNode)(c,{size:`small`,type:`danger`,text:``,onClick:n[8]||=e=>E.value.imageUrl=``},{default:(0,e.withCtx)(()=>[...n[32]||=[(0,e.createTextVNode)(`移除`,-1)]]),_:1})])):((0,e.openBlock)(),(0,e.createBlock)(c,{key:1,size:`small`,onClick:n[9]||=e=>j.value?.click()},{default:(0,e.withCtx)(()=>[...n[33]||=[(0,e.createTextVNode)(`上传图片`,-1)]]),_:1}))]),(0,e.createVNode)(c,{size:`small`,onClick:n[10]||=e=>ge(E.value)},{default:(0,e.withCtx)(()=>[...n[35]||=[(0,e.createTextVNode)(`适配子零件`,-1)]]),_:1})],64)):((0,e.openBlock)(),(0,e.createElementBlock)(e.Fragment,{key:1},[(0,e.createElementVNode)(`div`,at,[n[36]||=(0,e.createElementVNode)(`label`,null,`宽度`,-1),(0,e.createVNode)(v,{modelValue:E.value.width,"onUpdate:modelValue":n[11]||=e=>E.value.width=e,min:40,max:400,size:`small`},null,8,[`modelValue`])]),(0,e.createElementVNode)(`div`,ot,[n[37]||=(0,e.createElementVNode)(`label`,null,`高度`,-1),(0,e.createVNode)(v,{modelValue:E.value.height,"onUpdate:modelValue":n[12]||=e=>E.value.height=e,min:30,max:300,size:`small`},null,8,[`modelValue`])])],64)),(0,e.createElementVNode)(`div`,st,[n[38]||=(0,e.createElementVNode)(`label`,null,`填充色`,-1),(0,e.createVNode)(R,{modelValue:E.value.fill,"onUpdate:modelValue":n[13]||=e=>E.value.fill=e,size:`small`},null,8,[`modelValue`])]),(0,e.createElementVNode)(`div`,ct,[n[39]||=(0,e.createElementVNode)(`label`,null,`边框色`,-1),(0,e.createVNode)(R,{modelValue:E.value.stroke,"onUpdate:modelValue":n[14]||=e=>E.value.stroke=e,size:`small`},null,8,[`modelValue`])]),(0,e.createElementVNode)(`div`,lt,[n[40]||=(0,e.createElementVNode)(`label`,null,`文字色`,-1),(0,e.createVNode)(R,{modelValue:E.value.textColor,"onUpdate:modelValue":n[15]||=e=>E.value.textColor=e,size:`small`},null,8,[`modelValue`])]),(0,e.createElementVNode)(`div`,ut,[n[41]||=(0,e.createElementVNode)(`label`,null,`字号`,-1),(0,e.createVNode)(v,{modelValue:E.value.fontSize,"onUpdate:modelValue":n[16]||=e=>E.value.fontSize=e,min:10,max:32,size:`small`},null,8,[`modelValue`])]),(0,e.createVNode)(c,{size:`small`,onClick:Ie},{default:(0,e.withCtx)(()=>[...n[42]||=[(0,e.createTextVNode)(`属性弹框设置`,-1)]]),_:1}),(0,e.createVNode)(c,{size:`small`,type:`danger`,onClick:Q},{default:(0,e.withCtx)(()=>[...n[43]||=[(0,e.createTextVNode)(`删除`,-1)]]),_:1})],64)):T.value===`connection`?((0,e.openBlock)(),(0,e.createElementBlock)(e.Fragment,{key:1},[(0,e.createElementVNode)(`div`,dt,[n[44]||=(0,e.createElementVNode)(`label`,null,`标签`,-1),(0,e.createVNode)(m,{modelValue:E.value.label,"onUpdate:modelValue":n[17]||=e=>E.value.label=e,size:`small`},null,8,[`modelValue`])]),(0,e.createElementVNode)(`div`,ft,[n[45]||=(0,e.createElementVNode)(`label`,null,`线宽`,-1),(0,e.createVNode)(v,{modelValue:E.value.lineWidth,"onUpdate:modelValue":n[18]||=e=>E.value.lineWidth=e,min:1,max:6,size:`small`},null,8,[`modelValue`])]),(0,e.createElementVNode)(`div`,pt,[n[46]||=(0,e.createElementVNode)(`label`,null,`虚线`,-1),(0,e.createVNode)(B,{modelValue:E.value.dashed,"onUpdate:modelValue":n[19]||=e=>E.value.dashed=e},null,8,[`modelValue`])]),(0,e.createVNode)(c,{size:`small`,type:`danger`,onClick:Q},{default:(0,e.withCtx)(()=>[...n[47]||=[(0,e.createTextVNode)(`删除`,-1)]]),_:1})],64)):(0,e.createCommentVNode)(``,!0)])):(0,e.createCommentVNode)(``,!0)]),_:1})]),(0,e.createVNode)(q,{modelValue:N.value,"onUpdate:modelValue":n[22]||=e=>N.value=e,title:`属性弹框设置`,width:`500`,"append-to-body":``},{footer:(0,e.withCtx)(()=>[(0,e.createVNode)(c,{onClick:n[21]||=e=>N.value=!1},{default:(0,e.withCtx)(()=>[...n[51]||=[(0,e.createTextVNode)(`取消`,-1)]]),_:1}),(0,e.createVNode)(c,{type:`primary`,onClick:Re},{default:(0,e.withCtx)(()=>[...n[52]||=[(0,e.createTextVNode)(`保存`,-1)]]),_:1})]),default:(0,e.withCtx)(()=>[(0,e.createElementVNode)(`div`,mt,[(0,e.createVNode)(c,{size:`small`,onClick:Le},{default:(0,e.withCtx)(()=>[...n[48]||=[(0,e.createTextVNode)(`+ 添加一行`,-1)]]),_:1}),(0,e.createVNode)(c,{size:`small`,onClick:n[20]||=e=>P.value?.click()},{default:(0,e.withCtx)(()=>[...n[49]||=[(0,e.createTextVNode)(`导入JSON`,-1)]]),_:1}),(0,e.createElementVNode)(`input`,{ref_key:`popupConfigImportRef`,ref:P,type:`file`,accept:`.json`,style:{display:`none`},onChange:ze},null,544)]),(0,e.createVNode)(K,{data:F.value,border:``,size:`small`,"max-height":`300`},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(V,{label:`属性名`,"min-width":`120`},{default:(0,e.withCtx)(({row:t})=>[(0,e.createVNode)(m,{modelValue:t.key,"onUpdate:modelValue":e=>t.key=e,size:`small`,placeholder:`属性名`},null,8,[`modelValue`,`onUpdate:modelValue`])]),_:1}),(0,e.createVNode)(V,{label:`悬浮内容`,"min-width":`200`},{default:(0,e.withCtx)(({row:t})=>[(0,e.createVNode)(m,{modelValue:t.value,"onUpdate:modelValue":e=>t.value=e,size:`small`,placeholder:`悬浮显示内容`},null,8,[`modelValue`,`onUpdate:modelValue`])]),_:1}),(0,e.createVNode)(V,{width:`60`,label:`操作`},{default:(0,e.withCtx)(({$index:t})=>[(0,e.createVNode)(c,{size:`small`,type:`danger`,text:``,onClick:e=>F.value.splice(t,1)},{default:(0,e.withCtx)(()=>[...n[50]||=[(0,e.createTextVNode)(`删除`,-1)]]),_:1},8,[`onClick`])]),_:1})]),_:1},8,[`data`])]),_:1},8,[`modelValue`]),(0,e.createVNode)(c,{class:`ai-chat-fab`,type:f.value?`primary`:`default`,circle:``,size:`large`,onClick:n[23]||=e=>f.value=!f.value,title:`AI助手`},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(o,null,{default:(0,e.withCtx)(()=>[(0,e.createVNode)(J)]),_:1})]),_:1},8,[`type`]),(0,e.createVNode)(re,{visible:f.value,messages:(0,e.unref)(h).messages.value,loading:(0,e.unref)(h).loading.value,"is-collab":(0,e.unref)(h).isCollabMode.value,"collab-users":(0,e.unref)(h).collabUsers.value,"current-user":(0,e.unref)(h).currentUser.value,"is-owner":y.value,onSend:we,onClose:n[24]||=e=>f.value=!1,"unread-mention":(0,e.unref)(h).unreadMention.value,onClearUnread:n[25]||=t=>(0,e.unref)(h).clearUnreadMention(),onClear:Te},null,8,[`visible`,`messages`,`loading`,`is-collab`,`collab-users`,`current-user`,`is-owner`,`unread-mention`]),(0,e.createVNode)(oe,{modelValue:p.value,"onUpdate:modelValue":n[26]||=e=>p.value=e,"document-id":d.value,onApply:De},null,8,[`modelValue`,`document-id`])])}}},[[`__scopeId`,`data-v-f79e9aab`]]);return(0,e.defineComponent)({name:`YourCompanyExplosionDiagram`,props:{docId:{type:[Number,String],default:null},apiBase:{type:String,default:`/api`},saveApi:{type:[String,Function],default:null},loadApi:{type:[String,Function],default:null},wsUrl:{type:String,default:``},user:{type:Object,default:()=>({id:``,name:``,color:``})},roomId:{type:String,default:``},uiConfig:{type:Object,default:()=>({})}},setup(n,{slots:r}){return()=>(0,e.h)(`div`,{class:`yourcompany-explosion-diagram-wrapper`,style:`position:relative`},[(0,e.h)(gt,{...n}),(0,e.h)(t.BrandWatermark)])}})});
|