@vaadin/vaadin-overlay 23.0.10 → 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/vaadin-overlay",
3
- "version": "23.0.10",
3
+ "version": "23.0.11",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -35,20 +35,20 @@
35
35
  ],
36
36
  "dependencies": {
37
37
  "@polymer/polymer": "^3.0.0",
38
- "@vaadin/component-base": "^23.0.10",
39
- "@vaadin/vaadin-lumo-styles": "^23.0.10",
40
- "@vaadin/vaadin-material-styles": "^23.0.10",
41
- "@vaadin/vaadin-themable-mixin": "^23.0.10"
38
+ "@vaadin/component-base": "^23.0.11",
39
+ "@vaadin/vaadin-lumo-styles": "^23.0.11",
40
+ "@vaadin/vaadin-material-styles": "^23.0.11",
41
+ "@vaadin/vaadin-themable-mixin": "^23.0.11"
42
42
  },
43
43
  "devDependencies": {
44
44
  "@esm-bundle/chai": "^4.3.4",
45
45
  "@polymer/iron-overlay-behavior": "^3.0.0",
46
- "@vaadin/button": "^23.0.10",
47
- "@vaadin/radio-group": "^23.0.10",
46
+ "@vaadin/button": "^23.0.11",
47
+ "@vaadin/radio-group": "^23.0.11",
48
48
  "@vaadin/testing-helpers": "^0.3.2",
49
- "@vaadin/text-field": "^23.0.10",
49
+ "@vaadin/text-field": "^23.0.11",
50
50
  "lit": "^2.0.0",
51
51
  "sinon": "^9.2.1"
52
52
  },
53
- "gitHead": "e8402a55ce0e823ae6da5c97486998cfd931b1d3"
53
+ "gitHead": "10838304fe6f5c98b838ec3a90bdcf49cbf4650b"
54
54
  }
@@ -3,6 +3,7 @@
3
3
  * Copyright (c) 2017 - 2022 Vaadin Ltd.
4
4
  * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
5
  */
6
+ import { getAncestorRootNodes } from '@vaadin/component-base/src/dom-utils.js';
6
7
 
7
8
  const PROP_NAMES_VERTICAL = {
8
9
  start: 'top',
@@ -79,26 +80,61 @@ export const PositionMixin = (superClass) =>
79
80
 
80
81
  static get observers() {
81
82
  return [
82
- '__positionSettingsChanged(positionTarget, horizontalAlign, verticalAlign, noHorizontalOverlap, noVerticalOverlap)',
83
- '__overlayOpenedChanged(opened)',
83
+ '__positionSettingsChanged(horizontalAlign, verticalAlign, noHorizontalOverlap, noVerticalOverlap)',
84
+ '__overlayOpenedChanged(opened, positionTarget)',
84
85
  ];
85
86
  }
86
87
 
87
88
  constructor() {
88
89
  super();
89
90
 
90
- this.__boundUpdatePosition = this._updatePosition.bind(this);
91
+ this._updatePosition = this._updatePosition.bind(this);
91
92
  }
92
93
 
93
- __overlayOpenedChanged(opened) {
94
- // Toggle the event listeners that cause the overlay to update its position
95
- ['scroll', 'resize'].forEach((eventName) => {
96
- if (opened) {
97
- window.addEventListener(eventName, this.__boundUpdatePosition);
98
- } else {
99
- window.removeEventListener(eventName, this.__boundUpdatePosition);
100
- }
94
+ /** @protected */
95
+ connectedCallback() {
96
+ super.connectedCallback();
97
+
98
+ if (this.opened) {
99
+ this.__addUpdatePositionEventListeners();
100
+ }
101
+ }
102
+
103
+ /** @protected */
104
+ disconnectedCallback() {
105
+ super.disconnectedCallback();
106
+ this.__removeUpdatePositionEventListeners();
107
+ }
108
+
109
+ /** @private */
110
+ __addUpdatePositionEventListeners() {
111
+ window.addEventListener('resize', this._updatePosition);
112
+
113
+ this.__positionTargetAncestorRootNodes = getAncestorRootNodes(this.positionTarget);
114
+ this.__positionTargetAncestorRootNodes.forEach((node) => {
115
+ node.addEventListener('scroll', this._updatePosition, true);
101
116
  });
117
+ }
118
+
119
+ /** @private */
120
+ __removeUpdatePositionEventListeners() {
121
+ window.removeEventListener('resize', this._updatePosition);
122
+
123
+ if (this.__positionTargetAncestorRootNodes) {
124
+ this.__positionTargetAncestorRootNodes.forEach((node) => {
125
+ node.removeEventListener('scroll', this._updatePosition, true);
126
+ });
127
+ this.__positionTargetAncestorRootNodes = null;
128
+ }
129
+ }
130
+
131
+ /** @private */
132
+ __overlayOpenedChanged(opened, positionTarget) {
133
+ this.__removeUpdatePositionEventListeners();
134
+
135
+ if (opened && positionTarget) {
136
+ this.__addUpdatePositionEventListeners();
137
+ }
102
138
 
103
139
  if (opened) {
104
140
  const computedStyle = getComputedStyle(this);
@@ -515,6 +515,11 @@ class OverlayElement extends ThemableMixin(DirMixin(ControllerMixin(PolymerEleme
515
515
  return;
516
516
  }
517
517
 
518
+ // Only close modeless overlay on Esc press when it contains focus
519
+ if (this.modeless && !event.composedPath().includes(this.$.overlay)) {
520
+ return;
521
+ }
522
+
518
523
  if (event.key === 'Escape') {
519
524
  const evt = new CustomEvent('vaadin-overlay-escape-press', {
520
525
  bubbles: true,
@@ -559,14 +564,20 @@ class OverlayElement extends ThemableMixin(DirMixin(ControllerMixin(PolymerEleme
559
564
  this.dispatchEvent(evt);
560
565
  });
561
566
 
567
+ document.addEventListener('keydown', this._boundKeydownListener);
568
+
562
569
  if (!this.modeless) {
563
570
  this._addGlobalListeners();
564
571
  }
565
572
  } else if (wasOpened) {
566
- this.__focusTrapController.releaseFocus();
573
+ if (this.focusTrap) {
574
+ this.__focusTrapController.releaseFocus();
575
+ }
567
576
 
568
577
  this._animatedClosing();
569
578
 
579
+ document.removeEventListener('keydown', this._boundKeydownListener);
580
+
570
581
  if (!this.modeless) {
571
582
  this._removeGlobalListeners();
572
583
  }
@@ -753,7 +764,6 @@ class OverlayElement extends ThemableMixin(DirMixin(ControllerMixin(PolymerEleme
753
764
  // Firefox leaks click to document on contextmenu even if prevented
754
765
  // https://bugzilla.mozilla.org/show_bug.cgi?id=990614
755
766
  document.documentElement.addEventListener('click', this._boundOutsideClickListener, true);
756
- document.addEventListener('keydown', this._boundKeydownListener);
757
767
  }
758
768
 
759
769
  /** @protected */
@@ -778,7 +788,6 @@ class OverlayElement extends ThemableMixin(DirMixin(ControllerMixin(PolymerEleme
778
788
  document.removeEventListener('mousedown', this._boundMouseDownListener);
779
789
  document.removeEventListener('mouseup', this._boundMouseUpListener);
780
790
  document.documentElement.removeEventListener('click', this._boundOutsideClickListener, true);
781
- document.removeEventListener('keydown', this._boundKeydownListener);
782
791
  }
783
792
 
784
793
  /** @protected */