diff --git a/frontend/src/components/HistoryPanel.vue b/frontend/src/components/HistoryPanel.vue index bd2385b..5e4cd21 100644 --- a/frontend/src/components/HistoryPanel.vue +++ b/frontend/src/components/HistoryPanel.vue @@ -1,6 +1,6 @@ @@ -128,7 +193,25 @@ onMounted(loadVersions); :class="['history-item', { selected: selectedVersion?.id === v.id }]" @click="selectVersionItem(v)" > -
{{ v.title || 'Untitled' }}
+
+ + + {{ v.title || 'Untitled' }} +
+
{{ v.pin_label }}
{{ formatDate(v.created_at) }}
@@ -137,7 +220,62 @@ onMounted(loadVersions);
Loading version...
Select a version to compare.
- +
@@ -268,4 +406,101 @@ onMounted(loadVersions); opacity: 0.5; cursor: default; } + +/* ── Pin badges + label rendering ───────────────────────────────────────── */ +.pin-badge { + display: inline-block; + width: 0.7rem; + text-align: center; + margin-right: 0.35rem; + font-size: 0.85em; + line-height: 1; +} +.pin-badge-manual { color: var(--color-primary, #6366f1); } +.pin-badge-auto { color: var(--color-text-muted, rgba(255, 255, 255, 0.5)); } + +.history-item-label { + font-size: 0.72rem; + color: var(--color-primary, #6366f1); + font-style: italic; + margin-top: 0.15rem; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +/* ── Pin controls above the diff ────────────────────────────────────────── */ +.version-pin-controls { + padding: 0.4rem 0.5rem 0.5rem; + border-bottom: 1px solid var(--color-border); + font-size: 0.82rem; +} +.pin-actions { + display: flex; + align-items: center; + gap: 0.5rem; + flex-wrap: wrap; +} +.pin-state { + font-style: italic; + color: var(--color-text-muted, rgba(255, 255, 255, 0.6)); + flex: 1; + min-width: 0; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.btn-pin, .btn-pin-edit, .btn-unpin { + padding: 0.25rem 0.7rem; + font-size: 0.78rem; + background: transparent; + color: inherit; + border: 1px solid var(--color-border, rgba(255, 255, 255, 0.12)); + border-radius: 999px; + cursor: pointer; +} +.btn-pin:hover:not(:disabled), .btn-pin-edit:hover:not(:disabled) { + background: rgba(99, 102, 241, 0.12); + border-color: var(--color-primary, #6366f1); +} +.btn-unpin:hover:not(:disabled) { + background: rgba(239, 68, 68, 0.10); + border-color: rgba(239, 68, 68, 0.5); +} +.pin-label-form { + display: flex; + gap: 0.4rem; + align-items: center; +} +.pin-label-input { + flex: 1; + padding: 0.3rem 0.5rem; + font-size: 0.85rem; + background: var(--color-input-bg, rgba(255, 255, 255, 0.03)); + border: 1px solid var(--color-border, rgba(255, 255, 255, 0.12)); + border-radius: var(--radius-sm, 4px); + color: inherit; +} +.pin-label-input:focus { + outline: none; + border-color: var(--color-primary, #6366f1); +} +.btn-pin-save, .btn-pin-cancel { + padding: 0.3rem 0.7rem; + font-size: 0.78rem; + background: transparent; + color: inherit; + border: 1px solid var(--color-border, rgba(255, 255, 255, 0.12)); + border-radius: var(--radius-sm, 4px); + cursor: pointer; +} +.btn-pin-save:hover:not(:disabled) { + background: rgba(99, 102, 241, 0.12); + border-color: var(--color-primary, #6366f1); +} +.btn-pin-save:disabled, .btn-pin-cancel:disabled, +.btn-pin:disabled, .btn-pin-edit:disabled, .btn-unpin:disabled { + opacity: 0.5; + cursor: progress; +}