@vaadin/popover 24.6.4 → 24.6.6

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/popover",
3
- "version": "24.6.4",
3
+ "version": "24.6.6",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -37,18 +37,18 @@
37
37
  ],
38
38
  "dependencies": {
39
39
  "@open-wc/dedupe-mixin": "^1.3.0",
40
- "@vaadin/a11y-base": "~24.6.4",
41
- "@vaadin/component-base": "~24.6.4",
42
- "@vaadin/lit-renderer": "~24.6.4",
43
- "@vaadin/overlay": "~24.6.4",
44
- "@vaadin/vaadin-lumo-styles": "~24.6.4",
45
- "@vaadin/vaadin-material-styles": "~24.6.4",
46
- "@vaadin/vaadin-themable-mixin": "~24.6.4",
40
+ "@vaadin/a11y-base": "~24.6.6",
41
+ "@vaadin/component-base": "~24.6.6",
42
+ "@vaadin/lit-renderer": "~24.6.6",
43
+ "@vaadin/overlay": "~24.6.6",
44
+ "@vaadin/vaadin-lumo-styles": "~24.6.6",
45
+ "@vaadin/vaadin-material-styles": "~24.6.6",
46
+ "@vaadin/vaadin-themable-mixin": "~24.6.6",
47
47
  "lit": "^3.0.0"
48
48
  },
49
49
  "devDependencies": {
50
- "@vaadin/chai-plugins": "~24.6.4",
51
- "@vaadin/test-runner-commands": "~24.6.4",
50
+ "@vaadin/chai-plugins": "~24.6.6",
51
+ "@vaadin/test-runner-commands": "~24.6.6",
52
52
  "@vaadin/testing-helpers": "^1.1.0",
53
53
  "sinon": "^18.0.0"
54
54
  },
@@ -56,5 +56,5 @@
56
56
  "web-types.json",
57
57
  "web-types.lit.json"
58
58
  ],
59
- "gitHead": "02d8ac2c39bc2d27fe60acec7d7bac6bdb73d8a1"
59
+ "gitHead": "c29f1c07a7a34f0b2c5320c64e7bc66d8cbc0037"
60
60
  }
@@ -5,6 +5,26 @@
5
5
  */
6
6
  import { OverlayMixin } from '@vaadin/overlay/src/vaadin-overlay-mixin.js';
7
7
  import { PositionMixin } from '@vaadin/overlay/src/vaadin-overlay-position-mixin.js';
8
+ import { setNestedOverlay } from '@vaadin/overlay/src/vaadin-overlay-stack-mixin.js';
9
+
10
+ /**
11
+ * Returns the closest parent overlay for given node, if any.
12
+ * @param {HTMLElement} node
13
+ * @return {HTMLElement}
14
+ */
15
+ const getClosestOverlay = (node) => {
16
+ let n = node;
17
+
18
+ while (n && n !== node.ownerDocument) {
19
+ n = n.parentNode || n.host;
20
+
21
+ if (n && n._hasOverlayStackMixin) {
22
+ return n;
23
+ }
24
+ }
25
+
26
+ return null;
27
+ };
8
28
 
9
29
  /**
10
30
  * A mixin providing common popover overlay functionality.
@@ -24,6 +44,10 @@ export const PopoverOverlayMixin = (superClass) =>
24
44
  };
25
45
  }
26
46
 
47
+ static get observers() {
48
+ return ['__openedOrTargetChanged(opened, positionTarget)'];
49
+ }
50
+
27
51
  /**
28
52
  * Tag name prefix used by custom properties.
29
53
  * @protected
@@ -96,4 +120,14 @@ export const PopoverOverlayMixin = (superClass) =>
96
120
  this.style.top = `${overlayRect.top + offset}px`;
97
121
  }
98
122
  }
123
+
124
+ /** @private */
125
+ __openedOrTargetChanged(opened, target) {
126
+ if (target) {
127
+ const parent = getClosestOverlay(target);
128
+ if (parent) {
129
+ setNestedOverlay(parent, opened ? this : null);
130
+ }
131
+ }
132
+ }
99
133
  };
@@ -221,7 +221,8 @@ declare class Popover extends PopoverPositionMixin(
221
221
  * - outside click (unless `noCloseOnOutsideClick` property is true)
222
222
  *
223
223
  * When setting `trigger` property to `null`, `undefined` or empty array, the popover
224
- * can be only opened or closed programmatically by changing `opened` property.
224
+ * can be only opened programmatically by changing `opened` property. Note, closing
225
+ * on Escape press or outside click is still allowed unless explicitly disabled.
225
226
  */
226
227
  trigger: PopoverTrigger[] | null | undefined;
227
228
 
@@ -372,7 +372,8 @@ class Popover extends PopoverPositionMixin(
372
372
  * - outside click (unless `noCloseOnOutsideClick` property is true)
373
373
  *
374
374
  * When setting `trigger` property to `null`, `undefined` or empty array, the popover
375
- * can be only opened or closed programmatically by changing `opened` property.
375
+ * can be only opened programmatically by changing `opened` property. Note, closing
376
+ * on Escape press or outside click is still allowed unless explicitly disabled.
376
377
  */
377
378
  trigger: {
378
379
  type: Array,
@@ -408,8 +409,7 @@ class Popover extends PopoverPositionMixin(
408
409
  return [
409
410
  '__updateContentHeight(contentHeight, _overlayElement)',
410
411
  '__updateContentWidth(contentWidth, _overlayElement)',
411
- '__openedOrTargetChanged(opened, target)',
412
- '__overlayRoleOrTargetChanged(overlayRole, target)',
412
+ '__updateAriaAttributes(opened, overlayRole, target)',
413
413
  ];
414
414
  }
415
415
 
@@ -577,27 +577,27 @@ class Popover extends PopoverPositionMixin(
577
577
  }
578
578
 
579
579
  /** @private */
580
- __openedOrTargetChanged(opened, target) {
581
- if (target) {
582
- target.setAttribute('aria-expanded', opened ? 'true' : 'false');
583
-
584
- if (opened) {
585
- target.setAttribute('aria-controls', this.__overlayId);
586
- } else {
587
- target.removeAttribute('aria-controls');
588
- }
589
- }
590
- }
591
-
592
- /** @private */
593
- __overlayRoleOrTargetChanged(overlayRole, target) {
580
+ __updateAriaAttributes(opened, overlayRole, target) {
594
581
  if (this.__oldTarget) {
595
- this.__oldTarget.removeAttribute('aria-haspopup');
582
+ const oldEffectiveTarget = this.__oldTarget.ariaTarget || this.__oldTarget;
583
+ oldEffectiveTarget.removeAttribute('aria-haspopup');
584
+ oldEffectiveTarget.removeAttribute('aria-expanded');
585
+ oldEffectiveTarget.removeAttribute('aria-controls');
596
586
  }
597
587
 
598
588
  if (target) {
589
+ const effectiveTarget = target.ariaTarget || target;
590
+
599
591
  const isDialog = overlayRole === 'dialog' || overlayRole === 'alertdialog';
600
- target.setAttribute('aria-haspopup', isDialog ? 'dialog' : 'true');
592
+ effectiveTarget.setAttribute('aria-haspopup', isDialog ? 'dialog' : 'true');
593
+
594
+ effectiveTarget.setAttribute('aria-expanded', opened ? 'true' : 'false');
595
+
596
+ if (opened) {
597
+ effectiveTarget.setAttribute('aria-controls', this.__overlayId);
598
+ } else {
599
+ effectiveTarget.removeAttribute('aria-controls');
600
+ }
601
601
 
602
602
  this.__oldTarget = target;
603
603
  }
@@ -611,7 +611,6 @@ class Popover extends PopoverPositionMixin(
611
611
  __onGlobalClick(event) {
612
612
  if (
613
613
  this.opened &&
614
- !this.__isManual &&
615
614
  !this.modal &&
616
615
  !event.composedPath().some((el) => el === this._overlayElement || el === this.target) &&
617
616
  !this.noCloseOnOutsideClick &&
@@ -646,13 +645,7 @@ class Popover extends PopoverPositionMixin(
646
645
  return;
647
646
  }
648
647
 
649
- if (
650
- event.key === 'Escape' &&
651
- !this.noCloseOnEsc &&
652
- this.opened &&
653
- !this.__isManual &&
654
- isLastOverlay(this._overlayElement)
655
- ) {
648
+ if (event.key === 'Escape' && !this.noCloseOnEsc && this.opened && isLastOverlay(this._overlayElement)) {
656
649
  // Prevent closing parent overlay (e.g. dialog)
657
650
  event.stopPropagation();
658
651
  this._openedStateController.close(true);
@@ -673,7 +666,7 @@ class Popover extends PopoverPositionMixin(
673
666
  const overlayPart = this._overlayElement.$.overlay;
674
667
 
675
668
  // Move focus to the popover content on target element Tab
676
- if (this.target && isElementFocused(this.target)) {
669
+ if (this.target && isElementFocused(this.__getTargetFocusable())) {
677
670
  event.preventDefault();
678
671
  overlayPart.focus();
679
672
  return;
@@ -682,7 +675,7 @@ class Popover extends PopoverPositionMixin(
682
675
  // Move focus to the next element after target on content Tab
683
676
  const lastFocusable = this.__getLastFocusable(overlayPart);
684
677
  if (lastFocusable && isElementFocused(lastFocusable)) {
685
- const focusable = this.__getNextBodyFocusable(this.target);
678
+ const focusable = this.__getNextBodyFocusable(this.__getTargetFocusable());
686
679
  if (focusable && focusable !== overlayPart) {
687
680
  event.preventDefault();
688
681
  focusable.focus();
@@ -705,7 +698,7 @@ class Popover extends PopoverPositionMixin(
705
698
  const overlayPart = this._overlayElement.$.overlay;
706
699
 
707
700
  // Prevent restoring focus after target blur on Shift + Tab
708
- if (this.target && isElementFocused(this.target) && this.__shouldRestoreFocus) {
701
+ if (this.target && isElementFocused(this.__getTargetFocusable()) && this.__shouldRestoreFocus) {
709
702
  this.__shouldRestoreFocus = false;
710
703
  return;
711
704
  }
@@ -713,12 +706,12 @@ class Popover extends PopoverPositionMixin(
713
706
  // Move focus back to the target on overlay content Shift + Tab
714
707
  if (this.target && isElementFocused(overlayPart)) {
715
708
  event.preventDefault();
716
- this.target.focus();
709
+ this.__getTargetFocusable().focus();
717
710
  return;
718
711
  }
719
712
 
720
713
  // Move focus back to the popover on next element Shift + Tab
721
- const nextFocusable = this.__getNextBodyFocusable(this.target);
714
+ const nextFocusable = this.__getNextBodyFocusable(this.__getTargetFocusable());
722
715
  if (nextFocusable && isElementFocused(nextFocusable)) {
723
716
  const lastFocusable = this.__getLastFocusable(overlayPart);
724
717
  if (lastFocusable) {
@@ -741,6 +734,16 @@ class Popover extends PopoverPositionMixin(
741
734
  return focusables.pop();
742
735
  }
743
736
 
737
+ /** @private */
738
+ __getTargetFocusable() {
739
+ if (!this.target) {
740
+ return null;
741
+ }
742
+
743
+ // If target has `focusElement`, check if that one is focused.
744
+ return this.target.focusElement || this.target;
745
+ }
746
+
744
747
  /** @private */
745
748
  __onTargetFocusIn() {
746
749
  this.__focusInside = true;
@@ -766,7 +769,7 @@ class Popover extends PopoverPositionMixin(
766
769
  // Do not close the popover on overlay focusout if it's not the last one.
767
770
  // This covers the case when focus moves to the nested popover opened
768
771
  // without focusing parent popover overlay (e.g. using hover trigger).
769
- if (!isLastOverlay(this._overlayElement)) {
772
+ if (this._overlayElement.opened && !isLastOverlay(this._overlayElement)) {
770
773
  return;
771
774
  }
772
775
 
@@ -939,7 +942,7 @@ class Popover extends PopoverPositionMixin(
939
942
  * @private
940
943
  */
941
944
  __onEscapePress(e) {
942
- if (this.noCloseOnEsc || this.__isManual) {
945
+ if (this.noCloseOnEsc) {
943
946
  e.preventDefault();
944
947
  }
945
948
  }
@@ -949,7 +952,7 @@ class Popover extends PopoverPositionMixin(
949
952
  * @private
950
953
  */
951
954
  __onOutsideClick(e) {
952
- if (this.noCloseOnOutsideClick || this.__isManual) {
955
+ if (this.noCloseOnOutsideClick) {
953
956
  e.preventDefault();
954
957
  }
955
958
  }
@@ -959,11 +962,6 @@ class Popover extends PopoverPositionMixin(
959
962
  return Array.isArray(this.trigger) && this.trigger.includes(trigger);
960
963
  }
961
964
 
962
- /** @private */
963
- get __isManual() {
964
- return this.trigger == null || (Array.isArray(this.trigger) && this.trigger.length === 0);
965
- }
966
-
967
965
  /** @private */
968
966
  __updateDimension(overlay, dimension, value) {
969
967
  const prop = `--_vaadin-popover-content-${dimension}`;
package/web-types.json CHANGED
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/web-types",
3
3
  "name": "@vaadin/popover",
4
- "version": "24.6.4",
4
+ "version": "24.6.6",
5
5
  "description-markup": "markdown",
6
6
  "contributions": {
7
7
  "html": {
8
8
  "elements": [
9
9
  {
10
10
  "name": "vaadin-popover",
11
- "description": "`<vaadin-popover>` is a Web Component for creating overlays\nthat are positioned next to specified DOM element (target).\n\nUnlike `<vaadin-tooltip>`, the popover supports rich content\nthat can be provided by using `renderer` function.\n\n### Styling\n\n`<vaadin-popover>` uses `<vaadin-popover-overlay>` internal\nthemable component as the actual visible overlay.\n\nSee [`<vaadin-overlay>`](https://cdn.vaadin.com/vaadin-web-components/24.6.4/#/elements/vaadin-overlay) documentation\nfor `<vaadin-popover-overlay>` parts.\n\nIn addition to `<vaadin-overlay>` parts, the following parts are available for styling:\n\nPart name | Description\n-----------------|-------------------------------------------\n`arrow` | Optional arrow pointing to the target when using `theme=\"arrow\"`\n\nThe following state attributes are available for styling:\n\nAttribute | Description\n-----------------|----------------------------------------\n`position` | Reflects the `position` property value.\n\nNote: the `theme` attribute value set on `<vaadin-popover>` is\npropagated to the internal `<vaadin-popover-overlay>` component.\n\n### Custom CSS Properties\n\nThe following custom CSS properties are available on the `<vaadin-popover>` element:\n\nCustom CSS property | Description\n---------------------------------|-------------\n`--vaadin-popover-offset-top` | Used as an offset when the popover is aligned vertically below the target\n`--vaadin-popover-offset-bottom` | Used as an offset when the popover is aligned vertically above the target\n`--vaadin-popover-offset-start` | Used as an offset when the popover is aligned horizontally after the target\n`--vaadin-popover-offset-end` | Used as an offset when the popover is aligned horizontally before the target\n\nSee [Styling Components](https://vaadin.com/docs/latest/styling/styling-components) documentation.",
11
+ "description": "`<vaadin-popover>` is a Web Component for creating overlays\nthat are positioned next to specified DOM element (target).\n\nUnlike `<vaadin-tooltip>`, the popover supports rich content\nthat can be provided by using `renderer` function.\n\n### Styling\n\n`<vaadin-popover>` uses `<vaadin-popover-overlay>` internal\nthemable component as the actual visible overlay.\n\nSee [`<vaadin-overlay>`](https://cdn.vaadin.com/vaadin-web-components/24.6.6/#/elements/vaadin-overlay) documentation\nfor `<vaadin-popover-overlay>` parts.\n\nIn addition to `<vaadin-overlay>` parts, the following parts are available for styling:\n\nPart name | Description\n-----------------|-------------------------------------------\n`arrow` | Optional arrow pointing to the target when using `theme=\"arrow\"`\n\nThe following state attributes are available for styling:\n\nAttribute | Description\n-----------------|----------------------------------------\n`position` | Reflects the `position` property value.\n\nNote: the `theme` attribute value set on `<vaadin-popover>` is\npropagated to the internal `<vaadin-popover-overlay>` component.\n\n### Custom CSS Properties\n\nThe following custom CSS properties are available on the `<vaadin-popover>` element:\n\nCustom CSS property | Description\n---------------------------------|-------------\n`--vaadin-popover-offset-top` | Used as an offset when the popover is aligned vertically below the target\n`--vaadin-popover-offset-bottom` | Used as an offset when the popover is aligned vertically above the target\n`--vaadin-popover-offset-start` | Used as an offset when the popover is aligned horizontally after the target\n`--vaadin-popover-offset-end` | Used as an offset when the popover is aligned horizontally before the target\n\nSee [Styling Components](https://vaadin.com/docs/latest/styling/styling-components) documentation.",
12
12
  "attributes": [
13
13
  {
14
14
  "name": "overlay-class",
@@ -411,7 +411,7 @@
411
411
  },
412
412
  {
413
413
  "name": "trigger",
414
- "description": "Popover trigger mode, used to configure how the overlay is opened or closed.\nCould be set to multiple by providing an array, e.g. `trigger = ['hover', 'focus']`.\n\nSupported values:\n- `click` (default) - opens and closes on target click.\n- `hover` - opens on target mouseenter, closes on target mouseleave. Moving mouse\nto the popover overlay content keeps the overlay opened.\n- `focus` - opens on target focus, closes on target blur. Moving focus to the\npopover overlay content keeps the overlay opened.\n\nIn addition to the behavior specified by `trigger`, the popover can be closed by:\n- pressing Escape key (unless `noCloseOnEsc` property is true)\n- outside click (unless `noCloseOnOutsideClick` property is true)\n\nWhen setting `trigger` property to `null`, `undefined` or empty array, the popover\ncan be only opened or closed programmatically by changing `opened` property.",
414
+ "description": "Popover trigger mode, used to configure how the overlay is opened or closed.\nCould be set to multiple by providing an array, e.g. `trigger = ['hover', 'focus']`.\n\nSupported values:\n- `click` (default) - opens and closes on target click.\n- `hover` - opens on target mouseenter, closes on target mouseleave. Moving mouse\nto the popover overlay content keeps the overlay opened.\n- `focus` - opens on target focus, closes on target blur. Moving focus to the\npopover overlay content keeps the overlay opened.\n\nIn addition to the behavior specified by `trigger`, the popover can be closed by:\n- pressing Escape key (unless `noCloseOnEsc` property is true)\n- outside click (unless `noCloseOnOutsideClick` property is true)\n\nWhen setting `trigger` property to `null`, `undefined` or empty array, the popover\ncan be only opened programmatically by changing `opened` property. Note, closing\non Escape press or outside click is still allowed unless explicitly disabled.",
415
415
  "value": {
416
416
  "type": [
417
417
  "Array",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/web-types",
3
3
  "name": "@vaadin/popover",
4
- "version": "24.6.4",
4
+ "version": "24.6.6",
5
5
  "description-markup": "markdown",
6
6
  "framework": "lit",
7
7
  "framework-config": {
@@ -16,7 +16,7 @@
16
16
  "elements": [
17
17
  {
18
18
  "name": "vaadin-popover",
19
- "description": "`<vaadin-popover>` is a Web Component for creating overlays\nthat are positioned next to specified DOM element (target).\n\nUnlike `<vaadin-tooltip>`, the popover supports rich content\nthat can be provided by using `renderer` function.\n\n### Styling\n\n`<vaadin-popover>` uses `<vaadin-popover-overlay>` internal\nthemable component as the actual visible overlay.\n\nSee [`<vaadin-overlay>`](https://cdn.vaadin.com/vaadin-web-components/24.6.4/#/elements/vaadin-overlay) documentation\nfor `<vaadin-popover-overlay>` parts.\n\nIn addition to `<vaadin-overlay>` parts, the following parts are available for styling:\n\nPart name | Description\n-----------------|-------------------------------------------\n`arrow` | Optional arrow pointing to the target when using `theme=\"arrow\"`\n\nThe following state attributes are available for styling:\n\nAttribute | Description\n-----------------|----------------------------------------\n`position` | Reflects the `position` property value.\n\nNote: the `theme` attribute value set on `<vaadin-popover>` is\npropagated to the internal `<vaadin-popover-overlay>` component.\n\n### Custom CSS Properties\n\nThe following custom CSS properties are available on the `<vaadin-popover>` element:\n\nCustom CSS property | Description\n---------------------------------|-------------\n`--vaadin-popover-offset-top` | Used as an offset when the popover is aligned vertically below the target\n`--vaadin-popover-offset-bottom` | Used as an offset when the popover is aligned vertically above the target\n`--vaadin-popover-offset-start` | Used as an offset when the popover is aligned horizontally after the target\n`--vaadin-popover-offset-end` | Used as an offset when the popover is aligned horizontally before the target\n\nSee [Styling Components](https://vaadin.com/docs/latest/styling/styling-components) documentation.",
19
+ "description": "`<vaadin-popover>` is a Web Component for creating overlays\nthat are positioned next to specified DOM element (target).\n\nUnlike `<vaadin-tooltip>`, the popover supports rich content\nthat can be provided by using `renderer` function.\n\n### Styling\n\n`<vaadin-popover>` uses `<vaadin-popover-overlay>` internal\nthemable component as the actual visible overlay.\n\nSee [`<vaadin-overlay>`](https://cdn.vaadin.com/vaadin-web-components/24.6.6/#/elements/vaadin-overlay) documentation\nfor `<vaadin-popover-overlay>` parts.\n\nIn addition to `<vaadin-overlay>` parts, the following parts are available for styling:\n\nPart name | Description\n-----------------|-------------------------------------------\n`arrow` | Optional arrow pointing to the target when using `theme=\"arrow\"`\n\nThe following state attributes are available for styling:\n\nAttribute | Description\n-----------------|----------------------------------------\n`position` | Reflects the `position` property value.\n\nNote: the `theme` attribute value set on `<vaadin-popover>` is\npropagated to the internal `<vaadin-popover-overlay>` component.\n\n### Custom CSS Properties\n\nThe following custom CSS properties are available on the `<vaadin-popover>` element:\n\nCustom CSS property | Description\n---------------------------------|-------------\n`--vaadin-popover-offset-top` | Used as an offset when the popover is aligned vertically below the target\n`--vaadin-popover-offset-bottom` | Used as an offset when the popover is aligned vertically above the target\n`--vaadin-popover-offset-start` | Used as an offset when the popover is aligned horizontally after the target\n`--vaadin-popover-offset-end` | Used as an offset when the popover is aligned horizontally before the target\n\nSee [Styling Components](https://vaadin.com/docs/latest/styling/styling-components) documentation.",
20
20
  "extension": true,
21
21
  "attributes": [
22
22
  {
@@ -154,7 +154,7 @@
154
154
  },
155
155
  {
156
156
  "name": ".trigger",
157
- "description": "Popover trigger mode, used to configure how the overlay is opened or closed.\nCould be set to multiple by providing an array, e.g. `trigger = ['hover', 'focus']`.\n\nSupported values:\n- `click` (default) - opens and closes on target click.\n- `hover` - opens on target mouseenter, closes on target mouseleave. Moving mouse\nto the popover overlay content keeps the overlay opened.\n- `focus` - opens on target focus, closes on target blur. Moving focus to the\npopover overlay content keeps the overlay opened.\n\nIn addition to the behavior specified by `trigger`, the popover can be closed by:\n- pressing Escape key (unless `noCloseOnEsc` property is true)\n- outside click (unless `noCloseOnOutsideClick` property is true)\n\nWhen setting `trigger` property to `null`, `undefined` or empty array, the popover\ncan be only opened or closed programmatically by changing `opened` property.",
157
+ "description": "Popover trigger mode, used to configure how the overlay is opened or closed.\nCould be set to multiple by providing an array, e.g. `trigger = ['hover', 'focus']`.\n\nSupported values:\n- `click` (default) - opens and closes on target click.\n- `hover` - opens on target mouseenter, closes on target mouseleave. Moving mouse\nto the popover overlay content keeps the overlay opened.\n- `focus` - opens on target focus, closes on target blur. Moving focus to the\npopover overlay content keeps the overlay opened.\n\nIn addition to the behavior specified by `trigger`, the popover can be closed by:\n- pressing Escape key (unless `noCloseOnEsc` property is true)\n- outside click (unless `noCloseOnOutsideClick` property is true)\n\nWhen setting `trigger` property to `null`, `undefined` or empty array, the popover\ncan be only opened programmatically by changing `opened` property. Note, closing\non Escape press or outside click is still allowed unless explicitly disabled.",
158
158
  "value": {
159
159
  "kind": "expression"
160
160
  }