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.
package/dist/ai-word-editor.css
CHANGED
|
@@ -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
|
|
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 =
|
|
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) => (
|
|
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 ? (
|
|
58
|
+
o.value ? (T(), A("span", go, N(o.value), 1)) : ft("", !0)
|
|
59
59
|
])
|
|
60
60
|
]),
|
|
61
|
-
s.comments.length === 0 ? (
|
|
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
|
-
])])) : (
|
|
66
|
-
(
|
|
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(" " +
|
|
80
|
+
Ce(" " + N(u(h.selectedText, 40)), 1)
|
|
81
81
|
]),
|
|
82
|
-
l("div", _o,
|
|
82
|
+
l("div", _o, N(h.note), 1),
|
|
83
83
|
l("div", xo, [
|
|
84
|
-
l("span", bo,
|
|
85
|
-
l("span", Co,
|
|
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
|
-
},
|
|
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 =
|
|
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) => (
|
|
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 ? (
|
|
140
|
+
s.selectedText ? (T(), A("div", Ao, [
|
|
141
141
|
m[6] || (m[6] = l("span", { class: "dialog__quote-label" }, "选中文本", -1)),
|
|
142
|
-
l("blockquote", Do,
|
|
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 =
|
|
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) => (
|
|
243
|
-
(
|
|
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,
|
|
262
|
-
l("div", Ho,
|
|
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,
|
|
265
|
-
l("span", Wo,
|
|
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,
|
|
1794
|
-
|
|
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
|
|
1798
|
-
if (!
|
|
1799
|
-
const mt =
|
|
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 =
|
|
1802
|
-
(!Ht || mt < Ht.top) &&
|
|
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(
|
|
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 =
|
|
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 _ =
|
|
2007
|
-
let
|
|
2008
|
-
const
|
|
2009
|
-
clearTimeout(
|
|
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 ||
|
|
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
|
|
2017
|
-
p.add(
|
|
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),
|
|
2022
|
-
|
|
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
|
-
|
|
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 ||
|
|
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
|
|
2038
|
-
for (const
|
|
2039
|
-
const
|
|
2040
|
-
p.set(
|
|
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 && (
|
|
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 =
|
|
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:
|
|
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 =
|
|
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:
|
|
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 =
|
|
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,
|
|
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,
|
|
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,
|
|
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 =
|
|
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,
|
|
2131
|
+
v = await ao(f, E.value, g);
|
|
2132
2132
|
else {
|
|
2133
|
-
const
|
|
2134
|
-
if (!
|
|
2135
|
-
v = await Qe(
|
|
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
|
|
2143
|
-
Ze(
|
|
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 =
|
|
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
|
|
2175
|
-
if (
|
|
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
|
|
2179
|
-
for (const w of
|
|
2180
|
-
w.selectedText &&
|
|
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:
|
|
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((
|
|
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:
|
|
2225
|
-
if (!
|
|
2226
|
-
const
|
|
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
|
|
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(
|
|
2249
|
+
if (U && U.includes(S)) {
|
|
2250
2250
|
let J = 0;
|
|
2251
2251
|
for (; ; ) {
|
|
2252
|
-
const G = U.indexOf(
|
|
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 +
|
|
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 (
|
|
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(
|
|
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 =
|
|
2303
|
+
const J = C.textBetween(0, C.content.size, `
|
|
2304
2304
|
`, " ");
|
|
2305
|
-
O = J.includes(v), U = Ot(J).includes(
|
|
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 (
|
|
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 (
|
|
2326
|
-
const $ = rt(
|
|
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(
|
|
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(
|
|
2336
|
-
if (Ve <
|
|
2337
|
-
const $ =
|
|
2338
|
-
if (
|
|
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(
|
|
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:
|
|
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(
|
|
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,
|
|
2372
|
-
const
|
|
2373
|
-
for (const
|
|
2374
|
-
const w =
|
|
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
|
-
|
|
2376
|
+
S.push({ selectedTextPreview: "", reason: "empty_text" });
|
|
2377
2377
|
continue;
|
|
2378
2378
|
}
|
|
2379
|
-
const K =
|
|
2379
|
+
const K = b.id ?? n();
|
|
2380
2380
|
let gt;
|
|
2381
|
-
|
|
2382
|
-
const _t =
|
|
2383
|
-
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:
|
|
2385
|
+
preferFrom: C
|
|
2386
2386
|
});
|
|
2387
2387
|
if (vt)
|
|
2388
|
-
|
|
2388
|
+
C = Math.max(C, Number(vt.to) || C), await qt({
|
|
2389
2389
|
id: K,
|
|
2390
2390
|
selectedText: w,
|
|
2391
|
-
note:
|
|
2392
|
-
author:
|
|
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
|
-
|
|
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:
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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
|
-
|
|
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
|
-
|
|
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(),
|
|
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:
|
|
2504
|
+
cdnUrl: S,
|
|
2505
2505
|
disableExtensions: ["import-word"],
|
|
2506
|
-
extensions:
|
|
2506
|
+
extensions: C
|
|
2507
2507
|
}, w = Un.value;
|
|
2508
|
-
return
|
|
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
|
|
2541
|
-
for (const
|
|
2542
|
-
p.commands.removeComment(
|
|
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:
|
|
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),
|
|
2549
|
+
return await Ie(), Y(p), x(p), {
|
|
2550
2550
|
ok: !0,
|
|
2551
2551
|
applied: f,
|
|
2552
2552
|
skipped: v,
|
|
2553
|
-
skippedItems:
|
|
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 && (
|
|
2563
|
-
const v = String(f?.id ?? "").trim(),
|
|
2564
|
-
return !
|
|
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 =
|
|
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(
|
|
2616
|
+
clearTimeout(M), Z && (Z.removeEventListener("click", pe), Z = null);
|
|
2617
2617
|
}), (i, c) => {
|
|
2618
2618
|
const p = Qn("umo-editor");
|
|
2619
|
-
return
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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
|
-
(
|
|
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 ? (
|
|
2831
|
+
Kt.value ? (T(), A("path", xr)) : ft("", !0)
|
|
2832
2832
|
]))
|
|
2833
2833
|
]),
|
|
2834
|
-
l("span", br,
|
|
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,
|
|
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 ? (
|
|
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(
|
|
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) : (
|
|
2887
|
+
}, void 0, !0) : (T(), Rt(Mo, {
|
|
2888
2888
|
key: 1,
|
|
2889
|
-
comments: xt(
|
|
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
|
-
(
|
|
2898
|
-
Wt.value ? (
|
|
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
|
-
},
|
|
2915
|
+
}, N(Vt.value ? "✓ 已复制" : "复制"), 1)
|
|
2916
2916
|
]),
|
|
2917
2917
|
l("pre", Ir, [
|
|
2918
|
-
l("code", null,
|
|
2918
|
+
l("code", null, N(de.value), 1)
|
|
2919
2919
|
])
|
|
2920
2920
|
])
|
|
2921
2921
|
])) : ft("", !0)
|
|
2922
2922
|
])),
|
|
2923
|
-
(
|
|
2924
|
-
jt.value ? (
|
|
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
|
-
},
|
|
2941
|
+
}, N(Yt.value ? "✓ 已复制" : "复制"), 1)
|
|
2942
2942
|
]),
|
|
2943
2943
|
l("pre", $r, [
|
|
2944
|
-
l("code", null,
|
|
2944
|
+
l("code", null, N(fe.value), 1)
|
|
2945
2945
|
])
|
|
2946
2946
|
])
|
|
2947
2947
|
])) : ft("", !0)
|
|
2948
2948
|
])),
|
|
2949
|
-
ue.value ? (
|
|
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 =
|
|
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(),
|
|
3009
|
+
const _ = a.value, y = /* @__PURE__ */ new Map(), M = [], x = /* @__PURE__ */ new Set();
|
|
3010
3010
|
for (const q of _) {
|
|
3011
|
-
const
|
|
3012
|
-
y.set(
|
|
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
|
|
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 = [],
|
|
3023
|
-
for (const
|
|
3024
|
-
const Y =
|
|
3025
|
-
|
|
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((
|
|
3028
|
-
category:
|
|
3029
|
-
rows:
|
|
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
|
|
3048
|
-
|
|
3047
|
+
const M = y.querySelector(`[data-comment-id="${_}"]`);
|
|
3048
|
+
M instanceof HTMLElement && M.scrollIntoView({ behavior: "smooth", block: "nearest" });
|
|
3049
3049
|
}
|
|
3050
|
-
), (_, y) => (
|
|
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,
|
|
3058
|
-
s.streaming ? (
|
|
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,
|
|
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] = (
|
|
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] = (
|
|
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 ? (
|
|
3080
|
+
s.items.length === 0 ? (T(), A("div", Hr, [...y[4] || (y[4] = [
|
|
3081
3081
|
l("p", null, "暂无审查结果", -1)
|
|
3082
|
-
])])) : (
|
|
3082
|
+
])])) : (T(), A(St, { key: 1 }, [
|
|
3083
3083
|
l("div", Ur, [
|
|
3084
|
-
(
|
|
3085
|
-
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 ===
|
|
3089
|
-
onClick: (
|
|
3090
|
-
},
|
|
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
|
-
(
|
|
3094
|
-
key:
|
|
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,
|
|
3098
|
+
l("span", Kr, N(M.category), 1)
|
|
3099
3099
|
]),
|
|
3100
3100
|
l("ul", jr, [
|
|
3101
|
-
(
|
|
3102
|
-
key:
|
|
3103
|
-
class: Tt(["audit-card", { "audit-card--active": s.activeCommentId ===
|
|
3104
|
-
"data-comment-id":
|
|
3105
|
-
onClick: (Y) => P(
|
|
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:
|
|
3111
|
-
},
|
|
3110
|
+
title: x.reviewPoint || "(无审查点)"
|
|
3111
|
+
}, N(x.reviewPoint || "(无审查点)"), 9, Qr),
|
|
3112
3112
|
l("span", {
|
|
3113
|
-
class: Tt(["audit-card__badge", L(
|
|
3114
|
-
},
|
|
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,
|
|
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(
|
|
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,
|
|
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-
|
|
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":"
|
|
1
|
+
{"version":3,"file":"ComplexCommentPanel.vue.d.ts","sourceRoot":"","sources":["../../../src/components/ComplexCommentPanel.vue"],"names":[],"mappings":"wBAy8BqB,OAAO,YAAY;;AAzBxC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6EAwBG"}
|