@elastic/eui 114.2.0 → 115.0.0

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.
Files changed (163) hide show
  1. package/es/components/basic_table/basic_table.js +3 -6
  2. package/es/components/basic_table/collapsed_item_actions.js +1 -3
  3. package/es/components/basic_table/default_item_action.js +0 -1
  4. package/es/components/basic_table/in_memory_table.js +3 -6
  5. package/es/components/color_picker/color_picker_swatch.js +1 -2
  6. package/es/components/datagrid/controls/display_selector.js +1 -2
  7. package/es/components/datagrid/controls/fullscreen_selector.js +1 -2
  8. package/es/components/datagrid/controls/keyboard_shortcuts.js +1 -2
  9. package/es/components/datagrid/utils/scrolling.js +7 -1
  10. package/es/components/filter_group/filter_select_item.js +36 -17
  11. package/es/components/flyout/flyout.component.js +8 -7
  12. package/es/components/flyout/hooks.js +11 -3
  13. package/es/components/flyout/manager/flyout_main.js +4 -2
  14. package/es/components/icon/assets/chart_pie.js +1 -2
  15. package/es/components/icon/assets/product_dashboard.js +5 -3
  16. package/es/components/key_pad_menu/key_pad_menu_item.js +1 -2
  17. package/es/components/list_group/list_group_item.js +1 -2
  18. package/es/components/markdown_editor/markdown_editor.js +1 -1
  19. package/es/components/markdown_editor/markdown_editor_drop_zone.js +6 -3
  20. package/es/components/markdown_editor/markdown_editor_footer.js +1 -1
  21. package/es/components/markdown_editor/markdown_editor_toolbar.js +14 -10
  22. package/es/components/portal/portal.js +72 -117
  23. package/es/components/search_bar/filters/field_value_toggle_group_filter.js +42 -91
  24. package/es/components/selectable/selectable_list/selectable_list_item.js +1 -1
  25. package/es/components/steps/step_horizontal.js +8 -5
  26. package/es/components/table/table_header_cell.js +1 -2
  27. package/es/components/tool_tip/icon_tip.js +4 -8
  28. package/es/components/tool_tip/tool_tip.js +233 -261
  29. package/es/components/tool_tip/tool_tip.styles.js +10 -18
  30. package/es/components/tool_tip/tool_tip_anchor.js +3 -3
  31. package/es/components/tool_tip/tool_tip_manager.js +1 -0
  32. package/es/components/tool_tip/tool_tip_popover.js +7 -7
  33. package/es/test/rtl/component_helpers.d.ts +0 -3
  34. package/es/test/rtl/component_helpers.js +40 -62
  35. package/eui.d.ts +29 -98
  36. package/lib/components/basic_table/basic_table.js +3 -6
  37. package/lib/components/basic_table/collapsed_item_actions.js +1 -3
  38. package/lib/components/basic_table/default_item_action.js +0 -1
  39. package/lib/components/basic_table/in_memory_table.js +3 -6
  40. package/lib/components/color_picker/color_picker_swatch.js +1 -2
  41. package/lib/components/datagrid/controls/display_selector.js +1 -2
  42. package/lib/components/datagrid/controls/fullscreen_selector.js +1 -2
  43. package/lib/components/datagrid/controls/keyboard_shortcuts.js +1 -2
  44. package/lib/components/datagrid/utils/scrolling.js +7 -1
  45. package/lib/components/filter_group/filter_select_item.js +35 -16
  46. package/lib/components/flyout/flyout.component.js +8 -7
  47. package/lib/components/flyout/hooks.js +10 -2
  48. package/lib/components/flyout/manager/flyout_main.js +3 -1
  49. package/lib/components/icon/assets/chart_pie.js +1 -2
  50. package/lib/components/icon/assets/product_dashboard.js +5 -3
  51. package/lib/components/icon/svgs/chart_pie.svg +1 -1
  52. package/lib/components/icon/svgs/product_dashboard.svg +4 -5
  53. package/lib/components/key_pad_menu/key_pad_menu_item.js +1 -2
  54. package/lib/components/list_group/list_group_item.js +1 -2
  55. package/lib/components/markdown_editor/markdown_editor.js +1 -1
  56. package/lib/components/markdown_editor/markdown_editor_drop_zone.js +6 -3
  57. package/lib/components/markdown_editor/markdown_editor_footer.js +1 -1
  58. package/lib/components/markdown_editor/markdown_editor_toolbar.js +12 -10
  59. package/lib/components/portal/portal.js +73 -118
  60. package/lib/components/search_bar/filters/field_value_toggle_group_filter.js +44 -93
  61. package/lib/components/selectable/selectable_list/selectable_list_item.js +1 -1
  62. package/lib/components/steps/step_horizontal.js +8 -5
  63. package/lib/components/table/table_header_cell.js +1 -2
  64. package/lib/components/tool_tip/icon_tip.js +4 -8
  65. package/lib/components/tool_tip/tool_tip.js +240 -266
  66. package/lib/components/tool_tip/tool_tip.styles.js +8 -16
  67. package/lib/components/tool_tip/tool_tip_anchor.js +2 -2
  68. package/lib/components/tool_tip/tool_tip_manager.js +1 -0
  69. package/lib/components/tool_tip/tool_tip_popover.js +6 -6
  70. package/lib/test/rtl/component_helpers.d.ts +0 -3
  71. package/lib/test/rtl/component_helpers.js +41 -63
  72. package/optimize/es/components/basic_table/collapsed_item_actions.js +1 -3
  73. package/optimize/es/components/basic_table/default_item_action.js +0 -1
  74. package/optimize/es/components/datagrid/controls/display_selector.js +1 -2
  75. package/optimize/es/components/datagrid/controls/fullscreen_selector.js +1 -2
  76. package/optimize/es/components/datagrid/controls/keyboard_shortcuts.js +1 -2
  77. package/optimize/es/components/datagrid/utils/scrolling.js +7 -1
  78. package/optimize/es/components/filter_group/filter_select_item.js +36 -17
  79. package/optimize/es/components/flyout/flyout.component.js +8 -7
  80. package/optimize/es/components/flyout/hooks.js +11 -3
  81. package/optimize/es/components/flyout/manager/flyout_main.js +4 -2
  82. package/optimize/es/components/icon/assets/chart_pie.js +1 -2
  83. package/optimize/es/components/icon/assets/product_dashboard.js +5 -3
  84. package/optimize/es/components/key_pad_menu/key_pad_menu_item.js +1 -2
  85. package/optimize/es/components/list_group/list_group_item.js +1 -2
  86. package/optimize/es/components/markdown_editor/markdown_editor_drop_zone.js +5 -2
  87. package/optimize/es/components/markdown_editor/markdown_editor_toolbar.js +13 -9
  88. package/optimize/es/components/portal/portal.js +65 -91
  89. package/optimize/es/components/search_bar/filters/field_value_toggle_group_filter.js +43 -66
  90. package/optimize/es/components/selectable/selectable_list/selectable_list_item.js +1 -1
  91. package/optimize/es/components/steps/step_horizontal.js +8 -5
  92. package/optimize/es/components/tool_tip/icon_tip.js +3 -5
  93. package/optimize/es/components/tool_tip/tool_tip.js +227 -250
  94. package/optimize/es/components/tool_tip/tool_tip.styles.js +10 -18
  95. package/optimize/es/components/tool_tip/tool_tip_anchor.js +3 -3
  96. package/optimize/es/components/tool_tip/tool_tip_manager.js +1 -0
  97. package/optimize/es/components/tool_tip/tool_tip_popover.js +7 -7
  98. package/optimize/es/test/rtl/component_helpers.d.ts +0 -3
  99. package/optimize/es/test/rtl/component_helpers.js +40 -62
  100. package/optimize/lib/components/basic_table/collapsed_item_actions.js +1 -3
  101. package/optimize/lib/components/basic_table/default_item_action.js +0 -1
  102. package/optimize/lib/components/datagrid/controls/display_selector.js +1 -2
  103. package/optimize/lib/components/datagrid/controls/fullscreen_selector.js +1 -2
  104. package/optimize/lib/components/datagrid/controls/keyboard_shortcuts.js +1 -2
  105. package/optimize/lib/components/datagrid/utils/scrolling.js +7 -1
  106. package/optimize/lib/components/filter_group/filter_select_item.js +35 -16
  107. package/optimize/lib/components/flyout/flyout.component.js +8 -7
  108. package/optimize/lib/components/flyout/hooks.js +10 -2
  109. package/optimize/lib/components/flyout/manager/flyout_main.js +3 -1
  110. package/optimize/lib/components/icon/assets/chart_pie.js +1 -2
  111. package/optimize/lib/components/icon/assets/product_dashboard.js +5 -3
  112. package/optimize/lib/components/icon/svgs/chart_pie.svg +1 -1
  113. package/optimize/lib/components/icon/svgs/product_dashboard.svg +4 -5
  114. package/optimize/lib/components/key_pad_menu/key_pad_menu_item.js +1 -2
  115. package/optimize/lib/components/list_group/list_group_item.js +1 -2
  116. package/optimize/lib/components/markdown_editor/markdown_editor_drop_zone.js +5 -2
  117. package/optimize/lib/components/markdown_editor/markdown_editor_toolbar.js +13 -9
  118. package/optimize/lib/components/portal/portal.js +68 -93
  119. package/optimize/lib/components/search_bar/filters/field_value_toggle_group_filter.js +45 -69
  120. package/optimize/lib/components/selectable/selectable_list/selectable_list_item.js +1 -1
  121. package/optimize/lib/components/steps/step_horizontal.js +8 -5
  122. package/optimize/lib/components/tool_tip/icon_tip.js +3 -5
  123. package/optimize/lib/components/tool_tip/tool_tip.js +229 -251
  124. package/optimize/lib/components/tool_tip/tool_tip.styles.js +8 -16
  125. package/optimize/lib/components/tool_tip/tool_tip_anchor.js +2 -2
  126. package/optimize/lib/components/tool_tip/tool_tip_manager.js +1 -0
  127. package/optimize/lib/components/tool_tip/tool_tip_popover.js +6 -6
  128. package/optimize/lib/test/rtl/component_helpers.d.ts +0 -3
  129. package/optimize/lib/test/rtl/component_helpers.js +41 -63
  130. package/package.json +2 -10
  131. package/test-env/components/basic_table/basic_table.js +3 -6
  132. package/test-env/components/basic_table/collapsed_item_actions.js +1 -3
  133. package/test-env/components/basic_table/default_item_action.js +0 -1
  134. package/test-env/components/basic_table/in_memory_table.js +3 -6
  135. package/test-env/components/color_picker/color_picker_swatch.js +1 -2
  136. package/test-env/components/datagrid/controls/display_selector.js +1 -2
  137. package/test-env/components/datagrid/controls/fullscreen_selector.js +1 -2
  138. package/test-env/components/datagrid/controls/keyboard_shortcuts.js +1 -2
  139. package/test-env/components/datagrid/utils/scrolling.js +7 -1
  140. package/test-env/components/filter_group/filter_select_item.js +35 -16
  141. package/test-env/components/flyout/flyout.component.js +8 -7
  142. package/test-env/components/flyout/hooks.js +10 -2
  143. package/test-env/components/flyout/manager/flyout_main.js +3 -1
  144. package/test-env/components/icon/assets/chart_pie.js +1 -2
  145. package/test-env/components/icon/assets/product_dashboard.js +5 -3
  146. package/test-env/components/key_pad_menu/key_pad_menu_item.js +1 -2
  147. package/test-env/components/list_group/list_group_item.js +1 -2
  148. package/test-env/components/markdown_editor/markdown_editor.js +1 -1
  149. package/test-env/components/markdown_editor/markdown_editor_drop_zone.js +6 -3
  150. package/test-env/components/markdown_editor/markdown_editor_footer.js +1 -1
  151. package/test-env/components/markdown_editor/markdown_editor_toolbar.js +14 -10
  152. package/test-env/components/portal/portal.js +70 -113
  153. package/test-env/components/search_bar/filters/field_value_toggle_group_filter.js +44 -88
  154. package/test-env/components/selectable/selectable_list/selectable_list_item.js +1 -1
  155. package/test-env/components/steps/step_horizontal.js +8 -5
  156. package/test-env/components/table/table_header_cell.js +1 -2
  157. package/test-env/components/tool_tip/icon_tip.js +4 -8
  158. package/test-env/components/tool_tip/tool_tip.js +230 -256
  159. package/test-env/components/tool_tip/tool_tip.styles.js +8 -16
  160. package/test-env/components/tool_tip/tool_tip_anchor.js +2 -2
  161. package/test-env/components/tool_tip/tool_tip_manager.js +1 -0
  162. package/test-env/components/tool_tip/tool_tip_popover.js +6 -6
  163. package/test-env/test/rtl/component_helpers.js +41 -63
@@ -7,19 +7,13 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports.POSITIONS = exports.EuiToolTip = exports.DEFAULT_TOOLTIP_OFFSET = void 0;
9
9
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
10
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
10
11
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
11
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
12
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
13
- var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
14
- var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
15
- var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
16
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
17
12
  var _react = _interopRequireWildcard(require("react"));
18
13
  var _propTypes = _interopRequireDefault(require("prop-types"));
19
14
  var _classnames = _interopRequireDefault(require("classnames"));
20
15
  var _services = require("../../services");
21
16
  var _reposition_on_scroll = require("../../services/popover/reposition_on_scroll");
22
- var _react2 = require("../../services/react");
23
17
  var _resize_observer = require("../observer/resize_observer");
24
18
  var _portal = require("../portal");
25
19
  var _component_defaults = require("../provider/component_defaults");
@@ -27,24 +21,31 @@ var _tool_tip_popover = require("./tool_tip_popover");
27
21
  var _tool_tip_anchor = require("./tool_tip_anchor");
28
22
  var _tool_tip_arrow = require("./tool_tip_arrow");
29
23
  var _tool_tip_manager = require("./tool_tip_manager");
30
- var _react3 = require("@emotion/react");
31
- var _excluded = ["children", "className", "anchorClassName", "anchorProps", "content", "title", "delay", "display", "repositionOnScroll", "disableScreenReaderOutput"];
32
- function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
33
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
34
- function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2.default)(o), (0, _possibleConstructorReturn2.default)(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2.default)(t).constructor) : o.apply(t, e)); }
35
- function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } /*
24
+ var _react2 = require("@emotion/react");
25
+ var _excluded = ["children", "className", "anchorClassName", "anchorProps", "content", "title", "display", "repositionOnScroll", "disableScreenReaderOutput", "position", "offset", "id", "onMouseOut"];
26
+ /*
36
27
  * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
37
28
  * or more contributor license agreements. Licensed under the Elastic License
38
29
  * 2.0 and the Server Side Public License, v 1; you may not use this file except
39
30
  * in compliance with, at your election, the Elastic License 2.0 or the Server
40
31
  * Side Public License, v 1.
41
32
  */
33
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
34
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
42
35
  var POSITIONS = exports.POSITIONS = ['top', 'right', 'bottom', 'left'];
43
36
  var DISPLAYS = ['inlineBlock', 'block'];
44
37
  var DEFAULT_TOOLTIP_OFFSET = exports.DEFAULT_TOOLTIP_OFFSET = 16;
45
- var delayToMsMap = {
46
- regular: 250,
47
- long: 250 * 5
38
+
39
+ /**
40
+ * `:focus-visible` may throw in browsers that don't support the selector,
41
+ * fall back to treating all focus as visible so tooltips still appear.
42
+ */
43
+ var isFocusVisible = function isFocusVisible(element) {
44
+ try {
45
+ return element.matches(':focus-visible');
46
+ } catch (_unused) {
47
+ return element.matches(':focus');
48
+ }
48
49
  };
49
50
  var DEFAULT_TOOLTIP_STYLES = {
50
51
  // position the tooltip content near the top-left
@@ -58,251 +59,227 @@ var DEFAULT_TOOLTIP_STYLES = {
58
59
  // prevent accidental mouse interaction while positioning
59
60
  visibility: 'hidden'
60
61
  };
61
- var EuiToolTip = exports.EuiToolTip = /*#__PURE__*/function (_Component) {
62
- function EuiToolTip(props) {
63
- var _this;
64
- (0, _classCallCheck2.default)(this, EuiToolTip);
65
- _this = _callSuper(this, EuiToolTip, [props]);
66
- (0, _defineProperty2.default)(_this, "repositionOnScroll", void 0);
67
- (0, _defineProperty2.default)(_this, "_isMounted", false);
68
- (0, _defineProperty2.default)(_this, "anchor", null);
69
- (0, _defineProperty2.default)(_this, "popover", null);
70
- (0, _defineProperty2.default)(_this, "timeoutId", void 0);
71
- (0, _defineProperty2.default)(_this, "clearAnimationTimeout", function () {
72
- if (_this.timeoutId) {
73
- _this.timeoutId = clearTimeout(_this.timeoutId);
74
- }
75
- });
76
- (0, _defineProperty2.default)(_this, "testAnchor", function () {
77
- // when the tooltip is visible, this checks if the anchor is still part of document
78
- // this fixes when the react root is removed from the dom without unmounting
79
- // https://github.com/elastic/eui/issues/1105
80
- if (document.body.contains(_this.anchor) === false) {
62
+ var EuiToolTip = exports.EuiToolTip = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
63
+ var children = _ref.children,
64
+ className = _ref.className,
65
+ anchorClassName = _ref.anchorClassName,
66
+ anchorProps = _ref.anchorProps,
67
+ content = _ref.content,
68
+ title = _ref.title,
69
+ _ref$display = _ref.display,
70
+ display = _ref$display === void 0 ? 'inlineBlock' : _ref$display,
71
+ repositionOnScroll = _ref.repositionOnScroll,
72
+ _ref$disableScreenRea = _ref.disableScreenReaderOutput,
73
+ disableScreenReaderOutput = _ref$disableScreenRea === void 0 ? false : _ref$disableScreenRea,
74
+ _ref$position = _ref.position,
75
+ positionProp = _ref$position === void 0 ? 'top' : _ref$position,
76
+ offset = _ref.offset,
77
+ idProp = _ref.id,
78
+ onMouseOutProp = _ref.onMouseOut,
79
+ rest = (0, _objectWithoutProperties2.default)(_ref, _excluded);
80
+ var componentDefaultsContext = (0, _react.useContext)(_component_defaults.EuiComponentDefaultsContext);
81
+ var _useState = (0, _react.useState)(false),
82
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
83
+ visible = _useState2[0],
84
+ setVisible = _useState2[1];
85
+ var _useState3 = (0, _react.useState)(false),
86
+ _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
87
+ hasFocus = _useState4[0],
88
+ setHasFocus = _useState4[1];
89
+ var _useState5 = (0, _react.useState)(positionProp),
90
+ _useState6 = (0, _slicedToArray2.default)(_useState5, 2),
91
+ calculatedPosition = _useState6[0],
92
+ setCalculatedPosition = _useState6[1];
93
+ var _useState7 = (0, _react.useState)(DEFAULT_TOOLTIP_STYLES),
94
+ _useState8 = (0, _slicedToArray2.default)(_useState7, 2),
95
+ toolTipStyles = _useState8[0],
96
+ setToolTipStyles = _useState8[1];
97
+ var _useState9 = (0, _react.useState)(undefined),
98
+ _useState10 = (0, _slicedToArray2.default)(_useState9, 2),
99
+ arrowStyles = _useState10[0],
100
+ setArrowStyles = _useState10[1];
101
+ var generatedId = (0, _react.useRef)((0, _services.htmlIdGenerator)()());
102
+ var id = idProp !== null && idProp !== void 0 ? idProp : generatedId.current;
103
+ var anchorRef = (0, _react.useRef)(null);
104
+ var popoverRef = (0, _react.useRef)(null);
105
+ var positionToolTip = (0, _react.useCallback)(function () {
106
+ if (!anchorRef.current || !popoverRef.current) {
107
+ return;
108
+ }
109
+ var _findPopoverPosition = (0, _services.findPopoverPosition)({
110
+ anchor: anchorRef.current,
111
+ popover: popoverRef.current,
112
+ position: positionProp,
113
+ offset: offset !== null && offset !== void 0 ? offset : DEFAULT_TOOLTIP_OFFSET,
114
+ arrowConfig: {
115
+ arrowWidth: 12,
116
+ arrowBuffer: 4
117
+ }
118
+ }),
119
+ position = _findPopoverPosition.position,
120
+ left = _findPopoverPosition.left,
121
+ top = _findPopoverPosition.top,
122
+ arrow = _findPopoverPosition.arrow;
123
+
124
+ // If encroaching the right edge of the window:
125
+ // When `props.content` changes and is longer than `prevProps.content`, the tooltip width remains and
126
+ // the resizeObserver callback will fire twice (once for vertical resize caused by text line wrapping,
127
+ // once for a subsequent position correction) and cause a flash rerender and reposition.
128
+ // To prevent this, we can orient from the right so that text line wrapping does not occur, negating
129
+ // the second resizeObserver callback call.
130
+ var windowWidth = document.documentElement.clientWidth || window.innerWidth;
131
+ var useRightValue = windowWidth / 2 < left;
132
+ var newToolTipStyles = {
133
+ top: top,
134
+ left: useRightValue ? 'auto' : left,
135
+ right: useRightValue ? windowWidth - left - popoverRef.current.offsetWidth : 'auto'
136
+ };
137
+ setCalculatedPosition(position);
138
+ setToolTipStyles(newToolTipStyles);
139
+ setArrowStyles(arrow);
140
+ }, [positionProp, offset]);
141
+ var setAnchorRef = (0, _react.useCallback)(function (el) {
142
+ anchorRef.current = el;
143
+ }, []);
144
+ var setPopoverRef = (0, _react.useCallback)(function (el) {
145
+ popoverRef.current = el;
146
+ if (el) positionToolTip();
147
+ }, [positionToolTip]);
148
+ var hideToolTip = (0, _react.useCallback)(function () {
149
+ setVisible(false);
150
+ setToolTipStyles(DEFAULT_TOOLTIP_STYLES);
151
+ setArrowStyles(undefined);
152
+ _tool_tip_manager.toolTipManager.deregisterToolTip(hideToolTip);
153
+ }, []);
154
+ var showToolTip = (0, _react.useCallback)(function () {
155
+ if (!content && !title) return;
156
+ setVisible(true);
157
+ _tool_tip_manager.toolTipManager.registerTooltip(hideToolTip);
158
+ }, [content, title, hideToolTip]);
159
+ (0, _react.useImperativeHandle)(ref, function () {
160
+ return {
161
+ showToolTip: showToolTip,
162
+ hideToolTip: hideToolTip,
163
+ id: id
164
+ };
165
+ }, [showToolTip, hideToolTip, id]);
166
+
167
+ // If the anchor already has focus on mount (e.g. `autoFocus`), show the tooltip.
168
+ // Important for StrictMode double-mount.
169
+ (0, _react.useEffect)(function () {
170
+ var _anchorRef$current;
171
+ if ((_anchorRef$current = anchorRef.current) !== null && _anchorRef$current !== void 0 && _anchorRef$current.contains(document.activeElement) && document.activeElement != null && isFocusVisible(document.activeElement)) {
172
+ setHasFocus(true);
173
+ showToolTip();
174
+ }
175
+ }, [showToolTip]);
176
+ (0, _react.useEffect)(function () {
177
+ return function () {
178
+ _tool_tip_manager.toolTipManager.deregisterToolTip(hideToolTip);
179
+ };
180
+ }, [hideToolTip]);
181
+
182
+ // When the tooltip is visible, this checks if the anchor is still part of document.
183
+ // This fixes when the react root is removed from the DOM without unmounting
184
+ // See: https://github.com/elastic/eui/issues/1105
185
+ (0, _react.useEffect)(function () {
186
+ if (!visible) return;
187
+ var rafId;
188
+ var testAnchor = function testAnchor() {
189
+ if (document.body.contains(anchorRef.current) === false) {
81
190
  // the anchor is no longer part of `document`
82
- _this.hideToolTip();
191
+ hideToolTip();
83
192
  } else {
84
- if (_this.state.visible) {
85
- // if still visible, keep checking
86
- requestAnimationFrame(_this.testAnchor);
87
- }
88
- }
89
- });
90
- (0, _defineProperty2.default)(_this, "setAnchorRef", function (ref) {
91
- return _this.anchor = ref;
92
- });
93
- (0, _defineProperty2.default)(_this, "setPopoverRef", function (ref) {
94
- return _this.popover = ref;
95
- });
96
- (0, _defineProperty2.default)(_this, "showToolTip", function () {
97
- if (!_this.timeoutId) {
98
- _this.timeoutId = setTimeout(function () {
99
- (0, _react2.enqueueStateChange)(function () {
100
- _this.setState({
101
- visible: true
102
- });
103
- _tool_tip_manager.toolTipManager.registerTooltip(_this.hideToolTip);
104
- });
105
- }, delayToMsMap[_this.props.delay]);
193
+ rafId = requestAnimationFrame(testAnchor);
106
194
  }
107
- });
108
- (0, _defineProperty2.default)(_this, "positionToolTip", function () {
109
- var _this$props$offset;
110
- var requestedPosition = _this.props.position;
111
- var offset = (_this$props$offset = _this.props.offset) !== null && _this$props$offset !== void 0 ? _this$props$offset : DEFAULT_TOOLTIP_OFFSET;
112
- if (!_this.anchor || !_this.popover) {
113
- return;
114
- }
115
- var _findPopoverPosition = (0, _services.findPopoverPosition)({
116
- anchor: _this.anchor,
117
- popover: _this.popover,
118
- position: requestedPosition,
119
- offset: offset,
120
- arrowConfig: {
121
- arrowWidth: 12,
122
- arrowBuffer: 4
123
- }
124
- }),
125
- position = _findPopoverPosition.position,
126
- left = _findPopoverPosition.left,
127
- top = _findPopoverPosition.top,
128
- arrow = _findPopoverPosition.arrow;
195
+ };
196
+ rafId = requestAnimationFrame(testAnchor);
197
+ return function () {
198
+ cancelAnimationFrame(rafId);
199
+ };
200
+ }, [visible, hideToolTip]);
129
201
 
130
- // If encroaching the right edge of the window:
131
- // When `props.content` changes and is longer than `prevProps.content`, the tooltip width remains and
132
- // the resizeObserver callback will fire twice (once for vertical resize caused by text line wrapping,
133
- // once for a subsequent position correction) and cause a flash rerender and reposition.
134
- // To prevent this, we can orient from the right so that text line wrapping does not occur, negating
135
- // the second resizeObserver callback call.
136
- var windowWidth = document.documentElement.clientWidth || window.innerWidth;
137
- var useRightValue = windowWidth / 2 < left;
138
- var toolTipStyles = {
139
- top: top,
140
- left: useRightValue ? 'auto' : left,
141
- right: useRightValue ? windowWidth - left - _this.popover.offsetWidth : 'auto'
142
- };
143
- _this.setState({
144
- visible: true,
145
- calculatedPosition: position,
146
- toolTipStyles: toolTipStyles,
147
- arrowStyles: arrow
148
- });
149
- });
150
- (0, _defineProperty2.default)(_this, "hideToolTip", function () {
151
- _this.clearAnimationTimeout();
152
- (0, _react2.enqueueStateChange)(function () {
153
- if (_this._isMounted) {
154
- _this.setState({
155
- visible: false,
156
- toolTipStyles: DEFAULT_TOOLTIP_STYLES,
157
- arrowStyles: undefined
158
- });
159
- _tool_tip_manager.toolTipManager.deregisterToolTip(_this.hideToolTip);
160
- }
161
- });
202
+ // update scroll listener
203
+ (0, _react.useEffect)(function () {
204
+ var shouldReposition = (0, _reposition_on_scroll.getRepositionOnScroll)({
205
+ repositionOnScroll: repositionOnScroll,
206
+ repositionFn: positionToolTip,
207
+ componentDefaults: componentDefaultsContext.EuiToolTip
162
208
  });
163
- (0, _defineProperty2.default)(_this, "onFocus", function () {
164
- _this.setState({
165
- hasFocus: true
166
- });
167
- _this.showToolTip();
168
- });
169
- (0, _defineProperty2.default)(_this, "onBlur", function () {
170
- _this.setState({
171
- hasFocus: false
172
- });
173
- _this.hideToolTip();
174
- });
175
- (0, _defineProperty2.default)(_this, "onEscapeKey", function (event) {
176
- if (event.key === _services.keys.ESCAPE) {
177
- // when the tooltip is only visual, we don't want it to add an additional key stop
178
- if (!_this.props.disableScreenReaderOutput) {
179
- if (_this.state.visible) event.stopPropagation();
180
- }
181
- _this.setState({
182
- hasFocus: false
183
- }); // Allows mousing over back into the tooltip to work correctly
184
- _this.hideToolTip();
185
- }
186
- });
187
- (0, _defineProperty2.default)(_this, "onMouseOut", function (event) {
188
- // Prevent mousing over children from hiding the tooltip by testing for whether the mouse has
189
- // left the anchor for a non-child.
190
- if (_this.anchor === event.relatedTarget || _this.anchor != null && !_this.anchor.contains(event.relatedTarget)) {
191
- if (!_this.state.hasFocus) {
192
- _this.hideToolTip();
193
- }
194
- }
195
- if (_this.props.onMouseOut) {
196
- _this.props.onMouseOut(event);
197
- }
198
- });
199
- _this.state = {
200
- visible: false,
201
- hasFocus: false,
202
- calculatedPosition: _this.props.position,
203
- toolTipStyles: DEFAULT_TOOLTIP_STYLES,
204
- arrowStyles: undefined,
205
- id: _this.props.id || (0, _services.htmlIdGenerator)()()
209
+ if (shouldReposition) {
210
+ window.addEventListener('scroll', positionToolTip, true);
211
+ }
212
+ return function () {
213
+ window.removeEventListener('scroll', positionToolTip, true);
206
214
  };
207
- _this.repositionOnScroll = (0, _reposition_on_scroll.createRepositionOnScroll)(function () {
208
- return {
209
- repositionOnScroll: _this.props.repositionOnScroll,
210
- componentDefaults: _this.context.EuiToolTip,
211
- repositionFn: _this.positionToolTip
212
- };
213
- });
214
- return _this;
215
- }
216
- (0, _inherits2.default)(EuiToolTip, _Component);
217
- return (0, _createClass2.default)(EuiToolTip, [{
218
- key: "componentDidMount",
219
- value: function componentDidMount() {
220
- this._isMounted = true;
221
- this.repositionOnScroll.subscribe();
215
+ }, [repositionOnScroll, positionToolTip, componentDefaultsContext.EuiToolTip]);
216
+ var onFocus = (0, _react.useCallback)(function (e) {
217
+ if (isFocusVisible(e.target)) {
218
+ setHasFocus(true);
219
+ showToolTip();
222
220
  }
223
- }, {
224
- key: "componentWillUnmount",
225
- value: function componentWillUnmount() {
226
- this.clearAnimationTimeout();
227
- this._isMounted = false;
228
- this.repositionOnScroll.cleanup();
221
+ }, [showToolTip]);
222
+ var onBlur = (0, _react.useCallback)(function () {
223
+ setHasFocus(false);
224
+ hideToolTip();
225
+ }, [hideToolTip]);
226
+ var onEscapeKey = (0, _react.useCallback)(function (event) {
227
+ if (event.key === _services.keys.ESCAPE) {
228
+ // when the tooltip is only visual, we don't want it to add an additional key stop
229
+ if (!disableScreenReaderOutput) {
230
+ if (visible) event.stopPropagation();
231
+ }
232
+ setHasFocus(false); // Allows mousing over back into the tooltip to work correctly
233
+ hideToolTip();
229
234
  }
230
- }, {
231
- key: "componentDidUpdate",
232
- value: function componentDidUpdate(prevProps, prevState) {
233
- if (prevState.visible === false && this.state.visible === true) {
234
- requestAnimationFrame(this.testAnchor);
235
+ }, [disableScreenReaderOutput, visible, hideToolTip]);
236
+ var onMouseOut = (0, _react.useCallback)(function (event) {
237
+ // Prevent mousing over children from hiding the tooltip by testing for whether the mouse has
238
+ // left the anchor for a non-child.
239
+ if (anchorRef.current === event.relatedTarget || anchorRef.current != null && !anchorRef.current.contains(event.relatedTarget)) {
240
+ if (!hasFocus) {
241
+ hideToolTip();
235
242
  }
236
-
237
- // update scroll listener
238
- this.repositionOnScroll.update();
239
243
  }
240
- }, {
241
- key: "render",
242
- value: function render() {
243
- var _this$props = this.props,
244
- children = _this$props.children,
245
- className = _this$props.className,
246
- anchorClassName = _this$props.anchorClassName,
247
- anchorProps = _this$props.anchorProps,
248
- content = _this$props.content,
249
- title = _this$props.title,
250
- delay = _this$props.delay,
251
- display = _this$props.display,
252
- repositionOnScroll = _this$props.repositionOnScroll,
253
- _this$props$disableSc = _this$props.disableScreenReaderOutput,
254
- disableScreenReaderOutput = _this$props$disableSc === void 0 ? false : _this$props$disableSc,
255
- rest = (0, _objectWithoutProperties2.default)(_this$props, _excluded);
256
- var _this$state = this.state,
257
- arrowStyles = _this$state.arrowStyles,
258
- id = _this$state.id,
259
- toolTipStyles = _this$state.toolTipStyles,
260
- visible = _this$state.visible,
261
- calculatedPosition = _this$state.calculatedPosition;
262
- var classes = (0, _classnames.default)('euiToolTip', className);
263
- var anchorClasses = (0, _classnames.default)(anchorClassName, anchorProps === null || anchorProps === void 0 ? void 0 : anchorProps.className);
264
- return (0, _react3.jsx)(_react.default.Fragment, null, (0, _react3.jsx)(_tool_tip_anchor.EuiToolTipAnchor, (0, _extends2.default)({}, anchorProps, {
265
- ref: this.setAnchorRef,
266
- onBlur: this.onBlur,
267
- onFocus: this.onFocus,
268
- onKeyDown: this.onEscapeKey,
269
- onMouseOver: this.showToolTip,
270
- onMouseOut: this.onMouseOut
271
- // `id` defines if the trigger and tooltip are automatically linked via `aria-describedby`.
272
- ,
273
- id: !disableScreenReaderOutput ? id : undefined,
274
- className: anchorClasses,
275
- display: display,
276
- isVisible: visible
277
- }), children), visible && (content || title) && (0, _react3.jsx)(_portal.EuiPortal, null, (0, _react3.jsx)(_tool_tip_popover.EuiToolTipPopover, (0, _extends2.default)({
278
- className: classes,
279
- style: toolTipStyles,
280
- positionToolTip: this.positionToolTip,
281
- popoverRef: this.setPopoverRef,
282
- title: title,
283
- id: id,
284
- role: "tooltip",
285
- calculatedPosition: calculatedPosition
286
- }, rest), (0, _react3.jsx)(_tool_tip_arrow.EuiToolTipArrow, {
287
- style: arrowStyles,
288
- className: "euiToolTip__arrow",
289
- position: calculatedPosition
290
- }), (0, _react3.jsx)(_resize_observer.EuiResizeObserver, {
291
- onResize: this.positionToolTip
292
- }, function (resizeRef) {
293
- return (0, _react3.jsx)("div", {
294
- ref: resizeRef
295
- }, content);
296
- }))));
244
+ if (onMouseOutProp) {
245
+ onMouseOutProp(event);
297
246
  }
298
- }]);
299
- }(_react.Component);
300
- (0, _defineProperty2.default)(EuiToolTip, "contextType", _component_defaults.EuiComponentDefaultsContext);
301
- (0, _defineProperty2.default)(EuiToolTip, "defaultProps", {
302
- position: 'top',
303
- delay: 'regular',
304
- display: 'inlineBlock',
305
- disableScreenReaderOutput: false
247
+ }, [hasFocus, hideToolTip, onMouseOutProp]);
248
+ var classes = (0, _classnames.default)('euiToolTip', className);
249
+ var anchorClasses = (0, _classnames.default)(anchorClassName, anchorProps === null || anchorProps === void 0 ? void 0 : anchorProps.className);
250
+ return (0, _react2.jsx)(_react.default.Fragment, null, (0, _react2.jsx)(_tool_tip_anchor.EuiToolTipAnchor, (0, _extends2.default)({}, anchorProps, {
251
+ ref: setAnchorRef,
252
+ onBlur: onBlur,
253
+ onFocus: onFocus,
254
+ onKeyDown: onEscapeKey,
255
+ onMouseOver: showToolTip,
256
+ onMouseOut: onMouseOut
257
+ // `id` defines if the trigger and tooltip are automatically linked via `aria-describedby`.
258
+ ,
259
+ id: !disableScreenReaderOutput ? id : undefined,
260
+ className: anchorClasses,
261
+ display: display,
262
+ isVisible: visible
263
+ }), children), visible && (content || title) && (0, _react2.jsx)(_portal.EuiPortal, null, (0, _react2.jsx)(_tool_tip_popover.EuiToolTipPopover, (0, _extends2.default)({
264
+ className: classes,
265
+ style: toolTipStyles,
266
+ positionToolTip: positionToolTip,
267
+ popoverRef: setPopoverRef,
268
+ title: title,
269
+ id: id,
270
+ role: "tooltip",
271
+ calculatedPosition: calculatedPosition
272
+ }, rest), (0, _react2.jsx)(_tool_tip_arrow.EuiToolTipArrow, {
273
+ style: arrowStyles,
274
+ className: "euiToolTip__arrow",
275
+ position: calculatedPosition
276
+ }), (0, _react2.jsx)(_resize_observer.EuiResizeObserver, {
277
+ onResize: positionToolTip
278
+ }, function (resizeRef) {
279
+ return (0, _react2.jsx)("div", {
280
+ ref: resizeRef
281
+ }, content);
282
+ }))));
306
283
  });
307
284
  EuiToolTip.propTypes = {
308
285
  /**
@@ -334,10 +311,6 @@ EuiToolTip.propTypes = {
334
311
  * Common display alternatives for the anchor wrapper
335
312
  */
336
313
  display: _propTypes.default.any,
337
- /**
338
- * Delay before showing tooltip. Good for repeatable items.
339
- */
340
- delay: _propTypes.default.oneOf(["regular", "long"]).isRequired,
341
314
  /**
342
315
  * An optional title for your tooltip.
343
316
  */
@@ -349,7 +322,7 @@ EuiToolTip.propTypes = {
349
322
  /**
350
323
  * Suggested position. If there is not enough room for it this will be changed.
351
324
  */
352
- position: _propTypes.default.oneOf(["top", "right", "bottom", "left"]).isRequired,
325
+ position: _propTypes.default.oneOf(["top", "right", "bottom", "left"]),
353
326
  /**
354
327
  * When `true`, the tooltip's position is re-calculated when the user
355
328
  * scrolls. This supports having fixed-position tooltip anchors.
@@ -378,4 +351,5 @@ EuiToolTip.propTypes = {
378
351
  "aria-label": _propTypes.default.string,
379
352
  "data-test-subj": _propTypes.default.string,
380
353
  css: _propTypes.default.any
381
- };
354
+ };
355
+ EuiToolTip.displayName = 'EuiToolTip';
@@ -11,7 +11,7 @@ var _euiThemeCommon = require("@elastic/eui-theme-common");
11
11
  var _global_styling = require("../../global_styling");
12
12
  var _popover = require("../../services/popover");
13
13
  var _panel = require("../panel/panel.styles");
14
- var _templateObject, _templateObject2;
14
+ var _templateObject;
15
15
  function _EMOTION_STRINGIFIED_CSS_ERROR__() { return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."; } /*
16
16
  * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
17
17
  * or more contributor license agreements. Licensed under the Elastic License
@@ -25,29 +25,21 @@ var euiToolTipBackgroundColor = exports.euiToolTipBackgroundColor = function eui
25
25
  var euiToolTipBorderColor = exports.euiToolTipBorderColor = function euiToolTipBorderColor(euiTheme) {
26
26
  return euiTheme.components.tooltipBorder;
27
27
  };
28
- var euiToolTipAnimationVertical = function euiToolTipAnimationVertical(size) {
29
- return (0, _react.keyframes)(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n 0% {\n opacity: 0;\n transform: translateY(", ");\n }\n\n 100% {\n opacity: 1;\n transform: translateY(0);\n }\n"])), size);
30
- };
31
- var euiToolTipAnimationHorizontal = function euiToolTipAnimationHorizontal(size) {
32
- return (0, _react.keyframes)(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2.default)(["\n 0% {\n opacity: 0;\n transform: translateX(", ");\n }\n\n 100% {\n opacity: 1;\n transform: translateX(0);\n }\n"])), size);
33
- };
28
+ var euiToolTipAnimation = (0, _react.keyframes)(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n from { opacity: 0; }\n to { opacity: 1; }\n"])));
34
29
  var euiToolTipStyles = exports.euiToolTipStyles = function euiToolTipStyles(euiThemeContext) {
35
30
  var euiTheme = euiThemeContext.euiTheme,
36
31
  highContrastMode = euiThemeContext.highContrastMode;
37
32
  var hasShadow = !highContrastMode;
38
- var animationTiming = "".concat(euiTheme.animation.slow, " ease-out 0s forwards");
39
33
  var arrowSize = euiTheme.size.m;
40
34
  var arrowStyles = (0, _popover._popoverArrowStyles)(euiThemeContext, arrowSize);
41
35
  return {
42
36
  // Base
43
- euiToolTip: /*#__PURE__*/(0, _react.css)(hasShadow ? (0, _euiThemeCommon.euiShadow)(euiThemeContext) : '', " border-radius:", euiTheme.border.radius.medium, ";background-color:", euiToolTipBackgroundColor(euiTheme), ";color:", euiTheme.colors.textGhost, ";z-index:", euiTheme.levels.toast, ";", (0, _global_styling.logicalCSS)('max-width', '256px'), " overflow-wrap:break-word;padding:", euiTheme.size.s, ";", (0, _global_styling.euiFontSize)(euiThemeContext, 's'), " position:absolute;", (0, _panel.euiPanelBorderStyles)(euiThemeContext), " [class*='euiHorizontalRule']{background-color:", euiToolTipBorderColor(euiTheme), ";};label:euiToolTip;"),
44
- // Sizes
45
- s: /*#__PURE__*/(0, _react.css)((0, _global_styling.euiFontSize)(euiThemeContext, 'xs'), ";;label:s;"),
46
- // Positions
47
- top: /*#__PURE__*/(0, _react.css)(_global_styling.euiCanAnimate, "{animation:", euiToolTipAnimationVertical("-".concat(euiTheme.size.base)), " ", animationTiming, ";};label:top;"),
48
- bottom: /*#__PURE__*/(0, _react.css)(_global_styling.euiCanAnimate, "{animation:", euiToolTipAnimationVertical(euiTheme.size.base), " ", animationTiming, ";};label:bottom;"),
49
- left: /*#__PURE__*/(0, _react.css)(_global_styling.euiCanAnimate, "{animation:", euiToolTipAnimationHorizontal("-".concat(euiTheme.size.base)), " ", animationTiming, ";};label:left;"),
50
- right: /*#__PURE__*/(0, _react.css)(_global_styling.euiCanAnimate, "{animation:", euiToolTipAnimationHorizontal(euiTheme.size.base), " ", animationTiming, ";};label:right;"),
37
+ euiToolTip: /*#__PURE__*/(0, _react.css)(hasShadow ? (0, _euiThemeCommon.euiShadow)(euiThemeContext) : '', " border-radius:", euiTheme.border.radius.medium, ";background-color:", euiToolTipBackgroundColor(euiTheme), ";color:", euiTheme.colors.textGhost, ";z-index:", euiTheme.levels.toast, ";", (0, _global_styling.logicalCSS)('max-width', '256px'), " overflow-wrap:break-word;padding:", euiTheme.size.s, ";", (0, _global_styling.euiFontSize)(euiThemeContext, 'xs'), " position:absolute;pointer-events:none;", (0, _panel.euiPanelBorderStyles)(euiThemeContext), " [class*='euiHorizontalRule']{background-color:", euiToolTipBorderColor(euiTheme), ";}", _euiThemeCommon.euiCanAnimate, "{animation:", euiToolTipAnimation, " ", euiTheme.animation.extraFast, " ease-out ", euiTheme.animation.fast, " both;};label:euiToolTip;"),
38
+ // Positions - kept for component compatibility. Animation is in the base style.
39
+ top: /*#__PURE__*/(0, _react.css)(";label:top;"),
40
+ bottom: /*#__PURE__*/(0, _react.css)(";label:bottom;"),
41
+ left: /*#__PURE__*/(0, _react.css)(";label:left;"),
42
+ right: /*#__PURE__*/(0, _react.css)(";label:right;"),
51
43
  // Arrow
52
44
  euiToolTip__arrow: /*#__PURE__*/(0, _react.css)(arrowStyles._arrowStyles, " background-color:inherit;;label:euiToolTip__arrow;"),
53
45
  arrowPositions: arrowStyles.positions,
@@ -35,7 +35,7 @@ var EuiToolTipAnchor = exports.EuiToolTipAnchor = /*#__PURE__*/(0, _react.forwar
35
35
  display = _ref.display,
36
36
  isVisible = _ref.isVisible,
37
37
  rest = (0, _objectWithoutProperties2.default)(_ref, _excluded);
38
- var anchorCss = (0, _tool_tip.euiToolTipAnchorStyles)();
38
+ var anchorCss = (0, _services.useEuiMemoizedStyles)(_tool_tip.euiToolTipAnchorStyles);
39
39
  var cssStyles = [anchorCss.euiToolTipAnchor, anchorCss[display]];
40
40
  var classes = (0, _classnames.default)('euiToolTipAnchor', className);
41
41
  var anchorId = (0, _services.useGeneratedHtmlId)({
@@ -56,7 +56,7 @@ var EuiToolTipAnchor = exports.EuiToolTipAnchor = /*#__PURE__*/(0, _react.forwar
56
56
  onMouseOut: onMouseOut
57
57
  }), /*#__PURE__*/(0, _react.cloneElement)(children, {
58
58
  onFocus: function onFocus(e) {
59
- _onFocus();
59
+ _onFocus(e);
60
60
  children.props.onFocus && children.props.onFocus(e);
61
61
  },
62
62
  onBlur: function onBlur(e) {
@@ -29,6 +29,7 @@ var ToolTipManager = /*#__PURE__*/(0, _createClass2.default)(function ToolTipMan
29
29
  // multiple tooltips are registered via async shenanigans
30
30
  (0, _defineProperty2.default)(this, "toolTipsToHide", new Set());
31
31
  (0, _defineProperty2.default)(this, "registerTooltip", function (hideCallback) {
32
+ if (_this.toolTipsToHide.has(hideCallback)) return;
32
33
  _this.toolTipsToHide.forEach(function (hide) {
33
34
  return hide();
34
35
  });