diff options
Diffstat (limited to 'packages/excalidraw/components/Button.tsx')
| -rw-r--r-- | packages/excalidraw/components/Button.tsx | 44 |
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> + ); +}; |
