web: keep sidebar collapse local
This commit is contained in:
parent
fb4d3c3f1f
commit
f848a96343
|
|
@ -124,7 +124,7 @@
|
||||||
@layer layout {
|
@layer layout {
|
||||||
.workspace-layout {
|
.workspace-layout {
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-columns: minmax(220px, 280px) minmax(0, 1fr);
|
grid-template-columns: auto minmax(0, 1fr);
|
||||||
grid-template-rows: auto minmax(0, 1fr);
|
grid-template-rows: auto minmax(0, 1fr);
|
||||||
width: 100vw;
|
width: 100vw;
|
||||||
height: 100dvh;
|
height: 100dvh;
|
||||||
|
|
@ -133,9 +133,6 @@
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
min-width: 0;
|
min-width: 0;
|
||||||
}
|
}
|
||||||
.workspace-layout.sidebar-collapsed {
|
|
||||||
grid-template-columns: max-content minmax(0, 1fr);
|
|
||||||
}
|
|
||||||
.workspace-topbar {
|
.workspace-topbar {
|
||||||
grid-column: 2;
|
grid-column: 2;
|
||||||
grid-row: 1;
|
grid-row: 1;
|
||||||
|
|
@ -206,6 +203,7 @@
|
||||||
.global-sidebar {
|
.global-sidebar {
|
||||||
grid-column: 1;
|
grid-column: 1;
|
||||||
grid-row: 1;
|
grid-row: 1;
|
||||||
|
width: auto;
|
||||||
border-right: 0;
|
border-right: 0;
|
||||||
border-bottom: 1px solid var(--line);
|
border-bottom: 1px solid var(--line);
|
||||||
}
|
}
|
||||||
|
|
@ -217,12 +215,10 @@
|
||||||
min-height: 100dvh;
|
min-height: 100dvh;
|
||||||
overflow: visible;
|
overflow: visible;
|
||||||
}
|
}
|
||||||
.workspace-layout.sidebar-collapsed {
|
|
||||||
grid-template-columns: 1fr;
|
|
||||||
}
|
|
||||||
.workspace-sidebar {
|
.workspace-sidebar {
|
||||||
grid-column: 1;
|
grid-column: 1;
|
||||||
grid-row: 1;
|
grid-row: 1;
|
||||||
|
width: auto;
|
||||||
border-right: 0;
|
border-right: 0;
|
||||||
border-bottom: 1px solid var(--line);
|
border-bottom: 1px solid var(--line);
|
||||||
}
|
}
|
||||||
|
|
@ -243,6 +239,7 @@
|
||||||
.global-sidebar {
|
.global-sidebar {
|
||||||
grid-column: 1;
|
grid-column: 1;
|
||||||
grid-row: 1 / 3;
|
grid-row: 1 / 3;
|
||||||
|
width: clamp(220px, 20vw, 280px);
|
||||||
min-width: 0;
|
min-width: 0;
|
||||||
min-height: 0;
|
min-height: 0;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
|
|
@ -256,6 +253,7 @@
|
||||||
.workspace-sidebar {
|
.workspace-sidebar {
|
||||||
grid-column: 1;
|
grid-column: 1;
|
||||||
grid-row: 1 / 3;
|
grid-row: 1 / 3;
|
||||||
|
width: clamp(220px, 20vw, 280px);
|
||||||
align-self: stretch;
|
align-self: stretch;
|
||||||
min-width: 0;
|
min-width: 0;
|
||||||
min-height: 0;
|
min-height: 0;
|
||||||
|
|
@ -263,6 +261,10 @@
|
||||||
padding: var(--space-4) var(--space-3);
|
padding: var(--space-4) var(--space-3);
|
||||||
border-right: 1px solid var(--line);
|
border-right: 1px solid var(--line);
|
||||||
}
|
}
|
||||||
|
.workspace-sidebar.collapsed {
|
||||||
|
width: max-content;
|
||||||
|
}
|
||||||
|
|
||||||
.sidebar-header {
|
.sidebar-header {
|
||||||
display: grid;
|
display: grid;
|
||||||
gap: var(--space-2);
|
gap: var(--space-2);
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,6 @@ export type SidebarSnippet = Snippet<[]>;
|
||||||
export type SidebarController = {
|
export type SidebarController = {
|
||||||
setSidebar(snippet: SidebarSnippet): void;
|
setSidebar(snippet: SidebarSnippet): void;
|
||||||
clearSidebar(snippet: SidebarSnippet): void;
|
clearSidebar(snippet: SidebarSnippet): void;
|
||||||
setCollapsed(collapsed: boolean): void;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
export const SIDEBAR_CONTEXT = Symbol("yoi-sidebar-context");
|
export const SIDEBAR_CONTEXT = Symbol("yoi-sidebar-context");
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,6 @@
|
||||||
|
|
||||||
let { children }: LayoutProps = $props();
|
let { children }: LayoutProps = $props();
|
||||||
let sidebar = $state<SidebarSnippet | null>(null);
|
let sidebar = $state<SidebarSnippet | null>(null);
|
||||||
let sidebarCollapsed = $state(false);
|
|
||||||
|
|
||||||
setContext(SIDEBAR_CONTEXT, {
|
setContext(SIDEBAR_CONTEXT, {
|
||||||
setSidebar(snippet: SidebarSnippet) {
|
setSidebar(snippet: SidebarSnippet) {
|
||||||
|
|
@ -17,17 +16,13 @@
|
||||||
},
|
},
|
||||||
clearSidebar(snippet: SidebarSnippet) {
|
clearSidebar(snippet: SidebarSnippet) {
|
||||||
if (sidebar === snippet) sidebar = null;
|
if (sidebar === snippet) sidebar = null;
|
||||||
sidebarCollapsed = false;
|
|
||||||
},
|
|
||||||
setCollapsed(collapsed: boolean) {
|
|
||||||
sidebarCollapsed = collapsed;
|
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<WorkspaceAlerts />
|
<WorkspaceAlerts />
|
||||||
|
|
||||||
<div class:sidebar-collapsed={sidebarCollapsed} class="workspace-layout">
|
<div class="workspace-layout">
|
||||||
{#if sidebar}
|
{#if sidebar}
|
||||||
{@render sidebar()}
|
{@render sidebar()}
|
||||||
{:else}
|
{:else}
|
||||||
|
|
|
||||||
|
|
@ -2,20 +2,14 @@
|
||||||
import { page } from '$app/state';
|
import { page } from '$app/state';
|
||||||
import SidebarOverride from '$lib/workspace/sidebar/SidebarOverride.svelte';
|
import SidebarOverride from '$lib/workspace/sidebar/SidebarOverride.svelte';
|
||||||
import WorkspaceSidebar from '$lib/workspace/sidebar/WorkspaceSidebar.svelte';
|
import WorkspaceSidebar from '$lib/workspace/sidebar/WorkspaceSidebar.svelte';
|
||||||
import { getSidebarController } from '$lib/workspace/sidebar/context';
|
|
||||||
import type { LayoutProps } from './$types';
|
import type { LayoutProps } from './$types';
|
||||||
|
|
||||||
let { data, children }: LayoutProps = $props();
|
let { data, children }: LayoutProps = $props();
|
||||||
let sidebarCollapsed = $state(false);
|
let sidebarCollapsed = $state(false);
|
||||||
const sidebarController = getSidebarController();
|
|
||||||
|
|
||||||
function toggleSidebar() {
|
function toggleSidebar() {
|
||||||
sidebarCollapsed = !sidebarCollapsed;
|
sidebarCollapsed = !sidebarCollapsed;
|
||||||
}
|
}
|
||||||
|
|
||||||
$effect(() => {
|
|
||||||
sidebarController.setCollapsed(sidebarCollapsed);
|
|
||||||
});
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
{#snippet workspaceSidebar()}
|
{#snippet workspaceSidebar()}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user