Files
tnsu-approval-route/frontend/src/webparts/approvalAdmin/components/ui/FormField.module.scss
T
gorbenko.pavel 48ede1420d
Tests / backend-test (push) Successful in 1m38s
Tests / frontend-test (push) Successful in 47s
Обходной лист (#12)
Co-authored-by: gorbenko.pavel <gorbenko.pavel@tansu.kz>
Reviewed-on: http://git.tnsu.kz/gorbenko.pavel/tnsu-approval-route/pulls/12
2026-08-17 05:43:52 +00:00

121 lines
3.1 KiB
SCSS

@import '../../../../styles/design-tokens';
.grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 18px 22px;
}
.field {
display: flex;
flex-direction: column;
gap: 6px;
// Grid-элементы по умолчанию не сжимаются уже своего min-content
// (min-width: auto) — из-за этого длинный текст/плейсхолдер в инпуте
// мог распирать колонку и вызывать горизонтальный скролл модалки.
min-width: 0;
}
.full { grid-column: 1 / -1; }
.label {
// display:block + min-height на 2 строки — так подпись из одной строки
// и подпись, свернувшаяся на две (например «Спрашивать причину
// просрочки»), одинаково резервируют место, и контролы двух полей одной
// строки грида начинаются на одном уровне независимо от переноса текста.
display: block;
font-size: 12px;
font-weight: 500;
color: $gray-700;
letter-spacing: .2px;
line-height: 16px;
min-height: 32px;
}
.req { color: $gold-600; }
.input,
.select,
.textarea {
// border-box обязателен: width:100% + padding/border в content-box
// (браузерный дефолт) делает элемент шире контейнера на padding+border
// и распирает модалку в горизонтальный скролл.
box-sizing: border-box;
padding: 11px 13px;
border: 1px solid $gray-300;
border-radius: $r-sm;
font-size: 13.5px;
font-family: $font-sans;
color: $gray-900;
transition: .18s;
background: #fff;
width: 100%;
@include input-focus-gold;
&::placeholder { color: $gray-400; }
&:disabled { background: $gray-50; color: $gray-400; cursor: not-allowed; }
}
.textarea { resize: vertical; min-height: 80px; }
.select {
appearance: none;
background-image: url("data:image/svg+xml,%3Csvg width='12' height='8' viewBox='0 0 12 8' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M1 1.5L6 6.5L11 1.5' stroke='%236B7280' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
background-repeat: no-repeat;
background-position: right 12px center;
padding-right: 36px;
}
.errorText {
font-size: 11.5px;
color: $red-500;
}
.hint {
font-size: 11.5px;
color: $gray-400;
}
.checkboxRow {
display: flex;
align-items: center;
gap: 9px;
font-size: 13px;
color: $gray-700;
cursor: pointer;
user-select: none;
}
.checkbox {
width: 17px;
height: 17px;
accent-color: $gold-500;
cursor: pointer;
}
.radioGroup {
display: flex;
flex-direction: column;
gap: 8px;
}
.radioRow {
display: flex;
align-items: center;
gap: 9px;
font-size: 13px;
color: $gray-700;
cursor: pointer;
user-select: none;
&.disabled { opacity: .45; cursor: not-allowed; }
}
.radio {
width: 16px;
height: 16px;
accent-color: $gold-500;
cursor: pointer;
&:disabled { cursor: not-allowed; }
}