Skip to content

fix(InputSwitch): цвета в тёмной теме приведены к макету - #70

Merged
fabulous-unicorn merged 3 commits into
release/2.0.0from
fix/toggleswitch
Aug 13, 2026
Merged

fabulous-unicorn merged 3 commits into
release/2.0.0from
fix/toggleswitch

Conversation

@khaliulin

Copy link
Copy Markdown
Collaborator

Проблема

В тёмной теме InputSwitch повторял цвета светлой. Причина структурная: в Figma компонентные токены не разделены на темы — коллекция components имеет единственный режим default, а тему переключает слой theme (surface/900 → #2b2e33 в light и #f0f0f1 в dark). В нашем tokens.json компонентный блок продублирован на colorScheme.light / colorScheme.dark, и в dark-блок подставлены другие роли, подобранные так, чтобы дать те же hex, что в light.

Сверка с макетом (node 13479-19979):

Токен Figma dark Было
root.checkedBackground #f0f0f1 #2b2e33
root.checkedHoverBackground #e2e2e4 #404348
root.disabledBackground #404348 #e2e2e4
handle.background #ffffff #56595f
handle.checkedBackground #000000 #56595f

Дополнительно handle.disabledBackground не применялся в коде вовсе — в disabled ручка оставалась белой. Этот дефект был виден и в светлой теме.

Решение

Трек — в dark взяты те же роли, что уже стоят в light-блоке (bg.neutral.strong.default, bg.neutral.strong.hover, bg.surface.canvas.hover); hoverBackground переведён с bg.surface.raised.active на bg.neutral.medium.strong — значение то же, но роль соответствует surface/500 из макета. Все пять цветов трека сходятся с макетом в обеих темах.

Ручка — background / hoverBackground → fg.on.fill.default (#ffffff в обеих темах), checkedBackground / checkedHoverBackground → fg.inverse.active. Роли одинаковы в обеих схемах, как в Figma.

Код — useHandleStyles принимает disabled и отдаёт handle.disabledBackground.

Результат

light dark макет dark
трек off / hover #a2a5a9 / #85888e #6d7076 / #85888e совпадает
трек on / on hover #2b2e33 / #404348 #f0f0f1 / #e2e2e4 совпадает
трек disabled #e2e2e4 #404348 совпадает
ручка off #ffffff #ffffff совпадает
ручка on #ffffff #181a1f #000000 — расхождение
ручка disabled #85888e #85888e совпадает

Единственное отклонение — ручка в checked: #181a1f вместо чистого чёрного. В макете это роль surface/0 (белый в light, чёрный в dark), у нас такой роли нет: примитив colors.alpha.black.1000 существует, но на него не ссылается ни одна semantic-роль (0 ссылок по базе против 16 у белого). fg.inverse.active — ближайшее, что даёт база. Чтобы попасть точно, нужно завести роль в semantic-слое — вынесено за рамки MR.

Проверки

  • yarn tokens:check — сгенерированные токены актуальны
  • yarn jest — 48 suites, 1708 тестов, 1567 снапшотов, всё зелёное (8 disabled-снапшотов обновлены, дифф только по цвету ручки)
  • tsc --noEmit — чисто; eslint — только предсуществующие warning'и в Checkbox.tsx и Dialog.tsx
  • prettier --check — чисто

Не входит в MR

Фокусное кольцо не реализовано, хотя в макете присутствует. Три причины: у компонента нет источника focus-состояния (в RN фокус у Pressable возникает только на TV/web); тень со spread в RN не рисуется — кольцо требует отдельного View, то есть изменения разметки; наш focusRing.color = #d4fedc в обеих темах, а в макете два разных цвета под состояние (#12611b и #611912), чего в токене нет. Это отдельная задача уровня «добавить состояние focus».

Размеры не трогались: макет 35×21, ручка 14, gap 3.5 — у нас 40×24, 16, 4. Ровно коэффициент 0.875 = 14/16: макет в базе 14px, кит переведён на базу 16px.

Не проверено

Визуальная проверка в тёмной теме на устройстве не проводилась — сверка велась по значениям токенов и переменным из Figma.

@khaliulin
khaliulin requested a review from a team as a code owner August 12, 2026 12:01
@khaliulin
khaliulin requested review from ragozin-nikita and removed request for a team August 12, 2026 12:01
@Shoshanyaka Shoshanyaka added the release:v2.0.0 Release version v2.0.0 label Aug 12, 2026
@fabulous-unicorn
fabulous-unicorn requested review from fabulous-unicorn and removed request for ragozin-nikita August 12, 2026 13:12
@fabulous-unicorn
fabulous-unicorn merged commit 26695c5 into release/2.0.0 Aug 13, 2026
6 checks passed
@fabulous-unicorn
fabulous-unicorn deleted the fix/toggleswitch branch August 13, 2026 11:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

release:v2.0.0 Release version v2.0.0

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants