Components (registry)Layout
Feature Tabs
Layout template: feature-tabs
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}}{{tab1_label}}{{tab2_label}}{{tab3_label}}{{tab1_title}}{{tab1_body}}{{tab1_image}}- Componentes requeridos
tabstypographyimagebutton
Anatomía CSS
<div class="layoutFeatureTabs"> </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 | bg | #f5f5f5 | accent |
| all | border | #f5f5f5 | accent |
| all | fg | #525252 | muted.foreground |
| all | pressed-bg | #f5f5f5 | accent |
| all | pressed-fg | white | (unparsed) |
| all | pressed-border | #f5f5f5 | accent |
CSS mínimo funcional
Autocontenido: sin imports ni tokens. Para previews y prototipos — en producción se consume el CSS del DS.
/* Layout: feature-tabs — structure only */
.l-feature-tabs {
padding: 48px 32px;
}
.l-feature-tabs__header {
text-align: center;
margin-bottom: 24px;
}
.l-feature-tabs__tabs {
display: flex;
gap: 8px;
justify-content: center;
margin-bottom: 24px;
}
.l-feature-tabs__tabs .tab {
padding: 8px 16px;
border: 1px solid #e5e5e5;
border-radius: 4px;
background: #fafafa;
}
.l-feature-tabs__tabs .tab--active {
border-color: #f5f5f5;
background: #f5f5f5;
color: white;
}
.l-feature-tabs__content {
max-width: 600px;
margin: 0 auto;
}
.l-feature-tabs__panel {
display: flex;
flex-direction: column;
gap: 12px;
}
.l-feature-tabs__title {
font-size: var(--text-xl);
}
.l-feature-tabs__body {
color: #525252;
}
Codigo fuente
layouts/feature-tabs.css
/* Layout: feature-tabs — structure only */ .l-feature-tabs { padding: var(--spacing-12) var(--spacing-8); } .l-feature-tabs__header { text-align: center; margin-bottom: var(--spacing-6); } .l-feature-tabs__tabs { display: flex; gap: var(--spacing-2); justify-content: center; margin-bottom: var(--spacing-6); } .l-feature-tabs__tabs .tab { padding: var(--spacing-2) var(--spacing-4); border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--background); } .l-feature-tabs__tabs .tab--active { border-color: var(--accent); background: var(--accent); color: white; } .l-feature-tabs__content { max-width: 600px; margin: 0 auto; } .l-feature-tabs__panel { display: flex; flex-direction: column; gap: var(--spacing-3); } .l-feature-tabs__title { font-size: var(--text-xl); } .l-feature-tabs__body { color: var(--muted-foreground); }