Field
Поле ввода Nupek - label, контрол и hint всегда вместе, с фокусом в цвете signal.
Field объединяет подпись, поле ввода и пояснение в один блок - эти три части всегда идут вместе, отдельно label или input в системе не используются.
Строчными буквами, через дефис
Определяет, в какой репозиторий попадёт сборка
Поведение
Обводка поля - line в состоянии покоя, signal при фокусе. Радиус - md (12px), как у кнопок: поля и кнопки одной строки визуально согласованы по высоте и скруглению. Кольцо фокуса строится через outline, не через увеличение толщины обводки - переключение состояния не двигает геометрию поля.
Hint отображается всегда, если он задан, и связан с полем через aria-describedby - скринридер объявляет его вместе с полем, а не только визуально рядом. Место под hint зарезервировано заранее, поэтому его появление не сдвигает соседние элементы формы.
Разметка
<div class="field">
<label class="field-label" for="package-name">Имя пакета</label>
<input class="field-control" id="package-name" name="package-name" placeholder="nuros-example" aria-describedby="package-name-hint" />
<p class="field-hint" id="package-name-hint">Строчными буквами, через дефис</p>
</div>.field-control {
min-height: var(--tap-target-min);
padding: var(--space-3) var(--space-4);
border-radius: var(--radius-md);
border: 1.5px solid var(--color-border);
}
.field-hint {
min-height: 1.4em;
}
.field-control:focus-visible {
border-color: var(--color-link);
outline: var(--focus-ring-width) solid var(--focus-ring-color);
outline-offset: var(--focus-ring-offset);
}