mirror of
https://github.com/danny-avila/LibreChat.git
synced 2025-12-21 10:50:14 +01:00
* feat: new dropdown * fix: maintain popover active when open * fix: update DeleteButton and ShareButton component to use useState for managing dialog state * BREAKING: style improvement of base Button component * style: update export button * a11y: ExportAndShareButton * add border * quick style fix * fix: flick issue on convo * fix: DropDown opens when renaming * chore: update radix-ui/react-dropdown-menu to latest * small fix * style: bookmarks update * reorder export modal * feat: imporved dropdowns * style: a lot of changes; header, bookmarks, export, nav, convo, convoOptions * fix: small style issues * fix: button * fix: bookmarks header menu * fix: dropdown close glitch * feat: Improve accessibility and keyboard navigation in ModelSpec component * fix: Nav related type issues * style: ConvoOptions theming and focus ring --------- Co-authored-by: Danny Avila <danny@librechat.ai>
41 lines
1.6 KiB
TypeScript
41 lines
1.6 KiB
TypeScript
import { useState } from 'react';
|
|
import { Outlet } from 'react-router-dom';
|
|
|
|
import type { ContextType } from '~/common';
|
|
import { useAuthContext, useAssistantsMap, useFileMap, useSearch } from '~/hooks';
|
|
import { AssistantsMapContext, FileMapContext, SearchContext } from '~/Providers';
|
|
import { Nav, MobileNav } from '~/components/Nav';
|
|
|
|
export default function Root() {
|
|
const { isAuthenticated } = useAuthContext();
|
|
const [navVisible, setNavVisible] = useState<boolean>(() => {
|
|
const savedNavVisible = localStorage.getItem('navVisible');
|
|
return savedNavVisible !== null ? JSON.parse(savedNavVisible) : true;
|
|
});
|
|
|
|
const search = useSearch({ isAuthenticated });
|
|
const fileMap = useFileMap({ isAuthenticated });
|
|
const assistantsMap = useAssistantsMap({ isAuthenticated });
|
|
|
|
if (!isAuthenticated) {
|
|
return null;
|
|
}
|
|
|
|
return (
|
|
<SearchContext.Provider value={search}>
|
|
<FileMapContext.Provider value={fileMap}>
|
|
<AssistantsMapContext.Provider value={assistantsMap}>
|
|
<div className="flex h-dvh">
|
|
<div className="relative z-0 flex h-full w-full overflow-hidden">
|
|
<Nav navVisible={navVisible} setNavVisible={setNavVisible} />
|
|
<div className="relative flex h-full max-w-full flex-1 flex-col overflow-hidden">
|
|
<MobileNav setNavVisible={setNavVisible} />
|
|
<Outlet context={{ navVisible, setNavVisible } satisfies ContextType} />
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</AssistantsMapContext.Provider>
|
|
</FileMapContext.Provider>
|
|
</SearchContext.Provider>
|
|
);
|
|
}
|