aboutsummaryrefslogtreecommitdiffstats
path: root/packages/excalidraw/components/Button.tsx
diff options
context:
space:
mode:
authorkj_sh6042026-03-15 16:19:35 -0400
committerkj_sh6042026-03-15 16:19:35 -0400
commit6ec259a0e71174651bae95d4628138bf6fd68742 (patch)
tree5e33c6a5ec091ecabfcb257fdc7b6a88ed8754ac /packages/excalidraw/components/Button.tsx
parent16c8578b15c727f22921f8a80a56ee4d4e7f2272 (diff)
refactor: packages/
Diffstat (limited to 'packages/excalidraw/components/Button.tsx')
-rw-r--r--packages/excalidraw/components/Button.tsx44
1 files changed, 44 insertions, 0 deletions
diff --git a/packages/excalidraw/components/Button.tsx b/packages/excalidraw/components/Button.tsx
new file mode 100644
index 0000000..779cee5
--- /dev/null
+++ b/packages/excalidraw/components/Button.tsx
@@ -0,0 +1,44 @@
+import clsx from "clsx";
+import React from "react";
+import { composeEventHandlers } from "../utils";
+import "./Button.scss";
+
+interface ButtonProps
+ extends React.DetailedHTMLProps<
+ React.ButtonHTMLAttributes<HTMLButtonElement>,
+ HTMLButtonElement
+ > {
+ type?: "button" | "submit" | "reset";
+ onSelect: () => any;
+ /** whether button is in active state */
+ selected?: boolean;
+ children: React.ReactNode;
+ className?: string;
+}
+
+/**
+ * A generic button component that follows Excalidraw's design system.
+ * Style can be customised using `className` or `style` prop.
+ * Accepts all props that a regular `button` element accepts.
+ */
+export const Button = ({
+ type = "button",
+ onSelect,
+ selected,
+ children,
+ className = "",
+ ...rest
+}: ButtonProps) => {
+ return (
+ <button
+ onClick={composeEventHandlers(rest.onClick, (event) => {
+ onSelect();
+ })}
+ type={type}
+ className={clsx("excalidraw-button", className, { selected })}
+ {...rest}
+ >
+ {children}
+ </button>
+ );
+};