-
Notifications
You must be signed in to change notification settings - Fork 184
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
refactor: use css outline
& new useFocusVisibleClassName()
hook to draw visible focus
#5876
Conversation
box-shadow
to draw visible focus
size-limit report 📦
|
This pull request is automatically built and testable in CodeSandbox. To see build info of the built libraries, click here or the icon next to each commit SHA. Latest deployment of this branch, based on commit b69bef6:
|
e2e tests |
👀 Docs deployed
Commit b69bef6 |
Codecov ReportAll modified and coverable lines are covered by tests ✅
Additional details and impacted files@@ Coverage Diff @@
## master #5876 +/- ##
==========================================
+ Coverage 79.10% 79.13% +0.02%
==========================================
Files 312 312
Lines 9947 9957 +10
Branches 3333 3332 -1
==========================================
+ Hits 7869 7879 +10
Misses 2078 2078
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Sentry. |
095a0f4
to
a0ca4b5
Compare
box-shadow
to draw visible focus outline
to draw visible focus
77bae4a
to
3bc2ea7
Compare
3bc2ea7
to
e4db235
Compare
packages/vkui/src/components/ImageBase/ImageBaseOverlay/ImageBaseOverlay.tsx
Outdated
Show resolved
Hide resolved
e4db235
to
0158f3e
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Отличная работа! 🔥 💯 💠
Особенно мне нравится FocusVisible
как обертка, намного лучше видно, что используется в коде. Отличная идея с передачей класса children
!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Получилось вообще шикарно! ✨💖✨ Ещё и обводка ссылки починилась 🙂 Из-за того, что переделывали на отдельный элемент, там бага была.
Из улучшений, т.к. у нас есть хук useFocusVisible()
, то я бы его и применил для определения className
, который задаёт фокус. И тем самым избежал бы React.cloneElement
. По возможности стоит избегать этого метода в компонентах, которые часто встречаются в интерфейсе. Его полезно использовать, например, для тултипов, т.к. реже приходится использовать (хотя даже для тултипов предпочёл бы хук с пробрской рефа).
Добавил коммент на примере компонента Clickable
.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Получилось вообще шикарно! ✨💖✨ Ещё и обводка ссылки починилась 🙂 Из-за того, что переделывали на отдельный элемент, там бага была.
Из улучшений, т.к. у нас есть хук useFocusVisible()
, то я бы его и применил для определения className
, который задаёт фокус. И тем самым избежал бы React.cloneElement
. По возможности стоит избегать этого метода в компонентах, которые часто встречаются в интерфейсе. Его полезно использовать, например, для тултипов, т.к. зачастую реже применяется в интерфейсе (хотя даже для тултипов предпочёл бы хук с пробрской рефа).
Добавил коммент на примере компонента Clickable
как это может выглядеть если чисто на хуках делать.
PR закрыт из-за отсутствия активности в течение последних 14 дней. Если это произошло по ошибке или изменения все ещё актуальны, откройте PR повторно. |
07693e1
to
4c28615
Compare
- update screenshots
- ImageOverlay: adjust overlay visibility on focus - ImageBase: add negative z-index to <img/> - Avatar: move initials to get layers under ImageBase isolation
- update screenshots
windows high contrast mode compatible
4c28615
to
d1690ec
Compare
А почему решили поменять анимации Было: 2023-11-22.18.09.22.movСтало: 2023-11-22.18.08.31.mov |
for proper inside mode animation
Спасибо за бдительность! Это я класс в анимашке потеряла, как оказывается, теперь пофиксила. 😉 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🔥 ❤️🔥
❌ PatchНе удалось автоматически применить исправление на ветке v5.
Чтобы изменение попало в ветку v5, выполните следующие действия:
git stash # опционально
git fetch origin v5
git checkout -b patch/pr5876 origin/v5
git cherry-pick --no-commit 9d47c34ac3e47980e291f7077f5aa46ac9316b3e
git checkout HEAD **/__image_snapshots__/*.png
git diff --quiet HEAD || git commit --no-verify --no-edit
git push --set-upstream origin patch/pr5876
gh pr create --base v5 --title "patch: pr5876" --body "- patch #5876" |
…o draw visible focus (#5876)
Чеклист
useFocusVisibleClassName()
дизайн-ревью— не нужно, поменялся только внутрякОписание
В рефакторинге
FocusVisible
мы стали рисовать границу через border, что и приводило к "раздуванию" элемента и появлению скроллов там, где их было быть не должно. В старом подходе с box-shadow такого не было, т.к. box-shadow никак не изменяет границы элемента.А границу стали рисовать из-за того, что добавили
FocusVisible
вFormField
.Однако! В процессе я внезапно обнаружила, что поддержку border-radius для outline починили! См.
Поэтому — идем путем graceful degradation. В браузерах, где баг не пофикшен, аутлайн будет без скруглений и не такой красивый, но, кажется, этим стоит пожертвовать.
Изменения
и полностью изменила логику FocusVisible — это теперь компонент-обертка, который передает своему ближайшему дитю на корень нужные классы,FocusVisible
в пользу нового хукаuseFocusVisibleClassName()
. Засунуть вuseFocusVisible()
логику не получилось, т.к. есть места, где для определения фокусного состояния мы используем хукuseFocusWithin()
,Link
Image
Switch
Tappable
Textarea
Slider
CustomSelect
Textarea