{"version":3,"file":"4094.bundle.8de4d5ed63c101af4e3d.js","mappings":"+RAOA,MAAMA,EAAqBC,EAAAA,cAAoB,MAEzCC,EAAqBA,KAAMC,EAAAA,EAAAA,YAAWH,GA6BtCI,EAAwBC,IAAmB,IAAlB,UAAEC,GAAWD,EACxC,MAAM,mBAAEE,GAAuBL,IAM/B,OALAM,EAAAA,EAAAA,kBAAgB,KAEZD,GAAmBE,GAAQC,IAAA,IAAC,IAAEC,GAAKD,EAAA,OAAKE,EAAAA,EAAAA,KAAA,OAAKN,UAAWA,EAAWK,IAAKA,GAAO,IACxE,IAAMJ,EAAmB,QACjC,CAACD,IACG,IAAI,EAGTO,EAAiBC,IAAoC,IAAnC,iBAAEC,EAAgB,SAAEC,GAAUF,EAClD,OACIF,EAAAA,EAAAA,KAACK,EAAAA,GAAyB,CAACC,SAAO,EAAAF,UAC9BJ,EAAAA,EAAAA,KAAA,QAAMO,KAAK,SAASb,UAAWS,GAAoB,SAASC,SACvDA,KAEmB,EAI9BI,EAAmBC,IAAsC,IAArC,SAAEC,EAAQ,SAAEC,EAAQ,SAAEP,GAAUK,EACtD,OACIT,EAAAA,EAAAA,KAACK,EAAAA,GAAsB,CACnBK,SAAUA,EACVC,SAAUA,EACVjB,UAAWkB,IACP,uCACCD,EAEK,oDADA,8EAERP,SAEDA,GACoB,EAIjCI,EAAiBK,UAAY,CACzBH,SAAUI,IAAAA,KACVH,SAAUG,IAAAA,KACVV,SAAUU,IAAAA,MAGd,MAAMC,EAAmBC,IAA+D,IAA9D,KAAEC,EAAI,OAAEC,EAAM,SAAER,EAAQ,SAAEC,EAAQ,SAAEP,EAAQ,UAAEe,GAAWH,EAC/E,MAAMI,GACFpB,EAAAA,EAAAA,KAAA,OAAKN,UAAU,8DAA6DU,SAAEA,IAKlF,OAAIO,GAEIX,EAAAA,EAAAA,KAACK,EAAAA,GAAsB,CAACM,UAAQ,EAACjB,UAAU,oDAAmDU,SACzFA,KAMTJ,EAAAA,EAAAA,KAACK,EAAAA,GAAsB,CAACC,SAAO,EAAAF,SAC1Be,GACGnB,EAAAA,EAAAA,KAACqB,EAAAA,EAAS,IAAKF,EAAWG,UAAQ,EAAAlB,SAC7BgB,KAGLpB,EAAAA,EAAAA,KAAA,KACIN,UAAU,gIACVuB,KAAMA,EACNC,OAAQA,EACRK,QAASb,EAASN,SAEjBgB,KAGY,EAIjCL,EAAiBF,UAAY,CACzBI,KAAMH,IAAAA,OACNI,OAAQJ,IAAAA,OACRJ,SAAUI,IAAAA,KACVH,SAAUG,IAAAA,KACVK,UAAWL,IAAAA,MAAgBO,EAAAA,EAAUR,WACrCT,SAAUU,IAAAA,MAGd,MAAMU,EAAeC,IAAmF,IAAAC,EAAA,IAAlF,OAAEC,EAAM,gBAAEC,EAAe,cAAEC,EAAa,iBAAE1B,EAAgB,gBAAE2B,GAAiBL,EAI/F,MAAM,QAAEM,GAAgC,QAAvBL,EAAGpC,WAAoB,IAAAoC,EAAAA,EAAI,CAAC,EAE7C,OACIM,EAAAA,EAAAA,MAAAC,EAAAA,SAAA,CAAA7B,SAAA,CACK0B,IAAmB9B,EAAAA,EAAAA,KAACR,EAAqB,CAACE,UAAWoC,KACtDE,EAAAA,EAAAA,MAAC3B,EAAAA,GAAsB,CAAC6B,aAAcC,GAAUA,IAAUR,aAAM,EAANA,KAAYS,OAAO,EAAMhC,SAAA,EAC/EJ,EAAAA,EAAAA,KAACC,EAAc,CAACE,iBAAkBA,EAAiBC,SAAEwB,KACrD5B,EAAAA,EAAAA,KAACK,EAAAA,GAAwB,CAACgC,UAAWN,EAAQ3B,UACzCJ,EAAAA,EAAAA,KAACK,EAAAA,GAAyB,CACtBiC,KAAK,SACLC,MAAM,QACN7C,UAAWkB,IACP,iDACAT,GAAoB,gDACtBC,SAEDyB,WAId,EAIXL,EAAaX,UAAY,CACrBc,OAAQb,IAAAA,KACRc,gBAAiBd,IAAAA,KAAe0B,WAChCX,cAAef,IAAAA,KAAe0B,WAC9BrC,iBAAkBW,IAAAA,K,iFC5Jf,MAAM2B,EAAoB,KAEpBC,GAAcC,C,gYCDpB,MAAMC,GAAoBC,EAAAA,EAAAA,IAA4B,qBAChDC,GAAqCD,EAAAA,EAAAA,IAA4B,sCACjEE,GAA4BF,EAAAA,EAAAA,IAA4B,6BACxDG,GAAwBH,EAAAA,EAAAA,IAA4B,yBACpDI,GAAsCJ,EAAAA,EAAAA,IAA4B,uCAClEK,GAAmBL,EAAAA,EAAAA,IAA4B,oBAC/CM,GAAaN,EAAAA,EAAAA,IAA4B,cACzCO,GAAkBP,EAAAA,EAAAA,IAA4B,mBAC9CQ,GAAiBR,EAAAA,EAAAA,IAA4B,kBAC7CS,GAAUT,EAAAA,EAAAA,IAA4B,WAEtCU,EAAkB,kBAClBC,EAA2B,qCAC3BC,EAAgC,0CAEhCC,EAAuB,CAChC,IAAK,KAAM,EAAG,EAAG,KAAM,MAAO,GAAI,GAAI,IAAK,MAAO,MAAO,SAAU,OAAQ,OAAQ,UAAW,UAAW,QACzG,SAAU,GAAI,IAAK,EAAG,EAAG,OAAQ,QAAS,KAAM,KAAM,SAAU,UAAW,UAAW,UAAW,UACjG,UAAW,UAAW,UAAW,QAAS,QAAS,UAAW,UAAW,UAAW,UAAW,UAAW,UAC1G,UAAW,UAAW,UAAW,UAAW,U,sCCnBhD,IAAeC,EAAI,C,kFCCnB,IAAIC,GAAcC,EAAAA,EAAAA,KAClB,MAAMC,GAASC,EAAAA,EAAAA,KAaf,MAXsB,CAClBC,iBAAkBC,IACdL,GAAcC,EAAAA,EAAAA,KACdC,EAAOI,QAAQ,CAAED,UAAS,EAE9BE,eAAgBA,IACLP,EAEXQ,UAAWN,EAAOM,WCXtB,IAAIR,GAAcC,EAAAA,EAAAA,KAClB,MAAMC,GAASC,EAAAA,EAAAA,KAaf,MAXqB,CACjBC,iBAAkBK,IACdT,GAAcC,EAAAA,EAAAA,KACdC,EAAOI,QAAQ,CAAEG,aAAY,EAEjCF,eAAgBA,IACLP,EAEXQ,UAAWN,EAAOM,WCbf,MAAME,EAAMA,CAACC,EAASC,EAAUC,KACnC,MAAMC,EAAO,CACTC,MAAOH,EACPC,IAAKG,KAAKC,MAAc,IAANJ,GAEtBK,aAAaC,QAAQR,EAASS,KAAKC,UAAUP,GAAM,EAI1CQ,EAAMX,IACf,MAAMG,EAAOI,aAAaK,QAAQZ,GAClC,IAAKG,EACD,OAAO,KAGX,MAAMU,EAAOJ,KAAKK,MAAMX,GAExB,OAAIU,EAAKX,KAAOG,KAAKC,MAAQO,EAAKX,KAC9BK,aAAaQ,WAAWf,GACjB,MAGJa,EAAKT,KAAK,EChBfY,EAAoBC,GACf,GAAPC,OAJe,qBAIKA,OAAGD,EAASE,eAG9B5B,GAASC,EAAAA,EAAAA,KAef,MAb6B,CACzB4B,mBAAoBA,CAACH,EAAUI,KAC3B,MAAMrB,EAAUgB,EAAkBC,GAClCK,EAAYtB,EAASqB,EAXX,KAYV9B,EAAOI,QAAQ,CAAEsB,YAAW,EAEhCM,mBAAoBN,IAChB,MAAMjB,EAAUgB,EAAkBC,GAClC,OAAOK,EAAYtB,EAAQ,EAE/BH,UAAWN,EAAOM,WCnBtB,MAGMmB,EAAoBQ,GACf,GAAPN,OAJe,kBAIKA,OAAGM,GAGrBjC,GAASC,EAAAA,EAAAA,KAef,MAb0B,CACtB4B,mBAAoBA,CAACI,EAAUH,KAC3B,MAAMrB,EAAUgB,EAAkBQ,GAClCF,EAAYtB,EAASqB,EAXX,KAYV9B,EAAOI,QAAQ6B,EAAS,EAE5BD,mBAAoBC,IAChB,MAAMxB,EAAUgB,EAAkBQ,GAClC,OAAOF,EAAYtB,EAAQ,EAE/BH,UAAWN,EAAOM,W,iCCbtB,MAAM4B,EAAiB,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,KAK1DC,EAAa,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,KAElEC,EAAc,mDAEdC,EAAiBC,EAAAA,IAAiC,GAClDC,EAAc,YAEdC,EAAoBC,IACtB,IAAKP,EAAeQ,SAASD,GACzB,MAAM,IAAIE,MAAM,gFACpB,EAGEC,EAAgBH,IACbN,EAAWO,SAASD,IACrBI,QAAQC,KACJ,wRAER,EAqFEC,EAlF6BC,KAAiD,IAAhD,qBAAEC,EAAoB,kBAAEC,GAAmBF,EA6D3E,MAAO,CACHG,2BAA4BjG,IAAA,IAAC,SAAEwE,EAAQ,UAAEI,GAAW5E,EAAA,OAChD+F,EAAqBpB,mBAAmBH,EAAUI,EAAU,EAChEsB,gCAAiCH,EAAqB3C,UAEtD+C,wBAAyB1F,IAAA,IAAC,SAAEsE,EAAQ,UAAEH,GAAWnE,EAAA,OAAKuF,EAAkBrB,mBAAmBI,EAAUH,EAAU,EAC/GwB,6BAA8BJ,EAAkB5C,UAEhDiD,mBAAoBC,IAAA,IAAC,UAAEjD,GAAWiD,EAAA,OAAKC,EAAavD,iBAAiBK,EAAU,EAC/EmD,wBAAyBD,EAAanD,UAEtCqD,oBAAqBC,IAAA,IAAC,OAAEzD,GAAQyD,EAAA,OAAKC,EAAc3D,iBAAiBC,EAAO,EAC3E2D,yBAA0BD,EAAcvD,UAExCyD,mBA1EuBpI,IAA6B,IAA5B,KAAEqI,EAAI,cAAEC,GAAetI,EAC/C,MAAMuI,EAAkBhB,EAAkBlB,mBAAmBgC,GACvDG,EAA0B,EAAhBF,EACVG,EAAU,MAAHzC,OAASwC,GAEhBE,EAASH,EAAe,GAAAvC,OACrBS,EAAW,KAAAT,OAAIuC,EAAe,KAAAvC,OAAIyC,GAAO,GAAAzC,OACzCU,EAAc,KAAAV,OAAIY,EAAW,iCAAAZ,OAAgCqC,EAAI,WAAArC,OAAUwC,GAIpF,OAFA3B,EAAkB2B,GAEXE,CAAM,EAgEbC,sBA7D0BtI,IAAsD,IAArD,SAAE0F,EAAQ,cAAEuC,EAAa,YAAEM,GAAc,GAAOvI,EAC3E,MAAMmI,EAA0B,EAAhBF,EACVG,EAAU,MAAHzC,OAASwC,GAEhBK,EAAiB,GAAH7C,OAAMS,EAAW,KAAAT,OArCjB,uCAqCwC,KAAAA,OAAIyC,GAIhE,GAFA5B,EAAkB2B,GAEdI,EACA,OAAOC,EACJ,CACH,MAAMN,EAAkBjB,EAAqBjB,mBAAmBN,GAChE,OAAOwC,EAAe,GAAAvC,OACbS,EAAW,KAAAT,OAAIuC,EAAe,KAAAvC,OAAIyC,GAAO,GAAAzC,OACzCU,EAAc,KAAAV,OAAIY,EAAW,oCAAAZ,OAAmCD,EAAQ,WAAAC,OAAUwC,EAC/F,GA+CAM,cA5CkBrI,IAAgD,IAA/C,UAAEmE,EAAS,KAAEkC,EAAI,UAAEiC,EAAS,WAAEC,GAAYvI,EAC7D,MAAMwI,EAAa,GAAHjD,OAAMU,EAAc,iBAAAV,OAAgBpB,EAAS,0BACvDsE,EAAU,GAAHlD,OAAMU,EAAc,6BAAAV,OAA4BpB,EAAS,WAAAoB,OAAUc,EAAI,YAAAd,OAAWc,GAGzFqC,GAFMJ,EAAYE,EAAaC,IACjBF,EAAa,MAAHhD,OAAS8B,EAAapD,kBAAqB,IAIzE,OAFAuC,EAAcH,GAEPqC,EAAQlD,aAAa,EAqC5BmD,eAlCmBpI,IAAmE,IAAlE,UAAE4D,EAAS,UAAEyE,EAAS,KAAEvC,EAAI,WAAEkC,EAAU,UAAED,EAAS,OAAEvE,GAAQxD,EACjF,MAAMsI,EAAQ1E,GAAa,GACrB2E,EAAO/E,GAAU,EAEjBgF,GADkBC,OAAOC,UAAUL,IAAaM,EAAAA,EAAAA,IAASN,EAAW3F,EAAAA,IAAc2F,IACvD,WAE3BJ,EAAa,GAAHjD,OAAMU,EAAc,iBAAAV,OAAgBsD,EAAK,KAAAtD,OAAIwD,EAAK,6BAAAxD,OAA4BuD,GACxFL,EAAU,GAAHlD,OAAMU,EAAc,8BAAAV,OAA6BsD,EAAK,eAAAtD,OAAcwD,EAAK,WAAAxD,OAAUc,EAAI,YAAAd,OAAWc,EAAI,YAAAd,OAAWuD,GAGxHJ,GAFMJ,EAAYE,EAAaC,IACjBF,EAAa,MAAHhD,OAASkC,EAAcxD,kBAAqB,IAK1E,OAFAuC,EAAcH,GAEPqC,EAAQlD,aAAa,EAqB/B,EAGmB2D,CAAoB,CAAEtC,qBAAoB,EAAEC,kBAAiBA,IACrF,O,oKChHA,SAASsC,EAAmBC,GACxB,OAAOA,EAAQC,KAAIC,IACf,MAAMC,EAAkB,CAAC,EAMzB,OAJAC,OAAOC,KAAKH,GAAQD,KAAIK,IACpBH,EAAgBI,IAAYD,IAAQJ,EAAOI,EAAI,IAG5CH,CAAe,GAE9B,CAOA,MAgCMN,EAAW,SAAUW,EAAS5G,GAChC,GAAI4G,EAAS,CAIT,OAHgB5G,EAAW6G,QAAO,SAAUC,GACxC,OAAOA,EAAEC,OAASH,CACtB,IAAG,GACcI,SAASzE,aAC9B,CACJ,EAeM0E,EAAsB,SAAUC,EAAiBC,EAAaxB,GAgBhE,OAfauB,EAAgBb,KAAIe,IAAkB,IAAAC,EAC/C,IAAIC,EAAQH,EAAYI,MAAKC,GAAMA,EAAGT,OAASK,IAW/C,OATKE,IAEDG,EAAAA,EAAAA,IAAY,oCAADnF,OAC6B8E,EAAc,qBAAA9E,OAAoBqD,EAAS,OAAArD,OAAM6E,EAAYd,KAC7FiB,GAASA,EAAMP,UAKR,QAAnBM,EAAOC,aAAK,EAALA,EAAOI,aAAK,IAAAL,EAAAA,EAAI,EAAE,IAGfR,QAAOc,GAAmB,KAAVA,IAAcC,KAAK,KACrD,EAOMC,EAAsBA,CAACC,EAAcnC,KAChC,CACHoC,iBAAkBD,EAAaC,iBAC/BC,UAAWF,EAAaE,UACxBC,wBAAyBH,EAAaG,wBACtCC,KAAMJ,EAAaI,KACnBC,MAAOL,EAAaK,MACpBC,UAAWzC,EACX0C,OAAQ,G,wDC9GT,MAAM3H,EAAoB,WAC7B,OADkC4H,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,IAAI7G,MAC7BgH,SAChB,C","sources":["webpack://fieldlevel.app/./app-core/components/DropdownMenu/DropdownMenu.jsx","webpack://fieldlevel.app/./app-core/constants/environment.js","webpack://fieldlevel.app/./app-core/constants/system.js","webpack://fieldlevel.app/./app-core/services/http/index.js","webpack://fieldlevel.app/./app-core/services/teamLogoCache.js","webpack://fieldlevel.app/./app-core/services/orgLogoCache.js","webpack://fieldlevel.app/./common/storage.js","webpack://fieldlevel.app/./app-core/services/athleteHeadshotCache.js","webpack://fieldlevel.app/./app-core/services/userHeadshotCache.js","webpack://fieldlevel.app/./app-core/services/imageSrcManager.js","webpack://fieldlevel.app/./app-core/utility/apiUtils.js","webpack://fieldlevel.app/./app-core/utility/cachingUtils.js"],"sourcesContent":["import React, { useRef, useLayoutEffect, useState, useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport cx from 'classnames';\r\nimport * as DropdownMenuRadix from '@radix-ui/react-dropdown-menu';\r\n\r\nimport WiredLink from '@appCore/components/WiredLink';\r\n\r\nconst portalContainerCtx = React.createContext(null);\r\n\r\nconst usePortalContainer = () => useContext(portalContainerCtx);\r\n\r\n/**\r\n * The PortalContainerProvider is a workaround for z-index/layering issues with DropdownMenuRadix. The portal\r\n * that's exposed by the primitive (e.g. DropdownMenuRadix.Portal) doesn't allow you to set styles/classname(s)\r\n * directly on the wrapper (which is oddly inconsistent with the default \"Portal\" utility element they provide), but\r\n * they DO allow you to specify an alternate container for the portal instead of document.body, which of course you\r\n * can style any way you wish. So, this provider is intended to be imported and rendered towards the top of the\r\n * React tree, and when used in conjunction with PortalContainerConfig, will produce a <div> to serve as the\r\n * portal container.\r\n */\r\nexport const PortalContainerProvider = ({ children }) => {\r\n    const [elementState, setElementState] = useState(null);\r\n    const [renderContainer, setRenderContainer] = useState(null);\r\n    const ref = useRef();\r\n    useLayoutEffect(() => {\r\n        // If the ref were to ever be mounted, and then subsequently unmounted, it will become null. For this\r\n        // use-case, it's simpler to just standardize nullish values to undefined\r\n        setElementState(ref.current ?? undefined);\r\n    }, [renderContainer]);\r\n\r\n    return (\r\n        <>\r\n            {renderContainer?.({ ref })}\r\n            <portalContainerCtx.Provider value={{ element: elementState, setRenderContainer }} children={children} />\r\n        </>\r\n    );\r\n};\r\n\r\nconst PortalContainerConfig = ({ className }) => {\r\n    const { setRenderContainer } = usePortalContainer();\r\n    useLayoutEffect(() => {\r\n        // Since we're trying to set the state to a function, we need to use the functional api of setState\r\n        setRenderContainer(prev => ({ ref }) => <div className={className} ref={ref} />);\r\n        return () => setRenderContainer(null);\r\n    }, [className]);\r\n    return null;\r\n};\r\n\r\nconst DropdownButton = ({ matchButtonWidth, children }) => {\r\n    return (\r\n        <DropdownMenuRadix.Trigger asChild>\r\n            <span role=\"button\" className={matchButtonWidth && 'w-full'}>\r\n                {children}\r\n            </span>\r\n        </DropdownMenuRadix.Trigger>\r\n    );\r\n};\r\n\r\nconst DropdownMenuItem = ({ onSelect, disabled, children }) => {\r\n    return (\r\n        <DropdownMenuRadix.Item\r\n            onSelect={onSelect}\r\n            disabled={disabled}\r\n            className={cx(\r\n                'hover:outline-none hover:border-none',\r\n                !disabled\r\n                    ? 'hover:bg-background-highlight focus:bg-background-highlight cursor-pointer'\r\n                    : 'text-muted bg-background-muted cursor-not-allowed'\r\n            )}\r\n        >\r\n            {children}\r\n        </DropdownMenuRadix.Item>\r\n    );\r\n};\r\n\r\nDropdownMenuItem.propTypes = {\r\n    onSelect: PropTypes.func,\r\n    disabled: PropTypes.bool,\r\n    children: PropTypes.node\r\n};\r\n\r\nconst DropdownMenuLink = ({ href, target, onSelect, disabled, children, linkProps }) => {\r\n    const contentRendering = (\r\n        <div className=\"hover:bg-background-highlight focus:bg-background-highlight\">{children}</div>\r\n    );\r\n\r\n    // It's not semantically correct to have a \"disabled\" anchor tag so when we want to disable a dropdown\r\n    // menu link we just want it to be a disabled menu item with disabled styling\r\n    if (disabled) {\r\n        return (\r\n            <DropdownMenuRadix.Item disabled className=\"text-muted bg-background-muted cursor-not-allowed\">\r\n                {children}\r\n            </DropdownMenuRadix.Item>\r\n        );\r\n    }\r\n\r\n    return (\r\n        <DropdownMenuRadix.Item asChild>\r\n            {linkProps ? (\r\n                <WiredLink {...linkProps} unstyled>\r\n                    {contentRendering}\r\n                </WiredLink>\r\n            ) : (\r\n                <a\r\n                    className=\"no-underline hover:no-underline focus:no-underline text-[color:inherit] hover:text-[color:inherit] focus:text-[color:inherit]\"\r\n                    href={href}\r\n                    target={target}\r\n                    onClick={onSelect}\r\n                >\r\n                    {contentRendering}\r\n                </a>\r\n            )}\r\n        </DropdownMenuRadix.Item>\r\n    );\r\n};\r\n\r\nDropdownMenuLink.propTypes = {\r\n    href: PropTypes.string,\r\n    target: PropTypes.string,\r\n    onSelect: PropTypes.func,\r\n    disabled: PropTypes.bool,\r\n    linkProps: PropTypes.exact(WiredLink.propTypes),\r\n    children: PropTypes.node\r\n};\r\n\r\nconst DropdownMenu = ({ onOpen, buttonRendering, listRendering, matchButtonWidth, portalClassName }) => {\r\n    // Since PortalContainerProvider is (hopefully) a short-term workaround, we don't intend to use\r\n    // it in every app that imports DropdownMenu. So, in case the context is null, we default to\r\n    // an empty object.\r\n    const { element } = usePortalContainer() ?? {};\r\n\r\n    return (\r\n        <>\r\n            {portalClassName && <PortalContainerConfig className={portalClassName} />}\r\n            <DropdownMenuRadix.Root onOpenChange={isOpen => isOpen && onOpen?.()} modal={false}>\r\n                <DropdownButton matchButtonWidth={matchButtonWidth}>{buttonRendering}</DropdownButton>\r\n                <DropdownMenuRadix.Portal container={element}>\r\n                    <DropdownMenuRadix.Content\r\n                        side=\"bottom\"\r\n                        align=\"start\"\r\n                        className={cx(\r\n                            'bg-foreground-base shadow-md border rounded-sm',\r\n                            matchButtonWidth && 'w-[var(--radix-dropdown-menu-trigger-width)]'\r\n                        )}\r\n                    >\r\n                        {listRendering}\r\n                    </DropdownMenuRadix.Content>\r\n                </DropdownMenuRadix.Portal>\r\n            </DropdownMenuRadix.Root>\r\n        </>\r\n    );\r\n};\r\n\r\nDropdownMenu.propTypes = {\r\n    onOpen: PropTypes.func,\r\n    buttonRendering: PropTypes.node.isRequired,\r\n    listRendering: PropTypes.node.isRequired,\r\n    matchButtonWidth: PropTypes.bool\r\n};\r\n\r\nexport { DropdownMenu, DropdownMenuItem, DropdownMenuLink };\r\n","// This null;\r\nexport const ImageHostOverride = null;\r\n\r\nexport const IS_DEV_MODE = process.env.NODE_ENV === 'development';\r\n// All of our non-production environments contain a subdomain with a \"-\", eg: www-dev, www-integration, etc\r\nexport const IS_PRODUCTION = () => window.location.hostname.indexOf('-') === -1;\r\n","import { getSystemConstantFromWindow } from '@common/utils';\r\n\r\nexport const ENUM_ATHLETE_PLAN = getSystemConstantFromWindow('ENUM_ATHLETE_PLAN');\r\nexport const ENUM_ATHLETE_PROFILE_ACTIVITY_TYPE = getSystemConstantFromWindow('ENUM_ATHLETE_PROFILE_ACTIVITY_TYPE');\r\nexport const ENUM_ATHLETIC_ASSOCIATION = getSystemConstantFromWindow('ENUM_ATHLETIC_ASSOCIATION');\r\nexport const ENUM_COMMITMENT_LEVEL = getSystemConstantFromWindow('ENUM_COMMITMENT_LEVEL');\r\nexport const ENUM_INSTITUTION_OF_INTEREST_STATUS = getSystemConstantFromWindow('ENUM_INSTITUTION_OF_INTEREST_STATUS');\r\nexport const ENUM_SCHOOL_TYPE = getSystemConstantFromWindow('ENUM_SCHOOL_TYPE');\r\nexport const ENUM_SPORT = getSystemConstantFromWindow('ENUM_SPORT');\r\nexport const ENUM_UTM_MEDIUM = getSystemConstantFromWindow('ENUM_UTM_MEDIUM');\r\nexport const INTERCOM_APPID = getSystemConstantFromWindow('INTERCOM_APPID');\r\nexport const WWW_URL = getSystemConstantFromWindow('WWW_URL');\r\n\r\nexport const FACEBOOK_APP_ID = '362899207119772';\r\nexport const DEFAULT_TEAM_LOGO_URL_HS = '/assets/images/icon-hs-300x300.png';\r\nexport const DEFAULT_TEAM_LOGO_URL_COLLEGE = '/assets/images/icon-college-300x300.png';\r\n\r\nexport const METRICS_ENABLED_LIST = [\r\n    512, 1024, 1, 2, 8192, 16384, 16, 32, 256, 32768, 65536, 33554432, 131072, 262144, 268435456, 536870912, 8388608,\r\n    16777216, 64, 128, 4, 8, 524288, 1048576, 2048, 4096, 67108864, 134217728, 536870914, 536870913, 536870916,\r\n    536870915, 536870918, 536870917, 2097152, 4194304, 536870925, 536870926, 536870927, 536870919, 536870920, 536870923,\r\n    536870924, 536870928, 536870929, 536870930, 536870931\r\n];\r\n","import { http } from './http';\r\n\r\nexport default http;\r\n","import { createCacheString } from '@appCore/utility/cachingUtils';\r\nimport { createSimplePubSub } from '@appCore/utility/pubSubUtils';\r\n\r\nlet cacheString = createCacheString();\r\nconst pubSub = createSimplePubSub();\r\n\r\nconst teamLogoCache = {\r\n    resetCacheString: teamId => {\r\n        cacheString = createCacheString();\r\n        pubSub.publish({ teamId });\r\n    },\r\n    getCacheString: () => {\r\n        return cacheString;\r\n    },\r\n    subscribe: pubSub.subscribe\r\n};\r\n\r\nexport default teamLogoCache;\r\n","import { createCacheString } from '@appCore/utility/cachingUtils';\r\nimport { createSimplePubSub } from '@appCore/utility/pubSubUtils';\r\n\r\nlet cacheString = createCacheString();\r\nconst pubSub = createSimplePubSub();\r\n\r\nconst orgLogoCache = {\r\n    resetCacheString: shortName => {\r\n        cacheString = createCacheString();\r\n        pubSub.publish({ shortName });\r\n    },\r\n    getCacheString: () => {\r\n        return cacheString;\r\n    },\r\n    subscribe: pubSub.subscribe\r\n};\r\n\r\nexport default orgLogoCache;\r\n","// Set a value in localStorage with a given key and time-to-live in seconds\r\nexport const set = (keyName, keyValue, ttl) => {\r\n    const data = {\r\n        value: keyValue,\r\n        ttl: Date.now() + ttl * 1000\r\n    };\r\n    localStorage.setItem(keyName, JSON.stringify(data));\r\n};\r\n\r\n// Get a value from localStorage with the given key, or null if the time-to-live has exceeded\r\nexport const get = keyName => {\r\n    const data = localStorage.getItem(keyName);\r\n    if (!data) {\r\n        return null;\r\n    }\r\n\r\n    const item = JSON.parse(data);\r\n\r\n    if (item.ttl && Date.now() > item.ttl) {\r\n        localStorage.removeItem(keyName);\r\n        return null;\r\n    }\r\n\r\n    return item.value;\r\n};\r\n","import * as Storage from '@common/storage';\r\n\r\nimport { createSimplePubSub } from '@appCore/utility/pubSubUtils';\r\n\r\nconst KEY_PREFIX = 'athlete_headshot_';\r\nconst CACHE_TTL = 600;\r\n\r\nconst getStorageKeyName = username => {\r\n    return `${KEY_PREFIX}${username.toLowerCase()}`;\r\n};\r\n\r\nconst pubSub = createSimplePubSub();\r\n\r\nconst athleteHeadshotCache = {\r\n    setCachedImageGuid: (username, imageGuid) => {\r\n        const keyName = getStorageKeyName(username);\r\n        Storage.set(keyName, imageGuid, CACHE_TTL);\r\n        pubSub.publish({ username });\r\n    },\r\n    getCachedImageGuid: username => {\r\n        const keyName = getStorageKeyName(username);\r\n        return Storage.get(keyName);\r\n    },\r\n    subscribe: pubSub.subscribe\r\n};\r\n\r\nexport default athleteHeadshotCache;\r\n","import * as Storage from '@common/storage';\r\n\r\nimport { createSimplePubSub } from '@appCore/utility/pubSubUtils';\r\n\r\nconst KEY_PREFIX = 'user_headshot_';\r\nconst CACHE_TTL = 600;\r\n\r\nconst getStorageKeyName = userGuid => {\r\n    return `${KEY_PREFIX}${userGuid}`;\r\n};\r\n\r\nconst pubSub = createSimplePubSub();\r\n\r\nconst userHeadshotCache = {\r\n    setCachedImageGuid: (userGuid, imageGuid) => {\r\n        const keyName = getStorageKeyName(userGuid);\r\n        Storage.set(keyName, imageGuid, CACHE_TTL);\r\n        pubSub.publish(userGuid);\r\n    },\r\n    getCachedImageGuid: userGuid => {\r\n        const keyName = getStorageKeyName(userGuid);\r\n        return Storage.get(keyName);\r\n    },\r\n    subscribe: pubSub.subscribe\r\n};\r\n\r\nexport default userHeadshotCache;\r\n","import teamLogoCache from '@appCore/services/teamLogoCache';\r\nimport orgLogoCache from '@appCore/services/orgLogoCache';\r\nimport athleteHeadshotCache from '@appCore/services/athleteHeadshotCache';\r\nimport userHeadshotCache from '@appCore/services/userHeadshotCache';\r\nimport { getSport } from '@appCore/utility/apiUtils';\r\nimport * as Environment from '@appCore/constants/environment';\r\nimport { ENUM_SPORT } from '@appCore/constants/system';\r\n\r\n// This array contains all the known headshot image variant sizes that Cloudflare will generate. Using a size outside of this list will\r\n// result in errors in certain cases, so talk to the Platform team if you need to add a new variant size.\r\nconst HEADSHOT_SIZES = [2, 64, 80, 90, 100, 120, 144, 200, 256, 650];\r\n\r\n// This array contains all the known dynamic image sizes for team logos. Our process for purging the CDN cache when a dynamic image changes\r\n// currently relies on knowing all of the sizes of images that the client can request. If you add a new image size here, be sure to also\r\n// update the PurgeCloudflareLogoImageCacheJob in the API project as well.\r\nconst LOGO_SIZES = [6, 12, 32, 40, 60, 64, 80, 120, 140, 200, 248, 256, 350];\r\n\r\nconst CF_BASE_URL = 'https://imagedelivery.net/R3XOqFcTepHxP5M00fjeUw';\r\nconst CF_PLACEHOLDER_GUID = 'b855ca4d-53cd-4a96-4981-ff065ac69200';\r\nconst IMAGE_BASE_URL = Environment.ImageHostOverride || '';\r\nconst WEBAPI_PATH = 'webapi/v2';\r\n\r\nconst checkHeadshotSize = size => {\r\n    if (!HEADSHOT_SIZES.includes(size)) {\r\n        throw new Error('Unknown headshot variant size requested. See ImageUtils for acceptable sizes.');\r\n    }\r\n};\r\n\r\nconst checkLogoSize = size => {\r\n    if (!LOGO_SIZES.includes(size)) {\r\n        console.warn(\r\n            \"WARNING: ImageUtils is returning an image size that isn't in the list of known dynamic image sizes. This is a problem due to how we do cache invalidation for user-provided image content. Please review the comment block in the ImageUtils module and make the appropriate changes.\"\r\n        );\r\n    }\r\n};\r\n\r\nexport const makeImageSrcManager = ({ athleteHeadshotCache, userHeadshotCache }) => {\r\n    const getUserHeadshotSrc = ({ guid, componentSize }) => {\r\n        const cachedImageGuid = userHeadshotCache.getCachedImageGuid(guid);\r\n        const imgSize = componentSize * 2;\r\n        const imgName = `img${imgSize}`;\r\n\r\n        const imgSrc = cachedImageGuid\r\n            ? `${CF_BASE_URL}/${cachedImageGuid}/${imgName}`\r\n            : `${IMAGE_BASE_URL}/${WEBAPI_PATH}/Images/GetHeadshot?UserGuid=${guid}&Width=${imgSize}`;\r\n\r\n        checkHeadshotSize(imgSize);\r\n\r\n        return imgSrc;\r\n    };\r\n\r\n    const getAthleteHeadshotSrc = ({ username, componentSize, isAnonymous = false }) => {\r\n        const imgSize = componentSize * 2;\r\n        const imgName = `img${imgSize}`;\r\n\r\n        const placeholderSrc = `${CF_BASE_URL}/${CF_PLACEHOLDER_GUID}/${imgName}`;\r\n\r\n        checkHeadshotSize(imgSize);\r\n\r\n        if (isAnonymous) {\r\n            return placeholderSrc;\r\n        } else {\r\n            const cachedImageGuid = athleteHeadshotCache.getCachedImageGuid(username);\r\n            return cachedImageGuid\r\n                ? `${CF_BASE_URL}/${cachedImageGuid}/${imgName}`\r\n                : `${IMAGE_BASE_URL}/${WEBAPI_PATH}/LegacyImages/Headshot?Username=${username}&Width=${imgSize}`;\r\n        }\r\n    };\r\n\r\n    const getOrgLogoSrc = ({ shortName, size, isBlurred, breakCache }) => {\r\n        const blurredUrl = `${IMAGE_BASE_URL}/teamcontact/${shortName}/none/blurredsporticon`;\r\n        const logoUrl = `${IMAGE_BASE_URL}/media/orglogo?shortname=${shortName}&width=${size}&height=${size}`;\r\n        const url = isBlurred ? blurredUrl : logoUrl;\r\n        const cacheBuster = breakCache ? `&r=${orgLogoCache.getCacheString()}` : '';\r\n        const logoSrc = url + cacheBuster;\r\n        checkLogoSize(size);\r\n\r\n        return logoSrc.toLowerCase();\r\n    };\r\n\r\n    const getTeamLogoSrc = ({ shortName, sportEnum, size, breakCache, isBlurred, teamId }) => {\r\n        const short = shortName || '';\r\n        const team = teamId || 0;\r\n        const normalizedSport = Number.isInteger(sportEnum) ? getSport(sportEnum, ENUM_SPORT) : sportEnum;\r\n        const sport = normalizedSport || 'baseball';\r\n\r\n        const blurredUrl = `${IMAGE_BASE_URL}/teamcontact/${short}/${sport}/blurredsporticon?teamid=${team}`;\r\n        const logoUrl = `${IMAGE_BASE_URL}/media/teamlogo?shortname=${short}&sportenum=${sport}&width=${size}&height=${size}&teamid=${team}`;\r\n        const url = isBlurred ? blurredUrl : logoUrl;\r\n        const cacheBuster = breakCache ? `&r=${teamLogoCache.getCacheString()}` : '';\r\n        const logoSrc = url + cacheBuster;\r\n\r\n        checkLogoSize(size);\r\n\r\n        return logoSrc.toLowerCase();\r\n    };\r\n\r\n    return {\r\n        updateAthleteHeadshotCache: ({ username, imageGuid }) =>\r\n            athleteHeadshotCache.setCachedImageGuid(username, imageGuid),\r\n        subscribeToAthleteHeadshotCache: athleteHeadshotCache.subscribe,\r\n\r\n        updateUserHeadshotCache: ({ userGuid, imageGuid }) => userHeadshotCache.setCachedImageGuid(userGuid, imageGuid),\r\n        subscribeToUserHeadshotCache: userHeadshotCache.subscribe,\r\n\r\n        updateOrgLogoCache: ({ shortName }) => orgLogoCache.resetCacheString(shortName),\r\n        subscribeToOrgLogoCache: orgLogoCache.subscribe,\r\n\r\n        updateTeamLogoCache: ({ teamId }) => teamLogoCache.resetCacheString(teamId),\r\n        subscribeToTeamLogoCache: teamLogoCache.subscribe,\r\n\r\n        getUserHeadshotSrc,\r\n        getAthleteHeadshotSrc,\r\n        getOrgLogoSrc,\r\n        getTeamLogoSrc\r\n    };\r\n};\r\n\r\nconst imageSrcManager = makeImageSrcManager({ athleteHeadshotCache, userHeadshotCache });\r\nexport default imageSrcManager;\r\n","import _ from 'lodash';\r\n\r\nimport { reportError } from '@appCore/services/logger';\r\n\r\n// converts LabelValuePair arrays that are returned from our Apis\r\n// to lowercased properties that our Playbook components expect.\r\n// e.g. { Label: 'Pitcher', Value: 1 } => { label: 'Pitcher', value: 1 }\r\nfunction convertOptionsCase(options) {\r\n    return options.map(option => {\r\n        const convertedOption = {};\r\n\r\n        Object.keys(option).map(key => {\r\n            convertedOption[_.camelCase(key)] = option[key];\r\n        });\r\n\r\n        return convertedOption;\r\n    });\r\n}\r\n\r\n// recently converted the endpoint that provides data\r\n// to the AthleteVideoCard to a component builder.  the data\r\n// structure is slightly different so we're using this adapter to\r\n// modify the data to the old shape until the For You Feed and Category\r\n// apis are converted to the component builder\r\nconst athleteVideoCardAdapter = videoData => {\r\n    if (!videoData.Athlete.AthleteComponent) {\r\n        return videoData;\r\n    }\r\n\r\n    const athlete = videoData.Athlete.AthleteComponent;\r\n\r\n    const data = {\r\n        Athlete: {\r\n            ...athlete,\r\n            CommitmentLevel: athlete.CommitmentLevelEnum.Id,\r\n            SportEnum: videoData.SportEnum.Value\r\n        },\r\n        AthleteCertifications: [],\r\n        VideoComponent: { ...videoData.VideoComponent },\r\n        RecommendationMetadata: { ...videoData.RecommendationMetadata }\r\n    };\r\n\r\n    videoData.AthleteCertifications.map(cert => {\r\n        data.AthleteCertifications.push({\r\n            Assessment: cert.Assessment,\r\n            CertificationId: cert.CertificationId,\r\n            CertifiedByDisplayName: 'Coach ' + cert.CertifiedBy.LastName,\r\n            ProjectedCompetitionLevels: cert.ProjectedCompetitionLevels\r\n        });\r\n    });\r\n\r\n    return data;\r\n};\r\n\r\n// helper function to get the Enum string instead of\r\n// of the sportId e.g converts 1 into Baseball.\r\nconst getSport = function (sportId, ENUM_SPORT) {\r\n    if (sportId) {\r\n        let sportEnum = ENUM_SPORT.filter(function (i) {\r\n            return i.Value == sportId;\r\n        })[0];\r\n        return sportEnum.EnumName.toLowerCase();\r\n    }\r\n};\r\n\r\n// helper function to get the Enum object from the sport id\r\n// e.g converts 1 into baseball ENUM object.\r\nconst getSportEnumBySportId = function (sportId, ENUM_SPORT) {\r\n    if (sportId) {\r\n        let sportEnum = ENUM_SPORT.filter(function (i) {\r\n            return i.Value == sportId;\r\n        })[0];\r\n        return sportEnum;\r\n    }\r\n};\r\n\r\n// helper function to get a short label instead\r\n// of the competition level id e.g. converts 1 to Pro\r\nconst getProjectionLevels = function (projectedLevels, sportLevels, sportEnum) {\r\n    let labels = projectedLevels.map(projectedLevel => {\r\n        let level = sportLevels.find(sl => sl.Value == projectedLevel);\r\n\r\n        if (!level) {\r\n            // we may have removed some projection levels from our sport definitions which could cause this condition. report to datadog so we're aware\r\n            reportError(\r\n                `Unable to find projected level - ${projectedLevel} - in levels for ${sportEnum} - ${sportLevels.map(\r\n                    level => level.Value\r\n                )}`\r\n            );\r\n        }\r\n\r\n        return level?.Label ?? '';\r\n    });\r\n\r\n    return labels.filter(label => label !== '').join(', ');\r\n};\r\n\r\n// helper function to convert an org/sport into a team object\r\n// that can be used for TeamDetails component. this is used for\r\n// job openings and events since they are tied to the organization\r\n// and not a particular team and we want the same visual representation\r\n// of the TeamDetails\r\nconst convertToTeamObject = (organization, sportEnum) => {\r\n    return {\r\n        OrganizationName: organization.OrganizationName,\r\n        ShortName: organization.ShortName,\r\n        AthleticAssociationEnum: organization.AthleticAssociationEnum,\r\n        City: organization.City,\r\n        State: organization.State,\r\n        SportEnum: sportEnum,\r\n        TeamId: 0\r\n    };\r\n};\r\n\r\nexport {\r\n    convertOptionsCase,\r\n    athleteVideoCardAdapter,\r\n    getSport,\r\n    getSportEnumBySportId,\r\n    getProjectionLevels,\r\n    convertToTeamObject\r\n};\r\n","export const createCacheString = (date = new Date()) => {\r\n    return date.getTime();\r\n};\r\n"],"names":["portalContainerCtx","React","usePortalContainer","useContext","PortalContainerConfig","_ref2","className","setRenderContainer","useLayoutEffect","prev","_ref3","ref","_jsx","DropdownButton","_ref4","matchButtonWidth","children","DropdownMenuRadix","asChild","role","DropdownMenuItem","_ref5","onSelect","disabled","cx","propTypes","PropTypes","DropdownMenuLink","_ref6","href","target","linkProps","contentRendering","WiredLink","unstyled","onClick","DropdownMenu","_ref7","_usePortalContainer","onOpen","buttonRendering","listRendering","portalClassName","element","_jsxs","_Fragment","onOpenChange","isOpen","modal","container","side","align","isRequired","ImageHostOverride","IS_DEV_MODE","process","ENUM_ATHLETE_PLAN","getSystemConstantFromWindow","ENUM_ATHLETE_PROFILE_ACTIVITY_TYPE","ENUM_ATHLETIC_ASSOCIATION","ENUM_COMMITMENT_LEVEL","ENUM_INSTITUTION_OF_INTEREST_STATUS","ENUM_SCHOOL_TYPE","ENUM_SPORT","ENUM_UTM_MEDIUM","INTERCOM_APPID","WWW_URL","FACEBOOK_APP_ID","DEFAULT_TEAM_LOGO_URL_HS","DEFAULT_TEAM_LOGO_URL_COLLEGE","METRICS_ENABLED_LIST","http","cacheString","createCacheString","pubSub","createSimplePubSub","resetCacheString","teamId","publish","getCacheString","subscribe","shortName","set","keyName","keyValue","ttl","data","value","Date","now","localStorage","setItem","JSON","stringify","get","getItem","item","parse","removeItem","getStorageKeyName","username","concat","toLowerCase","setCachedImageGuid","imageGuid","Storage","getCachedImageGuid","userGuid","HEADSHOT_SIZES","LOGO_SIZES","CF_BASE_URL","IMAGE_BASE_URL","Environment","WEBAPI_PATH","checkHeadshotSize","size","includes","Error","checkLogoSize","console","warn","imageSrcManager","_ref","athleteHeadshotCache","userHeadshotCache","updateAthleteHeadshotCache","subscribeToAthleteHeadshotCache","updateUserHeadshotCache","subscribeToUserHeadshotCache","updateOrgLogoCache","_ref8","orgLogoCache","subscribeToOrgLogoCache","updateTeamLogoCache","_ref9","teamLogoCache","subscribeToTeamLogoCache","getUserHeadshotSrc","guid","componentSize","cachedImageGuid","imgSize","imgName","imgSrc","getAthleteHeadshotSrc","isAnonymous","placeholderSrc","getOrgLogoSrc","isBlurred","breakCache","blurredUrl","logoUrl","logoSrc","getTeamLogoSrc","sportEnum","short","team","sport","Number","isInteger","getSport","makeImageSrcManager","convertOptionsCase","options","map","option","convertedOption","Object","keys","key","_camelCase","sportId","filter","i","Value","EnumName","getProjectionLevels","projectedLevels","sportLevels","projectedLevel","_level$Label","level","find","sl","reportError","Label","label","join","convertToTeamObject","organization","OrganizationName","ShortName","AthleticAssociationEnum","City","State","SportEnum","TeamId","arguments","length","undefined","getTime"],"sourceRoot":""}