feat: Reply/Zitat-Feature für Chat-Nachrichten

- Reply-Button (Hover) auf jeder User/Assistant-Nachricht
- Reply-Preview-Leiste über dem Input-Feld (mit Timestamp, Rolle, Text-Preview)
- Beim Senden: Zitat als Kontext-Block vorangestellt (> [Zitat: HH:MM, Role]:)
- User-Nachrichten parsen Zitat-Blöcke als visuelle Quote-Elemente (blaue Borderlinie)
- Timestamp-basierte Referenzierung (HH:MM oder DD.MM. HH:MM)
- clearReply() bei Chat-Clear, Navigation und Destroy
This commit is contained in:
Meleki committed 2026-03-01 01:06:23 +01:00
1 parent 7c0e5d180a
commit 57b4b5931b
6 files changed
+224 -6

No files matched your search

+91
View File
@@ -262,6 +262,97 @@
margin-inline: auto;
}
/* Reply Button */
.msg {
position: relative;
}
.msg-reply-btn {
position: absolute;
top: var(--badge-spacing);
right: var(--badge-spacing);
opacity: 0;
transition: opacity .15s;
padding: .15em .35em;
font-size: var(--font-size);
background: var(--f2-bg);
border: var(--border-width) solid var(--f2-border);
border-radius: var(--border-radius);
}
.msg:hover .msg-reply-btn {
opacity: var(--semi-transparent);
}
.msg-reply-btn:hover {
opacity: 1 !important;
}
/* Reply Quote in User Bubble */
.reply-quote {
border-left: 3px solid var(--primary);
padding: var(--badge-padding);
padding-left: var(--box-spacing);
margin-bottom: var(--box-spacing);
opacity: var(--semi-transparent);
white-space: normal;
}
.reply-quote-meta {
font-size: var(--font-size);
margin-bottom: .2em;
color: var(--primary);
}
.reply-quote-text {
font-size: var(--font-size);
}
/* Reply Preview */
.reply-preview {
padding: var(--box-padding);
padding-bottom: 0;
}
.reply-preview:not([hidden]) {
display: flex;
}
.reply-preview-item {
display: flex;
align-items: center;
padding: var(--badge-padding);
gap: var(--badge-spacing);
background: var(--f2-bg);
border: var(--border-width) solid var(--f2-border);
border-radius: var(--border-radius);
border-left: 3px solid var(--primary);
overflow: hidden;
flex: 1;
}
.reply-icon {
flex-shrink: 0;
color: var(--primary);
}
.reply-meta {
flex-shrink: 0;
font-weight: bold;
font-size: var(--font-size);
}
.reply-text {
flex: 1;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
opacity: var(--semi-transparent);
}
/* Workspace Refs */
.ref-preview {