{#if show}
{ if (e.key === 'Escape') closeModal(); }} role="dialog" tabindex="-1" aria-label={`${$t.git?.management || 'Управление Git'}: ${dashboardTitle}`}>

{$t.git?.management || 'Управление Git'}

{dashboardTitle} · slug: {dashboardId}

{#if model.gitError} {/if}
{#if model.checkingStatus}
{:else if !model.initialized} model.handleCreateRemoteRepo()} onInit={() => model.handleInit()} /> {:else}
{#if model.hasOriginConfigMismatch}
{$t.git?.git_server_mismatch_title || 'Git server mismatch detected'}
{($t.git?.git_server_mismatch_desc || 'Configured: {configured}, origin: {origin}.').replace('{configured}', model.configHost).replace('{origin}', model.originHost)}
{$t.git?.git_server_mismatch_hint || 'Push/Pull будут отправлять на настроенный сервер, а не на origin. Обновите конфигурацию в Настройках → Git, если это не intended.'}
{$t.git?.git_server_mismatch_fix || 'Настроить'}
{/if} {#if model.commitCompleted}
{$t.git?.commit_success_banner || '✅ Изменения закоммичены.'} {$t.git?.commit_next_step || 'Следующий шаг: вкладка «Релиз» для продвижения между ветками или «Серверные операции» для Pull/Push/Deploy.'}
{/if}
{$t.git?.branch_label || 'Ветка:'}
model.handleBranchChanged(event)} onmerge={handleOpenMergeDialog} />
{#if model.activeTab === 'workspace'} model.handleSync()} onGenerateMessage={() => model.handleGenerateMessage()} onCommit={() => model.handleCommit()} /> {:else if model.activeTab === 'release'} model.handlePromote()} onDeploy={() => model.openDeployModal()} onOpenHistory={() => (model.activeTab = 'workspace')} /> {:else} model.handlePull()} onPush={() => model.handlePush()} /> {/if}
{/if}
model.loadMergeRecoveryState()} onCopyCommands={() => model.handleCopyUnfinishedMergeCommands()} onOpenConflictResolver={() => model.handleOpenConflictResolver()} onAbortMerge={() => model.handleAbortUnfinishedMerge()} onContinueMerge={() => model.handleContinueUnfinishedMerge()} onClose={() => model.closeUnfinishedMergeDialog()} />
{/if} model.handleResolveConflicts(e)} /> {#if model.showDeployConfirm}
{ model.showDeployConfirm = false; }} onkeydown={(e) => { if (e.key === 'Escape') model.showDeployConfirm = false; }}>
e.stopPropagation()}>

{$t.git?.deploy || 'Deploy to Environment'}

{$t.git?.deploy_confirm_intro || 'Подтвердите деплой. Введите slug дашборда:'} {model.deployConfirmSlug}

{$t.git?.deploy_confirm_dashboard || 'Dashboard'}
{dashboardTitle || dashboardId}
{$t.git?.deploy_confirm_branch || 'Source branch'}
{model.currentBranch}
{$t.git?.deploy_confirm_stage || 'Lifecycle stage'}
{model.currentWorkflowStage}
{$t.git?.deploy_confirm_target || 'Target'}
{model.preferredDeployTargetStage || model.currentEnvStage || 'PROD'}
{$t.git?.deploy_confirm_changes || 'Changed files'}
{model.changedFilesCount}
{#if model.workspaceStatus?.last_commit_hash}
{$t.git?.deploy_confirm_last_commit || 'Last commit'}
{model.workspaceStatus.last_commit_hash.slice(0, 8)}
{/if} {#if model.workspaceStatus?.last_commit_author}
{$t.git?.deploy_confirm_author || 'Author'}
{model.workspaceStatus.last_commit_author}
{/if} {#if model.workspaceStatus?.last_commit_message}
{$t.git?.deploy_confirm_message || 'Commit message'}
{model.workspaceStatus.last_commit_message}
{/if}
{ if (e.key === 'Enter' && deployConfirmInput.trim()) model.confirmDeploy(deployConfirmInput); }} autofocus />
{/if} model.refreshBranches()} /> model.refreshBranches()} />