@elliemae/ds-left-navigation 2.0.0-alpha.1 → 2.0.0-alpha.13

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 (120) hide show
  1. package/cjs/LeftNavigation.js +2 -2
  2. package/cjs/LeftNavigationContext.js +1 -5
  3. package/cjs/common/getItemBackgroundStyle.js +1 -12
  4. package/cjs/common/getLeftBorderStyle.js +3 -17
  5. package/cjs/common/getScrollbarStyle.js +1 -24
  6. package/cjs/common/index.js +0 -2
  7. package/cjs/configs/index.js +1 -1
  8. package/cjs/configs/useLeftNavConfig.js +24 -31
  9. package/cjs/configs/useLeftNavItems.js +12 -12
  10. package/cjs/configs/useLeftNavSmoothExpand.js +3 -3
  11. package/cjs/exported-related/ChevronItem/index.js +9 -5
  12. package/cjs/exported-related/Icon/index.js +7 -2
  13. package/cjs/exported-related/ItemRenderer/index.js +17 -14
  14. package/cjs/exported-related/ItemRenderer/styled.js +29 -29
  15. package/cjs/exported-related/ItemRenderer/usePropsWithDefaults.js +12 -4
  16. package/cjs/exported-related/Notifications/index.js +43 -43
  17. package/cjs/exported-related/OpenWindowItem/index.js +9 -5
  18. package/cjs/hooks/useExpandableOnClickHandler.js +7 -6
  19. package/cjs/hooks/useKeyboardNavigation.js +7 -7
  20. package/cjs/hooks/useOpenableOnClickHandler.js +8 -7
  21. package/cjs/hooks/useSelectFirstBodyItem.js +14 -4
  22. package/cjs/index.js +1 -2
  23. package/cjs/outOfTheBox/ItemControlledDrilldown/index.js +32 -31
  24. package/cjs/outOfTheBox/ItemControlledDrilldown/styled.js +9 -6
  25. package/cjs/outOfTheBox/ItemHeader/index.js +35 -26
  26. package/cjs/outOfTheBox/ItemHeader/styled.js +4 -5
  27. package/cjs/outOfTheBox/ItemLink/index.js +26 -32
  28. package/cjs/outOfTheBox/ItemLink/styled.js +1 -1
  29. package/cjs/outOfTheBox/ItemSection/index.js +16 -13
  30. package/cjs/outOfTheBox/ItemSection/styled.js +3 -3
  31. package/cjs/outOfTheBox/ItemSeparator/index.js +10 -10
  32. package/cjs/outOfTheBox/ItemSubmenu/index.js +28 -36
  33. package/cjs/outOfTheBox/ItemSubmenu/styled.js +4 -5
  34. package/cjs/outOfTheBox/ItemTextLabel/index.js +15 -13
  35. package/cjs/outOfTheBox/ItemTextLabel/styled.js +8 -5
  36. package/cjs/outOfTheBox/ItemUncontrolledDrilldown/index.js +29 -29
  37. package/cjs/outOfTheBox/ItemUncontrolledDrilldown/styled.js +9 -6
  38. package/cjs/outOfTheBox/ItemWithDate/index.js +17 -16
  39. package/cjs/outOfTheBox/ItemWithDate/styled.js +9 -6
  40. package/cjs/outOfTheBox/index.js +6 -6
  41. package/cjs/parts/LeftNavContent/index.js +17 -14
  42. package/cjs/parts/LeftNavContent/styled.js +18 -23
  43. package/cjs/parts/LeftNavContentWithScrollbar/index.js +30 -22
  44. package/cjs/parts/LeftNavFooterItem/index.js +13 -21
  45. package/cjs/parts/LeftNavFooterItem/styled.js +9 -10
  46. package/cjs/parts/LeftNavLoading/index.js +14 -11
  47. package/cjs/parts/OutOfTheBoxMapItem.js +9 -4
  48. package/cjs/prop-types.js +2 -1
  49. package/esm/LeftNavigationContext.js +0 -4
  50. package/esm/common/getItemBackgroundStyle.js +1 -12
  51. package/esm/common/getLeftBorderStyle.js +3 -17
  52. package/esm/common/getScrollbarStyle.js +1 -24
  53. package/esm/common/index.js +0 -1
  54. package/esm/configs/useLeftNavConfig.js +14 -21
  55. package/esm/configs/useLeftNavItems.js +11 -11
  56. package/esm/exported-related/ChevronItem/index.js +7 -2
  57. package/esm/exported-related/Icon/index.js +5 -0
  58. package/esm/exported-related/ItemRenderer/index.js +13 -10
  59. package/esm/exported-related/ItemRenderer/styled.js +27 -28
  60. package/esm/exported-related/ItemRenderer/usePropsWithDefaults.js +11 -3
  61. package/esm/exported-related/Notifications/index.js +41 -37
  62. package/esm/exported-related/OpenWindowItem/index.js +7 -2
  63. package/esm/hooks/useExpandableOnClickHandler.js +7 -6
  64. package/esm/hooks/useKeyboardNavigation.js +7 -7
  65. package/esm/hooks/useOpenableOnClickHandler.js +8 -7
  66. package/esm/hooks/useSelectFirstBodyItem.js +14 -4
  67. package/esm/index.js +0 -1
  68. package/esm/outOfTheBox/ItemControlledDrilldown/index.js +17 -14
  69. package/esm/outOfTheBox/ItemControlledDrilldown/styled.js +7 -4
  70. package/esm/outOfTheBox/ItemHeader/index.js +24 -15
  71. package/esm/outOfTheBox/ItemHeader/styled.js +3 -3
  72. package/esm/outOfTheBox/ItemLink/index.js +18 -24
  73. package/esm/outOfTheBox/ItemSection/index.js +11 -8
  74. package/esm/outOfTheBox/ItemSeparator/index.js +6 -6
  75. package/esm/outOfTheBox/ItemSubmenu/index.js +17 -25
  76. package/esm/outOfTheBox/ItemSubmenu/styled.js +3 -3
  77. package/esm/outOfTheBox/ItemTextLabel/index.js +11 -9
  78. package/esm/outOfTheBox/ItemTextLabel/styled.js +7 -4
  79. package/esm/outOfTheBox/ItemUncontrolledDrilldown/index.js +15 -13
  80. package/esm/outOfTheBox/ItemUncontrolledDrilldown/styled.js +7 -4
  81. package/esm/outOfTheBox/ItemWithDate/index.js +9 -8
  82. package/esm/outOfTheBox/ItemWithDate/styled.js +7 -4
  83. package/esm/outOfTheBox/index.js +6 -6
  84. package/esm/parts/LeftNavContent/index.js +5 -2
  85. package/esm/parts/LeftNavContent/styled.js +11 -16
  86. package/esm/parts/LeftNavContentWithScrollbar/index.js +16 -8
  87. package/esm/parts/LeftNavFooterItem/index.js +4 -11
  88. package/esm/parts/LeftNavFooterItem/styled.js +3 -4
  89. package/esm/parts/LeftNavLoading/index.js +13 -10
  90. package/esm/parts/OutOfTheBoxMapItem.js +5 -0
  91. package/esm/prop-types.js +2 -1
  92. package/package.json +12 -16
  93. package/types/LeftNavigation.d.ts +46 -11
  94. package/types/LeftNavigationContext.d.ts +0 -4
  95. package/types/common/index.d.ts +0 -1
  96. package/types/exported-related/ItemRenderer/styled.d.ts +3 -2
  97. package/types/hooks/useKeyboardNavigation.d.ts +1 -1
  98. package/types/hooks/useSelectFirstBodyItem.d.ts +1 -1
  99. package/types/index.d.d.ts +9 -2
  100. package/types/index.d.ts +1 -2
  101. package/types/outOfTheBox/ItemControlledDrilldown/styled.d.ts +2 -2
  102. package/types/outOfTheBox/ItemHeader/styled.d.ts +2 -2
  103. package/types/outOfTheBox/ItemLink/styled.d.ts +1 -1
  104. package/types/outOfTheBox/ItemSection/styled.d.ts +3 -3
  105. package/types/outOfTheBox/ItemSubmenu/styled.d.ts +2 -2
  106. package/types/outOfTheBox/ItemTextLabel/styled.d.ts +1 -1
  107. package/types/outOfTheBox/ItemUncontrolledDrilldown/styled.d.ts +2 -2
  108. package/types/outOfTheBox/ItemWithDate/styled.d.ts +2 -2
  109. package/types/parts/LeftNavContent/styled.d.ts +7 -11
  110. package/types/parts/LeftNavContentWithScrollbar/index.d.ts +1 -0
  111. package/types/parts/LeftNavFooterItem/styled.d.ts +10 -6
  112. package/types/prop-types.d.ts +87 -18
  113. package/cjs/common/getFocusedByKeyboardStyle.js +0 -23
  114. package/cjs/configs/useGlobalKeyListeners.js +0 -31
  115. package/cjs/package.json +0 -4
  116. package/esm/common/getFocusedByKeyboardStyle.js +0 -19
  117. package/esm/configs/useGlobalKeyListeners.js +0 -22
  118. package/esm/package.json +0 -4
  119. package/types/common/getFocusedByKeyboardStyle.d.ts +0 -4
  120. package/types/configs/useGlobalKeyListeners.d.ts +0 -6
@@ -17,9 +17,9 @@ var _jsx__default = /*#__PURE__*/_interopDefaultLegacy(_jsx);
17
17
  var _LeftNavContent;
18
18
  const LeftNavigation = props => {
19
19
  const leftNavConfig = useLeftNavConfig.useLeftNavConfig(props);
20
- return /*#__PURE__*/_jsx__default['default'](LeftNavigationContext.LeftNavContext.Provider, {
20
+ return /*#__PURE__*/_jsx__default["default"](LeftNavigationContext.LeftNavContext.Provider, {
21
21
  value: leftNavConfig
22
- }, void 0, _LeftNavContent || (_LeftNavContent = /*#__PURE__*/_jsx__default['default'](index, {})));
22
+ }, void 0, _LeftNavContent || (_LeftNavContent = /*#__PURE__*/_jsx__default["default"](index, {})));
23
23
  };
24
24
  LeftNavigation.defaultProps = LeftNavigationContext.defaultProps;
25
25
  const LeftNavigationWithSchema = reactDesc.describe(LeftNavigation).description('Left Navigation');
@@ -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,
@@ -40,6 +36,6 @@ const defaultContext = {
40
36
  const LeftNavContext = /*#__PURE__*/React.createContext(defaultContext);
41
37
 
42
38
  exports.LeftNavContext = LeftNavContext;
43
- exports['default'] = LeftNavContext;
39
+ exports["default"] = LeftNavContext;
44
40
  exports.defaultContext = defaultContext;
45
41
  exports.defaultProps = defaultProps;
@@ -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;
@@ -6,5 +6,5 @@ var useLeftNavConfig = require('./useLeftNavConfig.js');
6
6
 
7
7
 
8
8
 
9
- exports.default = useLeftNavConfig.useLeftNavConfig;
9
+ exports["default"] = useLeftNavConfig.useLeftNavConfig;
10
10
  exports.useLeftNavConfig = useLeftNavConfig.useLeftNavConfig;
@@ -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');
@@ -25,54 +25,49 @@ const useLeftNavConfig = props => {
25
25
  // ************************** ------------ **************************
26
26
  // Selection related
27
27
 
28
- const [selectedItem, setSelectedItem] = React__default['default'].useState(null);
29
- const [selectedSubitem, setSelectedSubitem] = React__default['default'].useState(null); // Focus related
28
+ const [selectedItem, setSelectedItem] = React__default["default"].useState(null);
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
- const [openedDrilldowns, setOpenedDrilldowns] = React__default['default'].useState([]); // -----------------------------------------------------------------------------
34
+ const [openedDrilldowns, setOpenedDrilldowns] = React__default["default"].useState([]); // -----------------------------------------------------------------------------
35
35
  // ************************** ------------ **************************
36
36
  // * EXPAND ANIMATION *
37
37
  // ************************** ------------ **************************
38
38
 
39
- const [expandedForAnimation, setExpandedForAnimation] = React__default['default'].useState(expanded);
40
- const timeoutRef = React__default['default'].useRef(null);
41
- const smoothExpandOpts = React__default['default'].useMemo(() => ({
39
+ const [expandedForAnimation, setExpandedForAnimation] = React__default["default"].useState(expanded);
40
+ const timeoutRef = React__default["default"].useRef(null);
41
+ const smoothExpandOpts = React__default["default"].useMemo(() => ({
42
42
  expandedForAnimation,
43
43
  timeoutRef,
44
44
  setExpandedForAnimation
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
- React__default['default'].useEffect(() => {
51
+ React__default["default"].useEffect(() => {
60
52
  onSelectedChange(selectedItem);
61
53
  }, [selectedItem, onSelectedChange]);
62
- React__default['default'].useEffect(() => {
54
+ React__default["default"].useEffect(() => {
55
+ if (openedItem !== null) setSelectedParent(openedItem);
56
+ }, [openedItem]);
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
  // ************************** ------------ **************************
69
64
 
70
- const leftNavItemsProps = React__default['default'].useMemo(() => ({
65
+ const leftNavItemsProps = React__default["default"].useMemo(() => ({
71
66
  headerItem: props.HeaderComponent,
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,
@@ -82,24 +77,22 @@ const useLeftNavConfig = props => {
82
77
  // * LEFTNAV CONFIG *
83
78
  // ************************** ------------ **************************
84
79
 
85
- const finalConfig = React__default['default'].useMemo(() => ({
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
 
104
- exports['default'] = useLeftNavConfig;
97
+ exports["default"] = useLeftNavConfig;
105
98
  exports.useLeftNavConfig = useLeftNavConfig;
@@ -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
  });
@@ -76,5 +76,5 @@ const useLeftNavItems = props => {
76
76
  };
77
77
  };
78
78
 
79
- exports['default'] = useLeftNavItems;
79
+ exports["default"] = useLeftNavItems;
80
80
  exports.useLeftNavItems = useLeftNavItems;
@@ -17,7 +17,7 @@ const useLeftNavSmoothExpand = (props, smoothExpandOpts) => {
17
17
  timeoutRef,
18
18
  setExpandedForAnimation
19
19
  } = smoothExpandOpts;
20
- React__default['default'].useEffect(() => {
20
+ React__default["default"].useEffect(() => {
21
21
  // If expanded changes, we need to smoothly transition to the non-expanded state
22
22
  // so we need to wait for 350ms
23
23
  if (!expanded && expandedForAnimation) {
@@ -25,8 +25,8 @@ const useLeftNavSmoothExpand = (props, smoothExpandOpts) => {
25
25
  timeoutRef.current = setTimeout(() => setExpandedForAnimation(false), 350);
26
26
  } else if (expanded) setExpandedForAnimation(true);
27
27
  }, [expanded]);
28
- React__default['default'].useEffect(() => () => clearTimeout(timeoutRef.current), []);
28
+ React__default["default"].useEffect(() => () => clearTimeout(timeoutRef.current), []);
29
29
  };
30
30
 
31
- exports['default'] = useLeftNavSmoothExpand;
31
+ exports["default"] = useLeftNavSmoothExpand;
32
32
  exports.useLeftNavSmoothExpand = useLeftNavSmoothExpand;
@@ -2,23 +2,27 @@
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
- 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({
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; }
22
+ const ChevronItem = props => /*#__PURE__*/jsxRuntime.jsx(dsIcons.ChevronSmallRight, _objectSpread({
19
23
  size: "m",
20
24
  color: ['brand-primary', 800]
21
25
  }, props));
22
26
 
23
27
  exports.ChevronItem = ChevronItem;
24
- exports['default'] = ChevronItem;
28
+ exports["default"] = ChevronItem;
@@ -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');
@@ -14,9 +19,9 @@ var styled__default = /*#__PURE__*/_interopDefaultLegacy(styled);
14
19
 
15
20
  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
21
 
17
- 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; }
22
+ 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
23
 
19
- const AugmentedIcon = Icon => styled__default['default'](Icon).withConfig({
24
+ const AugmentedIcon = Icon => styled__default["default"](Icon).withConfig({
20
25
  componentId: "sc-1eek2uh-0"
21
26
  })(["cursor:pointer;outline:0;:focus,:active{outline:1px solid #1e79c2;}"]);
22
27
 
@@ -28,7 +28,9 @@ const ItemRenderer = props => {
28
28
  indent,
29
29
  ariaLabel,
30
30
  ariaRole,
31
- ariaExpanded
31
+ ariaLive,
32
+ ariaExpanded,
33
+ ariaDescribedBy
32
34
  },
33
35
  CollapsedComponent
34
36
  },
@@ -48,10 +50,9 @@ const ItemRenderer = props => {
48
50
  openedItem
49
51
  },
50
52
  expandedForAnimation,
51
- focusedByKey,
53
+ selectedParent,
52
54
  selectedItem,
53
55
  setSelectedItem,
54
- focusedItem,
55
56
  setFocusedItem,
56
57
  visibleItemsRefs
57
58
  } = ctx;
@@ -71,51 +72,53 @@ const ItemRenderer = props => {
71
72
  });
72
73
  const cols = React.useMemo(() => expandedForAnimation ? ['auto', '1fr', 'auto'] : ['38px'], [expandedForAnimation]);
73
74
  const isSelected = React.useMemo(() => selectedItem === dsId, [selectedItem, dsId]);
74
- const isFocused = React.useMemo(() => focusedItem === dsId, [focusedItem, dsId]);
75
75
 
76
76
  if (!expandedForAnimation && !CollapsedComponent) {
77
77
  return null;
78
78
  }
79
79
 
80
80
  return /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
81
- children: [/*#__PURE__*/_jsx__default['default'](styled.StyledItemWrapper, {
82
- shadowStyle: shadowStyle,
81
+ children: [/*#__PURE__*/_jsx__default["default"](styled.StyledItemWrapper, {
82
+ shadowStyle: shadowStyle(opened, item.type),
83
83
  "data-testid": "leftnav-item-wrapper"
84
84
  }, void 0, /*#__PURE__*/jsxRuntime.jsx(styled.StyledItem, {
85
85
  ref: visibleItemsRefs.current[dsId],
86
86
  pt: paddingTop,
87
- pl: indent === undefined ? 'xxxs' : `${indent}px`,
87
+ pl: indent === undefined ? 'xxxs' : "".concat(indent, "px"),
88
88
  minHeight: minHeight,
89
- shadowStyle: shadowStyle,
89
+ shadowStyle: shadowStyle(opened, item.type),
90
90
  alignItems: "flex-start",
91
91
  cols: cols,
92
92
  onClick: !opened ? handleOnClick : () => null,
93
93
  onKeyDown: onKeyDown,
94
94
  selectable: selectable,
95
95
  selected: isSelected,
96
+ selectedParent: selectedParent === dsId,
96
97
  opened: opened,
97
- focused: isFocused,
98
- focusedByKey: focusedByKey,
99
98
  onFocus: handleFocus,
100
99
  "data-testid": "leftnav-item-container",
101
100
  tabIndex: focuseable ? 0 : -1,
101
+ "aria-describedby": ariaDescribedBy,
102
102
  "aria-expanded": ariaExpanded,
103
103
  role: ariaRole,
104
+ "data-selected": isSelected,
105
+ "data-selectedparent": selectedParent === dsId,
104
106
  "aria-label": ariaLabel,
105
107
  "aria-hidden": !focuseable,
106
- children: !expandedForAnimation ? /*#__PURE__*/_jsx__default['default'](Grid__default['default'], {
108
+ "aria-live": ariaLive,
109
+ children: !expandedForAnimation ? /*#__PURE__*/_jsx__default["default"](Grid__default["default"], {
107
110
  "data-testid": "leftnav-leftcomponent",
108
111
  justifyContent: "center"
109
- }, void 0, /*#__PURE__*/_jsx__default['default'](CollapsedComponent, {
112
+ }, void 0, /*#__PURE__*/_jsx__default["default"](CollapsedComponent, {
110
113
  item: item,
111
114
  ctx: ctx
112
115
  })) : children
113
- }), hasBorderBottom && /*#__PURE__*/_jsx__default['default']("div", {
116
+ }), hasBorderBottom && /*#__PURE__*/_jsx__default["default"]("div", {
114
117
  style: {
115
118
  marginLeft: opened ? '16px' : '0px',
116
119
  marginRight: borderBottomMr,
117
120
  height: '1px',
118
- width: `calc(100% - ${borderBottomMr} - ${opened ? '16px' : '0px'})`,
121
+ width: "calc(100% - ".concat(borderBottomMr, " - ").concat(opened ? '16px' : '0px', ")"),
119
122
  backgroundColor: '#E0E3E8'
120
123
  }
121
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 StyledItemWrapper = /*#__PURE__*/styled__default['default'](Grid__default['default']).withConfig({
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
+ };
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
- const StyledItem = /*#__PURE__*/styled__default['default'](Grid__default['default']).withConfig({
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
 
@@ -11,7 +16,7 @@ var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_definePropert
11
16
 
12
17
  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; }
13
18
 
14
- 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; }
19
+ 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; }
15
20
  const itemDefaultProps = {
16
21
  label: '',
17
22
  labelOverflow: 'truncate',
@@ -21,8 +26,11 @@ const itemDefaultProps = {
21
26
  closable: false,
22
27
  ariaLabel: '',
23
28
  ariaRole: 'menuitem',
24
- ariaExpanded: undefined
25
- }; // Make use Item props with defaults
29
+ ariaLive: 'off',
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
26
34
 
27
35
  const usePropsWithDefaults = props => {
28
36
  const propsWithDefault = React.useMemo(() => {
@@ -36,7 +44,7 @@ const usePropsWithDefaults = props => {
36
44
  minHeight: '48px',
37
45
  paddingTop: '12px',
38
46
  subitems: [],
39
- 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'),
40
48
  hasBorderBottom: false,
41
49
  borderBottomMr: '0px'
42
50
  }, props), {}, {