diff --git a/src/App.svelte b/src/App.svelte index c643360..428ad44 100644 --- a/src/App.svelte +++ b/src/App.svelte @@ -5537,6 +5537,7 @@ {canCompare} {isBusy} {operation} + language={appLanguage} onCompareFromChange={(val) => { compareFrom = val; }} onCompareToChange={(val) => { compareTo = val; }} onCompare={compareSelectedTargets} @@ -5551,10 +5552,11 @@ {comparison} {selectedDiffPath} {isBusy} + language={appLanguage} fromLabel={comparisonFromLabel} toLabel={comparisonToLabel} highlightQuery={diffHighlightQuery} - restoreLabel={pendingRestoreFile ? "Restore file" : ""} + restoreLabel={pendingRestoreFile ? (appLanguage === "de" ? "Datei wiederherstellen" : "Restore file") : ""} onClose={closeCompareDialog} onRestore={restorePreviewedCommitFile} onSelectFile={selectDiffFile} diff --git a/src/app.css b/src/app.css index 325beb2..4767dfd 100644 --- a/src/app.css +++ b/src/app.css @@ -324,7 +324,14 @@ .select-menu-option.selected { color: var(--color-ink); } .select-menu-option:disabled { cursor: not-allowed; opacity: 0.42; } - .compare-target-select .select-menu-trigger { height: 40px; min-height: 40px; } + .compare-target-select .select-menu-trigger { + height: 38px; + min-height: 38px; + padding: 0 11px; + border-color: var(--color-border); + font-size: 12px; + font-weight: 700; + } .btn-primary { border-color: rgba(111, 140, 255, 0.72); @@ -3323,17 +3330,16 @@ .compare-form { display: grid; - grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr) auto; + grid-template-columns: minmax(0, 1fr) 40px minmax(0, 1fr); align-items: end; - gap: 8px; - padding: 10px 12px; - border-bottom: 1px solid var(--color-border-subtle); + gap: 10px; } .compare-field { display: grid; gap: 4px; min-width: 0; } .compare-field span { color: var(--color-ink-faint); font-size: 10.5px; font-weight: 800; text-transform: uppercase; letter-spacing: 0.05em; } - .compare-arrow { margin-bottom: 6px; color: var(--color-ink-faint); } .compare-target-help { - margin: 12px; + display: flex; + align-items: flex-start; + gap: 8px; padding: 10px 12px; border: 1px solid color-mix(in srgb, var(--color-accent) 20%, var(--color-border-subtle)); border-radius: 8px; @@ -3342,6 +3348,9 @@ font-size: 11.5px; line-height: 1.5; } + .compare-target-help svg { flex: 0 0 auto; margin-top: 1px; color: var(--color-accent); } + .compare-target-warning { border-color: color-mix(in srgb, #e0a040 30%, var(--color-border-subtle)); background: color-mix(in srgb, #e0a040 7%, var(--color-surface-raised)); } + .compare-target-warning svg { color: #e0a040; } .compare-summary { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 10px; padding: 10px 12px; } .compare-range { display: flex; align-items: center; gap: 7px; color: var(--color-ink-muted); } @@ -3487,6 +3496,21 @@ width: min(1560px, calc(100vw - 32px)); height: min(940px, calc(100vh - 32px)); } + .compare-dialog-head { + display: flex; + align-items: center; + justify-content: space-between; + gap: 14px; + min-height: 70px; + padding: 14px 18px; + border-bottom: 1px solid var(--color-border-subtle); + background: var(--app-dialog-chrome); + } + .compare-dialog-title { display: flex; align-items: center; gap: 12px; min-width: 0; } + .compare-dialog-title > div { min-width: 0; } + .compare-dialog-mark { display: grid; place-items: center; flex: 0 0 auto; width: 38px; height: 38px; border: 1px solid color-mix(in srgb, var(--color-accent) 28%, var(--color-border)); border-radius: 10px; color: var(--color-accent); background: color-mix(in srgb, var(--color-accent) 9%, transparent); } + .compare-dialog-title h2 { margin: 0; color: var(--color-accent); font-size: 18px; font-weight: 700; line-height: 1.2; } + .compare-dialog-title p { margin: 3px 0 0; color: var(--color-ink); font-size: 11px; font-weight: 400; line-height: 1.35; } .global-search-dialog { width: min(1180px, calc(100vw - 32px)); height: min(840px, calc(100vh - 32px)); @@ -3502,12 +3526,22 @@ height: min(860px, calc(100vh - 32px)); } .compare-select-dialog { - display: block; + grid-template-rows: auto minmax(0, 1fr); width: min(720px, calc(100vw - 32px)); height: auto; max-height: calc(100vh - 32px); - overflow: auto; + overflow: hidden; } + .compare-select-shell { display: grid; grid-template-rows: minmax(0, 1fr) auto; min-height: 0; } + .compare-select-body { display: grid; align-content: start; gap: 12px; min-height: 0; padding: 18px 20px 20px; overflow: auto; } + .compare-target-panel { display: grid; gap: 16px; padding: 16px; border: 1px solid var(--color-border-subtle); border-radius: 12px; background: color-mix(in srgb, var(--app-settings-row-bg) 72%, transparent); } + .compare-target-heading h3 { margin: 0; color: var(--color-accent); font-size: 18px; font-weight: 700; line-height: 1.2; } + .compare-target-heading p { margin: 4px 0 0; color: var(--color-ink); font-size: 11px; font-weight: 400; line-height: 1.45; } + .compare-arrow-shell { display: grid; place-items: center; width: 40px; height: 40px; border: 1px solid var(--color-border-subtle); border-radius: 9px; color: var(--color-accent); background: var(--color-surface-raised); } + .compare-select-footer { display: flex; align-items: center; justify-content: space-between; gap: 16px; min-height: 62px; padding: 11px 16px; border-top: 1px solid var(--color-border-subtle); background: var(--app-dialog-chrome); } + .compare-select-footer > span { color: var(--color-ink-faint); font-size: 9.5px; } + .compare-select-footer > div { display: flex; gap: 8px; } + .compare-select-footer button { min-height: 32px; } .interactive-rebase-dialog, .reflog-dialog { grid-template-rows: auto minmax(0, 1fr) auto; @@ -4066,6 +4100,8 @@ .compare-dialog .dialog-body { grid-template-columns: minmax(260px, 320px) minmax(0, 1fr); } .dialog-files { display: grid; align-content: start; gap: 4px; padding: 8px; overflow: auto; border-right: 1px solid var(--color-border-subtle); background: var(--app-dialog-chrome); } + .compare-files-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; min-height: 36px; margin: -8px -8px 4px; padding: 8px 12px; border-bottom: 1px solid var(--color-border-subtle); color: var(--color-ink-dim); font-size: 10px; font-weight: 850; letter-spacing: .05em; text-transform: uppercase; } + .compare-files-head strong { display: grid; place-items: center; min-width: 22px; height: 20px; padding-inline: 5px; border-radius: 10px; color: var(--color-accent); background: color-mix(in srgb, var(--color-accent) 12%, transparent); font-size: 9px; } .dialog-file-row { display: grid; @@ -6927,7 +6963,15 @@ input:focus, textarea:focus, select:focus { box-shadow: 0 0 0 3px color-mix(in s .repo-summary { height: 40px; } .change-lanes { grid-template-columns: 1fr; } .compare-form { grid-template-columns: 1fr; } - .compare-arrow { display: none; } + .compare-arrow-shell { width: 100%; height: 30px; } + .compare-arrow-shell svg { transform: rotate(90deg); } + .compare-dialog-head { min-height: 60px; padding: 10px 12px; } + .compare-dialog-mark { width: 34px; height: 34px; } + .compare-dialog-title h2 { font-size: 15px; } + .compare-select-body { padding: 14px; } + .compare-target-panel { padding: 13px; } + .compare-select-footer > span { display: none; } + .compare-select-footer { justify-content: flex-end; } .dialog-body { grid-template-columns: 1fr; grid-template-rows: minmax(120px, 0.4fr) minmax(0, 1fr); } .compare-dialog .dialog-body { grid-template-columns: 1fr; grid-template-rows: minmax(120px, 0.4fr) minmax(0, 1fr); } .global-search-options { grid-template-columns: 1fr; } diff --git a/src/lib/components/CompareDialog.svelte b/src/lib/components/CompareDialog.svelte index 852352d..aecd7a9 100644 --- a/src/lib/components/CompareDialog.svelte +++ b/src/lib/components/CompareDialog.svelte @@ -1,5 +1,5 @@