import React, { useEffect, useRef } from 'react'; import { Scroll } from 'folds'; import classNames from 'classnames'; import { Sidebar, SidebarContent, SidebarStackSeparator, SidebarStack, } from '../../components/sidebar'; import { SidebarGlass } from '../../components/sidebar/Sidebar.css'; import { DirectTab, HomeTab, SpaceTabs, InboxTab, ExploreTab, SettingsTab, UnverifiedTab, SearchTab, BookmarksTab, } from './sidebar'; import { CreateTab } from './sidebar/CreateTab'; import { useSetting } from '../../state/hooks/settings'; import { settingsAtom } from '../../state/settings'; import { useTheme, ThemeKind } from '../../hooks/useTheme'; import { getChatBg } from '../../features/lotus/chatBackground'; export function SidebarNav() { const scrollRef = useRef(null) as React.RefObject; const [glassmorphismSidebar] = useSetting(settingsAtom, 'glassmorphismSidebar'); const [chatBackground] = useSetting(settingsAtom, 'chatBackground'); const [lotusTerminal] = useSetting(settingsAtom, 'lotusTerminal'); const [pauseAnimations] = useSetting(settingsAtom, 'pauseAnimations'); const theme = useTheme(); const isDark = theme.kind === ThemeKind.Dark; // backdrop-filter only blurs content directly behind the element in the z-axis. // The sidebar is a flex sibling of the room view, so nothing sits behind it by default. // Fix: mirror the active chat background onto document.body so the sidebar blurs through it. useEffect(() => { const { style } = document.body; if (!glassmorphismSidebar) { style.removeProperty('background-image'); style.removeProperty('background-color'); style.removeProperty('background-size'); style.removeProperty('background-position'); style.removeProperty('animation'); return; } const effectiveBg = lotusTerminal && chatBackground === 'none' ? 'tactical' : chatBackground; const bgStyle = getChatBg(effectiveBg, isDark, pauseAnimations); style.backgroundImage = (bgStyle.backgroundImage as string | undefined) ?? ''; style.backgroundColor = (bgStyle.backgroundColor as string | undefined) ?? ''; style.backgroundSize = (bgStyle.backgroundSize as string | undefined) ?? ''; style.backgroundPosition = (bgStyle.backgroundPosition as string | undefined) ?? ''; style.animation = (bgStyle.animation as string | undefined) ?? ''; return () => { style.removeProperty('background-image'); style.removeProperty('background-color'); style.removeProperty('background-size'); style.removeProperty('background-position'); style.removeProperty('animation'); }; }, [glassmorphismSidebar, chatBackground, lotusTerminal, isDark, pauseAnimations]); return ( } sticky={ <> } /> ); }