import classNames from "classnames"; import type { MouseEvent } from "react"; import { forwardRef, useCallback } from "react"; import { useTimedBoolean } from "../../hooks/useTimedBoolean"; import type { ButtonProps } from "./Button"; import { Button } from "./Button"; import type { IconProps } from "./Icon"; import { Icon } from "./Icon"; import { LoadingIcon } from "./LoadingIcon"; export type IconButtonProps = IconProps & ButtonProps & { showConfirm?: boolean; iconClassName?: string; iconSize?: IconProps["size"]; iconColor?: IconProps["color"]; title: string; showBadge?: boolean; }; export const IconButton = forwardRef(function IconButton( { showConfirm, icon, color = "default", spin, onClick, className, iconClassName, tabIndex, size = "md", iconSize, showBadge, iconColor, isLoading, type = "button", ...props }: IconButtonProps, ref, ) { const [confirmed, setConfirmed] = useTimedBoolean(); const handleClick = useCallback( (e: MouseEvent) => { if (showConfirm) setConfirmed(); onClick?.(e); }, [onClick, setConfirmed, showConfirm], ); return ( ); });