ReferenciaComponentesPerenneactualizado 2026.084 min de lectura
Visión generalParte III · Interactivos y mobiliario
Parte III · Interactivos y mobiliario

Interactivos y mobiliario

Una demo de canvas en vivo y el contrato que hay detrás, y luego los componentes silenciosos que enmarcan cada nota — los que llevas viendo desde la primera página.

§3.1DemoMount, en vivo

El reparto de trabajo es el habitual del paquete: el marcado del montaje (escenario, slot de controles, slot de leyenda) viene en el paquete; el módulo de la demo y su cargador pertenecen al sitio. Este sitio guarda su cargador en src/lib/demo-loader.ts y llama a mountAllDemos() una sola vez desde el layout; la llamada corre en cada página, pero el chunk de un módulo de demo solo se descarga en las páginas que llevan un montaje [data-demo].

Una demo que toma entrada de puntero sobre su canvas pasa interactive — el escenario reclama entonces los gestos táctiles y muestra una cruz de puntería. Esta es pasiva (solo renderiza), así que deja el flag apagado y deslizar el dedo sobre el canvas sigue desplazando la página. Dibuja la interferencia de ondas de dos fuentes con el token de tinta de la propia página, así que sigue al tema:

Demo · Interferencia de ondas de dos fuentes
Demo · Interferencia de ondas de dos fuentes

Dos fuentes puntuales emiten ondas circulares; donde cresta encuentra cresta la tinta se encharca, donde cresta encuentra valle el papel asoma. Cambia el tema — la demo vuelve a entintarse con los tokens vivos.

El contrato del módulo es un único export por defecto, mount(ctx), que devuelve una función de limpieza; el cargador resuelve ids de módulo como waves/interference como el sitio prefiera (aquí, con import.meta.glob).

§3.2Mobiliario de página

Los componentes restantes enmarcan una nota en lugar de llenarla:

  • Hero abre una nota: kicker, título de exhibición, una entradilla que pasa por el pipeline de Markdown completo, una línea de meta y un tocLabel opcional que añade al sidebar una fila de «introducción» sin numerar. El title del frontmatter sigue siendo el canónico corto para el <title> y las tarjetas; el del hero puede ser largo.
  • PartHero abre un capítulo de un hub — la propia cabecera de esta página. Su kicker nunca se teclea: la ruta le pasa el rótulo «Parte III · …» del capítulo como props.partLabel.
  • Part divide una nota larga de una sola página en partes; el preset de numeración lo convierte en las filas de grupo tipo «PARTE II · Fundamentos» del sidebar. El muestrario está cortado así.
  • HubCard y .hub-grid son las tarjetas de portada de un hub; .path es su caja de ruta de lectura — ambas cosas en la visión general de esta galería.
  • LocalToc renderiza una lista de saltos dentro de la página; acepta las dos formas de ToC que producen los dos presets de numeración y se oculta por debajo de un mínimo configurable. Abajo, en vivo, sobre el ToC de este mismo capítulo.
  • SidebarMemory mantiene un sidebar con scroll donde el lector lo dejó entre cargas de página, y centra el elemento actual ([aria-current="page"] por defecto) siempre que fuera a quedar fuera de la vista. Colócalo dentro de la caja de scroll del sidebar, después del marcado de navegación; corre antes del primer pintado, así que el sidebar nunca parpadea arriba del todo. El sidebar de esta demo lo lleva.
  • LineageSvg enmarca como tarjeta un SVG dibujado a mano (un linaje de métodos, un árbol taxonómico) — hay uno más abajo.
  • PageFooter es la letra pequeña al pie de una nota — la línea bajo cada nota de aquí.
  • Las piezas de exploración viven en el capítulo de wiki; el lado Markdown de la galería es el muestrario.

§3.3LocalToc y LineageSvg, en vivo

LocalToc alimentado con el ToC de build de esta misma página — los mismos datos que consume el sidebar, entregados a la nota como props.toc:

Y LineageSvg alrededor de un diagrama escrito a mano, entintado por completo en tokens semánticos para que se asiente sobre ambos temas:

Fig. — dónde se sitúa la capa de apariencia
tokens.cssbase.cssbrowse.csscomponents

§3.4Mobiliario sin componente

Unas cuantas piezas son clases planas de base.css, para sitios que las renderizan desde su propio layout o las escriben como HTML dentro de la prosa:

ClaseQué es
.page-head + .kicker, .page-desc, .page-dateuna cabecera de página movida por el frontmatter (kicker, h1, descripción, fecha) que renderiza un layout en lugar de un <Hero>
.banner, .banner-fallbackun aviso de una línea bajo la cabecera; la variante fallback es la apagada
.page-footun pie de letra pequeña a dos columnas (slot izquierdo, slot derecho)
.speakla glosa en lenguaje llano bajo un título de análisis profundo; su rótulo es --speak-label
.path + .title, .route, .arrowuna caja de ruta de lectura en un hub
.ref-taguna pequeña etiqueta monoespaciada en una lista de referencias (un venue, un año)
.tag, .tag.teal / .mustard / .violetlas insignias de las tarjetas de artículos, usables en cualquier parte
.measured + .measured-head, .measured-body, .measured-pane (.doc), .measured-tagla tarjeta de comparación entre lo documentado y lo medido: una barra de título verde azulado maciza sobre dos paneles, el panel .doc con la afirmación y el otro con la medición — una silueta distinta de la de cualquier callout
.paper .idea-labelel pequeño rótulo en mayúsculas de la idea clave dentro del cuerpo de una PaperCard, p. ej. <span class="idea-label">Idea clave</span>
Títulos, secciones y cuerpo del texto, en este idioma.
    ↑↓ · Enter · Escastro-inkstone