feat(phase4): permanent cache-control & asset versioning, canonical nabil stored_session_id & resume, dsh session persistence fix, dsh dialogue/files toggle, and collapsible conv sidebar
This commit is contained in:
@@ -420,11 +420,56 @@ body, html {
|
||||
flex-direction: column;
|
||||
flex-shrink: 0;
|
||||
overflow: hidden;
|
||||
transition: width 0.2s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.2s ease, border-color 0.2s ease;
|
||||
}
|
||||
|
||||
.hub-conv-sidebar.collapsed {
|
||||
width: 0 !important;
|
||||
min-width: 0 !important;
|
||||
border-right: none;
|
||||
opacity: 0;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.hub-conv-header {
|
||||
padding: 0.75rem;
|
||||
border-bottom: 1px solid var(--hub-border-subtle);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
}
|
||||
|
||||
.hub-conv-header .hub-btn-new-chat {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.hub-collapse-conv-btn,
|
||||
.hub-expand-conv-btn {
|
||||
background: transparent;
|
||||
border: 1px solid var(--hub-border-subtle);
|
||||
border-radius: var(--hub-radius-sm);
|
||||
color: var(--hub-text-muted);
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
cursor: pointer;
|
||||
flex-shrink: 0;
|
||||
transition: all 0.15s ease;
|
||||
}
|
||||
|
||||
.hub-collapse-conv-btn:hover,
|
||||
.hub-expand-conv-btn:hover {
|
||||
color: var(--hub-text-primary);
|
||||
background: var(--hub-bg-card-hover);
|
||||
border-color: var(--hub-border-medium);
|
||||
}
|
||||
|
||||
.hub-chat-header-info {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
}
|
||||
|
||||
.hub-btn-new-chat {
|
||||
|
||||
+36
-13
@@ -6,11 +6,14 @@ document.addEventListener('DOMContentLoaded', () => {
|
||||
// Elements
|
||||
const sidebar = document.getElementById('hub-sidebar');
|
||||
const btnToggleSidebar = document.getElementById('btn-toggle-sidebar');
|
||||
const convSidebar = document.getElementById('hub-conv-sidebar');
|
||||
const btnToggleConvSidebar = document.getElementById('btn-toggle-conv-sidebar');
|
||||
const btnExpandConvSidebar = document.getElementById('btn-expand-conv-sidebar');
|
||||
const universeBtns = document.querySelectorAll('.hub-universe-btn');
|
||||
const activeTitle = document.getElementById('active-universe-name');
|
||||
const activeScope = document.getElementById('active-universe-scope');
|
||||
const activeTagline = document.getElementById('active-universe-tagline');
|
||||
const nabilModeToggle = document.getElementById('nabil-mode-toggle');
|
||||
const dshModeToggle = document.getElementById('dsh-mode-toggle');
|
||||
const tabSession = document.getElementById('tab-session');
|
||||
const tabFiles = document.getElementById('tab-files');
|
||||
|
||||
@@ -67,6 +70,31 @@ document.addEventListener('DOMContentLoaded', () => {
|
||||
});
|
||||
}
|
||||
|
||||
// Conversation Sub-Sidebar Collapse Persistence
|
||||
const isConvCollapsed = localStorage.getItem('hermes_hub_conv_collapsed') === 'true';
|
||||
if (isConvCollapsed && convSidebar) {
|
||||
convSidebar.classList.add('collapsed');
|
||||
if (btnExpandConvSidebar) btnExpandConvSidebar.style.display = 'inline-flex';
|
||||
}
|
||||
|
||||
if (btnToggleConvSidebar && convSidebar) {
|
||||
btnToggleConvSidebar.addEventListener('click', (e) => {
|
||||
e.stopPropagation();
|
||||
convSidebar.classList.add('collapsed');
|
||||
if (btnExpandConvSidebar) btnExpandConvSidebar.style.display = 'inline-flex';
|
||||
localStorage.setItem('hermes_hub_conv_collapsed', 'true');
|
||||
});
|
||||
}
|
||||
|
||||
if (btnExpandConvSidebar && convSidebar) {
|
||||
btnExpandConvSidebar.addEventListener('click', (e) => {
|
||||
e.stopPropagation();
|
||||
convSidebar.classList.remove('collapsed');
|
||||
btnExpandConvSidebar.style.display = 'none';
|
||||
localStorage.setItem('hermes_hub_conv_collapsed', 'false');
|
||||
});
|
||||
}
|
||||
|
||||
// Accent Mapping
|
||||
const ACCENT_MAP = {
|
||||
'tt': { accent: 'var(--accent-tt)', glow: 'var(--accent-tt-glow)' },
|
||||
@@ -134,19 +162,14 @@ document.addEventListener('DOMContentLoaded', () => {
|
||||
|
||||
updateThemeAccent(universeId);
|
||||
|
||||
// Show/hide Nabil Files Toggle
|
||||
if (universeId === 'nabil') {
|
||||
nabilModeToggle.style.display = 'inline-flex';
|
||||
tabSession.classList.add('active');
|
||||
tabFiles.classList.remove('active');
|
||||
} else {
|
||||
nabilModeToggle.style.display = 'none';
|
||||
}
|
||||
|
||||
// Determine layout: DSH uses embedded client, others use Native Chat
|
||||
// Show/hide DSH Mode Toggle (Exclusif à l'univers DSH)
|
||||
if (universeId === 'dsh') {
|
||||
if (dshModeToggle) dshModeToggle.style.display = 'inline-flex';
|
||||
if (tabSession) tabSession.classList.add('active');
|
||||
if (tabFiles) tabFiles.classList.remove('active');
|
||||
showIframeView(`https://dsh-hub.yesminedor.tn/`);
|
||||
} else {
|
||||
if (dshModeToggle) dshModeToggle.style.display = 'none';
|
||||
showNativeChatView();
|
||||
loadConversations();
|
||||
}
|
||||
@@ -617,12 +640,12 @@ document.addEventListener('DOMContentLoaded', () => {
|
||||
});
|
||||
}
|
||||
|
||||
// Nabil Mode Switcher (Chat Natif vs Fichiers DSH)
|
||||
// DSH Mode Switcher (Dialogue DSH vs Explorateur de Fichiers)
|
||||
if (tabSession) {
|
||||
tabSession.addEventListener('click', () => {
|
||||
tabSession.classList.add('active');
|
||||
tabFiles.classList.remove('active');
|
||||
showNativeChatView();
|
||||
showIframeView(`https://dsh-hub.yesminedor.tn/`);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user