import * as react from 'react';
import { ReactNode, ButtonHTMLAttributes } from 'react';

/**
 * IconButton component props interface
 */
type IconButtonProps = {
    /** Ícone a ser exibido no botão */
    icon: ReactNode;
    /** Tamanho do botão */
    size?: 'sm' | 'md';
    /** Estado de seleção/ativo do botão - permanece ativo até ser clicado novamente ou outro botão ser ativado */
    active?: boolean;
    /** Additional CSS classes to apply */
    className?: string;
} & ButtonHTMLAttributes<HTMLButtonElement>;
/**
 * IconButton component for Analytica Ensino platforms
 *
 * Um botão compacto apenas com ícone, ideal para menus dropdown,
 * barras de ferramentas e ações secundárias.
 * Oferece dois tamanhos com estilo consistente.
 * Estado ativo permanece até ser clicado novamente ou outro botão ser ativado.
 * Compatível com Next.js 15 e React 19.
 * Suporta forwardRef para acesso programático ao elemento DOM.
 *
 * @param icon - O ícone a ser exibido no botão
 * @param size - Tamanho do botão (sm, md)
 * @param active - Estado ativo/selecionado do botão
 * @param className - Classes CSS adicionais
 * @param props - Todos os outros atributos HTML padrão de button
 * @returns Um elemento button compacto estilizado apenas com ícone
 *
 * @example
 * ```tsx
 * <IconButton
 *   icon={<MoreVerticalIcon />}
 *   size="sm"
 *   onClick={() => openMenu()}
 * />
 * ```
 *
 * @example
 * ```tsx
 * // Botão ativo em uma barra de ferramentas - permanece ativo até outro clique
 * <IconButton
 *   icon={<BoldIcon />}
 *   active={isBold}
 *   onClick={toggleBold}
 * />
 * ```
 *
 * @example
 * ```tsx
 * // Usando ref para controle programático
 * const buttonRef = useRef<HTMLButtonElement>(null);
 *
 * <IconButton
 *   ref={buttonRef}
 *   icon={<EditIcon />}
 *   size="md"
 *   onClick={() => startEditing()}
 * />
 * ```
 */
declare const IconButton: react.ForwardRefExoticComponent<{
    /** Ícone a ser exibido no botão */
    icon: ReactNode;
    /** Tamanho do botão */
    size?: "sm" | "md";
    /** Estado de seleção/ativo do botão - permanece ativo até ser clicado novamente ou outro botão ser ativado */
    active?: boolean;
    /** Additional CSS classes to apply */
    className?: string;
} & ButtonHTMLAttributes<HTMLButtonElement> & react.RefAttributes<HTMLButtonElement>>;

export { type IconButtonProps, IconButton as default };
