Add invalid states for interactive elements

This commit is contained in:
2026-06-22 18:07:31 +02:00
parent 6c103d1dfd
commit b595347f60
2 changed files with 85 additions and 0 deletions
+79
View File
@@ -149,6 +149,46 @@
</div>
</div>
<div class="sg-state-example">
<p class="sg-state-example__label sg-table-label">form-invalid</p>
<div class="sg-labeled-input-row">
<span class="sg-label">Label</span>
<div class="sg-input-validation-stack">
<div class="sg-pulldown-demo" data-open="false" data-align="left" data-selection-mode="single" data-component="pulldown" data-component-state="invalid">
<button class="sg-interaction-element sg-pulldown sg-pulldown-demo__trigger" type="button" aria-expanded="false" aria-label="Pulldown mit Validierung" aria-invalid="true" aria-describedby="pulldown-invalid-feedback" data-component-part="pulldown-trigger">
Auswahl
</button>
<div class="sg-pulldown-panel" aria-label="Geöffnetes invalides Pulldown" data-component-part="pulldown-panel">
<ul class="sg-pulldown-option-list" aria-label="Verfügbare Optionen im invaliden Pulldown">
<li class="sg-pulldown-option" role="checkbox" aria-checked="false" data-pulldown-option>
<span>Menüpunkt 1</span>
</li>
<li class="sg-pulldown-option" role="checkbox" aria-checked="false" data-pulldown-option>
<span>Menüpunkt 2</span>
</li>
<li class="sg-pulldown-option" role="checkbox" aria-checked="false" data-pulldown-option>
<span>Menüpunkt 3</span>
</li>
<li class="sg-pulldown-option" role="checkbox" aria-checked="false" data-pulldown-option>
<span>Menüpunkt 4</span>
</li>
<li class="sg-pulldown-option sg-pulldown-option--disabled">
<span>Menüpunkt 5</span>
</li>
</ul>
</div>
</div>
<span class="sg-form-validation-text" id="pulldown-invalid-feedback">Bitte eine gültige Auswahl treffen.</span>
</div>
</div>
</div>
<div class="sg-state-example">
<p class="sg-state-example__label sg-table-label">Variante aktivierbar</p>
@@ -493,6 +533,19 @@
</button>
<span>Option nicht verfügbar</span>
</label>
<div class="sg-state-example">
<p class="sg-state-example__label sg-table-label">form-invalid</p>
<div class="sg-input-validation-stack">
<label class="sg-checkbox-field-option sg-body" data-component="checkbox-field" data-component-state="default">
<button class="sg-checkbox-field" type="button" role="checkbox" aria-checked="false" aria-label="Standard Checkbox mit Validierung" aria-invalid="true" aria-describedby="checkbox-invalid-feedback">
<span class="sg-checkbox-field__mark" aria-hidden="true"></span>
</button>
<span>Standard Checkbox</span>
</label>
<span class="sg-form-validation-text" id="checkbox-invalid-feedback">Bitte mindestens eine Option auswählen.</span>
</div>
</div>
</div>
</section>
@@ -568,6 +621,32 @@
</span>
</label>
<div class="sg-state-example">
<p class="sg-state-example__label sg-table-label">form-invalid</p>
<div class="sg-input-validation-stack">
<label class="sg-checkbox-field-option sg-body" data-component="radio-field" data-component-state="default">
<span class="sg-radio-field-row">
<span class="sg-label">Label</span>
<span class="sg-radio-activatable-group__choices">
<span class="sg-radio-activatable-group__choice">
<button class="sg-radio-field" type="button" role="radio" aria-checked="false" aria-label="Radio 1 mit Validierung" aria-invalid="true" aria-describedby="radio-invalid-feedback">
<span class="sg-radio-field__mark" aria-hidden="true"></span>
</button>
<span>Radio 1</span>
</span>
<span class="sg-radio-activatable-group__choice">
<button class="sg-radio-field" type="button" role="radio" aria-checked="false" aria-label="Radio 2 mit Validierung" aria-invalid="true" aria-describedby="radio-invalid-feedback">
<span class="sg-radio-field__mark" aria-hidden="true"></span>
</button>
<span>Radio 2</span>
</span>
</span>
</span>
</label>
<span class="sg-form-validation-text" id="radio-invalid-feedback">Bitte eine Option auswählen.</span>
</div>
</div>
<div class="sg-checkbox-field-option sg-body" data-component="radio-field" data-component-state="default">
<span class="sg-state-example__label sg-table-label">Variante ohne Gesamtlabel</span>
<span class="sg-radio-field-row sg-radio-field-row--without-label">
@@ -407,6 +407,12 @@
box-shadow: 0 0 0 1px var(--color-signal-red) inset;
}
.sg-pulldown[aria-invalid="true"],
.sg-checkbox-field[aria-invalid="true"],
.sg-radio-field[aria-invalid="true"] {
box-shadow: 0 0 0 1px var(--color-signal-red) inset;
}
.sg-labeled-input-row:has(.sg-input-multi-line) {
align-items: flex-start;
}