@elliemae/ds-left-navigation 2.0.0-alpha.11 → 2.0.0-alpha.12

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 (105) 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 +6 -7
  9. package/cjs/exported-related/ItemRenderer/styled.js +27 -17
  10. package/cjs/exported-related/ItemRenderer/usePropsWithDefaults.js +8 -2
  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 +14 -4
  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 +11 -8
  23. package/cjs/outOfTheBox/ItemSeparator/index.js +6 -6
  24. package/cjs/outOfTheBox/ItemSubmenu/index.js +13 -13
  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 +5 -2
  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/cjs/prop-types.js +2 -1
  41. package/esm/LeftNavigationContext.js +0 -4
  42. package/esm/common/getLeftBorderStyle.js +2 -2
  43. package/esm/common/index.js +0 -1
  44. package/esm/configs/useLeftNavConfig.js +13 -21
  45. package/esm/configs/useLeftNavItems.js +7 -7
  46. package/esm/exported-related/ChevronItem/index.js +7 -2
  47. package/esm/exported-related/Icon/index.js +5 -0
  48. package/esm/exported-related/ItemRenderer/index.js +6 -7
  49. package/esm/exported-related/ItemRenderer/styled.js +27 -18
  50. package/esm/exported-related/ItemRenderer/usePropsWithDefaults.js +8 -2
  51. package/esm/exported-related/Notifications/index.js +41 -37
  52. package/esm/exported-related/OpenWindowItem/index.js +7 -2
  53. package/esm/hooks/useExpandableOnClickHandler.js +7 -6
  54. package/esm/hooks/useKeyboardNavigation.js +7 -7
  55. package/esm/hooks/useOpenableOnClickHandler.js +8 -7
  56. package/esm/hooks/useSelectFirstBodyItem.js +14 -4
  57. package/esm/outOfTheBox/ItemControlledDrilldown/index.js +14 -11
  58. package/esm/outOfTheBox/ItemControlledDrilldown/styled.js +7 -4
  59. package/esm/outOfTheBox/ItemHeader/index.js +20 -13
  60. package/esm/outOfTheBox/ItemHeader/styled.js +3 -3
  61. package/esm/outOfTheBox/ItemLink/index.js +18 -14
  62. package/esm/outOfTheBox/ItemSection/index.js +11 -8
  63. package/esm/outOfTheBox/ItemSeparator/index.js +6 -6
  64. package/esm/outOfTheBox/ItemSubmenu/index.js +13 -13
  65. package/esm/outOfTheBox/ItemSubmenu/styled.js +3 -3
  66. package/esm/outOfTheBox/ItemTextLabel/index.js +11 -9
  67. package/esm/outOfTheBox/ItemTextLabel/styled.js +7 -4
  68. package/esm/outOfTheBox/ItemUncontrolledDrilldown/index.js +11 -10
  69. package/esm/outOfTheBox/ItemUncontrolledDrilldown/styled.js +7 -4
  70. package/esm/outOfTheBox/ItemWithDate/index.js +9 -8
  71. package/esm/outOfTheBox/ItemWithDate/styled.js +7 -4
  72. package/esm/outOfTheBox/index.js +6 -6
  73. package/esm/parts/LeftNavContent/index.js +5 -2
  74. package/esm/parts/LeftNavContent/styled.js +9 -6
  75. package/esm/parts/LeftNavContentWithScrollbar/index.js +6 -1
  76. package/esm/parts/LeftNavFooterItem/index.js +1 -9
  77. package/esm/parts/LeftNavFooterItem/styled.js +3 -4
  78. package/esm/parts/LeftNavLoading/index.js +13 -10
  79. package/esm/parts/OutOfTheBoxMapItem.js +5 -0
  80. package/esm/prop-types.js +2 -1
  81. package/package.json +12 -17
  82. package/types/LeftNavigation.d.ts +46 -11
  83. package/types/LeftNavigationContext.d.ts +0 -4
  84. package/types/common/index.d.ts +0 -1
  85. package/types/exported-related/ItemRenderer/styled.d.ts +3 -2
  86. package/types/hooks/useKeyboardNavigation.d.ts +1 -1
  87. package/types/hooks/useSelectFirstBodyItem.d.ts +1 -1
  88. package/types/index.d.d.ts +7 -2
  89. package/types/outOfTheBox/ItemControlledDrilldown/styled.d.ts +2 -2
  90. package/types/outOfTheBox/ItemHeader/styled.d.ts +2 -2
  91. package/types/outOfTheBox/ItemLink/styled.d.ts +1 -1
  92. package/types/outOfTheBox/ItemSection/styled.d.ts +3 -3
  93. package/types/outOfTheBox/ItemSubmenu/styled.d.ts +2 -2
  94. package/types/outOfTheBox/ItemTextLabel/styled.d.ts +1 -1
  95. package/types/outOfTheBox/ItemUncontrolledDrilldown/styled.d.ts +2 -2
  96. package/types/outOfTheBox/ItemWithDate/styled.d.ts +2 -2
  97. package/types/parts/LeftNavContent/styled.d.ts +7 -11
  98. package/types/parts/LeftNavFooterItem/styled.d.ts +10 -6
  99. package/types/prop-types.d.ts +87 -18
  100. package/cjs/common/getFocusedByKeyboardStyle.js +0 -12
  101. package/cjs/configs/useGlobalKeyListeners.js +0 -31
  102. package/esm/common/getFocusedByKeyboardStyle.js +0 -8
  103. package/esm/configs/useGlobalKeyListeners.js +0 -22
  104. package/types/common/getFocusedByKeyboardStyle.d.ts +0 -4
  105. package/types/configs/useGlobalKeyListeners.d.ts +0 -6
@@ -12,10 +12,13 @@ var Grid__default = /*#__PURE__*/_interopDefaultLegacy(Grid);
12
12
 
13
13
  const StyledLabel = /*#__PURE__*/styled__default["default"](Grid__default["default"]).withConfig({
14
14
  componentId: "sc-17rk89j-0"
15
- })(["font-size:13px;font-weight:", ";color:", ";line-height:14px;word-break:", ";"], props => props.labelBold ? props.theme.fontWeights.semibold : props.theme.fontWeights.regular, ({
16
- labelColor,
17
- theme
18
- }) => labelColor ? theme.colors[labelColor[0]][labelColor[1]] : theme.colors.neutral[800], props => props.labelOverflow === 'wrapAll' ? 'break-all' : 'normal');
15
+ })(["font-size:13px;font-weight:", ";color:", ";line-height:14px;word-break:", ";"], props => props.labelBold ? props.theme.fontWeights.semibold : props.theme.fontWeights.regular, _ref => {
16
+ let {
17
+ labelColor,
18
+ theme
19
+ } = _ref;
20
+ return labelColor ? theme.colors[labelColor[0]][labelColor[1]] : theme.colors.neutral[800];
21
+ }, props => props.labelOverflow === 'wrapAll' ? 'break-all' : 'normal');
19
22
  const StyledDate = /*#__PURE__*/styled__default["default"](Grid__default["default"]).withConfig({
20
23
  componentId: "sc-17rk89j-1"
21
24
  })(["font-size:12px;color:", ";line-height:14px;"], props => props.theme.colors.neutral[600]);
@@ -2,20 +2,20 @@
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 _jsx = require('@babel/runtime/helpers/jsx');
6
11
  var _defineProperty = require('@babel/runtime/helpers/defineProperty');
7
12
  require('react');
8
13
  var Grid = require('@elliemae/ds-grid');
9
14
  var dsTruncatedTooltipText = require('@elliemae/ds-truncated-tooltip-text');
10
15
  var index = require('../../exported-related/ItemRenderer/index.js');
11
- require('@elliemae/ds-icons/ChevronSmallRight');
16
+ require('@elliemae/ds-icons');
12
17
  require('react/jsx-runtime');
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
18
  require('styled-components');
18
- require('@elliemae/ds-icons/OpenWindow');
19
19
  var styled = require('./styled.js');
20
20
 
21
21
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
@@ -39,7 +39,8 @@ const ItemWithDate = props => {
39
39
  labelRightSection,
40
40
  labelOverflow: itemLabelOverflow,
41
41
  labelBold,
42
- labelColor
42
+ labelColor,
43
+ labelDataTestId
43
44
  }
44
45
  },
45
46
  ctx,
@@ -59,7 +60,7 @@ const ItemWithDate = props => {
59
60
  }, void 0, " ", _div || (_div = /*#__PURE__*/_jsx__default["default"]("div", {})), /*#__PURE__*/_jsx__default["default"](styled.StyledLabel, {
60
61
  pl: "xxs",
61
62
  pb: "xxxs",
62
- "data-testid": "leftnav-list-item-label",
63
+ "data-testid": labelDataTestId || 'leftnav-list-item-label',
63
64
  labelOverflow: labelOverflow,
64
65
  labelBold: labelBold,
65
66
  labelColor: labelColor
@@ -12,10 +12,13 @@ var Grid__default = /*#__PURE__*/_interopDefaultLegacy(Grid);
12
12
 
13
13
  const StyledLabel = /*#__PURE__*/styled__default["default"](Grid__default["default"]).withConfig({
14
14
  componentId: "sc-govmsc-0"
15
- })(["font-size:13px;font-weight:", ";color:", ";line-height:14px;word-break:", ";"], props => props.labelBold ? props.theme.fontWeights.semibold : props.theme.fontWeights.regular, ({
16
- labelColor,
17
- theme
18
- }) => labelColor ? theme.colors[labelColor[0]][labelColor[1]] : theme.colors.neutral[800], props => props.labelOverflow === 'wrapAll' ? 'break-all' : 'normal');
15
+ })(["font-size:13px;font-weight:", ";color:", ";line-height:14px;word-break:", ";"], props => props.labelBold ? props.theme.fontWeights.semibold : props.theme.fontWeights.regular, _ref => {
16
+ let {
17
+ labelColor,
18
+ theme
19
+ } = _ref;
20
+ return labelColor ? theme.colors[labelColor[0]][labelColor[1]] : theme.colors.neutral[800];
21
+ }, props => props.labelOverflow === 'wrapAll' ? 'break-all' : 'normal');
19
22
  const StyledDate = /*#__PURE__*/styled__default["default"](Grid__default["default"]).withConfig({
20
23
  componentId: "sc-govmsc-1"
21
24
  })(["font-size:12px;color:", ";line-height:14px;"], props => props.theme.colors.neutral[600]);
@@ -7,14 +7,14 @@ require('@babel/runtime/helpers/jsx');
7
7
  require('react');
8
8
  require('@elliemae/ds-grid');
9
9
  require('styled-components');
10
+ require('core-js/modules/esnext.async-iterator.filter.js');
11
+ require('core-js/modules/esnext.iterator.constructor.js');
12
+ require('core-js/modules/esnext.iterator.filter.js');
13
+ require('core-js/modules/esnext.async-iterator.for-each.js');
14
+ require('core-js/modules/esnext.iterator.for-each.js');
10
15
  require('@babel/runtime/helpers/defineProperty');
11
16
  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');
17
+ require('@elliemae/ds-icons');
18
18
  var index = require('./ItemControlledDrilldown/index.js');
19
19
  var index$1 = require('./ItemUncontrolledDrilldown/index.js');
20
20
  var index$2 = require('./ItemHeader/index.js');
@@ -1,6 +1,8 @@
1
1
  'use strict';
2
2
 
3
3
  var _jsx = require('@babel/runtime/helpers/jsx');
4
+ require('core-js/modules/esnext.async-iterator.map.js');
5
+ require('core-js/modules/esnext.iterator.map.js');
4
6
  var React = require('react');
5
7
  var LeftNavigationContext = require('../../LeftNavigationContext.js');
6
8
  var index$1 = require('../LeftNavFooterItem/index.js');
@@ -24,7 +26,8 @@ const LeftNavInnerContent = () => {
24
26
  HeaderComponent,
25
27
  BodyHeaderComponent,
26
28
  openedItem,
27
- items
29
+ items,
30
+ withoutBodyShadow
28
31
  },
29
32
  selectedItem
30
33
  } = React__default["default"].useContext(LeftNavigationContext.LeftNavContext);
@@ -40,7 +43,7 @@ const LeftNavInnerContent = () => {
40
43
  }, void 0, BodyHeaderComponent ? /*#__PURE__*/_jsx__default["default"](OutOfTheBoxMapItem.OutOfTheBoxMapItem, {
41
44
  item: BodyHeaderComponent
42
45
  }) : null), /*#__PURE__*/_jsx__default["default"](styled.StyledLeftNavBodyItemsArea, {
43
- selected: openedItem !== null,
46
+ selected: !withoutBodyShadow && openedItem !== null,
44
47
  "data-testid": "leftnav-body-items-area",
45
48
  tabIndex: -1
46
49
  }, void 0, /*#__PURE__*/_jsx__default["default"](index$2.LeftNavContentWithScrollbar, {}, void 0, items.map(item => /*#__PURE__*/_jsx__default["default"](OutOfTheBoxMapItem.OutOfTheBoxMapItem, {
@@ -8,12 +8,15 @@ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'defau
8
8
 
9
9
  var styled__default = /*#__PURE__*/_interopDefaultLegacy(styled);
10
10
 
11
- const getLeftShadowStyles = ({
12
- selected,
13
- theme
14
- }) => {
15
- if (!selected) {
16
- return "\n box-shadow: inset 4px 0 0 0 transparent;\n :hover {\n box-shadow: inset 4px 0 0 0 ".concat(theme.colors.neutral[300], ";\n }\n :active {\n box-shadow: inset 4px 0 0 0 ").concat(theme.colors.brand[400], ";\n }\n ");
11
+ const getLeftShadowStyles = _ref => {
12
+ let {
13
+ selected,
14
+ selectedParent,
15
+ theme
16
+ } = _ref;
17
+
18
+ if (!selected && !selectedParent) {
19
+ return "\n box-shadow: inset 4px 0 0 0 transparent;\n :hover {\n box-shadow: inset 4px 0 0 0 ".concat(theme.colors.brand[300], ";\n }\n :active {\n box-shadow: inset 4px 0 0 0 ").concat(theme.colors.brand[400], ";\n }\n ");
17
20
  }
18
21
 
19
22
  return "box-shadow: inset 4px 0 0 0 ".concat(theme.colors.brand[400], ";");
@@ -5,9 +5,14 @@ Object.defineProperty(exports, '__esModule', { value: true });
5
5
  var _jsx = require('@babel/runtime/helpers/jsx');
6
6
  var _defineProperty = require('@babel/runtime/helpers/defineProperty');
7
7
  require('core-js/modules/web.dom-collections.iterator.js');
8
+ require('core-js/modules/esnext.async-iterator.filter.js');
9
+ require('core-js/modules/esnext.iterator.constructor.js');
10
+ require('core-js/modules/esnext.iterator.filter.js');
11
+ require('core-js/modules/esnext.async-iterator.for-each.js');
12
+ require('core-js/modules/esnext.iterator.for-each.js');
8
13
  var React = require('react');
9
- var OverlayScrollbars = require('overlayscrollbars');
10
14
  require('overlayscrollbars/css/OverlayScrollbars.css');
15
+ var OverlayScrollbars = require('overlayscrollbars');
11
16
  var styled = require('styled-components');
12
17
  var jsxRuntime = require('react/jsx-runtime');
13
18
 
@@ -4,7 +4,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var _jsx = require('@babel/runtime/helpers/jsx');
6
6
  var React = require('react');
7
- var MenuExpand = require('@elliemae/ds-icons/MenuExpand');
7
+ var dsIcons = require('@elliemae/ds-icons');
8
8
  var Grid = require('@elliemae/ds-grid');
9
9
  var dsTruncatedTooltipText = require('@elliemae/ds-truncated-tooltip-text');
10
10
  var styled = require('./styled.js');
@@ -16,7 +16,6 @@ var jsxRuntime = require('react/jsx-runtime');
16
16
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
17
17
 
18
18
  var _jsx__default = /*#__PURE__*/_interopDefaultLegacy(_jsx);
19
- var MenuExpand__default = /*#__PURE__*/_interopDefaultLegacy(MenuExpand);
20
19
  var Grid__default = /*#__PURE__*/_interopDefaultLegacy(Grid);
21
20
 
22
21
  var _StyledSeparator;
@@ -33,9 +32,7 @@ const LeftNavFooterItem = props => {
33
32
  },
34
33
  expandedForAnimation,
35
34
  setSelectedItem,
36
- focusedItem,
37
35
  setFocusedItem,
38
- focusedByKey,
39
36
  visibleItemsRefs
40
37
  } = React.useContext(LeftNavigationContext.LeftNavContext);
41
38
  const id = constants.FOOTER_DS_ID;
@@ -64,13 +61,11 @@ const LeftNavFooterItem = props => {
64
61
  cols: expandedForAnimation ? ['auto', '1fr', 'auto'] : ['38px'],
65
62
  onClick: expandedForAnimation ? () => null : handleOnClick,
66
63
  onKeyDown: onKeyDown,
67
- focused: focusedItem === id,
68
- focusedByKey: focusedByKey,
69
64
  onFocus: () => setFocusedItem(id),
70
65
  "data-testid": "leftnav-item-container",
71
66
  role: "menuitem",
72
67
  "aria-label": expandedForAnimation ? "Footer, ".concat(footerLabel) : "Expand left navigation",
73
- children: !expandedForAnimation ? /*#__PURE__*/_jsx__default["default"](MenuExpand__default["default"], {
68
+ children: !expandedForAnimation ? /*#__PURE__*/_jsx__default["default"](dsIcons.MenuExpand, {
74
69
  size: "m",
75
70
  color: ['brand-primary', 800],
76
71
  "data-testid": "leftnav-footer-btn"
@@ -93,13 +88,9 @@ const LeftNavFooterItem = props => {
93
88
  size: "m",
94
89
  color: ['brand-primary', 800],
95
90
  onClick: e => {
96
- if (openedItem) setSelectedItem(openedItem);
97
91
  e.stopPropagation();
98
92
  handleOnClick(e);
99
93
  },
100
- onKeyDown: e => {
101
- if (['Space', 'Enter'].includes(e.code) && openedItem) setSelectedItem(openedItem);
102
- },
103
94
  "data-testid": "leftnav-footer-btn",
104
95
  tabIndex: 0,
105
96
  onFocus: e => {
@@ -3,9 +3,8 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var styled = require('styled-components');
6
- var dsBasic = require('@elliemae/ds-basic');
6
+ var Grid = require('@elliemae/ds-grid');
7
7
  var dsIcons = require('@elliemae/ds-icons');
8
- var getFocusedByKeyboardStyle = require('../../common/getFocusedByKeyboardStyle.js');
9
8
  var getItemBackgroundStyle = require('../../common/getItemBackgroundStyle.js');
10
9
  var getLeftBorderStyle = require('../../common/getLeftBorderStyle.js');
11
10
 
@@ -13,24 +12,24 @@ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'defau
13
12
 
14
13
  var styled__default = /*#__PURE__*/_interopDefaultLegacy(styled);
15
14
 
16
- const StyledFooterMenu = /*#__PURE__*/styled__default["default"](dsBasic.Grid).withConfig({
15
+ const StyledFooterMenu = /*#__PURE__*/styled__default["default"](Grid.Grid).withConfig({
17
16
  componentId: "sc-1mcbjxr-0"
18
17
  })(["width:100%;margin-top:auto;background:", ";", " border-top:1px solid ", ";"], props => props.theme.colors.neutral['000'], getLeftBorderStyle.getLeftBorderStyle, props => props.theme.colors.neutral[100]);
19
- const StyledItemWrapper = /*#__PURE__*/styled__default["default"](dsBasic.Grid).withConfig({
18
+ const StyledItemWrapper = /*#__PURE__*/styled__default["default"](Grid.Grid).withConfig({
20
19
  componentId: "sc-1mcbjxr-1"
21
20
  })(["position:relative;padding-left:", ";"], props => props.theme.space.xxxs);
22
- const StyledItem = /*#__PURE__*/styled__default["default"](dsBasic.Grid).withConfig({
21
+ const StyledItem = /*#__PURE__*/styled__default["default"](Grid.Grid).withConfig({
23
22
  componentId: "sc-1mcbjxr-2"
24
- })(["min-height:48px;cursor:", ";", " outline:none;", ""], props => props.expanded ? 'auto' : 'pointer', getItemBackgroundStyle.getItemBackgroundStyle, getFocusedByKeyboardStyle.getFocusedByKeyboardBorderStyle);
25
- const StyledLabel = /*#__PURE__*/styled__default["default"](dsBasic.Grid).withConfig({
23
+ })(["min-height:48px;cursor:", ";", " outline:none;:focus{&:before{content:'';position:absolute;height:100%;width:100%;top:0;left:0px;border:2px solid ", ";pointer-events:none;}}"], props => props.expanded ? 'auto' : 'pointer', getItemBackgroundStyle.getItemBackgroundStyle, props => props.theme.colors.brand[600]);
24
+ const StyledLabel = /*#__PURE__*/styled__default["default"](Grid.Grid).withConfig({
26
25
  componentId: "sc-1mcbjxr-3"
27
26
  })(["font-size:11px;color:", ";line-height:14px;word-break:", ";"], props => props.theme.colors.neutral[500], props => props.labelOverflow === 'wrapAll' ? 'break-all' : 'normal');
28
- const StyledSeparator = /*#__PURE__*/styled__default["default"](dsBasic.Grid).withConfig({
27
+ const StyledSeparator = /*#__PURE__*/styled__default["default"](Grid.Grid).withConfig({
29
28
  componentId: "sc-1mcbjxr-4"
30
29
  })(["height:16px;width:1px;background-color:", ";"], props => props.theme.colors.neutral[100]);
31
30
  const StyledMenuCollapse = /*#__PURE__*/styled__default["default"](dsIcons.MenuCollapse).withConfig({
32
31
  componentId: "sc-1mcbjxr-5"
33
- })(["cursor:pointer;:focus{outline:1px solid ", ";}"], props => props.theme.colors.brand[800]);
32
+ })(["cursor:pointer;:focus{outline:2px solid ", ";}"], props => props.theme.colors.brand[700]);
34
33
 
35
34
  exports.StyledFooterMenu = StyledFooterMenu;
36
35
  exports.StyledItem = StyledItem;
@@ -4,7 +4,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var _jsx = require('@babel/runtime/helpers/jsx');
6
6
  require('react');
7
- var DSCircularProgressIndicator = require('@elliemae/ds-basic/CircularProgressIndicator');
7
+ var DSCircularProgressIndicator = require('@elliemae/ds-circular-progress-indicator');
8
8
  var Grid = require('@elliemae/ds-grid');
9
9
  var styled = require('styled-components');
10
10
 
@@ -18,14 +18,17 @@ var styled__default = /*#__PURE__*/_interopDefaultLegacy(styled);
18
18
  const StyledLoaderWrapper = /*#__PURE__*/styled__default["default"](Grid__default["default"]).withConfig({
19
19
  componentId: "sc-mqgtxd-0"
20
20
  })(["grid-area:left-nav-body;height:100%;place-items:center;z-index:0;background-color:white;"]);
21
- const LeftNavLoading = ({
22
- expanded
23
- }) => /*#__PURE__*/_jsx__default["default"](StyledLoaderWrapper, {}, void 0, /*#__PURE__*/_jsx__default["default"](DSCircularProgressIndicator__default["default"], {
24
- size: expanded ? 'xl' : 'm',
25
- loading: true,
26
- showLabel: expanded,
27
- waiting: false,
28
- showTooltip: !expanded
29
- }));
21
+ const LeftNavLoading = _ref => {
22
+ let {
23
+ expanded
24
+ } = _ref;
25
+ return /*#__PURE__*/_jsx__default["default"](StyledLoaderWrapper, {}, void 0, /*#__PURE__*/_jsx__default["default"](DSCircularProgressIndicator__default["default"], {
26
+ size: expanded ? 'xl' : 'm',
27
+ loading: true,
28
+ showLabel: expanded,
29
+ waiting: false,
30
+ showTooltip: !expanded
31
+ }));
32
+ };
30
33
 
31
34
  exports.LeftNavLoading = LeftNavLoading;
@@ -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 _jsx = require('@babel/runtime/helpers/jsx');
6
11
  var _defineProperty = require('@babel/runtime/helpers/defineProperty');
7
12
  var React = require('react');
package/cjs/prop-types.js CHANGED
@@ -27,7 +27,8 @@ const leftNavigationProps = {
27
27
  onFooterClose: reactDesc.PropTypes.func.description('The function to call when the left-nav is closed via the footer'),
28
28
  onSelectedChange: reactDesc.PropTypes.func.description('A callback which triggers when the selected item changes').defaultValue(() => null),
29
29
  onFocusChange: reactDesc.PropTypes.func.description('A callback which triggers when the focused item changes').defaultValue(() => null),
30
- items: reactDesc.PropTypes.arrayOf(reactDesc.PropTypes.object).description('The array of items you want to render inside the left nav').defaultValue([])
30
+ items: reactDesc.PropTypes.arrayOf(reactDesc.PropTypes.object).description('The array of items you want to render inside the left nav').defaultValue([]),
31
+ disableDefaultSelection: reactDesc.PropTypes.bool.description('Whether you do not want to automatically select the first body item').defaultValue(false)
31
32
  };
32
33
 
33
34
  const LeftNavItemProps = () => null;
@@ -19,12 +19,8 @@ const defaultContext = {
19
19
  leftNavProps: defaultProps,
20
20
  selectedItem: null,
21
21
  setSelectedItem: () => null,
22
- selectedSubitem: null,
23
- setSelectedSubitem: () => null,
24
22
  focusedItem: null,
25
23
  setFocusedItem: () => null,
26
- focusedByKey: false,
27
- setFocusedByKey: () => null,
28
24
  expandedForAnimation: true,
29
25
  openedDrilldowns: [],
30
26
  setOpenedDrilldowns: () => null,
@@ -1,8 +1,8 @@
1
1
  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");
2
2
 
3
3
  const getLeftBorderStyle = props => {
4
- if (props.selected) return commonLeftBorderStyle(props.theme.colors.brand[400], props.theme.colors.brand[400], props.theme.colors.brand[400]);
5
- return commonLeftBorderStyle(props.theme.colors.neutral['000'], props.theme.colors.neutral[300], props.theme.colors.brand[400]);
4
+ if (props.selected || props.selectedParent) return commonLeftBorderStyle(props.theme.colors.brand[400], props.theme.colors.brand[400], props.theme.colors.brand[400]);
5
+ return commonLeftBorderStyle(props.theme.colors.neutral['000'], props.theme.colors.brand[300], props.theme.colors.brand[400]);
6
6
  };
7
7
 
8
8
  export { getLeftBorderStyle };
@@ -1,4 +1,3 @@
1
- export { getFocusedByKeyboardBorderStyle } from './getFocusedByKeyboardStyle.js';
2
1
  export { getItemBackgroundStyle } from './getItemBackgroundStyle.js';
3
2
  export { getLeftBorderStyle } from './getLeftBorderStyle.js';
4
3
  export { getScrolbarStyle } from './getScrollbarStyle.js';
@@ -1,6 +1,5 @@
1
1
  import 'core-js/modules/web.dom-collections.iterator.js';
2
2
  import React from 'react';
3
- import { useGlobalKeyListeners } from './useGlobalKeyListeners.js';
4
3
  import { useLeftNavItems } from './useLeftNavItems.js';
5
4
  import { useLeftNavSmoothExpand } from './useLeftNavSmoothExpand.js';
6
5
  import { useSelectFirstBodyItem } from '../hooks/useSelectFirstBodyItem.js';
@@ -19,10 +18,10 @@ const useLeftNavConfig = props => {
19
18
  // Selection related
20
19
 
21
20
  const [selectedItem, setSelectedItem] = React.useState(null);
22
- const [selectedSubitem, setSelectedSubitem] = React.useState(null); // Focus related
21
+ React.useState(null);
22
+ const [selectedParent, setSelectedParent] = React.useState(null); // Focus related
23
23
 
24
- const [focusedItem, setFocusedItem] = React.useState(null);
25
- const [focusedByKey, setFocusedByKey] = React.useState(true); // Opened uncontrolled drilldowns
24
+ const [focusedItem, setFocusedItem] = React.useState(null); // Opened uncontrolled drilldowns
26
25
 
27
26
  const [openedDrilldowns, setOpenedDrilldowns] = React.useState([]); // -----------------------------------------------------------------------------
28
27
  // ************************** ------------ **************************
@@ -38,24 +37,19 @@ const useLeftNavConfig = props => {
38
37
  }), [expandedForAnimation, timeoutRef, setExpandedForAnimation]);
39
38
  useLeftNavSmoothExpand(props, smoothExpandOpts); // -----------------------------------------------------------------------------
40
39
  // ************************** ------------ **************************
41
- // * KEYBOARD *
42
- // ************************** ------------ **************************
43
-
44
- const globalKeyOpts = React.useMemo(() => ({
45
- setFocusedByKey
46
- }), [setFocusedByKey]);
47
- useGlobalKeyListeners(globalKeyOpts); // -----------------------------------------------------------------------------
48
- // ************************** ------------ **************************
49
40
  // * SIDE EFFECTS *
50
41
  // ************************** ------------ **************************
51
42
 
52
43
  React.useEffect(() => {
53
44
  onSelectedChange(selectedItem);
54
45
  }, [selectedItem, onSelectedChange]);
46
+ React.useEffect(() => {
47
+ if (openedItem !== null) setSelectedParent(openedItem);
48
+ }, [openedItem]);
55
49
  React.useEffect(() => {
56
50
  onFocusChange(focusedItem);
57
- }, [focusedItem, setFocusedItem]);
58
- useSelectFirstBodyItem(items, openedItem, setSelectedItem); // -----------------------------------------------------------------------------
51
+ }, [focusedItem, onFocusChange]);
52
+ useSelectFirstBodyItem(items, openedItem, props.selectedItem !== undefined ? props.selectedItem : selectedItem, setSelectedItem, props.disableDefaultSelection); // -----------------------------------------------------------------------------
59
53
  // ************************** ------------ **************************
60
54
  // * ITEMS MANAGEMENT *
61
55
  // ************************** ------------ **************************
@@ -65,7 +59,7 @@ const useLeftNavConfig = props => {
65
59
  bodyHeaderItem: props.BodyHeaderComponent,
66
60
  items: props.items,
67
61
  openedDrilldowns
68
- }), [props.items, openedDrilldowns]); // We need to know the current visible items since we have drilldowns
62
+ }), [props.HeaderComponent, props.BodyHeaderComponent, props.items, openedDrilldowns]); // We need to know the current visible items since we have drilldowns
69
63
 
70
64
  const {
71
65
  visibleItems,
@@ -78,19 +72,17 @@ const useLeftNavConfig = props => {
78
72
  const finalConfig = React.useMemo(() => ({
79
73
  leftNavProps: props,
80
74
  expandedForAnimation,
81
- selectedItem,
75
+ selectedItem: props.selectedItem !== undefined ? props.selectedItem : selectedItem,
82
76
  setSelectedItem,
83
- selectedSubitem,
84
- setSelectedSubitem,
77
+ selectedParent: props.selectedParent !== undefined ? props.selectedParent : selectedParent,
78
+ setSelectedParent,
85
79
  focusedItem,
86
80
  setFocusedItem,
87
- focusedByKey,
88
- setFocusedByKey,
89
81
  openedDrilldowns,
90
82
  setOpenedDrilldowns,
91
83
  visibleItems,
92
84
  visibleItemsRefs
93
- }), [props, props.items, expandedForAnimation, selectedItem, setSelectedItem, selectedSubitem, setSelectedSubitem, focusedItem, setFocusedItem, focusedByKey, setFocusedByKey, openedDrilldowns, setOpenedDrilldowns, visibleItems, visibleItemsRefs]);
85
+ }), [props, expandedForAnimation, selectedItem, setSelectedItem, setSelectedParent, selectedParent, focusedItem, setFocusedItem, openedDrilldowns, setOpenedDrilldowns, visibleItems, visibleItemsRefs]);
94
86
  return finalConfig;
95
87
  };
96
88
 
@@ -1,17 +1,17 @@
1
+ import 'core-js/modules/esnext.async-iterator.for-each.js';
2
+ import 'core-js/modules/esnext.iterator.constructor.js';
3
+ import 'core-js/modules/esnext.iterator.for-each.js';
1
4
  import 'core-js/modules/web.dom-collections.iterator.js';
2
5
  import { useMemo, useRef, createRef } from 'react';
3
6
  import { ITEM_TYPES, FOOTER_DS_ID } from '../exported-related/constants.js';
4
7
  import '@babel/runtime/helpers/esm/jsx';
5
8
  import '@elliemae/ds-grid';
6
9
  import 'styled-components';
10
+ import 'core-js/modules/esnext.async-iterator.filter.js';
11
+ import 'core-js/modules/esnext.iterator.filter.js';
7
12
  import '@babel/runtime/helpers/esm/defineProperty';
8
13
  import 'react/jsx-runtime';
9
- import '@elliemae/ds-icons/ChevronSmallRight';
10
- import '@elliemae/ds-icons/Notifications';
11
- import '@elliemae/ds-icons/ExceptionsSmallFill';
12
- import '@elliemae/ds-icons/AlertsSmallFill';
13
- import '@elliemae/ds-icons/MessagesSmallFill';
14
- import '@elliemae/ds-icons/OpenWindow';
14
+ import '@elliemae/ds-icons';
15
15
 
16
16
  const notFocuseableItems = [ITEM_TYPES.LEFT_NAV_ITEM_SEPARATOR, ITEM_TYPES.LEFT_NAV_ITEM_SECTION]; // Walks the array of items
17
17
  // Drilldowns are tree-like structures
@@ -62,7 +62,7 @@ const useLeftNavItems = props => {
62
62
  });
63
63
  visibleItemsArray.push(FOOTER_DS_ID);
64
64
  return visibleItemsArray;
65
- }, [props]);
65
+ }, [items, openedDrilldowns]);
66
66
  visibleItems.forEach(dsId => {
67
67
  if (!(dsId in visibleItemsRefs.current)) visibleItemsRefs.current[dsId] = /*#__PURE__*/createRef();
68
68
  });
@@ -1,12 +1,17 @@
1
+ import 'core-js/modules/esnext.async-iterator.filter.js';
2
+ import 'core-js/modules/esnext.iterator.constructor.js';
3
+ import 'core-js/modules/esnext.iterator.filter.js';
4
+ import 'core-js/modules/esnext.async-iterator.for-each.js';
5
+ import 'core-js/modules/esnext.iterator.for-each.js';
1
6
  import _defineProperty from '@babel/runtime/helpers/esm/defineProperty';
2
7
  import 'react';
3
- import ChevronRight from '@elliemae/ds-icons/ChevronSmallRight';
8
+ import { ChevronSmallRight } from '@elliemae/ds-icons';
4
9
  import { jsx } from 'react/jsx-runtime';
5
10
 
6
11
  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; }
7
12
 
8
13
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
9
- const ChevronItem = props => /*#__PURE__*/jsx(ChevronRight, _objectSpread({
14
+ const ChevronItem = props => /*#__PURE__*/jsx(ChevronSmallRight, _objectSpread({
10
15
  size: "m",
11
16
  color: ['brand-primary', 800]
12
17
  }, props));
@@ -1,3 +1,8 @@
1
+ import 'core-js/modules/esnext.async-iterator.filter.js';
2
+ import 'core-js/modules/esnext.iterator.constructor.js';
3
+ import 'core-js/modules/esnext.iterator.filter.js';
4
+ import 'core-js/modules/esnext.async-iterator.for-each.js';
5
+ import 'core-js/modules/esnext.iterator.for-each.js';
1
6
  import _defineProperty from '@babel/runtime/helpers/esm/defineProperty';
2
7
  import 'react';
3
8
  import styled from 'styled-components';
@@ -41,10 +41,9 @@ const ItemRenderer = props => {
41
41
  openedItem
42
42
  },
43
43
  expandedForAnimation,
44
- focusedByKey,
44
+ selectedParent,
45
45
  selectedItem,
46
46
  setSelectedItem,
47
- focusedItem,
48
47
  setFocusedItem,
49
48
  visibleItemsRefs
50
49
  } = ctx;
@@ -64,7 +63,6 @@ const ItemRenderer = props => {
64
63
  });
65
64
  const cols = useMemo(() => expandedForAnimation ? ['auto', '1fr', 'auto'] : ['38px'], [expandedForAnimation]);
66
65
  const isSelected = useMemo(() => selectedItem === dsId, [selectedItem, dsId]);
67
- const isFocused = useMemo(() => focusedItem === dsId, [focusedItem, dsId]);
68
66
 
69
67
  if (!expandedForAnimation && !CollapsedComponent) {
70
68
  return null;
@@ -72,29 +70,30 @@ const ItemRenderer = props => {
72
70
 
73
71
  return /*#__PURE__*/jsxs(Fragment, {
74
72
  children: [/*#__PURE__*/_jsx(StyledItemWrapper, {
75
- shadowStyle: shadowStyle,
73
+ shadowStyle: shadowStyle(opened, item.type),
76
74
  "data-testid": "leftnav-item-wrapper"
77
75
  }, void 0, /*#__PURE__*/jsx(StyledItem, {
78
76
  ref: visibleItemsRefs.current[dsId],
79
77
  pt: paddingTop,
80
78
  pl: indent === undefined ? 'xxxs' : "".concat(indent, "px"),
81
79
  minHeight: minHeight,
82
- shadowStyle: shadowStyle,
80
+ shadowStyle: shadowStyle(opened, item.type),
83
81
  alignItems: "flex-start",
84
82
  cols: cols,
85
83
  onClick: !opened ? handleOnClick : () => null,
86
84
  onKeyDown: onKeyDown,
87
85
  selectable: selectable,
88
86
  selected: isSelected,
87
+ selectedParent: selectedParent === dsId,
89
88
  opened: opened,
90
- focused: isFocused,
91
- focusedByKey: focusedByKey,
92
89
  onFocus: handleFocus,
93
90
  "data-testid": "leftnav-item-container",
94
91
  tabIndex: focuseable ? 0 : -1,
95
92
  "aria-describedby": ariaDescribedBy,
96
93
  "aria-expanded": ariaExpanded,
97
94
  role: ariaRole,
95
+ "data-selected": isSelected,
96
+ "data-selectedparent": selectedParent === dsId,
98
97
  "aria-label": ariaLabel,
99
98
  "aria-hidden": !focuseable,
100
99
  "aria-live": ariaLive,