Components (registry)Layout
Testimonial Row
Layout template: testimonial-row
Contrato del layout
Un layout transporta anatomia, no pintura: se rellena por slots y depende del CSS de los componentes que lista. Instalarlo sin ellos lo deja sin estilos.
- Slots
{{headline}}{{quote1}}{{avatar1}}{{name1}}{{role1}}{{quote2}}{{avatar2}}{{name2}}{{role2}}{{quote3}}{{avatar3}}{{name3}}{{role3}}- Componentes requeridos
avatartypographyitem
Anatomía CSS
<div class="layoutTestimonialRow"> </div>
Tokens resueltos
Valores finales tras seguir la cadena de tokens. Derivados del source: si un token cambia, esta tabla cambia sola.
| Variante | Prop | Valor | Token |
|---|---|---|---|
| all | border | #e5e5e5 | border |
| all | fg | #525252 | muted.foreground |
CSS mínimo funcional
Autocontenido: sin imports ni tokens. Para previews y prototipos — en producción se consume el CSS del DS.
/* Layout: testimonial-row — structure only */
.l-testimonial-row {
padding: 48px 32px;
}
.l-testimonial-row__header {
text-align: center;
margin-bottom: 32px;
}
.l-testimonial-row__grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 24px;
}
@media (max-width: 768px) {
.l-testimonial-row__grid {
grid-template-columns: 1fr;
}
}
.l-testimonial-row__card {
border: 1px solid #e5e5e5;
border-radius: 12px;
padding: 24px;
}
.l-testimonial-row__quote {
font-style: italic;
margin: 0 0 16px;
}
.l-testimonial-row__author {
display: flex;
align-items: center;
gap: 12px;
}
.l-testimonial-row__name {
font-weight: 600;
}
.l-testimonial-row__role {
font-size: var(--text-sm);
color: #525252;
}
Codigo fuente
layouts/testimonial-row.css
/* Layout: testimonial-row — structure only */ .l-testimonial-row { padding: var(--spacing-12) var(--spacing-8); } .l-testimonial-row__header { text-align: center; margin-bottom: var(--spacing-8); } .l-testimonial-row__grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--spacing-6); } @media (max-width: 768px) { .l-testimonial-row__grid { grid-template-columns: 1fr; } } .l-testimonial-row__card { border: 1px solid var(--border); border-radius: var(--radius-lg); padding: var(--spacing-6); } .l-testimonial-row__quote { font-style: italic; margin: 0 0 var(--spacing-4); } .l-testimonial-row__author { display: flex; align-items: center; gap: var(--spacing-3); } .l-testimonial-row__name { font-weight: 600; } .l-testimonial-row__role { font-size: var(--text-sm); color: var(--muted-foreground); }