aboutsummaryrefslogtreecommitdiffstats
path: root/packages/excalidraw/components/footer/Footer.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'packages/excalidraw/components/footer/Footer.tsx')
-rw-r--r--packages/excalidraw/components/footer/Footer.tsx95
1 files changed, 95 insertions, 0 deletions
diff --git a/packages/excalidraw/components/footer/Footer.tsx b/packages/excalidraw/components/footer/Footer.tsx
new file mode 100644
index 0000000..ccbe9ea
--- /dev/null
+++ b/packages/excalidraw/components/footer/Footer.tsx
@@ -0,0 +1,95 @@
+import clsx from "clsx";
+import { actionShortcuts } from "../../actions";
+import type { ActionManager } from "../../actions/manager";
+import {
+ ExitZenModeAction,
+ FinalizeAction,
+ UndoRedoActions,
+ ZoomActions,
+} from "../Actions";
+import { useDevice } from "../App";
+import { useTunnels } from "../../context/tunnels";
+import { HelpButton } from "../HelpButton";
+import { Section } from "../Section";
+import Stack from "../Stack";
+import type { UIAppState } from "../../types";
+
+const Footer = ({
+ appState,
+ actionManager,
+ showExitZenModeBtn,
+ renderWelcomeScreen,
+}: {
+ appState: UIAppState;
+ actionManager: ActionManager;
+ showExitZenModeBtn: boolean;
+ renderWelcomeScreen: boolean;
+}) => {
+ const { FooterCenterTunnel, WelcomeScreenHelpHintTunnel } = useTunnels();
+
+ const device = useDevice();
+ const showFinalize =
+ !appState.viewModeEnabled && appState.multiElement && device.isTouchScreen;
+
+ return (
+ <footer
+ role="contentinfo"
+ className="layer-ui__wrapper__footer App-menu App-menu_bottom"
+ >
+ <div
+ className={clsx("layer-ui__wrapper__footer-left zen-mode-transition", {
+ "layer-ui__wrapper__footer-left--transition-left":
+ appState.zenModeEnabled,
+ })}
+ >
+ <Stack.Col gap={2}>
+ <Section heading="canvasActions">
+ <ZoomActions
+ renderAction={actionManager.renderAction}
+ zoom={appState.zoom}
+ />
+
+ {!appState.viewModeEnabled && (
+ <UndoRedoActions
+ renderAction={actionManager.renderAction}
+ className={clsx("zen-mode-transition", {
+ "layer-ui__wrapper__footer-left--transition-bottom":
+ appState.zenModeEnabled,
+ })}
+ />
+ )}
+ {showFinalize && (
+ <FinalizeAction
+ renderAction={actionManager.renderAction}
+ className={clsx("zen-mode-transition", {
+ "layer-ui__wrapper__footer-left--transition-left":
+ appState.zenModeEnabled,
+ })}
+ />
+ )}
+ </Section>
+ </Stack.Col>
+ </div>
+ <FooterCenterTunnel.Out />
+ <div
+ className={clsx("layer-ui__wrapper__footer-right zen-mode-transition", {
+ "transition-right": appState.zenModeEnabled,
+ })}
+ >
+ <div style={{ position: "relative" }}>
+ {renderWelcomeScreen && <WelcomeScreenHelpHintTunnel.Out />}
+ <HelpButton
+ onClick={() => actionManager.executeAction(actionShortcuts)}
+ />
+ </div>
+ </div>
+ <ExitZenModeAction
+ actionManager={actionManager}
+ showExitZenModeBtn={showExitZenModeBtn}
+ />
+ </footer>
+ );
+};
+
+export default Footer;
+Footer.displayName = "Footer";