Spaces:
Running
Running
| <script lang="ts"> | |
| import * as Tooltip from "@/components/ui/tooltip/index.js"; | |
| import { cn, type WithElementRef } from "$lib/utils.js"; | |
| import type { HTMLAttributes } from "svelte/elements"; | |
| import { | |
| SIDEBAR_COOKIE_MAX_AGE, | |
| SIDEBAR_COOKIE_NAME, | |
| SIDEBAR_WIDTH, | |
| SIDEBAR_WIDTH_ICON | |
| } from "./constants.js"; | |
| import { setSidebar } from "./context.svelte.js"; | |
| let { | |
| ref = $bindable(null), | |
| open = $bindable(true), | |
| onOpenChange = () => {}, | |
| class: className, | |
| style, | |
| children, | |
| ...restProps | |
| }: WithElementRef<HTMLAttributes<HTMLDivElement>> & { | |
| open?: boolean; | |
| onOpenChange?: (open: boolean) => void; | |
| } = $props(); | |
| const sidebar = setSidebar({ | |
| open: () => open, | |
| setOpen: (value: boolean) => { | |
| open = value; | |
| onOpenChange(value); | |
| // This sets the cookie to keep the sidebar state. | |
| document.cookie = `${SIDEBAR_COOKIE_NAME}=${open}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`; | |
| } | |
| }); | |
| </script> | |
| <svelte:window onkeydown={sidebar.handleShortcutKeydown} /> | |
| <Tooltip.Provider delayDuration={0}> | |
| <div | |
| data-slot="sidebar-wrapper" | |
| style="--sidebar-width: {SIDEBAR_WIDTH}; --sidebar-width-icon: {SIDEBAR_WIDTH_ICON}; {style}" | |
| class={cn( | |
| "group/sidebar-wrapper has-data-[variant=inset]:bg-sidebar flex min-h-svh w-full", | |
| className | |
| )} | |
| bind:this={ref} | |
| {...restProps} | |
| > | |
| {@render children?.()} | |
| </div> | |
| </Tooltip.Provider> | |