feat(branches): add Merge Branch dialog and confirm flow
Introduce a modal dialog to configure and confirm branch merges. It replaces the old prompt-based workflow and lets users choose a merge strategy with localized labels. Confirming the dialog runs the merge, refreshes views, and clears the pending merge target. - Add a merge dialog UI with strategy options and keyboard support. - Replace prompt-based merge flow with a state-driven confirm dialog. - Include CSS for dialog layout, responsive sizing, and styling.
This commit is contained in:
+42
@@ -3885,6 +3885,13 @@
|
||||
max-height: calc(100vh - 32px);
|
||||
overflow: auto;
|
||||
}
|
||||
.merge-branch-dialog {
|
||||
display: block;
|
||||
width: min(590px, calc(100vw - 32px));
|
||||
height: auto;
|
||||
max-height: calc(100vh - 32px);
|
||||
overflow: auto;
|
||||
}
|
||||
.rename-branch-dialog {
|
||||
display: block;
|
||||
width: min(520px, calc(100vw - 32px));
|
||||
@@ -4207,6 +4214,41 @@
|
||||
.init-repository-error { color: var(--color-danger, #ff6b78) !important; }
|
||||
.init-repository-actions { padding-top: 2px; }
|
||||
.init-repository-actions > button { font-size: 11.5px; }
|
||||
.merge-branch-header { padding: 15px 17px; }
|
||||
.merge-branch-heading { display: flex; align-items: center; gap: 11px; }
|
||||
.merge-branch-heading h2 { margin: 2px 0 0; color: var(--color-ink); font-size: 15px; line-height: 1.25; }
|
||||
.merge-branch-icon {
|
||||
display: grid;
|
||||
place-items: center;
|
||||
width: 36px;
|
||||
height: 36px;
|
||||
flex: 0 0 auto;
|
||||
border: 1px solid color-mix(in srgb, var(--color-accent) 34%, var(--color-border));
|
||||
border-radius: 9px;
|
||||
color: var(--color-accent);
|
||||
background: color-mix(in srgb, var(--color-accent) 10%, var(--color-surface-raised));
|
||||
}
|
||||
.merge-branch-form { display: flex; flex-direction: column; gap: 15px; padding: 17px; }
|
||||
.merge-branch-route { display: grid; grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr); align-items: center; gap: 12px; padding: 11px 12px; border: 1px solid var(--color-border-subtle); border-radius: 9px; background: var(--color-surface-raised); }
|
||||
.merge-branch-route > div { display: grid; gap: 3px; min-width: 0; }
|
||||
.merge-branch-route > div:last-child { text-align: right; }
|
||||
.merge-branch-route span { color: var(--color-ink-faint); font-size: 9px; font-weight: 800; letter-spacing: .05em; text-transform: uppercase; }
|
||||
.merge-branch-route strong { overflow: hidden; color: var(--color-ink); font-family: var(--font-mono); font-size: 11.5px; text-overflow: ellipsis; white-space: nowrap; }
|
||||
.merge-branch-route > svg { color: var(--color-accent); }
|
||||
.merge-strategy-fieldset { min-width: 0; margin: 0; padding: 0; border: 0; }
|
||||
.merge-strategy-fieldset legend { margin-bottom: 7px; color: var(--color-ink-faint); font-size: 9.5px; font-weight: 800; letter-spacing: .05em; text-transform: uppercase; }
|
||||
.merge-strategy-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; }
|
||||
.merge-strategy-option { display: grid; grid-template-columns: auto minmax(0, 1fr); align-items: start; gap: 9px; min-width: 0; padding: 11px; border: 1px solid var(--color-border-subtle); border-radius: 8px; background: var(--color-surface-dim); cursor: pointer; }
|
||||
.merge-strategy-option:hover { border-color: var(--color-border); background: var(--color-surface-hover); }
|
||||
.merge-strategy-option.active { border-color: color-mix(in srgb, var(--color-accent) 52%, var(--color-border)); background: color-mix(in srgb, var(--color-accent) 8%, var(--color-surface-raised)); box-shadow: inset 2px 0 0 var(--color-accent); }
|
||||
.merge-strategy-option > input { position: absolute; width: 1px; height: 1px; opacity: 0; pointer-events: none; }
|
||||
.merge-strategy-check { display: grid; place-items: center; width: 17px; height: 17px; margin-top: 1px; border: 1px solid var(--color-border-input); border-radius: 50%; color: #fff; background: var(--color-surface-raised); }
|
||||
.merge-strategy-option.active .merge-strategy-check { border-color: var(--color-accent); background: var(--color-accent); }
|
||||
.merge-strategy-copy { display: grid; gap: 3px; min-width: 0; }
|
||||
.merge-strategy-copy strong { color: var(--color-ink); font-size: 11.5px; }
|
||||
.merge-strategy-copy small { color: var(--color-ink-faint); font-size: 9.5px; line-height: 1.4; }
|
||||
.merge-branch-actions { display: flex; justify-content: flex-end; gap: 8px; padding-top: 1px; }
|
||||
.merge-branch-actions > button { font-size: 11.5px; }
|
||||
.rename-branch-form {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
Reference in New Issue
Block a user