{"version":3,"sources":["../../src/components/NavButton/NavButton.tsx"],"sourcesContent":["import { ButtonHTMLAttributes, ReactNode, forwardRef } from 'react';\n\n/**\n * NavButton component props interface\n */\ntype NavButtonProps = {\n  /** Ícone a ser exibido no botão */\n  icon: ReactNode;\n  /** Texto/label a ser exibido ao lado do ícone */\n  label: string;\n  /** Estado de seleção do botão */\n  selected?: boolean;\n  /** Additional CSS classes to apply */\n  className?: string;\n} & ButtonHTMLAttributes<HTMLButtonElement>;\n\n/**\n * NavButton component for Analytica Ensino platforms\n *\n * Um botão de navegação com ícone e texto para navegação principal.\n * Ideal para menus de navegação, sidebar, tabs de navegação, etc.\n * Compatível com Next.js 15 e React 19.\n * Suporta forwardRef para acesso programático ao elemento DOM.\n *\n * @param icon - O ícone a ser exibido no botão\n * @param label - O texto/label a ser exibido\n * @param selected - Estado de seleção do botão\n * @param className - Classes CSS adicionais\n * @param props - Todos os outros atributos HTML padrão de button\n * @returns Um elemento button estilizado para navegação\n *\n * @example\n * ```tsx\n * <NavButton\n *   icon={<HomeIcon />}\n *   label=\"Início\"\n *   selected={false}\n *   onClick={() => navigate('/')}\n * />\n * ```\n *\n * @example\n * ```tsx\n * // Usando ref para foco programático\n * const buttonRef = useRef<HTMLButtonElement>(null);\n *\n * const handleFocus = () => {\n *   buttonRef.current?.focus();\n * };\n *\n * <NavButton\n *   ref={buttonRef}\n *   icon={<HomeIcon />}\n *   label=\"Dashboard\"\n *   selected={isActive}\n *   onClick={() => setActiveTab('dashboard')}\n * />\n * ```\n */\nconst NavButton = forwardRef<HTMLButtonElement, NavButtonProps>(\n  (\n    { icon, label, selected = false, className = '', disabled, ...props },\n    ref\n  ) => {\n    // Classes base para todos os estados\n    const baseClasses = [\n      'flex',\n      'flex-col',\n      'items-center',\n      'justify-center',\n      'gap-0.5',\n      'px-12',\n      'py-1',\n      'rounded-sm',\n      'cursor-pointer',\n      'text-text-950',\n      'text-xs',\n      'font-medium',\n      'hover:text-text',\n      'hover:bg-primary-600',\n      'focus-visible:outline-none',\n      'focus-visible:ring-2',\n      'focus-visible:ring-offset-0',\n      'focus-visible:ring-indicator-info',\n      'disabled:opacity-50',\n      'disabled:cursor-not-allowed',\n      'disabled:pointer-events-none',\n    ];\n\n    const stateClasses = selected ? ['bg-primary-50', 'text-primary-950'] : [];\n\n    const allClasses = [...baseClasses, ...stateClasses].join(' ');\n\n    return (\n      <button\n        ref={ref}\n        type=\"button\"\n        className={`${allClasses} ${className}`}\n        disabled={disabled}\n        aria-pressed={selected}\n        {...props}\n      >\n        <span className=\"flex items-center justify-center w-5 h-5\">{icon}</span>\n        <span className=\"whitespace-nowrap\">{label}</span>\n      </button>\n    );\n  }\n);\n\nNavButton.displayName = 'NavButton';\n\nexport default NavButton;\n"],"mappings":";AAAA,SAA0C,kBAAkB;AA8FtD,SAQE,KARF;AAnCN,IAAM,YAAY;AAAA,EAChB,CACE,EAAE,MAAM,OAAO,WAAW,OAAO,YAAY,IAAI,UAAU,GAAG,MAAM,GACpE,QACG;AAEH,UAAM,cAAc;AAAA,MAClB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,UAAM,eAAe,WAAW,CAAC,iBAAiB,kBAAkB,IAAI,CAAC;AAEzE,UAAM,aAAa,CAAC,GAAG,aAAa,GAAG,YAAY,EAAE,KAAK,GAAG;AAE7D,WACE;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,MAAK;AAAA,QACL,WAAW,GAAG,UAAU,IAAI,SAAS;AAAA,QACrC;AAAA,QACA,gBAAc;AAAA,QACb,GAAG;AAAA,QAEJ;AAAA,8BAAC,UAAK,WAAU,4CAA4C,gBAAK;AAAA,UACjE,oBAAC,UAAK,WAAU,qBAAqB,iBAAM;AAAA;AAAA;AAAA,IAC7C;AAAA,EAEJ;AACF;AAEA,UAAU,cAAc;AAExB,IAAO,oBAAQ;","names":[]}