9273eb5f2e
P3-1: Message Bookmarks — right-click any message to bookmark; saved to io.lotus.bookmarks account data (max 500, syncs across devices); star icon in sidebar opens BookmarksPanel with filter, Jump-to-message, and remove buttons; reactive to AccountData events P3-2: Message Scheduling (MSC4140) — clock button next to send opens ScheduleMessageModal with datetime-local picker; validates ≥1 min future; calls PUT org.matrix.msc4140 delayed event API; collapsible ScheduledMessagesTray above composer lists pending messages with cancel; local Jotai atom tracks scheduled messages per room P3-3: File Upload Compression — opt-in checkbox per JPEG/PNG file ≥200KB in upload preview; canvas API compresses at 0.82 quality; shows before/ after size estimate; compressed blob used in upload when checked P3-7: Room Insights — new Insights tab in room settings; top 5 active members (bar chart), top 5 reactions (chips), media breakdown (4 tiles), 24-hour activity heatmap (CSS bar chart); all from local cache only with disclaimer banner; never the first tab shown Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
59 lines
1.3 KiB
TypeScript
59 lines
1.3 KiB
TypeScript
import React, { useRef } from 'react';
|
|
import { Scroll } from 'folds';
|
|
|
|
import {
|
|
Sidebar,
|
|
SidebarContent,
|
|
SidebarStackSeparator,
|
|
SidebarStack,
|
|
} from '../../components/sidebar';
|
|
import {
|
|
DirectTab,
|
|
HomeTab,
|
|
SpaceTabs,
|
|
InboxTab,
|
|
ExploreTab,
|
|
SettingsTab,
|
|
UnverifiedTab,
|
|
SearchTab,
|
|
BookmarksTab,
|
|
} from './sidebar';
|
|
import { CreateTab } from './sidebar/CreateTab';
|
|
|
|
export function SidebarNav() {
|
|
const scrollRef = useRef<HTMLDivElement>(null) as React.RefObject<HTMLDivElement>;
|
|
|
|
return (
|
|
<Sidebar>
|
|
<SidebarContent
|
|
scrollable={
|
|
<Scroll ref={scrollRef} variant="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>
|
|
);
|
|
}
|