{"version":3,"file":"866.chunk.js","mappings":"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","sources":["webpack://orinovageskincareadvisorapp/../../../src/constants/defaultTranslations.ts","webpack://orinovageskincareadvisorapp/../../src/logger.ts","webpack://orinovageskincareadvisorapp/../../../src/contexts/novageSkincareAdvisorContext.tsx","webpack://orinovageskincareadvisorapp/../../../src/hooks/useGetNovageSkincareConfiguration.ts","webpack://orinovageskincareadvisorapp/../../../src/containers/ApiProvider.tsx","webpack://orinovageskincareadvisorapp/../../../../src/components/Widget/styles.ts","webpack://orinovageskincareadvisorapp/../../../../src/components/Widget/utils.ts","webpack://orinovageskincareadvisorapp/../../../../src/components/Widget/Widget.tsx","webpack://orinovageskincareadvisorapp/../../../../src/components/Widget/constants.ts","webpack://orinovageskincareadvisorapp/../../../src/containers/NovageSkincareAdvisor.tsx","webpack://orinovageskincareadvisorapp/../../../src/utils/isValidNovageSkincareConfiguration.ts","webpack://orinovageskincareadvisorapp/../../../src/containers/NovageSkincareAdvisorController.tsx","webpack://orinovageskincareadvisorapp/./src/App.tsx","webpack://orinovageskincareadvisorapp/./src/logger.ts","webpack://orinovageskincareadvisorapp/./src/AppRender.tsx","webpack://orinovageskincareadvisorapp/../../src/constants-generated.ts","webpack://orinovageskincareadvisorapp/../../../src/constants/app.ts","webpack://orinovageskincareadvisorapp/../../../src/hooks/useOnHrefClick.ts","webpack://orinovageskincareadvisorapp/../../../src/hooks/useTranslations.ts","webpack://orinovageskincareadvisorapp/../../../src/utils/openQueryParam.ts"],"sourcesContent":["/* istanbul ignore file */\n\n/**\n * DO NOT EDIT!\n * This file was autogenerated by npm script `localizations-codegen`.\n * Changes may cause incorrect behavior and will be lost when the file is regenerated.\n *\n * Run `npx localizations-codegen` to regenerate.\n */\nimport type { TranslationKey } from '../models/TranslationKey';\n\nexport type DefaultTranslations = Record;\n\nexport const defaultTranslations: DefaultTranslations = {\n FindingProduct: 'Finding the best product for you',\n GetNewRecommendation: 'Get new recommendation',\n Recommendation: 'We have a product recommendation for you',\n SeeRecommendedProduct: 'See recommended product',\n closeScanYourSkin: 'Close scan your skin',\n scanYourSkin: 'Scan your skin',\n};\n\nexport const translationsNamespace = 'novage-skincare-advisor';\n","import { Logger } from '@ori/logger';\n\nimport { PACKAGE_NAME, TEAM_NAME } from './constants-generated';\n\nexport const mainLogger = new Logger(PACKAGE_NAME, { teamName: TEAM_NAME });\n","import { useToken } from '@ori/auth';\nimport { useServiceUrls } from '@ori/configuration-manager';\nimport { useEnvironment } from '@ori/environment';\nimport type { Translations } from '@ori/i18n';\nimport { TranslationsNamespaceProvider, TranslationsProvider, useTranslationsWithNamespaces } from '@ori/i18n';\nimport type { StaticApplicationsAdvisorNovAgeSkincareConfigurationDto } from '@ori/static-api-client-react';\nimport type { FC, PropsWithChildren } from 'react';\nimport { createContext, useCallback, useContext, useEffect, useMemo, useState } from 'react';\n\nimport {\n defaultTranslations,\n OPEN_HREF_ATTRIBUTE,\n OPEN_QUERY_PARAM_ALWAYS,\n OPEN_QUERY_PARAM_ONCE,\n translationsNamespace,\n} from '../constants';\nimport { useGetNovageSkincareConfiguration, useOnHrefClick } from '../hooks';\nimport { mainLogger } from '../logger';\nimport { getValidOpenQueryParam, setOpenQueryParam as setOpenQueryParamUtil } from '../utils';\n\nconst localLogger = mainLogger.createChild('NovageSkincareAdvisorProvider');\nconst onError = (error: unknown) =>\n localLogger.error(\n new Error('TranslationsProvider fetching failed', {\n cause: error,\n }),\n );\n\nexport interface NovageSkincareAdvisorContext {\n initialOpenDone: boolean;\n novageSkincareConfiguration: StaticApplicationsAdvisorNovAgeSkincareConfigurationDto | undefined;\n openQueryParam: string | undefined;\n}\n\nexport const defaultNovageSkincareAdvisorContextValue: NovageSkincareAdvisorContext = {\n initialOpenDone: false,\n novageSkincareConfiguration: undefined,\n openQueryParam: undefined,\n};\n\nexport const novageSkincareAdvisorContext = createContext(\n defaultNovageSkincareAdvisorContextValue,\n);\n\nexport const { Provider } = novageSkincareAdvisorContext;\n\nexport type NovageSkincareAdvisorProviderProps = PropsWithChildren<{\n /** Translations for NovageSkincareAdvisor. */\n translations?: Translations | undefined;\n}>;\n\nexport const NovageSkincareAdvisorProvider: FC = ({ children, translations }) => {\n const { tenant } = useEnvironment();\n const { language } = useTranslationsWithNamespaces();\n const { staticApiUrl } = useServiceUrls(['staticApi']);\n const { token } = useToken();\n const [initialOpenDone, setInitialOpenDone] = useState(false);\n const [openQueryParam, setOpenQueryParam] = useState();\n const open = useCallback(() => {\n if (openQueryParam !== OPEN_QUERY_PARAM_ALWAYS) {\n setOpenQueryParamUtil();\n setOpenQueryParam(OPEN_QUERY_PARAM_ONCE);\n setInitialOpenDone(true);\n }\n }, [openQueryParam]);\n useOnHrefClick({ href: OPEN_HREF_ATTRIBUTE, onClick: open });\n useEffect(() => {\n const initialOpenQueryParam = getValidOpenQueryParam();\n if (initialOpenQueryParam) {\n setOpenQueryParam(initialOpenQueryParam);\n setInitialOpenDone(true);\n }\n }, []);\n const novageSkincareConfiguration = useGetNovageSkincareConfiguration();\n\n const value = useMemo(\n () => ({ initialOpenDone, novageSkincareConfiguration, openQueryParam }),\n [initialOpenDone, novageSkincareConfiguration, openQueryParam],\n );\n const shouldFetchTranslations = useMemo(\n () => initialOpenDone || novageSkincareConfiguration?.recommendationPageEnabled,\n [initialOpenDone, novageSkincareConfiguration?.recommendationPageEnabled],\n );\n\n return (\n \n \n {children}\n \n \n );\n};\n\nexport const useNovageSkincareAdvisor = () => useContext(novageSkincareAdvisorContext);\n","import { useEnvironment } from '@ori/environment';\nimport { getHeaders } from '@ori/fetching';\nimport { useTranslationsWithNamespaces } from '@ori/i18n';\nimport { useGetTenantApplicationsAdvisorNovAgeSkincareConfiguration } from '@ori/static-api-client-react';\n\nimport { PACKAGE_NAME } from '../constants-generated';\n\nexport const useGetNovageSkincareConfiguration = () => {\n const { tenant } = useEnvironment();\n const { language } = useTranslationsWithNamespaces();\n const { data } = useGetTenantApplicationsAdvisorNovAgeSkincareConfiguration(\n tenant,\n {\n lang: language,\n },\n {\n request: {\n headers: getHeaders({\n language,\n sourceAppName: PACKAGE_NAME,\n tenant,\n }),\n },\n swr: {\n revalidateOnFocus: false,\n revalidateOnReconnect: false,\n revalidateIfStale: false,\n },\n },\n );\n\n return data;\n};\n","import { useServiceUrls } from '@ori/configuration-manager';\nimport { useEnvironment } from '@ori/environment';\nimport { useTranslationsWithNamespaces } from '@ori/i18n';\nimport { ApiClientProvider as StaticApiClientProvider } from '@ori/static-api-client-react';\nimport type { FC, PropsWithChildren } from 'react';\n\nexport const ApiProvider: FC = ({ children }) => {\n // istanbul ignore next\n const { tenant } = useEnvironment();\n const { language } = useTranslationsWithNamespaces();\n const { staticApiUrl } = useServiceUrls(['staticApi']);\n\n return (\n \n {children}\n \n );\n};\n","import { styled, Link as LinkComponent } from '@ori-ui/mui';\n\nexport const Root = styled('div')(({ theme }) => ({\n alignItems: 'center',\n background: theme.palette.red[50],\n borderRadius: '0px 60px 60px 0px',\n bottom: 15,\n display: 'flex',\n flexDirection: 'row',\n gap: theme.spacing(2),\n paddingRight: theme.spacing(3),\n position: 'fixed',\n zIndex: 100,\n [theme.breakpoints.up('md')]: {\n bottom: 30,\n },\n '&:hover, &:focus': {\n background: theme.palette.red[200],\n },\n}));\n\nexport const Link = styled(LinkComponent)(({ theme }) => ({\n fontWeight: theme.typography.fontWeightBold,\n padding: theme.spacing(3, 0, 3, 3),\n textTransform: 'uppercase',\n '&:hover, &:focus': {\n color: theme.palette.text.primary,\n },\n}));\n\nexport const CloseButton = styled('button')(({ theme }) => ({\n background: 'none',\n border: 'none',\n display: 'flex',\n padding: theme.spacing(3, 0),\n svg: {\n fill: 'inherit',\n },\n}));\n","const ALLOWED_PATHNAME_REGEXES = [\n /^(\\/[a-z]{2})?\\/?$/i,\n /^(\\/[a-z]{2})?\\/skincare(\\/.*?)?$/i,\n /^(\\/[a-z]{2})?\\/brands\\/novage(\\/.*?)?$/i,\n /^(\\/[a-z]{2})?\\/brands\\/novage-plus(\\/.*?)?$/i,\n];\n\nexport const shouldOpenForCurrentUrlPathname = () =>\n ALLOWED_PATHNAME_REGEXES.some((regex) => regex.test(window.location.pathname));\n","import { Clear } from '@ori-ui/icons';\nimport { useDisclose } from '@ori/presentation-hooks';\nimport useTestId from '@ori/testid-generator';\n\nimport { OPEN_HREF_ATTRIBUTE } from '../../constants';\nimport { useNovageSkincareAdvisor } from '../../contexts';\nimport { useTranslations } from '../../hooks';\nimport { WIDGET } from './constants';\nimport { CloseButton, Link, Root } from './styles';\nimport { shouldOpenForCurrentUrlPathname } from './utils';\n\nexport const Widget = () => {\n const { getTestId } = useTestId();\n const { translations } = useTranslations();\n const { novageSkincareConfiguration } = useNovageSkincareAdvisor();\n const { open, onClose } = useDisclose({ defaultOpen: true });\n\n if (!novageSkincareConfiguration?.recommendationPageEnabled || !open || !shouldOpenForCurrentUrlPathname()) {\n return null;\n }\n\n return (\n \n \n {translations.scanYourSkin}\n \n \n \n \n \n );\n};\n","export const WIDGET = 'widget';\n","import useTestId from '@ori/testid-generator';\nimport type { FunctionComponent } from 'react';\nimport { lazy, Suspense } from 'react';\n\nimport type { RevieveProps } from '../components';\nimport { Widget } from '../components';\nimport { APP_NAME } from '../constants-generated';\nimport { useNovageSkincareAdvisor } from '../contexts';\nimport { isValidNovageSkincareConfiguration } from '../utils';\n\nconst Revieve = lazy>(async () =>\n import(/* webpackChunkName: \"NovageSkincareAdvisor_Revieve\" */ '../components/Revieve').then((module) => ({\n default: module.Revieve,\n })),\n);\n\nexport const NovageSkincareAdvisor = () => {\n const { initialOpenDone, novageSkincareConfiguration, openQueryParam } = useNovageSkincareAdvisor();\n const { getTestId } = useTestId();\n\n return (\n
\n \n {initialOpenDone && isValidNovageSkincareConfiguration(novageSkincareConfiguration) ? (\n \n ) : null}\n \n \n
\n );\n};\n","import type { StaticApplicationsAdvisorNovAgeSkincareConfigurationDto } from '@ori/static-api-client-react';\n\nexport const isValidNovageSkincareConfiguration = (\n configuration: StaticApplicationsAdvisorNovAgeSkincareConfigurationDto | undefined,\n): configuration is Required =>\n Boolean(configuration?.environment && configuration.partnerId);\n","import { ErrorBoundary, LoggerProvider } from '@ori/logger';\nimport { Team, TestIdProvider } from '@ori/testid-generator';\nimport type { FC } from 'react';\nimport { Suspense } from 'react';\n\nimport { APP_NAME } from '../constants-generated';\nimport type { NovageSkincareAdvisorProviderProps } from '../contexts';\nimport { NovageSkincareAdvisorProvider } from '../contexts';\nimport { mainLogger } from '../logger';\nimport { ApiProvider } from './ApiProvider';\nimport { NovageSkincareAdvisor } from './NovageSkincareAdvisor';\n\nexport type NovageSkincareAdvisorControllerProps = Pick;\n\n/**\n * Accepts config data, renders NovageSkincareAdvisor.\n */\nexport const NovageSkincareAdvisorController: FC = ({ translations }) => (\n \n \n \n \n \n \n \n \n \n \n \n \n \n);\n","import type { PickClientAppDataConfigProps } from '@ori/client-app-config';\nimport { ServiceUrlsProvider } from '@ori/configuration-manager';\nimport { EnvironmentProvider } from '@ori/environment';\nimport { TranslationsProvider } from '@ori/i18n';\nimport { NovageSkincareAdvisorController } from '@ori/novage-skincare-advisor';\nimport type { FC } from 'react';\n\nexport type AppProps = PickClientAppDataConfigProps<\n 'currentLanguage' | 'globalApiUrl' | 'graphqlUrl' | 'staticApiUrl' | 'tenant'\n>;\nexport const App: FC = ({ currentLanguage, tenant, staticApiUrl, graphqlUrl, globalApiUrl }) => (\n \n \n \n \n \n \n \n);\n","import { Logger } from '@ori/logger';\n\nimport { PACKAGE_NAME, TEAM_NAME } from './constants-generated';\n\nexport const mainLogger = new Logger(PACKAGE_NAME, { teamName: TEAM_NAME });\n","import { ThemeProvider } from '@ori-ui/mui';\nimport { UniversalTokenProvider, doDevelopmentLogin } from '@ori/auth';\nimport type { PickClientAppDataConfigProps } from '@ori/client-app-config';\nimport { parseClientAppConfig } from '@ori/client-app-config';\nimport { ApplicationInsights, ErrorBoundary, getClientApplicationInsightsConfig } from '@ori/logger';\nimport { createRoot } from 'react-dom/client';\n\nimport type { AppProps as AppConfig } from './App';\nimport { App } from './App';\nimport { EMOTION_CACHE_KEY } from './constants-generated';\nimport { mainLogger } from './logger';\n\nconst localLogger = mainLogger.createChild('appRender');\n\n/**\n * React app renderer that is used when app is used as a standalone app\n */\nexport const render = async (rootElement: HTMLElement) => {\n const { config = '' } = rootElement.dataset;\n const { customerId, identityUrl, ...appConfig } = parseClientAppConfig<\n AppConfig & PickClientAppDataConfigProps<'customerId' | 'identityUrl'>\n >(config, ['tenant', 'staticApiUrl']);\n const { tenant } = appConfig;\n\n // Initialize Application Insights in production\n if (process.env.NODE_ENV === 'production') {\n ApplicationInsights.initialize(getClientApplicationInsightsConfig());\n }\n // When using Requestly we do not want to load token\n else if (process.env.REACT_APP_USE_REQUESTLY === '1') {\n localLogger.debug('USING REQUESTLY');\n }\n // Get token for local development\n else if (process.env.REACT_APP_ANONYMOUS_MODE !== '1') {\n if (identityUrl) {\n await doDevelopmentLogin({ identityUrl, tenant });\n } else {\n localLogger.error(new Error('Missing Identity URL!', { cause: identityUrl }));\n }\n }\n\n createRoot(rootElement).render(\n \n \n \n \n \n \n ,\n );\n\n return true;\n};\n","/* istanbul ignore file */\n//\n// DO NOT EDIT!\n// This file was autogenerated by Eddie.\n// Changes may cause incorrect behavior and will be lost when the file is regenerated.\n//\n// Run `npx eddie update workspace` to regenerate.\n//\n\nexport const APP_NAME = 'novage-skincare-advisor';\nexport const PACKAGE_NAME = '@ori/novage-skincare-advisor';\nexport const TEAM_NAME = 'Presentation';\n\nexport const EMOTION_CACHE_KEY = `${APP_NAME}-emotion-cache-key`;\n\nexport const APP_ROOT_ELEMENT_ID = `${APP_NAME}-root`;\n","// istanbul ignore file\nimport { APP_NAME } from '../constants-generated';\n\nexport const OPEN_HREF_ATTRIBUTE = `#open-${APP_NAME}`;\nexport const OPEN_QUERY_PARAM = 'openNovageSkincareAdvisor';\nexport const OPEN_QUERY_PARAM_ALWAYS = 'always';\nexport const OPEN_QUERY_PARAM_ONCE = 'once';\nexport const OPEN_QUERY_PARAM_VALID_VALUES = [OPEN_QUERY_PARAM_ALWAYS, OPEN_QUERY_PARAM_ONCE];\nexport const OPTANON_CONSENT_COOKIE = 'OptanonConsent';\nexport const ONE_TRUST_GROUP_PERFORMANCE = 'C0002';\nexport const REVIEVE_USER_ID_COOKIE = 'revieve-userid';\n","import type { GlobalEvent } from '@ori/presentation-hooks';\nimport { useGlobalEvents } from '@ori/presentation-hooks';\nimport { useCallback, useEffect, useMemo } from 'react';\n\nconst shouldOpen = (href: string, target: EventTarget | null) => {\n // document.activeElement points to the element that currently has focus,\n // usually it is the most recent thing that was clicked (and can be focused).\n // This is what we actually need when clicking anything wrapped in an Anchor -\n // - image or other passive elements cannot have focus so it goes to the wrapping anchor.\n if (document.activeElement) {\n return document.activeElement instanceof HTMLAnchorElement && document.activeElement.hash === href;\n }\n\n // fallback code for the 0.1% cases where document does not provide activeElement -\n // - pick the event target and if it is not an Anchor, see if any of its parents is.\n // If we don't find one, stop at Body - there's nothing of interest upwards.\n let bubblingTarget = target as HTMLElement | null;\n while (bubblingTarget && !(bubblingTarget instanceof HTMLBodyElement)) {\n if (bubblingTarget instanceof HTMLAnchorElement) {\n return bubblingTarget.hash === href;\n }\n bubblingTarget = bubblingTarget.parentElement;\n }\n\n return false;\n};\n\nconst deleteHash = () => {\n window.location.hash = '';\n};\n\nexport interface UseOnHrefClickProps {\n href: string;\n onClick: () => void;\n}\n\nexport const useOnHrefClick = ({ href, onClick }: UseOnHrefClickProps) => {\n const onHashChange = useCallback(\n (event: HashChangeEvent) => {\n const newUrl = new URL(event.newURL);\n if (newUrl.hash === href) {\n onClick();\n deleteHash();\n }\n },\n [href, onClick],\n );\n const events = useMemo(() => [{ name: 'hashchange', listener: onHashChange }], [onHashChange]);\n useGlobalEvents(events);\n useEffect(() => {\n const onOpen = (event: MouseEvent) => {\n if (shouldOpen(href, event.target)) {\n event.preventDefault();\n onClick();\n }\n };\n document.addEventListener('click', onOpen);\n\n return () => document.removeEventListener('click', onOpen);\n }, [href, onClick, onHashChange]);\n};\n","/* istanbul ignore file */\n\n/**\n * DO NOT EDIT!\n * This file was autogenerated by npm script `localizations-codegen`.\n * Changes may cause incorrect behavior and will be lost when the file is regenerated.\n *\n * Run `npx localizations-codegen` to regenerate.\n */\nimport { useTranslationsFromNamespace, type UseTranslationsFromNamespaceResult } from '@ori/i18n';\n\nimport type { DefaultTranslations } from '../constants/defaultTranslations';\n\n/**\n * A hook for accessing translations within a specific namespace along with a formatting function.\n *\n * @returns The translations within the specified namespace and a formatting function.\n */\nexport const useTranslations: () => UseTranslationsFromNamespaceResult = () =>\n useTranslationsFromNamespace();\n","import { getCurrentUrl, replaceCurrentUrl } from '@ori/presentation-utils';\n\nimport { OPEN_QUERY_PARAM, OPEN_QUERY_PARAM_ALWAYS, OPEN_QUERY_PARAM_ONCE } from '../constants';\n\nexport const getOpenQueryParam = () => {\n const url = getCurrentUrl();\n\n return url.searchParams.get(OPEN_QUERY_PARAM);\n};\n\nexport const getValidOpenQueryParam = () => {\n const queryParam = getOpenQueryParam();\n\n return queryParam === OPEN_QUERY_PARAM_ONCE || queryParam === OPEN_QUERY_PARAM_ALWAYS ? queryParam : undefined;\n};\n\nexport const removeOpenQueryParam = () => {\n if (getOpenQueryParam()) {\n const url = getCurrentUrl();\n url.searchParams.delete(OPEN_QUERY_PARAM);\n replaceCurrentUrl(url);\n }\n};\n\nexport const setOpenQueryParam = () => {\n const url = getCurrentUrl();\n url.searchParams.set(OPEN_QUERY_PARAM, OPEN_QUERY_PARAM_ONCE);\n if (url.searchParams.get(OPEN_QUERY_PARAM) !== getOpenQueryParam()) {\n replaceCurrentUrl(url);\n }\n};\n"],"names":["defaultTranslations","FindingProduct","GetNewRecommendation","Recommendation","SeeRecommendedProduct","closeScanYourSkin","scanYourSkin","translationsNamespace","mainLogger","Logger","PACKAGE_NAME","teamName","TEAM_NAME","localLogger","createChild","onError","error","Error","cause","defaultNovageSkincareAdvisorContextValue","initialOpenDone","novageSkincareConfiguration","undefined","openQueryParam","novageSkincareAdvisorContext","createContext","Provider","NovageSkincareAdvisorProvider","children","translations","tenant","useEnvironment","language","useTranslationsWithNamespaces","staticApiUrl","useServiceUrls","token","useToken","setInitialOpenDone","useState","setOpenQueryParam","open","useCallback","OPEN_QUERY_PARAM_ALWAYS","setOpenQueryParamUtil","OPEN_QUERY_PARAM_ONCE","useOnHrefClick","href","OPEN_HREF_ATTRIBUTE","onClick","useEffect","initialOpenQueryParam","getValidOpenQueryParam","useGetNovageSkincareConfiguration","data","useGetTenantApplicationsAdvisorNovAgeSkincareConfiguration","lang","request","headers","getHeaders","sourceAppName","swr","revalidateOnFocus","revalidateOnReconnect","revalidateIfStale","value","useMemo","shouldFetchTranslations","recommendationPageEnabled","_jsx","TranslationsProvider","defaultTranslationsWithNamespaces","translationsWithNamespaces","clientFetchConfiguration","baseUrl","TranslationsNamespaceProvider","namespace","useNovageSkincareAdvisor","useContext","ApiProvider","StaticApiClientProvider","Root","styled","theme","alignItems","background","palette","red","borderRadius","bottom","display","flexDirection","gap","spacing","paddingRight","position","zIndex","breakpoints","up","Link","LinkComponent","fontWeight","typography","fontWeightBold","padding","textTransform","color","text","primary","CloseButton","border","svg","fill","ALLOWED_PATHNAME_REGEXES","Widget","getTestId","useTestId","useTranslations","onClose","useDisclose","defaultOpen","some","regex","test","window","location","pathname","_jsxs","underline","Clear","Revieve","lazy","async","then","module","default","NovageSkincareAdvisor","APP_NAME","Suspense","fallback","configuration","Boolean","environment","partnerId","NovageSkincareAdvisorController","TestIdProvider","team","Team","Presentation","project","LoggerProvider","logger","ErrorBoundary","areaName","App","currentLanguage","graphqlUrl","globalApiUrl","ServiceUrlsProvider","serviceUrls","graphQlUrl","EnvironmentProvider","render","config","rootElement","dataset","customerId","identityUrl","appConfig","parseClientAppConfig","ApplicationInsights","initialize","getClientApplicationInsightsConfig","createRoot","UniversalTokenProvider","initialToken","ThemeProvider","enableCacheProvider","cacheKey","EMOTION_CACHE_KEY","OPEN_QUERY_PARAM","OPTANON_CONSENT_COOKIE","ONE_TRUST_GROUP_PERFORMANCE","REVIEVE_USER_ID_COOKIE","onHashChange","event","URL","newURL","hash","events","name","listener","useGlobalEvents","onOpen","shouldOpen","target","document","activeElement","HTMLAnchorElement","bubblingTarget","HTMLBodyElement","parentElement","preventDefault","addEventListener","removeEventListener","useTranslationsFromNamespace","getOpenQueryParam","getCurrentUrl","searchParams","get","queryParam","removeOpenQueryParam","url","delete","replaceCurrentUrl","set"],"sourceRoot":""}