@elastic/eui 88.5.0 → 88.5.2

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 +8 -21
  2. package/dist/eui_theme_dark.min.css +1 -1
  3. package/dist/eui_theme_light.css +8 -21
  4. package/dist/eui_theme_light.min.css +1 -1
  5. package/es/components/collapsible_nav_beta/collapsible_nav_beta.js +20 -6
  6. package/es/components/collapsible_nav_beta/collapsible_nav_beta.styles.js +4 -14
  7. package/es/components/collapsible_nav_beta/collapsible_nav_body_footer.js +57 -0
  8. package/es/components/collapsible_nav_beta/collapsible_nav_body_footer.styles.js +25 -0
  9. package/es/components/collapsible_nav_beta/collapsible_nav_group/collapsible_nav_group.js +156 -0
  10. package/es/components/collapsible_nav_beta/collapsible_nav_group/collapsible_nav_group.styles.js +19 -0
  11. package/es/components/collapsible_nav_beta/collapsible_nav_group/index.js +9 -0
  12. package/es/components/collapsible_nav_beta/collapsible_nav_item/collapsed/collapsed_nav_button.js +3 -7
  13. package/es/components/collapsible_nav_beta/collapsible_nav_item/collapsed/collapsed_nav_item.js +3 -7
  14. package/es/components/collapsible_nav_beta/collapsible_nav_item/collapsed/collapsed_nav_popover.js +4 -8
  15. package/es/components/collapsible_nav_beta/collapsible_nav_item/collapsible_nav_accordion.js +16 -63
  16. package/es/components/collapsible_nav_beta/collapsible_nav_item/collapsible_nav_accordion.styles.js +2 -10
  17. package/es/components/collapsible_nav_beta/collapsible_nav_item/collapsible_nav_item.js +122 -41
  18. package/es/components/collapsible_nav_beta/collapsible_nav_item/collapsible_nav_item.styles.js +13 -3
  19. package/es/components/combo_box/combo_box.js +12 -25
  20. package/es/components/combo_box/combo_box_input/combo_box_input.js +61 -54
  21. package/es/components/text_truncate/index.js +1 -1
  22. package/es/components/text_truncate/utils.js +88 -138
  23. package/es/services/canvas/canvas_text_utils.js +64 -0
  24. package/es/services/canvas/index.js +9 -0
  25. package/es/services/index.js +1 -0
  26. package/eui.d.ts +186 -105
  27. package/i18ntokens.json +8 -8
  28. package/lib/components/collapsible_nav_beta/collapsible_nav_beta.js +20 -6
  29. package/lib/components/collapsible_nav_beta/collapsible_nav_beta.styles.js +11 -19
  30. package/lib/components/collapsible_nav_beta/collapsible_nav_body_footer.js +67 -0
  31. package/lib/components/collapsible_nav_beta/collapsible_nav_body_footer.styles.js +33 -0
  32. package/lib/components/collapsible_nav_beta/collapsible_nav_group/collapsible_nav_group.js +166 -0
  33. package/lib/components/collapsible_nav_beta/collapsible_nav_group/collapsible_nav_group.styles.js +26 -0
  34. package/lib/components/collapsible_nav_beta/collapsible_nav_group/index.js +12 -0
  35. package/lib/components/collapsible_nav_beta/collapsible_nav_item/collapsed/collapsed_nav_button.js +3 -7
  36. package/lib/components/collapsible_nav_beta/collapsible_nav_item/collapsed/collapsed_nav_item.js +3 -7
  37. package/lib/components/collapsible_nav_beta/collapsible_nav_item/collapsed/collapsed_nav_popover.js +4 -8
  38. package/lib/components/collapsible_nav_beta/collapsible_nav_item/collapsible_nav_accordion.js +14 -61
  39. package/lib/components/collapsible_nav_beta/collapsible_nav_item/collapsible_nav_accordion.styles.js +1 -9
  40. package/lib/components/collapsible_nav_beta/collapsible_nav_item/collapsible_nav_item.js +122 -39
  41. package/lib/components/collapsible_nav_beta/collapsible_nav_item/collapsible_nav_item.styles.js +13 -4
  42. package/lib/components/combo_box/combo_box.js +12 -25
  43. package/lib/components/combo_box/combo_box_input/combo_box_input.js +60 -53
  44. package/lib/components/text_truncate/index.js +0 -6
  45. package/lib/components/text_truncate/utils.js +97 -148
  46. package/lib/services/canvas/canvas_text_utils.js +70 -0
  47. package/lib/services/canvas/index.js +12 -0
  48. package/lib/services/index.js +8 -0
  49. package/optimize/es/components/collapsible_nav_beta/collapsible_nav_beta.js +17 -3
  50. package/optimize/es/components/collapsible_nav_beta/collapsible_nav_beta.styles.js +4 -14
  51. package/optimize/es/components/collapsible_nav_beta/collapsible_nav_body_footer.js +56 -0
  52. package/optimize/es/components/collapsible_nav_beta/collapsible_nav_body_footer.styles.js +25 -0
  53. package/optimize/es/components/collapsible_nav_beta/collapsible_nav_group/collapsible_nav_group.js +48 -0
  54. package/optimize/es/components/collapsible_nav_beta/collapsible_nav_group/collapsible_nav_group.styles.js +19 -0
  55. package/optimize/es/components/collapsible_nav_beta/collapsible_nav_group/index.js +9 -0
  56. package/optimize/es/components/collapsible_nav_beta/collapsible_nav_item/collapsible_nav_accordion.js +7 -33
  57. package/optimize/es/components/collapsible_nav_beta/collapsible_nav_item/collapsible_nav_accordion.styles.js +2 -10
  58. package/optimize/es/components/collapsible_nav_beta/collapsible_nav_item/collapsible_nav_item.js +54 -21
  59. package/optimize/es/components/collapsible_nav_beta/collapsible_nav_item/collapsible_nav_item.styles.js +13 -3
  60. package/optimize/es/components/combo_box/combo_box.js +12 -25
  61. package/optimize/es/components/combo_box/combo_box_input/combo_box_input.js +61 -53
  62. package/optimize/es/components/text_truncate/index.js +1 -1
  63. package/optimize/es/components/text_truncate/utils.js +87 -137
  64. package/optimize/es/services/canvas/canvas_text_utils.js +60 -0
  65. package/optimize/es/services/canvas/index.js +9 -0
  66. package/optimize/es/services/index.js +1 -0
  67. package/optimize/lib/components/collapsible_nav_beta/collapsible_nav_beta.js +15 -1
  68. package/optimize/lib/components/collapsible_nav_beta/collapsible_nav_beta.styles.js +11 -19
  69. package/optimize/lib/components/collapsible_nav_beta/collapsible_nav_body_footer.js +66 -0
  70. package/optimize/lib/components/collapsible_nav_beta/collapsible_nav_body_footer.styles.js +33 -0
  71. package/optimize/lib/components/collapsible_nav_beta/collapsible_nav_group/collapsible_nav_group.js +58 -0
  72. package/optimize/lib/components/collapsible_nav_beta/collapsible_nav_group/collapsible_nav_group.styles.js +26 -0
  73. package/optimize/lib/components/collapsible_nav_beta/collapsible_nav_group/index.js +12 -0
  74. package/optimize/lib/components/collapsible_nav_beta/collapsible_nav_item/collapsible_nav_accordion.js +5 -31
  75. package/optimize/lib/components/collapsible_nav_beta/collapsible_nav_item/collapsible_nav_accordion.styles.js +1 -9
  76. package/optimize/lib/components/collapsible_nav_beta/collapsible_nav_item/collapsible_nav_item.js +54 -20
  77. package/optimize/lib/components/collapsible_nav_beta/collapsible_nav_item/collapsible_nav_item.styles.js +13 -4
  78. package/optimize/lib/components/combo_box/combo_box.js +12 -25
  79. package/optimize/lib/components/combo_box/combo_box_input/combo_box_input.js +60 -52
  80. package/optimize/lib/components/text_truncate/index.js +0 -6
  81. package/optimize/lib/components/text_truncate/utils.js +96 -147
  82. package/optimize/lib/services/canvas/canvas_text_utils.js +67 -0
  83. package/optimize/lib/services/canvas/index.js +12 -0
  84. package/optimize/lib/services/index.js +8 -0
  85. package/package.json +2 -5
  86. package/src/components/combo_box/_combo_box.scss +12 -19
  87. package/test-env/components/collapsible_nav_beta/collapsible_nav_beta.js +20 -6
  88. package/test-env/components/collapsible_nav_beta/collapsible_nav_beta.styles.js +11 -19
  89. package/test-env/components/collapsible_nav_beta/collapsible_nav_body_footer.js +66 -0
  90. package/test-env/components/collapsible_nav_beta/collapsible_nav_body_footer.styles.js +33 -0
  91. package/test-env/components/collapsible_nav_beta/collapsible_nav_group/collapsible_nav_group.js +165 -0
  92. package/test-env/components/collapsible_nav_beta/collapsible_nav_group/collapsible_nav_group.styles.js +26 -0
  93. package/test-env/components/collapsible_nav_beta/collapsible_nav_group/index.js +12 -0
  94. package/test-env/components/collapsible_nav_beta/collapsible_nav_item/collapsed/collapsed_nav_button.js +3 -7
  95. package/test-env/components/collapsible_nav_beta/collapsible_nav_item/collapsed/collapsed_nav_item.js +3 -7
  96. package/test-env/components/collapsible_nav_beta/collapsible_nav_item/collapsed/collapsed_nav_popover.js +4 -8
  97. package/test-env/components/collapsible_nav_beta/collapsible_nav_item/collapsible_nav_accordion.js +14 -61
  98. package/test-env/components/collapsible_nav_beta/collapsible_nav_item/collapsible_nav_accordion.styles.js +1 -9
  99. package/test-env/components/collapsible_nav_beta/collapsible_nav_item/collapsible_nav_item.js +122 -39
  100. package/test-env/components/collapsible_nav_beta/collapsible_nav_item/collapsible_nav_item.styles.js +13 -4
  101. package/test-env/components/combo_box/combo_box.js +12 -25
  102. package/test-env/components/combo_box/combo_box_input/combo_box_input.js +60 -53
  103. package/test-env/components/text_truncate/index.js +0 -6
  104. package/test-env/components/text_truncate/utils.js +96 -147
  105. package/test-env/services/canvas/canvas_text_utils.js +30 -0
  106. package/test-env/services/canvas/index.js +12 -0
  107. package/test-env/services/index.js +8 -0
@@ -0,0 +1,60 @@
1
+ import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
2
+ import _createClass from "@babel/runtime/helpers/createClass";
3
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
4
+ /*
5
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
6
+ * or more contributor license agreements. Licensed under the Elastic License
7
+ * 2.0 and the Server Side Public License, v 1; you may not use this file except
8
+ * in compliance with, at your election, the Elastic License 2.0 or the Server
9
+ * Side Public License, v 1.
10
+ */
11
+
12
+ /**
13
+ * Creates a temporary Canvas element for manipulating text & determining text width.
14
+ *
15
+ * To accurately measure text, canvas rendering requires either a container to
16
+ * compute/derive font styles from, or a static font string (useful for usage
17
+ * outside the DOM). Particular care should be applied when fallback fonts are
18
+ * used, as more fallback fonts can lead to less precision.
19
+ *
20
+ * Please note that while canvas is more significantly more performant than DOM
21
+ * measurement, there are subpixel to single digit pixel differences between
22
+ * DOM and canvas measurement due to the different rendering engines used.
23
+ */
24
+ export var CanvasTextUtils = /*#__PURE__*/function () {
25
+ function CanvasTextUtils(_ref) {
26
+ var _this = this;
27
+ var font = _ref.font,
28
+ container = _ref.container;
29
+ _classCallCheck(this, CanvasTextUtils);
30
+ _defineProperty(this, "context", void 0);
31
+ _defineProperty(this, "currentText", '');
32
+ _defineProperty(this, "computeFontFromElement", function (element) {
33
+ var computedStyles = window.getComputedStyle(element);
34
+ // TODO: font-stretch is not included even though it potentially should be
35
+ // @see https://developer.mozilla.org/en-US/docs/Web/CSS/font#constituent_properties
36
+ // It appears to be unsupported and/or breaks font computation in canvas
37
+ return ['font-style', 'font-variant', 'font-weight', 'font-size', 'font-family'].map(function (prop) {
38
+ return computedStyles.getPropertyValue(prop);
39
+ }).join(' ').trim();
40
+ });
41
+ _defineProperty(this, "setTextToCheck", function (text) {
42
+ _this.currentText = text;
43
+ });
44
+ this.context = document.createElement('canvas').getContext('2d');
45
+
46
+ // Set the canvas font to ensure text width calculations are correct
47
+ if (font) {
48
+ this.context.font = font;
49
+ } else if (container) {
50
+ this.context.font = this.computeFontFromElement(container);
51
+ }
52
+ }
53
+ _createClass(CanvasTextUtils, [{
54
+ key: "textWidth",
55
+ get: function get() {
56
+ return this.context.measureText(this.currentText).width;
57
+ }
58
+ }]);
59
+ return CanvasTextUtils;
60
+ }();
@@ -0,0 +1,9 @@
1
+ /*
2
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3
+ * or more contributor license agreements. Licensed under the Elastic License
4
+ * 2.0 and the Server Side Public License, v 1; you may not use this file except
5
+ * in compliance with, at your election, the Elastic License 2.0 or the Server
6
+ * Side Public License, v 1.
7
+ */
8
+
9
+ export { CanvasTextUtils } from './canvas_text_utils';
@@ -11,6 +11,7 @@ import * as keys from './keys';
11
11
  export { accessibleClickKeys, cascadingMenuKeys, comboBoxKeys, htmlIdGenerator, useGeneratedHtmlId } from './accessibility';
12
12
  export { CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT } from './alignment';
13
13
  export { CurrentEuiBreakpointContext, CurrentEuiBreakpointProvider, useCurrentEuiBreakpoint, useIsWithinBreakpoints, useIsWithinMaxBreakpoint, useIsWithinMinBreakpoint } from './breakpoint';
14
+ export { CanvasTextUtils } from './canvas';
14
15
  export { brighten, calculateContrast, calculateLuminance, colorPalette, darken, DEFAULT_VISUALIZATION_COLOR, desaturate, euiPaletteColorBlind, euiPaletteColorBlindBehindText, euiPaletteComplimentary, euiPaletteComplementary, euiPaletteCool, euiPaletteForDarkBackground, euiPaletteForLightBackground, euiPaletteForStatus, euiPaletteForTemperature, euiPaletteGray, euiPaletteNegative, euiPalettePositive, euiPaletteWarm, getSteppedGradient, hexToHsv, hexToRgb, hsvToHex, hsvToRgb, isColorDark, isValidHex, lightness, makeDisabledContrastColor, makeHighContrastColor, rgbToHex, rgbToHsv, saturate, shade, shadeOrTint, tint, tintOrShade, transparentize, VISUALIZATION_COLORS, wcagContrastMin } from './color';
15
16
  export { useColorPickerState, useColorStopsState } from './color_picker';
16
17
  export * from './console';
@@ -20,6 +20,9 @@ var _header = require("../header/header.styles");
20
20
  var _context = require("./context");
21
21
  var _collapsible_nav_button = require("./collapsible_nav_button");
22
22
  var _collapsible_nav_beta = require("./collapsible_nav_beta.styles");
23
+ var _collapsible_nav_body_footer = require("./collapsible_nav_body_footer");
24
+ var _collapsible_nav_group = require("./collapsible_nav_group");
25
+ var _collapsible_nav_item = require("./collapsible_nav_item");
23
26
  var _react2 = require("@emotion/react");
24
27
  var _excluded = ["id", "children", "className", "initialIsCollapsed", "onCollapseToggle", "width", "side", "focusTrapProps"];
25
28
  /*
@@ -33,7 +36,7 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
33
36
  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; }
34
37
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
35
38
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
36
- var EuiCollapsibleNavBeta = function EuiCollapsibleNavBeta(_ref) {
39
+ var _EuiCollapsibleNavBeta = function _EuiCollapsibleNavBeta(_ref) {
37
40
  var id = _ref.id,
38
41
  children = _ref.children,
39
42
  className = _ref.className,
@@ -154,4 +157,15 @@ var EuiCollapsibleNavBeta = function EuiCollapsibleNavBeta(_ref) {
154
157
  "aria-controls": flyoutID
155
158
  }), !hideFlyout && flyout);
156
159
  };
160
+
161
+ /**
162
+ * Combined export with subcomponents
163
+ */
164
+
165
+ var EuiCollapsibleNavBeta = Object.assign(_EuiCollapsibleNavBeta, {
166
+ Body: _collapsible_nav_body_footer.EuiCollapsibleNavBody,
167
+ Footer: _collapsible_nav_body_footer.EuiCollapsibleNavFooter,
168
+ Group: _collapsible_nav_group.EuiCollapsibleNavGroup,
169
+ Item: _collapsible_nav_item.EuiCollapsibleNavItem
170
+ });
157
171
  exports.EuiCollapsibleNavBeta = EuiCollapsibleNavBeta;
@@ -8,21 +8,15 @@ var _react = require("@emotion/react");
8
8
  var _global_styling = require("../../global_styling");
9
9
  var _themes = require("../../themes");
10
10
  var _header = require("../header/header.styles");
11
- function _EMOTION_STRINGIFIED_CSS_ERROR__() { return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."; } /*
12
- * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
13
- * or more contributor license agreements. Licensed under the Elastic License
14
- * 2.0 and the Server Side Public License, v 1; you may not use this file except
15
- * in compliance with, at your election, the Elastic License 2.0 or the Server
16
- * Side Public License, v 1.
17
- */
18
- var _ref = process.env.NODE_ENV === "production" ? {
19
- name: "1adm1dw-isPushCollapsed",
20
- styles: "&,.euiFlyoutBody__overflow{scrollbar-width:none;&::-webkit-scrollbar{display:none;}};label:isPushCollapsed;"
21
- } : {
22
- name: "1adm1dw-isPushCollapsed",
23
- styles: "&,.euiFlyoutBody__overflow{scrollbar-width:none;&::-webkit-scrollbar{display:none;}};label:isPushCollapsed;",
24
- toString: _EMOTION_STRINGIFIED_CSS_ERROR__
25
- };
11
+ var _collapsible_nav_body_footer = require("./collapsible_nav_body_footer.styles");
12
+ /*
13
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
14
+ * or more contributor license agreements. Licensed under the Elastic License
15
+ * 2.0 and the Server Side Public License, v 1; you may not use this file except
16
+ * in compliance with, at your election, the Elastic License 2.0 or the Server
17
+ * Side Public License, v 1.
18
+ */
19
+
26
20
  var euiCollapsibleNavBetaStyles = function euiCollapsibleNavBetaStyles(euiThemeContext) {
27
21
  var euiTheme = euiThemeContext.euiTheme;
28
22
 
@@ -32,13 +26,11 @@ var euiCollapsibleNavBetaStyles = function euiCollapsibleNavBetaStyles(euiThemeC
32
26
  var defaultHeaderHeight = (0, _header.euiHeaderVariables)(euiThemeContext).height;
33
27
  var fixedHeaderOffset = "var(--euiFixedHeadersOffset, ".concat(defaultHeaderHeight, ")");
34
28
  return {
35
- euiCollapsibleNavBeta: /*#__PURE__*/(0, _react.css)((0, _global_styling.logicalCSS)('top', fixedHeaderOffset), (0, _global_styling.euiYScroll)(euiThemeContext, {
36
- height: 'inherit'
37
- }), (0, _global_styling.logicalCSS)('padding-bottom', euiTheme.size.xs), ".euiFlyoutBody{", (0, _global_styling.logicalCSS)('min-height', '50%'), ";}.euiFlyoutFooter{background-color:", euiTheme.colors.emptyShade, ";", (0, _global_styling.logicalCSS)('border-top', euiTheme.border.thin), ";};label:euiCollapsibleNavBeta;"),
29
+ euiCollapsibleNavBeta: /*#__PURE__*/(0, _react.css)((0, _global_styling.logicalCSS)('top', fixedHeaderOffset), (0, _global_styling.logicalCSS)('padding-bottom', euiTheme.size.xs), ";;label:euiCollapsibleNavBeta;"),
38
30
  left: /*#__PURE__*/(0, _react.css)((0, _global_styling.logicalCSS)('border-right', euiTheme.border.thin), ";;label:left;"),
39
31
  right: /*#__PURE__*/(0, _react.css)((0, _global_styling.logicalCSS)('border-left', euiTheme.border.thin), ";;label:right;"),
40
32
  isPush: /*#__PURE__*/(0, _react.css)((0, _themes.euiShadowFlat)(euiThemeContext), ";;label:isPush;"),
41
- isPushCollapsed: _ref,
33
+ isPushCollapsed: /*#__PURE__*/(0, _react.css)(_collapsible_nav_body_footer.euiCollapsibleNavBodyStyles._isPushCollapsed, ";;label:isPushCollapsed;"),
42
34
  isOverlayFullWidth: /*#__PURE__*/(0, _react.css)("&.euiFlyout{", (0, _global_styling.logicalCSS)('max-width', '100% !important'), ";};label:isOverlayFullWidth;")
43
35
  };
44
36
  };
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.EuiCollapsibleNavFooter = exports.EuiCollapsibleNavBody = void 0;
9
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
10
+ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
11
+ var _react = _interopRequireWildcard(require("react"));
12
+ var _classnames = _interopRequireDefault(require("classnames"));
13
+ var _services = require("../../services");
14
+ var _flyout = require("../flyout");
15
+ var _context = require("./context");
16
+ var _collapsible_nav_body_footer = require("./collapsible_nav_body_footer.styles");
17
+ var _react2 = require("@emotion/react");
18
+ var _excluded = ["className"],
19
+ _excluded2 = ["className"];
20
+ /*
21
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
22
+ * or more contributor license agreements. Licensed under the Elastic License
23
+ * 2.0 and the Server Side Public License, v 1; you may not use this file except
24
+ * in compliance with, at your election, the Elastic License 2.0 or the Server
25
+ * Side Public License, v 1.
26
+ */
27
+ /**
28
+ * These components are incredibly light wrappers around `EuiFlyoutBody`
29
+ * and `EuiFlyoutFooter` with collapsible nav-specific styling/considerations.
30
+ *
31
+ * Note: They are not intended to be used standalone outside of EuiCollapsibleNav
32
+ */
33
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
34
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
35
+ var EuiCollapsibleNavBody = function EuiCollapsibleNavBody(_ref) {
36
+ var className = _ref.className,
37
+ props = (0, _objectWithoutProperties2.default)(_ref, _excluded);
38
+ var classes = (0, _classnames.default)('euiCollapsibleNav__body', className);
39
+ var _useContext = (0, _react.useContext)(_context.EuiCollapsibleNavContext),
40
+ isCollapsed = _useContext.isCollapsed,
41
+ isPush = _useContext.isPush;
42
+ var cssStyles = [_collapsible_nav_body_footer.euiCollapsibleNavBodyStyles.euiCollapsibleNav__body, isCollapsed && isPush && _collapsible_nav_body_footer.euiCollapsibleNavBodyStyles.isPushCollapsed];
43
+ return (0, _react2.jsx)(_flyout.EuiFlyoutBody, (0, _extends2.default)({
44
+ className: classes,
45
+ css: cssStyles
46
+ // Since this is a nav, we can almost guarantee there will be clickable
47
+ // children/links that will enable scrolling. As such, we're optimistically
48
+ // removing the extra tab stop
49
+ ,
50
+ scrollableTabIndex: -1
51
+ }, props));
52
+ };
53
+ exports.EuiCollapsibleNavBody = EuiCollapsibleNavBody;
54
+ var EuiCollapsibleNavFooter = function EuiCollapsibleNavFooter(_ref2) {
55
+ var className = _ref2.className,
56
+ props = (0, _objectWithoutProperties2.default)(_ref2, _excluded2);
57
+ var classes = (0, _classnames.default)('euiCollapsibleNav__footer', className);
58
+ var euiTheme = (0, _services.useEuiTheme)();
59
+ var styles = (0, _collapsible_nav_body_footer.euiCollapsibleNavFooterStyles)(euiTheme);
60
+ var cssStyles = [styles.euiCollapsibleNav__footer];
61
+ return (0, _react2.jsx)(_flyout.EuiFlyoutFooter, (0, _extends2.default)({
62
+ className: classes,
63
+ css: cssStyles
64
+ }, props));
65
+ };
66
+ exports.EuiCollapsibleNavFooter = EuiCollapsibleNavFooter;
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.euiCollapsibleNavFooterStyles = exports.euiCollapsibleNavBodyStyles = void 0;
7
+ var _react = require("@emotion/react");
8
+ var _global_styling = require("../../global_styling");
9
+ /*
10
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
11
+ * or more contributor license agreements. Licensed under the Elastic License
12
+ * 2.0 and the Server Side Public License, v 1; you may not use this file except
13
+ * in compliance with, at your election, the Elastic License 2.0 or the Server
14
+ * Side Public License, v 1.
15
+ */
16
+
17
+ var euiCollapsibleNavBodyStyles = {
18
+ // In case things get really dire responsively, ensure the footer doesn't overtake the body
19
+ euiCollapsibleNav__body: /*#__PURE__*/(0, _react.css)((0, _global_styling.logicalCSS)('min-height', '50%'), ";;label:euiCollapsibleNav__body;"),
20
+ get isPushCollapsed() {
21
+ return /*#__PURE__*/(0, _react.css)(".euiFlyoutBody__overflow{", this._isPushCollapsed, ";};label:isPushCollapsed;");
22
+ },
23
+ // CSS is reused by main euiCollapsibleNav styles in case the body component isn't used
24
+ _isPushCollapsed: "\n /* Hide the scrollbar for docked mode (while still keeping the nav scrollable)\n Otherwise if scrollbars are visible, button icon visibility suffers. */\n scrollbar-width: none; /* Firefox */\n\n &::-webkit-scrollbar {\n display: none; /* Chrome, Edge, & Safari */\n }\n "
25
+ };
26
+ exports.euiCollapsibleNavBodyStyles = euiCollapsibleNavBodyStyles;
27
+ var euiCollapsibleNavFooterStyles = function euiCollapsibleNavFooterStyles(_ref) {
28
+ var euiTheme = _ref.euiTheme;
29
+ return {
30
+ euiCollapsibleNav__footer: /*#__PURE__*/(0, _react.css)("background-color:", euiTheme.colors.emptyShade, ";", (0, _global_styling.logicalCSS)('border-top', euiTheme.border.thin), ";;label:euiCollapsibleNav__footer;")
31
+ };
32
+ };
33
+ exports.euiCollapsibleNavFooterStyles = euiCollapsibleNavFooterStyles;
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.EuiCollapsibleNavGroup = void 0;
9
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
10
+ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
11
+ var _react = _interopRequireWildcard(require("react"));
12
+ var _classnames = _interopRequireDefault(require("classnames"));
13
+ var _services = require("../../../services");
14
+ var _context = require("../context");
15
+ var _collapsible_nav_item = require("../collapsible_nav_item/collapsible_nav_item");
16
+ var _collapsed_nav_popover = require("../collapsible_nav_item/collapsed/collapsed_nav_popover");
17
+ var _collapsible_nav_group = require("./collapsible_nav_group.styles");
18
+ var _react2 = require("@emotion/react");
19
+ var _excluded = ["items", "className", "wrapperProps"];
20
+ /*
21
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
22
+ * or more contributor license agreements. Licensed under the Elastic License
23
+ * 2.0 and the Server Side Public License, v 1; you may not use this file except
24
+ * in compliance with, at your election, the Elastic License 2.0 or the Server
25
+ * Side Public License, v 1.
26
+ */
27
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
28
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
29
+ /**
30
+ * This component should only ever be used as a **top-level component**, and not as a sub-item.
31
+ * It also should **not** be used in the nav footer.
32
+ */
33
+ var EuiCollapsibleNavGroup = function EuiCollapsibleNavGroup(_ref) {
34
+ var items = _ref.items,
35
+ className = _ref.className,
36
+ wrapperProps = _ref.wrapperProps,
37
+ props = (0, _objectWithoutProperties2.default)(_ref, _excluded);
38
+ var _useContext = (0, _react.useContext)(_context.EuiCollapsibleNavContext),
39
+ isCollapsed = _useContext.isCollapsed,
40
+ isPush = _useContext.isPush;
41
+ var classes = (0, _classnames.default)('euiCollapsibleNavGroup', className, wrapperProps === null || wrapperProps === void 0 ? void 0 : wrapperProps.className);
42
+ var euiTheme = (0, _services.useEuiTheme)();
43
+ var styles = (0, _collapsible_nav_group.euiCollapsibleNavGroupStyles)(euiTheme);
44
+ var cssStyles = [styles.euiCollapsibleNavGroup, isPush && isCollapsed ? styles.euiCollapsibleNavGroup__title : styles.isWrapper, wrapperProps === null || wrapperProps === void 0 ? void 0 : wrapperProps.css];
45
+ return (0, _react2.jsx)("div", (0, _extends2.default)({}, wrapperProps, {
46
+ className: classes,
47
+ css: cssStyles
48
+ }), isCollapsed && isPush ? (0, _react2.jsx)(_collapsed_nav_popover.EuiCollapsedNavPopover, (0, _extends2.default)({
49
+ className: classes,
50
+ items: items
51
+ }, props)) : (0, _react2.jsx)(_react.default.Fragment, null, (0, _react2.jsx)(_collapsible_nav_item.EuiCollapsibleNavItem, (0, _extends2.default)({}, props, {
52
+ css: styles.euiCollapsibleNavGroup__title
53
+ })), (0, _react2.jsx)(_collapsible_nav_item.EuiCollapsibleNavSubItems, {
54
+ items: items,
55
+ isGroup: true
56
+ })));
57
+ };
58
+ exports.EuiCollapsibleNavGroup = EuiCollapsibleNavGroup;
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.euiCollapsibleNavGroupStyles = void 0;
7
+ var _react = require("@emotion/react");
8
+ var _collapsible_nav_item = require("../collapsible_nav_item/collapsible_nav_item.styles");
9
+ /*
10
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
11
+ * or more contributor license agreements. Licensed under the Elastic License
12
+ * 2.0 and the Server Side Public License, v 1; you may not use this file except
13
+ * in compliance with, at your election, the Elastic License 2.0 or the Server
14
+ * Side Public License, v 1.
15
+ */
16
+
17
+ var euiCollapsibleNavGroupStyles = function euiCollapsibleNavGroupStyles(euiThemeContext) {
18
+ var euiTheme = euiThemeContext.euiTheme;
19
+ var sharedStyles = (0, _collapsible_nav_item.euiCollapsibleNavItemVariables)(euiThemeContext);
20
+ return {
21
+ euiCollapsibleNavGroup: /*#__PURE__*/(0, _react.css)(";label:euiCollapsibleNavGroup;"),
22
+ isWrapper: /*#__PURE__*/(0, _react.css)("margin:", sharedStyles.padding, ";;label:isWrapper;"),
23
+ euiCollapsibleNavGroup__title: /*#__PURE__*/(0, _react.css)("margin-block:", euiTheme.size.base, ";margin-inline:0;.euiIcon{transform:scale(1.25);};label:euiCollapsibleNavGroup__title;")
24
+ };
25
+ };
26
+ exports.euiCollapsibleNavGroupStyles = euiCollapsibleNavGroupStyles;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "EuiCollapsibleNavGroup", {
7
+ enumerable: true,
8
+ get: function get() {
9
+ return _collapsible_nav_group.EuiCollapsibleNavGroup;
10
+ }
11
+ });
12
+ var _collapsible_nav_group = require("./collapsible_nav_group");
@@ -56,10 +56,6 @@ var EuiCollapsibleNavAccordion = function EuiCollapsibleNavAccordion(_ref) {
56
56
  var euiTheme = (0, _services.useEuiTheme)();
57
57
  var styles = (0, _collapsible_nav_accordion.euiCollapsibleNavAccordionStyles)(euiTheme);
58
58
  var cssStyles = [styles.euiCollapsibleNavAccordion, isSubItem ? styles.isSubItem : styles.isTopItem, isSelected && styles.isSelected, accordionProps === null || accordionProps === void 0 ? void 0 : accordionProps.css];
59
-
60
- /**
61
- * Title / accordion trigger
62
- */
63
59
  var isTitleInteractive = !!(href || linkProps !== null && linkProps !== void 0 && linkProps.onClick);
64
60
 
65
61
  // Stop propagation on the title so that the accordion toggle doesn't occur on click
@@ -71,32 +67,6 @@ var EuiCollapsibleNavAccordion = function EuiCollapsibleNavAccordion(_ref) {
71
67
  }, [linkProps === null || linkProps === void 0 ? void 0 : linkProps.onClick] // eslint-disable-line react-hooks/exhaustive-deps
72
68
  );
73
69
 
74
- /**
75
- * Child items
76
- */
77
- // If any of the sub items have an icon, default to an
78
- // icon of `empty` so that all text lines up vertically
79
- var itemsHaveIcons = (0, _react.useMemo)(function () {
80
- return items.some(function (item) {
81
- return !!item.icon;
82
- });
83
- }, [items]);
84
- var icon = itemsHaveIcons ? 'empty' : undefined;
85
- var childrenCssStyles = [styles.children.euiCollapsibleNavAccordion__children, isSubItem ? styles.children.isSubItem : styles.children.isTopItem];
86
- var children = (0, _react2.jsx)("div", {
87
- css: childrenCssStyles,
88
- className: "euiCollapsibleNavAccordion__children"
89
- }, items.map(function (item, index) {
90
- return (
91
- // This is an intentional circular dependency between the accordion & parent item display.
92
- // EuiSideNavItem is purposely recursive to support any amount of nested sub items,
93
- // and split up into separate files/components for better dev readability
94
- (0, _react2.jsx)(_collapsible_nav_item.EuiCollapsibleNavSubItem, (0, _extends2.default)({
95
- key: index,
96
- icon: icon
97
- }, item))
98
- );
99
- }));
100
70
  return (0, _react2.jsx)(_accordion.EuiAccordion, (0, _extends2.default)({
101
71
  id: groupID,
102
72
  className: classes,
@@ -118,6 +88,10 @@ var EuiCollapsibleNavAccordion = function EuiCollapsibleNavAccordion(_ref) {
118
88
  }, accordionProps === null || accordionProps === void 0 ? void 0 : accordionProps.arrowProps), {}, {
119
89
  css: [styles.euiCollapsibleNavAccordion__arrow, accordionProps === null || accordionProps === void 0 ? void 0 : (_accordionProps$arrow = accordionProps.arrowProps) === null || _accordionProps$arrow === void 0 ? void 0 : _accordionProps$arrow.css]
120
90
  })
121
- }), children);
91
+ }), (0, _react2.jsx)(_collapsible_nav_item.EuiCollapsibleNavSubItems, {
92
+ items: items,
93
+ isSubItem: isSubItem,
94
+ className: "euiCollapsibleNavAccordion__children"
95
+ }));
122
96
  };
123
97
  exports.EuiCollapsibleNavAccordion = EuiCollapsibleNavAccordion;
@@ -26,15 +26,7 @@ var euiCollapsibleNavAccordionStyles = function euiCollapsibleNavAccordionStyles
26
26
  isSelected: /*#__PURE__*/(0, _react.css)("&>.euiAccordion__triggerWrapper{background-color:", sharedStyles.backgroundSelectedColor, ";&:hover{background-color:", sharedStyles.backgroundSelectedColor, ";}};label:isSelected;"),
27
27
  isSubItem: /*#__PURE__*/(0, _react.css)("&.euiAccordion-isOpen{", (0, _global_styling.logicalCSS)('margin-bottom', euiTheme.size.m), ";};label:isSubItem;"),
28
28
  // Arrow element
29
- euiCollapsibleNavAccordion__arrow: /*#__PURE__*/(0, _react.css)((0, _global_styling.logicalCSS)('margin-right', euiTheme.size.xs), _global_styling.euiCanAnimate, "{transition:background-color ", sharedStyles.animation, ";}&:hover,&:focus-visible{background-color:", euiTheme.colors.lightShade, ";&>.euiIcon{color:", sharedStyles.color, ";}}transform:none!important;&>.euiIcon{color:", sharedStyles.rightIconColor, ";transform:rotate(90deg);", _global_styling.euiCanAnimate, "{transition:transform ", sharedStyles.animation, ",color ", sharedStyles.animation, ";}}&.euiAccordion__arrow[aria-expanded='true']>.euiIcon{color:", sharedStyles.color, ";transform:rotate(-90deg);};label:euiCollapsibleNavAccordion__arrow;"),
30
- // Children wrapper
31
- children: {
32
- euiCollapsibleNavAccordion__children: /*#__PURE__*/(0, _react.css)(";label:euiCollapsibleNavAccordion__children;"),
33
- isTopItem: /*#__PURE__*/(0, _react.css)((0, _global_styling.logicalCSS)('padding-top', euiTheme.size.xs), " ", (0, _global_styling.logicalCSS)('padding-left', euiTheme.size.xl), ";;label:isTopItem;"),
34
- isSubItem: /*#__PURE__*/(0, _react.css)((0, _global_styling.logicalCSS)('border-left', euiTheme.border.thin), " ", (0, _global_styling.logicalCSS)('margin-left', euiTheme.size.s), " ", (0, _global_styling.logicalCSS)('padding-left', (0, _global_styling.mathWithUnits)([euiTheme.size.s, euiTheme.border.width.thin], function (x, y) {
35
- return x - y;
36
- })), ";;label:isSubItem;")
37
- }
29
+ euiCollapsibleNavAccordion__arrow: /*#__PURE__*/(0, _react.css)((0, _global_styling.logicalCSS)('margin-right', euiTheme.size.xs), _global_styling.euiCanAnimate, "{transition:background-color ", sharedStyles.animation, ";}&:hover,&:focus-visible{background-color:", euiTheme.colors.lightShade, ";&>.euiIcon{color:", sharedStyles.color, ";}}transform:none!important;&>.euiIcon{color:", sharedStyles.rightIconColor, ";transform:rotate(90deg);", _global_styling.euiCanAnimate, "{transition:transform ", sharedStyles.animation, ",color ", sharedStyles.animation, ";}}&.euiAccordion__arrow[aria-expanded='true']>.euiIcon{color:", sharedStyles.color, ";transform:rotate(-90deg);};label:euiCollapsibleNavAccordion__arrow;")
38
30
  };
39
31
  };
40
32
  exports.euiCollapsibleNavAccordionStyles = euiCollapsibleNavAccordionStyles;
@@ -5,14 +5,13 @@ var _typeof = require("@babel/runtime/helpers/typeof");
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.EuiCollapsibleNavSubItem = exports.EuiCollapsibleNavItem = void 0;
8
+ exports.EuiCollapsibleNavSubItems = exports.EuiCollapsibleNavSubItem = exports.EuiCollapsibleNavItemTitle = exports.EuiCollapsibleNavItem = void 0;
9
9
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
10
10
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
11
11
  var _react = _interopRequireWildcard(require("react"));
12
12
  var _classnames = _interopRequireDefault(require("classnames"));
13
13
  var _services = require("../../../services");
14
14
  var _icon = require("../../icon");
15
- var _title = require("../../title");
16
15
  var _context = require("../context");
17
16
  var _collapsed = require("./collapsed");
18
17
  var _collapsible_nav_accordion = require("./collapsible_nav_accordion");
@@ -20,8 +19,9 @@ var _collapsible_nav_link = require("./collapsible_nav_link");
20
19
  var _collapsible_nav_item = require("./collapsible_nav_item.styles");
21
20
  var _react2 = require("@emotion/react");
22
21
  var _excluded = ["isSubItem", "title", "titleElement", "icon", "iconProps", "items", "children"],
23
- _excluded2 = ["isGroupTitle", "className"],
24
- _excluded3 = ["className"];
22
+ _excluded2 = ["renderItem", "className"],
23
+ _excluded3 = ["items", "isSubItem", "isGroup", "className"],
24
+ _excluded4 = ["className"];
25
25
  /*
26
26
  * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
27
27
  * or more contributor license agreements. Licensed under the Elastic License
@@ -89,23 +89,17 @@ var EuiCollapsibleNavItemTitle = function EuiCollapsibleNavItemTitle(_ref2) {
89
89
  };
90
90
 
91
91
  /**
92
- * Sub-items can either be a group title, to visually separate sections
93
- * of nav links, or they can simply be more links or accordions
92
+ * Sub-items can either be a totally custom rendered item,
93
+ * or they can simply be more links or accordions
94
94
  */
95
+ exports.EuiCollapsibleNavItemTitle = EuiCollapsibleNavItemTitle;
95
96
  var EuiCollapsibleNavSubItem = function EuiCollapsibleNavSubItem(_ref3) {
96
- var isGroupTitle = _ref3.isGroupTitle,
97
+ var renderItem = _ref3.renderItem,
97
98
  className = _ref3.className,
98
99
  props = (0, _objectWithoutProperties2.default)(_ref3, _excluded2);
99
- var euiTheme = (0, _services.useEuiTheme)();
100
- var styles = (0, _collapsible_nav_item.euiCollapsibleNavSubItemGroupTitleStyles)(euiTheme);
101
100
  var classes = (0, _classnames.default)('euiCollapsibleNavSubItem', className);
102
- if (isGroupTitle) {
103
- var TitleElement = props.titleElement || 'div';
104
- return (0, _react2.jsx)(_title.EuiTitle, {
105
- size: "xxxs",
106
- css: styles.euiCollapsibleNavItem__groupTitle,
107
- className: "euiCollapsibleNavItem__groupTitle eui-textTruncate"
108
- }, (0, _react2.jsx)(TitleElement, null, props.title));
101
+ if (renderItem) {
102
+ return (0, _react2.jsx)(_react.default.Fragment, null, renderItem());
109
103
  }
110
104
  return (0, _react2.jsx)(EuiCollapsibleNavItemDisplay, (0, _extends2.default)({
111
105
  className: classes
@@ -115,12 +109,52 @@ var EuiCollapsibleNavSubItem = function EuiCollapsibleNavSubItem(_ref3) {
115
109
  };
116
110
 
117
111
  /**
118
- * The actual exported component
112
+ * Reuseable component for rendering a group of sub items
113
+ * Used by both `EuiCollapsibleNavGroup` and `EuiCollapsibleNavAccordion`
119
114
  */
120
115
  exports.EuiCollapsibleNavSubItem = EuiCollapsibleNavSubItem;
121
- var EuiCollapsibleNavItem = function EuiCollapsibleNavItem(_ref4) {
122
- var className = _ref4.className,
123
- props = (0, _objectWithoutProperties2.default)(_ref4, _excluded3);
116
+ var EuiCollapsibleNavSubItems = function EuiCollapsibleNavSubItems(_ref4) {
117
+ var items = _ref4.items,
118
+ isSubItem = _ref4.isSubItem,
119
+ isGroup = _ref4.isGroup,
120
+ className = _ref4.className,
121
+ rest = (0, _objectWithoutProperties2.default)(_ref4, _excluded3);
122
+ var classes = (0, _classnames.default)('euiCollapsibleNavItem__items', className);
123
+ var euiTheme = (0, _services.useEuiTheme)();
124
+ var styles = (0, _collapsible_nav_item.euiCollapsibleNavSubItemsStyles)(euiTheme);
125
+ var cssStyles = [styles.euiCollapsibleNavItem__items, isGroup ? styles.isGroup : isSubItem ? styles.isSubItem : styles.isTopItem];
126
+ var itemsHaveIcons = (0, _react.useMemo)(function () {
127
+ return items.some(function (item) {
128
+ return !!item.icon;
129
+ });
130
+ }, [items]);
131
+ return (0, _react2.jsx)("div", (0, _extends2.default)({
132
+ className: classes,
133
+ css: cssStyles
134
+ }, rest), items.map(function (item, index) {
135
+ // If any of the sub items have an icon, default to an
136
+ // icon of `empty` so that all text lines up vertically
137
+ if (!item.renderItem && itemsHaveIcons && !item.icon) {
138
+ item.icon = 'empty';
139
+ }
140
+ return (
141
+ // This is an intentional circular dependency between the accordion & parent item display.
142
+ // EuiSideNavItem is purposely recursive to support any amount of nested sub items,
143
+ // and split up into separate files/components for better dev readability
144
+ (0, _react2.jsx)(EuiCollapsibleNavSubItem, (0, _extends2.default)({
145
+ key: index
146
+ }, item))
147
+ );
148
+ }));
149
+ };
150
+
151
+ /**
152
+ * The actual exported component
153
+ */
154
+ exports.EuiCollapsibleNavSubItems = EuiCollapsibleNavSubItems;
155
+ var EuiCollapsibleNavItem = function EuiCollapsibleNavItem(_ref5) {
156
+ var className = _ref5.className,
157
+ props = (0, _objectWithoutProperties2.default)(_ref5, _excluded4);
124
158
  var classes = (0, _classnames.default)('euiCollapsibleNavItem', className);
125
159
  var _useContext = (0, _react.useContext)(_context.EuiCollapsibleNavContext),
126
160
  isCollapsed = _useContext.isCollapsed,
@@ -4,7 +4,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.euiCollapsibleNavSubItemGroupTitleStyles = exports.euiCollapsibleNavItemVariables = exports.euiCollapsibleNavItemTitleStyles = void 0;
7
+ exports.euiCollapsibleNavSubItemsStyles = exports.euiCollapsibleNavItemVariables = exports.euiCollapsibleNavItemTitleStyles = void 0;
8
8
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
9
  var _react = require("@emotion/react");
10
10
  var _global_styling = require("../../../global_styling");
@@ -51,11 +51,20 @@ var euiCollapsibleNavItemTitleStyles = {
51
51
  toString: _EMOTION_STRINGIFIED_CSS_ERROR__
52
52
  }
53
53
  };
54
+
55
+ /**
56
+ * Sub item groups
57
+ */
54
58
  exports.euiCollapsibleNavItemTitleStyles = euiCollapsibleNavItemTitleStyles;
55
- var euiCollapsibleNavSubItemGroupTitleStyles = function euiCollapsibleNavSubItemGroupTitleStyles(_ref) {
59
+ var euiCollapsibleNavSubItemsStyles = function euiCollapsibleNavSubItemsStyles(_ref) {
56
60
  var euiTheme = _ref.euiTheme;
57
61
  return {
58
- euiCollapsibleNavItem__groupTitle: /*#__PURE__*/(0, _react.css)((0, _global_styling.logicalCSS)('margin-top', euiTheme.size.base), " ", (0, _global_styling.logicalShorthandCSS)('padding', "".concat(euiTheme.size.xs, " ").concat(euiTheme.size.s)), ";;label:euiCollapsibleNavItem__groupTitle;")
62
+ euiCollapsibleNavItem__items: /*#__PURE__*/(0, _react.css)(";label:euiCollapsibleNavItem__items;"),
63
+ isGroup: /*#__PURE__*/(0, _react.css)((0, _global_styling.logicalCSS)('padding-top', euiTheme.size.xs), " ", (0, _global_styling.logicalCSS)('padding-left', euiTheme.size.s), ";;label:isGroup;"),
64
+ isTopItem: /*#__PURE__*/(0, _react.css)((0, _global_styling.logicalCSS)('padding-top', euiTheme.size.xs), " ", (0, _global_styling.logicalCSS)('padding-left', euiTheme.size.xl), ";;label:isTopItem;"),
65
+ isSubItem: /*#__PURE__*/(0, _react.css)((0, _global_styling.logicalCSS)('border-left', euiTheme.border.thin), " ", (0, _global_styling.logicalCSS)('margin-left', euiTheme.size.s), " ", (0, _global_styling.logicalCSS)('padding-left', (0, _global_styling.mathWithUnits)([euiTheme.size.s, euiTheme.border.width.thin], function (x, y) {
66
+ return x - y;
67
+ })), ";;label:isSubItem;")
59
68
  };
60
69
  };
61
- exports.euiCollapsibleNavSubItemGroupTitleStyles = euiCollapsibleNavSubItemGroupTitleStyles;
70
+ exports.euiCollapsibleNavSubItemsStyles = euiCollapsibleNavSubItemsStyles;