08937c6278
ESLint: UploadCardRenderer.tsx had two separate imports from
../../utils/matrix — merged tryDeleteMxcContent into the existing
import statement. Removed now-unnecessary eslint-disable directive from
chatBackground.ts (the _anim prefix already suppresses the rule).
Glassmorphism: the Scroll inside SidebarNav had variant="Background"
which set a solid backgroundColor on the entire scrollable area,
completely hiding the sidebar's semi-transparent glass + backdrop-filter.
Fix: pass variant={undefined} when glassmorphismSidebar is on so the
inner scroll area is transparent and the blur effect is visible through
it. The document.body background (set by the previous useEffect fix)
now shows through the frosted glass as intended.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
104 lines
3.6 KiB
TypeScript
104 lines
3.6 KiB
TypeScript
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<HTMLDivElement>(null) as React.RefObject<HTMLDivElement>;
|
|
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 (
|
|
<Sidebar className={classNames(glassmorphismSidebar && SidebarGlass)}>
|
|
<SidebarContent
|
|
scrollable={
|
|
<Scroll
|
|
ref={scrollRef}
|
|
variant={glassmorphismSidebar ? undefined : 'Background'}
|
|
size="0"
|
|
>
|
|
<SidebarStack>
|
|
<HomeTab />
|
|
<DirectTab />
|
|
</SidebarStack>
|
|
<SpaceTabs scrollRef={scrollRef} />
|
|
<SidebarStackSeparator />
|
|
<SidebarStack>
|
|
<ExploreTab />
|
|
<CreateTab />
|
|
</SidebarStack>
|
|
</Scroll>
|
|
}
|
|
sticky={
|
|
<>
|
|
<SidebarStackSeparator />
|
|
<SidebarStack>
|
|
<SearchTab />
|
|
<BookmarksTab />
|
|
<UnverifiedTab />
|
|
<InboxTab />
|
|
<SettingsTab />
|
|
</SidebarStack>
|
|
</>
|
|
}
|
|
/>
|
|
</Sidebar>
|
|
);
|
|
}
|