Boas-vindas ao curso de Angular com Nx e Storybook! Meu nome é Antônio Evaldo, sou instrutor na Alura, e irei te acompanhar ao longo desta jornada.
Audiodescrição: Antônio se descreve como um homem branco, de cabelos pretos cacheados e volumosos na altura dos ombros, e olhos castanho-escuros. Ele usa óculos de armação arredondada preta, veste uma camisa azul-escura com o logotipo branco da Alura, e está sentado em frente a uma parede clara com alguns quadros, iluminada em gradiente azul e rosa.
Neste curso, vamos aprender muitas coisas interessantes. Para começar a explicá-las, podemos apresentar o projeto em funcionamento no navegador.
No Storybook, temos o projeto dos cursos anteriores aberto em um dos componentes que vamos criar e desenvolver juntos: o componente de typography
.
Além de explorar diversas questões novas com esse componente, desenvolveremos outro componente mais complexo: o modal
. Ele está bem elaborado, vindo do Figma da Alfabit, empresa fictícia que abordaremos neste curso.
Falaremos sobre aspectos interessantes, incluindo a publicação de componentes, que podemos mostrar no npm. Por exemplo: o componente de botão (@alfabit-alura/button
) depende do componente @alfabit-alura/typography
, então também vamos explorar questões de dependência.
Ao final do curso, em uma aplicação externa ("AppExterno"), vamos conferir como podemos integrar todos esses componentes que criamos.
Nessa aplicação, temos o botão "Abrir modal". Ao fazer isso, o componente modal
aparece no centro da tela indicando que deu certo. Internamente, ele utiliza o componente typography
. Além disso, lidamos com os eventos de fechar o modal
, tanto pelo botão "X" quanto pelo "Fechar modal".
Repassando os conceitos que serão abordados, aprenderemos a criar componentes compostos, componentes dinâmicos com a diretiva ngComponentOutlet
, e a lidar com dependências no npm ao publicar componentes. Por fim, vamos realizar algumas melhorias no Storybook, como a questão de add-ons, de complementos, de args personalizados, e muito mais.
Ao final deste curso, seremos capazes de avançar significativamente no design system da Alfabit, de modo a criar componentes mais complexos.
Para melhor acompanhamento do conteúdo do curso, é importante ter familiaridade com Angular, Nx e Storybook, pois utilizaremos vários conceitos básicos dessas ferramentas.
Tudo preparado para nos acompanhar? Esperamos você no próximo vídeo!
Já temos uma versão do Storybook da Alfabit e dois componentes desenvolvidos no design system. Começaremos com o Storybook aberto no navegador, para dar início aos processos.
No VS Code, temos o projeto do design system da Alfabit, e executamos no terminal o comando para abrir o Storybook, que pode ser feito tanto pelo terminal diretamente, quanto pelo Nx Console.
Detalhamos essas informações na atividade Preparando o ambiente.
No navegador, temos o botão (button
) e o input (input
) desenvolvidos com seus vários stories, etapas realizadas nos cursos anteriores. Entretanto, no Figma do design system, ainda há muitos componentes a serem desenvolvidos, como checkboxes, modais e notices.
Não teremos tempo para fazer tudo isso ao longo da formação, mas podemos criar um componente importante da aba "Pages > Átomos" no menu lateral esquerdo.
Conferimos que, seguindo o design atômico, temos os átomos que compõem as moléculas. Inclusive, registramos no Storybook as cores que o design system usa.
No entanto, ainda não demos muita atenção à tipografia. Nessa parte, temos uma padronização para tamanhos, alturas de linhas, e peso das fontes que podemos utilizar em todo o design system, inclusive em outros componentes. Isso é um átomo, já que um botão, um modal ou uma notice são feitos por tipografias em tamanhos específicos e padronizados.
Pensando nisso, podemos criar um componente chamado typography
, que irá encapsular toda a lógica referente às estilizações de fontes.
Para começar, criaremos a biblioteca para esse componente. No VS Code, podemos interromper o servidor do Storybook. Feito isso, executaremos o seguinte comando:
nx g @nx/angular:library --name=libs/ui/typography --publishable=true --importPath=@alfabit-alura/typography --prefix=ab --projectNameAndRootFormat=as-provided
Primeiro, usamos o comando nx g @nx/angular:library
para criar a biblioteca. Depois, especificamos o nome dela com o diretório em --name
, colocando typography
em libs/ui
.
Por fim, utilizamos as configurações habituais, indicando que é publicável (--publishable=true
) no caminho (--importPath
) @alfabit-alura/typography
, usando a sintaxe de escopo do npm.
Após a execução, a biblioteca será gerada. Finalizado esse processo, podemos abrir o explorador de arquivos à esquerda, onde teremos uma nova pasta chamada "typography" dentro de "libs > ui".
Com o terminal aberto novamente, nosso próximo passo será gerar o arquivo de stories para a biblioteca criada. Para isso, executaremos o comando abaixo:
nx g @nx/angular:stories --name=typography --interactionTests=false
Agora, executamos o comando nx g @nx/angular:stories
para o projeto typography
, sem gerar os testes de interação (--interactionTests=false
).
Após a execução, o terminal indica que o arquivo de stories foi criado em "typography". No explorador à esquerda, na pasta "libs > ui > typography > src > lib > typography", encontramos o arquivo typography.component.stories.ts
.
typography.component.stories.ts
:
import type { Meta, StoryObj } from '@storybook/angular';
import { TypographyComponent } from './typography.component';
const meta: Meta<TypographyComponent> = {
component: TypographyComponent,
title: 'TypographyComponent',
};
export default meta;
type Story = StoryObj<TypographyComponent>;
export const Primary: Story = {
args: {},
};
Para seguir a estrutura do monorepo, vamos mover o arquivo typography.component.stories.ts
para "storybook-host > src > lib > Atoms".
Feito isso, precisaremos atualizar a importação de TypographyComponent
no arquivo para from '@alfabit-alura/typography'
, conforme o padrão do monorepo.
import type { Meta, StoryObj } from '@storybook/angular';
import { TypographyComponent } from '@alfabit-alura/typography';
const meta: Meta<TypographyComponent> = {
component: TypographyComponent,
title: 'TypographyComponent',
};
export default meta;
type Story = StoryObj<TypographyComponent>;
export const Primary: Story = {
args: {},
};
Uma vez salvas as alterações no arquivo, vamos abrir o terminal novamente e executar o servidor do Storybook utilizando o seguinte comando:
nx storybook storybook-host
Após a execução, verificamos no navegador que o TypographyComponent
aparece no Storybook. No entanto, ele não apareceu dentro da categoria "ATOMS".
O motivo é que o arquivo de stories foi gerado automaticamente com a propriedade title
, que sobrescreve o comportamento padrão e aparece na estrutura definida no VS Code.
Removendo essa propriedade e ajustando a indentação, o typography
será movido para a categoria de átomos, conforme esperado.
typography.component.stories.ts
:
import type { Meta, StoryObj } from '@storybook/angular';
import { TypographyComponent } from './typography.component';
const meta: Meta<TypographyComponent> = {
component: TypographyComponent,
};
export default meta;
type Story = StoryObj<TypographyComponent>;
export const Primary: Story = {
args: {},
};
Na sequência, começaremos a desenvolver o código desse componente!
Já criamos a biblioteca typography
, que está sendo exibida corretamente no Storybook. No entanto, o componente Angular sempre é criado com um simples parágrafo.
Neste vídeo, começaremos a desenvolver o código de acordo com o Figma.
render
No Figma, há uma seção de tipografia. A partir dela, focaremos na parte de "Desktop", que é a tipografia para tamanhos de telas de computadores. Teremos os tamanhos H1
, H2
, H3
, Subtitle1
e Subtitle2
, com cada nível diminuindo um pouco o tamanho da fonte e a altura da linha.
Além disso, há uma seção para textos ("Text") de outros propósitos, que não são necessariamente títulos. Existem textos dos seguintes tamanhos:
L
(Large - Grande);M
(Medium - Médio);S
(Small - Pequeno);- E
XS
(Extra Small - Extra Pequeno).
Vamos implementar tudo isso aos poucos.
typography.component.html
Primeiramente, vamos transformar o HTML do componente em um simples H1
. Para isso, precisamos localizar o arquivo typography.component.html
com "Ctrl + P".
No arquivo, vamos substituir o parágrafo p
pela tag h1
e salvar.
typography.component.html
:
<h1>
typography works!
</h1>
Ao salvar e voltar ao navegador, temos um título maior do que um parágrafo.
Além disso, queremos permitir que o componente typography
receba conteúdo dinâmico. Em vez de "typography works!", podemos usar ng-content
para torná-lo mais flexível, permitindo passar HTML, ícones, entre outros elementos.
<h1>
<ng-content />
</h1>
Uma vez salvo o arquivo, quando retornamos ao navegador, o conteúdo desaparece, pois precisamos entender como tratar o ng-content
no Storybook.
render
De volta ao VS Code, vamos acessar o arquivo typography.component.stories.ts
. O story Primary
é exibido no Storybook e, por enquanto, tem apenas o args
.
typography.component.stories.ts
:
// código omitido
export const Primary: Story = {
args: {},
};
Como não criamos um novo input, não conseguimos controlar a exibição do ng-content
pelos args
. Por isso, utilizaremos a função render
.
Podemos utilizar a função render
diretamente no Primary
, mas vamos colocá-la no nível da constante meta
, de modo a especificar a função para todos os stories do arquivo. Logo após o component
de meta
, vamos escrever render
.
Feito isso, vamos declarar a propriedade render
como uma arrow function que retorna um objeto. Nesse objeto, iremos declarar uma propriedade chamada template
e usar uma template string.
Dentro da template string, colocaremos o seletor do typography
, que é ab-typography
. Após fechar a tag, podemos passar o conteúdo, como "Text".
// código omitido
const meta: Meta<TypographyComponent> = {
component: TypographyComponent,
render: () => ({
template: `
<ab-typography>
Text
</ab-typography>
`,
}),
};
// código omitido
Ao salvar o arquivo e retornar ao navegador, o texto aparece normalmente.
A função render
nos dá um controle maior sobre como o componente será renderizado, especialmente em situações onde não temos apenas inputs, mas também um ng-content
.
A seguir, vamos trabalhar nos inputs do componente!
O curso Angular e Storybook: crie componentes compostos em um Design System possui 159 minutos de vídeos, em um total de 64 atividades. Gostou? Conheça nossos outros cursos de Angular em Front-end, ou leia nossos artigos de Front-end.
Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:
Impulsione a sua carreira com os melhores cursos e faça parte da maior comunidade tech.
1 ano de Alura
Assine o PLUS e garanta:
Formações com mais de 1500 cursos atualizados e novos lançamentos semanais, em Programação, Inteligência Artificial, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.
A cada curso ou formação concluído, um novo certificado para turbinar seu currículo e LinkedIn.
No Discord, você tem acesso a eventos exclusivos, grupos de estudos e mentorias com especialistas de diferentes áreas.
Faça parte da maior comunidade Dev do país e crie conexões com mais de 120 mil pessoas no Discord.
Acesso ilimitado ao catálogo de Imersões da Alura para praticar conhecimentos em diferentes áreas.
Explore um universo de possibilidades na palma da sua mão. Baixe as aulas para assistir offline, onde e quando quiser.
Acelere o seu aprendizado com a IA da Alura e prepare-se para o mercado internacional.
1 ano de Alura
Todos os benefícios do PLUS e mais vantagens exclusivas:
Luri é nossa inteligência artificial que tira dúvidas, dá exemplos práticos, corrige exercícios e ajuda a mergulhar ainda mais durante as aulas. Você pode conversar com a Luri até 100 mensagens por semana.
Aprenda um novo idioma e expanda seus horizontes profissionais. Cursos de Inglês, Espanhol e Inglês para Devs, 100% focado em tecnologia.
Transforme a sua jornada com benefícios exclusivos e evolua ainda mais na sua carreira.
1 ano de Alura
Todos os benefícios do PRO e mais vantagens exclusivas:
Mensagens ilimitadas para estudar com a Luri, a IA da Alura, disponível 24hs para tirar suas dúvidas, dar exemplos práticos, corrigir exercícios e impulsionar seus estudos.
Envie imagens para a Luri e ela te ajuda a solucionar problemas, identificar erros, esclarecer gráficos, analisar design e muito mais.
Escolha os ebooks da Casa do Código, a editora da Alura, que apoiarão a sua jornada de aprendizado para sempre.