@billtaofbj/explosion-image 1.0.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/LICENSE +21 -0
- package/dist/explosion-image.css +2 -0
- package/dist/index.cjs.js +2 -0
- package/dist/index.es.js +2298 -0
- package/package.json +26 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 @yourcompany
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +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-081fbd64]{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-081fbd64],.toolbar-center[data-v-081fbd64],.toolbar-right[data-v-081fbd64]{align-items:center;gap:4px;display:flex}.title-input[data-v-081fbd64]{width:180px}.collab-users[data-v-081fbd64]{align-items:center;gap:2px;margin-right:4px;display:flex}.collab-avatar[data-v-081fbd64]{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}.group-badge[data-v-081fbd64]{position:absolute;top:-4px;right:-4px}.group-popover[data-v-081fbd64]{flex-direction:column;max-height:360px;display:flex}.group-popover-header[data-v-081fbd64]{flex-shrink:0;gap:8px;display:flex}.group-list[data-v-081fbd64]{flex:1;overflow-y:auto}.group-item[data-v-081fbd64]{cursor:pointer;border-radius:4px;justify-content:space-between;align-items:center;padding:6px 8px;transition:background .15s;display:flex}.group-item[data-v-081fbd64]:hover{background:#f5f7fa}.group-item.active[data-v-081fbd64]{background:#ecf5ff}.group-item-main[data-v-081fbd64]{flex:1;align-items:center;gap:8px;min-width:0;display:flex}.group-name[data-v-081fbd64]{text-overflow:ellipsis;white-space:nowrap;font-size:13px;overflow:hidden}.group-item-actions[data-v-081fbd64]{flex-shrink:0;gap:2px;display:flex}.group-empty[data-v-081fbd64]{text-align:center;color:#999;padding:16px;font-size:13px}[data-v-081fbd64] .is-active{color:#409eff;font-weight:700}.annotation-canvas[data-v-d9ef76f4]{background:#f5f5f5;justify-content:center;align-items:center;width:100%;height:100%;padding:20px;display:flex;overflow:auto}.annotation-canvas.is-dragging[data-v-d9ef76f4]{cursor:grabbing}.annotation-canvas.is-dragging[data-v-d9ef76f4] *{cursor:grabbing!important}.image-wrapper[data-v-d9ef76f4]{flex-shrink:0;display:inline-block;position:relative}.annotation-image[data-v-d9ef76f4]{-webkit-user-select:none;user-select:none;width:100%;height:100%;display:block}.upload-placeholder[data-v-d9ef76f4]{cursor:pointer;color:#999;border:2px dashed #d9d9d9;border-radius:8px;flex-direction:column;flex-shrink:0;justify-content:center;align-items:center;width:400px;height:300px;display:flex}.upload-placeholder[data-v-d9ef76f4]:hover{color:#409eff;border-color:#409eff}.annotation-group[data-v-d9ef76f4]{pointer-events:none;width:100%;height:100%;position:absolute;top:0;left:0}.annotation-group.selected .annotation-label[data-v-d9ef76f4]{box-shadow:0 0 0 2px #409eff}.annotation-group.is-active .annotation-label[data-v-d9ef76f4]{background:#f0f7ff}.leader-line-svg[data-v-d9ef76f4]{pointer-events:none;position:absolute;top:0;left:0;overflow:visible}.annotation-label[data-v-d9ef76f4]{cursor:move;pointer-events:auto;white-space:nowrap;background:#fff;border:1px solid #0000;border-radius:6px;align-items:center;gap:4px;padding:4px 10px;font-size:13px;transition:all .15s;display:flex;position:absolute;box-shadow:0 2px 8px #0000001f}.annotation-label[data-v-d9ef76f4]:hover{transform:translateY(-1px);box-shadow:0 4px 12px #0000002e}.annotation-label.dragging[data-v-d9ef76f4]{z-index:100;transform:scale(1.05);box-shadow:0 8px 20px #00000040}.annotation-number[data-v-d9ef76f4]{color:#fff;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:22px;height:22px;font-size:11px;font-weight:700;transition:transform .15s;display:flex}.annotation-group.selected .annotation-number[data-v-d9ef76f4]{transform:scale(1.15)}.annotation-text[data-v-d9ef76f4]{outline:none;min-width:20px}.annotation-dot[data-v-d9ef76f4]{pointer-events:auto;cursor:move;z-index:10;border:2px solid #fff;border-radius:50%;width:12px;height:12px;transition:all .15s;position:absolute;transform:translate(-50%,-50%);box-shadow:0 2px 6px #00000040}.annotation-dot[data-v-d9ef76f4]:hover{transform:translate(-50%,-50%)scale(1.3);box-shadow:0 4px 12px #00000059}.annotation-dot.dragging[data-v-d9ef76f4]{z-index:100;transform:translate(-50%,-50%)scale(1.5);box-shadow:0 6px 16px #0006}.annotation-dot.square[data-v-d9ef76f4]{border-radius:3px}.annotation-dot.diamond[data-v-d9ef76f4]{border-radius:2px;transform:translate(-50%,-50%)rotate(45deg)}.annotation-dot.diamond.dragging[data-v-d9ef76f4]{transform:translate(-50%,-50%)rotate(45deg)scale(1.5)}.annotation-dot.arrow-point[data-v-d9ef76f4]{width:14px;height:14px;box-shadow:none!important;background:0 0!important;border:none!important}.annotation-flag[data-v-d9ef76f4]{pointer-events:auto;cursor:move;z-index:10;flex-direction:column;align-items:flex-start;display:flex;position:absolute;transform:translate(-1px,-20px)}.flag-pole[data-v-d9ef76f4]{background:currentColor;width:2px;height:18px}.flag-cloth[data-v-d9ef76f4]{border-radius:0 2px 2px 0;width:14px;height:10px;position:absolute;top:0;left:2px}.explosion-image-editor[data-v-8aef20c7]{background:#f5f5f5;flex-direction:column;height:100vh;display:flex}.ai-chat-fab[data-v-8aef20c7]{z-index:1000;position:fixed;bottom:24px;right:24px;box-shadow:0 4px 12px #00000026}.editor-body[data-v-8aef20c7]{flex:1;display:flex;overflow:hidden}.canvas-area[data-v-8aef20c7]{flex:1;overflow:auto}.props-panel[data-v-8aef20c7]{background:#fff;border-left:1px solid #e4e7ed;flex-direction:column;width:260px;padding:16px;display:flex;overflow-y:auto}.props-panel h4[data-v-8aef20c7]{color:#333;border-bottom:1px solid #eee;margin:0 0 12px;padding-bottom:8px;font-size:14px}.prop-row[data-v-8aef20c7]{margin-bottom:12px}.prop-row label[data-v-8aef20c7]{color:#666;margin-bottom:4px;font-size:12px;display:block}.font-style-btns[data-v-8aef20c7]{flex-wrap:wrap;gap:4px;display:flex}.font-style-btns .el-button[data-v-8aef20c7]{min-width:32px;padding:4px 8px}.filter-info[data-v-8aef20c7]{margin-top:8px}.filter-info .el-tag[data-v-8aef20c7]{cursor:pointer}.no-selection[data-v-8aef20c7]{color:#999;flex-direction:column;justify-content:center;align-items:center;height:200px;display:flex}.no-selection p[data-v-8aef20c7]{margin-top:12px;font-size:13px}.color-dialog-body[data-v-8aef20c7]{align-items:center;gap:12px;padding:8px 0;display:flex}.color-dialog-body span[data-v-8aef20c7]{font-size:14px}
|
|
2
|
+
/*$vite$:1*/
|
|
@@ -0,0 +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.YourCompanyExplosionImage=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`},ee={key:0,class:`message-mention`},M=[`innerHTML`],te={class:`message-time`},ne={key:1,class:`chat-message chat-message-ai`},N={class:`message-avatar ai`},P={class:`chat-input-area`},F={key:0,class:`mention-popup`},re=[`onClick`,`onMouseenter`],I={key:1},ie=_({__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`,ie=e=>e.role===`ai`?{background:`linear-gradient(135deg, #409EFF, #337ECC)`}:{background:e.user_color||`#67C23A`},L=e=>(e.user_name||`U`).charAt(0),R=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},z=()=>{l.value&&(d.value=Math.min(d.value+1,u.value.length-1))},B=()=>{l.value&&(d.value=Math.max(d.value-1,0))},V=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},H=e=>{if(e){if(e.shiftKey)return;if(l.value){let t=u.value[d.value];if(t){e.preventDefault(),V(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},U=()=>{(0,e.nextTick)(()=>{s.value&&(s.value.scrollTop=s.value.scrollHeight)})};return(0,e.watch)(()=>r.messages.length,U),(0,e.watch)(()=>r.messages,U,{deep:!0}),(n,r)=>{let f=(0,e.resolveComponent)(`el-icon`),p=(0,e.resolveComponent)(`el-tag`),m=(0,e.resolveComponent)(`el-popover`),U=(0,e.resolveComponent)(`el-button`),W=(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)(U,{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)(U,{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)(ie(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)(L(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`,ee,`@`+(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,M),(0,e.createElementVNode)(`div`,te,(0,e.toDisplayString)(n.time),1)])],2))),128)),t.loading?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,ne,[(0,e.createElementVNode)(`div`,N,[(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`,P,[(0,e.createElementVNode)(`div`,{class:`chat-input-wrapper`,ref_key:`inputWrapperRef`,ref:c},[(0,e.createVNode)(W,{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)(H,[`exact`]),[`enter`]),(0,e.withKeys)((0,e.withModifiers)(z,[`prevent`]),[`down`]),(0,e.withKeys)((0,e.withModifiers)(B,[`prevent`]),[`up`])],onInput:R,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=>V(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`,I,(0,e.toDisplayString)((t.name||`U`).charAt(0)),1))],4),(0,e.createElementVNode)(`span`,null,(0,e.toDisplayString)(t.name),1)],42,re))),128))])):(0,e.createCommentVNode)(``,!0),(0,e.createVNode)(U,{class:`send-btn`,type:`primary`,circle:``,disabled:!o.value.trim()||t.loading,onClick:H},{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 L(){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 R=`/api/document-versions`,z=5e3,B=()=>{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(R,{document_id:e,doc_type:t,content:typeof n==`string`?n:JSON.stringify(n),user_id:r||null,user_name:i||null},{timeout:z});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(R,{params:{document_id:e},timeout:z});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(`${R}/${e}`,{timeout:z});return t}catch(e){return console.warn(`[useVersionHistory] Failed to get version content:`,e),null}}}},V={class:`version-history-panel`},H={key:0,class:`loading-state`},U={key:1,class:`empty-state`},W={key:2,class:`version-list`},ae={key:0,class:`current-version`},G={class:`current-version-header`},K={class:`version-number`},q=[`onClick`],J={class:`version-number`},oe={class:`version-user`},Y={class:`panel-footer`},se=_({__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}=B(),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`,Y,[(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`,V,[(0,e.unref)(l)?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,H,[(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`,U,[(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`,W,[h.value?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,ae,[(0,e.createElementVNode)(`div`,G,[(0,e.createVNode)(a,{type:`success`,size:`small`},{default:(0,e.withCtx)(()=>[...n[3]||=[(0,e.createTextVNode)(`当前版本`,-1)]]),_:1}),(0,e.createElementVNode)(`span`,K,`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`,J,`版本号:v`+(0,e.toDisplayString)(t.version_number),1),(0,e.createElementVNode)(`span`,oe,`提交人:`+(0,e.toDisplayString)(t.user_name||`未知用户`),1)],10,q)]),_:2},1032,[`timestamp`,`type`,`hollow`]))),128))]),_:1})]))])]),_:1},8,[`modelValue`])}}},[[`__scopeId`,`data-v-87924b7c`]]),X={class:`toolbar`},Z={class:`toolbar-left`},ce={class:`toolbar-center`},le={class:`group-popover`},ue={class:`group-popover-header`},Q={class:`group-list`},$=[`onClick`],de={class:`group-name`},fe={class:`group-item-actions`},pe={key:1,class:`group-empty`},me={class:`toolbar-right`},he={key:0,class:`collab-users`},ge=[`title`],_e=_({__name:`Toolbar`,props:{title:{type:String,default:``},lineStyle:{type:String,default:`straight`},groups:{type:Array,default:()=>[]},activeGroupId:{type:String,default:null},collapsedGroups:{type:Array,default:()=>[]},isConnected:Boolean,onlineUsers:{type:Array,default:()=>[]},isJoinMode:Boolean,showHistory:{type:Boolean,default:!1}},emits:[`update:title`,`back`,`add-annotation`,`set-line-style`,`add-group`,`group-action`,`clear-group-filter`,`export`,`import-json`,`save`,`toggle-collab`,`share-collab`,`history`],setup(t){let n=t,r=(0,e.ref)(n.title);(0,e.watch)(()=>n.title,e=>r.value=e);let a={straight:{label:`直线`,icon:i.SemiSelect},polyline:{label:`折线`,icon:i.Connection},"right-angle":{label:`直角折线`,icon:i.Right},curve:{label:`曲线`,icon:i.TrendCharts},wave:{label:`波浪线`,icon:i.TrendCharts},dashed:{label:`虚线`,icon:i.Minus},dotted:{label:`点线`,icon:i.MoreFilled},dashdot:{label:`点划线`,icon:i.SemiSelect}},o=(0,e.computed)(()=>a[n.lineStyle]?.label||`引线`),s=(0,e.computed)(()=>a[n.lineStyle]?.icon||i.SemiSelect);return(n,a)=>{let c=(0,e.resolveComponent)(`el-icon`),l=(0,e.resolveComponent)(`el-button`),u=(0,e.resolveComponent)(`el-input`),d=(0,e.resolveComponent)(`el-tooltip`),f=(0,e.resolveComponent)(`el-divider`),p=(0,e.resolveComponent)(`el-dropdown-item`),m=(0,e.resolveComponent)(`el-dropdown-menu`),h=(0,e.resolveComponent)(`el-dropdown`),g=(0,e.resolveComponent)(`el-badge`),_=(0,e.resolveComponent)(`el-tag`),v=(0,e.resolveComponent)(`el-popover`);return(0,e.openBlock)(),(0,e.createElementBlock)(`div`,X,[(0,e.createElementVNode)(`div`,Z,[(0,e.createVNode)(l,{onClick:a[0]||=e=>n.$emit(`back`),size:`small`,circle:``},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(c,null,{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.ArrowLeft))]),_:1})]),_:1}),(0,e.createVNode)(u,{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,{content:`添加标注`,placement:`bottom`},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(l,{size:`small`,circle:``,onClick:a[3]||=e=>n.$emit(`add-annotation`)},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(c,null,{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.Location))]),_:1})]),_:1})]),_:1}),(0,e.createVNode)(f,{direction:`vertical`}),(0,e.createVNode)(h,{trigger:`click`,onCommand:a[4]||=e=>n.$emit(`set-line-style`,e)},{dropdown:(0,e.withCtx)(()=>[(0,e.createVNode)(m,null,{default:(0,e.withCtx)(()=>[(0,e.createVNode)(p,{command:`straight`,class:(0,e.normalizeClass)({"is-active":t.lineStyle===`straight`})},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(c,null,{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.SemiSelect))]),_:1}),a[14]||=(0,e.createTextVNode)(`直线 `,-1)]),_:1},8,[`class`]),(0,e.createVNode)(p,{command:`polyline`,class:(0,e.normalizeClass)({"is-active":t.lineStyle===`polyline`})},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(c,null,{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.Connection))]),_:1}),a[15]||=(0,e.createTextVNode)(`折线 `,-1)]),_:1},8,[`class`]),(0,e.createVNode)(p,{command:`right-angle`,class:(0,e.normalizeClass)({"is-active":t.lineStyle===`right-angle`})},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(c,null,{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.Right))]),_:1}),a[16]||=(0,e.createTextVNode)(`直角折线 `,-1)]),_:1},8,[`class`]),(0,e.createVNode)(p,{command:`curve`,class:(0,e.normalizeClass)({"is-active":t.lineStyle===`curve`})},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(c,null,{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.TrendCharts))]),_:1}),a[17]||=(0,e.createTextVNode)(`曲线 `,-1)]),_:1},8,[`class`]),(0,e.createVNode)(p,{command:`wave`,class:(0,e.normalizeClass)({"is-active":t.lineStyle===`wave`})},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(c,null,{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.TrendCharts))]),_:1}),a[18]||=(0,e.createTextVNode)(`波浪线 `,-1)]),_:1},8,[`class`]),(0,e.createVNode)(p,{divided:``,command:`dashed`,class:(0,e.normalizeClass)({"is-active":t.lineStyle===`dashed`})},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(c,null,{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.Minus))]),_:1}),a[19]||=(0,e.createTextVNode)(`虚线 `,-1)]),_:1},8,[`class`]),(0,e.createVNode)(p,{command:`dotted`,class:(0,e.normalizeClass)({"is-active":t.lineStyle===`dotted`})},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(c,null,{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.MoreFilled))]),_:1}),a[20]||=(0,e.createTextVNode)(`点线 `,-1)]),_:1},8,[`class`]),(0,e.createVNode)(p,{command:`dashdot`,class:(0,e.normalizeClass)({"is-active":t.lineStyle===`dashdot`})},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(c,null,{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.SemiSelect))]),_:1}),a[21]||=(0,e.createTextVNode)(`点划线 `,-1)]),_:1},8,[`class`])]),_:1})]),default:(0,e.withCtx)(()=>[(0,e.createVNode)(l,{size:`small`},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(c,null,{default:(0,e.withCtx)(()=>[((0,e.openBlock)(),(0,e.createBlock)((0,e.resolveDynamicComponent)(s.value)))]),_:1}),(0,e.createTextVNode)(` `+(0,e.toDisplayString)(o.value)+` `,1),(0,e.createVNode)(c,{class:`el-icon--right`},{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.ArrowDown))]),_:1})]),_:1})]),_:1}),(0,e.createVNode)(f,{direction:`vertical`}),(0,e.createVNode)(v,{placement:`bottom`,width:280,trigger:`click`},{reference:(0,e.withCtx)(()=>[(0,e.createVNode)(l,{size:`small`},{default:(0,e.withCtx)(()=>[a[22]||=(0,e.createTextVNode)(` 分组 `,-1),t.activeGroupId?((0,e.openBlock)(),(0,e.createBlock)(g,{key:0,value:1,offset:[-2,-2],class:`group-badge`})):(0,e.createCommentVNode)(``,!0),(0,e.createVNode)(c,{class:`el-icon--right`},{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.ArrowDown))]),_:1})]),_:1})]),default:(0,e.withCtx)(()=>[(0,e.createElementVNode)(`div`,le,[(0,e.createElementVNode)(`div`,ue,[(0,e.createVNode)(l,{size:`small`,onClick:a[5]||=e=>n.$emit(`add-group`,`new`),type:`primary`,plain:``},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(c,null,{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.Plus))]),_:1}),a[23]||=(0,e.createTextVNode)(`新建分组 `,-1)]),_:1}),t.activeGroupId?((0,e.openBlock)(),(0,e.createBlock)(l,{key:0,size:`small`,onClick:a[6]||=e=>n.$emit(`clear-group-filter`)},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(c,null,{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.Close))]),_:1}),a[24]||=(0,e.createTextVNode)(`显示全部 `,-1)]),_:1})):(0,e.createCommentVNode)(``,!0)]),t.groups.length?((0,e.openBlock)(),(0,e.createBlock)(f,{key:0,style:{margin:`8px 0`}})):(0,e.createCommentVNode)(``,!0),(0,e.createElementVNode)(`div`,Q,[((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(t.groups,r=>((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:r.id,class:(0,e.normalizeClass)([`group-item`,{active:t.activeGroupId===r.id}])},[(0,e.createElementVNode)(`div`,{class:`group-item-main`,onClick:e=>n.$emit(`group-action`,`filter`,r.id)},[(0,e.createElementVNode)(`span`,de,(0,e.toDisplayString)(r.name),1),t.activeGroupId===r.id?((0,e.openBlock)(),(0,e.createBlock)(_,{key:0,size:`small`,type:`primary`},{default:(0,e.withCtx)(()=>[...a[25]||=[(0,e.createTextVNode)(`筛选`,-1)]]),_:1})):(0,e.createCommentVNode)(``,!0)],8,$),(0,e.createElementVNode)(`div`,fe,[(0,e.createVNode)(d,{content:`展开/折叠`,placement:`top`},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(l,{size:`small`,circle:``,onClick:(0,e.withModifiers)(e=>n.$emit(`group-action`,`collapse`,r.id),[`stop`])},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(c,null,{default:(0,e.withCtx)(()=>[((0,e.openBlock)(),(0,e.createBlock)((0,e.resolveDynamicComponent)(t.collapsedGroups.includes(r.id)?`View`:`Hide`)))]),_:2},1024)]),_:2},1032,[`onClick`])]),_:2},1024),(0,e.createVNode)(d,{content:`修改颜色`,placement:`top`},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(l,{size:`small`,circle:``,onClick:(0,e.withModifiers)(e=>n.$emit(`group-action`,`color`,r.id),[`stop`])},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(c,null,{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.Brush))]),_:1})]),_:1},8,[`onClick`])]),_:2},1024),(0,e.createVNode)(d,{content:`删除分组`,placement:`top`},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(l,{size:`small`,circle:``,type:`danger`,onClick:(0,e.withModifiers)(e=>n.$emit(`group-action`,`delete`,r.id),[`stop`])},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(c,null,{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.Delete))]),_:1})]),_:1},8,[`onClick`])]),_:2},1024)])],2))),128))]),t.groups.length?(0,e.createCommentVNode)(``,!0):((0,e.openBlock)(),(0,e.createElementBlock)(`div`,pe,`暂无分组`))])]),_:1})]),(0,e.createElementVNode)(`div`,me,[t.onlineUsers.length>0?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,he,[((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,ge))),128))])):(0,e.createCommentVNode)(``,!0),t.isJoinMode?(0,e.createCommentVNode)(``,!0):((0,e.openBlock)(),(0,e.createBlock)(l,{key:1,size:`small`,type:t.isConnected?`success`:`default`,onClick:a[7]||=e=>n.$emit(`toggle-collab`)},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(c,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)(l,{key:2,size:`small`,circle:``,onClick:a[8]||=e=>n.$emit(`share-collab`),title:`分享链接`},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(c,null,{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.Link))]),_:1})]),_:1})):(0,e.createCommentVNode)(``,!0),(0,e.createVNode)(f,{direction:`vertical`}),(0,e.createVNode)(h,{trigger:`click`,onCommand:a[9]||=e=>n.$emit(`export`,e)},{dropdown:(0,e.withCtx)(()=>[(0,e.createVNode)(m,null,{default:(0,e.withCtx)(()=>[t.activeGroupId?((0,e.openBlock)(),(0,e.createBlock)(p,{key:0,command:`png-filtered`},{default:(0,e.withCtx)(()=>[...a[27]||=[(0,e.createTextVNode)(`PNG(当前分组)`,-1)]]),_:1})):(0,e.createCommentVNode)(``,!0),(0,e.createVNode)(p,{command:`png`},{default:(0,e.withCtx)(()=>[...a[28]||=[(0,e.createTextVNode)(`PNG(全部)`,-1)]]),_:1}),(0,e.createVNode)(p,{command:`svg`},{default:(0,e.withCtx)(()=>[...a[29]||=[(0,e.createTextVNode)(`SVG`,-1)]]),_:1}),(0,e.createVNode)(p,{command:`pdf`},{default:(0,e.withCtx)(()=>[...a[30]||=[(0,e.createTextVNode)(`PDF`,-1)]]),_:1}),(0,e.createVNode)(p,{command:`html`},{default:(0,e.withCtx)(()=>[...a[31]||=[(0,e.createTextVNode)(`HTML`,-1)]]),_:1}),(0,e.createVNode)(p,{divided:``,command:`json`},{default:(0,e.withCtx)(()=>[...a[32]||=[(0,e.createTextVNode)(`JSON(完整数据)`,-1)]]),_:1})]),_:1})]),default:(0,e.withCtx)(()=>[(0,e.createVNode)(l,{size:`small`},{default:(0,e.withCtx)(()=>[a[26]||=(0,e.createTextVNode)(`导出`,-1),(0,e.createVNode)(c,{class:`el-icon--right`},{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.ArrowDown))]),_:1})]),_:1})]),_:1}),(0,e.createVNode)(d,{content:`导入JSON`,placement:`bottom`},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(l,{size:`small`,circle:``,onClick:a[10]||=e=>n.$refs.jsonInput.click()},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(c,null,{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.Upload))]),_:1})]),_:1})]),_:1}),(0,e.createElementVNode)(`input`,{ref:`jsonInput`,type:`file`,accept:`.json`,style:{display:`none`},onChange:a[11]||=e=>n.$emit(`import-json`,e)},null,544),(0,e.createVNode)(l,{size:`small`,onClick:a[12]||=e=>n.$emit(`save`)},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(c,null,{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.Download))]),_:1})]),_:1}),t.showHistory?((0,e.openBlock)(),(0,e.createBlock)(l,{key:3,size:`small`,circle:``,title:`更新履历`,onClick:a[13]||=e=>n.$emit(`history`)},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(c,null,{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.Clock))]),_:1})]),_:1})):(0,e.createCommentVNode)(``,!0)])])}}},[[`__scopeId`,`data-v-081fbd64`]]),ve=[`src`],ye=[`onMousedown`],be={class:`leader-line-svg`,style:{left:0,top:0,width:`100%`,height:`100%`}},xe=[`id`,`fill`],Se=[`d`,`stroke`,`stroke-width`,`stroke-dasharray`,`marker-start`],Ce=[`onMousedown`],we=[`onBlur`],Te=[`onMousedown`],Ee=[`onMousedown`],De=[`onMousedown`],Oe=_({__name:`AnnotationCanvas`,props:{imageUrl:String,annotations:{type:Array,default:()=>[]},collapsedGroups:{type:Array,default:()=>[]},selectedId:[String,Number,null],lineStyle:{type:String,default:`straight`}},emits:[`select`,`upload-image`,`change`],setup(t,{expose:n,emit:r}){let a=t,o=r,s=(0,e.ref)(null),c=(0,e.ref)(null),l=(0,e.ref)(800),u=(0,e.ref)(600),d=(0,e.ref)(!1),f=(0,e.ref)(null),p=(0,e.computed)(()=>a.annotations.filter(e=>e.groupId?!a.collapsedGroups.includes(e.groupId):!0)),m=(0,e.computed)(()=>a.lineStyle===`dashed`?`8,4`:a.lineStyle===`dotted`?`3,3`:a.lineStyle===`dashdot`?`8,3,2,3`:`none`),h=()=>{let e=s.value,t=c.value;if(!e||!t)return;let n=t.naturalWidth,r=t.naturalHeight,i=e.clientWidth-40,a=e.clientHeight-40,o=i/n,d=a/r,f=Math.min(o,d,1);l.value=Math.round(n*f),u.value=Math.round(r*f)},g=()=>{h()},_=e=>{h()},v=e=>{let t=e.x/100*l.value,n=e.y/100*u.value,r=t+(e.labelX||0),i=n+(e.labelY||0),o=[`dashed`,`dotted`,`dashdot`].includes(a.lineStyle)?`straight`:a.lineStyle;if(o===`straight`||o===`dashed`||o===`dotted`||o===`dashdot`)return`M${t},${n} L${r},${i}`;if(o===`polyline`)return`M${t},${n} L${e.x<50?t+20:t-20},${n} L${r},${i}`;if(o===`right-angle`)return`M${t},${n} L${t},${i} L${r},${i}`;if(o===`curve`)return`M${t},${n} C${e.x<50?t+30:t-30},${n} ${r},${i} ${r},${i}`;if(o===`wave`){let e=r-t,a=i-n,o=Math.sqrt(e*e+a*a),s=Math.max(2,Math.floor(o/20)),c=`M${t},${n}`;for(let r=1;r<=s;r++){let i=r/s,o=t+e*i,l=n+a*i+Math.sin(i*Math.PI*s/2)*8;c+=` L${o},${l}`}return c}return`M${t},${n} L${r},${i}`},y=e=>{let t=e.x/100*l.value,n=e.y/100*u.value,r={left:`${t+(e.labelX||0)}px`,top:`${n+(e.labelY||0)}px`};if(e.labelBgColor){let t=(e.labelBgOpacity??100)/100,n=e.labelBgColor;r.background=`rgba(${parseInt(n.slice(1,3),16)}, ${parseInt(n.slice(3,5),16)}, ${parseInt(n.slice(5,7),16)}, ${t})`}return r},b=e=>({background:e.numberColor||e.color||`#e74c3c`}),x=e=>{let t={fontFamily:e.fontFamily||`inherit`,fontSize:e.fontSize?e.fontSize+`px`:`inherit`};return e.textColor&&(t.color=e.textColor),e.fontWeight===`bold`?t.fontWeight=`bold`:e.fontWeight===`bolder`&&(t.fontWeight=`bolder`),e.fontStyle===`italic`&&(t.fontStyle=`italic`),e.fontStyle===`oblique`&&(t.fontStyle=`oblique`),e.textDecoration===`underline`?t.textDecoration=`underline`:e.textDecoration===`line-through`?t.textDecoration=`line-through`:e.textDecoration===`underline line-through`&&(t.textDecoration=`underline line-through`),t},S=e=>({left:e.x+`%`,top:e.y+`%`}),C=e=>{let t={left:e.x+`%`,top:e.y+`%`,background:e.color||`#e74c3c`};return e.pointStyle===`square`?t.borderRadius=`2px`:e.pointStyle===`diamond`?(t.borderRadius=`2px`,t.transform=`translate(-50%, -50%) rotate(45deg)`):e.pointStyle===`arrow`&&(t.background=`transparent`,t.border=`none`,t.width=`0`,t.height=`0`,t.boxShadow=`none`),t},w=null,T=null,E=(e,t)=>{o(`select`,e),T=`label`,f.value=e.id,d.value=!0,w={ann:e,startX:t.clientX,startY:t.clientY,origLabelX:e.labelX||0,origLabelY:e.labelY||0},document.addEventListener(`mousemove`,O),document.addEventListener(`mouseup`,k)},D=(e,t)=>{o(`select`,e),T=`dot`,f.value=e.id,d.value=!0,w={ann:e,startX:t.clientX,startY:t.clientY,origX:e.x,origY:e.y},document.addEventListener(`mousemove`,O),document.addEventListener(`mouseup`,k)},O=e=>{if(!w)return;let t=e.clientX-w.startX,n=e.clientY-w.startY;if(T===`label`)w.ann.labelX=w.origLabelX+t,w.ann.labelY=w.origLabelY+n;else if(T===`dot`){let e=s.value;if(!e)return;let r=e.querySelector(`.image-wrapper`).getBoundingClientRect(),i=Math.max(0,Math.min(100,w.origX+t/r.width*100)),a=Math.max(0,Math.min(100,w.origY+n/r.height*100));w.ann.x=Math.round(i*10)/10,w.ann.y=Math.round(a*10)/10}},k=()=>{d.value=!1,f.value=null,w=null,T=null,o(`change`),document.removeEventListener(`mousemove`,O),document.removeEventListener(`mouseup`,k)};return n({recalculateSize:g}),(n,r)=>{let a=(0,e.resolveComponent)(`el-icon`);return(0,e.openBlock)(),(0,e.createElementBlock)(`div`,{class:(0,e.normalizeClass)([`annotation-canvas`,{"is-dragging":d.value}]),ref_key:`containerRef`,ref:s},[t.imageUrl?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:0,class:`image-wrapper`,style:(0,e.normalizeStyle)({width:l.value+`px`,height:u.value+`px`})},[(0,e.createElementVNode)(`img`,{src:t.imageUrl,onLoad:_,ref_key:`imgRef`,ref:c,class:`annotation-image`,draggable:`false`},null,40,ve),((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(p.value,i=>((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:i.id,class:(0,e.normalizeClass)([`annotation-group`,{selected:t.selectedId===i.id,"is-active":t.selectedId===i.id}]),onMousedown:(0,e.withModifiers)(e=>n.$emit(`select`,i),[`stop`])},[((0,e.openBlock)(),(0,e.createElementBlock)(`svg`,be,[(0,e.createElementVNode)(`defs`,null,[(0,e.createElementVNode)(`marker`,{id:`arrow-start-`+i.id,markerWidth:`10`,markerHeight:`7`,refX:`1`,refY:`3.5`,orient:`auto`,fill:i.lineColor||(t.selectedId===i.id?`#409EFF`:i.color||`#e74c3c`)},[...r[2]||=[(0,e.createElementVNode)(`polygon`,{points:`10 0, 0 3.5, 10 7`},null,-1)]],8,xe)]),(0,e.createElementVNode)(`path`,{d:v(i),fill:`none`,stroke:i.lineColor||(t.selectedId===i.id?`#409EFF`:i.color||`#e74c3c`),"stroke-width":i.strokeWidth||1.5,"stroke-dasharray":m.value,"marker-start":i.pointStyle===`arrow`?`url(#arrow-start-${i.id})`:``},null,8,Se)])),(0,e.createElementVNode)(`div`,{class:(0,e.normalizeClass)([`annotation-label`,{dragging:d.value&&f.value===i.id}]),style:(0,e.normalizeStyle)(y(i)),onMousedown:(0,e.withModifiers)(e=>E(i,e),[`stop`])},[(0,e.createElementVNode)(`span`,{class:`annotation-number`,style:(0,e.normalizeStyle)(b(i))},(0,e.toDisplayString)(i.number),5),(0,e.createElementVNode)(`span`,{class:`annotation-text`,style:(0,e.normalizeStyle)(x(i)),contenteditable:``,onBlur:e=>{i.text=e.target.textContent,o(`change`)},onMousedown:r[0]||=(0,e.withModifiers)(()=>{},[`stop`])},(0,e.toDisplayString)(i.text),45,we)],46,Ce),i.pointStyle===`flag`?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:0,class:`annotation-flag`,style:(0,e.normalizeStyle)(S(i)),onMousedown:(0,e.withModifiers)(e=>D(i,e),[`stop`])},[(0,e.createElementVNode)(`div`,{class:`flag-pole`,style:(0,e.normalizeStyle)({background:i.color||`#e74c3c`})},null,4),(0,e.createElementVNode)(`div`,{class:`flag-cloth`,style:(0,e.normalizeStyle)({background:i.color||`#e74c3c`})},null,4)],44,Te)):i.pointStyle===`arrow`?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:2,class:(0,e.normalizeClass)([`annotation-dot arrow-point`,{dragging:d.value&&f.value===i.id}]),style:(0,e.normalizeStyle)(C(i)),onMousedown:(0,e.withModifiers)(e=>D(i,e),[`stop`])},null,46,De)):((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:1,class:(0,e.normalizeClass)([`annotation-dot`,[i.pointStyle||`circle`,{dragging:d.value&&f.value===i.id}]]),style:(0,e.normalizeStyle)(C(i)),onMousedown:(0,e.withModifiers)(e=>D(i,e),[`stop`])},null,46,Ee))],42,ye))),128))],4)):((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:1,class:`upload-placeholder`,onClick:r[1]||=e=>n.$emit(`upload-image`)},[(0,e.createVNode)(a,{size:`48`},{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.UploadFilled))]),_:1}),r[3]||=(0,e.createElementVNode)(`p`,null,`点击上传图片`,-1)]))],2)}}},[[`__scopeId`,`data-v-d9ef76f4`]]);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 Ae=(e,{onRemoteChange:t}={})=>{let n=ke(e,{roomPrefix:`explosion-image`,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-Image] remote data parse error:`,e)}}});let r=e=>{n.pushToYjs({title:e.title,imageUrl:e.imageUrl,annotations:e.annotations,groups:e.groups})},i=()=>n.pullFromYjs();return{...n,pushToYjs:r,pullFromYjs:i}},je={class:`explosion-image-editor`},Me={class:`editor-body`},Ne={class:`canvas-area`},Pe={class:`props-panel`},Fe={class:`prop-row`},Ie={class:`prop-row`},Le={class:`prop-row`},Re={class:`prop-row`},ze={class:`prop-row`},Be={class:`prop-row`},Ve={class:`prop-row`},He={class:`prop-row`},Ue={class:`prop-row`},We={class:`prop-row`},Ge={class:`prop-row`},Ke={class:`prop-row`},qe={class:`font-style-btns`},Je={class:`prop-row`},Ye={class:`font-style-btns`},Xe={class:`prop-row`},Ze={class:`prop-row`},Qe={class:`prop-row`},$e={class:`prop-row`},et={key:0,class:`prop-row filter-info`},tt={key:1,class:`no-selection`},nt={class:`color-dialog-body`},rt=`explosion-image`,it=_({__name:`ExplosionImageEditor`,setup(t){let o=(0,n.useRoute)(),s=(0,n.useRouter)(),c=(0,e.ref)(null),l=(0,e.ref)(null),u=(0,e.ref)(!1),d=(0,e.ref)(!1),{saveVersion:f}=B(),p=L(),m=(0,e.reactive)({title:`图片标注`,imageUrl:``,annotations:[],groups:[]}),h=(0,e.ref)(!1),g=(0,e.ref)(!1),_=(0,e.ref)(!1),v=null,y=(0,e.ref)(`straight`),b=(0,e.ref)(null),x=(0,e.ref)(null),S=(0,e.ref)(null),C=0,w=(0,e.ref)(null),T=(0,e.ref)([]),E=(0,e.computed)(()=>w.value?m.annotations.filter(e=>e.groupId===w.value):m.annotations),D=()=>l.value?.click(),O=async e=>{let t=e.target.files?.[0];if(!t)return;let n=new FormData;n.append(`file`,t);try{let e=await a.default.post(`/api/files/upload/image`,n);m.imageUrl=e.data.url||e.data.file_path,Y()}catch{r.ElMessage.error(`上传失败`)}},k=()=>{if(!m.imageUrl){r.ElMessage.warning(`请先上传图片`);return}let e=m.annotations.reduce((e,t)=>Math.max(e,t.number),0);m.annotations.push({id:`ann-${++C}-${Date.now()}`,number:e+1,text:``,x:50,y:50,labelX:80,labelY:-30,color:`#e74c3c`,numberColor:``,textColor:``,labelBgColor:``,labelBgOpacity:100,lineColor:``,strokeWidth:1.5,pointStyle:`circle`,fontFamily:``,fontSize:13,fontWeight:``,fontStyle:``,textDecoration:``,groupId:``}),Y()},A=e=>{b.value=e.id,x.value=e},j=(e,t)=>{x.value&&(x.value[e]===t?x.value[e]=``:x.value[e]=t)},ee=()=>{x.value&&(x.value.fontFamily=``,x.value.fontSize=13,x.value.fontWeight=``,x.value.fontStyle=``,x.value.textDecoration=``)},M=()=>{m.annotations=m.annotations.filter(e=>e.id!==b.value),b.value=null,x.value=null,Y()},te=e=>{e===`new`&&r.ElMessageBox.prompt(`分组名称`,`新建分组`,{inputPlaceholder:`名称`}).then(({value:e})=>{e&&(m.groups.push({id:`grp-${Date.now()}`,name:e}),Y())}).catch(()=>{})},ne=(e,t)=>{e===`filter`?w.value=w.value===t?null:t:e===`collapse`?I(t):e===`color`?(P.value=t,N.value=!0):e===`delete`&&r.ElMessageBox.confirm(`确定删除该分组?分组内的标注将保留,但分组关系将被移除。`,`删除分组`,{type:`warning`}).then(()=>{m.annotations.forEach(e=>{e.groupId===t&&(e.groupId=``)}),m.groups=m.groups.filter(e=>e.id!==t),w.value===t&&(w.value=null),r.ElMessage.success(`分组已删除`),Y()}).catch(()=>{})},N=(0,e.ref)(!1),P=(0,e.ref)(null),F=(0,e.ref)(`#e74c3c`),re=()=>{m.annotations.forEach(e=>{e.groupId===P.value&&(e.color=F.value,e.numberColor=F.value,e.lineColor=F.value,e.textColor=F.value)}),N.value=!1,r.ElMessage.success(`颜色已更新`),Y()},I=e=>{let t=T.value.indexOf(e);t===-1?T.value.push(e):T.value.splice(t,1)},R=()=>{w.value=null,T.value=[]},z=async()=>{if(h.value&&v?.collaborationClosed.value&&!_.value){r.ElMessage.warning(`协作已关闭,无法保存`);return}try{let e={title:m.title,view_type:`image`,config:JSON.stringify({imageUrl:m.imageUrl,annotations:m.annotations,groups:m.groups,lineStyle:y.value})};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(`保存成功`),f({documentId:c.value,docType:`image`,content:JSON.stringify({imageUrl:m.imageUrl,annotations:m.annotations,groups:m.groups,lineStyle:y.value}),userId:String(p.currentUser.value?.id||``),userName:p.currentUser.value?.name||`未知`})}catch{r.ElMessage.error(`保存失败`)}},V=async()=>{if(o.params.id)try{let e=(await a.default.get(`/api/explosion-views/${o.params.id}`)).data;if(c.value=e.id,m.title=e.title,e.config){let t=JSON.parse(e.config);m.imageUrl=t.imageUrl||``,m.annotations=t.annotations||[],m.groups=t.groups||[],y.value=t.lineStyle||`straight`}}catch(e){console.error(e)}},H=()=>s.push(`/`),U=[`我可以帮您优化图片标注、检查注释内容,或者提供标注建议。请问有什么需要帮助的?`,`这张图片的标注很详细。建议检查标注线条是否清晰,避免与其他标注重叠。`,`根据当前的标注内容,我建议为关键部件添加更详细的文字说明。`,`我可以帮您检查标注中是否有遗漏的区域或重复的编号。需要我逐个分析吗?`,`建议使用不同颜色的标注来区分不同类别的部件,提高可读性。`,`图片标注的分组功能可以帮助您管理复杂的标注。建议按功能模块进行分组。`,`我可以帮您将标注信息整理成表格,方便后续查阅和修改。`,`标注的连线样式建议统一,直线适合简单标注,折线适合复杂场景。`],W=async(e,t={})=>{let n=c.value?`${rt}-${c.value}`:null;await p.sendMessage(e,{...t,roomId:n});let r=t.mentionedUser,i=r&&r.toLowerCase().includes(`ai`),a=p.collabUsers.value.filter(e=>e.name!==p.currentUser.value.name);(!r||i||a.length===0)&&(p.loading.value=!0,setTimeout(()=>{p.sendAiMessage(U[Math.floor(Math.random()*U.length)],n),p.loading.value=!1},800+Math.random()*1200))},ae=()=>{let e=c.value?`${rt}-${c.value}`:null;p.clearMessages(e)},G=()=>{if(!c.value){r.ElMessage.warning(`请先保存文档`);return}d.value=!0},K=e=>{try{let t=typeof e==`string`?JSON.parse(e):e;t.imageUrl&&(m.imageUrl=t.imageUrl),t.annotations&&(m.annotations=t.annotations),t.groups&&(m.groups=t.groups),t.lineStyle&&(y.value=t.lineStyle),b.value=null,x.value=null}catch(e){console.error(`Version apply error:`,e)}},q=e=>{if(e===`png`||e===`png-filtered`){let t=document.querySelector(`.annotation-image`);if(!t)return r.ElMessage.error(`未找到图片`);let n=document.createElement(`canvas`);n.width=t.naturalWidth,n.height=t.naturalHeight;let i=n.getContext(`2d`);i.drawImage(t,0,0);let a=n.width/t.clientWidth,o=n.height/t.clientHeight,s=Math.max(a,o),c=e===`png-filtered`?E.value:m.annotations,l=[`dashed`,`dotted`,`dashdot`].includes(y.value)?`straight`:y.value,u=c.map(e=>{let t=e.x/100*n.width,r=e.y/100*n.height;return{ann:e,x:t,y:r,lx:t+(e.labelX||0)*a,ly:r+(e.labelY||0)*o}});u.forEach(({ann:e,x:t,y:n,lx:r,ly:c})=>{let u=e.color||`#e74c3c`,d=e.lineColor||u,f=(e.strokeWidth||1.5)*s;if(i.strokeStyle=d,i.lineWidth=f,i.setLineDash([]),l===`dashed`?i.setLineDash([8*a,4*o]):l===`dotted`?i.setLineDash([3*a,3*o]):l===`dashdot`&&i.setLineDash([8*a,3*o,2*a,3*o]),i.beginPath(),l===`polyline`){let o=e.x<50?t+20*a:t-20*a;i.moveTo(t,n),i.lineTo(o,n),i.lineTo(r,c)}else if(l===`right-angle`)i.moveTo(t,n),i.lineTo(t,c),i.lineTo(r,c);else if(l===`curve`){let o=e.x<50?t+30*a:t-30*a;i.moveTo(t,n),i.bezierCurveTo(o,n,r,c,r,c)}else if(l===`wave`){let e=r-t,s=c-n,l=Math.sqrt(e*e+s*s),u=Math.max(2,Math.floor(l/(20*a)));i.moveTo(t,n);for(let r=1;r<=u;r++){let a=r/u;i.lineTo(t+e*a,n+s*a+Math.sin(a*Math.PI*u/2)*8*o)}}else i.moveTo(t,n),i.lineTo(r,c);i.stroke(),i.setLineDash([]);let p=10*s,m=e.pointStyle||`circle`;if(m===`square`)i.fillStyle=u,i.fillRect(t-p,n-p,p*2,p*2);else if(m===`diamond`)i.fillStyle=u,i.beginPath(),i.moveTo(t,n-p*1.2),i.lineTo(t+p*1.2,n),i.lineTo(t,n+p*1.2),i.lineTo(t-p*1.2,n),i.closePath(),i.fill();else if(m===`arrow`){i.fillStyle=d,i.beginPath();let e=Math.atan2(c-n,r-t),a=p*1.5;i.moveTo(t+Math.cos(e)*a,n+Math.sin(e)*a),i.lineTo(t+Math.cos(e+2.5)*a*.6,n+Math.sin(e+2.5)*a*.6),i.lineTo(t+Math.cos(e-2.5)*a*.6,n+Math.sin(e-2.5)*a*.6),i.closePath(),i.fill()}else m===`flag`?(i.strokeStyle=u,i.lineWidth=2*s,i.beginPath(),i.moveTo(t,n),i.lineTo(t,n-20*o),i.stroke(),i.fillStyle=u,i.beginPath(),i.moveTo(t,n-20*o),i.lineTo(t+14*a,n-15*o),i.lineTo(t,n-10*o),i.closePath(),i.fill()):(i.fillStyle=u,i.beginPath(),i.arc(t,n,p,0,Math.PI*2),i.fill())}),10*s,u.forEach(({ann:e,lx:t,ly:n})=>{let r=e.color||`#e74c3c`,a=e.numberColor||r,o=11*s;if(i.fillStyle=a,i.beginPath(),i.arc(t,n,o,0,Math.PI*2),i.fill(),i.fillStyle=`#fff`,i.font=`bold ${o}px sans-serif`,i.textAlign=`center`,i.textBaseline=`middle`,i.fillText(String(e.number),t,n),e.text){let r=(e.fontSize||13)*s,a=e.fontWeight===`bold`||e.fontWeight===`bolder`?`bold `:``;i.font=`${e.fontStyle===`italic`||e.fontStyle===`oblique`?`italic `:``}${a}${r}px ${e.fontFamily||`sans-serif`}`;let c=i.measureText(e.text).width,l=4*s,u=t+o+l,d=u-l,f=n-r/2-l,p=c+l*2,m=r+l*2;if(e.labelBgColor){let t=(e.labelBgOpacity??100)/100,n=e.labelBgColor;i.fillStyle=`rgba(${parseInt(n.slice(1,3),16)}, ${parseInt(n.slice(3,5),16)}, ${parseInt(n.slice(5,7),16)}, ${t})`}else i.fillStyle=`rgba(255,255,255,0.9)`;i.beginPath(),i.roundRect(d,f,p,m,3*s),i.fill(),i.fillStyle=e.textColor||`#333`,i.textAlign=`left`,i.textBaseline=`middle`,i.fillText(e.text,u,n)}}),n.toBlob(e=>{let t=document.createElement(`a`);t.href=URL.createObjectURL(e),t.download=`${m.title||`图片标注`}.png`,t.click()})}else e===`json`?J():r.ElMessage.info(`导出 ${e} 开发中`)},J=()=>{let e={title:m.title,imageUrl:m.imageUrl,annotations:m.annotations,groups:m.groups,lineStyle:y.value,exportTime:new Date().toISOString()},t=new Blob([JSON.stringify(e,null,2)],{type:`application/json`}),n=document.createElement(`a`);n.href=URL.createObjectURL(t),n.download=`${m.title||`爆炸图`}.json`,n.click(),r.ElMessage.success(`JSON已导出`)},oe=e=>{let t=e.target.files[0];if(!t)return;let n=new FileReader;n.onload=e=>{try{let t=JSON.parse(e.target.result);if(!t.imageUrl&&(!t.annotations||!t.annotations.length)){r.ElMessage.error(`JSON格式无效:缺少图片或标注数据`);return}m.title=t.title||`图片标注`,m.imageUrl=t.imageUrl||``,m.annotations=t.annotations||[],m.groups=t.groups||[],y.value=t.lineStyle||`straight`,b.value=null,x.value=null,Y(),r.ElMessage.success(`导入成功`)}catch{r.ElMessage.error(`JSON解析失败,请检查文件格式`)}},n.readAsText(t),e.target.value=``},Y=()=>{h.value&&v&&v.pushToYjs(m)};(0,e.watch)(x,()=>{Y()},{deep:!0});let X=e=>{v&&=(v.destroy(),null),v=Ae(e,{onRemoteChange:e=>{e.title&&(m.title=e.title),e.imageUrl&&(m.imageUrl=e.imageUrl),e.annotations&&(m.annotations=e.annotations),e.groups&&(m.groups=e.groups)}}),v._setSyncReady(!1)},Z=async()=>{if(h.value)return;if(!c.value&&(await z(),!c.value)){r.ElMessage.error(`请先保存文档`);return}X(String(c.value)),v.connect();let e={name:`用户${Math.floor(Math.random()*1e3)}`,color:`#${Math.floor(Math.random()*16777215).toString(16).padStart(6,`0`)}`},t=()=>{if(v.provider&&v.provider.synced){v._setSyncReady(!0),v.setLocalUser(e);let t=v.pullFromYjs();t?(t.title&&(m.title=t.title),t.imageUrl&&(m.imageUrl=t.imageUrl),t.annotations&&(m.annotations=t.annotations),t.groups&&(m.groups=t.groups)):(m.annotations.length>0||m.imageUrl)&&v.pushToYjs(m),h.value=!0,_.value=!0,g.value=!1,p.setCollabContext({ydoc:v.ydoc,provider:v.provider,onlineUsers:v.onlineUsers}),p.setCurrentUser({id:v.provider.awareness.clientID,name:e.name,color:e.color}),r.ElMessage.success(`协作已开启`)}else setTimeout(t,100)};setTimeout(t,200)},ce=()=>{v&&(v.closeCollaboration(),h.value=!1,_.value=!1,r.ElMessage.info(`协作已关闭`))},le=()=>{let e=o.params.id;if(!e)return;X(e),v.connect();let t={name:`协作人${Math.floor(Math.random()*1e3)}`,color:`#${Math.floor(Math.random()*16777215).toString(16).padStart(6,`0`)}`},n=()=>{if(v.provider&&v.provider.synced){if(v.checkCollaborationClosed()){v.disconnect(),h.value=!1,r.ElMessage.warning(`该协作已关闭,无法加入`);return}v._setSyncReady(!0),v.setLocalUser(t);let e=v.pullFromYjs();e&&(e.title&&(m.title=e.title),e.imageUrl&&(m.imageUrl=e.imageUrl),e.annotations&&(m.annotations=e.annotations),e.groups&&(m.groups=e.groups)),h.value=!0,_.value=!1,p.setCollabContext({ydoc:v.ydoc,provider:v.provider,onlineUsers:v.onlineUsers}),p.setCurrentUser({id:v.provider.awareness.clientID,name:t.name,color:t.color}),r.ElMessage.success(`已加入协作`)}else setTimeout(n,100)};setTimeout(n,200)},ue=()=>{h.value?ce():Z()},Q=async()=>{if(h.value||await Z(),!c.value&&(await z(),!c.value)){r.ElMessage.warning(`请先保存文档后再分享`);return}let e=`${window.location.origin}/explosion-image/${c.value}?collab=1`;try{await navigator.clipboard.writeText(e),r.ElMessage.success(`协作链接已复制到剪贴板`)}catch{r.ElMessage.info(`协作链接: `+e)}};(0,e.onMounted)(async()=>{let e=localStorage.getItem(`editor-user-name`)||`用户${Math.floor(Math.random()*1e3)}`;localStorage.setItem(`editor-user-name`,e),p.setCurrentUser({id:Date.now(),name:e,color:`#409eff`}),await V(),o.params.id&&o.query.collab===`1`&&le()});let $=e=>{e.key===`Delete`&&b.value&&M()};return(0,e.onMounted)(()=>document.addEventListener(`keydown`,$)),(0,e.onUnmounted)(()=>{document.removeEventListener(`keydown`,$),v&&=(v.destroy(),null)}),(t,n)=>{let r=(0,e.resolveComponent)(`el-input-number`),a=(0,e.resolveComponent)(`el-input`),s=(0,e.resolveComponent)(`el-color-picker`),f=(0,e.resolveComponent)(`el-option`),g=(0,e.resolveComponent)(`el-select`),C=(0,e.resolveComponent)(`el-slider`),P=(0,e.resolveComponent)(`el-button`),I=(0,e.resolveComponent)(`el-icon`),L=(0,e.resolveComponent)(`el-tag`),B=(0,e.resolveComponent)(`el-dialog`),V=(0,e.resolveComponent)(`Monitor`);return(0,e.openBlock)(),(0,e.createElementBlock)(`div`,je,[(0,e.createVNode)(_e,{title:m.title,"onUpdate:title":n[0]||=e=>m.title=e,"line-style":y.value,groups:m.groups,"active-group-id":w.value,"collapsed-groups":T.value,"is-connected":h.value,"online-users":(0,e.unref)(v)?(0,e.unref)(v).onlineUsers.value:[],"is-join-mode":(0,e.unref)(o).query.collab===`1`,onBack:H,onAddAnnotation:k,onSetLineStyle:n[1]||=e=>y.value=e,onAddGroup:te,onGroupAction:ne,onClearGroupFilter:R,onExport:q,onImportJson:oe,onSave:z,onToggleCollab:ue,onShareCollab:Q,"show-history":!!c.value,onHistory:G},null,8,[`title`,`line-style`,`groups`,`active-group-id`,`collapsed-groups`,`is-connected`,`online-users`,`is-join-mode`,`show-history`]),(0,e.createElementVNode)(`div`,Me,[(0,e.createElementVNode)(`div`,Ne,[(0,e.createVNode)(Oe,{ref_key:`annotationCanvasRef`,ref:S,"image-url":m.imageUrl,annotations:E.value,"collapsed-groups":T.value,"selected-id":b.value,"line-style":y.value,onSelect:A,onUploadImage:D,onChange:Y},null,8,[`image-url`,`annotations`,`collapsed-groups`,`selected-id`,`line-style`]),(0,e.createElementVNode)(`input`,{ref_key:`fileInputRef`,ref:l,type:`file`,accept:`image/*`,style:{display:`none`},onChange:O},null,544)]),(0,e.createElementVNode)(`div`,Pe,[n[58]||=(0,e.createElementVNode)(`h4`,null,`标注属性`,-1),x.value?((0,e.openBlock)(),(0,e.createElementBlock)(e.Fragment,{key:0},[(0,e.createElementVNode)(`div`,Fe,[n[31]||=(0,e.createElementVNode)(`label`,null,`编号`,-1),(0,e.createVNode)(r,{modelValue:x.value.number,"onUpdate:modelValue":n[2]||=e=>x.value.number=e,min:1,size:`small`},null,8,[`modelValue`])]),(0,e.createElementVNode)(`div`,Ie,[n[32]||=(0,e.createElementVNode)(`label`,null,`文字`,-1),(0,e.createVNode)(a,{modelValue:x.value.text,"onUpdate:modelValue":n[3]||=e=>x.value.text=e,size:`small`},null,8,[`modelValue`])]),(0,e.createElementVNode)(`div`,Le,[n[33]||=(0,e.createElementVNode)(`label`,null,`引线颜色`,-1),(0,e.createVNode)(s,{modelValue:x.value.lineColor,"onUpdate:modelValue":n[4]||=e=>x.value.lineColor=e,size:`small`,"show-alpha":``},null,8,[`modelValue`])]),(0,e.createElementVNode)(`div`,Re,[n[34]||=(0,e.createElementVNode)(`label`,null,`标注点样式`,-1),(0,e.createVNode)(g,{modelValue:x.value.pointStyle,"onUpdate:modelValue":n[5]||=e=>x.value.pointStyle=e,size:`small`},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(f,{label:`圆形`,value:`circle`}),(0,e.createVNode)(f,{label:`方形`,value:`square`}),(0,e.createVNode)(f,{label:`菱形`,value:`diamond`}),(0,e.createVNode)(f,{label:`箭头`,value:`arrow`}),(0,e.createVNode)(f,{label:`红旗`,value:`flag`})]),_:1},8,[`modelValue`])]),(0,e.createElementVNode)(`div`,ze,[n[35]||=(0,e.createElementVNode)(`label`,null,`标注点颜色`,-1),(0,e.createVNode)(s,{modelValue:x.value.color,"onUpdate:modelValue":n[6]||=e=>x.value.color=e,size:`small`},null,8,[`modelValue`])]),(0,e.createElementVNode)(`div`,Be,[n[36]||=(0,e.createElementVNode)(`label`,null,`编号颜色`,-1),(0,e.createVNode)(s,{modelValue:x.value.numberColor,"onUpdate:modelValue":n[7]||=e=>x.value.numberColor=e,size:`small`},null,8,[`modelValue`])]),(0,e.createElementVNode)(`div`,Ve,[n[37]||=(0,e.createElementVNode)(`label`,null,`文字颜色`,-1),(0,e.createVNode)(s,{modelValue:x.value.textColor,"onUpdate:modelValue":n[8]||=e=>x.value.textColor=e,size:`small`},null,8,[`modelValue`])]),(0,e.createElementVNode)(`div`,He,[n[38]||=(0,e.createElementVNode)(`label`,null,`文字背景色`,-1),(0,e.createVNode)(s,{modelValue:x.value.labelBgColor,"onUpdate:modelValue":n[9]||=e=>x.value.labelBgColor=e,size:`small`,"show-alpha":``},null,8,[`modelValue`])]),(0,e.createElementVNode)(`div`,Ue,[n[39]||=(0,e.createElementVNode)(`label`,null,`背景透明度`,-1),(0,e.createVNode)(C,{modelValue:x.value.labelBgOpacity,"onUpdate:modelValue":n[10]||=e=>x.value.labelBgOpacity=e,min:0,max:100,step:5,"show-input":``,"input-size":`small`},null,8,[`modelValue`])]),(0,e.createElementVNode)(`div`,We,[n[40]||=(0,e.createElementVNode)(`label`,null,`字体`,-1),(0,e.createVNode)(g,{modelValue:x.value.fontFamily,"onUpdate:modelValue":n[11]||=e=>x.value.fontFamily=e,size:`small`,clearable:``},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(f,{label:`默认`,value:``}),(0,e.createVNode)(f,{label:`宋体`,value:`SimSun`}),(0,e.createVNode)(f,{label:`黑体`,value:`SimHei`}),(0,e.createVNode)(f,{label:`微软雅黑`,value:`Microsoft YaHei`}),(0,e.createVNode)(f,{label:`楷体`,value:`KaiTi`}),(0,e.createVNode)(f,{label:`Arial`,value:`Arial`}),(0,e.createVNode)(f,{label:`Times New Roman`,value:`Times New Roman`})]),_:1},8,[`modelValue`])]),(0,e.createElementVNode)(`div`,Ge,[n[41]||=(0,e.createElementVNode)(`label`,null,`字号`,-1),(0,e.createVNode)(r,{modelValue:x.value.fontSize,"onUpdate:modelValue":n[12]||=e=>x.value.fontSize=e,min:10,max:32,size:`small`},null,8,[`modelValue`])]),(0,e.createElementVNode)(`div`,Ke,[n[46]||=(0,e.createElementVNode)(`label`,null,`字体样式`,-1),(0,e.createElementVNode)(`div`,qe,[(0,e.createVNode)(P,{type:x.value.fontWeight===`bold`?`primary`:``,size:`small`,onClick:n[13]||=e=>j(`fontWeight`,`bold`)},{default:(0,e.withCtx)(()=>[...n[42]||=[(0,e.createElementVNode)(`b`,null,`B`,-1)]]),_:1},8,[`type`]),(0,e.createVNode)(P,{type:x.value.fontWeight===`bolder`?`primary`:``,size:`small`,onClick:n[14]||=e=>j(`fontWeight`,`bolder`)},{default:(0,e.withCtx)(()=>[...n[43]||=[(0,e.createElementVNode)(`b`,{style:{"font-size":`14px`}},`B`,-1)]]),_:1},8,[`type`]),(0,e.createVNode)(P,{type:x.value.fontStyle===`italic`?`primary`:``,size:`small`,onClick:n[15]||=e=>j(`fontStyle`,`italic`)},{default:(0,e.withCtx)(()=>[...n[44]||=[(0,e.createElementVNode)(`i`,null,`I`,-1)]]),_:1},8,[`type`]),(0,e.createVNode)(P,{type:x.value.fontStyle===`oblique`?`primary`:``,size:`small`,onClick:n[16]||=e=>j(`fontStyle`,`oblique`)},{default:(0,e.withCtx)(()=>[...n[45]||=[(0,e.createElementVNode)(`i`,{style:{"font-style":`oblique`}},`I`,-1)]]),_:1},8,[`type`])])]),(0,e.createElementVNode)(`div`,Je,[n[51]||=(0,e.createElementVNode)(`label`,null,`装饰`,-1),(0,e.createElementVNode)(`div`,Ye,[(0,e.createVNode)(P,{type:x.value.textDecoration===`underline`?`primary`:``,size:`small`,onClick:n[17]||=e=>j(`textDecoration`,`underline`)},{default:(0,e.withCtx)(()=>[...n[47]||=[(0,e.createElementVNode)(`u`,null,`U`,-1)]]),_:1},8,[`type`]),(0,e.createVNode)(P,{type:x.value.textDecoration===`line-through`?`primary`:``,size:`small`,onClick:n[18]||=e=>j(`textDecoration`,`line-through`)},{default:(0,e.withCtx)(()=>[...n[48]||=[(0,e.createElementVNode)(`s`,null,`S`,-1)]]),_:1},8,[`type`]),(0,e.createVNode)(P,{type:x.value.textDecoration===`underline line-through`?`primary`:``,size:`small`,onClick:n[19]||=e=>j(`textDecoration`,`underline line-through`)},{default:(0,e.withCtx)(()=>[...n[49]||=[(0,e.createElementVNode)(`u`,null,[(0,e.createElementVNode)(`s`,null,`U`)],-1)]]),_:1},8,[`type`]),(0,e.createVNode)(P,{size:`small`,onClick:ee},{default:(0,e.withCtx)(()=>[...n[50]||=[(0,e.createTextVNode)(`清除`,-1)]]),_:1})])]),(0,e.createElementVNode)(`div`,Xe,[n[52]||=(0,e.createElementVNode)(`label`,null,`X% (点)`,-1),(0,e.createVNode)(C,{modelValue:x.value.x,"onUpdate:modelValue":n[20]||=e=>x.value.x=e,min:0,max:100,step:.5,"show-input":``,"input-size":`small`},null,8,[`modelValue`])]),(0,e.createElementVNode)(`div`,Ze,[n[53]||=(0,e.createElementVNode)(`label`,null,`Y% (点)`,-1),(0,e.createVNode)(C,{modelValue:x.value.y,"onUpdate:modelValue":n[21]||=e=>x.value.y=e,min:0,max:100,step:.5,"show-input":``,"input-size":`small`},null,8,[`modelValue`])]),(0,e.createElementVNode)(`div`,Qe,[n[54]||=(0,e.createElementVNode)(`label`,null,`线宽`,-1),(0,e.createVNode)(r,{modelValue:x.value.strokeWidth,"onUpdate:modelValue":n[22]||=e=>x.value.strokeWidth=e,min:1,max:5,size:`small`},null,8,[`modelValue`])]),(0,e.createElementVNode)(`div`,$e,[n[55]||=(0,e.createElementVNode)(`label`,null,`分组`,-1),(0,e.createVNode)(g,{modelValue:x.value.groupId,"onUpdate:modelValue":n[23]||=e=>x.value.groupId=e,size:`small`,clearable:``},{default:(0,e.withCtx)(()=>[((0,e.openBlock)(!0),(0,e.createElementBlock)(e.Fragment,null,(0,e.renderList)(m.groups,t=>((0,e.openBlock)(),(0,e.createBlock)(f,{key:t.id,label:t.name,value:t.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`])]),w.value?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,et,[(0,e.createVNode)(L,{size:`small`,type:`info`},{default:(0,e.withCtx)(()=>[(0,e.createTextVNode)(` 当前筛选: `+(0,e.toDisplayString)(m.groups.find(e=>e.id===w.value)?.name||`未知分组`)+` `,1),(0,e.createVNode)(I,{class:`el-tag__close`,onClick:R},{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.Close))]),_:1})]),_:1})])):(0,e.createCommentVNode)(``,!0),(0,e.createVNode)(P,{size:`small`,type:`danger`,onClick:M},{default:(0,e.withCtx)(()=>[...n[56]||=[(0,e.createTextVNode)(`删除`,-1)]]),_:1})],64)):((0,e.openBlock)(),(0,e.createElementBlock)(`div`,tt,[(0,e.createVNode)(I,{size:`48`,color:`#ccc`},{default:(0,e.withCtx)(()=>[(0,e.createVNode)((0,e.unref)(i.InfoFilled))]),_:1}),n[57]||=(0,e.createElementVNode)(`p`,null,`点击标注进行编辑`,-1)]))])]),(0,e.createVNode)(B,{modelValue:N.value,"onUpdate:modelValue":n[26]||=e=>N.value=e,title:`批量修改颜色`,width:`320px`,"show-close":!0},{footer:(0,e.withCtx)(()=>[(0,e.createVNode)(P,{onClick:n[25]||=e=>N.value=!1},{default:(0,e.withCtx)(()=>[...n[60]||=[(0,e.createTextVNode)(`取消`,-1)]]),_:1}),(0,e.createVNode)(P,{type:`primary`,onClick:re},{default:(0,e.withCtx)(()=>[...n[61]||=[(0,e.createTextVNode)(`确定`,-1)]]),_:1})]),default:(0,e.withCtx)(()=>[(0,e.createElementVNode)(`div`,nt,[n[59]||=(0,e.createElementVNode)(`span`,null,`选择颜色:`,-1),(0,e.createVNode)(s,{modelValue:F.value,"onUpdate:modelValue":n[24]||=e=>F.value=e,"show-alpha":``},null,8,[`modelValue`])])]),_:1},8,[`modelValue`]),(0,e.createVNode)(P,{class:`ai-chat-fab`,type:u.value?`primary`:`default`,circle:``,size:`large`,onClick:n[27]||=e=>u.value=!u.value,title:`AI助手`},{default:(0,e.withCtx)(()=>[(0,e.createVNode)(I,null,{default:(0,e.withCtx)(()=>[(0,e.createVNode)(V)]),_:1})]),_:1},8,[`type`]),(0,e.createVNode)(ie,{visible:u.value,messages:(0,e.unref)(p).messages.value,loading:(0,e.unref)(p).loading.value,"is-collab":(0,e.unref)(p).isCollabMode.value,"collab-users":(0,e.unref)(p).collabUsers.value,"current-user":(0,e.unref)(p).currentUser.value,"is-owner":_.value,onSend:W,onClose:n[28]||=e=>u.value=!1,"unread-mention":(0,e.unref)(p).unreadMention.value,onClearUnread:n[29]||=t=>(0,e.unref)(p).clearUnreadMention(),onClear:ae},null,8,[`visible`,`messages`,`loading`,`is-collab`,`collab-users`,`current-user`,`is-owner`,`unread-mention`]),(0,e.createVNode)(se,{modelValue:d.value,"onUpdate:modelValue":n[30]||=e=>d.value=e,"document-id":c.value,onApply:K},null,8,[`modelValue`,`document-id`])])}}},[[`__scopeId`,`data-v-8aef20c7`]]);return(0,e.defineComponent)({name:`YourCompanyExplosionImage`,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-image-wrapper`,style:`position:relative`},[(0,e.h)(it,{...n}),(0,e.h)(t.BrandWatermark)])}})});
|