@learningpool/ui 1.10.6 → 1.11.0

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.
@@ -17,7 +17,9 @@ interface MobileNavigationProps {
17
17
  isAvatarOpen?: boolean;
18
18
  hideAvatarInitials?: boolean;
19
19
  showNotchIndicator?: boolean;
20
+ localization?: string | Record<string, any>;
20
21
  dataAttributes?: any;
22
+ showSupportLinks?: boolean;
21
23
  hasSearch?: boolean;
22
24
  searchPanelPlaceholder?: string;
23
25
  searchPanelDefaultValue?: string;
@@ -34,6 +36,7 @@ interface MobileNavigationProps {
34
36
  avatarPanelOnClickMainAction?: any;
35
37
  avatarPanelMainActionString?: string;
36
38
  avatarPanelSettingItems?: Array<IAvatarMenuItemProps>;
39
+ /** @deprecated This property will be removed in the next major version (2.X) */
37
40
  avatarPanelShowHelpLinks?: boolean;
38
41
  }
39
42
  declare const MobileNavigation: (props: MobileNavigationProps) => React.ReactElement;
@@ -25,7 +25,6 @@ export interface ISwipeableTemporaryAvatarProps {
25
25
  avatarPanelMainActionString?: string;
26
26
  avatarPanelSettingItems?: Array<IAvatarMenuItemProps>;
27
27
  avatarPanelInvertNavString?: string;
28
- avatarPanelShowHelpLinks?: boolean;
29
28
  }
30
29
  declare const SwipeableTemporaryAvatar: (props: ISwipeableTemporaryAvatarProps) => React.ReactElement;
31
30
  export default SwipeableTemporaryAvatar;
@@ -31,14 +31,13 @@ import { handleAvatarInitials, useFadeIn } from '../../../utils/helpers';
31
31
  import { animated } from '@react-spring/web';
32
32
  import { defaultAttributes } from '../../../utils/dataAttributes';
33
33
  import { defaultMessages } from '../../../lang/en-us';
34
- import { Help, Lightbulb, Phone } from '@mui/icons-material';
35
34
  var SwipeableTemporaryAvatar = function (props) {
36
- var _a, _b, _c, _d, _e;
35
+ var _a, _b, _c, _d;
37
36
  var theme = useTheme();
38
- var avatarName = props.avatarName, mobileNavDirection = props.mobileNavDirection, avatarPanelLogoutString = props.avatarPanelLogoutString, isAvatarOpen = props.isAvatarOpen, setIsAvatarOpen = props.setIsAvatarOpen, setMobileNavDirection = props.setMobileNavDirection, avatarPanelOnClickSwitchDirection = props.avatarPanelOnClickSwitchDirection, avatarPanelOnClickLogout = props.avatarPanelOnClickLogout, avatarPanelOnClickViewProfile = props.avatarPanelOnClickViewProfile, avatarPanelViewProfileString = props.avatarPanelViewProfileString, avatarPanelOnClickEditProfile = props.avatarPanelOnClickEditProfile, avatarPanelEditProfileString = props.avatarPanelEditProfileString, avatarPanelMenuItems = props.avatarPanelMenuItems, avatarPanelOnClickMainAction = props.avatarPanelOnClickMainAction, avatarPanelMainActionString = props.avatarPanelMainActionString, avatarPanelSettingItems = props.avatarPanelSettingItems, avatarPanelInvertNavString = props.avatarPanelInvertNavString, dataAttributes = props.dataAttributes, localization = props.localization, avatarPanelShowHelpLinks = props.avatarPanelShowHelpLinks;
37
+ var avatarName = props.avatarName, mobileNavDirection = props.mobileNavDirection, avatarPanelLogoutString = props.avatarPanelLogoutString, isAvatarOpen = props.isAvatarOpen, setIsAvatarOpen = props.setIsAvatarOpen, setMobileNavDirection = props.setMobileNavDirection, avatarPanelOnClickSwitchDirection = props.avatarPanelOnClickSwitchDirection, avatarPanelOnClickLogout = props.avatarPanelOnClickLogout, avatarPanelOnClickViewProfile = props.avatarPanelOnClickViewProfile, avatarPanelViewProfileString = props.avatarPanelViewProfileString, avatarPanelOnClickEditProfile = props.avatarPanelOnClickEditProfile, avatarPanelEditProfileString = props.avatarPanelEditProfileString, avatarPanelMenuItems = props.avatarPanelMenuItems, avatarPanelOnClickMainAction = props.avatarPanelOnClickMainAction, avatarPanelMainActionString = props.avatarPanelMainActionString, avatarPanelSettingItems = props.avatarPanelSettingItems, avatarPanelInvertNavString = props.avatarPanelInvertNavString, dataAttributes = props.dataAttributes, localization = props.localization;
39
38
  var messages = __assign(__assign({}, defaultMessages), localization);
40
39
  var dataIds = __assign(__assign({}, defaultAttributes), dataAttributes);
41
- var _f = React.useState(isAvatarOpen !== null && isAvatarOpen !== void 0 ? isAvatarOpen : false), isOpen = _f[0], setIsOpen = _f[1];
40
+ var _e = React.useState(isAvatarOpen !== null && isAvatarOpen !== void 0 ? isAvatarOpen : false), isOpen = _e[0], setIsOpen = _e[1];
42
41
  React.useEffect(function () { return handleOpenState(isAvatarOpen); }, [isAvatarOpen]);
43
42
  var handleOpenState = function (open) {
44
43
  setIsOpen(open);
@@ -54,19 +53,12 @@ var SwipeableTemporaryAvatar = function (props) {
54
53
  handleOpenState(open);
55
54
  };
56
55
  };
57
- var _g = React.useState((_a = handleAvatarInitials(avatarName)) !== null && _a !== void 0 ? _a : 'AN'), avatarInitials = _g[0], setAvatarInitials = _g[1];
56
+ var _f = React.useState((_a = handleAvatarInitials(avatarName)) !== null && _a !== void 0 ? _a : 'AN'), avatarInitials = _f[0], setAvatarInitials = _f[1];
58
57
  useEffect(function () { return setAvatarInitials(handleAvatarInitials(avatarName)); }, [avatarName]);
59
58
  var handleOnClickSwitchDirection = function () {
60
59
  setMobileNavDirection(mobileNavDirection === 'rtl' ? 'ltr' : 'rtl');
61
60
  avatarPanelOnClickSwitchDirection && avatarPanelOnClickSwitchDirection();
62
61
  };
63
- // Add default helpful links below avatarPanelSettingItems,
64
- // these can be toggled on/off with the avatarPanelShowHelpLinks prop
65
- var defaultHelpLinks = [
66
- { label: messages['help-center'], icon: _jsx(Help, {}), onClick: function () { return window.open('https://learningpool.zendesk.com', '_blank'); } },
67
- { label: messages['feature-request'], icon: _jsx(Lightbulb, {}), onClick: function () { return window.open('https://app.smartsheet.com/b/form/823248624a324630a904e825098ca816', '_blank'); } },
68
- { label: messages['contact-us'], icon: _jsx(Phone, {}), onClick: function () { return window.open('https://learningpool.com/support', '_blank'); } }
69
- ];
70
62
  // Workaround to handle the react-spring calls without
71
63
  // adding additional hook calls on prop or state changes
72
64
  // --
@@ -81,7 +73,7 @@ var SwipeableTemporaryAvatar = function (props) {
81
73
  'avatarPanelOnClickMainAction',
82
74
  'mobileNavDirection'
83
75
  ];
84
- var totalItems = __spreadArray(__spreadArray(__spreadArray(__spreadArray([], avatarPanelMenuItems !== null && avatarPanelMenuItems !== void 0 ? avatarPanelMenuItems : [], true), avatarPanelSettingItems !== null && avatarPanelSettingItems !== void 0 ? avatarPanelSettingItems : [], true), defaultHelpLinks !== null && defaultHelpLinks !== void 0 ? defaultHelpLinks : [], true), additionalItems, true);
76
+ var totalItems = __spreadArray(__spreadArray(__spreadArray([], avatarPanelMenuItems !== null && avatarPanelMenuItems !== void 0 ? avatarPanelMenuItems : [], true), avatarPanelSettingItems !== null && avatarPanelSettingItems !== void 0 ? avatarPanelSettingItems : [], true), additionalItems, true);
85
77
  var animationRefs = React.useRef(totalItems && totalItems.map(function (item, index) { return useFadeIn(index, !isAvatarOpen); }));
86
78
  return (_jsx(StyledSwipeableAvatar, __assign({ "data-id": dataIds.MobileNavAvatarPanel, anchor: 'bottom', open: isOpen, onClose: toggleAvatar(false), hideBackdrop: true, ModalProps: {
87
79
  keepMounted: true
@@ -144,29 +136,13 @@ var SwipeableTemporaryAvatar = function (props) {
144
136
  } }, { children: [_jsx(ListItemIcon, __assign({ "aria-hidden": true, style: {
145
137
  minWidth: theme.spacing(5)
146
138
  } }, { children: avatarMenuItem.icon })), _jsx(ListItemText, { primary: avatarMenuItem.label })] })) })));
147
- }), avatarPanelShowHelpLinks && defaultHelpLinks &&
148
- defaultHelpLinks.length > 0 &&
149
- defaultHelpLinks.map(function (avatarMenuItem, index) {
150
- var _a, _b;
151
- return (_jsx(ListItem, __assign({ component: animated.div, style: animationRefs.current[((_a = avatarPanelMenuItems === null || avatarPanelMenuItems === void 0 ? void 0 : avatarPanelMenuItems.length) !== null && _a !== void 0 ? _a : 0) + ((_b = avatarPanelSettingItems === null || avatarPanelSettingItems === void 0 ? void 0 : avatarPanelSettingItems.length) !== null && _b !== void 0 ? _b : 0) + index + 3], disablePadding: true }, { children: _jsxs(StyledListItemButton
152
- // TODO: figure out if these are links or buttons
153
- // @ts-expect-error
154
- , __assign({
155
- // TODO: figure out if these are links or buttons
156
- // @ts-expect-error
157
- component: Link, role: 'link', onClick: function () {
158
- handleOpenState(false);
159
- avatarMenuItem.onClick();
160
- } }, { children: [_jsx(ListItemIcon, __assign({ "aria-hidden": true, style: {
161
- minWidth: theme.spacing(5)
162
- } }, { children: avatarMenuItem.icon })), _jsx(ListItemText, { primary: avatarMenuItem.label })] })) })));
163
- }), avatarPanelOnClickSwitchDirection && (_jsx(ListItem, __assign({ component: animated.div, style: __assign({ marginTop: avatarPanelShowHelpLinks ? theme.spacing(2) : 0 }, animationRefs.current[((_c = avatarPanelMenuItems === null || avatarPanelMenuItems === void 0 ? void 0 : avatarPanelMenuItems.length) !== null && _c !== void 0 ? _c : 0) + ((_d = avatarPanelSettingItems === null || avatarPanelSettingItems === void 0 ? void 0 : avatarPanelSettingItems.length) !== null && _d !== void 0 ? _d : 0) + ((_e = defaultHelpLinks === null || defaultHelpLinks === void 0 ? void 0 : defaultHelpLinks.length) !== null && _e !== void 0 ? _e : 0) + 4]), disablePadding: true }, { children: _jsxs(StyledListItemButton
139
+ }), avatarPanelOnClickSwitchDirection && (_jsx(ListItem, __assign({ component: animated.div, style: __assign({ marginTop: 0 }, animationRefs.current[((_c = avatarPanelMenuItems === null || avatarPanelMenuItems === void 0 ? void 0 : avatarPanelMenuItems.length) !== null && _c !== void 0 ? _c : 0) + ((_d = avatarPanelSettingItems === null || avatarPanelSettingItems === void 0 ? void 0 : avatarPanelSettingItems.length) !== null && _d !== void 0 ? _d : 0) + 4]), disablePadding: true }, { children: _jsxs(StyledListItemButton
164
140
  // TODO: figure out if these are links or buttons
165
141
  // @ts-expect-error
166
142
  , __assign({
167
143
  // TODO: figure out if these are links or buttons
168
144
  // @ts-expect-error
169
- component: Link, role: 'link', onClick: handleOnClickSwitchDirection }, { children: [_jsx(ListItemText, { primary: avatarPanelInvertNavString !== null && avatarPanelInvertNavString !== void 0 ? avatarPanelInvertNavString : 'Invert navigation bar' }), _jsx(ListItemIcon, __assign({ "aria-hidden": true, style: {
145
+ component: Link, role: 'link', onClick: handleOnClickSwitchDirection }, { children: [_jsx(ListItemText, { primary: avatarPanelInvertNavString !== null && avatarPanelInvertNavString !== void 0 ? avatarPanelInvertNavString : messages['invert-navigation-bar'] }), _jsx(ListItemIcon, __assign({ "aria-hidden": true, style: {
170
146
  minWidth: theme.spacing(5),
171
147
  marginInlineStart: '0.5rem'
172
148
  } }, { children: mobileNavDirection === 'ltr'
@@ -20,6 +20,10 @@ export interface ISwipeableTemporaryDrawerProps {
20
20
  logoOnClick?: any;
21
21
  label: string;
22
22
  children?: ISwipeableTemporaryDrawerProps[];
23
+ localization?: any;
23
24
  dataAttributes?: any;
25
+ showSupportLinks?: boolean;
26
+ /** @deprecated This property will be removed in the next major version (2.X) */
27
+ avatarPanelShowHelpLinks?: boolean;
24
28
  }
25
29
  export default function SwipeableTemporaryDrawer(props: ISwipeableTemporaryDrawerProps): JSX.Element;
@@ -26,12 +26,14 @@ import { StyledSwipeableDrawer, StyledBox, StyledListItem, StyledDivider, Styled
26
26
  import { StreamSuiteLogo } from '../../../assets/Images';
27
27
  import { animated } from '@react-spring/web';
28
28
  import { useFadeIn } from '../../../utils/helpers';
29
- import { getOffsetNavigationContrastText } from '../helpers';
29
+ import { getDefaultSupportLinks, getOffsetNavigationContrastText } from '../helpers';
30
30
  import { defaultAttributes } from '../../../utils/dataAttributes';
31
+ import { defaultMessages } from '../../../lang/en-us';
31
32
  export default function SwipeableTemporaryDrawer(props) {
32
- var isDrawerOpen = props.isDrawerOpen, setIsDrawerOpen = props.setIsDrawerOpen, items = props.items, secondaryItems = props.secondaryItems, logo = props.logo, logoText = props.logoText, logoOnClick = props.logoOnClick, dataAttributes = props.dataAttributes;
33
+ var isDrawerOpen = props.isDrawerOpen, setIsDrawerOpen = props.setIsDrawerOpen, items = props.items, secondaryItems = props.secondaryItems, logo = props.logo, logoText = props.logoText, logoOnClick = props.logoOnClick, dataAttributes = props.dataAttributes, localization = props.localization, showSupportLinks = props.showSupportLinks, avatarPanelShowHelpLinks = props.avatarPanelShowHelpLinks;
33
34
  var theme = useTheme();
34
35
  var _a = React.useState(isDrawerOpen !== null && isDrawerOpen !== void 0 ? isDrawerOpen : false), isOpen = _a[0], setIsOpen = _a[1];
36
+ var messages = __assign(__assign({}, defaultMessages), localization);
35
37
  var dataIds = __assign(__assign({}, defaultAttributes), dataAttributes);
36
38
  React.useEffect(function () { return handleOpenState(isDrawerOpen); }, [isDrawerOpen]);
37
39
  var handleOpenState = function (open) {
@@ -48,6 +50,8 @@ export default function SwipeableTemporaryDrawer(props) {
48
50
  handleOpenState(open);
49
51
  };
50
52
  };
53
+ // Default support links, these can be toggled on/off via the showSupportLinks
54
+ var defaultSupportLinks = getDefaultSupportLinks(messages);
51
55
  // Workaround to handle the react-spring calls without
52
56
  // adding additional hook calls on prop or state changes
53
57
  // --
@@ -56,7 +60,7 @@ export default function SwipeableTemporaryDrawer(props) {
56
60
  // --
57
61
  // First item starts at 70ms, see STAGGER_ITEMS_DELAY in helpers.js
58
62
  var additionalItems = ['logo', 'divider'];
59
- var totalItems = __spreadArray(__spreadArray(__spreadArray([], items !== null && items !== void 0 ? items : [], true), secondaryItems !== null && secondaryItems !== void 0 ? secondaryItems : [], true), additionalItems, true);
63
+ var totalItems = __spreadArray(__spreadArray(__spreadArray(__spreadArray([], items !== null && items !== void 0 ? items : [], true), defaultSupportLinks !== null && defaultSupportLinks !== void 0 ? defaultSupportLinks : [], true), secondaryItems !== null && secondaryItems !== void 0 ? secondaryItems : [], true), additionalItems, true);
60
64
  var animationRefs = React.useRef(totalItems && totalItems.map(function (item, index) { return useFadeIn(index, !isOpen); }));
61
65
  var list = function () {
62
66
  var _a;
@@ -66,12 +70,17 @@ export default function SwipeableTemporaryDrawer(props) {
66
70
  : logo
67
71
  : (_jsx(StreamSuiteLogo, { style: {
68
72
  fill: getOffsetNavigationContrastText(theme)
69
- } })), _jsx(StyledDrawerLogoText, __assign({ variant: 'body1' }, { children: logoText !== null && logoText !== void 0 ? logoText : 'Site Logo' }))] })), _jsx(List, __assign({ "data-id": dataIds.MobileNavDrawerPrimaryList }, { children: items && items.length > 0 && items.map(function (item, index) {
70
- var label = item.label, children = item.children, onClick = item.onClick;
71
- return (_jsxs(StyledListItem, __assign({ "data-id": dataIds.MobileNavDrawerPrimaryItem, disablePadding: true,
72
- // @ts-expect-error
73
- component: animated.li, style: animationRefs.current[index] }, { children: [_jsx(StyledListItemButton, __assign({ onClick: onClick }, { children: _jsx(StyledListItemText, { primary: label }) })), children && children.length > 0 && (_jsx(StyledChildList, __assign({ "data-id": dataIds.MobileNavDrawerPrimaryChildList, "aria-label": label }, { children: children.map(function (childItem) { return (_jsx(StyledChildListItem, __assign({ "data-id": dataIds.MobileNavDrawerPrimaryChildItem }, { children: _jsx(StyledChildListItemButton, __assign({ onClick: childItem === null || childItem === void 0 ? void 0 : childItem.onClick }, { children: _jsx(StyledChildListItemText, { primary: childItem === null || childItem === void 0 ? void 0 : childItem.label }, childItem === null || childItem === void 0 ? void 0 : childItem.label) })) }), childItem === null || childItem === void 0 ? void 0 : childItem.label)); }) })))] }), label));
74
- }) })), secondaryItems && secondaryItems.length > 0 && (_jsxs(_Fragment, { children: [_jsx(animated.div, __assign({ style: animationRefs.current[((_a = items === null || items === void 0 ? void 0 : items.length) !== null && _a !== void 0 ? _a : 0) + 1] }, { children: _jsx(StyledDivider, {}) })), _jsx(StyledListSecondaryList, __assign({ "data-id": dataIds.MobileNavDrawerSecondaryList }, { children: secondaryItems && secondaryItems.length > 0 && secondaryItems.map(function (item, index) {
73
+ } })), _jsx(StyledDrawerLogoText, __assign({ variant: 'body1' }, { children: logoText !== null && logoText !== void 0 ? logoText : 'Site Logo' }))] })), _jsxs(List, __assign({ "data-id": dataIds.MobileNavDrawerPrimaryList }, { children: [items && items.length > 0 && items.map(function (item, index) {
74
+ var label = item.label, children = item.children, onClick = item.onClick;
75
+ return (_jsxs(StyledListItem, __assign({ "data-id": dataIds.MobileNavDrawerPrimaryItem, disablePadding: true,
76
+ // @ts-expect-error
77
+ component: animated.li, style: animationRefs.current[index] }, { children: [_jsx(StyledListItemButton, __assign({ onClick: onClick }, { children: _jsx(StyledListItemText, { primary: label }) })), children && children.length > 0 && (_jsx(StyledChildList, __assign({ "data-id": dataIds.MobileNavDrawerPrimaryChildList, "aria-label": label }, { children: children.map(function (childItem) { return (_jsx(StyledChildListItem, __assign({ "data-id": dataIds.MobileNavDrawerPrimaryChildItem }, { children: _jsx(StyledChildListItemButton, __assign({ onClick: childItem === null || childItem === void 0 ? void 0 : childItem.onClick }, { children: _jsx(StyledChildListItemText, { primary: childItem === null || childItem === void 0 ? void 0 : childItem.label }, childItem === null || childItem === void 0 ? void 0 : childItem.label) })) }), childItem === null || childItem === void 0 ? void 0 : childItem.label)); }) })))] }), label));
78
+ }), (showSupportLinks || avatarPanelShowHelpLinks) && defaultSupportLinks && defaultSupportLinks.length > 0 && defaultSupportLinks.map(function (item, index) {
79
+ var label = item.label, children = item.children, onClick = item.onClick;
80
+ return (_jsxs(StyledListItem, __assign({ "data-id": dataIds.MobileNavDrawerPrimaryItem, disablePadding: true,
81
+ // @ts-expect-error
82
+ component: animated.li, style: animationRefs.current[index] }, { children: [_jsx(StyledListItemButton, __assign({ onClick: onClick }, { children: _jsx(StyledListItemText, { primary: label }) })), children && children.length > 0 && (_jsx(StyledChildList, __assign({ "data-id": dataIds.MobileNavDrawerPrimaryChildList, "aria-label": label }, { children: children.map(function (childItem) { return (_jsx(StyledChildListItem, __assign({ "data-id": dataIds.MobileNavDrawerPrimaryChildItem }, { children: _jsx(StyledChildListItemButton, __assign({ onClick: childItem === null || childItem === void 0 ? void 0 : childItem.onClick }, { children: _jsx(StyledChildListItemText, { primary: childItem === null || childItem === void 0 ? void 0 : childItem.label }, childItem === null || childItem === void 0 ? void 0 : childItem.label) })) }), childItem === null || childItem === void 0 ? void 0 : childItem.label)); }) })))] }), label));
83
+ })] })), secondaryItems && secondaryItems.length > 0 && (_jsxs(_Fragment, { children: [_jsx(animated.div, __assign({ style: animationRefs.current[((_a = items === null || items === void 0 ? void 0 : items.length) !== null && _a !== void 0 ? _a : 0) + 1] }, { children: _jsx(StyledDivider, {}) })), _jsx(StyledListSecondaryList, __assign({ "data-id": dataIds.MobileNavDrawerSecondaryList }, { children: secondaryItems && secondaryItems.length > 0 && secondaryItems.map(function (item, index) {
75
84
  var _a;
76
85
  return (_jsx(StyledListSecondaryItem, __assign({ "data-id": dataIds.MobileNavDrawerSecondaryItem, disablePadding: true,
77
86
  // @ts-expect-error
@@ -48,11 +48,11 @@ import { DEFAULT_REACT_APP_ID } from '../../../utils/constants';
48
48
  import { animated } from '@react-spring/web';
49
49
  import { defaultMessages } from '../../../lang/en-us';
50
50
  import { defaultAttributes } from '../../../utils/dataAttributes';
51
- import { getNavigationBackground, getNavigationContrastText } from '../helpers';
51
+ import { getDefaultSupportLinks, getNavigationBackground, getNavigationContrastText } from '../helpers';
52
52
  var VerticalNavigation = function (props) {
53
53
  var _a;
54
54
  var theme = useTheme();
55
- var items = props.items, secondaryItems = props.secondaryItems, logo = props.logo, logoText = props.logoText, logoOnClick = props.logoOnClick, appRootID = props.appRootID, hasStreamHome = props.hasStreamHome, streamHomeApiKey = props.streamHomeApiKey, streamHomeBaseUrl = props.streamHomeBaseUrl, localization = props.localization, streamHomeAccessToken = props.streamHomeAccessToken, streamHomeApplications = props.streamHomeApplications, avatarName = props.avatarName, dataAttributes = props.dataAttributes, rest = __rest(props, ["items", "secondaryItems", "logo", "logoText", "logoOnClick", "appRootID", "hasStreamHome", "streamHomeApiKey", "streamHomeBaseUrl", "localization", "streamHomeAccessToken", "streamHomeApplications", "avatarName", "dataAttributes"]);
55
+ var items = props.items, secondaryItems = props.secondaryItems, logo = props.logo, logoText = props.logoText, logoOnClick = props.logoOnClick, appRootID = props.appRootID, hasStreamHome = props.hasStreamHome, streamHomeApiKey = props.streamHomeApiKey, streamHomeBaseUrl = props.streamHomeBaseUrl, localization = props.localization, streamHomeAccessToken = props.streamHomeAccessToken, streamHomeApplications = props.streamHomeApplications, avatarName = props.avatarName, dataAttributes = props.dataAttributes, showSupportLinks = props.showSupportLinks, avatarPanelShowHelpLinks = props.avatarPanelShowHelpLinks, rest = __rest(props, ["items", "secondaryItems", "logo", "logoText", "logoOnClick", "appRootID", "hasStreamHome", "streamHomeApiKey", "streamHomeBaseUrl", "localization", "streamHomeAccessToken", "streamHomeApplications", "avatarName", "dataAttributes", "showSupportLinks", "avatarPanelShowHelpLinks"]);
56
56
  var messages = __assign(__assign({}, defaultMessages), localization);
57
57
  var dataIds = __assign(__assign({}, defaultAttributes), dataAttributes);
58
58
  var propIsDrawerOpen = typeof (props === null || props === void 0 ? void 0 : props.isDrawerOpen) === 'boolean' ? props.isDrawerOpen : undefined;
@@ -109,6 +109,8 @@ var VerticalNavigation = function (props) {
109
109
  setIsAppSwitcherOpen(false);
110
110
  setIsDrawerOpen(open !== null && open !== void 0 ? open : !isDrawerOpen);
111
111
  }; };
112
+ // Default support links, these can be toggled on/off via the showSupportLinks
113
+ var defaultSupportLinks = getDefaultSupportLinks(messages);
112
114
  // Workaround to handle the react-spring calls without
113
115
  // adding additional hook calls on prop or state changes
114
116
  // --
@@ -117,10 +119,10 @@ var VerticalNavigation = function (props) {
117
119
  // --
118
120
  // First item starts at 70ms, see STAGGER_ITEMS_DELAY in helpers.js
119
121
  var additionalItems = ['hasStreamHome', 'hasAvatar', 'avatarName'];
120
- var totalItems = __spreadArray(__spreadArray(__spreadArray([], items !== null && items !== void 0 ? items : [], true), secondaryItems !== null && secondaryItems !== void 0 ? secondaryItems : [], true), additionalItems, true);
122
+ var totalItems = __spreadArray(__spreadArray(__spreadArray(__spreadArray([], items !== null && items !== void 0 ? items : [], true), defaultSupportLinks !== null && defaultSupportLinks !== void 0 ? defaultSupportLinks : [], true), secondaryItems !== null && secondaryItems !== void 0 ? secondaryItems : [], true), additionalItems, true);
121
123
  var animationRefs = React.useRef(totalItems && totalItems.map(function (item, index) { return useFadeIn(index); }));
122
124
  var listContent = function () {
123
- var _a, _b, _c;
125
+ var _a, _b, _c, _d, _e;
124
126
  return (_jsxs(Box, __assign({ sx: {
125
127
  display: 'flex',
126
128
  flex: '1 auto',
@@ -217,16 +219,19 @@ var VerticalNavigation = function (props) {
217
219
  height: '100%',
218
220
  width: DRAWER_WIDTH.Expanded,
219
221
  marginTop: "-".concat(theme.spacing(0.5), " !important")
220
- } }, { children: items && items.length > 0 && items.map(function (item, index) { return (_createElement(VerticalNavigationItem, __assign({}, item, { "data-id": dataIds.VerticalNavigationPrimaryListItem, key: "".concat(item.label, " - ").concat(index), index: index, isDrawerOpen: isDrawerOpen || isPersistent, style: animationRefs.current[index] }))); }) })) })) })), _jsx("div", __assign({ className: 'wrapper', "data-id": dataIds.VerticalNavigationSecondary, style: { backgroundColor: getNavigationBackground(theme) } }, { children: _jsxs(StyledNavSecondary, __assign({ "aria-label": 'Secondary' }, { children: [_jsx(StyledDivider, { isDrawerOpen: isDrawerOpen || isPersistent }), _jsxs(List, __assign({ "data-id": dataIds.VerticalNavigationSecondaryList, style: { width: DRAWER_WIDTH.Expanded } }, { children: [hasStreamHome
221
- ? (_jsx(VerticalNavigationItem, { "data-id": dataIds.VerticalNavigationAppSwitcherToggle, label: messages['app-switcher'], icon: _jsx(Apps, {}), onClick: handleToggleAppsClick, content: (_jsx(AppSwitcher, { isAppSwitcherOpen: isAppSwitcherOpen, setIsAppSwitcherOpen: setIsAppSwitcherOpen, applications: streamHomeApplications, apiKey: streamHomeApiKey !== null && streamHomeApiKey !== void 0 ? streamHomeApiKey : '', baseUrl: streamHomeBaseUrl !== null && streamHomeBaseUrl !== void 0 ? streamHomeBaseUrl : '', token: streamHomeAccessToken !== null && streamHomeAccessToken !== void 0 ? streamHomeAccessToken : '', isDrawerOpen: isDrawerOpen })), isDrawerOpen: isDrawerOpen || isPersistent, isSecondary: true, hasCustomContent: true, style: animationRefs.current[((_a = items === null || items === void 0 ? void 0 : items.length) !== null && _a !== void 0 ? _a : 0) + 1] }))
222
- : null, secondaryItems && secondaryItems.length > 0 && secondaryItems.map(function (item, index) {
222
+ } }, { children: items && items.length > 0 && items.map(function (item, index) { return (_createElement(VerticalNavigationItem, __assign({}, item, { "data-id": dataIds.VerticalNavigationPrimaryListItem, key: "".concat(item.label, " - ").concat(index), index: index, isDrawerOpen: isDrawerOpen || isPersistent, style: animationRefs.current[index] }))); }) })) })) })), _jsx("div", __assign({ className: 'wrapper', "data-id": dataIds.VerticalNavigationSecondary, style: { backgroundColor: getNavigationBackground(theme) } }, { children: _jsxs(StyledNavSecondary, __assign({ "aria-label": 'Secondary' }, { children: [_jsx(StyledDivider, { isDrawerOpen: isDrawerOpen || isPersistent }), _jsxs(List, __assign({ "data-id": dataIds.VerticalNavigationSecondaryList, style: { width: DRAWER_WIDTH.Expanded } }, { children: [(showSupportLinks || avatarPanelShowHelpLinks) && defaultSupportLinks && defaultSupportLinks.length > 0 && defaultSupportLinks.map(function (item, index) {
223
223
  var _a;
224
224
  return (_createElement(VerticalNavigationItem, __assign({}, item, { "data-id": dataIds.VerticalNavigationSecondaryListItem, key: "".concat(item.label, " - ").concat(index), index: index, isDrawerOpen: isDrawerOpen || isPersistent, isSecondary: true, style: animationRefs.current[((_a = items === null || items === void 0 ? void 0 : items.length) !== null && _a !== void 0 ? _a : 0) + index + 1] })));
225
+ }), hasStreamHome
226
+ ? (_jsx(VerticalNavigationItem, { "data-id": dataIds.VerticalNavigationAppSwitcherToggle, label: messages['app-switcher'], icon: _jsx(Apps, {}), onClick: handleToggleAppsClick, content: (_jsx(AppSwitcher, { isAppSwitcherOpen: isAppSwitcherOpen, setIsAppSwitcherOpen: setIsAppSwitcherOpen, applications: streamHomeApplications, apiKey: streamHomeApiKey !== null && streamHomeApiKey !== void 0 ? streamHomeApiKey : '', baseUrl: streamHomeBaseUrl !== null && streamHomeBaseUrl !== void 0 ? streamHomeBaseUrl : '', token: streamHomeAccessToken !== null && streamHomeAccessToken !== void 0 ? streamHomeAccessToken : '', isDrawerOpen: isDrawerOpen })), isDrawerOpen: isDrawerOpen || isPersistent, isSecondary: true, hasCustomContent: true, style: animationRefs.current[((_a = items === null || items === void 0 ? void 0 : items.length) !== null && _a !== void 0 ? _a : 0) + ((_b = defaultSupportLinks === null || defaultSupportLinks === void 0 ? void 0 : defaultSupportLinks.length) !== null && _b !== void 0 ? _b : 0) + 1] }))
227
+ : null, secondaryItems && secondaryItems.length > 0 && secondaryItems.map(function (item, index) {
228
+ var _a, _b;
229
+ return (_createElement(VerticalNavigationItem, __assign({}, item, { "data-id": dataIds.VerticalNavigationSecondaryListItem, key: "".concat(item.label, " - ").concat(index), index: index, isDrawerOpen: isDrawerOpen || isPersistent, isSecondary: true, style: animationRefs.current[((_a = items === null || items === void 0 ? void 0 : items.length) !== null && _a !== void 0 ? _a : 0) + ((_b = defaultSupportLinks === null || defaultSupportLinks === void 0 ? void 0 : defaultSupportLinks.length) !== null && _b !== void 0 ? _b : 0) + index + 1] })));
225
230
  }), hasAvatar && avatarName && (_jsx(VerticalNavigationItem, { label: avatarName, "data-id": dataIds.VerticalNavigationAvatarToggle, "aria-controls": 'avatar-panel', icon: _jsx(Avatar, __assign({ style: {
226
231
  fontSize: '0.75rem',
227
232
  height: 32,
228
233
  width: 32
229
- } }, { children: handleAvatarInitials(avatarName) })), style: __assign({ maxHeight: isDrawerOpen ? '200px' : '48px', overflow: 'hidden', padding: 0, minHeight: 52, transition: "max-height 225ms ".concat(motion.easeInOut, " 0ms !important") }, animationRefs.current[((_b = items === null || items === void 0 ? void 0 : items.length) !== null && _b !== void 0 ? _b : 0) + ((_c = secondaryItems === null || secondaryItems === void 0 ? void 0 : secondaryItems.length) !== null && _c !== void 0 ? _c : 0) + 2]), onClick: function () { return setIsAvatarOpen(!isAvatarOpen); }, hasFlyout: true, fullHeightFlyout: true, content: _jsx(AvatarPanel, __assign({ avatarName: avatarName, isAvatarOpen: isAvatarOpen, localization: localization }, rest)), isDrawerOpen: isDrawerOpen }))] }))] })) }))] })));
234
+ } }, { children: handleAvatarInitials(avatarName) })), style: __assign({ maxHeight: isDrawerOpen ? '200px' : '48px', overflow: 'hidden', padding: 0, minHeight: 52, transition: "max-height 225ms ".concat(motion.easeInOut, " 0ms !important") }, animationRefs.current[((_c = items === null || items === void 0 ? void 0 : items.length) !== null && _c !== void 0 ? _c : 0) + ((_d = defaultSupportLinks === null || defaultSupportLinks === void 0 ? void 0 : defaultSupportLinks.length) !== null && _d !== void 0 ? _d : 0) + ((_e = secondaryItems === null || secondaryItems === void 0 ? void 0 : secondaryItems.length) !== null && _e !== void 0 ? _e : 0) + 2]), onClick: function () { return setIsAvatarOpen(!isAvatarOpen); }, hasFlyout: true, fullHeightFlyout: true, content: _jsx(AvatarPanel, __assign({ avatarName: avatarName, isAvatarOpen: isAvatarOpen, localization: localization }, rest)), isDrawerOpen: isDrawerOpen }))] }))] })) }))] })));
230
235
  };
231
236
  return (_jsxs(StyledAside, __assign({ "aria-label": messages['site-navigation'], "data-id": dataIds.VerticalNavigationContainer }, { children: [_jsx(DrawerShadow, { className: 'drawerShadow', "aria-hidden": 'true', isDrawerOpen: isDrawerOpen || isPersistent, style: {
232
237
  display: isPersistent ? 'none' : 'block'
@@ -26,28 +26,21 @@ import { useTheme } from '@mui/material/styles';
26
26
  import EditIcon from '@mui/icons-material/Edit';
27
27
  import LogoutIcon from '@mui/icons-material/Logout';
28
28
  import { handleAvatarInitials, useFadeIn } from '../../../utils/helpers';
29
- import { Help, Lightbulb, Person, Phone, Settings } from '@mui/icons-material';
29
+ import { Person, Settings } from '@mui/icons-material';
30
30
  import { animated } from '@react-spring/web';
31
31
  import { FlyoutMenuItemText } from './VerticalNavigationItem/VerticalNavigationItemFlyoutMenuStyles';
32
32
  import { defaultMessages } from '../../../lang/en-us';
33
33
  import { defaultAttributes } from '../../../utils/dataAttributes';
34
34
  var AvatarPanel = function (props) {
35
- var _a, _b, _c, _d, _e;
35
+ var _a, _b, _c, _d;
36
36
  var theme = useTheme();
37
- var avatarName = props.avatarName, avatarPanelOnClickLogout = props.avatarPanelOnClickLogout, avatarPanelLogoutString = props.avatarPanelLogoutString, avatarPanelOnClickViewProfile = props.avatarPanelOnClickViewProfile, avatarPanelViewProfileString = props.avatarPanelViewProfileString, avatarPanelOnClickEditProfile = props.avatarPanelOnClickEditProfile, avatarPanelEditProfileString = props.avatarPanelEditProfileString, avatarPanelMenuItems = props.avatarPanelMenuItems, avatarPanelSettingItems = props.avatarPanelSettingItems, avatarPanelOnClickMainAction = props.avatarPanelOnClickMainAction, avatarPanelMainActionString = props.avatarPanelMainActionString, avatarPanelFootnote = props.avatarPanelFootnote, isAvatarOpen = props.isAvatarOpen, localization = props.localization, dataAttributes = props.dataAttributes, avatarPanelShowHelpLinks = props.avatarPanelShowHelpLinks;
37
+ var avatarName = props.avatarName, avatarPanelOnClickLogout = props.avatarPanelOnClickLogout, avatarPanelLogoutString = props.avatarPanelLogoutString, avatarPanelOnClickViewProfile = props.avatarPanelOnClickViewProfile, avatarPanelViewProfileString = props.avatarPanelViewProfileString, avatarPanelOnClickEditProfile = props.avatarPanelOnClickEditProfile, avatarPanelEditProfileString = props.avatarPanelEditProfileString, avatarPanelMenuItems = props.avatarPanelMenuItems, avatarPanelSettingItems = props.avatarPanelSettingItems, avatarPanelOnClickMainAction = props.avatarPanelOnClickMainAction, avatarPanelMainActionString = props.avatarPanelMainActionString, avatarPanelFootnote = props.avatarPanelFootnote, isAvatarOpen = props.isAvatarOpen, localization = props.localization, dataAttributes = props.dataAttributes;
38
38
  var messages = __assign(__assign({}, defaultMessages), localization);
39
39
  var dataIds = __assign(__assign({}, defaultAttributes), dataAttributes);
40
40
  useEffect(function () {
41
41
  setAvatarInitials(handleAvatarInitials(avatarName));
42
42
  }, [avatarName]);
43
- var _f = React.useState((_a = handleAvatarInitials(avatarName)) !== null && _a !== void 0 ? _a : 'AN'), avatarInitials = _f[0], setAvatarInitials = _f[1];
44
- // Add default helpful links below avatarPanelSettingItems,
45
- // these can be toggled on/off with the avatarPanelShowHelpLinks prop
46
- var defaultHelpLinks = [
47
- { label: messages['help-center'], icon: _jsx(Help, {}), onClick: function () { return window.open('https://learningpool.zendesk.com/', '_blank'); } },
48
- { label: messages['feature-request'], icon: _jsx(Lightbulb, {}), onClick: function () { return window.open('https://app.smartsheet.com/b/form/823248624a324630a904e825098ca816', '_blank'); } },
49
- { label: messages['contact-us'], icon: _jsx(Phone, {}), onClick: function () { return window.open('https://learningpool.com/support/', '_blank'); } }
50
- ];
43
+ var _e = React.useState((_a = handleAvatarInitials(avatarName)) !== null && _a !== void 0 ? _a : 'AN'), avatarInitials = _e[0], setAvatarInitials = _e[1];
51
44
  // Workaround to handle the react-spring calls without
52
45
  // adding additional hook calls on prop or state changes
53
46
  // --
@@ -62,7 +55,7 @@ var AvatarPanel = function (props) {
62
55
  'avatarPanelOnClickMainAction',
63
56
  'avatarPanelFootnote'
64
57
  ];
65
- var totalItems = __spreadArray(__spreadArray(__spreadArray(__spreadArray([], avatarPanelMenuItems !== null && avatarPanelMenuItems !== void 0 ? avatarPanelMenuItems : [], true), avatarPanelSettingItems !== null && avatarPanelSettingItems !== void 0 ? avatarPanelSettingItems : [], true), defaultHelpLinks !== null && defaultHelpLinks !== void 0 ? defaultHelpLinks : [], true), additionalItems, true);
58
+ var totalItems = __spreadArray(__spreadArray(__spreadArray([], avatarPanelMenuItems !== null && avatarPanelMenuItems !== void 0 ? avatarPanelMenuItems : [], true), avatarPanelSettingItems !== null && avatarPanelSettingItems !== void 0 ? avatarPanelSettingItems : [], true), additionalItems, true);
66
59
  var animationRefs = React.useRef(totalItems && totalItems.map(function (item, index) { return useFadeIn(index, !isAvatarOpen); }));
67
60
  return (_jsxs(StyledBox, { children: [avatarPanelOnClickLogout && (_jsx(StyledButton
68
61
  // @ts-expect-error
@@ -89,30 +82,19 @@ var AvatarPanel = function (props) {
89
82
  // @ts-expect-error
90
83
  , __assign({
91
84
  // @ts-expect-error
92
- component: animated.button, style: animationRefs.current[((_b = avatarPanelMenuItems === null || avatarPanelMenuItems === void 0 ? void 0 : avatarPanelMenuItems.length) !== null && _b !== void 0 ? _b : 0) + 3], variant: 'outlined', color: 'inherit', size: 'medium', onClick: avatarPanelOnClickMainAction, startIcon: _jsx(Settings, {}) }, { children: avatarPanelMainActionString })), _jsxs(List, __assign({ "data-id": dataIds.VerticalNavigationFlyoutList, style: { marginBottom: theme.spacing(2), marginTop: theme.spacing(2) } }, { children: [avatarPanelSettingItems &&
93
- avatarPanelSettingItems.length > 0 &&
94
- avatarPanelSettingItems.map(function (avatarMenuItem, index) {
95
- var _a;
96
- return (_jsx(ListItem, __assign({ "data-id": dataIds.VerticalNavigationFlyoutListItem, component: animated.div, style: animationRefs.current[((_a = avatarPanelMenuItems === null || avatarPanelMenuItems === void 0 ? void 0 : avatarPanelMenuItems.length) !== null && _a !== void 0 ? _a : 0) + index + 3], disablePadding: true }, { children: _jsxs(StyledListItemButton
85
+ component: animated.button, style: animationRefs.current[((_b = avatarPanelMenuItems === null || avatarPanelMenuItems === void 0 ? void 0 : avatarPanelMenuItems.length) !== null && _b !== void 0 ? _b : 0) + 3], variant: 'outlined', color: 'inherit', size: 'medium', onClick: avatarPanelOnClickMainAction, startIcon: _jsx(Settings, {}) }, { children: avatarPanelMainActionString })), _jsx(List, __assign({ "data-id": dataIds.VerticalNavigationFlyoutList, style: { marginBottom: theme.spacing(2), marginTop: theme.spacing(2) } }, { children: avatarPanelSettingItems &&
86
+ avatarPanelSettingItems.length > 0 &&
87
+ avatarPanelSettingItems.map(function (avatarMenuItem, index) {
88
+ var _a;
89
+ return (_jsx(ListItem, __assign({ "data-id": dataIds.VerticalNavigationFlyoutListItem, component: animated.div, style: animationRefs.current[((_a = avatarPanelMenuItems === null || avatarPanelMenuItems === void 0 ? void 0 : avatarPanelMenuItems.length) !== null && _a !== void 0 ? _a : 0) + index + 3], disablePadding: true }, { children: _jsxs(StyledListItemButton
90
+ // TODO: figure out if these are links or buttons
91
+ // @ts-expect-error
92
+ , __assign({
97
93
  // TODO: figure out if these are links or buttons
98
94
  // @ts-expect-error
99
- , __assign({
100
- // TODO: figure out if these are links or buttons
101
- // @ts-expect-error
102
- component: Link, role: 'link', onClick: avatarMenuItem.onClick }, { children: [_jsx(ListItemIcon, __assign({ "aria-hidden": true, style: {
103
- minWidth: theme.spacing(5)
104
- } }, { children: avatarMenuItem.icon })), _jsx(ListItemText, { primary: avatarMenuItem.label })] })) }), "".concat(avatarMenuItem.label, " - ").concat(index)));
105
- }), avatarPanelShowHelpLinks && defaultHelpLinks &&
106
- defaultHelpLinks.length > 0 &&
107
- defaultHelpLinks.map(function (avatarMenuItem, index) {
108
- var _a, _b;
109
- return (_jsx(ListItem, __assign({ "data-id": dataIds.VerticalNavigationFlyoutListItem, component: animated.div, style: animationRefs.current[((_a = avatarPanelMenuItems === null || avatarPanelMenuItems === void 0 ? void 0 : avatarPanelMenuItems.length) !== null && _a !== void 0 ? _a : 0) + ((_b = avatarPanelSettingItems === null || avatarPanelSettingItems === void 0 ? void 0 : avatarPanelSettingItems.length) !== null && _b !== void 0 ? _b : 0) + index + 3], disablePadding: true }, { children: _jsxs(StyledListItemButton
110
- // @ts-expect-error
111
- , __assign({
112
- // @ts-expect-error
113
- component: Link, role: 'link', onClick: avatarMenuItem.onClick }, { children: [_jsx(ListItemIcon, __assign({ "aria-hidden": true, style: {
114
- minWidth: theme.spacing(5)
115
- } }, { children: avatarMenuItem.icon })), _jsx(ListItemText, { primary: avatarMenuItem.label })] })) }), "".concat(avatarMenuItem.label, " - ").concat(index)));
116
- })] }))] })), _jsx(Box, __assign({ "data-id": dataIds.VerticalNavigationFlyoutFootnote, className: 'avatar-panel-footnote', style: animationRefs.current[((_c = avatarPanelMenuItems === null || avatarPanelMenuItems === void 0 ? void 0 : avatarPanelMenuItems.length) !== null && _c !== void 0 ? _c : 0) + ((_d = avatarPanelSettingItems === null || avatarPanelSettingItems === void 0 ? void 0 : avatarPanelSettingItems.length) !== null && _d !== void 0 ? _d : 0) + ((_e = defaultHelpLinks === null || defaultHelpLinks === void 0 ? void 0 : defaultHelpLinks.length) !== null && _e !== void 0 ? _e : 0) + 4] }, { children: avatarPanelFootnote && avatarPanelFootnote }))] }));
95
+ component: Link, role: 'link', onClick: avatarMenuItem.onClick }, { children: [_jsx(ListItemIcon, __assign({ "aria-hidden": true, style: {
96
+ minWidth: theme.spacing(5)
97
+ } }, { children: avatarMenuItem.icon })), _jsx(ListItemText, { primary: avatarMenuItem.label })] })) }), "".concat(avatarMenuItem.label, " - ").concat(index)));
98
+ }) }))] })), _jsx(Box, __assign({ "data-id": dataIds.VerticalNavigationFlyoutFootnote, className: 'avatar-panel-footnote', style: animationRefs.current[((_c = avatarPanelMenuItems === null || avatarPanelMenuItems === void 0 ? void 0 : avatarPanelMenuItems.length) !== null && _c !== void 0 ? _c : 0) + ((_d = avatarPanelSettingItems === null || avatarPanelSettingItems === void 0 ? void 0 : avatarPanelSettingItems.length) !== null && _d !== void 0 ? _d : 0) + 4] }, { children: avatarPanelFootnote && avatarPanelFootnote }))] }));
117
99
  };
118
100
  export default AvatarPanel;
@@ -41,7 +41,7 @@ var VerticalNavigationItem = function (props) {
41
41
  handlePopoverClose();
42
42
  return;
43
43
  }
44
- if (!isDrawerOpen) {
44
+ if (!isDrawerOpen || fullHeightFlyout) {
45
45
  setAnchorEl(event === null || event === void 0 ? void 0 : event.currentTarget);
46
46
  }
47
47
  };
@@ -15,6 +15,7 @@ import { Link } from '../../../../index';
15
15
  import { FullHeightFlyoutMenuPaper, FullHeightFlyoutMenuWrapper, FlyoutNotchMask, NotchMini, FlyoutMenuHeader, FlyoutMenuPaper, FlyoutMenuWrap, FlyoutMenuList, FlyoutMenuButton, FlyoutMenuItem, FlyoutMenuItemText } from './VerticalNavigationItemFlyoutMenuStyles';
16
16
  import { defaultAttributes } from '../../../../utils/dataAttributes';
17
17
  var VerticalNavigationItemFlyoutMenu = forwardRef(function (props, ref) {
18
+ var _a;
18
19
  var label = props.label, children = props.children, isDrawerOpen = props.isDrawerOpen, fullHeightFlyout = props.fullHeightFlyout, open = props.open, parentItemRef = props.parentItemRef, dataAttributes = props.dataAttributes, content = props.content, anchorEl = props.anchorEl, setAnchorEl = props.setAnchorEl, setIsFlyoutHovered = props.setIsFlyoutHovered;
19
20
  var dataIds = __assign(__assign({}, defaultAttributes), dataAttributes);
20
21
  if (fullHeightFlyout && content) {
@@ -35,7 +36,13 @@ var VerticalNavigationItemFlyoutMenu = forwardRef(function (props, ref) {
35
36
  }, CLOSE_SUBMENU_DELAY);
36
37
  }
37
38
  };
38
- return (_jsx(FlyoutMenuPaper, __assign({ ref: ref, "data-id": dataIds.VerticalNavigationFlyout, isDrawerOpen: isDrawerOpen, open: open, anchorEl: anchorEl !== null && anchorEl !== void 0 ? anchorEl : undefined, onMouseEnter: function () { return setIsFlyoutHovered(true); }, onMouseLeave: function () { return setIsFlyoutHovered(false); }, onFocus: function () { return setIsFlyoutHovered(true); }, onBlur: function () { return setIsFlyoutHovered(false); } }, { children: _jsxs(FlyoutMenuWrap, __assign({ open: open }, { children: [_jsx(NotchMini, { style: { top: '12px' } }), _jsx(FlyoutMenuHeader, { children: label }), _jsx(FlyoutMenuList, __assign({ "data-id": dataIds.VerticalNavigationFlyoutList, "aria-label": label, open: open }, { children: children === null || children === void 0 ? void 0 : children.map(function (childItem, index) { return (_jsx(FlyoutMenuItem, __assign({ "data-id": dataIds.VerticalNavigationFlyoutListItem }, { children: _jsx(FlyoutMenuButton
39
+ var isBottomHalfOfScreen = ((_a = ref === null || ref === void 0 ? void 0 : ref.current) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect().y) > window.innerHeight / 2;
40
+ return (_jsx(FlyoutMenuPaper, __assign({ ref: ref, "data-id": dataIds.VerticalNavigationFlyout, isDrawerOpen: isDrawerOpen, open: open, anchorEl: anchorEl !== null && anchorEl !== void 0 ? anchorEl : undefined, onMouseEnter: function () { return setIsFlyoutHovered(true); }, onMouseLeave: function () { return setIsFlyoutHovered(false); }, onFocus: function () { return setIsFlyoutHovered(true); }, onBlur: function () { return setIsFlyoutHovered(false); }, sx: {
41
+ transform: isBottomHalfOfScreen ? 'translateY(calc(-100% + 48px))' : ''
42
+ } }, { children: _jsxs(FlyoutMenuWrap, __assign({ open: open }, { children: [_jsx(NotchMini, { sx: {
43
+ bottom: isBottomHalfOfScreen ? '12px' : 'auto',
44
+ top: isBottomHalfOfScreen ? 'auto' : '12px'
45
+ } }), _jsx(FlyoutMenuHeader, { children: label }), _jsx(FlyoutMenuList, __assign({ "data-id": dataIds.VerticalNavigationFlyoutList, "aria-label": label, open: open }, { children: children === null || children === void 0 ? void 0 : children.map(function (childItem, index) { return (_jsx(FlyoutMenuItem, __assign({ "data-id": dataIds.VerticalNavigationFlyoutListItem }, { children: _jsx(FlyoutMenuButton
39
46
  // @ts-expect-error
40
47
  , __assign({
41
48
  // @ts-expect-error
@@ -1,3 +1,4 @@
1
+ /// <reference types="react" />
1
2
  /**
2
3
  * Return the background color for the navigation
3
4
  * @returns string
@@ -20,3 +21,12 @@ export declare const getOffsetNavigationBackground: (theme: any, colorAdjustAmou
20
21
  * @returns string
21
22
  */
22
23
  export declare const getOffsetNavigationContrastText: (theme: any, colorAdjustAmount?: number) => any;
24
+ export declare const getDefaultSupportLinks: (messages: Record<string, string>) => {
25
+ label: string;
26
+ icon: JSX.Element;
27
+ onClick: () => null;
28
+ children: {
29
+ label: string;
30
+ onClick: () => Window | null;
31
+ }[];
32
+ }[];
@@ -1,4 +1,6 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
1
2
  import { darken, lighten, getLuminance } from 'polished';
3
+ import { HelpOutline } from '@mui/icons-material';
2
4
  var DEFAULT_COLOR_ADJUST_AMOUNT = 0.1;
3
5
  // Luminance threshold for determining if we should lighten or darken the color
4
6
  // .033 is the luminance value of #333333
@@ -62,3 +64,17 @@ export var getOffsetNavigationContrastText = function (theme, colorAdjustAmount)
62
64
  ? palette.getContrastText(lighten(adjustAmount, (_c = palette.navigation) === null || _c === void 0 ? void 0 : _c.background))
63
65
  : palette.getContrastText(darken(adjustAmount, (_d = palette.navigation) === null || _d === void 0 ? void 0 : _d.background));
64
66
  };
67
+ export var getDefaultSupportLinks = function (messages) {
68
+ return [
69
+ {
70
+ label: messages.support,
71
+ icon: _jsx(HelpOutline, {}),
72
+ onClick: function () { return null; },
73
+ children: [
74
+ { label: messages['help-center'], onClick: function () { return window.open('https://learningpool.zendesk.com/', '_blank'); } },
75
+ { label: messages['submit-feedback'], onClick: function () { return window.open('https://app.smartsheet.com/b/form/823248624a324630a904e825098ca816', '_blank'); } },
76
+ { label: messages['contact-us'], onClick: function () { return window.open('https://learningpool.com/support/', '_blank'); } }
77
+ ]
78
+ }
79
+ ];
80
+ };
package/lang/en-us.d.ts CHANGED
@@ -16,11 +16,13 @@ export const defaultMessages: {
16
16
  'open-navigation': string;
17
17
  'close-navigation': string;
18
18
  'site-logo': string;
19
+ 'invert-navigation-bar': string;
19
20
  greeting: string;
20
21
  logout: string;
21
22
  'view-profile': string;
22
23
  'edit-profile': string;
24
+ support: string;
23
25
  'help-center': string;
24
- 'feature-request': string;
26
+ 'submit-feedback': string;
25
27
  'contact-us': string;
26
28
  };
package/lang/en-us.js CHANGED
@@ -18,12 +18,14 @@ export var defaultMessages = {
18
18
  'open-navigation': 'Open navigation',
19
19
  'close-navigation': 'Close navigation',
20
20
  'site-logo': 'Site logo',
21
+ 'invert-navigation-bar': 'Invert navigation bar',
21
22
  // Avatar Panel
22
23
  greeting: 'Hi',
23
24
  logout: 'Logout',
24
25
  'view-profile': 'View Profile',
25
26
  'edit-profile': 'Edit Profile',
27
+ support: 'Support',
26
28
  'help-center': 'Help Centre',
27
- 'feature-request': 'Feature Request',
29
+ 'submit-feedback': 'Submit Feedback',
28
30
  'contact-us': 'Contact Us'
29
31
  };
package/package.json CHANGED
@@ -9,7 +9,7 @@
9
9
  "components",
10
10
  "ui"
11
11
  ],
12
- "version": "1.10.6",
12
+ "version": "1.11.0",
13
13
  "private": false,
14
14
  "main": "index.js",
15
15
  "module": "index.js",
@@ -35,6 +35,7 @@ export interface IVerticalNavigationProps {
35
35
  appRootID?: string;
36
36
  localization?: any;
37
37
  dataAttributes?: any;
38
+ showSupportLinks?: boolean;
38
39
  hasAvatar?: boolean;
39
40
  avatarPanelLogoutString?: string;
40
41
  avatarPanelOnClickSwitchDirection?: any;
@@ -48,5 +49,6 @@ export interface IVerticalNavigationProps {
48
49
  avatarPanelMainActionString?: string;
49
50
  avatarPanelSettingItems?: Array<IAvatarMenuItemProps>;
50
51
  avatarPanelFootnote?: any;
52
+ /** @deprecated This property will be removed in the next major version (2.X) */
51
53
  avatarPanelShowHelpLinks?: boolean;
52
54
  }
@@ -22,5 +22,4 @@ export interface IAvatarPanelProps {
22
22
  avatarPanelSettingItems?: Array<IAvatarMenuItemProps>;
23
23
  avatarPanelInvertNavString?: string;
24
24
  avatarPanelFootnote?: any;
25
- avatarPanelShowHelpLinks?: boolean;
26
25
  }