feat: implement enhanced message controls with regenerate any message
Added comprehensive message control features for fine-grained conversation management: Backend (Rust): - Extended Message struct with 'pinned' and 'hidden' boolean fields - Added delete_message_at_index() command for removing any message - Added toggle_message_pin() command to mark important messages - Added toggle_message_hidden() command to temporarily hide messages - Added continue_message() command to append AI continuations - Added regenerate_at_index() command to regenerate ANY message (not just last) Frontend (JavaScript): - Added delete, pin, hide buttons to all messages (user & assistant) - Added continue button for assistant messages - Updated regenerate to work on any message, not just the last one - Implemented state persistence for pinned/hidden in chat history - Added dynamic icon changes for hide/unhide states - Integrated with token counter for real-time updates UI/UX (CSS): - Pinned messages: accent-colored left border with glow effect - Hidden messages: 40% opacity with blur effect (70% on hover) - Delete button: red hover warning (#ef4444) - Active state indicators for pin/hide buttons - Always-visible controls on hidden messages for quick access Features: - Delete any message with confirmation dialog - Pin messages to always keep them in context - Hide messages with visual blur (still in context but dimmed) - Continue incomplete assistant responses - Regenerate any assistant message (creates new swipe) - All states persist in chat history JSON This completes Phase 3.2 "Enhanced Message Controls" from the roadmap, providing users with complete control over their conversation history. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -383,6 +383,56 @@ body {
|
||||
height: 14px;
|
||||
}
|
||||
|
||||
/* Enhanced message control buttons */
|
||||
.message-delete-btn:hover {
|
||||
background: rgba(239, 68, 68, 0.8) !important;
|
||||
color: white !important;
|
||||
}
|
||||
|
||||
.message-pin-btn.active,
|
||||
.message-hide-btn.active {
|
||||
background: var(--accent);
|
||||
color: white;
|
||||
}
|
||||
|
||||
.message-pin-btn.active:hover,
|
||||
.message-hide-btn.active:hover {
|
||||
background: var(--accent-hover);
|
||||
}
|
||||
|
||||
/* Pinned message indicator */
|
||||
.message.pinned::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
left: -8px;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
width: 3px;
|
||||
background: var(--accent);
|
||||
border-radius: 2px;
|
||||
box-shadow: 0 0 8px var(--accent);
|
||||
}
|
||||
|
||||
.message.pinned .message-content {
|
||||
border-left: 2px solid var(--accent);
|
||||
}
|
||||
|
||||
/* Hidden message styling */
|
||||
.message.hidden-message {
|
||||
opacity: 0.4;
|
||||
filter: blur(2px);
|
||||
transition: all 0.2s ease;
|
||||
}
|
||||
|
||||
.message.hidden-message:hover {
|
||||
opacity: 0.7;
|
||||
filter: blur(1px);
|
||||
}
|
||||
|
||||
.message.hidden-message .message-actions {
|
||||
opacity: 1 !important;
|
||||
}
|
||||
|
||||
/* Swipe navigation */
|
||||
.swipe-controls {
|
||||
display: flex;
|
||||
|
||||
Reference in New Issue
Block a user