33 * Copyright (c) 2021 - 2025 Vaadin Ltd.
44 * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
55 */
6+ import { isKeyboardActive } from '@vaadin/a11y-base/src/focus-utils.js' ;
67import { ComponentObserver } from './vaadin-component-observer.js' ;
78
89export class DatePickerObserver extends ComponentObserver {
910 constructor ( datePicker ) {
1011 super ( datePicker ) ;
1112
1213 this . datePicker = datePicker ;
13- this . fullscreenFocus = false ;
1414 this . blurWhileOpened = false ;
1515
1616 this . addListeners ( datePicker ) ;
@@ -19,14 +19,6 @@ export class DatePickerObserver extends ComponentObserver {
1919 addListeners ( datePicker ) {
2020 this . overlay = datePicker . $ . overlay ;
2121
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-
3022 datePicker . addEventListener ( 'opened-changed' , ( event ) => this . onOpenedChanged ( event ) ) ;
3123
3224 this . overlay . addEventListener ( 'focusout' , ( event ) => this . onOverlayFocusOut ( event ) ) ;
@@ -40,11 +32,9 @@ export class DatePickerObserver extends ComponentObserver {
4032 return this . datePicker . _overlayContent && this . datePicker . _overlayContent . contains ( node ) ;
4133 }
4234
43- onBlur ( event ) {
35+ isFullscreen ( ) {
4436 const datePicker = this . datePicker ;
45- if ( datePicker . _fullscreen && ! this . isEventInOverlay ( event . relatedTarget ) ) {
46- this . fullscreenFocus = true ;
47- }
37+ return datePicker . _noInput && ! isKeyboardActive ( ) ;
4838 }
4939
5040 onFocusIn ( event ) {
@@ -63,7 +53,7 @@ export class DatePickerObserver extends ComponentObserver {
6353 }
6454
6555 onFocusOut ( event ) {
66- if ( this . fullscreenFocus || this . isEventInOverlay ( event . relatedTarget ) ) {
56+ if ( this . isEventInOverlay ( event . relatedTarget ) ) {
6757 // Do nothing, overlay is opening.
6858 } else if ( ! this . datePicker . opened ) {
6959 // Field blur when closed.
@@ -83,8 +73,7 @@ export class DatePickerObserver extends ComponentObserver {
8373 }
8474
8575 onOpenedChanged ( event ) {
86- if ( event . detail . value === true && this . fullscreenFocus ) {
87- this . fullscreenFocus = false ;
76+ if ( event . detail . value === true && this . isFullscreen ( ) ) {
8877 this . showOutline ( this . datePicker ) ;
8978 }
9079
0 commit comments