@elastic/eui 92.0.0 → 92.1.1

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 (156) hide show
  1. package/dist/eui_theme_dark.css +3 -18
  2. package/dist/eui_theme_dark.min.css +1 -1
  3. package/dist/eui_theme_light.css +3 -18
  4. package/dist/eui_theme_light.min.css +1 -1
  5. package/es/components/aspect_ratio/aspect_ratio.js +1 -1
  6. package/es/components/collapsible_nav_beta/collapsible_nav_body_footer.js +7 -3
  7. package/es/components/collapsible_nav_beta/collapsible_nav_body_footer.styles.js +4 -4
  8. package/es/components/datagrid/body/{data_grid_cell.js → cell/data_grid_cell.js} +111 -244
  9. package/es/components/datagrid/body/{data_grid_cell_actions.js → cell/data_grid_cell_actions.js} +5 -5
  10. package/es/components/datagrid/body/{data_grid_cell_popover.js → cell/data_grid_cell_popover.js} +4 -4
  11. package/es/components/datagrid/body/{data_grid_cell_wrapper.js → cell/data_grid_cell_wrapper.js} +1 -1
  12. package/es/components/datagrid/body/cell/focus_utils.js +166 -0
  13. package/es/components/datagrid/body/cell/index.js +11 -0
  14. package/es/components/datagrid/body/data_grid_body.js +0 -2
  15. package/es/components/datagrid/body/data_grid_body_custom.js +1 -7
  16. package/es/components/datagrid/body/data_grid_body_virtualized.js +1 -7
  17. package/es/components/datagrid/body/footer/data_grid_footer_row.js +1 -2
  18. package/es/components/datagrid/body/header/data_grid_control_header_cell.js +3 -6
  19. package/es/components/datagrid/body/header/data_grid_header_cell.js +27 -12
  20. package/es/components/datagrid/body/header/data_grid_header_cell_wrapper.js +45 -116
  21. package/es/components/datagrid/body/header/data_grid_header_row.js +5 -10
  22. package/es/components/datagrid/body/header/use_data_grid_header.js +3 -14
  23. package/es/components/datagrid/data_grid.js +2 -12
  24. package/es/components/datagrid/utils/focus.js +25 -54
  25. package/es/components/datagrid/utils/scrolling.js +1 -1
  26. package/es/components/flyout/flyout_resizable.js +10 -10
  27. package/es/components/flyout/flyout_resizable.styles.js +12 -6
  28. package/es/components/resizable_container/helpers.js +5 -6
  29. package/es/components/resizable_container/resizable_button.js +13 -4
  30. package/es/components/resizable_container/resizable_button.styles.js +18 -8
  31. package/es/components/resizable_container/resizable_container.js +28 -22
  32. package/es/components/steps/step_number.styles.js +6 -7
  33. package/es/components/tree_view/tree_view.js +9 -2
  34. package/eui.d.ts +130 -90
  35. package/i18ntokens.json +108 -72
  36. package/lib/components/aspect_ratio/aspect_ratio.js +1 -1
  37. package/lib/components/collapsible_nav_beta/collapsible_nav_body_footer.js +7 -3
  38. package/lib/components/collapsible_nav_beta/collapsible_nav_body_footer.styles.js +4 -4
  39. package/lib/components/datagrid/body/{data_grid_cell.js → cell/data_grid_cell.js} +111 -244
  40. package/lib/components/datagrid/body/{data_grid_cell_actions.js → cell/data_grid_cell_actions.js} +5 -5
  41. package/lib/components/datagrid/body/{data_grid_cell_popover.js → cell/data_grid_cell_popover.js} +4 -4
  42. package/lib/components/datagrid/body/{data_grid_cell_wrapper.js → cell/data_grid_cell_wrapper.js} +1 -1
  43. package/lib/components/datagrid/body/cell/focus_utils.js +174 -0
  44. package/lib/components/datagrid/body/cell/index.js +32 -0
  45. package/lib/components/datagrid/body/data_grid_body.js +0 -2
  46. package/lib/components/datagrid/body/data_grid_body_custom.js +2 -8
  47. package/lib/components/datagrid/body/data_grid_body_virtualized.js +2 -8
  48. package/lib/components/datagrid/body/footer/data_grid_footer_row.js +5 -6
  49. package/lib/components/datagrid/body/header/data_grid_control_header_cell.js +3 -6
  50. package/lib/components/datagrid/body/header/data_grid_header_cell.js +35 -20
  51. package/lib/components/datagrid/body/header/data_grid_header_cell_wrapper.js +47 -119
  52. package/lib/components/datagrid/body/header/data_grid_header_row.js +5 -10
  53. package/lib/components/datagrid/body/header/use_data_grid_header.js +10 -24
  54. package/lib/components/datagrid/data_grid.js +4 -14
  55. package/lib/components/datagrid/utils/focus.js +26 -56
  56. package/lib/components/datagrid/utils/scrolling.js +2 -2
  57. package/lib/components/flyout/flyout_resizable.js +10 -10
  58. package/lib/components/flyout/flyout_resizable.styles.js +12 -6
  59. package/lib/components/resizable_container/helpers.js +7 -7
  60. package/lib/components/resizable_container/resizable_button.js +13 -4
  61. package/lib/components/resizable_container/resizable_button.styles.js +18 -8
  62. package/lib/components/resizable_container/resizable_container.js +28 -22
  63. package/lib/components/steps/step_number.styles.js +6 -7
  64. package/lib/components/tree_view/tree_view.js +9 -2
  65. package/optimize/es/components/aspect_ratio/aspect_ratio.js +1 -1
  66. package/optimize/es/components/collapsible_nav_beta/collapsible_nav_body_footer.js +7 -3
  67. package/optimize/es/components/collapsible_nav_beta/collapsible_nav_body_footer.styles.js +4 -4
  68. package/optimize/es/components/datagrid/body/{data_grid_cell.js → cell/data_grid_cell.js} +111 -244
  69. package/optimize/es/components/datagrid/body/{data_grid_cell_actions.js → cell/data_grid_cell_actions.js} +5 -5
  70. package/optimize/es/components/datagrid/body/{data_grid_cell_popover.js → cell/data_grid_cell_popover.js} +4 -4
  71. package/optimize/es/components/datagrid/body/{data_grid_cell_wrapper.js → cell/data_grid_cell_wrapper.js} +1 -1
  72. package/optimize/es/components/datagrid/body/cell/focus_utils.js +153 -0
  73. package/optimize/es/components/datagrid/body/cell/index.js +11 -0
  74. package/optimize/es/components/datagrid/body/data_grid_body_custom.js +1 -5
  75. package/optimize/es/components/datagrid/body/data_grid_body_virtualized.js +1 -5
  76. package/optimize/es/components/datagrid/body/footer/data_grid_footer_row.js +1 -2
  77. package/optimize/es/components/datagrid/body/header/data_grid_control_header_cell.js +2 -4
  78. package/optimize/es/components/datagrid/body/header/data_grid_header_cell.js +25 -10
  79. package/optimize/es/components/datagrid/body/header/data_grid_header_cell_wrapper.js +41 -115
  80. package/optimize/es/components/datagrid/body/header/data_grid_header_row.js +4 -8
  81. package/optimize/es/components/datagrid/body/header/use_data_grid_header.js +3 -13
  82. package/optimize/es/components/datagrid/data_grid.js +2 -12
  83. package/optimize/es/components/datagrid/utils/focus.js +25 -54
  84. package/optimize/es/components/datagrid/utils/scrolling.js +1 -1
  85. package/optimize/es/components/flyout/flyout_resizable.js +10 -10
  86. package/optimize/es/components/flyout/flyout_resizable.styles.js +12 -6
  87. package/optimize/es/components/resizable_container/helpers.js +5 -6
  88. package/optimize/es/components/resizable_container/resizable_button.js +5 -2
  89. package/optimize/es/components/resizable_container/resizable_button.styles.js +18 -8
  90. package/optimize/es/components/resizable_container/resizable_container.js +28 -22
  91. package/optimize/es/components/steps/step_number.styles.js +6 -7
  92. package/optimize/es/components/tree_view/tree_view.js +9 -2
  93. package/optimize/lib/components/aspect_ratio/aspect_ratio.js +1 -1
  94. package/optimize/lib/components/collapsible_nav_beta/collapsible_nav_body_footer.js +7 -3
  95. package/optimize/lib/components/collapsible_nav_beta/collapsible_nav_body_footer.styles.js +4 -4
  96. package/optimize/lib/components/datagrid/body/{data_grid_cell.js → cell/data_grid_cell.js} +111 -244
  97. package/optimize/lib/components/datagrid/body/{data_grid_cell_actions.js → cell/data_grid_cell_actions.js} +5 -5
  98. package/optimize/lib/components/datagrid/body/{data_grid_cell_popover.js → cell/data_grid_cell_popover.js} +4 -4
  99. package/optimize/lib/components/datagrid/body/{data_grid_cell_wrapper.js → cell/data_grid_cell_wrapper.js} +1 -1
  100. package/optimize/lib/components/datagrid/body/cell/focus_utils.js +163 -0
  101. package/optimize/lib/components/datagrid/body/cell/index.js +32 -0
  102. package/optimize/lib/components/datagrid/body/data_grid_body_custom.js +2 -6
  103. package/optimize/lib/components/datagrid/body/data_grid_body_virtualized.js +2 -6
  104. package/optimize/lib/components/datagrid/body/footer/data_grid_footer_row.js +5 -6
  105. package/optimize/lib/components/datagrid/body/header/data_grid_control_header_cell.js +2 -4
  106. package/optimize/lib/components/datagrid/body/header/data_grid_header_cell.js +25 -10
  107. package/optimize/lib/components/datagrid/body/header/data_grid_header_cell_wrapper.js +41 -115
  108. package/optimize/lib/components/datagrid/body/header/data_grid_header_row.js +4 -8
  109. package/optimize/lib/components/datagrid/body/header/use_data_grid_header.js +4 -14
  110. package/optimize/lib/components/datagrid/data_grid.js +4 -14
  111. package/optimize/lib/components/datagrid/utils/focus.js +26 -56
  112. package/optimize/lib/components/datagrid/utils/scrolling.js +2 -2
  113. package/optimize/lib/components/flyout/flyout_resizable.js +10 -10
  114. package/optimize/lib/components/flyout/flyout_resizable.styles.js +12 -6
  115. package/optimize/lib/components/resizable_container/helpers.js +7 -7
  116. package/optimize/lib/components/resizable_container/resizable_button.js +5 -2
  117. package/optimize/lib/components/resizable_container/resizable_button.styles.js +18 -8
  118. package/optimize/lib/components/resizable_container/resizable_container.js +28 -22
  119. package/optimize/lib/components/steps/step_number.styles.js +6 -7
  120. package/optimize/lib/components/tree_view/tree_view.js +9 -2
  121. package/package.json +1 -1
  122. package/src/components/datagrid/body/header/_data_grid_header_row.scss +8 -7
  123. package/test-env/components/aspect_ratio/aspect_ratio.js +1 -1
  124. package/test-env/components/collapsible_nav_beta/collapsible_nav_body_footer.js +7 -3
  125. package/test-env/components/collapsible_nav_beta/collapsible_nav_body_footer.styles.js +4 -4
  126. package/test-env/components/datagrid/body/{data_grid_cell.js → cell/data_grid_cell.js} +111 -244
  127. package/test-env/components/datagrid/body/{data_grid_cell_actions.js → cell/data_grid_cell_actions.js} +5 -5
  128. package/test-env/components/datagrid/body/{data_grid_cell_popover.js → cell/data_grid_cell_popover.js} +4 -4
  129. package/test-env/components/datagrid/body/{data_grid_cell_wrapper.js → cell/data_grid_cell_wrapper.js} +1 -1
  130. package/test-env/components/datagrid/body/cell/focus_utils.js +172 -0
  131. package/test-env/components/datagrid/body/cell/index.js +32 -0
  132. package/test-env/components/datagrid/body/data_grid_body.js +0 -2
  133. package/test-env/components/datagrid/body/data_grid_body_custom.js +2 -8
  134. package/test-env/components/datagrid/body/data_grid_body_virtualized.js +2 -8
  135. package/test-env/components/datagrid/body/footer/data_grid_footer_row.js +5 -6
  136. package/test-env/components/datagrid/body/header/data_grid_control_header_cell.js +3 -6
  137. package/test-env/components/datagrid/body/header/data_grid_header_cell.js +25 -10
  138. package/test-env/components/datagrid/body/header/data_grid_header_cell_wrapper.js +44 -116
  139. package/test-env/components/datagrid/body/header/data_grid_header_row.js +5 -10
  140. package/test-env/components/datagrid/body/header/use_data_grid_header.js +4 -14
  141. package/test-env/components/datagrid/data_grid.js +4 -14
  142. package/test-env/components/datagrid/utils/focus.js +26 -56
  143. package/test-env/components/datagrid/utils/scrolling.js +2 -2
  144. package/test-env/components/flyout/flyout_resizable.js +10 -10
  145. package/test-env/components/flyout/flyout_resizable.styles.js +12 -6
  146. package/test-env/components/resizable_container/helpers.js +7 -7
  147. package/test-env/components/resizable_container/resizable_button.js +13 -4
  148. package/test-env/components/resizable_container/resizable_button.styles.js +18 -8
  149. package/test-env/components/resizable_container/resizable_container.js +28 -22
  150. package/test-env/components/steps/step_number.styles.js +6 -7
  151. package/test-env/components/tree_view/tree_view.js +9 -2
  152. package/es/components/datagrid/body/header/header_is_interactive.js +0 -58
  153. package/lib/components/datagrid/body/header/header_is_interactive.js +0 -63
  154. package/optimize/es/components/datagrid/body/header/header_is_interactive.js +0 -53
  155. package/optimize/lib/components/datagrid/body/header/header_is_interactive.js +0 -61
  156. package/test-env/components/datagrid/body/header/header_is_interactive.js +0 -61
@@ -10,11 +10,11 @@ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers
10
10
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
11
11
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
12
12
  var _react = _interopRequireWildcard(require("react"));
13
- var _i18n = require("../../i18n");
14
- var _button_icon = require("../../button/button_icon");
15
- var _button_empty = require("../../button/button_empty");
16
- var _flex = require("../../flex");
17
- var _popover = require("../../popover");
13
+ var _i18n = require("../../../i18n");
14
+ var _button_icon = require("../../../button/button_icon");
15
+ var _button_empty = require("../../../button/button_empty");
16
+ var _flex = require("../../../flex");
17
+ var _popover = require("../../../popover");
18
18
  var _react2 = require("@emotion/react");
19
19
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
20
20
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
@@ -11,10 +11,10 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/de
11
11
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
12
12
  var _react = _interopRequireWildcard(require("react"));
13
13
  var _classnames = _interopRequireDefault(require("classnames"));
14
- var _services = require("../../../services");
15
- var _popover = require("../../popover");
16
- var _text = require("../../text");
17
- var _code = require("../../code");
14
+ var _services = require("../../../../services");
15
+ var _popover = require("../../../popover");
16
+ var _text = require("../../../text");
17
+ var _code = require("../../../code");
18
18
  var _react2 = require("@emotion/react");
19
19
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
20
20
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
@@ -11,7 +11,7 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/de
11
11
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
12
12
  var _react = _interopRequireWildcard(require("react"));
13
13
  var _classnames = _interopRequireDefault(require("classnames"));
14
- var _sorting = require("../utils/sorting");
14
+ var _sorting = require("../../utils/sorting");
15
15
  var _data_grid_cell_popover = require("./data_grid_cell_popover");
16
16
  var _data_grid_cell = require("./data_grid_cell");
17
17
  var _react2 = require("@emotion/react");
@@ -0,0 +1,172 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.HandleInteractiveChildren = exports.FocusTrappedChildren = void 0;
9
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
10
+ var _react = _interopRequireWildcard(require("react"));
11
+ var _propTypes = _interopRequireDefault(require("prop-types"));
12
+ var _tabbable = require("tabbable");
13
+ var _services = require("../../../../services");
14
+ var _focus_trap = require("../../../focus_trap");
15
+ var _accessibility = require("../../../accessibility");
16
+ var _i18n = require("../../../i18n");
17
+ var _react2 = require("@emotion/react");
18
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
19
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
20
+ /*
21
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
22
+ * or more contributor license agreements. Licensed under the Elastic License
23
+ * 2.0 and the Server Side Public License, v 1; you may not use this file except
24
+ * in compliance with, at your election, the Elastic License 2.0 or the Server
25
+ * Side Public License, v 1.
26
+ */
27
+
28
+ /**
29
+ * This internal utility component is used by all cells, both header and body/footer cells.
30
+ * It always handles:
31
+ * 1. Removing any interactive children from keyboard tab order on cell mount
32
+ * 2. Listening for focus on any interactive children and updating the cell focus context
33
+ *
34
+ * It should *only* render focus traps for:
35
+ * 1. Header cells that are `actions: false` but still have interactive children
36
+ * 2. Body cells that are `isExpandable: false` but still have interactive children
37
+ */
38
+ var HandleInteractiveChildren = function HandleInteractiveChildren(_ref) {
39
+ var cellEl = _ref.cellEl,
40
+ children = _ref.children,
41
+ updateCellFocusContext = _ref.updateCellFocusContext,
42
+ renderFocusTrap = _ref.renderFocusTrap;
43
+ var _useState = (0, _react.useState)(false),
44
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
45
+ hasInteractiveChildren = _useState2[0],
46
+ setHasInteractiveChildren = _useState2[1];
47
+
48
+ // On mount, disable all interactive children
49
+ (0, _react.useEffect)(function () {
50
+ if (cellEl) {
51
+ var interactiveChildren = disableInteractives(cellEl);
52
+ if (renderFocusTrap) {
53
+ setHasInteractiveChildren(interactiveChildren.length > 0);
54
+ }
55
+ }
56
+ }, [cellEl, renderFocusTrap]);
57
+
58
+ // Ensure that any interactive children that are clicked update the latest cell focus context
59
+ (0, _react.useEffect)(function () {
60
+ if (cellEl) {
61
+ var onFocus = function onFocus() {
62
+ return updateCellFocusContext();
63
+ };
64
+ cellEl.addEventListener('focus', onFocus, true); // useCapture listens for focus on children
65
+ return function () {
66
+ cellEl.removeEventListener('focus', onFocus, true);
67
+ };
68
+ }
69
+ }, [cellEl, updateCellFocusContext]);
70
+ var _children = (0, _react.useMemo)(function () {
71
+ return (0, _react2.jsx)(_react.default.Fragment, null, children);
72
+ }, [children]);
73
+ if (!cellEl) return _children; // Do nothing if cell has yet to mount or is unmounting
74
+ if (!renderFocusTrap) return _children; // Cells with default actions / expansion popovers do not need to trap
75
+ if (!hasInteractiveChildren) return _children; // No need to focus trap if no children are interactive
76
+
77
+ return (0, _react2.jsx)(FocusTrappedChildren, {
78
+ cellEl: cellEl
79
+ }, children);
80
+ };
81
+
82
+ /**
83
+ * Cells with interactive children but no cell popover expansion should render a
84
+ * focus trap that can be entered with the Enter key, which cycles keyboard tabs
85
+ * through the cell contents only, and exited with the Escape key
86
+ */
87
+ exports.HandleInteractiveChildren = HandleInteractiveChildren;
88
+ HandleInteractiveChildren.propTypes = {
89
+ cellEl: _propTypes.default.oneOfType([_propTypes.default.any.isRequired, _propTypes.default.oneOf([null])]),
90
+ updateCellFocusContext: _propTypes.default.func.isRequired,
91
+ renderFocusTrap: _propTypes.default.bool
92
+ };
93
+ var FocusTrappedChildren = function FocusTrappedChildren(_ref2) {
94
+ var cellEl = _ref2.cellEl,
95
+ children = _ref2.children;
96
+ var _useState3 = (0, _react.useState)(false),
97
+ _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
98
+ isCellEntered = _useState4[0],
99
+ setIsCellEntered = _useState4[1];
100
+ (0, _react.useEffect)(function () {
101
+ if (isCellEntered) {
102
+ enableAndFocusInteractives(cellEl);
103
+ } else {
104
+ disableInteractives(cellEl);
105
+ }
106
+ }, [isCellEntered, cellEl]);
107
+ (0, _react.useEffect)(function () {
108
+ var onKeyUp = function onKeyUp(event) {
109
+ switch (event.key) {
110
+ case _services.keys.ENTER:
111
+ case _services.keys.F2:
112
+ event.preventDefault();
113
+ setIsCellEntered(true);
114
+ break;
115
+ case _services.keys.ESCAPE:
116
+ event.preventDefault();
117
+ setIsCellEntered(function (isCellEntered) {
118
+ if (isCellEntered === true) {
119
+ requestAnimationFrame(function () {
120
+ return cellEl.focus();
121
+ }); // move focus to cell
122
+ return false;
123
+ }
124
+ return isCellEntered;
125
+ });
126
+ break;
127
+ }
128
+ };
129
+ cellEl.addEventListener('keyup', onKeyUp);
130
+ return function () {
131
+ cellEl.removeEventListener('keyup', onKeyUp);
132
+ };
133
+ }, [cellEl]);
134
+ return (0, _react2.jsx)(_focus_trap.EuiFocusTrap, {
135
+ disabled: !isCellEntered,
136
+ onDeactivation: function onDeactivation() {
137
+ return setIsCellEntered(false);
138
+ },
139
+ clickOutsideDisables: true
140
+ }, children, (0, _react2.jsx)(_accessibility.EuiScreenReaderOnly, null, (0, _react2.jsx)("p", null, ' - ', (0, _react2.jsx)(_i18n.EuiI18n
141
+ // eslint-disable-next-line local/i18n
142
+ , {
143
+ token: "euiDataGridCell.focusTrapEnterPrompt",
144
+ default: "Press the Enter key to interact with this cell's contents."
145
+ }))));
146
+ };
147
+
148
+ /**
149
+ * Utility fns for managing child interactive tabIndex state
150
+ */
151
+ exports.FocusTrappedChildren = FocusTrappedChildren;
152
+ FocusTrappedChildren.propTypes = {
153
+ cellEl: _propTypes.default.any.isRequired
154
+ };
155
+ var disableInteractives = function disableInteractives(cell) {
156
+ var interactives = (0, _tabbable.tabbable)(cell);
157
+ interactives.forEach(function (element) {
158
+ element.setAttribute('data-euigrid-tab-managed', 'true');
159
+ element.setAttribute('tabIndex', '-1');
160
+ });
161
+ return interactives;
162
+ };
163
+ var enableAndFocusInteractives = function enableAndFocusInteractives(cell) {
164
+ var interactives = cell.querySelectorAll('[data-euigrid-tab-managed]');
165
+ interactives.forEach(function (element, i) {
166
+ element.setAttribute('tabIndex', '0');
167
+ if (i === 0) {
168
+ element.focus();
169
+ }
170
+ });
171
+ return interactives;
172
+ };
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "Cell", {
7
+ enumerable: true,
8
+ get: function get() {
9
+ return _data_grid_cell_wrapper.Cell;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "DataGridCellPopoverContext", {
13
+ enumerable: true,
14
+ get: function get() {
15
+ return _data_grid_cell_popover.DataGridCellPopoverContext;
16
+ }
17
+ });
18
+ Object.defineProperty(exports, "EuiDataGridCell", {
19
+ enumerable: true,
20
+ get: function get() {
21
+ return _data_grid_cell.EuiDataGridCell;
22
+ }
23
+ });
24
+ Object.defineProperty(exports, "useCellPopover", {
25
+ enumerable: true,
26
+ get: function get() {
27
+ return _data_grid_cell_popover.useCellPopover;
28
+ }
29
+ });
30
+ var _data_grid_cell = require("./data_grid_cell");
31
+ var _data_grid_cell_wrapper = require("./data_grid_cell_wrapper");
32
+ var _data_grid_cell_popover = require("./data_grid_cell_popover");
@@ -573,8 +573,6 @@ EuiDataGridBody.propTypes = {
573
573
  renderCustomGridBody: _propTypes.default.func,
574
574
  interactiveCellId: _propTypes.default.string.isRequired,
575
575
  pagination: _propTypes.default.any,
576
- headerIsInteractive: _propTypes.default.bool.isRequired,
577
- handleHeaderMutation: _propTypes.default.any.isRequired,
578
576
  setVisibleColumns: _propTypes.default.func.isRequired,
579
577
  switchColumnPos: _propTypes.default.func.isRequired,
580
578
  onColumnResize: _propTypes.default.func,
@@ -18,7 +18,7 @@ var _col_widths = require("../utils/col_widths");
18
18
  var _row_heights = require("../utils/row_heights");
19
19
  var _header = require("./header");
20
20
  var _footer = require("./footer");
21
- var _data_grid_cell_wrapper = require("./data_grid_cell_wrapper");
21
+ var _cell = require("./cell");
22
22
  var _react2 = require("@emotion/react");
23
23
  var _excluded = ["colIndex", "visibleRowIndex"];
24
24
  /*
@@ -45,8 +45,6 @@ var EuiDataGridBodyCustomRender = function EuiDataGridBodyCustomRender(_ref) {
45
45
  renderCellPopover = _ref.renderCellPopover,
46
46
  renderFooterCellValue = _ref.renderFooterCellValue,
47
47
  interactiveCellId = _ref.interactiveCellId,
48
- headerIsInteractive = _ref.headerIsInteractive,
49
- handleHeaderMutation = _ref.handleHeaderMutation,
50
48
  setVisibleColumns = _ref.setVisibleColumns,
51
49
  switchColumnPos = _ref.switchColumnPos,
52
50
  onColumnResize = _ref.onColumnResize,
@@ -92,8 +90,6 @@ var EuiDataGridBodyCustomRender = function EuiDataGridBodyCustomRender(_ref) {
92
90
  * Header & footer
93
91
  */
94
92
  var _useDataGridHeader = (0, _header.useDataGridHeader)({
95
- headerIsInteractive: headerIsInteractive,
96
- handleHeaderMutation: handleHeaderMutation,
97
93
  switchColumnPos: switchColumnPos,
98
94
  setVisibleColumns: setVisibleColumns,
99
95
  leadingControlColumns: leadingControlColumns,
@@ -153,7 +149,7 @@ var EuiDataGridBodyCustomRender = function EuiDataGridBodyCustomRender(_ref) {
153
149
  visibleRowIndex: visibleRowIndex,
154
150
  style: style
155
151
  }, cellProps);
156
- return (0, _react2.jsx)(_data_grid_cell_wrapper.Cell, (0, _extends2.default)({}, props, rest));
152
+ return (0, _react2.jsx)(_cell.Cell, (0, _extends2.default)({}, props, rest));
157
153
  }, [].concat((0, _toConsumableArray2.default)(Object.values(cellProps)), [getRowHeight]) // eslint-disable-line react-hooks/exhaustive-deps
158
154
  );
159
155
 
@@ -712,8 +708,6 @@ EuiDataGridBodyCustomRender.propTypes = {
712
708
  renderCustomGridBody: _propTypes.default.func,
713
709
  interactiveCellId: _propTypes.default.string.isRequired,
714
710
  pagination: _propTypes.default.any,
715
- headerIsInteractive: _propTypes.default.bool.isRequired,
716
- handleHeaderMutation: _propTypes.default.any.isRequired,
717
711
  setVisibleColumns: _propTypes.default.func.isRequired,
718
712
  switchColumnPos: _propTypes.default.func.isRequired,
719
713
  onColumnResize: _propTypes.default.func,
@@ -16,7 +16,7 @@ var _reactWindow = require("react-window");
16
16
  var _resize_observer = require("../../observer/resize_observer");
17
17
  var _header = require("./header");
18
18
  var _footer = require("./footer");
19
- var _data_grid_cell_wrapper = require("./data_grid_cell_wrapper");
19
+ var _cell = require("./cell");
20
20
  var _data_grid_row_manager = require("./data_grid_row_manager");
21
21
  var _grid_height_width = require("../utils/grid_height_width");
22
22
  var _col_widths = require("../utils/col_widths");
@@ -42,7 +42,7 @@ var _Cell = function _Cell(_ref) {
42
42
  data = _ref.data;
43
43
  var _useContext = (0, _react.useContext)(DataGridWrapperRowsContext),
44
44
  headerRowHeight = _useContext.headerRowHeight;
45
- return (0, _react2.jsx)(_data_grid_cell_wrapper.Cell, (0, _extends2.default)({
45
+ return (0, _react2.jsx)(_cell.Cell, (0, _extends2.default)({
46
46
  colIndex: columnIndex,
47
47
  visibleRowIndex: rowIndex,
48
48
  style: _objectSpread(_objectSpread({}, style), {}, {
@@ -98,8 +98,6 @@ var EuiDataGridBodyVirtualized = function EuiDataGridBodyVirtualized(_ref3) {
98
98
  renderFooterCellValue = _ref3.renderFooterCellValue,
99
99
  interactiveCellId = _ref3.interactiveCellId,
100
100
  pagination = _ref3.pagination,
101
- headerIsInteractive = _ref3.headerIsInteractive,
102
- handleHeaderMutation = _ref3.handleHeaderMutation,
103
101
  setVisibleColumns = _ref3.setVisibleColumns,
104
102
  switchColumnPos = _ref3.switchColumnPos,
105
103
  onColumnResize = _ref3.onColumnResize,
@@ -149,8 +147,6 @@ var EuiDataGridBodyVirtualized = function EuiDataGridBodyVirtualized(_ref3) {
149
147
  * Header & footer
150
148
  */
151
149
  var _useDataGridHeader = (0, _header.useDataGridHeader)({
152
- headerIsInteractive: headerIsInteractive,
153
- handleHeaderMutation: handleHeaderMutation,
154
150
  switchColumnPos: switchColumnPos,
155
151
  setVisibleColumns: setVisibleColumns,
156
152
  leadingControlColumns: leadingControlColumns,
@@ -850,8 +846,6 @@ EuiDataGridBodyVirtualized.propTypes = {
850
846
  renderCustomGridBody: _propTypes.default.func,
851
847
  interactiveCellId: _propTypes.default.string.isRequired,
852
848
  pagination: _propTypes.default.any,
853
- headerIsInteractive: _propTypes.default.bool.isRequired,
854
- handleHeaderMutation: _propTypes.default.any.isRequired,
855
849
  setVisibleColumns: _propTypes.default.func.isRequired,
856
850
  switchColumnPos: _propTypes.default.func.isRequired,
857
851
  onColumnResize: _propTypes.default.func,
@@ -10,8 +10,7 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")
10
10
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
11
11
  var _classnames = _interopRequireDefault(require("classnames"));
12
12
  var _react = _interopRequireWildcard(require("react"));
13
- var _data_grid_cell = require("../data_grid_cell");
14
- var _data_grid_cell_popover = require("../data_grid_cell_popover");
13
+ var _cell = require("../cell");
15
14
  var _react2 = require("@emotion/react");
16
15
  var _excluded = ["leadingControlColumns", "trailingControlColumns", "columns", "schema", "columnWidths", "defaultColumnWidth", "className", "renderCellValue", "renderCellPopover", "rowIndex", "interactiveCellId", "data-test-subj", "visibleRowIndex"];
17
16
  /*
@@ -46,7 +45,7 @@ var EuiDataGridFooterRow = /*#__PURE__*/(0, _react.memo)( /*#__PURE__*/(0, _reac
46
45
  'euiDataGridRow--striped': visibleRowIndex % 2 !== 0
47
46
  }, 'euiDataGridFooter', className);
48
47
  var dataTestSubj = (0, _classnames.default)('dataGridRow', 'dataGridFooterRow', _dataTestSubj);
49
- var popoverContext = (0, _react.useContext)(_data_grid_cell_popover.DataGridCellPopoverContext);
48
+ var popoverContext = (0, _react.useContext)(_cell.DataGridCellPopoverContext);
50
49
  var sharedCellProps = {
51
50
  rowIndex: rowIndex,
52
51
  visibleRowIndex: visibleRowIndex,
@@ -63,7 +62,7 @@ var EuiDataGridFooterRow = /*#__PURE__*/(0, _react.memo)( /*#__PURE__*/(0, _reac
63
62
  width = _ref2.width,
64
63
  footerCellRender = _ref2.footerCellRender,
65
64
  footerCellProps = _ref2.footerCellProps;
66
- return (0, _react2.jsx)(_data_grid_cell.EuiDataGridCell, (0, _extends2.default)({}, footerCellProps, sharedCellProps, {
65
+ return (0, _react2.jsx)(_cell.EuiDataGridCell, (0, _extends2.default)({}, footerCellProps, sharedCellProps, {
67
66
  key: "".concat(id, "-").concat(rowIndex),
68
67
  colIndex: i,
69
68
  columnId: id,
@@ -77,7 +76,7 @@ var EuiDataGridFooterRow = /*#__PURE__*/(0, _react.memo)( /*#__PURE__*/(0, _reac
77
76
  var columnType = schema[id] ? schema[id].columnType : null;
78
77
  var width = columnWidths[id] || defaultColumnWidth;
79
78
  var columnPosition = i + leadingControlColumns.length;
80
- return (0, _react2.jsx)(_data_grid_cell.EuiDataGridCell, (0, _extends2.default)({}, sharedCellProps, {
79
+ return (0, _react2.jsx)(_cell.EuiDataGridCell, (0, _extends2.default)({}, sharedCellProps, {
81
80
  key: "".concat(columnPosition, ",").concat(visibleRowIndex) // Note: this key should use cell position to match react-window/data cell behavior. See #5720
82
81
  ,
83
82
  colIndex: columnPosition,
@@ -95,7 +94,7 @@ var EuiDataGridFooterRow = /*#__PURE__*/(0, _react.memo)( /*#__PURE__*/(0, _reac
95
94
  footerCellRender = _ref4.footerCellRender,
96
95
  footerCellProps = _ref4.footerCellProps;
97
96
  var colIndex = i + columns.length + leadingControlColumns.length;
98
- return (0, _react2.jsx)(_data_grid_cell.EuiDataGridCell, (0, _extends2.default)({}, footerCellProps, sharedCellProps, {
97
+ return (0, _react2.jsx)(_cell.EuiDataGridCell, (0, _extends2.default)({}, footerCellProps, sharedCellProps, {
99
98
  key: "".concat(id, "-").concat(rowIndex),
100
99
  colIndex: colIndex,
101
100
  columnId: id,
@@ -21,8 +21,7 @@ var _react2 = require("@emotion/react");
21
21
 
22
22
  var EuiDataGridControlHeaderCell = function EuiDataGridControlHeaderCell(_ref) {
23
23
  var controlColumn = _ref.controlColumn,
24
- index = _ref.index,
25
- headerIsInteractive = _ref.headerIsInteractive;
24
+ index = _ref.index;
26
25
  var HeaderCellRender = controlColumn.headerCellRender,
27
26
  headerCellProps = controlColumn.headerCellProps,
28
27
  width = controlColumn.width,
@@ -31,8 +30,7 @@ var EuiDataGridControlHeaderCell = function EuiDataGridControlHeaderCell(_ref) {
31
30
  className: (0, _classnames.default)('euiDataGridHeaderCell--controlColumn', headerCellProps === null || headerCellProps === void 0 ? void 0 : headerCellProps.className),
32
31
  id: id,
33
32
  index: index,
34
- width: width,
35
- headerIsInteractive: headerIsInteractive
33
+ width: width
36
34
  }), (0, _react2.jsx)("div", {
37
35
  className: "euiDataGridHeaderCell__content"
38
36
  }, (0, _react2.jsx)(HeaderCellRender, null)));
@@ -69,6 +67,5 @@ EuiDataGridControlHeaderCell.propTypes = {
69
67
  * Optional props to pass to the column footer cell
70
68
  */
71
69
  footerCellProps: _propTypes.default.any
72
- }).isRequired,
73
- headerIsInteractive: _propTypes.default.bool.isRequired
70
+ }).isRequired
74
71
  };
@@ -7,8 +7,8 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports.useSortingUtils = exports.usePopoverArrowNavigation = exports.EuiDataGridHeaderCell = void 0;
9
9
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
10
- var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
11
10
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
12
12
  var _classnames2 = _interopRequireDefault(require("classnames"));
13
13
  var _propTypes = _interopRequireDefault(require("prop-types"));
14
14
  var _react = _interopRequireWildcard(require("react"));
@@ -44,6 +44,7 @@ var _ref2 = process.env.NODE_ENV === "production" ? {
44
44
  toString: _EMOTION_STRINGIFIED_CSS_ERROR__
45
45
  };
46
46
  var EuiDataGridHeaderCell = function EuiDataGridHeaderCell(_ref) {
47
+ var _classnames;
47
48
  var column = _ref.column,
48
49
  index = _ref.index,
49
50
  columns = _ref.columns,
@@ -53,15 +54,13 @@ var EuiDataGridHeaderCell = function EuiDataGridHeaderCell(_ref) {
53
54
  defaultColumnWidth = _ref.defaultColumnWidth,
54
55
  setColumnWidth = _ref.setColumnWidth,
55
56
  setVisibleColumns = _ref.setVisibleColumns,
56
- switchColumnPos = _ref.switchColumnPos,
57
- headerIsInteractive = _ref.headerIsInteractive;
57
+ switchColumnPos = _ref.switchColumnPos;
58
58
  var id = column.id,
59
59
  display = column.display,
60
60
  displayAsText = column.displayAsText,
61
61
  displayHeaderCellProps = column.displayHeaderCellProps;
62
62
  var width = columnWidths[id] || defaultColumnWidth;
63
63
  var columnType = schema[id] ? schema[id].columnType : null;
64
- var classes = (0, _classnames2.default)((0, _defineProperty2.default)({}, "euiDataGridHeaderCell--".concat(columnType), columnType), displayHeaderCellProps === null || displayHeaderCellProps === void 0 ? void 0 : displayHeaderCellProps.className);
65
64
  var _useContext = (0, _react.useContext)(_focus.DataGridFocusContext),
66
65
  setFocusedCell = _useContext.setFocusedCell,
67
66
  focusFirstVisibleInteractiveCell = _useContext.focusFirstVisibleInteractiveCell;
@@ -86,6 +85,14 @@ var EuiDataGridHeaderCell = function EuiDataGridHeaderCell(_ref) {
86
85
  });
87
86
  var showColumnActions = columnActions && columnActions.length > 0;
88
87
  var actionsButtonRef = (0, _react.useRef)(null);
88
+ var focusActionsButton = (0, _react.useCallback)(function () {
89
+ var _actionsButtonRef$cur;
90
+ (_actionsButtonRef$cur = actionsButtonRef.current) === null || _actionsButtonRef$cur === void 0 ? void 0 : _actionsButtonRef$cur.focus();
91
+ }, []);
92
+ var _useState3 = (0, _react.useState)(false),
93
+ _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
94
+ isActionsButtonFocused = _useState4[0],
95
+ setIsActionsButtonFocused = _useState4[1];
89
96
  var _useSortingUtils = useSortingUtils({
90
97
  sorting: sorting,
91
98
  id: id,
@@ -106,13 +113,16 @@ var EuiDataGridHeaderCell = function EuiDataGridHeaderCell(_ref) {
106
113
  title: displayAsText || id,
107
114
  className: "euiDataGridHeaderCell__content"
108
115
  }, display || displayAsText || id), sortingArrow);
116
+ var classes = (0, _classnames2.default)((_classnames = {}, (0, _defineProperty2.default)(_classnames, "euiDataGridHeaderCell--".concat(columnType), columnType), (0, _defineProperty2.default)(_classnames, 'euiDataGridHeaderCell--hasColumnActions', showColumnActions), (0, _defineProperty2.default)(_classnames, 'euiDataGridHeaderCell--isActionsPopoverOpen', isPopoverOpen), _classnames), displayHeaderCellProps === null || displayHeaderCellProps === void 0 ? void 0 : displayHeaderCellProps.className);
109
117
  return (0, _react2.jsx)(_data_grid_header_cell_wrapper.EuiDataGridHeaderCellWrapper, (0, _extends2.default)({}, displayHeaderCellProps, {
110
118
  className: classes,
111
119
  id: id,
112
120
  index: index,
113
121
  width: width,
114
- headerIsInteractive: headerIsInteractive,
115
- "aria-sort": ariaSort
122
+ "aria-sort": ariaSort,
123
+ hasActionsPopover: showColumnActions,
124
+ isActionsButtonFocused: isActionsButtonFocused,
125
+ focusActionsButton: focusActionsButton
116
126
  }), column.isResizable !== false && width != null ? (0, _react2.jsx)(_data_grid_column_resizer.EuiDataGridColumnResizer, {
117
127
  columnId: id,
118
128
  columnWidth: width,
@@ -120,11 +130,16 @@ var EuiDataGridHeaderCell = function EuiDataGridHeaderCell(_ref) {
120
130
  }) : null, !showColumnActions ? (0, _react2.jsx)(_react.default.Fragment, null, cellContent, sortingScreenReaderText && (0, _react2.jsx)(_accessibility2.EuiScreenReaderOnly, null, (0, _react2.jsx)("p", null, sortingScreenReaderText))) : (0, _react2.jsx)(_react.default.Fragment, null, (0, _react2.jsx)("button", {
121
131
  className: "euiDataGridHeaderCell__button",
122
132
  onClick: function onClick() {
123
- setFocusedCell([index, -1]);
124
- setIsPopoverOpen(function (isPopoverOpen) {
133
+ return setIsPopoverOpen(function (isPopoverOpen) {
125
134
  return !isPopoverOpen;
126
135
  });
127
136
  },
137
+ onFocus: function onFocus() {
138
+ return setIsActionsButtonFocused(true);
139
+ },
140
+ onBlur: function onBlur() {
141
+ return setIsActionsButtonFocused(false);
142
+ },
128
143
  "aria-describedby": "".concat(sortingAriaId, " ").concat(actionsAriaId),
129
144
  ref: actionsButtonRef,
130
145
  "data-test-subj": "dataGridHeaderCellActionButton-".concat(id)
@@ -138,8 +153,8 @@ var EuiDataGridHeaderCell = function EuiDataGridHeaderCell(_ref) {
138
153
  focusTrapProps: {
139
154
  // We need to override the default EuiPopover `onClickOutside` since the anchor is separate from the actual button
140
155
  onClickOutside: function onClickOutside(event) {
141
- var _actionsButtonRef$cur;
142
- if (((_actionsButtonRef$cur = actionsButtonRef.current) === null || _actionsButtonRef$cur === void 0 ? void 0 : _actionsButtonRef$cur.contains(event.target)) === false) {
156
+ var _actionsButtonRef$cur2;
157
+ if (((_actionsButtonRef$cur2 = actionsButtonRef.current) === null || _actionsButtonRef$cur2 === void 0 ? void 0 : _actionsButtonRef$cur2.contains(event.target)) === false) {
143
158
  setIsPopoverOpen(false);
144
159
  }
145
160
  }