{ "version": 3, "sources": ["../../../../../../owl-nest/common/project-manager-nav/src/constants.ts", "../../../../../../owl-nest/common/project-manager-nav/src/ResponsiveMenu.tsx"], "sourcesContent": ["export const PM_MENU_RAW_WIDTH = 228\nexport const PM_MENU_WIDTH = `${PM_MENU_RAW_WIDTH}px`\n", "import * as React from 'react'\nimport styled, { css, createGlobalStyle } from 'styled-components'\n\nimport * as hooks from '@owl-nest/hooks'\nimport * as plume from '@ulule/owl-kit-components/next'\nimport { t } from '@owl-nest/localize'\nimport { scroll } from '@owl-nest/utils'\n\nimport { PM_MENU_WIDTH } from './constants'\n\ntype ResponsiveMenuProps = {\n className?: string\n labelMargin: number\n closedMenuHeight: number\n children: React.ComponentType<{\n setActiveTopPosition: (top: number) => void\n isMobileNavOpen: boolean\n containerRef: React.RefObject<HTMLElement>\n }>\n mobileBreakpoint?: string\n}\n\n//TODO: This component was extracted from\n// `frontend/owl-nest/common/project-manager-nav/src/NavMenu.tsx` The\n// `ResponsiveMenu` component handles the \"transformation\" of the menu in an\n// animated dropdown in mobile. Since the `backer-backoffice` feature needed the\n// same behavior, the component was extracted. But to limit the impact on the\n// existing `NavMenu` its code was not changed to use `ResponsiveMenu`. If you\n// change anything in `ResponsiveMenu`, remember to port the modification back\n// in `NavMenu`\nexport function ResponsiveMenu({\n className,\n labelMargin,\n closedMenuHeight,\n children: Content,\n mobileBreakpoint,\n}: ResponsiveMenuProps) {\n const height = hooks.use100vh()\n const breakpoint = mobileBreakpoint ?? plume.BREAKPOINTS.TABLET\n\n const elementMeasuresRef = React.useRef<{ top: number; id: string; isActive?: boolean }[]>([])\n\n const isClientSide = hooks.useClientSide()\n const previousLocation = hooks.usePrevious(isClientSide ? window.location.href : '')\n plume.hooks.useIsoLayoutEffect(() => {\n if (isClientSide && previousLocation !== window.location.href) {\n setMobileNavAsOpen(false)\n }\n\n return () => {\n elementMeasuresRef.current = []\n }\n })\n\n const wrapperMeasureRef = React.useRef<{ height?: number; top: number }>({ top: 0 })\n const wrapperRef = React.useRef<HTMLDivElement>(null)\n const [closedMobileScroll, setClosedMobileScroll] = React.useState(0)\n\n const [isMobileNavOpen, setMobileNavAsOpen] = React.useState(false)\n\n const isDesktop = hooks.useDramaticallyInefficientMediaQuery(breakpoint)\n const [enableTransition, setEnableTransition] = React.useState(false)\n\n plume.hooks.useIsoLayoutEffect(() => {\n setTimeout(() => setEnableTransition(!isDesktop), 0)\n }, [isDesktop, closedMobileScroll])\n\n React.useEffect(() => {\n if (isDesktop) {\n setMobileNavAsOpen(false)\n }\n }, [isDesktop])\n\n // On ne peut pas utiliser le positionnement sticky du a la structure de la page projet,\n // c'est pourquoi on regarde aussi la position du footer\n const $contentRef = React.useRef<HTMLElement>(null)\n const $footerRef = React.useRef(typeof window !== 'undefined' ? document.querySelector('.b-footer') : null)\n const isIntersecting = hooks.useIsIntersecting($contentRef, { threshold: 0 }, true)\n const isIntersectingFooter = hooks.useIsIntersecting($footerRef, { threshold: 0 }, true)\n\n return (\n <Overlay\n className={className}\n height={height}\n openMobile={isMobileNavOpen}\n breakpoint={breakpoint}\n onClick={() => {\n if (wrapperRef.current) {\n wrapperRef.current.scrollTo({\n top: 0,\n behavior: 'smooth',\n })\n }\n }}\n >\n <MobileContainer\n closedMenuHeight={closedMenuHeight}\n labelMargin={labelMargin}\n enableTransition={enableTransition}\n openMobile={isMobileNavOpen}\n breakpoint={breakpoint}\n >\n <Wrapper\n breakpoint={breakpoint}\n height={wrapperMeasureRef.current.height}\n closedMenuHeight={closedMenuHeight}\n enableTransition={enableTransition}\n ref={(element) => {\n if (element instanceof HTMLDivElement) {\n const { top, height } = element.getBoundingClientRect()\n wrapperMeasureRef.current.top = top\n wrapperMeasureRef.current.height = wrapperMeasureRef.current.height ?? height\n ;(wrapperRef as any).current = element\n }\n }}\n scroll={closedMobileScroll}\n openMobile={isMobileNavOpen}\n onClickCapture={(event) => {\n if (!hooks.matchQuery(breakpoint) && !isMobileNavOpen) {\n event.stopPropagation()\n event.preventDefault()\n setMobileNavAsOpen(true)\n }\n }}\n >\n <Content\n containerRef={$contentRef}\n setActiveTopPosition={(top) => {\n const wrapperMeasure = wrapperMeasureRef.current\n setClosedMobileScroll(top - wrapperMeasure.top - labelMargin)\n }}\n isMobileNavOpen={isMobileNavOpen}\n />\n </Wrapper>\n {!isDesktop && (\n <CloseButton openMobile={isMobileNavOpen} onClick={() => setMobileNavAsOpen(false)}>\n <plume.styles.heading.XXXXXS>\n {t('Close menu')}\n <plume.glyphs.stroke.CaretUp size={10} />\n </plume.styles.heading.XXXXXS>\n </CloseButton>\n )}\n {isMobileNavOpen && !isDesktop && <GlobalStyleLockBody height={height} />}\n <plume.glyphs.stroke.BurgerMenu size={16} />\n <BackToTop\n breakpoint={breakpoint}\n withIcon={true}\n onClick={() => {\n scroll.animatedScrollTo(0, 150)\n }}\n isIntersecting={isIntersecting}\n isIntersectingFooter={isIntersectingFooter}\n >\n <plume.glyphs.stroke.ArrowRight size={13} />\n {t('Back to top')}\n </BackToTop>\n </MobileContainer>\n <MobileBorder breakpoint={breakpoint} closedMenuHeight={closedMenuHeight} />\n </Overlay>\n )\n}\n\nconst MobileBorder = styled.span<{ closedMenuHeight: number; breakpoint: string }>`\n border-top: 1px solid ${plume.COLORS.PRIMARY_SAND_200};\n position: absolute;\n top: ${({ closedMenuHeight }) => closedMenuHeight}px;\n width: 100%;\n z-index: -1;\n\n @media screen and ${({ breakpoint }) => breakpoint} {\n display: none;\n }\n`\n\ntype BackToTop = {\n isIntersecting: boolean\n isIntersectingFooter: boolean\n breakpoint: string\n}\n\nconst BackToTop = styled(plume.LinkAsButton)<BackToTop>`\n display: none;\n\n @media screen and ${({ breakpoint }) => breakpoint} {\n bottom: 6px;\n display: block;\n left: 0;\n opacity: 1;\n padding-bottom: 20px;\n padding-left: 20px;\n position: fixed;\n text-transform: uppercase;\n transition: opacity 0.3s ease;\n width: ${PM_MENU_WIDTH};\n z-index: 3;\n\n ${plume.glyphs.stroke.ArrowRight} {\n color: ${plume.COLORS.PRIMARY_SAND_500};\n position: relative;\n top: -2px;\n transform: rotate(-90deg);\n }\n\n ${({ isIntersecting, isIntersectingFooter }) => {\n if (isIntersecting || isIntersectingFooter) {\n return css`\n opacity: 0;\n pointer-events: none;\n `\n }\n }}\n }\n`\n\nconst Overlay = styled.nav<{ height: string | null; openMobile: boolean; breakpoint: string }>`\n background-color: ${plume.COLORS.hexToRgb(\n plume.COLORS.PRIMARY_GREY_900,\n 0.4,\n )}; // TODO: Use COLORS.OVERLAY token when available\n bottom: 0;\n left: 0;\n right: 0;\n position: absolute;\n top: 60px;\n height: calc(${({ height }) => height ?? '100vh'} - 60px);\n transition: background-color 0.3s;\n z-index: ${plume.ZINDEX.NAVIGATION_MENU};\n\n @media screen and ${({ breakpoint }) => breakpoint} {\n height: auto;\n min-height: 100vh;\n }\n\n @media not screen and ${({ breakpoint }) => breakpoint} {\n ${(props) => {\n if (!props.openMobile) {\n return css`\n transition: bottom 0.3s;\n background-color: transparent;\n bottom: 100%;\n pointer-events: none;\n `\n } else {\n return css``\n }\n }}\n }\n\n @media screen and ${({ breakpoint }) => breakpoint} {\n background: transparent;\n height: auto;\n position: static;\n min-width: ${PM_MENU_WIDTH};\n width: ${PM_MENU_WIDTH};\n z-index: 2;\n }\n`\n\ntype MobileContainerProps = {\n closedMenuHeight: number\n labelMargin: number\n openMobile: boolean\n enableTransition: boolean\n breakpoint: string\n}\n\nexport const MobileContainer = styled.div<MobileContainerProps>`\n justify-content: start;\n flex-direction: column;\n display: flex;\n align-items: end;\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n clip-path: content-box;\n overflow: hidden;\n pointer-events: all;\n z-index: 2;\n\n &:after,\n &:before {\n content: '';\n height: 8px;\n left: 0;\n position: absolute;\n right: 0;\n z-index: 1;\n background-color: ${plume.COLORS.PRIMARY_GREY_000};\n }\n\n &:after {\n bottom: 0;\n }\n\n &:before {\n top: 0;\n }\n\n ${(props) => {\n if (props.enableTransition || props.openMobile) {\n return css`\n transition: bottom 0.3s;\n `\n }\n }};\n\n ${(props) => {\n if (!props.openMobile) {\n return css`\n bottom: calc(100% - ${props.closedMenuHeight}px);\n\n &:after,\n &:before {\n transition: opacity 0s ease-in 0.3s;\n }\n `\n } else {\n return css`\n &:after,\n &:before {\n opacity: 0;\n }\n `\n }\n }};\n\n ${plume.glyphs.stroke.BurgerMenu} {\n pointer-events: none;\n }\n\n & > ${plume.glyphs.stroke.BurgerMenu} {\n color: ${plume.COLORS.PRIMARY_SAND_500};\n opacity: 1;\n position: absolute;\n right: 16px;\n top: calc(${({ labelMargin }) => labelMargin}px + 3px);\n transition-duration: 0.3s;\n transition-property: opacity, visibility;\n transition-timing-function: cubic-bezier(0.55, 0, 1, 0.45);\n visibility: visible;\n\n ${({ openMobile }) => {\n if (openMobile) {\n return css`\n opacity: 0;\n transition-timing-function: cubic-bezier(0.16, 1, 0.3, 1);\n visibility: hidden;\n `\n }\n }}\n }\n\n @media screen and ${({ breakpoint }) => breakpoint} {\n height: 100%;\n padding: 0;\n position: relative;\n\n & > ${plume.glyphs.stroke.BurgerMenu} {\n visibility: hidden;\n }\n\n &:after,\n &:before {\n content: none;\n }\n }\n`\n\ntype WrapperProps = {\n closedMenuHeight: number\n enableTransition: boolean\n height?: number\n openMobile: boolean\n scroll: number\n breakpoint: string\n}\n\nexport const Wrapper = styled.div<WrapperProps>`\n width: 100%;\n background: ${plume.COLORS.PRIMARY_GREY_000};\n clip-path: content-box;\n\n ${(props) => {\n if (props.enableTransition || props.openMobile) {\n return css`\n transition-property: height, margin-top;\n transition-duration: 0.3s;\n `\n }\n }}\n ${plume.styles.heading.Card1} {\n font-weight: inherit;\n color: inherit;\n }\n\n ${(props) => {\n if (props.openMobile) {\n return css`\n margin-top: 0;\n min-height: ${props.closedMenuHeight}px;\n height: calc(100% - 58px);\n overflow: auto;\n `\n } else {\n return css`\n margin-top: -${props.scroll}px;\n height: ${props.height !== undefined ? `${props.height}px` : 'auto'};\n `\n }\n }};\n\n @media screen and ${({ breakpoint }) => breakpoint} {\n transition: none;\n margin-top: 0;\n height: 100%;\n display: flex;\n flex-direction: column;\n clip-path: none;\n }\n`\n\nconst CloseButton = styled.button<{ openMobile: boolean }>`\n background: transparent;\n border: none;\n height: 58px;\n outline: none;\n overflow: hidden;\n padding: 0 30px;\n text-align: right;\n transition: height 0.3s;\n width: 100%;\n\n ${(props) => {\n if (!props.openMobile) {\n return css`\n height: 0;\n `\n }\n }}\n ${plume.styles.heading.XXXXXS} {\n color: ${plume.COLORS.PRIMARY_GREY_000};\n }\n\n ${plume.glyphs.stroke.CaretUp} {\n vertical-align: bottom;\n margin-left: 10px;\n }\n`\n\nconst GlobalStyleLockBody = createGlobalStyle<{ height: string | null }>`\n body {\n height: ${({ height }) => height ?? '100vh'};\n box-sizing: border-box;\n overflow: hidden;\n }\n\n // HACK: to enable stickyness, iOS requires doubling 'overflow: hidden;' on both html & body tags.\n // But this brings an undesirable side effect where the page jumps to top when opening the menu\n @supports (-webkit-overflow-scrolling: touch) {\n html {\n overflow: hidden;\n }\n }\n`\n"], "mappings": "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", "names": ["init_define_process_env", "init_sentry_release_injection_stub", "PM_MENU_WIDTH", "init_define_process_env", "init_sentry_release_injection_stub", "React", "ResponsiveMenu", "className", "labelMargin", "closedMenuHeight", "Content", "mobileBreakpoint", "height", "use100vh", "breakpoint", "breakpoints_exports", "elementMeasuresRef", "isClientSide", "useClientSide", "previousLocation", "usePrevious", "hooks_exports", "setMobileNavAsOpen", "wrapperMeasureRef", "wrapperRef", "closedMobileScroll", "setClosedMobileScroll", "isMobileNavOpen", "isDesktop", "useDramaticallyInefficientMediaQuery", "enableTransition", "setEnableTransition", "$contentRef", "$footerRef", "isIntersecting", "useIsIntersecting", "isIntersectingFooter", "Overlay", "MobileContainer", "Wrapper", "element", "_a", "top", "event", "matchQuery", "wrapperMeasure", "CloseButton", "styles_exports", "glyphs_exports", "GlobalStyleLockBody", "BackToTop", "scroll_exports", "MobileBorder", "src_default", "__template", "colors_exports", "_b", "_c", "LinkAsButton", "PM_MENU_WIDTH", "css", "_d", "_e", "_f", "zindex_exports", "props", "_g", "_h", "_i", "_j", "_k", "openMobile", "_l", "_m", "_n", "_o", "_p", "_q", "_r", "createGlobalStyle"] }