From 3e29b907a6859c2a2c18b5e457d2b74c9db97b1c Mon Sep 17 00:00:00 2001 From: Vinicius de Liz Date: Thu, 1 Feb 2024 17:50:25 -0300 Subject: [PATCH] docs(pt) i18n: Create and translate `docs/pt/guide/extending-default-theme.md` --- docs/pt/guide/extending-default-theme.md | 340 +++++++++++++++++++++++ 1 file changed, 340 insertions(+) create mode 100644 docs/pt/guide/extending-default-theme.md diff --git a/docs/pt/guide/extending-default-theme.md b/docs/pt/guide/extending-default-theme.md new file mode 100644 index 00000000..0b87b493 --- /dev/null +++ b/docs/pt/guide/extending-default-theme.md @@ -0,0 +1,340 @@ +--- +outline: deep +--- + +# Estendendo o Tema Padrão + +O tema padrão do VitePress é otimizado para documentação e pode ser personalizado. Consulte a [Visão Geral de Configuração do Tema Padrão](../reference/default-theme-config) para uma lista abrangente de opções. + +No entanto, há casos em que apenas a configuração não será suficiente. Por exemplo: + +1. É necessário ajustar a estilização CSS; +2. É necessário modificar a instância da aplicação Vue, por exemplo para registrar componentes globais; +3. É necessário injetar conteúdo personalizado no tema por meio de _slots_ no layout. + +Essas personalizações avançadas exigirão o uso de um tema personalizado que "estende" o tema padrão. + +::: tip +Antes de prosseguir, certifique-se de ler primeiro [Usando um Tema Personalizado](./custom-theme) para entender como temas personalizados funcionam. +::: + +## Personalizando o CSS + +O CSS do tema padrão pode ser personalizado substituindo as variáveis CSS no nível raiz: + +```js +// .vitepress/theme/index.js +import DefaultTheme from 'vitepress/theme' +import './custom.css' + +export default DefaultTheme +``` + +```css +/* .vitepress/theme/custom.css */ +:root { + --vp-c-brand-1: #646cff; + --vp-c-brand-2: #747bff; +} +``` + +Veja as [variáveis CSS do tema padrão](https://github.com/vuejs/vitepress/blob/main/src/client/theme-default/styles/vars.css) que podem ser substituídas. + +## Usando Fontes Diferentes + +VitePress usa [Inter](https://rsms.me/inter/) como fonte padrão e incluirá as fontes na saída de compilação. A fonte também é pré-carregada automaticamente em produção. No entanto, isso pode não ser desejável se você quiser usar uma fonte principal diferente. + +Para evitar a inclusão de Inter na saída de compilação, importe o tema de `vitepress/theme-without-fonts`: + +```js +// .vitepress/theme/index.js +import DefaultTheme from 'vitepress/theme-without-fonts' +import './my-fonts.css' + +export default DefaultTheme +``` + +```css +/* .vitepress/theme/custom.css */ +:root { + --vp-font-family-base: /* fonte de texto normal */ + --vp-font-family-mono: /* fonte de código */ +} +``` + +::: warning +Se estiver usando componentes opcionais como os componentes da [Página da Equipe](../reference/default-theme-team-page), certifique-se de também importá-los de `vitepress/theme-without-fonts`! +::: + +Se a sua fonte é um arquivo local referenciado via `@font-face`, ela será processada como um ativo e incluída em `.vitepress/dist/assets` com um nome de arquivo hash. Para pré-carregar esse arquivo, use o gancho de construção [transformHead](../reference/site-config#transformhead): + +```js +// .vitepress/config.js +export default { + transformHead({ assets }) { + // ajuste o regex para corresponder à sua fonte + const myFontFile = assets.find(file => /font-name\.\w+\.woff2/) + if (myFontFile) { + return [ + [ + 'link', + { + rel: 'preload', + href: myFontFile, + as: 'font', + type: 'font/woff2', + crossorigin: '' + } + ] + ] + } + } +} +``` + +## Registrando Componentes Globais + +```js +// .vitepress/theme/index.js +import DefaultTheme from 'vitepress/theme' + +/** @type {import('vitepress').Theme} */ +export default { + extends: DefaultTheme, + enhanceApp({ app }) { + // registre seus componentes globais personalizados + app.component('MyGlobalComponent' /* ... */) + } +} +``` + +Se estiver usando TypeScript: +```ts +// .vitepress/theme/index.ts +import type { Theme } from 'vitepress' +import DefaultTheme from 'vitepress/theme' + +export default { + extends: DefaultTheme, + enhanceApp({ app }) { + // registre seus componentes globais personalizados + app.component('MyGlobalComponent' /* ... */) + } +} satisfies Theme +``` + +Como estamos usando Vite, você também pode aproveitar a [funcionalidade de importação glob](https://vitejs.dev/guide/features.html#glob-import) do Vite para registrar automaticamente um diretório de componentes. + +## _Slots_ no Layout + +O componente `` do tema padrão possui alguns _slots_ que podem ser usados para injetar conteúdo em locais específicos da página. Aqui está um exemplo de como injetar um componente antes do esquema : + +```js +// .vitepress/theme/index.js +import DefaultTheme from 'vitepress/theme' +import MyLayout from './MyLayout.vue' + +export default { + extends: DefaultTheme, + // substitua o Layout por um componente envolvente que + // injeta os slots + Layout: MyLayout +} +``` + +```vue + + + + +``` + +Ou você também pode usar a função _render_. + +```js +// .vitepress/theme/index.js +import { h } from 'vue' +import DefaultTheme from 'vitepress/theme' +import MyComponent from './MyComponent.vue' + +export default { + extends: DefaultTheme, + Layout() { + return h(DefaultTheme.Layout, null, { + 'aside-outline-before': () => h(MyComponent) + }) + } +} +``` + +Lista completa de _slots_ disponíveis no layout do tema padrão: + +- Quando `layout: 'doc'` (padrão) está habilitado via frontmatter: + - `doc-top` + - `doc-bottom` + - `doc-footer-before` + - `doc-before` + - `doc-after` + - `sidebar-nav-before` + - `sidebar-nav-after` + - `aside-top` + - `aside-bottom` + - `aside-outline-before` + - `aside-outline-after` + - `aside-ads-before` + - `aside-ads-after` +- Quando `layout: 'home'` está habilitado via frontmatter: + - `home-hero-before` + - `home-hero-info-before` + - `home-hero-info` + - `home-hero-actions-after` + - `home-hero-image` + - `home-hero-after` + - `home-features-before` + - `home-features-after` +- Quando `layout: 'page'` está habilitado via frontmatter: + - `page-top` + - `page-bottom` +- Na página não encontrada (404): + - `not-found` +- Sempre: + - `layout-top` + - `layout-bottom` + - `nav-bar-title-before` + - `nav-bar-title-after` + - `nav-bar-content-before` + - `nav-bar-content-after` + - `nav-screen-content-before` + - `nav-screen-content-after` + +## Usando a API View Transitions + +### Na Alternância de Aparência + +Você pode estender o tema padrão para fornecer uma transição personalizada quando o modo de cor é alternado. Um exemplo: + +```vue + + + + + + + +``` + +Resultado (**atenção!**: cores piscantes, movimentos súbitos, luzes brilhantes): + +
+Demo + +![Demo de Transição de Alternância de Aparência](/appearance-toggle-transition.webp) + +
+ +Consulte [Chrome Docs](https://developer.chrome.com/docs/web-platform/view-transitions/) para mais detalhes sobre _view transitions_. + +### Na Mudança de Rota + +Em breve. + +## Substituindo Componentes Internos + +Você pode usar os [aliases](https://vitejs.dev/config/shared-options.html#resolve-alias) Vite para substituir os componentes do tema padrão pelos seus personalizados: + +```ts +import { fileURLToPath, URL } from 'node:url' +import { defineConfig } from 'vitepress' + +export default defineConfig({ + vite: { + resolve: { + alias: [ + { + find: /^.*\/VPNavBar\.vue$/, + replacement: fileURLToPath( + new URL('./components/CustomNavBar.vue', import.meta.url) + ) + } + ] + } + } +}) +``` + +Para saber o nome exato do componente consulte [nosso código fonte](https://github.com/vuejs/vitepress/tree/main/src/client/theme-default/components). Como os componentes são internos, há uma pequena chance de que o nome deles seja atualizado entre lançamentos secundários. \ No newline at end of file