C5 rebanada 1 de 4. Que partes son publicas no es cuestion de gusto: es
`kind` en el morfo (21 publicas, 12 privadas). Namespace `Chronos.*` con la
forma de Table/Calendar, y la raiz gana ranura de composicion — pasar
`children` REEMPLAZA el cuerpo por defecto. Antes se renderizaban ADEMAS de
la vista completa, un segundo arbol colgando de un calendario entero; ningun
consumidor los pasaba.
Ocho partes de toolbar (`Toolbar`, `Heading`, `Prev`/`Next`/`Today`/`Undo`/
`Redo`/`SearchButton`), ergonomicas al estilo `Calendar.PrevButton`: componen
el IconButton/Button del sistema, su glifo y la llamada al provider, asi que
el consumidor recibe un control que FUNCIONA y no un gancho vacio. El cuerpo
por defecto se recompone desde ellas — no es un camino privilegiado, es el
primer consumidor de la API compuesta.
`searchOpen` sube al provider: en un toolbar compuesto el boton y la paleta
viven en subarboles distintos y el provider es el unico sitio que alcanzan
los dos. Y la prueba compuesta destapo un hueco real — el SearchButton
compuesto no abria nada porque la paleta vivia en el cuerpo por defecto. Los
overlays pertenecen a la RAIZ: extraida a `chronos-search-palette.svelte`.
El Dialog del editor tiene el mismo hueco y sigue dentro de la vista; es lo
primero de la rebanada 2.
Dos declaraciones falsas mas, del patron de siempre: `toolbar` declaraba
`header` y se pintaba un `div`; `heading` declaraba `div` y se pintaba un
`span`. Los wrappers renderizan lo DECLARADO, medido sin desplazamiento.
Medido con dos instancias en la misma pagina: next en la compuesta mueve solo
la compuesta (junio -> julio), prev en la de por defecto mueve solo esa
(junio -> mayo), ids de heading distintos, y la paleta de cada raiz lista sus
18 eventos por separado. check 74 = base · 458 vitest · morfo:check PASS
chronos · docs:check 0/621 · rtl:check 0/177 · eidos-lint invalid 0 · consola
limpia en las tres vistas.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>