From 400dedcc5f4e30b123fac6225af7ed4f333b654e Mon Sep 17 00:00:00 2001 From: Peng Ding Date: Sun, 13 Sep 2026 04:41:57 -0500 Subject: [PATCH] feat: add branch selector dropdown with dirty-state guard --- src/tinyleaf/static/css/app.css | 24 +++ src/tinyleaf/static/index.html | 13 +- src/tinyleaf/static/js/app.js | 266 ++++++++++++++++++++++++++++++++ 3 files changed, 302 insertions(+), 1 deletion(-) diff --git a/src/tinyleaf/static/css/app.css b/src/tinyleaf/static/css/app.css index 1b1df84..8455a35 100644 --- a/src/tinyleaf/static/css/app.css +++ b/src/tinyleaf/static/css/app.css @@ -628,6 +628,30 @@ tr.diff-row-ctx .diff-code { color: var(--text); } .git-log-author { font-size: 11px; color: var(--fg-muted); margin-top: 1px; } .git-log-empty { padding: 20px; text-align: center; color: var(--fg-muted); font-size: 12px; } +/* ── Branch Selector ── */ +.git-branch-btn { background: none; border: 1px solid var(--border); border-radius: 4px; color: var(--text); padding: 2px 8px; cursor: pointer; display: flex; align-items: center; gap: 4px; font-size: 12px; max-width: 180px; } +.git-branch-btn:hover { border-color: var(--accent); } +.git-branch-btn #git-branch { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } +.git-branch-arrow { font-size: 8px; color: var(--text-dim); } +.git-branch-dropdown { position: absolute; top: 100%; left: 0; z-index: 100; background: var(--bg-card); border: 1px solid var(--border); border-radius: 6px; box-shadow: 0 4px 12px rgba(0,0,0,0.15); min-width: 200px; max-height: 300px; overflow-y: auto; margin-top: 4px; } +.git-branch-item { padding: 6px 12px; cursor: pointer; font-size: 12px; display: flex; align-items: center; gap: 6px; } +.git-branch-item:hover { background: var(--bg-hover); } +.git-branch-item.current { color: var(--accent); font-weight: 600; } +.git-branch-item .branch-name { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } +.git-branch-item .branch-delete { opacity: 0; color: var(--red); cursor: pointer; font-size: 10px; } +.git-branch-item:hover .branch-delete { opacity: 0.7; } +.git-branch-item:hover .branch-delete:hover { opacity: 1; } +.git-branch-section-label { padding: 4px 12px; font-size: 10px; color: var(--text-dim); text-transform: uppercase; letter-spacing: 0.5px; } +.git-branch-dropdown-footer { border-top: 1px solid var(--border); padding: 6px; } +.git-branch-dropdown-footer button { width: 100%; text-align: left; } + +/* ── Dirty State Dialog ── */ +.git-dialog-overlay { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0,0,0,0.4); z-index: 200; display: flex; align-items: center; justify-content: center; } +.git-dialog { background: var(--bg-card); border: 1px solid var(--border); border-radius: 8px; padding: 20px; min-width: 320px; max-width: 420px; box-shadow: 0 8px 24px rgba(0,0,0,0.2); } +.git-dialog h3 { margin: 0 0 12px 0; font-size: 14px; } +.git-dialog p { margin: 0 0 16px 0; font-size: 13px; color: var(--text-dim); } +.git-dialog-buttons { display: flex; gap: 8px; justify-content: flex-end; } + /* ── Editor Tab Bar ── */ #editor-tabs { display: flex; diff --git a/src/tinyleaf/static/index.html b/src/tinyleaf/static/index.html index 9fcca53..d2dce77 100644 --- a/src/tinyleaf/static/index.html +++ b/src/tinyleaf/static/index.html @@ -89,7 +89,18 @@

Projects