Skip to content

fix(Tabs): активная линия выровнена с линией таб-листа - #73

Merged
fabulous-unicorn merged 1 commit into
release/2.0.0from
fix/tabs
Aug 13, 2026
Merged

fix(Tabs): активная линия выровнена с линией таб-листа#73
fabulous-unicorn merged 1 commit into
release/2.0.0from
fix/tabs

Conversation

@khaliulin

Copy link
Copy Markdown
Collaborator

Проблема

Активная линия таба не совпадала с линией таб-листа: серая линия была 1px, чёрная — 2px и висела на 1px выше, не перекрывая её.

Геометрия до правки (H — высота таб-листа):

толщина занимает
линия таб-листа 1px [H-1, H]
активная линия 2px [H-3, H-1]

Абсолютно позиционированный индикатор отсчитывается от padding box, поэтому при bottom: 0 он оказывался над границей, а не поверх неё.

Что показывает макет

В <🚧Tabs.Tab> у всех пяти вариантов strokeBottomWeight = 2. Это одна и та же нижняя граница таба, отличается только цвет:

  • state=default | hover | focus | disabledtabs/tablist/borderColor (zinc/200 / zinc/800)
  • state=activetabs/activeBar/background (zinc/900 / white)

То есть обе линии по дизайну равны 2px и лежат на одном уровне.

Решение

Токен. tabs.tablist.borderWidth — нижняя сторона переведена с {dimension.borderWidth.100} на {dimension.borderWidth.200}: 1px → 2px, как в макете.

Код. Стили брали значения мимо токенов — это исправлено:

Свойство было стало
borderBottomWidth semantic.dimension.borderWidth[100] components.tabs.tablist.borderBottomWidth
height semantic.dimension.borderWidth[200] components.tabs.activeBar.height
bottom 0 (хардкод) components.tabs.activeBar.bottom

Токены tabs.activeBar.height = 2 и tabs.activeBar.bottom = -2 существовали в базе и раньше — компонент их просто не использовал.

Геометрия после правки: граница занимает [H-2, H], активная линия при сдвиге -2 — тоже [H-2, H], то есть ложится ровно поверх неё.

Изменения

  • design-tokens/input/tokens.jsoncomponents.tabs.tablist.borderWidth: третье значение borderWidth.100borderWidth.200
  • src/theme/tokens/components/light.json, dark.jsontablist.borderBottomWidth: 12 (сгенерировано)
  • src/components/Tabs/Tabs.tsx — три свойства переведены на компонентные токены, из деструктуризации убран ставший ненужным semantic
  • Tabs.test.tsx.snap — обновлён, дифф только по borderBottomWidth и bottom

Проверки

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

Не проверено

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

@khaliulin
khaliulin requested a review from a team as a code owner August 12, 2026 12:41
@khaliulin
khaliulin requested review from grevtsovna and removed request for a team August 12, 2026 12:41
@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 grevtsovna August 12, 2026 13:12
@fabulous-unicorn
fabulous-unicorn merged commit 759f9ae into release/2.0.0 Aug 13, 2026
6 checks passed
@fabulous-unicorn
fabulous-unicorn deleted the fix/tabs branch August 13, 2026 11:17
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