{"version":3,"file":"SideNavToggleButton.cjs","names":["_styled","_interopRequireDefault","require","_react","_i18n","_ChevronRight","_MuiPropsContext","_OdysseyDesignTokensContext","_Tooltip","_uiShellSharedConstants","_jsxRuntime","e","__esModule","default","SIDE_NAV_TOGGLE_ICON_SIZE","exports","SIDE_NAV_TOGGLE_ICON_HALF_SIZE","StyledToggleButton","styled","_Button2","shouldForwardProp","prop","clickAreaPadding","odysseyDesignTokens","border","height","left","padding","position","width","zIndex","UI_SHELL_OVERLAY_Z_INDEX","backgroundColor","borderColor","boxShadow","color","PalettePrimaryText","outline","HueNeutralWhite","borderRadius","ShadowScale1","content","top","StyledChevronRightIcon","ChevronRightIcon","isSideNavCollapsed","fontSize","undefined","right","transform","transitionDuration","TransitionDurationMain","transitionProperty","transitionTimingFunction","displayName","defaultLocalButton","window","document","createElement","SideNavToggleButton","ariaControls","id","onClick","onHighlight","tabIndex","useOdysseyDesignTokens","t","useTranslation","buttonRef","useRef","useEffect","setHighlighted","setUnhighlighted","setFocusHighlighted","Boolean","current","matches","addEventListener","removeEventListener","toggleLabel","useMemo","renderButton","useCallback","muiProps","jsx","ref","element","variant","children","Tooltip","ariaType","placement","text","MuiPropsContext","Consumer","MemoizedSideNavToggleButton","memo"],"sources":["../../../../src/ui-shell/SideNav/SideNavToggleButton.tsx"],"sourcesContent":["/*!\n * Copyright (c) 2022-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport type { ButtonProps as MuiButtonProps } from \"@mui/material\";\n\nimport styled from \"@emotion/styled\";\nimport { Button as MuiButton } from \"@mui/material\";\nimport {\n  HTMLAttributes,\n  memo,\n  useCallback,\n  useEffect,\n  useMemo,\n  useRef,\n} from \"react\";\n\nimport { useTranslation } from \"../../i18n.generated/i18n.js\";\nimport { ChevronRightIcon } from \"../../icons.generated/ChevronRight.js\";\nimport { MuiPropsContext, MuiPropsContextType } from \"../../MuiPropsContext.js\";\nimport {\n  DesignTokens,\n  useOdysseyDesignTokens,\n} from \"../../OdysseyDesignTokensContext.js\";\nimport { Tooltip } from \"../../Tooltip.js\";\nimport { UI_SHELL_OVERLAY_Z_INDEX } from \"../uiShellSharedConstants.js\";\n\nexport const SIDE_NAV_TOGGLE_ICON_SIZE = 24;\nexport const SIDE_NAV_TOGGLE_ICON_HALF_SIZE = SIDE_NAV_TOGGLE_ICON_SIZE / 2;\n\nconst StyledToggleButton = styled(MuiButton, {\n  shouldForwardProp: (prop) =>\n    prop !== \"clickAreaPadding\" && prop !== \"odysseyDesignTokens\",\n})<{\n  clickAreaPadding: number;\n  odysseyDesignTokens: DesignTokens;\n}>(({ clickAreaPadding, odysseyDesignTokens }) => ({\n  border: 0,\n  height: `${SIDE_NAV_TOGGLE_ICON_SIZE}px`,\n  left: `-${clickAreaPadding * 2}px`,\n  padding: 0,\n  position: \"relative\",\n  width: `calc(${SIDE_NAV_TOGGLE_ICON_SIZE}px + (${clickAreaPadding}px * 2))`,\n  zIndex: UI_SHELL_OVERLAY_Z_INDEX,\n\n  // `&&` is a CSS specificity override. Used here to counteract MUI Button styles.\n  \"&&\": {\n    backgroundColor: \"transparent\",\n    borderColor: \"transparent\",\n    boxShadow: \"none\",\n    color: odysseyDesignTokens.PalettePrimaryText,\n  },\n\n  \"&:focus-visible\": {\n    outline: \"none\",\n  },\n\n  // `&&` raises specificity to counteract the \"floating\" Button variant's `&[aria-expanded='true']:not([aria-disabled='true'])` rule. Since this button is always `aria-expanded` while open, that theme rule would otherwise set the chevron to `HueBlue600` on hover, matching the hover background and making the arrow invisible.\n  \"&&:hover, &&:focus-visible\": {\n    backgroundColor: \"transparent\",\n    color: odysseyDesignTokens.HueNeutralWhite,\n  },\n\n  \"&::before\": {\n    backgroundColor: odysseyDesignTokens.HueNeutralWhite,\n    borderColor: \"transparent\",\n    borderRadius: \"50%\",\n    boxShadow: odysseyDesignTokens.ShadowScale1,\n    color: odysseyDesignTokens.PalettePrimaryText,\n    content: \"''\",\n    height: `${SIDE_NAV_TOGGLE_ICON_SIZE}px`,\n    left: `${clickAreaPadding * 2}px`,\n    position: \"absolute\",\n    top: 0,\n    width: `${SIDE_NAV_TOGGLE_ICON_SIZE}px`,\n  },\n\n  \"&:hover::before, &:focus-visible::before\": {\n    backgroundColor: odysseyDesignTokens.PalettePrimaryText,\n  },\n}));\n\nconst StyledChevronRightIcon = styled(ChevronRightIcon, {\n  shouldForwardProp: (prop) =>\n    prop !== \"odysseyDesignTokens\" && prop !== \"isSideNavCollapsed\",\n})<{\n  isSideNavCollapsed: boolean;\n  odysseyDesignTokens: DesignTokens;\n}>(({ isSideNavCollapsed, odysseyDesignTokens }) => ({\n  fontSize: \"125%\",\n  left: isSideNavCollapsed ? undefined : \"4px\",\n  position: \"absolute\",\n  right: isSideNavCollapsed ? \"4px\" : undefined,\n  top: \"3px\",\n  transform: isSideNavCollapsed ? \"rotate(0deg)\" : \"rotate(-180deg)\", // Leave this as `-180deg` so it rotates over the top, not the bottom.\n  transitionDuration: odysseyDesignTokens.TransitionDurationMain,\n  transitionProperty: \"transform\",\n  transitionTimingFunction: \"ease-in-out\",\n}));\nStyledChevronRightIcon.displayName = \"StyledChevronRightIcon\";\n\nexport type SideNavToggleButtonProps = {\n  /**\n   * The `id` of the item this button controls\n   */\n  ariaControls: string;\n  /**\n   * Left padding in pixels for the click area of the button.\n   *\n   * Useful when moving the button around when trying to click it. This ensures the click area doesn't move to the right along with the button.\n   */\n  clickAreaPadding?: number;\n  /**\n   * HTML `id` attribute for the `<button>` element.\n   */\n  id?: string;\n  isSideNavCollapsed: boolean;\n  /**\n   * Click event handler for the `<button>` element.\n   */\n  onClick?: MuiButtonProps[\"onClick\"];\n  /**\n   * Provides the hovered or focused state of the `<button>` element.\n   */\n  onHighlight?: (isHighlighted: boolean) => void;\n  onKeyDown?: MuiButtonProps[\"onKeyDown\"];\n  tabIndex?: HTMLAttributes<HTMLElement>[\"tabIndex\"];\n};\n\n// This allows us to mutate the value with TypeScript. A singleton is fine because it gets overridden on render.\nconst defaultLocalButton =\n  typeof window === \"undefined\" ? null : document.createElement(\"button\");\n\nconst SideNavToggleButton = ({\n  ariaControls,\n  clickAreaPadding = 0,\n  id,\n  isSideNavCollapsed,\n  onClick,\n  onHighlight,\n  tabIndex,\n}: SideNavToggleButtonProps) => {\n  const odysseyDesignTokens = useOdysseyDesignTokens();\n  const { t } = useTranslation();\n\n  const buttonRef = useRef(defaultLocalButton);\n\n  useEffect(() => {\n    const setHighlighted = () => {\n      onHighlight?.(true);\n    };\n\n    const setUnhighlighted = () => {\n      onHighlight?.(false);\n    };\n\n    const setFocusHighlighted = () => {\n      onHighlight?.(Boolean(buttonRef.current?.matches(\":focus-visible\")));\n    };\n\n    buttonRef.current?.addEventListener(\"mouseenter\", setHighlighted);\n\n    buttonRef.current?.addEventListener(\"mouseleave\", setUnhighlighted);\n\n    buttonRef.current?.addEventListener(\"focus\", setFocusHighlighted, true);\n\n    buttonRef.current?.addEventListener(\"blur\", setFocusHighlighted, true);\n\n    setUnhighlighted();\n\n    return () => {\n      buttonRef.current?.removeEventListener(\"mouseenter\", setHighlighted);\n\n      buttonRef.current?.removeEventListener(\"mouseleave\", setUnhighlighted);\n\n      buttonRef.current?.removeEventListener(\n        \"focus\",\n        setFocusHighlighted,\n        true,\n      );\n\n      buttonRef.current?.removeEventListener(\"blur\", setFocusHighlighted, true);\n    };\n  }, [onHighlight]);\n\n  const toggleLabel = useMemo(\n    () =>\n      isSideNavCollapsed\n        ? t(\"sidenav.toggle.expand\")\n        : t(\"sidenav.toggle.collapse\"),\n    [isSideNavCollapsed, t],\n  );\n\n  const renderButton = useCallback(\n    (muiProps: MuiPropsContextType) => {\n      return (\n        <StyledToggleButton\n          {...muiProps}\n          aria-controls={ariaControls}\n          aria-expanded={!isSideNavCollapsed}\n          aria-label={toggleLabel}\n          clickAreaPadding={clickAreaPadding}\n          data-se=\"sidenav-toggle-button\"\n          data-sidenav-toggle\n          id={id}\n          odysseyDesignTokens={odysseyDesignTokens}\n          onClick={onClick}\n          ref={(element: HTMLButtonElement) => {\n            if (element) {\n              buttonRef.current = element;\n              //@ts-expect-error `ref` is an optional prop, but TypeScript doesn't know this.\n              muiProps.ref?.(element);\n            }\n          }}\n          tabIndex={tabIndex}\n          variant=\"floating\"\n        >\n          <StyledChevronRightIcon\n            isSideNavCollapsed={isSideNavCollapsed}\n            odysseyDesignTokens={odysseyDesignTokens}\n          />\n        </StyledToggleButton>\n      );\n    },\n    [\n      ariaControls,\n      clickAreaPadding,\n      id,\n      isSideNavCollapsed,\n      odysseyDesignTokens,\n      onClick,\n      tabIndex,\n      toggleLabel,\n    ],\n  );\n\n  return (\n    <Tooltip ariaType=\"description\" placement=\"right\" text={toggleLabel}>\n      <MuiPropsContext.Consumer>{renderButton}</MuiPropsContext.Consumer>\n    </Tooltip>\n  );\n};\n\nconst MemoizedSideNavToggleButton = memo(SideNavToggleButton);\nMemoizedSideNavToggleButton.displayName = \"SideNavToggleButton\";\n\nexport { MemoizedSideNavToggleButton as SideNavToggleButton };\n"],"mappings":"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","ignoreList":[]}