@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
@@ -49,6 +49,8 @@ var _range = require("./range.styles");
49
49
 
50
50
  var _dual_range = require("./dual_range.styles");
51
51
 
52
+ var _i18n = require("../../i18n");
53
+
52
54
  var _react2 = require("@emotion/react");
53
55
 
54
56
  var _excluded = ["className", "css", "compressed", "disabled", "fullWidth", "isLoading", "readOnly", "id", "max", "min", "name", "step", "showLabels", "showInput", "showTicks", "tickInterval", "ticks", "levels", "onBlur", "onChange", "onFocus", "showRange", "value", "isInvalid", "append", "prepend", "minInputProps", "maxInputProps", "isDraggable", "theme"];
@@ -598,6 +600,10 @@ var EuiDualRangeClass = /*#__PURE__*/function (_Component) {
598
600
  var rightThumbStyles = rightThumbColor ? _objectSpread(_objectSpread({}, rightThumbPosition), {}, {
599
601
  backgroundColor: (0, _range_levels_colors.euiRangeLevelColor)(rightThumbColor, theme.euiTheme)
600
602
  }) : rightThumbPosition;
603
+ var dualSliderScreenReaderInstructions = (0, _react2.jsx)(_i18n.EuiI18n, {
604
+ token: "euiDualRange.sliderScreenReaderInstructions",
605
+ 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."
606
+ });
601
607
  var theRange = (0, _react2.jsx)(_range_wrapper.EuiRangeWrapper, {
602
608
  css: cssStyles,
603
609
  className: classes,
@@ -653,8 +659,8 @@ var EuiDualRangeClass = /*#__PURE__*/function (_Component) {
653
659
  onFocus: _this2.onThumbFocus,
654
660
  onBlur: _this2.onThumbBlur,
655
661
  onKeyDown: _this2.handleDraggableKeyDown,
656
- "aria-describedby": _this2.props['aria-describedby'],
657
- "aria-label": _this2.props['aria-label']
662
+ "aria-describedby": showInputOnly ? undefined : _this2.props['aria-describedby'],
663
+ "aria-label": showInputOnly ? undefined : _this2.props['aria-label']
658
664
  }), (0, _react2.jsx)(_range_thumb.EuiRangeThumb, {
659
665
  min: min,
660
666
  max: Number(_this2.upperValue),
@@ -666,8 +672,8 @@ var EuiDualRangeClass = /*#__PURE__*/function (_Component) {
666
672
  onFocus: _this2.onThumbFocus,
667
673
  onBlur: _this2.onThumbBlur,
668
674
  style: (0, _global_styling.logicalStyles)(leftThumbStyles),
669
- "aria-describedby": _this2.props['aria-describedby'],
670
- "aria-label": _this2.props['aria-label']
675
+ "aria-describedby": showInputOnly ? undefined : _this2.props['aria-describedby'],
676
+ "aria-label": showInputOnly ? undefined : _this2.props['aria-label']
671
677
  }), (0, _react2.jsx)(_range_thumb.EuiRangeThumb, {
672
678
  min: Number(_this2.lowerValue),
673
679
  max: max,
@@ -679,8 +685,8 @@ var EuiDualRangeClass = /*#__PURE__*/function (_Component) {
679
685
  onFocus: _this2.onThumbFocus,
680
686
  onBlur: _this2.onThumbBlur,
681
687
  style: (0, _global_styling.logicalStyles)(rightThumbStyles),
682
- "aria-describedby": _this2.props['aria-describedby'],
683
- "aria-label": _this2.props['aria-label']
688
+ "aria-describedby": showInputOnly ? undefined : _this2.props['aria-describedby'],
689
+ "aria-label": showInputOnly ? undefined : _this2.props['aria-label']
684
690
  })), showRange && _this2.isValid && (0, _react2.jsx)(_range_highlight.EuiRangeHighlight, {
685
691
  showTicks: showTicks,
686
692
  min: Number(min),
@@ -713,7 +719,8 @@ var EuiDualRangeClass = /*#__PURE__*/function (_Component) {
713
719
  isOpen: this.state.isPopoverOpen,
714
720
  closePopover: this.closePopover,
715
721
  disableFocusTrap: true,
716
- onPanelResize: this.onResize
722
+ onPanelResize: this.onResize,
723
+ popoverScreenReaderText: dualSliderScreenReaderInstructions
717
724
  }, theRange) : undefined;
718
725
  return thePopover || theRange;
719
726
  }
@@ -39,6 +39,8 @@ var _range_wrapper = require("./range_wrapper");
39
39
 
40
40
  var _range = require("./range.styles");
41
41
 
42
+ var _i18n = require("../../i18n");
43
+
42
44
  var _react2 = require("@emotion/react");
43
45
 
44
46
  var _excluded = ["className", "compressed", "disabled", "fullWidth", "isLoading", "readOnly", "id", "max", "min", "name", "step", "showLabels", "showInput", "showTicks", "tickInterval", "ticks", "levels", "showRange", "showValue", "valueAppend", "valuePrepend", "onBlur", "onChange", "onFocus", "value", "tabIndex", "isInvalid", "theme"];
@@ -220,6 +222,10 @@ var EuiRangeClass = /*#__PURE__*/function (_Component) {
220
222
  var styles = (0, _range.euiRangeStyles)(theme);
221
223
  var cssStyles = [styles.euiRange, showInput && styles.hasInput];
222
224
  var thumbColor = levels && (0, _range_levels_colors.getLevelColor)(levels, Number(value));
225
+ var sliderScreenReaderInstructions = (0, _react2.jsx)(_i18n.EuiI18n, {
226
+ token: "euiRange.sliderScreenReaderInstructions",
227
+ default: "You are in a custom range slider. Use the Up and Down arrow keys to change the value."
228
+ });
223
229
  var theRange = (0, _react2.jsx)(_range_wrapper.EuiRangeWrapper, {
224
230
  className: classes,
225
231
  css: cssStyles,
@@ -240,7 +246,7 @@ var EuiRangeClass = /*#__PURE__*/function (_Component) {
240
246
  levels: levels,
241
247
  onChange: this.handleOnChange,
242
248
  value: value,
243
- "aria-hidden": showInput === true,
249
+ "aria-hidden": !!showInput,
244
250
  showRange: showRange
245
251
  }, function (trackWidth) {
246
252
  return (0, _react2.jsx)(_react.default.Fragment, null, (0, _react2.jsx)(_range_slider.EuiRangeSlider, _extends({
@@ -261,7 +267,7 @@ var EuiRangeClass = /*#__PURE__*/function (_Component) {
261
267
  } : undefined,
262
268
  onFocus: showInput === true ? undefined : onFocus,
263
269
  onBlur: showInputOnly ? _this2.onInputBlur : onBlur,
264
- "aria-hidden": showInput === true ? true : false,
270
+ "aria-hidden": !!showInput,
265
271
  thumbColor: thumbColor
266
272
  }, rest)), showRange && _this2.isValid && (0, _react2.jsx)(_range_highlight.EuiRangeHighlight, {
267
273
  showTicks: showTicks,
@@ -294,7 +300,8 @@ var EuiRangeClass = /*#__PURE__*/function (_Component) {
294
300
  fullWidth: fullWidth,
295
301
  isOpen: this.state.isPopoverOpen,
296
302
  closePopover: this.closePopover,
297
- disableFocusTrap: true
303
+ disableFocusTrap: true,
304
+ popoverScreenReaderText: sliderScreenReaderInstructions
298
305
  }, theRange) : undefined;
299
306
  return thePopover ? thePopover : theRange;
300
307
  }
@@ -27,7 +27,7 @@ var _i18n = require("../../i18n");
27
27
 
28
28
  var _react2 = require("@emotion/react");
29
29
 
30
- var _excluded = ["className", "options", "valueOfSelected", "onChange", "isOpen", "isInvalid", "hasDividers", "itemClassName", "itemLayoutAlign", "fullWidth", "popoverProps", "compressed"],
30
+ var _excluded = ["className", "options", "valueOfSelected", "placeholder", "onChange", "isOpen", "isInvalid", "hasDividers", "itemClassName", "itemLayoutAlign", "fullWidth", "popoverProps", "compressed"],
31
31
  _excluded2 = ["value", "dropdownDisplay", "inputDisplay"];
32
32
 
33
33
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -93,8 +93,6 @@ var EuiSuperSelect = /*#__PURE__*/function (_Component) {
93
93
 
94
94
  _defineProperty(_assertThisInitialized(_this), "describedById", (0, _services.htmlIdGenerator)('euiSuperSelect_')('_screenreaderDescribeId'));
95
95
 
96
- _defineProperty(_assertThisInitialized(_this), "labelledById", (0, _services.htmlIdGenerator)('euiSuperSelect_')('_screenreaderLabelId'));
97
-
98
96
  _defineProperty(_assertThisInitialized(_this), "state", {
99
97
  isPopoverOpen: _this.props.isOpen || false
100
98
  });
@@ -260,6 +258,7 @@ var EuiSuperSelect = /*#__PURE__*/function (_Component) {
260
258
  className = _this$props.className,
261
259
  options = _this$props.options,
262
260
  valueOfSelected = _this$props.valueOfSelected,
261
+ placeholder = _this$props.placeholder,
263
262
  onChange = _this$props.onChange,
264
263
  isOpen = _this$props.isOpen,
265
264
  isInvalid = _this$props.isInvalid,
@@ -279,9 +278,9 @@ var EuiSuperSelect = /*#__PURE__*/function (_Component) {
279
278
  'euiSuperSelect__item--hasDividers': hasDividers
280
279
  }, itemClassName);
281
280
  var button = (0, _react2.jsx)(_super_select_control.EuiSuperSelectControl, _extends({
282
- screenReaderId: this.labelledById,
283
281
  options: options,
284
282
  value: valueOfSelected,
283
+ placeholder: placeholder,
285
284
  onClick: this.state.isPopoverOpen ? this.closePopover : this.openPopover,
286
285
  onKeyDown: this.onSelectKeyDown,
287
286
  className: buttonClasses,
@@ -325,14 +324,19 @@ var EuiSuperSelect = /*#__PURE__*/function (_Component) {
325
324
  }, (0, _react2.jsx)(_i18n.EuiI18n, {
326
325
  token: "euiSuperSelect.screenReaderAnnouncement",
327
326
  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."
328
- }))), (0, _react2.jsx)("div", {
329
- "aria-labelledby": this.labelledById,
330
- "aria-describedby": this.describedById,
331
- className: "euiSuperSelect__listbox",
332
- role: "listbox",
333
- "aria-activedescendant": valueOfSelected,
334
- tabIndex: 0
335
- }, items));
327
+ }))), (0, _react2.jsx)(_i18n.EuiI18n, {
328
+ token: "euiSuperSelect.ariaLabel",
329
+ default: "Select listbox"
330
+ }, function (ariaLabel) {
331
+ return (0, _react2.jsx)("div", {
332
+ "aria-label": ariaLabel,
333
+ "aria-describedby": _this2.describedById,
334
+ className: "euiSuperSelect__listbox",
335
+ role: "listbox",
336
+ "aria-activedescendant": valueOfSelected,
337
+ tabIndex: 0
338
+ }, items);
339
+ }));
336
340
  }
337
341
  }]);
338
342
 
@@ -379,6 +383,11 @@ EuiSuperSelect.propTypes = {
379
383
  readOnly: _propTypes.default.bool,
380
384
  name: _propTypes.default.string,
381
385
 
386
+ /**
387
+ * Placeholder to display when the current selected value is empty.
388
+ */
389
+ placeholder: _propTypes.default.oneOfType([_propTypes.default.node, _propTypes.default.node]),
390
+
382
391
  /**
383
392
  * Creates an input group with element(s) coming before input.
384
393
  * `string` | `ReactElement` or an array of these
@@ -391,12 +400,6 @@ EuiSuperSelect.propTypes = {
391
400
  */
392
401
  append: _propTypes.default.oneOfType([_propTypes.default.oneOfType([_propTypes.default.string.isRequired, _propTypes.default.element.isRequired]).isRequired, _propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.string.isRequired, _propTypes.default.element.isRequired]).isRequired).isRequired]),
393
402
 
394
- /**
395
- * Creates a semantic label ID for the `div[role="listbox"]` that's opened on click or keypress.
396
- * __Generated and passed down by `EuiSuperSelect`.__
397
- */
398
- screenReaderId: _propTypes.default.string,
399
-
400
403
  /**
401
404
  * Pass an array of options that must at least include:
402
405
  * `value`: storing unique value of item,
@@ -11,19 +11,15 @@ var _react = _interopRequireWildcard(require("react"));
11
11
 
12
12
  var _classnames = _interopRequireDefault(require("classnames"));
13
13
 
14
- var _accessibility = require("../../accessibility");
15
-
16
14
  var _form_control_layout = require("../form_control_layout");
17
15
 
18
- var _i18n = require("../../i18n");
19
-
20
16
  var _num_icons = require("../form_control_layout/_num_icons");
21
17
 
22
18
  var _eui_form_context = require("../eui_form_context");
23
19
 
24
20
  var _react2 = require("@emotion/react");
25
21
 
26
- var _excluded = ["className", "options", "id", "name", "fullWidth", "isLoading", "isInvalid", "readOnly", "defaultValue", "compressed", "value", "prepend", "append", "screenReaderId", "disabled"];
22
+ var _excluded = ["className", "options", "id", "name", "fullWidth", "isLoading", "isInvalid", "readOnly", "defaultValue", "compressed", "value", "placeholder", "prepend", "append", "disabled"];
27
23
 
28
24
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
29
25
 
@@ -57,9 +53,9 @@ var EuiSuperSelectControl = function EuiSuperSelectControl(props) {
57
53
  _props$compressed = props.compressed,
58
54
  compressed = _props$compressed === void 0 ? false : _props$compressed,
59
55
  value = props.value,
56
+ placeholder = props.placeholder,
60
57
  prepend = props.prepend,
61
58
  append = props.append,
62
- screenReaderId = props.screenReaderId,
63
59
  disabled = props.disabled,
64
60
  rest = _objectWithoutProperties(props, _excluded);
65
61
 
@@ -92,6 +88,7 @@ var EuiSuperSelectControl = function EuiSuperSelectControl(props) {
92
88
  selectedValue = selectedOption ? selectedOption.inputDisplay : selectedValue;
93
89
  }
94
90
 
91
+ var showPlaceholder = !!placeholder && !selectedValue;
95
92
  return (0, _react2.jsx)(_react.Fragment, null, (0, _react2.jsx)("input", {
96
93
  type: "hidden",
97
94
  id: id,
@@ -109,22 +106,16 @@ var EuiSuperSelectControl = function EuiSuperSelectControl(props) {
109
106
  compressed: compressed,
110
107
  prepend: prepend,
111
108
  append: append
112
- }, (0, _react2.jsx)(_accessibility.EuiScreenReaderOnly, null, (0, _react2.jsx)("span", {
113
- id: screenReaderId
114
- }, (0, _react2.jsx)(_i18n.EuiI18n, {
115
- token: "euiSuperSelectControl.selectAnOption",
116
- default: "Select an option: {selectedValue}, is selected",
117
- values: {
118
- selectedValue: selectedValue
119
- }
120
- }))), (0, _react2.jsx)("button", _extends({
109
+ }, (0, _react2.jsx)("button", _extends({
121
110
  type: "button",
122
111
  className: classes,
123
112
  "aria-haspopup": "listbox",
124
113
  disabled: disabled || readOnly // @ts-ignore Using as a selector only for mixin use
125
114
  ,
126
115
  readOnly: readOnly
127
- }, rest), selectedValue)));
116
+ }, rest), showPlaceholder ? (0, _react2.jsx)("span", {
117
+ className: "euiSuperSelectControl__placeholder"
118
+ }, placeholder) : selectedValue)));
128
119
  };
129
120
 
130
121
  exports.EuiSuperSelectControl = EuiSuperSelectControl;
@@ -33,7 +33,7 @@ var _i18n = require("../i18n");
33
33
 
34
34
  var _react2 = require("@emotion/react");
35
35
 
36
- var _excluded = ["children", "className", "options", "onChange", "onActiveOptionChange", "searchable", "searchProps", "singleSelection", "isLoading", "listProps", "renderOption", "height", "allowExclusions", "aria-label", "aria-describedby", "loadingMessage", "noMatchesMessage", "emptyMessage", "errorMessage", "isPreFiltered"],
36
+ 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"],
37
37
  _excluded2 = ["aria-label", "aria-describedby", "onChange", "defaultValue", "inputRef"],
38
38
  _excluded3 = ["aria-label", "aria-describedby", "isVirtualized", "rowHeight"];
39
39
 
@@ -43,6 +43,8 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
43
43
 
44
44
  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; }
45
45
 
46
+ function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
47
+
46
48
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
47
49
 
48
50
  function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
@@ -55,8 +57,6 @@ function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Sy
55
57
 
56
58
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
57
59
 
58
- function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
59
-
60
60
  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; }
61
61
 
62
62
  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) { _defineProperty(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; }
@@ -115,6 +115,16 @@ var EuiSelectable = /*#__PURE__*/function (_Component) {
115
115
 
116
116
  _defineProperty(_assertThisInitialized(_this), "listId", void 0);
117
117
 
118
+ _defineProperty(_assertThisInitialized(_this), "isFocusOnSearchOrListBox", function (target) {
119
+ var _this$optionsListRef$, _this$optionsListRef$2;
120
+
121
+ var searchHasFocus = _this.props.searchable && target === _this.inputRef;
122
+ 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;
123
+ var listBoxContainsFocus = target instanceof Node && (listBox === null || listBox === void 0 ? void 0 : listBox.contains(target));
124
+ var listBoxHasFocus = target === listBox || listBoxContainsFocus;
125
+ return searchHasFocus || listBoxHasFocus;
126
+ });
127
+
118
128
  _defineProperty(_assertThisInitialized(_this), "onMouseDown", function () {
119
129
  // Bypass onFocus when a click event originates from this.containerRef.
120
130
  // Prevents onFocus from scrolling away from a clicked option and negating the selection event.
@@ -122,7 +132,7 @@ var EuiSelectable = /*#__PURE__*/function (_Component) {
122
132
  _this.preventOnFocus = true;
123
133
  });
124
134
 
125
- _defineProperty(_assertThisInitialized(_this), "onFocus", function () {
135
+ _defineProperty(_assertThisInitialized(_this), "onFocus", function (event) {
126
136
  if (_this.preventOnFocus) {
127
137
  _this.preventOnFocus = false;
128
138
  return;
@@ -132,6 +142,10 @@ var EuiSelectable = /*#__PURE__*/function (_Component) {
132
142
  return;
133
143
  }
134
144
 
145
+ if (event && !_this.isFocusOnSearchOrListBox(event.target)) {
146
+ return;
147
+ }
148
+
135
149
  var firstSelected = _this.state.visibleOptions.findIndex(function (option) {
136
150
  return option.checked && !option.disabled && !option.isGroupLabel;
137
151
  });
@@ -152,7 +166,19 @@ var EuiSelectable = /*#__PURE__*/function (_Component) {
152
166
  });
153
167
 
154
168
  _defineProperty(_assertThisInitialized(_this), "onKeyDown", function (event) {
155
- var optionsList = _this.optionsListRef.current;
169
+ var optionsList = _this.optionsListRef.current; // Check if the user is interacting with something other than the
170
+ // searchbox or selection list. If so, the user may be attempting to
171
+ // interact with the search clear button or a totally custom button,
172
+ // and listbox keyboard navigation/selection should not be triggered.
173
+
174
+ if (!_this.isFocusOnSearchOrListBox(event.target)) {
175
+ _this.setState({
176
+ activeOptionIndex: undefined,
177
+ isFocused: false
178
+ });
179
+
180
+ return;
181
+ }
156
182
 
157
183
  switch (event.key) {
158
184
  case _services.keys.ARROW_UP:
@@ -177,20 +203,10 @@ var EuiSelectable = /*#__PURE__*/function (_Component) {
177
203
  case _services.keys.ENTER:
178
204
  case _services.keys.SPACE:
179
205
  if (_this.props.searchable) {
180
- var _this$optionsListRef$, _this$optionsListRef$2;
181
-
182
206
  // For searchable instances, SPACE is reserved as a character for filtering
183
207
  // via the input box, and as such only ENTER will toggle selection.
184
208
  if (event.target === _this.inputRef && event.key === _services.keys.SPACE) {
185
209
  return;
186
- } // Check if the user is interacting with something other than the
187
- // searchbox or selection list. If not, the user is attempting to
188
- // interact with an internal button such as the clear button,
189
- // and the event should not be altered.
190
-
191
-
192
- 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))) {
193
- return;
194
210
  }
195
211
  }
196
212
 
@@ -281,10 +297,8 @@ var EuiSelectable = /*#__PURE__*/function (_Component) {
281
297
  });
282
298
 
283
299
  _defineProperty(_assertThisInitialized(_this), "onContainerBlur", function (e) {
284
- var _e$relatedTarget, _e$relatedTarget$firs;
285
-
286
300
  // Ignore blur events when moving from search to option to avoid activeOptionIndex conflicts
287
- 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) {
301
+ if (_this.isFocusOnSearchOrListBox(e.relatedTarget)) {
288
302
  return;
289
303
  }
290
304
 
@@ -391,6 +405,7 @@ var EuiSelectable = /*#__PURE__*/function (_Component) {
391
405
  noMatchesMessage = _this$props3.noMatchesMessage,
392
406
  emptyMessage = _this$props3.emptyMessage,
393
407
  errorMessage = _this$props3.errorMessage,
408
+ selectableScreenReaderText = _this$props3.selectableScreenReaderText,
394
409
  isPreFiltered = _this$props3.isPreFiltered,
395
410
  rest = _objectWithoutProperties(_this$props3, _excluded);
396
411
 
@@ -526,10 +541,15 @@ var EuiSelectable = /*#__PURE__*/function (_Component) {
526
541
  var searchAccessibleName = getAccessibleName(searchProps, this.messageContentId);
527
542
  var searchHasAccessibleName = Boolean(Object.keys(searchAccessibleName).length);
528
543
  var search = searchable ? (0, _react2.jsx)(_i18n.EuiI18n, {
529
- token: "euiSelectable.placeholderName",
530
- default: "Filter options"
531
- }, function (placeholderName) {
532
- return (0, _react2.jsx)(_selectable_search.EuiSelectableSearch, _extends({
544
+ tokens: ['euiSelectable.screenReaderInstructions', 'euiSelectable.placeholderName'],
545
+ defaults: ['Use the Up and Down arrow keys to move focus over options. Press Enter to select. Press Escape to collapse options.', 'Filter options']
546
+ }, function (_ref4) {
547
+ var _ref5 = _slicedToArray(_ref4, 2),
548
+ screenReaderInstructions = _ref5[0],
549
+ placeholderName = _ref5[1];
550
+
551
+ return (0, _react2.jsx)(_react.default.Fragment, null, (0, _react2.jsx)(_selectable_search.EuiSelectableSearch, _extends({
552
+ "aria-describedby": listAriaDescribedbyId,
533
553
  key: "listSearch",
534
554
  options: options,
535
555
  value: searchValue,
@@ -548,15 +568,17 @@ var EuiSelectable = /*#__PURE__*/function (_Component) {
548
568
  }
549
569
  }, searchHasAccessibleName ? searchAccessibleName : {
550
570
  'aria-label': placeholderName
551
- }, cleanedSearchProps));
571
+ }, cleanedSearchProps)), (0, _react2.jsx)(_accessibility.EuiScreenReaderOnly, null, (0, _react2.jsx)("p", {
572
+ id: listAriaDescribedbyId
573
+ }, selectableScreenReaderText, " ", screenReaderInstructions)));
552
574
  }) : undefined;
553
575
  var resultsLength = visibleOptions.filter(function (option) {
554
576
  return !option.disabled;
555
577
  }).length;
556
578
  var listScreenReaderStatus = searchable && (0, _react2.jsx)(_i18n.EuiI18n, {
557
579
  token: "euiSelectable.searchResults",
558
- default: function _default(_ref4) {
559
- var resultsLength = _ref4.resultsLength;
580
+ default: function _default(_ref6) {
581
+ var resultsLength = _ref6.resultsLength;
560
582
  return "".concat(resultsLength, " result").concat(resultsLength === 1 ? '' : 's', " available");
561
583
  },
562
584
  values: {
@@ -567,18 +589,12 @@ var EuiSelectable = /*#__PURE__*/function (_Component) {
567
589
  var listAccessibleName = getAccessibleName(listProps, listAriaDescribedbyId);
568
590
  var listHasAccessibleName = Boolean(Object.keys(listAccessibleName).length);
569
591
  var list = (0, _react2.jsx)(_i18n.EuiI18n, {
570
- tokens: ['euiSelectable.screenReaderInstructions', 'euiSelectable.placeholderName'],
571
- defaults: ['Use up and down arrows to move focus over options. Enter to select. Escape to collapse options.', 'Filter options']
572
- }, function (_ref5) {
573
- var _ref6 = _slicedToArray(_ref5, 2),
574
- placeholderName = _ref6[0],
575
- screenReaderInstructions = _ref6[1];
576
-
592
+ token: "euiSelectable.placeholderName",
593
+ default: "Filter options"
594
+ }, function (placeholderName) {
577
595
  return (0, _react2.jsx)(_react.default.Fragment, null, searchable && (0, _react2.jsx)(_accessibility.EuiScreenReaderLive, {
578
596
  isActive: messageContent != null || activeOptionIndex != null
579
- }, messageContent || listScreenReaderStatus), (0, _react2.jsx)(_accessibility.EuiScreenReaderOnly, null, (0, _react2.jsx)("p", {
580
- id: listAriaDescribedbyId
581
- }, screenReaderInstructions)), messageContent ? (0, _react2.jsx)(_selectable_message.EuiSelectableMessage, {
597
+ }, messageContent || listScreenReaderStatus), messageContent ? (0, _react2.jsx)(_selectable_message.EuiSelectableMessage, {
582
598
  "data-test-subj": "euiSelectableMessage",
583
599
  id: _this2.messageContentId,
584
600
  bordered: listProps && listProps.bordered
@@ -818,5 +834,12 @@ EuiSelectable.propTypes = {
818
834
  * Control whether or not options get filtered internally or if consumer will filter
819
835
  * Default: false
820
836
  */
821
- isPreFiltered: _propTypes.default.bool
837
+ isPreFiltered: _propTypes.default.bool,
838
+
839
+ /**
840
+ * Optional screen reader instructions to announce upon focus/interaction. This text is read out
841
+ * after the `EuiSelectable` label and a brief pause, but before the default keyboard instructions for
842
+ * interacting with a selectable are read out.
843
+ */
844
+ selectableScreenReaderText: _propTypes.default.string
822
845
  };
@@ -126,7 +126,7 @@ var EuiSelectableList = /*#__PURE__*/function (_Component) {
126
126
  }
127
127
 
128
128
  if (typeof ariaDescribedby === 'string') {
129
- ref.setAttribute('aria-labelledby', ariaDescribedby);
129
+ ref.setAttribute('aria-describedby', ariaDescribedby);
130
130
  }
131
131
  }
132
132
  });
@@ -13,10 +13,6 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
13
13
 
14
14
  var _classnames = _interopRequireDefault(require("classnames"));
15
15
 
16
- var _services = require("../../services");
17
-
18
- var _accessibility = require("../accessibility");
19
-
20
16
  var _icon = require("../icon");
21
17
 
22
18
  var _i18n = require("../i18n");
@@ -149,14 +145,11 @@ var EuiSuggest = function EuiSuggest(_ref) {
149
145
  var searchOnChange = function searchOnChange(value) {
150
146
  onSearch === null || onSearch === void 0 ? void 0 : onSearch(value);
151
147
  };
152
-
153
- var inputDescribedbyId = (0, _services.useGeneratedHtmlId)({
154
- prefix: id
155
- });
156
148
  /**
157
149
  * Status
158
150
  */
159
151
 
152
+
160
153
  var icon = '';
161
154
  var color = '';
162
155
 
@@ -245,6 +238,7 @@ var EuiSuggest = function EuiSuggest(_ref) {
245
238
  }
246
239
  }, [onItemClick, suggestions]);
247
240
  return (0, _react2.jsx)(_react.default.Fragment, null, (0, _react2.jsx)(_selectable.EuiSelectable, {
241
+ selectableScreenReaderText: stateMessage,
248
242
  singleSelection: true,
249
243
  height: isVirtualized ? undefined : 'full',
250
244
  options: suggestionList,
@@ -269,7 +263,6 @@ var EuiSuggest = function EuiSuggest(_ref) {
269
263
  onBlur: searchOnBlur,
270
264
  onInput: searchOnInput,
271
265
  onChange: searchOnChange,
272
- 'aria-describedby': inputDescribedbyId,
273
266
  'aria-label': ariaLabel,
274
267
  'aria-labelledby': labelId
275
268
  }, rest)
@@ -293,9 +286,7 @@ var EuiSuggest = function EuiSuggest(_ref) {
293
286
  },
294
287
  className: "eui-yScroll"
295
288
  }, list));
296
- }), (0, _react2.jsx)(_accessibility.EuiScreenReaderOnly, null, (0, _react2.jsx)("p", {
297
- id: inputDescribedbyId
298
- }, stateMessage)));
289
+ }));
299
290
  };
300
291
 
301
292
  exports.EuiSuggest = EuiSuggest;
@@ -326,7 +326,8 @@ export var EuiDataGridCell = /*#__PURE__*/function (_Component) {
326
326
  if (_this.isPopoverOpen()) {
327
327
  var _this$props$popoverCo2 = _this.props.popoverContext,
328
328
  setPopoverAnchor = _this$props$popoverCo2.setPopoverAnchor,
329
- setPopoverContent = _this$props$popoverCo2.setPopoverContent; // Set popover anchor
329
+ setPopoverContent = _this$props$popoverCo2.setPopoverContent,
330
+ setCellPopoverProps = _this$props$popoverCo2.setCellPopoverProps; // Set popover anchor
330
331
 
331
332
  var cellAnchorEl = _this.popoverAnchorRef.current;
332
333
  setPopoverAnchor(cellAnchorEl); // Set popover contents with cell content
@@ -353,7 +354,8 @@ export var EuiDataGridCell = /*#__PURE__*/function (_Component) {
353
354
  cellActions: ___EmotionJSX(EuiDataGridCellPopoverActions, _extends({}, sharedProps, {
354
355
  column: column
355
356
  })),
356
- DefaultCellPopover: DefaultCellPopover
357
+ DefaultCellPopover: DefaultCellPopover,
358
+ setCellPopoverProps: setCellPopoverProps
357
359
  }), ___EmotionJSX(CellElement, _extends({}, sharedProps, {
358
360
  setCellProps: _this.setCellProps,
359
361
  isExpandable: true,
@@ -1,5 +1,11 @@
1
+ import _extends from "@babel/runtime/helpers/extends";
2
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
1
3
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
2
4
 
5
+ 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; }
6
+
7
+ 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) { _defineProperty(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; }
8
+
3
9
  /*
4
10
  * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
5
11
  * or more contributor license agreements. Licensed under the Elastic License
@@ -8,6 +14,7 @@ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
8
14
  * Side Public License, v 1.
9
15
  */
10
16
  import React, { createContext, useState, useCallback } from 'react';
17
+ import classNames from 'classnames';
11
18
  import { keys } from '../../../services';
12
19
  import { EuiWrappingPopover } from '../../popover';
13
20
  export var DataGridCellPopoverContext = /*#__PURE__*/createContext({
@@ -19,9 +26,12 @@ export var DataGridCellPopoverContext = /*#__PURE__*/createContext({
19
26
  openCellPopover: function openCellPopover() {},
20
27
  closeCellPopover: function closeCellPopover() {},
21
28
  setPopoverAnchor: function setPopoverAnchor() {},
22
- setPopoverContent: function setPopoverContent() {}
29
+ setPopoverContent: function setPopoverContent() {},
30
+ setCellPopoverProps: function setCellPopoverProps() {}
23
31
  });
24
32
  export var useCellPopover = function useCellPopover() {
33
+ var _cellPopoverProps$pan;
34
+
25
35
  // Current open state & cell location are handled here
26
36
  var _useState = useState(false),
27
37
  _useState2 = _slicedToArray(_useState, 2),
@@ -45,7 +55,13 @@ export var useCellPopover = function useCellPopover() {
45
55
  var _useState7 = useState(),
46
56
  _useState8 = _slicedToArray(_useState7, 2),
47
57
  popoverContent = _useState8[0],
48
- setPopoverContent = _useState8[1];
58
+ setPopoverContent = _useState8[1]; // Allow customization of most (not all) popover props by consumers
59
+
60
+
61
+ var _useState9 = useState({}),
62
+ _useState10 = _slicedToArray(_useState9, 2),
63
+ cellPopoverProps = _useState10[0],
64
+ setCellPopoverProps = _useState10[1];
49
65
 
50
66
  var closeCellPopover = useCallback(function () {
51
67
  return setPopoverIsOpen(false);
@@ -75,20 +91,20 @@ export var useCellPopover = function useCellPopover() {
75
91
  openCellPopover: openCellPopover,
76
92
  cellLocation: cellLocation,
77
93
  setPopoverAnchor: setPopoverAnchor,
78
- setPopoverContent: setPopoverContent
94
+ setPopoverContent: setPopoverContent,
95
+ setCellPopoverProps: setCellPopoverProps
79
96
  }; // Note that this popover is rendered once at the top grid level, rather than one popover per cell
80
97
 
81
- var cellPopover = popoverIsOpen && popoverAnchor && ___EmotionJSX(EuiWrappingPopover, {
98
+ var cellPopover = popoverIsOpen && popoverAnchor && ___EmotionJSX(EuiWrappingPopover, _extends({
82
99
  isOpen: popoverIsOpen,
83
- button: popoverAnchor,
84
100
  display: "block",
85
101
  hasArrow: false,
86
- panelPaddingSize: "s",
87
- panelClassName: "euiDataGridRowCell__popover",
88
- panelProps: {
102
+ panelPaddingSize: "s"
103
+ }, cellPopoverProps, {
104
+ panelProps: _objectSpread({
89
105
  'data-test-subj': 'euiDataGridExpansionPopover'
90
- },
91
- closePopover: closeCellPopover,
106
+ }, cellPopoverProps.panelProps || {}),
107
+ panelClassName: classNames('euiDataGridRowCell__popover', cellPopoverProps.panelClassName, (_cellPopoverProps$pan = cellPopoverProps.panelProps) === null || _cellPopoverProps$pan === void 0 ? void 0 : _cellPopoverProps$pan.className),
92
108
  onKeyDown: function onKeyDown(event) {
93
109
  if (event.key === keys.F2 || event.key === keys.ESCAPE) {
94
110
  event.preventDefault();
@@ -99,8 +115,10 @@ export var useCellPopover = function useCellPopover() {
99
115
  return popoverAnchor.parentElement.focus();
100
116
  });
101
117
  }
102
- }
103
- }, popoverContent);
118
+ },
119
+ button: popoverAnchor,
120
+ closePopover: closeCellPopover
121
+ }), popoverContent);
104
122
 
105
123
  return {
106
124
  cellPopoverContext: cellPopoverContext,
@@ -119,7 +119,8 @@ export var EuiAutoRefreshButton = function EuiAutoRefreshButton(_ref2) {
119
119
  isOpen: isPopoverOpen,
120
120
  closePopover: function closePopover() {
121
121
  setIsPopoverOpen(false);
122
- }
122
+ },
123
+ popoverScreenReaderText: isPaused ? autoRefeshLabelOff : autoRefeshLabelOn
123
124
  }, ___EmotionJSX(EuiRefreshInterval, {
124
125
  onRefreshChange: onRefreshChange,
125
126
  isPaused: isPaused,