Skip to content
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

fix: prevent pixel-fraction overflow from v8 TextField focus indicator #31314

Open
wants to merge 3 commits into
base: master
Choose a base branch
from

Conversation

smhigley
Copy link
Contributor

@smhigley smhigley commented May 8, 2024

Previous Behavior

Sometimes at certain zoom levels, some browsers calculate the width of the ::after focus indicator on TextField to be fractions of a pixel larger than the root node. That can result in conditional scroll overflow when the textfield gets focus.

New Behavior

Adds overflow: hidden to the node that has the focus indicator ::after style. That node only wraps the input element, so there shouldn't be any side effects to hiding overflow.

Related Issue

@smhigley smhigley requested a review from a team as a code owner May 8, 2024 23:33
@github-actions github-actions bot added this to the April Project Cycle Q1 2024 milestone May 8, 2024
Copy link

codesandbox-ci bot commented May 8, 2024

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.

@@ -0,0 +1,7 @@
{
Copy link
Collaborator

@fabricteam fabricteam May 8, 2024

Choose a reason for hiding this comment

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

🕵 fluentuiv8 Open the Visual Regressions report to inspect the affected screenshots

DatePicker 10 screenshots
Image Name Diff(in Pixels) Image Type
DatePicker.Required.hover datepicker.chromium.png 7 Changed
DatePicker.Required.default.chromium.png 7 Changed
DatePicker.Underlined and Required.default.chromium.png 7 Changed
DatePicker.Underlined and Required.hover datepicker.chromium.png 7 Changed
DatePicker.Required.hover day.chromium.png 7 Changed
DatePicker.Required.hover month.chromium.png 7 Changed
DatePicker.Required.click.chromium.png 7 Changed
DatePicker.Underlined and Required.click.chromium.png 7 Changed
DatePicker.Underlined and Required.hover month.chromium.png 7 Changed
DatePicker.Underlined and Required.hover day.chromium.png 7 Changed
TextField 13 screenshots
Image Name Diff(in Pixels) Image Type
TextField.Multiline nonresizable.click.chromium.png 2 Changed
TextField.Multiline.click.chromium.png 2 Changed
TextField.Suffix.click.chromium.png 2 Changed
TextField.Error - RTL.click.chromium.png 2 Changed
TextField.Icon - RTL.click.chromium.png 2 Changed
TextField.Placeholder - RTL.click.chromium.png 2 Changed
TextField.Error.click.chromium.png 2 Changed
TextField.Placeholder.click.chromium.png 2 Changed
TextField.Icon.click.chromium.png 2 Changed
TextField.Root.click.chromium.png 2 Changed
TextField.Required.click.chromium.png 2 Changed
TextField.Multiline - RTL.click.chromium.png 2 Changed
TextField.Suffix - RTL.click.chromium.png 2 Changed

Copy link
Contributor

Choose a reason for hiding this comment

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

oh no, looks like the required asterisk renders outside and having overflow hidden hides it 😅

@fabricteam
Copy link
Collaborator

fabricteam commented May 8, 2024

📊 Bundle size report

Package & Exports Baseline (minified/GZIP) PR Change
react
ColorPicker
132.985 kB
41.502 kB
133.003 kB
41.506 kB
18 B
4 B
react
DatePicker
183.939 kB
56.079 kB
183.957 kB
56.081 kB
18 B
2 B
react
Fluent UI React (entire library)
1.013 MB
281.289 kB
1.013 MB
281.292 kB
18 B
3 B
react
TextField
80.555 kB
25.262 kB
80.573 kB
25.264 kB
18 B
2 B
Unchanged fixtures
Package & Exports Size (minified/GZIP)
react
ActivityItem
71.019 kB
23.288 kB
react
Announced
38.291 kB
13.239 kB
react
Autofill
15.365 kB
4.743 kB
react
Breadcrumb
201.796 kB
60.267 kB
react
Button
195.26 kB
56.471 kB
react
ButtonGrid
180.207 kB
54.515 kB
react
Calendar
121.542 kB
36.943 kB
react
Callout
84.108 kB
27.552 kB
react
Check
52.963 kB
17.773 kB
react
Checkbox
59.751 kB
19.806 kB
react
ChoiceGroup
65.276 kB
21.438 kB
react
ChoiceGroupOption
58.531 kB
19.309 kB
react
Coachmark
92.937 kB
29.356 kB
react
Color
7.737 kB
3.106 kB
react
ComboBox
251.561 kB
72.081 kB
react
CommandBar
202.829 kB
59.975 kB
react
ContextualMenu
154.789 kB
48.068 kB
react
DateTimeUtilities
5.244 kB
1.849 kB
react
DetailsList
229.317 kB
65.63 kB
react
Dialog
211.12 kB
62.982 kB
react
Divider
19.399 kB
6.798 kB
react
DocumentCard
216.805 kB
64.269 kB
react
DragDrop
8.343 kB
2.724 kB
react
DraggableZone
34.109 kB
11.448 kB
react
Dropdown
233.726 kB
68.456 kB
react
ExtendedPicker
96.565 kB
27.809 kB
react
Fabric
41.537 kB
14.283 kB
react
Facepile
210.377 kB
63.035 kB
react
FloatingPicker
241.851 kB
68.827 kB
react
FocusTrapZone
16.975 kB
5.917 kB
react
FocusZone
54.844 kB
17.402 kB
react
Grid
180.207 kB
54.515 kB
react
GroupedList
134.634 kB
40.596 kB
react
GroupedListV2
122.251 kB
37.703 kB
react
HoverCard
96.969 kB
30.741 kB
react
Icon
51.644 kB
17.197 kB
react
Icons
66.305 kB
24.379 kB
react
Image
46.701 kB
15.646 kB
react
Keytip
81.482 kB
26.712 kB
react
KeytipData
13.969 kB
4.57 kB
react
KeytipLayer
103.278 kB
31.961 kB
react
Keytips
106.046 kB
32.966 kB
react
Label
38.134 kB
13.207 kB
react
Layer
47.887 kB
16.295 kB
react
Link
39.488 kB
13.614 kB
react
List
39.176 kB
12.384 kB
react
MarqueeSelection
74.321 kB
22.385 kB
react
MessageBar
190.311 kB
56.941 kB
react
Modal
93.44 kB
30.18 kB
react
Nav
187.789 kB
56.378 kB
react
OverflowSet
33.191 kB
11.252 kB
react
Overlay
40.694 kB
14.023 kB
react
Panel
200.831 kB
59.888 kB
react
Persona
114.617 kB
36.442 kB
react
PersonaCoin
114.617 kB
36.442 kB
react
PersonaPresence
57.833 kB
19.303 kB
react
Pickers
293.537 kB
82.173 kB
react
Pivot
188.703 kB
57.114 kB
react
Popup
12.242 kB
4.181 kB
react
Positioning
22.608 kB
7.63 kB
react
PositioningContainer
73.643 kB
23.706 kB
react
ProgressIndicator
39.286 kB
13.482 kB
react
Rating
81.762 kB
26.057 kB
react
ResizeGroup
13.286 kB
4.365 kB
react
ResponsiveMode
8.078 kB
2.95 kB
react
ScrollablePane
55.325 kB
17.669 kB
react
SearchBox
188.586 kB
56.544 kB
react
SelectableOption
724 B
413 B
react
SelectedItemsList
232.346 kB
67.779 kB
react
Selection
42.252 kB
12.203 kB
react
Separator
35.183 kB
12.088 kB
react
Shimmer
49.049 kB
16.206 kB
react
ShimmeredDetailsList
240.092 kB
68.397 kB
react
Slider
57.449 kB
19.143 kB
react
SpinButton
192.314 kB
57.665 kB
react
Spinner
41.481 kB
14.412 kB
react
Stack
41.547 kB
14.233 kB
react
Sticky
32.541 kB
10.49 kB
react
Styling
45.853 kB
15.082 kB
react
SwatchColorPicker
190.533 kB
57.999 kB
react
TeachingBubble
205.586 kB
60.896 kB
react
Text
36.723 kB
12.763 kB
react
Theme
43.321 kB
14.129 kB
react
ThemeGenerator
12.34 kB
4.106 kB
react
TimePicker
241.365 kB
69.856 kB
react
Toggle
46.02 kB
15.903 kB
react
Tooltip
87.136 kB
28.164 kB
react
Utilities
82.495 kB
25.047 kB
react
Viewport
23.703 kB
7.589 kB
react
WeeklyDayPicker
101.682 kB
31.738 kB
react
WindowProvider
1.059 kB
541 B
🤖 This report was generated against b648c2bf7d839184e2e44ca4e9a8496e2d4ba23c

@fabricteam
Copy link
Collaborator

fabricteam commented May 8, 2024

Perf Analysis (@fluentui/react)

No significant results to display.

All results

Scenario Render type Master Ticks PR Ticks Iterations Status
BaseButton mount 632 646 5000
Breadcrumb mount 1704 1687 1000
Checkbox mount 1731 1697 5000
CheckboxBase mount 1500 1481 5000
ChoiceGroup mount 2935 2977 5000
ComboBox mount 695 658 1000
CommandBar mount 6597 6528 1000
ContextualMenu mount 14556 14591 1000
DefaultButton mount 774 822 5000
DetailsRow mount 2204 2232 5000
DetailsRowFast mount 2281 2206 5000
DetailsRowNoStyles mount 2071 2047 5000
Dialog mount 2667 2827 1000
DocumentCardTitle mount 235 235 1000
Dropdown mount 2022 1997 5000
FocusTrapZone mount 1192 1187 5000
FocusZone mount 1092 1092 5000
GroupedList mount 37977 42425 2
GroupedList virtual-rerender 18142 20341 2
GroupedList virtual-rerender-with-unmount 51474 51541 2
GroupedListV2 mount 221 231 2
GroupedListV2 virtual-rerender 215 213 2
GroupedListV2 virtual-rerender-with-unmount 226 230 2
IconButton mount 1141 1155 5000
Label mount 351 354 5000
Layer mount 2774 2759 5000
Link mount 402 383 5000
MenuButton mount 987 971 5000
MessageBar mount 21843 21836 5000
Nav mount 2063 2037 1000
OverflowSet mount 786 807 5000
Panel mount 1820 1844 1000
Persona mount 770 750 1000
Pivot mount 919 890 1000
PrimaryButton mount 957 917 5000
Rating mount 4737 4624 5000
SearchBox mount 910 922 5000
Shimmer mount 1926 1922 5000
Slider mount 1367 1365 5000
SpinButton mount 2954 3028 5000
Spinner mount 403 387 5000
SplitButton mount 1897 1889 5000
Stack mount 420 417 5000
StackWithIntrinsicChildren mount 884 889 5000
StackWithTextChildren mount 2631 2685 5000
SwatchColorPicker mount 6386 6354 5000
TagPicker mount 1476 1463 5000
Text mount 376 383 5000
TextField mount 959 925 5000
ThemeProvider mount 862 836 5000
ThemeProvider virtual-rerender 584 599 5000
ThemeProvider virtual-rerender-with-unmount 1308 1271 5000
Toggle mount 612 616 5000
buttonNative mount 203 195 5000

sopranopillow
sopranopillow previously approved these changes May 9, 2024
@sopranopillow sopranopillow self-requested a review May 13, 2024 14:40
@sopranopillow sopranopillow dismissed their stale review May 13, 2024 14:40

There are some issues with the required asterisk that should be addressed before merging

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.

[Bug]: Extraneous scrollbar when selecting text field
3 participants