@elastic/eui 76.0.0 → 76.1.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 (66) hide show
  1. package/dist/eui_theme_dark.css +4 -0
  2. package/dist/eui_theme_dark.min.css +1 -1
  3. package/dist/eui_theme_light.css +4 -0
  4. package/dist/eui_theme_light.min.css +1 -1
  5. package/es/components/color_picker/color_palette_picker/color_palette_picker.js +5 -6
  6. package/es/components/datagrid/body/data_grid_cell.js +6 -3
  7. package/es/components/datagrid/body/data_grid_cell_popover.js +32 -12
  8. package/es/components/date_picker/auto_refresh/auto_refresh.js +2 -1
  9. package/es/components/form/form_control_layout/form_control_layout_icons.js +1 -1
  10. package/es/components/form/range/dual_range.js +14 -7
  11. package/es/components/form/range/range.js +10 -3
  12. package/es/components/form/super_select/super_select.js +21 -18
  13. package/es/components/form/super_select/super_select_control.js +7 -14
  14. package/es/components/selectable/selectable.js +59 -36
  15. package/es/components/selectable/selectable_list/selectable_list.js +1 -1
  16. package/es/components/suggest/suggest.js +3 -10
  17. package/eui.d.ts +27 -12
  18. package/i18ntokens.json +81 -49
  19. package/lib/components/color_picker/color_palette_picker/color_palette_picker.js +5 -6
  20. package/lib/components/datagrid/body/data_grid_cell.js +6 -3
  21. package/lib/components/datagrid/body/data_grid_cell_popover.js +35 -12
  22. package/lib/components/date_picker/auto_refresh/auto_refresh.js +2 -1
  23. package/lib/components/form/form_control_layout/form_control_layout_icons.js +1 -1
  24. package/lib/components/form/range/dual_range.js +14 -7
  25. package/lib/components/form/range/range.js +10 -3
  26. package/lib/components/form/super_select/super_select.js +21 -18
  27. package/lib/components/form/super_select/super_select_control.js +7 -16
  28. package/lib/components/selectable/selectable.js +59 -36
  29. package/lib/components/selectable/selectable_list/selectable_list.js +1 -1
  30. package/lib/components/suggest/suggest.js +3 -12
  31. package/optimize/es/components/datagrid/body/data_grid_cell.js +4 -2
  32. package/optimize/es/components/datagrid/body/data_grid_cell_popover.js +30 -12
  33. package/optimize/es/components/date_picker/auto_refresh/auto_refresh.js +2 -1
  34. package/optimize/es/components/form/form_control_layout/form_control_layout_icons.js +1 -1
  35. package/optimize/es/components/form/range/dual_range.js +14 -7
  36. package/optimize/es/components/form/range/range.js +10 -3
  37. package/optimize/es/components/form/super_select/super_select.js +16 -12
  38. package/optimize/es/components/form/super_select/super_select_control.js +7 -14
  39. package/optimize/es/components/selectable/selectable.js +50 -34
  40. package/optimize/es/components/selectable/selectable_list/selectable_list.js +1 -1
  41. package/optimize/es/components/suggest/suggest.js +3 -10
  42. package/optimize/lib/components/datagrid/body/data_grid_cell.js +4 -2
  43. package/optimize/lib/components/datagrid/body/data_grid_cell_popover.js +33 -19
  44. package/optimize/lib/components/date_picker/auto_refresh/auto_refresh.js +2 -1
  45. package/optimize/lib/components/form/form_control_layout/form_control_layout_icons.js +1 -1
  46. package/optimize/lib/components/form/range/dual_range.js +14 -7
  47. package/optimize/lib/components/form/range/range.js +10 -3
  48. package/optimize/lib/components/form/super_select/super_select.js +16 -11
  49. package/optimize/lib/components/form/super_select/super_select_control.js +7 -16
  50. package/optimize/lib/components/selectable/selectable.js +50 -35
  51. package/optimize/lib/components/selectable/selectable_list/selectable_list.js +1 -1
  52. package/optimize/lib/components/suggest/suggest.js +3 -12
  53. package/package.json +1 -1
  54. package/src/components/form/super_select/_super_select_control.scss +4 -0
  55. package/test-env/components/color_picker/color_palette_picker/color_palette_picker.js +5 -6
  56. package/test-env/components/datagrid/body/data_grid_cell.js +6 -3
  57. package/test-env/components/datagrid/body/data_grid_cell_popover.js +33 -19
  58. package/test-env/components/date_picker/auto_refresh/auto_refresh.js +2 -1
  59. package/test-env/components/form/form_control_layout/form_control_layout_icons.js +1 -1
  60. package/test-env/components/form/range/dual_range.js +14 -7
  61. package/test-env/components/form/range/range.js +10 -3
  62. package/test-env/components/form/super_select/super_select.js +21 -17
  63. package/test-env/components/form/super_select/super_select_control.js +7 -16
  64. package/test-env/components/selectable/selectable.js +58 -36
  65. package/test-env/components/selectable/selectable_list/selectable_list.js +1 -1
  66. package/test-env/components/suggest/suggest.js +3 -12
@@ -157,7 +157,7 @@ export var EuiFormControlLayoutIcons = /*#__PURE__*/function (_Component) {
157
157
  return ___EmotionJSX(EuiIcon, {
158
158
  size: compressed ? 's' : 'm',
159
159
  color: "danger",
160
- type: "alert"
160
+ type: "warning"
161
161
  });
162
162
  }
163
163
  }]);
@@ -44,6 +44,7 @@ import { EuiRangeWrapper } from './range_wrapper';
44
44
  import { calculateThumbPosition } from './utils';
45
45
  import { euiRangeStyles } from './range.styles';
46
46
  import { euiDualRangeStyles } from './dual_range.styles';
47
+ import { EuiI18n } from '../../i18n';
47
48
  import { jsx as ___EmotionJSX } from "@emotion/react";
48
49
  export var EuiDualRangeClass = /*#__PURE__*/function (_Component) {
49
50
  _inherits(EuiDualRangeClass, _Component);
@@ -553,6 +554,11 @@ export var EuiDualRangeClass = /*#__PURE__*/function (_Component) {
553
554
  backgroundColor: euiRangeLevelColor(rightThumbColor, theme.euiTheme)
554
555
  }) : rightThumbPosition;
555
556
 
557
+ var dualSliderScreenReaderInstructions = ___EmotionJSX(EuiI18n, {
558
+ token: "euiDualRange.sliderScreenReaderInstructions",
559
+ default: "You are in a custom range slider. Use the Up and Down arrow keys to change the minimum value. Press Tab to interact with the maximum value."
560
+ });
561
+
556
562
  var theRange = ___EmotionJSX(EuiRangeWrapper, {
557
563
  css: cssStyles,
558
564
  className: classes,
@@ -608,8 +614,8 @@ export var EuiDualRangeClass = /*#__PURE__*/function (_Component) {
608
614
  onFocus: _this2.onThumbFocus,
609
615
  onBlur: _this2.onThumbBlur,
610
616
  onKeyDown: _this2.handleDraggableKeyDown,
611
- "aria-describedby": _this2.props['aria-describedby'],
612
- "aria-label": _this2.props['aria-label']
617
+ "aria-describedby": showInputOnly ? undefined : _this2.props['aria-describedby'],
618
+ "aria-label": showInputOnly ? undefined : _this2.props['aria-label']
613
619
  }), ___EmotionJSX(EuiRangeThumb, {
614
620
  min: min,
615
621
  max: Number(_this2.upperValue),
@@ -621,8 +627,8 @@ export var EuiDualRangeClass = /*#__PURE__*/function (_Component) {
621
627
  onFocus: _this2.onThumbFocus,
622
628
  onBlur: _this2.onThumbBlur,
623
629
  style: logicalStyles(leftThumbStyles),
624
- "aria-describedby": _this2.props['aria-describedby'],
625
- "aria-label": _this2.props['aria-label']
630
+ "aria-describedby": showInputOnly ? undefined : _this2.props['aria-describedby'],
631
+ "aria-label": showInputOnly ? undefined : _this2.props['aria-label']
626
632
  }), ___EmotionJSX(EuiRangeThumb, {
627
633
  min: Number(_this2.lowerValue),
628
634
  max: max,
@@ -634,8 +640,8 @@ export var EuiDualRangeClass = /*#__PURE__*/function (_Component) {
634
640
  onFocus: _this2.onThumbFocus,
635
641
  onBlur: _this2.onThumbBlur,
636
642
  style: logicalStyles(rightThumbStyles),
637
- "aria-describedby": _this2.props['aria-describedby'],
638
- "aria-label": _this2.props['aria-label']
643
+ "aria-describedby": showInputOnly ? undefined : _this2.props['aria-describedby'],
644
+ "aria-label": showInputOnly ? undefined : _this2.props['aria-label']
639
645
  })), showRange && _this2.isValid && ___EmotionJSX(EuiRangeHighlight, {
640
646
  showTicks: showTicks,
641
647
  min: Number(min),
@@ -669,7 +675,8 @@ export var EuiDualRangeClass = /*#__PURE__*/function (_Component) {
669
675
  isOpen: this.state.isPopoverOpen,
670
676
  closePopover: this.closePopover,
671
677
  disableFocusTrap: true,
672
- onPanelResize: this.onResize
678
+ onPanelResize: this.onResize,
679
+ popoverScreenReaderText: dualSliderScreenReaderInstructions
673
680
  }, theRange) : undefined;
674
681
  return thePopover || theRange;
675
682
  }
@@ -35,6 +35,7 @@ import { EuiRangeTooltip } from './range_tooltip';
35
35
  import { EuiRangeTrack } from './range_track';
36
36
  import { EuiRangeWrapper } from './range_wrapper';
37
37
  import { euiRangeStyles } from './range.styles';
38
+ import { EuiI18n } from '../../i18n';
38
39
  import { jsx as ___EmotionJSX } from "@emotion/react";
39
40
  export var EuiRangeClass = /*#__PURE__*/function (_Component) {
40
41
  _inherits(EuiRangeClass, _Component);
@@ -180,6 +181,11 @@ export var EuiRangeClass = /*#__PURE__*/function (_Component) {
180
181
  var cssStyles = [styles.euiRange, showInput && styles.hasInput];
181
182
  var thumbColor = levels && getLevelColor(levels, Number(value));
182
183
 
184
+ var sliderScreenReaderInstructions = ___EmotionJSX(EuiI18n, {
185
+ token: "euiRange.sliderScreenReaderInstructions",
186
+ default: "You are in a custom range slider. Use the Up and Down arrow keys to change the value."
187
+ });
188
+
183
189
  var theRange = ___EmotionJSX(EuiRangeWrapper, {
184
190
  className: classes,
185
191
  css: cssStyles,
@@ -200,7 +206,7 @@ export var EuiRangeClass = /*#__PURE__*/function (_Component) {
200
206
  levels: levels,
201
207
  onChange: this.handleOnChange,
202
208
  value: value,
203
- "aria-hidden": showInput === true,
209
+ "aria-hidden": !!showInput,
204
210
  showRange: showRange
205
211
  }, function (trackWidth) {
206
212
  return ___EmotionJSX(React.Fragment, null, ___EmotionJSX(EuiRangeSlider, _extends({
@@ -221,7 +227,7 @@ export var EuiRangeClass = /*#__PURE__*/function (_Component) {
221
227
  } : undefined,
222
228
  onFocus: showInput === true ? undefined : onFocus,
223
229
  onBlur: showInputOnly ? _this2.onInputBlur : onBlur,
224
- "aria-hidden": showInput === true ? true : false,
230
+ "aria-hidden": !!showInput,
225
231
  thumbColor: thumbColor
226
232
  }, rest)), showRange && _this2.isValid && ___EmotionJSX(EuiRangeHighlight, {
227
233
  showTicks: showTicks,
@@ -255,7 +261,8 @@ export var EuiRangeClass = /*#__PURE__*/function (_Component) {
255
261
  fullWidth: fullWidth,
256
262
  isOpen: this.state.isPopoverOpen,
257
263
  closePopover: this.closePopover,
258
- disableFocusTrap: true
264
+ disableFocusTrap: true,
265
+ popoverScreenReaderText: sliderScreenReaderInstructions
259
266
  }, theRange) : undefined;
260
267
  return thePopover ? thePopover : theRange;
261
268
  }
@@ -7,7 +7,7 @@ import _inherits from "@babel/runtime/helpers/inherits";
7
7
  import _possibleConstructorReturn from "@babel/runtime/helpers/possibleConstructorReturn";
8
8
  import _getPrototypeOf from "@babel/runtime/helpers/getPrototypeOf";
9
9
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
10
- var _excluded = ["className", "options", "valueOfSelected", "onChange", "isOpen", "isInvalid", "hasDividers", "itemClassName", "itemLayoutAlign", "fullWidth", "popoverProps", "compressed"],
10
+ var _excluded = ["className", "options", "valueOfSelected", "placeholder", "onChange", "isOpen", "isInvalid", "hasDividers", "itemClassName", "itemLayoutAlign", "fullWidth", "popoverProps", "compressed"],
11
11
  _excluded2 = ["value", "dropdownDisplay", "inputDisplay"];
12
12
 
13
13
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
@@ -59,8 +59,6 @@ export var EuiSuperSelect = /*#__PURE__*/function (_Component) {
59
59
 
60
60
  _defineProperty(_assertThisInitialized(_this), "describedById", htmlIdGenerator('euiSuperSelect_')('_screenreaderDescribeId'));
61
61
 
62
- _defineProperty(_assertThisInitialized(_this), "labelledById", htmlIdGenerator('euiSuperSelect_')('_screenreaderLabelId'));
63
-
64
62
  _defineProperty(_assertThisInitialized(_this), "state", {
65
63
  isPopoverOpen: _this.props.isOpen || false
66
64
  });
@@ -226,6 +224,7 @@ export var EuiSuperSelect = /*#__PURE__*/function (_Component) {
226
224
  className = _this$props.className,
227
225
  options = _this$props.options,
228
226
  valueOfSelected = _this$props.valueOfSelected,
227
+ placeholder = _this$props.placeholder,
229
228
  onChange = _this$props.onChange,
230
229
  isOpen = _this$props.isOpen,
231
230
  isInvalid = _this$props.isInvalid,
@@ -246,9 +245,9 @@ export var EuiSuperSelect = /*#__PURE__*/function (_Component) {
246
245
  }, itemClassName);
247
246
 
248
247
  var button = ___EmotionJSX(EuiSuperSelectControl, _extends({
249
- screenReaderId: this.labelledById,
250
248
  options: options,
251
249
  value: valueOfSelected,
250
+ placeholder: placeholder,
252
251
  onClick: this.state.isPopoverOpen ? this.closePopover : this.openPopover,
253
252
  onKeyDown: this.onSelectKeyDown,
254
253
  className: buttonClasses,
@@ -293,14 +292,19 @@ export var EuiSuperSelect = /*#__PURE__*/function (_Component) {
293
292
  }, ___EmotionJSX(EuiI18n, {
294
293
  token: "euiSuperSelect.screenReaderAnnouncement",
295
294
  default: "You are in a form selector and must select a single option. Use the Up and Down arrow keys to navigate or Escape to close."
296
- }))), ___EmotionJSX("div", {
297
- "aria-labelledby": this.labelledById,
298
- "aria-describedby": this.describedById,
299
- className: "euiSuperSelect__listbox",
300
- role: "listbox",
301
- "aria-activedescendant": valueOfSelected,
302
- tabIndex: 0
303
- }, items));
295
+ }))), ___EmotionJSX(EuiI18n, {
296
+ token: "euiSuperSelect.ariaLabel",
297
+ default: "Select listbox"
298
+ }, function (ariaLabel) {
299
+ return ___EmotionJSX("div", {
300
+ "aria-label": ariaLabel,
301
+ "aria-describedby": _this2.describedById,
302
+ className: "euiSuperSelect__listbox",
303
+ role: "listbox",
304
+ "aria-activedescendant": valueOfSelected,
305
+ tabIndex: 0
306
+ }, items);
307
+ }));
304
308
  }
305
309
  }]);
306
310
 
@@ -1,6 +1,6 @@
1
1
  import _extends from "@babel/runtime/helpers/extends";
2
2
  import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
3
- var _excluded = ["className", "options", "id", "name", "fullWidth", "isLoading", "isInvalid", "readOnly", "defaultValue", "compressed", "value", "prepend", "append", "screenReaderId", "disabled"];
3
+ var _excluded = ["className", "options", "id", "name", "fullWidth", "isLoading", "isInvalid", "readOnly", "defaultValue", "compressed", "value", "placeholder", "prepend", "append", "disabled"];
4
4
 
5
5
  /*
6
6
  * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
@@ -11,9 +11,7 @@ var _excluded = ["className", "options", "id", "name", "fullWidth", "isLoading",
11
11
  */
12
12
  import React, { Fragment } from 'react';
13
13
  import classNames from 'classnames';
14
- import { EuiScreenReaderOnly } from '../../accessibility';
15
14
  import { EuiFormControlLayout } from '../form_control_layout';
16
- import { EuiI18n } from '../../i18n';
17
15
  import { getFormControlClassNameForIconCount } from '../form_control_layout/_num_icons';
18
16
  import { useFormContext } from '../eui_form_context';
19
17
  import { jsx as ___EmotionJSX } from "@emotion/react";
@@ -37,9 +35,9 @@ export var EuiSuperSelectControl = function EuiSuperSelectControl(props) {
37
35
  _props$compressed = props.compressed,
38
36
  compressed = _props$compressed === void 0 ? false : _props$compressed,
39
37
  value = props.value,
38
+ placeholder = props.placeholder,
40
39
  prepend = props.prepend,
41
40
  append = props.append,
42
- screenReaderId = props.screenReaderId,
43
41
  disabled = props.disabled,
44
42
  rest = _objectWithoutProperties(props, _excluded);
45
43
 
@@ -72,6 +70,7 @@ export var EuiSuperSelectControl = function EuiSuperSelectControl(props) {
72
70
  selectedValue = selectedOption ? selectedOption.inputDisplay : selectedValue;
73
71
  }
74
72
 
73
+ var showPlaceholder = !!placeholder && !selectedValue;
75
74
  return ___EmotionJSX(Fragment, null, ___EmotionJSX("input", {
76
75
  type: "hidden",
77
76
  id: id,
@@ -89,20 +88,14 @@ export var EuiSuperSelectControl = function EuiSuperSelectControl(props) {
89
88
  compressed: compressed,
90
89
  prepend: prepend,
91
90
  append: append
92
- }, ___EmotionJSX(EuiScreenReaderOnly, null, ___EmotionJSX("span", {
93
- id: screenReaderId
94
- }, ___EmotionJSX(EuiI18n, {
95
- token: "euiSuperSelectControl.selectAnOption",
96
- default: "Select an option: {selectedValue}, is selected",
97
- values: {
98
- selectedValue: selectedValue
99
- }
100
- }))), ___EmotionJSX("button", _extends({
91
+ }, ___EmotionJSX("button", _extends({
101
92
  type: "button",
102
93
  className: classes,
103
94
  "aria-haspopup": "listbox",
104
95
  disabled: disabled || readOnly // @ts-ignore Using as a selector only for mixin use
105
96
  ,
106
97
  readOnly: readOnly
107
- }, rest), selectedValue)));
98
+ }, rest), showPlaceholder ? ___EmotionJSX("span", {
99
+ className: "euiSuperSelectControl__placeholder"
100
+ }, placeholder) : selectedValue)));
108
101
  };
@@ -1,5 +1,5 @@
1
- import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
2
1
  import _extends from "@babel/runtime/helpers/extends";
2
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
3
3
  import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
4
4
  import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
5
5
  import _createClass from "@babel/runtime/helpers/createClass";
@@ -8,7 +8,7 @@ import _inherits from "@babel/runtime/helpers/inherits";
8
8
  import _possibleConstructorReturn from "@babel/runtime/helpers/possibleConstructorReturn";
9
9
  import _getPrototypeOf from "@babel/runtime/helpers/getPrototypeOf";
10
10
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
11
- var _excluded = ["children", "className", "options", "onChange", "onActiveOptionChange", "searchable", "searchProps", "singleSelection", "isLoading", "listProps", "renderOption", "height", "allowExclusions", "aria-label", "aria-describedby", "loadingMessage", "noMatchesMessage", "emptyMessage", "errorMessage", "isPreFiltered"],
11
+ var _excluded = ["children", "className", "options", "onChange", "onActiveOptionChange", "searchable", "searchProps", "singleSelection", "isLoading", "listProps", "renderOption", "height", "allowExclusions", "aria-label", "aria-describedby", "loadingMessage", "noMatchesMessage", "emptyMessage", "errorMessage", "selectableScreenReaderText", "isPreFiltered"],
12
12
  _excluded2 = ["aria-label", "aria-describedby", "onChange", "defaultValue", "inputRef"],
13
13
  _excluded3 = ["aria-label", "aria-describedby", "isVirtualized", "rowHeight"];
14
14
 
@@ -67,6 +67,16 @@ export var EuiSelectable = /*#__PURE__*/function (_Component) {
67
67
 
68
68
  _defineProperty(_assertThisInitialized(_this), "listId", void 0);
69
69
 
70
+ _defineProperty(_assertThisInitialized(_this), "isFocusOnSearchOrListBox", function (target) {
71
+ var _this$optionsListRef$, _this$optionsListRef$2;
72
+
73
+ var searchHasFocus = _this.props.searchable && target === _this.inputRef;
74
+ var listBox = (_this$optionsListRef$ = _this.optionsListRef.current) === null || _this$optionsListRef$ === void 0 ? void 0 : (_this$optionsListRef$2 = _this$optionsListRef$.listBoxRef) === null || _this$optionsListRef$2 === void 0 ? void 0 : _this$optionsListRef$2.parentElement;
75
+ var listBoxContainsFocus = target instanceof Node && (listBox === null || listBox === void 0 ? void 0 : listBox.contains(target));
76
+ var listBoxHasFocus = target === listBox || listBoxContainsFocus;
77
+ return searchHasFocus || listBoxHasFocus;
78
+ });
79
+
70
80
  _defineProperty(_assertThisInitialized(_this), "onMouseDown", function () {
71
81
  // Bypass onFocus when a click event originates from this.containerRef.
72
82
  // Prevents onFocus from scrolling away from a clicked option and negating the selection event.
@@ -74,7 +84,7 @@ export var EuiSelectable = /*#__PURE__*/function (_Component) {
74
84
  _this.preventOnFocus = true;
75
85
  });
76
86
 
77
- _defineProperty(_assertThisInitialized(_this), "onFocus", function () {
87
+ _defineProperty(_assertThisInitialized(_this), "onFocus", function (event) {
78
88
  if (_this.preventOnFocus) {
79
89
  _this.preventOnFocus = false;
80
90
  return;
@@ -84,6 +94,10 @@ export var EuiSelectable = /*#__PURE__*/function (_Component) {
84
94
  return;
85
95
  }
86
96
 
97
+ if (event && !_this.isFocusOnSearchOrListBox(event.target)) {
98
+ return;
99
+ }
100
+
87
101
  var firstSelected = _this.state.visibleOptions.findIndex(function (option) {
88
102
  return option.checked && !option.disabled && !option.isGroupLabel;
89
103
  });
@@ -104,7 +118,19 @@ export var EuiSelectable = /*#__PURE__*/function (_Component) {
104
118
  });
105
119
 
106
120
  _defineProperty(_assertThisInitialized(_this), "onKeyDown", function (event) {
107
- var optionsList = _this.optionsListRef.current;
121
+ var optionsList = _this.optionsListRef.current; // Check if the user is interacting with something other than the
122
+ // searchbox or selection list. If so, the user may be attempting to
123
+ // interact with the search clear button or a totally custom button,
124
+ // and listbox keyboard navigation/selection should not be triggered.
125
+
126
+ if (!_this.isFocusOnSearchOrListBox(event.target)) {
127
+ _this.setState({
128
+ activeOptionIndex: undefined,
129
+ isFocused: false
130
+ });
131
+
132
+ return;
133
+ }
108
134
 
109
135
  switch (event.key) {
110
136
  case keys.ARROW_UP:
@@ -129,20 +155,10 @@ export var EuiSelectable = /*#__PURE__*/function (_Component) {
129
155
  case keys.ENTER:
130
156
  case keys.SPACE:
131
157
  if (_this.props.searchable) {
132
- var _this$optionsListRef$, _this$optionsListRef$2;
133
-
134
158
  // For searchable instances, SPACE is reserved as a character for filtering
135
159
  // via the input box, and as such only ENTER will toggle selection.
136
160
  if (event.target === _this.inputRef && event.key === keys.SPACE) {
137
161
  return;
138
- } // Check if the user is interacting with something other than the
139
- // searchbox or selection list. If not, the user is attempting to
140
- // interact with an internal button such as the clear button,
141
- // and the event should not be altered.
142
-
143
-
144
- if (!(event.target === _this.inputRef || event.target === ((_this$optionsListRef$ = _this.optionsListRef.current) === null || _this$optionsListRef$ === void 0 ? void 0 : (_this$optionsListRef$2 = _this$optionsListRef$.listBoxRef) === null || _this$optionsListRef$2 === void 0 ? void 0 : _this$optionsListRef$2.parentElement))) {
145
- return;
146
162
  }
147
163
  }
148
164
 
@@ -233,10 +249,8 @@ export var EuiSelectable = /*#__PURE__*/function (_Component) {
233
249
  });
234
250
 
235
251
  _defineProperty(_assertThisInitialized(_this), "onContainerBlur", function (e) {
236
- var _e$relatedTarget, _e$relatedTarget$firs;
237
-
238
252
  // Ignore blur events when moving from search to option to avoid activeOptionIndex conflicts
239
- if (((_e$relatedTarget = e.relatedTarget) === null || _e$relatedTarget === void 0 ? void 0 : (_e$relatedTarget$firs = _e$relatedTarget.firstChild) === null || _e$relatedTarget$firs === void 0 ? void 0 : _e$relatedTarget$firs.id) === _this.listId) {
253
+ if (_this.isFocusOnSearchOrListBox(e.relatedTarget)) {
240
254
  return;
241
255
  }
242
256
 
@@ -343,6 +357,7 @@ export var EuiSelectable = /*#__PURE__*/function (_Component) {
343
357
  noMatchesMessage = _this$props3.noMatchesMessage,
344
358
  emptyMessage = _this$props3.emptyMessage,
345
359
  errorMessage = _this$props3.errorMessage,
360
+ selectableScreenReaderText = _this$props3.selectableScreenReaderText,
346
361
  isPreFiltered = _this$props3.isPreFiltered,
347
362
  rest = _objectWithoutProperties(_this$props3, _excluded);
348
363
 
@@ -478,10 +493,15 @@ export var EuiSelectable = /*#__PURE__*/function (_Component) {
478
493
  var searchAccessibleName = getAccessibleName(searchProps, this.messageContentId);
479
494
  var searchHasAccessibleName = Boolean(Object.keys(searchAccessibleName).length);
480
495
  var search = searchable ? ___EmotionJSX(EuiI18n, {
481
- token: "euiSelectable.placeholderName",
482
- default: "Filter options"
483
- }, function (placeholderName) {
484
- return ___EmotionJSX(EuiSelectableSearch, _extends({
496
+ tokens: ['euiSelectable.screenReaderInstructions', 'euiSelectable.placeholderName'],
497
+ defaults: ['Use the Up and Down arrow keys to move focus over options. Press Enter to select. Press Escape to collapse options.', 'Filter options']
498
+ }, function (_ref4) {
499
+ var _ref5 = _slicedToArray(_ref4, 2),
500
+ screenReaderInstructions = _ref5[0],
501
+ placeholderName = _ref5[1];
502
+
503
+ return ___EmotionJSX(React.Fragment, null, ___EmotionJSX(EuiSelectableSearch, _extends({
504
+ "aria-describedby": listAriaDescribedbyId,
485
505
  key: "listSearch",
486
506
  options: options,
487
507
  value: searchValue,
@@ -500,7 +520,9 @@ export var EuiSelectable = /*#__PURE__*/function (_Component) {
500
520
  }
501
521
  }, searchHasAccessibleName ? searchAccessibleName : {
502
522
  'aria-label': placeholderName
503
- }, cleanedSearchProps));
523
+ }, cleanedSearchProps)), ___EmotionJSX(EuiScreenReaderOnly, null, ___EmotionJSX("p", {
524
+ id: listAriaDescribedbyId
525
+ }, selectableScreenReaderText, " ", screenReaderInstructions)));
504
526
  }) : undefined;
505
527
  var resultsLength = visibleOptions.filter(function (option) {
506
528
  return !option.disabled;
@@ -508,8 +530,8 @@ export var EuiSelectable = /*#__PURE__*/function (_Component) {
508
530
 
509
531
  var listScreenReaderStatus = searchable && ___EmotionJSX(EuiI18n, {
510
532
  token: "euiSelectable.searchResults",
511
- default: function _default(_ref4) {
512
- var resultsLength = _ref4.resultsLength;
533
+ default: function _default(_ref6) {
534
+ var resultsLength = _ref6.resultsLength;
513
535
  return "".concat(resultsLength, " result").concat(resultsLength === 1 ? '' : 's', " available");
514
536
  },
515
537
  values: {
@@ -522,18 +544,12 @@ export var EuiSelectable = /*#__PURE__*/function (_Component) {
522
544
  var listHasAccessibleName = Boolean(Object.keys(listAccessibleName).length);
523
545
 
524
546
  var list = ___EmotionJSX(EuiI18n, {
525
- tokens: ['euiSelectable.screenReaderInstructions', 'euiSelectable.placeholderName'],
526
- defaults: ['Use up and down arrows to move focus over options. Enter to select. Escape to collapse options.', 'Filter options']
527
- }, function (_ref5) {
528
- var _ref6 = _slicedToArray(_ref5, 2),
529
- placeholderName = _ref6[0],
530
- screenReaderInstructions = _ref6[1];
531
-
547
+ token: "euiSelectable.placeholderName",
548
+ default: "Filter options"
549
+ }, function (placeholderName) {
532
550
  return ___EmotionJSX(React.Fragment, null, searchable && ___EmotionJSX(EuiScreenReaderLive, {
533
551
  isActive: messageContent != null || activeOptionIndex != null
534
- }, messageContent || listScreenReaderStatus), ___EmotionJSX(EuiScreenReaderOnly, null, ___EmotionJSX("p", {
535
- id: listAriaDescribedbyId
536
- }, screenReaderInstructions)), messageContent ? ___EmotionJSX(EuiSelectableMessage, {
552
+ }, messageContent || listScreenReaderStatus), messageContent ? ___EmotionJSX(EuiSelectableMessage, {
537
553
  "data-test-subj": "euiSelectableMessage",
538
554
  id: _this2.messageContentId,
539
555
  bordered: listProps && listProps.bordered
@@ -94,7 +94,7 @@ export var EuiSelectableList = /*#__PURE__*/function (_Component) {
94
94
  }
95
95
 
96
96
  if (typeof ariaDescribedby === 'string') {
97
- ref.setAttribute('aria-labelledby', ariaDescribedby);
97
+ ref.setAttribute('aria-describedby', ariaDescribedby);
98
98
  }
99
99
  }
100
100
  });
@@ -16,8 +16,6 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
16
16
  */
17
17
  import React, { useState, useCallback } from 'react';
18
18
  import classNames from 'classnames';
19
- import { useGeneratedHtmlId } from '../../services';
20
- import { EuiScreenReaderOnly } from '../accessibility';
21
19
  import { EuiIcon } from '../icon';
22
20
  import { useEuiI18n } from '../i18n';
23
21
  import { EuiInputPopover } from '../popover';
@@ -112,14 +110,11 @@ export var EuiSuggest = function EuiSuggest(_ref) {
112
110
  var searchOnChange = function searchOnChange(value) {
113
111
  onSearch === null || onSearch === void 0 ? void 0 : onSearch(value);
114
112
  };
115
-
116
- var inputDescribedbyId = useGeneratedHtmlId({
117
- prefix: id
118
- });
119
113
  /**
120
114
  * Status
121
115
  */
122
116
 
117
+
123
118
  var icon = '';
124
119
  var color = '';
125
120
 
@@ -210,6 +205,7 @@ export var EuiSuggest = function EuiSuggest(_ref) {
210
205
  }
211
206
  }, [onItemClick, suggestions]);
212
207
  return ___EmotionJSX(React.Fragment, null, ___EmotionJSX(EuiSelectable, {
208
+ selectableScreenReaderText: stateMessage,
213
209
  singleSelection: true,
214
210
  height: isVirtualized ? undefined : 'full',
215
211
  options: suggestionList,
@@ -234,7 +230,6 @@ export var EuiSuggest = function EuiSuggest(_ref) {
234
230
  onBlur: searchOnBlur,
235
231
  onInput: searchOnInput,
236
232
  onChange: searchOnChange,
237
- 'aria-describedby': inputDescribedbyId,
238
233
  'aria-label': ariaLabel,
239
234
  'aria-labelledby': labelId
240
235
  }, rest)
@@ -258,7 +253,5 @@ export var EuiSuggest = function EuiSuggest(_ref) {
258
253
  },
259
254
  className: "eui-yScroll"
260
255
  }, list));
261
- }), ___EmotionJSX(EuiScreenReaderOnly, null, ___EmotionJSX("p", {
262
- id: inputDescribedbyId
263
- }, stateMessage)));
256
+ }));
264
257
  };
@@ -334,7 +334,8 @@ var EuiDataGridCell = /*#__PURE__*/function (_Component) {
334
334
  if (_this.isPopoverOpen()) {
335
335
  var _this$props$popoverCo2 = _this.props.popoverContext,
336
336
  setPopoverAnchor = _this$props$popoverCo2.setPopoverAnchor,
337
- setPopoverContent = _this$props$popoverCo2.setPopoverContent; // Set popover anchor
337
+ setPopoverContent = _this$props$popoverCo2.setPopoverContent,
338
+ setCellPopoverProps = _this$props$popoverCo2.setCellPopoverProps; // Set popover anchor
338
339
 
339
340
  var cellAnchorEl = _this.popoverAnchorRef.current;
340
341
  setPopoverAnchor(cellAnchorEl); // Set popover contents with cell content
@@ -360,7 +361,8 @@ var EuiDataGridCell = /*#__PURE__*/function (_Component) {
360
361
  cellActions: (0, _react2.jsx)(_data_grid_cell_actions.EuiDataGridCellPopoverActions, (0, _extends2.default)({}, sharedProps, {
361
362
  column: column
362
363
  })),
363
- DefaultCellPopover: _data_grid_cell_popover.DefaultCellPopover
364
+ DefaultCellPopover: _data_grid_cell_popover.DefaultCellPopover,
365
+ setCellPopoverProps: setCellPopoverProps
364
366
  }), (0, _react2.jsx)(CellElement, (0, _extends2.default)({}, sharedProps, {
365
367
  setCellProps: _this.setCellProps,
366
368
  isExpandable: true,
@@ -9,10 +9,16 @@ Object.defineProperty(exports, "__esModule", {
9
9
  });
10
10
  exports.useCellPopover = exports.JsonPopoverContent = exports.DefaultCellPopover = exports.DataGridCellPopoverContext = void 0;
11
11
 
12
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
13
+
14
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
15
+
12
16
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
13
17
 
14
18
  var _react = _interopRequireWildcard(require("react"));
15
19
 
20
+ var _classnames = _interopRequireDefault(require("classnames"));
21
+
16
22
  var _services = require("../../../services");
17
23
 
18
24
  var _popover = require("../../popover");
@@ -27,13 +33,10 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
27
33
 
28
34
  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; }
29
35
 
30
- /*
31
- * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
32
- * or more contributor license agreements. Licensed under the Elastic License
33
- * 2.0 and the Server Side Public License, v 1; you may not use this file except
34
- * in compliance with, at your election, the Elastic License 2.0 or the Server
35
- * Side Public License, v 1.
36
- */
36
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
37
+
38
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
39
+
37
40
  var DataGridCellPopoverContext = /*#__PURE__*/(0, _react.createContext)({
38
41
  popoverIsOpen: false,
39
42
  cellLocation: {
@@ -43,11 +46,14 @@ var DataGridCellPopoverContext = /*#__PURE__*/(0, _react.createContext)({
43
46
  openCellPopover: function openCellPopover() {},
44
47
  closeCellPopover: function closeCellPopover() {},
45
48
  setPopoverAnchor: function setPopoverAnchor() {},
46
- setPopoverContent: function setPopoverContent() {}
49
+ setPopoverContent: function setPopoverContent() {},
50
+ setCellPopoverProps: function setCellPopoverProps() {}
47
51
  });
48
52
  exports.DataGridCellPopoverContext = DataGridCellPopoverContext;
49
53
 
50
54
  var useCellPopover = function useCellPopover() {
55
+ var _cellPopoverProps$pan;
56
+
51
57
  // Current open state & cell location are handled here
52
58
  var _useState = (0, _react.useState)(false),
53
59
  _useState2 = (0, _slicedToArray2.default)(_useState, 2),
@@ -71,7 +77,13 @@ var useCellPopover = function useCellPopover() {
71
77
  var _useState7 = (0, _react.useState)(),
72
78
  _useState8 = (0, _slicedToArray2.default)(_useState7, 2),
73
79
  popoverContent = _useState8[0],
74
- setPopoverContent = _useState8[1];
80
+ setPopoverContent = _useState8[1]; // Allow customization of most (not all) popover props by consumers
81
+
82
+
83
+ var _useState9 = (0, _react.useState)({}),
84
+ _useState10 = (0, _slicedToArray2.default)(_useState9, 2),
85
+ cellPopoverProps = _useState10[0],
86
+ setCellPopoverProps = _useState10[1];
75
87
 
76
88
  var closeCellPopover = (0, _react.useCallback)(function () {
77
89
  return setPopoverIsOpen(false);
@@ -101,20 +113,20 @@ var useCellPopover = function useCellPopover() {
101
113
  openCellPopover: openCellPopover,
102
114
  cellLocation: cellLocation,
103
115
  setPopoverAnchor: setPopoverAnchor,
104
- setPopoverContent: setPopoverContent
116
+ setPopoverContent: setPopoverContent,
117
+ setCellPopoverProps: setCellPopoverProps
105
118
  }; // Note that this popover is rendered once at the top grid level, rather than one popover per cell
106
119
 
107
- var cellPopover = popoverIsOpen && popoverAnchor && (0, _react2.jsx)(_popover.EuiWrappingPopover, {
120
+ var cellPopover = popoverIsOpen && popoverAnchor && (0, _react2.jsx)(_popover.EuiWrappingPopover, (0, _extends2.default)({
108
121
  isOpen: popoverIsOpen,
109
- button: popoverAnchor,
110
122
  display: "block",
111
123
  hasArrow: false,
112
- panelPaddingSize: "s",
113
- panelClassName: "euiDataGridRowCell__popover",
114
- panelProps: {
124
+ panelPaddingSize: "s"
125
+ }, cellPopoverProps, {
126
+ panelProps: _objectSpread({
115
127
  'data-test-subj': 'euiDataGridExpansionPopover'
116
- },
117
- closePopover: closeCellPopover,
128
+ }, cellPopoverProps.panelProps || {}),
129
+ panelClassName: (0, _classnames.default)('euiDataGridRowCell__popover', cellPopoverProps.panelClassName, (_cellPopoverProps$pan = cellPopoverProps.panelProps) === null || _cellPopoverProps$pan === void 0 ? void 0 : _cellPopoverProps$pan.className),
118
130
  onKeyDown: function onKeyDown(event) {
119
131
  if (event.key === _services.keys.F2 || event.key === _services.keys.ESCAPE) {
120
132
  event.preventDefault();
@@ -125,8 +137,10 @@ var useCellPopover = function useCellPopover() {
125
137
  return popoverAnchor.parentElement.focus();
126
138
  });
127
139
  }
128
- }
129
- }, popoverContent);
140
+ },
141
+ button: popoverAnchor,
142
+ closePopover: closeCellPopover
143
+ }), popoverContent);
130
144
  return {
131
145
  cellPopoverContext: cellPopoverContext,
132
146
  cellPopover: cellPopover
@@ -141,7 +141,8 @@ var EuiAutoRefreshButton = function EuiAutoRefreshButton(_ref2) {
141
141
  isOpen: isPopoverOpen,
142
142
  closePopover: function closePopover() {
143
143
  setIsPopoverOpen(false);
144
- }
144
+ },
145
+ popoverScreenReaderText: isPaused ? autoRefeshLabelOff : autoRefeshLabelOn
145
146
  }, (0, _react2.jsx)(_refresh_interval.EuiRefreshInterval, {
146
147
  onRefreshChange: onRefreshChange,
147
148
  isPaused: isPaused,
@@ -176,7 +176,7 @@ var EuiFormControlLayoutIcons = /*#__PURE__*/function (_Component) {
176
176
  return (0, _react2.jsx)(_icon.EuiIcon, {
177
177
  size: compressed ? 's' : 'm',
178
178
  color: "danger",
179
- type: "alert"
179
+ type: "warning"
180
180
  });
181
181
  }
182
182
  }]);