Plain editorial
Jerarquía mediante espacio, sin borde ni profundidad decorativa.
Core v1 · 26 componentes
Cada entrada declara anatomía, variantes, estados, accesibilidad y adaptadores. La madurez de cada componente indica si sigue especificado o ya cuenta con implementación y QA verificables.
Madurez actual · Especificado
Un componente pasa a implementado cuando existe una demo pública y un component/component set Figma enlazado a tokens reales. Solo será verificado después de QA visual, accesible y machine-readable.
Primer componente verificado · 4 component sets
Cuatro prioridades visuales comparten anatomía y comportamiento. Usa un botón nativo para acciones y la variante de enlace sólo para navegación. Compact se reserva a interfaces densas; una acción táctil principal mantiene el objetivo de 44 px.
Componente verificado · 3 component sets
El icono nunca sustituye el nombre accesible. Usa selected sólo para una acción binaria y conserva default para acciones puntuales como cerrar, copiar o abrir un menú.
Componente verificado · 2 component sets
Los enlaces navegan; las acciones usan Button. El subrayado identifica enlaces de contenido y aria-current mantiene la ubicación activa distinguible sin depender de hover.
Componente verificado · 1 component set
Field compone etiqueta, control, ayuda y error sin sustituir el control nativo. El consumidor enlaza el mismo controlId mediante for/id y aplica a su input los atributos required, disabled, readonly, aria-invalid y aria-describedby que correspondan.
Componente verificado · 3 component sets
El tipo visual no sustituye la semántica HTML: Search usa type="search", Numeric combina type="number" e inputmode="decimal", y cualquier variante conserva un label externo mediante Field.
Componente verificado · 1 component set
Text area conserva el elemento <textarea>. Default permite resize vertical, Resizable permite ambos ejes y Fixed lo bloquea. El contador sólo se asocia mediante aria-describedby cuando existe un límite real.
Componente verificado · 1 component set
El adaptador web prioriza <select> nativo y conserva teclado, nombre, valor y popup de plataforma. El adaptador custom sólo se usa cuando las opciones necesitan una composición que el control nativo no puede expresar, y entonces debe implementar el patrón listbox completo.
Componente verificado · 1 component set
La fila completa funciona como label y objetivo de 44 px. Checked y Unchecked conservan el input nativo; Indeterminate establece la propiedad DOM real y expone mixed. Los checkbox de menú son un adaptador contextual distinto.
Componente verificado · 1 component set
Radio es el item; fieldset, legend y el mismo name forman el grupo. Así se conservan selección única, nombre accesible y navegación nativa con flechas. Los radio items de menú mantienen menuitemradio como adaptador contextual.
Componente verificado · 1 component set
Un switch modifica una preferencia de efecto inmediato y anuncia su estado on/off. No sustituye al Checkbox cuando el usuario debe confirmar una elección. Compact y Default cambian el track, no el objetivo de 44 px ni la etiqueta visible.
Componente verificado · 1 component set
Core v1 cubre un valor único: los tres productos auditados definen min, max y step, pero ninguno demuestra dos thumbs. La etiqueta es visible y el valor opcional se actualiza junto al active track; el input nativo conserva flechas, Page Up/Down, Home y End.
Componente verificado · 2 component sets
Tabs alterna paneles locales dentro de una misma vista. Core v1 sólo define orientación horizontal, estilos Line/Contained, roving focus y activación automática; si cada opción navega a otra URL debe usar enlaces y navegación, no role="tab".
Componente verificado · 2 component sets
Este grupo de botones elige exactamente un valor y expone aria-pressed; no controla paneles como Tabs ni navega como un grupo de enlaces. Core v1 sólo incluye orientación horizontal y selección única porque la selección múltiple no aparece en los consumidores auditados.
Componente verificado · 1 component set
Surface aporta contención visual, no semántica. El consumidor elige div, article, section o aside según el contenido; una card interactiva conserva un único enlace o botón primario y no convierte el contenedor completo en un control genérico.
Jerarquía mediante espacio, sin borde ni profundidad decorativa.
Una región delimitada cuando el borde ayuda a reconocer la agrupación.
La elevación Surface se reserva a cards discretas; el enlace mantiene su propio foco.
Componente implementado · 2 component sets
Badge comunica metadatos estáticos y no recibe foco. Tag usa un botón nativo para acciones o selección y un enlace para navegación; el significado nunca depende solo del tono o del icono.
01 · action
buttonVerificadocontainerlabeloptional-leading-iconoptional-trailing-iconprimarysecondarycontrastquietcompactdefaultdefaulthoverpressedfocus-visibledisabledloadingnative-button-or-link-semanticsvisible-focusaccessible-namedisabled-reason-when-materialsemantic-html · react · compose
5 scopes · cross-scope · Figma verified · 113:88
icon-buttonVerificadocontainericonprimarysecondaryquietcompactdefaultdefaulthoverpressedfocus-visibledisabledselectedaccessible-name-requiredminimum-touch-targetvisible-focusselected-state-announcedsemantic-html · react · compose
3 scopes · cross-scope · Figma verified · 123:52
linkVerificadolabeloptional-iconinlinestandalonebacknavigationdefaulthoverfocus-visiblevisitedcurrentnative-link-semanticspurpose-from-text-or-contextvisible-focuscurrent-state-announcedsemantic-html · react · compose
5 scopes · cross-scope · Figma verified · 132:77
02 · form
fieldVerificadolabelcontrol-slotoptional-helpoptional-erroroptionalrequiredcompactdefaultdefaultfocus-withindisabledinvalidread-onlyprogrammatic-labelhelp-and-error-associatedrequired-announcederror-not-color-onlysemantic-html · react · compose
4 scopes · cross-scope · Figma verified · 144:123
text-fieldVerificadoinputoptional-leading-iconoptional-trailing-actiontextsearchnumericcompactdefaultemptyfilledhoverfocus-visibledisabledinvalidread-onlylabel-requirednative-input-semanticscorrect-input-modeerror-associatedsemantic-html · react · compose
4 scopes · cross-scope · Figma verified · 152:115
text-areaVerificadomultiline-inputoptional-counterdefaultresizablefixedemptyfilledhoverfocus-visibledisabledinvalidread-onlylabel-requirednative-textarea-semanticscounter-announced-when-limitingerror-associatedsemantic-html · react · compose
3 scopes · cross-scope · Figma verified · 158:122
selectVerificadotriggervalueindicatoroption-listnativecustomcompactdefaultplaceholderselectedopenfocus-visibledisabledinvalidlabel-requirednative-keyboard-selectionexpanded-state-announcedactive-option-announcederror-associatedsemantic-html · react · compose
4 scopes · cross-scope · Figma verified · 163:222
03 · selection
checkboxVerificadocontrollabeloptional-descriptionuncheckedcheckedindeterminatedefaulthoverfocus-visibledisabledinvalidnative-or-equivalent-semanticslabel-click-targetmixed-state-announcedvisible-focuserror-associatedsemantic-html · react · compose
2 scopes · cross-scope · Figma verified · 169:149
radioVerificadocontrollabeloptional-descriptionunselectedselecteddefaulthoverfocus-visibledisabledinvalidnative-or-equivalent-semanticsgroup-namelabel-click-targetsingle-selectionarrow-key-navigationvisible-focuserror-associatedsemantic-html · react · compose
2 scopes · cross-scope · Figma verified · 173:82
switchVerificadotrackthumblabeloptional-descriptioncompactdefaultoffondefaulthoverfocus-visibledisabledrole-switch-or-platform-equivalentstate-announcedimmediate-effect-onlylabel-click-targetlabel-requiredvisible-focussemantic-html · react · compose
2 scopes · cross-scope · Figma verified · 176:135
sliderVerificadolabeltrackactive-trackthumboptional-valuesingledefaulthoverfocus-visibledraggingdisablednative-or-equivalent-slider-semanticslabel-requiredkeyboard-adjustablevalue-announcedmin-max-step-definedvisible-focussemantic-html · react · compose
3 scopes · cross-scope · Figma verified · 180:52
tabsVerificadotab-listtabactive-indicatortab-panellinecontainedcompactdefaultdefaulthoverfocus-visibleselecteddisabledtab-semanticslabelled-tablistroving-focusautomatic-activationarrow-home-end-navigationpanel-associatedhorizontal-overflow-preserves-labelsvisible-focussemantic-html · react · compose
3 scopes · cross-scope · Figma verified · 183:103
toggle-groupVerificadogrouptoggle-itemssinglehorizontalcompactdefaultdefaulthoverfocus-visibleselecteddisabledlabelled-groupnative-button-semanticsaria-pressedexactly-one-selectedtab-order-preservedspace-enter-activationvisible-focushorizontal-overflow-preserves-labelssemantic-html · react · compose
2 scopes · cross-scope · Figma verified · 188:47
04 · content
surfaceVerificadocontaineroptional-headercontent-slotoptional-footerplainmutedoutlinedelevatedcompactdefaultdefaultsemantic-container-chosen-by-contentsection-and-aside-labelledarticle-has-headinginteractive-surface-has-single-targettarget-has-visible-focusno-generic-clickable-divno-nested-card-decorationsemantic-html · react · compose
5 scopes · cross-scope · Figma verified · 193:46
badgeImplementadobadge-labeloptional-badge-icontag-labeloptional-tag-iconbadge-neutralbadge-brandbadge-successbadge-dangerbadge-warningbadge-infointeractive-tagstaticdefaulthoverfocus-visibleselecteddisabledmeaning-not-color-onlystatic-badge-not-focusablenative-button-or-anchor-semanticsaria-pressed-or-aria-currentdisabled-link-removes-href-and-tab-stopconcise-untruncated-labeltouch-target-preservedsemantic-html · react · compose
4 scopes · cross-scope · Figma implemented · 199:25
list-itemEspecificadooptional-leadingprimary-textoptional-secondary-textoptional-trailingsingle-linetwo-lineinteractivecompactdefaultdefaulthoverfocus-visibleselecteddisabledlist-semantics-at-containersingle-primary-actionvisible-focustouch-target-preservedsemantic-html · react · compose
5 scopes · cross-scope · Figma planned
tableEspecificadocaptionheaderrowscellsoptional-row-actioncontentdatacompactresponsive-scrolldefaulthoverfocus-withinselectedloadingemptynative-table-semanticsheaders-associatedcaption-or-contextsort-state-announcedsemantic-html · react · compose
4 scopes · cross-scope · Figma planned
05 · feedback
alertEspecificadostatus-icontitlemessageoptional-actionsuccessdangerwarninginfoinlinebannerstaticlivedismissiblemeaning-not-color-onlylive-only-when-neededaction-purpose-cleardismiss-control-namedsemantic-html · react · compose
5 scopes · cross-scope · Figma planned
empty-stateEspecificadotitlemessageoptional-actionoptional-illustrationfirst-useno-resultsno-dataunavailablestaticactionableexplains-why-emptynext-action-optional-and-clearillustration-decorative-unless-informativesemantic-html · react · compose
5 scopes · cross-scope · Figma planned
progressEspecificadoindicatoroptional-labeloptional-valuecircularlinearindeterminatedeterminateactivepausedcompleteerrorbusy-region-associateddeterminate-value-announcedlabel-providedreduced-motion-respectedsemantic-html · react · compose
4 scopes · cross-scope · Figma planned
toastEspecificadomessageoptional-status-iconoptional-actionoptional-dismissneutralsuccessdangerwarninginfoenteringvisibleleavingpolite-by-defaultcritical-errors-not-toast-onlypause-or-persist-for-actionfocus-not-stolensemantic-html · react · compose
2 scopes · cross-scope · Figma planned
06 · overlay
dialogEspecificadoscrimcontainertitlecontentactionsoptional-closeinformationalconfirmationdestructiveformclosedopeningopenclosingmodal-semanticslabelled-dialoginitial-focusfocus-contained-and-returnedescape-closes-when-safesemantic-html · react · compose
3 scopes · cross-scope · Figma planned
sheetEspecificadoscrimpaneltitlecontentoptional-actionsclosesidebottommodalnon-modalclosedopeningopenclosingmodal-state-explicitlabelled-panelfocus-manageddismiss-method-visiblesemantic-html · react · compose
3 scopes · cross-scope · Figma planned
tooltipEspecificadotriggerbubblecontenttextshortcuthiddendelayedvisiblenot-required-for-core-taskavailable-on-focus-and-hoverescape-dismissestrigger-description-associatedsemantic-html · react · compose
3 scopes · cross-scope · Figma planned
07 · disclosure
disclosureEspecificadotriggerindicatorcontentsinglegroupedcollapsedexpandedfocus-visibledisabledexpanded-state-announcedtrigger-is-buttoncontent-associatedkeyboard-operablesemantic-html · react · compose
1 scopes · accessibility-invariant · Figma planned