You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
73 lines
1.9 KiB
73 lines
1.9 KiB
<script lang="ts">
|
|
/**
|
|
* Estructura común del taller.
|
|
*
|
|
* El taller es un curso, no una colección de páginas sueltas: la barra de la
|
|
* izquierda enseña el temario entero —los principios numerados y las fichas
|
|
* de estilo— desde cualquier página de la sección, y marca dónde se está.
|
|
*
|
|
* Vive aquí y no en cada página por dos razones: el índice no se vuelve a
|
|
* pintar al pasar de capítulo, así que no parpadea ni pierde el
|
|
* desplazamiento, y no hay forma de añadir una página del taller y olvidarse
|
|
* de ponerlo.
|
|
*/
|
|
import { page } from '$app/state';
|
|
import IndiceTaller from '$lib/components/IndiceTaller.svelte';
|
|
|
|
let { data, children } = $props();
|
|
|
|
/** El capítulo abierto, si estamos en uno; en la portada, ninguno. */
|
|
const actual = $derived(page.url.pathname.split('/')[2]);
|
|
</script>
|
|
|
|
<div class="container taller">
|
|
<aside class="indice">
|
|
<IndiceTaller principios={data.principios} {actual} />
|
|
</aside>
|
|
|
|
<div class="principal">
|
|
{@render children()}
|
|
</div>
|
|
</div>
|
|
|
|
<style>
|
|
.taller {
|
|
display: grid;
|
|
grid-template-columns: 13rem minmax(0, 1fr);
|
|
gap: var(--sp-6);
|
|
align-items: start;
|
|
}
|
|
|
|
/* Se separa de la cabecera pegajosa en vez de deslizarse bajo ella. */
|
|
.indice {
|
|
position: sticky;
|
|
top: calc(var(--altura-cabecera) + var(--sp-5));
|
|
max-height: calc(100vh - var(--altura-cabecera) - var(--sp-6));
|
|
overflow-y: auto;
|
|
padding-top: var(--sp-7);
|
|
}
|
|
|
|
.principal {
|
|
min-width: 0;
|
|
}
|
|
|
|
@media (max-width: 60rem) {
|
|
.taller {
|
|
grid-template-columns: minmax(0, 1fr);
|
|
}
|
|
|
|
/*
|
|
* Sin sitio para la columna, el índice pasa detrás del texto: en un curso,
|
|
* saber qué queda por leer importa igual en un móvil, así que se mueve,
|
|
* no se esconde.
|
|
*/
|
|
.indice {
|
|
position: static;
|
|
order: 1;
|
|
max-height: none;
|
|
padding-top: var(--sp-5);
|
|
border-top: 1px solid var(--c-border);
|
|
}
|
|
}
|
|
</style>
|