import clsx from "clsx"; import * as React from "react"; import { useDebugEvents } from "../../utils"; import { Icon } from "../Icon"; import { ButtonContext, handleEnterPress } from "../Link"; import { TooltipSymbol } from "../Tooltip"; import * as styles from "./legacy.module.css"; export interface LegacyButtonProps { "data-id"?: string; icon?: React.ReactNode; iconSide?: "left" | "right"; isLoading?: boolean; as?: any; // string | React.ReactElement; value?: string; onClick?: (event: React.MouseEvent) => void; className?: string; } export const LegacyButton = ( allProps: LegacyButtonProps & React.ComponentProps<"button">, ) => { const { as = "button", className, iconSide, value, icon, disabled, isLoading, ...rest } = allProps; const isChild = React.useContext(ButtonContext); const Tag = as; const { onClick, ...props } = useDebugEvents(rest); return ( {isChild ? ( {isLoading ? : null} {isLoading ? ( ) : ( )} ) : ( {isLoading ? : null} {isLoading ? ( ) : ( )} )} ); }; function ButtonSpinner({ label, children = , }: { label?: string; children?: React.ReactNode; }) { return (
{children}
); } interface SpinnerProps extends React.HTMLAttributes { label?: string; } function Spinner({ label, className }: SpinnerProps) { return (
{label &&
{label}
}
); } function ButtonIcon(props: React.ComponentProps<"span">) { const { children, className, ...rest } = props; const _children = React.isValidElement(children) ? React.cloneElement(children, { "aria-hidden": true, focusable: false, } as React.HTMLAttributes) : children; return ( {_children} ); } function ButtonContent( props: Pick, ) { const { icon, iconSide = "left", value } = props; return ( <> {icon && iconSide === "left" && ( {icon} )} {value ? ( {value} ) : null} {icon && iconSide === "right" && ( {icon} )} ); } LegacyButton[TooltipSymbol] = true;