zen-gitsync 2.1.13 → 2.1.14

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zen-gitsync",
3
- "version": "2.1.13",
3
+ "version": "2.1.14",
4
4
  "description": "一个 git 自动查看差异并提交的工具",
5
5
  "main": "index.js",
6
6
  "type": "module",
@@ -1 +1 @@
1
- .card[data-v-c005b533]{background-color:#fff;border-radius:12px;box-shadow:0 2px 12px #0000000a;border:1px solid rgba(0,0,0,.03);height:100%;width:100%;display:flex;flex-direction:column;overflow:hidden;transition:all .3s ease;position:relative}.status-header[data-v-c005b533]{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;border-bottom:1px solid #f0f0f0}.status-header h2[data-v-c005b533]{margin:0;font-size:16px;font-weight:500;color:#303133}.header-actions[data-v-c005b533]{display:flex;align-items:center;gap:8px}.card-content[data-v-c005b533]{padding:16px;overflow-y:auto;overflow-x:hidden;flex:1;display:flex;flex-direction:column}.status-box[data-v-c005b533]{white-space:pre-wrap;font-family:monospace;background-color:#f8f9fa;padding:16px;border-radius:8px;margin-bottom:20px;max-height:200px;overflow-y:auto;overflow-x:hidden;border:1px solid #f0f0f0;font-size:14px;line-height:1.5;width:100%;box-sizing:border-box}.file-list-container[data-v-c005b533]{flex:1;overflow:hidden;display:flex;flex-direction:column;gap:16px;height:auto;min-height:100px;width:100%;box-sizing:border-box}.file-group[data-v-c005b533]{background-color:#f8f9fa;border-radius:8px;overflow:hidden;border:1px solid #ebeef5;margin-bottom:0;display:flex;flex-direction:column;transition:box-shadow .3s ease}.file-group[data-v-c005b533]:hover{box-shadow:0 4px 12px #0000000d}.file-group[data-v-c005b533]{flex:0 1 auto}.file-group[data-v-c005b533]:last-child{margin-bottom:0;flex:1 1 auto}.file-group-header[data-v-c005b533]{font-size:14px;font-weight:700;padding:10px 16px;background-color:#f0f2f5;color:#606266;border-bottom:1px solid #ebeef5;flex-shrink:0}.file-list[data-v-c005b533]{overflow-y:auto;min-height:40px;max-height:200px;flex-grow:1;padding:0;margin:0;scrollbar-width:thin;scrollbar-color:rgba(144,147,153,.3) transparent}.file-list[data-v-c005b533]::-webkit-scrollbar{width:6px;height:6px}.file-list[data-v-c005b533]::-webkit-scrollbar-thumb{background-color:#9093994d;border-radius:4px}.file-list[data-v-c005b533]::-webkit-scrollbar-thumb:hover{background-color:#90939980}.file-list[data-v-c005b533]::-webkit-scrollbar-track{background-color:transparent}.file-list[data-v-c005b533]:empty{display:none}.empty-file-container[data-v-c005b533]{overflow-y:hidden!important;display:flex;flex-direction:column;align-items:stretch;flex:1}.empty-file-group[data-v-c005b533]{padding:16px;text-align:center;color:#909399;font-size:13px;font-style:italic;display:flex;align-items:center;justify-content:center;min-height:50px;background-color:#f8f9fa;border-radius:4px;margin:8px}.file-item[data-v-c005b533]{padding:10px 16px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid #ebeef5;cursor:pointer;transition:all .2s ease}.file-item[data-v-c005b533]:last-child{border-bottom:none}.file-item[data-v-c005b533]:hover{background-color:#ecf5ff}.file-info[data-v-c005b533]{display:flex;align-items:center;flex-grow:1;overflow:hidden;white-space:nowrap;gap:10px}.file-status-indicator[data-v-c005b533]{width:8px;height:8px;border-radius:50%;background-color:#409eff;flex-shrink:0}.file-status-indicator.added[data-v-c005b533]{background-color:#67c23a}.file-status-indicator.modified[data-v-c005b533]{background-color:#409eff}.file-status-indicator.deleted[data-v-c005b533]{background-color:#f56c6c}.file-status-indicator.untracked[data-v-c005b533]{background-color:#e6a23c}.file-path-container[data-v-c005b533]{display:flex;flex-direction:column;overflow:hidden}.file-name[data-v-c005b533]{font-weight:500;color:#303133;overflow:hidden;text-overflow:ellipsis;line-height:1.4}.file-directory[data-v-c005b533]{font-size:12px;color:#909399;max-width:200px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.file-actions[data-v-c005b533]{display:flex;gap:8px;opacity:0;transition:opacity .2s ease}.file-item:hover .file-actions[data-v-c005b533]{opacity:1}.empty-status[data-v-c005b533]{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:40px 20px;text-align:center;background-color:#f9f9f9;border-radius:8px;flex-grow:1}.empty-icon[data-v-c005b533]{width:64px;height:64px;display:flex;align-items:center;justify-content:center;background-color:#f0f2f5;border-radius:50%;margin-bottom:16px;font-size:28px;color:#909399;animation:pulse-c005b533 2s infinite ease-in-out}@keyframes pulse-c005b533{0%{transform:scale(1);opacity:.7}50%{transform:scale(1.05);opacity:1}to{transform:scale(1);opacity:.7}}.empty-text[data-v-c005b533]{font-size:18px;font-weight:500;color:#606266;margin-bottom:8px}.empty-subtext[data-v-c005b533]{font-size:14px;color:#909399;margin-bottom:20px}.status-box-wrap[data-v-c005b533]{height:100%;display:flex;flex-direction:column;gap:16px}.branch-status-info[data-v-c005b533]{margin-bottom:0;background-color:#f8f9fa;border-radius:8px;overflow:hidden;border:1px solid #ebeef5;transition:all .3s ease}.branch-status-info[data-v-c005b533]:hover{box-shadow:0 4px 12px #0000000d}.branch-sync-status[data-v-c005b533]{display:flex;align-items:center;padding:12px 16px;border-left:3px solid #e6a23c;margin-bottom:0;background-color:#fdf6ec}.sync-status-content[data-v-c005b533]{display:flex;align-items:center;flex-wrap:wrap;gap:10px;width:100%}.status-badges[data-v-c005b533]{display:flex;flex-direction:column;gap:8px;width:100%}.status-badge[data-v-c005b533]{display:flex;align-items:center;width:100%;border-radius:4px;padding:8px 12px;transition:all .3s ease}.status-badge.el-tag--warning[data-v-c005b533]{background-color:#fdf6ec;border-color:#faecd8}.status-badge.el-tag--info[data-v-c005b533]{background-color:#f4f4f5;border-color:#e9e9eb}.status-badge[data-v-c005b533]:hover{transform:translateY(-2px);box-shadow:0 2px 8px #0000000d}.badge-content[data-v-c005b533]{display:flex;align-items:center;gap:8px;font-size:13px}.diff-dialog[data-v-c005b533]{height:calc(100vh - 150px)}[data-v-c005b533] .el-dialog__body{height:calc(100vh - 320px);overflow:auto;padding:0}.diff-content[data-v-c005b533]{flex:1;overflow-y:auto;padding:16px 20px;background-color:#fafafa;height:100%}.diff-formatted[data-v-c005b533]{font-family:JetBrains Mono,Fira Code,Consolas,Courier New,monospace;font-size:14px;line-height:1.6;white-space:pre-wrap;padding-bottom:20px}.no-diff[data-v-c005b533]{display:flex;align-items:center;justify-content:center;height:100%;color:#909399;font-size:14px}.file-navigation[data-v-c005b533]{display:flex;justify-content:space-between;align-items:center;padding:12px 20px;border-top:1px solid #ebeef5;background-color:#f9f9fb}.counter-tag[data-v-c005b533]{font-family:monospace;font-size:14px;padding:6px 12px;min-width:80px;text-align:center}.nav-button[data-v-c005b533]{min-width:120px;transition:all .3s ease}.nav-button[data-v-c005b533]:hover:not(:disabled){transform:translateY(-2px);box-shadow:0 2px 8px #0000001a}.diff-formatted[data-v-c005b533]::-webkit-scrollbar,.diff-content[data-v-c005b533]::-webkit-scrollbar{width:6px;height:6px}.diff-formatted[data-v-c005b533]::-webkit-scrollbar-thumb,.diff-content[data-v-c005b533]::-webkit-scrollbar-thumb{background-color:#9093994d;border-radius:4px}.diff-formatted[data-v-c005b533]::-webkit-scrollbar-thumb:hover,.diff-content[data-v-c005b533]::-webkit-scrollbar-thumb:hover{background-color:#90939980}.diff-formatted[data-v-c005b533]::-webkit-scrollbar-track,.diff-content[data-v-c005b533]::-webkit-scrollbar-track{background-color:transparent}.diff-formatted[data-v-c005b533],.diff-content[data-v-c005b533]{scrollbar-width:thin;scrollbar-color:rgba(144,147,153,.3) transparent}.auto-update-switch[data-v-c005b533] .el-switch__core{transition:all .3s ease-in-out;box-shadow:0 2px 5px #0000001a}.auto-update-switch[data-v-c005b533] .el-switch__core:hover{box-shadow:0 2px 8px #0003}.auto-update-switch.is-checked[data-v-c005b533] .el-switch__core{box-shadow:0 2px 5px #67c23a4d}.auto-update-switch.is-checked[data-v-c005b533] .el-switch__core:hover{box-shadow:0 2px 8px #67c23a80}.el-button[data-v-c005b533]{transition:all .3s ease}.el-button[data-v-c005b533]:not(:disabled):hover{transform:translateY(-2px);box-shadow:0 2px 8px #0000001a}.card-content[data-v-c005b533] .el-loading-mask{background-color:#fffc;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);z-index:10}.card-content[data-v-c005b533] .el-loading-spinner{transform:scale(1.2)}.card-content[data-v-c005b533] .el-loading-text{font-size:16px;color:#409eff;font-weight:700;margin-top:10px}.diff-header{font-weight:700;background-color:#e6f1fc;padding:8px 12px;margin:10px 0;border-radius:6px;color:#0366d6;border-bottom:1px solid #c8e1ff}.diff-old-file,.diff-new-file{color:#586069;padding:4px 8px;font-family:monospace}.diff-hunk-header{color:#6f42c1;background-color:#f1f8ff;padding:4px 8px;margin:8px 0;border-radius:4px;font-family:monospace}.diff-added{background-color:#e6ffed;color:#22863a;padding:2px 8px;border-left:4px solid #22863a;font-family:monospace;display:block;margin:2px 0}.diff-removed{background-color:#ffeef0;color:#cb2431;padding:2px 8px;border-left:4px solid #cb2431;font-family:monospace;display:block;margin:2px 0}.diff-context{color:#444;padding:2px 8px;font-family:monospace;display:block;margin:2px 0;background-color:#fafbfc}@keyframes snakeBorder-82d0f844{0%,to{border-top:2px solid #409EFF;border-right:2px solid transparent;border-bottom:2px solid transparent;border-left:2px solid transparent}25%{border-top:2px solid #409EFF;border-right:2px solid #67C23A;border-bottom:2px solid transparent;border-left:2px solid transparent}50%{border-top:2px solid transparent;border-right:2px solid #67C23A;border-bottom:2px solid #409EFF;border-left:2px solid transparent}75%{border-top:2px solid transparent;border-right:2px solid transparent;border-bottom:2px solid #409EFF;border-left:2px solid #67C23A}}@keyframes glowPulse-82d0f844{0%,to{box-shadow:0 0 8px #409eff66}50%{box-shadow:0 0 12px #67c23a80}}.card[data-v-82d0f844]{background-color:#fff;border-radius:8px;box-shadow:0 2px 10px #00000008;border:1px solid rgba(0,0,0,.03);height:100%;width:100%;display:flex;flex-direction:column;overflow:hidden;position:relative}.card-header[data-v-82d0f844]{padding:8px 16px;border-bottom:1px solid #f0f0f0;display:flex;justify-content:space-between;align-items:center}.card-header h2[data-v-82d0f844]{margin:0;font-size:16px;font-weight:500;color:#303133}.card-content[data-v-82d0f844]{padding:15px;overflow-y:auto;flex:1}.layout-container[data-v-82d0f844]{display:flex;flex-direction:column;gap:15px;height:100%}.commit-section[data-v-82d0f844]{flex:1;min-width:0}.actions-section[data-v-82d0f844]{width:100%;flex-shrink:0}.actions-section h3[data-v-82d0f844]{margin-top:0;margin-bottom:10px;padding-bottom:8px;border-bottom:1px solid #dcdfe6;font-size:16px;color:#303133;font-weight:500}.operations-wrapper[data-v-82d0f844]{display:flex;gap:10px}.action-groups[data-v-82d0f844]{display:flex;flex-direction:column;gap:12px}.action-group[data-v-82d0f844]{background-color:#f9f9f9;border-radius:6px;padding:8px 10px;box-shadow:0 1px 3px #0000000d;border-left:3px solid #409EFF;flex:1}.action-group[data-v-82d0f844]:nth-child(2){border-left-color:#e6a23c}.action-group[data-v-82d0f844]:nth-child(3){border-left-color:#909399}.group-title[data-v-82d0f844]{font-size:13px;font-weight:700;margin-bottom:8px;color:#606266;text-align:left;display:block;position:relative;padding-left:6px;border-bottom:1px solid rgba(0,0,0,.06);padding-bottom:6px}.group-buttons[data-v-82d0f844]{display:flex;flex-direction:row;flex-wrap:wrap;gap:8px;padding:0}.action-button[data-v-82d0f844]{font-size:14px;font-weight:500;flex:1;min-width:100px;border-radius:4px;height:36px;padding:0 10px}.action-button[data-v-82d0f844]:hover{transform:translateY(-1px);box-shadow:0 2px 5px #00000026}.action-button[data-v-82d0f844]:active{transform:translateY(0)}.command-text[data-v-82d0f844],.command-text-long[data-v-82d0f844]{display:none}.standard-commit-form[data-v-82d0f844]{display:flex;flex-direction:column;gap:15px;margin-bottom:15px}.standard-commit-header[data-v-82d0f844]{display:flex;flex-direction:column;gap:10px;width:100%}.type-scope-container[data-v-82d0f844]{display:flex;gap:10px;width:100%;margin-bottom:10px}.type-select[data-v-82d0f844]{width:35%}.scope-wrapper[data-v-82d0f844]{display:flex;align-items:center;gap:5px;width:65%}.description-container[data-v-82d0f844]{display:flex;align-items:center;gap:5px;width:100%}.scope-input[data-v-82d0f844],.description-input[data-v-82d0f844]{flex-grow:1}.settings-button[data-v-82d0f844]{flex-shrink:0}.preview-section[data-v-82d0f844]{background-color:#f5f7fa;padding:10px;border-radius:4px}.preview-title[data-v-82d0f844]{font-weight:700;margin-bottom:5px}.preview-content[data-v-82d0f844]{white-space:pre-wrap;font-family:monospace;margin:0;padding:10px;background-color:#ebeef5;border-radius:4px}.template-container[data-v-82d0f844]{display:flex;flex-direction:column;height:calc(85vh - 100px);overflow-y:auto;padding:5px}.template-form[data-v-82d0f844]{margin-bottom:20px;background-color:#f8f9fa;padding:15px;border-radius:6px;border:1px solid #ebeef5}.template-form-buttons[data-v-82d0f844]{display:flex;gap:10px;margin-top:12px;justify-content:flex-end}.template-input[data-v-82d0f844]{flex-grow:1}.template-list[data-v-82d0f844]{overflow-y:auto;height:100%}.template-list h3[data-v-82d0f844]{margin-top:0;margin-bottom:15px;font-size:16px;font-weight:500;color:#303133;padding-bottom:8px;border-bottom:1px solid #ebeef5}.template-item[data-v-82d0f844]{margin-bottom:10px;transition:all .2s ease;border:1px solid #ebeef5}.template-item[data-v-82d0f844]:hover{background-color:#f5f7fa;transform:translateY(-2px);box-shadow:0 2px 12px #0000001a}.template-content[data-v-82d0f844]{flex-grow:1;margin-right:10px;word-break:break-all;padding:5px 0;color:#303133;font-weight:500}.template-actions[data-v-82d0f844]{display:flex;gap:8px;justify-content:flex-end;min-width:180px;flex-shrink:0}.options-row[data-v-82d0f844]{display:flex;justify-content:space-between;align-items:center;margin-bottom:15px}.code-command[data-v-82d0f844]{background-color:#2d2d2d;color:#f8f8f2;font-family:Courier New,Courier,monospace;padding:10px;border-radius:4px;overflow-x:auto;white-space:pre;font-size:14px}@media (min-width: 768px){.layout-container[data-v-82d0f844]{flex-direction:row}.commit-section[data-v-82d0f844]{flex:3}.actions-section[data-v-82d0f844]{width:320px}.operations-wrapper[data-v-82d0f844]{flex-direction:column}}.git-config-warning[data-v-82d0f844]{width:100%}.config-command[data-v-82d0f844]{background-color:#2d2d2d;color:#f8f8f2;font-family:Courier New,Courier,monospace;padding:10px;border-radius:4px;margin-top:10px;white-space:pre}@keyframes pushing-pulse-82d0f844{0%{box-shadow:0 0 #67c23a66}70%{box-shadow:0 0 0 15px #67c23a00}to{box-shadow:0 0 #67c23a00}}@keyframes pushing-border-82d0f844{0%{border-color:#67c23a}50%{border-color:#85ce61}to{border-color:#67c23a}}.card.is-pushing[data-v-82d0f844]{animation:pushing-border-82d0f844 1.5s infinite ease-in-out;box-shadow:0 4px 12px #0000001a;transition:all .3s ease}.push-button[data-v-82d0f844]{background-color:#67c23a;border-color:#67c23a}.push-button[data-v-82d0f844]:hover{background-color:#85ce61;border-color:#85ce61}.push-button.is-loading[data-v-82d0f844],.push-button.is-loading[data-v-82d0f844]:hover,.push-button.is-loading[data-v-82d0f844]:focus{animation:pushing-pulse-82d0f844 1.5s infinite;background-color:#67c23a!important;border-color:#67c23a!important}.el-button.push-button.is-loading .el-loading-spinner[data-v-82d0f844]{color:#fff!important}@keyframes one-click-push-glow-82d0f844{0%{box-shadow:0 0 5px #67c23a80}50%{box-shadow:0 0 20px #67c23acc}to{box-shadow:0 0 5px #67c23a80}}.action-button.one-click-push[data-v-82d0f844]{position:relative;overflow:hidden}.action-button.one-click-push.is-loading[data-v-82d0f844],.action-button.one-click-push.is-loading[data-v-82d0f844]:hover{animation:one-click-push-glow-82d0f844 1.5s infinite;background-color:#67c23a!important;border-color:#67c23a!important}@keyframes push-success-82d0f844{0%{transform:scale(1)}50%{transform:scale(1.1)}to{transform:scale(1)}}.push-success-indicator[data-v-82d0f844]{position:absolute;top:0;right:0;bottom:0;left:0;margin:auto;background-color:#fff;border-radius:12px;padding:20px 30px;box-shadow:0 8px 24px #00000026;display:flex;flex-direction:column;align-items:center;justify-content:center;animation:push-success-82d0f844 .5s ease-out;z-index:9999;width:200px;height:200px}.push-success-icon[data-v-82d0f844]{font-size:64px;color:#67c23a;margin-bottom:16px;animation:bounce-82d0f844 .8s ease-in-out}@keyframes bounce-82d0f844{0%,20%,50%,80%,to{transform:translateY(0)}40%{transform:translateY(-20px)}60%{transform:translateY(-10px)}}.push-success-text[data-v-82d0f844]{font-size:20px;font-weight:700;color:#303133;text-align:center}.reset-button[data-v-82d0f844]{background-color:#909399;border-color:#909399}.reset-button[data-v-82d0f844]:hover{background-color:#a6a9ad;border-color:#a6a9ad}.el-button+.el-button[data-v-82d0f844]{margin-left:0}.pushing-indicator[data-v-82d0f844]{position:absolute;top:0;right:0;bottom:0;left:0;margin:auto;background-color:#409eff;border-radius:12px;padding:20px 30px;box-shadow:0 8px 24px #00000026;display:flex;flex-direction:column;align-items:center;justify-content:center;z-index:9999;width:200px;height:200px;color:#fff}.form-bottom-actions[data-v-82d0f844]{display:flex;flex-direction:column;gap:10px;margin-top:15px;padding:12px;background-color:#f5f7fa;border-radius:6px;box-shadow:0 1px 3px #0000000d;border-left:3px solid #67C23A}.button-row[data-v-82d0f844]{display:flex;justify-content:space-between;gap:10px;width:100%}.button-row .el-button[data-v-82d0f844]{flex:1;min-width:100px}.full-width-button[data-v-82d0f844]{width:100%;margin-top:5px;font-weight:500;height:40px}.form-bottom-actions .el-button[data-v-82d0f844]{font-weight:500;border-radius:4px;transition:all .3s}.form-bottom-actions .el-button[data-v-82d0f844]:hover{transform:translateY(-1px);box-shadow:0 2px 5px #00000026}.pushing-text[data-v-82d0f844]{font-size:20px;font-weight:700;text-align:center}.pushing-spinner[data-v-82d0f844]{margin-bottom:16px}.circular[data-v-82d0f844]{height:64px;width:64px;animation:pushing-rotate-82d0f844 2s linear infinite}.path[data-v-82d0f844]{stroke:#fff;stroke-width:4;stroke-linecap:round;stroke-dasharray:90,150;stroke-dashoffset:0;animation:pushing-dash-82d0f844 1.5s ease-in-out infinite}@keyframes pushing-rotate-82d0f844{to{transform:rotate(360deg)}}@keyframes pushing-dash-82d0f844{0%{stroke-dasharray:1,150;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-35}to{stroke-dasharray:90,150;stroke-dashoffset:-124}}.message-template-container[data-v-82d0f844]{display:flex;flex-direction:column;height:calc(100vh - 278px);overflow:hidden}.templates-container[data-v-82d0f844]{display:flex;gap:20px;margin-top:15px;flex:1;overflow:hidden}.message-templates-list[data-v-82d0f844]{flex:3;display:flex;flex-direction:column;border-right:1px solid #ebeef5;padding-right:15px;height:calc(100vh - 432px)}.message-templates-list h3[data-v-82d0f844]{margin-top:0;margin-bottom:15px;font-size:16px;font-weight:500;color:#303133;padding-bottom:8px;border-bottom:1px solid #ebeef5}.current-default-message[data-v-82d0f844]{flex:2;display:flex;flex-direction:column;gap:15px;padding-left:15px}.current-default-message h3[data-v-82d0f844]{margin-top:0;margin-bottom:15px;font-size:16px;font-weight:500;color:#303133;padding-bottom:8px;border-bottom:1px solid #ebeef5}.templates-scroll-area[data-v-82d0f844]{overflow-y:auto;padding-right:5px;flex:1}.default-message-card[data-v-82d0f844]{margin-bottom:15px;box-shadow:0 2px 8px #00000014;border-radius:4px;transition:all .3s ease}.default-message-card[data-v-82d0f844]:hover{box-shadow:0 4px 12px #0000001f}.default-message-content[data-v-82d0f844]{padding:12px 15px;background-color:#f0f9eb;border-left:3px solid #67c23a;font-weight:500;word-break:break-all;min-height:60px;display:flex;align-items:center;border-radius:0 4px 4px 0;color:#303133}.message-help-text[data-v-82d0f844]{background-color:#f8f9fa;border-radius:4px;padding:15px;font-size:14px;color:#606266;border-left:3px solid #909399;margin-top:auto;box-shadow:0 2px 8px #0000000d}.message-help-text h4[data-v-82d0f844]{margin-top:0;margin-bottom:10px;color:#303133;font-size:15px}.message-help-text p[data-v-82d0f844]{margin:8px 0;line-height:1.5}.advanced-options-toggle[data-v-82d0f844]{display:flex;align-items:center;justify-content:center;padding:8px 0;background-color:#f5f7fa;border-radius:4px;cursor:pointer;transition:all .3s ease;-webkit-user-select:none;user-select:none}.advanced-options-toggle[data-v-82d0f844]:hover{background-color:#ebeef5;color:#409eff}.toggle-icon[data-v-82d0f844]{margin-left:8px;transition:transform .3s ease}.toggle-icon.is-active[data-v-82d0f844]{transform:rotate(180deg)}.advanced-fields[data-v-82d0f844]{margin-top:10px;display:flex;flex-direction:column;gap:15px;animation:fade-in-82d0f844 .3s ease-in-out}@keyframes fade-in-82d0f844{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}.merge-dialog-content[data-v-82d0f844]{padding:0 10px}.merge-intro[data-v-82d0f844]{margin-bottom:20px;color:#606266}.merge-options[data-v-82d0f844]{display:flex;flex-direction:column;gap:10px}.dialog-footer[data-v-82d0f844]{display:flex;justify-content:flex-end;gap:10px}.merge-confirm-btn[data-v-82d0f844]{margin-left:10px}.merge-button[data-v-82d0f844]{background-color:#409eff;border-color:#409eff}.branch-group[data-v-82d0f844]{margin-top:20px;border-top:1px solid #f0f0f0;padding-top:16px}.branch-group .group-title[data-v-82d0f844]{color:#606266;font-weight:500;margin-bottom:12px}[data-v-82d0f844] .el-checkbox__label{white-space:normal;line-height:1.4}.git-cmd-tooltip{font-family:Consolas,Courier New,monospace!important;font-size:13px!important;font-weight:500!important;color:#303133!important;background-color:#f5f7fa!important;border:1px solid #dcdfe6!important;border-radius:4px!important;padding:8px 12px!important;box-shadow:0 2px 12px #0000001a!important}.template-dialog .el-dialog__header,.message-template-dialog .el-dialog__header,.merge-dialog .el-dialog__header{padding:15px 20px;margin-right:0;border-bottom:1px solid #ebeef5;background-color:#f8f9fa}.template-dialog .el-dialog__title,.message-template-dialog .el-dialog__title,.merge-dialog .el-dialog__title{font-size:16px;font-weight:600;color:#303133}.template-dialog .el-dialog__body,.message-template-dialog .el-dialog__body,.merge-dialog .el-dialog__body{padding:20px}.merge-dialog .el-dialog__footer{padding:15px 20px;border-top:1px solid #f0f0f0}.template-dialog .el-dialog__headerbtn,.message-template-dialog .el-dialog__headerbtn,.merge-dialog .el-dialog__headerbtn{top:15px;right:20px}.template-dialog .el-input__inner,.message-template-dialog .el-input__inner,.merge-dialog .el-input__inner{height:40px;line-height:40px}.template-dialog .el-button,.message-template-dialog .el-button{border-radius:4px;font-weight:500}.template-dialog .el-card,.message-template-dialog .el-card{border-radius:4px;overflow:hidden}.template-dialog .el-card__body,.message-template-dialog .el-card__body{padding:12px 15px}.template-dialog .el-empty__image,.message-template-dialog .el-empty__image{width:80px;height:80px}.card[data-v-4ca4673a]{background-color:#fff;border-radius:12px;box-shadow:0 2px 12px #0000000a;height:100%;width:100%;display:flex;flex-direction:column;border:1px solid rgba(0,0,0,.03);overflow:hidden;transition:all .3s ease}.log-header[data-v-4ca4673a]{display:flex;justify-content:space-between;align-items:center;margin-bottom:0;padding:12px 16px;background-color:#fff;border-bottom:1px solid #f0f0f0;position:sticky;top:0;z-index:100;flex-shrink:0}.header-left[data-v-4ca4673a]{display:flex;align-items:center;gap:12px}.log-header h2[data-v-4ca4673a]{margin:0;font-size:16px;font-weight:500}.log-actions[data-v-4ca4673a]{display:flex;gap:12px}.action-button[data-v-4ca4673a]{transition:all .3s ease;border-radius:8px;border:1px solid transparent;box-shadow:0 2px 4px #0000001a;font-weight:500;padding:8px 16px;min-width:120px;display:flex;align-items:center;justify-content:center;gap:8px}.action-button[data-v-4ca4673a]:hover{transform:translateY(-2px);box-shadow:0 4px 8px #00000026}.filter-button[data-v-4ca4673a]{background:linear-gradient(135deg,#e6a23c,#f0c78a);color:#fff;min-width:90px}.filter-button.active-filter[data-v-4ca4673a]{background:linear-gradient(135deg,#d48806,#e6a23c)}.filter-button .filter-badge[data-v-4ca4673a] .el-badge__content{background-color:#f56c6c;color:#fff;border:2px solid white;box-shadow:0 0 0 1px #e6a23c}.view-mode-button[data-v-4ca4673a]{background:linear-gradient(135deg,#409eff,#53a8ff);color:#fff}.view-mode-button.active-view[data-v-4ca4673a]{background:linear-gradient(135deg,#1890ff,#096dd9)}.commit-display-button[data-v-4ca4673a]{background:linear-gradient(135deg,#67c23a,#85ce61);color:#fff}.commit-display-button.active-commits[data-v-4ca4673a]{background:linear-gradient(135deg,#52c41a,#389e0d)}.refresh-button[data-v-4ca4673a]{background:linear-gradient(135deg,#909399,#c0c4cc);color:#fff;min-width:unset;padding:8px;border-radius:50%;width:36px;height:36px}.refresh-button[data-v-4ca4673a]:hover{background:linear-gradient(135deg,#606266,#909399)}.refresh-button-animated[data-v-4ca4673a]{animation:spin-4ca4673a 1s linear}@keyframes spin-4ca4673a{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.content-area[data-v-4ca4673a]{padding:10px 16px;flex:1;min-height:100px;height:calc(100% - 52px);display:flex;flex-direction:column}.content-area-content[data-v-4ca4673a]{height:100%}.content-area.with-filter[data-v-4ca4673a]{height:calc(100% - 112px);padding-top:0}.content-area>div[data-v-4ca4673a]{flex:1;display:flex;flex-direction:column}.el-table[data-v-4ca4673a]{--el-table-border-color: #f0f0f0;--el-table-header-bg-color: #f8f9fa;border-radius:8px;overflow:hidden}[data-v-4ca4673a] .el-table__header-wrapper{background-color:#f8f9fa}[data-v-4ca4673a] .el-table__header th{background-color:#f8f9fa;color:#606266;font-weight:600;height:48px}[data-v-4ca4673a] .el-table__row{transition:all .2s ease}[data-v-4ca4673a] .el-table__row:hover{background-color:#ecf5ff!important}[data-v-4ca4673a] .el-table--striped .el-table__row--striped{background-color:#fafafa}[data-v-4ca4673a] .el-table__cell{padding:8px 0}.branch-container[data-v-4ca4673a]{display:flex;flex-wrap:wrap;gap:6px}.branch-tag[data-v-4ca4673a]{margin-right:0;border-radius:4px;transition:all .2s ease}.branch-tag[data-v-4ca4673a]:hover{transform:translateY(-1px);box-shadow:0 2px 4px #0000001a}.commit-count[data-v-4ca4673a]{margin-bottom:12px;font-size:14px;color:#606266;text-align:right}.graph-view[data-v-4ca4673a]{width:100%;flex:1;display:flex;flex-direction:column;overflow-y:auto;padding:0 8px}.graph-container[data-v-4ca4673a]{width:100%;flex:1;min-height:500px;border:1px solid #ebeef5;border-radius:8px;padding:16px;background-color:#fff;position:relative;box-shadow:0 2px 8px #00000008}.graph-container svg[data-v-4ca4673a]{transform-origin:top left;transition:transform .2s ease}.graph-controls[data-v-4ca4673a]{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px;background-color:#f8f9fa;padding:12px;border-radius:8px;border:1px solid #ebeef5}.zoom-controls[data-v-4ca4673a]{display:flex;gap:12px;align-items:center}.zoom-slider[data-v-4ca4673a]{width:200px}.scale-info[data-v-4ca4673a]{font-size:14px;color:#606266;background-color:#fff;padding:4px 10px;border-radius:4px;border:1px solid #ebeef5}.refresh-notification[data-v-4ca4673a]{background-color:#f0f9eb;color:#67c23a;padding:10px 15px;border-radius:8px;font-size:14px;border-left:4px solid #67c23a;animation:fadeOut-4ca4673a 2s forwards;position:fixed;top:20px;right:20px;z-index:9999;box-shadow:0 4px 12px #0000001a;max-width:300px;text-align:center}@keyframes fadeOut-4ca4673a{0%{opacity:0;transform:translateY(-20px)}20%{opacity:1;transform:translateY(0)}80%{opacity:1}to{opacity:0}}.author-name[data-v-4ca4673a]{cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:inline-block;max-width:100%;font-weight:500}.commit-hash[data-v-4ca4673a]{cursor:pointer;color:#409eff;font-family:JetBrains Mono,Fira Code,Consolas,monospace;font-weight:500;border-radius:4px;padding:2px 4px;background-color:#ecf5ff;transition:all .2s ease}.commit-hash[data-v-4ca4673a]:hover{text-decoration:none;background-color:#d9ecff;box-shadow:0 2px 4px #0000000d}.commit-detail-container[data-v-4ca4673a]{display:flex;flex-direction:column;gap:20px}.commit-info[data-v-4ca4673a]{padding:16px;background-color:#f5f7fa;border-radius:8px;font-size:14px;display:flex;flex-direction:column;gap:16px}.commit-info-header[data-v-4ca4673a]{display:flex;flex-wrap:wrap;gap:16px;align-items:center;background-color:#fff;padding:16px;border-radius:8px;border:1px solid #e4e7ed}.info-item[data-v-4ca4673a]{display:flex;align-items:center;gap:8px}.item-label[data-v-4ca4673a]{font-weight:700;color:#606266;white-space:nowrap}.item-value[data-v-4ca4673a]{color:#333;word-break:break-all}.commit-message-container[data-v-4ca4673a]{display:flex;flex-direction:column;gap:8px}.message-label[data-v-4ca4673a]{font-weight:700;color:#606266}.message-content[data-v-4ca4673a]{background-color:#fff;padding:16px;border-radius:8px;font-family:JetBrains Mono,Fira Code,Consolas,monospace;white-space:pre-wrap;line-height:1.6;border:1px solid #e4e7ed;border-left:4px solid #409eff}.commit-files-diff[data-v-4ca4673a]{margin-top:8px;display:flex;gap:20px;height:60vh}.files-list[data-v-4ca4673a]{width:25%;overflow-y:auto;background-color:#f5f7fa;border-radius:8px;padding:16px}.files-list h3[data-v-4ca4673a]{margin-top:0;padding-bottom:12px;border-bottom:1px solid #dcdfe6;font-size:16px;font-weight:500}.files-list ul[data-v-4ca4673a]{list-style:none;padding:0;margin:0}.files-list li[data-v-4ca4673a]{padding:10px 12px;cursor:pointer;border-radius:4px;margin-bottom:6px;font-family:JetBrains Mono,Fira Code,Consolas,monospace;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:13px;transition:all .2s ease;border:1px solid transparent}.files-list li[data-v-4ca4673a]:hover{background-color:#ecf5ff;border-color:#d9ecff}.files-list li.active-file[data-v-4ca4673a]{background-color:#409eff;color:#fff;box-shadow:0 2px 6px #409eff4d}.file-diff[data-v-4ca4673a]{flex:1;display:flex;flex-direction:column;background-color:#f5f7fa;border-radius:8px;padding:16px;overflow:hidden}.file-diff h3[data-v-4ca4673a]{margin-top:0;padding-bottom:12px;border-bottom:1px solid #dcdfe6;font-size:16px;font-weight:500}.diff-content[data-v-4ca4673a]{flex:1;overflow-y:auto;background-color:#fff;padding:16px;border-radius:8px;font-family:JetBrains Mono,Fira Code,Consolas,monospace;font-size:13px;line-height:1.6;border:1px solid #ebeef5}.diff-content[data-v-4ca4673a]::-webkit-scrollbar,.files-list[data-v-4ca4673a]::-webkit-scrollbar{width:6px;height:6px}.diff-content[data-v-4ca4673a]::-webkit-scrollbar-thumb,.files-list[data-v-4ca4673a]::-webkit-scrollbar-thumb{background-color:#9093994d;border-radius:4px}.diff-content[data-v-4ca4673a]::-webkit-scrollbar-thumb:hover,.files-list[data-v-4ca4673a]::-webkit-scrollbar-thumb:hover{background-color:#90939980}.diff-content[data-v-4ca4673a]::-webkit-scrollbar-track,.files-list[data-v-4ca4673a]::-webkit-scrollbar-track{background-color:transparent}.diff-content[data-v-4ca4673a],.files-list[data-v-4ca4673a]{scrollbar-width:thin;scrollbar-color:rgba(144,147,153,.3) transparent}[data-v-4ca4673a] .commit-detail-dialog{--el-dialog-margin-top: 7vh}[data-v-4ca4673a] .commit-detail-dialog .el-dialog__body{padding:16px}.filter-panel-header[data-v-4ca4673a]{background-color:#f5f7fa;padding:12px 16px;border-bottom:1px solid #e4e7ed;position:sticky;top:36px;z-index:99;transition:all .3s ease;flex-shrink:0;margin-bottom:10px;box-shadow:0 2px 8px #0000000d;border-radius:0 0 8px 8px}.filter-panel-header .filter-form[data-v-4ca4673a]{display:flex;align-items:center;gap:12px;flex-wrap:nowrap;justify-content:space-between}.filter-panel-header .filter-item[data-v-4ca4673a]{margin-right:0;flex:1;min-width:0}.filter-panel-header .filter-input[data-v-4ca4673a]{width:100%}.filter-panel-header .filter-input.date-range[data-v-4ca4673a]{width:100%;max-width:280px}.compact-label[data-v-4ca4673a]{color:#909399;font-size:12px;margin-right:6px;white-space:nowrap;font-weight:700;border-right:1px solid #dcdfe6;padding-right:8px}.filter-action-button[data-v-4ca4673a]{padding:8px 16px;border-radius:6px;transition:all .3s;min-width:70px;font-weight:500}.filter-action-button[data-v-4ca4673a]:hover{transform:translateY(-2px);box-shadow:0 2px 8px #0000001a}.filter-actions[data-v-4ca4673a]{display:flex;align-items:center;gap:10px;white-space:nowrap;flex-shrink:0}.table-view-container[data-v-4ca4673a]{display:flex;flex-direction:column;flex:1;min-height:400px}.log-table[data-v-4ca4673a]{width:100%;height:100%;min-height:300px;flex:1}.load-more-container[data-v-4ca4673a]{display:flex;flex-direction:column;align-items:center;padding:8px 0;border-top:1px dashed #ebeef5;gap:8px}.pagination-info[data-v-4ca4673a]{font-size:13px;color:#909399;margin-bottom:4px}.loading-more[data-v-4ca4673a]{display:flex;align-items:center;color:#909399;font-size:13px;gap:8px}.loading-spinner[data-v-4ca4673a]{width:16px;height:16px;border:2px solid #dcdfe6;border-top-color:#409eff;border-radius:50%;animation:spinner-4ca4673a 1s linear infinite}@keyframes spinner-4ca4673a{to{transform:rotate(360deg)}}.load-more-button[data-v-4ca4673a]{cursor:pointer;color:#409eff;font-size:13px;padding:6px 16px;border:1px solid #d9ecff;background-color:#ecf5ff;border-radius:4px;transition:all .3s;font-weight:500}.no-more-data[data-v-4ca4673a]{color:#909399;font-size:13px;font-style:italic;display:flex;flex-direction:column;align-items:center}.total-loaded[data-v-4ca4673a]{font-size:12px;margin-top:4px;color:#c0c4cc}.context-menu[data-v-4ca4673a]{position:fixed;background:#fff;border:1px solid #dcdfe6;border-radius:8px;box-shadow:0 4px 16px #0000001a;padding:6px 0;z-index:3000;min-width:200px;animation:fadeIn-4ca4673a .15s ease-out}@keyframes fadeIn-4ca4673a{0%{opacity:0;transform:translateY(5px)}to{opacity:1;transform:translateY(0)}}.context-menu-item[data-v-4ca4673a]{padding:10px 16px;cursor:pointer;font-size:14px;display:flex;align-items:center;transition:all .2s ease;color:#606266}.context-menu-item[data-v-4ca4673a]:hover{background-color:#f5f7fa;color:#409eff}.context-menu-item i[data-v-4ca4673a]{margin-right:10px;font-size:16px}.branch-graph-column[data-v-4ca4673a]{padding:0!important;overflow:visible}.branch-graph-cell[data-v-4ca4673a]{height:40px;width:100%;position:relative;padding:0;margin:0}.branch-graph-column .cell[data-v-4ca4673a]{padding:0!important;height:100%;margin:0;overflow:visible}.el-table .branch-graph-column[data-v-4ca4673a]{width:60px!important;padding:0!important}[data-v-4ca4673a] .el-table .el-table__cell{padding:0!important}[data-v-4ca4673a] .branch-graph-cell svg{display:block!important;width:100%!important;height:100%!important;overflow:visible!important;z-index:10!important}[data-v-4ca4673a] .branch-graph-cell svg line,[data-v-4ca4673a] .branch-graph-cell svg path{stroke-width:2!important}[data-v-4ca4673a] .branch-graph-cell svg circle{r:6!important;stroke-width:2!important}.branch-graph-column[data-v-4ca4673a]{min-width:60px!important;width:60px!important}.branch-graph-cell[data-v-4ca4673a]{position:relative!important;overflow:visible!important;z-index:1!important}[data-v-4ca4673a] .el-table--border .el-table__inner-wrapper tr{border:none!important}[data-v-4ca4673a] .el-table--border .el-table__inner-wrapper td{border-right:none!important;border-bottom:none!important}[data-v-4ca4673a] .el-table--border .el-table__inner-wrapper th{border-right:none!important}[data-v-4ca4673a] .el-table--border,[data-v-4ca4673a] .el-table--border .el-table__inner-wrapper{border:none!important}[data-v-4ca4673a] .el-table--border:after,[data-v-4ca4673a] .el-table--border:before,[data-v-4ca4673a] .el-table__inner-wrapper:after,[data-v-4ca4673a] .el-table__inner-wrapper:before{display:none!important}[data-v-4ca4673a] .el-table tr{background-color:transparent!important}[data-v-4ca4673a] .el-table--striped .el-table__body tr.el-table__row--striped td{background-color:#00000005!important}.el-table .el-table__cell .cell{word-break:break-all}.diff-header{font-weight:700;background-color:#e6f1fc;padding:10px 16px;margin:12px 0;border-radius:6px;color:#0366d6;border-bottom:1px solid #c8e1ff}.diff-old-file,.diff-new-file{color:#586069;padding:4px 8px;font-family:JetBrains Mono,Fira Code,Consolas,monospace}.diff-old-file{color:#cb2431}.diff-new-file{color:#22863a}.diff-hunk-header{color:#6f42c1;background-color:#f1f8ff;padding:4px 8px;margin:8px 0;border-radius:4px;font-family:JetBrains Mono,Fira Code,Consolas,monospace}.diff-added{background-color:#e6ffed;color:#22863a;padding:2px 8px;border-left:4px solid #22863a;font-family:JetBrains Mono,Fira Code,Consolas,monospace;display:block;margin:2px 0}.diff-removed{background-color:#ffeef0;color:#cb2431;padding:2px 8px;border-left:4px solid #cb2431;font-family:JetBrains Mono,Fira Code,Consolas,monospace;display:block;margin:2px 0}.diff-context{color:#444;padding:2px 8px;font-family:JetBrains Mono,Fira Code,Consolas,monospace;display:block;margin:2px 0;background-color:#fafbfc}.load-more-button:hover{background-color:#d9ecff;box-shadow:0 2px 6px #409eff26;transform:translateY(-1px)}body{font-family:Arial,sans-serif;margin:0;padding:0;background-color:#f5f5f5;overflow:hidden;height:100vh}.main-container{position:fixed;top:60px;bottom:60px;left:0;right:0;padding:10px;overflow:hidden}.grid-layout{display:grid;grid-template-columns:2fr 8px 3fr;grid-template-rows:1fr 8px 1fr;grid-template-areas:"git-status v-resizer commit-form" "h-resizer h-resizer h-resizer" "log-list log-list log-list";gap:10px;height:100%}.git-status-panel{grid-area:git-status;overflow:hidden;max-height:100%;padding:0}.commit-form-panel{grid-area:commit-form;overflow:hidden;max-height:100%;padding:0}.log-list-panel{grid-area:log-list;overflow:hidden;max-height:100%;padding:0}.card{background-color:#fff;border-radius:8px;box-shadow:0 4px 12px #0000000d;border:1px solid rgba(0,0,0,.03);height:100%;overflow:hidden;display:flex;flex-direction:column}.main-header{background-color:#24292e;color:#fff;padding:0 20px;display:flex;justify-content:space-between;align-items:center;position:fixed;top:0;left:0;right:0;z-index:1000;box-shadow:0 2px 10px #0003;height:60px;box-sizing:border-box}.header-left{display:flex;align-items:center;gap:10px;min-width:220px;flex:1}.logo{height:32px;width:auto}h1{margin:0;font-size:24px}.header-info{display:flex;align-items:center;gap:10px;justify-content:flex-end}#user-info{display:flex;align-items:center;background-color:#282c34b3;padding:6px 10px;border-radius:4px;border:1px solid rgba(255,255,255,.15);margin-right:10px;flex-shrink:0}.directory-selector{display:flex;flex-direction:row;justify-content:space-between;align-items:center;background-color:#282c34b3;border-radius:4px;padding:6px 10px;border:1px solid rgba(255,255,255,.15);box-shadow:0 2px 8px #00000026;flex-shrink:0}.directory-display{display:flex;align-items:center;gap:8px;flex:1;min-width:0}.directory-path{font-family:monospace;color:#fff;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:14px;font-weight:500;background-color:#0003;padding:4px 8px;border-radius:3px;border-left:3px solid #409EFF;flex:1;min-width:0;max-width:500px}.branch-label,.user-label,.user-name{font-weight:700;margin-right:5px}.user-email{color:#e0e0e0}.branch-name{font-family:monospace}.status-box{background-color:#f6f8fa;border:1px solid #e1e4e8;border-radius:3px;padding:15px;white-space:pre-wrap;font-family:monospace;overflow-y:auto}.tips{margin-top:20px;padding:15px;background-color:#f5f7fa;border-radius:5px;border-left:4px solid #409eff}.tips h3{margin-top:0;font-size:16px;margin-bottom:10px}.code-block{background-color:#2d2d2d;color:#f8f8f2;font-family:monospace;padding:10px 15px;border-radius:4px;margin-bottom:10px}.loading-container{display:flex;justify-content:center;align-items:center;height:100%}.loading-card{width:300px;text-align:center;padding:30px}.loading-spinner{font-size:48px;margin-bottom:20px;color:#409eff}.loading-text{font-size:18px;color:#606266}.user-settings-btn{margin-left:10px}.user-warning{color:#e6a23c;font-weight:700}.main-footer{background-color:#24292e;color:#fff;padding:10px 20px;display:flex;justify-content:space-between;align-items:center;position:fixed;bottom:0;left:0;right:0;z-index:100;box-shadow:0 -2px 10px #0000001a;height:60px;box-sizing:border-box}@media (max-width: 768px){.grid-layout{grid-template-columns:1fr;grid-template-rows:auto auto auto auto auto;grid-template-areas:"git-status" "v-resizer" "commit-form" "h-resizer" "log-list";gap:10px}.vertical-resizer{height:10px;cursor:row-resize}.vertical-resizer:after{width:30px;height:4px}.git-status-panel,.commit-form-panel,.log-list-panel{padding:0;max-height:none}.git-status-panel,.commit-form-panel{max-height:30vh}.log-list-panel{max-height:40vh}}.logo[data-v-98ed32bc]{will-change:filter;transition:filter .3s}.logo[data-v-98ed32bc]:hover{filter:drop-shadow(0 0 2em #42b883aa)}.branch-info[data-v-98ed32bc]{display:flex;align-items:center;gap:10px}.branch-wrapper[data-v-98ed32bc]{display:flex;align-items:center;background-color:#ffffff26;border-radius:4px;padding:8px 12px;box-shadow:0 2px 4px #0003;transition:all .3s}.branch-wrapper[data-v-98ed32bc]:hover{background-color:#fff3}.branch-label[data-v-98ed32bc]{font-weight:700;margin-right:10px;color:#fff}.branch-select[data-v-98ed32bc]{width:200px;margin-right:10px}.create-branch-btn[data-v-98ed32bc]{background-color:#2ea44f;border-color:#2ea44f;transition:all .3s;box-shadow:0 2px 4px #0003}.create-branch-btn[data-v-98ed32bc]:hover{background-color:#3bbc63;border-color:#3bbc63;transform:translateY(-2px);box-shadow:0 4px 8px #0003}.footer-right[data-v-98ed32bc]{display:flex;align-items:center;gap:10px;color:#ffffffe6;font-size:13px;background-color:#ffffff1a;padding:8px 12px;border-radius:4px;box-shadow:0 2px 4px #0003}.repo-url-label[data-v-98ed32bc]{font-weight:700;margin-right:8px;color:#fff}.repo-url[data-v-98ed32bc]{color:#e6f7ff;font-family:monospace;max-width:300px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.copy-url-btn[data-v-98ed32bc]{transition:all .3s;background-color:#1890ff;border-color:#1890ff;box-shadow:0 2px 4px #0003}.copy-url-btn[data-v-98ed32bc]:hover{background-color:#40a9ff;border-color:#40a9ff;transform:translateY(-2px);box-shadow:0 4px 8px #0003}.vertical-resizer[data-v-98ed32bc]{grid-area:v-resizer;background-color:#e8e8e8;cursor:col-resize;transition:background-color .2s,box-shadow .2s;position:relative;z-index:10;border-radius:8px;box-shadow:0 0 3px #0000001a}.vertical-resizer[data-v-98ed32bc]:after{content:"";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:4px;height:50px;background-color:#a0a0a0;border-radius:4px;transition:background-color .2s,width .2s,box-shadow .2s}.vertical-resizer[data-v-98ed32bc]:hover,.vertical-resizer.active[data-v-98ed32bc]{background-color:#d0d0d0;box-shadow:0 0 5px #0003}.vertical-resizer[data-v-98ed32bc]:hover:after,.vertical-resizer.active[data-v-98ed32bc]:after{background-color:#409eff;width:6px;box-shadow:0 0 8px #409eff99}.horizontal-resizer[data-v-98ed32bc]{grid-area:h-resizer;background-color:#e8e8e8;cursor:row-resize;transition:background-color .2s,box-shadow .2s;position:relative;z-index:10;border-radius:8px;box-shadow:0 0 3px #0000001a}.horizontal-resizer[data-v-98ed32bc]:after{content:"";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:50px;height:4px;background-color:#a0a0a0;border-radius:4px;transition:background-color .2s,height .2s,box-shadow .2s}.horizontal-resizer[data-v-98ed32bc]:hover,.horizontal-resizer.active[data-v-98ed32bc]{background-color:#d0d0d0;box-shadow:0 0 5px #0003}.horizontal-resizer[data-v-98ed32bc]:hover:after,.horizontal-resizer.active[data-v-98ed32bc]:after{background-color:#409eff;height:6px;box-shadow:0 0 8px #409eff99}.directory-selector[data-v-98ed32bc]{display:flex;flex-direction:row;justify-content:space-between;align-items:center;background-color:#282c34b3;border-radius:4px;padding:8px 12px;margin-bottom:8px;border:1px solid rgba(255,255,255,.2);box-shadow:0 2px 8px #0003}.directory-display[data-v-98ed32bc]{display:flex;align-items:center;gap:8px;flex:1;min-width:0}.directory-path[data-v-98ed32bc]{font-family:monospace;color:#fff;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:14px;font-weight:500;background-color:#0003;padding:4px 8px;border-radius:3px;border-left:3px solid #409EFF;flex:1;min-width:0;max-width:350px}.directory-actions[data-v-98ed32bc]{display:flex;gap:4px;margin-left:8px}.dir-button[data-v-98ed32bc]{padding:6px;height:28px;width:28px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#409eff,#53a8ff);color:#fff;border:none;box-shadow:0 2px 4px #0003;transition:all .3s}.dir-button[data-v-98ed32bc]:hover{transform:translateY(-1px);box-shadow:0 3px 6px #0000004d;background:linear-gradient(135deg,#53a8ff,#66b1ff)}.dir-button.el-button--info[data-v-98ed32bc]{background:linear-gradient(135deg,#909399,#a6a9ad)}.dir-button.el-button--info[data-v-98ed32bc]:hover{background:linear-gradient(135deg,#a6a9ad,#c0c4cc)}.directory-icon[data-v-98ed32bc]{display:flex;justify-content:center;align-items:center;width:24px;height:24px;border-radius:3px;background-color:#409eff1a;color:#409eff;margin-right:2px}.directory-input-group[data-v-98ed32bc]{display:flex;align-items:center;gap:8px;width:100%}.recent-directories[data-v-98ed32bc]{display:flex;flex-wrap:wrap;gap:4px}.recent-dir-tag[data-v-98ed32bc]{cursor:pointer;background-color:#e6f7ff;border:1px solid #91d5ff;padding:4px 8px;border-radius:4px}.directory-browser[data-v-98ed32bc]{width:100%;height:400px;overflow:auto}.current-path[data-v-98ed32bc]{padding:10px;background-color:#f5f7fa;border-radius:4px;margin-bottom:10px;border:1px solid #e4e7ed;display:flex;align-items:center;width:100%;box-sizing:border-box}.path-label[data-v-98ed32bc]{font-weight:700;margin-right:5px;white-space:nowrap;flex-shrink:0}.path-value[data-v-98ed32bc]{font-family:monospace;word-break:break-all;flex:1;min-width:0;background-color:#fff;padding:5px 8px;border-radius:3px;border:1px solid #dcdfe6;box-shadow:inset 0 1px 2px #0000000d;width:100%}.directory-list[data-v-98ed32bc]{list-style:none!important;padding:0;margin:0;border:1px solid #e4e7ed;border-radius:4px;max-height:300px;overflow-y:auto;background-color:#fff;display:flex;flex-direction:column;width:100%;box-sizing:border-box}.directory-item[data-v-98ed32bc]{padding:10px 12px;border-bottom:1px solid #ebeef5;cursor:pointer;display:flex;align-items:center;transition:all .2s ease;position:relative;width:100%;box-sizing:border-box;list-style:none!important}.directory-item[data-v-98ed32bc]:hover{background-color:#ecf5ff}.directory-item[data-v-98ed32bc]:last-child{border-bottom:none}.parent-dir[data-v-98ed32bc]{background-color:#f5f7fa;font-weight:500}.dir-icon[data-v-98ed32bc]{margin-right:12px;display:flex;align-items:center;justify-content:center;width:24px;height:24px;flex-shrink:0}.dir-name[data-v-98ed32bc]{display:flex;align-items:center;font-size:14px;line-height:1.4}.folder-icon[data-v-98ed32bc]{filter:drop-shadow(0 1px 2px rgba(0,0,0,.1));transition:all .2s ease}.directory-item:hover .folder-icon[data-v-98ed32bc]{transform:scale(1.1)}[data-v-98ed32bc] .directory-browser-dialog{border-radius:8px;overflow:hidden}[data-v-98ed32bc] .directory-browser-dialog .el-message-box__header{background-color:#f5f7fa;padding:15px 20px;border-bottom:1px solid #e4e7ed;position:relative}[data-v-98ed32bc] .directory-browser-dialog .el-message-box__title{color:#409eff;font-weight:500;font-size:18px}[data-v-98ed32bc] .directory-browser-dialog .el-message-box__headerbtn{position:absolute;top:15px;right:15px;width:24px;height:24px;border-radius:50%;background-color:#0000000d;transition:all .3s;display:flex;align-items:center;justify-content:center}[data-v-98ed32bc] .directory-browser-dialog .el-message-box__headerbtn:hover{background-color:#0000001a;transform:rotate(90deg)}[data-v-98ed32bc] .directory-browser-dialog .el-message-box__headerbtn .el-message-box__close{color:#606266;font-weight:700;font-size:16px}[data-v-98ed32bc] .directory-browser-dialog .el-message-box__headerbtn:hover .el-message-box__close{color:#409eff}[data-v-98ed32bc] .directory-browser-dialog .el-message-box__content{padding:20px}.el-message-box__message{width:100%}.directory-browser-dialog{border-radius:8px;overflow:hidden}.directory-browser-dialog .el-message-box__header{background-color:#f5f7fa;padding:15px 20px;border-bottom:1px solid #e4e7ed;position:relative}.directory-browser-dialog .el-message-box__title{color:#409eff;font-weight:500;font-size:18px}.directory-browser-dialog .el-message-box__headerbtn{position:absolute;top:15px;right:15px;width:24px;height:24px;border-radius:50%;background-color:#0000000d;transition:all .3s;display:flex;align-items:center;justify-content:center}.directory-browser-dialog .el-message-box__headerbtn:hover{background-color:#0000001a;transform:rotate(90deg)}.directory-browser-dialog .el-message-box__headerbtn .el-message-box__close{color:#606266;font-weight:700;font-size:16px}.directory-browser-dialog .el-message-box__headerbtn:hover .el-message-box__close{color:#409eff}.directory-browser-dialog .el-message-box__content{padding:20px}.directory-browser-dialog .el-message-box__btns{padding:10px 20px 15px;border-top:1px solid #e4e7ed}.directory-browser{width:100%;height:400px;overflow:auto}.current-path{padding:10px;background-color:#f5f7fa;border-radius:4px;margin-bottom:10px;border:1px solid #e4e7ed;display:flex;align-items:center;width:100%;box-sizing:border-box}.path-label{font-weight:700;margin-right:5px;white-space:nowrap;flex-shrink:0}.path-value{font-family:monospace;word-break:break-all;flex:1;min-width:0;background-color:#fff;padding:5px 8px;border-radius:3px;border:1px solid #dcdfe6;box-shadow:inset 0 1px 2px #0000000d;width:100%}.directory-list{list-style:none!important;padding:0;margin:0;border:1px solid #e4e7ed;border-radius:4px;max-height:300px;overflow-y:auto;background-color:#fff;display:flex;flex-direction:column;width:100%;box-sizing:border-box}.directory-item{padding:10px 12px;border-bottom:1px solid #ebeef5;cursor:pointer;display:flex;align-items:center;transition:all .2s ease;position:relative;width:100%;box-sizing:border-box;list-style:none!important}.directory-item:hover{background-color:#ecf5ff}.directory-item:last-child{border-bottom:none}.parent-dir{background-color:#f5f7fa;font-weight:500}.dir-icon{margin-right:12px;display:flex;align-items:center;justify-content:center;width:24px;height:24px;flex-shrink:0}.dir-name{display:flex;align-items:center;font-size:14px;line-height:1.4}.folder-icon{filter:drop-shadow(0 1px 2px rgba(0,0,0,.1));transition:all .2s ease}.directory-item:hover .folder-icon{transform:scale(1.1)}*{margin:0;padding:0}div{box-sizing:border-box}
1
+ .card[data-v-c005b533]{background-color:#fff;border-radius:12px;box-shadow:0 2px 12px #0000000a;border:1px solid rgba(0,0,0,.03);height:100%;width:100%;display:flex;flex-direction:column;overflow:hidden;transition:all .3s ease;position:relative}.status-header[data-v-c005b533]{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;border-bottom:1px solid #f0f0f0}.status-header h2[data-v-c005b533]{margin:0;font-size:16px;font-weight:500;color:#303133}.header-actions[data-v-c005b533]{display:flex;align-items:center;gap:8px}.card-content[data-v-c005b533]{padding:16px;overflow-y:auto;overflow-x:hidden;flex:1;display:flex;flex-direction:column}.status-box[data-v-c005b533]{white-space:pre-wrap;font-family:monospace;background-color:#f8f9fa;padding:16px;border-radius:8px;margin-bottom:20px;max-height:200px;overflow-y:auto;overflow-x:hidden;border:1px solid #f0f0f0;font-size:14px;line-height:1.5;width:100%;box-sizing:border-box}.file-list-container[data-v-c005b533]{flex:1;overflow:hidden;display:flex;flex-direction:column;gap:16px;height:auto;min-height:100px;width:100%;box-sizing:border-box}.file-group[data-v-c005b533]{background-color:#f8f9fa;border-radius:8px;overflow:hidden;border:1px solid #ebeef5;margin-bottom:0;display:flex;flex-direction:column;transition:box-shadow .3s ease}.file-group[data-v-c005b533]:hover{box-shadow:0 4px 12px #0000000d}.file-group[data-v-c005b533]{flex:0 1 auto}.file-group[data-v-c005b533]:last-child{margin-bottom:0;flex:1 1 auto}.file-group-header[data-v-c005b533]{font-size:14px;font-weight:700;padding:10px 16px;background-color:#f0f2f5;color:#606266;border-bottom:1px solid #ebeef5;flex-shrink:0}.file-list[data-v-c005b533]{overflow-y:auto;min-height:40px;max-height:200px;flex-grow:1;padding:0;margin:0;scrollbar-width:thin;scrollbar-color:rgba(144,147,153,.3) transparent}.file-list[data-v-c005b533]::-webkit-scrollbar{width:6px;height:6px}.file-list[data-v-c005b533]::-webkit-scrollbar-thumb{background-color:#9093994d;border-radius:4px}.file-list[data-v-c005b533]::-webkit-scrollbar-thumb:hover{background-color:#90939980}.file-list[data-v-c005b533]::-webkit-scrollbar-track{background-color:transparent}.file-list[data-v-c005b533]:empty{display:none}.empty-file-container[data-v-c005b533]{overflow-y:hidden!important;display:flex;flex-direction:column;align-items:stretch;flex:1}.empty-file-group[data-v-c005b533]{padding:16px;text-align:center;color:#909399;font-size:13px;font-style:italic;display:flex;align-items:center;justify-content:center;min-height:50px;background-color:#f8f9fa;border-radius:4px;margin:8px}.file-item[data-v-c005b533]{padding:10px 16px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid #ebeef5;cursor:pointer;transition:all .2s ease}.file-item[data-v-c005b533]:last-child{border-bottom:none}.file-item[data-v-c005b533]:hover{background-color:#ecf5ff}.file-info[data-v-c005b533]{display:flex;align-items:center;flex-grow:1;overflow:hidden;white-space:nowrap;gap:10px}.file-status-indicator[data-v-c005b533]{width:8px;height:8px;border-radius:50%;background-color:#409eff;flex-shrink:0}.file-status-indicator.added[data-v-c005b533]{background-color:#67c23a}.file-status-indicator.modified[data-v-c005b533]{background-color:#409eff}.file-status-indicator.deleted[data-v-c005b533]{background-color:#f56c6c}.file-status-indicator.untracked[data-v-c005b533]{background-color:#e6a23c}.file-path-container[data-v-c005b533]{display:flex;flex-direction:column;overflow:hidden}.file-name[data-v-c005b533]{font-weight:500;color:#303133;overflow:hidden;text-overflow:ellipsis;line-height:1.4}.file-directory[data-v-c005b533]{font-size:12px;color:#909399;max-width:200px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.file-actions[data-v-c005b533]{display:flex;gap:8px;opacity:0;transition:opacity .2s ease}.file-item:hover .file-actions[data-v-c005b533]{opacity:1}.empty-status[data-v-c005b533]{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:40px 20px;text-align:center;background-color:#f9f9f9;border-radius:8px;flex-grow:1}.empty-icon[data-v-c005b533]{width:64px;height:64px;display:flex;align-items:center;justify-content:center;background-color:#f0f2f5;border-radius:50%;margin-bottom:16px;font-size:28px;color:#909399;animation:pulse-c005b533 2s infinite ease-in-out}@keyframes pulse-c005b533{0%{transform:scale(1);opacity:.7}50%{transform:scale(1.05);opacity:1}to{transform:scale(1);opacity:.7}}.empty-text[data-v-c005b533]{font-size:18px;font-weight:500;color:#606266;margin-bottom:8px}.empty-subtext[data-v-c005b533]{font-size:14px;color:#909399;margin-bottom:20px}.status-box-wrap[data-v-c005b533]{height:100%;display:flex;flex-direction:column;gap:16px}.branch-status-info[data-v-c005b533]{margin-bottom:0;background-color:#f8f9fa;border-radius:8px;overflow:hidden;border:1px solid #ebeef5;transition:all .3s ease}.branch-status-info[data-v-c005b533]:hover{box-shadow:0 4px 12px #0000000d}.branch-sync-status[data-v-c005b533]{display:flex;align-items:center;padding:12px 16px;border-left:3px solid #e6a23c;margin-bottom:0;background-color:#fdf6ec}.sync-status-content[data-v-c005b533]{display:flex;align-items:center;flex-wrap:wrap;gap:10px;width:100%}.status-badges[data-v-c005b533]{display:flex;flex-direction:column;gap:8px;width:100%}.status-badge[data-v-c005b533]{display:flex;align-items:center;width:100%;border-radius:4px;padding:8px 12px;transition:all .3s ease}.status-badge.el-tag--warning[data-v-c005b533]{background-color:#fdf6ec;border-color:#faecd8}.status-badge.el-tag--info[data-v-c005b533]{background-color:#f4f4f5;border-color:#e9e9eb}.status-badge[data-v-c005b533]:hover{transform:translateY(-2px);box-shadow:0 2px 8px #0000000d}.badge-content[data-v-c005b533]{display:flex;align-items:center;gap:8px;font-size:13px}.diff-dialog[data-v-c005b533]{height:calc(100vh - 150px)}[data-v-c005b533] .el-dialog__body{height:calc(100vh - 320px);overflow:auto;padding:0}.diff-content[data-v-c005b533]{flex:1;overflow-y:auto;padding:16px 20px;background-color:#fafafa;height:100%}.diff-formatted[data-v-c005b533]{font-family:JetBrains Mono,Fira Code,Consolas,Courier New,monospace;font-size:14px;line-height:1.6;white-space:pre-wrap;padding-bottom:20px}.no-diff[data-v-c005b533]{display:flex;align-items:center;justify-content:center;height:100%;color:#909399;font-size:14px}.file-navigation[data-v-c005b533]{display:flex;justify-content:space-between;align-items:center;padding:12px 20px;border-top:1px solid #ebeef5;background-color:#f9f9fb}.counter-tag[data-v-c005b533]{font-family:monospace;font-size:14px;padding:6px 12px;min-width:80px;text-align:center}.nav-button[data-v-c005b533]{min-width:120px;transition:all .3s ease}.nav-button[data-v-c005b533]:hover:not(:disabled){transform:translateY(-2px);box-shadow:0 2px 8px #0000001a}.diff-formatted[data-v-c005b533]::-webkit-scrollbar,.diff-content[data-v-c005b533]::-webkit-scrollbar{width:6px;height:6px}.diff-formatted[data-v-c005b533]::-webkit-scrollbar-thumb,.diff-content[data-v-c005b533]::-webkit-scrollbar-thumb{background-color:#9093994d;border-radius:4px}.diff-formatted[data-v-c005b533]::-webkit-scrollbar-thumb:hover,.diff-content[data-v-c005b533]::-webkit-scrollbar-thumb:hover{background-color:#90939980}.diff-formatted[data-v-c005b533]::-webkit-scrollbar-track,.diff-content[data-v-c005b533]::-webkit-scrollbar-track{background-color:transparent}.diff-formatted[data-v-c005b533],.diff-content[data-v-c005b533]{scrollbar-width:thin;scrollbar-color:rgba(144,147,153,.3) transparent}.auto-update-switch[data-v-c005b533] .el-switch__core{transition:all .3s ease-in-out;box-shadow:0 2px 5px #0000001a}.auto-update-switch[data-v-c005b533] .el-switch__core:hover{box-shadow:0 2px 8px #0003}.auto-update-switch.is-checked[data-v-c005b533] .el-switch__core{box-shadow:0 2px 5px #67c23a4d}.auto-update-switch.is-checked[data-v-c005b533] .el-switch__core:hover{box-shadow:0 2px 8px #67c23a80}.el-button[data-v-c005b533]{transition:all .3s ease}.el-button[data-v-c005b533]:not(:disabled):hover{transform:translateY(-2px);box-shadow:0 2px 8px #0000001a}.card-content[data-v-c005b533] .el-loading-mask{background-color:#fffc;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);z-index:10}.card-content[data-v-c005b533] .el-loading-spinner{transform:scale(1.2)}.card-content[data-v-c005b533] .el-loading-text{font-size:16px;color:#409eff;font-weight:700;margin-top:10px}.diff-header{font-weight:700;background-color:#e6f1fc;padding:8px 12px;margin:10px 0;border-radius:6px;color:#0366d6;border-bottom:1px solid #c8e1ff}.diff-old-file,.diff-new-file{color:#586069;padding:4px 8px;font-family:monospace}.diff-hunk-header{color:#6f42c1;background-color:#f1f8ff;padding:4px 8px;margin:8px 0;border-radius:4px;font-family:monospace}.diff-added{background-color:#e6ffed;color:#22863a;padding:2px 8px;border-left:4px solid #22863a;font-family:monospace;display:block;margin:2px 0}.diff-removed{background-color:#ffeef0;color:#cb2431;padding:2px 8px;border-left:4px solid #cb2431;font-family:monospace;display:block;margin:2px 0}.diff-context{color:#444;padding:2px 8px;font-family:monospace;display:block;margin:2px 0;background-color:#fafbfc}@keyframes snakeBorder-55ad4e02{0%,to{border-top:2px solid #409EFF;border-right:2px solid transparent;border-bottom:2px solid transparent;border-left:2px solid transparent}25%{border-top:2px solid #409EFF;border-right:2px solid #67C23A;border-bottom:2px solid transparent;border-left:2px solid transparent}50%{border-top:2px solid transparent;border-right:2px solid #67C23A;border-bottom:2px solid #409EFF;border-left:2px solid transparent}75%{border-top:2px solid transparent;border-right:2px solid transparent;border-bottom:2px solid #409EFF;border-left:2px solid #67C23A}}@keyframes glowPulse-55ad4e02{0%,to{box-shadow:0 0 8px #409eff66}50%{box-shadow:0 0 12px #67c23a80}}.card[data-v-55ad4e02]{background-color:#fff;border-radius:8px;box-shadow:0 2px 10px #00000008;border:1px solid rgba(0,0,0,.03);height:100%;width:100%;display:flex;flex-direction:column;overflow:hidden;position:relative}.card-header[data-v-55ad4e02]{padding:8px 16px;border-bottom:1px solid #f0f0f0;display:flex;justify-content:space-between;align-items:center}.card-header h2[data-v-55ad4e02]{margin:0;font-size:16px;font-weight:500;color:#303133}.card-content[data-v-55ad4e02]{padding:15px;overflow-y:auto;flex:1}.layout-container[data-v-55ad4e02]{display:flex;flex-direction:column;gap:15px;height:100%}.commit-section[data-v-55ad4e02]{flex:1;min-width:0}.actions-section[data-v-55ad4e02]{width:100%;flex-shrink:0}.actions-section h3[data-v-55ad4e02]{margin-top:0;margin-bottom:10px;padding-bottom:8px;border-bottom:1px solid #dcdfe6;font-size:16px;color:#303133;font-weight:500}.operations-wrapper[data-v-55ad4e02]{display:flex;gap:10px}.action-groups[data-v-55ad4e02]{display:flex;flex-direction:column;gap:12px}.action-group[data-v-55ad4e02]{background-color:#f9f9f9;border-radius:6px;padding:8px 10px;box-shadow:0 1px 3px #0000000d;border-left:3px solid #409EFF;flex:1}.action-group[data-v-55ad4e02]:nth-child(2){border-left-color:#e6a23c}.action-group[data-v-55ad4e02]:nth-child(3){border-left-color:#909399}.group-title[data-v-55ad4e02]{font-size:13px;font-weight:700;margin-bottom:8px;color:#606266;text-align:left;display:block;position:relative;padding-left:6px;border-bottom:1px solid rgba(0,0,0,.06);padding-bottom:6px}.group-buttons[data-v-55ad4e02]{display:flex;flex-direction:row;flex-wrap:wrap;gap:8px;padding:0}.action-button[data-v-55ad4e02]{font-size:14px;font-weight:500;flex:1;min-width:100px;border-radius:4px;height:36px;padding:0 10px}.action-button[data-v-55ad4e02]:hover{transform:translateY(-1px);box-shadow:0 2px 5px #00000026}.action-button[data-v-55ad4e02]:active{transform:translateY(0)}.command-text[data-v-55ad4e02],.command-text-long[data-v-55ad4e02]{display:none}.standard-commit-form[data-v-55ad4e02]{display:flex;flex-direction:column;gap:15px;margin-bottom:15px}.standard-commit-header[data-v-55ad4e02]{display:flex;flex-direction:column;gap:10px;width:100%}.type-scope-container[data-v-55ad4e02]{display:flex;gap:10px;width:100%;margin-bottom:10px}.type-select[data-v-55ad4e02]{width:35%}.scope-wrapper[data-v-55ad4e02]{display:flex;align-items:center;gap:5px;width:65%}.description-container[data-v-55ad4e02]{display:flex;align-items:center;gap:5px;width:100%}.scope-input[data-v-55ad4e02],.description-input[data-v-55ad4e02]{flex-grow:1}.settings-button[data-v-55ad4e02]{flex-shrink:0}.preview-section[data-v-55ad4e02]{background-color:#f5f7fa;padding:10px;border-radius:4px}.preview-title[data-v-55ad4e02]{font-weight:700;margin-bottom:5px}.preview-content[data-v-55ad4e02]{white-space:pre-wrap;font-family:monospace;margin:0;padding:10px;background-color:#ebeef5;border-radius:4px}.template-container[data-v-55ad4e02]{display:flex;flex-direction:column;height:calc(85vh - 100px);overflow-y:auto;padding:5px}.template-form[data-v-55ad4e02]{margin-bottom:20px;background-color:#f8f9fa;padding:15px;border-radius:6px;border:1px solid #ebeef5}.template-form-buttons[data-v-55ad4e02]{display:flex;gap:10px;margin-top:12px;justify-content:flex-end}.template-input[data-v-55ad4e02]{flex-grow:1}.template-list[data-v-55ad4e02]{overflow-y:auto;height:100%}.template-list h3[data-v-55ad4e02]{margin-top:0;margin-bottom:15px;font-size:16px;font-weight:500;color:#303133;padding-bottom:8px;border-bottom:1px solid #ebeef5}.template-item[data-v-55ad4e02]{margin-bottom:10px;transition:all .2s ease;border:1px solid #ebeef5}.template-item[data-v-55ad4e02]:hover{background-color:#f5f7fa;transform:translateY(-2px);box-shadow:0 2px 12px #0000001a}.template-content[data-v-55ad4e02]{flex-grow:1;margin-right:10px;word-break:break-all;padding:5px 0;color:#303133;font-weight:500}.template-actions[data-v-55ad4e02]{display:flex;gap:8px;justify-content:flex-end;min-width:180px;flex-shrink:0}.options-row[data-v-55ad4e02]{display:flex;justify-content:space-between;align-items:center;margin-bottom:15px}.code-command[data-v-55ad4e02]{background-color:#2d2d2d;color:#f8f8f2;font-family:Courier New,Courier,monospace;padding:10px;border-radius:4px;overflow-x:auto;white-space:pre;font-size:14px}@media (min-width: 768px){.layout-container[data-v-55ad4e02]{flex-direction:row}.commit-section[data-v-55ad4e02]{flex:3}.actions-section[data-v-55ad4e02]{width:320px}.operations-wrapper[data-v-55ad4e02]{flex-direction:column}}.git-config-warning[data-v-55ad4e02]{width:100%}.config-command[data-v-55ad4e02]{background-color:#2d2d2d;color:#f8f8f2;font-family:Courier New,Courier,monospace;padding:10px;border-radius:4px;margin-top:10px;white-space:pre}@keyframes pushing-pulse-55ad4e02{0%{box-shadow:0 0 #67c23a66}70%{box-shadow:0 0 0 15px #67c23a00}to{box-shadow:0 0 #67c23a00}}@keyframes pushing-border-55ad4e02{0%{border-color:#67c23a}50%{border-color:#85ce61}to{border-color:#67c23a}}.card.is-pushing[data-v-55ad4e02]{animation:pushing-border-55ad4e02 1.5s infinite ease-in-out;box-shadow:0 4px 12px #0000001a;transition:all .3s ease}.push-button[data-v-55ad4e02]{background-color:#67c23a;border-color:#67c23a}.push-button[data-v-55ad4e02]:hover{background-color:#85ce61;border-color:#85ce61}.push-button.is-loading[data-v-55ad4e02],.push-button.is-loading[data-v-55ad4e02]:hover,.push-button.is-loading[data-v-55ad4e02]:focus{animation:pushing-pulse-55ad4e02 1.5s infinite;background-color:#67c23a!important;border-color:#67c23a!important}.el-button.push-button.is-loading .el-loading-spinner[data-v-55ad4e02]{color:#fff!important}@keyframes one-click-push-glow-55ad4e02{0%{box-shadow:0 0 5px #67c23a80}50%{box-shadow:0 0 20px #67c23acc}to{box-shadow:0 0 5px #67c23a80}}.action-button.one-click-push[data-v-55ad4e02]{position:relative;overflow:hidden}.action-button.one-click-push.is-loading[data-v-55ad4e02],.action-button.one-click-push.is-loading[data-v-55ad4e02]:hover{animation:one-click-push-glow-55ad4e02 1.5s infinite;background-color:#67c23a!important;border-color:#67c23a!important}@keyframes push-success-55ad4e02{0%{transform:scale(1)}50%{transform:scale(1.1)}to{transform:scale(1)}}.push-success-indicator[data-v-55ad4e02]{position:absolute;top:0;right:0;bottom:0;left:0;margin:auto;background-color:#fff;border-radius:12px;padding:20px 30px;box-shadow:0 8px 24px #00000026;display:flex;flex-direction:column;align-items:center;justify-content:center;animation:push-success-55ad4e02 .5s ease-out;z-index:9999;width:200px;height:200px}.push-success-icon[data-v-55ad4e02]{font-size:64px;color:#67c23a;margin-bottom:16px;animation:bounce-55ad4e02 .8s ease-in-out}@keyframes bounce-55ad4e02{0%,20%,50%,80%,to{transform:translateY(0)}40%{transform:translateY(-20px)}60%{transform:translateY(-10px)}}.push-success-text[data-v-55ad4e02]{font-size:20px;font-weight:700;color:#303133;text-align:center}.reset-button[data-v-55ad4e02]{background-color:#909399;border-color:#909399}.reset-button[data-v-55ad4e02]:hover{background-color:#a6a9ad;border-color:#a6a9ad}.el-button+.el-button[data-v-55ad4e02]{margin-left:0}.pushing-indicator[data-v-55ad4e02]{position:absolute;top:0;right:0;bottom:0;left:0;margin:auto;background-color:#409eff;border-radius:12px;padding:20px 30px;box-shadow:0 8px 24px #00000026;display:flex;flex-direction:column;align-items:center;justify-content:center;z-index:9999;width:200px;height:200px;color:#fff}.form-bottom-actions[data-v-55ad4e02]{display:flex;flex-direction:column;gap:10px;margin-top:15px;padding:12px;background-color:#f5f7fa;border-radius:6px;box-shadow:0 1px 3px #0000000d;border-left:3px solid #67C23A}.button-row[data-v-55ad4e02]{display:flex;justify-content:space-between;gap:10px;width:100%}.button-row .el-button[data-v-55ad4e02]{flex:1;min-width:100px}.full-width-button[data-v-55ad4e02]{width:100%;margin-top:5px;font-weight:500;height:40px}.form-bottom-actions .el-button[data-v-55ad4e02]{font-weight:500;border-radius:4px;transition:all .3s}.form-bottom-actions .el-button[data-v-55ad4e02]:hover{transform:translateY(-1px);box-shadow:0 2px 5px #00000026}.pushing-text[data-v-55ad4e02]{font-size:20px;font-weight:700;text-align:center}.pushing-spinner[data-v-55ad4e02]{margin-bottom:16px}.circular[data-v-55ad4e02]{height:64px;width:64px;animation:pushing-rotate-55ad4e02 2s linear infinite}.path[data-v-55ad4e02]{stroke:#fff;stroke-width:4;stroke-linecap:round;stroke-dasharray:90,150;stroke-dashoffset:0;animation:pushing-dash-55ad4e02 1.5s ease-in-out infinite}@keyframes pushing-rotate-55ad4e02{to{transform:rotate(360deg)}}@keyframes pushing-dash-55ad4e02{0%{stroke-dasharray:1,150;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-35}to{stroke-dasharray:90,150;stroke-dashoffset:-124}}.message-template-container[data-v-55ad4e02]{display:flex;flex-direction:column;height:calc(100vh - 278px);overflow:hidden}.templates-container[data-v-55ad4e02]{display:flex;gap:20px;margin-top:15px;flex:1;overflow:hidden}.message-templates-list[data-v-55ad4e02]{flex:3;display:flex;flex-direction:column;border-right:1px solid #ebeef5;padding-right:15px;height:calc(100vh - 432px)}.message-templates-list h3[data-v-55ad4e02]{margin-top:0;margin-bottom:15px;font-size:16px;font-weight:500;color:#303133;padding-bottom:8px;border-bottom:1px solid #ebeef5}.current-default-message[data-v-55ad4e02]{flex:2;display:flex;flex-direction:column;gap:15px;padding-left:15px}.current-default-message h3[data-v-55ad4e02]{margin-top:0;margin-bottom:15px;font-size:16px;font-weight:500;color:#303133;padding-bottom:8px;border-bottom:1px solid #ebeef5}.templates-scroll-area[data-v-55ad4e02]{overflow-y:auto;padding-right:5px;flex:1}.default-message-card[data-v-55ad4e02]{margin-bottom:15px;box-shadow:0 2px 8px #00000014;border-radius:4px;transition:all .3s ease}.default-message-card[data-v-55ad4e02]:hover{box-shadow:0 4px 12px #0000001f}.default-message-content[data-v-55ad4e02]{padding:12px 15px;background-color:#f0f9eb;border-left:3px solid #67c23a;font-weight:500;word-break:break-all;min-height:60px;display:flex;align-items:center;border-radius:0 4px 4px 0;color:#303133}.message-help-text[data-v-55ad4e02]{background-color:#f8f9fa;border-radius:4px;padding:15px;font-size:14px;color:#606266;border-left:3px solid #909399;margin-top:auto;box-shadow:0 2px 8px #0000000d}.message-help-text h4[data-v-55ad4e02]{margin-top:0;margin-bottom:10px;color:#303133;font-size:15px}.message-help-text p[data-v-55ad4e02]{margin:8px 0;line-height:1.5}.advanced-options-toggle[data-v-55ad4e02]{display:flex;align-items:center;justify-content:center;padding:8px 0;background-color:#f5f7fa;border-radius:4px;cursor:pointer;transition:all .3s ease;-webkit-user-select:none;user-select:none}.advanced-options-toggle[data-v-55ad4e02]:hover{background-color:#ebeef5;color:#409eff}.toggle-icon[data-v-55ad4e02]{margin-left:8px;transition:transform .3s ease}.toggle-icon.is-active[data-v-55ad4e02]{transform:rotate(180deg)}.advanced-fields[data-v-55ad4e02]{margin-top:10px;display:flex;flex-direction:column;gap:15px;animation:fade-in-55ad4e02 .3s ease-in-out}@keyframes fade-in-55ad4e02{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}.merge-dialog-content[data-v-55ad4e02]{padding:0 10px}.merge-intro[data-v-55ad4e02]{margin-bottom:20px;color:#606266}.merge-options[data-v-55ad4e02]{display:flex;flex-direction:column;gap:10px}.dialog-footer[data-v-55ad4e02]{display:flex;justify-content:flex-end;gap:10px}.merge-confirm-btn[data-v-55ad4e02]{margin-left:10px}.merge-button[data-v-55ad4e02]{background-color:#409eff;border-color:#409eff}.branch-group[data-v-55ad4e02]{margin-top:20px;border-top:1px solid #f0f0f0;padding-top:16px}.branch-group .group-title[data-v-55ad4e02]{color:#606266;font-weight:500;margin-bottom:12px}[data-v-55ad4e02] .el-checkbox__label{white-space:normal;line-height:1.4}.git-cmd-tooltip{font-family:Consolas,Courier New,monospace!important;font-size:13px!important;font-weight:500!important;color:#303133!important;background-color:#f5f7fa!important;border:1px solid #dcdfe6!important;border-radius:4px!important;padding:8px 12px!important;box-shadow:0 2px 12px #0000001a!important}.template-dialog .el-dialog__header,.message-template-dialog .el-dialog__header,.merge-dialog .el-dialog__header{padding:15px 20px;margin-right:0;border-bottom:1px solid #ebeef5;background-color:#f8f9fa}.template-dialog .el-dialog__title,.message-template-dialog .el-dialog__title,.merge-dialog .el-dialog__title{font-size:16px;font-weight:600;color:#303133}.template-dialog .el-dialog__body,.message-template-dialog .el-dialog__body,.merge-dialog .el-dialog__body{padding:20px}.merge-dialog .el-dialog__footer{padding:15px 20px;border-top:1px solid #f0f0f0}.template-dialog .el-dialog__headerbtn,.message-template-dialog .el-dialog__headerbtn,.merge-dialog .el-dialog__headerbtn{top:15px;right:20px}.template-dialog .el-input__inner,.message-template-dialog .el-input__inner,.merge-dialog .el-input__inner{height:40px;line-height:40px}.template-dialog .el-button,.message-template-dialog .el-button{border-radius:4px;font-weight:500}.template-dialog .el-card,.message-template-dialog .el-card{border-radius:4px;overflow:hidden}.template-dialog .el-card__body,.message-template-dialog .el-card__body{padding:12px 15px}.template-dialog .el-empty__image,.message-template-dialog .el-empty__image{width:80px;height:80px}.card[data-v-4ca4673a]{background-color:#fff;border-radius:12px;box-shadow:0 2px 12px #0000000a;height:100%;width:100%;display:flex;flex-direction:column;border:1px solid rgba(0,0,0,.03);overflow:hidden;transition:all .3s ease}.log-header[data-v-4ca4673a]{display:flex;justify-content:space-between;align-items:center;margin-bottom:0;padding:12px 16px;background-color:#fff;border-bottom:1px solid #f0f0f0;position:sticky;top:0;z-index:100;flex-shrink:0}.header-left[data-v-4ca4673a]{display:flex;align-items:center;gap:12px}.log-header h2[data-v-4ca4673a]{margin:0;font-size:16px;font-weight:500}.log-actions[data-v-4ca4673a]{display:flex;gap:12px}.action-button[data-v-4ca4673a]{transition:all .3s ease;border-radius:8px;border:1px solid transparent;box-shadow:0 2px 4px #0000001a;font-weight:500;padding:8px 16px;min-width:120px;display:flex;align-items:center;justify-content:center;gap:8px}.action-button[data-v-4ca4673a]:hover{transform:translateY(-2px);box-shadow:0 4px 8px #00000026}.filter-button[data-v-4ca4673a]{background:linear-gradient(135deg,#e6a23c,#f0c78a);color:#fff;min-width:90px}.filter-button.active-filter[data-v-4ca4673a]{background:linear-gradient(135deg,#d48806,#e6a23c)}.filter-button .filter-badge[data-v-4ca4673a] .el-badge__content{background-color:#f56c6c;color:#fff;border:2px solid white;box-shadow:0 0 0 1px #e6a23c}.view-mode-button[data-v-4ca4673a]{background:linear-gradient(135deg,#409eff,#53a8ff);color:#fff}.view-mode-button.active-view[data-v-4ca4673a]{background:linear-gradient(135deg,#1890ff,#096dd9)}.commit-display-button[data-v-4ca4673a]{background:linear-gradient(135deg,#67c23a,#85ce61);color:#fff}.commit-display-button.active-commits[data-v-4ca4673a]{background:linear-gradient(135deg,#52c41a,#389e0d)}.refresh-button[data-v-4ca4673a]{background:linear-gradient(135deg,#909399,#c0c4cc);color:#fff;min-width:unset;padding:8px;border-radius:50%;width:36px;height:36px}.refresh-button[data-v-4ca4673a]:hover{background:linear-gradient(135deg,#606266,#909399)}.refresh-button-animated[data-v-4ca4673a]{animation:spin-4ca4673a 1s linear}@keyframes spin-4ca4673a{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.content-area[data-v-4ca4673a]{padding:10px 16px;flex:1;min-height:100px;height:calc(100% - 52px);display:flex;flex-direction:column}.content-area-content[data-v-4ca4673a]{height:100%}.content-area.with-filter[data-v-4ca4673a]{height:calc(100% - 112px);padding-top:0}.content-area>div[data-v-4ca4673a]{flex:1;display:flex;flex-direction:column}.el-table[data-v-4ca4673a]{--el-table-border-color: #f0f0f0;--el-table-header-bg-color: #f8f9fa;border-radius:8px;overflow:hidden}[data-v-4ca4673a] .el-table__header-wrapper{background-color:#f8f9fa}[data-v-4ca4673a] .el-table__header th{background-color:#f8f9fa;color:#606266;font-weight:600;height:48px}[data-v-4ca4673a] .el-table__row{transition:all .2s ease}[data-v-4ca4673a] .el-table__row:hover{background-color:#ecf5ff!important}[data-v-4ca4673a] .el-table--striped .el-table__row--striped{background-color:#fafafa}[data-v-4ca4673a] .el-table__cell{padding:8px 0}.branch-container[data-v-4ca4673a]{display:flex;flex-wrap:wrap;gap:6px}.branch-tag[data-v-4ca4673a]{margin-right:0;border-radius:4px;transition:all .2s ease}.branch-tag[data-v-4ca4673a]:hover{transform:translateY(-1px);box-shadow:0 2px 4px #0000001a}.commit-count[data-v-4ca4673a]{margin-bottom:12px;font-size:14px;color:#606266;text-align:right}.graph-view[data-v-4ca4673a]{width:100%;flex:1;display:flex;flex-direction:column;overflow-y:auto;padding:0 8px}.graph-container[data-v-4ca4673a]{width:100%;flex:1;min-height:500px;border:1px solid #ebeef5;border-radius:8px;padding:16px;background-color:#fff;position:relative;box-shadow:0 2px 8px #00000008}.graph-container svg[data-v-4ca4673a]{transform-origin:top left;transition:transform .2s ease}.graph-controls[data-v-4ca4673a]{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px;background-color:#f8f9fa;padding:12px;border-radius:8px;border:1px solid #ebeef5}.zoom-controls[data-v-4ca4673a]{display:flex;gap:12px;align-items:center}.zoom-slider[data-v-4ca4673a]{width:200px}.scale-info[data-v-4ca4673a]{font-size:14px;color:#606266;background-color:#fff;padding:4px 10px;border-radius:4px;border:1px solid #ebeef5}.refresh-notification[data-v-4ca4673a]{background-color:#f0f9eb;color:#67c23a;padding:10px 15px;border-radius:8px;font-size:14px;border-left:4px solid #67c23a;animation:fadeOut-4ca4673a 2s forwards;position:fixed;top:20px;right:20px;z-index:9999;box-shadow:0 4px 12px #0000001a;max-width:300px;text-align:center}@keyframes fadeOut-4ca4673a{0%{opacity:0;transform:translateY(-20px)}20%{opacity:1;transform:translateY(0)}80%{opacity:1}to{opacity:0}}.author-name[data-v-4ca4673a]{cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:inline-block;max-width:100%;font-weight:500}.commit-hash[data-v-4ca4673a]{cursor:pointer;color:#409eff;font-family:JetBrains Mono,Fira Code,Consolas,monospace;font-weight:500;border-radius:4px;padding:2px 4px;background-color:#ecf5ff;transition:all .2s ease}.commit-hash[data-v-4ca4673a]:hover{text-decoration:none;background-color:#d9ecff;box-shadow:0 2px 4px #0000000d}.commit-detail-container[data-v-4ca4673a]{display:flex;flex-direction:column;gap:20px}.commit-info[data-v-4ca4673a]{padding:16px;background-color:#f5f7fa;border-radius:8px;font-size:14px;display:flex;flex-direction:column;gap:16px}.commit-info-header[data-v-4ca4673a]{display:flex;flex-wrap:wrap;gap:16px;align-items:center;background-color:#fff;padding:16px;border-radius:8px;border:1px solid #e4e7ed}.info-item[data-v-4ca4673a]{display:flex;align-items:center;gap:8px}.item-label[data-v-4ca4673a]{font-weight:700;color:#606266;white-space:nowrap}.item-value[data-v-4ca4673a]{color:#333;word-break:break-all}.commit-message-container[data-v-4ca4673a]{display:flex;flex-direction:column;gap:8px}.message-label[data-v-4ca4673a]{font-weight:700;color:#606266}.message-content[data-v-4ca4673a]{background-color:#fff;padding:16px;border-radius:8px;font-family:JetBrains Mono,Fira Code,Consolas,monospace;white-space:pre-wrap;line-height:1.6;border:1px solid #e4e7ed;border-left:4px solid #409eff}.commit-files-diff[data-v-4ca4673a]{margin-top:8px;display:flex;gap:20px;height:60vh}.files-list[data-v-4ca4673a]{width:25%;overflow-y:auto;background-color:#f5f7fa;border-radius:8px;padding:16px}.files-list h3[data-v-4ca4673a]{margin-top:0;padding-bottom:12px;border-bottom:1px solid #dcdfe6;font-size:16px;font-weight:500}.files-list ul[data-v-4ca4673a]{list-style:none;padding:0;margin:0}.files-list li[data-v-4ca4673a]{padding:10px 12px;cursor:pointer;border-radius:4px;margin-bottom:6px;font-family:JetBrains Mono,Fira Code,Consolas,monospace;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:13px;transition:all .2s ease;border:1px solid transparent}.files-list li[data-v-4ca4673a]:hover{background-color:#ecf5ff;border-color:#d9ecff}.files-list li.active-file[data-v-4ca4673a]{background-color:#409eff;color:#fff;box-shadow:0 2px 6px #409eff4d}.file-diff[data-v-4ca4673a]{flex:1;display:flex;flex-direction:column;background-color:#f5f7fa;border-radius:8px;padding:16px;overflow:hidden}.file-diff h3[data-v-4ca4673a]{margin-top:0;padding-bottom:12px;border-bottom:1px solid #dcdfe6;font-size:16px;font-weight:500}.diff-content[data-v-4ca4673a]{flex:1;overflow-y:auto;background-color:#fff;padding:16px;border-radius:8px;font-family:JetBrains Mono,Fira Code,Consolas,monospace;font-size:13px;line-height:1.6;border:1px solid #ebeef5}.diff-content[data-v-4ca4673a]::-webkit-scrollbar,.files-list[data-v-4ca4673a]::-webkit-scrollbar{width:6px;height:6px}.diff-content[data-v-4ca4673a]::-webkit-scrollbar-thumb,.files-list[data-v-4ca4673a]::-webkit-scrollbar-thumb{background-color:#9093994d;border-radius:4px}.diff-content[data-v-4ca4673a]::-webkit-scrollbar-thumb:hover,.files-list[data-v-4ca4673a]::-webkit-scrollbar-thumb:hover{background-color:#90939980}.diff-content[data-v-4ca4673a]::-webkit-scrollbar-track,.files-list[data-v-4ca4673a]::-webkit-scrollbar-track{background-color:transparent}.diff-content[data-v-4ca4673a],.files-list[data-v-4ca4673a]{scrollbar-width:thin;scrollbar-color:rgba(144,147,153,.3) transparent}[data-v-4ca4673a] .commit-detail-dialog{--el-dialog-margin-top: 7vh}[data-v-4ca4673a] .commit-detail-dialog .el-dialog__body{padding:16px}.filter-panel-header[data-v-4ca4673a]{background-color:#f5f7fa;padding:12px 16px;border-bottom:1px solid #e4e7ed;position:sticky;top:36px;z-index:99;transition:all .3s ease;flex-shrink:0;margin-bottom:10px;box-shadow:0 2px 8px #0000000d;border-radius:0 0 8px 8px}.filter-panel-header .filter-form[data-v-4ca4673a]{display:flex;align-items:center;gap:12px;flex-wrap:nowrap;justify-content:space-between}.filter-panel-header .filter-item[data-v-4ca4673a]{margin-right:0;flex:1;min-width:0}.filter-panel-header .filter-input[data-v-4ca4673a]{width:100%}.filter-panel-header .filter-input.date-range[data-v-4ca4673a]{width:100%;max-width:280px}.compact-label[data-v-4ca4673a]{color:#909399;font-size:12px;margin-right:6px;white-space:nowrap;font-weight:700;border-right:1px solid #dcdfe6;padding-right:8px}.filter-action-button[data-v-4ca4673a]{padding:8px 16px;border-radius:6px;transition:all .3s;min-width:70px;font-weight:500}.filter-action-button[data-v-4ca4673a]:hover{transform:translateY(-2px);box-shadow:0 2px 8px #0000001a}.filter-actions[data-v-4ca4673a]{display:flex;align-items:center;gap:10px;white-space:nowrap;flex-shrink:0}.table-view-container[data-v-4ca4673a]{display:flex;flex-direction:column;flex:1;min-height:400px}.log-table[data-v-4ca4673a]{width:100%;height:100%;min-height:300px;flex:1}.load-more-container[data-v-4ca4673a]{display:flex;flex-direction:column;align-items:center;padding:8px 0;border-top:1px dashed #ebeef5;gap:8px}.pagination-info[data-v-4ca4673a]{font-size:13px;color:#909399;margin-bottom:4px}.loading-more[data-v-4ca4673a]{display:flex;align-items:center;color:#909399;font-size:13px;gap:8px}.loading-spinner[data-v-4ca4673a]{width:16px;height:16px;border:2px solid #dcdfe6;border-top-color:#409eff;border-radius:50%;animation:spinner-4ca4673a 1s linear infinite}@keyframes spinner-4ca4673a{to{transform:rotate(360deg)}}.load-more-button[data-v-4ca4673a]{cursor:pointer;color:#409eff;font-size:13px;padding:6px 16px;border:1px solid #d9ecff;background-color:#ecf5ff;border-radius:4px;transition:all .3s;font-weight:500}.no-more-data[data-v-4ca4673a]{color:#909399;font-size:13px;font-style:italic;display:flex;flex-direction:column;align-items:center}.total-loaded[data-v-4ca4673a]{font-size:12px;margin-top:4px;color:#c0c4cc}.context-menu[data-v-4ca4673a]{position:fixed;background:#fff;border:1px solid #dcdfe6;border-radius:8px;box-shadow:0 4px 16px #0000001a;padding:6px 0;z-index:3000;min-width:200px;animation:fadeIn-4ca4673a .15s ease-out}@keyframes fadeIn-4ca4673a{0%{opacity:0;transform:translateY(5px)}to{opacity:1;transform:translateY(0)}}.context-menu-item[data-v-4ca4673a]{padding:10px 16px;cursor:pointer;font-size:14px;display:flex;align-items:center;transition:all .2s ease;color:#606266}.context-menu-item[data-v-4ca4673a]:hover{background-color:#f5f7fa;color:#409eff}.context-menu-item i[data-v-4ca4673a]{margin-right:10px;font-size:16px}.branch-graph-column[data-v-4ca4673a]{padding:0!important;overflow:visible}.branch-graph-cell[data-v-4ca4673a]{height:40px;width:100%;position:relative;padding:0;margin:0}.branch-graph-column .cell[data-v-4ca4673a]{padding:0!important;height:100%;margin:0;overflow:visible}.el-table .branch-graph-column[data-v-4ca4673a]{width:60px!important;padding:0!important}[data-v-4ca4673a] .el-table .el-table__cell{padding:0!important}[data-v-4ca4673a] .branch-graph-cell svg{display:block!important;width:100%!important;height:100%!important;overflow:visible!important;z-index:10!important}[data-v-4ca4673a] .branch-graph-cell svg line,[data-v-4ca4673a] .branch-graph-cell svg path{stroke-width:2!important}[data-v-4ca4673a] .branch-graph-cell svg circle{r:6!important;stroke-width:2!important}.branch-graph-column[data-v-4ca4673a]{min-width:60px!important;width:60px!important}.branch-graph-cell[data-v-4ca4673a]{position:relative!important;overflow:visible!important;z-index:1!important}[data-v-4ca4673a] .el-table--border .el-table__inner-wrapper tr{border:none!important}[data-v-4ca4673a] .el-table--border .el-table__inner-wrapper td{border-right:none!important;border-bottom:none!important}[data-v-4ca4673a] .el-table--border .el-table__inner-wrapper th{border-right:none!important}[data-v-4ca4673a] .el-table--border,[data-v-4ca4673a] .el-table--border .el-table__inner-wrapper{border:none!important}[data-v-4ca4673a] .el-table--border:after,[data-v-4ca4673a] .el-table--border:before,[data-v-4ca4673a] .el-table__inner-wrapper:after,[data-v-4ca4673a] .el-table__inner-wrapper:before{display:none!important}[data-v-4ca4673a] .el-table tr{background-color:transparent!important}[data-v-4ca4673a] .el-table--striped .el-table__body tr.el-table__row--striped td{background-color:#00000005!important}.el-table .el-table__cell .cell{word-break:break-all}.diff-header{font-weight:700;background-color:#e6f1fc;padding:10px 16px;margin:12px 0;border-radius:6px;color:#0366d6;border-bottom:1px solid #c8e1ff}.diff-old-file,.diff-new-file{color:#586069;padding:4px 8px;font-family:JetBrains Mono,Fira Code,Consolas,monospace}.diff-old-file{color:#cb2431}.diff-new-file{color:#22863a}.diff-hunk-header{color:#6f42c1;background-color:#f1f8ff;padding:4px 8px;margin:8px 0;border-radius:4px;font-family:JetBrains Mono,Fira Code,Consolas,monospace}.diff-added{background-color:#e6ffed;color:#22863a;padding:2px 8px;border-left:4px solid #22863a;font-family:JetBrains Mono,Fira Code,Consolas,monospace;display:block;margin:2px 0}.diff-removed{background-color:#ffeef0;color:#cb2431;padding:2px 8px;border-left:4px solid #cb2431;font-family:JetBrains Mono,Fira Code,Consolas,monospace;display:block;margin:2px 0}.diff-context{color:#444;padding:2px 8px;font-family:JetBrains Mono,Fira Code,Consolas,monospace;display:block;margin:2px 0;background-color:#fafbfc}.load-more-button:hover{background-color:#d9ecff;box-shadow:0 2px 6px #409eff26;transform:translateY(-1px)}body{font-family:Arial,sans-serif;margin:0;padding:0;background-color:#f5f5f5;overflow:hidden;height:100vh}.main-container{position:fixed;top:60px;bottom:60px;left:0;right:0;padding:10px;overflow:hidden}.grid-layout{display:grid;grid-template-columns:2fr 8px 3fr;grid-template-rows:1fr 8px 1fr;grid-template-areas:"git-status v-resizer commit-form" "h-resizer h-resizer h-resizer" "log-list log-list log-list";gap:10px;height:100%}.git-status-panel{grid-area:git-status;overflow:hidden;max-height:100%;padding:0}.commit-form-panel{grid-area:commit-form;overflow:hidden;max-height:100%;padding:0}.log-list-panel{grid-area:log-list;overflow:hidden;max-height:100%;padding:0}.card{background-color:#fff;border-radius:8px;box-shadow:0 4px 12px #0000000d;border:1px solid rgba(0,0,0,.03);height:100%;overflow:hidden;display:flex;flex-direction:column}.main-header{background-color:#24292e;color:#fff;padding:0 20px;display:flex;justify-content:space-between;align-items:center;position:fixed;top:0;left:0;right:0;z-index:1000;box-shadow:0 2px 10px #0003;height:60px;box-sizing:border-box}.header-left{display:flex;align-items:center;gap:10px;min-width:220px;flex:1}.logo{height:32px;width:auto}h1{margin:0;font-size:24px}.header-info{display:flex;align-items:center;gap:10px;justify-content:flex-end}#user-info{display:flex;align-items:center;background-color:#282c34b3;padding:6px 10px;border-radius:4px;border:1px solid rgba(255,255,255,.15);margin-right:10px;flex-shrink:0}.directory-selector{display:flex;flex-direction:row;justify-content:space-between;align-items:center;background-color:#282c34b3;border-radius:4px;padding:6px 10px;border:1px solid rgba(255,255,255,.15);box-shadow:0 2px 8px #00000026;flex-shrink:0}.directory-display{display:flex;align-items:center;gap:8px;flex:1;min-width:0}.directory-path{font-family:monospace;color:#fff;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:14px;font-weight:500;background-color:#0003;padding:4px 8px;border-radius:3px;border-left:3px solid #409EFF;flex:1;min-width:0;max-width:500px}.branch-label,.user-label,.user-name{font-weight:700;margin-right:5px}.user-email{color:#e0e0e0}.branch-name{font-family:monospace}.status-box{background-color:#f6f8fa;border:1px solid #e1e4e8;border-radius:3px;padding:15px;white-space:pre-wrap;font-family:monospace;overflow-y:auto}.tips{margin-top:20px;padding:15px;background-color:#f5f7fa;border-radius:5px;border-left:4px solid #409eff}.tips h3{margin-top:0;font-size:16px;margin-bottom:10px}.code-block{background-color:#2d2d2d;color:#f8f8f2;font-family:monospace;padding:10px 15px;border-radius:4px;margin-bottom:10px}.loading-container{display:flex;justify-content:center;align-items:center;height:100%}.loading-card{width:300px;text-align:center;padding:30px}.loading-spinner{font-size:48px;margin-bottom:20px;color:#409eff}.loading-text{font-size:18px;color:#606266}.user-settings-btn{margin-left:10px}.user-warning{color:#e6a23c;font-weight:700}.main-footer{background-color:#24292e;color:#fff;padding:10px 20px;display:flex;justify-content:space-between;align-items:center;position:fixed;bottom:0;left:0;right:0;z-index:100;box-shadow:0 -2px 10px #0000001a;height:60px;box-sizing:border-box}@media (max-width: 768px){.grid-layout{grid-template-columns:1fr;grid-template-rows:auto auto auto auto auto;grid-template-areas:"git-status" "v-resizer" "commit-form" "h-resizer" "log-list";gap:10px}.vertical-resizer{height:10px;cursor:row-resize}.vertical-resizer:after{width:30px;height:4px}.git-status-panel,.commit-form-panel,.log-list-panel{padding:0;max-height:none}.git-status-panel,.commit-form-panel{max-height:30vh}.log-list-panel{max-height:40vh}}.logo[data-v-98ed32bc]{will-change:filter;transition:filter .3s}.logo[data-v-98ed32bc]:hover{filter:drop-shadow(0 0 2em #42b883aa)}.branch-info[data-v-98ed32bc]{display:flex;align-items:center;gap:10px}.branch-wrapper[data-v-98ed32bc]{display:flex;align-items:center;background-color:#ffffff26;border-radius:4px;padding:8px 12px;box-shadow:0 2px 4px #0003;transition:all .3s}.branch-wrapper[data-v-98ed32bc]:hover{background-color:#fff3}.branch-label[data-v-98ed32bc]{font-weight:700;margin-right:10px;color:#fff}.branch-select[data-v-98ed32bc]{width:200px;margin-right:10px}.create-branch-btn[data-v-98ed32bc]{background-color:#2ea44f;border-color:#2ea44f;transition:all .3s;box-shadow:0 2px 4px #0003}.create-branch-btn[data-v-98ed32bc]:hover{background-color:#3bbc63;border-color:#3bbc63;transform:translateY(-2px);box-shadow:0 4px 8px #0003}.footer-right[data-v-98ed32bc]{display:flex;align-items:center;gap:10px;color:#ffffffe6;font-size:13px;background-color:#ffffff1a;padding:8px 12px;border-radius:4px;box-shadow:0 2px 4px #0003}.repo-url-label[data-v-98ed32bc]{font-weight:700;margin-right:8px;color:#fff}.repo-url[data-v-98ed32bc]{color:#e6f7ff;font-family:monospace;max-width:300px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.copy-url-btn[data-v-98ed32bc]{transition:all .3s;background-color:#1890ff;border-color:#1890ff;box-shadow:0 2px 4px #0003}.copy-url-btn[data-v-98ed32bc]:hover{background-color:#40a9ff;border-color:#40a9ff;transform:translateY(-2px);box-shadow:0 4px 8px #0003}.vertical-resizer[data-v-98ed32bc]{grid-area:v-resizer;background-color:#e8e8e8;cursor:col-resize;transition:background-color .2s,box-shadow .2s;position:relative;z-index:10;border-radius:8px;box-shadow:0 0 3px #0000001a}.vertical-resizer[data-v-98ed32bc]:after{content:"";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:4px;height:50px;background-color:#a0a0a0;border-radius:4px;transition:background-color .2s,width .2s,box-shadow .2s}.vertical-resizer[data-v-98ed32bc]:hover,.vertical-resizer.active[data-v-98ed32bc]{background-color:#d0d0d0;box-shadow:0 0 5px #0003}.vertical-resizer[data-v-98ed32bc]:hover:after,.vertical-resizer.active[data-v-98ed32bc]:after{background-color:#409eff;width:6px;box-shadow:0 0 8px #409eff99}.horizontal-resizer[data-v-98ed32bc]{grid-area:h-resizer;background-color:#e8e8e8;cursor:row-resize;transition:background-color .2s,box-shadow .2s;position:relative;z-index:10;border-radius:8px;box-shadow:0 0 3px #0000001a}.horizontal-resizer[data-v-98ed32bc]:after{content:"";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:50px;height:4px;background-color:#a0a0a0;border-radius:4px;transition:background-color .2s,height .2s,box-shadow .2s}.horizontal-resizer[data-v-98ed32bc]:hover,.horizontal-resizer.active[data-v-98ed32bc]{background-color:#d0d0d0;box-shadow:0 0 5px #0003}.horizontal-resizer[data-v-98ed32bc]:hover:after,.horizontal-resizer.active[data-v-98ed32bc]:after{background-color:#409eff;height:6px;box-shadow:0 0 8px #409eff99}.directory-selector[data-v-98ed32bc]{display:flex;flex-direction:row;justify-content:space-between;align-items:center;background-color:#282c34b3;border-radius:4px;padding:8px 12px;margin-bottom:8px;border:1px solid rgba(255,255,255,.2);box-shadow:0 2px 8px #0003}.directory-display[data-v-98ed32bc]{display:flex;align-items:center;gap:8px;flex:1;min-width:0}.directory-path[data-v-98ed32bc]{font-family:monospace;color:#fff;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:14px;font-weight:500;background-color:#0003;padding:4px 8px;border-radius:3px;border-left:3px solid #409EFF;flex:1;min-width:0;max-width:350px}.directory-actions[data-v-98ed32bc]{display:flex;gap:4px;margin-left:8px}.dir-button[data-v-98ed32bc]{padding:6px;height:28px;width:28px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#409eff,#53a8ff);color:#fff;border:none;box-shadow:0 2px 4px #0003;transition:all .3s}.dir-button[data-v-98ed32bc]:hover{transform:translateY(-1px);box-shadow:0 3px 6px #0000004d;background:linear-gradient(135deg,#53a8ff,#66b1ff)}.dir-button.el-button--info[data-v-98ed32bc]{background:linear-gradient(135deg,#909399,#a6a9ad)}.dir-button.el-button--info[data-v-98ed32bc]:hover{background:linear-gradient(135deg,#a6a9ad,#c0c4cc)}.directory-icon[data-v-98ed32bc]{display:flex;justify-content:center;align-items:center;width:24px;height:24px;border-radius:3px;background-color:#409eff1a;color:#409eff;margin-right:2px}.directory-input-group[data-v-98ed32bc]{display:flex;align-items:center;gap:8px;width:100%}.recent-directories[data-v-98ed32bc]{display:flex;flex-wrap:wrap;gap:4px}.recent-dir-tag[data-v-98ed32bc]{cursor:pointer;background-color:#e6f7ff;border:1px solid #91d5ff;padding:4px 8px;border-radius:4px}.directory-browser[data-v-98ed32bc]{width:100%;height:400px;overflow:auto}.current-path[data-v-98ed32bc]{padding:10px;background-color:#f5f7fa;border-radius:4px;margin-bottom:10px;border:1px solid #e4e7ed;display:flex;align-items:center;width:100%;box-sizing:border-box}.path-label[data-v-98ed32bc]{font-weight:700;margin-right:5px;white-space:nowrap;flex-shrink:0}.path-value[data-v-98ed32bc]{font-family:monospace;word-break:break-all;flex:1;min-width:0;background-color:#fff;padding:5px 8px;border-radius:3px;border:1px solid #dcdfe6;box-shadow:inset 0 1px 2px #0000000d;width:100%}.directory-list[data-v-98ed32bc]{list-style:none!important;padding:0;margin:0;border:1px solid #e4e7ed;border-radius:4px;max-height:300px;overflow-y:auto;background-color:#fff;display:flex;flex-direction:column;width:100%;box-sizing:border-box}.directory-item[data-v-98ed32bc]{padding:10px 12px;border-bottom:1px solid #ebeef5;cursor:pointer;display:flex;align-items:center;transition:all .2s ease;position:relative;width:100%;box-sizing:border-box;list-style:none!important}.directory-item[data-v-98ed32bc]:hover{background-color:#ecf5ff}.directory-item[data-v-98ed32bc]:last-child{border-bottom:none}.parent-dir[data-v-98ed32bc]{background-color:#f5f7fa;font-weight:500}.dir-icon[data-v-98ed32bc]{margin-right:12px;display:flex;align-items:center;justify-content:center;width:24px;height:24px;flex-shrink:0}.dir-name[data-v-98ed32bc]{display:flex;align-items:center;font-size:14px;line-height:1.4}.folder-icon[data-v-98ed32bc]{filter:drop-shadow(0 1px 2px rgba(0,0,0,.1));transition:all .2s ease}.directory-item:hover .folder-icon[data-v-98ed32bc]{transform:scale(1.1)}[data-v-98ed32bc] .directory-browser-dialog{border-radius:8px;overflow:hidden}[data-v-98ed32bc] .directory-browser-dialog .el-message-box__header{background-color:#f5f7fa;padding:15px 20px;border-bottom:1px solid #e4e7ed;position:relative}[data-v-98ed32bc] .directory-browser-dialog .el-message-box__title{color:#409eff;font-weight:500;font-size:18px}[data-v-98ed32bc] .directory-browser-dialog .el-message-box__headerbtn{position:absolute;top:15px;right:15px;width:24px;height:24px;border-radius:50%;background-color:#0000000d;transition:all .3s;display:flex;align-items:center;justify-content:center}[data-v-98ed32bc] .directory-browser-dialog .el-message-box__headerbtn:hover{background-color:#0000001a;transform:rotate(90deg)}[data-v-98ed32bc] .directory-browser-dialog .el-message-box__headerbtn .el-message-box__close{color:#606266;font-weight:700;font-size:16px}[data-v-98ed32bc] .directory-browser-dialog .el-message-box__headerbtn:hover .el-message-box__close{color:#409eff}[data-v-98ed32bc] .directory-browser-dialog .el-message-box__content{padding:20px}.el-message-box__message{width:100%}.directory-browser-dialog{border-radius:8px;overflow:hidden}.directory-browser-dialog .el-message-box__header{background-color:#f5f7fa;padding:15px 20px;border-bottom:1px solid #e4e7ed;position:relative}.directory-browser-dialog .el-message-box__title{color:#409eff;font-weight:500;font-size:18px}.directory-browser-dialog .el-message-box__headerbtn{position:absolute;top:15px;right:15px;width:24px;height:24px;border-radius:50%;background-color:#0000000d;transition:all .3s;display:flex;align-items:center;justify-content:center}.directory-browser-dialog .el-message-box__headerbtn:hover{background-color:#0000001a;transform:rotate(90deg)}.directory-browser-dialog .el-message-box__headerbtn .el-message-box__close{color:#606266;font-weight:700;font-size:16px}.directory-browser-dialog .el-message-box__headerbtn:hover .el-message-box__close{color:#409eff}.directory-browser-dialog .el-message-box__content{padding:20px}.directory-browser-dialog .el-message-box__btns{padding:10px 20px 15px;border-top:1px solid #e4e7ed}.directory-browser{width:100%;height:400px;overflow:auto}.current-path{padding:10px;background-color:#f5f7fa;border-radius:4px;margin-bottom:10px;border:1px solid #e4e7ed;display:flex;align-items:center;width:100%;box-sizing:border-box}.path-label{font-weight:700;margin-right:5px;white-space:nowrap;flex-shrink:0}.path-value{font-family:monospace;word-break:break-all;flex:1;min-width:0;background-color:#fff;padding:5px 8px;border-radius:3px;border:1px solid #dcdfe6;box-shadow:inset 0 1px 2px #0000000d;width:100%}.directory-list{list-style:none!important;padding:0;margin:0;border:1px solid #e4e7ed;border-radius:4px;max-height:300px;overflow-y:auto;background-color:#fff;display:flex;flex-direction:column;width:100%;box-sizing:border-box}.directory-item{padding:10px 12px;border-bottom:1px solid #ebeef5;cursor:pointer;display:flex;align-items:center;transition:all .2s ease;position:relative;width:100%;box-sizing:border-box;list-style:none!important}.directory-item:hover{background-color:#ecf5ff}.directory-item:last-child{border-bottom:none}.parent-dir{background-color:#f5f7fa;font-weight:500}.dir-icon{margin-right:12px;display:flex;align-items:center;justify-content:center;width:24px;height:24px;flex-shrink:0}.dir-name{display:flex;align-items:center;font-size:14px;line-height:1.4}.folder-icon{filter:drop-shadow(0 1px 2px rgba(0,0,0,.1));transition:all .2s ease}.directory-item:hover .folder-icon{transform:scale(1.1)}*{margin:0;padding:0}div{box-sizing:border-box}
@@ -0,0 +1,22 @@
1
+ import{d as qt,r as c,o as $t,a as ps,E as o,l as vs,b as Lt,c as Ee,w as Ke,e as b,f as m,F as Te,g as t,h as s,i as ut,j as Ot,u as l,k as a,m as Yt,n as It,p as Zt,q as Ue,s as Kt,t as Qt,v as ms,x as es,y as q,z as se,A as At,B as w,C as Mt,D as gs,G as E,H as ts,I as Ge,J as ss,K as Rt,L as hs,M as Ht,N as ht,O as Xe,P as Ft,Q as Qe,T as Xt,R as as,S as Nt,U as wt,V as _t,W as Gt,X as Ut,Y as Vt,Z as Bt,_ as ls,$ as Tt,a0 as ys,a1 as _s,a2 as os,a3 as ns,a4 as ws,a5 as is,a6 as rs,a7 as bs,a8 as $s,a9 as Cs,aa as We,ab as ks,ac as Ss,ad as Ts,ae as Wt,af as xs,ag as Vs,ah as Bs,ai as Ls,aj as As,ak as Ms,al as Rs,am as Es,an as ct,ao as zs,ap as Ds,aq as Jt,ar as Gs,as as De,at as Us,au as js}from"./vendor-CzPWr9Sn.js";(function(){const p=document.createElement("link").relList;if(p&&p.supports&&p.supports("modulepreload"))return;for(const g of document.querySelectorAll('link[rel="modulepreload"]'))v(g);new MutationObserver(g=>{for(const O of g)if(O.type==="childList")for(const A of O.addedNodes)A.tagName==="LINK"&&A.rel==="modulepreload"&&v(A)}).observe(document,{childList:!0,subtree:!0});function V(g){const O={};return g.integrity&&(O.integrity=g.integrity),g.referrerPolicy&&(O.referrerPolicy=g.referrerPolicy),g.crossOrigin==="use-credentials"?O.credentials="include":g.crossOrigin==="anonymous"?O.credentials="omit":O.credentials="same-origin",O}function v(g){if(g.ep)return;g.ep=!0;const O=V(g);fetch(g.href,O)}})();const jt=300,bt=qt("git",()=>{const Ce=c(""),p=c([]),V=c(""),v=c(""),g=c(!1),O=c(!1),A=c(!1),P=c(0),H=c(""),le=c(!1),G=c(!1),Q=c(!1),M=c(!1),T=c(!1),Y=c(0),X=c(0),K=c(!1),F=c(""),ye=c(0),ie=c(0);let D=null;const te=c(!0),U=c([]),fe=c({staged:[],unstaged:[],untracked:[]}),ee=c(""),x=c([]),h=c(!1),W=c(!1),z=c(!1),R=c(!1),oe=c(!1);function xe(){Ce.value="",p.value=[],V.value="",v.value="",g.value=!1,O.value=!1,A.value=!1,P.value=0,Y.value=0,X.value=0,K.value=!1,F.value="",ye.value=0,ie.value=0,G.value=!1,Q.value=!1,M.value=!1,T.value=!1,H.value="",le.value=!1,U.value=[],fe.value={staged:[],unstaged:[],untracked:[]},ee.value="",x.value=[],h.value=!1,W.value=!1,z.value=!1,R.value=!1,oe.value=!1}async function Se(){if(A.value)try{console.log("获取分支状态...");const f=await(await fetch("/api/branch-status")).json();f&&(Y.value=f.ahead||0,X.value=f.behind||0,K.value=f.hasUpstream||!1,F.value=f.upstreamBranch||"",ye.value=Date.now(),console.log(`分支状态更新:领先 ${Y.value} 个提交,落后 ${X.value} 个提交,上游分支:${K.value?F.value:"无"}`))}catch(r){console.error("获取分支状态失败:",r),Y.value=0,X.value=0,K.value=!1,F.value=""}}async function Ve(){const r=Date.now();if(r-P.value<1e3)return console.log("使用缓存的Git仓库状态:",A.value?"是":"不是"),A.value;try{const N=await(await fetch("/api/current_directory")).json();return A.value=N.isGitRepo===!0,P.value=r,console.log(`当前目录${A.value?"是":"不是"}Git仓库`),A.value}catch(f){return console.error("检查Git仓库状态失败:",f),A.value=!1,P.value=r,!1}}async function B(){try{const f=await(await fetch("/api/branch")).json();f.branch&&(Ce.value=f.branch)}catch(r){console.error("获取分支信息失败:",r)}}async function de(){if(A.value)try{console.log("获取所有分支...");const f=await(await fetch("/api/branches")).json();f.branches&&Array.isArray(f.branches)&&(p.value=f.branches,ie.value=Date.now(),console.log(`获取到${f.branches.length}个分支`))}catch(r){console.error("获取所有分支信息失败:",r)}}async function ce(r){console.log("切换到分支:",r);try{g.value=!0;const N=await(await fetch("/api/checkout",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({branch:r})})).json();return N.success?(o({message:`已切换到分支: ${r}`,type:"success"}),await B(),await Se(),!0):(o({message:`切换分支失败: ${N.error}`,type:"error"}),!1)}catch(f){return o({message:`切换分支失败: ${f.message}`,type:"error"}),!1}finally{g.value=!1}}async function ae(){try{const f=await(await fetch("/api/user-info")).json();f.name&&f.email&&(V.value=f.name,v.value=f.email)}catch(r){console.error("获取用户信息失败:",r)}}async function je(r,f){if(!r.trim())return o({message:"分支名称不能为空",type:"warning"}),!1;try{O.value=!0;const ue=await(await fetch("/api/create-branch",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({newBranchName:r,baseBranch:f||Ce.value})})).json();return ue.success?(o({message:`已创建并切换到分支: ${r}`,type:"success"}),await B(),await Se(),await de(),!0):(o({message:`创建分支失败: ${ue.error}`,type:"error"}),!1)}catch(N){return o({message:`创建分支失败: ${N.message}`,type:"error"}),!1}finally{O.value=!1}}async function Pe(){try{const f=await(await fetch("/api/clear-user-config",{method:"POST"})).json();return f.success?(V.value="",v.value="",o({message:"已清除Git用户配置",type:"success"}),!0):(o({message:`清除配置失败: ${f.error}`,type:"error"}),!1)}catch(r){return o({message:`清除配置失败: ${r.message}`,type:"error"}),!1}}async function Oe(r,f){try{const ue=await(await fetch("/api/restore-user-config",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:r,email:f})})).json();return ue.success?(V.value=r,v.value=f,o({message:"已恢复Git用户配置",type:"success"}),!0):(o({message:`恢复配置失败: ${ue.error}`,type:"error"}),!1)}catch(N){return o({message:`恢复配置失败: ${N.message}`,type:"error"}),!1}}async function Fe(){if(!A.value)return o({message:"当前目录不是Git仓库",type:"warning"}),!1;try{Q.value=!0;const f=await(await fetch("/api/pull",{method:"POST"})).json();return f.success?(o({message:"拉取成功",type:"success"}),await Se(),!0):(f.needsMerge?o({message:`需要合并更改: ${f.pullOutput||"存在冲突需要手动解决"}`,type:"warning",duration:5e3}):o({message:`拉取失败: ${f.error}`,type:"error"}),!1)}catch(r){return o({message:`拉取失败: ${r.message}`,type:"error"}),!1}finally{Q.value=!1}}async function lt(){if(!A.value)return o({message:"当前目录不是Git仓库",type:"warning"}),!1;try{M.value=!0;const f=await(await fetch("/api/fetch-all",{method:"POST"})).json();return f.success?(o({message:"获取所有远程分支信息成功",type:"success"}),await Se(),!0):(o({message:`获取远程分支信息失败: ${f.error}`,type:"error"}),!1)}catch(r){return o({message:`获取远程分支信息失败: ${r.message}`,type:"error"}),!1}finally{M.value=!1}}function Je(){D&&D.disconnect();try{const r="http://localhost:3000";if(console.log("尝试连接Socket.IO服务器:",r),D=vs(r,{reconnectionDelayMax:1e4,reconnection:!0,reconnectionAttempts:10,reconnectionDelay:1e3,timeout:2e4,autoConnect:!0,forceNew:!0,transports:["websocket","polling"]}),!D){console.error("Socket.IO初始化失败: socket为null");return}console.log("Socket.IO初始化成功,socket ID:",D.id||"未连接"),D.on("connect",()=>{console.log("成功连接到Socket.IO服务器"),te.value&&D&&D.emit("start_monitoring")}),D.on("disconnect",f=>{console.log("与Socket.IO服务器断开连接:",f)}),D.on("git_status_update",f=>{te.value&&(console.log("收到Git状态更新通知:",new Date().toLocaleTimeString()),f.status&&(ee.value=f.status),f.porcelain!==void 0&&qe(f.porcelain))}),D.on("monitoring_status",f=>{console.log("文件监控状态:",f.active?"已启动":"已停止")}),D.on("connect_error",f=>{console.error("Socket连接错误:",f.message)}),D.on("connect_timeout",()=>{console.error("Socket连接超时")}),D.on("reconnect",f=>{console.log(`Socket重连成功,尝试次数: ${f}`),te.value&&(console.log("重连后重新发送start_monitoring请求"),D==null||D.emit("start_monitoring"))}),D.on("reconnect_attempt",f=>{console.log(`Socket尝试重连,第 ${f} 次尝试`)}),D.on("reconnect_error",f=>{console.error("Socket重连错误:",f.message)}),D.on("reconnect_failed",()=>{console.error("Socket重连失败,已达到最大重试次数")}),D&&!D.connected&&(console.log("Socket未连接,尝试手动连接..."),D.connect())}catch(r){console.error("Socket.IO连接初始化失败:",r)}}function et(){if(console.log("toggleAutoUpdate调用,当前值:",te.value),!D){console.error("无法切换自动更新状态: socket连接不存在"),o.error("无法连接到服务器,自动更新可能不会生效"),console.log("尝试重新建立socket连接..."),Je(),localStorage.setItem("zen-gitsync-auto-update",te.value.toString());return}try{te.value?(console.log("发送start_monitoring命令..."),D.emit("start_monitoring"),o.success("自动更新已启用")):(console.log("发送stop_monitoring命令..."),D.emit("stop_monitoring"),o.info("自动更新已禁用")),localStorage.setItem("zen-gitsync-auto-update",te.value.toString()),console.log("已保存自动更新设置到本地存储:",te.value)}catch(r){console.error("切换自动更新状态时出错:",r),o.error(`切换自动更新失败: ${r.message}`)}}function qe(r){if(r===void 0||r===""){x.value=[];return}const f=r.split(`
2
+ `),N=[];for(const ue of f){const Ie=ue.match(/^([ MADRCU\?]{2})\s+(.+)$/);if(Ie){let Me="";const Be=Ie[1],Re=Be.charAt(0),Ze=Be.charAt(1);Re==="A"||Re==="M"||Re==="D"||Re==="R"?Me="added":Re===" "&&Ze==="M"?Me="modified":Re===" "&&Ze==="D"?Me="deleted":Be==="??"?Me="untracked":Me="other",N.push({path:Ie[2],type:Me})}}x.value=N}async function ze(r=!0){if(!A.value){console.log("当前目录不是Git仓库,跳过加载提交历史");return}try{h.value=!0,console.log("开始加载提交历史...");const f=new Date().getTime(),ue=await(await fetch(`/api/log?page=1&_t=${f}`)).json();ue&&ue.data&&Array.isArray(ue.data)?(U.value=[...ue.data],console.log(`提交历史加载完成,共 ${U.value.length} 条记录`)):(console.warn("API返回的提交历史格式不正确:",ue),U.value=[]),r&&o({message:"提交历史已更新",type:"success"})}catch(f){console.error("获取提交历史失败:",f),r&&o({message:`获取提交历史失败: ${f.message}`,type:"error"})}finally{h.value=!1}}async function pe(){if(!A.value){console.log("当前目录不是Git仓库,跳过加载Git状态");return}try{W.value=!0;const f=await(await fetch("/api/status")).json();f.status&&(ee.value=f.status,fe.value={staged:f.status.staged||[],unstaged:f.status.unstaged||[],untracked:f.status.untracked||[]}),await Ne()}catch(r){console.error("获取Git状态失败:",r),o({message:`获取Git状态失败: ${r.message}`,type:"error"})}finally{W.value=!1}}async function Ne(){if(console.log("开始获取Git状态(porcelain格式)..."),!A.value){console.log("当前目录不是Git仓库,跳过加载Git状态");return}try{const f=await(await fetch("/api/status_porcelain")).json();f.status!==void 0?qe(f.status):x.value=[]}catch(r){console.error("获取Git状态(porcelain)失败:",r),o({message:`获取Git状态(porcelain)失败: ${r.message}`,type:"error"}),x.value=[]}}async function y(){if(!A.value)return o.warning("当前目录不是Git仓库"),!1;try{z.value=!0;const f=await(await fetch("/api/add",{method:"POST"})).json();return f.success?(o({message:"文件已添加到暂存区",type:"success"}),pe(),!0):(o({message:`添加文件失败: ${f.error}`,type:"error"}),!1)}catch(r){return o({message:`添加文件失败: ${r.message}`,type:"error"}),!1}finally{z.value=!1}}async function n(r){if(!A.value)return o.warning("当前目录不是Git仓库"),!1;try{z.value=!0;const N=await(await fetch("/api/add-file",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({filePath:r})})).json();return N.success?(o({message:"文件已暂存",type:"success"}),pe(),!0):(o({message:`暂存文件失败: ${N.error}`,type:"error"}),!1)}catch(f){return o({message:`暂存文件失败: ${f.message}`,type:"error"}),!1}finally{z.value=!1}}async function J(r){if(!A.value)return o.warning("当前目录不是Git仓库"),!1;try{oe.value=!0;const N=await(await fetch("/api/unstage-file",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({filePath:r})})).json();return N.success?(o({message:"已取消暂存文件",type:"success"}),pe(),!0):(o({message:`取消暂存失败: ${N.error}`,type:"error"}),!1)}catch(f){return o({message:`取消暂存失败: ${f.message}`,type:"error"}),!1}finally{oe.value=!1}}function j(r){return new Promise(f=>setTimeout(f,r))}async function ve(r,f=!1){if(!A.value)return o.warning("当前目录不是Git仓库"),!1;try{R.value=!0;const ue=await(await fetch("/api/commit",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({message:r,hasNewlines:r.includes(`
3
+ `),noVerify:f})})).json();return ue.success?(o({message:"提交成功",type:"success"}),pe(),ze(),Se(),!0):(o({message:`提交失败: ${ue.error}`,type:"error"}),!1)}catch(N){return o({message:`提交失败: ${N.message}`,type:"error"}),!1}finally{R.value=!1}}async function Le(){if(!A.value)return o.warning("当前目录不是Git仓库"),!1;try{G.value=!0;const f=await(await fetch("/api/push",{method:"POST"})).json();return f.success?(o({message:"推送成功",type:"success"}),pe(),ze(),Se(),!0):(o({message:`推送失败: ${f.error}`,type:"error"}),!1)}catch(r){return o({message:`推送失败: ${r.message}`,type:"error"}),!1}finally{G.value=!1}}async function ge(r,f={}){if(!A.value)return o({message:"当前目录不是Git仓库",type:"warning"}),!1;if(!r)return o({message:"请选择要合并的分支",type:"warning"}),!1;if(r===Ce.value)return o({message:"不能合并当前分支到自身",type:"warning"}),!1;try{T.value=!0;const N=await fetch("/api/merge",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({branch:r,...f})}),ue=await N.json();return N.status===409?(o({message:"合并分支时发生冲突,请手动解决",type:"warning",duration:5e3}),!1):ue.success?(o({message:`成功合并分支 ${r} 到 ${Ce.value}`,type:"success"}),await pe(),await Se(),!0):(o({message:`合并分支失败: ${ue.error}`,type:"error"}),!1)}catch(N){return o({message:`合并分支失败: ${N.message}`,type:"error"}),!1}finally{T.value=!1}}async function me(r,f=!1){return await y()?(await j(jt),await ve(r,f)):!1}async function Ae(r,f=!1){try{return!await y()||(await j(jt),!await ve(r,f))?!1:(await j(jt),await Le())}catch(N){try{(await(await fetch("/api/remove-lock",{method:"POST"})).json()).success&&o({message:"已清理锁定文件,请重试操作",type:"warning"})}catch(ue){console.error("清理锁定文件失败:",ue)}return o({message:`操作失败: ${N.message}`,type:"error"}),pe(),ze(),Se(),!1}}async function ke(){if(!A.value)return o.warning("当前目录不是Git仓库"),!1;try{oe.value=!0;const f=await(await fetch("/api/reset-head",{method:"POST"})).json();return f.success?(o({message:"已重置暂存区",type:"success"}),pe(),!0):(o({message:`重置暂存区失败: ${f.error}`,type:"error"}),!1)}catch(r){return o({message:`重置暂存区失败: ${r.message}`,type:"error"}),!1}finally{oe.value=!1}}async function be(r){if(!A.value)return o.warning("当前目录不是Git仓库"),!1;try{oe.value=!0;const N=await(await fetch("/api/reset-to-remote",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({branch:r})})).json();return N.success?(o({message:`已重置分支 ${r} 到远程状态`,type:"success"}),pe(),ze(),!0):(o({message:`重置分支失败: ${N.error}`,type:"error"}),!1)}catch(f){return o({message:`重置分支失败: ${f.message}`,type:"error"}),!1}finally{oe.value=!1}}async function ot(){if(A.value)try{le.value=!0,console.log("获取远程仓库地址...");const f=await(await fetch("/api/remote-url")).json();f.success?(H.value=f.url||"",console.log(`获取到远程仓库地址: ${H.value}`)):(console.warn("获取远程仓库地址失败:",f.error),H.value="")}catch(r){console.error("获取远程仓库地址失败:",r),H.value=""}finally{le.value=!1}}async function Ye(){if(!H.value)return o({message:"没有可复制的远程仓库地址",type:"warning"}),!1;try{return await navigator.clipboard.writeText(H.value),o({message:"已复制远程仓库地址",type:"success"}),!0}catch(r){return console.error("复制远程仓库地址失败:",r),o({message:`复制失败: ${r.message}`,type:"error"}),!1}}return $t(()=>{const r=localStorage.getItem("zen-gitsync-auto-update");r!==null&&(te.value=r==="true"),Je()}),ps(()=>{D&&(D.disconnect(),D=null)}),{currentBranch:Ce,allBranches:p,userName:V,userEmail:v,isChangingBranch:g,isCreatingBranch:O,isGitRepo:A,lastCheckedTime:P,branchAhead:Y,branchBehind:X,hasUpstream:K,upstreamBranch:F,lastBranchStatusTime:ye,lastBranchesTime:ie,remoteUrl:H,isLoadingRemoteUrl:le,log:U,status:fe,statusText:ee,fileList:x,isLoadingLog:h,isLoadingStatus:W,isAddingFiles:z,isCommiting:R,isResetting:oe,autoUpdateEnabled:te,isPushing:G,isGitPulling:Q,isGitFetching:M,isGitMerging:T,$reset:xe,checkGitRepo:Ve,getCurrentBranch:B,getAllBranches:de,changeBranch:ce,getUserInfo:ae,createBranch:je,clearUserConfig:Pe,restoreUserConfig:Oe,getBranchStatus:Se,gitPull:Fe,gitFetchAll:lt,initSocketConnection:Je,toggleAutoUpdate:et,parseStatusPorcelain:qe,fetchLog:ze,fetchStatus:pe,fetchStatusPorcelain:Ne,addToStage:y,addFileToStage:n,unstageFile:J,commitChanges:ve,pushToRemote:Le,addAndCommit:me,addCommitAndPush:Ae,resetHead:ke,resetToRemote:be,getRemoteUrl:ot,copyRemoteUrl:Ye,mergeBranch:ge}}),Ps={class:"card"},Os={class:"status-header"},Fs={class:"header-actions"},Ns=["element-loading-text"],Is={key:0,class:"status-box"},Hs={key:1,class:"status-box-wrap"},Xs={key:0,class:"branch-status-info"},Ws={class:"branch-sync-status"},Js={class:"sync-status-content"},qs={class:"status-badges"},Ys={class:"badge-content"},Zs={class:"badge-content"},Ks={key:1,class:"file-list-container"},Qs={key:0,class:"file-group"},ea={class:"file-list"},ta=["onClick"],sa={class:"file-info"},aa={class:"file-path-container"},la={class:"file-name"},oa={class:"file-directory"},na={class:"file-actions"},ia={key:1,class:"file-group"},ra={class:"file-list"},ca=["onClick"],ua={class:"file-info"},da={class:"file-path-container"},fa={class:"file-name"},pa={class:"file-directory"},va={class:"file-actions"},ma={key:2,class:"file-group"},ga={class:"file-list"},ha=["onClick"],ya={class:"file-info"},_a={class:"file-path-container"},wa={class:"file-name"},ba={class:"file-directory"},$a={class:"file-actions"},Ca={key:2,class:"empty-status"},ka={class:"empty-icon"},Sa={class:"diff-content"},Ta=["innerHTML"],xa={key:1,class:"no-diff"},Va={class:"file-navigation"},Ba={class:"file-counter"},La=Lt({__name:"GitStatus",props:{initialDirectory:{type:String,default:""}},setup(Ce,{expose:p}){const V=Ce,v=bt(),g=Ee(()=>v.isLoadingStatus),O=c(""),A=c(""),P=c(!1),H=c(!1),le=c(-1),G=c(V.initialDirectory||"");async function Q(){try{if(!G.value){const h=await(await fetch("/api/current_directory")).json();G.value=h.directory||"未知目录"}if(!v.isGitRepo)return;await v.fetchStatus(),await v.getBranchStatus(),o({message:"Git 状态已刷新",type:"success"})}catch(x){o({message:"刷新失败: "+x.message,type:"error"})}}function M(x){if(!x)return"";const h=x.split(`
4
+ `);function W(z){return z.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#039;")}return h.map(z=>{const R=W(z);return z.startsWith("diff --git")?`<div class="diff-header">${R}</div>`:z.startsWith("---")?`<div class="diff-old-file">${R}</div>`:z.startsWith("+++")?`<div class="diff-new-file">${R}</div>`:z.startsWith("@@")?`<div class="diff-hunk-header">${R}</div>`:z.startsWith("+")?`<div class="diff-added">${R}</div>`:z.startsWith("-")?`<div class="diff-removed">${R}</div>`:`<div class="diff-context">${R}</div>`}).join("")}async function T(x){try{H.value=!0,O.value=x,le.value=v.fileList.findIndex(W=>W.path===x);const h=v.fileList[le.value];if(h&&h.type==="untracked"){try{const z=await(await fetch(`/api/file-content?file=${encodeURIComponent(x)}`)).json();z.success&&z.content?A.value=`diff --git a/${x} b/${x}
5
+ 新文件: ${x}
6
+ --- /dev/null
7
+ +++ b/${x}
8
+ @@ -0,0 +1,${z.content.split(`
9
+ `).length} @@
10
+ `+z.content.split(`
11
+ `).map(R=>`+${R}`).join(`
12
+ `):A.value=`这是一个新文件,尚未被Git跟踪。
13
+ 添加到暂存区后可以提交该文件。`}catch(W){console.error("获取未跟踪文件内容失败:",W),A.value=`这是一个新文件,尚未被Git跟踪。
14
+ 添加到暂存区后可以提交该文件。`}P.value=!0}else if(h&&h.type==="added"){const z=await(await fetch(`/api/diff-cached?file=${encodeURIComponent(x)}`)).json();A.value=z.diff||"没有变更",P.value=!0}else{const z=await(await fetch(`/api/diff?file=${encodeURIComponent(x)}`)).json();A.value=z.diff||"没有变更",P.value=!0}}catch(h){o({message:"获取文件差异失败: "+h.message,type:"error"}),A.value="获取差异失败: "+h.message}finally{H.value=!1}}async function Y(){if(v.fileList.length===0||le.value<=0)return;const x=le.value-1,h=v.fileList[x];await T(h.path)}async function X(){if(v.fileList.length===0||le.value>=v.fileList.length-1)return;const x=le.value+1,h=v.fileList[x];await T(h.path)}function K(x){T(x.path)}async function F(x){await v.addFileToStage(x)}async function ye(x){await v.unstageFile(x)}async function ie(){await Q()}async function D(){try{await v.gitPull(),await Q()}catch(x){console.error("拉取操作发生错误:",x)}}async function te(){try{await v.gitFetchAll(),await Q()}catch(x){console.error("获取远程分支信息操作发生错误:",x)}}async function U(x){try{await Qe.confirm(`确定要撤回文件 "${x}" 的所有修改吗?此操作无法撤销。`,"撤回修改",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"});const W=await(await fetch("/api/revert_file",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({filePath:x})})).json();W.success?(o.success("已撤回文件修改"),await Q()):o.error(W.error?`撤回失败: ${W.error}`:"撤回文件修改失败,请重试")}catch(h){if(h==="cancel"||h.message==="cancel")return;const W=h.message||"未知错误";W!=="undefined"?o.error(`撤回文件修改失败: ${W}`):o.error("撤回文件修改失败,请重试")}}function fe(x){const h=x.split("/");return h[h.length-1]}function ee(x){const h=x.split("/");return h.length<=1?"":h.slice(0,-1).join("/")}return $t(()=>{Q()}),Ke(()=>v.autoUpdateEnabled,(x,h)=>{console.log(`自动更新状态变更: ${h} -> ${x}`),v.toggleAutoUpdate()},{immediate:!1}),p({refreshStatus:ie}),(x,h)=>{const W=Yt,z=Ot,R=Ue,oe=Mt,xe=At,Se=Rt,Ve=es;return m(),b(Te,null,[t("div",Ps,[t("div",Os,[h[2]||(h[2]=t("h2",null,"Git 状态",-1)),t("div",Fs,[s(z,{content:l(v).autoUpdateEnabled?"禁用自动更新文件状态":"启用自动更新文件状态",placement:"top","hide-after":1e3},{default:a(()=>[s(W,{modelValue:l(v).autoUpdateEnabled,"onUpdate:modelValue":h[0]||(h[0]=B=>l(v).autoUpdateEnabled=B),style:{"--el-switch-on-color":"#67C23A","--el-switch-off-color":"#909399","margin-right":"10px"},"inline-prompt":"","active-icon":l(Zt),"inactive-icon":l(It),class:"auto-update-switch"},null,8,["modelValue","active-icon","inactive-icon"])]),_:1},8,["content"]),s(z,{content:"Git Pull (拉取远程更新)",placement:"top","hide-after":1e3},{default:a(()=>[s(R,{type:"primary",icon:l(Kt),circle:"",size:"small",onClick:D,loading:l(v).isGitPulling,disabled:!l(v).hasUpstream},null,8,["icon","loading","disabled"])]),_:1}),s(z,{content:"Git Fetch All (获取所有远程分支)",placement:"top","hide-after":1e3},{default:a(()=>[s(R,{type:"info",icon:l(Qt),circle:"",size:"small",onClick:te,loading:l(v).isGitFetching},null,8,["icon","loading"])]),_:1}),s(z,{content:"刷新状态",placement:"top","hide-after":1e3},{default:a(()=>[s(R,{type:"primary",icon:l(ms),circle:"",size:"small",onClick:ie,loading:g.value},null,8,["icon","loading"])]),_:1})])]),ut((m(),b("div",{class:"card-content","element-loading-text":l(v).isGitPulling?"正在拉取代码...":"正在获取远程分支信息..."},[l(v).isGitRepo?(m(),b("div",Hs,[l(v).hasUpstream&&(l(v).branchAhead>0||l(v).branchBehind>0)?(m(),b("div",Xs,[t("div",Ws,[t("div",Js,[s(z,{content:"本地分支与远程分支的状态对比",placement:"top"},{default:a(()=>[t("div",qs,[l(v).branchAhead>0?(m(),se(xe,{key:0,size:"small",type:"warning",class:"status-badge"},{default:a(()=>[t("span",Ys,[s(oe,null,{default:a(()=>[s(l(gs))]),_:1}),w(" 你的分支领先 'origin/"+E(l(v).currentBranch)+"' "+E(l(v).branchAhead)+" 个提交 ",1)])]),_:1})):q("",!0),l(v).branchBehind>0?(m(),se(xe,{key:1,size:"small",type:"info",class:"status-badge"},{default:a(()=>[t("span",Zs,[s(oe,null,{default:a(()=>[s(l(ts))]),_:1}),w(" 你的分支落后 'origin/"+E(l(v).currentBranch)+"' "+E(l(v).branchBehind)+" 个提交 ",1)])]),_:1})):q("",!0)])]),_:1})])])])):q("",!0),l(v).fileList.length?(m(),b("div",Ks,[l(v).fileList.some(B=>B.type==="added")?(m(),b("div",Qs,[h[5]||(h[5]=t("div",{class:"file-group-header"},"已暂存的更改",-1)),t("div",ea,[(m(!0),b(Te,null,Ge(l(v).fileList.filter(B=>B.type==="added"),B=>(m(),b("div",{key:B.path,class:"file-item",onClick:de=>K(B)},[t("div",sa,[t("div",aa,[t("span",la,E(fe(B.path)),1),t("span",oa,E(ee(B.path)),1)])]),t("div",na,[s(z,{content:"取消暂存",placement:"top","hide-after":1e3},{default:a(()=>[s(R,{type:"warning",size:"small",circle:"",onClick:ht(de=>ye(B.path),["stop"])},{default:a(()=>h[4]||(h[4]=[w("-")])),_:2},1032,["onClick"])]),_:2},1024)])],8,ta))),128))])])):q("",!0),l(v).fileList.some(B=>B.type==="modified"||B.type==="deleted")?(m(),b("div",ia,[h[7]||(h[7]=t("div",{class:"file-group-header"},"未暂存的更改",-1)),t("div",ra,[(m(!0),b(Te,null,Ge(l(v).fileList.filter(B=>B.type==="modified"||B.type==="deleted"),B=>(m(),b("div",{key:B.path,class:"file-item",onClick:de=>K(B)},[t("div",ua,[t("div",{class:Xe(["file-status-indicator",B.type])},null,2),t("div",da,[t("span",fa,E(fe(B.path)),1),t("span",pa,E(ee(B.path)),1)])]),t("div",va,[s(z,{content:"添加到暂存区",placement:"top","hide-after":1e3},{default:a(()=>[s(R,{type:"success",size:"small",circle:"",onClick:ht(de=>F(B.path),["stop"])},{default:a(()=>h[6]||(h[6]=[w("+")])),_:2},1032,["onClick"])]),_:2},1024),s(z,{content:"撤回修改",placement:"top","hide-after":1e3},{default:a(()=>[s(R,{type:"danger",size:"small",icon:l(Ft),circle:"",onClick:ht(de=>U(B.path),["stop"])},null,8,["icon","onClick"])]),_:2},1024)])],8,ca))),128))])])):q("",!0),l(v).fileList.some(B=>B.type==="untracked")?(m(),b("div",ma,[h[10]||(h[10]=t("div",{class:"file-group-header"},"未跟踪的文件",-1)),t("div",ga,[(m(!0),b(Te,null,Ge(l(v).fileList.filter(B=>B.type==="untracked"),B=>(m(),b("div",{key:B.path,class:"file-item",onClick:de=>K(B)},[t("div",ya,[h[8]||(h[8]=t("div",{class:"file-status-indicator untracked"},null,-1)),t("div",_a,[t("span",wa,E(fe(B.path)),1),t("span",ba,E(ee(B.path)),1)])]),t("div",$a,[s(z,{content:"添加到暂存区",placement:"top","hide-after":1e3},{default:a(()=>[s(R,{type:"success",size:"small",circle:"",onClick:ht(de=>F(B.path),["stop"])},{default:a(()=>h[9]||(h[9]=[w("+")])),_:2},1032,["onClick"])]),_:2},1024),s(z,{content:"删除文件",placement:"top","hide-after":1e3},{default:a(()=>[s(R,{type:"danger",size:"small",icon:l(It),circle:"",onClick:ht(de=>U(B.path),["stop"])},null,8,["icon","onClick"])]),_:2},1024)])],8,ha))),128))])])):q("",!0)])):l(v).isGitRepo?(m(),b("div",Ca,[t("div",ka,[s(oe,null,{default:a(()=>[s(l(ss))]),_:1})]),h[11]||(h[11]=t("div",{class:"empty-text"},"没有检测到任何更改",-1)),h[12]||(h[12]=t("div",{class:"empty-subtext"},"工作区是干净的",-1))])):q("",!0)])):(m(),b("div",Is,h[3]||(h[3]=[t("div",{class:"empty-status"},[t("p",null,"当前目录不是Git仓库")],-1)])))],8,Ns)),[[Ve,l(v).isGitPulling||l(v).isGitFetching]])]),s(Se,{modelValue:P.value,"onUpdate:modelValue":h[1]||(h[1]=B=>P.value=B),title:`文件差异: ${O.value}`,width:"80%","destroy-on-close":"",class:"diff-dialog"},{footer:a(()=>[t("div",Va,[s(R,{type:"primary",icon:l(hs),onClick:Y,disabled:le.value<=0||l(v).fileList.length===0,plain:"",class:"nav-button"},{default:a(()=>h[13]||(h[13]=[w(" 上一个文件 ")])),_:1},8,["icon","disabled"]),t("div",Ba,[s(xe,{type:"info",effect:"plain",class:"counter-tag"},{default:a(()=>[w(E(le.value+1)+" / "+E(l(v).fileList.length),1)]),_:1})]),s(R,{type:"primary",icon:l(Ht),onClick:X,disabled:le.value>=l(v).fileList.length-1||l(v).fileList.length===0,plain:"",class:"nav-button"},{icon:a(()=>[s(oe,{class:"el-icon--right"},{default:a(()=>[s(l(Ht))]),_:1})]),default:a(()=>[h[14]||(h[14]=w(" 下一个文件 "))]),_:1},8,["icon","disabled"])])]),default:a(()=>[ut((m(),b("div",Sa,[A.value?(m(),b("div",{key:0,innerHTML:M(A.value),class:"diff-formatted"},null,8,Ta)):(m(),b("div",xa,"该文件没有差异或是新文件"))])),[[Ve,H.value]])]),_:1},8,["modelValue","title"])],64)}}}),Et=(Ce,p)=>{const V=Ce.__vccOpts||Ce;for(const[v,g]of p)V[v]=g;return V},Aa=Et(La,[["__scopeId","data-v-c005b533"]]),cs=qt("config",()=>{const Ce=c(""),p=c([]),V=c([]),v=c([]),g=c(!1),O=c(!1),A=Ee(()=>({defaultCommitMessage:Ce.value,descriptionTemplates:p.value,scopeTemplates:V.value,messageTemplates:v.value}));async function P(){if(O.value&&!g.value)return console.log("使用缓存的配置信息"),A.value;try{g.value=!0,console.log("加载配置信息...");const T=await(await fetch("/api/config/getConfig")).json();return Ce.value=T.defaultCommitMessage||"",p.value=T.descriptionTemplates||[],V.value=T.scopeTemplates||[],v.value=T.messageTemplates||[],O.value=!0,console.log("配置信息加载完成"),A.value}catch(M){return console.error("加载配置失败:",M),o.error(`加载配置失败: ${M.message}`),null}finally{g.value=!1}}async function H(M){try{const Y=await(await fetch("/api/config/saveDefaultMessage",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({defaultCommitMessage:M})})).json();return Y.success?(Ce.value=M,o.success("默认提交信息已保存"),!0):(o.error(`保存失败: ${Y.error}`),!1)}catch(T){return o.error(`保存失败: ${T.message}`),!1}}async function le(M,T){try{const X=await(await fetch("/api/config/save-template",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({template:M,type:T})})).json();return X.success?(T==="description"?p.value.includes(M)||p.value.push(M):T==="scope"?V.value.includes(M)||V.value.push(M):T==="message"&&(v.value.includes(M)||v.value.push(M)),o.success("模板已保存"),!0):(o.error(`保存模板失败: ${X.error}`),!1)}catch(Y){return o.error(`保存模板失败: ${Y.message}`),!1}}async function G(M,T){try{const X=await(await fetch("/api/config/delete-template",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({template:M,type:T})})).json();return X.success?(T==="description"?p.value=p.value.filter(K=>K!==M):T==="scope"?V.value=V.value.filter(K=>K!==M):T==="message"&&(v.value=v.value.filter(K=>K!==M)),o.success("模板已删除"),!0):(o.error(`删除模板失败: ${X.error}`),!1)}catch(Y){return o.error(`删除模板失败: ${Y.message}`),!1}}async function Q(M,T,Y){try{const K=await(await fetch("/api/config/update-template",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({oldTemplate:M,newTemplate:T,type:Y})})).json();if(K.success){if(Y==="description"){const F=p.value.indexOf(M);F!==-1&&(p.value[F]=T)}else if(Y==="scope"){const F=V.value.indexOf(M);F!==-1&&(V.value[F]=T)}else if(Y==="message"){const F=v.value.indexOf(M);F!==-1&&(v.value[F]=T)}return o.success("模板已更新"),!0}else return o.error(`更新模板失败: ${K.error}`),!1}catch(X){return o.error(`更新模板失败: ${X.message}`),!1}}return{defaultCommitMessage:Ce,descriptionTemplates:p,scopeTemplates:V,messageTemplates:v,isLoading:g,isLoaded:O,config:A,loadConfig:P,saveDefaultMessage:H,saveTemplate:le,deleteTemplate:G,updateTemplate:Q}}),Ma={key:0,class:"pushing-indicator"},Ra={key:0,class:"push-success-indicator"},Ea={class:"card-content"},za={class:"layout-container"},Da={key:0,class:"git-config-warning"},Ga={class:"commit-section"},Ua={class:"commit-options"},ja={class:"options-row"},Pa={class:"commit-mode-toggle"},Oa={class:"no-verify-toggle"},Fa={key:0,class:"commit-form"},Na={class:"description-container"},Ia={class:"input-actions"},Ha={class:"preview-section"},Xa={class:"preview-content code-command"},Wa={class:"form-bottom-actions"},Ja={class:"button-row"},qa={key:0},Ya={key:0},Za={key:1,class:"standard-commit-form"},Ka={class:"standard-commit-header"},Qa={class:"type-scope-container"},el={class:"scope-wrapper"},tl={class:"description-container"},sl={class:"advanced-fields"},al={class:"preview-section"},ll={class:"preview-content code-command"},ol={class:"form-bottom-actions"},nl={class:"button-row"},il={key:0},rl={key:0},cl={class:"actions-section"},ul={class:"action-groups"},dl={class:"operations-wrapper"},fl={class:"action-group"},pl={class:"group-buttons"},vl={key:0},ml={key:0},gl={key:0},hl={key:0},yl={class:"action-group"},_l={class:"group-buttons"},wl={class:"action-group reset-group"},bl={class:"group-buttons"},$l={key:0},Cl={class:"action-group branch-group"},kl={class:"group-buttons"},Sl={class:"template-container"},Tl={class:"template-form"},xl={class:"template-form-buttons"},Vl={class:"template-list"},Bl={class:"template-content"},Ll={class:"template-actions"},Al={class:"template-container"},Ml={class:"template-form"},Rl={class:"template-form-buttons"},El={class:"template-list"},zl={class:"template-content"},Dl={class:"template-actions"},Gl={class:"template-container message-template-container"},Ul={class:"template-form"},jl={class:"template-form-buttons"},Pl={class:"templates-container"},Ol={class:"message-templates-list"},Fl={class:"templates-scroll-area"},Nl={class:"template-content"},Il={class:"template-actions"},Hl={class:"current-default-message"},Xl={class:"default-message-content"},Wl={class:"message-help-text"},Jl={class:"merge-dialog-content"},ql={class:"merge-intro"},Yl={class:"merge-options"},Zl={class:"dialog-footer"},Kl=Lt({__name:"CommitForm",setup(Ce){const p=bt(),V=cs(),v=c(""),g=c(!1),O=c("输入提交信息..."),A=c(""),P=c(!1),H=c("feat"),le=c(""),G=c(""),Q=c(""),M=c(""),T=c([]),Y=c(!1),X=c(""),K=c(!1),F=c(""),ye=c(-1),ie=c(!1),D=c(""),te=c({noFf:!1,squash:!1,noCommit:!1,message:""}),U=c([]),fe=c(!1),ee=c(""),x=c(!1),h=c(""),W=c(-1),z=c(!1),R=c(""),oe=c(!1),xe=c(!1),Se=[{value:"feat",label:"feat: 新功能"},{value:"fix",label:"fix: 修复bug"},{value:"docs",label:"docs: 文档修改"},{value:"style",label:"style: 样式修改"},{value:"refactor",label:"refactor: 代码重构"},{value:"test",label:"test: 测试代码"},{value:"chore",label:"chore: 构建/工具修改"}],Ve=c([]),B=c(!1),de=c(""),ce=c(-1);Ke(P,u=>{localStorage.setItem("zen-gitsync-standard-commit",u.toString())}),Ke(oe,u=>{localStorage.setItem("zen-gitsync-skip-hooks",u.toString())});const ae=Ee(()=>{if(!P.value)return v.value||A.value;let u=`${H.value||""}`;return le.value&&(u+=`(${le.value})`),u+=`: ${G.value}`,Q.value&&(u+=`
15
+
16
+ ${Q.value}`),M.value&&(u+=`
17
+
18
+ ${M.value}`),u}),je=Ee(()=>{let u=`git commit -m "${ae.value}"`;return oe.value&&(u+=" --no-verify"),u});function Pe(){const u=V.config;u&&(O.value=`输入提交信息 (默认: ${u.defaultCommitMessage})`,A.value=u.defaultCommitMessage||"",u.descriptionTemplates&&Array.isArray(u.descriptionTemplates)&&(T.value=u.descriptionTemplates),u.scopeTemplates&&Array.isArray(u.scopeTemplates)&&(U.value=u.scopeTemplates),u.messageTemplates&&Array.isArray(u.messageTemplates)&&(Ve.value=u.messageTemplates))}async function Oe(){if(!X.value.trim()){o({message:"请输入模板内容",type:"warning"});return}try{if(K.value)await Fe();else{if(T.value.includes(X.value)){o({message:"该模板已存在",type:"warning"});return}await V.saveTemplate(X.value,"description")&&(T.value.includes(X.value)||T.value.push(X.value),T.value=[...T.value],X.value="")}}catch(u){o({message:`保存模板失败: ${u.message}`,type:"error"})}}async function Fe(){if(!X.value.trim()){o({message:"请输入模板内容",type:"warning"});return}try{if(await V.updateTemplate(F.value,X.value,"description")){const e=T.value.indexOf(F.value);e!==-1&&(T.value[e]=X.value),T.value=[...T.value],K.value=!1,F.value="",ye.value=-1,X.value=""}}catch(u){o({message:`更新模板失败: ${u.message}`,type:"error"})}}function lt(u,e){K.value=!0,F.value=u,ye.value=e,X.value=u}function Je(){K.value=!1,F.value="",ye.value=-1,X.value=""}async function et(){if(!ee.value.trim()){o({message:"请输入模板内容",type:"warning"});return}try{if(x.value)await qe();else{if(U.value.includes(ee.value)){o({message:"该模板已存在",type:"warning"});return}await V.saveTemplate(ee.value,"scope")&&(U.value.includes(ee.value)||U.value.push(ee.value),U.value=[...U.value],ee.value="")}}catch(u){o({message:`保存模板失败: ${u.message}`,type:"error"})}}async function qe(){if(!ee.value.trim()){o({message:"请输入模板内容",type:"warning"});return}try{if(await V.updateTemplate(h.value,ee.value,"scope")){const e=U.value.indexOf(h.value);e!==-1&&(U.value[e]=ee.value),U.value=[...U.value],x.value=!1,h.value="",W.value=-1,ee.value=""}}catch(u){o({message:`更新模板失败: ${u.message}`,type:"error"})}}function ze(u,e){x.value=!0,h.value=u,W.value=e,ee.value=u}function pe(){x.value=!1,h.value="",W.value=-1,ee.value=""}async function Ne(u){try{if(await Qe.confirm(`确定要删除描述模板 "${u}" 吗?`,"删除确认",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"}),await V.deleteTemplate(u,"description")){const Z=T.value.indexOf(u);Z!==-1&&T.value.splice(Z,1),T.value=[...T.value]}}catch(e){if(e==="cancel")return;o({message:`删除模板失败: ${e.message}`,type:"error"})}}async function y(u){try{if(await Qe.confirm(`确定要删除作用域模板 "${u}" 吗?`,"删除确认",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"}),await V.deleteTemplate(u,"scope")){const Z=U.value.indexOf(u);Z!==-1&&U.value.splice(Z,1),U.value=[...U.value]}}catch(e){if(e==="cancel")return;o({message:`删除模板失败: ${e.message}`,type:"error"})}}function n(u){G.value=u,Y.value=!1}function J(u){le.value=u,fe.value=!1}function j(){Y.value=!0}function ve(){fe.value=!0}async function Le(){try{await p.addToStage()&&p.fetchStatus()}catch(u){o({message:`添加文件失败: ${u.message}`,type:"error"})}}async function ge(){if(!ae.value.trim()){o({message:"提交信息不能为空",type:"warning"});return}try{await p.commitChanges(ae.value,oe.value)&&(f(),p.fetchStatus(),p.fetchLog(),p.getBranchStatus())}catch(u){o({message:`提交失败: ${u.message}`,type:"error"})}}function me(){g.value=!0,setTimeout(()=>{g.value=!1},2e3)}async function Ae(){try{await p.pushToRemote(),me(),p.getBranchStatus()}catch(u){o({message:`推送失败: ${u.message}`,type:"error"})}finally{}}async function ke(){try{await p.gitPull(),await p.fetchStatus(),await p.fetchLog(!1)}catch(u){console.error("拉取操作发生错误:",u)}}async function be(){try{await p.gitFetchAll(),await p.fetchStatus(),await p.fetchLog(!1)}catch(u){console.error("获取远程分支信息操作发生错误:",u)}}async function ot(){if(!ae.value.trim()){o({message:"提交信息不能为空",type:"warning"});return}try{await p.addAndCommit(ae.value,oe.value),f(),p.fetchStatus(),p.fetchLog()}catch(u){o({message:`暂存并提交失败: ${u.message}`,type:"error"})}}async function Ye(){if(!ae.value.trim()){o({message:"提交信息不能为空",type:"warning"});return}try{await p.addCommitAndPush(ae.value,oe.value),f(),me()}catch(u){o({message:`暂存、提交并推送失败: ${u.message}`,type:"error"})}}async function r(){try{await Qe.confirm(`确定要重置当前分支 "${p.currentBranch}" 到远程状态吗?这将丢失所有未推送的提交和本地更改。`,"重置到远程分支",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"}),await p.resetToRemote(p.currentBranch)&&(p.fetchStatus(),p.fetchLog())}catch(u){u!=="cancel"&&o({message:`重置到远程分支失败: ${u.message}`,type:"error"})}}function f(){v.value="",G.value="",Q.value="",M.value=""}function N(){R.value=A.value,z.value=!0}async function ue(){if(!R.value.trim()){o({message:"请输入默认提交信息",type:"warning"});return}try{await V.saveDefaultMessage(R.value)&&(A.value=R.value,O.value=`输入提交信息 (默认: ${R.value})`,z.value=!1)}catch(u){o({message:`保存默认提交信息失败: ${u.message}`,type:"error"})}}const Ie=Ee(()=>p.fileList.some(u=>["modified","deleted","untracked"].includes(u.type))),Me=Ee(()=>p.fileList.filter(u=>["modified","deleted","untracked"].includes(u.type)).length),Be=Ee(()=>p.fileList.filter(u=>u.type==="added").length),Re=Ee(()=>Be.value>0),Ze=Ee(()=>p.fileList.length>0),He=Ee(()=>p.branchAhead>0),nt=Ee(()=>p.branchBehind>0),dt=Ee(()=>p.hasUpstream&&(He.value||Re.value&&ae.value.trim())),Ct=Ee(()=>Re.value),zt=Ee(()=>p.hasUpstream&&(He.value||nt.value||Ze.value));async function ft(){if(!R.value.trim()){o({message:"请输入模板内容",type:"warning"});return}try{if(B.value)await d();else{if(Ve.value.includes(R.value)){o({message:"该模板已存在",type:"warning"});return}Ve.value.push(R.value);const e=await(await fetch("/api/config/save-template",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({template:R.value,type:"message"})})).json();e.success?(o({message:"提交信息模板保存成功!",type:"success"}),R.value=""):o({message:"模板保存失败: "+e.error,type:"error"})}}catch(u){o({message:"模板保存失败: "+u.message,type:"error"})}}async function d(){try{if(ce.value>=0){const u=de.value,e=R.value;Ve.value[ce.value]=e;const ne=await(await fetch("/api/config/update-template",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({oldTemplate:u,newTemplate:e,type:"message"})})).json();ne.success?(o({message:"提交信息模板更新成功!",type:"success"}),B.value=!1,de.value="",ce.value=-1,R.value=""):o({message:"模板更新失败: "+ne.error,type:"error"})}}catch(u){o({message:"模板更新失败: "+u.message,type:"error"})}}function i(u,e){B.value=!0,de.value=u,ce.value=e,R.value=u}function $(){B.value=!1,de.value="",ce.value=-1,R.value=""}async function k(u){try{const e=Ve.value.indexOf(u);e!==-1&&Ve.value.splice(e,1);const ne=await(await fetch("/api/config/delete-template",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({template:u,type:"message"})})).json();ne.success?o({message:"提交信息模板删除成功!",type:"success"}):o({message:"模板删除失败: "+ne.error,type:"error"})}catch(e){o({message:"模板删除失败: "+e.message,type:"error"})}}function he(u){v.value=u,R.value=u}$t(async()=>{const u=localStorage.getItem("zen-gitsync-standard-commit");u!==null&&(P.value=u==="true");const e=localStorage.getItem("zen-gitsync-skip-hooks");e!==null&&(oe.value=e==="true"),Ke(()=>V.config,Pe,{immediate:!0}),V.config||await V.loadConfig()});function re(){D.value="",te.value={noFf:!1,squash:!1,noCommit:!1,message:""},I.value="all",ie.value=!0,p.allBranches.length===0&&p.getAllBranches()}const I=c("all"),L=Ee(()=>{const u=p.allBranches.filter(e=>e!==p.currentBranch);if(console.log("筛选分支列表:",{allBranches:p.allBranches,currentBranch:p.currentBranch,branchTypeFilter:I.value,filteredBranches:u}),I.value==="local"){const e=u.filter(Z=>!Z.includes("origin/"));return console.log("本地分支:",e),e}else if(I.value==="remote"){const e=u.filter(Z=>Z.includes("origin/"));return console.log("远程分支:",e),e}else return console.log("所有分支:",u),u});async function $e(){if(!D.value){o({message:"请选择要合并的分支",type:"warning"});return}try{await p.mergeBranch(D.value,te.value)&&(ie.value=!1,await p.fetchStatus(),await p.fetchLog(!1))}catch(u){console.error("合并分支操作发生错误:",u)}}return(u,e)=>{const Z=Mt,ne=as,_e=Yt,we=Ot,C=Nt,_=Ue,kt=Vt,pt=Bt,tt=os,vt=ws,it=ns,rt=Rt,mt=At,gt=$s,ds=bs,St=rs,Dt=Cs,fs=is;return m(),b("div",{class:Xe(["card",{"is-pushing":l(p).isPushing}])},[e[81]||(e[81]=t("div",{class:"card-header"},[t("h2",null,"提交更改")],-1)),s(Xt,{name:"el-fade-in-linear"},{default:a(()=>[l(p).isPushing?(m(),b("div",Ma,e[23]||(e[23]=[t("div",{class:"pushing-spinner"},[t("svg",{viewBox:"0 0 50 50",class:"circular"},[t("circle",{class:"path",cx:"25",cy:"25",r:"20",fill:"none"})])],-1),t("div",{class:"pushing-text"},"正在推送...",-1)]))):q("",!0)]),_:1}),s(Xt,{name:"el-fade-in-linear"},{default:a(()=>[g.value?(m(),b("div",Ra,[s(Z,{class:"push-success-icon"},{default:a(()=>[s(l(Zt))]),_:1}),e[24]||(e[24]=t("div",{class:"push-success-text"},"推送成功!",-1))])):q("",!0)]),_:1}),t("div",Ea,[t("div",za,[l(p).userName===""||l(p).userEmail===""?(m(),b("div",Da,[s(ne,{title:"Git用户信息未配置",type:"warning",closable:!1,"show-icon":""},{default:a(()=>e[25]||(e[25]=[t("p",null,"您需要配置Git用户名和邮箱才能提交代码。请使用以下命令配置:",-1),t("pre",{class:"config-command"},`git config --global user.name "Your Name"
19
+ git config --global user.email "your.email@example.com"`,-1)])),_:1})])):(m(),b(Te,{key:1},[t("div",Ga,[t("div",Ua,[t("div",ja,[t("div",Pa,[s(_e,{modelValue:P.value,"onUpdate:modelValue":e[0]||(e[0]=S=>P.value=S),"active-text":"标准化提交","inactive-text":"普通提交"},null,8,["modelValue"])]),t("div",Oa,[s(we,{content:"跳过 Git 钩子检查 (--no-verify)",placement:"top"},{default:a(()=>[s(_e,{modelValue:oe.value,"onUpdate:modelValue":e[1]||(e[1]=S=>oe.value=S),"active-text":"跳过钩子 (--no-verify)"},null,8,["modelValue"])]),_:1})])])]),P.value?(m(),b("div",Za,[t("div",Ka,[t("div",Qa,[s(pt,{modelValue:H.value,"onUpdate:modelValue":e[3]||(e[3]=S=>H.value=S),placeholder:"提交类型",class:"type-select",clearable:""},{default:a(()=>[(m(),b(Te,null,Ge(Se,S=>s(kt,{key:S.value,label:S.label,value:S.value},null,8,["label","value"])),64))]),_:1},8,["modelValue"]),t("div",el,[s(C,{modelValue:le.value,"onUpdate:modelValue":e[4]||(e[4]=S=>le.value=S),placeholder:"作用域(可选)",class:"scope-input",clearable:""},null,8,["modelValue"]),s(_,{type:"primary",icon:l(wt),circle:"",size:"small",class:"settings-button",onClick:ve},null,8,["icon"])])]),t("div",tl,[s(C,{modelValue:G.value,"onUpdate:modelValue":e[5]||(e[5]=S=>G.value=S),placeholder:"简短描述(必填)",class:"description-input",clearable:""},null,8,["modelValue"]),s(_,{type:"primary",icon:l(wt),circle:"",size:"small",class:"settings-button",onClick:j},null,8,["icon"])])]),t("div",{class:"advanced-options-toggle",onClick:e[6]||(e[6]=S=>xe.value=!xe.value)},[t("span",null,E(xe.value?"收起":"正文及页脚"),1),s(Z,{class:Xe(["toggle-icon",{"is-active":xe.value}])},{default:a(()=>[s(l(ts))]),_:1},8,["class"])]),ut(t("div",sl,[s(C,{modelValue:Q.value,"onUpdate:modelValue":e[7]||(e[7]=S=>Q.value=S),type:"textarea",rows:4,placeholder:"正文(可选):详细描述本次提交的内容和原因",class:"body-input",clearable:""},null,8,["modelValue"]),s(C,{modelValue:M.value,"onUpdate:modelValue":e[8]||(e[8]=S=>M.value=S),placeholder:"页脚(可选):如 Closes #123",class:"footer-input",clearable:""},null,8,["modelValue"])],512),[[ls,xe.value]]),t("div",al,[e[30]||(e[30]=t("div",{class:"preview-title",style:{"margin-top":"10px"}},"Git提交命令预览:",-1)),t("pre",ll,E(je.value),1)]),t("div",ol,[t("div",nl,[s(_,{type:"primary",onClick:ge,loading:l(p).isLoadingStatus,disabled:!Re.value||!ae.value.trim()},{default:a(()=>[e[31]||(e[31]=w(" 提交 ")),Be.value>0?(m(),b("span",il,"("+E(Be.value)+")",1)):q("",!0)]),_:1},8,["loading","disabled"]),s(_,{type:"primary",icon:l(Gt),onClick:Ae,loading:l(p).isPushing,disabled:!dt.value,style:_t(He.value?{backgroundColor:"#67c23a",borderColor:"#67c23a"}:{})},{default:a(()=>[e[32]||(e[32]=w(" 推送 ")),He.value?(m(),b("span",rl,"("+E(l(p).branchAhead)+")",1)):q("",!0)]),_:1},8,["icon","loading","disabled","style"])]),s(_,{type:"success",icon:l(Ut),onClick:Ye,loading:l(p).isAddingFiles||l(p).isCommiting||l(p).isPushing,disabled:!Ze.value||!ae.value.trim()||!l(p).hasUpstream,class:"full-width-button"},{default:a(()=>e[33]||(e[33]=[w(" 一键推送所有 ")])),_:1},8,["icon","loading","disabled"])])])):(m(),b("div",Fa,[t("div",Na,[s(C,{modelValue:v.value,"onUpdate:modelValue":e[2]||(e[2]=S=>v.value=S),placeholder:O.value,type:"textarea",rows:6,resize:"none",class:"commit-message-input"},null,8,["modelValue","placeholder"]),t("div",Ia,[s(_,{type:"primary",icon:l(wt),circle:"",size:"small",class:"settings-button",onClick:N},null,8,["icon"])])]),t("div",Ha,[e[26]||(e[26]=t("div",{class:"preview-title"},"Git提交命令预览:",-1)),t("pre",Xa,'git commit -m "'+E(ae.value||"<提交信息>")+'"'+E(oe.value?" --no-verify":""),1)]),t("div",Wa,[t("div",Ja,[s(_,{type:"primary",onClick:ge,loading:l(p).isLoadingStatus,disabled:!Re.value||!ae.value.trim()},{default:a(()=>[e[27]||(e[27]=w(" 提交 ")),Be.value>0?(m(),b("span",qa,"("+E(Be.value)+")",1)):q("",!0)]),_:1},8,["loading","disabled"]),s(_,{type:"primary",icon:l(Gt),onClick:Ae,loading:l(p).isPushing,disabled:!dt.value,style:_t(He.value?{backgroundColor:"#67c23a",borderColor:"#67c23a"}:{})},{default:a(()=>[e[28]||(e[28]=w(" 推送 ")),He.value?(m(),b("span",Ya,"("+E(l(p).branchAhead)+")",1)):q("",!0)]),_:1},8,["icon","loading","disabled","style"])]),s(_,{type:"success",icon:l(Ut),onClick:Ye,loading:l(p).isAddingFiles||l(p).isCommiting||l(p).isPushing,disabled:!Ze.value||!ae.value.trim()||!l(p).hasUpstream,class:"full-width-button"},{default:a(()=>e[29]||(e[29]=[w(" 一键推送所有 ")])),_:1},8,["icon","loading","disabled"])])]))]),t("div",cl,[e[48]||(e[48]=t("h3",null,"Git 操作",-1)),t("div",ul,[t("div",dl,[t("div",fl,[e[39]||(e[39]=t("div",{class:"group-title"},"基础操作",-1)),t("div",pl,[s(we,{content:Ie.value?`暂存${Me.value}个待更改文件`:"git add .",placement:"top",effect:"light","popper-class":"git-cmd-tooltip"},{default:a(()=>[s(_,{type:"primary",onClick:Le,loading:l(p).isAddingFiles,disabled:!Ie.value,class:"action-button"},{default:a(()=>[e[34]||(e[34]=w(" 暂存更改 ")),Me.value>0?(m(),b("span",vl,"("+E(Me.value)+")",1)):q("",!0)]),_:1},8,["loading","disabled"])]),_:1},8,["content"]),s(we,{content:Re.value?`提交${Be.value}个已暂存文件`:"git commit",placement:"top",effect:"light","popper-class":"git-cmd-tooltip"},{default:a(()=>[s(_,{type:"primary",onClick:ge,loading:l(p).isLoadingStatus,disabled:!Re.value||!ae.value.trim(),class:"action-button"},{default:a(()=>[e[35]||(e[35]=w(" 提交 ")),Be.value>0?(m(),b("span",ml,"("+E(Be.value)+")",1)):q("",!0)]),_:1},8,["loading","disabled"])]),_:1},8,["content"]),s(we,{content:He.value?`推送${l(p).branchAhead}个本地提交`:"git push",placement:"top",effect:"light","popper-class":"git-cmd-tooltip"},{default:a(()=>[s(_,{type:"primary",icon:l(Gt),onClick:Ae,loading:l(p).isPushing,disabled:!dt.value,class:Xe(["action-button","push-button",{"is-loading":l(p).isPushing}]),style:_t(He.value?{backgroundColor:"#67c23a !important",borderColor:"#67c23a !important"}:{})},{default:a(()=>[e[36]||(e[36]=w(" 推送 ")),He.value?(m(),b("span",gl,"("+E(l(p).branchAhead)+")",1)):q("",!0)]),_:1},8,["icon","loading","disabled","class","style"])]),_:1},8,["content"]),s(we,{content:nt.value?`拉取${l(p).branchBehind}个远程提交`:"git pull",placement:"top",effect:"light","popper-class":"git-cmd-tooltip"},{default:a(()=>[s(_,{type:"primary",icon:l(Kt),onClick:ke,loading:l(p).isGitPulling,disabled:!l(p).hasUpstream,class:"action-button",style:_t(nt.value?{color:"white",backgroundColor:"#E6A23C",borderColor:"#E6A23C"}:{})},{default:a(()=>[e[37]||(e[37]=w(" 拉取 ")),nt.value?(m(),b("span",hl,"("+E(l(p).branchBehind)+")",1)):q("",!0)]),_:1},8,["icon","loading","disabled","style"])]),_:1},8,["content"]),s(we,{content:"git fetch --all",placement:"top",effect:"light","popper-class":"git-cmd-tooltip"},{default:a(()=>[s(_,{type:"info",icon:l(Qt),onClick:be,loading:l(p).isGitFetching,class:"action-button"},{default:a(()=>e[38]||(e[38]=[w(" 获取所有远程分支 ")])),_:1},8,["icon","loading"])]),_:1})])]),t("div",yl,[e[42]||(e[42]=t("div",{class:"group-title"},"组合操作",-1)),t("div",_l,[s(we,{content:"git add + git commit",placement:"top",effect:"light","popper-class":"git-cmd-tooltip"},{default:a(()=>[s(_,{type:"primary",icon:l(Tt),onClick:ot,loading:l(p).isAddingFiles||l(p).isCommiting,disabled:!Ie.value||!ae.value.trim(),class:"action-button"},{default:a(()=>e[40]||(e[40]=[w(" 暂存并提交 ")])),_:1},8,["icon","loading","disabled"])]),_:1}),s(we,{content:"git add + git commit + git push",placement:"top",effect:"light","popper-class":"git-cmd-tooltip"},{default:a(()=>[s(_,{type:"success",icon:l(Ut),onClick:Ye,loading:l(p).isAddingFiles||l(p).isCommiting||l(p).isPushing,disabled:!Ze.value||!ae.value.trim()||!l(p).hasUpstream,class:Xe(["action-button","one-click-push",{"is-loading":l(p).isAddingFiles||l(p).isCommiting||l(p).isPushing}])},{default:a(()=>e[41]||(e[41]=[w(" 一键推送所有 ")])),_:1},8,["icon","loading","disabled","class"])]),_:1})])])]),t("div",wl,[e[45]||(e[45]=t("div",{class:"group-title"},"重置操作",-1)),t("div",bl,[s(we,{content:Ct.value?`撤销${Be.value}个已暂存文件`:"git reset HEAD",placement:"top",effect:"light","popper-class":"git-cmd-tooltip"},{default:a(()=>[s(_,{type:"warning",icon:l(Ft),onClick:l(p).resetHead,loading:l(p).isResetting,disabled:!Ct.value,class:"action-button reset-button"},{default:a(()=>[e[43]||(e[43]=w(" 重置暂存区 ")),Be.value>0?(m(),b("span",$l,"("+E(Be.value)+")",1)):q("",!0)]),_:1},8,["icon","onClick","loading","disabled"])]),_:1},8,["content"]),s(we,{content:"git reset --hard origin/branch",placement:"top",effect:"light","popper-class":"git-cmd-tooltip"},{default:a(()=>[s(_,{type:"danger",icon:l(ys),onClick:r,loading:l(p).isResetting,disabled:!zt.value,class:"action-button danger-button"},{default:a(()=>e[44]||(e[44]=[w(" 重置到远程 ")])),_:1},8,["icon","loading","disabled"])]),_:1})])]),t("div",Cl,[e[47]||(e[47]=t("div",{class:"group-title"},"分支操作",-1)),t("div",kl,[s(we,{content:"合并其他分支到当前分支",placement:"top",effect:"light","popper-class":"git-cmd-tooltip"},{default:a(()=>[s(_,{type:"primary",icon:l(_s),onClick:re,loading:l(p).isGitMerging,class:"action-button merge-button"},{default:a(()=>e[46]||(e[46]=[w(" 合并分支 ")])),_:1},8,["icon","loading"])]),_:1})])])])])],64))]),s(rt,{title:"简短描述模板设置",modelValue:Y.value,"onUpdate:modelValue":e[10]||(e[10]=S=>Y.value=S),width:"80vw",top:"70px",style:{height:"calc(100vh - 140px)"},"close-on-click-modal":!1,class:"template-dialog"},{default:a(()=>[t("div",Sl,[t("div",Tl,[s(C,{modelValue:X.value,"onUpdate:modelValue":e[9]||(e[9]=S=>X.value=S),placeholder:K.value?"编辑模板内容":"输入新模板内容",class:"template-input",clearable:""},null,8,["modelValue","placeholder"]),t("div",xl,[K.value?(m(),se(_,{key:0,onClick:Je},{default:a(()=>e[49]||(e[49]=[w("取消")])),_:1})):q("",!0),s(_,{type:"primary",onClick:Oe,disabled:!X.value.trim()},{default:a(()=>[w(E(K.value?"更新模板":"添加模板"),1)]),_:1},8,["disabled"])])]),t("div",Vl,[e[53]||(e[53]=t("h3",null,"已保存模板",-1)),T.value.length===0?(m(),se(tt,{key:0,description:"暂无保存的模板"})):q("",!0),(m(!0),b(Te,null,Ge(T.value,(S,st)=>(m(),se(it,{key:st,class:"template-item"},{default:a(()=>[s(vt,{justify:"space-between",align:"middle",style:{width:"100%"}},{default:a(()=>[t("div",Bl,E(S),1),t("div",Ll,[s(_,{type:"primary",size:"small",onClick:at=>n(S)},{default:a(()=>e[50]||(e[50]=[w("使用")])),_:2},1032,["onClick"]),s(_,{type:"warning",size:"small",icon:l(Tt),onClick:at=>lt(S,st)},{default:a(()=>e[51]||(e[51]=[w("编辑")])),_:2},1032,["icon","onClick"]),s(_,{type:"danger",size:"small",onClick:at=>Ne(S)},{default:a(()=>e[52]||(e[52]=[w("删除")])),_:2},1032,["onClick"])])]),_:2},1024)]),_:2},1024))),128))])])]),_:1},8,["modelValue"]),s(rt,{title:"作用域模板设置",modelValue:fe.value,"onUpdate:modelValue":e[12]||(e[12]=S=>fe.value=S),width:"80vw",top:"70px",style:{height:"calc(100vh - 140px)"},"close-on-click-modal":!1,class:"template-dialog"},{default:a(()=>[t("div",Al,[t("div",Ml,[s(C,{modelValue:ee.value,"onUpdate:modelValue":e[11]||(e[11]=S=>ee.value=S),placeholder:x.value?"编辑作用域模板内容":"输入新作用域模板",class:"template-input",clearable:""},null,8,["modelValue","placeholder"]),t("div",Rl,[x.value?(m(),se(_,{key:0,onClick:pe},{default:a(()=>e[54]||(e[54]=[w("取消")])),_:1})):q("",!0),s(_,{type:"primary",onClick:et,disabled:!ee.value.trim()},{default:a(()=>[w(E(x.value?"更新模板":"添加模板"),1)]),_:1},8,["disabled"])])]),t("div",El,[e[58]||(e[58]=t("h3",null,"已保存作用域",-1)),U.value.length===0?(m(),se(tt,{key:0,description:"暂无保存的作用域"})):q("",!0),(m(!0),b(Te,null,Ge(U.value,(S,st)=>(m(),se(it,{key:st,class:"template-item"},{default:a(()=>[s(vt,{justify:"space-between",align:"middle",style:{width:"100%"}},{default:a(()=>[t("div",zl,E(S),1),t("div",Dl,[s(_,{type:"primary",size:"small",onClick:at=>J(S)},{default:a(()=>e[55]||(e[55]=[w("使用")])),_:2},1032,["onClick"]),s(_,{type:"warning",size:"small",icon:l(Tt),onClick:at=>ze(S,st)},{default:a(()=>e[56]||(e[56]=[w("编辑")])),_:2},1032,["icon","onClick"]),s(_,{type:"danger",size:"small",onClick:at=>y(S)},{default:a(()=>e[57]||(e[57]=[w("删除")])),_:2},1032,["onClick"])])]),_:2},1024)]),_:2},1024))),128))])])]),_:1},8,["modelValue"]),s(rt,{title:"默认提交信息设置",modelValue:z.value,"onUpdate:modelValue":e[14]||(e[14]=S=>z.value=S),width:"80vw",top:"70px",style:{height:"calc(100vh - 140px)"},"close-on-click-modal":!1,class:"message-template-dialog"},{default:a(()=>[t("div",Gl,[t("div",Ul,[s(C,{modelValue:R.value,"onUpdate:modelValue":e[13]||(e[13]=S=>R.value=S),placeholder:B.value?"编辑模板内容":"输入新模板内容",class:"template-input",clearable:""},null,8,["modelValue","placeholder"]),t("div",jl,[B.value?(m(),se(_,{key:0,onClick:$},{default:a(()=>e[59]||(e[59]=[w("取消")])),_:1})):q("",!0),s(_,{type:"primary",onClick:ft,disabled:!R.value.trim()},{default:a(()=>[w(E(B.value?"更新模板":"添加模板"),1)]),_:1},8,["disabled"]),s(_,{type:"success",onClick:ue,disabled:!R.value.trim()},{default:a(()=>e[60]||(e[60]=[w(" 设为默认提交信息 ")])),_:1},8,["disabled"])])]),t("div",Pl,[t("div",Ol,[e[64]||(e[64]=t("h3",null,"已保存模板",-1)),t("div",Fl,[Ve.value.length===0?(m(),se(tt,{key:0,description:"暂无保存的模板"})):q("",!0),(m(!0),b(Te,null,Ge(Ve.value,(S,st)=>(m(),se(it,{key:st,class:"template-item"},{default:a(()=>[s(vt,{justify:"space-between",align:"middle",style:{width:"100%"}},{default:a(()=>[t("div",Nl,E(S),1),t("div",Il,[s(_,{type:"primary",size:"small",onClick:at=>he(S)},{default:a(()=>e[61]||(e[61]=[w("使用")])),_:2},1032,["onClick"]),s(_,{type:"warning",size:"small",icon:l(Tt),onClick:at=>i(S,st)},{default:a(()=>e[62]||(e[62]=[w("编辑")])),_:2},1032,["icon","onClick"]),s(_,{type:"danger",size:"small",onClick:at=>k(S)},{default:a(()=>e[63]||(e[63]=[w("删除")])),_:2},1032,["onClick"])])]),_:2},1024)]),_:2},1024))),128))])]),t("div",Hl,[e[72]||(e[72]=t("h3",null,"当前默认提交信息",-1)),A.value?(m(),se(it,{key:0,class:"default-message-card"},{default:a(()=>[t("div",Xl,E(A.value),1)]),_:1})):(m(),se(tt,{key:1,description:"尚未设置默认提交信息","image-size":100})),t("div",Wl,[e[70]||(e[70]=t("h4",null,"关于默认提交信息",-1)),e[71]||(e[71]=t("p",null,"默认提交信息将在未输入提交信息时自动使用。",-1)),t("p",null,[e[67]||(e[67]=w("你可以通过点击左侧模板的")),s(mt,{size:"small",type:"primary"},{default:a(()=>e[65]||(e[65]=[w("使用")])),_:1}),e[68]||(e[68]=w("按钮先选择喜欢的模板,然后点击上方")),s(mt,{size:"small",type:"success"},{default:a(()=>e[66]||(e[66]=[w("设为默认提交信息")])),_:1}),e[69]||(e[69]=w("按钮保存。"))])])])])])]),_:1},8,["modelValue"]),s(rt,{title:"合并分支",modelValue:ie.value,"onUpdate:modelValue":e[22]||(e[22]=S=>ie.value=S),width:"500px","close-on-click-modal":!1,class:"merge-dialog"},{footer:a(()=>[t("div",Zl,[s(_,{onClick:e[21]||(e[21]=S=>ie.value=!1)},{default:a(()=>e[79]||(e[79]=[w("取消")])),_:1}),s(_,{type:"primary",onClick:$e,loading:l(p).isGitMerging,disabled:!D.value,class:"merge-confirm-btn"},{default:a(()=>e[80]||(e[80]=[w(" 合并 ")])),_:1},8,["loading","disabled"])])]),default:a(()=>[t("div",Jl,[t("p",ql,"选择要合并到当前分支 ("+E(l(p).currentBranch)+") 的分支:",1),s(fs,{"label-position":"top"},{default:a(()=>[s(St,{label:"分支类型"},{default:a(()=>[s(ds,{modelValue:I.value,"onUpdate:modelValue":e[15]||(e[15]=S=>I.value=S),size:"small"},{default:a(()=>[s(gt,{label:"all"},{default:a(()=>e[73]||(e[73]=[w("所有分支")])),_:1}),s(gt,{label:"local"},{default:a(()=>e[74]||(e[74]=[w("本地分支")])),_:1}),s(gt,{label:"remote"},{default:a(()=>e[75]||(e[75]=[w("远程分支")])),_:1})]),_:1},8,["modelValue"])]),_:1}),s(St,{label:"选择分支"},{default:a(()=>[s(pt,{modelValue:D.value,"onUpdate:modelValue":e[16]||(e[16]=S=>D.value=S),placeholder:"选择要合并的分支",style:{width:"100%"},filterable:""},{default:a(()=>[(m(!0),b(Te,null,Ge(L.value,S=>(m(),se(kt,{key:S,label:S,value:S},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),s(St,{label:"合并选项"},{default:a(()=>[t("div",Yl,[s(Dt,{modelValue:te.value.noFf,"onUpdate:modelValue":e[17]||(e[17]=S=>te.value.noFf=S)},{default:a(()=>[s(we,{content:"创建合并提交,即使可以使用快进合并",placement:"top"},{default:a(()=>e[76]||(e[76]=[t("span",null,"禁用快进合并 (--no-ff)",-1)])),_:1})]),_:1},8,["modelValue"]),s(Dt,{modelValue:te.value.squash,"onUpdate:modelValue":e[18]||(e[18]=S=>te.value.squash=S)},{default:a(()=>[s(we,{content:"将多个提交压缩为一个提交",placement:"top"},{default:a(()=>e[77]||(e[77]=[t("span",null,"压缩提交 (--squash)",-1)])),_:1})]),_:1},8,["modelValue"]),s(Dt,{modelValue:te.value.noCommit,"onUpdate:modelValue":e[19]||(e[19]=S=>te.value.noCommit=S)},{default:a(()=>[s(we,{content:"执行合并但不自动创建提交",placement:"top"},{default:a(()=>e[78]||(e[78]=[t("span",null,"不自动提交 (--no-commit)",-1)])),_:1})]),_:1},8,["modelValue"])])]),_:1}),te.value.noFf&&!te.value.noCommit?(m(),se(St,{key:0,label:"合并提交信息 (可选)"},{default:a(()=>[s(C,{modelValue:te.value.message,"onUpdate:modelValue":e[20]||(e[20]=S=>te.value.message=S),type:"textarea",rows:3,placeholder:"输入自定义合并提交信息"},null,8,["modelValue"])]),_:1})):q("",!0)]),_:1})])]),_:1},8,["modelValue"])])],2)}}}),Ql=Et(Kl,[["__scopeId","data-v-55ad4e02"]]),eo={class:"card"},to={key:0,class:"refresh-notification"},so={class:"log-header"},ao={class:"log-actions"},lo={key:1,class:"filter-panel-header"},oo={class:"filter-form"},no={class:"filter-item"},io={class:"filter-item"},ro={class:"filter-item"},co={class:"filter-item"},uo={class:"filter-actions"},fo={key:0},po={key:1,class:"content-area-content"},vo={key:0,class:"graph-view"},mo={key:0,class:"commit-count"},go={class:"graph-controls"},ho={class:"zoom-controls"},yo={class:"scale-info"},_o={key:1,class:"table-view-container"},wo=["id"],bo=["onClick"],$o={class:"author-name"},Co={key:0,class:"branch-container"};const ko={class:"commit-detail-container"},So={key:0,class:"commit-info"},To={class:"commit-info-header"},xo={class:"info-item"},Vo={class:"item-value"},Bo={class:"info-item"},Lo={class:"item-value"},Ao={class:"info-item"},Mo={class:"item-value"},Ro={class:"commit-message-container"},Eo=["innerHTML"],zo={class:"commit-files-diff"},Do={class:"files-list"},Go={key:1},Uo=["onClick"],jo={class:"file-diff"},Po={key:0},Oo={key:1},Fo=["innerHTML"],yt=.5,xt=1.5,Pt=.1,No=Lt({__name:"LogList",setup(Ce,{expose:p}){const V=bt();let v=[];const g=c(v),O=c(""),A=c(!1),P=Ee(()=>V.isLoadingLog||A.value),H=c(!1),le=c(0),G=c(!1),Q=c(null),M=c(1),T=c(!0),Y=c(!1),X=c(null),K=c(!1),F=c(null),ye=c([]),ie=c(""),D=c(!1),te=c(""),U=c(1),fe=c(!1),ee=c(!1),x=c([]),h=c(""),W=c(null),z=c([]),R=c([]),oe=c([]),xe=c(!1),Se=c(0),Ve=c(0),B=c(null),de=c(new Map),ce=c([]),ae=c(1),je=c(new Map),Pe=Ee(()=>g.value);async function Oe(d=!1,i=1){if(!bt().isGitRepo){O.value="当前目录不是Git仓库";return}try{i>1?Y.value=!0:A.value=!0,console.log(`加载提交历史: page=${i}, all=${d}`);const k=new URLSearchParams;k.append("page",i.toString()),k.append("all",d.toString()),k.append("with_parents","true"),x.value.length>0&&k.append("author",x.value.join(",")),R.value.length>0&&k.append("branch",R.value.join(",")),h.value&&k.append("message",h.value),W.value&&Array.isArray(W.value)&&W.value.length===2&&(k.append("dateFrom",W.value[0]),k.append("dateTo",W.value[1])),k.append("_t",Date.now().toString());const re=await(await fetch(`/api/log?${k.toString()}`)).json();if(!re||!re.data||!Array.isArray(re.data)){console.error("API返回的数据格式不正确:",re),O.value="加载提交历史失败: 服务器返回数据格式不正确";return}const I=i>1;I?re.data.forEach(L=>v.push(L)):(v.length=0,re.data.forEach(L=>v.push(L))),g.value=[...v],M.value=i,le.value=re.total||v.length,T.value=re.hasMore===!0,console.log(`加载完成: 当前页=${M.value}, 是否有更多=${T.value}, 总条数=${le.value}`),T.value||console.log("已加载所有提交记录"),I||(fe.value=!0,setTimeout(()=>{fe.value=!1},2e3)),!I&&G.value?setTimeout(Fe,0):!I&&!G.value&&!d&&We(()=>{y(),setTimeout(ft,200)}),O.value=""}catch(k){O.value="加载提交历史失败: "+(k instanceof Error?k.message:String(k)),console.error("加载日志失败:",k),i>1&&(T.value=!1)}finally{i>1?Y.value=!1:A.value=!1}}async function Fe(){if(console.log(`开始渲染图表...数据长度: ${v.length}`),!Q.value){console.error("图表容器未找到");return}if(v.length===0){console.error("没有日志数据可渲染");return}try{Q.value.innerHTML="",console.log(`创建gitgraph实例,分支: ${V.currentBranch||"main"}`);const d=Ds(Q.value,{orientation:"vertical-reverse",template:"metro",author:"提交者 <committer@example.com>"}),i={},$=d.branch(V.currentBranch||"main");i[V.currentBranch||"main"]=$,console.log(`开始创建提交图...共${v.length}条提交`),v.forEach((k,he)=>{let re=$;if(k.branch){const I=et(k.branch.split(",")[0]);i[I]||(i[I]=d.branch(I)),re=i[I]}re.commit({hash:k.hash,subject:k.message,author:`${k.author} <${k.email}>`}),he%10===0&&console.log(`已渲染 ${he+1}/${v.length} 个提交`)}),console.log("图表渲染完成"),setTimeout(()=>{Ae()},100)}catch(d){console.error("渲染图表失败:",d),O.value="渲染图表失败: "+(d instanceof Error?d.message:String(d))}}function lt(){G.value=!G.value,G.value&&v.length>0&&setTimeout(Fe,0)}function Je(){H.value=!H.value,H.value||(T.value=!0),M.value=1,Oe(H.value),We(()=>{setTimeout(()=>{!G.value&&!H.value&&(y(),ft())},300)})}function et(d){return d.includes("HEAD -> ")?d.replace("HEAD -> ",""):d.includes("origin/")?d:d.trim()}function qe(d){return d.includes("HEAD")?"success":d.includes("origin/")?"warning":"info"}const ze=c(null),pe=c(null);function Ne(d){if(G.value||!T.value||Y.value||P.value)return;const i=d.target,{scrollTop:$,scrollHeight:k,clientHeight:he}=i,re=k-$-he;console.log("表格滚动:",{scrollTop:$,scrollHeight:k,clientHeight:he,scrollDistance:re,hasMoreData:T.value,isLoadingMore:Y.value,isLoading:P.value}),re<=20&&(console.log("已滚动到底部,加载更多数据"),r())}function y(){if(console.log("设置表格滚动监听 - 开始"),!ze.value){console.error("tableRef.value 不存在");return}const d=ze.value.$el.querySelector(".el-table__body-wrapper");if(!d){console.error("未找到表格的body-wrapper元素");return}console.log("找到表格的body-wrapper元素"),pe.value=d,pe.value&&(pe.value.removeEventListener("scroll",Ne,!0),pe.value.addEventListener("scroll",Ne,!0),console.log("成功添加表格滚动监听"))}function n(){console.log("移除表格滚动监听 - 开始"),pe.value?(pe.value.removeEventListener("scroll",Ne,!0),console.log("成功移除表格滚动监听"),pe.value=null):console.log("tableBodyWrapper.value 不存在,无需移除监听")}$t(()=>{V.isGitRepo?(V.log.length>0?(console.log("使用已加载的日志数据"),v.length=0,V.log.forEach(d=>v.push(d)),le.value=V.log.length,G.value?setTimeout(()=>{console.log(`准备渲染图表,数据长度: ${v.length}`),Fe()},100):setTimeout(()=>{Me()},100)):(console.log("初始加载日志数据"),Oe()),ue()):O.value="当前目录不是Git仓库",We(()=>{setTimeout(()=>{y()},500)}),We(()=>{setTimeout(()=>{G.value||Me()},500)}),Ke(()=>ze.value,d=>{d&&!G.value&&!H.value&&(console.log("表格引用已创建,设置滚动监听"),We(()=>{y()}))})}),Ke(()=>V.allBranches,d=>{d&&d.length>0?(oe.value=[...d].sort(),console.log(`分支数据更新,共 ${oe.value.length} 个分支`)):(oe.value=[],console.warn("gitStore 中没有分支数据"))},{immediate:!0}),ks(()=>{n(),X.value!==null&&(window.clearInterval(X.value),X.value=null)});function J(d,i){let $=null;return function(...k){$&&clearTimeout($),$=window.setTimeout(()=>{d(...k),$=null},i)}}const j=J(Me,200);async function ve(){await V.fetchLog(!0),v.length=0,V.log.forEach(d=>v.push(d)),g.value=[...v],le.value=V.log.length,M.value=1,T.value=!1,fe.value=!0,setTimeout(()=>{fe.value=!1},2e3),G.value?(await We(),Fe()):(de.value.clear(),ce.value=[],ae.value=1,await We(),j())}Ke(()=>V.log,d=>{console.log("监听到gitStore.log变化,更新图表数据");try{v.length=0,Array.isArray(d)&&d.forEach(i=>i&&v.push(i)),le.value=v.length,M.value=1,g.value=[...v],fe.value=!0,setTimeout(()=>{fe.value=!1},2e3),console.log(`数据更新完成,共${g.value.length}条记录,准备渲染图表`),G.value&&v.length>0&&setTimeout(Fe,0)}catch(i){console.error("更新日志数据失败:",i)}},{immediate:!0}),p({refreshLog:ve});function Le(){U.value<xt&&(U.value=Math.min(xt,U.value+Pt),me())}function ge(){U.value>yt&&(U.value=Math.max(yt,U.value-Pt),me())}function me(){if(!Q.value)return;const d=Q.value.querySelector("svg");d&&(d.style.transform=`scale(${U.value})`,d.style.transformOrigin="top left")}function Ae(){if(!Q.value)return;const d=Q.value.querySelector("svg");if(!d)return;const i=d.getBoundingClientRect().width/U.value,$=Q.value.clientWidth;i>$?U.value=Math.max(yt,$/i):U.value=1,me()}async function ke(d){if(d){F.value=d,K.value=!0,D.value=!0,ye.value=[],ie.value="",te.value="",console.log("提交详情对象:",JSON.stringify(d,null,2)),console.log("哈希值类型和长度:",typeof d.hash,d.hash?d.hash.length:0),console.log("提交信息类型和长度:",typeof d.message,d.message?d.message.length:0),console.log("提交分支:",d.branch);try{if(console.log(`获取提交详情: ${d.hash}`),!d.hash||d.hash.length<7){console.error("无效的提交哈希值:",d.hash),ie.value="无效的提交哈希值",D.value=!1;return}const i=await fetch(`/api/commit-files?hash=${d.hash}`);console.log("API响应状态: ",i.status);const $=await i.json();console.log("文件列表数据: ",$),$.success&&Array.isArray($.files)?(ye.value=$.files,ye.value.length>0?await be(d.hash,ye.value[0]):(console.log("没有找到变更文件"),ie.value="该提交没有变更文件")):(console.error("获取提交文件列表失败:",$.error||"未知错误"),ie.value=`获取文件列表失败: ${$.error||"未知错误"}`)}catch(i){console.error("获取提交详情失败:",i),ie.value=`获取提交详情失败: ${i.message}`}finally{D.value=!1}}}async function be(d,i){D.value=!0,te.value=i;try{console.log(`获取文件差异: hash=${d}, file=${i}`);const $=await fetch(`/api/commit-file-diff?hash=${d}&file=${encodeURIComponent(i)}`);console.log("差异API响应状态: ",$.status);const k=await $.json();console.log("差异数据: ",k.success,typeof k.diff),k.success?ie.value=k.diff||"没有变更内容":(console.error("获取差异失败: ",k.error),ie.value=`获取差异失败: ${k.error||"未知错误"}`)}catch($){console.error("获取文件差异失败:",$),ie.value=`获取差异失败: ${$.message}`}finally{D.value=!1}}function ot(d){if(!d)return"";const i=d.split(`
20
+ `);function $(k){return k.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#039;")}return i.map(k=>{const he=$(k);return k.startsWith("diff --git")?`<div class="diff-header">${he}</div>`:k.startsWith("---")?`<div class="diff-old-file">${he}</div>`:k.startsWith("+++")?`<div class="diff-new-file">${he}</div>`:k.startsWith("@@")?`<div class="diff-hunk-header">${he}</div>`:k.startsWith("+")?`<div class="diff-added">${he}</div>`:k.startsWith("-")?`<div class="diff-removed">${he}</div>`:`<div class="diff-context">${he}</div>`}).join("")}function Ye(d){return d?(console.log("格式化前的提交信息:",d),console.log("提交信息中的换行符数量:",(d.match(/\n/g)||[]).length),d.trim()):"(无提交信息)"}function r(){if(!T.value||Y.value||P.value){console.log("不满足加载更多条件:",{hasMoreData:T.value,isLoadingMore:Y.value,isLoading:P.value});return}console.log(`加载更多日志,当前页码: ${M.value},下一页: ${M.value+1}`),Oe(H.value,M.value+1)}function f(){x.value=[],R.value=[],h.value="",W.value=null,M.value=1,Oe(H.value,1)}function N(){M.value=1,Oe(H.value,1)}async function ue(){try{console.log("获取所有可用作者...");const i=await(await fetch("/api/authors")).json();i.success&&Array.isArray(i.authors)?(z.value=i.authors.sort(),console.log(`获取到${z.value.length}位作者`)):(console.warn("从API获取作者列表失败,将从现有日志中提取作者列表"),Ie())}catch(d){console.error("获取作者列表失败:",d),Ie()}}function Ie(){const d=new Set;g.value.forEach(i=>{i.author&&d.add(i.author)}),z.value=Array.from(d).sort(),console.log(`从现有日志中提取了${z.value.length}位作者`)}function Me(){!ze.value||G.value||(de.value.clear(),ce.value=[],ae.value=1,Be(),We(()=>{Ze()}))}function Be(){de.value.clear(),ce.value=[],je.value.clear();const d=new Map,i=new Map;g.value.forEach(e=>{e.hash&&(e.parents&&e.parents.length>0?(d.set(e.hash,[...e.parents]),e.parents.forEach(Z=>{var ne;i.has(Z)||i.set(Z,[]),(ne=i.get(Z))==null||ne.push(e.hash)})):d.set(e.hash,[]))});const $=0,k="#2196f3",he=["#e91e63","#4caf50","#ff9800","#9c27b0","#00bcd4","#ff5722","#607d8b"],re=new Map;g.value.forEach(e=>{if(!e.hash||!e.branch)return;const Z=e.branch.match(/(HEAD -> |origin\/)?([^\s,]+)/g);if(Z&&Z.length>0){const ne=Z.find(_e=>_e.includes("HEAD -> "));if(ne){const _e=ne.replace("HEAD -> ","").trim();re.set(e.hash,_e)}else{const _e=Z[0].replace("origin/","").trim();re.set(e.hash,_e)}}});const I=new Map;let L=0;I.set("main",$),I.set("master",$),L++;const $e=new Map;$e.set("main",k),$e.set("master",k);const u=new Map;return g.value.forEach((e,Z)=>{if(!e.hash)return;const ne=e.hash,_e=re.get(ne)||"main";if(!I.has(_e)){I.set(_e,L++);const C=(I.get(_e)||0)%he.length;$e.set(_e,he[C])}const we=I.get(_e)||0;u.set(ne,we),de.value.set(ne,{hash:ne,parents:e.parents||[],column:we,row:Z,branch:_e}),je.value.has(_e)||je.value.set(_e,{name:_e,color:$e.get(_e)||k,column:we})}),g.value.forEach((e,Z)=>{if(!e.hash||!e.parents||e.parents.length===0)return;const ne=de.value.get(e.hash);if(!ne)return;const _e=ne.column,we=ne.branch||"main",C=$e.get(we)||k;e.parents.forEach((_,kt)=>{const pt=g.value.findIndex(gt=>gt.hash===_);if(pt<0)return;const tt=de.value.get(_);if(!tt)return;const vt=tt.column,it=tt.branch||"main",rt=$e.get(it)||k;let mt=C;e.parents&&e.parents.length>1&&kt>0&&(mt=rt),ce.value.push({fromRow:Z,fromColumn:_e,toRow:pt,toColumn:vt,color:mt})})}),ae.value=L,{mainBranchColor:k,branchColorMap:$e}}let Re=!1;function Ze(){if(Re){console.log("已有渲染进行中,跳过");return}try{Re=!0;const d=new Map;d.set("main","#2196f3"),d.set("master","#2196f3");const i="#2196f3";if(ce.value.length===0){if(console.log("branchLines为空,重新计算"),Be(),ce.value.length===0&&g.value.length>1){console.log("创建默认分支线");for(let $=0;$<g.value.length-1;$++)g.value[$].hash&&g.value[$+1].hash&&ce.value.push({fromRow:$,fromColumn:0,toRow:$+1,toColumn:0,color:i})}}else console.log(`使用现有分支线,数量: ${ce.value.length}`);g.value.forEach(($,k)=>{if(!$.hash)return;const he=`commit-graph-${$.hash.substring(0,7)}`,re=document.getElementById(he);if(!re||re.querySelector("svg"))return;const I=document.createElementNS("http://www.w3.org/2000/svg","svg");I.setAttribute("width","100%"),I.setAttribute("height","100%"),I.setAttribute("viewBox","0 0 100 100"),I.style.display="block",I.style.overflow="visible",re.innerHTML="",re.appendChild(I);const L=de.value.get($.hash);if(!L)return;const $e=20,u=10+L.column*$e,e=50,Z=[];for(const C of ce.value)C.fromRow<k&&C.toRow>k&&Z.push({...C,type:"through",x:10+C.fromColumn*$e});for(const C of ce.value)C.fromRow===k&&Z.push({...C,type:"from",fromX:10+C.fromColumn*$e,toX:10+C.toColumn*$e});for(const C of ce.value)C.toRow===k&&Z.push({...C,type:"to",fromX:10+C.fromColumn*$e,toX:10+C.toColumn*$e});Z.length===0&&k<g.value.length-1&&(ce.value.length>0?Z.push({...ce.value[0],type:"from",fromX:u,toX:u}):Z.push({type:"from",fromX:u,toX:u,fromRow:k,fromColumn:0,toRow:k+1,toColumn:0,color:i})),Z.filter(C=>C.type==="through").forEach(C=>{const _=document.createElementNS("http://www.w3.org/2000/svg","line");_.setAttribute("x1",C.x.toString()),_.setAttribute("y1","-20"),_.setAttribute("x2",C.x.toString()),_.setAttribute("y2","120"),_.setAttribute("stroke",C.color),_.setAttribute("stroke-width","2"),I.appendChild(_)}),Z.filter(C=>C.type==="to").forEach(C=>{if(C.fromColumn===C.toColumn){const _=document.createElementNS("http://www.w3.org/2000/svg","line");_.setAttribute("x1",C.toX.toString()),_.setAttribute("y1","-20"),_.setAttribute("x2",C.toX.toString()),_.setAttribute("y2",e.toString()),_.setAttribute("stroke",C.color),_.setAttribute("stroke-width","2"),I.appendChild(_)}else{const _=document.createElementNS("http://www.w3.org/2000/svg","path");C.fromColumn<C.toColumn?_.setAttribute("d",`M${C.fromX},-20 C${C.fromX},15 ${C.toX},30 ${C.toX},${e}`):_.setAttribute("d",`M${C.fromX},-20 C${C.fromX},15 ${C.toX},30 ${C.toX},${e}`),_.setAttribute("stroke",C.color),_.setAttribute("stroke-width","2"),_.setAttribute("fill","none"),I.appendChild(_)}}),Z.filter(C=>C.type==="from").forEach(C=>{if(C.fromColumn===C.toColumn){const _=document.createElementNS("http://www.w3.org/2000/svg","line");_.setAttribute("x1",C.fromX.toString()),_.setAttribute("y1",e.toString()),_.setAttribute("x2",C.fromX.toString()),_.setAttribute("y2","120"),_.setAttribute("stroke",C.color),_.setAttribute("stroke-width","2"),I.appendChild(_)}else{const _=document.createElementNS("http://www.w3.org/2000/svg","path");C.fromColumn<C.toColumn?_.setAttribute("d",`M${C.fromX},${e} C${C.fromX},70 ${C.toX},85 ${C.toX},120`):_.setAttribute("d",`M${C.fromX},${e} C${C.fromX},70 ${C.toX},85 ${C.toX},120`),_.setAttribute("stroke",C.color),_.setAttribute("stroke-width","2"),_.setAttribute("fill","none"),I.appendChild(_)}});const ne=document.createElementNS("http://www.w3.org/2000/svg","circle");ne.setAttribute("cx",u.toString()),ne.setAttribute("cy",e.toString()),ne.setAttribute("r","6");const _e=L.branch||"",we=d.get(_e)||i;ne.setAttribute("fill",we),ne.setAttribute("stroke","#fff"),ne.setAttribute("stroke-width","2"),I.appendChild(ne)})}catch(d){console.error("渲染分支图失败:",d),O.value="渲染分支图失败: "+(d instanceof Error?d.message:String(d))}finally{Re=!1}}Ke(()=>g.value,()=>{We(()=>{G.value||j()})},{deep:!0});function He(d,i,$){console.log("handleContextMenu",d,i,$),$.preventDefault(),Se.value=$.clientY,Ve.value=$.clientX,B.value=d,xe.value=!0;const k=()=>{xe.value=!1,document.removeEventListener("click",k)};setTimeout(()=>{document.addEventListener("click",k)},0)}async function nt(d){if(d)try{await Qe.confirm(`确定要撤销提交 ${d.hash.substring(0,7)} 吗?这将创建一个新的提交来撤销这次提交的更改。`,"撤销提交确认",{confirmButtonText:"确认",cancelButtonText:"取消",type:"warning"});const $=await(await fetch("/api/revert-commit",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({hash:d.hash})})).json();$.success?(o.success($.message||"已成功撤销提交"),ve(),V.fetchStatus(),V.getBranchStatus()):o.error($.error||"撤销提交失败")}catch(i){i!=="cancel"&&(console.error("撤销提交出错:",i),o.error("撤销提交失败: "+(i.message||i)))}}async function dt(d){if(d)try{await Qe.confirm(`确定要将提交 ${d.hash.substring(0,7)} Cherry-Pick 到当前分支吗?`,"Cherry-Pick确认",{confirmButtonText:"确认",cancelButtonText:"取消",type:"warning"});const $=await(await fetch("/api/cherry-pick-commit",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({hash:d.hash})})).json();$.success?(o.success($.message||"已成功Cherry-Pick提交"),ve(),V.fetchStatus(),V.getBranchStatus()):o.error($.error||"Cherry-Pick提交失败")}catch(i){i!=="cancel"&&(console.error("Cherry-Pick提交出错:",i),o.error("Cherry-Pick提交失败: "+(i.message||i)))}}async function Ct(d){if(d)try{await navigator.clipboard.writeText(d.hash),o.success(`已复制提交哈希: ${d.hash.substring(0,7)}`)}catch(i){console.error("复制提交哈希失败:",i),o.error(`复制提交哈希失败: ${i.message}`)}}async function zt(d){if(d)try{await Qe.confirm(`确定要将当前分支重置(hard)到提交 ${d.hash.substring(0,7)} 吗?
21
+
22
+ 警告:这将丢失该提交之后的所有更改!`,"重置确认",{confirmButtonText:"确认重置",cancelButtonText:"取消",type:"warning",dangerouslyUseHTMLString:!0});const $=await(await fetch("/api/reset-to-commit",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({hash:d.hash})})).json();$.success?(o.success($.message||"已成功重置到指定提交"),ve(),V.fetchStatus(),V.getBranchStatus()):o.error($.error||"重置到指定提交失败")}catch(i){i!=="cancel"&&(console.error("重置到指定提交出错:",i),o.error("重置到指定提交失败: "+(i.message||i)))}}function ft(){if(console.log("检查是否需要加载更多数据"),G.value||!T.value||Y.value||P.value||H.value){console.log("不满足加载条件:",{showGraphView:G.value,hasMoreData:T.value,isLoadingMore:Y.value,isLoading:P.value,showAllCommits:H.value});return}if(!pe.value){console.log("表格容器不存在,重新设置滚动监听"),y();return}const{scrollTop:d,scrollHeight:i,clientHeight:$}=pe.value,k=i-d-$;console.log("表格滚动位置:",{scrollTop:d,scrollHeight:i,clientHeight:$,scrollDistance:k}),k<=50&&(console.log("表格已滚动到底部,加载更多数据"),r())}return Ke(()=>G.value,d=>{!d&&!H.value&&(console.log("切换到表格视图,设置滚动监听和定时检查"),We(()=>{y(),setTimeout(ft,200)}))}),(d,i)=>{var I;const $=Mt,k=Ot,he=os,re=es;return m(),b(Te,null,[t("div",eo,[fe.value?(m(),b("div",to,"提交历史已刷新")):q("",!0),t("div",so,[i[14]||(i[14]=t("div",{class:"header-left"},[t("h2",null,"提交历史")],-1)),t("div",ao,[G.value?q("",!0):(m(),se(l(Ue),{key:0,type:ee.value?"primary":"default",size:"small",onClick:i[0]||(i[0]=L=>ee.value=!ee.value),class:Xe(["action-button filter-button",{"active-filter":ee.value}])},{icon:a(()=>[s($,null,{default:a(()=>[s(l(Ts))]),_:1})]),default:a(()=>[i[13]||(i[13]=w(" 筛选 ")),Pe.value.length!==g.value.length?(m(),se(l(Ss),{key:0,value:Pe.value.length,class:"filter-badge"},null,8,["value"])):q("",!0)]),_:1},8,["type","class"])),s(l(Ue),{type:"primary",size:"small",onClick:lt,class:Xe(["action-button view-mode-button",{"active-view":G.value}])},{icon:a(()=>[s($,null,{default:a(()=>[(m(),se(Wt(G.value?l(ss):l(xs))))]),_:1})]),default:a(()=>[w(" "+E(G.value?"表格视图":"图表视图"),1)]),_:1},8,["class"]),s(l(Ue),{type:"success",size:"small",onClick:Je,loading:P.value,class:Xe(["action-button commit-display-button",{"active-commits":H.value}])},{icon:a(()=>[s($,null,{default:a(()=>[(m(),se(Wt(H.value?l(Vs):l(Bs))))]),_:1})]),default:a(()=>[w(" "+E(H.value?"显示分页加载":"显示所有提交"),1)]),_:1},8,["loading","class"]),s(l(Ue),{circle:"",size:"small",onClick:i[1]||(i[1]=L=>ve()),class:Xe([{"refresh-button-animated":fe.value},"action-button refresh-button"])},{default:a(()=>[P.value?(m(),se($,{key:1},{default:a(()=>[s(l(Ls))]),_:1})):(m(),se($,{key:0},{default:a(()=>[s(l(Ft))]),_:1}))]),_:1},8,["class"])])]),ee.value&&!G.value?(m(),b("div",lo,[t("div",oo,[t("div",no,[s(l(Bt),{modelValue:x.value,"onUpdate:modelValue":i[2]||(i[2]=L=>x.value=L),placeholder:"选择作者",multiple:"",clearable:"",filterable:"",class:"filter-input",size:"small"},{prefix:a(()=>i[15]||(i[15]=[t("span",{class:"compact-label"},"作者",-1)])),default:a(()=>[(m(!0),b(Te,null,Ge(z.value,L=>(m(),se(l(Vt),{key:L,label:L,value:L},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),t("div",io,[s(l(Bt),{modelValue:R.value,"onUpdate:modelValue":i[3]||(i[3]=L=>R.value=L),placeholder:"选择分支",multiple:"",clearable:"",filterable:"",class:"filter-input",size:"small"},{prefix:a(()=>i[16]||(i[16]=[t("span",{class:"compact-label"},"分支",-1)])),default:a(()=>[(m(!0),b(Te,null,Ge(oe.value,L=>(m(),se(l(Vt),{key:L,label:L,value:L},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),t("div",ro,[s(l(Nt),{modelValue:h.value,"onUpdate:modelValue":i[4]||(i[4]=L=>h.value=L),placeholder:"提交信息关键词",clearable:"",class:"filter-input",size:"small"},{prefix:a(()=>i[17]||(i[17]=[t("span",{class:"compact-label"},"信息",-1)])),_:1},8,["modelValue"])]),t("div",co,[s(l(As),{modelValue:W.value,"onUpdate:modelValue":i[5]||(i[5]=L=>W.value=L),type:"daterange","range-separator":"至","start-placeholder":"开始日期","end-placeholder":"结束日期",format:"YYYY-MM-DD","value-format":"YYYY-MM-DD",class:"filter-input date-range",size:"small"},{prefix:a(()=>i[18]||(i[18]=[t("span",{class:"compact-label"},"日期",-1)])),_:1},8,["modelValue"])]),t("div",uo,[s(l(Ue),{type:"primary",size:"small",onClick:N,class:"filter-action-button"},{default:a(()=>i[19]||(i[19]=[w("应用")])),_:1}),s(l(Ue),{type:"info",size:"small",onClick:f,class:"filter-action-button"},{default:a(()=>i[20]||(i[20]=[w("重置")])),_:1})])])])):q("",!0),t("div",{class:Xe(["content-area",{"with-filter":ee.value&&!G.value}])},[O.value?(m(),b("div",fo,E(O.value),1)):(m(),b("div",po,[G.value?(m(),b("div",vo,[l(v).length>0?(m(),b("div",mo," 显示 "+E(l(v).length)+" 条提交记录 "+E(H.value?"(全部)":"(分页加载,每页100条)"),1)):q("",!0),t("div",go,[t("div",ho,[s(l(Ue),{type:"primary",circle:"",size:"small",onClick:ge,disabled:U.value<=yt},{default:a(()=>[s($,null,{default:a(()=>[s(l(Ms))]),_:1})]),_:1},8,["disabled"]),s(l(Rs),{modelValue:U.value,"onUpdate:modelValue":i[6]||(i[6]=L=>U.value=L),min:yt,max:xt,step:Pt,onChange:me,class:"zoom-slider"},null,8,["modelValue"]),s(l(Ue),{type:"primary",circle:"",size:"small",onClick:Le,disabled:U.value>=xt},{default:a(()=>[s($,null,{default:a(()=>[s(l(Es))]),_:1})]),_:1},8,["disabled"]),s(l(Ue),{type:"primary",size:"small",onClick:Ae},{default:a(()=>i[21]||(i[21]=[w(" 自适应大小 ")])),_:1})]),t("div",yo," 缩放: "+E(Math.round(U.value*100))+"% ",1)]),t("div",{ref_key:"graphContainer",ref:Q,class:"graph-container"},null,512)])):(m(),b("div",_o,[ut((m(),se(l(zs),{ref_key:"tableRef",ref:ze,data:Pe.value,stripe:"",border:"",class:"log-table","empty-text":P.value?"加载中...":"没有匹配的提交记录",height:"500",onRowContextmenu:He},{default:a(()=>[s(l(ct),{width:"60","class-name":"branch-graph-column"},{default:a(L=>[t("div",{class:"branch-graph-cell",id:`commit-graph-${L.row.hash.substring(0,7)}`},null,8,wo)]),_:1}),s(l(ct),{label:"提交哈希",width:"100",resizable:""},{default:a(L=>[t("span",{class:"commit-hash",onClick:$e=>ke(L.row)},E(L.row.hash.substring(0,7)),9,bo)]),_:1}),s(l(ct),{prop:"date",label:"日期",width:"120",resizable:""}),s(l(ct),{label:"作者",width:"120",resizable:""},{default:a(L=>[s(k,{content:L.row.email,placement:"top","hide-after":1e3},{default:a(()=>[t("span",$o,E(L.row.author),1)]),_:2},1032,["content"])]),_:1}),s(l(ct),{label:"分支",width:"180",resizable:""},{default:a(L=>[L.row.branch?(m(),b("div",Co,[(m(!0),b(Te,null,Ge(L.row.branch.split(","),($e,u)=>(m(),se(l(At),{key:u,size:"small",type:qe($e),class:"branch-tag"},{default:a(()=>[w(E(et($e)),1)]),_:2},1032,["type"]))),128))])):q("",!0)]),_:1}),s(l(ct),{prop:"message",label:"提交信息","min-width":"250"})]),_:1},8,["data","empty-text"])),[[re,P.value]]),(H.value,q("",!0))]))]))],2),s(l(Rt),{modelValue:K.value,"onUpdate:modelValue":i[7]||(i[7]=L=>K.value=L),title:`提交详情: ${(I=F.value)!=null&&I.hash?F.value.hash.substring(0,7):"未知"}`,width:"80%","destroy-on-close":"",class:"commit-detail-dialog"},{default:a(()=>[ut((m(),b("div",ko,[F.value?(m(),b("div",So,[t("div",To,[t("div",xo,[i[25]||(i[25]=t("span",{class:"item-label"},"哈希:",-1)),t("span",Vo,E(F.value.hash),1)]),t("div",Bo,[i[26]||(i[26]=t("span",{class:"item-label"},"作者:",-1)),t("span",Lo,E(F.value.author)+" <"+E(F.value.email)+">",1)]),t("div",Ao,[i[27]||(i[27]=t("span",{class:"item-label"},"日期:",-1)),t("span",Mo,E(F.value.date),1)])]),t("div",Ro,[i[28]||(i[28]=t("div",{class:"message-label"},"提交信息:",-1)),t("div",{class:"message-content",innerHTML:Ye(F.value.message).replace(/\n/g,"<br>")},null,8,Eo)])])):q("",!0),t("div",zo,[t("div",Do,[i[29]||(i[29]=t("h3",null,"变更文件",-1)),ye.value.length===0?(m(),se(he,{key:0,description:"没有找到变更文件"})):(m(),b("ul",Go,[(m(!0),b(Te,null,Ge(ye.value,L=>(m(),b("li",{key:L,class:Xe({"active-file":L===te.value}),onClick:$e=>be(F.value.hash,L)},E(L),11,Uo))),128))]))]),t("div",jo,[te.value?(m(),b("h3",Po," 文件差异: "+E(te.value),1)):(m(),b("h3",Oo,"文件差异")),!ie.value&&!D.value?(m(),se(he,{key:2,description:"选择文件查看差异"})):ie.value?(m(),b("div",{key:3,innerHTML:ot(ie.value),class:"diff-content"},null,8,Fo)):q("",!0)])])])),[[re,D.value]])]),_:1},8,["modelValue","title"])]),ut(t("div",{class:"context-menu",style:_t({top:Se.value+"px",left:Ve.value+"px"})},[t("div",{class:"context-menu-item",onClick:i[8]||(i[8]=L=>ke(B.value))},i[30]||(i[30]=[t("i",{class:"el-icon-view"},null,-1),w(" 查看详情 ")])),t("div",{class:"context-menu-item",onClick:i[9]||(i[9]=L=>Ct(B.value))},i[31]||(i[31]=[t("i",{class:"el-icon-document-copy"},null,-1),w(" 复制提交哈希 ")])),t("div",{class:"context-menu-item",onClick:i[10]||(i[10]=L=>zt(B.value))},i[32]||(i[32]=[t("i",{class:"el-icon-refresh-right"},null,-1),w(" 重置到该提交(hard) ")])),t("div",{class:"context-menu-item",onClick:i[11]||(i[11]=L=>nt(B.value))},i[33]||(i[33]=[t("i",{class:"el-icon-delete"},null,-1),w(" 撤销提交 (Revert) ")])),t("div",{class:"context-menu-item",onClick:i[12]||(i[12]=L=>dt(B.value))},i[34]||(i[34]=[t("i",{class:"el-icon-edit"},null,-1),w(" Cherry-Pick 到当前分支 ")]))],4),[[ls,xe.value]])],64)}}}),Io=Et(No,[["__scopeId","data-v-4ca4673a"]]),Ho="data:image/svg+xml,%3csvg%20width='200'%20height='200'%20viewBox='0%200%20200%20200'%20xmlns='http://www.w3.org/2000/svg'%3e%3c!--%20主分支%20--%3e%3cline%20x1='40'%20y1='40'%20x2='40'%20y2='160'%20stroke='%2334495e'%20stroke-width='8'%20stroke-linecap='round'%20/%3e%3c!--%20特性分支%20--%3e%3cpath%20d='M40,70%20C60,70%2080,90%2080,110%20L80,130'%20stroke='%233498db'%20stroke-width='8'%20stroke-linecap='round'%20stroke-linejoin='round'%20fill='none'%20/%3e%3c!--%20开发分支%20--%3e%3cpath%20d='M40,100%20C60,100%20100,110%20100,130%20L100,160'%20stroke='%232ecc71'%20stroke-width='8'%20stroke-linecap='round'%20stroke-linejoin='round'%20fill='none'%20/%3e%3c!--%20修复分支%20--%3e%3cpath%20d='M40,130%20C60,130%20120,140%20120,160'%20stroke='%23e74c3c'%20stroke-width='8'%20stroke-linecap='round'%20stroke-linejoin='round'%20fill='none'%20/%3e%3c!--%20合并点%20--%3e%3cpath%20d='M80,130%20C80,145%2060,145%2040,145'%20stroke='%233498db'%20stroke-width='8'%20stroke-linecap='round'%20stroke-linejoin='round'%20fill='none'%20/%3e%3c!--%20节点%20--%3e%3ccircle%20cx='40'%20cy='40'%20r='10'%20fill='%2334495e'%20/%3e%3ccircle%20cx='40'%20cy='70'%20r='10'%20fill='%2334495e'%20/%3e%3ccircle%20cx='40'%20cy='100'%20r='10'%20fill='%2334495e'%20/%3e%3ccircle%20cx='40'%20cy='130'%20r='10'%20fill='%2334495e'%20/%3e%3ccircle%20cx='40'%20cy='145'%20r='10'%20fill='%2334495e'%20/%3e%3ccircle%20cx='40'%20cy='160'%20r='10'%20fill='%2334495e'%20/%3e%3ccircle%20cx='80'%20cy='130'%20r='10'%20fill='%233498db'%20/%3e%3ccircle%20cx='100'%20cy='160'%20r='10'%20fill='%232ecc71'%20/%3e%3ccircle%20cx='120'%20cy='160'%20r='10'%20fill='%23e74c3c'%20/%3e%3c/svg%3e",Xo={class:"main-header"},Wo={class:"header-left"},Jo=["src"],qo={class:"header-info"},Yo={key:0,id:"user-info"},Zo={class:"user-name"},Ko={class:"user-email"},Qo={key:1,id:"user-info"},en={class:"directory-selector"},tn={class:"directory-display"},sn={class:"directory-icon"},an=["title"],ln={class:"directory-actions"},on={class:"main-container"},nn={key:0,class:"loading-container"},rn={class:"loading-spinner"},cn={key:1,class:"grid-layout"},un={class:"git-status-panel"},dn={key:0,class:"commit-form-panel"},fn={key:0,class:"card"},pn={class:"tips"},vn={key:1,class:"commit-form-panel"},mn={key:2,class:"log-list-panel"},gn={class:"dialog-footer"},hn={class:"main-footer"},yn={key:0,class:"branch-info"},_n={class:"branch-wrapper"},wn={key:1,class:"footer-right"},bn={class:"repo-url"},$n={class:"dialog-footer"},Cn={class:"directory-input-group"},kn={class:"recent-directories"},Sn={class:"dialog-footer"},Tn=Lt({__name:"App",setup(Ce){const p=c(""),V=c(null),v=c(null),g=bt(),O=cs(),A=c(!1),P=c("");function H(){O.config&&(p.value=`默认提交信息: ${O.config.defaultCommitMessage}`)}async function le(){try{const n=await(await fetch("/api/current_directory")).json();return P.value=n.directory||"未知目录",n}catch(y){return console.error("获取当前目录失败:",y),{directory:"未知目录",isGitRepo:!1}}}$t(async()=>{console.log("---------- 页面初始化开始 ----------");try{const y=await le();O.isLoaded||await O.loadConfig(),H(),g.isGitRepo=y.isGitRepo===!0,g.lastCheckedTime=Date.now(),g.isGitRepo?await Promise.all([g.getCurrentBranch(),g.getAllBranches(),g.getUserInfo(),g.getRemoteUrl()]):o.warning("当前目录不是Git仓库,部分功能将不可用")}catch(y){console.error("初始化失败:",y)}finally{A.value=!0,console.log("---------- 页面初始化完成 ----------"),setTimeout(()=>{R()},100)}});const G=c(!1),Q=c(""),M=c("");async function T(){await g.createBranch(Q.value,M.value)&&(G.value=!1,Q.value="",v.value&&v.value.refreshStatus(),V.value&&V.value.refreshLog())}function Y(){M.value=g.currentBranch,G.value=!0}async function X(y){await g.changeBranch(y)&&(v.value&&v.value.refreshStatus(),V.value&&V.value.refreshLog())}const K=c(!1),F=c(""),ye=c("");function ie(){F.value=g.userName,ye.value=g.userEmail,K.value=!0}async function D(){if(!F.value||!ye.value){o.warning("用户名和邮箱不能为空");return}await g.restoreUserConfig(F.value,ye.value)&&(K.value=!1)}async function te(){await g.clearUserConfig()&&(F.value="",ye.value="")}let U=!1,fe=!1,ee=0,x=0,h="",W="";function z(){const y=document.querySelector(".grid-layout");if(!y)return;const n=getComputedStyle(y).gridTemplateColumns.split(" "),J=getComputedStyle(y).gridTemplateRows.split(" ");if(n.length>=3&&J.length>=3){const j=parseFloat(n[0]),ve=parseFloat(n[2]),Le=j+ve,ge=j/Le,me=parseFloat(J[0]),Ae=parseFloat(J[2]),ke=me+Ae,be=me/ke;localStorage.setItem("zen-gitsync-layout-left-ratio",ge.toString()),localStorage.setItem("zen-gitsync-layout-top-ratio",be.toString()),console.log(`布局比例已保存 - 左侧: ${(ge*100).toFixed(0)}%, 上方: ${(be*100).toFixed(0)}%`)}}function R(){const y=document.querySelector(".grid-layout");if(!y)return;const n=localStorage.getItem("zen-gitsync-layout-left-ratio"),J=localStorage.getItem("zen-gitsync-layout-top-ratio");if(n){const j=parseFloat(n),ve=1-j;y.style.gridTemplateColumns=`${j}fr 8px ${ve}fr`,console.log(`已恢复左侧比例: ${(j*100).toFixed(0)}%`)}else y.style.gridTemplateColumns="1fr 8px 3fr";if(J){const j=parseFloat(J),ve=1-j;y.style.gridTemplateRows=`${j}fr 8px ${ve}fr`,console.log(`已恢复上方比例: ${(j*100).toFixed(0)}%`)}}function oe(y){var J;U=!0,ee=y.clientX;const n=document.querySelector(".grid-layout");h=getComputedStyle(n).gridTemplateColumns,(J=document.getElementById("v-resizer"))==null||J.classList.add("active"),document.addEventListener("mousemove",xe),document.addEventListener("mouseup",Se),y.preventDefault()}function xe(y){if(!U)return;const n=document.querySelector(".grid-layout"),J=y.clientX-ee,j=h.split(" ");if(j.length>=3){const ve=parseFloat(j[0]),Le=parseFloat(j[2]),ge=ve+Le,me=(ve+J/n.clientWidth*ge)/ge,Ae=1-me,ke=.1,be=.5;me<ke?n.style.gridTemplateColumns=`${ke}fr 8px ${1-ke}fr`:me>be?n.style.gridTemplateColumns=`${be}fr 8px ${1-be}fr`:n.style.gridTemplateColumns=`${me}fr 8px ${Ae}fr`}}function Se(){var y;U=!1,(y=document.getElementById("v-resizer"))==null||y.classList.remove("active"),document.removeEventListener("mousemove",xe),document.removeEventListener("mouseup",Se),z()}function Ve(y){var J;fe=!0,x=y.clientY;const n=document.querySelector(".grid-layout");W=getComputedStyle(n).gridTemplateRows,(J=document.getElementById("h-resizer"))==null||J.classList.add("active"),document.addEventListener("mousemove",B),document.addEventListener("mouseup",de),y.preventDefault()}function B(y){if(!fe)return;const n=document.querySelector(".grid-layout"),J=y.clientY-x,j=W.split(" ");if(j.length>=3){const ve=parseFloat(j[0]),Le=parseFloat(j[2]),ge=ve+Le,me=(ve+J/n.clientHeight*ge)/ge,Ae=1-me,ke=.2,be=.8;me<ke?n.style.gridTemplateRows=`${ke}fr 8px ${1-ke}fr`:me>be?n.style.gridTemplateRows=`${be}fr 8px ${1-be}fr`:n.style.gridTemplateRows=`${me}fr 8px ${Ae}fr`}}function de(){var y;fe=!1,(y=document.getElementById("h-resizer"))==null||y.classList.remove("active"),document.removeEventListener("mousemove",B),document.removeEventListener("mouseup",de),z()}const ce=c(!1),ae=c(""),je=c(!1),Pe=c([]);async function Oe(){if(!P.value){o.warning("当前目录路径为空");return}try{await navigator.clipboard.writeText(P.value),o.success("已复制目录路径")}catch(y){console.error("复制目录路径失败:",y),o.error(`复制失败: ${y.message}`)}}function Fe(){ae.value=P.value,ce.value=!0,lt()}async function lt(){try{const n=await(await fetch("/api/recent_directories")).json();n.success&&Array.isArray(n.directories)&&(Pe.value=n.directories)}catch(y){console.error("获取最近目录失败:",y)}}async function Je(){if(!ae.value){o.warning("目录路径不能为空");return}try{je.value=!0;const n=await(await fetch("/api/change_directory",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:ae.value})})).json();n.success?(o.success("已切换工作目录"),P.value=n.directory,ce.value=!1,await et(n.directory),g.isGitRepo=n.isGitRepo,n.isGitRepo?(await Promise.all([g.getCurrentBranch(),g.getAllBranches(),g.getUserInfo(),g.getRemoteUrl()]),v.value&&v.value.refreshStatus(),V.value&&V.value.refreshLog()):(o.warning("当前目录不是Git仓库,部分功能将不可用"),g.$reset())):o.error(n.error||"切换目录失败")}catch(y){o.error(`切换目录失败: ${y.message}`)}finally{je.value=!1}}async function et(y){try{await fetch("/api/save_recent_directory",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:y})})}catch(n){console.error("保存最近目录失败:",n)}}async function qe(){try{if(!P.value){o.warning("当前目录路径为空");return}const n=await(await fetch("/api/open_directory",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:P.value})})).json();n.success?o.success("已在文件管理器中打开目录"):n.error&&o.error(n.error)}catch(y){console.error("打开目录失败:",y),o.error(`打开目录失败: ${y.message}`)}}async function ze(){try{const n=await(await fetch("/api/browse_directory",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({currentPath:ae.value||P.value})})).json();n.success?pe(n):n.error&&o.error(n.error)}catch(y){console.error("浏览目录失败:",y),o.error(`浏览目录失败: ${y.message}`)}}function pe(y){!y||!y.items||Qe.alert(De("div",{class:"directory-browser"},[De("div",{class:"current-path"},[De("span",{class:"path-label"},"当前路径: "),De("span",{class:"path-value"},y.path)]),De("div",{class:"directory-list"},[y.parentPath?De("div",{class:"directory-item parent-dir",onClick:()=>{Ne(y.parentPath)}},[De("span",{class:"dir-icon"},De("svg",{class:"folder-icon",viewBox:"0 0 24 24",width:"20",height:"20",style:{fill:"#E6A23C"}},[De("path",{d:"M10 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-2-2z"})])),De("span",{class:"dir-name"},"返回上级目录")]):null,...y.items.map(n=>De("div",{class:"directory-item",onClick:()=>{Ne(n.path)}},[De("span",{class:"dir-icon"},De("svg",{class:"folder-icon",viewBox:"0 0 24 24",width:"20",height:"20",style:{fill:"#409EFF"}},[De("path",{d:"M10 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-2-2z"})])),De("span",{class:"dir-name"},n.name)]))])]),"浏览并选择目录",{confirmButtonText:"使用当前目录",customClass:"directory-browser-dialog",callback:n=>{n==="confirm"&&(ae.value=y.path)}})}async function Ne(y){try{Qe.close(),setTimeout(async()=>{try{const J=await(await fetch("/api/browse_directory",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({currentPath:y})})).json();J.success?pe(J):J.error&&o.error(J.error)}catch(n){console.error("浏览目录失败:",n),o.error(`浏览目录失败: ${n.message}`)}},100)}catch(n){console.error("处理目录选择时出错:",n),o.error(`处理目录选择时出错: ${n.message}`)}}return(y,n)=>{const J=Mt,j=Ue,ve=ns,Le=Nt,ge=rs,me=Vt,Ae=Bt,ke=is,be=Rt,ot=as,Ye=At;return m(),b(Te,null,[t("header",Xo,[t("div",Wo,[t("img",{src:l(Ho),alt:"Zen GitSync Logo",class:"logo"},null,8,Jo),n[14]||(n[14]=t("h1",null,"Zen GitSync UI",-1))]),t("div",qo,[l(g).userName&&l(g).userEmail?(m(),b("div",Yo,[n[15]||(n[15]=t("span",{class:"user-label"},"用户:",-1)),t("span",Zo,E(l(g).userName),1),t("span",Ko,"<"+E(l(g).userEmail)+">",1),s(j,{type:"primary",size:"small",onClick:ie,class:"user-settings-btn",circle:""},{default:a(()=>[s(J,null,{default:a(()=>[s(l(wt))]),_:1})]),_:1})])):(m(),b("div",Qo,[n[16]||(n[16]=t("span",{class:"user-label"},"用户: ",-1)),n[17]||(n[17]=t("span",{class:"user-warning"},"未配置",-1)),s(j,{type:"primary",size:"small",onClick:ie,class:"user-settings-btn",circle:""},{default:a(()=>[s(J,null,{default:a(()=>[s(l(wt))]),_:1})]),_:1})])),t("div",en,[t("div",tn,[t("div",sn,[s(J,null,{default:a(()=>[s(l(Jt))]),_:1})]),t("div",{class:"directory-path",title:P.value},E(P.value),9,an)]),t("div",ln,[s(j,{type:"primary",size:"small",onClick:Fe,class:"dir-button",circle:"",title:"切换目录"},{default:a(()=>[s(J,null,{default:a(()=>n[18]||(n[18]=[t("svg",{viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},[t("path",{fill:"currentColor",d:"M128 192v640h768V320H485.76L357.504 192H128zm-32-64h287.872l128.384 128H928a32 32 0 0 1 32 32v576a32 32 0 0 1-32 32H96a32 32 0 0 1-32-32V160a32 32 0 0 1 32-32z"})],-1)])),_:1})]),_:1}),s(j,{type:"success",size:"small",onClick:qe,class:"dir-button",circle:"",title:"在资源管理器中打开"},{default:a(()=>[s(J,null,{default:a(()=>n[19]||(n[19]=[t("svg",{viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},[t("path",{fill:"currentColor",d:"M928 444H820V330.4c0-17.7-14.3-32-32-32H473L355.7 186.2a8.15 8.15 0 0 0-5.5-2.2H96c-17.7 0-32 14.3-32 32v592c0 17.7 14.3 32 32 32h698c13 0 24.8-7.9 29.7-20l134-332c1.5-3.8 2.3-7.9 2.3-12 0-17.7-14.3-32-32-32zM136 256h188.5l119.6 114.4H748V444H238c-13 0-24.8 7.9-29.7 20L136 643.2V256zm635.3 512H159l103.3-256h612.4L771.3 768z"})],-1)])),_:1})]),_:1}),s(j,{type:"info",size:"small",onClick:Oe,class:"dir-button",circle:"",title:"复制路径"},{default:a(()=>[s(J,null,{default:a(()=>n[20]||(n[20]=[t("svg",{viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},[t("path",{fill:"currentColor",d:"M768 832a128 128 0 0 1-128 128H192A128 128 0 0 1 64 832V384a128 128 0 0 1 128-128v64a64 64 0 0 0-64 64v448a64 64 0 0 0 64 64h448a64 64 0 0 0 64-64h64z"}),t("path",{fill:"currentColor",d:"M384 128a64 64 0 0 0-64 64v448a64 64 0 0 0 64 64h448a64 64 0 0 0 64-64V192a64 64 0 0 0-64-64H384zm0-64h448a128 128 0 0 1 128 128v448a128 128 0 0 1-128 128H384a128 128 0 0 1-128-128V192A128 128 0 0 1 384 64z"})],-1)])),_:1})]),_:1})])])])]),t("main",on,[A.value?(m(),b("div",cn,[t("div",un,[s(Aa,{ref_key:"gitStatusRef",ref:v,"initial-directory":P.value},null,8,["initial-directory"])]),t("div",{class:"vertical-resizer",id:"v-resizer",onMousedown:oe},null,32),l(g).isGitRepo?(m(),b("div",dn,[!l(g).userName||!l(g).userEmail?(m(),b("div",fn,[n[26]||(n[26]=t("h2",null,"Git用户未配置",-1)),n[27]||(n[27]=t("p",null,"请先配置Git用户信息才能进行提交操作。",-1)),t("div",pn,[n[24]||(n[24]=t("h3",null,"您可以通过以下方式配置:",-1)),n[25]||(n[25]=t("ol",null,[t("li",null,"点击右上角的设置按钮,配置用户名和邮箱"),t("li",null,"或者使用命令行配置:"),t("div",{class:"code-block"},[w(' git config --global user.name "您的用户名"'),t("br"),w(' git config --global user.email "您的邮箱" ')])],-1)),s(j,{type:"primary",onClick:ie},{default:a(()=>n[23]||(n[23]=[w(" 立即配置 ")])),_:1})])])):(m(),se(Ql,{key:1}))])):(m(),b("div",vn,n[28]||(n[28]=[t("div",{class:"card",style:{padding:"20px"}},[t("h2",null,"Git仓库初始化"),t("p",null,"当前目录不是Git仓库,请先初始化Git仓库或切换到Git仓库目录。"),t("div",{class:"tips"},[t("h3",null,"可以使用以下命令初始化仓库:"),t("div",{class:"code-block"},"git init")])],-1)]))),t("div",{class:"horizontal-resizer",id:"h-resizer",onMousedown:Ve},null,32),l(g).isGitRepo?(m(),b("div",mn,[s(Io,{ref_key:"logListRef",ref:V},null,512)])):q("",!0),s(be,{modelValue:G.value,"onUpdate:modelValue":n[3]||(n[3]=r=>G.value=r),title:"创建新分支",width:"30%","destroy-on-close":""},{footer:a(()=>[t("span",gn,[s(j,{onClick:n[2]||(n[2]=r=>G.value=!1)},{default:a(()=>n[29]||(n[29]=[w("取消")])),_:1}),s(j,{type:"primary",onClick:T,loading:l(g).isCreatingBranch},{default:a(()=>n[30]||(n[30]=[w(" 创建 ")])),_:1},8,["loading"])])]),default:a(()=>[s(ke,{model:{newBranchName:Q.value,selectedBaseBranch:M.value}},{default:a(()=>[s(ge,{label:"新分支名称"},{default:a(()=>[s(Le,{modelValue:Q.value,"onUpdate:modelValue":n[0]||(n[0]=r=>Q.value=r),placeholder:"请输入新分支名称"},null,8,["modelValue"])]),_:1}),s(ge,{label:"基于分支"},{default:a(()=>[s(Ae,{modelValue:M.value,"onUpdate:modelValue":n[1]||(n[1]=r=>M.value=r),placeholder:"选择基础分支",style:{width:"100%"}},{default:a(()=>[(m(!0),b(Te,null,Ge(l(g).allBranches,r=>(m(),se(me,{key:r,label:r,value:r},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1})]),_:1},8,["model"])]),_:1},8,["modelValue"])])):(m(),b("div",nn,[s(ve,{class:"loading-card"},{default:a(()=>[t("div",rn,[s(J,{class:"is-loading"},{default:a(()=>n[21]||(n[21]=[t("svg",{viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},[t("path",{fill:"currentColor",d:"M512 64a32 32 0 0 1 32 32v192a32 32 0 0 1-64 0V96a32 32 0 0 1 32-32zm0 640a32 32 0 0 1 32 32v192a32 32 0 1 1-64 0V736a32 32 0 0 1 32-32zm448-192a32 32 0 0 1-32 32H736a32 32 0 1 1 0-64h192a32 32 0 0 1 32 32zm-640 0a32 32 0 0 1-32 32H96a32 32 0 0 1 0-64h192a32 32 0 0 1 32 32zM195.2 195.2a32 32 0 0 1 45.248 0L376.32 331.008a32 32 0 0 1-45.248 45.248L195.2 240.448a32 32 0 0 1 0-45.248zm452.544 452.544a32 32 0 0 1 45.248 0L828.8 783.552a32 32 0 0 1-45.248 45.248L647.744 692.992a32 32 0 0 1 0-45.248zM828.8 195.264a32 32 0 0 1 0 45.184L692.992 376.32a32 32 0 0 1-45.248-45.248l135.808-135.808a32 32 0 0 1 45.248 0zm-452.544 452.48a32 32 0 0 1 0 45.248L240.448 828.8a32 32 0 0 1-45.248-45.248l135.808-135.808a32 32 0 0 1 45.248 0z"})],-1)])),_:1})]),n[22]||(n[22]=t("div",{class:"loading-text"},"加载中...",-1))]),_:1})]))]),t("footer",hn,[l(g).currentBranch?(m(),b("div",yn,[t("div",_n,[n[32]||(n[32]=t("span",{class:"branch-label"},"当前分支:",-1)),s(Ae,{modelValue:l(g).currentBranch,"onUpdate:modelValue":n[4]||(n[4]=r=>l(g).currentBranch=r),size:"small",onChange:X,loading:l(g).isChangingBranch,class:"branch-select"},{default:a(()=>[(m(!0),b(Te,null,Ge(l(g).allBranches,r=>(m(),se(me,{key:r,label:r,value:r},null,8,["label","value"]))),128))]),_:1},8,["modelValue","loading"]),s(j,{type:"primary",size:"small",onClick:Y,class:"create-branch-btn"},{default:a(()=>[s(J,null,{default:a(()=>[s(l(Gs))]),_:1}),n[31]||(n[31]=w(" 新建分支 "))]),_:1})])])):q("",!0),l(g).remoteUrl?(m(),b("div",wn,[n[34]||(n[34]=t("span",{class:"repo-url-label"},"远程仓库:",-1)),t("span",bn,E(l(g).remoteUrl),1),s(j,{type:"primary",circle:"",size:"small",onClick:n[5]||(n[5]=r=>l(g).copyRemoteUrl()),class:"copy-url-btn",title:"复制仓库地址"},{default:a(()=>[s(J,null,{default:a(()=>n[33]||(n[33]=[t("svg",{viewBox:"0 0 1024 1024",xmlns:"http://www.w3.org/2000/svg"},[t("path",{fill:"currentColor",d:"M768 832a128 128 0 0 1-128 128H192A128 128 0 0 1 64 832V384a128 128 0 0 1 128-128v64a64 64 0 0 0-64 64v448a64 64 0 0 0 64 64h448a64 64 0 0 0 64-64h64z"}),t("path",{fill:"currentColor",d:"M384 128a64 64 0 0 0-64 64v448a64 64 0 0 0 64 64h448a64 64 0 0 0 64-64V192a64 64 0 0 0-64-64H384zm0-64h448a128 128 0 0 1 128 128v448a128 128 0 0 1-128 128H384a128 128 0 0 1-128-128V192A128 128 0 0 1 384 64z"})],-1)])),_:1})]),_:1})])):q("",!0)]),s(be,{modelValue:K.value,"onUpdate:modelValue":n[9]||(n[9]=r=>K.value=r),title:"Git用户设置",width:"30%","destroy-on-close":""},{footer:a(()=>[t("span",$n,[s(j,{type:"danger",onClick:te},{default:a(()=>n[36]||(n[36]=[w(" 清除配置 ")])),_:1}),s(j,{onClick:n[8]||(n[8]=r=>K.value=!1)},{default:a(()=>n[37]||(n[37]=[w("取消")])),_:1}),s(j,{type:"primary",onClick:D},{default:a(()=>n[38]||(n[38]=[w(" 保存 ")])),_:1})])]),default:a(()=>[s(ke,null,{default:a(()=>[s(ge,{label:"用户名"},{default:a(()=>[s(Le,{modelValue:F.value,"onUpdate:modelValue":n[6]||(n[6]=r=>F.value=r),placeholder:"请输入Git用户名"},null,8,["modelValue"])]),_:1}),s(ge,{label:"邮箱"},{default:a(()=>[s(Le,{modelValue:ye.value,"onUpdate:modelValue":n[7]||(n[7]=r=>ye.value=r),placeholder:"请输入Git邮箱"},null,8,["modelValue"])]),_:1}),s(ge,null,{default:a(()=>[s(ot,{type:"info",closable:!1,"show-icon":""},{default:a(()=>n[35]||(n[35]=[w(" 这些设置将影响全局Git配置,对所有Git仓库生效。 ")])),_:1})]),_:1})]),_:1})]),_:1},8,["modelValue"]),s(be,{modelValue:ce.value,"onUpdate:modelValue":n[13]||(n[13]=r=>ce.value=r),title:"切换工作目录",width:"50%","destroy-on-close":""},{footer:a(()=>[t("span",Sn,[s(j,{onClick:n[11]||(n[11]=r=>ce.value=!1)},{default:a(()=>n[40]||(n[40]=[w("取消")])),_:1}),s(j,{type:"primary",onClick:n[12]||(n[12]=r=>Je()),loading:je.value},{default:a(()=>n[41]||(n[41]=[w(" 切换 ")])),_:1},8,["loading"])])]),default:a(()=>[s(ke,null,{default:a(()=>[s(ge,{label:"目录路径"},{default:a(()=>[t("div",Cn,[s(Le,{modelValue:ae.value,"onUpdate:modelValue":n[10]||(n[10]=r=>ae.value=r),placeholder:"请输入目录路径"},null,8,["modelValue"]),s(j,{type:"primary",onClick:ze},{default:a(()=>[s(J,null,{default:a(()=>[s(l(Jt))]),_:1}),n[39]||(n[39]=w(" 浏览 "))]),_:1})])]),_:1}),Pe.value.length>0?(m(),se(ge,{key:0,label:"常用目录"},{default:a(()=>[t("div",kn,[(m(!0),b(Te,null,Ge(Pe.value,(r,f)=>(m(),se(Ye,{key:f,class:"recent-dir-tag",onClick:N=>ae.value=r,effect:"plain"},{default:a(()=>[w(E(r),1)]),_:2},1032,["onClick"]))),128))])]),_:1})):q("",!0)]),_:1})]),_:1},8,["modelValue"])],64)}}}),xn=Et(Tn,[["__scopeId","data-v-98ed32bc"]]),us=Us(xn);us.use(js());us.mount("#app");