{"version":3,"file":"SideNav.cjs","names":["_sortable","require","_styled","_interopRequireDefault","_react","_reactErrorBoundary","_i18n","_OdysseyDesignTokensContext","_OdysseyThemeProvider","_useMediaQuery","_Typography","_UiShellProvider","_useMountLifecycleEffect","_uiShellSharedConstants","_useElementAtContainerEdge","_NavAccordion","_SideNavFooterContent","_SideNavHeader","_SideNavItemContent","_SideNavItemContentContext","_SideNavSortableList","_SideNavToggleButton","_useIsSideNavCollapsedSessionStorage","_jsxRuntime","e","__esModule","default","SIDE_NAV_COLLAPSED_PADDING_HIGHLIGHTED","SIDE_NAV_COLLAPSED_PADDING_UNHIGHLIGHTED","flattenNestedItems","items","flatMap","item","nestedNavItems","StyledCollapsibleContent","styled","shouldForwardProp","prop","odysseyDesignTokens","isSideNavCollapsed","position","display","gridTemplateColumns","SIDE_NAV_WIDTH","height","transition","TransitionDurationMain","transitionTimingFunction","TransitionTimingMain","overflow","opacity","StyledOpacityTransitionContainer","gridTemplateRows","StyledSideNavContainer","backgroundColor","hasNeighbouringContentAtInlineStart","isAppContentWhiteBackground","isSideNavToggleHighlighted","HueNeutralWhite","width","content","pointerEvents","right","BorderWidthMain","top","userSelect","zIndex","UI_SHELL_OVERLAY_Z_INDEX","BorderColorPrimaryControl","HueNeutral100","HueNeutral200","transform","SIDE_NAV_TOGGLE_ICON_HALF_SIZE","borderRightColor","borderRightStyle","BorderStyleMain","borderRightWidth","StyledSideNavToggleButtonContainer","SIDE_NAV_VISIBILITY_TOGGLE_ICON_POSITION","SIDE_NAV_TOGGLE_ICON_SIZE","StyledSideNavHeaderContainer","borderColor","hasContentScrolled","flexShrink","borderBottomWidth","borderBottomStyle","borderBottomColor","concat","StyledSideNavListContainer","padding","listStyle","listStyleType","margin","StyledSideNavScrollableContainer","hasBlockStartPadding","overflowY","paddingBlockStart","Spacing2","paddingInline","StyledSectionHeaderContainer","contrastFontColor","color","HueNeutral600","marginBlock","Spacing3","paddingBlock","Spacing1","Spacing4","StyledSideNavFooter","sideNavBackgroundColor","StyledPersistentSideNavFooter","isContentScrollable","transitionProperty","transitionDuration","transitionTiming","UI_SHELL_BASE_Z_INDEX","boxShadow","StyledSideNavFooterItemsContainer","sideNavContrastColors","flexWrap","alignItems","fontSize","TypographySizeOverline","fontColor","textDecoration","HueNeutral900","StyledLoadingItemContainer","gap","getHasScrollableContent","scrollableContainer","scrollHeight","clientHeight","LoadingItem","useOdysseyDesignTokens","jsxs","children","jsx","_Skeleton2","variant","SideNav","appName","footerComponent","footerItems","hasCustomFooter","hasSessionStorageState","isCollapsible","isCollapsed","isCompact","isLoading","isObtrusive","logoProps","leavesPaddingStart","onCollapse","onExpand","onSort","sideNavItems","setHasContentScrolled","useState","setIsContentScrollable","setIsSideNavToggleHighlighted","sideNavItemsList","updateSideNavItemsList","isSideNavCollapsedLocalState","setIsSideNavCollapsedLocalState","sessionState","isSideNavCollapsedSessionState","setSessionState","setIsSideNavCollapsedSessionState","useIsSideNavCollapsedSessionStorage","setIsSideNavCollapsed","uiShellContext","useUiShellContext","t","useTranslation","isWithinCompactHeight","useCompactViewportMatches","scrollableContentRef","useRef","resizeObserverRef","intersectionObserverRef","sideNavRef","isAtContainerInlineStart","useElementAtContainerEdge","element","current","monitoringElement","parentElement","blankElement","useMemo","useEffect","onMount","useCallback","onUpdate","useMountLifecycleEffect","updateIsContentScrollable","resizeObserverDebounceTimer","ResizeObserver","cancelAnimationFrame","requestAnimationFrame","observe","IntersectionObserver","entries","isIntersecting","slice","sort","a","b","time","at","root","threshold","ulElement","liElement","Array","from","disconnect","scrollIntoViewRef","firstSideNavItemIdWithIsSelected","flattenedItems","firstItemWithIsSelected","find","sideNavItem","isSelected","id","scrollIntoView","getRefIfThisIsFirstNodeWithIsSelected","itemId","undefined","setSelectedItem","selectedItemId","updateNestedSelection","map","updatedSideNavItems","closeSideNavMenu","createAccordionContextValue","depth","createLeafItemContextValue","isSortable","isWithinSortableList","absolutePaddingStart","renderSideNavItem","href","isDefaultExpanded","isDisabled","isExpanded","isSectionHeader","label","startIcon","onChange","translate","ErrorBoundary","fallback","Overline","component","length","nestedChildren","SideNavSortableList","setSortedItems","parentId","processSideNavItems","sortableItem","navItem","SideNavItemContent","onItemSelected","scrollRef","StyledSideNavListItem","SideNavItemContentContext","Provider","value","NavAccordion","sideNavExpandClickHandler","sideNavExpandKeyHandler","event","key","code","preventDefault","unsubscribe","subscribeToCloseSideNavMenu","activeId","activeIndex","overIndex","sortedSideNavItems","arrayMove","onSideNavToggleButtonHighlight","isHighlighted","appBackgroundColor","ref","SideNavToggleButton","ariaControls","clickAreaPadding","onClick","onHighlight","onKeyDown","OdysseyThemeProvider","inert","SideNavHeader","fill","_","index","SideNavFooterContent","MemoizedSideNav","exports","memo","displayName"],"sources":["../../../../src/ui-shell/SideNav/SideNav.tsx"],"sourcesContent":["/*!\n * Copyright (c) 2022-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport { UniqueIdentifier } from \"@dnd-kit/core\";\nimport { arrayMove } from \"@dnd-kit/sortable\";\nimport styled from \"@emotion/styled\";\nimport { Skeleton } from \"@mui/material\";\nimport { Property } from \"csstype\";\nimport {\n  CSSProperties,\n  KeyboardEventHandler,\n  memo,\n  useCallback,\n  useEffect,\n  useMemo,\n  useRef,\n  useState,\n} from \"react\";\nimport { ErrorBoundary } from \"react-error-boundary\";\n\nimport type { SideNavItem, SideNavProps } from \"./types.js\";\n\nimport { ContrastColors } from \"../../createContrastColors.js\";\nimport { useTranslation } from \"../../i18n.generated/i18n.js\";\nimport {\n  DesignTokens,\n  useOdysseyDesignTokens,\n} from \"../../OdysseyDesignTokensContext.js\";\nimport { OdysseyThemeProvider } from \"../../OdysseyThemeProvider.js\";\nimport { useCompactViewportMatches } from \"../../theme/useMediaQuery.js\";\nimport { Overline } from \"../../Typography.js\";\nimport {\n  UiShellColors,\n  useUiShellContext,\n} from \"../../ui-shell/UiShellProvider.js\";\nimport { useMountLifecycleEffect } from \"../../useMountLifecycleEffect.js\";\nimport {\n  SIDE_NAV_VISIBILITY_TOGGLE_ICON_POSITION,\n  SIDE_NAV_WIDTH,\n  UI_SHELL_BASE_Z_INDEX,\n  UI_SHELL_OVERLAY_Z_INDEX,\n} from \"../uiShellSharedConstants.js\";\nimport { useElementAtContainerEdge } from \"../useElementAtContainerEdge.js\";\nimport { NavAccordion } from \"./NavAccordion.js\";\nimport { SideNavFooterContent } from \"./SideNavFooterContent.js\";\nimport { SideNavHeader } from \"./SideNavHeader.js\";\nimport {\n  SideNavItemContent,\n  StyledSideNavListItem,\n} from \"./SideNavItemContent.js\";\nimport { SideNavItemContentContext } from \"./SideNavItemContentContext.js\";\nimport { SideNavSortableList } from \"./SideNavSortableList.js\";\nimport {\n  SIDE_NAV_TOGGLE_ICON_HALF_SIZE,\n  SIDE_NAV_TOGGLE_ICON_SIZE,\n  SideNavToggleButton,\n  SideNavToggleButtonProps,\n} from \"./SideNavToggleButton.js\";\nimport { BaseItem } from \"./SortableList/SortableList.js\";\nimport { useIsSideNavCollapsedSessionStorage } from \"./useIsSideNavCollapsedSessionStorage.js\";\n\nconst SIDE_NAV_COLLAPSED_PADDING_HIGHLIGHTED = 12;\nconst SIDE_NAV_COLLAPSED_PADDING_UNHIGHLIGHTED = 2;\n\nconst flattenNestedItems = (items: SideNavItem[]): SideNavItem[] => {\n  return items.flatMap((item) => {\n    if (item.nestedNavItems) {\n      return [item, ...flattenNestedItems(item.nestedNavItems)];\n    }\n    return item;\n  });\n};\n\nconst StyledCollapsibleContent = styled(\"div\", {\n  shouldForwardProp: (prop) =>\n    prop !== \"odysseyDesignTokens\" && prop !== \"isSideNavCollapsed\",\n})<{\n  isSideNavCollapsed: boolean;\n  odysseyDesignTokens: DesignTokens;\n}>(({ odysseyDesignTokens, isSideNavCollapsed }) => ({\n  position: \"relative\",\n  display: \"grid\",\n  gridTemplateColumns: SIDE_NAV_WIDTH,\n  height: \"100%\",\n  transition: `grid-template-columns ${odysseyDesignTokens.TransitionDurationMain}, opacity 300ms`,\n  transitionTimingFunction: odysseyDesignTokens.TransitionTimingMain,\n  overflow: \"hidden\",\n\n  ...(isSideNavCollapsed &&\n    ({\n      gridTemplateColumns: 0,\n      opacity: 0,\n    } satisfies CSSProperties)),\n}));\n\nconst StyledOpacityTransitionContainer = styled(\"div\", {\n  shouldForwardProp: (prop) =>\n    prop !== \"odysseyDesignTokens\" && prop !== \"isSideNavCollapsed\",\n})(\n  ({\n    odysseyDesignTokens,\n    isSideNavCollapsed,\n  }: {\n    isSideNavCollapsed: boolean;\n    odysseyDesignTokens: DesignTokens;\n  }) => ({\n    display: \"grid\",\n    gridTemplateRows: \"max-content 1fr max-content\",\n    height: \"100%\",\n    transition: `opacity 50ms`,\n    transitionTimingFunction: odysseyDesignTokens.TransitionTimingMain,\n    overflow: \"hidden\",\n\n    ...(isSideNavCollapsed &&\n      ({\n        opacity: 0,\n      } satisfies CSSProperties)),\n  }),\n);\n\nconst StyledSideNavContainer = styled(\"nav\", {\n  shouldForwardProp: (prop) =>\n    prop !== \"backgroundColor\" &&\n    prop !== \"hasNeighbouringContentAtInlineStart\" &&\n    prop !== \"isAppContentWhiteBackground\" &&\n    prop !== \"isSideNavCollapsed\" &&\n    prop !== \"isSideNavToggleHighlighted\" &&\n    prop !== \"odysseyDesignTokens\",\n})<{\n  backgroundColor?: UiShellColors[\"sideNavBackgroundColor\"];\n  hasNeighbouringContentAtInlineStart: boolean;\n  isAppContentWhiteBackground: boolean;\n  isSideNavCollapsed: boolean;\n  isSideNavToggleHighlighted: boolean;\n  odysseyDesignTokens: DesignTokens;\n}>(\n  ({\n    backgroundColor,\n    hasNeighbouringContentAtInlineStart,\n    isAppContentWhiteBackground,\n    isSideNavCollapsed,\n    isSideNavToggleHighlighted,\n    odysseyDesignTokens,\n  }) => ({\n    // Side nav container styles\n    backgroundColor: backgroundColor || odysseyDesignTokens.HueNeutralWhite,\n    height: \"100%\",\n    position: \"relative\",\n    width: \"fit-content\",\n\n    // Right-side vertical line shared\n    \"&::before, &::after\": {\n      content: \"''\",\n      height: \"100%\",\n      pointerEvents: \"none\",\n      position: \"absolute\",\n      right: `-${odysseyDesignTokens.BorderWidthMain}`,\n      top: 0,\n      transition: `opacity ${odysseyDesignTokens.TransitionDurationMain}, transform ${odysseyDesignTokens.TransitionDurationMain}, width ${odysseyDesignTokens.TransitionDurationMain}`,\n      userSelect: \"none\",\n      zIndex: UI_SHELL_OVERLAY_Z_INDEX,\n    },\n\n    // Right-side vertical line when open\n    \"&::before\": {\n      backgroundColor: isSideNavToggleHighlighted\n        ? odysseyDesignTokens.BorderColorPrimaryControl\n        : odysseyDesignTokens.HueNeutral100,\n      opacity:\n        isAppContentWhiteBackground ||\n        (!isSideNavCollapsed && isSideNavToggleHighlighted)\n          ? 1\n          : 0,\n      width: `calc(${odysseyDesignTokens.BorderWidthMain} * 2)`,\n    },\n\n    // Side nav vertical fill line when no neighboring content\n    \"&::after\": {\n      backgroundColor: odysseyDesignTokens.HueNeutral200,\n      opacity: isSideNavCollapsed ? 1 : 0,\n      transform:\n        isSideNavCollapsed && !hasNeighbouringContentAtInlineStart\n          ? isSideNavToggleHighlighted\n            ? `translateX(calc(100% - (${odysseyDesignTokens.BorderWidthMain} * 2)))`\n            : `translateX(calc(100% - ${SIDE_NAV_COLLAPSED_PADDING_HIGHLIGHTED}px))`\n          : \"translateX(0)\",\n      width: hasNeighbouringContentAtInlineStart\n        ? 0\n        : `calc(${SIDE_NAV_TOGGLE_ICON_HALF_SIZE + SIDE_NAV_COLLAPSED_PADDING_HIGHLIGHTED}px + ${odysseyDesignTokens.BorderWidthMain} * 2)`,\n\n      // Right-side vertical line when collapsed\n      ...((isSideNavCollapsed && isSideNavToggleHighlighted\n        ? {\n            borderRightColor: odysseyDesignTokens.BorderColorPrimaryControl,\n            borderRightStyle:\n              odysseyDesignTokens.BorderStyleMain as Property.BorderRightStyle,\n            borderRightWidth: `calc(${odysseyDesignTokens.BorderWidthMain} * 2)`,\n          }\n        : {}) satisfies CSSProperties),\n    },\n  }),\n);\n\nconst StyledSideNavToggleButtonContainer = styled(\"div\", {\n  shouldForwardProp: (prop) =>\n    prop !== \"hasNeighbouringContentAtInlineStart\" &&\n    prop !== \"isSideNavCollapsed\" &&\n    prop !== \"isSideNavToggleHighlighted\" &&\n    prop !== \"odysseyDesignTokens\",\n})<{\n  hasNeighbouringContentAtInlineStart: boolean;\n  isSideNavCollapsed: boolean;\n  isSideNavToggleHighlighted: boolean;\n  odysseyDesignTokens: DesignTokens;\n}>(\n  ({\n    hasNeighbouringContentAtInlineStart,\n    isSideNavCollapsed,\n    isSideNavToggleHighlighted,\n    odysseyDesignTokens,\n  }) => ({\n    position: \"absolute\",\n    right: `${SIDE_NAV_TOGGLE_ICON_HALF_SIZE}px`,\n    top: SIDE_NAV_VISIBILITY_TOGGLE_ICON_POSITION,\n    width: `${SIDE_NAV_TOGGLE_ICON_SIZE}px`,\n    transform:\n      isSideNavCollapsed && !hasNeighbouringContentAtInlineStart\n        ? isSideNavToggleHighlighted\n          ? `translate3d(calc(100% + ${SIDE_NAV_TOGGLE_ICON_HALF_SIZE + SIDE_NAV_COLLAPSED_PADDING_HIGHLIGHTED}px), 0, 0)`\n          : `translate3d(calc(100% + ${SIDE_NAV_TOGGLE_ICON_HALF_SIZE + SIDE_NAV_COLLAPSED_PADDING_UNHIGHLIGHTED}px), 0, 0)`\n        : \"translate3d(100%, 0, 0)\",\n    transition: `transform ${odysseyDesignTokens.TransitionDurationMain}`,\n    zIndex: UI_SHELL_OVERLAY_Z_INDEX + 1,\n  }),\n);\n\nconst StyledSideNavHeaderContainer = styled(\"div\", {\n  shouldForwardProp: (prop) =>\n    prop !== \"borderColor\" &&\n    prop !== \"hasContentScrolled\" &&\n    prop !== \"odysseyDesignTokens\",\n})<{\n  borderColor: ContrastColors[\"fontColor\"];\n  hasContentScrolled: boolean;\n  odysseyDesignTokens: DesignTokens;\n}>(({ borderColor, hasContentScrolled, odysseyDesignTokens }) => ({\n  flexShrink: 0,\n  // The bottom border should appear only if the scrollable region has been scrolled\n  ...(hasContentScrolled &&\n    ({\n      borderBottomWidth: odysseyDesignTokens.BorderWidthMain,\n      borderBottomStyle: odysseyDesignTokens.BorderStyleMain,\n      borderBottomColor: odysseyDesignTokens.HueNeutral100,\n\n      ...(borderColor &&\n        ({\n          borderBottomColor: borderColor.concat(\"15\"),\n        } satisfies CSSProperties)),\n    } as CSSProperties)),\n}));\n\nconst StyledSideNavListContainer = styled(\"ul\")(() => ({\n  padding: 0,\n  listStyle: \"none\",\n  listStyleType: \"none\",\n  margin: 0,\n  width: \"100%\",\n}));\n\nconst StyledSideNavScrollableContainer = styled(\"div\", {\n  shouldForwardProp: (prop) =>\n    prop !== \"odysseyDesignTokens\" && prop !== \"hasBlockStartPadding\",\n})<{ hasBlockStartPadding?: boolean; odysseyDesignTokens: DesignTokens }>(\n  ({ odysseyDesignTokens, hasBlockStartPadding }) => ({\n    display: \"inline-grid\",\n    gridTemplateRows: \"1fr max-content\",\n    overflowY: \"auto\",\n    paddingBlockStart: hasBlockStartPadding ? odysseyDesignTokens.Spacing2 : 0,\n    paddingInline: odysseyDesignTokens.Spacing2,\n  }),\n);\n\nconst StyledSectionHeaderContainer = styled(\"li\", {\n  shouldForwardProp: (prop) =>\n    prop !== \"odysseyDesignTokens\" && prop !== \"contrastFontColor\",\n})(\n  ({\n    contrastFontColor,\n    odysseyDesignTokens,\n  }: {\n    contrastFontColor: ContrastColors[\"fontColor\"];\n    odysseyDesignTokens: DesignTokens;\n  }) => ({\n    color: contrastFontColor || odysseyDesignTokens.HueNeutral600,\n    marginBlock: `${odysseyDesignTokens.Spacing3}`,\n    paddingBlock: odysseyDesignTokens.Spacing1,\n    paddingInline: odysseyDesignTokens.Spacing4,\n  }),\n);\n\nconst StyledSideNavFooter = styled(\"div\", {\n  shouldForwardProp: (prop) =>\n    prop !== \"odysseyDesignTokens\" && prop !== \"sideNavBackgroundColor\",\n})(\n  ({\n    odysseyDesignTokens,\n    sideNavBackgroundColor,\n  }: {\n    odysseyDesignTokens: DesignTokens;\n    sideNavBackgroundColor?: UiShellColors[\"sideNavBackgroundColor\"];\n  }) => ({\n    backgroundColor: odysseyDesignTokens.HueNeutralWhite,\n    flexShrink: 0,\n    padding: odysseyDesignTokens.Spacing4,\n\n    ...(sideNavBackgroundColor &&\n      ({\n        backgroundColor: sideNavBackgroundColor,\n      } satisfies CSSProperties)),\n  }),\n);\n\nconst StyledPersistentSideNavFooter = styled(StyledSideNavFooter, {\n  shouldForwardProp: (prop) =>\n    prop !== \"isContentScrollable\" &&\n    prop !== \"odysseyDesignTokens\" &&\n    prop !== \"sideNavBackgroundColor\",\n})(\n  ({\n    isContentScrollable,\n    odysseyDesignTokens,\n    sideNavBackgroundColor,\n  }: {\n    isContentScrollable: boolean;\n    odysseyDesignTokens: DesignTokens;\n    sideNavBackgroundColor?: UiShellColors[\"sideNavBackgroundColor\"];\n  }) => ({\n    transitionProperty: \"box-shadow\",\n    transitionDuration: odysseyDesignTokens.TransitionDurationMain,\n    transitionTiming: odysseyDesignTokens.TransitionTimingMain,\n    zIndex: UI_SHELL_BASE_Z_INDEX,\n\n    // The box shadow should appear above the footer only if the scrollable region has overflow\n    ...(isContentScrollable &&\n      ({\n        boxShadow: \"0px -8px 8px -8px rgba(39, 39, 39, 0.08)\",\n      } satisfies CSSProperties)),\n\n    ...(sideNavBackgroundColor &&\n      ({\n        backgroundColor: sideNavBackgroundColor,\n      } satisfies CSSProperties)),\n  }),\n);\n\nconst StyledSideNavFooterItemsContainer = styled(\"div\", {\n  shouldForwardProp: (prop) =>\n    prop !== \"odysseyDesignTokens\" && prop !== \"sideNavContrastColors\",\n})<{\n  odysseyDesignTokens: DesignTokens;\n  sideNavContrastColors: UiShellColors[\"sideNavContrastColors\"];\n}>(({ odysseyDesignTokens, sideNavContrastColors }) => ({\n  display: \"flex\",\n  flexWrap: \"wrap\",\n  alignItems: \"center\",\n  fontSize: odysseyDesignTokens.TypographySizeOverline,\n\n  \"a, span\": {\n    color: odysseyDesignTokens.HueNeutral600,\n    transition: `color ${odysseyDesignTokens.TransitionDurationMain}`,\n\n    \"&:visited\": {\n      color: odysseyDesignTokens.HueNeutral600,\n\n      ...(sideNavContrastColors?.fontColor &&\n        ({\n          color: sideNavContrastColors?.fontColor,\n        } satisfies CSSProperties)),\n    },\n\n    \"&:hover\": {\n      textDecoration: \"none\",\n      color: odysseyDesignTokens.HueNeutral900,\n\n      ...(sideNavContrastColors?.fontColor &&\n        ({\n          color: sideNavContrastColors?.fontColor,\n        } satisfies CSSProperties)),\n    },\n\n    ...(sideNavContrastColors?.fontColor &&\n      ({\n        color: sideNavContrastColors?.fontColor,\n      } satisfies CSSProperties)),\n  },\n}));\n\nconst StyledLoadingItemContainer = styled(\"li\", {\n  shouldForwardProp: (prop) => prop !== \"odysseyDesignTokens\",\n})<{ odysseyDesignTokens: DesignTokens }>(({ odysseyDesignTokens }) => ({\n  alignItems: \"center\",\n  display: \"flex\",\n  gap: odysseyDesignTokens.Spacing2,\n  paddingBlock: odysseyDesignTokens.Spacing2,\n  paddingInline: odysseyDesignTokens.Spacing4,\n}));\n\nconst getHasScrollableContent = (scrollableContainer: HTMLElement) =>\n  scrollableContainer.scrollHeight > scrollableContainer.clientHeight;\n\nconst LoadingItem = () => {\n  const odysseyDesignTokens: DesignTokens = useOdysseyDesignTokens();\n  return (\n    <StyledLoadingItemContainer odysseyDesignTokens={odysseyDesignTokens}>\n      <Skeleton\n        height={odysseyDesignTokens.Spacing4}\n        variant=\"circular\"\n        width={odysseyDesignTokens.Spacing4}\n      />\n      <Skeleton variant=\"rounded\" width=\"100%\" />\n    </StyledLoadingItemContainer>\n  );\n};\n\nconst SideNav = ({\n  appName,\n  footerComponent,\n  footerItems,\n  hasCustomFooter,\n  hasSessionStorageState,\n  isCollapsible,\n  isCollapsed = false,\n  isCompact,\n  isLoading,\n  isObtrusive,\n  logoProps,\n  leavesPaddingStart,\n  onCollapse,\n  onExpand,\n  onSort,\n  sideNavItems,\n}: SideNavProps) => {\n  const [hasContentScrolled, setHasContentScrolled] = useState(false);\n  const [isContentScrollable, setIsContentScrollable] = useState(false);\n  const [isSideNavToggleHighlighted, setIsSideNavToggleHighlighted] =\n    useState(false);\n  const [sideNavItemsList, updateSideNavItemsList] = useState(\n    sideNavItems || [],\n  );\n\n  const [isSideNavCollapsedLocalState, setIsSideNavCollapsedLocalState] =\n    useState(isCollapsed);\n\n  const {\n    sessionState: isSideNavCollapsedSessionState,\n    setSessionState: setIsSideNavCollapsedSessionState,\n  } = useIsSideNavCollapsedSessionStorage(isCollapsed);\n\n  const isSideNavCollapsed = hasSessionStorageState\n    ? isSideNavCollapsedSessionState\n    : isSideNavCollapsedLocalState;\n  const setIsSideNavCollapsed = hasSessionStorageState\n    ? setIsSideNavCollapsedSessionState\n    : setIsSideNavCollapsedLocalState;\n\n  const uiShellContext = useUiShellContext();\n  const odysseyDesignTokens: DesignTokens = useOdysseyDesignTokens();\n  const { t } = useTranslation();\n\n  // At compact viewport heights the persistent (pinned) custom footer eats into the already-limited vertical space, so move it into the scrollable region instead of pinning it to the bottom.\n  const { isWithinCompactHeight } = useCompactViewportMatches();\n\n  const scrollableContentRef = useRef<HTMLUListElement>(null);\n  const resizeObserverRef = useRef<ResizeObserver | null>(null);\n  const intersectionObserverRef = useRef<IntersectionObserver | null>(null);\n  const sideNavRef = useRef<HTMLDivElement>(null);\n\n  const { isAtContainerInlineStart } = useElementAtContainerEdge({\n    element: sideNavRef.current,\n    monitoringElement: sideNavRef.current?.parentElement?.parentElement,\n  });\n\n  const hasNeighbouringContentAtInlineStart = !isAtContainerInlineStart;\n\n  const blankElement = useMemo(() => <div />, []);\n\n  // The default value (sideNavItems) passed to useState is ONLY used by the useState hook for the very first value. Subsequent updates to the prop (sideNavItems) need to cause the state to update!\n  useEffect(() => updateSideNavItemsList(sideNavItems || []), [sideNavItems]);\n\n  // In the case that you can't control the side nav, then it should use whatever state was passed (app control) rather than what's stored in session storage (user control).\n  const onMount = useCallback(() => {\n    if (!isCollapsible) {\n      setIsSideNavCollapsed(isCollapsed);\n    }\n  }, [isCollapsed, isCollapsible, setIsSideNavCollapsed]);\n\n  const onUpdate = useCallback(() => {\n    setIsSideNavCollapsed(isCollapsed);\n  }, [isCollapsed, setIsSideNavCollapsed]);\n\n  useMountLifecycleEffect({\n    onMount,\n    onUpdate,\n  });\n\n  useEffect(() => {\n    // This is called directly in this effect AND perhaps as a result of the ResizeObserver\n    const updateIsContentScrollable = () => {\n      if (\n        scrollableContentRef.current &&\n        scrollableContentRef.current.parentElement\n      ) {\n        setIsContentScrollable(\n          getHasScrollableContent(scrollableContentRef.current.parentElement),\n        );\n      }\n    };\n\n    // If the window is resized, we may need to re-determine if the scrollable container has overflow Setup a ResizeObserver to know if the size of the scrollableContent changes\n    let resizeObserverDebounceTimer: ReturnType<typeof requestAnimationFrame>;\n    if (!resizeObserverRef.current) {\n      resizeObserverRef.current = new ResizeObserver(() => {\n        cancelAnimationFrame(resizeObserverDebounceTimer);\n        resizeObserverDebounceTimer = requestAnimationFrame(\n          updateIsContentScrollable,\n        );\n      });\n    }\n\n    if (resizeObserverRef.current && scrollableContentRef.current) {\n      // Observe the <ul> itself (in case it changes size due to the content expanding)\n      resizeObserverRef.current.observe(scrollableContentRef.current);\n      if (scrollableContentRef.current.parentElement) {\n        // ALSO observe the parent (<SideNavScrollableContainer>) in case the window resizes\n        resizeObserverRef.current.observe(\n          scrollableContentRef.current.parentElement,\n        );\n      }\n    }\n\n    // Determine if the scrollable container has overflow or not on load\n    updateIsContentScrollable();\n\n    // Finally, we only want to have the border on the bottom of the header iff the user has scrolled the scrollable container\n    if (!intersectionObserverRef.current && scrollableContentRef.current) {\n      intersectionObserverRef.current = new IntersectionObserver(\n        (entries) => {\n          // If isIntersecting is true, then we're at the top of the scroll container\n          // If isIntersecting is false, some scrolling has occurred.\n          // The entries must be sorted by time and we only really need to look at the latest one\n          const isIntersecting = entries\n            .slice()\n            .sort((a, b) => a.time - b.time)\n            .at(0)?.isIntersecting;\n          setHasContentScrolled(!isIntersecting);\n        },\n        {\n          root: scrollableContentRef.current.parentElement,\n          threshold: 1.0,\n        },\n      );\n    }\n\n    if (intersectionObserverRef.current && scrollableContentRef.current) {\n      const ulElement = scrollableContentRef.current;\n      const [liElement] = Array.from(ulElement?.children || []);\n\n      if (liElement) {\n        intersectionObserverRef.current.observe(liElement);\n      }\n    }\n\n    // Cleanup when unmounted:\n    return () => {\n      if (resizeObserverRef.current) {\n        resizeObserverRef.current.disconnect();\n        resizeObserverRef.current = null;\n      }\n      if (intersectionObserverRef.current) {\n        intersectionObserverRef.current.disconnect();\n        intersectionObserverRef.current = null;\n      }\n      cancelAnimationFrame(resizeObserverDebounceTimer); // Ensure timer is cleared on component unmount\n    };\n  }, [sideNavItemsList]);\n\n  const scrollIntoViewRef = useRef<HTMLLIElement>(null);\n  /**\n   * Look through the sideNavItems and determine which is the first node with isSelected. This should be the node we set a ref on in order to call scrollIntoView in the effect\n   */\n  const firstSideNavItemIdWithIsSelected = useMemo(() => {\n    const flattenedItems = flattenNestedItems(sideNavItemsList);\n    const firstItemWithIsSelected = flattenedItems.find(\n      (sideNavItem) => sideNavItem.isSelected,\n    );\n    return firstItemWithIsSelected?.id;\n  }, [sideNavItemsList]);\n  /**\n   * Once we've rendered and if we have an item to scroll to, do the scroll action. This must rely on checking firstSideNavItemIdWithIsSelected or it will not run once the actual ref is populated.\n   */\n  useEffect(() => {\n    if (firstSideNavItemIdWithIsSelected && scrollIntoViewRef.current) {\n      scrollIntoViewRef.current.scrollIntoView();\n    }\n  }, [firstSideNavItemIdWithIsSelected]);\n\n  /**\n   * We only want to put a ref on a node iff it is the first selected node. This function returns the ref only if the ID provided matches the first selected node, otherwise returns undefined (so that the node has no ref)\n   */\n  const getRefIfThisIsFirstNodeWithIsSelected = useCallback(\n    (itemId: string) =>\n      itemId === firstSideNavItemIdWithIsSelected\n        ? scrollIntoViewRef\n        : undefined,\n    [firstSideNavItemIdWithIsSelected],\n  );\n\n  const setSelectedItem = useCallback(\n    (selectedItemId: string) => {\n      // Recursive function to update nested items\n      const updateNestedSelection = (items: SideNavItem[]): SideNavItem[] => {\n        return items.map((item) => {\n          if (item.nestedNavItems) {\n            return {\n              ...item,\n              isSelected: item.id === selectedItemId,\n              nestedNavItems: updateNestedSelection(item.nestedNavItems),\n            };\n          }\n\n          return {\n            ...item,\n            isSelected: item.id === selectedItemId,\n          };\n        });\n      };\n\n      const updatedSideNavItems = updateNestedSelection(sideNavItemsList);\n      updateSideNavItemsList(updatedSideNavItems);\n\n      if (isCollapsed || isObtrusive) {\n        if (isCollapsible) {\n          uiShellContext?.closeSideNavMenu();\n        } else {\n          onCollapse?.();\n        }\n      }\n    },\n    [\n      isCollapsed,\n      isCollapsible,\n      isObtrusive,\n      onCollapse,\n      sideNavItemsList,\n      uiShellContext,\n    ],\n  );\n\n  const createAccordionContextValue = useCallback(\n    (depth: number) => ({\n      depth,\n    }),\n    [],\n  );\n\n  const createLeafItemContextValue = useCallback(\n    (depth: number, isSortable?: boolean, isWithinSortableList?: boolean) => ({\n      isCompact,\n      depth,\n      isSortable,\n      isWithinSortableList,\n      absolutePaddingStart: leavesPaddingStart,\n    }),\n    [isCompact, leavesPaddingStart],\n  );\n\n  const renderSideNavItem = (\n    item: SideNavItem,\n    depth: number = 1,\n    isWithinSortableList: boolean = false,\n  ) => {\n    const {\n      href,\n      id,\n      isDefaultExpanded,\n      isDisabled,\n      isExpanded,\n      isSectionHeader,\n      label,\n      startIcon,\n      nestedNavItems,\n      onChange,\n      isSortable,\n      translate,\n    } = item;\n\n    if (isSectionHeader) {\n      return (\n        <ErrorBoundary fallback={blankElement} key={id}>\n          <StyledSectionHeaderContainer\n            contrastFontColor={uiShellContext?.sideNavContrastColors?.fontColor}\n            id={id}\n            odysseyDesignTokens={odysseyDesignTokens}\n          >\n            <Overline component=\"h3\">{label}</Overline>\n          </StyledSectionHeaderContainer>\n        </ErrorBoundary>\n      );\n    } else if (nestedNavItems && nestedNavItems.length > 0) {\n      // Recursive case: item has nested children - ALWAYS render as accordion\n      const nestedChildren = (\n        // Name the nested list after its parent item so screen readers announce e.g. \"Settings, list, 5 items\" instead of an unnamed nested list.\n        <StyledSideNavListContainer aria-label={label}>\n          {isSortable ? (\n            <SideNavSortableList\n              depth={depth + 1}\n              items={nestedNavItems}\n              onChange={setSortedItems}\n              parentId={item.id}\n              processSideNavItems={processSideNavItems}\n            />\n          ) : (\n            processSideNavItems(nestedNavItems, depth + 1).map(\n              (item) => item.sortableItem.navItem,\n            )\n          )}\n        </StyledSideNavListContainer>\n      );\n\n      return href ? (\n        <ErrorBoundary fallback={blankElement} key={id}>\n          <SideNavItemContent\n            {...item}\n            href={href}\n            onItemSelected={setSelectedItem}\n            scrollRef={getRefIfThisIsFirstNodeWithIsSelected(item.id)}\n            startIcon={item.startIcon}\n          />\n\n          <StyledSideNavListItem\n            aria-disabled={isDisabled}\n            id={`${id}-items`}\n            odysseyDesignTokens={odysseyDesignTokens}\n          >\n            {nestedChildren}\n          </StyledSideNavListItem>\n        </ErrorBoundary>\n      ) : (\n        <ErrorBoundary fallback={blankElement} key={id}>\n          <StyledSideNavListItem\n            aria-disabled={isDisabled}\n            id={id}\n            odysseyDesignTokens={odysseyDesignTokens}\n          >\n            <SideNavItemContentContext.Provider\n              key={id}\n              value={createAccordionContextValue(depth)}\n            >\n              <NavAccordion\n                isCompact={isCompact}\n                isDefaultExpanded={isDefaultExpanded}\n                isDisabled={isDisabled}\n                isExpanded={isExpanded}\n                label={label}\n                onChange={onChange}\n                startIcon={startIcon}\n              >\n                {nestedChildren}\n              </NavAccordion>\n            </SideNavItemContentContext.Provider>\n          </StyledSideNavListItem>\n        </ErrorBoundary>\n      );\n    } else {\n      // Base case: leaf item with no children\n      return (\n        <ErrorBoundary fallback={blankElement} key={id}>\n          <SideNavItemContentContext.Provider\n            key={id}\n            value={createLeafItemContextValue(\n              depth,\n              isSortable,\n              isWithinSortableList,\n            )}\n          >\n            <SideNavItemContent\n              {...item}\n              onItemSelected={setSelectedItem}\n              scrollRef={getRefIfThisIsFirstNodeWithIsSelected(id)}\n              startIcon={startIcon}\n              translate={translate}\n            />\n          </SideNavItemContentContext.Provider>\n        </ErrorBoundary>\n      );\n    }\n  };\n\n  const processSideNavItems = (\n    items: SideNavItem[],\n    depth: number = 1,\n    isWithinSortableList: boolean = false,\n  ): (SideNavItem & { sortableItem: BaseItem })[] => {\n    return items?.map((item) => ({\n      ...item,\n      sortableItem: {\n        id: item.id,\n        isSelected: item.isSelected,\n        isDisabled: item.isDisabled,\n        isSortable: item.isSortable,\n        label: item.label,\n        navItem: renderSideNavItem(item, depth, isWithinSortableList),\n      },\n    }));\n  };\n\n  const sideNavExpandClickHandler = useCallback(() => {\n    setIsSideNavCollapsed((isSideNavCollapsed) => {\n      if (isSideNavCollapsed) {\n        onExpand?.();\n      } else {\n        onCollapse?.();\n      }\n\n      return !isSideNavCollapsed;\n    });\n  }, [onCollapse, onExpand, setIsSideNavCollapsed]);\n\n  const sideNavExpandKeyHandler = useCallback<\n    KeyboardEventHandler<HTMLButtonElement>\n  >(\n    (event) => {\n      if (event?.key === \"Enter\" || event?.code === \"Space\") {\n        event.preventDefault();\n        sideNavExpandClickHandler();\n      }\n    },\n    [sideNavExpandClickHandler],\n  );\n\n  useEffect(() => {\n    const unsubscribe = uiShellContext?.subscribeToCloseSideNavMenu(() => {\n      onCollapse?.();\n      setIsSideNavCollapsed(true);\n    });\n\n    return () => {\n      unsubscribe?.();\n    };\n  }, [onCollapse, setIsSideNavCollapsed, uiShellContext]);\n\n  const setSortedItems = useCallback(\n    (\n      parentId: string,\n      activeId: UniqueIdentifier,\n      activeIndex: number,\n      overIndex: number,\n    ) => {\n      const sortedSideNavItems = sideNavItemsList.map((item) =>\n        item.id === parentId && item.nestedNavItems\n          ? {\n              ...item,\n              nestedNavItems: arrayMove(\n                item.nestedNavItems,\n                activeIndex,\n                overIndex,\n              ),\n            }\n          : item,\n      );\n      updateSideNavItemsList(sortedSideNavItems);\n      onSort?.(sortedSideNavItems, parentId, activeId, activeIndex, overIndex);\n    },\n    [onSort, sideNavItemsList],\n  );\n\n  const onSideNavToggleButtonHighlight = useCallback<\n    NonNullable<SideNavToggleButtonProps[\"onHighlight\"]>\n  >((isHighlighted) => {\n    setIsSideNavToggleHighlighted(isHighlighted);\n  }, []);\n\n  return (\n    <StyledSideNavContainer\n      aria-label={t(\"navigation.label\")}\n      backgroundColor={uiShellContext?.sideNavBackgroundColor}\n      hasNeighbouringContentAtInlineStart={hasNeighbouringContentAtInlineStart}\n      id=\"side-nav-expandable\"\n      isAppContentWhiteBackground={\n        uiShellContext?.appBackgroundColor ===\n        odysseyDesignTokens.HueNeutralWhite\n      }\n      isSideNavCollapsed={isSideNavCollapsed}\n      isSideNavToggleHighlighted={isSideNavToggleHighlighted}\n      odysseyDesignTokens={odysseyDesignTokens}\n      ref={sideNavRef}\n    >\n      {isCollapsible && (\n        <StyledSideNavToggleButtonContainer\n          hasNeighbouringContentAtInlineStart={\n            hasNeighbouringContentAtInlineStart\n          }\n          isSideNavCollapsed={isSideNavCollapsed}\n          isSideNavToggleHighlighted={isSideNavToggleHighlighted}\n          odysseyDesignTokens={odysseyDesignTokens}\n        >\n          <SideNavToggleButton\n            ariaControls=\"side-nav-expandable\"\n            clickAreaPadding={\n              isSideNavCollapsed && !hasNeighbouringContentAtInlineStart\n                ? SIDE_NAV_TOGGLE_ICON_SIZE / 2\n                : 0\n            }\n            isSideNavCollapsed={isSideNavCollapsed}\n            onClick={sideNavExpandClickHandler}\n            onHighlight={onSideNavToggleButtonHighlight}\n            onKeyDown={sideNavExpandKeyHandler}\n          />\n        </StyledSideNavToggleButtonContainer>\n      )}\n\n      <OdysseyThemeProvider>\n        <StyledCollapsibleContent\n          data-se=\"collapsible-region\"\n          isSideNavCollapsed={isSideNavCollapsed}\n          odysseyDesignTokens={odysseyDesignTokens}\n          // When collapsed, the region is only hidden visually (opacity/width), so its links stayed in the accessibility tree and keyboard tab order. `inert` removes the whole subtree from both, immediately, without disturbing the fade animation. Spreading conditionally omits the attribute entirely when expanded — a present `inert`, even `inert=\"\"` or `inert=\"false\"`, keeps the region inert — while the empty string renders as a bare, active `inert` attribute when collapsed.\n          {...(isSideNavCollapsed ? { inert: \"\" } : {})}\n        >\n          <StyledOpacityTransitionContainer\n            isSideNavCollapsed={isSideNavCollapsed}\n            odysseyDesignTokens={odysseyDesignTokens}\n          >\n            {appName || isLoading || logoProps ? (\n              <StyledSideNavHeaderContainer\n                borderColor={uiShellContext?.sideNavContrastColors?.fontColor}\n                hasContentScrolled={hasContentScrolled}\n                odysseyDesignTokens={odysseyDesignTokens}\n              >\n                {isLoading && !appName && !logoProps ? (\n                  <SideNavHeader isLoading={isLoading} />\n                ) : (\n                  <SideNavHeader\n                    appName={appName}\n                    isLoading={isLoading}\n                    logoProps={logoProps}\n                  />\n                )}\n              </StyledSideNavHeaderContainer>\n            ) : (\n              <div />\n            )}\n\n            <StyledSideNavScrollableContainer\n              data-se=\"scrollable-region\"\n              hasBlockStartPadding={!appName}\n              odysseyDesignTokens={odysseyDesignTokens}\n            >\n              <StyledSideNavListContainer ref={scrollableContentRef}>\n                {isLoading\n                  ? Array(6)\n                      .fill(null)\n                      .map((_, index) => <LoadingItem key={index} />)\n                  : processSideNavItems(sideNavItemsList).map(\n                      (item) => item.sortableItem.navItem,\n                    )}\n              </StyledSideNavListContainer>\n              {!isLoading && footerItems && !hasCustomFooter && (\n                <StyledSideNavFooter\n                  odysseyDesignTokens={odysseyDesignTokens}\n                  sideNavBackgroundColor={\n                    uiShellContext?.sideNavBackgroundColor\n                  }\n                >\n                  <StyledSideNavFooterItemsContainer\n                    odysseyDesignTokens={odysseyDesignTokens}\n                    sideNavContrastColors={\n                      uiShellContext?.sideNavContrastColors\n                    }\n                  >\n                    <SideNavFooterContent footerItems={footerItems} />\n                  </StyledSideNavFooterItemsContainer>\n                </StyledSideNavFooter>\n              )}\n              {!isLoading && hasCustomFooter && isWithinCompactHeight && (\n                <StyledSideNavFooter\n                  odysseyDesignTokens={odysseyDesignTokens}\n                  sideNavBackgroundColor={\n                    uiShellContext?.sideNavBackgroundColor\n                  }\n                >\n                  {footerComponent}\n                </StyledSideNavFooter>\n              )}\n            </StyledSideNavScrollableContainer>\n            {!isLoading &&\n              !footerItems &&\n              hasCustomFooter &&\n              !isWithinCompactHeight && (\n                <StyledPersistentSideNavFooter\n                  isContentScrollable={isContentScrollable}\n                  odysseyDesignTokens={odysseyDesignTokens}\n                  sideNavBackgroundColor={\n                    uiShellContext?.sideNavBackgroundColor\n                  }\n                >\n                  {footerComponent}\n                </StyledPersistentSideNavFooter>\n              )}\n          </StyledOpacityTransitionContainer>\n        </StyledCollapsibleContent>\n      </OdysseyThemeProvider>\n    </StyledSideNavContainer>\n  );\n};\n\nconst MemoizedSideNav = memo(SideNav);\nMemoizedSideNav.displayName = \"SideNav\";\n\nexport { MemoizedSideNav as SideNav };\n"],"mappings":"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","ignoreList":[]}