diff --git a/packages/odyssey-react-mui/src/labs/NavAccordion.tsx b/packages/odyssey-react-mui/src/labs/NavAccordion.tsx
index 9f50368f8f..b7c1faa7f0 100644
--- a/packages/odyssey-react-mui/src/labs/NavAccordion.tsx
+++ b/packages/odyssey-react-mui/src/labs/NavAccordion.tsx
@@ -120,7 +120,7 @@ const NavAccordion = ({
{startIcon && startIcon}
{label}
diff --git a/packages/odyssey-react-mui/src/labs/SideNav.tsx b/packages/odyssey-react-mui/src/labs/SideNav.tsx
index 22793ae814..9b949986d3 100644
--- a/packages/odyssey-react-mui/src/labs/SideNav.tsx
+++ b/packages/odyssey-react-mui/src/labs/SideNav.tsx
@@ -19,6 +19,7 @@ import {
ReactElement,
ReactNode,
useCallback,
+ KeyboardEvent,
} from "react";
import { Box } from "../Box";
@@ -73,6 +74,9 @@ export type SideNavItem = {
* The label to display inside the status
*/
statusLabel?: string;
+ /**
+ * The link target prop. e.g., "_blank"
+ */
target?: string;
} & (
| {
@@ -85,9 +89,12 @@ export type SideNavItem = {
}
| {
isSectionHeader?: false;
+ /**
+ * href link of the nav item
+ */
href: string;
/**
- * An array of side nav items
+ * An array of side nav items to be displayed as children of an Accordion
*/
children?: SideNavItem[];
}
@@ -99,6 +106,29 @@ export type SideNavFooterItem = {
label: string;
};
+export type SideNavProps = {
+ /**
+ * Side Nav header text that is usually reserved to show the App name
+ */
+ navHeaderText: string;
+ /**
+ * Determines whether the side nav is collapsible
+ */
+ isCollapsible?: boolean;
+ /**
+ * Footer items in the side nav
+ */
+ footerItems?: SideNavFooterItem[];
+ /**
+ * Triggers when the side nav is collapsed
+ */
+ onCollapse?(): void;
+ /**
+ * Nav items in the side nav
+ */
+ sideNavItems: SideNavItem[];
+} & Pick;
+
const SideNavCollapsedContainer = styled("div", {
shouldForwardProp: (prop) =>
prop !== "odysseyDesignTokens" && prop !== "isSideNavCollapsed",
@@ -122,7 +152,7 @@ const SideNavCollapsedContainer = styled("div", {
}),
);
-const SideNavContainer = styled("div", {
+const SideNavExpandContainer = styled("div", {
shouldForwardProp: (prop) =>
prop !== "odysseyDesignTokens" && prop !== "isSideNavCollapsed",
})(
@@ -159,16 +189,20 @@ const SideNavHeaderContainer = styled("div", {
const CollapseIcon = ({ onClick }: { onClick?(): void }): ReactElement => {
const odysseyDesignTokens = useOdysseyDesignTokens();
+
+ const collapseButtonStyles = useMemo(
+ () => ({
+ "& > button": {
+ height: "32px",
+ width: "32px",
+ color: odysseyDesignTokens.HueNeutral400,
+ },
+ }),
+ [odysseyDesignTokens],
+ );
+
return (
- button": {
- height: "32px",
- width: "32px",
- color: odysseyDesignTokens.HueNeutral400,
- },
- }}
- >
+