@okta/odyssey-react-mui 1.40.0 → 1.42.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.
- package/dist/cjs/Autocomplete.cjs +10 -10
- package/dist/cjs/Autocomplete.cjs.map +1 -1
- package/dist/cjs/Breadcrumbs.cjs +1 -0
- package/dist/cjs/Breadcrumbs.cjs.map +1 -1
- package/dist/cjs/Link.cjs.map +1 -1
- package/dist/cjs/OdysseyCacheProvider.cjs.map +1 -1
- package/dist/cjs/Select.cjs +1 -1
- package/dist/cjs/Select.cjs.map +1 -1
- package/dist/cjs/Tag.cjs +9 -2
- package/dist/cjs/Tag.cjs.map +1 -1
- package/dist/cjs/createContrastColors.cjs +6 -2
- package/dist/cjs/createContrastColors.cjs.map +1 -1
- package/dist/cjs/getLogicalBoundaries.cjs +33 -0
- package/dist/cjs/getLogicalBoundaries.cjs.map +1 -0
- package/dist/cjs/labs/PageTemplate/PageTemplate.cjs +15 -4
- package/dist/cjs/labs/PageTemplate/PageTemplate.cjs.map +1 -1
- package/dist/cjs/properties/ts/odyssey-react-mui.cjs +2 -1
- package/dist/cjs/properties/ts/odyssey-react-mui.cjs.map +1 -1
- package/dist/cjs/properties/ts/odyssey-react-mui_eu.cjs +137 -0
- package/dist/cjs/properties/ts/odyssey-react-mui_eu.cjs.map +1 -0
- package/dist/cjs/theme/components.cjs +1 -0
- package/dist/cjs/theme/components.cjs.map +1 -1
- package/dist/cjs/ui-shell/NarrowUiShellContent.cjs +0 -1
- package/dist/cjs/ui-shell/NarrowUiShellContent.cjs.map +1 -1
- package/dist/cjs/ui-shell/SideNav/SideNav.cjs +23 -18
- package/dist/cjs/ui-shell/SideNav/SideNav.cjs.map +1 -1
- package/dist/cjs/ui-shell/SideNav/SideNavItemLinkContent.cjs +4 -3
- package/dist/cjs/ui-shell/SideNav/SideNavItemLinkContent.cjs.map +1 -1
- package/dist/cjs/ui-shell/SideNav/SideNavToggleButton.cjs +10 -10
- package/dist/cjs/ui-shell/SideNav/SideNavToggleButton.cjs.map +1 -1
- package/dist/cjs/ui-shell/UiShell.cjs +2 -0
- package/dist/cjs/ui-shell/UiShell.cjs.map +1 -1
- package/dist/cjs/ui-shell/UiShellProvider.cjs +6 -1
- package/dist/cjs/ui-shell/UiShellProvider.cjs.map +1 -1
- package/dist/cjs/ui-shell/renderUiShell.cjs +4 -2
- package/dist/cjs/ui-shell/renderUiShell.cjs.map +1 -1
- package/dist/cjs/ui-shell/useElementAtContainerEdge.cjs +74 -0
- package/dist/cjs/ui-shell/useElementAtContainerEdge.cjs.map +1 -0
- package/dist/cjs/ui-shell/useScrollState.cjs +4 -2
- package/dist/cjs/ui-shell/useScrollState.cjs.map +1 -1
- package/dist/cjs/useAutocomplete.cjs +2 -2
- package/dist/cjs/useAutocomplete.cjs.map +1 -1
- package/dist/cjs/useMountLifecycleEffect.cjs +3 -3
- package/dist/cjs/useMountLifecycleEffect.cjs.map +1 -1
- package/dist/cjs/web-component/odysseyWebComponentVersion.generated.cjs +1 -1
- package/dist/cjs/web-component/odysseyWebComponentVersion.generated.cjs.map +1 -1
- package/dist/esm/Autocomplete.js +10 -10
- package/dist/esm/Autocomplete.js.map +1 -1
- package/dist/esm/Breadcrumbs.js +1 -0
- package/dist/esm/Breadcrumbs.js.map +1 -1
- package/dist/esm/Link.js.map +1 -1
- package/dist/esm/OdysseyCacheProvider.js.map +1 -1
- package/dist/esm/Select.js +1 -1
- package/dist/esm/Select.js.map +1 -1
- package/dist/esm/Tag.js +9 -2
- package/dist/esm/Tag.js.map +1 -1
- package/dist/esm/createContrastColors.js +6 -2
- package/dist/esm/createContrastColors.js.map +1 -1
- package/dist/esm/getLogicalBoundaries.js +26 -0
- package/dist/esm/getLogicalBoundaries.js.map +1 -0
- package/dist/esm/labs/PageTemplate/PageTemplate.js +16 -5
- package/dist/esm/labs/PageTemplate/PageTemplate.js.map +1 -1
- package/dist/esm/properties/ts/odyssey-react-mui.js +2 -1
- package/dist/esm/properties/ts/odyssey-react-mui.js.map +1 -1
- package/dist/esm/properties/ts/odyssey-react-mui_eu.js +131 -0
- package/dist/esm/properties/ts/odyssey-react-mui_eu.js.map +1 -0
- package/dist/esm/theme/components.js +1 -0
- package/dist/esm/theme/components.js.map +1 -1
- package/dist/esm/ui-shell/NarrowUiShellContent.js +0 -1
- package/dist/esm/ui-shell/NarrowUiShellContent.js.map +1 -1
- package/dist/esm/ui-shell/SideNav/SideNav.js +23 -18
- package/dist/esm/ui-shell/SideNav/SideNav.js.map +1 -1
- package/dist/esm/ui-shell/SideNav/SideNavItemLinkContent.js +4 -3
- package/dist/esm/ui-shell/SideNav/SideNavItemLinkContent.js.map +1 -1
- package/dist/esm/ui-shell/SideNav/SideNavToggleButton.js +10 -10
- package/dist/esm/ui-shell/SideNav/SideNavToggleButton.js.map +1 -1
- package/dist/esm/ui-shell/UiShell.js +2 -0
- package/dist/esm/ui-shell/UiShell.js.map +1 -1
- package/dist/esm/ui-shell/UiShellProvider.js +6 -1
- package/dist/esm/ui-shell/UiShellProvider.js.map +1 -1
- package/dist/esm/ui-shell/renderUiShell.js +4 -2
- package/dist/esm/ui-shell/renderUiShell.js.map +1 -1
- package/dist/esm/ui-shell/useElementAtContainerEdge.js +68 -0
- package/dist/esm/ui-shell/useElementAtContainerEdge.js.map +1 -0
- package/dist/esm/ui-shell/useScrollState.js +4 -2
- package/dist/esm/ui-shell/useScrollState.js.map +1 -1
- package/dist/esm/useAutocomplete.js +2 -2
- package/dist/esm/useAutocomplete.js.map +1 -1
- package/dist/esm/useMountLifecycleEffect.js +3 -3
- package/dist/esm/useMountLifecycleEffect.js.map +1 -1
- package/dist/esm/web-component/odysseyWebComponentVersion.generated.js +1 -1
- package/dist/esm/web-component/odysseyWebComponentVersion.generated.js.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +25 -0
- package/dist/index.mjs +1 -1
- package/dist/index.scss +1 -1
- package/dist/tsconfig.production.tsbuildinfo +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/types/Autocomplete.d.ts +1 -1
- package/dist/types/Autocomplete.d.ts.map +1 -1
- package/dist/types/Breadcrumbs.d.ts.map +1 -1
- package/dist/types/CssBaseline.d.ts.map +1 -1
- package/dist/types/DataTable/reorderDataRowsLocally.d.ts.map +1 -1
- package/dist/types/DataTable/useRowReordering.d.ts.map +1 -1
- package/dist/types/DataTable/useScrollIndication.d.ts.map +1 -1
- package/dist/types/DatePickers/useOdysseyDateFields.d.ts.map +1 -1
- package/dist/types/Link.d.ts +3 -3
- package/dist/types/Link.d.ts.map +1 -1
- package/dist/types/NativeSelect.d.ts.map +1 -1
- package/dist/types/OdysseyCacheProvider.d.ts.map +1 -1
- package/dist/types/OdysseyTranslationProvider.d.ts +1 -1
- package/dist/types/OdysseyTranslationProvider.d.ts.map +1 -1
- package/dist/types/Pagination/usePagination.d.ts.map +1 -1
- package/dist/types/Select.d.ts.map +1 -1
- package/dist/types/Tag.d.ts.map +1 -1
- package/dist/types/addSpecificity.d.ts.map +1 -1
- package/dist/types/createContrastColors.d.ts +5 -1
- package/dist/types/createContrastColors.d.ts.map +1 -1
- package/dist/types/getLogicalBoundaries.d.ts +24 -0
- package/dist/types/getLogicalBoundaries.d.ts.map +1 -0
- package/dist/types/hexToRgb.d.ts.map +1 -1
- package/dist/types/i18n.d.ts +1 -0
- package/dist/types/i18n.d.ts.map +1 -1
- package/dist/types/inputUtils.d.ts.map +1 -1
- package/dist/types/labs/DataView/fetchData.d.ts.map +1 -1
- package/dist/types/labs/DataView/tableConstants.d.ts.map +1 -1
- package/dist/types/labs/DataView/testSupportData.d.ts.map +1 -1
- package/dist/types/labs/DataView/useFilterConversion.d.ts.map +1 -1
- package/dist/types/labs/GroupPicker.d.ts.map +1 -1
- package/dist/types/labs/OdysseyPickers/ComposablePicker.d.ts.map +1 -1
- package/dist/types/labs/OdysseyPickers/Picker.d.ts.map +1 -1
- package/dist/types/labs/OdysseyPickers/PickerVirtualizationListBox.d.ts.map +1 -1
- package/dist/types/labs/PageTemplate/PageTemplate.d.ts.map +1 -1
- package/dist/types/labs/PaginatedTable.d.ts.map +1 -1
- package/dist/types/labs/StaticTable.d.ts.map +1 -1
- package/dist/types/properties/ts/odyssey-react-mui.d.ts +1 -0
- package/dist/types/properties/ts/odyssey-react-mui.d.ts.map +1 -1
- package/dist/types/properties/ts/odyssey-react-mui_eu.d.ts +131 -0
- package/dist/types/properties/ts/odyssey-react-mui_eu.d.ts.map +1 -0
- package/dist/types/remUtils.d.ts.map +1 -1
- package/dist/types/shadow-dom/shadow-dom.d.ts.map +1 -1
- package/dist/types/test-selectors/getByQuerySelector.d.ts.map +1 -1
- package/dist/types/test-selectors/getComputedAccessibleErrorMessageText.d.ts.map +1 -1
- package/dist/types/test-selectors/getComputedAccessibleText.d.ts.map +1 -1
- package/dist/types/test-selectors/interpolateString.d.ts.map +1 -1
- package/dist/types/test-selectors/linkedHtmlSelectors.d.ts.map +1 -1
- package/dist/types/test-selectors/queryOdysseySelector.d.ts +40 -36
- package/dist/types/test-selectors/queryOdysseySelector.d.ts.map +1 -1
- package/dist/types/test-selectors/querySelector.d.ts +6 -2
- package/dist/types/test-selectors/querySelector.d.ts.map +1 -1
- package/dist/types/test-selectors/sanityChecks.d.ts.map +1 -1
- package/dist/types/theme/components.d.ts.map +1 -1
- package/dist/types/theme/createOdysseyMuiTheme.d.ts.map +1 -1
- package/dist/types/theme/mixins.d.ts.map +1 -1
- package/dist/types/theme/palette.d.ts.map +1 -1
- package/dist/types/theme/pxToRem.d.ts.map +1 -1
- package/dist/types/theme/shape.d.ts.map +1 -1
- package/dist/types/theme/spacing.d.ts.map +1 -1
- package/dist/types/theme/typography.d.ts.map +1 -1
- package/dist/types/theme/useMediaQuery.d.ts.map +1 -1
- package/dist/types/ui-shell/AppSwitcher/AppSwitcherApp.d.ts.map +1 -1
- package/dist/types/ui-shell/InnerAppContainer.d.ts.map +1 -1
- package/dist/types/ui-shell/NarrowUiShellContent.d.ts.map +1 -1
- package/dist/types/ui-shell/SideNav/SideNav.d.ts.map +1 -1
- package/dist/types/ui-shell/SideNav/SideNavItemContent.d.ts.map +1 -1
- package/dist/types/ui-shell/SideNav/SideNavItemLinkContent.d.ts.map +1 -1
- package/dist/types/ui-shell/SideNav/SideNavToggleButton.d.ts.map +1 -1
- package/dist/types/ui-shell/SideNav/SortableList/SortableItem.d.ts.map +1 -1
- package/dist/types/ui-shell/SideNav/useIsSideNavCollapsedSessionStorage.d.ts.map +1 -1
- package/dist/types/ui-shell/UiShell.d.ts +1 -1
- package/dist/types/ui-shell/UiShell.d.ts.map +1 -1
- package/dist/types/ui-shell/UiShellProvider.d.ts +10 -4
- package/dist/types/ui-shell/UiShellProvider.d.ts.map +1 -1
- package/dist/types/ui-shell/bufferLatest.d.ts.map +1 -1
- package/dist/types/ui-shell/createMessageBus.d.ts.map +1 -1
- package/dist/types/ui-shell/createStore.d.ts.map +1 -1
- package/dist/types/ui-shell/renderUiShell.d.ts +2 -2
- package/dist/types/ui-shell/renderUiShell.d.ts.map +1 -1
- package/dist/types/ui-shell/useElementAtContainerEdge.d.ts +43 -0
- package/dist/types/ui-shell/useElementAtContainerEdge.d.ts.map +1 -0
- package/dist/types/ui-shell/useMatchAppElementToUiShellAppArea.d.ts.map +1 -1
- package/dist/types/ui-shell/useScrollState.d.ts +6 -2
- package/dist/types/ui-shell/useScrollState.d.ts.map +1 -1
- package/dist/types/ui-shell/useUiShellBreakpoints.d.ts.map +1 -1
- package/dist/types/useAutocomplete.d.ts.map +1 -1
- package/dist/types/useContrastMode.d.ts.map +1 -1
- package/dist/types/useMountLifecycleEffect.d.ts.map +1 -1
- package/dist/types/useNormalizedKey.d.ts.map +1 -1
- package/dist/types/useSessionStorageState.d.ts.map +1 -1
- package/dist/types/useUniqueAlphabeticalId.d.ts.map +1 -1
- package/dist/types/useUniqueId.d.ts.map +1 -1
- package/dist/types/web-component/odysseyWebComponentVersion.generated.d.ts +1 -1
- package/dist/types/web-component/odysseyWebComponentVersion.generated.d.ts.map +1 -1
- package/dist/types/web-component/renderReactInWebComponent.d.ts.map +1 -1
- package/package.json +13 -13
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SideNav.cjs","names":["_styled","_interopRequireDefault","require","_react","_reactI18next","_sortable","_reactErrorBoundary","_NavAccordion","_OdysseyDesignTokensContext","_OdysseyThemeProvider","_SideNavHeader","_SideNavItemContent","_SideNavFooterContent","_SideNavItemContentContext","_SideNavToggleButton","_SortableList","_Typography","_UiShellProvider","_uiShellSharedConstants","_useIsSideNavCollapsedSessionStorage","_useMountLifecycleEffect","_jsxRuntime","e","__esModule","default","SIDE_NAV_COLLAPSED_PADDING_HIGHLIGHTED","exports","SIDE_NAV_COLLAPSED_PADDING_UNHIGHLIGHTED","StyledCollapsibleContent","styled","shouldForwardProp","prop","odysseyDesignTokens","isSideNavCollapsed","position","display","gridTemplateColumns","SIDE_NAV_WIDTH","height","transition","TransitionDurationMain","transitionTimingFunction","TransitionTimingMain","overflow","opacity","StyledOpacityTransitionContainer","gridTemplateRows","StyledSideNavContainer","backgroundColor","hasNeighboringContent","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","StyledSideNavHeaderContainer","borderColor","hasContentScrolled","flexShrink","borderBottomWidth","borderBottomStyle","borderBottomColor","concat","StyledSideNavListContainer","padding","listStyle","listStyleType","margin","StyledSideNavScrollableContainer","overflowY","paddingInline","Spacing2","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","onCollapse","onExpand","onSort","sideNavItems","setHasContentScrolled","useState","setHasNeighboringContent","setIsContentScrollable","setIsSideNavToggleHighlighted","sideNavItemsList","updateSideNavItemsList","isSideNavCollapsedLocalState","setIsSideNavCollapsedLocalState","sessionState","isSideNavCollapsedSessionState","setSessionState","setIsSideNavCollapsedSessionState","useIsSideNavCollapsedSessionStorage","setIsSideNavCollapsed","uiShellContext","useUiShellContext","t","useTranslation","scrollableContentRef","useRef","resizeObserverRef","intersectionObserverRef","sideNavRef","blankElement","useMemo","useEffect","current","getBoundingClientRect","x","onMount","useCallback","onUpdate","useMountLifecycleEffect","updateIsContentScrollable","parentElement","resizeObserverDebounceTimer","ResizeObserver","cancelAnimationFrame","requestAnimationFrame","observe","IntersectionObserver","entries","isIntersecting","slice","sort","a","b","time","at","root","threshold","ulElement","liElement","Array","from","disconnect","scrollIntoViewRef","firstSideNavItemIdWithIsSelected","flattenedItems","flatMap","sideNavItem","nestedNavItems","firstItemWithIsSelected","find","isSelected","id","scrollIntoView","getRefIfThisIsFirstNodeWithIsSelected","itemId","undefined","sideNavItemContentProviderValue","depth","setSelectedItem","selectedItemId","updatedSideNavItems","map","item","childItem","closeSideNavMenu","processedSideNavItems","childNavItems","childProps","isDisabled","isSortable","navItem","SideNavItemContentContext","Provider","value","SideNavItemContent","onItemSelected","scrollRef","translate","sideNavExpandClickHandler","sideNavExpandKeyHandler","event","key","code","preventDefault","unsubscribe","subscribeToCloseSideNavMenu","setSortedItems","parentId","activeId","activeIndex","overIndex","sortedSideNavItems","arrayMove","onSideNavToggleButtonHighlight","isHighlighted","appBackgroundColor","ref","SideNavToggleButton","clickAreaPadding","SIDE_NAV_TOGGLE_ICON_SIZE","ariaControls","onClick","onHighlight","onKeyDown","OdysseyThemeProvider","SideNavHeader","role","fill","_","index","href","isDefaultExpanded","isExpanded","isSectionHeader","label","startIcon","ErrorBoundary","fallback","Overline","component","nestedChildren","SortableList","items","onChange","renderItem","sortableItem","Item","StyledSideNavListItem","disabled","NavAccordion","SideNavFooterContent","MemoizedSideNav","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 styled from \"@emotion/styled\";\nimport {\n memo,\n useMemo,\n useState,\n useCallback,\n useRef,\n useEffect,\n KeyboardEventHandler,\n CSSProperties,\n} from \"react\";\nimport { Skeleton } from \"@mui/material\";\nimport { useTranslation } from \"react-i18next\";\nimport { arrayMove } from \"@dnd-kit/sortable\";\nimport { UniqueIdentifier } from \"@dnd-kit/core\";\nimport { ErrorBoundary } from \"react-error-boundary\";\nimport { Property } from \"csstype\";\n\nimport { ContrastColors } from \"../../createContrastColors.js\";\nimport { NavAccordion } from \"./NavAccordion.js\";\nimport {\n DesignTokens,\n useOdysseyDesignTokens,\n} from \"../../OdysseyDesignTokensContext.js\";\nimport { OdysseyThemeProvider } from \"../../OdysseyThemeProvider.js\";\nimport type { SideNavProps } from \"./types.js\";\nimport { SideNavHeader } from \"./SideNavHeader.js\";\nimport {\n SideNavItemContent,\n StyledSideNavListItem,\n} from \"./SideNavItemContent.js\";\nimport { SideNavFooterContent } from \"./SideNavFooterContent.js\";\nimport { SideNavItemContentContext } from \"./SideNavItemContentContext.js\";\nimport {\n SIDE_NAV_TOGGLE_ICON_HALF_SIZE,\n SIDE_NAV_TOGGLE_ICON_SIZE,\n SideNavToggleButton,\n SideNavToggleButtonProps,\n} from \"./SideNavToggleButton.js\";\nimport { SortableList } from \"./SortableList/SortableList.js\";\nimport { Overline } from \"../../Typography.js\";\nimport {\n UiShellColors,\n useUiShellContext,\n} from \"../../ui-shell/UiShellProvider.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 { useIsSideNavCollapsedSessionStorage } from \"./useIsSideNavCollapsedSessionStorage.js\";\nimport { useMountLifecycleEffect } from \"../../useMountLifecycleEffect.js\";\n\nexport const SIDE_NAV_COLLAPSED_PADDING_HIGHLIGHTED = 12;\nexport const SIDE_NAV_COLLAPSED_PADDING_UNHIGHLIGHTED = 2;\n\nconst StyledCollapsibleContent = styled(\"div\", {\n shouldForwardProp: (prop) =>\n prop !== \"odysseyDesignTokens\" && prop !== \"isSideNavCollapsed\",\n})<{\n odysseyDesignTokens: DesignTokens;\n isSideNavCollapsed: boolean;\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 odysseyDesignTokens: DesignTokens;\n isSideNavCollapsed: boolean;\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 !== \"hasNeighboringContent\" &&\n prop !== \"isAppContentWhiteBackground\" &&\n prop !== \"isSideNavCollapsed\" &&\n prop !== \"isSideNavToggleHighlighted\" &&\n prop !== \"odysseyDesignTokens\",\n})<{\n backgroundColor?: UiShellColors[\"sideNavBackgroundColor\"];\n hasNeighboringContent: boolean;\n isAppContentWhiteBackground: boolean;\n isSideNavCollapsed: boolean;\n isSideNavToggleHighlighted: boolean;\n odysseyDesignTokens: DesignTokens;\n}>(\n ({\n backgroundColor,\n hasNeighboringContent,\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 && !hasNeighboringContent\n ? isSideNavToggleHighlighted\n ? `translateX(calc(100% - (${odysseyDesignTokens.BorderWidthMain} * 2)))`\n : `translateX(calc(100% - ${SIDE_NAV_COLLAPSED_PADDING_HIGHLIGHTED}px))`\n : \"translateX(0)\",\n width: hasNeighboringContent\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 !== \"hasNeighboringContent\" &&\n prop !== \"isSideNavCollapsed\" &&\n prop !== \"isSideNavToggleHighlighted\" &&\n prop !== \"odysseyDesignTokens\",\n})<{\n hasNeighboringContent: boolean;\n isSideNavCollapsed: boolean;\n isSideNavToggleHighlighted: boolean;\n odysseyDesignTokens: DesignTokens;\n}>(\n ({\n hasNeighboringContent,\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 transform:\n isSideNavCollapsed && !hasNeighboringContent\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) => prop !== \"odysseyDesignTokens\",\n})<{ odysseyDesignTokens: DesignTokens }>(({ odysseyDesignTokens }) => ({\n display: \"inline-grid\",\n gridTemplateRows: \"1fr max-content\",\n overflowY: \"auto\",\n paddingInline: odysseyDesignTokens.Spacing2,\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(\"div\", {\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 variant=\"circular\"\n width={odysseyDesignTokens.Spacing4}\n height={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 onCollapse,\n onExpand,\n onSort,\n sideNavItems,\n}: SideNavProps) => {\n const [hasContentScrolled, setHasContentScrolled] = useState(false);\n const [hasNeighboringContent, setHasNeighboringContent] = 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 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 blankElement = useMemo(() => <div />, []);\n\n // The default value (sideNavItems) passed to useState is ONLY used by the useState hook for\n // the very first value. Subsequent updates to the prop (sideNavItems) need to cause the state\n // to update!\n useEffect(() => updateSideNavItemsList(sideNavItems || []), [sideNavItems]);\n\n // update sidenav collapse status\n useEffect(() => {\n if (sideNavRef.current) {\n setHasNeighboringContent(\n sideNavRef.current.getBoundingClientRect().x > 0,\n );\n }\n // We want this listening to `isCollapsed` because that changes what's next to the side nav.\n }, [isCollapsed]);\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\n // 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\n // 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\n * with isSelected. This should be the node we set a ref on in order to\n * call scrollIntoView in the effect\n */\n const firstSideNavItemIdWithIsSelected = useMemo(() => {\n const flattenedItems = sideNavItemsList.flatMap((sideNavItem) =>\n sideNavItem.nestedNavItems\n ? [sideNavItem, ...sideNavItem.nestedNavItems]\n : sideNavItem,\n );\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.\n * This must rely on checking firstSideNavItemIdWithIsSelected or it will not run\n * 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.\n * This function returns the ref only if the ID provided matches the first\n * 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 sideNavItemContentProviderValue = useMemo(\n () => ({ isCompact, depth: 1 }),\n [isCompact],\n );\n\n const setSelectedItem = useCallback(\n (selectedItemId: string) => {\n const updatedSideNavItems = sideNavItemsList.map((item) => {\n if (item.id === selectedItemId) {\n item.isSelected = true;\n } else if (item.isSelected) {\n delete item.isSelected;\n }\n\n return item.nestedNavItems\n ? {\n ...item,\n nestedNavItems: item.nestedNavItems.map((childItem) => {\n if (childItem.id === selectedItemId) {\n childItem.isSelected = true;\n } else if (childItem.isSelected) {\n delete childItem.isSelected;\n }\n return childItem;\n }),\n }\n : item;\n });\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 processedSideNavItems = useMemo(() => {\n return sideNavItemsList?.map((item) => ({\n ...item,\n childNavItems: item.nestedNavItems?.map((childProps) => ({\n id: childProps.id,\n isSelected: childProps.isSelected,\n isDisabled: childProps.isDisabled,\n isSortable: childProps.isSortable,\n navItem: (\n <SideNavItemContentContext.Provider\n key={childProps.id}\n value={{\n ...sideNavItemContentProviderValue,\n depth: 2,\n isSortable: item.isSortable,\n }}\n >\n <SideNavItemContent\n {...childProps}\n onItemSelected={setSelectedItem}\n scrollRef={getRefIfThisIsFirstNodeWithIsSelected(childProps.id)}\n translate={childProps.translate}\n />\n </SideNavItemContentContext.Provider>\n ),\n })),\n }));\n }, [\n getRefIfThisIsFirstNodeWithIsSelected,\n setSelectedItem,\n sideNavItemContentProviderValue,\n sideNavItemsList,\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 hasNeighboringContent={hasNeighboringContent}\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 hasNeighboringContent={hasNeighboringContent}\n isSideNavCollapsed={isSideNavCollapsed}\n isSideNavToggleHighlighted={isSideNavToggleHighlighted}\n odysseyDesignTokens={odysseyDesignTokens}\n >\n <SideNavToggleButton\n clickAreaPadding={\n isSideNavCollapsed && !hasNeighboringContent\n ? SIDE_NAV_TOGGLE_ICON_SIZE / 2\n : 0\n }\n ariaControls=\"side-nav-expandable\"\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 >\n <StyledOpacityTransitionContainer\n isSideNavCollapsed={isSideNavCollapsed}\n odysseyDesignTokens={odysseyDesignTokens}\n >\n {appName || isLoading || logoProps ? (\n <StyledSideNavHeaderContainer\n hasContentScrolled={hasContentScrolled}\n odysseyDesignTokens={odysseyDesignTokens}\n borderColor={uiShellContext?.sideNavContrastColors?.fontColor}\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 odysseyDesignTokens={odysseyDesignTokens}\n data-se=\"scrollable-region\"\n >\n <StyledSideNavListContainer\n role=\"none\"\n ref={scrollableContentRef}\n >\n {isLoading\n ? Array(6)\n .fill(null)\n .map((_, index) => <LoadingItem key={index} />)\n : processedSideNavItems?.map((item) => {\n const {\n childNavItems,\n href,\n id,\n isDefaultExpanded,\n isDisabled,\n isExpanded,\n isSectionHeader,\n isSortable,\n label,\n startIcon,\n } = item;\n\n if (isSectionHeader) {\n return (\n <ErrorBoundary fallback={blankElement} key={id}>\n <StyledSectionHeaderContainer\n contrastFontColor={\n uiShellContext?.sideNavContrastColors?.fontColor\n }\n id={id}\n odysseyDesignTokens={odysseyDesignTokens}\n >\n <Overline component=\"h3\">{label}</Overline>\n </StyledSectionHeaderContainer>\n </ErrorBoundary>\n );\n } else if (childNavItems) {\n const nestedChildren = (\n <StyledSideNavListContainer role=\"presentation\">\n {isSortable ? (\n <SortableList\n parentId={item.id}\n items={childNavItems}\n onChange={setSortedItems}\n renderItem={(sortableItem) => (\n <SortableList.Item\n id={sortableItem.id}\n isDisabled={sortableItem.isDisabled}\n isSelected={sortableItem.isSelected}\n isSortable={sortableItem.isSortable}\n >\n {sortableItem.navItem}\n </SortableList.Item>\n )}\n />\n ) : (\n childNavItems.map((item) => item.navItem)\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(\n item.id,\n )}\n startIcon={item.startIcon}\n />\n\n <StyledSideNavListItem\n id={`${id}-items`}\n odysseyDesignTokens={odysseyDesignTokens}\n disabled={isDisabled}\n aria-disabled={isDisabled}\n >\n {nestedChildren}\n </StyledSideNavListItem>\n </ErrorBoundary>\n ) : (\n <ErrorBoundary fallback={blankElement} key={id}>\n <StyledSideNavListItem\n id={id}\n odysseyDesignTokens={odysseyDesignTokens}\n disabled={isDisabled}\n aria-disabled={isDisabled}\n >\n <NavAccordion\n label={label}\n isCompact={isCompact}\n isDefaultExpanded={isDefaultExpanded}\n isExpanded={isExpanded}\n startIcon={startIcon}\n isDisabled={isDisabled}\n >\n {nestedChildren}\n </NavAccordion>\n </StyledSideNavListItem>\n </ErrorBoundary>\n );\n } else {\n return (\n <ErrorBoundary fallback={blankElement} key={item.id}>\n <SideNavItemContentContext.Provider\n value={sideNavItemContentProviderValue}\n >\n <SideNavItemContent\n {...item}\n onItemSelected={setSelectedItem}\n scrollRef={getRefIfThisIsFirstNodeWithIsSelected(\n item.id,\n )}\n startIcon={item.startIcon}\n />\n </SideNavItemContentContext.Provider>\n </ErrorBoundary>\n );\n }\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 </StyledSideNavScrollableContainer>\n {!isLoading && !footerItems && hasCustomFooter && (\n <StyledPersistentSideNavFooter\n isContentScrollable={isContentScrollable}\n odysseyDesignTokens={odysseyDesignTokens}\n sideNavBackgroundColor={uiShellContext?.sideNavBackgroundColor}\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":";;;;;;;AAYA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AAWA,IAAAE,aAAA,GAAAF,OAAA;AACA,IAAAG,SAAA,GAAAH,OAAA;AAEA,IAAAI,mBAAA,GAAAJ,OAAA;AAIA,IAAAK,aAAA,GAAAL,OAAA;AACA,IAAAM,2BAAA,GAAAN,OAAA;AAIA,IAAAO,qBAAA,GAAAP,OAAA;AAEA,IAAAQ,cAAA,GAAAR,OAAA;AACA,IAAAS,mBAAA,GAAAT,OAAA;AAIA,IAAAU,qBAAA,GAAAV,OAAA;AACA,IAAAW,0BAAA,GAAAX,OAAA;AACA,IAAAY,oBAAA,GAAAZ,OAAA;AAMA,IAAAa,aAAA,GAAAb,OAAA;AACA,IAAAc,WAAA,GAAAd,OAAA;AACA,IAAAe,gBAAA,GAAAf,OAAA;AAIA,IAAAgB,uBAAA,GAAAhB,OAAA;AAMA,IAAAiB,oCAAA,GAAAjB,OAAA;AACA,IAAAkB,wBAAA,GAAAlB,OAAA;AAA2E,IAAAmB,WAAA,GAAAnB,OAAA;AAAA,SAAAD,uBAAAqB,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAhE3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAwDO,MAAMG,sCAAsC,GAAAC,OAAA,CAAAD,sCAAA,GAAG,EAAE;AACjD,MAAME,wCAAwC,GAAAD,OAAA,CAAAC,wCAAA,GAAG,CAAC;AAEzD,MAAMC,wBAAwB,GAAG,IAAAC,eAAM,EAAC,KAAK,EAAE;EAC7CC,iBAAiB,EAAGC,IAAI,IACtBA,IAAI,KAAK,qBAAqB,IAAIA,IAAI,KAAK;AAC/C,CAAC,CAAC,CAGC,CAAC;EAAEC,mBAAmB;EAAEC;AAAmB,CAAC,MAAM;EACnDC,QAAQ,EAAE,UAAU;EACpBC,OAAO,EAAE,MAAM;EACfC,mBAAmB,EAAEC,sCAAc;EACnCC,MAAM,EAAE,MAAM;EACdC,UAAU,EAAE,yBAAyBP,mBAAmB,CAACQ,sBAAsB,iBAAiB;EAChGC,wBAAwB,EAAET,mBAAmB,CAACU,oBAAoB;EAClEC,QAAQ,EAAE,QAAQ;EAElB,IAAIV,kBAAkB,IACnB;IACCG,mBAAmB,EAAE,CAAC;IACtBQ,OAAO,EAAE;EACX,CAA0B;AAC9B,CAAC,CAAC,CAAC;AAEH,MAAMC,gCAAgC,GAAG,IAAAhB,eAAM,EAAC,KAAK,EAAE;EACrDC,iBAAiB,EAAGC,IAAI,IACtBA,IAAI,KAAK,qBAAqB,IAAIA,IAAI,KAAK;AAC/C,CAAC,CAAC,CACA,CAAC;EACCC,mBAAmB;EACnBC;AAIF,CAAC,MAAM;EACLE,OAAO,EAAE,MAAM;EACfW,gBAAgB,EAAE,6BAA6B;EAC/CR,MAAM,EAAE,MAAM;EACdC,UAAU,EAAE,cAAc;EAC1BE,wBAAwB,EAAET,mBAAmB,CAACU,oBAAoB;EAClEC,QAAQ,EAAE,QAAQ;EAElB,IAAIV,kBAAkB,IACnB;IACCW,OAAO,EAAE;EACX,CAA0B;AAC9B,CAAC,CACH,CAAC;AAED,MAAMG,sBAAsB,GAAG,IAAAlB,eAAM,EAAC,KAAK,EAAE;EAC3CC,iBAAiB,EAAGC,IAAI,IACtBA,IAAI,KAAK,iBAAiB,IAC1BA,IAAI,KAAK,uBAAuB,IAChCA,IAAI,KAAK,6BAA6B,IACtCA,IAAI,KAAK,oBAAoB,IAC7BA,IAAI,KAAK,4BAA4B,IACrCA,IAAI,KAAK;AACb,CAAC,CAAC,CAQA,CAAC;EACCiB,eAAe;EACfC,qBAAqB;EACrBC,2BAA2B;EAC3BjB,kBAAkB;EAClBkB,0BAA0B;EAC1BnB;AACF,CAAC,MAAM;EAELgB,eAAe,EAAEA,eAAe,IAAIhB,mBAAmB,CAACoB,eAAe;EACvEd,MAAM,EAAE,MAAM;EACdJ,QAAQ,EAAE,UAAU;EACpBmB,KAAK,EAAE,aAAa;EAGpB,qBAAqB,EAAE;IACrBC,OAAO,EAAE,IAAI;IACbhB,MAAM,EAAE,MAAM;IACdiB,aAAa,EAAE,MAAM;IACrBrB,QAAQ,EAAE,UAAU;IACpBsB,KAAK,EAAE,IAAIxB,mBAAmB,CAACyB,eAAe,EAAE;IAChDC,GAAG,EAAE,CAAC;IACNnB,UAAU,EAAE,WAAWP,mBAAmB,CAACQ,sBAAsB,eAAeR,mBAAmB,CAACQ,sBAAsB,WAAWR,mBAAmB,CAACQ,sBAAsB,EAAE;IACjLmB,UAAU,EAAE,MAAM;IAClBC,MAAM,EAAEC;EACV,CAAC;EAGD,WAAW,EAAE;IACXb,eAAe,EAAEG,0BAA0B,GACvCnB,mBAAmB,CAAC8B,yBAAyB,GAC7C9B,mBAAmB,CAAC+B,aAAa;IACrCnB,OAAO,EACLM,2BAA2B,IAC1B,CAACjB,kBAAkB,IAAIkB,0BAA2B,GAC/C,CAAC,GACD,CAAC;IACPE,KAAK,EAAE,QAAQrB,mBAAmB,CAACyB,eAAe;EACpD,CAAC;EAGD,UAAU,EAAE;IACVT,eAAe,EAAEhB,mBAAmB,CAACgC,aAAa;IAClDpB,OAAO,EAAEX,kBAAkB,GAAG,CAAC,GAAG,CAAC;IACnCgC,SAAS,EACPhC,kBAAkB,IAAI,CAACgB,qBAAqB,GACxCE,0BAA0B,GACxB,2BAA2BnB,mBAAmB,CAACyB,eAAe,SAAS,GACvE,0BAA0BhC,sCAAsC,MAAM,GACxE,eAAe;IACrB4B,KAAK,EAAEJ,qBAAqB,GACxB,CAAC,GACD,QAAQiB,mDAA8B,GAAGzC,sCAAsC,QAAQO,mBAAmB,CAACyB,eAAe,OAAO;IAGrI,IAAKxB,kBAAkB,IAAIkB,0BAA0B,GACjD;MACEgB,gBAAgB,EAAEnC,mBAAmB,CAAC8B,yBAAyB;MAC/DM,gBAAgB,EACdpC,mBAAmB,CAACqC,eAA4C;MAClEC,gBAAgB,EAAE,QAAQtC,mBAAmB,CAACyB,eAAe;IAC/D,CAAC,GACD,CAAC,CAAC;EACR;AACF,CAAC,CACH,CAAC;AAED,MAAMc,kCAAkC,GAAG,IAAA1C,eAAM,EAAC,KAAK,EAAE;EACvDC,iBAAiB,EAAGC,IAAI,IACtBA,IAAI,KAAK,uBAAuB,IAChCA,IAAI,KAAK,oBAAoB,IAC7BA,IAAI,KAAK,4BAA4B,IACrCA,IAAI,KAAK;AACb,CAAC,CAAC,CAMA,CAAC;EACCkB,qBAAqB;EACrBhB,kBAAkB;EAClBkB,0BAA0B;EAC1BnB;AACF,CAAC,MAAM;EACLE,QAAQ,EAAE,UAAU;EACpBsB,KAAK,EAAE,GAAGU,mDAA8B,IAAI;EAC5CR,GAAG,EAAEc,gEAAwC;EAC7CP,SAAS,EACPhC,kBAAkB,IAAI,CAACgB,qBAAqB,GACxCE,0BAA0B,GACxB,2BAA2Be,mDAA8B,GAAGzC,sCAAsC,YAAY,GAC9G,2BAA2ByC,mDAA8B,GAAGvC,wCAAwC,YAAY,GAClH,yBAAyB;EAC/BY,UAAU,EAAE,aAAaP,mBAAmB,CAACQ,sBAAsB,EAAE;EACrEoB,MAAM,EAAEC,gDAAwB,GAAG;AACrC,CAAC,CACH,CAAC;AAED,MAAMY,4BAA4B,GAAG,IAAA5C,eAAM,EAAC,KAAK,EAAE;EACjDC,iBAAiB,EAAGC,IAAI,IACtBA,IAAI,KAAK,aAAa,IACtBA,IAAI,KAAK,oBAAoB,IAC7BA,IAAI,KAAK;AACb,CAAC,CAAC,CAIC,CAAC;EAAE2C,WAAW;EAAEC,kBAAkB;EAAE3C;AAAoB,CAAC,MAAM;EAChE4C,UAAU,EAAE,CAAC;EAEb,IAAID,kBAAkB,IACnB;IACCE,iBAAiB,EAAE7C,mBAAmB,CAACyB,eAAe;IACtDqB,iBAAiB,EAAE9C,mBAAmB,CAACqC,eAAe;IACtDU,iBAAiB,EAAE/C,mBAAmB,CAAC+B,aAAa;IAEpD,IAAIW,WAAW,IACZ;MACCK,iBAAiB,EAAEL,WAAW,CAACM,MAAM,CAAC,IAAI;IAC5C,CAA0B;EAC9B,CAAmB;AACvB,CAAC,CAAC,CAAC;AAEH,MAAMC,0BAA0B,GAAG,IAAApD,eAAM,EAAC,IAAI,CAAC,CAAC,OAAO;EACrDqD,OAAO,EAAE,CAAC;EACVC,SAAS,EAAE,MAAM;EACjBC,aAAa,EAAE,MAAM;EACrBC,MAAM,EAAE,CAAC;EACThC,KAAK,EAAE;AACT,CAAC,CAAC,CAAC;AAEH,MAAMiC,gCAAgC,GAAG,IAAAzD,eAAM,EAAC,KAAK,EAAE;EACrDC,iBAAiB,EAAGC,IAAI,IAAKA,IAAI,KAAK;AACxC,CAAC,CAAC,CAAwC,CAAC;EAAEC;AAAoB,CAAC,MAAM;EACtEG,OAAO,EAAE,aAAa;EACtBW,gBAAgB,EAAE,iBAAiB;EACnCyC,SAAS,EAAE,MAAM;EACjBC,aAAa,EAAExD,mBAAmB,CAACyD;AACrC,CAAC,CAAC,CAAC;AAEH,MAAMC,4BAA4B,GAAG,IAAA7D,eAAM,EAAC,IAAI,EAAE;EAChDC,iBAAiB,EAAGC,IAAI,IACtBA,IAAI,KAAK,qBAAqB,IAAIA,IAAI,KAAK;AAC/C,CAAC,CAAC,CACA,CAAC;EACC4D,iBAAiB;EACjB3D;AAIF,CAAC,MAAM;EACL4D,KAAK,EAAED,iBAAiB,IAAI3D,mBAAmB,CAAC6D,aAAa;EAC7DC,WAAW,EAAE,GAAG9D,mBAAmB,CAAC+D,QAAQ,EAAE;EAC9CC,YAAY,EAAEhE,mBAAmB,CAACiE,QAAQ;EAC1CT,aAAa,EAAExD,mBAAmB,CAACkE;AACrC,CAAC,CACH,CAAC;AAED,MAAMC,mBAAmB,GAAG,IAAAtE,eAAM,EAAC,KAAK,EAAE;EACxCC,iBAAiB,EAAGC,IAAI,IACtBA,IAAI,KAAK,qBAAqB,IAAIA,IAAI,KAAK;AAC/C,CAAC,CAAC,CACA,CAAC;EACCC,mBAAmB;EACnBoE;AAIF,CAAC,MAAM;EACLpD,eAAe,EAAEhB,mBAAmB,CAACoB,eAAe;EACpDwB,UAAU,EAAE,CAAC;EACbM,OAAO,EAAElD,mBAAmB,CAACkE,QAAQ;EAErC,IAAIE,sBAAsB,IACvB;IACCpD,eAAe,EAAEoD;EACnB,CAA0B;AAC9B,CAAC,CACH,CAAC;AAED,MAAMC,6BAA6B,GAAG,IAAAxE,eAAM,EAACsE,mBAAmB,EAAE;EAChErE,iBAAiB,EAAGC,IAAI,IACtBA,IAAI,KAAK,qBAAqB,IAC9BA,IAAI,KAAK,qBAAqB,IAC9BA,IAAI,KAAK;AACb,CAAC,CAAC,CACA,CAAC;EACCuE,mBAAmB;EACnBtE,mBAAmB;EACnBoE;AAKF,CAAC,MAAM;EACLG,kBAAkB,EAAE,YAAY;EAChCC,kBAAkB,EAAExE,mBAAmB,CAACQ,sBAAsB;EAC9DiE,gBAAgB,EAAEzE,mBAAmB,CAACU,oBAAoB;EAC1DkB,MAAM,EAAE8C,6CAAqB;EAG7B,IAAIJ,mBAAmB,IACpB;IACCK,SAAS,EAAE;EACb,CAA0B,CAAC;EAE7B,IAAIP,sBAAsB,IACvB;IACCpD,eAAe,EAAEoD;EACnB,CAA0B;AAC9B,CAAC,CACH,CAAC;AAED,MAAMQ,iCAAiC,GAAG,IAAA/E,eAAM,EAAC,KAAK,EAAE;EACtDC,iBAAiB,EAAGC,IAAI,IACtBA,IAAI,KAAK,qBAAqB,IAAIA,IAAI,KAAK;AAC/C,CAAC,CAAC,CAGC,CAAC;EAAEC,mBAAmB;EAAE6E;AAAsB,CAAC,MAAM;EACtD1E,OAAO,EAAE,MAAM;EACf2E,QAAQ,EAAE,MAAM;EAChBC,UAAU,EAAE,QAAQ;EACpBC,QAAQ,EAAEhF,mBAAmB,CAACiF,sBAAsB;EAEpD,SAAS,EAAE;IACTrB,KAAK,EAAE5D,mBAAmB,CAAC6D,aAAa;IACxCtD,UAAU,EAAE,SAASP,mBAAmB,CAACQ,sBAAsB,EAAE;IAEjE,WAAW,EAAE;MACXoD,KAAK,EAAE5D,mBAAmB,CAAC6D,aAAa;MAExC,IAAIgB,qBAAqB,EAAEK,SAAS,IACjC;QACCtB,KAAK,EAAEiB,qBAAqB,EAAEK;MAChC,CAA0B;IAC9B,CAAC;IAED,SAAS,EAAE;MACTC,cAAc,EAAE,MAAM;MACtBvB,KAAK,EAAE5D,mBAAmB,CAACoF,aAAa;MAExC,IAAIP,qBAAqB,EAAEK,SAAS,IACjC;QACCtB,KAAK,EAAEiB,qBAAqB,EAAEK;MAChC,CAA0B;IAC9B,CAAC;IAED,IAAIL,qBAAqB,EAAEK,SAAS,IACjC;MACCtB,KAAK,EAAEiB,qBAAqB,EAAEK;IAChC,CAA0B;EAC9B;AACF,CAAC,CAAC,CAAC;AAEH,MAAMG,0BAA0B,GAAG,IAAAxF,eAAM,EAAC,KAAK,EAAE;EAC/CC,iBAAiB,EAAGC,IAAI,IAAKA,IAAI,KAAK;AACxC,CAAC,CAAC,CAAwC,CAAC;EAAEC;AAAoB,CAAC,MAAM;EACtE+E,UAAU,EAAE,QAAQ;EACpB5E,OAAO,EAAE,MAAM;EACfmF,GAAG,EAAEtF,mBAAmB,CAACyD,QAAQ;EACjCO,YAAY,EAAEhE,mBAAmB,CAACyD,QAAQ;EAC1CD,aAAa,EAAExD,mBAAmB,CAACkE;AACrC,CAAC,CAAC,CAAC;AAEH,MAAMqB,uBAAuB,GAAIC,mBAAgC,IAC/DA,mBAAmB,CAACC,YAAY,GAAGD,mBAAmB,CAACE,YAAY;AAErE,MAAMC,WAAW,GAAGA,CAAA,KAAM;EACxB,MAAM3F,mBAAiC,GAAG,IAAA4F,kDAAsB,EAAC,CAAC;EAClE,OACE,IAAAvG,WAAA,CAAAwG,IAAA,EAACR,0BAA0B;IAACrF,mBAAmB,EAAEA,mBAAoB;IAAA8F,QAAA,GACnE,IAAAzG,WAAA,CAAA0G,GAAA,EAAAC,UAAA,CAAAxG,OAAA;MACEyG,OAAO,EAAC,UAAU;MAClB5E,KAAK,EAAErB,mBAAmB,CAACkE,QAAS;MACpC5D,MAAM,EAAEN,mBAAmB,CAACkE;IAAS,CACtC,CAAC,EACF,IAAA7E,WAAA,CAAA0G,GAAA,EAAAC,UAAA,CAAAxG,OAAA;MAAUyG,OAAO,EAAC,SAAS;MAAC5E,KAAK,EAAC;IAAM,CAAE,CAAC;EAAA,CACjB,CAAC;AAEjC,CAAC;AAED,MAAM6E,OAAO,GAAGA,CAAC;EACfC,OAAO;EACPC,eAAe;EACfC,WAAW;EACXC,eAAe;EACfC,sBAAsB;EACtBC,aAAa;EACbC,WAAW,GAAG,KAAK;EACnBC,SAAS;EACTC,SAAS;EACTC,WAAW;EACXC,SAAS;EACTC,UAAU;EACVC,QAAQ;EACRC,MAAM;EACNC;AACY,CAAC,KAAK;EAClB,MAAM,CAACtE,kBAAkB,EAAEuE,qBAAqB,CAAC,GAAG,IAAAC,eAAQ,EAAC,KAAK,CAAC;EACnE,MAAM,CAAClG,qBAAqB,EAAEmG,wBAAwB,CAAC,GAAG,IAAAD,eAAQ,EAAC,KAAK,CAAC;EACzE,MAAM,CAAC7C,mBAAmB,EAAE+C,sBAAsB,CAAC,GAAG,IAAAF,eAAQ,EAAC,KAAK,CAAC;EACrE,MAAM,CAAChG,0BAA0B,EAAEmG,6BAA6B,CAAC,GAC/D,IAAAH,eAAQ,EAAC,KAAK,CAAC;EACjB,MAAM,CAACI,gBAAgB,EAAEC,sBAAsB,CAAC,GAAG,IAAAL,eAAQ,EACzDF,YAAY,IAAI,EAClB,CAAC;EAED,MAAM,CAACQ,4BAA4B,EAAEC,+BAA+B,CAAC,GACnE,IAAAP,eAAQ,EAACV,WAAW,CAAC;EAEvB,MAAM;IACJkB,YAAY,EAAEC,8BAA8B;IAC5CC,eAAe,EAAEC;EACnB,CAAC,GAAG,IAAAC,wEAAmC,EAACtB,WAAW,CAAC;EAEpD,MAAMxG,kBAAkB,GAAGsG,sBAAsB,GAC7CqB,8BAA8B,GAC9BH,4BAA4B;EAChC,MAAMO,qBAAqB,GAAGzB,sBAAsB,GAChDuB,iCAAiC,GACjCJ,+BAA+B;EAEnC,MAAMO,cAAc,GAAG,IAAAC,kCAAiB,EAAC,CAAC;EAC1C,MAAMlI,mBAAiC,GAAG,IAAA4F,kDAAsB,EAAC,CAAC;EAClE,MAAM;IAAEuC;EAAE,CAAC,GAAG,IAAAC,4BAAc,EAAC,CAAC;EAE9B,MAAMC,oBAAoB,GAAG,IAAAC,aAAM,EAAmB,IAAI,CAAC;EAC3D,MAAMC,iBAAiB,GAAG,IAAAD,aAAM,EAAwB,IAAI,CAAC;EAC7D,MAAME,uBAAuB,GAAG,IAAAF,aAAM,EAA8B,IAAI,CAAC;EACzE,MAAMG,UAAU,GAAG,IAAAH,aAAM,EAAiB,IAAI,CAAC;EAE/C,MAAMI,YAAY,GAAG,IAAAC,cAAO,EAAC,MAAM,IAAAtJ,WAAA,CAAA0G,GAAA,WAAM,CAAC,EAAE,EAAE,CAAC;EAK/C,IAAA6C,gBAAS,EAAC,MAAMpB,sBAAsB,CAACP,YAAY,IAAI,EAAE,CAAC,EAAE,CAACA,YAAY,CAAC,CAAC;EAG3E,IAAA2B,gBAAS,EAAC,MAAM;IACd,IAAIH,UAAU,CAACI,OAAO,EAAE;MACtBzB,wBAAwB,CACtBqB,UAAU,CAACI,OAAO,CAACC,qBAAqB,CAAC,CAAC,CAACC,CAAC,GAAG,CACjD,CAAC;IACH;EAEF,CAAC,EAAE,CAACtC,WAAW,CAAC,CAAC;EAGjB,MAAMuC,OAAO,GAAG,IAAAC,kBAAW,EAAC,MAAM;IAChC,IAAI,CAACzC,aAAa,EAAE;MAClBwB,qBAAqB,CAACvB,WAAW,CAAC;IACpC;EACF,CAAC,EAAE,CAACA,WAAW,EAAED,aAAa,EAAEwB,qBAAqB,CAAC,CAAC;EAEvD,MAAMkB,QAAQ,GAAG,IAAAD,kBAAW,EAAC,MAAM;IACjCjB,qBAAqB,CAACvB,WAAW,CAAC;EACpC,CAAC,EAAE,CAACA,WAAW,EAAEuB,qBAAqB,CAAC,CAAC;EAExC,IAAAmB,gDAAuB,EAAC;IACtBH,OAAO;IACPE;EACF,CAAC,CAAC;EAEF,IAAAN,gBAAS,EAAC,MAAM;IAEd,MAAMQ,yBAAyB,GAAGA,CAAA,KAAM;MACtC,IACEf,oBAAoB,CAACQ,OAAO,IAC5BR,oBAAoB,CAACQ,OAAO,CAACQ,aAAa,EAC1C;QACAhC,sBAAsB,CACpB9B,uBAAuB,CAAC8C,oBAAoB,CAACQ,OAAO,CAACQ,aAAa,CACpE,CAAC;MACH;IACF,CAAC;IAID,IAAIC,2BAAqE;IACzE,IAAI,CAACf,iBAAiB,CAACM,OAAO,EAAE;MAC9BN,iBAAiB,CAACM,OAAO,GAAG,IAAIU,cAAc,CAAC,MAAM;QACnDC,oBAAoB,CAACF,2BAA2B,CAAC;QACjDA,2BAA2B,GAAGG,qBAAqB,CACjDL,yBACF,CAAC;MACH,CAAC,CAAC;IACJ;IAEA,IAAIb,iBAAiB,CAACM,OAAO,IAAIR,oBAAoB,CAACQ,OAAO,EAAE;MAE7DN,iBAAiB,CAACM,OAAO,CAACa,OAAO,CAACrB,oBAAoB,CAACQ,OAAO,CAAC;MAC/D,IAAIR,oBAAoB,CAACQ,OAAO,CAACQ,aAAa,EAAE;QAE9Cd,iBAAiB,CAACM,OAAO,CAACa,OAAO,CAC/BrB,oBAAoB,CAACQ,OAAO,CAACQ,aAC/B,CAAC;MACH;IACF;IAGAD,yBAAyB,CAAC,CAAC;IAI3B,IAAI,CAACZ,uBAAuB,CAACK,OAAO,IAAIR,oBAAoB,CAACQ,OAAO,EAAE;MACpEL,uBAAuB,CAACK,OAAO,GAAG,IAAIc,oBAAoB,CACvDC,OAAO,IAAK;QAIX,MAAMC,cAAc,GAAGD,OAAO,CAC3BE,KAAK,CAAC,CAAC,CACPC,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKD,CAAC,CAACE,IAAI,GAAGD,CAAC,CAACC,IAAI,CAAC,CAC/BC,EAAE,CAAC,CAAC,CAAC,EAAEN,cAAc;QACxB3C,qBAAqB,CAAC,CAAC2C,cAAc,CAAC;MACxC,CAAC,EACD;QACEO,IAAI,EAAE/B,oBAAoB,CAACQ,OAAO,CAACQ,aAAa;QAChDgB,SAAS,EAAE;MACb,CACF,CAAC;IACH;IAEA,IAAI7B,uBAAuB,CAACK,OAAO,IAAIR,oBAAoB,CAACQ,OAAO,EAAE;MACnE,MAAMyB,SAAS,GAAGjC,oBAAoB,CAACQ,OAAO;MAC9C,MAAM,CAAC0B,SAAS,CAAC,GAAGC,KAAK,CAACC,IAAI,CAACH,SAAS,EAAExE,QAAQ,IAAI,EAAE,CAAC;MAEzD,IAAIyE,SAAS,EAAE;QACb/B,uBAAuB,CAACK,OAAO,CAACa,OAAO,CAACa,SAAS,CAAC;MACpD;IACF;IAGA,OAAO,MAAM;MACX,IAAIhC,iBAAiB,CAACM,OAAO,EAAE;QAC7BN,iBAAiB,CAACM,OAAO,CAAC6B,UAAU,CAAC,CAAC;QACtCnC,iBAAiB,CAACM,OAAO,GAAG,IAAI;MAClC;MACA,IAAIL,uBAAuB,CAACK,OAAO,EAAE;QACnCL,uBAAuB,CAACK,OAAO,CAAC6B,UAAU,CAAC,CAAC;QAC5ClC,uBAAuB,CAACK,OAAO,GAAG,IAAI;MACxC;MACAW,oBAAoB,CAACF,2BAA2B,CAAC;IACnD,CAAC;EACH,CAAC,EAAE,CAAC/B,gBAAgB,CAAC,CAAC;EAEtB,MAAMoD,iBAAiB,GAAG,IAAArC,aAAM,EAAgB,IAAI,CAAC;EAMrD,MAAMsC,gCAAgC,GAAG,IAAAjC,cAAO,EAAC,MAAM;IACrD,MAAMkC,cAAc,GAAGtD,gBAAgB,CAACuD,OAAO,CAAEC,WAAW,IAC1DA,WAAW,CAACC,cAAc,GACtB,CAACD,WAAW,EAAE,GAAGA,WAAW,CAACC,cAAc,CAAC,GAC5CD,WACN,CAAC;IACD,MAAME,uBAAuB,GAAGJ,cAAc,CAACK,IAAI,CAChDH,WAAW,IAAKA,WAAW,CAACI,UAC/B,CAAC;IACD,OAAOF,uBAAuB,EAAEG,EAAE;EACpC,CAAC,EAAE,CAAC7D,gBAAgB,CAAC,CAAC;EAMtB,IAAAqB,gBAAS,EAAC,MAAM;IACd,IAAIgC,gCAAgC,IAAID,iBAAiB,CAAC9B,OAAO,EAAE;MACjE8B,iBAAiB,CAAC9B,OAAO,CAACwC,cAAc,CAAC,CAAC;IAC5C;EACF,CAAC,EAAE,CAACT,gCAAgC,CAAC,CAAC;EAOtC,MAAMU,qCAAqC,GAAG,IAAArC,kBAAW,EACtDsC,MAAc,IACbA,MAAM,KAAKX,gCAAgC,GACvCD,iBAAiB,GACjBa,SAAS,EACf,CAACZ,gCAAgC,CACnC,CAAC;EAED,MAAMa,+BAA+B,GAAG,IAAA9C,cAAO,EAC7C,OAAO;IAAEjC,SAAS;IAAEgF,KAAK,EAAE;EAAE,CAAC,CAAC,EAC/B,CAAChF,SAAS,CACZ,CAAC;EAED,MAAMiF,eAAe,GAAG,IAAA1C,kBAAW,EAChC2C,cAAsB,IAAK;IAC1B,MAAMC,mBAAmB,GAAGtE,gBAAgB,CAACuE,GAAG,CAAEC,IAAI,IAAK;MACzD,IAAIA,IAAI,CAACX,EAAE,KAAKQ,cAAc,EAAE;QAC9BG,IAAI,CAACZ,UAAU,GAAG,IAAI;MACxB,CAAC,MAAM,IAAIY,IAAI,CAACZ,UAAU,EAAE;QAC1B,OAAOY,IAAI,CAACZ,UAAU;MACxB;MAEA,OAAOY,IAAI,CAACf,cAAc,GACtB;QACE,GAAGe,IAAI;QACPf,cAAc,EAAEe,IAAI,CAACf,cAAc,CAACc,GAAG,CAAEE,SAAS,IAAK;UACrD,IAAIA,SAAS,CAACZ,EAAE,KAAKQ,cAAc,EAAE;YACnCI,SAAS,CAACb,UAAU,GAAG,IAAI;UAC7B,CAAC,MAAM,IAAIa,SAAS,CAACb,UAAU,EAAE;YAC/B,OAAOa,SAAS,CAACb,UAAU;UAC7B;UACA,OAAOa,SAAS;QAClB,CAAC;MACH,CAAC,GACDD,IAAI;IACV,CAAC,CAAC;IACFvE,sBAAsB,CAACqE,mBAAmB,CAAC;IAE3C,IAAIpF,WAAW,IAAIG,WAAW,EAAE;MAC9B,IAAIJ,aAAa,EAAE;QACjByB,cAAc,EAAEgE,gBAAgB,CAAC,CAAC;MACpC,CAAC,MAAM;QACLnF,UAAU,GAAG,CAAC;MAChB;IACF;EACF,CAAC,EACD,CACEL,WAAW,EACXD,aAAa,EACbI,WAAW,EACXE,UAAU,EACVS,gBAAgB,EAChBU,cAAc,CAElB,CAAC;EAED,MAAMiE,qBAAqB,GAAG,IAAAvD,cAAO,EAAC,MAAM;IAC1C,OAAOpB,gBAAgB,EAAEuE,GAAG,CAAEC,IAAI,KAAM;MACtC,GAAGA,IAAI;MACPI,aAAa,EAAEJ,IAAI,CAACf,cAAc,EAAEc,GAAG,CAAEM,UAAU,KAAM;QACvDhB,EAAE,EAAEgB,UAAU,CAAChB,EAAE;QACjBD,UAAU,EAAEiB,UAAU,CAACjB,UAAU;QACjCkB,UAAU,EAAED,UAAU,CAACC,UAAU;QACjCC,UAAU,EAAEF,UAAU,CAACE,UAAU;QACjCC,OAAO,EACL,IAAAlN,WAAA,CAAA0G,GAAA,EAAClH,0BAAA,CAAA2N,yBAAyB,CAACC,QAAQ;UAEjCC,KAAK,EAAE;YACL,GAAGjB,+BAA+B;YAClCC,KAAK,EAAE,CAAC;YACRY,UAAU,EAAEP,IAAI,CAACO;UACnB,CAAE;UAAAxG,QAAA,EAEF,IAAAzG,WAAA,CAAA0G,GAAA,EAACpH,mBAAA,CAAAgO,kBAAkB;YAAA,GACbP,UAAU;YACdQ,cAAc,EAAEjB,eAAgB;YAChCkB,SAAS,EAAEvB,qCAAqC,CAACc,UAAU,CAAChB,EAAE,CAAE;YAChE0B,SAAS,EAAEV,UAAU,CAACU;UAAU,CACjC;QAAC,GAZGV,UAAU,CAAChB,EAakB;MAExC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;EACL,CAAC,EAAE,CACDE,qCAAqC,EACrCK,eAAe,EACfF,+BAA+B,EAC/BlE,gBAAgB,CACjB,CAAC;EAEF,MAAMwF,yBAAyB,GAAG,IAAA9D,kBAAW,EAAC,MAAM;IAClDjB,qBAAqB,CAAE/H,kBAAkB,IAAK;MAC5C,IAAIA,kBAAkB,EAAE;QACtB8G,QAAQ,GAAG,CAAC;MACd,CAAC,MAAM;QACLD,UAAU,GAAG,CAAC;MAChB;MAEA,OAAO,CAAC7G,kBAAkB;IAC5B,CAAC,CAAC;EACJ,CAAC,EAAE,CAAC6G,UAAU,EAAEC,QAAQ,EAAEiB,qBAAqB,CAAC,CAAC;EAEjD,MAAMgF,uBAAuB,GAAG,IAAA/D,kBAAW,EAGxCgE,KAAK,IAAK;IACT,IAAIA,KAAK,EAAEC,GAAG,KAAK,OAAO,IAAID,KAAK,EAAEE,IAAI,KAAK,OAAO,EAAE;MACrDF,KAAK,CAACG,cAAc,CAAC,CAAC;MACtBL,yBAAyB,CAAC,CAAC;IAC7B;EACF,CAAC,EACD,CAACA,yBAAyB,CAC5B,CAAC;EAED,IAAAnE,gBAAS,EAAC,MAAM;IACd,MAAMyE,WAAW,GAAGpF,cAAc,EAAEqF,2BAA2B,CAAC,MAAM;MACpExG,UAAU,GAAG,CAAC;MACdkB,qBAAqB,CAAC,IAAI,CAAC;IAC7B,CAAC,CAAC;IAEF,OAAO,MAAM;MACXqF,WAAW,GAAG,CAAC;IACjB,CAAC;EACH,CAAC,EAAE,CAACvG,UAAU,EAAEkB,qBAAqB,EAAEC,cAAc,CAAC,CAAC;EAEvD,MAAMsF,cAAc,GAAG,IAAAtE,kBAAW,EAChC,CACEuE,QAAgB,EAChBC,QAA0B,EAC1BC,WAAmB,EACnBC,SAAiB,KACd;IACH,MAAMC,kBAAkB,GAAGrG,gBAAgB,CAACuE,GAAG,CAAEC,IAAI,IACnDA,IAAI,CAACX,EAAE,KAAKoC,QAAQ,IAAIzB,IAAI,CAACf,cAAc,GACvC;MACE,GAAGe,IAAI;MACPf,cAAc,EAAE,IAAA6C,mBAAS,EACvB9B,IAAI,CAACf,cAAc,EACnB0C,WAAW,EACXC,SACF;IACF,CAAC,GACD5B,IACN,CAAC;IACDvE,sBAAsB,CAACoG,kBAAkB,CAAC;IAC1C5G,MAAM,GAAG4G,kBAAkB,EAAEJ,QAAQ,EAAEC,QAAQ,EAAEC,WAAW,EAAEC,SAAS,CAAC;EAC1E,CAAC,EACD,CAAC3G,MAAM,EAAEO,gBAAgB,CAC3B,CAAC;EAED,MAAMuG,8BAA8B,GAAG,IAAA7E,kBAAW,EAE/C8E,aAAa,IAAK;IACnBzG,6BAA6B,CAACyG,aAAa,CAAC;EAC9C,CAAC,EAAE,EAAE,CAAC;EAEN,OACE,IAAA1O,WAAA,CAAAwG,IAAA,EAAC9E,sBAAsB;IACrB,cAAYoH,CAAC,CAAC,kBAAkB,CAAE;IAClCnH,eAAe,EAAEiH,cAAc,EAAE7D,sBAAuB;IACxDnD,qBAAqB,EAAEA,qBAAsB;IAC7CmK,EAAE,EAAC,qBAAqB;IACxBlK,2BAA2B,EACzB+G,cAAc,EAAE+F,kBAAkB,KAClChO,mBAAmB,CAACoB,eACrB;IACDnB,kBAAkB,EAAEA,kBAAmB;IACvCkB,0BAA0B,EAAEA,0BAA2B;IACvDnB,mBAAmB,EAAEA,mBAAoB;IACzCiO,GAAG,EAAExF,UAAW;IAAA3C,QAAA,GAEfU,aAAa,IACZ,IAAAnH,WAAA,CAAA0G,GAAA,EAACxD,kCAAkC;MACjCtB,qBAAqB,EAAEA,qBAAsB;MAC7ChB,kBAAkB,EAAEA,kBAAmB;MACvCkB,0BAA0B,EAAEA,0BAA2B;MACvDnB,mBAAmB,EAAEA,mBAAoB;MAAA8F,QAAA,EAEzC,IAAAzG,WAAA,CAAA0G,GAAA,EAACjH,oBAAA,CAAAoP,mBAAmB;QAClBC,gBAAgB,EACdlO,kBAAkB,IAAI,CAACgB,qBAAqB,GACxCmN,8CAAyB,GAAG,CAAC,GAC7B,CACL;QACDC,YAAY,EAAC,qBAAqB;QAClCpO,kBAAkB,EAAEA,kBAAmB;QACvCqO,OAAO,EAAEvB,yBAA0B;QACnCwB,WAAW,EAAET,8BAA+B;QAC5CU,SAAS,EAAExB;MAAwB,CACpC;IAAC,CACgC,CACrC,EAED,IAAA3N,WAAA,CAAA0G,GAAA,EAACtH,qBAAA,CAAAgQ,oBAAoB;MAAA3I,QAAA,EACnB,IAAAzG,WAAA,CAAA0G,GAAA,EAACnG,wBAAwB;QACvB,WAAQ,oBAAoB;QAC5BK,kBAAkB,EAAEA,kBAAmB;QACvCD,mBAAmB,EAAEA,mBAAoB;QAAA8F,QAAA,EAEzC,IAAAzG,WAAA,CAAAwG,IAAA,EAAChF,gCAAgC;UAC/BZ,kBAAkB,EAAEA,kBAAmB;UACvCD,mBAAmB,EAAEA,mBAAoB;UAAA8F,QAAA,GAExCK,OAAO,IAAIQ,SAAS,IAAIE,SAAS,GAChC,IAAAxH,WAAA,CAAA0G,GAAA,EAACtD,4BAA4B;YAC3BE,kBAAkB,EAAEA,kBAAmB;YACvC3C,mBAAmB,EAAEA,mBAAoB;YACzC0C,WAAW,EAAEuF,cAAc,EAAEpD,qBAAqB,EAAEK,SAAU;YAAAY,QAAA,EAE7Da,SAAS,IAAI,CAACR,OAAO,IAAI,CAACU,SAAS,GAClC,IAAAxH,WAAA,CAAA0G,GAAA,EAACrH,cAAA,CAAAgQ,aAAa;cAAC/H,SAAS,EAAEA;YAAU,CAAE,CAAC,GAEvC,IAAAtH,WAAA,CAAA0G,GAAA,EAACrH,cAAA,CAAAgQ,aAAa;cACZvI,OAAO,EAAEA,OAAQ;cACjBQ,SAAS,EAAEA,SAAU;cACrBE,SAAS,EAAEA;YAAU,CACtB;UACF,CAC2B,CAAC,GAE/B,IAAAxH,WAAA,CAAA0G,GAAA,WAAM,CACP,EAED,IAAA1G,WAAA,CAAAwG,IAAA,EAACvC,gCAAgC;YAC/BtD,mBAAmB,EAAEA,mBAAoB;YACzC,WAAQ,mBAAmB;YAAA8F,QAAA,GAE3B,IAAAzG,WAAA,CAAA0G,GAAA,EAAC9C,0BAA0B;cACzB0L,IAAI,EAAC,MAAM;cACXV,GAAG,EAAE5F,oBAAqB;cAAAvC,QAAA,EAEzBa,SAAS,GACN6D,KAAK,CAAC,CAAC,CAAC,CACLoE,IAAI,CAAC,IAAI,CAAC,CACV9C,GAAG,CAAC,CAAC+C,CAAC,EAAEC,KAAK,KAAK,IAAAzP,WAAA,CAAA0G,GAAA,EAACJ,WAAW,MAAMmJ,KAAQ,CAAC,CAAC,GACjD5C,qBAAqB,EAAEJ,GAAG,CAAEC,IAAI,IAAK;gBACnC,MAAM;kBACJI,aAAa;kBACb4C,IAAI;kBACJ3D,EAAE;kBACF4D,iBAAiB;kBACjB3C,UAAU;kBACV4C,UAAU;kBACVC,eAAe;kBACf5C,UAAU;kBACV6C,KAAK;kBACLC;gBACF,CAAC,GAAGrD,IAAI;gBAER,IAAImD,eAAe,EAAE;kBACnB,OACE,IAAA7P,WAAA,CAAA0G,GAAA,EAACzH,mBAAA,CAAA+Q,aAAa;oBAACC,QAAQ,EAAE5G,YAAa;oBAAA5C,QAAA,EACpC,IAAAzG,WAAA,CAAA0G,GAAA,EAACrC,4BAA4B;sBAC3BC,iBAAiB,EACfsE,cAAc,EAAEpD,qBAAqB,EAAEK,SACxC;sBACDkG,EAAE,EAAEA,EAAG;sBACPpL,mBAAmB,EAAEA,mBAAoB;sBAAA8F,QAAA,EAEzC,IAAAzG,WAAA,CAAA0G,GAAA,EAAC/G,WAAA,CAAAuQ,QAAQ;wBAACC,SAAS,EAAC,IAAI;wBAAA1J,QAAA,EAAEqJ;sBAAK,CAAW;oBAAC,CACf;kBAAC,GATW/D,EAU7B,CAAC;gBAEpB,CAAC,MAAM,IAAIe,aAAa,EAAE;kBACxB,MAAMsD,cAAc,GAClB,IAAApQ,WAAA,CAAA0G,GAAA,EAAC9C,0BAA0B;oBAAC0L,IAAI,EAAC,cAAc;oBAAA7I,QAAA,EAC5CwG,UAAU,GACT,IAAAjN,WAAA,CAAA0G,GAAA,EAAChH,aAAA,CAAA2Q,YAAY;sBACXlC,QAAQ,EAAEzB,IAAI,CAACX,EAAG;sBAClBuE,KAAK,EAAExD,aAAc;sBACrByD,QAAQ,EAAErC,cAAe;sBACzBsC,UAAU,EAAGC,YAAY,IACvB,IAAAzQ,WAAA,CAAA0G,GAAA,EAAChH,aAAA,CAAA2Q,YAAY,CAACK,IAAI;wBAChB3E,EAAE,EAAE0E,YAAY,CAAC1E,EAAG;wBACpBiB,UAAU,EAAEyD,YAAY,CAACzD,UAAW;wBACpClB,UAAU,EAAE2E,YAAY,CAAC3E,UAAW;wBACpCmB,UAAU,EAAEwD,YAAY,CAACxD,UAAW;wBAAAxG,QAAA,EAEnCgK,YAAY,CAACvD;sBAAO,CACJ;oBACnB,CACH,CAAC,GAEFJ,aAAa,CAACL,GAAG,CAAEC,IAAI,IAAKA,IAAI,CAACQ,OAAO;kBACzC,CACyB,CAC7B;kBAED,OAAOwC,IAAI,GACT,IAAA1P,WAAA,CAAAwG,IAAA,EAACvH,mBAAA,CAAA+Q,aAAa;oBAACC,QAAQ,EAAE5G,YAAa;oBAAA5C,QAAA,GACpC,IAAAzG,WAAA,CAAA0G,GAAA,EAACpH,mBAAA,CAAAgO,kBAAkB;sBAAA,GACbZ,IAAI;sBACRgD,IAAI,EAAEA,IAAK;sBACXnC,cAAc,EAAEjB,eAAgB;sBAChCkB,SAAS,EAAEvB,qCAAqC,CAC9CS,IAAI,CAACX,EACP,CAAE;sBACFgE,SAAS,EAAErD,IAAI,CAACqD;oBAAU,CAC3B,CAAC,EAEF,IAAA/P,WAAA,CAAA0G,GAAA,EAACpH,mBAAA,CAAAqR,qBAAqB;sBACpB5E,EAAE,EAAE,GAAGA,EAAE,QAAS;sBAClBpL,mBAAmB,EAAEA,mBAAoB;sBACzCiQ,QAAQ,EAAE5D,UAAW;sBACrB,iBAAeA,UAAW;sBAAAvG,QAAA,EAEzB2J;oBAAc,CACM,CAAC;kBAAA,GAlBkBrE,EAmB7B,CAAC,GAEhB,IAAA/L,WAAA,CAAA0G,GAAA,EAACzH,mBAAA,CAAA+Q,aAAa;oBAACC,QAAQ,EAAE5G,YAAa;oBAAA5C,QAAA,EACpC,IAAAzG,WAAA,CAAA0G,GAAA,EAACpH,mBAAA,CAAAqR,qBAAqB;sBACpB5E,EAAE,EAAEA,EAAG;sBACPpL,mBAAmB,EAAEA,mBAAoB;sBACzCiQ,QAAQ,EAAE5D,UAAW;sBACrB,iBAAeA,UAAW;sBAAAvG,QAAA,EAE1B,IAAAzG,WAAA,CAAA0G,GAAA,EAACxH,aAAA,CAAA2R,YAAY;wBACXf,KAAK,EAAEA,KAAM;wBACbzI,SAAS,EAAEA,SAAU;wBACrBsI,iBAAiB,EAAEA,iBAAkB;wBACrCC,UAAU,EAAEA,UAAW;wBACvBG,SAAS,EAAEA,SAAU;wBACrB/C,UAAU,EAAEA,UAAW;wBAAAvG,QAAA,EAEtB2J;sBAAc,CACH;oBAAC,CACM;kBAAC,GAjBkBrE,EAkB7B,CAChB;gBACH,CAAC,MAAM;kBACL,OACE,IAAA/L,WAAA,CAAA0G,GAAA,EAACzH,mBAAA,CAAA+Q,aAAa;oBAACC,QAAQ,EAAE5G,YAAa;oBAAA5C,QAAA,EACpC,IAAAzG,WAAA,CAAA0G,GAAA,EAAClH,0BAAA,CAAA2N,yBAAyB,CAACC,QAAQ;sBACjCC,KAAK,EAAEjB,+BAAgC;sBAAA3F,QAAA,EAEvC,IAAAzG,WAAA,CAAA0G,GAAA,EAACpH,mBAAA,CAAAgO,kBAAkB;wBAAA,GACbZ,IAAI;wBACRa,cAAc,EAAEjB,eAAgB;wBAChCkB,SAAS,EAAEvB,qCAAqC,CAC9CS,IAAI,CAACX,EACP,CAAE;wBACFgE,SAAS,EAAErD,IAAI,CAACqD;sBAAU,CAC3B;oBAAC,CACgC;kBAAC,GAZKrD,IAAI,CAACX,EAalC,CAAC;gBAEpB;cACF,CAAC;YAAC,CACoB,CAAC,EAC5B,CAACzE,SAAS,IAAIN,WAAW,IAAI,CAACC,eAAe,IAC5C,IAAAjH,WAAA,CAAA0G,GAAA,EAAC5B,mBAAmB;cAClBnE,mBAAmB,EAAEA,mBAAoB;cACzCoE,sBAAsB,EACpB6D,cAAc,EAAE7D,sBACjB;cAAA0B,QAAA,EAED,IAAAzG,WAAA,CAAA0G,GAAA,EAACnB,iCAAiC;gBAChC5E,mBAAmB,EAAEA,mBAAoB;gBACzC6E,qBAAqB,EACnBoD,cAAc,EAAEpD,qBACjB;gBAAAiB,QAAA,EAED,IAAAzG,WAAA,CAAA0G,GAAA,EAACnH,qBAAA,CAAAuR,oBAAoB;kBAAC9J,WAAW,EAAEA;gBAAY,CAAE;cAAC,CACjB;YAAC,CACjB,CACtB;UAAA,CAC+B,CAAC,EAClC,CAACM,SAAS,IAAI,CAACN,WAAW,IAAIC,eAAe,IAC5C,IAAAjH,WAAA,CAAA0G,GAAA,EAAC1B,6BAA6B;YAC5BC,mBAAmB,EAAEA,mBAAoB;YACzCtE,mBAAmB,EAAEA,mBAAoB;YACzCoE,sBAAsB,EAAE6D,cAAc,EAAE7D,sBAAuB;YAAA0B,QAAA,EAE9DM;UAAe,CACa,CAChC;QAAA,CAC+B;MAAC,CACX;IAAC,CACP,CAAC;EAAA,CACD,CAAC;AAE7B,CAAC;AAED,MAAMgK,eAAe,GAAA1Q,OAAA,CAAAwG,OAAA,GAAG,IAAAmK,WAAI,EAACnK,OAAO,CAAC;AACrCkK,eAAe,CAACE,WAAW,GAAG,SAAS","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"SideNav.cjs","names":["_styled","_interopRequireDefault","require","_react","_reactI18next","_sortable","_reactErrorBoundary","_NavAccordion","_OdysseyDesignTokensContext","_useElementAtContainerEdge","_OdysseyThemeProvider","_SideNavHeader","_SideNavItemContent","_SideNavFooterContent","_SideNavItemContentContext","_SideNavToggleButton","_SortableList","_Typography","_UiShellProvider","_uiShellSharedConstants","_useIsSideNavCollapsedSessionStorage","_useMountLifecycleEffect","_jsxRuntime","e","__esModule","default","SIDE_NAV_COLLAPSED_PADDING_HIGHLIGHTED","exports","SIDE_NAV_COLLAPSED_PADDING_UNHIGHLIGHTED","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","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","onCollapse","onExpand","onSort","sideNavItems","setHasContentScrolled","useState","setIsContentScrollable","setIsSideNavToggleHighlighted","sideNavItemsList","updateSideNavItemsList","isSideNavCollapsedLocalState","setIsSideNavCollapsedLocalState","sessionState","isSideNavCollapsedSessionState","setSessionState","setIsSideNavCollapsedSessionState","useIsSideNavCollapsedSessionStorage","setIsSideNavCollapsed","uiShellContext","useUiShellContext","t","useTranslation","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","flatMap","sideNavItem","nestedNavItems","firstItemWithIsSelected","find","isSelected","id","scrollIntoView","getRefIfThisIsFirstNodeWithIsSelected","itemId","undefined","sideNavItemContentProviderValue","depth","setSelectedItem","selectedItemId","updatedSideNavItems","map","item","childItem","closeSideNavMenu","processedSideNavItems","childNavItems","childProps","isDisabled","isSortable","navItem","SideNavItemContentContext","Provider","value","SideNavItemContent","onItemSelected","scrollRef","translate","sideNavExpandClickHandler","sideNavExpandKeyHandler","event","key","code","preventDefault","unsubscribe","subscribeToCloseSideNavMenu","setSortedItems","parentId","activeId","activeIndex","overIndex","sortedSideNavItems","arrayMove","onSideNavToggleButtonHighlight","isHighlighted","appBackgroundColor","ref","SideNavToggleButton","clickAreaPadding","SIDE_NAV_TOGGLE_ICON_SIZE","ariaControls","onClick","onHighlight","onKeyDown","OdysseyThemeProvider","SideNavHeader","role","fill","_","index","href","isDefaultExpanded","isExpanded","isSectionHeader","label","startIcon","ErrorBoundary","fallback","Overline","component","nestedChildren","SortableList","items","onChange","renderItem","sortableItem","Item","StyledSideNavListItem","disabled","NavAccordion","SideNavFooterContent","MemoizedSideNav","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 styled from \"@emotion/styled\";\nimport {\n memo,\n useMemo,\n useState,\n useCallback,\n useRef,\n useEffect,\n KeyboardEventHandler,\n CSSProperties,\n} from \"react\";\nimport { Skeleton } from \"@mui/material\";\nimport { useTranslation } from \"react-i18next\";\nimport { arrayMove } from \"@dnd-kit/sortable\";\nimport { UniqueIdentifier } from \"@dnd-kit/core\";\nimport { ErrorBoundary } from \"react-error-boundary\";\nimport { Property } from \"csstype\";\n\nimport { ContrastColors } from \"../../createContrastColors.js\";\nimport { NavAccordion } from \"./NavAccordion.js\";\nimport {\n DesignTokens,\n useOdysseyDesignTokens,\n} from \"../../OdysseyDesignTokensContext.js\";\nimport { useElementAtContainerEdge } from \"../useElementAtContainerEdge.js\";\nimport { OdysseyThemeProvider } from \"../../OdysseyThemeProvider.js\";\nimport type { SideNavProps } from \"./types.js\";\nimport { SideNavHeader } from \"./SideNavHeader.js\";\nimport {\n SideNavItemContent,\n StyledSideNavListItem,\n} from \"./SideNavItemContent.js\";\nimport { SideNavFooterContent } from \"./SideNavFooterContent.js\";\nimport { SideNavItemContentContext } from \"./SideNavItemContentContext.js\";\nimport {\n SIDE_NAV_TOGGLE_ICON_HALF_SIZE,\n SIDE_NAV_TOGGLE_ICON_SIZE,\n SideNavToggleButton,\n SideNavToggleButtonProps,\n} from \"./SideNavToggleButton.js\";\nimport { SortableList } from \"./SortableList/SortableList.js\";\nimport { Overline } from \"../../Typography.js\";\nimport {\n UiShellColors,\n useUiShellContext,\n} from \"../../ui-shell/UiShellProvider.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 { useIsSideNavCollapsedSessionStorage } from \"./useIsSideNavCollapsedSessionStorage.js\";\nimport { useMountLifecycleEffect } from \"../../useMountLifecycleEffect.js\";\n\nexport const SIDE_NAV_COLLAPSED_PADDING_HIGHLIGHTED = 12;\nexport const SIDE_NAV_COLLAPSED_PADDING_UNHIGHLIGHTED = 2;\n\nconst StyledCollapsibleContent = styled(\"div\", {\n shouldForwardProp: (prop) =>\n prop !== \"odysseyDesignTokens\" && prop !== \"isSideNavCollapsed\",\n})<{\n odysseyDesignTokens: DesignTokens;\n isSideNavCollapsed: boolean;\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 odysseyDesignTokens: DesignTokens;\n isSideNavCollapsed: boolean;\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 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})<{ odysseyDesignTokens: DesignTokens; hasBlockStartPadding?: boolean }>(\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(\"div\", {\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 variant=\"circular\"\n width={odysseyDesignTokens.Spacing4}\n height={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 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 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\n // the very first value. Subsequent updates to the prop (sideNavItems) need to cause the state\n // 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\n // 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\n // 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\n * with isSelected. This should be the node we set a ref on in order to\n * call scrollIntoView in the effect\n */\n const firstSideNavItemIdWithIsSelected = useMemo(() => {\n const flattenedItems = sideNavItemsList.flatMap((sideNavItem) =>\n sideNavItem.nestedNavItems\n ? [sideNavItem, ...sideNavItem.nestedNavItems]\n : sideNavItem,\n );\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.\n * This must rely on checking firstSideNavItemIdWithIsSelected or it will not run\n * 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.\n * This function returns the ref only if the ID provided matches the first\n * 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 sideNavItemContentProviderValue = useMemo(\n () => ({ isCompact, depth: 1 }),\n [isCompact],\n );\n\n const setSelectedItem = useCallback(\n (selectedItemId: string) => {\n const updatedSideNavItems = sideNavItemsList.map((item) => {\n if (item.id === selectedItemId) {\n item.isSelected = true;\n } else if (item.isSelected) {\n delete item.isSelected;\n }\n\n return item.nestedNavItems\n ? {\n ...item,\n nestedNavItems: item.nestedNavItems.map((childItem) => {\n if (childItem.id === selectedItemId) {\n childItem.isSelected = true;\n } else if (childItem.isSelected) {\n delete childItem.isSelected;\n }\n return childItem;\n }),\n }\n : item;\n });\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 processedSideNavItems = useMemo(() => {\n return sideNavItemsList?.map((item) => ({\n ...item,\n childNavItems: item.nestedNavItems?.map((childProps) => ({\n id: childProps.id,\n isSelected: childProps.isSelected,\n isDisabled: childProps.isDisabled,\n isSortable: childProps.isSortable,\n navItem: (\n <SideNavItemContentContext.Provider\n key={childProps.id}\n value={{\n ...sideNavItemContentProviderValue,\n depth: 2,\n isSortable: item.isSortable,\n }}\n >\n <SideNavItemContent\n {...childProps}\n onItemSelected={setSelectedItem}\n scrollRef={getRefIfThisIsFirstNodeWithIsSelected(childProps.id)}\n translate={childProps.translate}\n />\n </SideNavItemContentContext.Provider>\n ),\n })),\n }));\n }, [\n getRefIfThisIsFirstNodeWithIsSelected,\n setSelectedItem,\n sideNavItemContentProviderValue,\n sideNavItemsList,\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 clickAreaPadding={\n isSideNavCollapsed && !hasNeighbouringContentAtInlineStart\n ? SIDE_NAV_TOGGLE_ICON_SIZE / 2\n : 0\n }\n ariaControls=\"side-nav-expandable\"\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 >\n <StyledOpacityTransitionContainer\n isSideNavCollapsed={isSideNavCollapsed}\n odysseyDesignTokens={odysseyDesignTokens}\n >\n {appName || isLoading || logoProps ? (\n <StyledSideNavHeaderContainer\n hasContentScrolled={hasContentScrolled}\n odysseyDesignTokens={odysseyDesignTokens}\n borderColor={uiShellContext?.sideNavContrastColors?.fontColor}\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 odysseyDesignTokens={odysseyDesignTokens}\n data-se=\"scrollable-region\"\n hasBlockStartPadding={!appName}\n >\n <StyledSideNavListContainer\n role=\"none\"\n ref={scrollableContentRef}\n >\n {isLoading\n ? Array(6)\n .fill(null)\n .map((_, index) => <LoadingItem key={index} />)\n : processedSideNavItems?.map((item) => {\n const {\n childNavItems,\n href,\n id,\n isDefaultExpanded,\n isDisabled,\n isExpanded,\n isSectionHeader,\n isSortable,\n label,\n startIcon,\n } = item;\n\n if (isSectionHeader) {\n return (\n <ErrorBoundary fallback={blankElement} key={id}>\n <StyledSectionHeaderContainer\n contrastFontColor={\n uiShellContext?.sideNavContrastColors?.fontColor\n }\n id={id}\n odysseyDesignTokens={odysseyDesignTokens}\n >\n <Overline component=\"h3\">{label}</Overline>\n </StyledSectionHeaderContainer>\n </ErrorBoundary>\n );\n } else if (childNavItems) {\n const nestedChildren = (\n <StyledSideNavListContainer role=\"presentation\">\n {isSortable ? (\n <SortableList\n parentId={item.id}\n items={childNavItems}\n onChange={setSortedItems}\n renderItem={(sortableItem) => (\n <SortableList.Item\n id={sortableItem.id}\n isDisabled={sortableItem.isDisabled}\n isSelected={sortableItem.isSelected}\n isSortable={sortableItem.isSortable}\n >\n {sortableItem.navItem}\n </SortableList.Item>\n )}\n />\n ) : (\n childNavItems.map((item) => item.navItem)\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(\n item.id,\n )}\n startIcon={item.startIcon}\n />\n\n <StyledSideNavListItem\n id={`${id}-items`}\n odysseyDesignTokens={odysseyDesignTokens}\n disabled={isDisabled}\n aria-disabled={isDisabled}\n >\n {nestedChildren}\n </StyledSideNavListItem>\n </ErrorBoundary>\n ) : (\n <ErrorBoundary fallback={blankElement} key={id}>\n <StyledSideNavListItem\n id={id}\n odysseyDesignTokens={odysseyDesignTokens}\n disabled={isDisabled}\n aria-disabled={isDisabled}\n >\n <NavAccordion\n label={label}\n isCompact={isCompact}\n isDefaultExpanded={isDefaultExpanded}\n isExpanded={isExpanded}\n startIcon={startIcon}\n isDisabled={isDisabled}\n >\n {nestedChildren}\n </NavAccordion>\n </StyledSideNavListItem>\n </ErrorBoundary>\n );\n } else {\n return (\n <ErrorBoundary fallback={blankElement} key={item.id}>\n <SideNavItemContentContext.Provider\n value={sideNavItemContentProviderValue}\n >\n <SideNavItemContent\n {...item}\n onItemSelected={setSelectedItem}\n scrollRef={getRefIfThisIsFirstNodeWithIsSelected(\n item.id,\n )}\n startIcon={item.startIcon}\n />\n </SideNavItemContentContext.Provider>\n </ErrorBoundary>\n );\n }\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 </StyledSideNavScrollableContainer>\n {!isLoading && !footerItems && hasCustomFooter && (\n <StyledPersistentSideNavFooter\n isContentScrollable={isContentScrollable}\n odysseyDesignTokens={odysseyDesignTokens}\n sideNavBackgroundColor={uiShellContext?.sideNavBackgroundColor}\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":[]}
|
|
@@ -30,12 +30,13 @@ const SideNavItemLabelContainer = (0, _styled.default)("div", {
|
|
|
30
30
|
odysseyDesignTokens,
|
|
31
31
|
isIconVisible
|
|
32
32
|
}) => ({
|
|
33
|
-
|
|
33
|
+
alignItems: "center",
|
|
34
34
|
display: "flex",
|
|
35
35
|
flexWrap: "wrap",
|
|
36
|
-
alignItems: "center",
|
|
37
36
|
fontSize: odysseyDesignTokens.TypographySizeBody,
|
|
38
|
-
marginInlineStart: isIconVisible ? odysseyDesignTokens.Spacing3 : 0
|
|
37
|
+
marginInlineStart: isIconVisible ? odysseyDesignTokens.Spacing3 : 0,
|
|
38
|
+
overflowWrap: "anywhere",
|
|
39
|
+
width: "100%"
|
|
39
40
|
}));
|
|
40
41
|
const SideNavItemLinkContent = ({
|
|
41
42
|
count,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SideNavItemLinkContent.cjs","names":["_styled","_interopRequireDefault","require","_react","_OdysseyDesignTokensContext","_Box","_Status","_Badge","_jsxRuntime","e","__esModule","default","SideNavItemLabelContainer","styled","shouldForwardProp","prop","odysseyDesignTokens","isIconVisible","
|
|
1
|
+
{"version":3,"file":"SideNavItemLinkContent.cjs","names":["_styled","_interopRequireDefault","require","_react","_OdysseyDesignTokensContext","_Box","_Status","_Badge","_jsxRuntime","e","__esModule","default","SideNavItemLabelContainer","styled","shouldForwardProp","prop","odysseyDesignTokens","isIconVisible","alignItems","display","flexWrap","fontSize","TypographySizeBody","marginInlineStart","Spacing3","overflowWrap","width","SideNavItemLinkContent","count","label","startIcon","endIcon","severity","statusLabel","translate","useOdysseyDesignTokens","sideNavItemContentStyles","useMemo","gap","Spacing1","Spacing2","jsxs","Fragment","children","Boolean","jsx","Box","sx","Status","Badge","badgeContent","MemoizedSideNavItemLinkContent","exports","memo","displayName"],"sources":["../../../../src/ui-shell/SideNav/SideNavItemLinkContent.tsx"],"sourcesContent":["/*!\n * Copyright (c) 2024-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 styled from \"@emotion/styled\";\nimport { memo, ReactNode, useMemo } from \"react\";\nimport {\n type DesignTokens,\n useOdysseyDesignTokens,\n} from \"../../OdysseyDesignTokensContext.js\";\nimport { Box } from \"../../Box.js\";\nimport { Status } from \"../../Status.js\";\nimport type { SideNavItem } from \"./types.js\";\nimport { Badge } from \"../../Badge.js\";\n\nconst SideNavItemLabelContainer = styled(\"div\", {\n shouldForwardProp: (prop) =>\n prop !== \"odysseyDesignTokens\" && prop !== \"isIconVisible\",\n})<{\n odysseyDesignTokens: DesignTokens;\n isIconVisible: boolean;\n}>(({ odysseyDesignTokens, isIconVisible }) => ({\n alignItems: \"center\",\n display: \"flex\",\n flexWrap: \"wrap\",\n fontSize: odysseyDesignTokens.TypographySizeBody,\n marginInlineStart: isIconVisible ? odysseyDesignTokens.Spacing3 : 0,\n overflowWrap: \"anywhere\", // New way to do `wordBreak: \"break-word\"`. Source: https://developer.mozilla.org/en-US/docs/Web/CSS/word-break#break-word\n width: \"100%\",\n}));\n\nconst SideNavItemLinkContent = ({\n count,\n label,\n startIcon,\n endIcon,\n severity,\n statusLabel,\n translate,\n}: Pick<\n SideNavItem,\n | \"count\"\n | \"label\"\n | \"startIcon\"\n | \"endIcon\"\n | \"severity\"\n | \"statusLabel\"\n | \"translate\"\n>): ReactNode => {\n const odysseyDesignTokens = useOdysseyDesignTokens();\n\n const sideNavItemContentStyles = useMemo(\n () => ({\n alignItems: \"center\",\n display: \"flex\",\n gap: odysseyDesignTokens.Spacing1,\n marginInlineStart: odysseyDesignTokens.Spacing2,\n }),\n [odysseyDesignTokens],\n );\n\n return (\n <>\n {startIcon && startIcon}\n <SideNavItemLabelContainer\n odysseyDesignTokens={odysseyDesignTokens}\n isIconVisible={Boolean(startIcon)}\n translate={translate}\n >\n {label}\n {!count && severity && (\n <Box sx={sideNavItemContentStyles}>\n {severity && (\n <Status severity={severity} label={statusLabel || \"\"} />\n )}\n </Box>\n )}\n {!severity && count && (\n <Box sx={sideNavItemContentStyles}>\n {count && <Badge badgeContent={count} />}\n </Box>\n )}\n </SideNavItemLabelContainer>\n {endIcon && endIcon}\n </>\n );\n};\nconst MemoizedSideNavItemLinkContent = memo(SideNavItemLinkContent);\nMemoizedSideNavItemLinkContent.displayName = \"SideNavItemLinkContent\";\n\nexport { MemoizedSideNavItemLinkContent as SideNavItemLinkContent };\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -87,7 +87,7 @@ const StyledChevronRightIcon = (0, _styled.default)(_ChevronRight.ChevronRightIc
|
|
|
87
87
|
transitionProperty: "transform",
|
|
88
88
|
transitionTimingFunction: "ease-in-out"
|
|
89
89
|
}));
|
|
90
|
-
const defaultLocalButton = document.createElement("button");
|
|
90
|
+
const defaultLocalButton = typeof window === "undefined" ? null : document.createElement("button");
|
|
91
91
|
const SideNavToggleButton = ({
|
|
92
92
|
ariaControls,
|
|
93
93
|
clickAreaPadding = 0,
|
|
@@ -110,18 +110,18 @@ const SideNavToggleButton = ({
|
|
|
110
110
|
onHighlight?.(false);
|
|
111
111
|
};
|
|
112
112
|
const setFocusHighlighted = () => {
|
|
113
|
-
onHighlight?.(buttonRef.current
|
|
113
|
+
onHighlight?.(Boolean(buttonRef.current?.matches(":focus-visible")));
|
|
114
114
|
};
|
|
115
|
-
buttonRef.current
|
|
116
|
-
buttonRef.current
|
|
117
|
-
buttonRef.current
|
|
118
|
-
buttonRef.current
|
|
115
|
+
buttonRef.current?.addEventListener("mouseenter", setHighlighted);
|
|
116
|
+
buttonRef.current?.addEventListener("mouseleave", setUnhighlighted);
|
|
117
|
+
buttonRef.current?.addEventListener("focus", setFocusHighlighted, true);
|
|
118
|
+
buttonRef.current?.addEventListener("blur", setFocusHighlighted, true);
|
|
119
119
|
setUnhighlighted();
|
|
120
120
|
return () => {
|
|
121
|
-
buttonRef.current
|
|
122
|
-
buttonRef.current
|
|
123
|
-
buttonRef.current
|
|
124
|
-
buttonRef.current
|
|
121
|
+
buttonRef.current?.removeEventListener("mouseenter", setHighlighted);
|
|
122
|
+
buttonRef.current?.removeEventListener("mouseleave", setUnhighlighted);
|
|
123
|
+
buttonRef.current?.removeEventListener("focus", setFocusHighlighted, true);
|
|
124
|
+
buttonRef.current?.removeEventListener("blur", setFocusHighlighted, true);
|
|
125
125
|
};
|
|
126
126
|
}, [onHighlight]);
|
|
127
127
|
const toggleLabel = (0, _react.useMemo)(() => isSideNavCollapsed ? t("sidenav.toggle.expand") : t("sidenav.toggle.collapse"), [isSideNavCollapsed, t]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SideNavToggleButton.cjs","names":["_react","require","_styled","_interopRequireDefault","_reactI18next","_MuiPropsContext","_OdysseyDesignTokensContext","_Tooltip","_uiShellSharedConstants","_ChevronRight","_jsxRuntime","e","__esModule","default","SIDE_NAV_TOGGLE_ICON_SIZE","exports","SIDE_NAV_TOGGLE_ICON_HALF_SIZE","StyledToggleButton","styled","_Button2","shouldForwardProp","prop","clickAreaPadding","odysseyDesignTokens","border","height","left","padding","position","width","zIndex","UI_SHELL_OVERLAY_Z_INDEX","backgroundColor","borderColor","boxShadow","color","PalettePrimaryText","outline","HueNeutralWhite","borderRadius","ShadowScale1","content","top","StyledChevronRightIcon","ChevronRightIcon","isSideNavCollapsed","fontSize","undefined","right","transform","transitionDuration","TransitionDurationMain","transitionProperty","transitionTimingFunction","defaultLocalButton","document","createElement","SideNavToggleButton","ariaControls","id","onClick","onHighlight","tabIndex","useOdysseyDesignTokens","t","useTranslation","buttonRef","useRef","useEffect","setHighlighted","setUnhighlighted","setFocusHighlighted","current","matches","addEventListener","removeEventListener","toggleLabel","useMemo","renderButton","useCallback","muiProps","jsx","ref","element","variant","children","Tooltip","ariaType","placement","text","MuiPropsContext","Consumer","MemoizedSideNavToggleButton","memo","displayName"],"sources":["../../../../src/ui-shell/SideNav/SideNavToggleButton.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 { Button as MuiButton } from \"@mui/material\";\nimport type { ButtonProps as MuiButtonProps } from \"@mui/material\";\nimport {\n HTMLAttributes,\n memo,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n} from \"react\";\nimport styled from \"@emotion/styled\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { MuiPropsContext, MuiPropsContextType } from \"../../MuiPropsContext.js\";\nimport {\n DesignTokens,\n useOdysseyDesignTokens,\n} from \"../../OdysseyDesignTokensContext.js\";\nimport { Tooltip } from \"../../Tooltip.js\";\nimport { UI_SHELL_OVERLAY_Z_INDEX } from \"../uiShellSharedConstants.js\";\nimport { ChevronRightIcon } from \"../../icons.generated/ChevronRight.js\";\n\nexport const SIDE_NAV_TOGGLE_ICON_SIZE = 24;\nexport const SIDE_NAV_TOGGLE_ICON_HALF_SIZE = SIDE_NAV_TOGGLE_ICON_SIZE / 2;\n\nconst StyledToggleButton = styled(MuiButton, {\n shouldForwardProp: (prop) =>\n prop !== \"clickAreaPadding\" && prop !== \"odysseyDesignTokens\",\n})<{\n clickAreaPadding: number;\n odysseyDesignTokens: DesignTokens;\n}>(({ clickAreaPadding, odysseyDesignTokens }) => ({\n border: 0,\n height: `${SIDE_NAV_TOGGLE_ICON_SIZE}px`,\n left: `-${clickAreaPadding * 2}px`,\n padding: 0,\n position: \"relative\",\n width: `calc(${SIDE_NAV_TOGGLE_ICON_SIZE}px + (${clickAreaPadding}px * 2))`,\n zIndex: UI_SHELL_OVERLAY_Z_INDEX,\n\n // `&&` is a CSS specificity override. Used here to counteract MUI Button styles.\n \"&&\": {\n backgroundColor: \"transparent\",\n borderColor: \"transparent\",\n boxShadow: \"none\",\n color: odysseyDesignTokens.PalettePrimaryText,\n },\n\n \"&:focus-visible\": {\n outline: \"none\",\n },\n\n \"&:hover, &:focus-visible\": {\n color: odysseyDesignTokens.HueNeutralWhite,\n },\n\n \"&::before\": {\n backgroundColor: odysseyDesignTokens.HueNeutralWhite,\n borderColor: \"transparent\",\n borderRadius: \"50%\",\n boxShadow: odysseyDesignTokens.ShadowScale1,\n color: odysseyDesignTokens.PalettePrimaryText,\n content: \"''\",\n height: `${SIDE_NAV_TOGGLE_ICON_SIZE}px`,\n left: `${clickAreaPadding * 2}px`,\n position: \"absolute\",\n top: 0,\n width: `${SIDE_NAV_TOGGLE_ICON_SIZE}px`,\n },\n\n \"&:hover::before, &:focus-visible::before\": {\n backgroundColor: odysseyDesignTokens.PalettePrimaryText,\n },\n}));\n\nconst StyledChevronRightIcon = styled(ChevronRightIcon, {\n shouldForwardProp: (prop) =>\n prop !== \"odysseyDesignTokens\" && prop !== \"isSideNavCollapsed\",\n})<{\n isSideNavCollapsed: boolean;\n odysseyDesignTokens: DesignTokens;\n}>(({ isSideNavCollapsed, odysseyDesignTokens }) => ({\n fontSize: \"125%\",\n left: isSideNavCollapsed ? undefined : \"4px\",\n position: \"absolute\",\n right: isSideNavCollapsed ? \"4px\" : undefined,\n top: \"3px\",\n transform: isSideNavCollapsed ? \"rotate(0deg)\" : \"rotate(-180deg)\", // Leave this as `-180deg` so it rotates over the top, not the bottom.\n transitionDuration: odysseyDesignTokens.TransitionDurationMain,\n transitionProperty: \"transform\",\n transitionTimingFunction: \"ease-in-out\",\n}));\n\nexport type SideNavToggleButtonProps = {\n /**\n * The `id` of the item this button controls\n */\n ariaControls: string;\n /**\n * Left padding in pixels for the click area of the button.\n *\n * Useful when moving the button around when trying to click it. This ensures the click area doesn't move to the right along with the button.\n */\n clickAreaPadding?: number;\n /**\n * HTML `id` attribute for the `<button>` element.\n */\n id?: string;\n isSideNavCollapsed: boolean;\n tabIndex?: HTMLAttributes<HTMLElement>[\"tabIndex\"];\n /**\n * Click event handler for the `<button>` element.\n */\n onClick?: MuiButtonProps[\"onClick\"];\n /**\n * Provides the hovered or focused state of the `<button>` element.\n */\n onHighlight?: (isHighlighted: boolean) => void;\n onKeyDown?: MuiButtonProps[\"onKeyDown\"];\n};\n\n// This allows us to mutate the value with TypeScript. A singleton is fine because it gets overridden on render.\nconst defaultLocalButton = document.createElement(\"button\");\n\nconst SideNavToggleButton = ({\n ariaControls,\n clickAreaPadding = 0,\n id,\n isSideNavCollapsed,\n onClick,\n onHighlight,\n tabIndex,\n}: SideNavToggleButtonProps) => {\n const odysseyDesignTokens = useOdysseyDesignTokens();\n const { t } = useTranslation();\n\n const buttonRef = useRef(defaultLocalButton);\n\n useEffect(() => {\n const setHighlighted = () => {\n onHighlight?.(true);\n };\n\n const setUnhighlighted = () => {\n onHighlight?.(false);\n };\n\n const setFocusHighlighted = () => {\n onHighlight?.(buttonRef.current.matches(\":focus-visible\"));\n };\n\n buttonRef.current.addEventListener(\"mouseenter\", setHighlighted);\n\n buttonRef.current.addEventListener(\"mouseleave\", setUnhighlighted);\n\n buttonRef.current.addEventListener(\"focus\", setFocusHighlighted, true);\n\n buttonRef.current.addEventListener(\"blur\", setFocusHighlighted, true);\n\n setUnhighlighted();\n\n return () => {\n buttonRef.current.removeEventListener(\"mouseenter\", setHighlighted);\n\n buttonRef.current.removeEventListener(\"mouseleave\", setUnhighlighted);\n\n buttonRef.current.removeEventListener(\"focus\", setFocusHighlighted, true);\n\n buttonRef.current.removeEventListener(\"blur\", setFocusHighlighted, true);\n };\n }, [onHighlight]);\n\n const toggleLabel = useMemo(\n () =>\n isSideNavCollapsed\n ? t(\"sidenav.toggle.expand\")\n : t(\"sidenav.toggle.collapse\"),\n [isSideNavCollapsed, t],\n );\n\n const renderButton = useCallback(\n (muiProps: MuiPropsContextType) => {\n return (\n <StyledToggleButton\n {...muiProps}\n aria-controls={ariaControls}\n aria-expanded={!isSideNavCollapsed}\n aria-label={toggleLabel}\n clickAreaPadding={clickAreaPadding}\n data-se=\"sidenav-toggle-button\"\n data-sidenav-toggle\n id={id}\n odysseyDesignTokens={odysseyDesignTokens}\n onClick={onClick}\n ref={(element: HTMLButtonElement) => {\n if (element) {\n buttonRef.current = element;\n //@ts-expect-error `ref` is an optional prop, but TypeScript doesn't know this.\n muiProps.ref?.(element);\n }\n }}\n tabIndex={tabIndex}\n variant=\"floating\"\n >\n <StyledChevronRightIcon\n isSideNavCollapsed={isSideNavCollapsed}\n odysseyDesignTokens={odysseyDesignTokens}\n />\n </StyledToggleButton>\n );\n },\n [\n ariaControls,\n clickAreaPadding,\n id,\n isSideNavCollapsed,\n odysseyDesignTokens,\n onClick,\n tabIndex,\n toggleLabel,\n ],\n );\n\n return (\n <Tooltip ariaType=\"description\" placement=\"right\" text={toggleLabel}>\n <MuiPropsContext.Consumer>{renderButton}</MuiPropsContext.Consumer>\n </Tooltip>\n );\n};\n\nconst MemoizedSideNavToggleButton = memo(SideNavToggleButton);\nMemoizedSideNavToggleButton.displayName = \"SideNavToggleButton\";\n\nexport { MemoizedSideNavToggleButton as SideNavToggleButton };\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"SideNavToggleButton.cjs","names":["_react","require","_styled","_interopRequireDefault","_reactI18next","_MuiPropsContext","_OdysseyDesignTokensContext","_Tooltip","_uiShellSharedConstants","_ChevronRight","_jsxRuntime","e","__esModule","default","SIDE_NAV_TOGGLE_ICON_SIZE","exports","SIDE_NAV_TOGGLE_ICON_HALF_SIZE","StyledToggleButton","styled","_Button2","shouldForwardProp","prop","clickAreaPadding","odysseyDesignTokens","border","height","left","padding","position","width","zIndex","UI_SHELL_OVERLAY_Z_INDEX","backgroundColor","borderColor","boxShadow","color","PalettePrimaryText","outline","HueNeutralWhite","borderRadius","ShadowScale1","content","top","StyledChevronRightIcon","ChevronRightIcon","isSideNavCollapsed","fontSize","undefined","right","transform","transitionDuration","TransitionDurationMain","transitionProperty","transitionTimingFunction","defaultLocalButton","window","document","createElement","SideNavToggleButton","ariaControls","id","onClick","onHighlight","tabIndex","useOdysseyDesignTokens","t","useTranslation","buttonRef","useRef","useEffect","setHighlighted","setUnhighlighted","setFocusHighlighted","Boolean","current","matches","addEventListener","removeEventListener","toggleLabel","useMemo","renderButton","useCallback","muiProps","jsx","ref","element","variant","children","Tooltip","ariaType","placement","text","MuiPropsContext","Consumer","MemoizedSideNavToggleButton","memo","displayName"],"sources":["../../../../src/ui-shell/SideNav/SideNavToggleButton.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 { Button as MuiButton } from \"@mui/material\";\nimport type { ButtonProps as MuiButtonProps } from \"@mui/material\";\nimport {\n HTMLAttributes,\n memo,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n} from \"react\";\nimport styled from \"@emotion/styled\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { MuiPropsContext, MuiPropsContextType } from \"../../MuiPropsContext.js\";\nimport {\n DesignTokens,\n useOdysseyDesignTokens,\n} from \"../../OdysseyDesignTokensContext.js\";\nimport { Tooltip } from \"../../Tooltip.js\";\nimport { UI_SHELL_OVERLAY_Z_INDEX } from \"../uiShellSharedConstants.js\";\nimport { ChevronRightIcon } from \"../../icons.generated/ChevronRight.js\";\n\nexport const SIDE_NAV_TOGGLE_ICON_SIZE = 24;\nexport const SIDE_NAV_TOGGLE_ICON_HALF_SIZE = SIDE_NAV_TOGGLE_ICON_SIZE / 2;\n\nconst StyledToggleButton = styled(MuiButton, {\n shouldForwardProp: (prop) =>\n prop !== \"clickAreaPadding\" && prop !== \"odysseyDesignTokens\",\n})<{\n clickAreaPadding: number;\n odysseyDesignTokens: DesignTokens;\n}>(({ clickAreaPadding, odysseyDesignTokens }) => ({\n border: 0,\n height: `${SIDE_NAV_TOGGLE_ICON_SIZE}px`,\n left: `-${clickAreaPadding * 2}px`,\n padding: 0,\n position: \"relative\",\n width: `calc(${SIDE_NAV_TOGGLE_ICON_SIZE}px + (${clickAreaPadding}px * 2))`,\n zIndex: UI_SHELL_OVERLAY_Z_INDEX,\n\n // `&&` is a CSS specificity override. Used here to counteract MUI Button styles.\n \"&&\": {\n backgroundColor: \"transparent\",\n borderColor: \"transparent\",\n boxShadow: \"none\",\n color: odysseyDesignTokens.PalettePrimaryText,\n },\n\n \"&:focus-visible\": {\n outline: \"none\",\n },\n\n \"&:hover, &:focus-visible\": {\n color: odysseyDesignTokens.HueNeutralWhite,\n },\n\n \"&::before\": {\n backgroundColor: odysseyDesignTokens.HueNeutralWhite,\n borderColor: \"transparent\",\n borderRadius: \"50%\",\n boxShadow: odysseyDesignTokens.ShadowScale1,\n color: odysseyDesignTokens.PalettePrimaryText,\n content: \"''\",\n height: `${SIDE_NAV_TOGGLE_ICON_SIZE}px`,\n left: `${clickAreaPadding * 2}px`,\n position: \"absolute\",\n top: 0,\n width: `${SIDE_NAV_TOGGLE_ICON_SIZE}px`,\n },\n\n \"&:hover::before, &:focus-visible::before\": {\n backgroundColor: odysseyDesignTokens.PalettePrimaryText,\n },\n}));\n\nconst StyledChevronRightIcon = styled(ChevronRightIcon, {\n shouldForwardProp: (prop) =>\n prop !== \"odysseyDesignTokens\" && prop !== \"isSideNavCollapsed\",\n})<{\n isSideNavCollapsed: boolean;\n odysseyDesignTokens: DesignTokens;\n}>(({ isSideNavCollapsed, odysseyDesignTokens }) => ({\n fontSize: \"125%\",\n left: isSideNavCollapsed ? undefined : \"4px\",\n position: \"absolute\",\n right: isSideNavCollapsed ? \"4px\" : undefined,\n top: \"3px\",\n transform: isSideNavCollapsed ? \"rotate(0deg)\" : \"rotate(-180deg)\", // Leave this as `-180deg` so it rotates over the top, not the bottom.\n transitionDuration: odysseyDesignTokens.TransitionDurationMain,\n transitionProperty: \"transform\",\n transitionTimingFunction: \"ease-in-out\",\n}));\n\nexport type SideNavToggleButtonProps = {\n /**\n * The `id` of the item this button controls\n */\n ariaControls: string;\n /**\n * Left padding in pixels for the click area of the button.\n *\n * Useful when moving the button around when trying to click it. This ensures the click area doesn't move to the right along with the button.\n */\n clickAreaPadding?: number;\n /**\n * HTML `id` attribute for the `<button>` element.\n */\n id?: string;\n isSideNavCollapsed: boolean;\n tabIndex?: HTMLAttributes<HTMLElement>[\"tabIndex\"];\n /**\n * Click event handler for the `<button>` element.\n */\n onClick?: MuiButtonProps[\"onClick\"];\n /**\n * Provides the hovered or focused state of the `<button>` element.\n */\n onHighlight?: (isHighlighted: boolean) => void;\n onKeyDown?: MuiButtonProps[\"onKeyDown\"];\n};\n\n// This allows us to mutate the value with TypeScript. A singleton is fine because it gets overridden on render.\nconst defaultLocalButton =\n typeof window === \"undefined\" ? null : document.createElement(\"button\");\n\nconst SideNavToggleButton = ({\n ariaControls,\n clickAreaPadding = 0,\n id,\n isSideNavCollapsed,\n onClick,\n onHighlight,\n tabIndex,\n}: SideNavToggleButtonProps) => {\n const odysseyDesignTokens = useOdysseyDesignTokens();\n const { t } = useTranslation();\n\n const buttonRef = useRef(defaultLocalButton);\n\n useEffect(() => {\n const setHighlighted = () => {\n onHighlight?.(true);\n };\n\n const setUnhighlighted = () => {\n onHighlight?.(false);\n };\n\n const setFocusHighlighted = () => {\n onHighlight?.(Boolean(buttonRef.current?.matches(\":focus-visible\")));\n };\n\n buttonRef.current?.addEventListener(\"mouseenter\", setHighlighted);\n\n buttonRef.current?.addEventListener(\"mouseleave\", setUnhighlighted);\n\n buttonRef.current?.addEventListener(\"focus\", setFocusHighlighted, true);\n\n buttonRef.current?.addEventListener(\"blur\", setFocusHighlighted, true);\n\n setUnhighlighted();\n\n return () => {\n buttonRef.current?.removeEventListener(\"mouseenter\", setHighlighted);\n\n buttonRef.current?.removeEventListener(\"mouseleave\", setUnhighlighted);\n\n buttonRef.current?.removeEventListener(\n \"focus\",\n setFocusHighlighted,\n true,\n );\n\n buttonRef.current?.removeEventListener(\"blur\", setFocusHighlighted, true);\n };\n }, [onHighlight]);\n\n const toggleLabel = useMemo(\n () =>\n isSideNavCollapsed\n ? t(\"sidenav.toggle.expand\")\n : t(\"sidenav.toggle.collapse\"),\n [isSideNavCollapsed, t],\n );\n\n const renderButton = useCallback(\n (muiProps: MuiPropsContextType) => {\n return (\n <StyledToggleButton\n {...muiProps}\n aria-controls={ariaControls}\n aria-expanded={!isSideNavCollapsed}\n aria-label={toggleLabel}\n clickAreaPadding={clickAreaPadding}\n data-se=\"sidenav-toggle-button\"\n data-sidenav-toggle\n id={id}\n odysseyDesignTokens={odysseyDesignTokens}\n onClick={onClick}\n ref={(element: HTMLButtonElement) => {\n if (element) {\n buttonRef.current = element;\n //@ts-expect-error `ref` is an optional prop, but TypeScript doesn't know this.\n muiProps.ref?.(element);\n }\n }}\n tabIndex={tabIndex}\n variant=\"floating\"\n >\n <StyledChevronRightIcon\n isSideNavCollapsed={isSideNavCollapsed}\n odysseyDesignTokens={odysseyDesignTokens}\n />\n </StyledToggleButton>\n );\n },\n [\n ariaControls,\n clickAreaPadding,\n id,\n isSideNavCollapsed,\n odysseyDesignTokens,\n onClick,\n tabIndex,\n toggleLabel,\n ],\n );\n\n return (\n <Tooltip ariaType=\"description\" placement=\"right\" text={toggleLabel}>\n <MuiPropsContext.Consumer>{renderButton}</MuiPropsContext.Consumer>\n </Tooltip>\n );\n};\n\nconst MemoizedSideNavToggleButton = memo(SideNavToggleButton);\nMemoizedSideNavToggleButton.displayName = \"SideNavToggleButton\";\n\nexport { MemoizedSideNavToggleButton as SideNavToggleButton };\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -45,6 +45,7 @@ const UiShell = ({
|
|
|
45
45
|
onSubscriptionCreated,
|
|
46
46
|
optionalComponents,
|
|
47
47
|
sideNavBackgroundColor,
|
|
48
|
+
sideNavBackgroundContrastColor,
|
|
48
49
|
subscribeToCloseRightSideMenu,
|
|
49
50
|
subscribeToCloseSideNavMenu,
|
|
50
51
|
subscribeToPropChanges,
|
|
@@ -77,6 +78,7 @@ const UiShell = ({
|
|
|
77
78
|
appBackgroundContrastMode: appBackgroundContrastMode,
|
|
78
79
|
closeSideNavMenu: closeSideNavMenu,
|
|
79
80
|
sideNavBackgroundColor: sideNavBackgroundColor,
|
|
81
|
+
sideNavBackgroundContrastColor: sideNavBackgroundContrastColor,
|
|
80
82
|
subscribeToCloseRightSideMenu: subscribeToCloseRightSideMenu,
|
|
81
83
|
subscribeToCloseSideNavMenu: subscribeToCloseSideNavMenu,
|
|
82
84
|
topNavBackgroundColor: topNavBackgroundColor,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UiShell.cjs","names":["_react","require","_reactErrorBoundary","_CssBaseline","_NarrowUiShellContent","_OdysseyProvider","_UiShellProvider","_useUiShellBreakpoints","_WideUiShellContent","_jsxRuntime","defaultComponentProps","exports","sideNavProps","undefined","topNavProps","errorComponent","jsx","UiShell","appBackgroundColor","appBackgroundContrastMode","appElement","appElementScrollingMode","breakpointConfig","closeSideNavMenu","hasStandardAppContentPadding","initialVisibleSections","onError","console","error","onSubscriptionCreated","optionalComponents","sideNavBackgroundColor","subscribeToCloseRightSideMenu","subscribeToCloseSideNavMenu","subscribeToPropChanges","topNavBackgroundColor","uiShellAppElement","uiShellStylesElement","componentProps","setComponentProps","useState","activeBreakpoint","useUiShellBreakpoints","useEffect","unsubscribe","ErrorBoundary","fallback","children","OdysseyProvider","emotionRootElement","shadowRootElement","jsxs","CssBaseline","UiShellProvider","NarrowUiShellContent","hasSideNavProps","Boolean","WideUiShellContent","hasSessionStorageState","isCollapsed","isCollapsible","MemoizedUiShell","memo","displayName"],"sources":["../../../src/ui-shell/UiShell.tsx"],"sourcesContent":["/*!\n * Copyright (c) 2024-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 { memo, useEffect, useState, type SetStateAction } from \"react\";\nimport { ErrorBoundary } from \"react-error-boundary\";\n\nimport { type ReactRootElements } from \"../web-component/createReactRootElements.js\";\nimport { CssBaseline } from \"../CssBaseline.js\";\nimport { NarrowUiShellContent } from \"./NarrowUiShellContent.js\";\nimport { OdysseyProvider } from \"../OdysseyProvider.js\";\nimport { UiShellProvider, UiShellProviderProps } from \"./UiShellProvider.js\";\nimport {\n UiShellNavComponentProps,\n UiShellContentProps,\n} from \"./uiShellContentTypes.js\";\nimport {\n UiShellBreakpointConfig,\n useUiShellBreakpoints,\n} from \"./useUiShellBreakpoints.js\";\nimport { WideUiShellContent } from \"./WideUiShellContent.js\";\nimport { MessageBus } from \"./createMessageBus.js\";\n\nexport const defaultComponentProps: UiShellNavComponentProps = {\n sideNavProps: undefined,\n topNavProps: undefined,\n} as const;\n\nconst errorComponent = <div data-error />;\n\nexport type UiShellProps = {\n /**\n * Customized breakpoints for UI Shell.\n *\n * The defaults are set for you. Pass these only if your app doesn't work properly with the defaults (like Admin).\n */\n breakpointConfig?: UiShellBreakpointConfig;\n /**\n * Notifies when subscribed to prop changes.\n *\n * UI Shell listens to prop updates, and it won't subscribe synchronously. Because of that, this callback notifies when that subscription is ready.\n */\n onSubscriptionCreated: () => void;\n /**\n * This is a callback that provides a subscriber callback to listen for changes to state.\n * It allows UI Shell to listen for state changes.\n *\n * The props coming in this callback go directly to a React state; therefore, it shares the same signature and provides a previous state.\n */\n subscribeToPropChanges: MessageBus<\n SetStateAction<UiShellNavComponentProps>\n >[\"subscribe\"];\n /**\n * Element inside UI Shell's React root component renders into. If using a web component, this is going to exist inside it.\n */\n uiShellAppElement: ReactRootElements[\"appRootElement\"];\n /**\n * Typically, this is your `<head>` element. If using a web component, you need to create one yourself as Shadow DOM's don't have a `<head>`.\n */\n uiShellStylesElement: ReactRootElements[\"stylesRootElement\"];\n} & UiShellProviderProps &\n Pick<\n UiShellContentProps,\n | \"appElement\"\n | \"appElementScrollingMode\"\n | \"hasStandardAppContentPadding\"\n | \"initialVisibleSections\"\n | \"onError\"\n | \"optionalComponents\"\n >;\n\n/**\n * Our new Unified Platform UI Shell.\n *\n * This includes the top and side navigation as well as the footer and provides a spot for your app to render into.\n *\n * If an error occurs, this will revert to only showing the app.\n */\nconst UiShell = ({\n appBackgroundColor,\n appBackgroundContrastMode,\n appElement,\n appElementScrollingMode,\n breakpointConfig,\n closeSideNavMenu,\n hasStandardAppContentPadding,\n initialVisibleSections,\n onError = console.error,\n onSubscriptionCreated,\n optionalComponents,\n sideNavBackgroundColor,\n subscribeToCloseRightSideMenu,\n subscribeToCloseSideNavMenu,\n subscribeToPropChanges,\n topNavBackgroundColor,\n uiShellAppElement,\n uiShellStylesElement,\n}: UiShellProps) => {\n const [componentProps, setComponentProps] = useState(defaultComponentProps);\n\n const activeBreakpoint = useUiShellBreakpoints(breakpointConfig);\n\n useEffect(() => {\n const unsubscribe = subscribeToPropChanges((componentProps) => {\n // If for some reason nothing is passed as `componentProps`, we fallback on `defaultComponentProps` as a safety mechanism to ensure nothing breaks.\n setComponentProps(componentProps || defaultComponentProps);\n });\n\n onSubscriptionCreated();\n\n return () => {\n unsubscribe();\n };\n }, [onSubscriptionCreated, subscribeToPropChanges]);\n\n return activeBreakpoint === \"none\" ? null : (\n <ErrorBoundary fallback={errorComponent} onError={onError}>\n <OdysseyProvider\n emotionRootElement={uiShellStylesElement}\n shadowRootElement={uiShellAppElement}\n >\n <ErrorBoundary fallback={errorComponent} onError={onError}>\n <CssBaseline />\n\n <UiShellProvider\n appBackgroundColor={appBackgroundColor}\n appBackgroundContrastMode={appBackgroundContrastMode}\n closeSideNavMenu={closeSideNavMenu}\n sideNavBackgroundColor={sideNavBackgroundColor}\n subscribeToCloseRightSideMenu={subscribeToCloseRightSideMenu}\n subscribeToCloseSideNavMenu={subscribeToCloseSideNavMenu}\n topNavBackgroundColor={topNavBackgroundColor}\n >\n {activeBreakpoint === \"narrow\" && (\n <NarrowUiShellContent\n {...componentProps}\n appElement={appElement}\n appElementScrollingMode={appElementScrollingMode}\n hasSideNavProps={Boolean(componentProps.sideNavProps)}\n hasStandardAppContentPadding={hasStandardAppContentPadding}\n initialVisibleSections={initialVisibleSections}\n onError={onError}\n optionalComponents={optionalComponents}\n />\n )}\n\n {(activeBreakpoint === \"medium\" || activeBreakpoint === \"wide\") && (\n <WideUiShellContent\n {...{\n ...componentProps,\n ...{\n sideNavProps: {\n ...componentProps.sideNavProps,\n hasSessionStorageState: activeBreakpoint === \"wide\",\n isCollapsed:\n activeBreakpoint === \"medium\" ||\n componentProps.sideNavProps?.isCollapsed,\n isCollapsible:\n activeBreakpoint === \"medium\" ||\n componentProps.sideNavProps?.isCollapsible,\n // We have to use `as` because sideNavProps expects you to have `sideNavItems` defined even though it had to be passed in `...componentProps.sideNavProps`.\n } as typeof componentProps.sideNavProps,\n },\n }}\n appElement={appElement}\n appElementScrollingMode={appElementScrollingMode}\n hasStandardAppContentPadding={hasStandardAppContentPadding}\n hasSideNavProps={Boolean(componentProps.sideNavProps)}\n initialVisibleSections={initialVisibleSections}\n onError={onError}\n optionalComponents={optionalComponents}\n />\n )}\n </UiShellProvider>\n </ErrorBoundary>\n </OdysseyProvider>\n </ErrorBoundary>\n );\n};\n\nconst MemoizedUiShell = memo(UiShell);\nMemoizedUiShell.displayName = \"UiShell\";\n\nexport { MemoizedUiShell as UiShell };\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"UiShell.cjs","names":["_react","require","_reactErrorBoundary","_CssBaseline","_NarrowUiShellContent","_OdysseyProvider","_UiShellProvider","_useUiShellBreakpoints","_WideUiShellContent","_jsxRuntime","defaultComponentProps","exports","sideNavProps","undefined","topNavProps","errorComponent","jsx","UiShell","appBackgroundColor","appBackgroundContrastMode","appElement","appElementScrollingMode","breakpointConfig","closeSideNavMenu","hasStandardAppContentPadding","initialVisibleSections","onError","console","error","onSubscriptionCreated","optionalComponents","sideNavBackgroundColor","sideNavBackgroundContrastColor","subscribeToCloseRightSideMenu","subscribeToCloseSideNavMenu","subscribeToPropChanges","topNavBackgroundColor","uiShellAppElement","uiShellStylesElement","componentProps","setComponentProps","useState","activeBreakpoint","useUiShellBreakpoints","useEffect","unsubscribe","ErrorBoundary","fallback","children","OdysseyProvider","emotionRootElement","shadowRootElement","jsxs","CssBaseline","UiShellProvider","NarrowUiShellContent","hasSideNavProps","Boolean","WideUiShellContent","hasSessionStorageState","isCollapsed","isCollapsible","MemoizedUiShell","memo","displayName"],"sources":["../../../src/ui-shell/UiShell.tsx"],"sourcesContent":["/*!\n * Copyright (c) 2024-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 { memo, useEffect, useState, type SetStateAction } from \"react\";\nimport { ErrorBoundary } from \"react-error-boundary\";\n\nimport { type ReactRootElements } from \"../web-component/createReactRootElements.js\";\nimport { CssBaseline } from \"../CssBaseline.js\";\nimport { NarrowUiShellContent } from \"./NarrowUiShellContent.js\";\nimport { OdysseyProvider } from \"../OdysseyProvider.js\";\nimport { UiShellProvider, UiShellProviderProps } from \"./UiShellProvider.js\";\nimport {\n UiShellNavComponentProps,\n UiShellContentProps,\n} from \"./uiShellContentTypes.js\";\nimport {\n UiShellBreakpointConfig,\n useUiShellBreakpoints,\n} from \"./useUiShellBreakpoints.js\";\nimport { WideUiShellContent } from \"./WideUiShellContent.js\";\nimport { MessageBus } from \"./createMessageBus.js\";\n\nexport const defaultComponentProps: UiShellNavComponentProps = {\n sideNavProps: undefined,\n topNavProps: undefined,\n} as const;\n\nconst errorComponent = <div data-error />;\n\nexport type UiShellProps = {\n /**\n * Customized breakpoints for UI Shell.\n *\n * The defaults are set for you. Pass these only if your app doesn't work properly with the defaults (like Admin).\n */\n breakpointConfig?: UiShellBreakpointConfig;\n /**\n * Notifies when subscribed to prop changes.\n *\n * UI Shell listens to prop updates, and it won't subscribe synchronously. Because of that, this callback notifies when that subscription is ready.\n */\n onSubscriptionCreated: () => void;\n /**\n * This is a callback that provides a subscriber callback to listen for changes to state.\n * It allows UI Shell to listen for state changes.\n *\n * The props coming in this callback go directly to a React state; therefore, it shares the same signature and provides a previous state.\n */\n subscribeToPropChanges: MessageBus<\n SetStateAction<UiShellNavComponentProps>\n >[\"subscribe\"];\n /**\n * Element inside UI Shell's React root component renders into. If using a web component, this is going to exist inside it.\n */\n uiShellAppElement: ReactRootElements[\"appRootElement\"];\n /**\n * Typically, this is your `<head>` element. If using a web component, you need to create one yourself as Shadow DOM's don't have a `<head>`.\n */\n uiShellStylesElement: ReactRootElements[\"stylesRootElement\"];\n} & UiShellProviderProps &\n Pick<\n UiShellContentProps,\n | \"appElement\"\n | \"appElementScrollingMode\"\n | \"hasStandardAppContentPadding\"\n | \"initialVisibleSections\"\n | \"onError\"\n | \"optionalComponents\"\n >;\n\n/**\n * Our new Unified Platform UI Shell.\n *\n * This includes the top and side navigation as well as the footer and provides a spot for your app to render into.\n *\n * If an error occurs, this will revert to only showing the app.\n */\nconst UiShell = ({\n appBackgroundColor,\n appBackgroundContrastMode,\n appElement,\n appElementScrollingMode,\n breakpointConfig,\n closeSideNavMenu,\n hasStandardAppContentPadding,\n initialVisibleSections,\n onError = console.error,\n onSubscriptionCreated,\n optionalComponents,\n sideNavBackgroundColor,\n sideNavBackgroundContrastColor,\n subscribeToCloseRightSideMenu,\n subscribeToCloseSideNavMenu,\n subscribeToPropChanges,\n topNavBackgroundColor,\n uiShellAppElement,\n uiShellStylesElement,\n}: UiShellProps) => {\n const [componentProps, setComponentProps] = useState(defaultComponentProps);\n\n const activeBreakpoint = useUiShellBreakpoints(breakpointConfig);\n\n useEffect(() => {\n const unsubscribe = subscribeToPropChanges((componentProps) => {\n // If for some reason nothing is passed as `componentProps`, we fallback on `defaultComponentProps` as a safety mechanism to ensure nothing breaks.\n setComponentProps(componentProps || defaultComponentProps);\n });\n\n onSubscriptionCreated();\n\n return () => {\n unsubscribe();\n };\n }, [onSubscriptionCreated, subscribeToPropChanges]);\n\n return activeBreakpoint === \"none\" ? null : (\n <ErrorBoundary fallback={errorComponent} onError={onError}>\n <OdysseyProvider\n emotionRootElement={uiShellStylesElement}\n shadowRootElement={uiShellAppElement}\n >\n <ErrorBoundary fallback={errorComponent} onError={onError}>\n <CssBaseline />\n\n <UiShellProvider\n appBackgroundColor={appBackgroundColor}\n appBackgroundContrastMode={appBackgroundContrastMode}\n closeSideNavMenu={closeSideNavMenu}\n sideNavBackgroundColor={sideNavBackgroundColor}\n sideNavBackgroundContrastColor={sideNavBackgroundContrastColor}\n subscribeToCloseRightSideMenu={subscribeToCloseRightSideMenu}\n subscribeToCloseSideNavMenu={subscribeToCloseSideNavMenu}\n topNavBackgroundColor={topNavBackgroundColor}\n >\n {activeBreakpoint === \"narrow\" && (\n <NarrowUiShellContent\n {...componentProps}\n appElement={appElement}\n appElementScrollingMode={appElementScrollingMode}\n hasSideNavProps={Boolean(componentProps.sideNavProps)}\n hasStandardAppContentPadding={hasStandardAppContentPadding}\n initialVisibleSections={initialVisibleSections}\n onError={onError}\n optionalComponents={optionalComponents}\n />\n )}\n\n {(activeBreakpoint === \"medium\" || activeBreakpoint === \"wide\") && (\n <WideUiShellContent\n {...{\n ...componentProps,\n ...{\n sideNavProps: {\n ...componentProps.sideNavProps,\n hasSessionStorageState: activeBreakpoint === \"wide\",\n isCollapsed:\n activeBreakpoint === \"medium\" ||\n componentProps.sideNavProps?.isCollapsed,\n isCollapsible:\n activeBreakpoint === \"medium\" ||\n componentProps.sideNavProps?.isCollapsible,\n // We have to use `as` because sideNavProps expects you to have `sideNavItems` defined even though it had to be passed in `...componentProps.sideNavProps`.\n } as typeof componentProps.sideNavProps,\n },\n }}\n appElement={appElement}\n appElementScrollingMode={appElementScrollingMode}\n hasStandardAppContentPadding={hasStandardAppContentPadding}\n hasSideNavProps={Boolean(componentProps.sideNavProps)}\n initialVisibleSections={initialVisibleSections}\n onError={onError}\n optionalComponents={optionalComponents}\n />\n )}\n </UiShellProvider>\n </ErrorBoundary>\n </OdysseyProvider>\n </ErrorBoundary>\n );\n};\n\nconst MemoizedUiShell = memo(UiShell);\nMemoizedUiShell.displayName = \"UiShell\";\n\nexport { MemoizedUiShell as UiShell };\n"],"mappings":";;;;;;AAYA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,mBAAA,GAAAD,OAAA;AAGA,IAAAE,YAAA,GAAAF,OAAA;AACA,IAAAG,qBAAA,GAAAH,OAAA;AACA,IAAAI,gBAAA,GAAAJ,OAAA;AACA,IAAAK,gBAAA,GAAAL,OAAA;AAKA,IAAAM,sBAAA,GAAAN,OAAA;AAIA,IAAAO,mBAAA,GAAAP,OAAA;AAA6D,IAAAQ,WAAA,GAAAR,OAAA;AA5B7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAqBO,MAAMS,qBAA+C,GAAAC,OAAA,CAAAD,qBAAA,GAAG;EAC7DE,YAAY,EAAEC,SAAS;EACvBC,WAAW,EAAED;AACf,CAAU;AAEV,MAAME,cAAc,GAAG,IAAAN,WAAA,CAAAO,GAAA;EAAK;AAAU,CAAE,CAAC;AAkDzC,MAAMC,OAAO,GAAGA,CAAC;EACfC,kBAAkB;EAClBC,yBAAyB;EACzBC,UAAU;EACVC,uBAAuB;EACvBC,gBAAgB;EAChBC,gBAAgB;EAChBC,4BAA4B;EAC5BC,sBAAsB;EACtBC,OAAO,GAAGC,OAAO,CAACC,KAAK;EACvBC,qBAAqB;EACrBC,kBAAkB;EAClBC,sBAAsB;EACtBC,8BAA8B;EAC9BC,6BAA6B;EAC7BC,2BAA2B;EAC3BC,sBAAsB;EACtBC,qBAAqB;EACrBC,iBAAiB;EACjBC;AACY,CAAC,KAAK;EAClB,MAAM,CAACC,cAAc,EAAEC,iBAAiB,CAAC,GAAG,IAAAC,eAAQ,EAAC/B,qBAAqB,CAAC;EAE3E,MAAMgC,gBAAgB,GAAG,IAAAC,4CAAqB,EAACrB,gBAAgB,CAAC;EAEhE,IAAAsB,gBAAS,EAAC,MAAM;IACd,MAAMC,WAAW,GAAGV,sBAAsB,CAAEI,cAAc,IAAK;MAE7DC,iBAAiB,CAACD,cAAc,IAAI7B,qBAAqB,CAAC;IAC5D,CAAC,CAAC;IAEFmB,qBAAqB,CAAC,CAAC;IAEvB,OAAO,MAAM;MACXgB,WAAW,CAAC,CAAC;IACf,CAAC;EACH,CAAC,EAAE,CAAChB,qBAAqB,EAAEM,sBAAsB,CAAC,CAAC;EAEnD,OAAOO,gBAAgB,KAAK,MAAM,GAAG,IAAI,GACvC,IAAAjC,WAAA,CAAAO,GAAA,EAACd,mBAAA,CAAA4C,aAAa;IAACC,QAAQ,EAAEhC,cAAe;IAACW,OAAO,EAAEA,OAAQ;IAAAsB,QAAA,EACxD,IAAAvC,WAAA,CAAAO,GAAA,EAACX,gBAAA,CAAA4C,eAAe;MACdC,kBAAkB,EAAEZ,oBAAqB;MACzCa,iBAAiB,EAAEd,iBAAkB;MAAAW,QAAA,EAErC,IAAAvC,WAAA,CAAA2C,IAAA,EAAClD,mBAAA,CAAA4C,aAAa;QAACC,QAAQ,EAAEhC,cAAe;QAACW,OAAO,EAAEA,OAAQ;QAAAsB,QAAA,GACxD,IAAAvC,WAAA,CAAAO,GAAA,EAACb,YAAA,CAAAkD,WAAW,IAAE,CAAC,EAEf,IAAA5C,WAAA,CAAA2C,IAAA,EAAC9C,gBAAA,CAAAgD,eAAe;UACdpC,kBAAkB,EAAEA,kBAAmB;UACvCC,yBAAyB,EAAEA,yBAA0B;UACrDI,gBAAgB,EAAEA,gBAAiB;UACnCQ,sBAAsB,EAAEA,sBAAuB;UAC/CC,8BAA8B,EAAEA,8BAA+B;UAC/DC,6BAA6B,EAAEA,6BAA8B;UAC7DC,2BAA2B,EAAEA,2BAA4B;UACzDE,qBAAqB,EAAEA,qBAAsB;UAAAY,QAAA,GAE5CN,gBAAgB,KAAK,QAAQ,IAC5B,IAAAjC,WAAA,CAAAO,GAAA,EAACZ,qBAAA,CAAAmD,oBAAoB;YAAA,GACfhB,cAAc;YAClBnB,UAAU,EAAEA,UAAW;YACvBC,uBAAuB,EAAEA,uBAAwB;YACjDmC,eAAe,EAAEC,OAAO,CAAClB,cAAc,CAAC3B,YAAY,CAAE;YACtDY,4BAA4B,EAAEA,4BAA6B;YAC3DC,sBAAsB,EAAEA,sBAAuB;YAC/CC,OAAO,EAAEA,OAAQ;YACjBI,kBAAkB,EAAEA;UAAmB,CACxC,CACF,EAEA,CAACY,gBAAgB,KAAK,QAAQ,IAAIA,gBAAgB,KAAK,MAAM,KAC5D,IAAAjC,WAAA,CAAAO,GAAA,EAACR,mBAAA,CAAAkD,kBAAkB;YAEf,GAAGnB,cAAc;YACjB,GAAG;cACD3B,YAAY,EAAE;gBACZ,GAAG2B,cAAc,CAAC3B,YAAY;gBAC9B+C,sBAAsB,EAAEjB,gBAAgB,KAAK,MAAM;gBACnDkB,WAAW,EACTlB,gBAAgB,KAAK,QAAQ,IAC7BH,cAAc,CAAC3B,YAAY,EAAEgD,WAAW;gBAC1CC,aAAa,EACXnB,gBAAgB,KAAK,QAAQ,IAC7BH,cAAc,CAAC3B,YAAY,EAAEiD;cAEjC;YACF,CAAC;YAEHzC,UAAU,EAAEA,UAAW;YACvBC,uBAAuB,EAAEA,uBAAwB;YACjDG,4BAA4B,EAAEA,4BAA6B;YAC3DgC,eAAe,EAAEC,OAAO,CAAClB,cAAc,CAAC3B,YAAY,CAAE;YACtDa,sBAAsB,EAAEA,sBAAuB;YAC/CC,OAAO,EAAEA,OAAQ;YACjBI,kBAAkB,EAAEA;UAAmB,CACxC,CACF;QAAA,CACc,CAAC;MAAA,CACL;IAAC,CACD;EAAC,CACL,CAChB;AACH,CAAC;AAED,MAAMgC,eAAe,GAAAnD,OAAA,CAAAM,OAAA,GAAG,IAAA8C,WAAI,EAAC9C,OAAO,CAAC;AACrC6C,eAAe,CAACE,WAAW,GAAG,SAAS","ignoreList":[]}
|
|
@@ -35,13 +35,18 @@ const UiShellProvider = ({
|
|
|
35
35
|
children,
|
|
36
36
|
closeSideNavMenu,
|
|
37
37
|
sideNavBackgroundColor,
|
|
38
|
+
sideNavBackgroundContrastColor,
|
|
38
39
|
subscribeToCloseRightSideMenu,
|
|
39
40
|
subscribeToCloseSideNavMenu,
|
|
40
41
|
topNavBackgroundColor
|
|
41
42
|
}) => {
|
|
42
43
|
const odysseyDesignTokens = (0, _OdysseyDesignTokensContext.useOdysseyDesignTokens)();
|
|
43
44
|
const defaultedSideNavBackgroundColor = sideNavBackgroundColor || odysseyDesignTokens.HueNeutralWhite;
|
|
44
|
-
const sideNavContrastColors = defaultedSideNavBackgroundColor !== odysseyDesignTokens.HueNeutralWhite ? (0, _createContrastColors.generateContrastColors)(
|
|
45
|
+
const sideNavContrastColors = defaultedSideNavBackgroundColor !== odysseyDesignTokens.HueNeutralWhite ? (0, _createContrastColors.generateContrastColors)({
|
|
46
|
+
backgroundColor: sideNavBackgroundColor || defaultedSideNavBackgroundColor,
|
|
47
|
+
backgroundContrastColor: sideNavBackgroundContrastColor,
|
|
48
|
+
odysseyDesignTokens
|
|
49
|
+
}) : undefined;
|
|
45
50
|
const isAppBackgroundHightContrast = appBackgroundContrastMode === "highContrast";
|
|
46
51
|
const defaultTopAndAppBackgroundColor = isAppBackgroundHightContrast ? odysseyDesignTokens.HueNeutralWhite : odysseyDesignTokens.HueNeutral50;
|
|
47
52
|
const topNavColor = topNavBackgroundColor || defaultTopAndAppBackgroundColor;
|