Gitty
activeView === "repository" && sameRepoPath(activeRepoPath, path)} onSelect={selectRepoTab} onClose={closeRepoTab} onContextMenu={openRepoTabContextMenu} onAdd={chooseRepositoryFolder} /> {#if workspaceActive} {/if} {#if repoTabContextMenu} {@const menu = repoTabContextMenu} {@const contextTab = repoTabs.find((tab) => sameRepoPath(tab.path, menu.path))} {@const contextIndex = repoTabIndex(menu.path)} {#if contextTab} {/if} {/if} {#if errorMessage} {#key errorMessage}
{/key} {/if} {#if operation && operation !== "Opening repository" && !hasRepository}
{/if} {#if workspaceActive && mergeInProgress}
{:else if workspaceActive && hasConflicts && !rebaseInProgress && !cherryPickInProgress} {/if} {#if workspaceActive && rebaseInProgress}
{/if} {#if workspaceActive && cherryPickInProgress}
{/if} {#if activeView === "management"}
Repository Management

Repositories

Open repositories

{openRepoRows.length}
{#if openRepoRows.length === 0}
No open repositories.
{:else}
{#each openRepoRows as repo (repo.path)}
{/each}
{/if}

Recent repositories

{recentRepoRows.length}
{#if recentRepoRows.length === 0}
No recent repositories.
{:else}
{#each recentRepoRows as repo (repo.path)}
{/each}
{/if}

Favorites

{favoriteRepoRows.length}
{#if favoriteRepoRows.length === 0}
Mark repositories with the star to keep them here.
{:else}
{#each favoriteRepoRows as repo (repo.path)}
{/each}
{/if}
{:else}
{#if currentBranchIsLocalOnly} {:else} {#if status?.upstream}{status.upstream}{/if} {status?.ahead ?? 0} ahead {status?.behind ?? 0} behind {/if}
{/if}
{#if workspaceActive} {status?.clean ? "Working tree clean" : `${changedFiles.length} changed ${changedFiles.length === 1 ? "file" : "files"}`} {/if} {#if workspaceActive} {#if currentBranchIsLocalOnly} {:else} ↑ {status?.ahead ?? 0} ↓ {status?.behind ?? 0} {/if} Auto {/if} {#if appVersion}Gitty v{appVersion}{/if}
{#if commandPaletteOpen} { commandPaletteOpen = false; }} onCheckoutBranch={checkout} onOpenFile={openFileFromCommandPalette} onSelectCommit={selectCommitFromCommandPalette} onFetch={fetchRepo} onPull={pullRepo} onPush={pushRepo} onRefresh={refreshRepo} onOpenSearch={openGlobalSearchDialog} onOpenCompare={openCompareSelect} onOpenReflog={openReflog} onOpenInteractiveRebase={openInteractiveRebase} onOpenWorktrees={openWorktreeDialog} onOpenSyncSettings={openSyncOptions} onOpenSettings={openAppSettings} onOpenAiSettings={openAiSettings} onOpenHelp={openHelp} /> {/if} {#if updateToastOpen} {/if} {#if analyticsNoticeOpen} {/if} {#if appSettingsOpen} refreshDetectedExternalTools(false)} onSave={saveAppSettings} onClose={() => { appSettingsOpen = false; }} /> {/if} {#if helpOpen} {#await import("./lib/components/HelpOverlay.svelte") then module} { helpOpen = false; }} /> {/await} {/if} {#if aiReviewOpen && aiReviewResult} { aiReviewOpen = false; }} /> {/if} {#if aiCommitSplitOpen && aiCommitPlan} { if (!commitAiSplitting) aiCommitSplitOpen = false; }} /> {/if} {#if linePatchOpen && linePatchFile} {#await import("./lib/components/LinePatchDialog.svelte") then module} {/await} {/if} {#if blameOpen} {#await import("./lib/components/BlameDialog.svelte") then module} {/await} {/if} {#if pendingDiscard} {/if} {#if fileHistoryDialogOpen} {#await import("./lib/components/FileHistoryDialog.svelte") then module} {/await} {/if} {#if globalSearchOpen} {#await import("./lib/components/GlobalSearchDialog.svelte") then module} {/await} {/if} {#if worktreeDialogOpen} {#await import("./lib/components/WorktreeDialog.svelte") then module} {/await} {/if} {#if newBranchCommit} { newBranchCommit = null; }} /> {/if} {#if commitNoteTarget} syncActiveCommitNotes(remote, "fetch")} onPush={(remote) => syncActiveCommitNotes(remote, "push")} onClose={closeCommitNoteDialog} /> {/if} {#if renameBranchTarget} { renameBranchTarget = null; }} /> {/if} {#if deleteBranchTarget} {/if} {#if aiSettingsOpen} {#await import("./lib/components/AiSettingsDialog.svelte") then module} { aiSettingsOpen = false; }} /> {/await} {/if} {#if interactiveRebaseOpen} {#await import("./lib/components/InteractiveRebaseDialog.svelte") then module} { if (!isBusy) interactiveRebaseOpen = false; }} /> {/await} {/if} {#if reflogOpen} entry.selector === "HEAD@{0}")?.hash ?? ""} isLoading={reflogLoading} {isBusy} {operation} error={reflogError} onPreview={previewReflogEntry} onRestore={recoverReflogEntry} onClose={() => { if (!isBusy) reflogOpen = false; }} /> {/if} {#if compareSelectOpen} { compareFrom = val; }} onCompareToChange={(val) => { compareTo = val; }} onCompare={compareSelectedTargets} onClose={() => { compareSelectOpen = false; }} /> {/if} {#if compareDialogOpen && comparison} {#await import("./lib/components/CompareDialog.svelte") then module} {/await} {/if} {#if credDialogOpen && credDialogAction} { credDialogOpen = false; credDialogAction = null; credDialogError = ""; credDialogKey = null; credDialogUsername = ""; credDialogMode = "credentials"; }} /> {/if} {#if syncSettingsOpen} branch.name)} currentBranch={status?.current_branch ?? ""} currentUpstream={status?.upstream ?? ""} strategy={pullStrategy} {selectedRemote} {isBusy} language={appLanguage} onSaveSync={saveSyncSettings} onAddRemote={addSyncRemote} onUpdateRemote={updateSyncRemote} onRemoveRemote={removeSyncRemote} onClose={() => { if (!isBusy) syncSettingsOpen = false; }} /> {/if} {#if cloneDialogOpen} { if (!isBusy) cloneDialogOpen = false; }} /> {/if} {#if openingRepo} {/if} {#if cloningRepo} {/if} {#if resolveDialogOpen} {#await import("./lib/components/ResolveDialog.svelte") then module} { resolveDialogOpen = false; }} onSelectFile={selectConflictFile} onMarkResolved={handleMarkResolved} onApply={applyPreparedResolutions} onExternalMerge={openConflictInExternalMerge} /> {/await} {/if}