@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.
- package/cjs/LeftNavigationContext.js +0 -4
- package/cjs/common/getLeftBorderStyle.js +2 -2
- package/cjs/common/index.js +0 -2
- package/cjs/configs/useLeftNavConfig.js +13 -21
- package/cjs/configs/useLeftNavItems.js +7 -7
- package/cjs/exported-related/ChevronItem/index.js +7 -3
- package/cjs/exported-related/Icon/index.js +5 -0
- package/cjs/exported-related/ItemRenderer/index.js +6 -7
- package/cjs/exported-related/ItemRenderer/styled.js +27 -17
- package/cjs/exported-related/ItemRenderer/usePropsWithDefaults.js +8 -2
- package/cjs/exported-related/Notifications/index.js +41 -41
- package/cjs/exported-related/OpenWindowItem/index.js +7 -3
- package/cjs/hooks/useExpandableOnClickHandler.js +7 -6
- package/cjs/hooks/useKeyboardNavigation.js +7 -7
- package/cjs/hooks/useOpenableOnClickHandler.js +8 -7
- package/cjs/hooks/useSelectFirstBodyItem.js +14 -4
- package/cjs/outOfTheBox/ItemControlledDrilldown/index.js +17 -16
- package/cjs/outOfTheBox/ItemControlledDrilldown/styled.js +7 -4
- package/cjs/outOfTheBox/ItemHeader/index.js +20 -13
- package/cjs/outOfTheBox/ItemHeader/styled.js +3 -4
- package/cjs/outOfTheBox/ItemLink/index.js +18 -14
- package/cjs/outOfTheBox/ItemSection/index.js +11 -8
- package/cjs/outOfTheBox/ItemSeparator/index.js +6 -6
- package/cjs/outOfTheBox/ItemSubmenu/index.js +13 -13
- package/cjs/outOfTheBox/ItemSubmenu/styled.js +3 -4
- package/cjs/outOfTheBox/ItemTextLabel/index.js +11 -9
- package/cjs/outOfTheBox/ItemTextLabel/styled.js +7 -4
- package/cjs/outOfTheBox/ItemUncontrolledDrilldown/index.js +12 -13
- package/cjs/outOfTheBox/ItemUncontrolledDrilldown/styled.js +7 -4
- package/cjs/outOfTheBox/ItemWithDate/index.js +9 -8
- package/cjs/outOfTheBox/ItemWithDate/styled.js +7 -4
- package/cjs/outOfTheBox/index.js +6 -6
- package/cjs/parts/LeftNavContent/index.js +5 -2
- package/cjs/parts/LeftNavContent/styled.js +9 -6
- package/cjs/parts/LeftNavContentWithScrollbar/index.js +6 -1
- package/cjs/parts/LeftNavFooterItem/index.js +2 -11
- package/cjs/parts/LeftNavFooterItem/styled.js +8 -9
- package/cjs/parts/LeftNavLoading/index.js +13 -10
- package/cjs/parts/OutOfTheBoxMapItem.js +5 -0
- package/cjs/prop-types.js +2 -1
- package/esm/LeftNavigationContext.js +0 -4
- package/esm/common/getLeftBorderStyle.js +2 -2
- package/esm/common/index.js +0 -1
- package/esm/configs/useLeftNavConfig.js +13 -21
- package/esm/configs/useLeftNavItems.js +7 -7
- package/esm/exported-related/ChevronItem/index.js +7 -2
- package/esm/exported-related/Icon/index.js +5 -0
- package/esm/exported-related/ItemRenderer/index.js +6 -7
- package/esm/exported-related/ItemRenderer/styled.js +27 -18
- package/esm/exported-related/ItemRenderer/usePropsWithDefaults.js +8 -2
- package/esm/exported-related/Notifications/index.js +41 -37
- package/esm/exported-related/OpenWindowItem/index.js +7 -2
- package/esm/hooks/useExpandableOnClickHandler.js +7 -6
- package/esm/hooks/useKeyboardNavigation.js +7 -7
- package/esm/hooks/useOpenableOnClickHandler.js +8 -7
- package/esm/hooks/useSelectFirstBodyItem.js +14 -4
- package/esm/outOfTheBox/ItemControlledDrilldown/index.js +14 -11
- package/esm/outOfTheBox/ItemControlledDrilldown/styled.js +7 -4
- package/esm/outOfTheBox/ItemHeader/index.js +20 -13
- package/esm/outOfTheBox/ItemHeader/styled.js +3 -3
- package/esm/outOfTheBox/ItemLink/index.js +18 -14
- package/esm/outOfTheBox/ItemSection/index.js +11 -8
- package/esm/outOfTheBox/ItemSeparator/index.js +6 -6
- package/esm/outOfTheBox/ItemSubmenu/index.js +13 -13
- package/esm/outOfTheBox/ItemSubmenu/styled.js +3 -3
- package/esm/outOfTheBox/ItemTextLabel/index.js +11 -9
- package/esm/outOfTheBox/ItemTextLabel/styled.js +7 -4
- package/esm/outOfTheBox/ItemUncontrolledDrilldown/index.js +11 -10
- package/esm/outOfTheBox/ItemUncontrolledDrilldown/styled.js +7 -4
- package/esm/outOfTheBox/ItemWithDate/index.js +9 -8
- package/esm/outOfTheBox/ItemWithDate/styled.js +7 -4
- package/esm/outOfTheBox/index.js +6 -6
- package/esm/parts/LeftNavContent/index.js +5 -2
- package/esm/parts/LeftNavContent/styled.js +9 -6
- package/esm/parts/LeftNavContentWithScrollbar/index.js +6 -1
- package/esm/parts/LeftNavFooterItem/index.js +1 -9
- package/esm/parts/LeftNavFooterItem/styled.js +3 -4
- package/esm/parts/LeftNavLoading/index.js +13 -10
- package/esm/parts/OutOfTheBoxMapItem.js +5 -0
- package/esm/prop-types.js +2 -1
- package/package.json +12 -17
- package/types/LeftNavigation.d.ts +46 -11
- package/types/LeftNavigationContext.d.ts +0 -4
- package/types/common/index.d.ts +0 -1
- package/types/exported-related/ItemRenderer/styled.d.ts +3 -2
- package/types/hooks/useKeyboardNavigation.d.ts +1 -1
- package/types/hooks/useSelectFirstBodyItem.d.ts +1 -1
- package/types/index.d.d.ts +7 -2
- package/types/outOfTheBox/ItemControlledDrilldown/styled.d.ts +2 -2
- package/types/outOfTheBox/ItemHeader/styled.d.ts +2 -2
- package/types/outOfTheBox/ItemLink/styled.d.ts +1 -1
- package/types/outOfTheBox/ItemSection/styled.d.ts +3 -3
- package/types/outOfTheBox/ItemSubmenu/styled.d.ts +2 -2
- package/types/outOfTheBox/ItemTextLabel/styled.d.ts +1 -1
- package/types/outOfTheBox/ItemUncontrolledDrilldown/styled.d.ts +2 -2
- package/types/outOfTheBox/ItemWithDate/styled.d.ts +2 -2
- package/types/parts/LeftNavContent/styled.d.ts +7 -11
- package/types/parts/LeftNavFooterItem/styled.d.ts +10 -6
- package/types/prop-types.d.ts +87 -18
- package/cjs/common/getFocusedByKeyboardStyle.js +0 -12
- package/cjs/configs/useGlobalKeyListeners.js +0 -31
- package/esm/common/getFocusedByKeyboardStyle.js +0 -8
- package/esm/configs/useGlobalKeyListeners.js +0 -22
- package/types/common/getFocusedByKeyboardStyle.d.ts +0 -4
- 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
|
-
|
|
17
|
-
|
|
18
|
-
|
|
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
|
|
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":
|
|
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
|
-
|
|
17
|
-
|
|
18
|
-
|
|
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]);
|
package/cjs/outOfTheBox/index.js
CHANGED
|
@@ -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
|
|
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
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
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
|
|
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"](
|
|
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
|
|
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"](
|
|
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"](
|
|
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"](
|
|
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,
|
|
25
|
-
const StyledLabel = /*#__PURE__*/styled__default["default"](
|
|
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"](
|
|
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:
|
|
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-
|
|
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
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
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.
|
|
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 };
|
package/esm/common/index.js
CHANGED
|
@@ -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
|
-
|
|
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,
|
|
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
|
-
|
|
84
|
-
|
|
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,
|
|
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
|
|
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
|
-
}, [
|
|
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
|
|
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(
|
|
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
|
-
|
|
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,
|