Skip to main content

Link

O componente Link é um elemento de navegação que fornece estrutura consistente e acessibilidade adequada para links internos e externos. Suporta diferentes variantes de cor, tamanhos e ícones opcionais.

Importação

import { Link } from '@useblu/ocean-react';

Importação específica (recomendado para tree-shaking)

import { Link } from '@useblu/ocean-react/Link';

Importação de tipos TypeScript

import type { LinkProps } from '@useblu/ocean-react';

// Uso em componente customizado
const MyLink: React.FC<{ url: string; text: string }> = ({ url, text }) => {
return (
<Link href={url} variant="primary">
{text}
</Link>
);
};

Playground Interativo

Explore o componente Link no playground interativo do Storybook:

Documentação Completa

Para documentação técnica detalhada, exemplos de uso e API completa, consulte o Storybook do Link.

No Storybook você encontrará:

  • Controles interativos para testar todas as props
  • API gerada automaticamente com tipagem completa
  • Exemplos visuais de todas as variantes e estados
  • Playground para experimentação rápida

Uso básico

<Link href="https://example.com">Link de exemplo</Link>

Variantes

O Link suporta três variantes de cor:

Tamanhos

O Link suporta três tamanhos diferentes:

Com ícones

O Link pode incluir ícones opcionais:

Estados

O Link suporta diferentes estados visuais:

Em contexto

Veja como o Link se comporta dentro de um texto:

API

Props

PropTipoPadrãoDescrição
childrenReactNode-Conteúdo do link
variant'primary' | 'inverse' | 'neutral''primary'Variante de cor do link
size'sm' | 'md' | 'tiny''md'Tamanho do link
icon'linkChevron' | 'externalLink'-Ícone opcional do link
disabledbooleanfalseDesabilita o link
hrefstring-URL de destino do link
classNamestring-Classes CSS adicionais

Classes CSS

O componente utiliza as seguintes classes CSS que podem ser customizadas:

ClasseDescrição
.ods-linkContainer principal do Link
.ods-link__contentConteúdo do link
.ods-link__iconÍcone do link
.ods-link--with-iconModificador quando há ícone
.ods-link--primaryVariante primária
.ods-link--inverseVariante inversa
.ods-link--neutralVariante neutra
.ods-link--smTamanho pequeno
.ods-link--mdTamanho médio
.ods-link--tinyTamanho tiny
.ods-link--disabledEstado desabilitado
.ods-link--chevronÍcone chevron
.ods-link--externalÍcone link externo

Acessibilidade

  • ✅ Suporte completo a navegação por teclado
  • ✅ Estados de foco visíveis
  • ✅ Atributos ARIA apropriados
  • ✅ Suporte a screen readers
  • ✅ Contraste adequado em todos os estados

Boas práticas

  • Use href válido para todos os links
  • Use target="_blank" para links externos
  • Use rel="noopener noreferrer" para links externos
  • Use aria-label para links sem texto descritivo
  • Use ícones apropriados para indicar o tipo de link

Melhores práticas

✅ Faça

  • Use para navegação interna e externa
  • Sempre forneça um href válido
  • Use texto descritivo para o link
  • Use target="_blank" para links externos
  • Use ícones apropriados (externalLink para externos)
  • Use variante primary para links importantes
  • Use variante neutral para links secundários

❌ Não faça

  • Não use para botões (use Button ou IconButton)
  • Não use texto genérico como "Clique aqui"
  • Não omita href ou use href="#" sem propósito
  • Não ignore estados de foco e hover
  • Não use links para ações que não navegam
  • Não use variante inverse sem contexto adequado

Casos de uso comuns

function InternalLink() {
return (
<Link href="/documentacao" variant="primary">
Ver documentação
</Link>
);
}
function ExternalLink() {
return (
<Link
href="https://github.com/ocean-ds/ocean-web"
target="_blank"
rel="noopener noreferrer"
icon="externalLink"
variant="primary"
>
Repositório no GitHub
</Link>
);
}
function LinkWithChevron() {
return (
<Link href="/proxima-pagina" icon="linkChevron" variant="primary">
Próxima página
</Link>
);
}
function DisabledLink() {
return (
<Link href="#" disabled variant="neutral">
Link indisponível
</Link>
);
}
function LinkInText() {
return (
<p>
Para mais informações, consulte nossa{' '}
<Link href="/documentacao" variant="primary">
documentação completa
</Link>{' '}
ou visite nosso{' '}
<Link
href="https://example.com"
target="_blank"
rel="noopener noreferrer"
icon="externalLink"
variant="neutral"
>
site externo
</Link>
.
</p>
);
}
function NavigationLinks() {
return (
<nav>
<Link href="/inicio" variant="primary">
Início
</Link>
<Link href="/sobre" variant="neutral">
Sobre
</Link>
<Link href="/contato" variant="neutral">
Contato
</Link>
</nav>
);
}
function CustomSizeLinks() {
return (
<div>
<Link href="#" size="tiny" variant="neutral">
Link pequeno
</Link>
<Link href="#" size="sm" variant="primary">
Link pequeno
</Link>
<Link href="#" size="md" variant="primary">
Link padrão
</Link>
</div>
);
}