@elastic/eui 76.0.2 → 76.2.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 (107) hide show
  1. package/dist/eui_theme_dark.css +37 -6
  2. package/dist/eui_theme_dark.min.css +1 -1
  3. package/dist/eui_theme_light.css +37 -6
  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_body.js +19 -395
  7. package/es/components/datagrid/body/data_grid_body_custom.js +908 -0
  8. package/es/components/datagrid/body/data_grid_body_virtualized.js +1031 -0
  9. package/es/components/datagrid/body/data_grid_cell.js +16 -12
  10. package/es/components/datagrid/body/data_grid_cell_popover.js +32 -12
  11. package/es/components/datagrid/body/data_grid_cell_wrapper.js +132 -0
  12. package/es/components/datagrid/body/header/data_grid_header_row.js +3 -2
  13. package/es/components/datagrid/data_grid.js +21 -5
  14. package/es/components/datagrid/data_grid_types.js +18 -1
  15. package/es/components/datagrid/utils/row_heights.js +111 -31
  16. package/es/components/date_picker/auto_refresh/auto_refresh.js +2 -1
  17. package/es/components/form/range/dual_range.js +14 -7
  18. package/es/components/form/range/range.js +10 -3
  19. package/es/components/form/super_select/super_select.js +21 -18
  20. package/es/components/form/super_select/super_select_control.js +7 -14
  21. package/es/components/selectable/selectable.js +59 -36
  22. package/es/components/selectable/selectable_list/selectable_list.js +1 -1
  23. package/es/components/suggest/suggest.js +3 -10
  24. package/eui.d.ts +253 -146
  25. package/i18ntokens.json +89 -57
  26. package/lib/components/color_picker/color_palette_picker/color_palette_picker.js +5 -6
  27. package/lib/components/datagrid/body/data_grid_body.js +19 -416
  28. package/lib/components/datagrid/body/data_grid_body_custom.js +927 -0
  29. package/lib/components/datagrid/body/data_grid_body_virtualized.js +1059 -0
  30. package/lib/components/datagrid/body/data_grid_cell.js +16 -12
  31. package/lib/components/datagrid/body/data_grid_cell_popover.js +35 -12
  32. package/lib/components/datagrid/body/data_grid_cell_wrapper.js +147 -0
  33. package/lib/components/datagrid/body/header/data_grid_header_row.js +4 -2
  34. package/lib/components/datagrid/data_grid.js +21 -4
  35. package/lib/components/datagrid/data_grid_types.js +22 -1
  36. package/lib/components/datagrid/utils/row_heights.js +116 -33
  37. package/lib/components/date_picker/auto_refresh/auto_refresh.js +2 -1
  38. package/lib/components/form/range/dual_range.js +14 -7
  39. package/lib/components/form/range/range.js +10 -3
  40. package/lib/components/form/super_select/super_select.js +21 -18
  41. package/lib/components/form/super_select/super_select_control.js +7 -16
  42. package/lib/components/selectable/selectable.js +59 -36
  43. package/lib/components/selectable/selectable_list/selectable_list.js +1 -1
  44. package/lib/components/suggest/suggest.js +3 -12
  45. package/optimize/es/components/datagrid/body/data_grid_body.js +17 -387
  46. package/optimize/es/components/datagrid/body/data_grid_body_custom.js +176 -0
  47. package/optimize/es/components/datagrid/body/data_grid_body_virtualized.js +311 -0
  48. package/optimize/es/components/datagrid/body/data_grid_cell.js +12 -9
  49. package/optimize/es/components/datagrid/body/data_grid_cell_popover.js +30 -12
  50. package/optimize/es/components/datagrid/body/data_grid_cell_wrapper.js +127 -0
  51. package/optimize/es/components/datagrid/body/header/data_grid_header_row.js +3 -2
  52. package/optimize/es/components/datagrid/data_grid.js +8 -5
  53. package/optimize/es/components/datagrid/data_grid_types.js +18 -1
  54. package/optimize/es/components/datagrid/utils/row_heights.js +100 -31
  55. package/optimize/es/components/date_picker/auto_refresh/auto_refresh.js +2 -1
  56. package/optimize/es/components/form/range/dual_range.js +14 -7
  57. package/optimize/es/components/form/range/range.js +10 -3
  58. package/optimize/es/components/form/super_select/super_select.js +16 -12
  59. package/optimize/es/components/form/super_select/super_select_control.js +7 -14
  60. package/optimize/es/components/selectable/selectable.js +50 -34
  61. package/optimize/es/components/selectable/selectable_list/selectable_list.js +1 -1
  62. package/optimize/es/components/suggest/suggest.js +3 -10
  63. package/optimize/lib/components/datagrid/body/data_grid_body.js +16 -409
  64. package/optimize/lib/components/datagrid/body/data_grid_body_custom.js +198 -0
  65. package/optimize/lib/components/datagrid/body/data_grid_body_virtualized.js +342 -0
  66. package/optimize/lib/components/datagrid/body/data_grid_cell.js +12 -9
  67. package/optimize/lib/components/datagrid/body/data_grid_cell_popover.js +33 -19
  68. package/optimize/lib/components/datagrid/body/data_grid_cell_wrapper.js +144 -0
  69. package/optimize/lib/components/datagrid/body/header/data_grid_header_row.js +4 -2
  70. package/optimize/lib/components/datagrid/data_grid.js +8 -4
  71. package/optimize/lib/components/datagrid/data_grid_types.js +22 -1
  72. package/optimize/lib/components/datagrid/utils/row_heights.js +103 -37
  73. package/optimize/lib/components/date_picker/auto_refresh/auto_refresh.js +2 -1
  74. package/optimize/lib/components/form/range/dual_range.js +14 -7
  75. package/optimize/lib/components/form/range/range.js +10 -3
  76. package/optimize/lib/components/form/super_select/super_select.js +16 -11
  77. package/optimize/lib/components/form/super_select/super_select_control.js +7 -16
  78. package/optimize/lib/components/selectable/selectable.js +50 -35
  79. package/optimize/lib/components/selectable/selectable_list/selectable_list.js +1 -1
  80. package/optimize/lib/components/suggest/suggest.js +3 -12
  81. package/package.json +1 -1
  82. package/src/components/datagrid/_data_grid.scss +7 -0
  83. package/src/components/datagrid/_data_grid_data_row.scss +1 -0
  84. package/src/components/datagrid/body/footer/_data_grid_footer_row.scss +1 -0
  85. package/src/components/datagrid/body/header/_data_grid_header_row.scss +1 -0
  86. package/src/components/form/super_select/_super_select_control.scss +4 -0
  87. package/src/components/selectable/selectable_list/_selectable_list.scss +10 -3
  88. package/src/themes/amsterdam/global_styling/mixins/_states.scss +17 -8
  89. package/test-env/components/color_picker/color_palette_picker/color_palette_picker.js +5 -6
  90. package/test-env/components/datagrid/body/data_grid_body.js +18 -415
  91. package/test-env/components/datagrid/body/data_grid_body_custom.js +908 -0
  92. package/test-env/components/datagrid/body/data_grid_body_virtualized.js +1057 -0
  93. package/test-env/components/datagrid/body/data_grid_cell.js +16 -12
  94. package/test-env/components/datagrid/body/data_grid_cell_popover.js +33 -19
  95. package/test-env/components/datagrid/body/data_grid_cell_wrapper.js +144 -0
  96. package/test-env/components/datagrid/body/header/data_grid_header_row.js +4 -2
  97. package/test-env/components/datagrid/data_grid.js +21 -4
  98. package/test-env/components/datagrid/data_grid_types.js +22 -1
  99. package/test-env/components/datagrid/utils/row_heights.js +103 -37
  100. package/test-env/components/date_picker/auto_refresh/auto_refresh.js +2 -1
  101. package/test-env/components/form/range/dual_range.js +14 -7
  102. package/test-env/components/form/range/range.js +10 -3
  103. package/test-env/components/form/super_select/super_select.js +21 -17
  104. package/test-env/components/form/super_select/super_select_control.js +7 -16
  105. package/test-env/components/selectable/selectable.js +58 -36
  106. package/test-env/components/selectable/selectable_list/selectable_list.js +1 -1
  107. package/test-env/components/suggest/suggest.js +3 -12
@@ -9,10 +9,10 @@ Object.defineProperty(exports, "__esModule", {
9
9
  });
10
10
  exports.EuiSelectable = void 0;
11
11
 
12
- var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
13
-
14
12
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
15
13
 
14
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
15
+
16
16
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
17
17
 
18
18
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
@@ -55,7 +55,7 @@ var _i18n = require("../i18n");
55
55
 
56
56
  var _react2 = require("@emotion/react");
57
57
 
58
- var _excluded = ["children", "className", "options", "onChange", "onActiveOptionChange", "searchable", "searchProps", "singleSelection", "isLoading", "listProps", "renderOption", "height", "allowExclusions", "aria-label", "aria-describedby", "loadingMessage", "noMatchesMessage", "emptyMessage", "errorMessage", "isPreFiltered"],
58
+ 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"],
59
59
  _excluded2 = ["aria-label", "aria-describedby", "onChange", "defaultValue", "inputRef"],
60
60
  _excluded3 = ["aria-label", "aria-describedby", "isVirtualized", "rowHeight"];
61
61
 
@@ -90,13 +90,22 @@ var EuiSelectable = /*#__PURE__*/function (_Component) {
90
90
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "rootId", void 0);
91
91
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "messageContentId", void 0);
92
92
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "listId", void 0);
93
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "isFocusOnSearchOrListBox", function (target) {
94
+ var _this$optionsListRef$, _this$optionsListRef$2;
95
+
96
+ var searchHasFocus = _this.props.searchable && target === _this.inputRef;
97
+ 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;
98
+ var listBoxContainsFocus = target instanceof Node && (listBox === null || listBox === void 0 ? void 0 : listBox.contains(target));
99
+ var listBoxHasFocus = target === listBox || listBoxContainsFocus;
100
+ return searchHasFocus || listBoxHasFocus;
101
+ });
93
102
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "onMouseDown", function () {
94
103
  // Bypass onFocus when a click event originates from this.containerRef.
95
104
  // Prevents onFocus from scrolling away from a clicked option and negating the selection event.
96
105
  // https://github.com/elastic/eui/issues/4147
97
106
  _this.preventOnFocus = true;
98
107
  });
99
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "onFocus", function () {
108
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "onFocus", function (event) {
100
109
  if (_this.preventOnFocus) {
101
110
  _this.preventOnFocus = false;
102
111
  return;
@@ -106,6 +115,10 @@ var EuiSelectable = /*#__PURE__*/function (_Component) {
106
115
  return;
107
116
  }
108
117
 
118
+ if (event && !_this.isFocusOnSearchOrListBox(event.target)) {
119
+ return;
120
+ }
121
+
109
122
  var firstSelected = _this.state.visibleOptions.findIndex(function (option) {
110
123
  return option.checked && !option.disabled && !option.isGroupLabel;
111
124
  });
@@ -125,7 +138,19 @@ var EuiSelectable = /*#__PURE__*/function (_Component) {
125
138
  }
126
139
  });
127
140
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "onKeyDown", function (event) {
128
- var optionsList = _this.optionsListRef.current;
141
+ var optionsList = _this.optionsListRef.current; // Check if the user is interacting with something other than the
142
+ // searchbox or selection list. If so, the user may be attempting to
143
+ // interact with the search clear button or a totally custom button,
144
+ // and listbox keyboard navigation/selection should not be triggered.
145
+
146
+ if (!_this.isFocusOnSearchOrListBox(event.target)) {
147
+ _this.setState({
148
+ activeOptionIndex: undefined,
149
+ isFocused: false
150
+ });
151
+
152
+ return;
153
+ }
129
154
 
130
155
  switch (event.key) {
131
156
  case _services.keys.ARROW_UP:
@@ -150,20 +175,10 @@ var EuiSelectable = /*#__PURE__*/function (_Component) {
150
175
  case _services.keys.ENTER:
151
176
  case _services.keys.SPACE:
152
177
  if (_this.props.searchable) {
153
- var _this$optionsListRef$, _this$optionsListRef$2;
154
-
155
178
  // For searchable instances, SPACE is reserved as a character for filtering
156
179
  // via the input box, and as such only ENTER will toggle selection.
157
180
  if (event.target === _this.inputRef && event.key === _services.keys.SPACE) {
158
181
  return;
159
- } // Check if the user is interacting with something other than the
160
- // searchbox or selection list. If not, the user is attempting to
161
- // interact with an internal button such as the clear button,
162
- // and the event should not be altered.
163
-
164
-
165
- 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))) {
166
- return;
167
182
  }
168
183
  }
169
184
 
@@ -251,10 +266,8 @@ var EuiSelectable = /*#__PURE__*/function (_Component) {
251
266
  (_this$props$searchPro = _this.props.searchProps) === null || _this$props$searchPro === void 0 ? void 0 : (_this$props$searchPro2 = _this$props$searchPro.onChange) === null || _this$props$searchPro2 === void 0 ? void 0 : _this$props$searchPro2.call(_this$props$searchPro, searchValue, visibleOptions);
252
267
  });
253
268
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "onContainerBlur", function (e) {
254
- var _e$relatedTarget, _e$relatedTarget$firs;
255
-
256
269
  // Ignore blur events when moving from search to option to avoid activeOptionIndex conflicts
257
- 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) {
270
+ if (_this.isFocusOnSearchOrListBox(e.relatedTarget)) {
258
271
  return;
259
272
  }
260
273
 
@@ -357,6 +370,7 @@ var EuiSelectable = /*#__PURE__*/function (_Component) {
357
370
  noMatchesMessage = _this$props3.noMatchesMessage,
358
371
  emptyMessage = _this$props3.emptyMessage,
359
372
  errorMessage = _this$props3.errorMessage,
373
+ selectableScreenReaderText = _this$props3.selectableScreenReaderText,
360
374
  isPreFiltered = _this$props3.isPreFiltered,
361
375
  rest = (0, _objectWithoutProperties2.default)(_this$props3, _excluded);
362
376
  var _this$state = this.state,
@@ -491,10 +505,15 @@ var EuiSelectable = /*#__PURE__*/function (_Component) {
491
505
  var searchAccessibleName = getAccessibleName(searchProps, this.messageContentId);
492
506
  var searchHasAccessibleName = Boolean(Object.keys(searchAccessibleName).length);
493
507
  var search = searchable ? (0, _react2.jsx)(_i18n.EuiI18n, {
494
- token: "euiSelectable.placeholderName",
495
- default: "Filter options"
496
- }, function (placeholderName) {
497
- return (0, _react2.jsx)(_selectable_search.EuiSelectableSearch, (0, _extends2.default)({
508
+ tokens: ['euiSelectable.screenReaderInstructions', 'euiSelectable.placeholderName'],
509
+ defaults: ['Use the Up and Down arrow keys to move focus over options. Press Enter to select. Press Escape to collapse options.', 'Filter options']
510
+ }, function (_ref4) {
511
+ var _ref5 = (0, _slicedToArray2.default)(_ref4, 2),
512
+ screenReaderInstructions = _ref5[0],
513
+ placeholderName = _ref5[1];
514
+
515
+ return (0, _react2.jsx)(_react.default.Fragment, null, (0, _react2.jsx)(_selectable_search.EuiSelectableSearch, (0, _extends2.default)({
516
+ "aria-describedby": listAriaDescribedbyId,
498
517
  key: "listSearch",
499
518
  options: options,
500
519
  value: searchValue,
@@ -513,15 +532,17 @@ var EuiSelectable = /*#__PURE__*/function (_Component) {
513
532
  }
514
533
  }, searchHasAccessibleName ? searchAccessibleName : {
515
534
  'aria-label': placeholderName
516
- }, cleanedSearchProps));
535
+ }, cleanedSearchProps)), (0, _react2.jsx)(_accessibility.EuiScreenReaderOnly, null, (0, _react2.jsx)("p", {
536
+ id: listAriaDescribedbyId
537
+ }, selectableScreenReaderText, " ", screenReaderInstructions)));
517
538
  }) : undefined;
518
539
  var resultsLength = visibleOptions.filter(function (option) {
519
540
  return !option.disabled;
520
541
  }).length;
521
542
  var listScreenReaderStatus = searchable && (0, _react2.jsx)(_i18n.EuiI18n, {
522
543
  token: "euiSelectable.searchResults",
523
- default: function _default(_ref4) {
524
- var resultsLength = _ref4.resultsLength;
544
+ default: function _default(_ref6) {
545
+ var resultsLength = _ref6.resultsLength;
525
546
  return "".concat(resultsLength, " result").concat(resultsLength === 1 ? '' : 's', " available");
526
547
  },
527
548
  values: {
@@ -532,18 +553,12 @@ var EuiSelectable = /*#__PURE__*/function (_Component) {
532
553
  var listAccessibleName = getAccessibleName(listProps, listAriaDescribedbyId);
533
554
  var listHasAccessibleName = Boolean(Object.keys(listAccessibleName).length);
534
555
  var list = (0, _react2.jsx)(_i18n.EuiI18n, {
535
- tokens: ['euiSelectable.screenReaderInstructions', 'euiSelectable.placeholderName'],
536
- defaults: ['Use up and down arrows to move focus over options. Enter to select. Escape to collapse options.', 'Filter options']
537
- }, function (_ref5) {
538
- var _ref6 = (0, _slicedToArray2.default)(_ref5, 2),
539
- placeholderName = _ref6[0],
540
- screenReaderInstructions = _ref6[1];
541
-
556
+ token: "euiSelectable.placeholderName",
557
+ default: "Filter options"
558
+ }, function (placeholderName) {
542
559
  return (0, _react2.jsx)(_react.default.Fragment, null, searchable && (0, _react2.jsx)(_accessibility.EuiScreenReaderLive, {
543
560
  isActive: messageContent != null || activeOptionIndex != null
544
- }, messageContent || listScreenReaderStatus), (0, _react2.jsx)(_accessibility.EuiScreenReaderOnly, null, (0, _react2.jsx)("p", {
545
- id: listAriaDescribedbyId
546
- }, screenReaderInstructions)), messageContent ? (0, _react2.jsx)(_selectable_message.EuiSelectableMessage, {
561
+ }, messageContent || listScreenReaderStatus), messageContent ? (0, _react2.jsx)(_selectable_message.EuiSelectableMessage, {
547
562
  "data-test-subj": "euiSelectableMessage",
548
563
  id: _this2.messageContentId,
549
564
  bordered: listProps && listProps.bordered
@@ -780,5 +795,12 @@ EuiSelectable.propTypes = {
780
795
  * Control whether or not options get filtered internally or if consumer will filter
781
796
  * Default: false
782
797
  */
783
- isPreFiltered: _propTypes.default.bool
798
+ isPreFiltered: _propTypes.default.bool,
799
+
800
+ /**
801
+ * Optional screen reader instructions to announce upon focus/interaction. This text is read out
802
+ * after the `EuiSelectable` label and a brief pause, but before the default keyboard instructions for
803
+ * interacting with a selectable are read out.
804
+ */
805
+ selectableScreenReaderText: _propTypes.default.string
784
806
  };
@@ -114,7 +114,7 @@ var EuiSelectableList = /*#__PURE__*/function (_Component) {
114
114
  }
115
115
 
116
116
  if (typeof ariaDescribedby === 'string') {
117
- ref.setAttribute('aria-labelledby', ariaDescribedby);
117
+ ref.setAttribute('aria-describedby', ariaDescribedby);
118
118
  }
119
119
  }
120
120
  });
@@ -21,10 +21,6 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
21
21
 
22
22
  var _classnames = _interopRequireDefault(require("classnames"));
23
23
 
24
- var _services = require("../../services");
25
-
26
- var _accessibility = require("../accessibility");
27
-
28
24
  var _icon = require("../icon");
29
25
 
30
26
  var _i18n = require("../i18n");
@@ -137,14 +133,11 @@ var EuiSuggest = function EuiSuggest(_ref) {
137
133
  var searchOnChange = function searchOnChange(value) {
138
134
  onSearch === null || onSearch === void 0 ? void 0 : onSearch(value);
139
135
  };
140
-
141
- var inputDescribedbyId = (0, _services.useGeneratedHtmlId)({
142
- prefix: id
143
- });
144
136
  /**
145
137
  * Status
146
138
  */
147
139
 
140
+
148
141
  var icon = '';
149
142
  var color = '';
150
143
 
@@ -233,6 +226,7 @@ var EuiSuggest = function EuiSuggest(_ref) {
233
226
  }
234
227
  }, [onItemClick, suggestions]);
235
228
  return (0, _react2.jsx)(_react.default.Fragment, null, (0, _react2.jsx)(_selectable.EuiSelectable, {
229
+ selectableScreenReaderText: stateMessage,
236
230
  singleSelection: true,
237
231
  height: isVirtualized ? undefined : 'full',
238
232
  options: suggestionList,
@@ -257,7 +251,6 @@ var EuiSuggest = function EuiSuggest(_ref) {
257
251
  onBlur: searchOnBlur,
258
252
  onInput: searchOnInput,
259
253
  onChange: searchOnChange,
260
- 'aria-describedby': inputDescribedbyId,
261
254
  'aria-label': ariaLabel,
262
255
  'aria-labelledby': labelId
263
256
  }, rest)
@@ -281,9 +274,7 @@ var EuiSuggest = function EuiSuggest(_ref) {
281
274
  },
282
275
  className: "eui-yScroll"
283
276
  }, list));
284
- }), (0, _react2.jsx)(_accessibility.EuiScreenReaderOnly, null, (0, _react2.jsx)("p", {
285
- id: inputDescribedbyId
286
- }, stateMessage)));
277
+ }));
287
278
  };
288
279
 
289
280
  exports.EuiSuggest = EuiSuggest;