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

[Tooltip] Use hysteresis with the enterDelay #18458

Merged

Conversation

oliviertassinari
Copy link
Member

@oliviertassinari oliviertassinari commented Nov 19, 2019

Based on https://twitter.com/ryanflorence/status/1196859248027635713, thanks @ryanflorence for sharing! The Material Design spec encourages a default value of enterDelay of 0ms. However, people are very likely to customize this value. The support should be as good a the native tooltips.

Before
before

After
Nov-20-2019 00-44-59

@oliviertassinari oliviertassinari added new feature New feature or request component: tooltip This is the name of the generic UI component, not the React module! labels Nov 19, 2019
@oliviertassinari oliviertassinari changed the title [Tooltip] Better handle [Tooltip] Use hysteresis with the enterDelay Nov 19, 2019
@mui-pr-bot
Copy link

mui-pr-bot commented Nov 19, 2019

Details of bundle changes.

Comparing: 508f9a3...4b8dd46

bundle Size Change Size Gzip Change Gzip
@material-ui/core ▲ +59 B (+0.02% ) 351 kB ▲ +43 B (+0.04% ) 96.1 kB
@material-ui/lab ▲ +59 B (+0.03% ) 172 kB ▲ +43 B (+0.08% ) 51.9 kB
SpeedDialAction ▲ +59 B (+0.05% ) 115 kB ▲ +41 B (+0.11% ) 36.4 kB
Tooltip ▲ +59 B (+0.06% ) 99.1 kB ▲ +33 B (+0.11% ) 31.4 kB
@material-ui/core[umd] ▲ +52 B (+0.02% ) 310 kB ▲ +57 B (+0.06% ) 89.3 kB
docs.main ▲ +44 B (+0.01% ) 609 kB ▲ +35 B (+0.02% ) 194 kB
@material-ui/styles -- 50.8 kB -- 15.4 kB
@material-ui/system -- 14.8 kB -- 4.06 kB
AppBar -- 62.4 kB -- 19.5 kB
Autocomplete -- 126 kB -- 40 kB
Avatar -- 61.4 kB -- 19.3 kB
Backdrop -- 66.4 kB -- 20.5 kB
Badge -- 64 kB -- 19.8 kB
BottomNavigation -- 61 kB -- 19.1 kB
BottomNavigationAction -- 74 kB -- 23.4 kB
Box -- 69.4 kB -- 21 kB
Breadcrumbs -- 66.6 kB -- 20.9 kB
Button -- 78 kB -- 23.8 kB
ButtonBase -- 72.5 kB -- 22.7 kB
ButtonGroup -- 80.6 kB -- 24.7 kB
Card -- 61.3 kB -- 19.2 kB
CardActionArea -- 73.6 kB -- 23.2 kB
CardActions -- 60.7 kB -- 19 kB
CardContent -- 60.6 kB -- 18.9 kB
CardHeader -- 63.7 kB -- 20 kB
CardMedia -- 61 kB -- 19.1 kB
Checkbox -- 80.4 kB -- 25.2 kB
Chip -- 81.1 kB -- 24.8 kB
CircularProgress -- 62.7 kB -- 19.7 kB
ClickAwayListener -- 3.87 kB -- 1.56 kB
Collapse -- 66.5 kB -- 20.5 kB
colorManipulator -- 3.83 kB -- 1.52 kB
Container -- 61.8 kB -- 19.3 kB
CssBaseline -- 56.2 kB -- 17.6 kB
Dialog -- 81.2 kB -- 25.2 kB
DialogActions -- 60.7 kB -- 19 kB
DialogContent -- 60.8 kB -- 19.1 kB
DialogContentText -- 62.7 kB -- 19.7 kB
DialogTitle -- 62.9 kB -- 19.8 kB
Divider -- 61.2 kB -- 19.2 kB
docs.landing -- 55.5 kB -- 14.4 kB
Drawer -- 82.9 kB -- 25.7 kB
ExpansionPanel -- 69.8 kB -- 21.8 kB
ExpansionPanelActions -- 60.7 kB -- 19 kB
ExpansionPanelDetails -- 60.6 kB -- 18.9 kB
ExpansionPanelSummary -- 76.7 kB -- 24.1 kB
Fab -- 75.4 kB -- 23.4 kB
Fade -- 22.2 kB -- 7.66 kB
FilledInput -- 72.2 kB -- 22.3 kB
FormControl -- 63 kB -- 19.5 kB
FormControlLabel -- 64.1 kB -- 20.1 kB
FormGroup -- 60.6 kB -- 19 kB
FormHelperText -- 61.9 kB -- 19.4 kB
FormLabel -- 62.1 kB -- 19.2 kB
Grid -- 63.7 kB -- 20 kB
GridList -- 61.1 kB -- 19.2 kB
GridListTile -- 62.3 kB -- 19.5 kB
GridListTileBar -- 61.8 kB -- 19.4 kB
Grow -- 22.8 kB -- 7.79 kB
Hidden -- 64.5 kB -- 20.2 kB
Icon -- 61.4 kB -- 19.2 kB
IconButton -- 74.7 kB -- 23.2 kB
Input -- 71.1 kB -- 22.1 kB
InputAdornment -- 63.7 kB -- 20.1 kB
InputBase -- 69.2 kB -- 21.7 kB
InputLabel -- 63.9 kB -- 19.9 kB
LinearProgress -- 64 kB -- 19.9 kB
Link -- 65.2 kB -- 20.7 kB
List -- 61 kB -- 18.9 kB
ListItem -- 75.7 kB -- 23.6 kB
ListItemAvatar -- 60.7 kB -- 19 kB
ListItemIcon -- 60.8 kB -- 19 kB
ListItemSecondaryAction -- 60.6 kB -- 19 kB
ListItemText -- 63.6 kB -- 20 kB
ListSubheader -- 61.4 kB -- 19.3 kB
Menu -- 86.9 kB -- 27.3 kB
MenuItem -- 76.7 kB -- 23.9 kB
MenuList -- 64.6 kB -- 20.1 kB
MobileStepper -- 66.3 kB -- 20.7 kB
Modal -- 14.2 kB -- 4.98 kB
NativeSelect -- 75.4 kB -- 23.7 kB
NoSsr -- 2.19 kB -- 1.03 kB
OutlinedInput -- 72.6 kB -- 22.5 kB
Paper -- 60.9 kB -- 18.9 kB
Popover -- 81.2 kB -- 25.1 kB
Popper -- 28.6 kB -- 10.2 kB
Portal -- 2.87 kB -- 1.29 kB
Radio -- 81.2 kB -- 25.5 kB
RadioGroup -- 61.8 kB -- 19.3 kB
Rating -- 68.6 kB -- 22 kB
RootRef -- 4.43 kB -- 1.67 kB
Select -- 113 kB -- 33.5 kB
Skeleton -- 61.2 kB -- 19.3 kB
Slide -- 24.3 kB -- 8.27 kB
Slider -- 74.2 kB -- 23.4 kB
Snackbar -- 75.7 kB -- 23.6 kB
SnackbarContent -- 64.3 kB -- 20.2 kB
SpeedDial -- 84.6 kB -- 26.6 kB
SpeedDialIcon -- 63.2 kB -- 19.8 kB
Step -- 61.2 kB -- 19.2 kB
StepButton -- 80.9 kB -- 25.4 kB
StepConnector -- 61.3 kB -- 19.3 kB
StepContent -- 67.6 kB -- 21.1 kB
StepIcon -- 63.3 kB -- 19.7 kB
StepLabel -- 67.2 kB -- 21.1 kB
Stepper -- 63.4 kB -- 19.9 kB
styles/createMuiTheme -- 15.4 kB -- 5.43 kB
SvgIcon -- 61.7 kB -- 19.2 kB
SwipeableDrawer -- 90.3 kB -- 28.1 kB
Switch -- 79.7 kB -- 24.8 kB
Tab -- 74.9 kB -- 23.7 kB
Table -- 61.2 kB -- 19.2 kB
TableBody -- 60.7 kB -- 19 kB
TableCell -- 62.7 kB -- 19.7 kB
TableFooter -- 60.7 kB -- 19 kB
TableHead -- 60.7 kB -- 19 kB
TablePagination -- 139 kB -- 40.7 kB
TableRow -- 61.1 kB -- 19.1 kB
TableSortLabel -- 75.9 kB -- 24 kB
Tabs -- 84 kB -- 26.8 kB
TextareaAutosize -- 5.06 kB -- 2.11 kB
TextField -- 122 kB -- 35.5 kB
ToggleButton -- 74.7 kB -- 23.6 kB
ToggleButtonGroup -- 61.8 kB -- 19.4 kB
Toolbar -- 60.9 kB -- 19.1 kB
TreeItem -- 72.2 kB -- 22.7 kB
TreeView -- 65 kB -- 20.3 kB
Typography -- 62.3 kB -- 19.4 kB
useAutocomplete -- 12.2 kB -- 4.5 kB
useMediaQuery -- 2.49 kB -- 1.05 kB
Zoom -- 22.3 kB -- 7.67 kB

Generated by 🚫 dangerJS against 4b8dd46

assert.strictEqual(wrapper.find('[role="tooltip"]').exists(), false);
clock.tick(111);
wrapper.update();
assert.strictEqual(wrapper.find('[role="tooltip"]').exists(), true);
});

it('should use hysteresis with the enterDelay', () => {
Copy link
Member Author

@oliviertassinari oliviertassinari Nov 20, 2019

Choose a reason for hiding this comment

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

@eps1lon Oh boy, it's in the contrast of this file that I truly realize how tests that are written with @test-library/react are much better than the ones we have with enzyme 👏. Being able to trigger real events makes all the difference.

@oliviertassinari oliviertassinari merged commit 52c4451 into mui:master Nov 20, 2019
@eps1lon
Copy link
Member

eps1lon commented Nov 22, 2019

This PR is a nice improvement. I want to add some comments about how I see tooltips (mainly to gather my thoughts).

I'm not a fan of a fixed enter delay for "hover labels" to begin with. They contribute to poor discoverability (hover labels on unlabeled buttons are more convention than intuition (anecdotal from helping family members with computer stuff)). Compare it to the practice of using a different cursor for links. This is also a mechanism to signify an affordance ("clicking this area navigates") but has no delay at all.

For buttons close to each other measuring acceleration might work just as well and would avoid making it seem like two buttons accross the screen are related by immediately showing the tooltip when e.g. moving from top left to bottom right. But this would obviously require extensive UX testing.

I'll add reminder to experiment with a singleton tooltip that transitions (translate) between buttons instead of re-appearing between them. Especially toolbars can benefit quite a bit from this.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
component: tooltip This is the name of the generic UI component, not the React module! new feature New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants