import { create } from "zustand"; const DEFAULT_SECTIONS: Record = { projects: true, documents: true, whiteboards: true, }; interface SidebarState { isCollapsed: boolean; toggle: () => void; collapse: () => void; expand: () => void; /** Tree node id → expanded (default true when key missing) */ expandedNodes: Record; toggleNode: (id: string) => void; expandNode: (id: string) => void; collapseNode: (id: string) => void; expandedSections: Record; toggleSection: (name: string) => void; } export const useSidebarStore = create((set) => ({ isCollapsed: false, toggle: () => set((s) => ({ isCollapsed: !s.isCollapsed })), collapse: () => set({ isCollapsed: true }), expand: () => set({ isCollapsed: false }), expandedNodes: {}, toggleNode: (id) => set((s) => { const cur = s.expandedNodes[id] !== false; return { expandedNodes: { ...s.expandedNodes, [id]: !cur }, }; }), expandNode: (id) => set((s) => ({ expandedNodes: { ...s.expandedNodes, [id]: true }, })), collapseNode: (id) => set((s) => ({ expandedNodes: { ...s.expandedNodes, [id]: false }, })), expandedSections: { ...DEFAULT_SECTIONS }, toggleSection: (name) => set((s) => ({ expandedSections: { ...s.expandedSections, [name]: !(s.expandedSections[name] !== false), }, })), })); export function isSidebarNodeExpanded( expandedNodes: Record, id: string, ): boolean { return expandedNodes[id] !== false; } export function isSidebarSectionExpanded( expandedSections: Record, name: string, ): boolean { return expandedSections[name] !== false; }