VectorMind / frontend /src /components /Sidebar.css
Ash-211's picture
feat: multi-conversation chat system with AI-generated titles
7af9025
Raw
History Blame Contribute Delete
8.09 kB
.sidebar {
grid-row: 2;
background: var(--bg-secondary);
border-right: 1px solid var(--border-subtle);
display: flex;
flex-direction: column;
transition: width var(--transition-base), opacity var(--transition-base);
overflow: hidden;
}
.sidebar.open {
width: var(--sidebar-width);
}
.sidebar.closed {
width: 0;
border-right: none;
}
.sidebar-content {
display: flex;
flex-direction: column;
height: 100%;
padding: var(--space-4);
min-width: var(--sidebar-width);
overflow-y: auto;
}
/* New Chat Button */
.new-chat-btn {
display: flex;
align-items: center;
justify-content: center;
gap: var(--space-2);
width: 100%;
padding: var(--space-3);
background: var(--accent-gradient);
color: white;
border: none;
border-radius: var(--radius-md);
font-size: var(--text-sm);
font-weight: 600;
cursor: pointer;
transition: all var(--transition-fast);
margin-bottom: var(--space-4);
}
.new-chat-btn:hover {
opacity: 0.9;
transform: translateY(-1px);
box-shadow: var(--shadow-md);
}
/* Section Headers */
.section-header {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: var(--space-3);
}
.section-header.clickable {
cursor: pointer;
padding: var(--space-2) 0;
user-select: none;
}
.section-header.clickable:hover h3 {
color: var(--text-primary);
}
.section-header h3 {
font-size: var(--text-xs);
font-weight: 600;
color: var(--text-secondary);
text-transform: uppercase;
letter-spacing: 0.05em;
display: flex;
align-items: center;
gap: var(--space-2);
}
.chevron {
transition: transform var(--transition-fast);
}
.chevron.open {
transform: rotate(90deg);
}
.doc-count {
font-size: var(--text-xs);
font-weight: 500;
color: var(--text-tertiary);
background: var(--bg-tertiary);
padding: var(--space-1) var(--space-2);
border-radius: var(--radius-full);
}
/* Chat History */
.chat-history-section {
flex: 1;
display: flex;
flex-direction: column;
min-height: 0;
margin-bottom: var(--space-4);
}
.conversation-list {
flex: 1;
display: flex;
flex-direction: column;
gap: 2px;
overflow-y: auto;
}
.empty-conversations {
display: flex;
flex-direction: column;
align-items: center;
padding: var(--space-6) var(--space-4);
text-align: center;
color: var(--text-tertiary);
}
.empty-conversations p {
font-size: var(--text-sm);
color: var(--text-secondary);
margin-bottom: var(--space-1);
}
.empty-conversations span {
font-size: var(--text-xs);
}
.conversation-item {
display: flex;
align-items: center;
gap: var(--space-2);
padding: var(--space-2) var(--space-3);
border-radius: var(--radius-md);
cursor: pointer;
transition: all var(--transition-fast);
}
.conversation-item:hover {
background: var(--bg-tertiary);
}
.conversation-item.active {
background: var(--bg-elevated);
border-left: 2px solid var(--accent-primary);
}
.conv-icon {
color: var(--text-tertiary);
flex-shrink: 0;
}
.conversation-item.active .conv-icon {
color: var(--accent-primary);
}
.conv-info {
flex: 1;
min-width: 0;
display: flex;
flex-direction: column;
}
.conv-title {
font-size: var(--text-sm);
color: var(--text-primary);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
line-height: 1.4;
}
.conv-time {
font-size: 10px;
color: var(--text-tertiary);
}
.conv-delete {
opacity: 0;
transition: opacity var(--transition-fast);
flex-shrink: 0;
}
.conversation-item:hover .conv-delete {
opacity: 1;
}
/* Documents Section */
.documents-section {
border-top: 1px solid var(--border-subtle);
padding-top: var(--space-3);
}
/* Upload Zone */
.upload-zone {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
padding: var(--space-4) var(--space-3);
border: 2px dashed var(--border-subtle);
border-radius: var(--radius-lg);
cursor: pointer;
transition: all var(--transition-base);
margin-bottom: var(--space-3);
}
.upload-zone:hover {
border-color: var(--accent-primary);
background: rgba(99, 102, 241, 0.05);
}
.upload-zone.dragging {
border-color: var(--accent-primary);
background: rgba(99, 102, 241, 0.1);
border-style: solid;
}
.upload-icon {
width: 40px;
height: 40px;
display: flex;
align-items: center;
justify-content: center;
background: var(--bg-glass);
border-radius: var(--radius-lg);
color: var(--accent-primary);
margin-bottom: var(--space-2);
}
.upload-text {
font-size: var(--text-sm);
font-weight: 500;
color: var(--text-primary);
margin-bottom: var(--space-1);
}
.upload-hint {
font-size: var(--text-xs);
color: var(--text-tertiary);
}
/* Upload Progress */
.upload-progress {
padding: var(--space-3);
background: var(--bg-tertiary);
border-radius: var(--radius-md);
margin-bottom: var(--space-3);
}
.progress-info {
display: flex;
justify-content: space-between;
margin-bottom: var(--space-2);
}
.progress-name {
font-size: var(--text-xs);
color: var(--text-primary);
max-width: 150px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.progress-status {
font-size: var(--text-xs);
color: var(--accent-primary);
}
.progress-bar {
height: 4px;
background: var(--bg-elevated);
border-radius: var(--radius-full);
overflow: hidden;
}
.progress-fill {
height: 100%;
background: var(--accent-gradient);
border-radius: var(--radius-full);
transition: width var(--transition-base);
}
/* Document List */
.document-list {
display: flex;
flex-direction: column;
gap: var(--space-2);
}
.empty-docs {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
padding: var(--space-4);
text-align: center;
color: var(--text-tertiary);
}
.empty-docs p {
font-size: var(--text-sm);
color: var(--text-secondary);
margin-bottom: var(--space-1);
}
.empty-docs span {
font-size: var(--text-xs);
}
/* Document Item */
.document-item {
display: flex;
align-items: center;
gap: var(--space-3);
padding: var(--space-2) var(--space-3);
background: var(--bg-tertiary);
border-radius: var(--radius-md);
transition: all var(--transition-fast);
animation: fadeInUp var(--transition-base) ease;
}
.document-item:hover {
background: var(--bg-elevated);
}
.doc-icon {
color: var(--text-tertiary);
flex-shrink: 0;
}
.doc-info {
flex: 1;
min-width: 0;
display: flex;
flex-direction: column;
}
.doc-name {
font-size: var(--text-sm);
color: var(--text-primary);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.doc-meta {
font-size: var(--text-xs);
color: var(--text-tertiary);
}
.status-icon {
flex-shrink: 0;
}
.status-icon.uploading {
color: var(--accent-primary);
}
.status-icon.ready {
color: var(--success);
}
.status-icon.error {
color: var(--error);
}
.doc-delete {
opacity: 0;
transition: opacity var(--transition-fast);
}
.document-item:hover .doc-delete {
opacity: 1;
}
/* Clear Data */
.clear-data-section {
margin-top: auto;
padding-top: var(--space-4);
border-top: 1px solid var(--border-subtle);
}
.clear-data-btn {
width: 100%;
color: var(--error);
justify-content: center;
gap: var(--space-2);
}
.clear-data-btn:hover {
background: var(--error-bg);
}
@media (max-width: 768px) {
.sidebar {
position: fixed;
top: var(--topnav-height);
left: 0;
bottom: 0;
z-index: 50;
width: 280px !important;
transform: translateX(-100%);
}
.sidebar.open {
transform: translateX(0);
box-shadow: var(--shadow-xl);
}
}