@elliemae/ds-left-navigation 2.0.0-alpha.10 → 2.0.0-alpha.14

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 (115) hide show
  1. package/cjs/LeftNavigationContext.js +0 -4
  2. package/cjs/common/getItemBackgroundStyle.js +1 -12
  3. package/cjs/common/getLeftBorderStyle.js +3 -17
  4. package/cjs/common/getScrollbarStyle.js +1 -24
  5. package/cjs/common/index.js +0 -2
  6. package/cjs/configs/useLeftNavConfig.js +14 -21
  7. package/cjs/configs/useLeftNavItems.js +11 -11
  8. package/cjs/exported-related/ChevronItem/index.js +7 -3
  9. package/cjs/exported-related/Icon/index.js +5 -0
  10. package/cjs/exported-related/ItemRenderer/index.js +11 -10
  11. package/cjs/exported-related/ItemRenderer/styled.js +27 -27
  12. package/cjs/exported-related/ItemRenderer/usePropsWithDefaults.js +10 -3
  13. package/cjs/exported-related/Notifications/index.js +41 -41
  14. package/cjs/exported-related/OpenWindowItem/index.js +7 -3
  15. package/cjs/hooks/useExpandableOnClickHandler.js +7 -6
  16. package/cjs/hooks/useKeyboardNavigation.js +7 -7
  17. package/cjs/hooks/useOpenableOnClickHandler.js +8 -7
  18. package/cjs/hooks/useSelectFirstBodyItem.js +14 -4
  19. package/cjs/index.js +0 -1
  20. package/cjs/outOfTheBox/ItemControlledDrilldown/index.js +19 -18
  21. package/cjs/outOfTheBox/ItemControlledDrilldown/styled.js +7 -4
  22. package/cjs/outOfTheBox/ItemHeader/index.js +24 -15
  23. package/cjs/outOfTheBox/ItemHeader/styled.js +3 -4
  24. package/cjs/outOfTheBox/ItemLink/index.js +18 -24
  25. package/cjs/outOfTheBox/ItemSection/index.js +12 -10
  26. package/cjs/outOfTheBox/ItemSeparator/index.js +6 -6
  27. package/cjs/outOfTheBox/ItemSubmenu/index.js +17 -25
  28. package/cjs/outOfTheBox/ItemSubmenu/styled.js +3 -4
  29. package/cjs/outOfTheBox/ItemTextLabel/index.js +11 -9
  30. package/cjs/outOfTheBox/ItemTextLabel/styled.js +7 -4
  31. package/cjs/outOfTheBox/ItemUncontrolledDrilldown/index.js +15 -15
  32. package/cjs/outOfTheBox/ItemUncontrolledDrilldown/styled.js +7 -4
  33. package/cjs/outOfTheBox/ItemWithDate/index.js +9 -8
  34. package/cjs/outOfTheBox/ItemWithDate/styled.js +7 -4
  35. package/cjs/outOfTheBox/index.js +6 -6
  36. package/cjs/parts/LeftNavContent/index.js +5 -2
  37. package/cjs/parts/LeftNavContent/styled.js +11 -16
  38. package/cjs/parts/LeftNavContentWithScrollbar/index.js +7 -0
  39. package/cjs/parts/LeftNavFooterItem/index.js +3 -12
  40. package/cjs/parts/LeftNavFooterItem/styled.js +8 -9
  41. package/cjs/parts/LeftNavLoading/index.js +13 -10
  42. package/cjs/parts/OutOfTheBoxMapItem.js +5 -0
  43. package/cjs/prop-types.js +2 -1
  44. package/esm/LeftNavigationContext.js +0 -4
  45. package/esm/common/getItemBackgroundStyle.js +1 -12
  46. package/esm/common/getLeftBorderStyle.js +3 -17
  47. package/esm/common/getScrollbarStyle.js +1 -24
  48. package/esm/common/index.js +0 -1
  49. package/esm/configs/useLeftNavConfig.js +14 -21
  50. package/esm/configs/useLeftNavItems.js +11 -11
  51. package/esm/exported-related/ChevronItem/index.js +7 -2
  52. package/esm/exported-related/Icon/index.js +5 -0
  53. package/esm/exported-related/ItemRenderer/index.js +11 -10
  54. package/esm/exported-related/ItemRenderer/styled.js +27 -28
  55. package/esm/exported-related/ItemRenderer/usePropsWithDefaults.js +10 -3
  56. package/esm/exported-related/Notifications/index.js +41 -37
  57. package/esm/exported-related/OpenWindowItem/index.js +7 -2
  58. package/esm/hooks/useExpandableOnClickHandler.js +7 -6
  59. package/esm/hooks/useKeyboardNavigation.js +7 -7
  60. package/esm/hooks/useOpenableOnClickHandler.js +8 -7
  61. package/esm/hooks/useSelectFirstBodyItem.js +14 -4
  62. package/esm/index.js +0 -1
  63. package/esm/outOfTheBox/ItemControlledDrilldown/index.js +16 -13
  64. package/esm/outOfTheBox/ItemControlledDrilldown/styled.js +7 -4
  65. package/esm/outOfTheBox/ItemHeader/index.js +24 -15
  66. package/esm/outOfTheBox/ItemHeader/styled.js +3 -3
  67. package/esm/outOfTheBox/ItemLink/index.js +18 -24
  68. package/esm/outOfTheBox/ItemSection/index.js +12 -10
  69. package/esm/outOfTheBox/ItemSeparator/index.js +6 -6
  70. package/esm/outOfTheBox/ItemSubmenu/index.js +17 -25
  71. package/esm/outOfTheBox/ItemSubmenu/styled.js +3 -3
  72. package/esm/outOfTheBox/ItemTextLabel/index.js +11 -9
  73. package/esm/outOfTheBox/ItemTextLabel/styled.js +7 -4
  74. package/esm/outOfTheBox/ItemUncontrolledDrilldown/index.js +14 -12
  75. package/esm/outOfTheBox/ItemUncontrolledDrilldown/styled.js +7 -4
  76. package/esm/outOfTheBox/ItemWithDate/index.js +9 -8
  77. package/esm/outOfTheBox/ItemWithDate/styled.js +7 -4
  78. package/esm/outOfTheBox/index.js +6 -6
  79. package/esm/parts/LeftNavContent/index.js +5 -2
  80. package/esm/parts/LeftNavContent/styled.js +11 -16
  81. package/esm/parts/LeftNavContentWithScrollbar/index.js +7 -0
  82. package/esm/parts/LeftNavFooterItem/index.js +2 -10
  83. package/esm/parts/LeftNavFooterItem/styled.js +3 -4
  84. package/esm/parts/LeftNavLoading/index.js +13 -10
  85. package/esm/parts/OutOfTheBoxMapItem.js +5 -0
  86. package/esm/prop-types.js +2 -1
  87. package/package.json +12 -16
  88. package/types/LeftNavigation.d.ts +46 -11
  89. package/types/LeftNavigationContext.d.ts +0 -4
  90. package/types/common/index.d.ts +0 -1
  91. package/types/exported-related/ItemRenderer/styled.d.ts +3 -2
  92. package/types/hooks/useKeyboardNavigation.d.ts +1 -1
  93. package/types/hooks/useSelectFirstBodyItem.d.ts +1 -1
  94. package/types/index.d.d.ts +8 -2
  95. package/types/index.d.ts +1 -2
  96. package/types/outOfTheBox/ItemControlledDrilldown/styled.d.ts +2 -2
  97. package/types/outOfTheBox/ItemHeader/styled.d.ts +2 -2
  98. package/types/outOfTheBox/ItemLink/styled.d.ts +1 -1
  99. package/types/outOfTheBox/ItemSection/styled.d.ts +3 -3
  100. package/types/outOfTheBox/ItemSubmenu/styled.d.ts +2 -2
  101. package/types/outOfTheBox/ItemTextLabel/styled.d.ts +1 -1
  102. package/types/outOfTheBox/ItemUncontrolledDrilldown/styled.d.ts +2 -2
  103. package/types/outOfTheBox/ItemWithDate/styled.d.ts +2 -2
  104. package/types/parts/LeftNavContent/styled.d.ts +7 -11
  105. package/types/parts/LeftNavContentWithScrollbar/index.d.ts +1 -0
  106. package/types/parts/LeftNavFooterItem/styled.d.ts +10 -6
  107. package/types/prop-types.d.ts +87 -18
  108. package/cjs/common/getFocusedByKeyboardStyle.js +0 -23
  109. package/cjs/configs/useGlobalKeyListeners.js +0 -31
  110. package/cjs/package.json +0 -4
  111. package/esm/common/getFocusedByKeyboardStyle.js +0 -19
  112. package/esm/configs/useGlobalKeyListeners.js +0 -22
  113. package/esm/package.json +0 -4
  114. package/types/common/getFocusedByKeyboardStyle.d.ts +0 -4
  115. 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,
@@ -2,18 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- const commonItemBackgroundStyle = (color, hoverColor, activeColor) => `
6
-
7
- background: ${color};
8
-
9
- :hover {
10
- background: ${hoverColor};
11
- }
12
-
13
- :active {
14
- background: ${activeColor};
15
- }
16
- `;
5
+ const commonItemBackgroundStyle = (color, hoverColor, activeColor) => "\n\n background: ".concat(color, ";\n\n :hover {\n background: ").concat(hoverColor, ";\n }\n\n :active {\n background: ").concat(activeColor, ";\n }\n");
17
6
 
18
7
  const getItemBackgroundStyle = props => {
19
8
  if (props.selected && !props.opened) return commonItemBackgroundStyle(props.theme.colors.brand[200], props.theme.colors.brand[200], props.theme.colors.brand[200]);
@@ -2,25 +2,11 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- const commonLeftBorderStyle = (color, hoverColor, activeColor) => `
6
-
7
- -webkit-box-shadow: inset 4px 0 0 0 ${color};
8
- box-shadow: inset 4px 0 0 0 ${color};
9
-
10
- :hover {
11
- -webkit-box-shadow: inset 4px 0 0 0 ${hoverColor};
12
- box-shadow: inset 4px 0 0 0 ${hoverColor};
13
- }
14
-
15
- :active {
16
- -webkit-box-shadow: inset 4px 0 0 0 ${activeColor};
17
- box-shadow: inset 4px 0 0 0 ${activeColor};
18
- }
19
- `;
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");
20
6
 
21
7
  const getLeftBorderStyle = props => {
22
- if (props.selected) return commonLeftBorderStyle(props.theme.colors.brand[400], props.theme.colors.brand[400], props.theme.colors.brand[400]);
23
- 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]);
24
10
  };
25
11
 
26
12
  exports.getLeftBorderStyle = getLeftBorderStyle;
@@ -2,29 +2,6 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- const getScrolbarStyle = () => `
6
- ::-webkit-scrollbar {
7
- width: 14px;
8
- }
9
- ::-webkit-scrollbar-thumb {
10
- height: 6px;
11
- border: 4px solid rgba(0, 0, 0, 0);
12
-
13
- background-clip: padding-box;
14
-
15
- background-color: rgba(105, 116, 137, 0.5);
16
-
17
- border-radius: 7px;
18
- -webkit-border-radius: 7px;
19
- }
20
- ::-webkit-scrollbar-button {
21
- width: 0;
22
- height: 0;
23
- display: none;
24
- }
25
- ::-webkit-scrollbar-corner {
26
- background-color: transparent;
27
- }
28
- `;
5
+ const getScrolbarStyle = () => "\n ::-webkit-scrollbar {\n width: 14px;\n }\n ::-webkit-scrollbar-thumb {\n height: 6px;\n border: 4px solid rgba(0, 0, 0, 0);\n\n background-clip: padding-box;\n\n background-color: rgba(105, 116, 137, 0.5);\n\n border-radius: 7px;\n -webkit-border-radius: 7px;\n }\n ::-webkit-scrollbar-button {\n width: 0;\n height: 0;\n display: none;\n }\n ::-webkit-scrollbar-corner {\n background-color: transparent;\n }\n";
29
6
 
30
7
  exports.getScrolbarStyle = getScrolbarStyle;
@@ -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;
@@ -2,8 +2,8 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
+ require('core-js/modules/web.dom-collections.iterator.js');
5
6
  var React = require('react');
6
- var useGlobalKeyListeners = require('./useGlobalKeyListeners.js');
7
7
  var useLeftNavItems = require('./useLeftNavItems.js');
8
8
  var useLeftNavSmoothExpand = require('./useLeftNavSmoothExpand.js');
9
9
  var useSelectFirstBodyItem = require('../hooks/useSelectFirstBodyItem.js');
@@ -26,10 +26,10 @@ const useLeftNavConfig = props => {
26
26
  // Selection related
27
27
 
28
28
  const [selectedItem, setSelectedItem] = React__default["default"].useState(null);
29
- 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
30
31
 
31
- const [focusedItem, setFocusedItem] = React__default["default"].useState(null);
32
- const [focusedByKey, setFocusedByKey] = React__default["default"].useState(true); // Opened uncontrolled drilldowns
32
+ const [focusedItem, setFocusedItem] = React__default["default"].useState(null); // Opened uncontrolled drilldowns
33
33
 
34
34
  const [openedDrilldowns, setOpenedDrilldowns] = React__default["default"].useState([]); // -----------------------------------------------------------------------------
35
35
  // ************************** ------------ **************************
@@ -45,24 +45,19 @@ const useLeftNavConfig = props => {
45
45
  }), [expandedForAnimation, timeoutRef, setExpandedForAnimation]);
46
46
  useLeftNavSmoothExpand.useLeftNavSmoothExpand(props, smoothExpandOpts); // -----------------------------------------------------------------------------
47
47
  // ************************** ------------ **************************
48
- // * KEYBOARD *
49
- // ************************** ------------ **************************
50
-
51
- const globalKeyOpts = React__default["default"].useMemo(() => ({
52
- setFocusedByKey
53
- }), [setFocusedByKey]);
54
- useGlobalKeyListeners.useGlobalKeyListeners(globalKeyOpts); // -----------------------------------------------------------------------------
55
- // ************************** ------------ **************************
56
48
  // * SIDE EFFECTS *
57
49
  // ************************** ------------ **************************
58
50
 
59
51
  React__default["default"].useEffect(() => {
60
52
  onSelectedChange(selectedItem);
61
53
  }, [selectedItem, onSelectedChange]);
54
+ React__default["default"].useEffect(() => {
55
+ if (openedItem !== null) setSelectedParent(openedItem);
56
+ }, [openedItem]);
62
57
  React__default["default"].useEffect(() => {
63
58
  onFocusChange(focusedItem);
64
- }, [focusedItem, setFocusedItem]);
65
- useSelectFirstBodyItem.useSelectFirstBodyItem(items, openedItem, setSelectedItem); // -----------------------------------------------------------------------------
59
+ }, [focusedItem, onFocusChange]);
60
+ useSelectFirstBodyItem.useSelectFirstBodyItem(items, openedItem, props.selectedItem !== undefined ? props.selectedItem : selectedItem, setSelectedItem, props.disableDefaultSelection); // -----------------------------------------------------------------------------
66
61
  // ************************** ------------ **************************
67
62
  // * ITEMS MANAGEMENT *
68
63
  // ************************** ------------ **************************
@@ -72,7 +67,7 @@ const useLeftNavConfig = props => {
72
67
  bodyHeaderItem: props.BodyHeaderComponent,
73
68
  items: props.items,
74
69
  openedDrilldowns
75
- }), [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
76
71
 
77
72
  const {
78
73
  visibleItems,
@@ -85,19 +80,17 @@ const useLeftNavConfig = props => {
85
80
  const finalConfig = React__default["default"].useMemo(() => ({
86
81
  leftNavProps: props,
87
82
  expandedForAnimation,
88
- selectedItem,
83
+ selectedItem: props.selectedItem !== undefined ? props.selectedItem : selectedItem,
89
84
  setSelectedItem,
90
- selectedSubitem,
91
- setSelectedSubitem,
85
+ selectedParent: props.selectedParent !== undefined ? props.selectedParent : selectedParent,
86
+ setSelectedParent,
92
87
  focusedItem,
93
88
  setFocusedItem,
94
- focusedByKey,
95
- setFocusedByKey,
96
89
  openedDrilldowns,
97
90
  setOpenedDrilldowns,
98
91
  visibleItems,
99
92
  visibleItemsRefs
100
- }), [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]);
101
94
  return finalConfig;
102
95
  };
103
96
 
@@ -2,37 +2,37 @@
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');
8
+ require('core-js/modules/web.dom-collections.iterator.js');
5
9
  var React = require('react');
6
10
  var constants = require('../exported-related/constants.js');
7
11
  require('@babel/runtime/helpers/jsx');
8
12
  require('@elliemae/ds-grid');
9
13
  require('styled-components');
14
+ require('core-js/modules/esnext.async-iterator.filter.js');
15
+ require('core-js/modules/esnext.iterator.filter.js');
10
16
  require('@babel/runtime/helpers/defineProperty');
11
17
  require('react/jsx-runtime');
12
- require('@elliemae/ds-icons/ChevronSmallRight');
13
- require('@elliemae/ds-icons/Notifications');
14
- require('@elliemae/ds-icons/ExceptionsSmallFill');
15
- require('@elliemae/ds-icons/AlertsSmallFill');
16
- require('@elliemae/ds-icons/MessagesSmallFill');
17
- require('@elliemae/ds-icons/OpenWindow');
18
+ require('@elliemae/ds-icons');
18
19
 
19
- /* eslint-disable complexity */
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
22
22
 
23
23
  const walkItems = (items, openedDrilldowns, callback) => {
24
24
  items.forEach(item => {
25
25
  if (typeof item.type === 'string') {
26
- var _item$itemOpts, _item$itemOpts2, _item$itemOpts3;
26
+ var _item$itemOpts$items, _item$itemOpts, _item$itemOpts2, _item$itemOpts$items2, _item$itemOpts3;
27
27
 
28
28
  // Out of the box item
29
29
  if (notFocuseableItems.includes(item.type)) return; // not focuseable
30
30
 
31
31
  callback(item.dsId); // If it's an opened uncontrolled drilldown
32
32
 
33
- if (item.type === constants.ITEM_TYPES.LEFT_NAV_ITEM_UNCONTROLLED_DRILLDOWN && openedDrilldowns.includes(item.dsId)) walkItems(((_item$itemOpts = item.itemOpts) === null || _item$itemOpts === void 0 ? void 0 : _item$itemOpts.items) ?? [], openedDrilldowns, callback); // If it's an opened controlled drilldown
33
+ if (item.type === constants.ITEM_TYPES.LEFT_NAV_ITEM_UNCONTROLLED_DRILLDOWN && openedDrilldowns.includes(item.dsId)) walkItems((_item$itemOpts$items = (_item$itemOpts = item.itemOpts) === null || _item$itemOpts === void 0 ? void 0 : _item$itemOpts.items) !== null && _item$itemOpts$items !== void 0 ? _item$itemOpts$items : [], openedDrilldowns, callback); // If it's an opened controlled drilldown
34
34
 
35
- if (item.type === constants.ITEM_TYPES.LEFT_NAV_ITEM_CONTROLLED_DRILLDOWN && (_item$itemOpts2 = item.itemOpts) !== null && _item$itemOpts2 !== void 0 && _item$itemOpts2.isOpened) walkItems(((_item$itemOpts3 = item.itemOpts) === null || _item$itemOpts3 === void 0 ? void 0 : _item$itemOpts3.items) ?? [], openedDrilldowns, callback);
35
+ if (item.type === constants.ITEM_TYPES.LEFT_NAV_ITEM_CONTROLLED_DRILLDOWN && (_item$itemOpts2 = item.itemOpts) !== null && _item$itemOpts2 !== void 0 && _item$itemOpts2.isOpened) walkItems((_item$itemOpts$items2 = (_item$itemOpts3 = item.itemOpts) === null || _item$itemOpts3 === void 0 ? void 0 : _item$itemOpts3.items) !== null && _item$itemOpts$items2 !== void 0 ? _item$itemOpts$items2 : [], openedDrilldowns, callback);
36
36
  } else {
37
37
  var _item$itemOpts4;
38
38
 
@@ -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');
@@ -29,7 +29,8 @@ const ItemRenderer = props => {
29
29
  ariaLabel,
30
30
  ariaRole,
31
31
  ariaLive,
32
- ariaExpanded
32
+ ariaExpanded,
33
+ ariaDescribedBy
33
34
  },
34
35
  CollapsedComponent
35
36
  },
@@ -49,10 +50,9 @@ const ItemRenderer = props => {
49
50
  openedItem
50
51
  },
51
52
  expandedForAnimation,
52
- focusedByKey,
53
+ selectedParent,
53
54
  selectedItem,
54
55
  setSelectedItem,
55
- focusedItem,
56
56
  setFocusedItem,
57
57
  visibleItemsRefs
58
58
  } = ctx;
@@ -72,7 +72,6 @@ const ItemRenderer = props => {
72
72
  });
73
73
  const cols = React.useMemo(() => expandedForAnimation ? ['auto', '1fr', 'auto'] : ['38px'], [expandedForAnimation]);
74
74
  const isSelected = React.useMemo(() => selectedItem === dsId, [selectedItem, dsId]);
75
- const isFocused = React.useMemo(() => focusedItem === dsId, [focusedItem, dsId]);
76
75
 
77
76
  if (!expandedForAnimation && !CollapsedComponent) {
78
77
  return null;
@@ -80,28 +79,30 @@ const ItemRenderer = props => {
80
79
 
81
80
  return /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
82
81
  children: [/*#__PURE__*/_jsx__default["default"](styled.StyledItemWrapper, {
83
- shadowStyle: shadowStyle,
82
+ shadowStyle: shadowStyle(opened, item.type),
84
83
  "data-testid": "leftnav-item-wrapper"
85
84
  }, void 0, /*#__PURE__*/jsxRuntime.jsx(styled.StyledItem, {
86
85
  ref: visibleItemsRefs.current[dsId],
87
86
  pt: paddingTop,
88
- pl: indent === undefined ? 'xxxs' : `${indent}px`,
87
+ pl: indent === undefined ? 'xxxs' : "".concat(indent, "px"),
89
88
  minHeight: minHeight,
90
- shadowStyle: shadowStyle,
89
+ shadowStyle: shadowStyle(opened, item.type),
91
90
  alignItems: "flex-start",
92
91
  cols: cols,
93
92
  onClick: !opened ? handleOnClick : () => null,
94
93
  onKeyDown: onKeyDown,
95
94
  selectable: selectable,
96
95
  selected: isSelected,
96
+ selectedParent: selectedParent === dsId,
97
97
  opened: opened,
98
- focused: isFocused,
99
- focusedByKey: focusedByKey,
100
98
  onFocus: handleFocus,
101
99
  "data-testid": "leftnav-item-container",
102
100
  tabIndex: focuseable ? 0 : -1,
101
+ "aria-describedby": ariaDescribedBy,
103
102
  "aria-expanded": ariaExpanded,
104
103
  role: ariaRole,
104
+ "data-selected": isSelected,
105
+ "data-selectedparent": selectedParent === dsId,
105
106
  "aria-label": ariaLabel,
106
107
  "aria-hidden": !focuseable,
107
108
  "aria-live": ariaLive,
@@ -117,7 +118,7 @@ const ItemRenderer = props => {
117
118
  marginLeft: opened ? '16px' : '0px',
118
119
  marginRight: borderBottomMr,
119
120
  height: '1px',
120
- width: `calc(100% - ${borderBottomMr} - ${opened ? '16px' : '0px'})`,
121
+ width: "calc(100% - ".concat(borderBottomMr, " - ").concat(opened ? '16px' : '0px', ")"),
121
122
  backgroundColor: '#E0E3E8'
122
123
  }
123
124
  })), subitems]
@@ -11,48 +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 ? `
46
- &:before {
47
- content: '';
48
- position: absolute;
49
- top: 0;
50
- left: 0;
51
- right: 0;
52
- bottom: 0;
53
- border: 1px solid ${props.theme.colors.brand[600]};
54
- pointer-events: none;
55
- }` : '');
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 }") : '');
56
55
 
57
56
  exports.StyledItem = StyledItem;
58
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
 
@@ -22,8 +27,10 @@ const itemDefaultProps = {
22
27
  ariaLabel: '',
23
28
  ariaRole: 'menuitem',
24
29
  ariaLive: 'off',
25
- ariaExpanded: undefined
26
- }; // Make use Item props with defaults
30
+ ariaExpanded: undefined,
31
+ ariaDescribedBy: undefined
32
+ };
33
+ const itemWithoutShadows = ['ds-left-nav-item-header', 'ds-left-nav-item-link', 'ds-left-nav-item-submenu']; // Make use Item props with defaults
27
34
 
28
35
  const usePropsWithDefaults = props => {
29
36
  const propsWithDefault = React.useMemo(() => {
@@ -37,7 +44,7 @@ const usePropsWithDefaults = props => {
37
44
  minHeight: '48px',
38
45
  paddingTop: '12px',
39
46
  subitems: [],
40
- shadowStyle: () => 'box-shadow: inherit',
47
+ shadowStyle: (opened, type) => theme => "box-shadow: ".concat(opened || !itemWithoutShadows.includes(type) ? 'inset 4px 0 0 0 #52A6EC' : 'inset 4px 0 0 0 white'),
41
48
  hasBorderBottom: false,
42
49
  borderBottomMr: '0px'
43
50
  }, props), {}, {
@@ -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