@@ -53,6 +53,15 @@ export interface ITooltipProps<T> {
53
53
*/
54
54
readonly interactive ?: boolean
55
55
56
+ /**
57
+ * Whether or not the tooltip should be dismissable via the escape key. This
58
+ * is generally true, but if the tooltip is communicating something important
59
+ * to the user, such as an input error, it should not be dismissable.
60
+ *
61
+ * Defaults to true
62
+ */
63
+ readonly dismissable ?: boolean
64
+
56
65
/**
57
66
* The amount of time to wait (in milliseconds) while a user hovers over the
58
67
* target before displaying the tooltip. There's typically no reason to
@@ -377,6 +386,13 @@ export class Tooltip<T extends TooltipTarget> extends React.Component<
377
386
}
378
387
}
379
388
389
+ private onKeyDown = ( event : KeyboardEvent ) => {
390
+ if ( event . key === 'Escape' && this . state . show && this . props . dismissable ) {
391
+ event . preventDefault ( )
392
+ this . beginHideTooltip ( )
393
+ }
394
+ }
395
+
380
396
private installTooltip ( elem : TooltipTarget ) {
381
397
elem . addEventListener ( 'mouseenter' , this . onTargetMouseEnter )
382
398
elem . addEventListener ( 'mouseleave' , this . onTargetMouseLeave )
@@ -389,6 +405,7 @@ export class Tooltip<T extends TooltipTarget> extends React.Component<
389
405
elem . addEventListener ( 'tooltip-shown' , this . onTooltipShown )
390
406
elem . addEventListener ( 'tooltip-hidden' , this . onTooltipHidden )
391
407
elem . addEventListener ( 'click' , this . onTargetClick )
408
+ elem . addEventListener ( 'keydown' , this . onKeyDown )
392
409
}
393
410
394
411
private removeTooltip ( prevTarget : TooltipTarget | null ) {
@@ -405,6 +422,7 @@ export class Tooltip<T extends TooltipTarget> extends React.Component<
405
422
prevTarget . removeEventListener ( 'focusout' , this . onTargetBlur )
406
423
prevTarget . removeEventListener ( 'blur' , this . onTargetBlur )
407
424
prevTarget . removeEventListener ( 'click' , this . onTargetClick )
425
+ prevTarget . removeEventListener ( 'keydown' , this . onKeyDown )
408
426
}
409
427
}
410
428
0 commit comments