|
8 | 8 | import { fly } from "svelte/transition";
|
9 | 9 | export let data: PageData;
|
10 | 10 |
|
| 11 | + export let isSidebarOpen: boolean = true; |
| 12 | +
|
11 | 13 | let models;
|
12 | 14 | let modelAvailable: boolean;
|
13 | 15 | const isLoading = false;
|
|
18 | 20 | let dataCht: Response | any = null;
|
19 | 21 | const unsubscribe = newChat.subscribe((value) => (dataCht = value));
|
20 | 22 |
|
| 23 | + function toggleSidebar(): void { |
| 24 | + isSidebarOpen = !isSidebarOpen; |
| 25 | + } |
| 26 | +
|
21 | 27 | onMount(() => {
|
22 | 28 | theme = localStorage.getItem("data-theme") || "dark";
|
23 | 29 | document.documentElement.setAttribute("data-theme", theme);
|
|
110 | 116 | });
|
111 | 117 | </script>
|
112 | 118 |
|
| 119 | +<button on:click={toggleSidebar} class="btn btn-square z-10 fixed"> |
| 120 | + <svg |
| 121 | + xmlns="http://www.w3.org/2000/svg" |
| 122 | + fill="none" |
| 123 | + viewBox="0 0 24 24" |
| 124 | + class="inline-block w-5 h-5 stroke-current" |
| 125 | + ><path |
| 126 | + stroke-linecap="round" |
| 127 | + stroke-linejoin="round" |
| 128 | + stroke-width="2" |
| 129 | + d="M4 6h16M4 12h16M4 18h16" |
| 130 | + ></path></svg |
| 131 | + > |
| 132 | +</button> |
113 | 133 | <aside
|
114 | 134 | id="default-sidebar"
|
115 |
| - class="border-base-content/[.2] fixed left-0 top-0 z-40 h-screen w-80 -translate-x-full border-r transition-transform overflow-hidden translate-x-0 aria-label=Sidebar" |
| 135 | + class="border-base-content/[.2] fixed left-0 top-0 z-40 h-screen -translate-x-full border-r transition-transform overflow-hidden translate-x-0 aria-label=Sidebar" |
| 136 | + class:w-75={isSidebarOpen} |
| 137 | + class:w-0={!isSidebarOpen} |
116 | 138 | >
|
117 | 139 | <div
|
118 | 140 | class="bg-base-200 relative h-screen py-1 px-2 overflow-hidden flex flex-col items-center justify-between"
|
|
150 | 172 | </svg>
|
151 | 173 | <span>New Chat</span>
|
152 | 174 | </button>
|
| 175 | + <button |
| 176 | + id="toggle-sidebar-btn" |
| 177 | + tabindex="0" |
| 178 | + on:click={toggleSidebar} |
| 179 | + on:keydown={(event) => { |
| 180 | + if (event.key === "Escape") { |
| 181 | + toggleSidebar(); |
| 182 | + } |
| 183 | + }} |
| 184 | + aria-label="Close Sidebar" |
| 185 | + class="btn btn-ghost flex-shrink-0" |
| 186 | + >✕ |
| 187 | + </button> |
153 | 188 | </div>
|
154 | 189 | <ul
|
155 | 190 | class="my-1 w-full h-[85%] overflow-y-auto no-scrollbar firefox-no-scrollbar ie-edge-no-scrollbar"
|
|
380 | 415 | </div>
|
381 | 416 | </aside>
|
382 | 417 |
|
383 |
| -<div class={"relative h-full transition-all md:ml-80"}> |
| 418 | +<div class={"h-full" + (isSidebarOpen ? " ml-64 min-w-64" : " min-w-0")}> |
384 | 419 | <slot />
|
385 | 420 | </div>
|
0 commit comments