import clsx from "clsx"; import { CANVAS_SEARCH_TAB, DEFAULT_SIDEBAR, LIBRARY_SIDEBAR_TAB, } from "../constants"; import { useTunnels } from "../context/tunnels"; import { useUIAppState } from "../context/ui-appState"; import type { MarkOptional, Merge } from "../utility-types"; import { composeEventHandlers } from "../utils"; import { useExcalidrawSetAppState } from "./App"; import { withInternalFallback } from "./hoc/withInternalFallback"; import { LibraryMenu } from "./LibraryMenu"; import type { SidebarProps, SidebarTriggerProps } from "./Sidebar/common"; import { Sidebar } from "./Sidebar/Sidebar"; import "../components/dropdownMenu/DropdownMenu.scss"; import { SearchMenu } from "./SearchMenu"; import { LibraryIcon, searchIcon } from "./icons"; const DefaultSidebarTrigger = withInternalFallback( "DefaultSidebarTrigger", ( props: Omit & React.HTMLAttributes, ) => { const { DefaultSidebarTriggerTunnel } = useTunnels(); return ( ); }, ); DefaultSidebarTrigger.displayName = "DefaultSidebarTrigger"; const DefaultTabTriggers = ({ children }: { children: React.ReactNode }) => { const { DefaultSidebarTabTriggersTunnel } = useTunnels(); return ( {children} ); }; DefaultTabTriggers.displayName = "DefaultTabTriggers"; export const DefaultSidebar = Object.assign( withInternalFallback( "DefaultSidebar", ({ children, className, onDock, docked, ...rest }: Merge< MarkOptional, "children">, { /** pass `false` to disable docking */ onDock?: SidebarProps["onDock"] | false; } >) => { const appState = useUIAppState(); const setAppState = useExcalidrawSetAppState(); const { DefaultSidebarTabTriggersTunnel } = useTunnels(); const isForceDocked = appState.openSidebar?.tab === CANVAS_SEARCH_TAB; return ( { setAppState({ defaultSidebarDockedPreference: docked }); }) } > {searchIcon} {LibraryIcon} {children} ); }, ), { Trigger: DefaultSidebarTrigger, TabTriggers: DefaultTabTriggers, }, );