@splunk/react-ui 4.1.0 → 4.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (163) hide show
  1. package/Accordion.js +4 -4
  2. package/Anchor.js +2 -2
  3. package/Animation.js +26 -35
  4. package/AnimationToggle.js +2 -2
  5. package/Box.js +2 -2
  6. package/Button.js +22 -22
  7. package/ButtonGroup.js +2 -2
  8. package/ButtonSimple.js +12 -6
  9. package/CHANGELOG.md +69 -2
  10. package/Calendar.js +23 -23
  11. package/Card.js +15 -15
  12. package/CardLayout.js +2 -2
  13. package/Chip.js +13 -13
  14. package/Clickable.js +4 -4
  15. package/CloseButton.js +8 -8
  16. package/Code.js +1279 -1120
  17. package/CollapsiblePanel.js +11 -11
  18. package/Color.js +111 -172
  19. package/ColumnLayout.js +6 -6
  20. package/ComboBox.js +63 -30
  21. package/Concertina.js +2 -2
  22. package/ControlGroup.js +61 -20
  23. package/Date.js +66 -29
  24. package/DefinitionList.js +2 -2
  25. package/Dropdown.js +6 -6
  26. package/FetchOptions.js +8 -8
  27. package/File.js +87 -72
  28. package/FormRows.js +219 -331
  29. package/Heading.js +2 -2
  30. package/Image.js +15 -15
  31. package/JSONTree.js +63 -20
  32. package/Layer.js +8 -8
  33. package/Link.js +13 -13
  34. package/List.js +2 -2
  35. package/Markdown.js +19 -19
  36. package/Menu.js +315 -230
  37. package/Message.js +19 -19
  38. package/Modal.js +22 -11
  39. package/ModalLayer.js +25 -11
  40. package/Monogram.js +7 -7
  41. package/Multiselect.js +1931 -1057
  42. package/Number.js +40 -27
  43. package/Paginator.js +67 -49
  44. package/Paragraph.js +2 -2
  45. package/Popover.js +62 -35
  46. package/Progress.js +9 -21
  47. package/RadioBar.js +6 -6
  48. package/RadioList.js +2 -2
  49. package/ResultsMenu.js +18 -10
  50. package/ScreenReaderContent.js +2 -2
  51. package/Scroll.js +37 -19
  52. package/ScrollContainerContext.js +2 -2
  53. package/Select.js +1309 -562
  54. package/SidePanel.js +22 -17
  55. package/Slider.js +8 -8
  56. package/SlidingPanels.js +63 -47
  57. package/StaticContent.js +2 -2
  58. package/StepBar.js +8 -8
  59. package/Switch.js +20 -11
  60. package/TabBar.js +54 -40
  61. package/TabLayout.js +4 -4
  62. package/Table.js +148 -85
  63. package/Text.js +474 -356
  64. package/Tooltip.js +6 -6
  65. package/TransitionOpen.js +26 -24
  66. package/WaitSpinner.js +4 -4
  67. package/package.json +8 -7
  68. package/stubs-splunkui.d.ts +1 -0
  69. package/types/src/Accordion/Accordion.d.ts +2 -2
  70. package/types/src/Animation/Animation.d.ts +6 -5
  71. package/types/src/Button/Button.d.ts +2 -2
  72. package/types/src/ButtonSimple/ButtonSimple.d.ts +5 -5
  73. package/types/src/Calendar/DateTable.d.ts +1 -0
  74. package/types/src/Calendar/MonthHeader.d.ts +2 -2
  75. package/types/src/CollapsiblePanel/CollapsiblePanel.d.ts +1 -2
  76. package/types/src/Color/Color.d.ts +5 -4
  77. package/types/src/Color/Swatch.d.ts +4 -15
  78. package/types/src/ComboBox/ComboBox.d.ts +2 -2
  79. package/types/src/ControlGroup/ControlGroup.d.ts +7 -2
  80. package/types/src/ControlGroup/ControlGroupContext.d.ts +15 -0
  81. package/types/src/Date/Date.d.ts +7 -5
  82. package/types/src/Date/Icon.d.ts +1 -0
  83. package/types/src/Dropdown/Dropdown.d.ts +1 -1
  84. package/types/src/File/File.d.ts +2 -2
  85. package/types/src/File/FileContext.d.ts +9 -0
  86. package/types/src/File/Icon.d.ts +1 -0
  87. package/types/src/File/IconCloud.d.ts +1 -0
  88. package/types/src/File/Item.d.ts +5 -10
  89. package/types/src/File/PaperClip.d.ts +1 -0
  90. package/types/src/File/Retry.d.ts +1 -0
  91. package/types/src/File/Trash.d.ts +1 -0
  92. package/types/src/FormRows/FormRows.d.ts +11 -69
  93. package/types/src/FormRows/FormRowsContext.d.ts +9 -0
  94. package/types/src/FormRows/Row.d.ts +7 -20
  95. package/types/src/JSONTree/JSONTree.d.ts +14 -2
  96. package/types/src/JSONTree/TreeNode.d.ts +4 -1
  97. package/types/src/Menu/Divider.d.ts +1 -0
  98. package/types/src/Menu/Heading.d.ts +3 -1
  99. package/types/src/Menu/Item.d.ts +22 -6
  100. package/types/src/Menu/Menu.d.ts +17 -18
  101. package/types/src/Menu/MenuContext.d.ts +6 -0
  102. package/types/src/Menu/index.d.ts +1 -0
  103. package/types/src/Multiselect/Compact.d.ts +7 -26
  104. package/types/src/Multiselect/Multiselect.d.ts +7 -2
  105. package/types/src/Multiselect/Normal.d.ts +8 -2
  106. package/types/src/Multiselect/Option.d.ts +4 -1
  107. package/types/src/Number/IncrementIcon.d.ts +1 -0
  108. package/types/src/Number/Number.d.ts +4 -4
  109. package/types/src/Paginator/PageSeparator.d.ts +3 -0
  110. package/types/src/Popover/Popover.d.ts +5 -5
  111. package/types/src/Popover/PopoverContext.d.ts +6 -0
  112. package/types/src/Popover/index.d.ts +1 -0
  113. package/types/src/RadioBar/RadioBar.d.ts +5 -5
  114. package/types/src/RadioList/RadioListContext.d.ts +1 -0
  115. package/types/src/ResultsMenu/ResultsMenu.d.ts +4 -0
  116. package/types/src/Scroll/Inner.d.ts +4 -3
  117. package/types/src/Scroll/Scroll.d.ts +1 -1
  118. package/types/src/Select/Option.d.ts +2 -5
  119. package/types/src/Select/OptionBase.d.ts +94 -0
  120. package/types/src/Select/Select.d.ts +12 -37
  121. package/types/src/Select/SelectBase.d.ts +221 -0
  122. package/types/src/SidePanel/SidePanel.d.ts +4 -0
  123. package/types/src/Slider/Slider.d.ts +4 -4
  124. package/types/src/SlidingPanels/SlidingPanels.d.ts +0 -1
  125. package/types/src/Switch/CheckIcon.d.ts +1 -0
  126. package/types/src/Switch/Switch.d.ts +3 -7
  127. package/types/src/TabBar/Tab.d.ts +4 -1
  128. package/types/src/TabLayout/TabLayout.d.ts +2 -2
  129. package/types/src/Table/DragHandle.d.ts +1 -0
  130. package/types/src/Table/Head.d.ts +2 -0
  131. package/types/src/Table/HeadCell.d.ts +2 -2
  132. package/types/src/Table/HeadDropdownCell.d.ts +1 -1
  133. package/types/src/Table/HeadExpandRowsIcon.d.ts +1 -0
  134. package/types/src/Table/HeadInner.d.ts +3 -3
  135. package/types/src/Table/Table.d.ts +7 -3
  136. package/types/src/Table/Toggle.d.ts +1 -0
  137. package/types/src/Text/IconOutlinedHide.d.ts +1 -0
  138. package/types/src/Text/IconOutlinedView.d.ts +1 -0
  139. package/types/src/Text/Text.d.ts +28 -12
  140. package/types/src/Tooltip/InfoIcon.d.ts +1 -0
  141. package/types/src/Tooltip/Tooltip.d.ts +3 -3
  142. package/types/src/icons/Alert.d.ts +1 -0
  143. package/types/src/icons/AlertFilled.d.ts +1 -0
  144. package/types/src/icons/CaretDown.d.ts +1 -0
  145. package/types/src/icons/CaretRight.d.ts +1 -0
  146. package/types/src/icons/Check.d.ts +1 -0
  147. package/types/src/icons/ChevronDown.d.ts +1 -0
  148. package/types/src/icons/ChevronLeft.d.ts +1 -0
  149. package/types/src/icons/ChevronRight.d.ts +1 -0
  150. package/types/src/icons/CrossMark.d.ts +1 -0
  151. package/types/src/icons/External.d.ts +1 -0
  152. package/types/src/icons/InfoFilled.d.ts +1 -0
  153. package/types/src/icons/More.d.ts +1 -0
  154. package/types/src/icons/MoreVertical.d.ts +1 -0
  155. package/types/src/icons/Plus.d.ts +1 -0
  156. package/types/src/icons/SVG.d.ts +1 -0
  157. package/types/src/icons/Search.d.ts +1 -0
  158. package/types/src/icons/SortedDown.d.ts +1 -0
  159. package/types/src/icons/SortedUp.d.ts +1 -0
  160. package/types/src/icons/Success.d.ts +1 -0
  161. package/types/src/icons/SuccessFilled.d.ts +1 -0
  162. package/types/src/icons/WarningFilled.d.ts +1 -0
  163. package/types/src/utils/types.d.ts +1 -0
package/Menu.js CHANGED
@@ -82,7 +82,7 @@ module.exports =
82
82
  /******/
83
83
  /******/
84
84
  /******/ // Load entry module and return exports
85
- /******/ return __webpack_require__(__webpack_require__.s = 104);
85
+ /******/ return __webpack_require__(__webpack_require__.s = 106);
86
86
  /******/ })
87
87
  /************************************************************************/
88
88
  /******/ ({
@@ -101,7 +101,7 @@ module.exports = require("prop-types");
101
101
 
102
102
  /***/ }),
103
103
 
104
- /***/ 104:
104
+ /***/ 106:
105
105
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
106
106
 
107
107
  "use strict";
@@ -109,10 +109,11 @@ module.exports = require("prop-types");
109
109
  __webpack_require__.r(__webpack_exports__);
110
110
 
111
111
  // EXPORTS
112
- __webpack_require__.d(__webpack_exports__, "default", function() { return /* reexport */ src_Menu_Menu; });
112
+ __webpack_require__.d(__webpack_exports__, "default", function() { return /* reexport */ Menu_Menu; });
113
113
  __webpack_require__.d(__webpack_exports__, "Item", function() { return /* reexport */ Menu_Item; });
114
114
  __webpack_require__.d(__webpack_exports__, "Heading", function() { return /* reexport */ Menu_Heading; });
115
115
  __webpack_require__.d(__webpack_exports__, "Divider", function() { return /* reexport */ Menu_Divider; });
116
+ __webpack_require__.d(__webpack_exports__, "MenuContext", function() { return /* reexport */ MenuContext; });
116
117
 
117
118
  // EXTERNAL MODULE: external "react"
118
119
  var external_react_ = __webpack_require__(2);
@@ -123,11 +124,14 @@ var external_prop_types_ = __webpack_require__(1);
123
124
  var external_prop_types_default = /*#__PURE__*/__webpack_require__.n(external_prop_types_);
124
125
 
125
126
  // EXTERNAL MODULE: external "lodash/omit"
126
- var omit_ = __webpack_require__(29);
127
+ var omit_ = __webpack_require__(32);
127
128
  var omit_default = /*#__PURE__*/__webpack_require__.n(omit_);
128
129
 
130
+ // EXTERNAL MODULE: external "@splunk/react-ui/Popover"
131
+ var Popover_ = __webpack_require__(17);
132
+
129
133
  // EXTERNAL MODULE: external "@splunk/ui-utils/focus"
130
- var focus_ = __webpack_require__(26);
134
+ var focus_ = __webpack_require__(24);
131
135
 
132
136
  // EXTERNAL MODULE: external "@splunk/ui-utils/keyboard"
133
137
  var keyboard_ = __webpack_require__(9);
@@ -155,11 +159,18 @@ var Styled = external_styled_components_default.a.div.withConfig({
155
159
  }
156
160
  }));
157
161
 
162
+ // CONCATENATED MODULE: ./src/Menu/MenuContext.tsx
163
+
164
+ var MenuContext = /*#__PURE__*/Object(external_react_["createContext"])({
165
+ role: 'menu'
166
+ });
167
+
158
168
  // CONCATENATED MODULE: ./src/Menu/Divider.tsx
159
169
  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); }
160
170
 
161
171
 
162
172
 
173
+
163
174
  var propTypes = {};
164
175
 
165
176
  /**
@@ -169,7 +180,15 @@ function Divider(_ref) {
169
180
  var otherProps = _extends({}, _ref);
170
181
 
171
182
  // @docs-props-type DividerPropsBase
172
- return /*#__PURE__*/external_react_default.a.createElement(Styled, _extends({
183
+ var _useContext = Object(external_react_["useContext"])(MenuContext),
184
+ role = _useContext.role;
185
+
186
+ return /*#__PURE__*/external_react_default.a.createElement(Styled // dividers are not supported in role="listbox"
187
+ // this causes Firefox to incorrectly read the total number
188
+ // of items in the list if it contains a heading or divider
189
+ // so we set them to aria-hidden to prevent that
190
+ , _extends({
191
+ "aria-hidden": role === 'listbox',
173
192
  "data-test": "divider",
174
193
  role: "separator"
175
194
  }, otherProps));
@@ -187,11 +206,11 @@ Divider.filterConsecutive = true;
187
206
  Divider.filterLast = true;
188
207
  /* harmony default export */ var Menu_Divider = (Divider);
189
208
  // EXTERNAL MODULE: external "@splunk/react-ui/Heading"
190
- var Heading_ = __webpack_require__(59);
209
+ var Heading_ = __webpack_require__(61);
191
210
  var Heading_default = /*#__PURE__*/__webpack_require__.n(Heading_);
192
211
 
193
212
  // EXTERNAL MODULE: external "@splunk/themes/useSplunkTheme"
194
- var useSplunkTheme_ = __webpack_require__(34);
213
+ var useSplunkTheme_ = __webpack_require__(38);
195
214
  var useSplunkTheme_default = /*#__PURE__*/__webpack_require__.n(useSplunkTheme_);
196
215
 
197
216
  // CONCATENATED MODULE: ./src/Menu/HeadingStyles.ts
@@ -219,6 +238,12 @@ var PrismaSectionTitle = external_styled_components_default.a.h5.withConfig({
219
238
  })(["", " font-size:", ";line-height:", ";font-weight:", ";letter-spacing:0.02em;text-transform:uppercase;"], themes_["mixins"].reset('block'), themes_["variables"].fontSizeSmall, themes_["variables"].lineHeight, themes_["variables"].fontWeightBold);
220
239
 
221
240
  // CONCATENATED MODULE: ./src/Menu/Heading.tsx
241
+ 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; }
242
+
243
+ 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; }
244
+
245
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
246
+
222
247
  function Heading_extends() { Heading_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 Heading_extends.apply(this, arguments); }
223
248
 
224
249
  function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
@@ -230,9 +255,11 @@ function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) r
230
255
 
231
256
 
232
257
 
258
+
233
259
  var Heading_propTypes = {
234
260
  children: external_prop_types_default.a.node,
235
- title: external_prop_types_default.a.bool
261
+ title: external_prop_types_default.a.bool,
262
+ outerStyle: external_prop_types_default.a.object
236
263
  };
237
264
 
238
265
  /**
@@ -241,21 +268,34 @@ var Heading_propTypes = {
241
268
  function Heading(_ref) {
242
269
  var children = _ref.children,
243
270
  title = _ref.title,
244
- otherProps = _objectWithoutProperties(_ref, ["children", "title"]);
271
+ outerStyle = _ref.outerStyle,
272
+ otherProps = _objectWithoutProperties(_ref, ["children", "title", "outerStyle"]);
273
+
274
+ var _useContext = Object(external_react_["useContext"])(MenuContext),
275
+ role = _useContext.role;
245
276
 
246
277
  var _useSplunkTheme = useSplunkTheme_default()(),
247
278
  family = _useSplunkTheme.family;
248
279
 
249
- return family === 'prisma' ? /*#__PURE__*/external_react_default.a.createElement(HeadingStyles_Styled, null, /*#__PURE__*/external_react_default.a.createElement(PrismaSectionTitle, Heading_extends({
280
+ var inner = family === 'prisma' ? /*#__PURE__*/external_react_default.a.createElement(HeadingStyles_Styled, {
281
+ style: outerStyle
282
+ }, /*#__PURE__*/external_react_default.a.createElement(PrismaSectionTitle, Heading_extends({
250
283
  as: title ? 'h4' : 'h5',
251
284
  "data-test": "heading"
252
- }, otherProps), children)) : /*#__PURE__*/external_react_default.a.createElement(HeadingStyles_Styled, null, /*#__PURE__*/external_react_default.a.createElement(Heading_default.a, Heading_extends({
253
- style: {
285
+ }, otherProps), children)) : /*#__PURE__*/external_react_default.a.createElement(Heading_default.a, Heading_extends({
286
+ style: _objectSpread(_objectSpread({}, outerStyle), {}, {
254
287
  margin: 0
255
- },
288
+ }),
256
289
  level: title ? 4 : 'ss',
257
290
  "data-test": "heading"
258
- }, otherProps), children));
291
+ }, otherProps), children); // headings are not supported in role="listbox"
292
+ // this causes Firefox to incorrectly read the total number
293
+ // of items in the list if it contains a heading or divider
294
+ // so we set them to aria-hidden to prevent that
295
+
296
+ return /*#__PURE__*/external_react_default.a.createElement(HeadingStyles_Styled, {
297
+ "aria-hidden": role === 'listbox'
298
+ }, inner);
259
299
  }
260
300
 
261
301
  Heading.propTypes = Heading_propTypes;
@@ -270,10 +310,10 @@ Heading.filterLast = true;
270
310
  var external_lodash_ = __webpack_require__(4);
271
311
 
272
312
  // EXTERNAL MODULE: ./src/icons/Check.tsx
273
- var Check = __webpack_require__(45);
313
+ var Check = __webpack_require__(47);
274
314
 
275
315
  // EXTERNAL MODULE: external "@splunk/react-icons/TriangleRightSmall"
276
- var TriangleRightSmall_ = __webpack_require__(84);
316
+ var TriangleRightSmall_ = __webpack_require__(86);
277
317
  var TriangleRightSmall_default = /*#__PURE__*/__webpack_require__.n(TriangleRightSmall_);
278
318
 
279
319
  // EXTERNAL MODULE: ./src/icons/ThemedIcon.tsx
@@ -308,14 +348,14 @@ function CaretRight(props) {
308
348
  }, props));
309
349
  }
310
350
  // EXTERNAL MODULE: ./src/icons/ChevronRight.tsx
311
- var ChevronRight = __webpack_require__(25);
351
+ var ChevronRight = __webpack_require__(27);
312
352
 
313
353
  // EXTERNAL MODULE: external "@splunk/react-ui/Clickable"
314
354
  var Clickable_ = __webpack_require__(11);
315
355
  var Clickable_default = /*#__PURE__*/__webpack_require__.n(Clickable_);
316
356
 
317
357
  // EXTERNAL MODULE: external "@splunk/react-ui/Switch"
318
- var Switch_ = __webpack_require__(60);
358
+ var Switch_ = __webpack_require__(62);
319
359
  var Switch_default = /*#__PURE__*/__webpack_require__.n(Switch_);
320
360
 
321
361
  // CONCATENATED MODULE: ./src/Menu/ItemStyles.ts
@@ -366,18 +406,18 @@ var StyledItemIcon = external_styled_components_default.a.span.withConfig({
366
406
  var StyledClickable = external_styled_components_default()(Clickable_default.a).withConfig({
367
407
  displayName: "ItemStyles__StyledClickable",
368
408
  componentId: "sc-4kc053-4"
369
- })(["display:block;position:relative;cursor:pointer;color:", ";word-wrap:break-word;max-width:100%;width:100%;padding:", ";", " ", " &:not([disabled]){&:hover{background:", ";", "}&:focus{outline:0;box-shadow:", ";", "}", " ", "}&[disabled]{color:", ";cursor:not-allowed;", ",", "{color:inherit;}", "{cursor:not-allowed;color:", ";}", "}", ""], Object(themes_["pick"])({
409
+ })(["display:block;position:relative;cursor:pointer;color:", ";word-wrap:break-word;max-width:100%;width:100%;padding:", ";", " ", " ", " &:not([disabled]){&:hover{background:", ";", "}&:focus{outline:0;box-shadow:", ";", "}", " ", "}&[disabled]{color:", ";cursor:not-allowed;", ",", "{color:inherit;}", "{cursor:not-allowed;color:", ";}", "}", ""], Object(themes_["pick"])({
370
410
  prisma: themes_["variables"].contentColorActive,
371
411
  enterprise: {
372
412
  dark: themes_["variables"].gray96,
373
- light: themes_["variables"].gray45
413
+ light: themes_["variables"].gray22
374
414
  }
375
415
  }), Object(themes_["pick"])({
376
416
  prisma: {
377
- comfortable: '10px 16px 10px 16px',
378
- compact: '6px 16px 6px 16px'
417
+ comfortable: '10px 16px',
418
+ compact: '6px 16px'
379
419
  },
380
- enterprise: '6px 10px 6px 10px'
420
+ enterprise: '6px 10px'
381
421
  }), function (_ref) {
382
422
  var $isSelectable = _ref.$isSelectable,
383
423
  $selectableAppearance = _ref.$selectableAppearance;
@@ -390,15 +430,23 @@ var StyledClickable = external_styled_components_default()(Clickable_default.a).
390
430
  })
391
431
  });
392
432
  }, function (_ref2) {
393
- var $active = _ref2.$active;
394
- return $active && Object(external_styled_components_["css"])(["box-shadow:", ";background:", ";"], themes_["variables"].focusShadowInset, Object(themes_["pick"])({
395
- prisma: themes_["variables"].interactiveColorOverlayHover
396
- }));
433
+ var $active = _ref2.$active,
434
+ $preventFocus = _ref2.$preventFocus;
435
+ return $active && !$preventFocus && Object(external_styled_components_["css"])(["box-shadow:", ";"], themes_["variables"].focusShadowInset);
436
+ }, function (_ref3) {
437
+ var $active = _ref3.$active;
438
+ return $active && Object(external_styled_components_["css"])(["background:", ";font-weight:", ";"], Object(themes_["pick"])({
439
+ enterprise: {
440
+ light: themes_["variables"].gray92,
441
+ dark: themes_["variables"].gray22
442
+ },
443
+ prisma: themes_["variables"].neutral100
444
+ }), themes_["variables"].fontWeightBold);
397
445
  }, Object(themes_["pick"])({
398
446
  prisma: themes_["variables"].interactiveColorOverlayHover,
399
447
  enterprise: themes_["variables"].backgroundColorHover
400
- }), function (_ref3) {
401
- var $selected = _ref3.$selected;
448
+ }), function (_ref4) {
449
+ var $selected = _ref4.$selected;
402
450
  return $selected && Object(themes_["pick"])({
403
451
  prisma: Object(external_styled_components_["css"])(["background:", ";"], themes_["mixins"].overlayColors(themes_["variables"].interactiveColorOverlaySelected, themes_["variables"].interactiveColorOverlayHover))
404
452
  });
@@ -406,12 +454,18 @@ var StyledClickable = external_styled_components_default()(Clickable_default.a).
406
454
  prisma: Object(external_styled_components_["css"])(["background:", ";"], themes_["variables"].interactiveColorOverlayHover)
407
455
  }), Object(themes_["pick"])({
408
456
  prisma: Object(external_styled_components_["css"])(["&:active{background:", ";}"], themes_["variables"].interactiveColorOverlayActive)
409
- }), function (_ref4) {
410
- var $selected = _ref4.$selected;
457
+ }), function (_ref5) {
458
+ var $selected = _ref5.$selected;
411
459
  return $selected && Object(themes_["pick"])({
412
460
  prisma: Object(external_styled_components_["css"])(["background:", ";&:active{background:", ";}"], themes_["variables"].interactiveColorOverlaySelected, themes_["mixins"].overlayColors(themes_["variables"].interactiveColorOverlaySelected, themes_["variables"].interactiveColorOverlayActive))
413
461
  });
414
- }, themes_["variables"].contentColorDisabled,
462
+ }, Object(themes_["pick"])({
463
+ enterprise: {
464
+ light: themes_["variables"].gray45,
465
+ dark: themes_["variables"].contentColorDisabled
466
+ },
467
+ prisma: themes_["variables"].contentColorDisabled
468
+ }),
415
469
  /* sc-sel */
416
470
  StyledItemDescriptionBottom,
417
471
  /* sc-sel */
@@ -424,8 +478,8 @@ StyledItemSelectedIcon, Object(themes_["pick"])({
424
478
  prisma: Object(external_styled_components_["css"])(["& > * > ", "{color:", ";}"],
425
479
  /* sc-sel */
426
480
  StyledItemIcon, themes_["variables"].contentColorDisabled)
427
- }), function (_ref5) {
428
- var $selected = _ref5.$selected;
481
+ }), function (_ref6) {
482
+ var $selected = _ref6.$selected;
429
483
  return $selected && Object(themes_["pick"])({
430
484
  prisma: Object(external_styled_components_["css"])(["", "{color:", ";}"],
431
485
  /* sc-sel */
@@ -439,11 +493,11 @@ var StyledSwitch = external_styled_components_default()(Switch_default.a).withCo
439
493
  prisma: '16px',
440
494
  enterprise: '8px'
441
495
  }), Object(themes_["pick"])({
442
- prisma: {
443
- comfortable: '2px',
444
- compact: '-2px'
445
- },
446
- enterprise: '0px'
496
+ prisma: '0px',
497
+ enterprise: {
498
+ comfortable: '-1px',
499
+ compact: '2px'
500
+ }
447
501
  }));
448
502
  var StyledInnerWrapper = external_styled_components_default.a.span.withConfig({
449
503
  displayName: "ItemStyles__StyledInnerWrapper",
@@ -452,28 +506,26 @@ var StyledInnerWrapper = external_styled_components_default.a.span.withConfig({
452
506
  var StyledTitleAndDescriptionWrapper = external_styled_components_default.a.span.withConfig({
453
507
  displayName: "ItemStyles__StyledTitleAndDescriptionWrapper",
454
508
  componentId: "sc-4kc053-7"
455
- })(["max-width:100%;width:100%;align-self:center;word-break:break-word;white-space:normal;", ""], function (_ref6) {
456
- var $truncate = _ref6.$truncate;
509
+ })(["max-width:100%;width:100%;align-self:center;word-break:break-word;white-space:normal;", ""], function (_ref7) {
510
+ var $truncate = _ref7.$truncate;
457
511
  return $truncate && Object(external_styled_components_["css"])(["white-space:nowrap;overflow:hidden;text-overflow:ellipsis;"]);
458
512
  });
459
513
  var StyledLabel = external_styled_components_default.a.div.withConfig({
460
514
  displayName: "ItemStyles__StyledLabel",
461
515
  componentId: "sc-4kc053-8"
462
- })(["overflow:inherit;white-space:inherit;text-overflow:inherit;max-width:100%;min-height:20px;", " ", ""], function (_ref7) {
463
- var $truncate = _ref7.$truncate;
516
+ })(["overflow:inherit;white-space:inherit;text-overflow:inherit;max-width:100%;min-height:20px;", ""], function (_ref8) {
517
+ var $truncate = _ref8.$truncate;
464
518
  return $truncate && Object(external_styled_components_["css"])(["display:block;clear:both;"]);
465
- }, function (_ref8) {
466
- var $matching = _ref8.$matching;
467
- return $matching && Object(themes_["pick"])({
468
- prisma: Object(external_styled_components_["css"])(["color:", ";"], themes_["variables"].contentColorMuted)
469
- });
470
519
  });
471
520
  var StyledMatch = external_styled_components_default.a.span.withConfig({
472
521
  displayName: "ItemStyles__StyledMatch",
473
522
  componentId: "sc-4kc053-9"
474
- })(["color:", ";"], Object(themes_["pick"])({
523
+ })(["border-bottom:1px solid ", ";"], Object(themes_["pick"])({
475
524
  prisma: themes_["variables"].contentColorActive,
476
- enterprise: themes_["variables"].accentColor
525
+ enterprise: {
526
+ dark: themes_["variables"].gray96,
527
+ light: themes_["variables"].gray45
528
+ }
477
529
  }));
478
530
  var StyledSubmenu = external_styled_components_default.a.span.withConfig({
479
531
  displayName: "ItemStyles__StyledSubmenu",
@@ -515,7 +567,7 @@ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Re
515
567
 
516
568
  function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
517
569
 
518
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
570
+ function Item_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
519
571
 
520
572
 
521
573
 
@@ -535,12 +587,21 @@ var Item_propTypes = {
535
587
  elementRef: external_prop_types_default.a.oneOfType([external_prop_types_default.a.func, external_prop_types_default.a.object]),
536
588
  hasSubmenu: external_prop_types_default.a.bool,
537
589
  icon: external_prop_types_default.a.node,
590
+
591
+ /** @private. The internal key of the tab */
592
+ itemKey: external_prop_types_default.a.number,
538
593
  matchRanges: external_prop_types_default.a.arrayOf(external_prop_types_default.a.shape({
539
594
  start: external_prop_types_default.a.number.isRequired,
540
595
  end: external_prop_types_default.a.number.isRequired
541
596
  })),
542
597
  onClick: external_prop_types_default.a.func,
598
+
599
+ /** @private */
600
+ onFocus: external_prop_types_default.a.func,
543
601
  openInNewContext: external_prop_types_default.a.bool,
602
+
603
+ /** @private */
604
+ preventFocus: external_prop_types_default.a.bool,
544
605
  role: external_prop_types_default.a.oneOf(['menuitem', 'menuitemradio', 'menuitemcheckbox', 'listboxitem', 'option']),
545
606
  selectable: external_prop_types_default.a.bool,
546
607
  selectableAppearance: external_prop_types_default.a.oneOf(['checkmark', 'checkbox']),
@@ -557,6 +618,7 @@ var defaultProps = {
557
618
  disabled: false,
558
619
  hasSubmenu: false,
559
620
  openInNewContext: false,
621
+ preventFocus: false,
560
622
  selectable: false,
561
623
  selectableAppearance: 'checkmark',
562
624
  selected: false,
@@ -583,9 +645,18 @@ var Item_Item = /*#__PURE__*/function (_Component) {
583
645
 
584
646
  _this = _super.call(this, props);
585
647
 
586
- _defineProperty(_assertThisInitialized(_this), "el", null);
648
+ Item_defineProperty(_assertThisInitialized(_this), "el", null);
649
+
650
+ Item_defineProperty(_assertThisInitialized(_this), "handleFocus", function (e) {
651
+ var _this$props = _this.props,
652
+ onFocus = _this$props.onFocus,
653
+ itemKey = _this$props.itemKey;
654
+ onFocus === null || onFocus === void 0 ? void 0 : onFocus(e, {
655
+ itemKey: itemKey
656
+ });
657
+ });
587
658
 
588
- _defineProperty(_assertThisInitialized(_this), "handleMount", function (el) {
659
+ Item_defineProperty(_assertThisInitialized(_this), "handleMount", function (el) {
589
660
  _this.el = el;
590
661
  Object(updateReactRef["a" /* updateReactRef */])(_this.props.elementRef, el);
591
662
  });
@@ -631,9 +702,9 @@ var Item_Item = /*#__PURE__*/function (_Component) {
631
702
  }, {
632
703
  key: "renderLabel",
633
704
  value: function renderLabel() {
634
- var _this$props = this.props,
635
- children = _this$props.children,
636
- matchRanges = _this$props.matchRanges;
705
+ var _this$props2 = this.props,
706
+ children = _this$props2.children,
707
+ matchRanges = _this$props2.matchRanges;
637
708
 
638
709
  if (!matchRanges || !Object(external_lodash_["isString"])(children)) {
639
710
  return children;
@@ -662,25 +733,25 @@ var Item_Item = /*#__PURE__*/function (_Component) {
662
733
  }, {
663
734
  key: "render",
664
735
  value: function render() {
665
- var _this$props2 = this.props,
666
- active = _this$props2.active,
667
- children = _this$props2.children,
668
- hasSubmenu = _this$props2.hasSubmenu,
669
- selectable = _this$props2.selectable,
670
- selectableAppearance = _this$props2.selectableAppearance,
671
- selected = _this$props2.selected,
672
- icon = _this$props2.icon,
673
- description = _this$props2.description,
674
- disabled = _this$props2.disabled,
675
- matchRanges = _this$props2.matchRanges,
676
- onClick = _this$props2.onClick,
677
- role = _this$props2.role,
678
- splunkTheme = _this$props2.splunkTheme,
679
- to = _this$props2.to,
680
- truncate = _this$props2.truncate,
681
- descriptionPosition = _this$props2.descriptionPosition,
682
- openInNewContext = _this$props2.openInNewContext,
683
- otherProps = Item_objectWithoutProperties(_this$props2, ["active", "children", "hasSubmenu", "selectable", "selectableAppearance", "selected", "icon", "description", "disabled", "matchRanges", "onClick", "role", "splunkTheme", "to", "truncate", "descriptionPosition", "openInNewContext"]);
736
+ var _this$props3 = this.props,
737
+ active = _this$props3.active,
738
+ children = _this$props3.children,
739
+ hasSubmenu = _this$props3.hasSubmenu,
740
+ selectable = _this$props3.selectable,
741
+ selectableAppearance = _this$props3.selectableAppearance,
742
+ selected = _this$props3.selected,
743
+ icon = _this$props3.icon,
744
+ description = _this$props3.description,
745
+ disabled = _this$props3.disabled,
746
+ onClick = _this$props3.onClick,
747
+ preventFocus = _this$props3.preventFocus,
748
+ role = _this$props3.role,
749
+ splunkTheme = _this$props3.splunkTheme,
750
+ to = _this$props3.to,
751
+ truncate = _this$props3.truncate,
752
+ descriptionPosition = _this$props3.descriptionPosition,
753
+ openInNewContext = _this$props3.openInNewContext,
754
+ otherProps = Item_objectWithoutProperties(_this$props3, ["active", "children", "hasSubmenu", "selectable", "selectableAppearance", "selected", "icon", "description", "disabled", "onClick", "preventFocus", "role", "splunkTheme", "to", "truncate", "descriptionPosition", "openInNewContext"]);
684
755
 
685
756
  var family = splunkTheme.family;
686
757
  var isSelectable = selectable || selected;
@@ -707,16 +778,23 @@ var Item_Item = /*#__PURE__*/function (_Component) {
707
778
  $selectableAppearance: selectableAppearance,
708
779
  $selected: selected,
709
780
  $active: active,
781
+ $preventFocus: preventFocus,
710
782
  "data-test-selected": isSelectable ? selected : null,
711
783
  "data-test": "item",
712
784
  "data-has-icon": !!icon,
713
785
  disabled: disabled,
714
786
  onClick: onClick,
787
+ onFocus: this.handleFocus,
788
+ onMouseDown: function onMouseDown(e) {
789
+ if (preventFocus) {
790
+ e.preventDefault();
791
+ }
792
+ },
715
793
  role: role || defaultRole,
716
794
  to: to,
717
795
  title: truncate && Object(external_lodash_["isString"])(children) ? children : undefined,
718
796
  openInNewContext: openInNewContext
719
- }, ariaProps, otherProps, {
797
+ }, ariaProps, Object(external_lodash_["omit"])(otherProps, 'onFocus'), {
720
798
  elementRef: this.handleMount
721
799
  }), selectablePosition === 'left' && selectableCheckmark, selectable && selectableAppearance === 'checkbox' && /*#__PURE__*/external_react_default.a.createElement(StyledSwitch, {
722
800
  interactive: false,
@@ -730,7 +808,6 @@ var Item_Item = /*#__PURE__*/function (_Component) {
730
808
  $truncate: truncate
731
809
  }, /*#__PURE__*/external_react_default.a.createElement(StyledLabel, {
732
810
  $truncate: truncate,
733
- $matching: !!matchRanges,
734
811
  "data-test": "label"
735
812
  }, this.renderLabel()), descriptionBottom && /*#__PURE__*/external_react_default.a.createElement(StyledItemDescriptionBottom, {
736
813
  "data-test": "description"
@@ -741,15 +818,15 @@ var Item_Item = /*#__PURE__*/function (_Component) {
741
818
  return Item;
742
819
  }(external_react_["Component"]);
743
820
 
744
- _defineProperty(Item_Item, "propTypes", Item_propTypes);
821
+ Item_defineProperty(Item_Item, "propTypes", Item_propTypes);
745
822
 
746
- _defineProperty(Item_Item, "defaultProps", defaultProps);
823
+ Item_defineProperty(Item_Item, "defaultProps", defaultProps);
747
824
 
748
825
  var ItemWithTheme = Object(themes_["withSplunkTheme"])(Item_Item);
749
826
  ItemWithTheme.propTypes = Item_Item.propTypes;
750
827
  /* harmony default export */ var Menu_Item = (ItemWithTheme);
751
828
  // EXTERNAL MODULE: external "@splunk/react-ui/Scroll"
752
- var Scroll_ = __webpack_require__(56);
829
+ var Scroll_ = __webpack_require__(58);
753
830
  var Scroll_default = /*#__PURE__*/__webpack_require__.n(Scroll_);
754
831
 
755
832
  // CONCATENATED MODULE: ./src/Menu/MenuStyles.ts
@@ -779,35 +856,25 @@ MenuStyles_Styled,
779
856
  MenuStyles_Styled, adjacentSiblingStyles);
780
857
 
781
858
  // CONCATENATED MODULE: ./src/Menu/Menu.tsx
782
- function Menu_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { Menu_typeof = function _typeof(obj) { return typeof obj; }; } else { Menu_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return Menu_typeof(obj); }
783
-
784
859
  function Menu_extends() { Menu_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 Menu_extends.apply(this, arguments); }
785
860
 
786
- function Menu_objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = Menu_objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
787
-
788
- function Menu_objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
789
-
790
- function Menu_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
861
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
791
862
 
792
- function Menu_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
863
+ 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."); }
793
864
 
794
- function Menu_createClass(Constructor, protoProps, staticProps) { if (protoProps) Menu_defineProperties(Constructor.prototype, protoProps); if (staticProps) Menu_defineProperties(Constructor, staticProps); return Constructor; }
865
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
795
866
 
796
- function Menu_inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) Menu_setPrototypeOf(subClass, superClass); }
867
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
797
868
 
798
- function Menu_setPrototypeOf(o, p) { Menu_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return Menu_setPrototypeOf(o, p); }
869
+ function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
799
870
 
800
- function Menu_createSuper(Derived) { var hasNativeReflectConstruct = Menu_isNativeReflectConstruct(); return function _createSuperInternal() { var Super = Menu_getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = Menu_getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return Menu_possibleConstructorReturn(this, result); }; }
871
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
801
872
 
802
- function Menu_possibleConstructorReturn(self, call) { if (call && (Menu_typeof(call) === "object" || typeof call === "function")) { return call; } return Menu_assertThisInitialized(self); }
803
-
804
- function Menu_assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
873
+ function Menu_objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = Menu_objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
805
874
 
806
- function Menu_isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
875
+ function Menu_objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
807
876
 
808
- function Menu_getPrototypeOf(o) { Menu_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return Menu_getPrototypeOf(o); }
809
877
 
810
- function Menu_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
811
878
 
812
879
 
813
880
 
@@ -821,147 +888,158 @@ function Menu_defineProperty(obj, key, value) { if (key in obj) { Object.defineP
821
888
 
822
889
  var Menu_propTypes = {
823
890
  children: external_prop_types_default.a.node,
891
+
892
+ /** @private */
893
+ controlledExternally: external_prop_types_default.a.bool,
824
894
  elementRef: external_prop_types_default.a.oneOfType([external_prop_types_default.a.func, external_prop_types_default.a.object]),
825
895
  retainFocus: external_prop_types_default.a.bool,
826
896
  stopScrollPropagation: external_prop_types_default.a.bool
827
897
  };
828
898
  var Menu_defaultProps = {
829
- retainFocus: true,
830
899
  stopScrollPropagation: false
831
900
  };
832
901
 
833
- var Menu_Menu = /*#__PURE__*/function (_Component) {
834
- Menu_inherits(Menu, _Component);
835
-
836
- var _super = Menu_createSuper(Menu);
902
+ function Menu(_ref) {
903
+ var children = _ref.children,
904
+ controlledExternally = _ref.controlledExternally,
905
+ elementRef = _ref.elementRef,
906
+ retainFocusProp = _ref.retainFocus,
907
+ stopScrollPropagation = _ref.stopScrollPropagation,
908
+ otherProps = Menu_objectWithoutProperties(_ref, ["children", "controlledExternally", "elementRef", "retainFocus", "stopScrollPropagation"]);
837
909
 
838
910
  // @docs-props-type MenuPropsBase
839
- function Menu(props) {
840
- var _this;
911
+ var _useContext = Object(external_react_["useContext"])(MenuContext),
912
+ _useContext$role = _useContext.role,
913
+ role = _useContext$role === void 0 ? 'menu' : _useContext$role;
841
914
 
842
- Menu_classCallCheck(this, Menu);
915
+ var _useContext2 = Object(external_react_["useContext"])(Popover_["PopoverContext"]),
916
+ retainFocusFromContext = _useContext2.retainFocus;
843
917
 
844
- _this = _super.call(this, props);
845
- _this.state = {
846
- containerEl: null
847
- };
848
- _this.handleMount = _this.handleMount.bind(Menu_assertThisInitialized(_this));
849
- _this.handleKeyDown = _this.handleKeyDown.bind(Menu_assertThisInitialized(_this));
850
- return _this;
918
+ var retainFocus = true;
919
+
920
+ if (retainFocusProp != null) {
921
+ retainFocus = retainFocusProp;
922
+ } else if (retainFocusFromContext != null) {
923
+ retainFocus = retainFocusFromContext;
851
924
  }
852
925
 
853
- Menu_createClass(Menu, [{
854
- key: "handleMount",
855
- value: function handleMount(el) {
856
- this.setState({
857
- containerEl: el
858
- });
859
- Object(updateReactRef["a" /* updateReactRef */])(this.props.elementRef, el);
926
+ var _useState = Object(external_react_["useState"])(0),
927
+ _useState2 = _slicedToArray(_useState, 2),
928
+ focusedItemKey = _useState2[0],
929
+ setFocusedItemKey = _useState2[1];
930
+
931
+ var itemRefs = [];
932
+ var itemKeyCounter = 0;
933
+
934
+ var handleKeyDown = function handleKeyDown(e) {
935
+ // SUI-2734: keeping this active even if controlledExternally is set
936
+ // because Firefox + Voiceover (and possibly other a11y tools)
937
+ // can still set focus on the Menu items and this avoids the
938
+ // whole page scrolling when that happens
939
+ var key = Object(keyboard_["keycode"])(e.nativeEvent);
940
+ var itemToFocusRef; // the "retainFocus" checks here mimic the prior tab key functionality
941
+
942
+ if (key === 'down' || retainFocus && Object(focus_["isTabKey"])(e)) {
943
+ itemToFocusRef = itemRefs[focusedItemKey + 1] || itemRefs[0];
944
+ } else if (key === 'up' || retainFocus && Object(focus_["isTabKey"])(e) && e.shiftKey) {
945
+ itemToFocusRef = itemRefs[focusedItemKey - 1] || itemRefs[itemRefs.length - 1];
946
+ } else if (key === 'home') {
947
+ // eslint-disable-next-line prefer-destructuring
948
+ itemToFocusRef = itemRefs[0];
949
+ } else if (key === 'end') {
950
+ itemToFocusRef = itemRefs[itemRefs.length - 1];
860
951
  }
861
- }, {
862
- key: "handleKeyDown",
863
- value: function handleKeyDown(e) {
864
- if (!this.state.containerEl) {
865
- return;
866
- }
867
952
 
868
- if (Object(keyboard_["keycode"])(e.nativeEvent) === 'tab' && this.props.retainFocus) {
869
- Object(focus_["handleTab"])(this.state.containerEl, e.nativeEvent);
870
- return;
871
- }
953
+ if (itemToFocusRef != null) {
954
+ var _itemToFocusRef$curre, _itemToFocusRef$curre2;
872
955
 
873
- if (Object(keyboard_["keycode"])(e.nativeEvent) !== 'down' && Object(keyboard_["keycode"])(e.nativeEvent) !== 'up') {
874
- return;
875
- } // getSortedTabbableElements returns an Element[], but focus() only exists on HTMLElement (officially)
956
+ (_itemToFocusRef$curre = itemToFocusRef.current) === null || _itemToFocusRef$curre === void 0 ? void 0 : (_itemToFocusRef$curre2 = _itemToFocusRef$curre.focus) === null || _itemToFocusRef$curre2 === void 0 ? void 0 : _itemToFocusRef$curre2.call(_itemToFocusRef$curre);
957
+ e.preventDefault();
958
+ }
959
+ };
876
960
 
961
+ var childrenCleaned = external_react_["Children"].toArray(children).filter(external_react_["isValidElement"]).reduce(function (acc, item, index, original) {
962
+ /* Filter out initial Dividers
963
+ * Requires reduce() over filter() because a Heading may have been
964
+ * before the Divider.
965
+ */
966
+ if (item.type === Menu_Divider && item.type.filterFirst && acc.length === 0) {
967
+ return acc;
968
+ } // Filter out consecutive Dividers and Headings
877
969
 
878
- var tabbableElements = Object(focus_["getSortedTabbableElements"])(this.state.containerEl).filter(function (el) {
879
- return typeof el.focus === 'function';
880
- });
881
- var currentIndex = tabbableElements.indexOf(e.target);
882
970
 
883
- if (currentIndex === -1) {
884
- return;
885
- }
971
+ if ((item.type === Menu_Divider || item.type === Menu_Heading) && item.type.filterConsecutive && !item.props.title && original.length > index + 1) {
972
+ var consec = original[index + 1];
886
973
 
887
- if (Object(keyboard_["keycode"])(e.nativeEvent) === 'up' && currentIndex > 0) {
888
- tabbableElements[currentIndex - 1].focus();
889
- } else if (Object(keyboard_["keycode"])(e.nativeEvent) === 'down' && currentIndex < tabbableElements.length - 1) {
890
- tabbableElements[currentIndex + 1].focus();
974
+ if ((consec.type === Menu_Divider || consec.type === Menu_Heading) && consec.type.filterConsecutive) {
975
+ return acc;
891
976
  }
892
-
893
- e.preventDefault();
894
- }
895
- }, {
896
- key: "render",
897
- value: function render() {
898
- var _this$props = this.props,
899
- children = _this$props.children,
900
- elementRef = _this$props.elementRef,
901
- retainFocus = _this$props.retainFocus,
902
- stopScrollPropagation = _this$props.stopScrollPropagation,
903
- otherProps = Menu_objectWithoutProperties(_this$props, ["children", "elementRef", "retainFocus", "stopScrollPropagation"]);
904
-
905
- var childrenCleaned = external_react_["Children"].toArray(children).filter(external_react_["isValidElement"]).reduce(function (acc, item, index, original) {
906
- /* Filter out initial Dividers
907
- * Requires reduce() over filter() because a Heading may have been
908
- * before the Divider.
909
- */
910
- if (item.type === Menu_Divider && item.type.filterFirst && acc.length === 0) {
911
- return acc;
912
- } // Filter out consecutive Dividers and Headings
913
-
914
-
915
- if ((item.type === Menu_Divider || item.type === Menu_Heading) && item.type.filterConsecutive && !item.props.title && original.length > index + 1) {
916
- var consec = original[index + 1];
917
-
918
- if ((consec.type === Menu_Divider || consec.type === Menu_Heading) && consec.type.filterConsecutive) {
919
- return acc;
920
- }
921
- } // Filter out last Dividers and Headings
977
+ } // Filter out last Dividers and Headings
922
978
 
923
979
 
924
- if ((item.type === Menu_Divider || item.type === Menu_Heading) && item.type.filterLast && index === original.length - 1) {
925
- return acc;
926
- }
980
+ if ((item.type === Menu_Divider || item.type === Menu_Heading) && item.type.filterLast && index === original.length - 1) {
981
+ return acc;
982
+ } // the typeof check prevents props from being applied to HTML elements
983
+ // such as the zero-height scroll bottom div in <ResultsMenu>
927
984
 
928
- acc.push(item);
929
- return acc;
930
- }, []);
931
- return stopScrollPropagation ? /*#__PURE__*/external_react_default.a.createElement(StyledScroll, Menu_extends({
932
- "data-test": "menu",
933
- elementRef: this.handleMount,
934
- onKeyDown: this.handleKeyDown,
935
- role: "menu",
936
- stopScrollPropagation: true
937
- }, omit_default()(otherProps, 'tagName')), childrenCleaned) : /*#__PURE__*/external_react_default.a.createElement(MenuStyles_Styled, Menu_extends({
938
- "data-test": "menu",
939
- onKeyDown: this.handleKeyDown,
940
- ref: this.handleMount,
941
- role: "menu"
942
- }, otherProps), childrenCleaned);
943
- }
944
- }]);
945
985
 
946
- return Menu;
947
- }(external_react_["Component"]);
986
+ if (!(item.type === Menu_Divider || item.type === Menu_Heading) && typeof item.type !== 'string') {
987
+ var _ref2 = /*#__PURE__*/external_react_default.a.createRef();
948
988
 
949
- Menu_defineProperty(Menu_Menu, "propTypes", Menu_propTypes);
989
+ itemRefs.push(_ref2);
950
990
 
951
- Menu_defineProperty(Menu_Menu, "defaultProps", Menu_defaultProps);
991
+ var itemOnFocus = function itemOnFocus(e, data) {
992
+ var itemKey = data.itemKey;
952
993
 
953
- Menu_defineProperty(Menu_Menu, "Item", Menu_Item);
994
+ if (itemKey != null) {
995
+ setFocusedItemKey(itemKey);
996
+ }
997
+ };
954
998
 
955
- Menu_defineProperty(Menu_Menu, "Divider", Menu_Divider);
999
+ var tabIndex = !controlledExternally && focusedItemKey === itemKeyCounter ? undefined : -1;
1000
+ acc.push( /*#__PURE__*/external_react_default.a.cloneElement(item, {
1001
+ itemKey: itemKeyCounter,
1002
+ onFocus: itemOnFocus,
1003
+ preventFocus: controlledExternally,
1004
+ ref: function ref(c) {
1005
+ Object(updateReactRef["a" /* updateReactRef */])(item.ref, c);
1006
+ Object(updateReactRef["a" /* updateReactRef */])(_ref2, c);
1007
+ },
1008
+ tabIndex: tabIndex
1009
+ }));
1010
+ itemKeyCounter += 1;
1011
+ return acc;
1012
+ }
956
1013
 
957
- Menu_defineProperty(Menu_Menu, "Heading", Menu_Heading);
1014
+ acc.push(item);
1015
+ return acc;
1016
+ }, []);
1017
+ return stopScrollPropagation ? /*#__PURE__*/external_react_default.a.createElement(StyledScroll, Menu_extends({
1018
+ "data-test": "menu",
1019
+ elementRef: elementRef,
1020
+ onKeyDown: handleKeyDown,
1021
+ role: role,
1022
+ stopScrollPropagation: true
1023
+ }, omit_default()(otherProps, 'tagName')), childrenCleaned) : /*#__PURE__*/external_react_default.a.createElement(MenuStyles_Styled, Menu_extends({
1024
+ "data-test": "menu",
1025
+ onKeyDown: handleKeyDown,
1026
+ ref: elementRef,
1027
+ role: role
1028
+ }, otherProps), childrenCleaned);
1029
+ }
958
1030
 
959
- /* harmony default export */ var src_Menu_Menu = (Menu_Menu);
1031
+ Menu.propTypes = Menu_propTypes;
1032
+ Menu.defaultProps = Menu_defaultProps;
1033
+ Menu.Item = Menu_Item;
1034
+ Menu.Divider = Menu_Divider;
1035
+ Menu.Heading = Menu_Heading;
1036
+ /* harmony default export */ var Menu_Menu = (Menu);
960
1037
 
961
1038
  // CONCATENATED MODULE: ./src/Menu/index.ts
962
1039
 
963
1040
 
964
1041
 
1042
+
965
1043
  /***/ }),
966
1044
 
967
1045
  /***/ 11:
@@ -996,6 +1074,13 @@ function updateReactRef(ref, current) {
996
1074
 
997
1075
 
998
1076
 
1077
+ /***/ }),
1078
+
1079
+ /***/ 17:
1080
+ /***/ (function(module, exports) {
1081
+
1082
+ module.exports = require("@splunk/react-ui/Popover");
1083
+
999
1084
  /***/ }),
1000
1085
 
1001
1086
  /***/ 2:
@@ -1005,14 +1090,21 @@ module.exports = require("react");
1005
1090
 
1006
1091
  /***/ }),
1007
1092
 
1008
- /***/ 25:
1093
+ /***/ 24:
1094
+ /***/ (function(module, exports) {
1095
+
1096
+ module.exports = require("@splunk/ui-utils/focus");
1097
+
1098
+ /***/ }),
1099
+
1100
+ /***/ 27:
1009
1101
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
1010
1102
 
1011
1103
  "use strict";
1012
1104
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ChevronRight; });
1013
1105
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2);
1014
1106
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
1015
- /* harmony import */ var _splunk_react_icons_ChevronRight__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(28);
1107
+ /* harmony import */ var _splunk_react_icons_ChevronRight__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(31);
1016
1108
  /* harmony import */ var _splunk_react_icons_ChevronRight__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_splunk_react_icons_ChevronRight__WEBPACK_IMPORTED_MODULE_1__);
1017
1109
  /* harmony import */ var _ThemedIcon__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7);
1018
1110
  /* harmony import */ var _SVG__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(6);
@@ -1055,35 +1147,28 @@ function ChevronRight(props) {
1055
1147
 
1056
1148
  /***/ }),
1057
1149
 
1058
- /***/ 26:
1150
+ /***/ 3:
1059
1151
  /***/ (function(module, exports) {
1060
1152
 
1061
- module.exports = require("@splunk/ui-utils/focus");
1153
+ module.exports = require("styled-components");
1062
1154
 
1063
1155
  /***/ }),
1064
1156
 
1065
- /***/ 28:
1157
+ /***/ 31:
1066
1158
  /***/ (function(module, exports) {
1067
1159
 
1068
1160
  module.exports = require("@splunk/react-icons/ChevronRight");
1069
1161
 
1070
1162
  /***/ }),
1071
1163
 
1072
- /***/ 29:
1164
+ /***/ 32:
1073
1165
  /***/ (function(module, exports) {
1074
1166
 
1075
1167
  module.exports = require("lodash/omit");
1076
1168
 
1077
1169
  /***/ }),
1078
1170
 
1079
- /***/ 3:
1080
- /***/ (function(module, exports) {
1081
-
1082
- module.exports = require("styled-components");
1083
-
1084
- /***/ }),
1085
-
1086
- /***/ 34:
1171
+ /***/ 38:
1087
1172
  /***/ (function(module, exports) {
1088
1173
 
1089
1174
  module.exports = require("@splunk/themes/useSplunkTheme");
@@ -1097,21 +1182,21 @@ module.exports = require("lodash");
1097
1182
 
1098
1183
  /***/ }),
1099
1184
 
1100
- /***/ 42:
1185
+ /***/ 44:
1101
1186
  /***/ (function(module, exports) {
1102
1187
 
1103
1188
  module.exports = require("@splunk/react-icons/Check");
1104
1189
 
1105
1190
  /***/ }),
1106
1191
 
1107
- /***/ 45:
1192
+ /***/ 47:
1108
1193
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
1109
1194
 
1110
1195
  "use strict";
1111
1196
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Check; });
1112
1197
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2);
1113
1198
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
1114
- /* harmony import */ var _splunk_react_icons_Check__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(42);
1199
+ /* harmony import */ var _splunk_react_icons_Check__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(44);
1115
1200
  /* harmony import */ var _splunk_react_icons_Check__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_splunk_react_icons_Check__WEBPACK_IMPORTED_MODULE_1__);
1116
1201
  /* harmony import */ var _ThemedIcon__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7);
1117
1202
  /* harmony import */ var _SVG__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(6);
@@ -1154,20 +1239,13 @@ function Check(props) {
1154
1239
 
1155
1240
  /***/ }),
1156
1241
 
1157
- /***/ 56:
1242
+ /***/ 58:
1158
1243
  /***/ (function(module, exports) {
1159
1244
 
1160
1245
  module.exports = require("@splunk/react-ui/Scroll");
1161
1246
 
1162
1247
  /***/ }),
1163
1248
 
1164
- /***/ 59:
1165
- /***/ (function(module, exports) {
1166
-
1167
- module.exports = require("@splunk/react-ui/Heading");
1168
-
1169
- /***/ }),
1170
-
1171
1249
  /***/ 6:
1172
1250
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
1173
1251
 
@@ -1193,7 +1271,14 @@ function SVG(props) {
1193
1271
 
1194
1272
  /***/ }),
1195
1273
 
1196
- /***/ 60:
1274
+ /***/ 61:
1275
+ /***/ (function(module, exports) {
1276
+
1277
+ module.exports = require("@splunk/react-ui/Heading");
1278
+
1279
+ /***/ }),
1280
+
1281
+ /***/ 62:
1197
1282
  /***/ (function(module, exports) {
1198
1283
 
1199
1284
  module.exports = require("@splunk/react-ui/Switch");
@@ -1318,7 +1403,7 @@ Icon.defaultProps = defaultProps;
1318
1403
 
1319
1404
  /***/ }),
1320
1405
 
1321
- /***/ 84:
1406
+ /***/ 86:
1322
1407
  /***/ (function(module, exports) {
1323
1408
 
1324
1409
  module.exports = require("@splunk/react-icons/TriangleRightSmall");