@okta/odyssey-react-mui 1.35.4 → 1.36.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/StringWithValue.cjs.map +1 -0
- package/dist/cjs/theme/useMediaQuery.cjs.map +1 -1
- package/dist/cjs/ui-shell/SideNav/SideNav.cjs +31 -14
- package/dist/cjs/ui-shell/SideNav/SideNav.cjs.map +1 -1
- package/dist/cjs/ui-shell/SideNav/useIsSideNavCollapsedSessionStorage.cjs +26 -0
- package/dist/cjs/ui-shell/SideNav/useIsSideNavCollapsedSessionStorage.cjs.map +1 -0
- package/dist/cjs/ui-shell/index.cjs +8 -1
- package/dist/cjs/ui-shell/index.cjs.map +1 -1
- package/dist/cjs/useMountLifecycleEffect.cjs +36 -0
- package/dist/cjs/useMountLifecycleEffect.cjs.map +1 -0
- package/dist/cjs/useSessionStorageState.cjs +64 -0
- package/dist/cjs/useSessionStorageState.cjs.map +1 -0
- package/dist/esm/StringWithValue.js.map +1 -0
- package/dist/esm/theme/useMediaQuery.js.map +1 -1
- package/dist/esm/ui-shell/SideNav/SideNav.js +31 -14
- package/dist/esm/ui-shell/SideNav/SideNav.js.map +1 -1
- package/dist/esm/ui-shell/SideNav/useIsSideNavCollapsedSessionStorage.js +19 -0
- package/dist/esm/ui-shell/SideNav/useIsSideNavCollapsedSessionStorage.js.map +1 -0
- package/dist/esm/ui-shell/index.js +1 -1
- package/dist/esm/ui-shell/index.js.map +1 -1
- package/dist/esm/useMountLifecycleEffect.js +29 -0
- package/dist/esm/useMountLifecycleEffect.js.map +1 -0
- package/dist/esm/useSessionStorageState.js +56 -0
- package/dist/esm/useSessionStorageState.js.map +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.scss +1 -1
- package/dist/tsconfig.production.tsbuildinfo +1 -1
- package/dist/types/StringWithValue.d.ts.map +1 -0
- package/dist/types/theme/useMediaQuery.d.ts +1 -1
- package/dist/types/theme/useMediaQuery.d.ts.map +1 -1
- package/dist/types/ui-shell/SideNav/SideNav.d.ts.map +1 -1
- package/dist/types/ui-shell/SideNav/useIsSideNavCollapsedSessionStorage.d.ts +17 -0
- package/dist/types/ui-shell/SideNav/useIsSideNavCollapsedSessionStorage.d.ts.map +1 -0
- package/dist/types/ui-shell/index.d.ts +1 -1
- package/dist/types/ui-shell/index.d.ts.map +1 -1
- package/dist/types/useMountLifecycleEffect.d.ts +16 -0
- package/dist/types/useMountLifecycleEffect.d.ts.map +1 -0
- package/dist/types/useSessionStorageState.d.ts +20 -0
- package/dist/types/useSessionStorageState.d.ts.map +1 -0
- package/package.json +5 -5
- package/dist/cjs/theme/StringWithValue.cjs.map +0 -1
- package/dist/esm/theme/StringWithValue.js.map +0 -1
- package/dist/types/theme/StringWithValue.d.ts.map +0 -1
- /package/dist/cjs/{theme/StringWithValue.cjs → StringWithValue.cjs} +0 -0
- /package/dist/esm/{theme/StringWithValue.js → StringWithValue.js} +0 -0
- /package/dist/types/{theme/StringWithValue.d.ts → StringWithValue.d.ts} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StringWithValue.cjs","names":[],"sources":["../../src/StringWithValue.ts"],"sourcesContent":["/*!\n * Copyright (c) 2025-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\nexport type StringWithValue<T extends string> = T extends \"\" ? never : T;\n"],"mappings":"","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMediaQuery.cjs","names":["_react","require","useMediaQuery","mediaQuery","mediaQueryList","useMemo","window","matchMedia","hasMatches","setHasMatches","useState","matches","updateHasMatches","useCallback","event","useEffect","addEventListener","removeEventListener","exports"],"sources":["../../../src/theme/useMediaQuery.ts"],"sourcesContent":["/*!\n * Copyright (c) 2025-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 { useCallback, useEffect, useMemo, useState } from \"react\";\n\nimport { StringWithValue } from \"
|
|
1
|
+
{"version":3,"file":"useMediaQuery.cjs","names":["_react","require","useMediaQuery","mediaQuery","mediaQueryList","useMemo","window","matchMedia","hasMatches","setHasMatches","useState","matches","updateHasMatches","useCallback","event","useEffect","addEventListener","removeEventListener","exports"],"sources":["../../../src/theme/useMediaQuery.ts"],"sourcesContent":["/*!\n * Copyright (c) 2025-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 { useCallback, useEffect, useMemo, useState } from \"react\";\n\nimport { StringWithValue } from \"../StringWithValue.js\";\n\nexport const useMediaQuery = <MediaQuery extends string>(\n mediaQuery: StringWithValue<MediaQuery>,\n) => {\n const mediaQueryList = useMemo(\n () => window.matchMedia(mediaQuery),\n [mediaQuery],\n );\n\n const [hasMatches, setHasMatches] = useState(() => mediaQueryList.matches);\n\n const updateHasMatches = useCallback(\n (event: MediaQueryListEvent | MediaQueryList) =>\n setHasMatches(event.matches),\n [],\n );\n\n useEffect(() => {\n mediaQueryList.addEventListener(\"change\", updateHasMatches);\n\n updateHasMatches(mediaQueryList);\n\n return () => {\n mediaQueryList.removeEventListener(\"change\", updateHasMatches);\n };\n }, [mediaQueryList, updateHasMatches]);\n\n return hasMatches;\n};\n"],"mappings":";;;;;;AAYA,IAAAA,MAAA,GAAAC,OAAA;AAZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAMO,MAAMC,aAAa,GACxBC,UAAuC,IACpC;EACH,MAAMC,cAAc,GAAG,IAAAC,cAAO,EAC5B,MAAMC,MAAM,CAACC,UAAU,CAACJ,UAAU,CAAC,EACnC,CAACA,UAAU,CACb,CAAC;EAED,MAAM,CAACK,UAAU,EAAEC,aAAa,CAAC,GAAG,IAAAC,eAAQ,EAAC,MAAMN,cAAc,CAACO,OAAO,CAAC;EAE1E,MAAMC,gBAAgB,GAAG,IAAAC,kBAAW,EACjCC,KAA2C,IAC1CL,aAAa,CAACK,KAAK,CAACH,OAAO,CAAC,EAC9B,EACF,CAAC;EAED,IAAAI,gBAAS,EAAC,MAAM;IACdX,cAAc,CAACY,gBAAgB,CAAC,QAAQ,EAAEJ,gBAAgB,CAAC;IAE3DA,gBAAgB,CAACR,cAAc,CAAC;IAEhC,OAAO,MAAM;MACXA,cAAc,CAACa,mBAAmB,CAAC,QAAQ,EAAEL,gBAAgB,CAAC;IAChE,CAAC;EACH,CAAC,EAAE,CAACR,cAAc,EAAEQ,gBAAgB,CAAC,CAAC;EAEtC,OAAOJ,UAAU;AACnB,CAAC;AAACU,OAAA,CAAAhB,aAAA,GAAAA,aAAA","ignoreList":[]}
|
|
@@ -22,6 +22,8 @@ var _SortableList = require("./SortableList/SortableList.cjs");
|
|
|
22
22
|
var _Typography = require("../../Typography.cjs");
|
|
23
23
|
var _UiShellProvider = require("../../ui-shell/UiShellProvider.cjs");
|
|
24
24
|
var _uiShellSharedConstants = require("../uiShellSharedConstants.cjs");
|
|
25
|
+
var _useIsSideNavCollapsedSessionStorage = require("./useIsSideNavCollapsedSessionStorage.cjs");
|
|
26
|
+
var _useMountLifecycleEffect = require("../../useMountLifecycleEffect.cjs");
|
|
25
27
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
26
28
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
27
29
|
/*!
|
|
@@ -280,9 +282,12 @@ const SideNav = ({
|
|
|
280
282
|
const [hasContentScrolled, setHasContentScrolled] = (0, _react.useState)(false);
|
|
281
283
|
const [hasNeighboringContent, setHasNeighboringContent] = (0, _react.useState)(false);
|
|
282
284
|
const [isContentScrollable, setIsContentScrollable] = (0, _react.useState)(false);
|
|
283
|
-
const [isSideNavCollapsed, setIsSideNavCollapsed] = (0, _react.useState)(isCollapsed);
|
|
284
285
|
const [isSideNavToggleHighlighted, setIsSideNavToggleHighlighted] = (0, _react.useState)(false);
|
|
285
286
|
const [sideNavItemsList, updateSideNavItemsList] = (0, _react.useState)(sideNavItems);
|
|
287
|
+
const {
|
|
288
|
+
sessionState: isSideNavCollapsed,
|
|
289
|
+
setSessionState: setIsSideNavCollapsed
|
|
290
|
+
} = (0, _useIsSideNavCollapsedSessionStorage.useIsSideNavCollapsedSessionStorage)(isCollapsed);
|
|
286
291
|
const uiShellContext = (0, _UiShellProvider.useUiShellContext)();
|
|
287
292
|
const odysseyDesignTokens = (0, _OdysseyDesignTokensContext.useOdysseyDesignTokens)();
|
|
288
293
|
const {
|
|
@@ -295,11 +300,26 @@ const SideNav = ({
|
|
|
295
300
|
const blankElement = (0, _react.useMemo)(() => (0, _jsxRuntime.jsx)("div", {}), []);
|
|
296
301
|
(0, _react.useEffect)(() => updateSideNavItemsList(sideNavItems), [sideNavItems]);
|
|
297
302
|
(0, _react.useEffect)(() => {
|
|
298
|
-
setIsSideNavCollapsed(isCollapsed);
|
|
299
303
|
if (sideNavRef.current) {
|
|
300
304
|
setHasNeighboringContent(sideNavRef.current.getBoundingClientRect().x > 0);
|
|
301
305
|
}
|
|
302
306
|
}, [isCollapsed]);
|
|
307
|
+
const onMount = (0, _react.useCallback)(() => {
|
|
308
|
+
if (!isCollapsible) {
|
|
309
|
+
setIsSideNavCollapsed(isCollapsed);
|
|
310
|
+
}
|
|
311
|
+
}, [isCollapsed, isCollapsible, setIsSideNavCollapsed]);
|
|
312
|
+
const onUpdate = (0, _react.useCallback)(() => {
|
|
313
|
+
setIsSideNavCollapsed(isCollapsed);
|
|
314
|
+
}, [isCollapsed, setIsSideNavCollapsed]);
|
|
315
|
+
(0, _useMountLifecycleEffect.useMountLifecycleEffect)({
|
|
316
|
+
onMount,
|
|
317
|
+
onUpdate
|
|
318
|
+
});
|
|
319
|
+
console.log({
|
|
320
|
+
isCollapsed,
|
|
321
|
+
isSideNavCollapsed
|
|
322
|
+
});
|
|
303
323
|
(0, _react.useEffect)(() => {
|
|
304
324
|
const updateIsContentScrollable = () => {
|
|
305
325
|
if (scrollableContentRef.current && scrollableContentRef.current.parentElement) {
|
|
@@ -423,7 +443,7 @@ const SideNav = ({
|
|
|
423
443
|
}
|
|
424
444
|
return !isSideNavCollapsed;
|
|
425
445
|
});
|
|
426
|
-
}, [onExpand,
|
|
446
|
+
}, [onCollapse, onExpand, setIsSideNavCollapsed]);
|
|
427
447
|
const sideNavExpandKeyHandler = (0, _react.useCallback)(event => {
|
|
428
448
|
if (event?.key === "Enter" || event?.code === "Space") {
|
|
429
449
|
event.preventDefault();
|
|
@@ -431,17 +451,14 @@ const SideNav = ({
|
|
|
431
451
|
}
|
|
432
452
|
}, [sideNavExpandClickHandler]);
|
|
433
453
|
(0, _react.useEffect)(() => {
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
}
|
|
443
|
-
return () => {};
|
|
444
|
-
}, [isCollapsed, onCollapse, uiShellContext]);
|
|
454
|
+
const unsubscribe = uiShellContext?.subscribeToCloseSideNavMenu(() => {
|
|
455
|
+
onCollapse?.();
|
|
456
|
+
setIsSideNavCollapsed(true);
|
|
457
|
+
});
|
|
458
|
+
return () => {
|
|
459
|
+
unsubscribe?.();
|
|
460
|
+
};
|
|
461
|
+
}, [onCollapse, setIsSideNavCollapsed, uiShellContext]);
|
|
445
462
|
const setSortedItems = (0, _react.useCallback)((parentId, activeId, activeIndex, overIndex) => {
|
|
446
463
|
const sortedSideNavItems = sideNavItemsList.map(item => item.id === parentId && item.nestedNavItems ? {
|
|
447
464
|
...item,
|
|
@@ -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","_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","isCollapsible","isCollapsed","isCompact","isLoading","isObtrusive","logoProps","onCollapse","onExpand","onSort","sideNavItems","setHasContentScrolled","useState","setHasNeighboringContent","setIsContentScrollable","setIsSideNavCollapsed","setIsSideNavToggleHighlighted","sideNavItemsList","updateSideNavItemsList","uiShellContext","useUiShellContext","t","useTranslation","scrollableContentRef","useRef","resizeObserverRef","intersectionObserverRef","sideNavRef","blankElement","useMemo","useEffect","current","getBoundingClientRect","x","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","useCallback","itemId","undefined","sideNavItemContentProviderValue","depth","setSelectedItem","selectedItemId","updatedSideNavItems","map","item","childItem","closeSideNavMenu","processedSideNavItems","childNavItems","childProps","isDisabled","isSortable","navItem","SideNavItemContentContext","Provider","value","SideNavItemContent","scrollRef","onItemSelected","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","label","isSectionHeader","startIcon","isDefaultExpanded","isExpanded","ErrorBoundary","fallback","Overline","component","StyledSideNavListItem","disabled","NavAccordion","SortableList","items","onChange","renderItem","sortableItem","Item","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\";\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}));\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 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 [isSideNavCollapsed, setIsSideNavCollapsed] = useState(isCollapsed);\n const [isSideNavToggleHighlighted, setIsSideNavToggleHighlighted] =\n useState(false);\n const [sideNavItemsList, updateSideNavItemsList] = useState(sideNavItems);\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 setIsSideNavCollapsed(isCollapsed);\n\n if (sideNavRef.current) {\n setHasNeighboringContent(\n sideNavRef.current.getBoundingClientRect().x > 0,\n );\n }\n }, [isCollapsed]);\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 uiShellContext?.closeSideNavMenu();\n }\n },\n [isCollapsed, isObtrusive, sideNavItemsList, uiShellContext],\n );\n\n const processedSideNavItems = useMemo(() => {\n return sideNavItemsList?.map((item) => ({\n ...item,\n childNavItems: item.nestedNavItems?.map((childProps) => {\n return {\n id: childProps.id,\n isSelected: childProps.isSelected,\n isDisabled: childProps.isDisabled,\n isSortable: childProps.isSortable,\n navItem: (\n <SideNavItemContentContext.Provider\n value={{\n ...sideNavItemContentProviderValue,\n depth: 2,\n isSortable: item.isSortable,\n }}\n key={childProps.id}\n >\n <SideNavItemContent\n {...childProps}\n scrollRef={getRefIfThisIsFirstNodeWithIsSelected(childProps.id)}\n onItemSelected={setSelectedItem}\n translate={childProps.translate}\n />\n </SideNavItemContentContext.Provider>\n ),\n };\n }),\n }));\n }, [\n getRefIfThisIsFirstNodeWithIsSelected,\n sideNavItemsList,\n sideNavItemContentProviderValue,\n setSelectedItem,\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 }, [onExpand, onCollapse]);\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 if (isCollapsed) {\n const unsubscribe = uiShellContext?.subscribeToCloseSideNavMenu(() => {\n onCollapse?.();\n setIsSideNavCollapsed(true);\n });\n\n return () => {\n unsubscribe?.();\n };\n }\n\n return () => {};\n }, [isCollapsed, onCollapse, 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 id,\n label,\n isSectionHeader,\n startIcon,\n childNavItems,\n isSortable,\n isDefaultExpanded,\n isDisabled,\n isExpanded,\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 return (\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 <StyledSideNavListContainer role=\"none\">\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 </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":[]}
|
|
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","isCollapsible","isCollapsed","isCompact","isLoading","isObtrusive","logoProps","onCollapse","onExpand","onSort","sideNavItems","setHasContentScrolled","useState","setHasNeighboringContent","setIsContentScrollable","setIsSideNavToggleHighlighted","sideNavItemsList","updateSideNavItemsList","sessionState","setSessionState","setIsSideNavCollapsed","useIsSideNavCollapsedSessionStorage","uiShellContext","useUiShellContext","t","useTranslation","scrollableContentRef","useRef","resizeObserverRef","intersectionObserverRef","sideNavRef","blankElement","useMemo","useEffect","current","getBoundingClientRect","x","onMount","useCallback","onUpdate","useMountLifecycleEffect","console","log","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","scrollRef","onItemSelected","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","label","isSectionHeader","startIcon","isDefaultExpanded","isExpanded","ErrorBoundary","fallback","Overline","component","StyledSideNavListItem","disabled","NavAccordion","SortableList","items","onChange","renderItem","sortableItem","Item","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}));\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 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(sideNavItems);\n\n const {\n sessionState: isSideNavCollapsed,\n setSessionState: setIsSideNavCollapsed,\n } = useIsSideNavCollapsedSessionStorage(isCollapsed);\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`.\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 console.log({ isCollapsed, isSideNavCollapsed });\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 uiShellContext?.closeSideNavMenu();\n }\n },\n [isCollapsed, isObtrusive, sideNavItemsList, uiShellContext],\n );\n\n const processedSideNavItems = useMemo(() => {\n return sideNavItemsList?.map((item) => ({\n ...item,\n childNavItems: item.nestedNavItems?.map((childProps) => {\n return {\n id: childProps.id,\n isSelected: childProps.isSelected,\n isDisabled: childProps.isDisabled,\n isSortable: childProps.isSortable,\n navItem: (\n <SideNavItemContentContext.Provider\n value={{\n ...sideNavItemContentProviderValue,\n depth: 2,\n isSortable: item.isSortable,\n }}\n key={childProps.id}\n >\n <SideNavItemContent\n {...childProps}\n scrollRef={getRefIfThisIsFirstNodeWithIsSelected(childProps.id)}\n onItemSelected={setSelectedItem}\n translate={childProps.translate}\n />\n </SideNavItemContentContext.Provider>\n ),\n };\n }),\n }));\n }, [\n getRefIfThisIsFirstNodeWithIsSelected,\n sideNavItemsList,\n sideNavItemContentProviderValue,\n setSelectedItem,\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 id,\n label,\n isSectionHeader,\n startIcon,\n childNavItems,\n isSortable,\n isDefaultExpanded,\n isDisabled,\n isExpanded,\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 return (\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 <StyledSideNavListContainer role=\"none\">\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 </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":[]}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.useIsSideNavCollapsedSessionStorage = exports.sessionStorageKey = void 0;
|
|
7
|
+
var _useSessionStorageState = require("../../useSessionStorageState.cjs");
|
|
8
|
+
/*!
|
|
9
|
+
* Copyright (c) 2025-present, Okta, Inc. and/or its affiliates. All rights reserved.
|
|
10
|
+
* The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the "License.")
|
|
11
|
+
*
|
|
12
|
+
* You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.
|
|
13
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
14
|
+
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
15
|
+
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
16
|
+
*
|
|
17
|
+
* See the License for the specific language governing permissions and limitations under the License.
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
const sessionStorageKey = exports.sessionStorageKey = "__uiShell-sideNav-isCollapsed";
|
|
21
|
+
const useIsSideNavCollapsedSessionStorage = isSideNavInitiallyCollapsed => (0, _useSessionStorageState.useSessionStorageState)({
|
|
22
|
+
initialState: isSideNavInitiallyCollapsed,
|
|
23
|
+
key: sessionStorageKey
|
|
24
|
+
});
|
|
25
|
+
exports.useIsSideNavCollapsedSessionStorage = useIsSideNavCollapsedSessionStorage;
|
|
26
|
+
//# sourceMappingURL=useIsSideNavCollapsedSessionStorage.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useIsSideNavCollapsedSessionStorage.cjs","names":["_useSessionStorageState","require","sessionStorageKey","exports","useIsSideNavCollapsedSessionStorage","isSideNavInitiallyCollapsed","useSessionStorageState","initialState","key"],"sources":["../../../../src/ui-shell/SideNav/useIsSideNavCollapsedSessionStorage.ts"],"sourcesContent":["/*!\n * Copyright (c) 2025-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 { useSessionStorageState } from \"../../useSessionStorageState.js\";\n\nexport const sessionStorageKey = \"__uiShell-sideNav-isCollapsed\";\n\nexport const useIsSideNavCollapsedSessionStorage = (\n isSideNavInitiallyCollapsed: boolean,\n) =>\n useSessionStorageState({\n initialState: isSideNavInitiallyCollapsed,\n key: sessionStorageKey,\n });\n"],"mappings":";;;;;;AAYA,IAAAA,uBAAA,GAAAC,OAAA;AAZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIO,MAAMC,iBAAiB,GAAAC,OAAA,CAAAD,iBAAA,GAAG,+BAA+B;AAEzD,MAAME,mCAAmC,GAC9CC,2BAAoC,IAEpC,IAAAC,8CAAsB,EAAC;EACrBC,YAAY,EAAEF,2BAA2B;EACzCG,GAAG,EAAEN;AACP,CAAC,CAAC;AAACC,OAAA,CAAAC,mCAAA,GAAAA,mCAAA","ignoreList":[]}
|
|
@@ -5,7 +5,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
var _exportNames = {
|
|
7
7
|
UiShell: true,
|
|
8
|
-
adminAppUiShellBreakpoints: true
|
|
8
|
+
adminAppUiShellBreakpoints: true,
|
|
9
|
+
useUiShellBreakpoints: true
|
|
9
10
|
};
|
|
10
11
|
Object.defineProperty(exports, "UiShell", {
|
|
11
12
|
enumerable: true,
|
|
@@ -19,6 +20,12 @@ Object.defineProperty(exports, "adminAppUiShellBreakpoints", {
|
|
|
19
20
|
return _useUiShellBreakpoints.adminAppUiShellBreakpoints;
|
|
20
21
|
}
|
|
21
22
|
});
|
|
23
|
+
Object.defineProperty(exports, "useUiShellBreakpoints", {
|
|
24
|
+
enumerable: true,
|
|
25
|
+
get: function () {
|
|
26
|
+
return _useUiShellBreakpoints.useUiShellBreakpoints;
|
|
27
|
+
}
|
|
28
|
+
});
|
|
22
29
|
var _index = require("./AppSwitcher/index.cjs");
|
|
23
30
|
Object.keys(_index).forEach(function (key) {
|
|
24
31
|
if (key === "default" || key === "__esModule") return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","names":["_index","require","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_InnerAppContainer","_NarrowUiShellContent","_renderUiShell","_index2","_index3","_uiShellContentTypes","_useHasUiShell","_WideUiShellContent","_renderReactInWebComponent","_UiShell","_useUiShellBreakpoints"],"sources":["../../../src/ui-shell/index.ts"],"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\nexport * from \"./AppSwitcher/index.js\";\nexport * from \"./InnerAppContainer.js\";\nexport * from \"./NarrowUiShellContent.js\";\nexport * from \"./renderUiShell.js\";\nexport * from \"./SideNav/index.js\";\nexport * from \"./TopNav/index.js\";\nexport * from \"./uiShellContentTypes.js\";\nexport * from \"./useHasUiShell.js\";\nexport * from \"./WideUiShellContent.js\";\n\nexport * from \"../web-component/renderReactInWebComponent.js\"; // This is located here because some teams use React v17, and this uses React v18's `ReactDOM/client` import which isn't in older versions.\n\nexport { UiShell, type UiShellProps } from \"./UiShell.js\";\nexport {
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["_index","require","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_InnerAppContainer","_NarrowUiShellContent","_renderUiShell","_index2","_index3","_uiShellContentTypes","_useHasUiShell","_WideUiShellContent","_renderReactInWebComponent","_UiShell","_useUiShellBreakpoints"],"sources":["../../../src/ui-shell/index.ts"],"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\nexport * from \"./AppSwitcher/index.js\";\nexport * from \"./InnerAppContainer.js\";\nexport * from \"./NarrowUiShellContent.js\";\nexport * from \"./renderUiShell.js\";\nexport * from \"./SideNav/index.js\";\nexport * from \"./TopNav/index.js\";\nexport * from \"./uiShellContentTypes.js\";\nexport * from \"./useHasUiShell.js\";\nexport * from \"./WideUiShellContent.js\";\n\nexport * from \"../web-component/renderReactInWebComponent.js\"; // This is located here because some teams use React v17, and this uses React v18's `ReactDOM/client` import which isn't in older versions.\n\nexport { UiShell, type UiShellProps } from \"./UiShell.js\";\nexport {\n adminAppUiShellBreakpoints,\n useUiShellBreakpoints,\n} from \"./useUiShellBreakpoints.js\";\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.useMountLifecycleEffect = void 0;
|
|
7
|
+
var _react = require("react");
|
|
8
|
+
/*!
|
|
9
|
+
* Copyright (c) 2025-present, Okta, Inc. and/or its affiliates. All rights reserved.
|
|
10
|
+
* The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the "License.")
|
|
11
|
+
*
|
|
12
|
+
* You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.
|
|
13
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
14
|
+
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
15
|
+
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
16
|
+
*
|
|
17
|
+
* See the License for the specific language governing permissions and limitations under the License.
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
const useMountLifecycleEffect = ({
|
|
21
|
+
onMount,
|
|
22
|
+
onUpdate
|
|
23
|
+
}) => {
|
|
24
|
+
const hasSetSessionStorageRef = (0, _react.useRef)(false);
|
|
25
|
+
const onMountRef = (0, _react.useRef)(onMount);
|
|
26
|
+
(0, _react.useEffect)(() => {
|
|
27
|
+
if (hasSetSessionStorageRef.current) {
|
|
28
|
+
onUpdate?.();
|
|
29
|
+
} else {
|
|
30
|
+
hasSetSessionStorageRef.current = true;
|
|
31
|
+
onMountRef.current?.();
|
|
32
|
+
}
|
|
33
|
+
}, [onUpdate]);
|
|
34
|
+
};
|
|
35
|
+
exports.useMountLifecycleEffect = useMountLifecycleEffect;
|
|
36
|
+
//# sourceMappingURL=useMountLifecycleEffect.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useMountLifecycleEffect.cjs","names":["_react","require","useMountLifecycleEffect","onMount","onUpdate","hasSetSessionStorageRef","useRef","onMountRef","useEffect","current","exports"],"sources":["../../src/useMountLifecycleEffect.ts"],"sourcesContent":["/*!\n * Copyright (c) 2025-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 { useEffect, useRef } from \"react\";\n\nexport const useMountLifecycleEffect = ({\n onMount,\n onUpdate,\n}: {\n onMount?: () => void;\n onUpdate?: () => void;\n}) => {\n const hasSetSessionStorageRef = useRef(false);\n const onMountRef = useRef(onMount);\n\n useEffect(() => {\n if (hasSetSessionStorageRef.current) {\n onUpdate?.();\n } else {\n hasSetSessionStorageRef.current = true;\n onMountRef.current?.();\n }\n }, [onUpdate]);\n};\n"],"mappings":";;;;;;AAYA,IAAAA,MAAA,GAAAC,OAAA;AAZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIO,MAAMC,uBAAuB,GAAGA,CAAC;EACtCC,OAAO;EACPC;AAIF,CAAC,KAAK;EACJ,MAAMC,uBAAuB,GAAG,IAAAC,aAAM,EAAC,KAAK,CAAC;EAC7C,MAAMC,UAAU,GAAG,IAAAD,aAAM,EAACH,OAAO,CAAC;EAElC,IAAAK,gBAAS,EAAC,MAAM;IACd,IAAIH,uBAAuB,CAACI,OAAO,EAAE;MACnCL,QAAQ,GAAG,CAAC;IACd,CAAC,MAAM;MACLC,uBAAuB,CAACI,OAAO,GAAG,IAAI;MACtCF,UAAU,CAACE,OAAO,GAAG,CAAC;IACxB;EACF,CAAC,EAAE,CAACL,QAAQ,CAAC,CAAC;AAChB,CAAC;AAACM,OAAA,CAAAR,uBAAA,GAAAA,uBAAA","ignoreList":[]}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.useSessionStorageState = exports.getSessionStorageValue = void 0;
|
|
7
|
+
var _react = require("react");
|
|
8
|
+
var _useMountLifecycleEffect = require("./useMountLifecycleEffect.cjs");
|
|
9
|
+
/*!
|
|
10
|
+
* Copyright (c) 2025-present, Okta, Inc. and/or its affiliates. All rights reserved.
|
|
11
|
+
* The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the "License.")
|
|
12
|
+
*
|
|
13
|
+
* You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.
|
|
14
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
15
|
+
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
16
|
+
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
17
|
+
*
|
|
18
|
+
* See the License for the specific language governing permissions and limitations under the License.
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
const getSessionStorageValue = key => {
|
|
22
|
+
const sessionStorageValue = window.sessionStorage.getItem(key);
|
|
23
|
+
try {
|
|
24
|
+
if (typeof sessionStorageValue === "string") {
|
|
25
|
+
return JSON.parse(sessionStorageValue);
|
|
26
|
+
}
|
|
27
|
+
return null;
|
|
28
|
+
} catch {
|
|
29
|
+
if (typeof sessionStorageValue === "string") {
|
|
30
|
+
return sessionStorageValue;
|
|
31
|
+
}
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
exports.getSessionStorageValue = getSessionStorageValue;
|
|
36
|
+
const useSessionStorageState = ({
|
|
37
|
+
initialState,
|
|
38
|
+
key
|
|
39
|
+
}) => {
|
|
40
|
+
if (!key) {
|
|
41
|
+
throw new Error("You must pass a value for `key`.");
|
|
42
|
+
}
|
|
43
|
+
const sessionState = (0, _react.useMemo)(() => getSessionStorageValue(key), [key]);
|
|
44
|
+
const setSessionState = (0, _react.useCallback)(value => {
|
|
45
|
+
const sessionStorageState = typeof value === "undefined" ? "" : JSON.stringify(value);
|
|
46
|
+
window.sessionStorage.setItem(key, sessionStorageState);
|
|
47
|
+
}, [key]);
|
|
48
|
+
const [localState, setLocalState] = (0, _react.useState)(() => sessionState ?? initialState);
|
|
49
|
+
(0, _react.useEffect)(() => {
|
|
50
|
+
setSessionState(localState);
|
|
51
|
+
}, [localState, setSessionState]);
|
|
52
|
+
const onUpdate = (0, _react.useCallback)(() => {
|
|
53
|
+
setLocalState(sessionState ?? initialState);
|
|
54
|
+
}, [initialState, sessionState]);
|
|
55
|
+
(0, _useMountLifecycleEffect.useMountLifecycleEffect)({
|
|
56
|
+
onUpdate
|
|
57
|
+
});
|
|
58
|
+
return {
|
|
59
|
+
sessionState: localState,
|
|
60
|
+
setSessionState: setLocalState
|
|
61
|
+
};
|
|
62
|
+
};
|
|
63
|
+
exports.useSessionStorageState = useSessionStorageState;
|
|
64
|
+
//# sourceMappingURL=useSessionStorageState.cjs.map
|