Estrutura de Diretório
O Slidev emprega algumas convenções de estrutura de diretório para minimizar a superfície de configuração e tornar as extensões das funcionalidades flexíveis e intuitivas.
A estrutura básica é a seguinte:
seu-slidev/
├── components/ # componentes customizados
├── layouts/ # layouts customizados
├── public/ # recursos estáticos
├── setup/ # configurações / hooks customizados
├── styles/ # estilos customizados
├── index.html # injeções ao index.html
├── slides.md # a entrada principal dos slides
└── vite.config.ts # extensões às configurações do vite
Todos eles são opcionais.
Componentes
Convenções: ./components/*.{vue,js,ts,jsx,tsx,md}
Os componentes dentro deste diretório podem ser usados diretamente no Markdown dos slides como o mesmo nome do arquivo.
Por exemplo:
seu-slidev/
├── ...
└── components/
├── MeuComponente.vue
└── HelloWorld.ts
<!-- slides.md -->
# Meu slide
<MeuComponente :count="4"/>
<!-- os dois nomes funcionam -->
<hello-world foo="bar">
Slot
</hello-world>
Esta funcionalidade é fornecida pelo vite-plugin-components
, saiba mais por lá.
O Slidev também disponibiliza alguns componentes embutidos pra você usar.
Layouts
Convenções: ./layouts/*.{vue,js,ts,jsx,tsx}
su-slidev/
├── ...
└── layouts/
├── cover.vue
└── meu-tema-supimpa.vue
Você pode usar qualquer nome de arquivo para o seu layout. Depois é só referenciar o layout no seu cabeçalho YAML usando o nome do arquivo.
---
layout: meu-tema-supimpa
---
Se o layout que você fez tiver o mesmo nome de um interno ou de algum tema, o seu layout customizado terá prioridade sobre os demais. A ordem de prioridade é local > tema > interno
.
No componente de layout, use <slot/>
para o conteúdo do slide. Por exemplo:
<!-- default.vue -->
<template>
<div class="slidev-layout default">
<slot />
</div>
</template>
Público
Convenções: ./public/*
Recursos neste diretórios serão servidos na rota raiz /
durante o desenvolvimento, e copiados para a raiz do diretório dist
do jeito que estiverem. Leia mais sobre o diretório public
do Vite's.
Estilo
Convenções: ./style.css
| ./styles/index.{css,js,ts}
Arquivos que seguem esta convenção serão injetados na raiz da aplicação. Se você precisar importar múltiplas entradas de CSS, você pode criar a seguinte estrutura e administrar a ordem de importação por conta própria.
seu-slidev/
├── ...
└── styles/
├── index.ts
├── base.css
├── code.css
└── layouts.css
// styles/index.ts
import './base.css'
import './code.css'
import './layouts.css'
Estilos serão processados pelo Windi CSS e o PostCSS, portanto você pode usar aninhamento de css e as at-directives sem nenhuma configuração adicional. Por exemplo:
.slidev-layout {
@apply px-14 py-10 text-[1.1rem];
h1, h2, h3, h4, p, div {
@apply select-none;
}
pre, code {
@apply select-text;
}
a {
color: theme('colors.primary');
}
}
index.html
Convenções: index.html
O index.html
provê a habilidade de injetar meta tags e/ou script ao arquivo index.html
principal.
Por exemplo, no caso do seguinte index.html
customizado:
<!-- ./index.html -->
<head>
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Fira+Code:wght@400;600&family=Nunito+Sans:wght@200;400;600&display=swap" rel="stylesheet">
</head>
<body>
<script src="./seus-scripts"></script>
</body>
O index.html
final hospedado será:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/gh/slidevjs/slidev/assets/favicon.png">
<!-- injected head -->
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Fira+Code:wght@400;600&family=Nunito+Sans:wght@200;400;600&display=swap" rel="stylesheet">
</head>
<body>
<div id="app"></div>
<script type="module" src="__ENTRY__"></script>
<!-- injected body -->
<script src="./seu-scripts"></script>
</body>
</html>
Camadas Globais
Convenções: global-top.vue
| global-bottom.vue
Saiba mais: Camadas Globais