@vaadin/date-picker 23.0.8 → 23.0.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vaadin/date-picker",
3
- "version": "23.0.8",
3
+ "version": "23.0.11",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -34,21 +34,20 @@
34
34
  "dependencies": {
35
35
  "@open-wc/dedupe-mixin": "^1.3.0",
36
36
  "@polymer/polymer": "^3.2.0",
37
- "@vaadin/button": "^23.0.8",
38
- "@vaadin/component-base": "^23.0.8",
39
- "@vaadin/field-base": "^23.0.8",
40
- "@vaadin/input-container": "^23.0.8",
41
- "@vaadin/vaadin-lumo-styles": "^23.0.8",
42
- "@vaadin/vaadin-material-styles": "^23.0.8",
43
- "@vaadin/vaadin-overlay": "^23.0.8",
44
- "@vaadin/vaadin-themable-mixin": "^23.0.8"
37
+ "@vaadin/button": "^23.0.11",
38
+ "@vaadin/component-base": "^23.0.11",
39
+ "@vaadin/field-base": "^23.0.11",
40
+ "@vaadin/input-container": "^23.0.11",
41
+ "@vaadin/vaadin-lumo-styles": "^23.0.11",
42
+ "@vaadin/vaadin-material-styles": "^23.0.11",
43
+ "@vaadin/vaadin-overlay": "^23.0.11",
44
+ "@vaadin/vaadin-themable-mixin": "^23.0.11"
45
45
  },
46
46
  "devDependencies": {
47
47
  "@esm-bundle/chai": "^4.3.4",
48
- "@vaadin/dialog": "^23.0.8",
49
- "@vaadin/polymer-legacy-adapter": "^23.0.8",
48
+ "@vaadin/dialog": "^23.0.11",
50
49
  "@vaadin/testing-helpers": "^0.3.2",
51
50
  "sinon": "^9.2.0"
52
51
  },
53
- "gitHead": "43fe9d95c8cd745adc7bef214c0097c47f4f83ed"
52
+ "gitHead": "10838304fe6f5c98b838ec3a90bdcf49cbf4650b"
54
53
  }
@@ -100,6 +100,6 @@ export function extractDateParts(date) {
100
100
  return {
101
101
  day: date.getDate(),
102
102
  month: date.getMonth(),
103
- year: date.getFullYear()
103
+ year: date.getFullYear(),
104
104
  };
105
105
  }
@@ -90,13 +90,13 @@ declare class DatePickerLight extends ThemableMixin(DatePickerMixin(HTMLElement)
90
90
  addEventListener<K extends keyof DatePickerLightEventMap>(
91
91
  type: K,
92
92
  listener: (this: DatePickerLight, ev: DatePickerLightEventMap[K]) => void,
93
- options?: boolean | AddEventListenerOptions
93
+ options?: boolean | AddEventListenerOptions,
94
94
  ): void;
95
95
 
96
96
  removeEventListener<K extends keyof DatePickerLightEventMap>(
97
97
  type: K,
98
98
  listener: (this: DatePickerLight, ev: DatePickerLightEventMap[K]) => void,
99
- options?: boolean | EventListenerOptions
99
+ options?: boolean | EventListenerOptions,
100
100
  ): void;
101
101
  }
102
102
 
@@ -84,13 +84,10 @@ class DatePickerLight extends ThemableMixin(DatePickerMixin(PolymerElement)) {
84
84
  fullscreen$="[[_fullscreen]]"
85
85
  label="[[label]]"
86
86
  selected-date="[[_selectedDate]]"
87
- slot="dropdown-content"
88
87
  focused-date="{{_focusedDate}}"
89
88
  show-week-numbers="[[showWeekNumbers]]"
90
89
  min-date="[[_minDate]]"
91
90
  max-date="[[_maxDate]]"
92
- on-date-tap="_close"
93
- role="dialog"
94
91
  part="overlay-content"
95
92
  theme$="[[__getOverlayTheme(theme, _overlayInitialized)]]"
96
93
  >
@@ -114,7 +111,7 @@ class DatePickerLight extends ThemableMixin(DatePickerMixin(PolymerElement)) {
114
111
  */
115
112
  attrForValue: {
116
113
  type: String,
117
- value: 'value'
114
+ value: 'value',
118
115
  },
119
116
 
120
117
  /**
@@ -123,11 +120,18 @@ class DatePickerLight extends ThemableMixin(DatePickerMixin(PolymerElement)) {
123
120
  */
124
121
  _overlayInitialized: {
125
122
  type: Boolean,
126
- value: true
127
- }
123
+ value: true,
124
+ },
128
125
  };
129
126
  }
130
127
 
128
+ /** @protected */
129
+ ready() {
130
+ super.ready();
131
+
132
+ this._initOverlay();
133
+ }
134
+
131
135
  /** @protected */
132
136
  connectedCallback() {
133
137
  super.connectedCallback();
@@ -32,7 +32,7 @@ export interface DatePickerI18n {
32
32
  }
33
33
 
34
34
  export declare function DatePickerMixin<T extends Constructor<HTMLElement>>(
35
- base: T
35
+ base: T,
36
36
  ): T &
37
37
  Constructor<DatePickerMixinClass> &
38
38
  Constructor<DelegateFocusMixinClass> &
@@ -26,7 +26,7 @@ export const DatePickerMixin = (subclass) =>
26
26
  * @protected
27
27
  */
28
28
  _selectedDate: {
29
- type: Date
29
+ type: Date,
30
30
  },
31
31
 
32
32
  /**
@@ -48,7 +48,7 @@ export const DatePickerMixin = (subclass) =>
48
48
  type: String,
49
49
  observer: '_valueChanged',
50
50
  notify: true,
51
- value: ''
51
+ value: '',
52
52
  },
53
53
 
54
54
  /**
@@ -66,7 +66,7 @@ export const DatePickerMixin = (subclass) =>
66
66
  type: Boolean,
67
67
  reflectToAttribute: true,
68
68
  notify: true,
69
- observer: '_openedChanged'
69
+ observer: '_openedChanged',
70
70
  },
71
71
 
72
72
  /**
@@ -82,7 +82,7 @@ export const DatePickerMixin = (subclass) =>
82
82
  * @attr {boolean} show-week-numbers
83
83
  */
84
84
  showWeekNumbers: {
85
- type: Boolean
85
+ type: Boolean,
86
86
  },
87
87
 
88
88
  /**
@@ -91,7 +91,7 @@ export const DatePickerMixin = (subclass) =>
91
91
  */
92
92
  _fullscreen: {
93
93
  type: Boolean,
94
- value: false
94
+ value: false,
95
95
  },
96
96
 
97
97
  /**
@@ -99,7 +99,7 @@ export const DatePickerMixin = (subclass) =>
99
99
  * @protected
100
100
  */
101
101
  _fullscreenMediaQuery: {
102
- value: '(max-width: 420px), (max-height: 420px)'
102
+ value: '(max-width: 420px), (max-height: 420px)',
103
103
  },
104
104
 
105
105
  /**
@@ -208,7 +208,7 @@ export const DatePickerMixin = (subclass) =>
208
208
  'September',
209
209
  'October',
210
210
  'November',
211
- 'December'
211
+ 'December',
212
212
  ],
213
213
  weekdays: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
214
214
  weekdaysShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
@@ -248,9 +248,9 @@ export const DatePickerMixin = (subclass) =>
248
248
  },
249
249
  formatTitle: (monthName, fullYear) => {
250
250
  return monthName + ' ' + fullYear;
251
- }
251
+ },
252
252
  };
253
- }
253
+ },
254
254
  },
255
255
 
256
256
  /**
@@ -264,7 +264,7 @@ export const DatePickerMixin = (subclass) =>
264
264
  */
265
265
  min: {
266
266
  type: String,
267
- observer: '_minChanged'
267
+ observer: '_minChanged',
268
268
  },
269
269
 
270
270
  /**
@@ -278,7 +278,7 @@ export const DatePickerMixin = (subclass) =>
278
278
  */
279
279
  max: {
280
280
  type: String,
281
- observer: '_maxChanged'
281
+ observer: '_maxChanged',
282
282
  },
283
283
 
284
284
  /**
@@ -289,7 +289,7 @@ export const DatePickerMixin = (subclass) =>
289
289
  _minDate: {
290
290
  type: Date,
291
291
  // null does not work here because minimizer passes undefined to overlay (#351)
292
- value: ''
292
+ value: '',
293
293
  },
294
294
 
295
295
  /**
@@ -299,39 +299,39 @@ export const DatePickerMixin = (subclass) =>
299
299
  */
300
300
  _maxDate: {
301
301
  type: Date,
302
- value: ''
302
+ value: '',
303
303
  },
304
304
 
305
305
  /** @private */
306
306
  _noInput: {
307
307
  type: Boolean,
308
- computed: '_isNoInput(inputElement, _fullscreen, _ios, i18n, opened, autoOpenDisabled)'
308
+ computed: '_isNoInput(inputElement, _fullscreen, _ios, i18n, opened, autoOpenDisabled)',
309
309
  },
310
310
 
311
311
  /** @private */
312
312
  _ios: {
313
313
  type: Boolean,
314
- value: isIOS
314
+ value: isIOS,
315
315
  },
316
316
 
317
317
  /** @private */
318
318
  _webkitOverflowScroll: {
319
319
  type: Boolean,
320
- value: document.createElement('div').style.webkitOverflowScrolling === ''
320
+ value: document.createElement('div').style.webkitOverflowScrolling === '',
321
321
  },
322
322
 
323
323
  /** @private */
324
324
  _focusOverlayOnOpen: Boolean,
325
325
 
326
326
  /** @protected */
327
- _overlayInitialized: Boolean
327
+ _overlayInitialized: Boolean,
328
328
  };
329
329
  }
330
330
 
331
331
  static get observers() {
332
332
  return [
333
333
  '_selectedDateChanged(_selectedDate, i18n.formatDate)',
334
- '_focusedDateChanged(_focusedDate, i18n.formatDate)'
334
+ '_focusedDateChanged(_focusedDate, i18n.formatDate)',
335
335
  ];
336
336
  }
337
337
 
@@ -421,7 +421,7 @@ export const DatePickerMixin = (subclass) =>
421
421
  this.addController(
422
422
  new MediaQueryController(this._fullscreenMediaQuery, (matches) => {
423
423
  this._fullscreen = matches;
424
- })
424
+ }),
425
425
  );
426
426
 
427
427
  this.addController(new VirtualKeyboardController(this));
@@ -471,13 +471,18 @@ export const DatePickerMixin = (subclass) =>
471
471
  }
472
472
  }
473
473
 
474
- /** @private */
474
+ /** @protected */
475
475
  _initOverlay() {
476
476
  this.$.overlay.removeAttribute('disable-upgrade');
477
477
  this._overlayInitialized = true;
478
478
 
479
479
  this.$.overlay.addEventListener('opened-changed', (e) => (this.opened = e.detail.value));
480
480
 
481
+ this.$.overlay.addEventListener('vaadin-overlay-escape-press', () => {
482
+ this._focusedDate = this._selectedDate;
483
+ this._close();
484
+ });
485
+
481
486
  this._overlayContent.addEventListener('close', this._close.bind(this));
482
487
  this._overlayContent.addEventListener('focus-input', this._focusAndSelect.bind(this));
483
488
 
@@ -486,6 +491,8 @@ export const DatePickerMixin = (subclass) =>
486
491
  this.__userConfirmedDate = true;
487
492
 
488
493
  this._selectDate(e.detail.date);
494
+
495
+ this._close(e);
489
496
  });
490
497
 
491
498
  // User confirmed selected date by pressing Enter or Today.
@@ -496,12 +503,10 @@ export const DatePickerMixin = (subclass) =>
496
503
  });
497
504
 
498
505
  // Keep focus attribute in focusElement for styling
499
- this._overlayContent.addEventListener('focus', () => {
506
+ this._overlayContent.addEventListener('focusin', () => {
500
507
  this._setFocused(true);
501
508
  });
502
509
 
503
- this.$.overlay.addEventListener('vaadin-overlay-close', this._onVaadinOverlayClose.bind(this));
504
-
505
510
  this.addEventListener('mousedown', () => this.__bringToFront());
506
511
  this.addEventListener('touchstart', () => this.__bringToFront());
507
512
  }
@@ -761,6 +766,7 @@ export const DatePickerMixin = (subclass) =>
761
766
 
762
767
  if (this._noInput && this.focusElement) {
763
768
  this.focusElement.blur();
769
+ this._overlayContent.focusDateElement();
764
770
  }
765
771
  }
766
772
 
@@ -775,7 +781,7 @@ export const DatePickerMixin = (subclass) =>
775
781
  element.style.webkitOverflowScrolling = 'auto';
776
782
  result.push({
777
783
  element: element,
778
- oldInlineValue: oldInlineValue
784
+ oldInlineValue: oldInlineValue,
779
785
  });
780
786
  }
781
787
  element = element.parentElement;
@@ -811,7 +817,7 @@ export const DatePickerMixin = (subclass) =>
811
817
 
812
818
  if (this._touchPrevented) {
813
819
  this._touchPrevented.forEach(
814
- (prevented) => (prevented.element.style.webkitOverflowScrolling = prevented.oldInlineValue)
820
+ (prevented) => (prevented.element.style.webkitOverflowScrolling = prevented.oldInlineValue),
815
821
  );
816
822
  this._touchPrevented = [];
817
823
  }
@@ -847,9 +853,7 @@ export const DatePickerMixin = (subclass) =>
847
853
 
848
854
  /** @protected */
849
855
  _focus() {
850
- if (this._noInput) {
851
- this._overlayInitialized && this._overlayContent.focus();
852
- } else {
856
+ if (!this._noInput) {
853
857
  this.inputElement.focus();
854
858
  }
855
859
  }
@@ -924,7 +928,7 @@ export const DatePickerMixin = (subclass) =>
924
928
  // the required attribute. Both are not allowed on an input element.
925
929
  // Therefore we prevent default on most keydown events.
926
930
  var allowedKeys = [
927
- 9 // tab
931
+ 9, // tab
928
932
  ];
929
933
  if (allowedKeys.indexOf(e.keyCode) === -1) {
930
934
  e.preventDefault();
@@ -965,21 +969,7 @@ export const DatePickerMixin = (subclass) =>
965
969
  break;
966
970
  }
967
971
  case 'Escape':
968
- if (this.opened) {
969
- this._focusedDate = this._selectedDate;
970
- this._close();
971
- } else if (this.clearButtonVisible) {
972
- this._onClearButtonClick();
973
- } else if (this.autoOpenDisabled) {
974
- // Do not restore selected date if Esc was pressed after clearing input field
975
- if (this.inputElement.value === '') {
976
- this._selectDate(null);
977
- }
978
- this._applyInputValue(this._selectedDate);
979
- } else {
980
- this._focusedDate = this._selectedDate;
981
- this._selectParsedOrFocusedDate();
982
- }
972
+ this._onEscape();
983
973
  break;
984
974
  case 'Tab':
985
975
  if (this.opened) {
@@ -998,6 +988,27 @@ export const DatePickerMixin = (subclass) =>
998
988
  }
999
989
  }
1000
990
 
991
+ /** @private */
992
+ _onEscape() {
993
+ // Closing overlay is handled in vaadin-overlay-escape-press event listener.
994
+ if (this.opened) {
995
+ return;
996
+ }
997
+
998
+ if (this.clearButtonVisible) {
999
+ this._onClearButtonClick();
1000
+ } else if (this.autoOpenDisabled) {
1001
+ // Do not restore selected date if Esc was pressed after clearing input field
1002
+ if (this.inputElement.value === '') {
1003
+ this._selectDate(null);
1004
+ }
1005
+ this._applyInputValue(this._selectedDate);
1006
+ } else {
1007
+ this._focusedDate = this._selectedDate;
1008
+ this._selectParsedOrFocusedDate();
1009
+ }
1010
+ }
1011
+
1001
1012
  /** @private */
1002
1013
  _getParsedDate(inputValue = this._inputValue) {
1003
1014
  const dateObject = this.i18n.parseDate && this.i18n.parseDate(inputValue);
@@ -235,14 +235,14 @@ class DatePickerOverlayContent extends ControllerMixin(ThemableMixin(DirMixin(Po
235
235
  return {
236
236
  scrollDuration: {
237
237
  type: Number,
238
- default: 300
238
+ default: 300,
239
239
  },
240
240
 
241
241
  /**
242
242
  * The value for this element.
243
243
  */
244
244
  selectedDate: {
245
- type: Date
245
+ type: Date,
246
246
  },
247
247
 
248
248
  /**
@@ -251,7 +251,7 @@ class DatePickerOverlayContent extends ControllerMixin(ThemableMixin(DirMixin(Po
251
251
  focusedDate: {
252
252
  type: Date,
253
253
  notify: true,
254
- observer: '_focusedDateChanged'
254
+ observer: '_focusedDateChanged',
255
255
  },
256
256
 
257
257
  _focusedMonthDate: Number,
@@ -261,11 +261,11 @@ class DatePickerOverlayContent extends ControllerMixin(ThemableMixin(DirMixin(Po
261
261
  */
262
262
  initialPosition: {
263
263
  type: Date,
264
- observer: '_initialPositionChanged'
264
+ observer: '_initialPositionChanged',
265
265
  },
266
266
 
267
267
  _originDate: {
268
- value: new Date()
268
+ value: new Date(),
269
269
  },
270
270
 
271
271
  _visibleMonthIndex: Number,
@@ -274,23 +274,23 @@ class DatePickerOverlayContent extends ControllerMixin(ThemableMixin(DirMixin(Po
274
274
 
275
275
  _desktopMediaQuery: {
276
276
  type: String,
277
- value: '(min-width: 375px)'
277
+ value: '(min-width: 375px)',
278
278
  },
279
279
 
280
280
  _translateX: {
281
- observer: '_translateXChanged'
281
+ observer: '_translateXChanged',
282
282
  },
283
283
 
284
284
  _yearScrollerWidth: {
285
- value: 50
285
+ value: 50,
286
286
  },
287
287
 
288
288
  i18n: {
289
- type: Object
289
+ type: Object,
290
290
  },
291
291
 
292
292
  showWeekNumbers: {
293
- type: Boolean
293
+ type: Boolean,
294
294
  },
295
295
 
296
296
  _ignoreTaps: Boolean,
@@ -310,7 +310,7 @@ class DatePickerOverlayContent extends ControllerMixin(ThemableMixin(DirMixin(Po
310
310
  /**
311
311
  * Input label
312
312
  */
313
- label: String
313
+ label: String,
314
314
  };
315
315
  }
316
316
 
@@ -326,6 +326,9 @@ class DatePickerOverlayContent extends ControllerMixin(ThemableMixin(DirMixin(Po
326
326
 
327
327
  ready() {
328
328
  super.ready();
329
+
330
+ this.setAttribute('role', 'dialog');
331
+
329
332
  addListener(this, 'tap', this._stopPropagation);
330
333
  addListener(this.$.scrollers, 'track', this._track.bind(this));
331
334
  addListener(this.shadowRoot.querySelector('[part="clear-button"]'), 'tap', this._clear.bind(this));
@@ -336,13 +339,13 @@ class DatePickerOverlayContent extends ControllerMixin(ThemableMixin(DirMixin(Po
336
339
  addListener(
337
340
  this.shadowRoot.querySelector('[part="years-toggle-button"]'),
338
341
  'tap',
339
- this._toggleYearScroller.bind(this)
342
+ this._toggleYearScroller.bind(this),
340
343
  );
341
344
 
342
345
  this.addController(
343
346
  new MediaQueryController(this._desktopMediaQuery, (matches) => {
344
347
  this._desktopMode = matches;
345
- })
348
+ }),
346
349
  );
347
350
  }
348
351
 
@@ -381,7 +384,7 @@ class DatePickerOverlayContent extends ControllerMixin(ThemableMixin(DirMixin(Po
381
384
  _selectDate(dateToSelect) {
382
385
  this.selectedDate = dateToSelect;
383
386
  this.dispatchEvent(
384
- new CustomEvent('date-selected', { detail: { date: dateToSelect }, bubbles: true, composed: true })
387
+ new CustomEvent('date-selected', { detail: { date: dateToSelect }, bubbles: true, composed: true }),
385
388
  );
386
389
  }
387
390
 
@@ -409,7 +412,7 @@ class DatePickerOverlayContent extends ControllerMixin(ThemableMixin(DirMixin(Po
409
412
 
410
413
  const visibleArea = Math.max(
411
414
  this.$.monthScroller.itemHeight,
412
- this.$.monthScroller.clientHeight - this.$.monthScroller.bufferOffset * 2
415
+ this.$.monthScroller.clientHeight - this.$.monthScroller.bufferOffset * 2,
413
416
  );
414
417
  const visibleItems = visibleArea / this.$.monthScroller.itemHeight;
415
418
  const scrolledBelowViewport = this.$.monthScroller.position + visibleItems - 1 < diff;
@@ -541,7 +544,7 @@ class DatePickerOverlayContent extends ControllerMixin(ThemableMixin(DirMixin(Po
541
544
  currentTime,
542
545
  initialPosition,
543
546
  this._targetPosition - initialPosition,
544
- this.scrollDuration
547
+ this.scrollDuration,
545
548
  );
546
549
  this.$.monthScroller.position = currentPos;
547
550
  window.requestAnimationFrame(smoothScroll);
@@ -552,9 +555,9 @@ class DatePickerOverlayContent extends ControllerMixin(ThemableMixin(DirMixin(Po
552
555
  composed: true,
553
556
  detail: {
554
557
  position: this._targetPosition,
555
- oldPosition: initialPosition
556
- }
557
- })
558
+ oldPosition: initialPosition,
559
+ },
560
+ }),
558
561
  );
559
562
 
560
563
  this.$.monthScroller.position = this._targetPosition;
@@ -588,7 +591,7 @@ class DatePickerOverlayContent extends ControllerMixin(ThemableMixin(DirMixin(Po
588
591
  var newTranslateX = this._translateX + e.detail.ddx;
589
592
  this._translateX = this._limit(newTranslateX, {
590
593
  min: 0,
591
- max: this._yearScrollerWidth
594
+ max: this._yearScrollerWidth,
592
595
  });
593
596
  }
594
597
 
@@ -682,12 +685,6 @@ class DatePickerOverlayContent extends ControllerMixin(ThemableMixin(DirMixin(Po
682
685
  }
683
686
 
684
687
  _close() {
685
- const overlayContent = this.getRootNode().host;
686
- const overlay = overlayContent ? overlayContent.getRootNode().host : null;
687
- if (overlay) {
688
- overlay.opened = false;
689
- }
690
-
691
688
  this.dispatchEvent(new CustomEvent('close', { bubbles: true, composed: true }));
692
689
  }
693
690
 
@@ -754,10 +751,6 @@ class DatePickerOverlayContent extends ControllerMixin(ThemableMixin(DirMixin(Po
754
751
  this._moveFocusByMonths(event.shiftKey ? -12 : -1);
755
752
  handled = true;
756
753
  break;
757
- case 'Escape':
758
- this._cancel();
759
- handled = true;
760
- break;
761
754
  default:
762
755
  break;
763
756
  }
@@ -770,7 +763,10 @@ class DatePickerOverlayContent extends ControllerMixin(ThemableMixin(DirMixin(Po
770
763
 
771
764
  __onTodayButtonKeyDown(event) {
772
765
  if (this.hasAttribute('fullscreen')) {
773
- event.stopPropagation();
766
+ // Do not prevent closing on Esc
767
+ if (event.key !== 'Escape') {
768
+ event.stopPropagation();
769
+ }
774
770
  return;
775
771
  }
776
772
 
@@ -781,17 +777,14 @@ class DatePickerOverlayContent extends ControllerMixin(ThemableMixin(DirMixin(Po
781
777
  // We need to move the scroll to focused date.
782
778
  setTimeout(() => this.revealDate(this.focusedDate), 1);
783
779
  }
784
-
785
- if (event.key === 'Escape') {
786
- this._cancel();
787
- event.preventDefault();
788
- event.stopPropagation();
789
- }
790
780
  }
791
781
 
792
782
  __onCancelButtonKeyDown(event) {
793
783
  if (this.hasAttribute('fullscreen')) {
794
- event.stopPropagation();
784
+ // Do not prevent closing on Esc
785
+ if (event.key !== 'Escape') {
786
+ event.stopPropagation();
787
+ }
795
788
  return;
796
789
  }
797
790
 
@@ -801,12 +794,6 @@ class DatePickerOverlayContent extends ControllerMixin(ThemableMixin(DirMixin(Po
801
794
  event.stopPropagation();
802
795
  this.dispatchEvent(new CustomEvent('focus-input', { bubbles: true, composed: true }));
803
796
  }
804
-
805
- if (event.key === 'Escape') {
806
- this._cancel();
807
- event.preventDefault();
808
- event.stopPropagation();
809
- }
810
797
  }
811
798
 
812
799
  __tryFocusDate() {
@@ -10,7 +10,7 @@ import { registerStyles } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mi
10
10
  import { datePickerOverlayStyles } from './vaadin-date-picker-styles.js';
11
11
 
12
12
  registerStyles('vaadin-date-picker-overlay', datePickerOverlayStyles, {
13
- moduleId: 'vaadin-date-picker-overlay-styles'
13
+ moduleId: 'vaadin-date-picker-overlay-styles',
14
14
  });
15
15
 
16
16
  let memoizedTemplate;
@@ -138,13 +138,13 @@ declare class DatePicker extends DatePickerMixin(InputControlMixin(ThemableMixin
138
138
  addEventListener<K extends keyof DatePickerEventMap>(
139
139
  type: K,
140
140
  listener: (this: DatePicker, ev: DatePickerEventMap[K]) => void,
141
- options?: boolean | AddEventListenerOptions
141
+ options?: boolean | AddEventListenerOptions,
142
142
  ): void;
143
143
 
144
144
  removeEventListener<K extends keyof DatePickerEventMap>(
145
145
  type: K,
146
146
  listener: (this: DatePicker, ev: DatePickerEventMap[K]) => void,
147
- options?: boolean | EventListenerOptions
147
+ options?: boolean | EventListenerOptions,
148
148
  ): void;
149
149
  }
150
150
 
@@ -173,13 +173,10 @@ class DatePicker extends DatePickerMixin(InputControlMixin(ThemableMixin(Element
173
173
  fullscreen$="[[_fullscreen]]"
174
174
  label="[[label]]"
175
175
  selected-date="[[_selectedDate]]"
176
- slot="dropdown-content"
177
176
  focused-date="{{_focusedDate}}"
178
177
  show-week-numbers="[[showWeekNumbers]]"
179
178
  min-date="[[_minDate]]"
180
179
  max-date="[[_maxDate]]"
181
- role="dialog"
182
- on-date-tap="_close"
183
180
  part="overlay-content"
184
181
  theme$="[[__getOverlayTheme(theme, _overlayInitialized)]]"
185
182
  ></vaadin-date-picker-overlay-content>
@@ -207,7 +204,7 @@ class DatePicker extends DatePickerMixin(InputControlMixin(ThemableMixin(Element
207
204
  this._setFocusElement(input);
208
205
  this.stateTarget = input;
209
206
  this.ariaTarget = input;
210
- })
207
+ }),
211
208
  );
212
209
  this.addController(new LabelledInputController(this.inputElement, this._labelController));
213
210
 
@@ -215,6 +212,13 @@ class DatePicker extends DatePickerMixin(InputControlMixin(ThemableMixin(Element
215
212
  toggleButton.addEventListener('mousedown', (e) => e.preventDefault());
216
213
  }
217
214
 
215
+ /** @protected */
216
+ _initOverlay() {
217
+ super._initOverlay();
218
+
219
+ this.$.overlay.addEventListener('vaadin-overlay-close', this._onVaadinOverlayClose.bind(this));
220
+ }
221
+
218
222
  /** @private */
219
223
  _onVaadinOverlayClose(e) {
220
224
  if (this._openedWithFocusRing && this.hasAttribute('focused')) {
@@ -83,7 +83,7 @@ class InfiniteScroller extends PolymerElement {
83
83
  */
84
84
  bufferSize: {
85
85
  type: Number,
86
- value: 20
86
+ value: 20,
87
87
  },
88
88
 
89
89
  /**
@@ -91,14 +91,14 @@ class InfiniteScroller extends PolymerElement {
91
91
  * user to be able to scroll backwards.
92
92
  */
93
93
  _initialScroll: {
94
- value: 500000
94
+ value: 500000,
95
95
  },
96
96
 
97
97
  /**
98
98
  * The index/position mapped at _initialScroll point.
99
99
  */
100
100
  _initialIndex: {
101
- value: 0
101
+ value: 0,
102
102
  },
103
103
 
104
104
  _buffers: Array,
@@ -111,8 +111,8 @@ class InfiniteScroller extends PolymerElement {
111
111
 
112
112
  active: {
113
113
  type: Boolean,
114
- observer: '_activated'
115
- }
114
+ observer: '_activated',
115
+ },
116
116
  };
117
117
  }
118
118
 
@@ -133,7 +133,7 @@ class InfiniteScroller extends PolymerElement {
133
133
  });
134
134
  });
135
135
  }
136
- }
136
+ },
137
137
  });
138
138
 
139
139
  // Firefox interprets elements with overflow:auto as focusable
@@ -129,7 +129,7 @@ class MonthCalendar extends FocusMixin(ThemableMixin(PolymerElement)) {
129
129
  */
130
130
  month: {
131
131
  type: Date,
132
- value: new Date()
132
+ value: new Date(),
133
133
  },
134
134
 
135
135
  /**
@@ -137,7 +137,7 @@ class MonthCalendar extends FocusMixin(ThemableMixin(PolymerElement)) {
137
137
  */
138
138
  selectedDate: {
139
139
  type: Date,
140
- notify: true
140
+ notify: true,
141
141
  },
142
142
 
143
143
  /**
@@ -147,11 +147,11 @@ class MonthCalendar extends FocusMixin(ThemableMixin(PolymerElement)) {
147
147
 
148
148
  showWeekNumbers: {
149
149
  type: Boolean,
150
- value: false
150
+ value: false,
151
151
  },
152
152
 
153
153
  i18n: {
154
- type: Object
154
+ type: Object,
155
155
  },
156
156
 
157
157
  /**
@@ -166,7 +166,7 @@ class MonthCalendar extends FocusMixin(ThemableMixin(PolymerElement)) {
166
166
  */
167
167
  minDate: {
168
168
  type: Date,
169
- value: null
169
+ value: null,
170
170
  },
171
171
 
172
172
  /**
@@ -174,31 +174,31 @@ class MonthCalendar extends FocusMixin(ThemableMixin(PolymerElement)) {
174
174
  */
175
175
  maxDate: {
176
176
  type: Date,
177
- value: null
177
+ value: null,
178
178
  },
179
179
 
180
180
  _days: {
181
181
  type: Array,
182
- computed: '_getDays(month, i18n.firstDayOfWeek, minDate, maxDate)'
182
+ computed: '_getDays(month, i18n.firstDayOfWeek, minDate, maxDate)',
183
183
  },
184
184
 
185
185
  _weeks: {
186
186
  type: Array,
187
- computed: '_getWeeks(_days)'
187
+ computed: '_getWeeks(_days)',
188
188
  },
189
189
 
190
190
  disabled: {
191
191
  type: Boolean,
192
192
  reflectToAttribute: true,
193
- computed: '_isDisabled(month, minDate, maxDate)'
194
- }
193
+ computed: '_isDisabled(month, minDate, maxDate)',
194
+ },
195
195
  };
196
196
  }
197
197
 
198
198
  static get observers() {
199
199
  return [
200
200
  '_showWeekNumbersChanged(showWeekNumbers, i18n.firstDayOfWeek)',
201
- '__focusedDateChanged(focusedDate, _days)'
201
+ '__focusedDateChanged(focusedDate, _days)',
202
202
  ];
203
203
  }
204
204
 
@@ -279,7 +279,7 @@ class MonthCalendar extends FocusMixin(ThemableMixin(PolymerElement)) {
279
279
  weekDayNames = weekDayNames.map((day, index) => {
280
280
  return {
281
281
  weekDay: day,
282
- weekDayShort: weekDayNamesShort[index]
282
+ weekDayShort: weekDayNamesShort[index],
283
283
  };
284
284
  });
285
285
 
@@ -356,7 +356,7 @@ class MonthCalendar extends FocusMixin(ThemableMixin(PolymerElement)) {
356
356
  if (!this.ignoreTaps && !this._notTapping && e.target.date && !e.target.hasAttribute('disabled')) {
357
357
  this.selectedDate = e.target.date;
358
358
  this.dispatchEvent(
359
- new CustomEvent('date-tap', { detail: { date: e.target.date }, bubbles: true, composed: true })
359
+ new CustomEvent('date-tap', { detail: { date: e.target.date }, bubbles: true, composed: true }),
360
360
  );
361
361
  }
362
362
  }
@@ -211,5 +211,5 @@ registerStyles(
211
211
  }
212
212
  }
213
213
  `,
214
- { moduleId: 'lumo-date-picker-overlay-content' }
214
+ { moduleId: 'lumo-date-picker-overlay-content' },
215
215
  );
@@ -1,5 +1,6 @@
1
1
  import '@vaadin/vaadin-lumo-styles/sizing.js';
2
2
  import '@vaadin/vaadin-lumo-styles/spacing.js';
3
+ import '@vaadin/vaadin-overlay/theme/lumo/vaadin-overlay.js';
3
4
  import { menuOverlay } from '@vaadin/vaadin-lumo-styles/mixins/menu-overlay.js';
4
5
  import { css, registerStyles } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js';
5
6
 
@@ -54,5 +55,5 @@ const datePickerOverlay = css`
54
55
  `;
55
56
 
56
57
  registerStyles('vaadin-date-picker-overlay', [menuOverlay, datePickerOverlay], {
57
- moduleId: 'lumo-date-picker-overlay'
58
+ moduleId: 'lumo-date-picker-overlay',
58
59
  });
@@ -148,7 +148,7 @@ registerStyles(
148
148
  color: var(--lumo-disabled-text-color) !important;
149
149
  }
150
150
  `,
151
- { moduleId: 'lumo-month-calendar' }
151
+ { moduleId: 'lumo-month-calendar' },
152
152
  );
153
153
 
154
154
  const $_documentContainer = document.createElement('template');
@@ -172,5 +172,5 @@ registerStyles(
172
172
  margin: 0 4px;
173
173
  }
174
174
  `,
175
- { moduleId: 'material-date-picker-overlay-content' }
175
+ { moduleId: 'material-date-picker-overlay-content' },
176
176
  );
@@ -1,3 +1,4 @@
1
+ import '@vaadin/vaadin-overlay/theme/material/vaadin-overlay.js';
1
2
  import { overlay } from '@vaadin/vaadin-material-styles/mixins/overlay.js';
2
3
  import { css, registerStyles } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js';
3
4
 
@@ -41,5 +42,5 @@ const datePickerOverlay = css`
41
42
  `;
42
43
 
43
44
  registerStyles('vaadin-date-picker-overlay', [overlay, datePickerOverlay], {
44
- moduleId: 'material-date-picker-overlay'
45
+ moduleId: 'material-date-picker-overlay',
45
46
  });
@@ -116,5 +116,5 @@ registerStyles(
116
116
  opacity: 1;
117
117
  }
118
118
  `,
119
- { moduleId: 'material-date-picker-month-calendar' }
119
+ { moduleId: 'material-date-picker-month-calendar' },
120
120
  );