Componentes

Primitivos do @bacdmy/ui. Use a sidebar ou âncoras (#button, #logo…) para ir direto a uma seção.

Accordion

Seções expansíveis para conteúdo longo.

Foto ou iniciais do usuário.

Estados

Com imagem vs. só fallback (iniciais).

BA

Com imagem

AvatarImage + AvatarFallback

JS

Só fallback

Quando a imagem falha ou não existe

Badge

Etiquetas de status e destaque.

Variantes

Escolha pela semântica, não pela cor isolada.

Default

default

Destaque principal

Secondary

secondary

Neutro / secundário

Outline

outline

Contorno, baixo contraste

Destructive

destructive

Erro / perigo

Navegação hierárquica.

Ações primárias e secundárias.

Variantes

default = CTA; secondary/outline/ghost = hierarquia menor; destructive = perigo; link = texto.

default

secondary

outline

ghost

destructive

link

Tamanhos

xs → lg para texto; icon* para botões só com ícone.

xs

sm

default

lg

icon

Card

Container para agrupar conteúdo.

Assinatura
Plano mensal da academy.

Acesso a todos os cursos e ao clube de benefícios.

Checkbox

Seleção booleana.

Collapsible

Mostrar/ocultar conteúdo sob demanda.

Command

Paleta de comandos / busca.

Primitivo de recorte com proporção fixa (@origin-space/image-cropper). Fluxos de upload ficam no app consumidor.

Uso básico

Zoom/pan + área de recorte fixa. Props principais: image, aspectRatio, onCropChange.

Use mouse wheel or pinch gesture to zoom. Drag with mouse or touch, or use arrow keys to pan the image within the crop area.
import {
  Cropper,
  CropperCropArea,
  CropperDescription,
  CropperImage
} from '@bacdmy/ui/cropper'

<Cropper image={src} aspectRatio={16 / 9} onCropChange={setCrop}>
  <CropperDescription />
  <CropperImage />
  <CropperCropArea />
</Cropper>

Modal centrado.

Menu contextual.

Empty

Estado vazio de listas e painéis.

Composição

EmptyMedia (icon|…) + EmptyTitle + EmptyDescription.

Nenhum item
Comece criando o primeiro registro.

Field

Layout de campos de formulário.

Usamos só para contato.

Input

Campo de texto.

Input Group

Input com addons.

https://

Código de verificação.

Rótulo de formulário (associe com htmlFor / id).

Marca brainstorm.academy — três formas via props booleanas.

Variantes

Completo (default), reduced (wordmark curto) e iconOnly (só o símbolo).

Completo

Logo + wordmark — headers e footers

reduced

Wordmark reduzido — espaços apertados

iconOnly

Só o ícone — sidebar, favicon-like

import { Logo } from '@bacdmy/ui/logo'

<Logo width={140} />
<Logo reduced width={120} />
<Logo iconOnly width={40} />

Menu de navegação horizontal (Radix Navigation Menu).

Composição

Lista + trigger + content + link — só @bacdmy/ui.

import {
  NavigationMenu,
  NavigationMenuContent,
  NavigationMenuItem,
  NavigationMenuLink,
  NavigationMenuList,
  NavigationMenuTrigger
} from '@bacdmy/ui/navigation-menu'

<NavigationMenu>
  <NavigationMenuList>
    <NavigationMenuItem>
      <NavigationMenuTrigger>Produtos</NavigationMenuTrigger>
      <NavigationMenuContent>
        <NavigationMenuLink href="#">Cursos</NavigationMenuLink>
      </NavigationMenuContent>
    </NavigationMenuItem>
  </NavigationMenuList>
</NavigationMenu>

Pagination

Navegação entre páginas.

Telefone internacional (react-phone-number-input).

Básico

Valor em E.164; defaultCountry define o país inicial.

import { PhoneInput } from '@bacdmy/ui/phone-input'

<PhoneInput
  value={value}
  onChange={setValue}
  defaultCountry="BR"
/>

Conteúdo flutuante ancorado.

Radio Group

Seleção exclusiva.

Scroll Area

Área com scroll estilizado.

Item 1

Item 2

Item 3

Item 4

Item 5

Item 6

Item 7

Item 8

Item 9

Item 10

Item 11

Item 12

Item 13

Item 14

Item 15

Item 16

Item 17

Item 18

Item 19

Item 20

Lista de opções.

Separator

Divisor visual (horizontal ou vertical).

Orientações

default = horizontal; orientation="vertical" em flex rows.

horizontal

Acima

Abaixo

vertical

A
B

Painel lateral (Dialog posicionado na borda).

Shell de navegação (SidebarProvider + partes). Este site de docs usa o mesmo primitivo.

Layout

Provider + Sidebar + Inset. Use h-svh no provider; SidebarContent com overflow-auto e min-h-0.

import {
  SidebarProvider,
  Sidebar,
  SidebarHeader,
  SidebarContent,
  SidebarFooter,
  SidebarInset,
  SidebarTrigger
} from '@bacdmy/ui/sidebar'

<SidebarProvider className="h-svh">
  <Sidebar>
    <SidebarHeader>{/* marca */}</SidebarHeader>
    <SidebarContent>{/* menus */}</SidebarContent>
    <SidebarFooter>{/* rodapé */}</SidebarFooter>
  </Sidebar>
  <SidebarInset>
    <header>
      <SidebarTrigger />
    </header>
    {children}
  </SidebarInset>
</SidebarProvider>

Skeleton

Placeholder de carregamento.

Controle de valor contínuo.

Toasts — monte o Toaster do pacote no layout e chame toast().

Tipos

success / error — toast() vem de sonner; Toaster de @bacdmy/ui.

success

error

import { Toaster } from '@bacdmy/ui/sonner'
import { toast } from 'sonner'

// no layout / providers:
<Toaster />

toast.success('Salvo com sucesso')
toast.error('Algo falhou')

Alternância on/off.

Table

Tabela de dados.

CursoNível
After EffectsIntermediário
PremiereIniciante

Abas de conteúdo.

Conteúdo da aba geral.

Textarea

Campo multilinha.

Dica ao hover/focus.