Skip to content

feat: adds checkboxes, radio buttons, toggles#72

Open
ElveeC wants to merge 4 commits intodevelopfrom
feat/checkboxes
Open

feat: adds checkboxes, radio buttons, toggles#72
ElveeC wants to merge 4 commits intodevelopfrom
feat/checkboxes

Conversation

@ElveeC
Copy link
Collaborator

@ElveeC ElveeC commented Jan 12, 2024

Сверстаны чекбоксы, радиокнопки и переключатели согласно UI-киту

@vercel
Copy link

vercel bot commented Jan 12, 2024

The latest updates on your projects. Learn more about Vercel for Git ↗︎

Name Status Preview Comments Updated (UTC)
linguista-frontend ✅ Ready (Inspect) Visit Preview 💬 Add feedback Jan 20, 2024 5:21pm

Copy link
Collaborator

@azozulya azozulya left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

У меня замечания по наименованию. Так как мы используем модули, то стили изолированы и можно не пользоваться бэм наименованиями.
Вместо .checkbox__icon можно писать .icon Короткие классы - это удобно.

}: CustomCheckboxProps) => {
return (
<label
className={cx(styles.checkbox, labelClassName, isPositionRight && styles['checkbox--right'])}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Правильнее будет написать
{ styles['checkbox--right']: isPositionRight }

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Изначально я так писала, но почему-то такое написание вызывает ошибку... Может, где-то ошиблась в синтаксисе, но не могу понять, в чем дело.
checkbox_error

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Да, я ошиблась. Надо в скобки взять {[styles['checkbox--right']]: isPositionRight}

value={value}
name={name}
id={id}
className={cx(styles['visually-hidden'], inputClassName)}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

styles['visually-hidden'] удобнее было бы записать styles.visuallyHidden Т.е. использовать camelCase в наименовании классов.

onChange?: (event: ChangeEvent<HTMLInputElement>) => void;
inputClassName?: string;
labelClassName?: string;
labelText?: string;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

В подписи к чекбоксу могут быть ссылки, например ссылки на политики конфиденциальности.
Я бы использовала children, но с другой стороны такое может не встретиться вообще или встретиться только один раз, тогда для такого случая думаю сойдет передать в строке разметку и преобразовать парсером


&--right {
justify-content: space-between;
}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Весь элемент кликабельный, не хватает cursor: pointer

padding: 0;

&--right {
justify-content: space-between;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Не совсем поняла, почему при тексте слева или справа элемент себя совсем по-разному ведет. Почему нельзя сделать промежуток между чекбоксом и текстом с помощью gap? Тогда и марджин не нужен. Сейчас элемент растягивается на весь контейнер, чекбокс улетает далеко от текста, если выбрать isPositionRight, и нужно задавать макс ширину дополнительно

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

К сожалению, не нашла в макете пример с правым чекбоксом. Исходила из следующих соображений.

  1. Если задать gap, когда текст слева, то все иконки будут находиться на разном уровне, т.к. длина текста в разных label не будет одинаковой. Насколько я поняла, текст и иконка должны быть разнесены по разным сторонам контейнера (как на скриншоте разнесены дата и значок календаря). Тут нужно понимать, какой ожидается результат: одинаковое расстояние между текстом и иконкой во всех чекбоксах или разнесение текста и иконки по краям? Возможно, такой вариант чекбокса будет использоваться в мобильной версии.

  2. Чекбоксы не будут находиться на странице сами по себе. Они в любом случае будут в каком-то контейнере (например, в форме, как на скрине). Тогда ширина чекбокса с левым текстом и правой иконкой будет зависеть от ширины этого контейнера, т.е. задавать макс. ширину нет смысла и может даже навредить, т.к. мы не знаем, какой длины текст будет находиться в label. Если же такой вариант чекбокса предполагается использовать в мобильной версии, то ширина будет ограничена либо шириной экрана, либо контейнером.

checkbox

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Выбор даты это совсем другой элемент, но логика ясна.
Стили можно переопределять при вызове этого компонента, но лучше конечно изначально задать оптимальные

Copy link
Collaborator Author

@ElveeC ElveeC Jan 20, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Выбор даты я привела в качестве чисто визуального примера, т.к. не нашла в макете пример с таким чекбоксом. Поэтому вопрос в том, как предполагается использовать чекбокс такого типа. Если он должен выглядеть так, как элемент с выбором даты, то это как раз достигается с помощью space-between. Если он должен выглядеть по-другому (т.е. важно именно расстояние между текстом и иконкой), то использовать gap. Т.е. это разные задачи, которые решаются разными способами. Изменить на gap или оставить, как есть, до появления в макете такого элемента?

width: 24px;
height: 24px;
box-sizing: border-box;
border: 2px solid $neutral-text-light-color;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ширина обводки в макете соответствует одному пикселю
image

height: 24px;
box-sizing: border-box;
background-color: $neutral-background-main-color;
border: 2px solid $neutral-text-light-color;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Также один пиксель
image

overflow: hidden;
}

.radio {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Также не хватает cursor: pointer

overflow: hidden;
}

.toggle {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

cursor: pointer

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants