📝 Documentação do arquivo layout.js
da pasta (app)
📚 Descrição Geral
O componente layout.js
define a estrutura básica da aplicação PetAcademy. Ele é responsável por incorporar o tema, fontes, e o contexto para os cursos oferecidos na plataforma.
🚀 Importações
As importações são responsáveis por trazer recursos essenciais para a funcionalidade do layout. O código abaixo define as dependências necessárias para o componente.
import { ThemeProvider } from '@/components/theme-provider'
import { Montserrat } from 'next/font/google'
import { cn } from '@/lib/utils'
import '@/app/globals.css'
import NavBar from '@/components/NavBar'
import { CoursesProvider } from '@/components/context/CoursesContext'
Explicação das Importações:
- ThemeProvider: Suporte para alternar entre temas claro e escuro 🌙🌞.
- Montserrat: Fonte Montserrat do Google Fonts.
- cn: Função utilitária para manipulação de classes CSS 🧩.
- globals.css: Estilos globais da aplicação.
- NavBar: Componente de navegação principal.
- CoursesProvider: Contexto que fornece informações sobre cursos 🎓.
🖋 Fonte Montserrat
A fonte Montserrat é configurada com vários subconjuntos e pesos para garantir flexibilidade no design.
const montserrat = Montserrat({
subsets: ['latin'],
weight: ['100', '300', '400', '500', '700', '900'],
variable: '--font-sans',
})
Subconjuntos e Pesos:
- Subconjuntos: latin
- Pesos: 100, 300, 400, 500, 700, 900
📊 Metadados da Aplicação
O título e a descrição da aplicação são configurados como segue:
export const metadata = {
title: 'PetAcademy',
description: 'Plataforma online de cursos gratuitos',
}
Explicação:
- Título: PetAcademy 🐾
- Descrição: Plataforma online de cursos gratuitos 🎓
🏗 Estrutura do Componente
O componente RootLayout
é o responsável por renderizar o layout da aplicação. A estrutura básica é mostrada a seguir:
export default function RootLayout({ children }) {
return (
<html lang="pt-br" suppressHydrationWarning>
<head />
<body className={cn('min-h-screen bg-background font-sans antialiased', montserrat.variable)}>
<ThemeProvider
attribute="class"
defaultTheme="system"
enableSystem
disableTransitionOnChange
>
<CoursesProvider>
<NavBar />
<main>{children}</main>
</CoursesProvider>
</ThemeProvider>
</body>
</html>
)
}
Explicação da Estrutura HTML:
<html>
: Define a língua como português do Brasil (lang="pt-br"
).<head>
: Cabeçalho da página, atualmente vazio 🧠.<body>
: Aplicação de estilos com classes CSS para altura mínima e fundo, incluindo a variável de fonte Montserrat.
🛠️ Provedores
Dois provedores são usados para configurar o tema e o contexto de cursos na aplicação:
- ThemeProvider: Permite definir o tema da aplicação, com suporte para alternância entre modos claro e escuro.
- attribute: Define o atributo do tema.
- defaultTheme: Tema padrão.
- enableSystem: Habilita o ajuste automático do tema com base nas configurações do sistema.
- disableTransitionOnChange: Desabilita transições ao alternar o tema.
- CoursesProvider: Envolve a navegação e o conteúdo principal da aplicação, fornecendo os dados dos cursos 🖥️.
📌 Conteúdo Principal
O conteúdo é renderizado dinamicamente dentro da tag <main>
, sendo passado como filhos para o componente RootLayout
.
📋 Considerações Finais
Este componente é essencial para garantir que o layout da aplicação PetAcademy tenha uma base sólida. Ele facilita a navegação e permite a renderização do conteúdo dos cursos de maneira eficaz.
🔧 Código Completo
import { ThemeProvider } from '@/components/theme-provider'
import { Montserrat } from 'next/font/google'
import { cn } from '@/lib/utils'
import '@/app/globals.css'
import NavBar from '@/components/NavBar'
import { CoursesProvider } from '@/components/context/CoursesContext'
const montserrat = Montserrat({
subsets: ['latin'],
weight: ['100', '300', '400', '500', '700', '900'],
variable: '--font-sans',
})
export const metadata = {
title: 'PetAcademy',
description: 'Plataforma online de cursos gratuitos',
}
export default function RootLayout({ children }) {
return (
<html lang="pt-br" suppressHydrationWarning>
<head />
<body className={cn('min-h-screen bg-background font-sans antialiased', montserrat.variable)}>
<ThemeProvider
attribute="class"
defaultTheme="system"
enableSystem
disableTransitionOnChange
>
<CoursesProvider>
<NavBar />
<main>{children}</main>
</CoursesProvider>
</ThemeProvider>
</body>
</html>
)
}