ai-word-editor 0.0.74 → 0.0.75

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.
@@ -1 +1 @@
1
- .ProseMirror span.comment-mark,.umo-editor span.comment-mark{border-bottom:2px solid #fbbf24;background-color:transparent;border-radius:0;cursor:text;transition:border-bottom-color .15s}.ProseMirror span.comment-mark:hover,.umo-editor span.comment-mark:hover{border-bottom-color:#facc15}.ProseMirror span.comment-mark--active,.umo-editor span.comment-mark--active{background-color:transparent;border-bottom-color:#f59e0b}.comment-panel[data-v-0f4b5fed]{box-sizing:border-box;width:100%;min-width:0;max-width:100%;height:100%;border-left:1px solid #e5e7eb;background:#fafafa;display:flex;flex-direction:column;overflow:hidden}.comment-panel__header[data-v-0f4b5fed]{padding:14px 16px 10px;border-bottom:1px solid #e5e7eb;background:#fff}.comment-panel__title[data-v-0f4b5fed]{margin:0;font-size:14px;font-weight:600;color:#374151;display:flex;align-items:center;gap:6px}.comment-panel__badge[data-v-0f4b5fed]{background:#f59e0b;color:#fff;border-radius:10px;font-size:11px;padding:1px 6px;font-weight:500}.comment-panel__empty[data-v-0f4b5fed]{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;color:#9ca3af;gap:4px;padding:24px;text-align:center}.comment-panel__empty p[data-v-0f4b5fed]{margin:0;font-size:13px}.comment-panel__empty-icon[data-v-0f4b5fed]{font-size:32px;margin-bottom:8px;opacity:.5}.comment-panel__empty-hint[data-v-0f4b5fed]{font-size:12px!important;color:#d1d5db}.comment-panel__list[data-v-0f4b5fed]{list-style:none;margin:0;padding:8px;overflow-y:auto;flex:1;display:flex;flex-direction:column;gap:8px}.comment-item[data-v-0f4b5fed]{background:#fff;border:1px solid #e5e7eb;border-radius:8px;padding:10px 12px;cursor:pointer;transition:border-color .15s,box-shadow .15s}.comment-item[data-v-0f4b5fed]:hover{border-color:#fbbf24;box-shadow:0 1px 4px #fbbf2426}.comment-item--active[data-v-0f4b5fed]{border-color:#f59e0b;box-shadow:0 0 0 2px #f59e0b33}.comment-item--resolved[data-v-0f4b5fed]{opacity:.55}.comment-item--resolved .comment-item__note[data-v-0f4b5fed]{text-decoration:line-through;color:#9ca3af}.comment-item__quote[data-v-0f4b5fed]{font-size:12px;color:#6b7280;background:#fef9c3;border-left:3px solid #fbbf24;padding:4px 8px;border-radius:0 4px 4px 0;margin-bottom:6px;line-height:1.4}.comment-item__quote-icon[data-v-0f4b5fed]{color:#fbbf24;margin-right:2px}.comment-item--c0 .comment-item__quote[data-v-0f4b5fed]{background:#fef3c7cc;border-left-color:#f97316}.comment-item--c0 .comment-item__quote-icon[data-v-0f4b5fed]{color:#f97316}.comment-item--c1 .comment-item__quote[data-v-0f4b5fed]{background:#d1fae5d9;border-left-color:#22c55e}.comment-item--c1 .comment-item__quote-icon[data-v-0f4b5fed]{color:#22c55e}.comment-item--c2 .comment-item__quote[data-v-0f4b5fed]{background:#dbeafed9;border-left-color:#3b82f6}.comment-item--c2 .comment-item__quote-icon[data-v-0f4b5fed]{color:#3b82f6}.comment-item--c3 .comment-item__quote[data-v-0f4b5fed]{background:#ede9fee6;border-left-color:#a855f7}.comment-item--c3 .comment-item__quote-icon[data-v-0f4b5fed]{color:#a855f7}.comment-item--c4 .comment-item__quote[data-v-0f4b5fed]{background:#fce7f3e6;border-left-color:#ec4899}.comment-item--c4 .comment-item__quote-icon[data-v-0f4b5fed]{color:#ec4899}.comment-item--c5 .comment-item__quote[data-v-0f4b5fed]{background:#ccfbf1d9;border-left-color:#14b8a6}.comment-item--c5 .comment-item__quote-icon[data-v-0f4b5fed]{color:#14b8a6}.comment-item--c6 .comment-item__quote[data-v-0f4b5fed]{background:#fef9c3e6;border-left-color:#eab308}.comment-item--c6 .comment-item__quote-icon[data-v-0f4b5fed]{color:#eab308}.comment-item--c7 .comment-item__quote[data-v-0f4b5fed]{background:#ffe4e6e6;border-left-color:#f43f5e}.comment-item--c7 .comment-item__quote-icon[data-v-0f4b5fed]{color:#f43f5e}.comment-item--c8 .comment-item__quote[data-v-0f4b5fed]{background:#e0e7ffe6;border-left-color:#6366f1}.comment-item--c8 .comment-item__quote-icon[data-v-0f4b5fed]{color:#6366f1}.comment-item--c9 .comment-item__quote[data-v-0f4b5fed]{background:#ecfdc8e6;border-left-color:#84cc16}.comment-item--c9 .comment-item__quote-icon[data-v-0f4b5fed]{color:#84cc16}.comment-item--c10 .comment-item__quote[data-v-0f4b5fed]{background:#cffafee6;border-left-color:#06b6d4}.comment-item--c10 .comment-item__quote-icon[data-v-0f4b5fed]{color:#06b6d4}.comment-item--c11 .comment-item__quote[data-v-0f4b5fed]{background:#d1fae5d9;border-left-color:#10b981}.comment-item--c11 .comment-item__quote-icon[data-v-0f4b5fed]{color:#10b981}.comment-item--c12 .comment-item__quote[data-v-0f4b5fed]{background:#ede9fee6;border-left-color:#8b5cf6}.comment-item--c12 .comment-item__quote-icon[data-v-0f4b5fed]{color:#8b5cf6}.comment-item--c13 .comment-item__quote[data-v-0f4b5fed]{background:#faf0ffe6;border-left-color:#d946ef}.comment-item--c13 .comment-item__quote-icon[data-v-0f4b5fed]{color:#d946ef}.comment-item--c14 .comment-item__quote[data-v-0f4b5fed]{background:#e0f2fee6;border-left-color:#0ea5e9}.comment-item--c14 .comment-item__quote-icon[data-v-0f4b5fed]{color:#0ea5e9}.comment-item--c15 .comment-item__quote[data-v-0f4b5fed]{background:#ffedd5e6;border-left-color:#ea580c}.comment-item--c15 .comment-item__quote-icon[data-v-0f4b5fed]{color:#ea580c}.comment-item--c16 .comment-item__quote[data-v-0f4b5fed]{background:#fefce8e6;border-left-color:#ca8a04}.comment-item--c16 .comment-item__quote-icon[data-v-0f4b5fed]{color:#ca8a04}.comment-item--c17 .comment-item__quote[data-v-0f4b5fed]{background:#fee2e2e6;border-left-color:#dc2626}.comment-item--c17 .comment-item__quote-icon[data-v-0f4b5fed]{color:#dc2626}.comment-item--c18 .comment-item__quote[data-v-0f4b5fed]{background:#ccfbf1d9;border-left-color:#0d9488}.comment-item--c18 .comment-item__quote-icon[data-v-0f4b5fed]{color:#0d9488}.comment-item--c19 .comment-item__quote[data-v-0f4b5fed]{background:#f1f5f9e6;border-left-color:#64748b}.comment-item--c19 .comment-item__quote-icon[data-v-0f4b5fed]{color:#64748b}.comment-item__note[data-v-0f4b5fed]{font-size:13px;color:#374151;line-height:1.5;margin-bottom:6px;word-break:break-word}.comment-item__meta[data-v-0f4b5fed]{display:flex;justify-content:space-between;font-size:11px;color:#9ca3af;margin-bottom:8px}.comment-item__author[data-v-0f4b5fed]{font-weight:500}.comment-item__actions[data-v-0f4b5fed]{display:flex;gap:6px;justify-content:flex-end}.comment-btn[data-v-0f4b5fed]{border:none;border-radius:4px;padding:3px 8px;font-size:11px;cursor:pointer;transition:background .15s}.comment-btn--resolve[data-v-0f4b5fed]{background:#ecfdf5;color:#059669}.comment-btn--resolve[data-v-0f4b5fed]:hover{background:#d1fae5}.comment-btn--delete[data-v-0f4b5fed]{background:#fef2f2;color:#dc2626}.comment-btn--delete[data-v-0f4b5fed]:hover{background:#fee2e2}.dialog-backdrop[data-v-8cbc8293]{position:fixed;inset:0;background:#00000073;display:flex;align-items:center;justify-content:center;z-index:9999}.dialog[data-v-8cbc8293]{background:#fff;border-radius:10px;box-shadow:0 20px 60px #00000026,0 4px 12px #00000014;width:460px;max-width:calc(100vw - 32px);overflow:hidden}.dialog__header[data-v-8cbc8293]{display:flex;align-items:center;justify-content:space-between;padding:16px 20px 12px;border-bottom:1px solid #e5e7eb}.dialog__title[data-v-8cbc8293]{margin:0;font-size:15px;font-weight:600;color:#111827}.dialog__close[data-v-8cbc8293]{border:none;background:none;font-size:14px;color:#9ca3af;cursor:pointer;padding:4px 6px;border-radius:4px;line-height:1}.dialog__close[data-v-8cbc8293]:hover{background:#f3f4f6;color:#374151}.dialog__quote[data-v-8cbc8293]{padding:12px 20px 0}.dialog__quote-label[data-v-8cbc8293]{font-size:11px;font-weight:500;color:#9ca3af;text-transform:uppercase;letter-spacing:.05em}.dialog__quote-text[data-v-8cbc8293]{margin:4px 0 0;padding:8px 12px;background:#fef9c3;border-left:3px solid #fbbf24;border-radius:0 4px 4px 0;font-size:13px;color:#374151;line-height:1.5}.dialog__body[data-v-8cbc8293]{padding:16px 20px 0}.dialog__label[data-v-8cbc8293]{display:block;font-size:12px;font-weight:500;color:#374151;margin-bottom:6px}.dialog__textarea[data-v-8cbc8293]{width:100%;border:1px solid #d1d5db;border-radius:6px;padding:10px 12px;font-size:14px;font-family:inherit;resize:vertical;box-sizing:border-box;transition:border-color .15s,box-shadow .15s;outline:none;color:#111827;line-height:1.5}.dialog__textarea[data-v-8cbc8293]:focus{border-color:#f59e0b;box-shadow:0 0 0 3px #f59e0b26}.dialog__hint[data-v-8cbc8293]{margin:6px 0 0;font-size:11px;color:#9ca3af}.dialog__footer[data-v-8cbc8293]{display:flex;justify-content:flex-end;gap:8px;padding:16px 20px}.dialog__btn[data-v-8cbc8293]{border:none;border-radius:6px;padding:8px 16px;font-size:13px;font-weight:500;cursor:pointer;transition:background .15s}.dialog__btn--cancel[data-v-8cbc8293]{background:#f3f4f6;color:#374151}.dialog__btn--cancel[data-v-8cbc8293]:hover{background:#e5e7eb}.dialog__btn--confirm[data-v-8cbc8293]{background:#f59e0b;color:#fff}.dialog__btn--confirm[data-v-8cbc8293]:hover:not(:disabled){background:#d97706}.dialog__btn--confirm[data-v-8cbc8293]:disabled{opacity:.45;cursor:not-allowed}.comment-gutter[data-v-ac6164bd]{position:absolute;top:12px;right:-300px;width:280px;pointer-events:none;display:flex;flex-direction:column}.gutter-item-wrapper[data-v-ac6164bd]{pointer-events:auto}.gutter-item[data-v-ac6164bd]{position:relative;width:100%;background:#fff;border:1px solid #e5e7eb;border-left-width:4px;border-radius:8px;padding:8px 10px;box-shadow:0 8px 18px #0000000f;cursor:pointer;-webkit-user-select:none;user-select:none;outline:none;transition:transform .12s,box-shadow .12s,border-color .12s}.gutter-item[data-v-ac6164bd]:hover{transform:translateY(-1px);box-shadow:0 10px 22px #00000014}.gutter-item--active[data-v-ac6164bd]{border-color:#f59e0b;box-shadow:0 0 0 2px #f59e0b38,0 10px 22px #00000014}.gutter-item--resolved[data-v-ac6164bd]{opacity:.6}.gutter-item__quote[data-v-ac6164bd]{font-size:12px;color:#6b7280;margin-bottom:4px}.gutter-item__note[data-v-ac6164bd]{font-size:13px;color:#374151;line-height:1.35;margin-bottom:6px;word-break:break-word}.gutter-item__meta[data-v-ac6164bd]{display:flex;justify-content:space-between;font-size:11px;color:#9ca3af}.gutter-item--c0[data-v-ac6164bd]{border-left-color:#f97316}.gutter-item--c1[data-v-ac6164bd]{border-left-color:#22c55e}.gutter-item--c2[data-v-ac6164bd]{border-left-color:#3b82f6}.gutter-item--c3[data-v-ac6164bd]{border-left-color:#a855f7}.gutter-item--c4[data-v-ac6164bd]{border-left-color:#ec4899}.gutter-item--c5[data-v-ac6164bd]{border-left-color:#14b8a6}.gutter-item--c6[data-v-ac6164bd]{border-left-color:#eab308}.gutter-item--c7[data-v-ac6164bd]{border-left-color:#f43f5e}.gutter-item--c8[data-v-ac6164bd]{border-left-color:#6366f1}.gutter-item--c9[data-v-ac6164bd]{border-left-color:#84cc16}.gutter-item--c10[data-v-ac6164bd]{border-left-color:#06b6d4}.gutter-item--c11[data-v-ac6164bd]{border-left-color:#10b981}.gutter-item--c12[data-v-ac6164bd]{border-left-color:#8b5cf6}.gutter-item--c13[data-v-ac6164bd]{border-left-color:#d946ef}.gutter-item--c14[data-v-ac6164bd]{border-left-color:#0ea5e9}.gutter-item--c15[data-v-ac6164bd]{border-left-color:#ea580c}.gutter-item--c16[data-v-ac6164bd]{border-left-color:#ca8a04}.gutter-item--c17[data-v-ac6164bd]{border-left-color:#dc2626}.gutter-item--c18[data-v-ac6164bd]{border-left-color:#0d9488}.gutter-item--c19[data-v-ac6164bd]{border-left-color:#64748b}.umo-editor-content .tableWrapper{max-width:100%;box-sizing:border-box}.umo-editor-content table{width:100%!important;max-width:100%;box-sizing:border-box}.umo-editor-content table td,.umo-editor-content table th{box-sizing:border-box}.umo-editor-content table:has(colgroup[data-word-col-layout]) td,.umo-editor-content table:has(colgroup[data-word-col-layout]) th,.umo-editor-content table:has(colgroup[data-word-col-layout]){border:none!important;outline:none!important}.umo-editor-content table:has(colgroup col:nth-child(2)){table-layout:fixed}.umo-editor-content ul[type=disc] li>p:before,.umo-editor-content ul[type=circle] li>p:before,.umo-editor-content ul[type=square] li>p:before{content:none}.auth-page[data-v-9f2d36df]{min-height:100%;display:flex;align-items:center;justify-content:center;background:#f3f4f6}.auth-card[data-v-9f2d36df]{background:#fff;border-radius:12px;padding:40px 36px;width:340px;box-shadow:0 4px 24px #0000001a}.auth-title[data-v-9f2d36df]{font-size:20px;font-weight:700;color:#111827;text-align:center;margin:0 0 24px}.auth-tabs[data-v-9f2d36df]{display:flex;gap:0;border:1px solid #e5e7eb;border-radius:8px;overflow:hidden;margin-bottom:20px}.auth-tab[data-v-9f2d36df]{flex:1;padding:8px;border:none;background:transparent;cursor:pointer;font-size:14px;color:#6b7280;transition:background .15s,color .15s}.auth-tab--active[data-v-9f2d36df]{background:#3b82f6;color:#fff}.auth-form[data-v-9f2d36df]{display:flex;flex-direction:column;gap:12px}.auth-input[data-v-9f2d36df]{padding:10px 14px;border:1px solid #d1d5db;border-radius:8px;font-size:14px;outline:none;transition:border-color .15s}.auth-input[data-v-9f2d36df]:focus{border-color:#3b82f6}.auth-submit[data-v-9f2d36df]{padding:10px;border:none;border-radius:8px;background:#3b82f6;color:#fff;font-size:14px;font-weight:600;cursor:pointer;transition:background .15s}.auth-submit[data-v-9f2d36df]:hover:not(:disabled){background:#2563eb}.auth-submit[data-v-9f2d36df]:disabled{opacity:.6;cursor:not-allowed}.auth-error[data-v-9f2d36df]{color:#ef4444;font-size:13px;margin:0}.app-layout[data-v-9f2d36df]{display:flex;width:100%;height:100%;overflow:hidden}.editor-wrapper[data-v-9f2d36df]{flex:1;display:flex;flex-direction:column;min-width:0;overflow:hidden}.app-layout__comment-aside[data-v-9f2d36df]{flex:0 1 clamp(280px,36vw,720px);min-width:0;max-width:100%;display:flex;flex-direction:column;overflow:hidden}.comment-toolbar[data-v-9f2d36df]{display:flex;align-items:center;gap:8px;padding:8px 16px;background:#fff;border-bottom:1px solid #e5e7eb;z-index:10;flex-shrink:0}.toolbar-docname[data-v-9f2d36df]{flex:1;min-width:0}.toolbar-docname__input[data-v-9f2d36df]{width:100%;border:1px solid transparent;border-radius:4px;padding:3px 6px;font-size:14px;font-weight:600;color:#111827;background:transparent;outline:none;transition:border-color .15s,background .15s}.toolbar-docname__input[data-v-9f2d36df]:hover,.toolbar-docname__input[data-v-9f2d36df]:focus{border-color:#d1d5db;background:#f9fafb}.toolbar-docname--empty[data-v-9f2d36df]{font-size:13px;color:#9ca3af}.toolbar-actions[data-v-9f2d36df]{display:flex;gap:8px;flex-shrink:0}.toolbar-btn[data-v-9f2d36df]{display:inline-flex;align-items:center;gap:5px;border:none;border-radius:6px;padding:6px 14px;font-size:13px;font-weight:500;cursor:pointer;transition:background .15s,opacity .15s}.toolbar-btn[data-v-9f2d36df]:disabled{opacity:.5;cursor:not-allowed}.toolbar-btn__icon[data-v-9f2d36df]{font-size:15px}.toolbar-btn--save[data-v-9f2d36df]{background:#d1fae5;color:#065f46}.toolbar-btn--save[data-v-9f2d36df]:hover:not(:disabled){background:#a7f3d0}.toolbar-btn--primary[data-v-9f2d36df]{background:#fef3c7;color:#92400e}.toolbar-btn--primary[data-v-9f2d36df]:hover:not(:disabled){background:#fde68a}.toolbar-btn--ai[data-v-9f2d36df]{background:#ede9fe;color:#5b21b6}.toolbar-btn--ai[data-v-9f2d36df]:hover:not(:disabled){background:#ddd6fe}.umo-editor-instance[data-v-9f2d36df]{flex:1;min-height:0;overflow:hidden;display:flex;flex-direction:column}.umo-editor-stage[data-v-9f2d36df]{position:relative;flex:1;min-height:0;overflow:hidden}.umo-editor-stage.comment-hidden[data-v-9f2d36df] .comment-mark[data-comment-source=doc-origin]{background-color:transparent!important;border-bottom-color:transparent!important;border-bottom-width:0!important}.umo-editor-stage[data-v-9f2d36df]:fullscreen{width:100vw;height:100vh;background:#fff}.editor-placeholder[data-v-9f2d36df]{flex:1;display:flex;align-items:center;justify-content:center;color:#9ca3af;font-size:14px}.umo-custom-huge-btn[data-v-9f2d36df]{display:inline-flex;align-items:center;justify-content:center;flex-direction:column;width:auto;height:56px;padding:0 5px;margin:0;border:none;border-radius:var(--umo-radius, 3px);background:transparent;cursor:pointer;transition:background .2s;white-space:nowrap}.umo-custom-huge-btn[data-v-9f2d36df]:hover:not(:disabled){background:var(--umo-button-hover-background, rgba(0, 0, 0, .06))}.umo-custom-huge-btn[data-v-9f2d36df]:disabled{opacity:.5;cursor:not-allowed}.umo-custom-huge-btn__icon[data-v-9f2d36df]{display:flex;align-items:center;justify-content:center;color:var(--umo-text-color, #3d3d3d);margin-top:3px}.umo-custom-huge-btn__icon svg[data-v-9f2d36df]{width:24px;height:24px}.umo-custom-huge-btn__text[data-v-9f2d36df]{display:block;font-size:12px;color:var(--umo-text-color, #3d3d3d);margin-top:2px;line-height:1.2}.html-dialog-mask[data-v-9f2d36df]{position:fixed;inset:0;background:#00000073;display:flex;align-items:center;justify-content:center;z-index:9999}.html-dialog[data-v-9f2d36df]{background:#1e1e2e;border-radius:10px;width:min(860px,92vw);max-height:80vh;display:flex;flex-direction:column;overflow:hidden;box-shadow:0 20px 60px #0006}.html-dialog__header[data-v-9f2d36df]{display:flex;align-items:center;justify-content:space-between;padding:14px 20px;border-bottom:1px solid #313244;flex-shrink:0}.html-dialog__title[data-v-9f2d36df]{font-size:14px;font-weight:600;color:#cdd6f4}.html-dialog__close[data-v-9f2d36df]{background:none;border:none;color:#6c7086;font-size:16px;cursor:pointer;padding:2px 6px;border-radius:4px;line-height:1;transition:color .15s,background .15s}.html-dialog__close[data-v-9f2d36df]:hover{color:#cdd6f4;background:#313244}.html-dialog__toolbar[data-v-9f2d36df]{display:flex;justify-content:flex-end;padding:8px 16px;border-bottom:1px solid #313244;flex-shrink:0}.html-dialog__copy-btn[data-v-9f2d36df]{font-size:12px;padding:4px 14px;border-radius:5px;border:1px solid #45475a;background:#313244;color:#cdd6f4;cursor:pointer;transition:background .15s,border-color .15s}.html-dialog__copy-btn[data-v-9f2d36df]:hover{background:#45475a;border-color:#89b4fa;color:#89b4fa}.html-dialog__content[data-v-9f2d36df]{flex:1;overflow:auto;margin:0;padding:16px 20px;font-family:Fira Code,Consolas,Courier New,monospace;font-size:12.5px;line-height:1.7;color:#a6e3a1;white-space:pre-wrap;word-break:break-all}[data-v-9f2d36df] table:has(colgroup[data-word-col-layout]) td,[data-v-9f2d36df] table:has(colgroup[data-word-col-layout]) th,[data-v-9f2d36df] table:has(colgroup[data-word-col-layout]){border:none!important;outline:none!important}.complex-comment-panel[data-v-9b0c48b8]{box-sizing:border-box;width:100%;min-width:0;max-width:100%;height:100%;border-left:1px solid #e5e7eb;background:#f3f4f6;display:flex;flex-direction:column;overflow:hidden}.complex-comment-panel__header[data-v-9b0c48b8]{padding:12px 14px 10px;background:#fff;border-bottom:1px solid #e5e7eb}.complex-comment-panel__title[data-v-9b0c48b8]{margin:0 0 10px;font-size:16px;font-weight:600;color:#111827}.complex-comment-panel__title-row[data-v-9b0c48b8]{display:flex;align-items:center;gap:10px}.review-streaming-banner[data-v-9b0c48b8]{display:inline-flex;align-items:center;gap:8px;margin-bottom:10px;padding:6px 10px;border-radius:999px;border:1px solid rgba(22,119,255,.2);background:#1677ff14;color:#1677ff;font-size:12px;line-height:1;width:fit-content;box-shadow:inset 0 1px #ffffffbf,0 6px 18px #1677ff33}.review-streaming-dot[data-v-9b0c48b8]{width:7px;height:7px;border-radius:50%;background:#1677ff;box-shadow:0 0 0 4px #1677ff29;animation:review-streaming-pulse-9b0c48b8 1.1s ease-in-out infinite}@keyframes review-streaming-pulse-9b0c48b8{0%,to{transform:scale(1)}50%{transform:scale(1.15)}}.complex-comment-panel__toolbar[data-v-9b0c48b8]{display:flex;flex-wrap:wrap;align-items:center;gap:10px 14px}.complex-comment-panel__download[data-v-9b0c48b8]{border:none;border-radius:4px;padding:5px 14px;font-size:13px;font-weight:500;cursor:pointer;background:#2563eb;color:#fff}.complex-comment-panel__download[data-v-9b0c48b8]:hover{background:#1d4ed8}.complex-comment-panel__risk-toggle[data-v-9b0c48b8]{display:inline-flex;align-items:center;gap:6px;font-size:13px;color:#4b5563;cursor:pointer;-webkit-user-select:none;user-select:none}.complex-comment-panel__risk-toggle input[data-v-9b0c48b8]{width:14px;height:14px;cursor:pointer}.complex-comment-panel__empty[data-v-9b0c48b8]{flex:1;display:flex;align-items:center;justify-content:center;color:#9ca3af;font-size:14px}.complex-comment-panel__tabs[data-v-9b0c48b8]{display:flex;flex-wrap:wrap;gap:6px;padding:10px 12px;background:#fff;border-bottom:1px solid #e5e7eb}.complex-comment-panel__tab[data-v-9b0c48b8]{border:1px solid #e5e7eb;background:#fff;border-radius:4px;padding:4px 10px;font-size:12px;color:#6b7280;cursor:pointer}.complex-comment-panel__tab[data-v-9b0c48b8]:hover{border-color:#93c5fd;color:#2563eb}.complex-comment-panel__tab--active[data-v-9b0c48b8]{border-color:#2563eb;color:#2563eb;background:#eff6ff;font-weight:500}.complex-comment-panel__body[data-v-9b0c48b8]{flex:1;overflow-y:auto;padding:10px 12px 16px;display:flex;flex-direction:column;gap:14px}.complex-comment-panel__section-head[data-v-9b0c48b8]{margin-bottom:8px}.complex-comment-panel__section-title[data-v-9b0c48b8]{font-size:14px;font-weight:600;color:#111827}.complex-comment-panel__cards[data-v-9b0c48b8]{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:10px}.audit-card[data-v-9b0c48b8]{background:#fff;border:1px solid #e5e7eb;border-radius:8px;padding:12px 14px;cursor:pointer;transition:border-color .15s,box-shadow .15s}.audit-card[data-v-9b0c48b8]:hover{border-color:#d1d5db;box-shadow:0 1px 3px #0000000f}.audit-card--active[data-v-9b0c48b8],.audit-card--active[data-v-9b0c48b8]:hover{border-color:#2563eb;box-shadow:0 0 0 2px #2563eb33}.audit-card__head[data-v-9b0c48b8]{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;margin-bottom:12px}.audit-card__point[data-v-9b0c48b8]{font-size:14px;font-weight:600;color:#111827;line-height:1.4;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.audit-card__badge[data-v-9b0c48b8]{flex-shrink:0;font-size:12px;font-weight:500;padding:2px 8px;border-radius:4px;white-space:nowrap}.audit-card__badge--risk[data-v-9b0c48b8]{background:#fee2e2;color:#dc2626}.audit-card__badge--ok[data-v-9b0c48b8]{background:#22c55e;color:#fff}.audit-card__badge--muted[data-v-9b0c48b8]{background:#f3f4f6;color:#6b7280}.audit-card__block[data-v-9b0c48b8]{margin-bottom:4px}.audit-card__label[data-v-9b0c48b8]{font-size:12px;color:#9ca3af;margin-bottom:6px}.audit-card__label--strong[data-v-9b0c48b8]{color:#111827;font-weight:500}.audit-card__quote[data-v-9b0c48b8]{font-size:13px;color:#6b7280;line-height:1.5;padding:8px 10px 8px 12px;border-left:3px solid #d1d5db;background:#f9fafb;border-radius:0 4px 4px 0;word-break:break-word}.audit-card__locate[data-v-9b0c48b8]{margin-top:8px;border:none;background:none;padding:0;font-size:12px;color:#2563eb;cursor:pointer;display:inline-flex;align-items:center;gap:4px}.audit-card__locate[data-v-9b0c48b8]:hover{text-decoration:underline}.audit-card__locate-icon[data-v-9b0c48b8]{font-size:14px;line-height:1;opacity:.85}.audit-card__divider[data-v-9b0c48b8]{height:1px;background:#e5e7eb;margin:12px 0}.audit-card__block--desc[data-v-9b0c48b8]{margin-bottom:0}.audit-card__desc[data-v-9b0c48b8]{margin:0;font-size:13px;color:#374151;line-height:1.55;word-break:break-word}
1
+ .ProseMirror span.comment-mark,.umo-editor span.comment-mark{border-bottom:2px solid #fbbf24;background-color:transparent;border-radius:0;cursor:text;transition:border-bottom-color .15s}.ProseMirror span.comment-mark:hover,.umo-editor span.comment-mark:hover{border-bottom-color:#facc15}.ProseMirror span.comment-mark--active,.umo-editor span.comment-mark--active{background-color:transparent;border-bottom-color:#f59e0b}.comment-panel[data-v-0f4b5fed]{box-sizing:border-box;width:100%;min-width:0;max-width:100%;height:100%;border-left:1px solid #e5e7eb;background:#fafafa;display:flex;flex-direction:column;overflow:hidden}.comment-panel__header[data-v-0f4b5fed]{padding:14px 16px 10px;border-bottom:1px solid #e5e7eb;background:#fff}.comment-panel__title[data-v-0f4b5fed]{margin:0;font-size:14px;font-weight:600;color:#374151;display:flex;align-items:center;gap:6px}.comment-panel__badge[data-v-0f4b5fed]{background:#f59e0b;color:#fff;border-radius:10px;font-size:11px;padding:1px 6px;font-weight:500}.comment-panel__empty[data-v-0f4b5fed]{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;color:#9ca3af;gap:4px;padding:24px;text-align:center}.comment-panel__empty p[data-v-0f4b5fed]{margin:0;font-size:13px}.comment-panel__empty-icon[data-v-0f4b5fed]{font-size:32px;margin-bottom:8px;opacity:.5}.comment-panel__empty-hint[data-v-0f4b5fed]{font-size:12px!important;color:#d1d5db}.comment-panel__list[data-v-0f4b5fed]{list-style:none;margin:0;padding:8px;overflow-y:auto;flex:1;display:flex;flex-direction:column;gap:8px}.comment-item[data-v-0f4b5fed]{background:#fff;border:1px solid #e5e7eb;border-radius:8px;padding:10px 12px;cursor:pointer;transition:border-color .15s,box-shadow .15s}.comment-item[data-v-0f4b5fed]:hover{border-color:#fbbf24;box-shadow:0 1px 4px #fbbf2426}.comment-item--active[data-v-0f4b5fed]{border-color:#f59e0b;box-shadow:0 0 0 2px #f59e0b33}.comment-item--resolved[data-v-0f4b5fed]{opacity:.55}.comment-item--resolved .comment-item__note[data-v-0f4b5fed]{text-decoration:line-through;color:#9ca3af}.comment-item__quote[data-v-0f4b5fed]{font-size:12px;color:#6b7280;background:#fef9c3;border-left:3px solid #fbbf24;padding:4px 8px;border-radius:0 4px 4px 0;margin-bottom:6px;line-height:1.4}.comment-item__quote-icon[data-v-0f4b5fed]{color:#fbbf24;margin-right:2px}.comment-item--c0 .comment-item__quote[data-v-0f4b5fed]{background:#fef3c7cc;border-left-color:#f97316}.comment-item--c0 .comment-item__quote-icon[data-v-0f4b5fed]{color:#f97316}.comment-item--c1 .comment-item__quote[data-v-0f4b5fed]{background:#d1fae5d9;border-left-color:#22c55e}.comment-item--c1 .comment-item__quote-icon[data-v-0f4b5fed]{color:#22c55e}.comment-item--c2 .comment-item__quote[data-v-0f4b5fed]{background:#dbeafed9;border-left-color:#3b82f6}.comment-item--c2 .comment-item__quote-icon[data-v-0f4b5fed]{color:#3b82f6}.comment-item--c3 .comment-item__quote[data-v-0f4b5fed]{background:#ede9fee6;border-left-color:#a855f7}.comment-item--c3 .comment-item__quote-icon[data-v-0f4b5fed]{color:#a855f7}.comment-item--c4 .comment-item__quote[data-v-0f4b5fed]{background:#fce7f3e6;border-left-color:#ec4899}.comment-item--c4 .comment-item__quote-icon[data-v-0f4b5fed]{color:#ec4899}.comment-item--c5 .comment-item__quote[data-v-0f4b5fed]{background:#ccfbf1d9;border-left-color:#14b8a6}.comment-item--c5 .comment-item__quote-icon[data-v-0f4b5fed]{color:#14b8a6}.comment-item--c6 .comment-item__quote[data-v-0f4b5fed]{background:#fef9c3e6;border-left-color:#eab308}.comment-item--c6 .comment-item__quote-icon[data-v-0f4b5fed]{color:#eab308}.comment-item--c7 .comment-item__quote[data-v-0f4b5fed]{background:#ffe4e6e6;border-left-color:#f43f5e}.comment-item--c7 .comment-item__quote-icon[data-v-0f4b5fed]{color:#f43f5e}.comment-item--c8 .comment-item__quote[data-v-0f4b5fed]{background:#e0e7ffe6;border-left-color:#6366f1}.comment-item--c8 .comment-item__quote-icon[data-v-0f4b5fed]{color:#6366f1}.comment-item--c9 .comment-item__quote[data-v-0f4b5fed]{background:#ecfdc8e6;border-left-color:#84cc16}.comment-item--c9 .comment-item__quote-icon[data-v-0f4b5fed]{color:#84cc16}.comment-item--c10 .comment-item__quote[data-v-0f4b5fed]{background:#cffafee6;border-left-color:#06b6d4}.comment-item--c10 .comment-item__quote-icon[data-v-0f4b5fed]{color:#06b6d4}.comment-item--c11 .comment-item__quote[data-v-0f4b5fed]{background:#d1fae5d9;border-left-color:#10b981}.comment-item--c11 .comment-item__quote-icon[data-v-0f4b5fed]{color:#10b981}.comment-item--c12 .comment-item__quote[data-v-0f4b5fed]{background:#ede9fee6;border-left-color:#8b5cf6}.comment-item--c12 .comment-item__quote-icon[data-v-0f4b5fed]{color:#8b5cf6}.comment-item--c13 .comment-item__quote[data-v-0f4b5fed]{background:#faf0ffe6;border-left-color:#d946ef}.comment-item--c13 .comment-item__quote-icon[data-v-0f4b5fed]{color:#d946ef}.comment-item--c14 .comment-item__quote[data-v-0f4b5fed]{background:#e0f2fee6;border-left-color:#0ea5e9}.comment-item--c14 .comment-item__quote-icon[data-v-0f4b5fed]{color:#0ea5e9}.comment-item--c15 .comment-item__quote[data-v-0f4b5fed]{background:#ffedd5e6;border-left-color:#ea580c}.comment-item--c15 .comment-item__quote-icon[data-v-0f4b5fed]{color:#ea580c}.comment-item--c16 .comment-item__quote[data-v-0f4b5fed]{background:#fefce8e6;border-left-color:#ca8a04}.comment-item--c16 .comment-item__quote-icon[data-v-0f4b5fed]{color:#ca8a04}.comment-item--c17 .comment-item__quote[data-v-0f4b5fed]{background:#fee2e2e6;border-left-color:#dc2626}.comment-item--c17 .comment-item__quote-icon[data-v-0f4b5fed]{color:#dc2626}.comment-item--c18 .comment-item__quote[data-v-0f4b5fed]{background:#ccfbf1d9;border-left-color:#0d9488}.comment-item--c18 .comment-item__quote-icon[data-v-0f4b5fed]{color:#0d9488}.comment-item--c19 .comment-item__quote[data-v-0f4b5fed]{background:#f1f5f9e6;border-left-color:#64748b}.comment-item--c19 .comment-item__quote-icon[data-v-0f4b5fed]{color:#64748b}.comment-item__note[data-v-0f4b5fed]{font-size:13px;color:#374151;line-height:1.5;margin-bottom:6px;word-break:break-word}.comment-item__meta[data-v-0f4b5fed]{display:flex;justify-content:space-between;font-size:11px;color:#9ca3af;margin-bottom:8px}.comment-item__author[data-v-0f4b5fed]{font-weight:500}.comment-item__actions[data-v-0f4b5fed]{display:flex;gap:6px;justify-content:flex-end}.comment-btn[data-v-0f4b5fed]{border:none;border-radius:4px;padding:3px 8px;font-size:11px;cursor:pointer;transition:background .15s}.comment-btn--resolve[data-v-0f4b5fed]{background:#ecfdf5;color:#059669}.comment-btn--resolve[data-v-0f4b5fed]:hover{background:#d1fae5}.comment-btn--delete[data-v-0f4b5fed]{background:#fef2f2;color:#dc2626}.comment-btn--delete[data-v-0f4b5fed]:hover{background:#fee2e2}.dialog-backdrop[data-v-8cbc8293]{position:fixed;inset:0;background:#00000073;display:flex;align-items:center;justify-content:center;z-index:9999}.dialog[data-v-8cbc8293]{background:#fff;border-radius:10px;box-shadow:0 20px 60px #00000026,0 4px 12px #00000014;width:460px;max-width:calc(100vw - 32px);overflow:hidden}.dialog__header[data-v-8cbc8293]{display:flex;align-items:center;justify-content:space-between;padding:16px 20px 12px;border-bottom:1px solid #e5e7eb}.dialog__title[data-v-8cbc8293]{margin:0;font-size:15px;font-weight:600;color:#111827}.dialog__close[data-v-8cbc8293]{border:none;background:none;font-size:14px;color:#9ca3af;cursor:pointer;padding:4px 6px;border-radius:4px;line-height:1}.dialog__close[data-v-8cbc8293]:hover{background:#f3f4f6;color:#374151}.dialog__quote[data-v-8cbc8293]{padding:12px 20px 0}.dialog__quote-label[data-v-8cbc8293]{font-size:11px;font-weight:500;color:#9ca3af;text-transform:uppercase;letter-spacing:.05em}.dialog__quote-text[data-v-8cbc8293]{margin:4px 0 0;padding:8px 12px;background:#fef9c3;border-left:3px solid #fbbf24;border-radius:0 4px 4px 0;font-size:13px;color:#374151;line-height:1.5}.dialog__body[data-v-8cbc8293]{padding:16px 20px 0}.dialog__label[data-v-8cbc8293]{display:block;font-size:12px;font-weight:500;color:#374151;margin-bottom:6px}.dialog__textarea[data-v-8cbc8293]{width:100%;border:1px solid #d1d5db;border-radius:6px;padding:10px 12px;font-size:14px;font-family:inherit;resize:vertical;box-sizing:border-box;transition:border-color .15s,box-shadow .15s;outline:none;color:#111827;line-height:1.5}.dialog__textarea[data-v-8cbc8293]:focus{border-color:#f59e0b;box-shadow:0 0 0 3px #f59e0b26}.dialog__hint[data-v-8cbc8293]{margin:6px 0 0;font-size:11px;color:#9ca3af}.dialog__footer[data-v-8cbc8293]{display:flex;justify-content:flex-end;gap:8px;padding:16px 20px}.dialog__btn[data-v-8cbc8293]{border:none;border-radius:6px;padding:8px 16px;font-size:13px;font-weight:500;cursor:pointer;transition:background .15s}.dialog__btn--cancel[data-v-8cbc8293]{background:#f3f4f6;color:#374151}.dialog__btn--cancel[data-v-8cbc8293]:hover{background:#e5e7eb}.dialog__btn--confirm[data-v-8cbc8293]{background:#f59e0b;color:#fff}.dialog__btn--confirm[data-v-8cbc8293]:hover:not(:disabled){background:#d97706}.dialog__btn--confirm[data-v-8cbc8293]:disabled{opacity:.45;cursor:not-allowed}.comment-gutter[data-v-ac6164bd]{position:absolute;top:12px;right:-300px;width:280px;pointer-events:none;display:flex;flex-direction:column}.gutter-item-wrapper[data-v-ac6164bd]{pointer-events:auto}.gutter-item[data-v-ac6164bd]{position:relative;width:100%;background:#fff;border:1px solid #e5e7eb;border-left-width:4px;border-radius:8px;padding:8px 10px;box-shadow:0 8px 18px #0000000f;cursor:pointer;-webkit-user-select:none;user-select:none;outline:none;transition:transform .12s,box-shadow .12s,border-color .12s}.gutter-item[data-v-ac6164bd]:hover{transform:translateY(-1px);box-shadow:0 10px 22px #00000014}.gutter-item--active[data-v-ac6164bd]{border-color:#f59e0b;box-shadow:0 0 0 2px #f59e0b38,0 10px 22px #00000014}.gutter-item--resolved[data-v-ac6164bd]{opacity:.6}.gutter-item__quote[data-v-ac6164bd]{font-size:12px;color:#6b7280;margin-bottom:4px}.gutter-item__note[data-v-ac6164bd]{font-size:13px;color:#374151;line-height:1.35;margin-bottom:6px;word-break:break-word}.gutter-item__meta[data-v-ac6164bd]{display:flex;justify-content:space-between;font-size:11px;color:#9ca3af}.gutter-item--c0[data-v-ac6164bd]{border-left-color:#f97316}.gutter-item--c1[data-v-ac6164bd]{border-left-color:#22c55e}.gutter-item--c2[data-v-ac6164bd]{border-left-color:#3b82f6}.gutter-item--c3[data-v-ac6164bd]{border-left-color:#a855f7}.gutter-item--c4[data-v-ac6164bd]{border-left-color:#ec4899}.gutter-item--c5[data-v-ac6164bd]{border-left-color:#14b8a6}.gutter-item--c6[data-v-ac6164bd]{border-left-color:#eab308}.gutter-item--c7[data-v-ac6164bd]{border-left-color:#f43f5e}.gutter-item--c8[data-v-ac6164bd]{border-left-color:#6366f1}.gutter-item--c9[data-v-ac6164bd]{border-left-color:#84cc16}.gutter-item--c10[data-v-ac6164bd]{border-left-color:#06b6d4}.gutter-item--c11[data-v-ac6164bd]{border-left-color:#10b981}.gutter-item--c12[data-v-ac6164bd]{border-left-color:#8b5cf6}.gutter-item--c13[data-v-ac6164bd]{border-left-color:#d946ef}.gutter-item--c14[data-v-ac6164bd]{border-left-color:#0ea5e9}.gutter-item--c15[data-v-ac6164bd]{border-left-color:#ea580c}.gutter-item--c16[data-v-ac6164bd]{border-left-color:#ca8a04}.gutter-item--c17[data-v-ac6164bd]{border-left-color:#dc2626}.gutter-item--c18[data-v-ac6164bd]{border-left-color:#0d9488}.gutter-item--c19[data-v-ac6164bd]{border-left-color:#64748b}.umo-editor-content .tableWrapper{max-width:100%;box-sizing:border-box}.umo-editor-content table{width:100%!important;max-width:100%;box-sizing:border-box}.umo-editor-content table td,.umo-editor-content table th{box-sizing:border-box}.umo-editor-content table:has(colgroup[data-word-col-layout]) td,.umo-editor-content table:has(colgroup[data-word-col-layout]) th,.umo-editor-content table:has(colgroup[data-word-col-layout]){border:none!important;outline:none!important}.umo-editor-content table:has(colgroup col:nth-child(2)){table-layout:fixed}.umo-editor-content ul[type=disc] li>p:before,.umo-editor-content ul[type=circle] li>p:before,.umo-editor-content ul[type=square] li>p:before{content:none}.auth-page[data-v-9f2d36df]{min-height:100%;display:flex;align-items:center;justify-content:center;background:#f3f4f6}.auth-card[data-v-9f2d36df]{background:#fff;border-radius:12px;padding:40px 36px;width:340px;box-shadow:0 4px 24px #0000001a}.auth-title[data-v-9f2d36df]{font-size:20px;font-weight:700;color:#111827;text-align:center;margin:0 0 24px}.auth-tabs[data-v-9f2d36df]{display:flex;gap:0;border:1px solid #e5e7eb;border-radius:8px;overflow:hidden;margin-bottom:20px}.auth-tab[data-v-9f2d36df]{flex:1;padding:8px;border:none;background:transparent;cursor:pointer;font-size:14px;color:#6b7280;transition:background .15s,color .15s}.auth-tab--active[data-v-9f2d36df]{background:#3b82f6;color:#fff}.auth-form[data-v-9f2d36df]{display:flex;flex-direction:column;gap:12px}.auth-input[data-v-9f2d36df]{padding:10px 14px;border:1px solid #d1d5db;border-radius:8px;font-size:14px;outline:none;transition:border-color .15s}.auth-input[data-v-9f2d36df]:focus{border-color:#3b82f6}.auth-submit[data-v-9f2d36df]{padding:10px;border:none;border-radius:8px;background:#3b82f6;color:#fff;font-size:14px;font-weight:600;cursor:pointer;transition:background .15s}.auth-submit[data-v-9f2d36df]:hover:not(:disabled){background:#2563eb}.auth-submit[data-v-9f2d36df]:disabled{opacity:.6;cursor:not-allowed}.auth-error[data-v-9f2d36df]{color:#ef4444;font-size:13px;margin:0}.app-layout[data-v-9f2d36df]{display:flex;width:100%;height:100%;overflow:hidden}.editor-wrapper[data-v-9f2d36df]{flex:1;display:flex;flex-direction:column;min-width:0;overflow:hidden}.app-layout__comment-aside[data-v-9f2d36df]{flex:0 1 clamp(280px,36vw,720px);min-width:0;max-width:100%;display:flex;flex-direction:column;overflow:hidden}.comment-toolbar[data-v-9f2d36df]{display:flex;align-items:center;gap:8px;padding:8px 16px;background:#fff;border-bottom:1px solid #e5e7eb;z-index:10;flex-shrink:0}.toolbar-docname[data-v-9f2d36df]{flex:1;min-width:0}.toolbar-docname__input[data-v-9f2d36df]{width:100%;border:1px solid transparent;border-radius:4px;padding:3px 6px;font-size:14px;font-weight:600;color:#111827;background:transparent;outline:none;transition:border-color .15s,background .15s}.toolbar-docname__input[data-v-9f2d36df]:hover,.toolbar-docname__input[data-v-9f2d36df]:focus{border-color:#d1d5db;background:#f9fafb}.toolbar-docname--empty[data-v-9f2d36df]{font-size:13px;color:#9ca3af}.toolbar-actions[data-v-9f2d36df]{display:flex;gap:8px;flex-shrink:0}.toolbar-btn[data-v-9f2d36df]{display:inline-flex;align-items:center;gap:5px;border:none;border-radius:6px;padding:6px 14px;font-size:13px;font-weight:500;cursor:pointer;transition:background .15s,opacity .15s}.toolbar-btn[data-v-9f2d36df]:disabled{opacity:.5;cursor:not-allowed}.toolbar-btn__icon[data-v-9f2d36df]{font-size:15px}.toolbar-btn--save[data-v-9f2d36df]{background:#d1fae5;color:#065f46}.toolbar-btn--save[data-v-9f2d36df]:hover:not(:disabled){background:#a7f3d0}.toolbar-btn--primary[data-v-9f2d36df]{background:#fef3c7;color:#92400e}.toolbar-btn--primary[data-v-9f2d36df]:hover:not(:disabled){background:#fde68a}.toolbar-btn--ai[data-v-9f2d36df]{background:#ede9fe;color:#5b21b6}.toolbar-btn--ai[data-v-9f2d36df]:hover:not(:disabled){background:#ddd6fe}.umo-editor-instance[data-v-9f2d36df]{flex:1;min-height:0;overflow:hidden;display:flex;flex-direction:column}.umo-editor-stage[data-v-9f2d36df]{position:relative;flex:1;min-height:0;overflow:hidden}.umo-editor-stage.comment-hidden[data-v-9f2d36df] .comment-mark[data-comment-source=doc-origin]{background-color:transparent!important;border-bottom-color:transparent!important;border-bottom-width:0!important}.umo-editor-stage[data-v-9f2d36df]:fullscreen{width:100vw;height:100vh;background:#fff}.editor-placeholder[data-v-9f2d36df]{flex:1;display:flex;align-items:center;justify-content:center;color:#9ca3af;font-size:14px}.umo-custom-huge-btn[data-v-9f2d36df]{display:inline-flex;align-items:center;justify-content:center;flex-direction:column;width:auto;height:56px;padding:0 5px;margin:0;border:none;border-radius:var(--umo-radius, 3px);background:transparent;cursor:pointer;transition:background .2s;white-space:nowrap}.umo-custom-huge-btn[data-v-9f2d36df]:hover:not(:disabled){background:var(--umo-button-hover-background, rgba(0, 0, 0, .06))}.umo-custom-huge-btn[data-v-9f2d36df]:disabled{opacity:.5;cursor:not-allowed}.umo-custom-huge-btn__icon[data-v-9f2d36df]{display:flex;align-items:center;justify-content:center;color:var(--umo-text-color, #3d3d3d);margin-top:3px}.umo-custom-huge-btn__icon svg[data-v-9f2d36df]{width:24px;height:24px}.umo-custom-huge-btn__text[data-v-9f2d36df]{display:block;font-size:12px;color:var(--umo-text-color, #3d3d3d);margin-top:2px;line-height:1.2}.html-dialog-mask[data-v-9f2d36df]{position:fixed;inset:0;background:#00000073;display:flex;align-items:center;justify-content:center;z-index:9999}.html-dialog[data-v-9f2d36df]{background:#1e1e2e;border-radius:10px;width:min(860px,92vw);max-height:80vh;display:flex;flex-direction:column;overflow:hidden;box-shadow:0 20px 60px #0006}.html-dialog__header[data-v-9f2d36df]{display:flex;align-items:center;justify-content:space-between;padding:14px 20px;border-bottom:1px solid #313244;flex-shrink:0}.html-dialog__title[data-v-9f2d36df]{font-size:14px;font-weight:600;color:#cdd6f4}.html-dialog__close[data-v-9f2d36df]{background:none;border:none;color:#6c7086;font-size:16px;cursor:pointer;padding:2px 6px;border-radius:4px;line-height:1;transition:color .15s,background .15s}.html-dialog__close[data-v-9f2d36df]:hover{color:#cdd6f4;background:#313244}.html-dialog__toolbar[data-v-9f2d36df]{display:flex;justify-content:flex-end;padding:8px 16px;border-bottom:1px solid #313244;flex-shrink:0}.html-dialog__copy-btn[data-v-9f2d36df]{font-size:12px;padding:4px 14px;border-radius:5px;border:1px solid #45475a;background:#313244;color:#cdd6f4;cursor:pointer;transition:background .15s,border-color .15s}.html-dialog__copy-btn[data-v-9f2d36df]:hover{background:#45475a;border-color:#89b4fa;color:#89b4fa}.html-dialog__content[data-v-9f2d36df]{flex:1;overflow:auto;margin:0;padding:16px 20px;font-family:Fira Code,Consolas,Courier New,monospace;font-size:12.5px;line-height:1.7;color:#a6e3a1;white-space:pre-wrap;word-break:break-all}[data-v-9f2d36df] table:has(colgroup[data-word-col-layout]) td,[data-v-9f2d36df] table:has(colgroup[data-word-col-layout]) th,[data-v-9f2d36df] table:has(colgroup[data-word-col-layout]){border:none!important;outline:none!important}.complex-comment-panel[data-v-448ac300]{box-sizing:border-box;width:100%;min-width:0;max-width:100%;height:100%;border-left:1px solid #e5e7eb;background:#f3f4f6;display:flex;flex-direction:column;overflow:hidden}.complex-comment-panel__header[data-v-448ac300]{padding:12px 14px 10px;background:#fff;border-bottom:1px solid #e5e7eb}.complex-comment-panel__title[data-v-448ac300]{margin:0 0 10px;font-size:16px;font-weight:600;color:#111827}.complex-comment-panel__title-row[data-v-448ac300]{display:flex;align-items:center;gap:10px}.review-streaming-banner[data-v-448ac300]{display:inline-flex;align-items:center;gap:8px;margin-bottom:10px;padding:6px 10px;border-radius:999px;border:1px solid rgba(22,119,255,.2);background:#1677ff14;color:#1677ff;font-size:12px;line-height:1;width:fit-content;box-shadow:inset 0 1px #ffffffbf,0 6px 18px #1677ff33}.review-streaming-dot[data-v-448ac300]{width:7px;height:7px;border-radius:50%;background:#1677ff;box-shadow:0 0 0 4px #1677ff29;animation:review-streaming-pulse-448ac300 1.1s ease-in-out infinite}@keyframes review-streaming-pulse-448ac300{0%,to{transform:scale(1)}50%{transform:scale(1.15)}}.complex-comment-panel__toolbar[data-v-448ac300]{display:flex;flex-wrap:wrap;align-items:center;gap:10px 14px}.complex-comment-panel__download[data-v-448ac300]{border:none;border-radius:4px;padding:5px 14px;font-size:13px;font-weight:500;cursor:pointer;background:#2563eb;color:#fff}.complex-comment-panel__download[data-v-448ac300]:hover{background:#1d4ed8}.complex-comment-panel__risk-toggle[data-v-448ac300]{display:inline-flex;align-items:center;gap:6px;font-size:13px;color:#4b5563;cursor:pointer;-webkit-user-select:none;user-select:none}.complex-comment-panel__risk-toggle input[data-v-448ac300]{width:14px;height:14px;cursor:pointer}.complex-comment-panel__empty[data-v-448ac300]{flex:1;display:flex;align-items:center;justify-content:center;color:#9ca3af;font-size:14px}.complex-comment-panel__tabs[data-v-448ac300]{display:flex;flex-wrap:wrap;gap:6px;padding:10px 12px;background:#fff;border-bottom:1px solid #e5e7eb}.complex-comment-panel__tab[data-v-448ac300]{border:1px solid #e5e7eb;background:#fff;border-radius:4px;padding:4px 10px;font-size:12px;color:#6b7280;cursor:pointer}.complex-comment-panel__tab[data-v-448ac300]:hover{border-color:#93c5fd;color:#2563eb}.complex-comment-panel__tab--active[data-v-448ac300]{border-color:#2563eb;color:#2563eb;background:#eff6ff;font-weight:500}.complex-comment-panel__body[data-v-448ac300]{flex:1;overflow-y:auto;padding:10px 12px 16px;display:flex;flex-direction:column;gap:14px}.complex-comment-panel__section-head[data-v-448ac300]{margin-bottom:8px}.complex-comment-panel__section-title[data-v-448ac300]{font-size:14px;font-weight:600;color:#111827}.complex-comment-panel__cards[data-v-448ac300]{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:10px}.audit-card[data-v-448ac300]{background:#fff;border:1px solid #e5e7eb;border-radius:8px;padding:12px 14px;cursor:pointer;transition:border-color .15s,box-shadow .15s}.audit-card[data-v-448ac300]:hover{border-color:#d1d5db;box-shadow:0 1px 3px #0000000f}.audit-card--active[data-v-448ac300],.audit-card--active[data-v-448ac300]:hover{border-color:#2563eb;box-shadow:0 0 0 2px #2563eb33}.audit-card__head[data-v-448ac300]{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;margin-bottom:12px}.audit-card__point[data-v-448ac300]{font-size:14px;font-weight:600;color:#111827;line-height:1.4;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.audit-card__badge[data-v-448ac300]{flex-shrink:0;font-size:12px;font-weight:500;padding:2px 8px;border-radius:4px;white-space:nowrap}.audit-card__badge--risk[data-v-448ac300]{background:#fee2e2;color:#dc2626}.audit-card__badge--ok[data-v-448ac300]{background:#22c55e;color:#fff}.audit-card__badge--muted[data-v-448ac300]{background:#f3f4f6;color:#6b7280}.audit-card__block[data-v-448ac300]{margin-bottom:4px}.audit-card__label[data-v-448ac300]{font-size:12px;color:#9ca3af;margin-bottom:6px}.audit-card__label--strong[data-v-448ac300]{color:#111827;font-weight:500}.audit-card__quote[data-v-448ac300]{font-size:13px;color:#6b7280;line-height:1.5;padding:8px 10px 8px 12px;border-left:3px solid #d1d5db;background:#f9fafb;border-radius:0 4px 4px 0;word-break:break-word}.audit-card__locate[data-v-448ac300]{margin-top:8px;border:none;background:none;padding:0;font-size:12px;color:#2563eb;cursor:pointer;display:inline-flex;align-items:center;gap:4px}.audit-card__locate[data-v-448ac300]:hover{text-decoration:underline}.audit-card__locate-icon[data-v-448ac300]{font-size:14px;line-height:1;opacity:.85}.audit-card__divider[data-v-448ac300]{height:1px;background:#e5e7eb;margin:12px 0}.audit-card__block--desc[data-v-448ac300]{margin-bottom:0}.audit-card__desc[data-v-448ac300]{margin:0;font-size:13px;color:#374151;line-height:1.55;word-break:break-word}
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { useUmoEditor as Vn } from "@umoteam/editor";
2
- import { computed as X, ref as M, watch as ct, nextTick as Ie, openBlock as S, createElementBlock as A, createElementVNode as l, createTextVNode as Ce, toDisplayString as E, createCommentVNode as ft, Fragment as St, renderList as Jt, normalizeClass as Tt, withModifiers as ht, onMounted as Se, createBlock as Rt, Teleport as Te, withDirectives as mn, withKeys as Ee, vModelText as Kn, normalizeStyle as jn, defineComponent as Yn, onUnmounted as Ke, useAttrs as Xn, resolveComponent as Qn, createVNode as Zn, mergeProps as to, withCtx as je, renderSlot as eo, unref as xt, createApp as no, h as oo, vModelCheckbox as ro } from "vue";
2
+ import { computed as X, ref as I, watch as ct, nextTick as Ie, openBlock as T, createElementBlock as A, createElementVNode as l, createTextVNode as Ce, toDisplayString as N, createCommentVNode as ft, Fragment as St, renderList as Jt, normalizeClass as Tt, withModifiers as ht, onMounted as Se, createBlock as Rt, Teleport as Te, withDirectives as mn, withKeys as Ee, vModelText as Kn, normalizeStyle as jn, defineComponent as Yn, onUnmounted as Ke, useAttrs as Xn, resolveComponent as Qn, createVNode as Zn, mergeProps as to, withCtx as je, renderSlot as eo, unref as xt, createApp as no, h as oo, vModelCheckbox as ro } from "vue";
3
3
  import { E as dn, p as fn, m as so, g as Ye, u as io, e as lo, a as Xe, b as ao, c as Qe, s as Ze, C as co, d as dt } from "./wordDocxExport-DFtBOlHa.js";
4
4
  import { parseDocxToJson as uo, parseDocxToHtml as mo, parseDocxComments as fo } from "./wordDocxImport.js";
5
5
  const Pt = (s, t) => {
@@ -34,7 +34,7 @@ const Pt = (s, t) => {
34
34
  },
35
35
  emits: ["activate", "delete", "resolve"],
36
36
  setup(s, { emit: t }) {
37
- const e = s, n = t, o = X(() => e.comments.filter((d) => !d?.resolved).length), r = M(null), u = (d, m) => d ? d.length > m ? d.slice(0, m) + "…" : d : "", a = (d) => {
37
+ const e = s, n = t, o = X(() => e.comments.filter((d) => !d?.resolved).length), r = I(null), u = (d, m) => d ? d.length > m ? d.slice(0, m) + "…" : d : "", a = (d) => {
38
38
  n("activate", d);
39
39
  };
40
40
  return ct(
@@ -47,7 +47,7 @@ const Pt = (s, t) => {
47
47
  const h = m.querySelector(`[data-comment-id="${d}"]`);
48
48
  h instanceof HTMLElement && h.scrollIntoView({ behavior: "smooth", block: "nearest" });
49
49
  }
50
- ), (d, m) => (S(), A("aside", {
50
+ ), (d, m) => (T(), A("aside", {
51
51
  ref_key: "panelRootRef",
52
52
  ref: r,
53
53
  class: "comment-panel"
@@ -55,15 +55,15 @@ const Pt = (s, t) => {
55
55
  l("div", ho, [
56
56
  l("h3", po, [
57
57
  m[0] || (m[0] = Ce(" 批注 ", -1)),
58
- o.value ? (S(), A("span", go, E(o.value), 1)) : ft("", !0)
58
+ o.value ? (T(), A("span", go, N(o.value), 1)) : ft("", !0)
59
59
  ])
60
60
  ]),
61
- s.comments.length === 0 ? (S(), A("div", vo, [...m[1] || (m[1] = [
61
+ s.comments.length === 0 ? (T(), A("div", vo, [...m[1] || (m[1] = [
62
62
  l("div", { class: "comment-panel__empty-icon" }, "💬", -1),
63
63
  l("p", null, "暂无批注", -1),
64
64
  l("p", { class: "comment-panel__empty-hint" }, "选中文本后点击「添加批注」", -1)
65
- ])])) : (S(), A("ul", yo, [
66
- (S(!0), A(St, null, Jt(s.comments, (h) => (S(), A("li", {
65
+ ])])) : (T(), A("ul", yo, [
66
+ (T(!0), A(St, null, Jt(s.comments, (h) => (T(), A("li", {
67
67
  key: h.id,
68
68
  class: Tt(["comment-item", [
69
69
  `comment-item--c${h.colorIndex ?? 0}`,
@@ -77,19 +77,19 @@ const Pt = (s, t) => {
77
77
  }, [
78
78
  l("div", ko, [
79
79
  m[2] || (m[2] = l("span", { class: "comment-item__quote-icon" }, "❝", -1)),
80
- Ce(" " + E(u(h.selectedText, 40)), 1)
80
+ Ce(" " + N(u(h.selectedText, 40)), 1)
81
81
  ]),
82
- l("div", _o, E(h.note), 1),
82
+ l("div", _o, N(h.note), 1),
83
83
  l("div", xo, [
84
- l("span", bo, E(h.author), 1),
85
- l("span", Co, E(s.formatTime(h.createdAt)), 1)
84
+ l("span", bo, N(h.author), 1),
85
+ l("span", Co, N(s.formatTime(h.createdAt)), 1)
86
86
  ]),
87
87
  l("div", So, [
88
88
  l("button", {
89
89
  class: "comment-btn comment-btn--resolve",
90
90
  type: "button",
91
91
  onClick: ht((R) => n("resolve", h.id), ["stop"])
92
- }, E(h.resolved ? "取消解决" : "已解决"), 9, To),
92
+ }, N(h.resolved ? "取消解决" : "已解决"), 9, To),
93
93
  l("button", {
94
94
  class: "comment-btn comment-btn--delete",
95
95
  type: "button",
@@ -117,14 +117,14 @@ const Pt = (s, t) => {
117
117
  },
118
118
  emits: ["confirm", "cancel"],
119
119
  setup(s, { emit: t }) {
120
- const e = s, n = t, o = M(e.initialNote), r = M(null);
120
+ const e = s, n = t, o = I(e.initialNote), r = I(null);
121
121
  Se(() => {
122
122
  r.value?.focus();
123
123
  });
124
124
  const u = (d, m) => d ? d.length > m ? d.slice(0, m) + "…" : d : "", a = () => {
125
125
  o.value.trim() && (n("confirm", o.value.trim()), o.value = "");
126
126
  };
127
- return (d, m) => (S(), Rt(Te, { to: "body" }, [
127
+ return (d, m) => (T(), Rt(Te, { to: "body" }, [
128
128
  l("div", {
129
129
  class: "dialog-backdrop",
130
130
  onClick: m[4] || (m[4] = ht((h) => d.$emit("cancel"), ["self"]))
@@ -137,9 +137,9 @@ const Pt = (s, t) => {
137
137
  onClick: m[0] || (m[0] = (h) => d.$emit("cancel"))
138
138
  }, "✕")
139
139
  ]),
140
- s.selectedText ? (S(), A("div", Ao, [
140
+ s.selectedText ? (T(), A("div", Ao, [
141
141
  m[6] || (m[6] = l("span", { class: "dialog__quote-label" }, "选中文本", -1)),
142
- l("blockquote", Do, E(u(s.selectedText, 120)), 1)
142
+ l("blockquote", Do, N(u(s.selectedText, 120)), 1)
143
143
  ])) : ft("", !0),
144
144
  l("div", $o, [
145
145
  m[7] || (m[7] = l("label", {
@@ -201,7 +201,7 @@ const Pt = (s, t) => {
201
201
  if (!a) return "";
202
202
  const m = String(a);
203
203
  return m.length > d ? m.slice(0, d) + "…" : m;
204
- }, n = M([]);
204
+ }, n = I([]);
205
205
  ct(
206
206
  () => ({ anchors: t.anchors, commentsLen: (t.comments || []).length }),
207
207
  ({ anchors: a, commentsLen: d }) => {
@@ -239,8 +239,8 @@ const Pt = (s, t) => {
239
239
  }
240
240
  return a;
241
241
  });
242
- return (a, d) => (S(), A("div", Lo, [
243
- (S(!0), A(St, null, Jt(u.value, (m) => (S(), A("div", {
242
+ return (a, d) => (T(), A("div", Lo, [
243
+ (T(!0), A(St, null, Jt(u.value, (m) => (T(), A("div", {
244
244
  key: m.id,
245
245
  class: "gutter-item-wrapper",
246
246
  style: jn({ marginTop: `${m.marginTop}px` })
@@ -258,11 +258,11 @@ const Pt = (s, t) => {
258
258
  onClick: (h) => a.$emit("activate", m.id),
259
259
  onKeydown: Ee(ht((h) => a.$emit("activate", m.id), ["prevent"]), ["enter"])
260
260
  }, [
261
- l("div", qo, E(e(m.selectedText, 28)), 1),
262
- l("div", Ho, E(e(m.note, 36)), 1),
261
+ l("div", qo, N(e(m.selectedText, 28)), 1),
262
+ l("div", Ho, N(e(m.note, 36)), 1),
263
263
  l("div", Uo, [
264
- l("span", Go, E(m.author), 1),
265
- l("span", Wo, E(s.formatTime(m.createdAt)), 1)
264
+ l("span", Go, N(m.author), 1),
265
+ l("span", Wo, N(s.formatTime(m.createdAt)), 1)
266
266
  ])
267
267
  ], 42, Po)
268
268
  ], 4))), 128))
@@ -1790,19 +1790,19 @@ const nr = new er("commentGutter"), or = dn.create({
1790
1790
  d();
1791
1791
  const h = o.dom;
1792
1792
  if (!h) return;
1793
- const R = s?.(), P = t?.() || R || h, _ = P.getBoundingClientRect(), y = typeof P.scrollTop == "number" ? P.scrollTop : 0, N = h.querySelectorAll(".comment-mark") || [], I = /* @__PURE__ */ new Map();
1794
- N.forEach((q) => {
1793
+ const R = s?.(), P = t?.() || R || h, _ = P.getBoundingClientRect(), y = typeof P.scrollTop == "number" ? P.scrollTop : 0, M = h.querySelectorAll(".comment-mark") || [], x = /* @__PURE__ */ new Map();
1794
+ M.forEach((q) => {
1795
1795
  const Z = fn(q);
1796
1796
  if (!Z.length) return;
1797
- const T = q.getClientRects()[0] || q.getBoundingClientRect();
1798
- if (!T) return;
1799
- const mt = T.top - _.top + y, qt = T.height || 0;
1797
+ const E = q.getClientRects()[0] || q.getBoundingClientRect();
1798
+ if (!E) return;
1799
+ const mt = E.top - _.top + y, qt = E.height || 0;
1800
1800
  for (const Nt of Z) {
1801
- const Ht = I.get(Nt);
1802
- (!Ht || mt < Ht.top) && I.set(Nt, { id: Nt, top: mt, height: qt });
1801
+ const Ht = x.get(Nt);
1802
+ (!Ht || mt < Ht.top) && x.set(Nt, { id: Nt, top: mt, height: qt });
1803
1803
  }
1804
1804
  });
1805
- const Y = Array.from(I.values());
1805
+ const Y = Array.from(x.values());
1806
1806
  e?.(Y);
1807
1807
  };
1808
1808
  return {
@@ -1981,7 +1981,7 @@ const ur = { class: "app-layout" }, mr = { class: "editor-wrapper" }, dr = { cla
1981
1981
  (c, p) => ([4, 6, 8, 10].includes(p) ? "-" : "") + c.toString(16).padStart(2, "0")
1982
1982
  ).join("");
1983
1983
  }
1984
- const o = M(!1);
1984
+ const o = I(!1);
1985
1985
  function r() {
1986
1986
  o.value = document.fullscreenElement === pt.value;
1987
1987
  }
@@ -2003,47 +2003,47 @@ const ur = { class: "app-layout" }, mr = { class: "editor-wrapper" }, dr = { cla
2003
2003
  function P() {
2004
2004
  V()?.setEditable?.(!!a.editable);
2005
2005
  }
2006
- const _ = M(""), y = /* @__PURE__ */ new Map();
2007
- let N = null;
2008
- const I = (i) => {
2009
- clearTimeout(N), N = setTimeout(() => {
2006
+ const _ = I(""), y = /* @__PURE__ */ new Map();
2007
+ let M = null;
2008
+ const x = (i) => {
2009
+ clearTimeout(M), M = setTimeout(() => {
2010
2010
  const c = i ?? V();
2011
- if (!c || T.value.length === 0 && y.size === 0) return;
2011
+ if (!c || E.value.length === 0 && y.size === 0) return;
2012
2012
  const p = /* @__PURE__ */ new Set();
2013
2013
  c.state.doc.descendants((f) => {
2014
2014
  f.marks.forEach((v) => {
2015
2015
  if (v.type.name === "comment")
2016
- for (const b of Ye(v.attrs))
2017
- p.add(b);
2016
+ for (const C of Ye(v.attrs))
2017
+ p.add(C);
2018
2018
  });
2019
2019
  });
2020
2020
  for (const [f, { comment: v }] of y)
2021
- p.has(f) && (y.delete(f), Nn(f), T.value.push(v));
2022
- T.value.filter(
2021
+ p.has(f) && (y.delete(f), Nn(f), E.value.push(v));
2022
+ E.value.filter(
2023
2023
  (f) => !p.has(f.id) && !y.has(f.id)
2024
2024
  ).forEach((f) => {
2025
- T.value = T.value.filter((v) => v.id !== f.id), y.set(f.id, { comment: { ...f } }), En(f.id);
2025
+ E.value = E.value.filter((v) => v.id !== f.id), y.set(f.id, { comment: { ...f } }), En(f.id);
2026
2026
  });
2027
2027
  }, 500);
2028
2028
  }, Y = (i) => {
2029
2029
  const c = i ?? V();
2030
- if (!c || T.value.length === 0) return;
2030
+ if (!c || E.value.length === 0) return;
2031
2031
  const p = /* @__PURE__ */ new Map();
2032
2032
  c.state.doc.descendants((g) => {
2033
2033
  g.marks.forEach((f) => {
2034
2034
  if (f.type.name !== "comment") return;
2035
2035
  const v = Ye(f.attrs);
2036
2036
  if (!v.length) return;
2037
- const b = f.attrs.commentColors && typeof f.attrs.commentColors == "object" ? f.attrs.commentColors : {};
2038
- for (const C of v) {
2039
- const x = b[C] != null ? b[C] : f.attrs.colorIndex ?? 0, w = Number.parseInt(x, 10), K = Number.isNaN(w) || !Number.isFinite(w) ? 0 : (w % dt + dt) % dt;
2040
- p.set(C, K);
2037
+ const C = f.attrs.commentColors && typeof f.attrs.commentColors == "object" ? f.attrs.commentColors : {};
2038
+ for (const S of v) {
2039
+ const b = C[S] != null ? C[S] : f.attrs.colorIndex ?? 0, w = Number.parseInt(b, 10), K = Number.isNaN(w) || !Number.isFinite(w) ? 0 : (w % dt + dt) % dt;
2040
+ p.set(S, K);
2041
2041
  }
2042
2042
  });
2043
- }), p.size !== 0 && (T.value = T.value.map(
2043
+ }), p.size !== 0 && (E.value = E.value.map(
2044
2044
  (g) => p.has(g.id) ? { ...g, colorIndex: p.get(g.id) } : g
2045
2045
  ));
2046
- }, q = M(null);
2046
+ }, q = I(null);
2047
2047
  let Z = null;
2048
2048
  ct(
2049
2049
  () => q.value,
@@ -2055,7 +2055,7 @@ const ur = { class: "app-layout" }, mr = { class: "editor-wrapper" }, dr = { cla
2055
2055
  { immediate: !0 }
2056
2056
  );
2057
2057
  const {
2058
- comments: T,
2058
+ comments: E,
2059
2059
  activeCommentId: mt,
2060
2060
  addComment: qt,
2061
2061
  deleteComment: Nt,
@@ -2070,7 +2070,7 @@ const ur = { class: "app-layout" }, mr = { class: "editor-wrapper" }, dr = { cla
2070
2070
  ct(mt, (i) => {
2071
2071
  d("activeCommentChange", i);
2072
2072
  });
2073
- const pt = M(null), ce = M([]), Mn = () => pt.value, In = () => pt.value?.querySelector?.(".umo-scrollable-container") || pt.value?.querySelector?.(".umo-scrollable") || pt.value, On = (i, c) => {
2073
+ const pt = I(null), ce = I([]), Mn = () => pt.value, In = () => pt.value?.querySelector?.(".umo-scrollable-container") || pt.value?.querySelector?.(".umo-scrollable") || pt.value, On = (i, c) => {
2074
2074
  if (!h.value || !i || i.__gutterMounted) return;
2075
2075
  i.__gutterMounted = !0, no({
2076
2076
  setup() {
@@ -2083,14 +2083,14 @@ const ur = { class: "app-layout" }, mr = { class: "editor-wrapper" }, dr = { cla
2083
2083
  };
2084
2084
  return () => oo(Ko, {
2085
2085
  anchors: ce.value,
2086
- comments: T.value,
2086
+ comments: E.value,
2087
2087
  activeCommentId: mt.value,
2088
2088
  formatTime: ae,
2089
2089
  onActivate: g
2090
2090
  });
2091
2091
  }
2092
2092
  }).mount(i);
2093
- }, ue = M(!1), me = M(""), An = M(""), Mt = M(!1);
2093
+ }, ue = I(!1), me = I(""), An = I(""), Mt = I(!1);
2094
2094
  function De(i) {
2095
2095
  return (String(i ?? "").trim() || "文档").replace(/[\\/:*?"<>|]/g, "_");
2096
2096
  }
@@ -2102,24 +2102,24 @@ const ur = { class: "app-layout" }, mr = { class: "editor-wrapper" }, dr = { cla
2102
2102
  try {
2103
2103
  const f = c?.getJSON?.();
2104
2104
  if (f)
2105
- await lo(f, T.value, g);
2105
+ await lo(f, E.value, g);
2106
2106
  else {
2107
2107
  const v = c?.getHTML() ?? q.value?.getHTML();
2108
2108
  if (!v) throw new Error("编辑器内容为空,无法导出");
2109
- await Xe(v, T.value, g);
2109
+ await Xe(v, E.value, g);
2110
2110
  }
2111
2111
  } catch (f) {
2112
2112
  try {
2113
2113
  const v = c?.getHTML() ?? q.value?.getHTML();
2114
2114
  if (!v) throw f;
2115
- await Xe(v, T.value, g);
2115
+ await Xe(v, E.value, g);
2116
2116
  } catch (v) {
2117
2117
  console.error("导出 Word 失败:", v), alert("导出 Word 失败,请稍后重试");
2118
2118
  }
2119
2119
  } finally {
2120
2120
  Mt.value = !1;
2121
2121
  }
2122
- }, It = M(!1), ze = async (i) => {
2122
+ }, It = I(!1), ze = async (i) => {
2123
2123
  if (It.value) return;
2124
2124
  const c = V();
2125
2125
  It.value = !0;
@@ -2128,26 +2128,26 @@ const ur = { class: "app-layout" }, mr = { class: "editor-wrapper" }, dr = { cla
2128
2128
  const f = c?.getJSON?.();
2129
2129
  let v;
2130
2130
  if (f)
2131
- v = await ao(f, T.value, g);
2131
+ v = await ao(f, E.value, g);
2132
2132
  else {
2133
- const b = c?.getHTML() ?? q.value?.getHTML();
2134
- if (!b) throw new Error("编辑器内容为空,无法导出");
2135
- v = await Qe(b, g);
2133
+ const C = c?.getHTML() ?? q.value?.getHTML();
2134
+ if (!C) throw new Error("编辑器内容为空,无法导出");
2135
+ v = await Qe(C, g);
2136
2136
  }
2137
2137
  Ze(v, `${g}.docx`);
2138
2138
  } catch (f) {
2139
2139
  try {
2140
2140
  const v = c?.getHTML() ?? q.value?.getHTML();
2141
2141
  if (!v) throw f;
2142
- const b = await Qe(v, g);
2143
- Ze(b, `${g}.docx`);
2142
+ const C = await Qe(v, g);
2143
+ Ze(C, `${g}.docx`);
2144
2144
  } catch (v) {
2145
2145
  console.error("Word 流导出失败:", v), alert("Word 流导出失败,请稍后重试");
2146
2146
  }
2147
2147
  } finally {
2148
2148
  It.value = !1;
2149
2149
  }
2150
- }, Re = M(null), Ut = M(!1), Dn = () => {
2150
+ }, Re = I(null), Ut = I(!1), Dn = () => {
2151
2151
  Re.value?.click();
2152
2152
  }, Je = async (i) => {
2153
2153
  Ut.value = !0;
@@ -2171,20 +2171,20 @@ const ur = { class: "app-layout" }, mr = { class: "editor-wrapper" }, dr = { cla
2171
2171
  f.commands.setContent(g, !1);
2172
2172
  const v = f.view.dom;
2173
2173
  He(v), await new Promise((w) => setTimeout(w, 50)), He(v);
2174
- const b = await fo(i, p ?? {});
2175
- if (b.length === 0)
2174
+ const C = await fo(i, p ?? {});
2175
+ if (C.length === 0)
2176
2176
  return;
2177
2177
  await new Promise((w) => setTimeout(w, 100));
2178
- const C = [];
2179
- for (const w of b)
2180
- w.selectedText && C.push({
2178
+ const S = [];
2179
+ for (const w of C)
2180
+ w.selectedText && S.push({
2181
2181
  id: n(),
2182
2182
  selectedText: w.selectedText,
2183
2183
  note: w.note,
2184
2184
  author: w.author || "导入",
2185
2185
  preferDel: !!w.containsDelText
2186
2186
  });
2187
- const { applied: x } = await Le(f, C, {
2187
+ const { applied: b } = await Le(f, S, {
2188
2188
  defaultAuthor: "导入",
2189
2189
  source: bt
2190
2190
  });
@@ -2215,15 +2215,15 @@ const ur = { class: "app-layout" }, mr = { class: "editor-wrapper" }, dr = { cla
2215
2215
  function Gt(i, c, p = 0) {
2216
2216
  if (!c || c.length === 0) return null;
2217
2217
  if (c.length === 1) return c[0];
2218
- const g = Number.isFinite(Number(p)) ? Number(p) : 0, f = c.filter((b) => typeof b?.from == "number" && b.from >= g);
2218
+ const g = Number.isFinite(Number(p)) ? Number(p) : 0, f = c.filter((C) => typeof C?.from == "number" && C.from >= g);
2219
2219
  return (f.length ? f : c)[0] ?? c[0];
2220
2220
  }
2221
2221
  const Jn = (i, c, p, g = 0, f = {}) => {
2222
2222
  const v = c.trim();
2223
2223
  if (!v) return null;
2224
- const { doc: b } = i.state, C = Ot(c);
2225
- if (!C) return null;
2226
- const x = !!f.preferDel, w = Number.isFinite(Number(f.preferFrom)) ? Number(f.preferFrom) : 0, K = f.source === bt ? bt : $t, gt = ($) => !$ || !$.isText ? !1 : ($.marks || []).some((k) => {
2224
+ const { doc: C } = i.state, S = Ot(c);
2225
+ if (!S) return null;
2226
+ const b = !!f.preferDel, w = Number.isFinite(Number(f.preferFrom)) ? Number(f.preferFrom) : 0, K = f.source === bt ? bt : $t, gt = ($) => !$ || !$.isText ? !1 : ($.marks || []).some((k) => {
2227
2227
  if (!k || !k.type) return !1;
2228
2228
  if (k.type.name === "strike") return !0;
2229
2229
  if (k.type.name === "textStyle") {
@@ -2233,7 +2233,7 @@ const ur = { class: "app-layout" }, mr = { class: "editor-wrapper" }, dr = { cla
2233
2233
  return !1;
2234
2234
  }), _t = ($) => !$ || $.length !== 1 ? null : $[0] || null, vt = ($) => {
2235
2235
  const F = [];
2236
- return b.descendants((k, O) => {
2236
+ return C.descendants((k, O) => {
2237
2237
  if (k.isText && !($ && !gt(k))) {
2238
2238
  if (k.text && k.text.includes(v)) {
2239
2239
  let U = 0;
@@ -2246,12 +2246,12 @@ const ur = { class: "app-layout" }, mr = { class: "editor-wrapper" }, dr = { cla
2246
2246
  }
2247
2247
  if (k.text) {
2248
2248
  const U = Ot(k.text);
2249
- if (U && U.includes(C)) {
2249
+ if (U && U.includes(S)) {
2250
2250
  let J = 0;
2251
2251
  for (; ; ) {
2252
- const G = U.indexOf(C, J);
2252
+ const G = U.indexOf(S, J);
2253
2253
  if (G === -1) break;
2254
- const st = O + Pe(k.text, G), tt = O + Pe(k.text, G + C.length);
2254
+ const st = O + Pe(k.text, G), tt = O + Pe(k.text, G + S.length);
2255
2255
  F.push({ from: st, to: tt }), J = G + 1;
2256
2256
  }
2257
2257
  }
@@ -2260,7 +2260,7 @@ const ur = { class: "app-layout" }, mr = { class: "editor-wrapper" }, dr = { cla
2260
2260
  }), F;
2261
2261
  }, rt = ($, F) => {
2262
2262
  const k = [];
2263
- if (b.descendants((B, nt) => {
2263
+ if (C.descendants((B, nt) => {
2264
2264
  if (B.isBlock && k.length > 0 && k.push({ char: " ", pos: null }), B.type.name === "hardBreak" && k.push({ char: " ", pos: null }), B.isText) {
2265
2265
  if (F && !gt(B)) return;
2266
2266
  for (let et = 0; et < B.text.length; et++)
@@ -2297,12 +2297,12 @@ const ur = { class: "app-layout" }, mr = { class: "editor-wrapper" }, dr = { cla
2297
2297
  return st;
2298
2298
  }, Qt = Be(p);
2299
2299
  if (Qt) {
2300
- const $ = (J) => (J || []).filter((G) => typeof G?.from == "number" && G.from >= w), F = vt(!1), k = rt(C, !1);
2300
+ const $ = (J) => (J || []).filter((G) => typeof G?.from == "number" && G.from >= w), F = vt(!1), k = rt(S, !1);
2301
2301
  let O = !1, U = !1;
2302
2302
  try {
2303
- const J = b.textBetween(0, b.content.size, `
2303
+ const J = C.textBetween(0, C.content.size, `
2304
2304
  `, " ");
2305
- O = J.includes(v), U = Ot(J).includes(C);
2305
+ O = J.includes(v), U = Ot(J).includes(S);
2306
2306
  } catch {
2307
2307
  }
2308
2308
  console.log("[comment-match]", p.slice(0, 8), {
@@ -2314,7 +2314,7 @@ const ur = { class: "app-layout" }, mr = { class: "editor-wrapper" }, dr = { cla
2314
2314
  across: { n: k.length, afterPrefer: $(k).length }
2315
2315
  });
2316
2316
  }
2317
- if (x) {
2317
+ if (b) {
2318
2318
  const $ = vt(!0), F = Gt(i.state, $, w);
2319
2319
  if (F)
2320
2320
  return i.chain().setTextSelection(F).addComment(p, g, K).run(), F;
@@ -2322,20 +2322,20 @@ const ur = { class: "app-layout" }, mr = { class: "editor-wrapper" }, dr = { cla
2322
2322
  const Wn = vt(!1), ge = Gt(i.state, Wn, w);
2323
2323
  if (ge)
2324
2324
  return i.chain().setTextSelection(ge).addComment(p, g, K).run(), ge;
2325
- if (x) {
2326
- const $ = rt(C, !0), F = Gt(i.state, $, w);
2325
+ if (b) {
2326
+ const $ = rt(S, !0), F = Gt(i.state, $, w);
2327
2327
  if (F)
2328
2328
  return i.chain().setTextSelection(F).addComment(p, g, K).run(), F;
2329
2329
  }
2330
- let Zt = rt(C, !1);
2330
+ let Zt = rt(S, !1);
2331
2331
  const ve = Gt(i.state, Zt, w);
2332
2332
  if (ve)
2333
2333
  return i.chain().setTextSelection(ve).addComment(p, g, K).run(), ve;
2334
2334
  if (f?.disablePrefixFallback) return null;
2335
- const Ve = Math.min(30, Math.max(8, Math.floor(C.length * 0.6)));
2336
- if (Ve < C.length) {
2337
- const $ = C.slice(0, Ve);
2338
- if (x) {
2335
+ const Ve = Math.min(30, Math.max(8, Math.floor(S.length * 0.6)));
2336
+ if (Ve < S.length) {
2337
+ const $ = S.slice(0, Ve);
2338
+ if (b) {
2339
2339
  const O = rt($, !0), U = O.filter((G) => typeof G?.from == "number" && G.from >= w), J = _t(U) ?? _t(O);
2340
2340
  if (J)
2341
2341
  return Qt && console.log("[comment-match] ✅ 策略三(strike前缀)", p.slice(0, 8), { prefix: $, unique: J }), i.chain().setTextSelection(J).addComment(p, g, K).run(), J;
@@ -2347,16 +2347,16 @@ const ur = { class: "app-layout" }, mr = { class: "editor-wrapper" }, dr = { cla
2347
2347
  }
2348
2348
  try {
2349
2349
  const $ = i.state.doc.textBetween(0, i.state.doc.content.size, `
2350
- `, " "), F = Ot($), k = F.includes(C), O = C.slice(0, Math.min(30, C.length)), U = F.includes(O), J = {
2350
+ `, " "), F = Ot($), k = F.includes(S), O = S.slice(0, Math.min(30, S.length)), U = F.includes(O), J = {
2351
2351
  commentId: p,
2352
2352
  preferFrom: w,
2353
2353
  searchPreview: String(c).slice(0, 80),
2354
- normLen: C.length,
2354
+ normLen: S.length,
2355
2355
  hasInDocNorm: k,
2356
2356
  hasPrefixInDocNorm: U
2357
2357
  };
2358
2358
  if (Qt) {
2359
- const G = (Dt) => (Dt || []).filter((B) => typeof B?.from == "number" && B.from >= w), st = vt(!1), tt = rt(C, !1);
2359
+ const G = (Dt) => (Dt || []).filter((B) => typeof B?.from == "number" && B.from >= w), st = vt(!1), tt = rt(S, !1);
2360
2360
  console.warn("[comment-match] 未命中", J, {
2361
2361
  node: { n: st.length, afterPrefer: G(st).length },
2362
2362
  across: { n: tt.length, afterPrefer: G(tt).length }
@@ -2368,39 +2368,39 @@ const ur = { class: "app-layout" }, mr = { class: "editor-wrapper" }, dr = { cla
2368
2368
  };
2369
2369
  async function Le(i, c, p = {}) {
2370
2370
  const g = p.defaultAuthor ?? "智能审核", f = p.source === bt ? bt : $t;
2371
- let v = 0, b = 0;
2372
- const C = [];
2373
- for (const x of c) {
2374
- const w = x.selectedText;
2371
+ let v = 0, C = 0;
2372
+ const S = [];
2373
+ for (const b of c) {
2374
+ const w = b.selectedText;
2375
2375
  if (typeof w != "string" || !w.trim()) {
2376
- C.push({ selectedTextPreview: "", reason: "empty_text" });
2376
+ S.push({ selectedTextPreview: "", reason: "empty_text" });
2377
2377
  continue;
2378
2378
  }
2379
- const K = x.id ?? n();
2379
+ const K = b.id ?? n();
2380
2380
  let gt;
2381
- x.colorIndex != null && !Number.isNaN(Number(x.colorIndex)) ? gt = (Number(x.colorIndex) % dt + dt) % dt : gt = (T.value.length + v) % dt;
2382
- const _t = x.source === bt || x.source === $t ? x.source : f, vt = Jn(i, w, K, gt, {
2383
- preferDel: !!x.preferDel,
2381
+ b.colorIndex != null && !Number.isNaN(Number(b.colorIndex)) ? gt = (Number(b.colorIndex) % dt + dt) % dt : gt = (E.value.length + v) % dt;
2382
+ const _t = b.source === bt || b.source === $t ? b.source : f, vt = Jn(i, w, K, gt, {
2383
+ preferDel: !!b.preferDel,
2384
2384
  source: _t,
2385
- preferFrom: b
2385
+ preferFrom: C
2386
2386
  });
2387
2387
  if (vt)
2388
- b = Math.max(b, Number(vt.to) || b), await qt({
2388
+ C = Math.max(C, Number(vt.to) || C), await qt({
2389
2389
  id: K,
2390
2390
  selectedText: w,
2391
- note: x.note,
2392
- author: x.author ?? g,
2391
+ note: b.note,
2392
+ author: b.author ?? g,
2393
2393
  colorIndex: gt
2394
2394
  }), v++;
2395
2395
  else {
2396
2396
  const rt = String(w).slice(0, 50);
2397
- C.push({ selectedTextPreview: rt, reason: "no_match" }), Be(K) && console.warn("[批注] 文字无法匹配而跳过:", { preview: rt, note: String(x.note ?? "").slice(0, 30) });
2397
+ S.push({ selectedTextPreview: rt, reason: "no_match" }), Be(K) && console.warn("[批注] 文字无法匹配而跳过:", { preview: rt, note: String(b.note ?? "").slice(0, 30) });
2398
2398
  }
2399
2399
  }
2400
2400
  return {
2401
2401
  applied: v,
2402
2402
  skipped: c.length - v,
2403
- skippedItems: C
2403
+ skippedItems: S
2404
2404
  };
2405
2405
  }
2406
2406
  function Pe(i, c) {
@@ -2417,7 +2417,7 @@ const ur = { class: "app-layout" }, mr = { class: "editor-wrapper" }, dr = { cla
2417
2417
  }
2418
2418
  return i.length;
2419
2419
  }
2420
- const Wt = M(!1), de = M(""), Vt = M(!1), Bn = () => {
2420
+ const Wt = I(!1), de = I(""), Vt = I(!1), Bn = () => {
2421
2421
  const i = q.value?.getHTML();
2422
2422
  if (!i) {
2423
2423
  alert("编辑器内容为空,无法导出");
@@ -2430,7 +2430,7 @@ const ur = { class: "app-layout" }, mr = { class: "editor-wrapper" }, dr = { cla
2430
2430
  } catch {
2431
2431
  alert("复制失败,请手动选中后复制");
2432
2432
  }
2433
- }, Kt = M(!1), Ln = async () => {
2433
+ }, Kt = I(!1), Ln = async () => {
2434
2434
  const i = q.value?.getHTML();
2435
2435
  if (!i) {
2436
2436
  alert("编辑器内容为空");
@@ -2441,7 +2441,7 @@ const ur = { class: "app-layout" }, mr = { class: "editor-wrapper" }, dr = { cla
2441
2441
  } catch {
2442
2442
  alert("复制失败,请手动操作");
2443
2443
  }
2444
- }, At = M(!1), Pn = async () => {
2444
+ }, At = I(!1), Pn = async () => {
2445
2445
  if (At.value) return;
2446
2446
  const c = V()?.getJSON?.();
2447
2447
  if (!c) {
@@ -2456,14 +2456,14 @@ const ur = { class: "app-layout" }, mr = { class: "editor-wrapper" }, dr = { cla
2456
2456
  } finally {
2457
2457
  At.value = !1;
2458
2458
  }
2459
- }, jt = M(!1), fe = M(""), Yt = M(!1), qn = async () => {
2459
+ }, jt = I(!1), fe = I(""), Yt = I(!1), qn = async () => {
2460
2460
  try {
2461
2461
  await navigator.clipboard.writeText(fe.value), Yt.value = !0, setTimeout(() => Yt.value = !1, 2e3);
2462
2462
  } catch {
2463
2463
  alert("复制失败,请手动选中后复制");
2464
2464
  }
2465
2465
  };
2466
- M(!1), M("http://your-internal-ai-model/api/annotation");
2466
+ I(!1), I("http://your-internal-ai-model/api/annotation");
2467
2467
  const Hn = () => {
2468
2468
  const i = [co, lr];
2469
2469
  return h.value ? i.push(
@@ -2496,16 +2496,16 @@ const ur = { class: "app-layout" }, mr = { class: "editor-wrapper" }, dr = { cla
2496
2496
  // return await requestSave({ silent: true })
2497
2497
  // },
2498
2498
  onChanged: ({ editor: i }) => {
2499
- I(i);
2499
+ x(i);
2500
2500
  }
2501
2501
  })), qe = X(() => {
2502
- const i = L ?? {}, { class: c, style: p, ...g } = i ?? {}, f = Array.isArray(g.extensions) ? g.extensions : [], v = Hn(), b = [...f, ...v], C = g.cdnUrl ?? "/node_modules/@umoteam/editor-external", x = {
2502
+ const i = L ?? {}, { class: c, style: p, ...g } = i ?? {}, f = Array.isArray(g.extensions) ? g.extensions : [], v = Hn(), C = [...f, ...v], S = g.cdnUrl ?? "/node_modules/@umoteam/editor-external", b = {
2503
2503
  ...g,
2504
- cdnUrl: C,
2504
+ cdnUrl: S,
2505
2505
  disableExtensions: ["import-word"],
2506
- extensions: b
2506
+ extensions: C
2507
2507
  }, w = Un.value;
2508
- return x.onChanged == null && w?.onChanged && (x.onChanged = w.onChanged), x.onSave == null && w?.onSave && (x.onSave = w.onSave), x.onFileUpload == null && w?.onFileUpload && (x.onFileUpload = w.onFileUpload), x.onFileDelete == null && w?.onFileDelete && (x.onFileDelete = w.onFileDelete), x;
2508
+ return b.onChanged == null && w?.onChanged && (b.onChanged = w.onChanged), b.onSave == null && w?.onSave && (b.onSave = w.onSave), b.onFileUpload == null && w?.onFileUpload && (b.onFileUpload = w.onFileUpload), b.onFileDelete == null && w?.onFileDelete && (b.onFileDelete = w.onFileDelete), b;
2509
2509
  });
2510
2510
  function V() {
2511
2511
  const i = q.value;
@@ -2537,20 +2537,20 @@ const ur = { class: "app-layout" }, mr = { class: "editor-wrapper" }, dr = { cla
2537
2537
  skippedItems: []
2538
2538
  };
2539
2539
  if (c?.replace) {
2540
- const C = T.value.map((x) => x.id);
2541
- for (const x of C)
2542
- p.commands.removeComment(x);
2540
+ const S = E.value.map((b) => b.id);
2541
+ for (const b of S)
2542
+ p.commands.removeComment(b);
2543
2543
  Tn(), y.clear(), le(null), await Sn(void 0, []);
2544
2544
  }
2545
- const { applied: f, skipped: v, skippedItems: b } = await Le(p, g, {
2545
+ const { applied: f, skipped: v, skippedItems: C } = await Le(p, g, {
2546
2546
  defaultAuthor: "智能审核",
2547
2547
  source: $t
2548
2548
  });
2549
- return await Ie(), Y(p), I(p), {
2549
+ return await Ie(), Y(p), x(p), {
2550
2550
  ok: !0,
2551
2551
  applied: f,
2552
2552
  skipped: v,
2553
- skippedItems: b
2553
+ skippedItems: C
2554
2554
  };
2555
2555
  },
2556
2556
  mergeCommentNotesById: (i, c = {}) => {
@@ -2559,9 +2559,9 @@ const ur = { class: "app-layout" }, mr = { class: "editor-wrapper" }, dr = { cla
2559
2559
  const g = new Map(
2560
2560
  i.map((f) => [String(f?.id ?? "").trim(), String(f?.note ?? "").trim()]).filter(([f, v]) => f && v)
2561
2561
  );
2562
- g.size && (T.value = T.value.map((f) => {
2563
- const v = String(f?.id ?? "").trim(), b = g.get(v);
2564
- return !b || p && String(f.note ?? "").trim() ? f : { ...f, note: b };
2562
+ g.size && (E.value = E.value.map((f) => {
2563
+ const v = String(f?.id ?? "").trim(), C = g.get(v);
2564
+ return !C || p && String(f.note ?? "").trim() ? f : { ...f, note: C };
2565
2565
  }));
2566
2566
  },
2567
2567
  activateCommentInEditor: (i) => un(V(), i),
@@ -2577,7 +2577,7 @@ const ur = { class: "app-layout" }, mr = { class: "editor-wrapper" }, dr = { cla
2577
2577
  const Gn = async (i) => {
2578
2578
  const c = V();
2579
2579
  if (!c) return;
2580
- const p = n(), g = T.value.length % dt;
2580
+ const p = n(), g = E.value.length % dt;
2581
2581
  c.commands.addComment(p, g, $t);
2582
2582
  try {
2583
2583
  await qt({ id: p, selectedText: me.value, note: i, colorIndex: g });
@@ -2613,10 +2613,10 @@ const ur = { class: "app-layout" }, mr = { class: "editor-wrapper" }, dr = { cla
2613
2613
  ), Se(() => {
2614
2614
  _.value || (_.value = "未命名文档");
2615
2615
  }), Ke(() => {
2616
- clearTimeout(N), Z && (Z.removeEventListener("click", pe), Z = null);
2616
+ clearTimeout(M), Z && (Z.removeEventListener("click", pe), Z = null);
2617
2617
  }), (i, c) => {
2618
2618
  const p = Qn("umo-editor");
2619
- return S(), A("div", ur, [
2619
+ return T(), A("div", ur, [
2620
2620
  l("div", mr, [
2621
2621
  l("div", dr, [
2622
2622
  l("div", {
@@ -2649,7 +2649,7 @@ const ur = { class: "app-layout" }, mr = { class: "editor-wrapper" }, dr = { cla
2649
2649
  })
2650
2650
  ])
2651
2651
  ], -1)),
2652
- l("span", fr, E(o.value ? "退出全屏" : "全屏"), 1)
2652
+ l("span", fr, N(o.value ? "退出全屏" : "全屏"), 1)
2653
2653
  ])
2654
2654
  ]),
2655
2655
  toolbar_export: je(() => [
@@ -2695,7 +2695,7 @@ const ur = { class: "app-layout" }, mr = { class: "editor-wrapper" }, dr = { cla
2695
2695
  })
2696
2696
  ])
2697
2697
  ], -1)),
2698
- l("span", pr, E(Ut.value ? "导入中…" : "导入 Word"), 1)
2698
+ l("span", pr, N(Ut.value ? "导入中…" : "导入 Word"), 1)
2699
2699
  ], 8, hr),
2700
2700
  l("button", {
2701
2701
  class: "umo-custom-huge-btn",
@@ -2731,7 +2731,7 @@ const ur = { class: "app-layout" }, mr = { class: "editor-wrapper" }, dr = { cla
2731
2731
  })
2732
2732
  ])
2733
2733
  ], -1)),
2734
- l("span", vr, E(Mt.value ? "导出中…" : "导出 Word"), 1)
2734
+ l("span", vr, N(Mt.value ? "导出中…" : "导出 Word"), 1)
2735
2735
  ], 8, gr),
2736
2736
  l("button", {
2737
2737
  class: "umo-custom-huge-btn",
@@ -2767,7 +2767,7 @@ const ur = { class: "app-layout" }, mr = { class: "editor-wrapper" }, dr = { cla
2767
2767
  })
2768
2768
  ])
2769
2769
  ], -1)),
2770
- l("span", wr, E(It.value ? "生成中…" : "Word 流下载"), 1)
2770
+ l("span", wr, N(It.value ? "生成中…" : "Word 流下载"), 1)
2771
2771
  ], 8, yr),
2772
2772
  l("button", {
2773
2773
  class: "umo-custom-huge-btn",
@@ -2809,7 +2809,7 @@ const ur = { class: "app-layout" }, mr = { class: "editor-wrapper" }, dr = { cla
2809
2809
  onClick: Ln
2810
2810
  }, [
2811
2811
  l("span", kr, [
2812
- (S(), A("svg", _r, [
2812
+ (T(), A("svg", _r, [
2813
2813
  c[12] || (c[12] = l("rect", {
2814
2814
  x: "9",
2815
2815
  y: "9",
@@ -2828,10 +2828,10 @@ const ur = { class: "app-layout" }, mr = { class: "editor-wrapper" }, dr = { cla
2828
2828
  "stroke-linecap": "round",
2829
2829
  "stroke-linejoin": "round"
2830
2830
  }, null, -1)),
2831
- Kt.value ? (S(), A("path", xr)) : ft("", !0)
2831
+ Kt.value ? (T(), A("path", xr)) : ft("", !0)
2832
2832
  ]))
2833
2833
  ]),
2834
- l("span", br, E(Kt.value ? "已复制" : "复制 HTML"), 1)
2834
+ l("span", br, N(Kt.value ? "已复制" : "复制 HTML"), 1)
2835
2835
  ]),
2836
2836
  l("button", {
2837
2837
  class: "umo-custom-huge-btn",
@@ -2867,7 +2867,7 @@ const ur = { class: "app-layout" }, mr = { class: "editor-wrapper" }, dr = { cla
2867
2867
  })
2868
2868
  ])
2869
2869
  ], -1)),
2870
- l("span", Sr, E(At.value ? "生成中…" : "导出 JSON"), 1)
2870
+ l("span", Sr, N(At.value ? "生成中…" : "导出 JSON"), 1)
2871
2871
  ], 8, Cr)
2872
2872
  ]),
2873
2873
  _: 1
@@ -2875,18 +2875,18 @@ const ur = { class: "app-layout" }, mr = { class: "editor-wrapper" }, dr = { cla
2875
2875
  ], 2)
2876
2876
  ])
2877
2877
  ]),
2878
- m.value ? (S(), A("div", Tr, [
2878
+ m.value ? (T(), A("div", Tr, [
2879
2879
  i.$slots["comment-panel"] ? eo(i.$slots, "comment-panel", {
2880
2880
  key: 0,
2881
- comments: xt(T),
2881
+ comments: xt(E),
2882
2882
  activeCommentId: xt(mt),
2883
2883
  formatTime: xt(ae),
2884
2884
  activate: We,
2885
2885
  deleteComment: Ue,
2886
2886
  resolveComment: Ge
2887
- }, void 0, !0) : (S(), Rt(Mo, {
2887
+ }, void 0, !0) : (T(), Rt(Mo, {
2888
2888
  key: 1,
2889
- comments: xt(T),
2889
+ comments: xt(E),
2890
2890
  "active-comment-id": xt(mt),
2891
2891
  "format-time": xt(ae),
2892
2892
  onActivate: We,
@@ -2894,8 +2894,8 @@ const ur = { class: "app-layout" }, mr = { class: "editor-wrapper" }, dr = { cla
2894
2894
  onResolve: Ge
2895
2895
  }, null, 8, ["comments", "active-comment-id", "format-time"]))
2896
2896
  ])) : ft("", !0),
2897
- (S(), Rt(Te, { to: "body" }, [
2898
- Wt.value ? (S(), A("div", {
2897
+ (T(), Rt(Te, { to: "body" }, [
2898
+ Wt.value ? (T(), A("div", {
2899
2899
  key: 0,
2900
2900
  class: "html-dialog-mask",
2901
2901
  onClick: c[3] || (c[3] = ht((g) => Wt.value = !1, ["self"]))
@@ -2912,16 +2912,16 @@ const ur = { class: "app-layout" }, mr = { class: "editor-wrapper" }, dr = { cla
2912
2912
  l("button", {
2913
2913
  class: "html-dialog__copy-btn",
2914
2914
  onClick: Fn
2915
- }, E(Vt.value ? "✓ 已复制" : "复制"), 1)
2915
+ }, N(Vt.value ? "✓ 已复制" : "复制"), 1)
2916
2916
  ]),
2917
2917
  l("pre", Ir, [
2918
- l("code", null, E(de.value), 1)
2918
+ l("code", null, N(de.value), 1)
2919
2919
  ])
2920
2920
  ])
2921
2921
  ])) : ft("", !0)
2922
2922
  ])),
2923
- (S(), Rt(Te, { to: "body" }, [
2924
- jt.value ? (S(), A("div", {
2923
+ (T(), Rt(Te, { to: "body" }, [
2924
+ jt.value ? (T(), A("div", {
2925
2925
  key: 0,
2926
2926
  class: "html-dialog-mask",
2927
2927
  onClick: c[5] || (c[5] = ht((g) => jt.value = !1, ["self"]))
@@ -2938,15 +2938,15 @@ const ur = { class: "app-layout" }, mr = { class: "editor-wrapper" }, dr = { cla
2938
2938
  l("button", {
2939
2939
  class: "html-dialog__copy-btn",
2940
2940
  onClick: qn
2941
- }, E(Yt.value ? "✓ 已复制" : "复制"), 1)
2941
+ }, N(Yt.value ? "✓ 已复制" : "复制"), 1)
2942
2942
  ]),
2943
2943
  l("pre", $r, [
2944
- l("code", null, E(fe.value), 1)
2944
+ l("code", null, N(fe.value), 1)
2945
2945
  ])
2946
2946
  ])
2947
2947
  ])) : ft("", !0)
2948
2948
  ])),
2949
- ue.value ? (S(), Rt(Fo, {
2949
+ ue.value ? (T(), Rt(Fo, {
2950
2950
  key: 1,
2951
2951
  "selected-text": me.value,
2952
2952
  "initial-note": An.value,
@@ -2993,7 +2993,7 @@ const ur = { class: "app-layout" }, mr = { class: "editor-wrapper" }, dr = { cla
2993
2993
  },
2994
2994
  emits: ["activate", "download"],
2995
2995
  setup(s, { emit: t }) {
2996
- const e = s, n = t, o = M(!1), r = M(zt), u = M(null);
2996
+ const e = s, n = t, o = I(!1), r = I(zt), u = I(null);
2997
2997
  ct(
2998
2998
  () => e.items,
2999
2999
  () => {
@@ -3006,27 +3006,27 @@ const ur = { class: "app-layout" }, mr = { class: "editor-wrapper" }, dr = { cla
3006
3006
  const _ = [...e.items ?? []];
3007
3007
  return o.value ? _.filter((y) => String(y?.reviewStatus ?? "") === "risk") : _;
3008
3008
  }), d = X(() => {
3009
- const _ = a.value, y = /* @__PURE__ */ new Map(), N = [], I = /* @__PURE__ */ new Set();
3009
+ const _ = a.value, y = /* @__PURE__ */ new Map(), M = [], x = /* @__PURE__ */ new Set();
3010
3010
  for (const q of _) {
3011
- const T = (q ?? {}).category || "未分类";
3012
- y.set(T, (y.get(T) ?? 0) + 1), I.has(T) || (I.add(T), N.push(T));
3011
+ const E = (q ?? {}).category || "未分类";
3012
+ y.set(E, (y.get(E) ?? 0) + 1), x.has(E) || (x.add(E), M.push(E));
3013
3013
  }
3014
3014
  const Y = [{ key: zt, label: "全部", count: _.length }];
3015
- for (const q of N)
3015
+ for (const q of M)
3016
3016
  Y.push({ key: q, label: q, count: y.get(q) ?? 0 });
3017
3017
  return Y;
3018
3018
  }), m = X(() => {
3019
3019
  let _ = a.value;
3020
3020
  return r.value !== zt && (_ = _.filter((y) => (y?.category || "未分类") === r.value)), _;
3021
3021
  }), h = X(() => {
3022
- const _ = m.value, y = [], N = /* @__PURE__ */ new Map();
3023
- for (const I of _) {
3024
- const Y = I.category || "未分类";
3025
- N.has(Y) || (N.set(Y, []), y.push(Y)), N.get(Y).push(I);
3022
+ const _ = m.value, y = [], M = /* @__PURE__ */ new Map();
3023
+ for (const x of _) {
3024
+ const Y = x.category || "未分类";
3025
+ M.has(Y) || (M.set(Y, []), y.push(Y)), M.get(Y).push(x);
3026
3026
  }
3027
- return y.map((I) => ({
3028
- category: I,
3029
- rows: N.get(I)
3027
+ return y.map((x) => ({
3028
+ category: x,
3029
+ rows: M.get(x)
3030
3030
  }));
3031
3031
  }), R = (_) => {
3032
3032
  const y = String(_ ?? "");
@@ -3041,34 +3041,34 @@ const ur = { class: "app-layout" }, mr = { class: "editor-wrapper" }, dr = { cla
3041
3041
  () => e.activeCommentId,
3042
3042
  async (_) => {
3043
3043
  if (!_) return;
3044
- await Ie();
3044
+ await Ie(), await new Promise((x) => requestAnimationFrame(x)), await new Promise((x) => requestAnimationFrame(x)), await new Promise((x) => setTimeout(x, 0));
3045
3045
  const y = u.value;
3046
3046
  if (!(y instanceof HTMLElement)) return;
3047
- const N = y.querySelector(`[data-comment-id="${_}"]`);
3048
- N instanceof HTMLElement && N.scrollIntoView({ behavior: "smooth", block: "nearest" });
3047
+ const M = y.querySelector(`[data-comment-id="${_}"]`);
3048
+ M instanceof HTMLElement && M.scrollIntoView({ behavior: "smooth", block: "nearest" });
3049
3049
  }
3050
- ), (_, y) => (S(), A("aside", {
3050
+ ), (_, y) => (T(), A("aside", {
3051
3051
  ref_key: "panelRootRef",
3052
3052
  ref: u,
3053
3053
  class: "complex-comment-panel"
3054
3054
  }, [
3055
3055
  l("div", Jr, [
3056
3056
  l("div", Br, [
3057
- l("h3", Fr, E(s.title), 1),
3058
- s.streaming ? (S(), A("div", Lr, [
3057
+ l("h3", Fr, N(s.title), 1),
3058
+ s.streaming ? (T(), A("div", Lr, [
3059
3059
  y[2] || (y[2] = l("span", { class: "review-streaming-dot" }, null, -1)),
3060
- l("span", null, E(s.streamingText || "智能审查持续生成中"), 1)
3060
+ l("span", null, N(s.streamingText || "智能审查持续生成中"), 1)
3061
3061
  ])) : ft("", !0)
3062
3062
  ]),
3063
3063
  l("div", Pr, [
3064
3064
  l("button", {
3065
3065
  type: "button",
3066
3066
  class: "complex-comment-panel__download",
3067
- onClick: y[0] || (y[0] = (N) => n("download"))
3067
+ onClick: y[0] || (y[0] = (M) => n("download"))
3068
3068
  }, " 下载 "),
3069
3069
  l("label", qr, [
3070
3070
  mn(l("input", {
3071
- "onUpdate:modelValue": y[1] || (y[1] = (N) => o.value = N),
3071
+ "onUpdate:modelValue": y[1] || (y[1] = (M) => o.value = M),
3072
3072
  type: "checkbox"
3073
3073
  }, null, 512), [
3074
3074
  [ro, o.value]
@@ -3077,49 +3077,49 @@ const ur = { class: "app-layout" }, mr = { class: "editor-wrapper" }, dr = { cla
3077
3077
  ])
3078
3078
  ])
3079
3079
  ]),
3080
- s.items.length === 0 ? (S(), A("div", Hr, [...y[4] || (y[4] = [
3080
+ s.items.length === 0 ? (T(), A("div", Hr, [...y[4] || (y[4] = [
3081
3081
  l("p", null, "暂无审查结果", -1)
3082
- ])])) : (S(), A(St, { key: 1 }, [
3082
+ ])])) : (T(), A(St, { key: 1 }, [
3083
3083
  l("div", Ur, [
3084
- (S(!0), A(St, null, Jt(d.value, (N) => (S(), A("button", {
3085
- key: N.key,
3084
+ (T(!0), A(St, null, Jt(d.value, (M) => (T(), A("button", {
3085
+ key: M.key,
3086
3086
  type: "button",
3087
3087
  role: "tab",
3088
- class: Tt(["complex-comment-panel__tab", { "complex-comment-panel__tab--active": r.value === N.key }]),
3089
- onClick: (I) => r.value = N.key
3090
- }, E(N.label) + " (" + E(N.count) + ") ", 11, Gr))), 128))
3088
+ class: Tt(["complex-comment-panel__tab", { "complex-comment-panel__tab--active": r.value === M.key }]),
3089
+ onClick: (x) => r.value = M.key
3090
+ }, N(M.label) + " (" + N(M.count) + ") ", 11, Gr))), 128))
3091
3091
  ]),
3092
3092
  l("div", Wr, [
3093
- (S(!0), A(St, null, Jt(h.value, (N) => (S(), A("section", {
3094
- key: N.category,
3093
+ (T(!0), A(St, null, Jt(h.value, (M) => (T(), A("section", {
3094
+ key: M.category,
3095
3095
  class: "complex-comment-panel__section"
3096
3096
  }, [
3097
3097
  l("div", Vr, [
3098
- l("span", Kr, E(N.category), 1)
3098
+ l("span", Kr, N(M.category), 1)
3099
3099
  ]),
3100
3100
  l("ul", jr, [
3101
- (S(!0), A(St, null, Jt(N.rows, (I) => (S(), A("li", {
3102
- key: I.id,
3103
- class: Tt(["audit-card", { "audit-card--active": s.activeCommentId === I.id }]),
3104
- "data-comment-id": I.id,
3105
- onClick: (Y) => P(I.id)
3101
+ (T(!0), A(St, null, Jt(M.rows, (x) => (T(), A("li", {
3102
+ key: x.id,
3103
+ class: Tt(["audit-card", { "audit-card--active": s.activeCommentId === x.id }]),
3104
+ "data-comment-id": x.id,
3105
+ onClick: (Y) => P(x.id)
3106
3106
  }, [
3107
3107
  l("div", Xr, [
3108
3108
  l("span", {
3109
3109
  class: "audit-card__point",
3110
- title: I.reviewPoint || "(无审查点)"
3111
- }, E(I.reviewPoint || "(无审查点)"), 9, Qr),
3110
+ title: x.reviewPoint || "(无审查点)"
3111
+ }, N(x.reviewPoint || "(无审查点)"), 9, Qr),
3112
3112
  l("span", {
3113
- class: Tt(["audit-card__badge", L(I.reviewStatus)])
3114
- }, E(R(I.reviewStatus)), 3)
3113
+ class: Tt(["audit-card__badge", L(x.reviewStatus)])
3114
+ }, N(R(x.reviewStatus)), 3)
3115
3115
  ]),
3116
3116
  l("div", Zr, [
3117
3117
  y[6] || (y[6] = l("div", { class: "audit-card__label" }, "原文内容", -1)),
3118
- l("div", ts, E(I.originalText || "无原文"), 1),
3118
+ l("div", ts, N(x.originalText || "无原文"), 1),
3119
3119
  l("button", {
3120
3120
  type: "button",
3121
3121
  class: "audit-card__locate",
3122
- onClick: ht((Y) => P(I.id), ["stop"])
3122
+ onClick: ht((Y) => P(x.id), ["stop"])
3123
3123
  }, [...y[5] || (y[5] = [
3124
3124
  l("span", {
3125
3125
  class: "audit-card__locate-icon",
@@ -3131,7 +3131,7 @@ const ur = { class: "app-layout" }, mr = { class: "editor-wrapper" }, dr = { cla
3131
3131
  y[8] || (y[8] = l("div", { class: "audit-card__divider" }, null, -1)),
3132
3132
  l("div", ns, [
3133
3133
  y[7] || (y[7] = l("div", { class: "audit-card__label audit-card__label--strong" }, "审查说明", -1)),
3134
- l("p", os, E(I.auditDescription || "—"), 1)
3134
+ l("p", os, N(x.auditDescription || "—"), 1)
3135
3135
  ])
3136
3136
  ], 10, Yr))), 128))
3137
3137
  ])
@@ -3140,7 +3140,7 @@ const ur = { class: "app-layout" }, mr = { class: "editor-wrapper" }, dr = { cla
3140
3140
  ], 64))
3141
3141
  ], 512));
3142
3142
  }
3143
- }, ds = /* @__PURE__ */ Pt(rs, [["__scopeId", "data-v-9b0c48b8"]]);
3143
+ }, ds = /* @__PURE__ */ Pt(rs, [["__scopeId", "data-v-448ac300"]]);
3144
3144
  function fs() {
3145
3145
  }
3146
3146
  const hs = {
@@ -1 +1 @@
1
- {"version":3,"file":"ComplexCommentPanel.vue.d.ts","sourceRoot":"","sources":["../../../src/components/ComplexCommentPanel.vue"],"names":[],"mappings":"wBA29BqB,OAAO,YAAY;;AAzBxC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6EAwBG"}
1
+ {"version":3,"file":"ComplexCommentPanel.vue.d.ts","sourceRoot":"","sources":["../../../src/components/ComplexCommentPanel.vue"],"names":[],"mappings":"wBAy8BqB,OAAO,YAAY;;AAzBxC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6EAwBG"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "ai-word-editor",
3
3
  "private": false,
4
- "version": "0.0.74",
4
+ "version": "0.0.75",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "module": "./dist/index.js",