@elliemae/ds-left-navigation 2.0.0-next.7 → 2.0.0-rc.10

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 (103) hide show
  1. package/cjs/LeftNavigationContext.js +0 -4
  2. package/cjs/common/getLeftBorderStyle.js +2 -2
  3. package/cjs/common/index.js +0 -2
  4. package/cjs/configs/useLeftNavConfig.js +13 -21
  5. package/cjs/configs/useLeftNavItems.js +7 -7
  6. package/cjs/exported-related/ChevronItem/index.js +7 -3
  7. package/cjs/exported-related/Icon/index.js +5 -0
  8. package/cjs/exported-related/ItemRenderer/index.js +4 -5
  9. package/cjs/exported-related/ItemRenderer/styled.js +27 -17
  10. package/cjs/exported-related/ItemRenderer/usePropsWithDefaults.js +5 -0
  11. package/cjs/exported-related/Notifications/index.js +41 -41
  12. package/cjs/exported-related/OpenWindowItem/index.js +7 -3
  13. package/cjs/hooks/useExpandableOnClickHandler.js +7 -6
  14. package/cjs/hooks/useKeyboardNavigation.js +7 -7
  15. package/cjs/hooks/useOpenableOnClickHandler.js +8 -7
  16. package/cjs/hooks/useSelectFirstBodyItem.js +13 -3
  17. package/cjs/outOfTheBox/ItemControlledDrilldown/index.js +17 -16
  18. package/cjs/outOfTheBox/ItemControlledDrilldown/styled.js +7 -4
  19. package/cjs/outOfTheBox/ItemHeader/index.js +20 -13
  20. package/cjs/outOfTheBox/ItemHeader/styled.js +3 -4
  21. package/cjs/outOfTheBox/ItemLink/index.js +18 -14
  22. package/cjs/outOfTheBox/ItemSection/index.js +6 -6
  23. package/cjs/outOfTheBox/ItemSeparator/index.js +6 -6
  24. package/cjs/outOfTheBox/ItemSubmenu/index.js +12 -12
  25. package/cjs/outOfTheBox/ItemSubmenu/styled.js +3 -4
  26. package/cjs/outOfTheBox/ItemTextLabel/index.js +11 -9
  27. package/cjs/outOfTheBox/ItemTextLabel/styled.js +7 -4
  28. package/cjs/outOfTheBox/ItemUncontrolledDrilldown/index.js +12 -13
  29. package/cjs/outOfTheBox/ItemUncontrolledDrilldown/styled.js +7 -4
  30. package/cjs/outOfTheBox/ItemWithDate/index.js +9 -8
  31. package/cjs/outOfTheBox/ItemWithDate/styled.js +7 -4
  32. package/cjs/outOfTheBox/index.js +6 -6
  33. package/cjs/parts/LeftNavContent/index.js +2 -0
  34. package/cjs/parts/LeftNavContent/styled.js +9 -6
  35. package/cjs/parts/LeftNavContentWithScrollbar/index.js +6 -1
  36. package/cjs/parts/LeftNavFooterItem/index.js +2 -11
  37. package/cjs/parts/LeftNavFooterItem/styled.js +8 -9
  38. package/cjs/parts/LeftNavLoading/index.js +13 -10
  39. package/cjs/parts/OutOfTheBoxMapItem.js +5 -0
  40. package/esm/LeftNavigationContext.js +0 -4
  41. package/esm/common/getLeftBorderStyle.js +2 -2
  42. package/esm/common/index.js +0 -1
  43. package/esm/configs/useLeftNavConfig.js +13 -21
  44. package/esm/configs/useLeftNavItems.js +7 -7
  45. package/esm/exported-related/ChevronItem/index.js +7 -2
  46. package/esm/exported-related/Icon/index.js +5 -0
  47. package/esm/exported-related/ItemRenderer/index.js +4 -5
  48. package/esm/exported-related/ItemRenderer/styled.js +27 -18
  49. package/esm/exported-related/ItemRenderer/usePropsWithDefaults.js +5 -0
  50. package/esm/exported-related/Notifications/index.js +41 -37
  51. package/esm/exported-related/OpenWindowItem/index.js +7 -2
  52. package/esm/hooks/useExpandableOnClickHandler.js +7 -6
  53. package/esm/hooks/useKeyboardNavigation.js +7 -7
  54. package/esm/hooks/useOpenableOnClickHandler.js +8 -7
  55. package/esm/hooks/useSelectFirstBodyItem.js +13 -3
  56. package/esm/outOfTheBox/ItemControlledDrilldown/index.js +14 -11
  57. package/esm/outOfTheBox/ItemControlledDrilldown/styled.js +7 -4
  58. package/esm/outOfTheBox/ItemHeader/index.js +20 -13
  59. package/esm/outOfTheBox/ItemHeader/styled.js +3 -3
  60. package/esm/outOfTheBox/ItemLink/index.js +18 -14
  61. package/esm/outOfTheBox/ItemSection/index.js +6 -6
  62. package/esm/outOfTheBox/ItemSeparator/index.js +6 -6
  63. package/esm/outOfTheBox/ItemSubmenu/index.js +12 -12
  64. package/esm/outOfTheBox/ItemSubmenu/styled.js +3 -3
  65. package/esm/outOfTheBox/ItemTextLabel/index.js +11 -9
  66. package/esm/outOfTheBox/ItemTextLabel/styled.js +7 -4
  67. package/esm/outOfTheBox/ItemUncontrolledDrilldown/index.js +11 -10
  68. package/esm/outOfTheBox/ItemUncontrolledDrilldown/styled.js +7 -4
  69. package/esm/outOfTheBox/ItemWithDate/index.js +9 -8
  70. package/esm/outOfTheBox/ItemWithDate/styled.js +7 -4
  71. package/esm/outOfTheBox/index.js +6 -6
  72. package/esm/parts/LeftNavContent/index.js +2 -0
  73. package/esm/parts/LeftNavContent/styled.js +9 -6
  74. package/esm/parts/LeftNavContentWithScrollbar/index.js +6 -1
  75. package/esm/parts/LeftNavFooterItem/index.js +1 -9
  76. package/esm/parts/LeftNavFooterItem/styled.js +3 -4
  77. package/esm/parts/LeftNavLoading/index.js +13 -10
  78. package/esm/parts/OutOfTheBoxMapItem.js +5 -0
  79. package/package.json +12 -17
  80. package/types/LeftNavigation.d.ts +43 -11
  81. package/types/LeftNavigationContext.d.ts +0 -4
  82. package/types/common/index.d.ts +0 -1
  83. package/types/exported-related/ItemRenderer/styled.d.ts +3 -2
  84. package/types/hooks/useKeyboardNavigation.d.ts +1 -1
  85. package/types/hooks/useSelectFirstBodyItem.d.ts +1 -1
  86. package/types/index.d.d.ts +5 -2
  87. package/types/outOfTheBox/ItemControlledDrilldown/styled.d.ts +2 -2
  88. package/types/outOfTheBox/ItemHeader/styled.d.ts +2 -2
  89. package/types/outOfTheBox/ItemLink/styled.d.ts +1 -1
  90. package/types/outOfTheBox/ItemSection/styled.d.ts +3 -3
  91. package/types/outOfTheBox/ItemSubmenu/styled.d.ts +2 -2
  92. package/types/outOfTheBox/ItemTextLabel/styled.d.ts +1 -1
  93. package/types/outOfTheBox/ItemUncontrolledDrilldown/styled.d.ts +2 -2
  94. package/types/outOfTheBox/ItemWithDate/styled.d.ts +2 -2
  95. package/types/parts/LeftNavContent/styled.d.ts +7 -11
  96. package/types/parts/LeftNavFooterItem/styled.d.ts +10 -6
  97. package/types/prop-types.d.ts +84 -18
  98. package/cjs/common/getFocusedByKeyboardStyle.js +0 -12
  99. package/cjs/configs/useGlobalKeyListeners.js +0 -31
  100. package/esm/common/getFocusedByKeyboardStyle.js +0 -8
  101. package/esm/configs/useGlobalKeyListeners.js +0 -22
  102. package/types/common/getFocusedByKeyboardStyle.d.ts +0 -4
  103. package/types/configs/useGlobalKeyListeners.d.ts +0 -6
@@ -23,12 +23,8 @@ const defaultContext = {
23
23
  leftNavProps: defaultProps,
24
24
  selectedItem: null,
25
25
  setSelectedItem: () => null,
26
- selectedSubitem: null,
27
- setSelectedSubitem: () => null,
28
26
  focusedItem: null,
29
27
  setFocusedItem: () => null,
30
- focusedByKey: false,
31
- setFocusedByKey: () => null,
32
28
  expandedForAnimation: true,
33
29
  openedDrilldowns: [],
34
30
  setOpenedDrilldowns: () => null,
@@ -5,8 +5,8 @@ Object.defineProperty(exports, '__esModule', { value: true });
5
5
  const commonLeftBorderStyle = (color, hoverColor, activeColor) => "\n\n -webkit-box-shadow: inset 4px 0 0 0 ".concat(color, ";\n box-shadow: inset 4px 0 0 0 ").concat(color, ";\n\n :hover {\n -webkit-box-shadow: inset 4px 0 0 0 ").concat(hoverColor, ";\n box-shadow: inset 4px 0 0 0 ").concat(hoverColor, ";\n }\n\n :active {\n -webkit-box-shadow: inset 4px 0 0 0 ").concat(activeColor, ";\n box-shadow: inset 4px 0 0 0 ").concat(activeColor, ";\n }\n");
6
6
 
7
7
  const getLeftBorderStyle = props => {
8
- if (props.selected) return commonLeftBorderStyle(props.theme.colors.brand[400], props.theme.colors.brand[400], props.theme.colors.brand[400]);
9
- return commonLeftBorderStyle(props.theme.colors.neutral['000'], props.theme.colors.neutral[300], props.theme.colors.brand[400]);
8
+ if (props.selected || props.selectedParent) return commonLeftBorderStyle(props.theme.colors.brand[400], props.theme.colors.brand[400], props.theme.colors.brand[400]);
9
+ return commonLeftBorderStyle(props.theme.colors.neutral['000'], props.theme.colors.brand[300], props.theme.colors.brand[400]);
10
10
  };
11
11
 
12
12
  exports.getLeftBorderStyle = getLeftBorderStyle;
@@ -2,14 +2,12 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var getFocusedByKeyboardStyle = require('./getFocusedByKeyboardStyle.js');
6
5
  var getItemBackgroundStyle = require('./getItemBackgroundStyle.js');
7
6
  var getLeftBorderStyle = require('./getLeftBorderStyle.js');
8
7
  var getScrollbarStyle = require('./getScrollbarStyle.js');
9
8
 
10
9
 
11
10
 
12
- exports.getFocusedByKeyboardBorderStyle = getFocusedByKeyboardStyle.getFocusedByKeyboardBorderStyle;
13
11
  exports.getItemBackgroundStyle = getItemBackgroundStyle.getItemBackgroundStyle;
14
12
  exports.getLeftBorderStyle = getLeftBorderStyle.getLeftBorderStyle;
15
13
  exports.getScrolbarStyle = getScrollbarStyle.getScrolbarStyle;
@@ -4,7 +4,6 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  require('core-js/modules/web.dom-collections.iterator.js');
6
6
  var React = require('react');
7
- var useGlobalKeyListeners = require('./useGlobalKeyListeners.js');
8
7
  var useLeftNavItems = require('./useLeftNavItems.js');
9
8
  var useLeftNavSmoothExpand = require('./useLeftNavSmoothExpand.js');
10
9
  var useSelectFirstBodyItem = require('../hooks/useSelectFirstBodyItem.js');
@@ -27,10 +26,10 @@ const useLeftNavConfig = props => {
27
26
  // Selection related
28
27
 
29
28
  const [selectedItem, setSelectedItem] = React__default["default"].useState(null);
30
- const [selectedSubitem, setSelectedSubitem] = React__default["default"].useState(null); // Focus related
29
+ React__default["default"].useState(null);
30
+ const [selectedParent, setSelectedParent] = React__default["default"].useState(null); // Focus related
31
31
 
32
- const [focusedItem, setFocusedItem] = React__default["default"].useState(null);
33
- const [focusedByKey, setFocusedByKey] = React__default["default"].useState(true); // Opened uncontrolled drilldowns
32
+ const [focusedItem, setFocusedItem] = React__default["default"].useState(null); // Opened uncontrolled drilldowns
34
33
 
35
34
  const [openedDrilldowns, setOpenedDrilldowns] = React__default["default"].useState([]); // -----------------------------------------------------------------------------
36
35
  // ************************** ------------ **************************
@@ -46,24 +45,19 @@ const useLeftNavConfig = props => {
46
45
  }), [expandedForAnimation, timeoutRef, setExpandedForAnimation]);
47
46
  useLeftNavSmoothExpand.useLeftNavSmoothExpand(props, smoothExpandOpts); // -----------------------------------------------------------------------------
48
47
  // ************************** ------------ **************************
49
- // * KEYBOARD *
50
- // ************************** ------------ **************************
51
-
52
- const globalKeyOpts = React__default["default"].useMemo(() => ({
53
- setFocusedByKey
54
- }), [setFocusedByKey]);
55
- useGlobalKeyListeners.useGlobalKeyListeners(globalKeyOpts); // -----------------------------------------------------------------------------
56
- // ************************** ------------ **************************
57
48
  // * SIDE EFFECTS *
58
49
  // ************************** ------------ **************************
59
50
 
60
51
  React__default["default"].useEffect(() => {
61
52
  onSelectedChange(selectedItem);
62
53
  }, [selectedItem, onSelectedChange]);
54
+ React__default["default"].useEffect(() => {
55
+ if (openedItem !== null) setSelectedParent(openedItem);
56
+ }, [openedItem]);
63
57
  React__default["default"].useEffect(() => {
64
58
  onFocusChange(focusedItem);
65
- }, [focusedItem, setFocusedItem]);
66
- useSelectFirstBodyItem.useSelectFirstBodyItem(items, openedItem, setSelectedItem); // -----------------------------------------------------------------------------
59
+ }, [focusedItem, onFocusChange]);
60
+ useSelectFirstBodyItem.useSelectFirstBodyItem(items, openedItem, props.selectedItem !== undefined ? props.selectedItem : selectedItem, setSelectedItem); // -----------------------------------------------------------------------------
67
61
  // ************************** ------------ **************************
68
62
  // * ITEMS MANAGEMENT *
69
63
  // ************************** ------------ **************************
@@ -73,7 +67,7 @@ const useLeftNavConfig = props => {
73
67
  bodyHeaderItem: props.BodyHeaderComponent,
74
68
  items: props.items,
75
69
  openedDrilldowns
76
- }), [props.items, openedDrilldowns]); // We need to know the current visible items since we have drilldowns
70
+ }), [props.HeaderComponent, props.BodyHeaderComponent, props.items, openedDrilldowns]); // We need to know the current visible items since we have drilldowns
77
71
 
78
72
  const {
79
73
  visibleItems,
@@ -86,19 +80,17 @@ const useLeftNavConfig = props => {
86
80
  const finalConfig = React__default["default"].useMemo(() => ({
87
81
  leftNavProps: props,
88
82
  expandedForAnimation,
89
- selectedItem,
83
+ selectedItem: props.selectedItem !== undefined ? props.selectedItem : selectedItem,
90
84
  setSelectedItem,
91
- selectedSubitem,
92
- setSelectedSubitem,
85
+ selectedParent: props.selectedParent !== undefined ? props.selectedParent : selectedParent,
86
+ setSelectedParent,
93
87
  focusedItem,
94
88
  setFocusedItem,
95
- focusedByKey,
96
- setFocusedByKey,
97
89
  openedDrilldowns,
98
90
  setOpenedDrilldowns,
99
91
  visibleItems,
100
92
  visibleItemsRefs
101
- }), [props, props.items, expandedForAnimation, selectedItem, setSelectedItem, selectedSubitem, setSelectedSubitem, focusedItem, setFocusedItem, focusedByKey, setFocusedByKey, openedDrilldowns, setOpenedDrilldowns, visibleItems, visibleItemsRefs]);
93
+ }), [props, expandedForAnimation, selectedItem, setSelectedItem, setSelectedParent, selectedParent, focusedItem, setFocusedItem, openedDrilldowns, setOpenedDrilldowns, visibleItems, visibleItemsRefs]);
102
94
  return finalConfig;
103
95
  };
104
96
 
@@ -2,20 +2,20 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
+ require('core-js/modules/esnext.async-iterator.for-each.js');
6
+ require('core-js/modules/esnext.iterator.constructor.js');
7
+ require('core-js/modules/esnext.iterator.for-each.js');
5
8
  require('core-js/modules/web.dom-collections.iterator.js');
6
9
  var React = require('react');
7
10
  var constants = require('../exported-related/constants.js');
8
11
  require('@babel/runtime/helpers/jsx');
9
12
  require('@elliemae/ds-grid');
10
13
  require('styled-components');
14
+ require('core-js/modules/esnext.async-iterator.filter.js');
15
+ require('core-js/modules/esnext.iterator.filter.js');
11
16
  require('@babel/runtime/helpers/defineProperty');
12
17
  require('react/jsx-runtime');
13
- require('@elliemae/ds-icons/ChevronSmallRight');
14
- require('@elliemae/ds-icons/Notifications');
15
- require('@elliemae/ds-icons/ExceptionsSmallFill');
16
- require('@elliemae/ds-icons/AlertsSmallFill');
17
- require('@elliemae/ds-icons/MessagesSmallFill');
18
- require('@elliemae/ds-icons/OpenWindow');
18
+ require('@elliemae/ds-icons');
19
19
 
20
20
  const notFocuseableItems = [constants.ITEM_TYPES.LEFT_NAV_ITEM_SEPARATOR, constants.ITEM_TYPES.LEFT_NAV_ITEM_SECTION]; // Walks the array of items
21
21
  // Drilldowns are tree-like structures
@@ -66,7 +66,7 @@ const useLeftNavItems = props => {
66
66
  });
67
67
  visibleItemsArray.push(constants.FOOTER_DS_ID);
68
68
  return visibleItemsArray;
69
- }, [props]);
69
+ }, [items, openedDrilldowns]);
70
70
  visibleItems.forEach(dsId => {
71
71
  if (!(dsId in visibleItemsRefs.current)) visibleItemsRefs.current[dsId] = /*#__PURE__*/React.createRef();
72
72
  });
@@ -2,20 +2,24 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
+ require('core-js/modules/esnext.async-iterator.filter.js');
6
+ require('core-js/modules/esnext.iterator.constructor.js');
7
+ require('core-js/modules/esnext.iterator.filter.js');
8
+ require('core-js/modules/esnext.async-iterator.for-each.js');
9
+ require('core-js/modules/esnext.iterator.for-each.js');
5
10
  var _defineProperty = require('@babel/runtime/helpers/defineProperty');
6
11
  require('react');
7
- var ChevronRight = require('@elliemae/ds-icons/ChevronSmallRight');
12
+ var dsIcons = require('@elliemae/ds-icons');
8
13
  var jsxRuntime = require('react/jsx-runtime');
9
14
 
10
15
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
11
16
 
12
17
  var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_defineProperty);
13
- var ChevronRight__default = /*#__PURE__*/_interopDefaultLegacy(ChevronRight);
14
18
 
15
19
  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; }
16
20
 
17
21
  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__default["default"](target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
18
- const ChevronItem = props => /*#__PURE__*/jsxRuntime.jsx(ChevronRight__default["default"], _objectSpread({
22
+ const ChevronItem = props => /*#__PURE__*/jsxRuntime.jsx(dsIcons.ChevronSmallRight, _objectSpread({
19
23
  size: "m",
20
24
  color: ['brand-primary', 800]
21
25
  }, props));
@@ -2,6 +2,11 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
+ require('core-js/modules/esnext.async-iterator.filter.js');
6
+ require('core-js/modules/esnext.iterator.constructor.js');
7
+ require('core-js/modules/esnext.iterator.filter.js');
8
+ require('core-js/modules/esnext.async-iterator.for-each.js');
9
+ require('core-js/modules/esnext.iterator.for-each.js');
5
10
  var _defineProperty = require('@babel/runtime/helpers/defineProperty');
6
11
  require('react');
7
12
  var styled = require('styled-components');
@@ -50,10 +50,9 @@ const ItemRenderer = props => {
50
50
  openedItem
51
51
  },
52
52
  expandedForAnimation,
53
- focusedByKey,
53
+ selectedParent,
54
54
  selectedItem,
55
55
  setSelectedItem,
56
- focusedItem,
57
56
  setFocusedItem,
58
57
  visibleItemsRefs
59
58
  } = ctx;
@@ -73,7 +72,6 @@ const ItemRenderer = props => {
73
72
  });
74
73
  const cols = React.useMemo(() => expandedForAnimation ? ['auto', '1fr', 'auto'] : ['38px'], [expandedForAnimation]);
75
74
  const isSelected = React.useMemo(() => selectedItem === dsId, [selectedItem, dsId]);
76
- const isFocused = React.useMemo(() => focusedItem === dsId, [focusedItem, dsId]);
77
75
 
78
76
  if (!expandedForAnimation && !CollapsedComponent) {
79
77
  return null;
@@ -95,15 +93,16 @@ const ItemRenderer = props => {
95
93
  onKeyDown: onKeyDown,
96
94
  selectable: selectable,
97
95
  selected: isSelected,
96
+ selectedParent: selectedParent === dsId,
98
97
  opened: opened,
99
- focused: isFocused,
100
- focusedByKey: focusedByKey,
101
98
  onFocus: handleFocus,
102
99
  "data-testid": "leftnav-item-container",
103
100
  tabIndex: focuseable ? 0 : -1,
104
101
  "aria-describedby": ariaDescribedBy,
105
102
  "aria-expanded": ariaExpanded,
106
103
  role: ariaRole,
104
+ "data-selected": isSelected,
105
+ "data-selectedparent": selectedParent === dsId,
107
106
  "aria-label": ariaLabel,
108
107
  "aria-hidden": !focuseable,
109
108
  "aria-live": ariaLive,
@@ -11,38 +11,48 @@ var Grid__default = /*#__PURE__*/_interopDefaultLegacy(Grid);
11
11
  var styled__default = /*#__PURE__*/_interopDefaultLegacy(styled);
12
12
 
13
13
  /* eslint-disable indent */
14
+ const borderOutside = function (color) {
15
+ let weight = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2;
16
+ return "&:before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n border: ".concat(weight, "px solid ").concat(color, ";\n pointer-events: none;\n}");
17
+ };
14
18
  const StyledItemWrapper = /*#__PURE__*/styled__default["default"](Grid__default["default"]).withConfig({
15
19
  componentId: "sc-11wzgfh-0"
16
20
  })(["position:relative;", ""], props => props.shadowStyle(props.theme));
17
21
 
18
- const getItemBackground = ({
19
- selectable,
20
- opened,
21
- selected,
22
- theme
23
- }) => {
22
+ const getItemBackground = _ref => {
23
+ let {
24
+ selectable,
25
+ opened,
26
+ selected,
27
+ theme
28
+ } = _ref;
24
29
  if (!selectable) return 'white';
25
30
  if (selected && !opened) return theme.colors.brand[200];
26
31
  return theme.colors.neutral['000'];
27
32
  };
28
33
 
29
- const getItemHoverBackground = ({
30
- selectable,
31
- opened,
32
- selected,
33
- theme
34
- }) => {
34
+ const getItemHoverBackground = _ref2 => {
35
+ let {
36
+ selectable,
37
+ opened,
38
+ selected,
39
+ theme
40
+ } = _ref2;
35
41
  if (!selectable) return 'white';
36
42
  if (selected && !opened) return theme.colors.brand[200];
37
- return theme.colors.neutral['080'];
43
+ return theme.colors.brand['200'];
38
44
  };
39
45
 
40
46
  const StyledItem = /*#__PURE__*/styled__default["default"](Grid__default["default"]).withConfig({
41
47
  componentId: "sc-11wzgfh-1"
42
- })(["cursor:", ";min-height:", ";background:", ";:hover{background:", ";}:active{background:", ";}", ";outline:none;", ""], props => props.selectable && !props.opened ? 'pointer' : 'auto', props => props.minHeight, getItemBackground, getItemHoverBackground, ({
43
- selectable,
44
- theme
45
- }) => selectable ? theme.colors.brand[200] : 'white', props => props.shadowStyle(props.theme), props => props.focused && props.focusedByKey ? "\n &:before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n border: 1px solid ".concat(props.theme.colors.brand[600], ";\n pointer-events: none;\n }") : '');
48
+ })(["cursor:", ";min-height:", ";background:", ";", ":hover{background:", ";}:active{background:", ";}", ";outline:none;", ""], props => props.selectable && !props.opened ? 'pointer' : 'auto', props => props.minHeight, getItemBackground, props => props.selected && !props.opened ? borderOutside(props.theme.colors.brand[500], 1) : '', getItemHoverBackground, _ref3 => {
49
+ let {
50
+ selectable,
51
+ theme
52
+ } = _ref3;
53
+ return selectable ? theme.colors.brand[200] : 'white';
54
+ }, props => props.shadowStyle(props.theme), props => props.tabIndex !== -1 ? ":focus {\n ".concat(borderOutside(props.theme.colors.brand[700]), "\n }") : '');
46
55
 
47
56
  exports.StyledItem = StyledItem;
48
57
  exports.StyledItemWrapper = StyledItemWrapper;
58
+ exports.borderOutside = borderOutside;
@@ -2,6 +2,11 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
+ require('core-js/modules/esnext.async-iterator.filter.js');
6
+ require('core-js/modules/esnext.iterator.constructor.js');
7
+ require('core-js/modules/esnext.iterator.filter.js');
8
+ require('core-js/modules/esnext.async-iterator.for-each.js');
9
+ require('core-js/modules/esnext.iterator.for-each.js');
5
10
  var _defineProperty = require('@babel/runtime/helpers/defineProperty');
6
11
  var React = require('react');
7
12
 
@@ -4,59 +4,59 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var _jsx = require('@babel/runtime/helpers/jsx');
6
6
  require('react');
7
- var InternalNotifications = require('@elliemae/ds-icons/Notifications');
8
- var ExceptionsSmallFill = require('@elliemae/ds-icons/ExceptionsSmallFill');
9
- var AlertsSmallFill = require('@elliemae/ds-icons/AlertsSmallFill');
10
- var MessagesSmallFill = require('@elliemae/ds-icons/MessagesSmallFill');
7
+ var dsIcons = require('@elliemae/ds-icons');
11
8
  var styled = require('styled-components');
12
9
  var Grid = require('@elliemae/ds-grid');
13
10
 
14
11
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
15
12
 
16
13
  var _jsx__default = /*#__PURE__*/_interopDefaultLegacy(_jsx);
17
- var InternalNotifications__default = /*#__PURE__*/_interopDefaultLegacy(InternalNotifications);
18
- var ExceptionsSmallFill__default = /*#__PURE__*/_interopDefaultLegacy(ExceptionsSmallFill);
19
- var AlertsSmallFill__default = /*#__PURE__*/_interopDefaultLegacy(AlertsSmallFill);
20
- var MessagesSmallFill__default = /*#__PURE__*/_interopDefaultLegacy(MessagesSmallFill);
21
14
  var styled__default = /*#__PURE__*/_interopDefaultLegacy(styled);
22
15
  var Grid__default = /*#__PURE__*/_interopDefaultLegacy(Grid);
23
16
 
24
17
  const StyledIcon = /*#__PURE__*/styled__default["default"].div.withConfig({
25
18
  componentId: "sc-hasbsd-0"
26
19
  })(["display:flex;flex-direction:column;align-items:center;"]);
27
- const Notifications = ({
28
- exceptions = false,
29
- alerts = false,
30
- messages = false
31
- }) => /*#__PURE__*/_jsx__default["default"](StyledIcon, {}, void 0, /*#__PURE__*/_jsx__default["default"](InternalNotifications__default["default"], {
32
- size: "m",
33
- color: ['brand-primary', 800]
34
- }), (exceptions || alerts || messages) && /*#__PURE__*/_jsx__default["default"](Grid__default["default"], {
35
- cols: ['1fr', '1fr', '1fr'],
36
- gutter: "xxxs",
37
- mt: "2px"
38
- }, void 0, /*#__PURE__*/_jsx__default["default"](Grid__default["default"], {
39
- width: "6px",
40
- height: "6px"
41
- }, void 0, exceptions && /*#__PURE__*/_jsx__default["default"](ExceptionsSmallFill__default["default"], {
42
- width: "6px",
43
- height: "6px",
44
- color: ['warning', 900]
45
- })), /*#__PURE__*/_jsx__default["default"](Grid__default["default"], {
46
- width: "6px",
47
- height: "6px"
48
- }, void 0, alerts && /*#__PURE__*/_jsx__default["default"](AlertsSmallFill__default["default"], {
49
- width: "6px",
50
- height: "6px",
51
- color: ['danger', 900]
52
- })), /*#__PURE__*/_jsx__default["default"](Grid__default["default"], {
53
- width: "6px",
54
- height: "6px"
55
- }, void 0, messages && /*#__PURE__*/_jsx__default["default"](MessagesSmallFill__default["default"], {
56
- width: "6px",
57
- height: "6px",
58
- color: ['success', 900]
59
- }))));
20
+ const Notifications = _ref => {
21
+ let {
22
+ exceptions = false,
23
+ alerts = false,
24
+ messages = false
25
+ } = _ref;
26
+ return /*#__PURE__*/_jsx__default["default"](StyledIcon, {}, void 0, /*#__PURE__*/_jsx__default["default"](dsIcons.Notifications, {
27
+ size: "m",
28
+ color: ['brand-primary', 800],
29
+ "data-testid": "left-nav-notifications-icon"
30
+ }), (exceptions || alerts || messages) && /*#__PURE__*/_jsx__default["default"](Grid__default["default"], {
31
+ cols: ['1fr', '1fr', '1fr'],
32
+ gutter: "xxxs",
33
+ mt: "2px"
34
+ }, void 0, /*#__PURE__*/_jsx__default["default"](Grid__default["default"], {
35
+ width: "6px",
36
+ height: "6px",
37
+ "data-testid": "left-nav-exceptions-icon"
38
+ }, void 0, exceptions && /*#__PURE__*/_jsx__default["default"](dsIcons.ExceptionsSmallFill, {
39
+ width: "6px",
40
+ height: "6px",
41
+ color: ['warning', 900]
42
+ })), /*#__PURE__*/_jsx__default["default"](Grid__default["default"], {
43
+ width: "6px",
44
+ height: "6px",
45
+ "data-testid": "left-nav-alerts-icon"
46
+ }, void 0, alerts && /*#__PURE__*/_jsx__default["default"](dsIcons.AlertsSmallFill, {
47
+ width: "6px",
48
+ height: "6px",
49
+ color: ['danger', 900]
50
+ })), /*#__PURE__*/_jsx__default["default"](Grid__default["default"], {
51
+ width: "6px",
52
+ height: "6px",
53
+ "data-testid": "left-nav-messages-icon"
54
+ }, void 0, messages && /*#__PURE__*/_jsx__default["default"](dsIcons.MessagesSmallFill, {
55
+ width: "6px",
56
+ height: "6px",
57
+ color: ['success', 900]
58
+ }))));
59
+ };
60
60
 
61
61
  exports.Notifications = Notifications;
62
62
  exports["default"] = Notifications;
@@ -2,22 +2,26 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
+ require('core-js/modules/esnext.async-iterator.filter.js');
6
+ require('core-js/modules/esnext.iterator.constructor.js');
7
+ require('core-js/modules/esnext.iterator.filter.js');
8
+ require('core-js/modules/esnext.async-iterator.for-each.js');
9
+ require('core-js/modules/esnext.iterator.for-each.js');
5
10
  var _defineProperty = require('@babel/runtime/helpers/defineProperty');
6
11
  require('react');
7
12
  var styled = require('styled-components');
8
- var InternalOpenWindow = require('@elliemae/ds-icons/OpenWindow');
13
+ var dsIcons = require('@elliemae/ds-icons');
9
14
  var jsxRuntime = require('react/jsx-runtime');
10
15
 
11
16
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
12
17
 
13
18
  var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_defineProperty);
14
19
  var styled__default = /*#__PURE__*/_interopDefaultLegacy(styled);
15
- var InternalOpenWindow__default = /*#__PURE__*/_interopDefaultLegacy(InternalOpenWindow);
16
20
 
17
21
  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; }
18
22
 
19
23
  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__default["default"](target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
20
- const StyledOpenWindow = /*#__PURE__*/styled__default["default"](InternalOpenWindow__default["default"]).withConfig({
24
+ const StyledOpenWindow = /*#__PURE__*/styled__default["default"](dsIcons.OpenWindow).withConfig({
21
25
  componentId: "sc-g53ios-0"
22
26
  })(["cursor:pointer;:focus{outline:1px solid ", ";}"], props => props.theme.colors.brand[800]);
23
27
  const OpenWindow = props => /*#__PURE__*/jsxRuntime.jsx(StyledOpenWindow, _objectSpread({
@@ -5,12 +5,13 @@ Object.defineProperty(exports, '__esModule', { value: true });
5
5
  var React = require('react');
6
6
  var LeftNavigationContext = require('../LeftNavigationContext.js');
7
7
 
8
- const useExpandableOnClickHandler = ({
9
- id,
10
- onExpand,
11
- onOpen,
12
- selectable = true
13
- }) => {
8
+ const useExpandableOnClickHandler = _ref => {
9
+ let {
10
+ id,
11
+ onExpand,
12
+ onOpen,
13
+ selectable = true
14
+ } = _ref;
14
15
  const {
15
16
  leftNavProps: {
16
17
  expanded
@@ -23,10 +23,11 @@ const nextIndex = (index, length) => (index + 1) % length;
23
23
 
24
24
  const prevIndex = (index, length) => (index - 1 + length) % length;
25
25
 
26
- const useKeyboardNavigation = ({
27
- item,
28
- onClick
29
- }) => {
26
+ const useKeyboardNavigation = _ref => {
27
+ let {
28
+ item,
29
+ onClick
30
+ } = _ref;
30
31
  const {
31
32
  dsId,
32
33
  itemOpts: {
@@ -41,7 +42,6 @@ const useKeyboardNavigation = ({
41
42
  } = React.useContext(LeftNavigationContext.LeftNavContext);
42
43
  const currentIndex = React.useMemo(() => visibleItems.findIndex(visibleItemDsId => visibleItemDsId === dsId), [dsId, visibleItems]);
43
44
  const {
44
- expandedForAnimation,
45
45
  setFocusedItem,
46
46
  focusedItem,
47
47
  setSelectedItem
@@ -83,7 +83,7 @@ const useKeyboardNavigation = ({
83
83
 
84
84
  if (closable && keyCode === KEY_CODES.LEFT_ARROW) {
85
85
  onClick(e);
86
- focusAndSelect(dsId);
86
+ setFocusedItem(dsId);
87
87
  }
88
88
 
89
89
  if (keyCode === KEY_CODES.DOWN_ARROW) {
@@ -103,7 +103,7 @@ const useKeyboardNavigation = ({
103
103
  if (keyCode === KEY_CODES.END) {
104
104
  setFocusedItem(visibleItems[visibleItems.length - 1]);
105
105
  }
106
- }, [dsId, expandedForAnimation, selectable, openable, closable, onClick, visibleItemsRefs, visibleItems, focusedItem, focusAndSelect]);
106
+ }, [openable, closable, selectable, focusedItem, onClick, focusAndSelect, dsId, setFocusedItem, visibleItems, currentIndex]);
107
107
  return onKeyDown;
108
108
  };
109
109
 
@@ -5,13 +5,14 @@ Object.defineProperty(exports, '__esModule', { value: true });
5
5
  var React = require('react');
6
6
  var LeftNavigationContext = require('../LeftNavigationContext.js');
7
7
 
8
- const useOpenableOnClickHandler = ({
9
- id,
10
- opened,
11
- onExpand,
12
- onOpen,
13
- onClose
14
- }) => {
8
+ const useOpenableOnClickHandler = _ref => {
9
+ let {
10
+ id,
11
+ opened,
12
+ onExpand,
13
+ onOpen,
14
+ onClose
15
+ } = _ref;
15
16
  const {
16
17
  leftNavProps: {
17
18
  expanded
@@ -2,6 +2,9 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
+ require('core-js/modules/esnext.async-iterator.some.js');
6
+ require('core-js/modules/esnext.iterator.constructor.js');
7
+ require('core-js/modules/esnext.iterator.some.js');
5
8
  var React = require('react');
6
9
  var constants = require('../exported-related/constants.js');
7
10
 
@@ -14,13 +17,20 @@ const isSelectableOutOfTheBox = elem => typeof elem.type === 'string' && elem.ty
14
17
 
15
18
  const isSelectableCustom = elem => elem.itemOpts.selectable;
16
19
 
17
- const useSelectFirstBodyItem = (items, openedItem, setSelectedItem) => {
20
+ const isItemInsideTheTree = (item, itemID) => {
21
+ var _item$itemOpts, _item$itemOpts$items;
22
+
23
+ return item.dsId === itemID || (item === null || item === void 0 ? void 0 : (_item$itemOpts = item.itemOpts) === null || _item$itemOpts === void 0 ? void 0 : (_item$itemOpts$items = _item$itemOpts.items) === null || _item$itemOpts$items === void 0 ? void 0 : _item$itemOpts$items.some(it => isItemInsideTheTree(it, itemID)));
24
+ };
25
+
26
+ const useSelectFirstBodyItem = (items, openedItem, selectedItem, setSelectedItem) => {
18
27
  React.useEffect(() => {
19
28
  if (items && items.length && openedItem) {
20
29
  const index = items.findIndex(elem => isSelectableOutOfTheBox(elem) || isSelectableCustom(elem));
21
- if (index !== -1) setSelectedItem(items[index].dsId);
30
+ const isItemInside = items.some(it => isItemInsideTheTree(it, selectedItem));
31
+ if (isItemInside) setSelectedItem(selectedItem);else if (index !== -1) setSelectedItem(items[index].dsId);
22
32
  }
23
- }, [openedItem]);
33
+ }, [openedItem, setSelectedItem]);
24
34
  };
25
35
 
26
36
  exports.useSelectFirstBodyItem = useSelectFirstBodyItem;