feat(ui): establish shared desktop shell and assets

This commit is contained in:
sechmachine
2026-08-14 23:41:51 +07:00
parent 5967f7f70d
commit bac39812a3
15 changed files with 1822 additions and 0 deletions
+35
View File
@@ -0,0 +1,35 @@
document.addEventListener('DOMContentLoaded', () => {
const root = document.documentElement;
const theme = document.querySelector('[data-theme-select]');
const stored = (() => {
try { return localStorage.getItem('labtimesheet-theme') || 'system'; }
catch (_) { return 'system'; }
})();
if (theme) {
theme.value = stored;
theme.addEventListener('change', () => {
try {
theme.value === 'system'
? localStorage.removeItem('labtimesheet-theme')
: localStorage.setItem('labtimesheet-theme', theme.value);
} catch (_) {
// Theme still applies for this page when persistence is unavailable.
}
const dark = theme.value === 'dark'
|| (theme.value === 'system' && matchMedia('(prefers-color-scheme: dark)').matches);
root.dataset.theme = dark ? 'dark' : 'light';
root.style.colorScheme = dark ? 'dark' : 'light';
});
}
let collapsed = false;
try { collapsed = localStorage.getItem('labtimesheet-sidebar') === 'collapsed'; }
catch (_) { /* Use the expanded default. */ }
root.dataset.sidebarCollapsed = String(collapsed);
document.querySelector('[data-sidebar-toggle]')?.addEventListener('click', () => {
collapsed = !collapsed;
root.dataset.sidebarCollapsed = String(collapsed);
try { localStorage.setItem('labtimesheet-sidebar', collapsed ? 'collapsed' : 'expanded'); }
catch (_) { /* Collapse still works for this page. */ }
});
});