3
3
* Copyright (c) 2021 - 2025 Vaadin Ltd.
4
4
* This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
5
*/
6
+ import { isKeyboardActive } from '@vaadin/a11y-base/src/focus-utils.js' ;
6
7
import { ComponentObserver } from './vaadin-component-observer.js' ;
7
8
8
9
export class DatePickerObserver extends ComponentObserver {
9
10
constructor ( datePicker ) {
10
11
super ( datePicker ) ;
11
12
12
13
this . datePicker = datePicker ;
13
- this . fullscreenFocus = false ;
14
14
this . blurWhileOpened = false ;
15
15
16
16
this . addListeners ( datePicker ) ;
@@ -19,14 +19,6 @@ export class DatePickerObserver extends ComponentObserver {
19
19
addListeners ( datePicker ) {
20
20
this . overlay = datePicker . $ . overlay ;
21
21
22
- // Fullscreen date picker calls blur() to avoid focusing of the input:
23
- // 1. first time when focus event is fired (before opening the overlay),
24
- // 2. second time after the overlay is open, see "_onOverlayOpened".
25
- // Here we set the flag to ignore related focusout events and then to
26
- // mark date picker as being edited by user (to show field highlight).
27
- // We have to use capture phase in order to catch this event early.
28
- datePicker . addEventListener ( 'blur' , ( event ) => this . onBlur ( event ) , true ) ;
29
-
30
22
datePicker . addEventListener ( 'opened-changed' , ( event ) => this . onOpenedChanged ( event ) ) ;
31
23
32
24
this . overlay . addEventListener ( 'focusout' , ( event ) => this . onOverlayFocusOut ( event ) ) ;
@@ -40,11 +32,9 @@ export class DatePickerObserver extends ComponentObserver {
40
32
return this . datePicker . _overlayContent && this . datePicker . _overlayContent . contains ( node ) ;
41
33
}
42
34
43
- onBlur ( event ) {
35
+ isFullscreen ( ) {
44
36
const datePicker = this . datePicker ;
45
- if ( datePicker . _fullscreen && ! this . isEventInOverlay ( event . relatedTarget ) ) {
46
- this . fullscreenFocus = true ;
47
- }
37
+ return datePicker . _noInput && ! isKeyboardActive ( ) ;
48
38
}
49
39
50
40
onFocusIn ( event ) {
@@ -63,7 +53,7 @@ export class DatePickerObserver extends ComponentObserver {
63
53
}
64
54
65
55
onFocusOut ( event ) {
66
- if ( this . fullscreenFocus || this . isEventInOverlay ( event . relatedTarget ) ) {
56
+ if ( this . isEventInOverlay ( event . relatedTarget ) ) {
67
57
// Do nothing, overlay is opening.
68
58
} else if ( ! this . datePicker . opened ) {
69
59
// Field blur when closed.
@@ -83,8 +73,7 @@ export class DatePickerObserver extends ComponentObserver {
83
73
}
84
74
85
75
onOpenedChanged ( event ) {
86
- if ( event . detail . value === true && this . fullscreenFocus ) {
87
- this . fullscreenFocus = false ;
76
+ if ( event . detail . value === true && this . isFullscreen ( ) ) {
88
77
this . showOutline ( this . datePicker ) ;
89
78
}
90
79
0 commit comments