AIKit
AIKit ·

Biblioteca de componentes de UI para chats de IA construída com princípios de Design Atômico.
Descrição
@gravity-ui/aikit é uma biblioteca de componentes React flexível e extensível para construir chats de IA de qualquer complexidade. A biblioteca fornece um conjunto de componentes prontos que podem ser usados como estão ou personalizados para atender às suas necessidades.
Principais Recursos
- 🎨 Design Atômico — hierarquia clara de componentes, de átomos a páginas
- 🔧 Independente de SDK — não depende de SDKs de IA específicos
- 🎭 Abordagem de Dois Níveis — componentes prontos + hooks para personalização
- 🎨 Variáveis CSS — temas fáceis sem sobrescrever componentes
- 📦 TypeScript — segurança de tipo completa pronta para uso
- 🔌 Extensível — sistema de registro de tipos de mensagem personalizados
Estrutura do Projeto
src/
├── components/
│ ├── atoms/ # Elementos básicos de UI indivisíveis
│ ├── molecules/ # Grupos simples de átomos
│ ├── organisms/ # Componentes complexos com lógica
│ ├── templates/ # Layouts completos
│ └── pages/ # Integrações completas com dados
├── hooks/ # Hooks de propósito geral
├── types/ # Tipos TypeScript
├── utils/ # Utilitários
└── themes/ # Temas CSS e variáveis
Instalação
npm install @gravity-ui/aikit
Início Rápido
import { ChatContainer } from '@gravity-ui/aikit';
import type { ChatType, TChatMessage } from '@gravity-ui/aikit';
function App() {
const [messages, setMessages] = useState<TChatMessage[]>([]);
const [chats, setChats] = useState<ChatType[]>([]);
const [activeChat, setActiveChat] = useState<ChatType | null>(null);
return (
<ChatContainer
chats={chats}
activeChat={activeChat}
messages={messages}
onSendMessage={async (data) => {
// Sua lógica de envio
console.log('Mensagem:', data.content);
}}
onSelectChat={setActiveChat}
onCreateChat={() => {
// Criar novo chat
}}
onDeleteChat={(chat) => {
// Excluir chat
}}
/>
);
}
Arquitetura
A biblioteca é construída com base nos princípios do Design Atômico:
🔹 Átomos
Elementos básicos de UI indivisíveis sem lógica de negócios:
ActionButton— botão com tooltip integradoAlert— mensagens de alerta com variantesChatDate— formatação de data com datas relativasContextIndicator— indicador de uso de contexto de tokenContextItem— rótulo de contexto com ação de removerDiffStat— exibição de estatísticas de alteração de códigoDisclaimer— componente de texto de avisoInlineCitation— citações de textoLoader— indicador de carregamentoMarkdownRenderer— renderizador de Markdown no estilo YandexMessageBalloon— wrapper de mensagemShimmer— efeito de animação de carregamentoSubmitButton— botão de envio com estadosToolIndicator— indicador de status de execução de ferramenta
🔸 Moléculas
Combinações simples de átomos:
BaseMessage— wrapper base para todos os tipos de mensagemButtonGroup— grupo de botões com suporte a orientaçãoInputContext— gerenciamento de contextoPromptInputBody— área de texto com auto-redimensionamentoPromptInputFooter— rodapé com ícones de ação e botão de envioPromptInputHeader— cabeçalho com itens de contexto e indicadorPromptInputPanel— painel contêiner para conteúdo personalizadoSuggestions— botões de sugestão clicáveisTabs— abas de navegação com funcionalidade de exclusãoToolFooter— rodapé de mensagem de ferramenta com açõesToolHeader— cabeçalho de mensagem de ferramenta com ícone e ações
🔶 Organismos
Componentes complexos com lógica interna:
AssistantMessage— mensagem do assistente de IAHeader— cabeçalho do chatMessageList— lista de mensagensPromptInput— campo de entrada de mensagemThinkingMessage— processo de pensamento da IAToolMessage— execução de ferramentaUserMessage— mensagem do usuário
📄 Templates
Layouts completos:
ChatContent— conteúdo principal do chatEmptyContainer— estado vazioHistory— histórico de chat
📱 Páginas
Integrações completas:
ChatContainer— chat totalmente montado
Documentação
Testes
O projeto utiliza o Playwright Component Testing para testes de regressão visual.
Executar testes
Importante: Todos os testes devem ser executados via Docker para garantir capturas de tela consistentes em diferentes ambientes.
# Executa todos os testes de componente no Docker (recomendado)
npm run playwright:docker
# Atualiza as linhas de base das capturas de tela no Docker
npm run playwright:docker:update
# Executa um teste específico por padrão de grep no Docker
npm run playwright:docker -- --grep "@ComponentName"
# Limpa o cache do Docker, se necessário
npm run playwright:docker:clear-cache
Testes locais (apenas Linux)
Se você estiver no Linux, pode executar os testes localmente:
# Instala os navegadores do Playwright (execute uma vez)
npm run playwright:install
# Executa todos os testes de componente
npm run playwright
# Atualiza as linhas de base das capturas de tela
npm run playwright:update
Para documentação detalhada sobre testes, consulte o Guia do Playwright.
Desenvolvimento
As instruções de desenvolvimento e contribuição estão disponíveis em CONTRIBUTING.md.
Licença
MIT