From 6ec259a0e71174651bae95d4628138bf6fd68742 Mon Sep 17 00:00:00 2001 From: kj_sh604 Date: Sun, 15 Mar 2026 16:19:35 -0400 Subject: refactor: packages/ --- packages/excalidraw/components/DefaultSidebar.tsx | 121 ++++++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100644 packages/excalidraw/components/DefaultSidebar.tsx (limited to 'packages/excalidraw/components/DefaultSidebar.tsx') diff --git a/packages/excalidraw/components/DefaultSidebar.tsx b/packages/excalidraw/components/DefaultSidebar.tsx new file mode 100644 index 0000000..70b0c2d --- /dev/null +++ b/packages/excalidraw/components/DefaultSidebar.tsx @@ -0,0 +1,121 @@ +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, + }, +); -- cgit v1.2.3