{"version":3,"file":"static/js/main.b0ca4ad3.js","mappings":"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","sources":["webpack://@vestwell-frontend/auth/../../src/getBearerToken.ts","webpack://@vestwell-frontend/auth/../../src/getMobileHostname.ts","webpack://@vestwell-frontend/auth/../../src/logout.ts","webpack://@vestwell-frontend/auth/../../src/broadcastToApp.ts","webpack://@vestwell-frontend/auth/../../src/useCamelCase.ts","webpack://@vestwell-frontend/auth/../../../src/utils/errorCodes.ts","webpack://@vestwell-frontend/auth/../../../src/utils/client.ts","webpack://@vestwell-frontend/auth/../../src/useDocumentTitle.ts","webpack://@vestwell-frontend/auth/../../src/useNotifications.ts","webpack://@vestwell-frontend/auth/../../src/useDownload.tsx","webpack://@vestwell-frontend/auth/../../src/useBearerToken.ts","webpack://@vestwell-frontend/auth/../../src/useMutation.ts","webpack://@vestwell-frontend/auth/../../src/useWeglot.tsx","webpack://@vestwell-frontend/auth/../../src/useSearchParams.tsx","webpack://@vestwell-frontend/auth/../../src/useSecureStorage.ts","webpack://@vestwell-frontend/auth/../../src/useToggle.ts","webpack://@vestwell-frontend/auth/../../src/useValidateOnboardingQuestionnaire.hook.ts","webpack://@vestwell-frontend/auth/../../../src/security/AuthProvider.tsx","webpack://@vestwell-frontend/auth/../../../src/components/Favicon.tsx","webpack://@vestwell-frontend/auth/../../src/setMobileHeaders.ts","webpack://@vestwell-frontend/auth/../../src/setEmbeddedHeaders.ts","webpack://@vestwell-frontend/auth/../../src/splashScreen.ts","webpack://@vestwell-frontend/auth/../../src/MaterialProvider.tsx","webpack://@vestwell-frontend/auth/../../src/ThemeProvider.tsx","webpack://@vestwell-frontend/auth/../../../src/components/Loader.tsx","webpack://@vestwell-frontend/auth/../../../src/components/PageContext.ts","webpack://@vestwell-frontend/auth/../../../src/components/PageFooter.tsx","webpack://@vestwell-frontend/auth/../../../src/components/Button.tsx","webpack://@vestwell-frontend/auth/../../../../src/components/icon/ExceptionIcon.tsx","webpack://@vestwell-frontend/auth/../../../src/components/Link.tsx","webpack://@vestwell-frontend/auth/../../../src/components/Loading.tsx","webpack://@vestwell-frontend/auth/../../../src/helpers/useIsAnimationActive.ts","webpack://@vestwell-frontend/auth/../../../src/components/Text.tsx","webpack://@vestwell-frontend/auth/../../../src/components/Error.tsx","webpack://@vestwell-frontend/auth/../../../../src/components/icon/Error404Icon.tsx","webpack://@vestwell-frontend/auth/../../../../src/components/icon/Error500Icon.tsx","webpack://@vestwell-frontend/auth/../../../src/components/StatusCodeError.tsx","webpack://@vestwell-frontend/auth/../../../src/components/Page.tsx","webpack://@vestwell-frontend/auth/../../../src/components/ApiBoundary.tsx","webpack://@vestwell-frontend/auth/../../../../src/components/icon/TimerIcon.tsx","webpack://@vestwell-frontend/auth/../../../src/helpers/safeArea.style.ts","webpack://@vestwell-frontend/auth/../../../src/components/ModalBody.tsx","webpack://@vestwell-frontend/auth/../../../src/components/ModalContainer.tsx","webpack://@vestwell-frontend/auth/../../../src/components/ModalHeader.tsx","webpack://@vestwell-frontend/auth/../../../src/components/Modal.tsx","webpack://@vestwell-frontend/auth/../../../src/components/ModalFooter.tsx","webpack://@vestwell-frontend/auth/../../../src/security/TimeoutModal.tsx","webpack://@vestwell-frontend/auth/../../../src/components/NotificationsProvider.tsx","webpack://@vestwell-frontend/auth/../../../src/components/PageNotFound.tsx","webpack://@vestwell-frontend/auth/../../../../src/components/form/Form.tsx","webpack://@vestwell-frontend/auth/../../../src/components/TextBox.tsx","webpack://@vestwell-frontend/auth/../../../src/components/IconTooltip.tsx","webpack://@vestwell-frontend/auth/../../../../src/components/form/FormFieldLabel.tsx","webpack://@vestwell-frontend/auth/../../../../src/components/form/FormField.tsx","webpack://@vestwell-frontend/auth/./src/router/routes.ts","webpack://@vestwell-frontend/auth/../../../../src/components/form/FormSaveButton.tsx","webpack://@vestwell-frontend/auth/./src/components/SubmitButton.tsx","webpack://@vestwell-frontend/auth/./src/components/AppVerification.tsx","webpack://@vestwell-frontend/auth/../../../src/components/SuspenseImage.tsx","webpack://@vestwell-frontend/auth/./src/contexts/ConfigProvider.tsx","webpack://@vestwell-frontend/auth/./src/components/BackgroundCard.tsx","webpack://@vestwell-frontend/auth/./src/components/Banner.tsx","webpack://@vestwell-frontend/auth/../../../src/components/FormatEmail.tsx","webpack://@vestwell-frontend/auth/../../src/maskValues.ts","webpack://@vestwell-frontend/auth/./src/components/ResendOtpButton.tsx","webpack://@vestwell-frontend/auth/./src/components/EmailVerification.tsx","webpack://@vestwell-frontend/auth/./src/components/Help.tsx","webpack://@vestwell-frontend/auth/../../../src/components/FormatPhoneNumber.tsx","webpack://@vestwell-frontend/auth/../../src/formatPhoneNumber.ts","webpack://@vestwell-frontend/auth/./src/components/HelpModal.tsx","webpack://@vestwell-frontend/auth/../../../src/consts/strings.ts","webpack://@vestwell-frontend/auth/../../../../src/components/attributes/VerticalAttribute.tsx","webpack://@vestwell-frontend/auth/../../../src/components/WizardContext.tsx","webpack://@vestwell-frontend/auth/../../src/validations.ts","webpack://@vestwell-frontend/auth/./src/components/ChangeLoginEmail.tsx","webpack://@vestwell-frontend/auth/./src/components/ChangeLoginEmailVerifyCode.tsx","webpack://@vestwell-frontend/auth/./src/components/VerifyPassword.tsx","webpack://@vestwell-frontend/auth/./src/config/changeLoginEmail.tsx","webpack://@vestwell-frontend/auth/./src/components/ChangeLoginEmailModal.tsx","webpack://@vestwell-frontend/auth/./src/components/PasswordResetModal.tsx","webpack://@vestwell-frontend/auth/./src/components/LoginSettingsSection.tsx","webpack://@vestwell-frontend/auth/../../../src/components/Img.tsx","webpack://@vestwell-frontend/auth/./src/components/MfaQrCode.tsx","webpack://@vestwell-frontend/auth/../../../src/helpers/hexToRgba.ts","webpack://@vestwell-frontend/auth/../../../src/components/Pill.tsx","webpack://@vestwell-frontend/auth/../../../src/components/ActionMenu.tsx","webpack://@vestwell-frontend/auth/./src/components/MfaSetupApp.tsx","webpack://@vestwell-frontend/auth/../../../src/components/RadioButton.tsx","webpack://@vestwell-frontend/auth/../../../../src/components/form/FormRadioGroup.tsx","webpack://@vestwell-frontend/auth/./src/components/MfaSetupPhone.tsx","webpack://@vestwell-frontend/auth/./src/components/MfaSetupVerifyCode.tsx","webpack://@vestwell-frontend/auth/./src/config/mfaSetup.tsx","webpack://@vestwell-frontend/auth/./src/components/MfaEditModal.tsx","webpack://@vestwell-frontend/auth/./src/components/MfaSetupModal.tsx","webpack://@vestwell-frontend/auth/./src/components/MfaSection.tsx","webpack://@vestwell-frontend/auth/./src/components/Page.tsx","webpack://@vestwell-frontend/auth/./src/components/PhoneVerification.tsx","webpack://@vestwell-frontend/auth/../../src/getTimeAgo.ts","webpack://@vestwell-frontend/auth/./src/components/RecentLoginsSection.tsx","webpack://@vestwell-frontend/auth/../../../src/security/AccountMenu.tsx","webpack://@vestwell-frontend/auth/../../src/useSubdomain.ts","webpack://@vestwell-frontend/auth/../../../src/helpers/initializeSafeArea.ts","webpack://@vestwell-frontend/auth/../../../src/components/Topbar.tsx","webpack://@vestwell-frontend/auth/./src/components/Root.tsx","webpack://@vestwell-frontend/auth/./src/components/SignInLink.tsx","webpack://@vestwell-frontend/auth/./src/pages/AccountAccessIssuePage.tsx","webpack://@vestwell-frontend/auth/./src/pages/AccountLockedPage.tsx","webpack://@vestwell-frontend/auth/./src/pages/AccountSetupPage.tsx","webpack://@vestwell-frontend/auth/../../../src/components/Redirect.tsx","webpack://@vestwell-frontend/auth/./src/pages/AuthRedirectingPage.tsx","webpack://@vestwell-frontend/auth/../../src/mobileBundleVersion.ts","webpack://@vestwell-frontend/auth/./src/pages/AuthorizationPage.tsx","webpack://@vestwell-frontend/auth/../../src/useNavigate.ts","webpack://@vestwell-frontend/auth/./src/pages/ForgotPasswordPage.tsx","webpack://@vestwell-frontend/auth/./src/pages/LoginAndSecurityPage.tsx","webpack://@vestwell-frontend/auth/./src/pages/LogoutPage.tsx","webpack://@vestwell-frontend/auth/./src/pages/MfaNudgeAppSetupPage.tsx","webpack://@vestwell-frontend/auth/../../../../src/components/icon/AvatarIcon.tsx","webpack://@vestwell-frontend/auth/./src/pages/MfaNudgeCompletedPage.tsx","webpack://@vestwell-frontend/auth/./src/pages/MfaNudgeMethodPage.tsx","webpack://@vestwell-frontend/auth/./src/config/mfaNudge.tsx","webpack://@vestwell-frontend/auth/./src/pages/MfaNudgePage.tsx","webpack://@vestwell-frontend/auth/./src/pages/MfaNudgePhoneSetupPage.tsx","webpack://@vestwell-frontend/auth/../../../../src/components/icon/AuthIcon.tsx","webpack://@vestwell-frontend/auth/./src/pages/MfaNudgeStartPage.tsx","webpack://@vestwell-frontend/auth/./src/pages/MfaNudgeVerifyPage.tsx","webpack://@vestwell-frontend/auth/./src/hooks/useBackButtonBehavior.tsx","webpack://@vestwell-frontend/auth/./src/hooks/useNav.ts","webpack://@vestwell-frontend/auth/./src/pages/MfaPage.tsx","webpack://@vestwell-frontend/auth/../../../../src/components/icon/ContributionsIcon.tsx","webpack://@vestwell-frontend/auth/../../../../src/components/icon/AccountIcon.tsx","webpack://@vestwell-frontend/auth/../../../../src/components/icon/GiftIcon.tsx","webpack://@vestwell-frontend/auth/../../../src/components/SelectChevron.tsx","webpack://@vestwell-frontend/auth/../../../src/components/Dropdown.tsx","webpack://@vestwell-frontend/auth/../../../src/components/Tabs.tsx","webpack://@vestwell-frontend/auth/./src/pages/PersonasPage.tsx","webpack://@vestwell-frontend/auth/../../src/parseNumber.ts","webpack://@vestwell-frontend/auth/../../src/formatCurrency.ts","webpack://@vestwell-frontend/auth/./src/pages/PlatformSelectionPage.tsx","webpack://@vestwell-frontend/auth/./src/pages/ResetPasswordExpiredPage.tsx","webpack://@vestwell-frontend/auth/../../../src/security/PasswordCheckList.tsx","webpack://@vestwell-frontend/auth/./src/pages/ResetPasswordPage.tsx","webpack://@vestwell-frontend/auth/../../../src/components/CookiesBanner.tsx","webpack://@vestwell-frontend/auth/./src/pages/SignInPage.tsx","webpack://@vestwell-frontend/auth/./src/router/AppRouter.tsx","webpack://@vestwell-frontend/auth/./src/index.tsx","webpack://@vestwell-frontend/auth/../../src/isNativeMobile.ts"],"sourcesContent":["import { SecureStoragePlugin } from 'capacitor-secure-storage-plugin';\nimport Cookies from 'js-cookie';\n\nexport const getBearerToken = async (\n isMobile: boolean\n): Promise<string | null> => {\n if (isMobile) {\n try {\n const tokenData = await SecureStoragePlugin.get({ key: 'token' });\n const tokenObject = tokenData?.value ? JSON.parse(tokenData.value) : null;\n return tokenObject?.access_token && tokenObject?.token_type\n ? `${tokenObject.token_type} ${tokenObject.access_token}`\n : null;\n } catch (e) {\n console.warn('SecureStoragePlugin.get failed', e);\n }\n } else {\n const bearerToken = Cookies.get('token');\n return bearerToken && bearerToken?.indexOf('Bearer') === 0\n ? bearerToken\n : null;\n }\n};\n","import { SecureStoragePlugin } from 'capacitor-secure-storage-plugin';\nimport { SemVer } from 'semver';\n\nexport const getMobileHostname = async () => {\n const capgoVersion = await SecureStoragePlugin.get({\n key: 'CAPGO_BUNDLE'\n });\n const localhostCutoffVersion = new SemVer('3.0.0');\n if (\n capgoVersion.value &&\n new SemVer(capgoVersion.value).compare(localhostCutoffVersion) < 0\n ) {\n return `localhost`;\n } else {\n return `mobile.vestwell`;\n }\n};\n","import axios from 'axios';\nimport { SecureStoragePlugin } from 'capacitor-secure-storage-plugin';\nimport Cookies from 'js-cookie';\n\nimport { getBearerToken } from './getBearerToken';\nimport { getMobileHostname } from './getMobileHostname';\nimport { isNativeMobile } from './isNativeMobile';\n\nexport const cleanUpStaleCookies = () => {\n const domain = `.${window.location.host.split('.').slice(-2).join('.')}`;\n\n Cookies.remove('isLoginDisclosure', {\n domain,\n path: '/'\n });\n Cookies.remove('token', {\n domain: window.location.host,\n path: '/'\n });\n Cookies.remove('tokenExpiration', {\n domain: window.location.host,\n path: '/'\n });\n Cookies.remove('refreshToken', {\n domain,\n path: '/'\n });\n};\n\nexport const logout = async (timeout?) => {\n const isNative = await isNativeMobile();\n const token = await getBearerToken(isNative);\n cleanUpStaleCookies();\n\n try {\n // token could be null and if it is, there is nothing to log out so skip the call\n if (token) {\n await axios.get('/auth/api/v2/logout', {\n headers: {\n Authorization: token\n }\n });\n }\n if (!isNative) {\n window.location.href = `${window.location.origin}${timeout === true ? `?error=TIMEOUT` : ''}`;\n } else {\n await SecureStoragePlugin.remove({ key: 'token' }).catch(() =>\n console.warn('token unavailable')\n );\n await SecureStoragePlugin.remove({ key: 'tokenExpiration' }).catch(() =>\n console.warn('token expiration unavailable')\n );\n const mobileHost = await getMobileHostname();\n window.location.assign(\n `${window.location.protocol}//${mobileHost}/?logout=true${timeout === true ? `&error=TIMEOUT` : ''}`\n );\n }\n } catch (e) {\n console.error('Failed to logout', e);\n window.location.href = window.location.origin;\n }\n};\n","export type BroadcastToAppChannels =\n | 'JWT'\n | 'CLOSE'\n | 'ERROR'\n | 'LOGIN'\n | 'ROUTE_TO_PERSONAS';\n\nexport const broadcastToApp = (\n channel: BroadcastToAppChannels,\n message?: any\n) => {\n //@ts-ignore\n if (!webkit.messageHandlers.cordova_iab) {\n console.warn('Cordova IAB postMessage API not found!');\n } else {\n //@ts-ignore\n webkit.messageHandlers.cordova_iab.postMessage(\n JSON.stringify({ channel: channel, content: message })\n );\n }\n};\n","import { camelCase } from 'lodash';\nimport { useMemo } from 'react';\n\nexport function useCamelCase(text?: string) {\n return useMemo(() => camelCase(text || ''), [text]);\n}\n","export type HttpErrorType = Error & {\n code?: string;\n headers?: Record<string, unknown>;\n message: string;\n meta?: Record<string, unknown>;\n method?: string;\n name: string;\n status?: number;\n traceId?: string;\n url?: string;\n};\n\nexport class HttpError extends Error {\n code?: string;\n headers?: Record<string, unknown>;\n message: string;\n meta?: Record<string, unknown>;\n method?: string;\n name: string;\n status?: number;\n traceId?: string;\n url?: string;\n\n constructor(props: HttpErrorType) {\n super(props.message);\n this.code = props.code;\n this.headers = props.headers;\n this.name = props.name;\n this.message = props.message;\n this.status = props.status;\n this.traceId = props.traceId;\n this.meta = props.meta;\n this.method = props.method;\n this.url = props.url;\n }\n}\n\nexport class HttpClientError extends HttpError {\n constructor(props?: HttpErrorType) {\n super({\n ...props,\n message: props?.message,\n name: 'HttpClientError',\n status: props?.status\n });\n }\n}\n\nexport function getErrorCode(\n body: Record<string, unknown>,\n defaultCode?: string\n) {\n return (\n body.errors?.[0]?.code ?? body.code ?? defaultCode ?? 'UNKNOWN_EXCEPTION'\n );\n}\n","import axios, { AxiosError, AxiosRequestConfig } from 'axios';\nimport { isPlainObject } from 'lodash';\nimport { nanoid } from 'nanoid';\nimport qs from 'qs';\nimport stringify from 'safe-stable-stringify';\n\nimport { getErrorCode, HttpClientError } from './errorCodes';\n\nexport type QueryParams<T = Record<string, unknown>> = T &\n Partial<{\n sort?: string | { name?: string };\n order?: 'descending' | 'ascending';\n }>;\n\nconst pending = {};\n\nexport function client<T>({\n url,\n params,\n ...config\n}: AxiosRequestConfig): Promise<T> {\n const queryParams = {};\n const keys = Object.keys(params ?? {});\n\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n const rawValue = params[key];\n const isSortObject =\n key === 'sort' && isPlainObject(rawValue) && rawValue.name;\n\n const value = isSortObject\n ? rawValue.order === 'descending'\n ? `-${rawValue.name}`\n : rawValue.name\n : params[key];\n\n if ([undefined, null, ''].every(v => value !== v)) {\n queryParams[key] = value;\n }\n\n if (Array.isArray(value)) {\n queryParams[key] = value.join(',');\n }\n }\n\n const key = stringify({\n data: config.data,\n params: queryParams,\n url\n });\n\n if (pending[key]) {\n return pending[key];\n }\n\n const traceId = nanoid();\n const source = axios.CancelToken.source();\n\n const request = axios({\n ...config,\n cancelToken: source.token,\n headers: {\n ...(config.headers as Record<string, string>),\n 'x-trace-id': traceId\n },\n params: queryParams,\n paramsSerializer: {\n serialize: params => qs.stringify(params, { arrayFormat: 'repeat' })\n },\n url: url\n });\n\n pending[key] = request\n .then(({ data }) => {\n pending[key] = null;\n\n return Promise.resolve(data);\n })\n .catch((error: AxiosError<any>) => {\n pending[key] = null;\n\n const status = error.status ?? error?.response?.status ?? 500;\n\n return Promise.reject(\n new HttpClientError({\n code: getErrorCode(error?.response?.data ?? {}),\n headers: error?.config?.headers as Record<string, string>,\n message:\n error?.response?.data?.message ||\n error?.message ||\n 'Internal Server Error',\n meta: error?.response?.data?.meta,\n method: error?.config?.method,\n name: 'fetch',\n status,\n traceId,\n url: error?.config?.url\n }) as unknown as Error\n );\n });\n\n return pending[key];\n}\n","import { useGetWhiteLabelUnauthorized } from '@portal-middleware/hooks';\n\nimport { useEffect } from 'react';\n\nexport const useDocumentTitle = (\n title: string | undefined,\n ...args: string[]\n) => {\n const whitelabel = useGetWhiteLabelUnauthorized();\n\n useEffect(() => {\n if (!whitelabel.error && !!whitelabel.data?.metadata?.title) {\n document.title = title\n ? [title, ...args, whitelabel.data.metadata.title].join(' / ')\n : whitelabel.data.metadata.title;\n }\n }, [title, args, whitelabel.error, whitelabel.data?.metadata?.title]);\n};\n","import { OptionsObject, SnackbarKey, useSnackbar } from 'notistack';\nimport { ReactNode, useMemo } from 'react';\n\ntype MessageFn = (message: ReactNode, options?: OptionsObject) => SnackbarKey;\n\nexport type UseNotifications = {\n close: (key?: SnackbarKey) => void;\n error: MessageFn;\n info: MessageFn;\n success: MessageFn;\n warning: MessageFn;\n};\n\nexport function useNotifications(): UseNotifications {\n const snackbar = useSnackbar();\n\n return useMemo(\n () => ({\n close: key => snackbar.closeSnackbar(key),\n error: (message: ReactNode, options?: OptionsObject) =>\n snackbar.enqueueSnackbar(message, {\n ...options,\n variant: 'error'\n }),\n info: (message: ReactNode, options?: OptionsObject) =>\n snackbar.enqueueSnackbar(message, {\n ...options,\n variant: 'info'\n }),\n success: (message: ReactNode, options?: OptionsObject) =>\n snackbar.enqueueSnackbar(message, {\n ...options,\n variant: 'success'\n }),\n warning: (message: ReactNode, options?: OptionsObject) =>\n snackbar.enqueueSnackbar(message, {\n ...options,\n variant: 'warning'\n })\n }),\n [snackbar.closeSnackbar, snackbar.enqueueSnackbar]\n );\n}\n","import { FileOpener } from '@capacitor-community/file-opener';\nimport { Directory, Filesystem } from '@capacitor/filesystem';\nimport { isNativeMobile } from '@vestwell-frontend/helpers';\n\nimport axios from 'axios';\nimport { MouseEvent, useCallback, useEffect, useState } from 'react';\n\nimport { useBearerToken } from './useBearerToken';\nimport { useNotifications } from './useNotifications';\n\nconst blobToBase64DataUrl = (blob: Blob): Promise<string> => {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onloadend = () => resolve(reader.result as string);\n reader.onerror = reject;\n reader.readAsDataURL(blob);\n });\n};\n\nfunction triggerFileDownload(data: string, name: string) {\n const link = document.createElement('a');\n link.href = data;\n link.download = name;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n}\n\nexport const useDownload = (\n pathname: string,\n avoidPreview: boolean = false\n) => {\n const [fileUri, setFileUri] = useState<string | null>(null);\n const [fileName, setFileName] = useState<string | null>(null);\n const [isLoading, setIsLoading] = useState(false);\n const [isMobileApp, setIsMobileApp] = useState<boolean | null>(null);\n\n const [token] = useBearerToken();\n\n const notify = useNotifications();\n\n useEffect(() => {\n isNativeMobile().then(setIsMobileApp);\n }, []);\n\n return useCallback(\n async (e: MouseEvent<HTMLElement>) => {\n e.preventDefault();\n\n // If already loading or data exists, prevent further action\n if (isLoading) {\n notify.info('Document is already being downloaded.');\n return;\n }\n\n if (fileUri) {\n if (!isMobileApp) {\n if (avoidPreview) {\n triggerFileDownload(fileUri, fileName); // For web, download existing document\n } else {\n window.open(fileUri, '_blank'); // For web, open existing document\n }\n } else {\n try {\n // For mobile, re-open the file if already downloaded\n await FileOpener.open({\n filePath: fileUri,\n openWithDefault: true\n });\n } catch (error) {\n console.error('Error re-opening file on mobile', error);\n notify.error('Error re-opening file');\n }\n }\n return;\n }\n\n notify.info(\n 'The document is being prepared for download. This may take a few seconds.'\n );\n setIsLoading(true);\n\n try {\n const response = await axios.get(pathname, {\n headers: {\n Authorization: token\n },\n responseType: 'blob'\n });\n\n const blob = response.data;\n const contentDisposition = response.headers['content-disposition'];\n const downloadedFileName = contentDisposition\n ? contentDisposition\n .split('filename=')[1]\n ?.split(';')[0]\n ?.replace(/\"/g, '')\n : `${new Date().getTime()}.${getFileExtension(blob.type)}`;\n setFileName(downloadedFileName);\n\n if (!isMobileApp) {\n if (avoidPreview) {\n // Web: just download document\n const dataUrl = await blobToBase64DataUrl(blob);\n setFileUri(dataUrl);\n triggerFileDownload(dataUrl, downloadedFileName);\n } else {\n // Web: Open the blob as a new URL\n const blobUrl = window.URL.createObjectURL(blob);\n setFileUri(blobUrl);\n window.open(blobUrl, '_blank'); // open in new tab\n }\n } else {\n // Mobile: Save file and open with default app\n const dataUrl = await blobToBase64DataUrl(blob);\n\n const savedFile = await Filesystem.writeFile({\n data: dataUrl,\n directory: Directory.Documents,\n path: downloadedFileName,\n recursive: true\n });\n\n setFileUri(savedFile.uri); // Store file URI for reuse\n\n await FileOpener.open({\n filePath: savedFile.uri,\n openWithDefault: true\n });\n }\n } catch (error) {\n console.error('Failed to fetch document', error);\n notify.error('Failed to fetch document');\n } finally {\n setIsLoading(false);\n }\n },\n [fileUri, isLoading, isMobileApp, pathname, avoidPreview, token]\n );\n};\n\nconst getFileExtension = (mimeType: string) => {\n switch (mimeType) {\n case 'application/pdf':\n return 'pdf';\n case 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet':\n return 'xlsx';\n default:\n return mimeType.split('/')[1];\n }\n};\n","import { getBearerToken, isNativeMobile } from '@vestwell-frontend/helpers';\n\nimport {\n Dispatch,\n SetStateAction,\n useCallback,\n useEffect,\n useState\n} from 'react';\n\nexport function useBearerToken(): [\n string | null,\n Dispatch<SetStateAction<string>>,\n boolean\n] {\n const [bearerTokenValue, setBearerTokenValue] = useState<string | null>(null);\n const [isMobileApp, setIsMobileApp] = useState<boolean | null>(null);\n const [isLoading, setIsLoading] = useState<boolean>(true);\n\n const getBearerTokenValue = useCallback(async () => {\n try {\n const token = await getBearerToken(isMobileApp);\n setBearerTokenValue(token || null);\n setIsLoading(false);\n } catch (e) {\n console.warn(`Failed to get bearer token`, e);\n setIsLoading(false);\n }\n }, [isMobileApp]);\n\n useEffect(() => {\n isNativeMobile().then(setIsMobileApp);\n }, []);\n\n useEffect(() => {\n if (isMobileApp !== null) getBearerTokenValue();\n }, [getBearerTokenValue, isMobileApp]);\n\n useEffect(() => {\n const handleTokenChange = () => {\n getBearerTokenValue();\n };\n\n window.addEventListener('tokenChange', handleTokenChange);\n\n return () => {\n window.removeEventListener('tokenChange', handleTokenChange);\n };\n }, [getBearerTokenValue]);\n\n return [bearerTokenValue, setBearerTokenValue, isLoading];\n}\n","import type {\n MutateOptions,\n UseMutationOptions,\n UseMutationResult\n} from '@tanstack/react-query';\nimport { useMutation as useRqMutation } from '@tanstack/react-query';\n\nimport type { AxiosRequestConfig } from 'axios';\n\nimport { client } from './utils/client';\nimport type { HttpErrorType } from './utils/errorCodes';\n\ntype UseMutateResult<Response, HttpErrorType> = [\n (\n variables?: any,\n options?: MutateOptions<Response, HttpErrorType, any>\n ) => Promise<Response>,\n Omit<UseMutationResult<Response, HttpErrorType, any, any>, 'mutateAsync'>\n];\n\ntype SubmitParams = Omit<AxiosRequestConfig, 'url'>;\n\nexport function usePatchMutation<Response = Record<string, any>>(\n url,\n options?: SubmitParams,\n config?: Omit<\n UseMutationOptions<Response, HttpErrorType, any, any>,\n 'mutationKey' | 'mutationFn'\n >\n): UseMutateResult<Response, HttpErrorType> {\n const { mutateAsync, ...result } = useRqMutation<\n Response,\n HttpErrorType,\n any,\n any\n >(\n data =>\n client<Response>({\n ...options,\n data,\n method: 'PATCH',\n url\n }),\n config\n );\n\n return [mutateAsync, result];\n}\n\nexport function usePostMutation<Response = Record<string, any>>(\n url,\n options?: SubmitParams,\n config?: Omit<\n UseMutationOptions<Response, HttpErrorType, any, any>,\n 'mutationKey' | 'mutationFn'\n >\n): UseMutateResult<Response, HttpErrorType> {\n const { mutateAsync, ...result } = useRqMutation<\n Response,\n HttpErrorType,\n any,\n any\n >(\n data =>\n client<Response>({\n ...options,\n data,\n method: 'POST',\n url\n }),\n config\n );\n\n return [mutateAsync, result];\n}\n\nexport function usePutMutation<Response = Record<string, any>>(\n url,\n options?: SubmitParams,\n config?: Omit<\n UseMutationOptions<Response, HttpErrorType, any, any>,\n 'mutationKey' | 'mutationFn'\n >\n): UseMutateResult<Response, HttpErrorType> {\n const { mutateAsync, ...result } = useRqMutation<\n Response,\n HttpErrorType,\n any,\n any\n >(data => client<Response>({ ...options, data, method: 'PUT', url }), config);\n\n return [mutateAsync, result];\n}\n","import Cookies from 'js-cookie';\nimport { useCallback, useEffect, useMemo, useState } from 'react';\n\ndeclare global {\n interface Window {\n Weglot: {\n options: {\n languages: { language_to: string }[];\n language_from: string;\n };\n getCurrentLang: () => string;\n getLanguageName: (lang: string) => string;\n switchTo: (lang: string) => void;\n on: (event: string, callback: (lang: string) => void) => void;\n off: (event: string, callback: (lang: string) => void) => void;\n };\n }\n}\n\nexport function useWeglot() {\n const [languageOptions, setLanguageOptions] = useState([]);\n const [currentLanguage, setCurrentLanguage] = useState('');\n const [currentLanguageLabel, setCurrentLanguageLabel] = useState('');\n const [languagePreference, setLanguagePreference] = useState(\n Cookies.get('wg') || ''\n );\n const [isWeglotAvailable, setIsWeglotAvailable] = useState(true);\n const domain = useMemo(() => {\n return window.location.host.split('.').slice(-2).join('.');\n }, [window.location.host]);\n\n useEffect(() => {\n if (!window.Weglot) {\n console.error('Weglot is not loaded.');\n setIsWeglotAvailable(false);\n return;\n }\n\n if (!isWeglotAvailable) return;\n\n try {\n const availableLanguages = [\n ...window.Weglot.options.languages.map(lang => lang.language_to),\n window.Weglot.options.language_from\n ];\n\n const options = availableLanguages.map(lang => ({\n label: window.Weglot.getLanguageName(lang),\n value: lang\n }));\n\n setLanguageOptions(options);\n\n const currentLang = window.Weglot.getCurrentLang();\n setCurrentLanguage(currentLang);\n setCurrentLanguageLabel(window.Weglot.getLanguageName(currentLang));\n\n const handleLanguageChange = newLang => {\n setCurrentLanguage(newLang);\n setCurrentLanguageLabel(window.Weglot.getLanguageName(newLang));\n };\n\n window.Weglot.on('languageChanged', handleLanguageChange);\n\n return () => {\n window.Weglot.off('languageChanged', handleLanguageChange);\n };\n } catch (error) {\n console.error('Weglot initialization failed:', error);\n setIsWeglotAvailable(false);\n }\n }, [isWeglotAvailable]);\n\n const switchLanguage = useCallback(\n async newLanguage => {\n if (!window.Weglot || !isWeglotAvailable) return;\n\n try {\n await new Promise(resolve => {\n const handleLanguageChange = lang => {\n setCurrentLanguage(lang);\n setCurrentLanguageLabel(window.Weglot.getLanguageName(lang));\n setLanguagePreference(lang);\n Cookies.set('wg', lang, {\n domain: `.${domain}`,\n expires: 365,\n path: '/'\n });\n\n resolve(true);\n window.Weglot.off('languageChanged', handleLanguageChange);\n };\n\n window.Weglot.on('languageChanged', handleLanguageChange);\n window.Weglot.switchTo(newLanguage);\n });\n } catch (error) {\n console.error('Failed to switch language:', error);\n }\n },\n [isWeglotAvailable, setLanguagePreference]\n );\n\n const syncLanguageWithCookie = useCallback(() => {\n const savedLanguage = Cookies.get('wg');\n\n if (savedLanguage && savedLanguage !== currentLanguage) {\n switchLanguage(savedLanguage);\n }\n }, [currentLanguage, switchLanguage]);\n\n return {\n currentLanguage,\n currentLanguageLabel,\n isWeglotAvailable,\n languageOptions,\n languagePreference,\n switchLanguage,\n syncLanguageWithCookie\n };\n}\n","import { useMemo } from 'react';\nimport { useSearchParams as useSearchParamsReactRouterDom } from 'react-router-dom';\n\nexport const useSearchParams = () => {\n const [searchParams] = useSearchParamsReactRouterDom();\n\n return useMemo(\n () => (searchParams ? Object.fromEntries([...searchParams]) : {}),\n [searchParams]\n );\n};\n","import { isNativeMobile } from '@vestwell-frontend/helpers';\n\nimport { SecureStoragePlugin } from 'capacitor-secure-storage-plugin';\nimport { useCallback, useEffect, useState } from 'react';\n\nexport function useSecureStorage(\n key: string\n): [string | null, (value: string | null) => Promise<void>, boolean] {\n const [secureStorageValue, setSecureStorageValue] = useState<string | null>(\n null\n );\n const [isMobileApp, setIsMobileApp] = useState<boolean>(false);\n const [isLoading, setIsLoading] = useState<boolean>(true);\n\n const setSecureStorageValueInStorage = useCallback(\n async (value: string | null) => {\n try {\n await SecureStoragePlugin.set({ key, value });\n setSecureStorageValue(value);\n } catch (e) {\n console.warn('Failed to set secure storage value', e);\n }\n },\n [key]\n );\n\n const getSecureStorageValue = useCallback(async () => {\n if (!isMobileApp) return;\n try {\n const result = await SecureStoragePlugin.get({ key });\n setSecureStorageValue(result?.value || null);\n setIsLoading(false);\n } catch (e) {\n console.warn(`Failed to get secure storage value '${key}'`, e);\n setIsLoading(false);\n }\n }, [isMobileApp, key]);\n\n useEffect(() => {\n (async () => {\n const isNative = await isNativeMobile();\n setIsMobileApp(isNative);\n })();\n }, []);\n\n useEffect(() => {\n getSecureStorageValue();\n }, [getSecureStorageValue]);\n\n return [secureStorageValue, setSecureStorageValueInStorage, isLoading];\n}\n","import { SyntheticEvent, useCallback, useState } from 'react';\n\ntype UseToggleEvent =\n | SyntheticEvent\n | KeyboardEvent\n | boolean\n | any\n | ((prev: boolean) => boolean);\n\ntype UseToggleFn = (e?: UseToggleEvent) => void;\n\nexport function useToggle(initialValue?: boolean): [boolean, UseToggleFn] {\n const [state, setState] = useState(!!initialValue);\n\n const toggleState = useCallback((e?: UseToggleEvent) => {\n setState(\n typeof e === 'boolean' || typeof e === 'function' ? e : prev => !prev\n );\n }, []);\n\n return [state, toggleState];\n}\n","import {\n makeListBuilderSchema,\n validateAddress,\n validateEin,\n validatePhone,\n validateZip\n} from '@vestwell-frontend/helpers';\n\nimport { format, lastDayOfMonth } from 'date-fns';\nimport { useMemo } from 'react';\nimport * as yup from 'yup';\n\nconst lastDayOfFebruary = `2/${format(\n lastDayOfMonth(new Date(new Date().getFullYear(), 1, 1)),\n 'd'\n)}`;\n\nexport const fiscalYearEnds = [\n { label: '12/31', value: '12/31' },\n { label: '11/30', value: '11/30' },\n { label: '10/31', value: '10/31' },\n { label: '9/30', value: '9/30' },\n { label: '8/31', value: '8/31' },\n { label: '7/31', value: '7/31' },\n { label: '6/30', value: '6/30' },\n { label: '5/31', value: '5/31' },\n { label: '4/30', value: '4/30' },\n { label: '3/31', value: '3/31' },\n { label: lastDayOfFebruary, value: lastDayOfFebruary },\n { label: '1/31', value: '1/31' }\n];\n\nexport const useValidateOnboardingQuestionnaire = (args: {\n isMepTpa?: boolean;\n isStarter401kPlan?: boolean;\n isTpa?: boolean;\n planDesignConsultType?: string;\n}) => {\n return useMemo(\n () =>\n yup.object({\n authSignerFirstName: yup\n .string()\n .nullable()\n .required('First Name is required'),\n\n authSignerLastName: yup\n .string()\n .nullable()\n .required('Last Name is required'),\n\n authSignerWorkPhone: validatePhone('Invalid phone number')\n .nullable()\n .required('Phone is required'),\n\n authorizedSignerEmail: yup\n .string()\n .nullable()\n .email('Invalid email')\n .required('Email is required'),\n\n companyEntityType: yup\n .string()\n .nullable()\n .required('Company Entity Type is required'),\n\n companyName: yup\n .string()\n .nullable()\n .required('Company Legal Name is required'),\n\n companyPhoneNumber: validatePhone('Invalid phone number')\n .nullable()\n .required('Phone is required'),\n\n dayToDayContactEmail: yup\n .string()\n .nullable()\n .email('Invalid email')\n .required('Email is required'),\n\n dayToDayContactLastName: yup\n .string()\n .nullable()\n .required('Last Name is required'),\n\n dayToDayContactName: yup\n .string()\n .nullable()\n .required('First Name is required'),\n\n dayToDayContactNumber: validatePhone('Invalid phone number')\n .nullable()\n .required('Phone is required'),\n\n doingBusinessAs: yup.string().nullable(),\n\n employerIdentificationNumber: validateEin('Must be a valid EIN')\n .nullable()\n .required('EIN is required'),\n\n fiscalYearEnd: yup\n .string()\n .oneOf(fiscalYearEnds.map(({ value }) => value))\n .nullable()\n .required('Fiscal Year End is required'),\n\n ...(!args.isTpa &&\n !args.isStarter401kPlan && {\n $adoptionAgreementDoc: yup\n .array()\n .nullable()\n .test({\n test: function (value) {\n if (\n !value?.length &&\n this.parent.isConvert === 'true' &&\n !['SEP_IRA', 'SIMPLE_IRA'].includes(\n this.parent.existingPlanType\n )\n ) {\n return this.createError({\n message: 'Document is required',\n path: this.path\n });\n }\n\n return true;\n }\n }),\n\n // only used for internal questionnaire state\n $priorYear5500Doc: yup.array().nullable().optional(),\n\n anticipatedHires: yup\n .number()\n .nullable()\n .required('This field is required'),\n\n ...(args.planDesignConsultType !== 'Website Direct' && {\n contributionScenario: yup\n .string()\n .nullable()\n .when('isConvert', {\n is: v => v !== 'true',\n then: yup\n .string()\n .nullable()\n .required('This field is required')\n })\n }),\n\n currentComplianceIssues: yup\n .array()\n .of(\n yup\n .object({\n label: yup.string(),\n value: yup\n .string()\n .oneOf([\n 'missing_5500',\n 'late_deposits',\n 'missing_contributions',\n 'failed_testing',\n 'other'\n ])\n })\n .nullable()\n )\n .when('isConvert', {\n is: 'false',\n then: yup.array().nullable().optional()\n }),\n\n existingPlanProvider: yup\n .string()\n .nullable()\n .when('isConvert', {\n is: 'true',\n then: yup\n .string()\n .nullable()\n .required('Current Provider is required')\n }),\n\n existingPlanType: yup\n .string()\n .nullable()\n .when('isConvert', {\n is: 'true',\n then: yup\n .string()\n .oneOf([\n '401k',\n '403b',\n 'SIMPLE_IRA',\n 'SEP_IRA',\n 'defined_benefit',\n 'cash_balance',\n 'other'\n ])\n .nullable()\n .required('Plan Type is required')\n }),\n\n highlyCompensatedEmployees: yup\n .number()\n .nullable()\n .required('This field is required'),\n\n ...(args.planDesignConsultType !== 'Website Direct' && {\n industryGroup: yup\n .string()\n .nullable()\n .when('isConvert', {\n is: v => v !== 'true',\n then: yup\n .string()\n .nullable()\n .required('This field is required')\n })\n }),\n\n isConvert: yup\n .string()\n .oneOf(['true', 'false'])\n .nullable()\n .required('This field is required'),\n\n ownerEmployees: yup\n .number()\n .nullable()\n .required('This field is required'),\n\n ...(args.planDesignConsultType !== 'Website Direct' && {\n payrollProviderId: yup\n .string()\n .nullable()\n .required('Payroll Provider is required')\n }),\n\n payrollSystemOther: yup\n .string()\n .nullable()\n .when('payrollProviderId', {\n is: '6', // id for 'Other'\n then: yup\n .string()\n .nullable()\n .required('Payroll System is required')\n }),\n\n relativesOfOwnerEmployees: yup\n .number()\n .nullable()\n .required('This field is required'),\n\n ...(args.planDesignConsultType !== 'Website Direct' && {\n retirementObjectives: yup\n .string()\n .nullable()\n .when('isConvert', {\n is: v => v !== 'true',\n then: yup\n .string()\n .nullable()\n .required('This field is required')\n })\n })\n }),\n ...(!args.isMepTpa &&\n args.planDesignConsultType !== 'Website Direct' && {\n controlGroupBusinesses: yup.array().when('isPartOfControlGroup', {\n is: true,\n then: makeListBuilderSchema(\n yup\n .object({\n business: yup.string().required('Company Name is required'),\n ein: validateEin().required('EIN is required')\n })\n .required()\n )\n }),\n\n isPartOfControlGroup: yup\n .boolean()\n .nullable()\n .required('This field is required'),\n\n totalEmployeesNumber: yup\n .number()\n .nullable()\n .required('Number of employees is required')\n }),\n\n physicalAddress1: validateAddress()\n .nullable()\n .required('Physical Address is required'),\n\n physicalAddress2: yup.string().nullable(),\n\n physicalCity: yup.string().nullable().required('City is required'),\n\n physicalState: yup.string().nullable().required('State is required'),\n\n physicalZip: validateZip().nullable().required('Zip is required'),\n\n stateOfIncorporation: yup\n .string()\n .nullable()\n .required('State of Incorporation is required'),\n\n wiredAtWork: yup.boolean().nullable().required('This field is required')\n }),\n [\n args.isMepTpa,\n args.isStarter401kPlan,\n args.isTpa,\n args.planDesignConsultType\n ]\n );\n};\n","import { SessionDto, TokenResDto } from '@sentinel/hooks';\nimport {\n broadcastToApp,\n cleanUpStaleCookies,\n isEmbeddedBrowser,\n isNativeMobile,\n logout\n} from '@vestwell-frontend/helpers';\nimport { useSecureStorage } from '@vestwell-frontend/hooks';\n\nimport axios from 'axios';\nimport Cookies from 'js-cookie';\nimport { jwtDecode } from 'jwt-decode';\nimport {\n createContext,\n FC,\n ReactNode,\n useContext,\n useEffect,\n useMemo,\n useState\n} from 'react';\nimport { createStore, StoreApi, useStore } from 'zustand';\n\ntype Auth = {\n isNative: boolean;\n token: string;\n setToken: (token: TokenResDto | string) => void;\n updateToken: () => void;\n};\n\ntype AuthProviderProps = {\n children: ReactNode;\n};\n\nconst AuthContext = createContext<StoreApi<Auth>>(null);\n\nexport const useAuth = () => {\n const store = useContext(AuthContext);\n return useStore(store) as Auth;\n};\n\nexport const AuthProvider: FC<AuthProviderProps> = props => {\n const [mobileToken, setMobileToken] = useSecureStorage('token');\n const [mobileTokenExpiration, setMobileTokenExpiration] =\n useSecureStorage('tokenExpiration');\n const [, setWhitelabelSubdomain] = useSecureStorage('WHITELABEL_SUBDOMAIN');\n const [isEmbedded, setIsEmbedded] = useState(false);\n const [isNativeApp, setIsNativeApp] = useState(false);\n const [token, setAuthToken] = useState<string | null>();\n const [tokenExpiration, setAuthTokenExpiration] = useState<string | null>(\n null\n );\n const [isInitializing, setIsInitializing] = useState(true);\n const [isUpdatingToken, setIsUpdatingToken] = useState(false);\n\n const domain = useMemo(() => {\n return window.location.host.split('.').slice(-2).join('.');\n }, [window.location.host]);\n\n useEffect(() => {\n const fetchData = async () => {\n try {\n const embeddedResult = await isEmbeddedBrowser();\n const isNative = await isNativeMobile();\n\n setIsEmbedded(embeddedResult);\n setIsNativeApp(isNative);\n } catch (error) {\n console.error('Error checking environment:', error);\n }\n };\n fetchData();\n }, []);\n\n useEffect(() => {\n // This is in essence our react app first load handler\n if (isNativeApp && mobileToken && mobileTokenExpiration) {\n const tokenData = JSON.parse(mobileToken);\n const expiration = JSON.parse(mobileTokenExpiration);\n\n if (\n tokenData?.access_token &&\n tokenData?.token_type &&\n expiration?.expiration\n ) {\n setAuthToken(`${tokenData.token_type} ${tokenData.access_token}`);\n setAuthTokenExpiration(expiration.expiration);\n const decodedToken: SessionDto = jwtDecode(tokenData.access_token);\n if (decodedToken?.subDomain) {\n setWhitelabelSubdomain(decodedToken.subDomain);\n axios.defaults.headers.common['x-mobile-subdomain'] =\n decodedToken.subDomain;\n }\n axios.defaults.headers.common['Authorization'] =\n `${tokenData.token_type} ${tokenData.access_token}`;\n }\n setIsInitializing(false);\n } else {\n const isSameHost = Cookies.get('tokenHost') === window.location.host;\n const accessToken = isSameHost ? Cookies.get('token') : null;\n const isAuthorizationPage = window.location.pathname === '/authorization';\n setAuthToken(accessToken);\n setAuthTokenExpiration(\n isSameHost ? Cookies.get('tokenExpiration') : null\n );\n\n if (!isSameHost) {\n Cookies.set('tokenHost', window.location.host, {\n domain: `.${domain}`,\n expires: new Date(new Date().getTime() + 30 * 60 * 1000),\n path: '/'\n });\n }\n\n if (accessToken) {\n axios.defaults.headers.common['Authorization'] = accessToken;\n }\n\n // On desktop, if host changes or token expires, we lose our token.\n // This means we need to fetch a new one if we have a refresh token.\n // on the authorization page don't use the refresh token so we can use the code to get a new token\n if (!accessToken && !isAuthorizationPage && Cookies.get('refreshToken')) {\n // grab a new token which will set isInitializing to false when done\n authConfigStore.getState().updateToken();\n } else {\n // immediately set initialized since we don't need to fetch a refreshed token\n setIsInitializing(false);\n }\n }\n }, [domain, isNativeApp, mobileToken, mobileTokenExpiration]);\n\n const authConfigStore = createStore<Auth>()(() => ({\n isNative: isNativeApp,\n setToken: token => {\n if (!token) {\n cleanUpStaleCookies();\n return;\n }\n\n // Set token expiration to 13 minutes (to be safe, real expiration is 15 minutes)\n const expirationTime = new Date(new Date().getTime() + 13 * 60 * 1000);\n\n if (\n typeof token !== 'string' &&\n token?.token_type &&\n token?.access_token\n ) {\n if (isNativeApp) {\n setMobileToken(JSON.stringify(token));\n setMobileTokenExpiration(\n JSON.stringify({ expiration: expirationTime.toISOString() })\n );\n const decodedToken: SessionDto = jwtDecode(token.access_token);\n if (decodedToken?.subDomain) {\n setWhitelabelSubdomain(decodedToken.subDomain);\n axios.defaults.headers.common['x-mobile-subdomain'] =\n decodedToken.subDomain;\n }\n }\n\n if (isEmbedded) {\n broadcastToApp('JWT', {\n ...token,\n expirationTime: expirationTime.toISOString()\n });\n }\n }\n\n const accessToken =\n typeof token !== 'string' && token?.token_type && token?.access_token\n ? `${token.token_type} ${token.access_token}`\n : // password case\n typeof token === 'string'\n ? token\n : null;\n\n const refreshToken =\n typeof token !== 'string' ? token?.refresh_token : null;\n\n setAuthToken(accessToken);\n setAuthTokenExpiration(expirationTime.toISOString());\n Cookies.set('token', accessToken, {\n domain: `${window.location.host}`,\n expires: expirationTime,\n path: '/'\n });\n Cookies.set('tokenExpiration', expirationTime, {\n domain: `${window.location.host}`,\n expires: expirationTime,\n path: '/'\n });\n Cookies.set('refreshToken', refreshToken, {\n domain: `.${domain}`,\n expires: new Date(new Date().getTime() + 30 * 60 * 1000),\n path: '/'\n });\n\n axios.defaults.headers.common['Authorization'] = accessToken;\n\n // broadcast token change event\n const tokenChangeEvent = new CustomEvent('tokenChange');\n window.dispatchEvent(tokenChangeEvent);\n\n setIsInitializing(false);\n },\n token,\n tokenExpiration,\n updateToken: async () => {\n try {\n setIsUpdatingToken(true);\n let refreshToken;\n if (isNativeApp) {\n const tokenData = JSON.parse(mobileToken);\n refreshToken = tokenData.refresh_token;\n } else {\n refreshToken = Cookies.get('refreshToken');\n }\n\n const result = await axios.post('/auth/api/v1/oidc/token', {\n grant_type: 'refresh_token',\n refresh_token: refreshToken\n });\n\n authConfigStore.getState().setToken(result.data);\n setIsUpdatingToken(false);\n } catch (error) {\n setIsUpdatingToken(false);\n console.error('Failed to refresh token', error);\n await logout(true);\n }\n }\n }));\n\n useEffect(() => {\n if ((!token && !tokenExpiration) || isUpdatingToken) {\n // If there's no token or already fetching a token, don't start the interval\n return;\n }\n\n const checkTokenExpiration = () => {\n const expirationTime = new Date(tokenExpiration || null).valueOf();\n const currentTime = new Date().valueOf();\n\n if (expirationTime < currentTime) {\n authConfigStore.getState().updateToken();\n }\n };\n\n //checks on page refresh\n checkTokenExpiration();\n\n const interval = setInterval(() => {\n checkTokenExpiration();\n }, 1000 * 60); // Check every minute\n\n return () => clearInterval(interval);\n }, [token, tokenExpiration, isNativeApp, isUpdatingToken]);\n\n return (\n <AuthContext.Provider value={authConfigStore}>\n {isInitializing ? <></> : props.children}\n </AuthContext.Provider>\n );\n};\n","import { useGetWhiteLabelUnauthorized } from '@portal-middleware/hooks';\n\nimport { FC, useEffect } from 'react';\n\nexport const Favicon: FC = () => {\n const whitelabel = useGetWhiteLabelUnauthorized();\n\n useEffect(() => {\n if (!whitelabel.data?.metadata?.favicon) {\n return;\n }\n\n let link: HTMLLinkElement = document.querySelector('link#favicon');\n\n if (!link) {\n link = document.createElement('link');\n link.id = 'favicon';\n link.type = 'image/x-icon';\n link.rel = 'icon';\n document.getElementsByTagName('head')[0].appendChild(link);\n }\n\n link.href = whitelabel.data?.metadata?.favicon;\n }, [whitelabel.data]);\n\n useEffect(() => {\n if (!['jpmorgan'].includes(whitelabel.data?.subdomain)) {\n return;\n }\n\n let link: HTMLLinkElement = document.querySelector('link#apple-touch-icon');\n\n if (!link) {\n link = document.createElement('link');\n link.id = 'apple-touch-icon';\n link.rel = 'apple-touch-icon';\n document.getElementsByTagName('head')[0].appendChild(link);\n }\n\n link.href = `/images/touch-icons/${whitelabel.data?.subdomain}-180x180.png`;\n }, [whitelabel.data]);\n\n return null;\n};\n\nFavicon.displayName = 'Favicon';\n","import { SecureStoragePlugin } from 'capacitor-secure-storage-plugin';\n\nexport const setMobileHeaders = async axios => {\n // This value is set by webpack.config.ts in mobile-app\n const baseUrl = await SecureStoragePlugin.get({ key: 'BASE_API_URL' });\n const whitelabelSubdomain = await SecureStoragePlugin.get({\n key: 'WHITELABEL_SUBDOMAIN'\n });\n const baseUAPIUrl = await SecureStoragePlugin.get({ key: 'BASE_UAPI_URL' });\n if (baseUAPIUrl?.value) {\n // @ts-expect-error in the off chance window.process isn't defined, we only care about adding env to it\n window.process = window.process || {};\n window.process.env = window.process.env || {};\n window.process.env.VW_UNIFIED_API_URL = baseUAPIUrl.value;\n }\n\n axios.defaults.baseURL = baseUrl?.value;\n axios.defaults.headers.common['x-mobile-subdomain'] =\n whitelabelSubdomain?.value;\n return axios;\n};\n","let callCount = 0;\nexport const setEmbeddedHeaders = axios => {\n // This event is fired by the core app upon creating an embedded browser\n const handleDeviceInfo = event => {\n const deviceInfo = event.detail;\n const deviceHeader = `${deviceInfo.model}::${deviceInfo.platform}::${deviceInfo.osVersion}`;\n axios.defaults.headers.common['x-vw-mobile-device'] = deviceHeader;\n window.removeEventListener('vw_device_info', handleDeviceInfo, false);\n };\n if (callCount === 0) {\n window.addEventListener('vw_device_info', handleDeviceInfo);\n callCount++;\n }\n};\n","import { App } from '@capacitor/app';\nimport { Capacitor } from '@capacitor/core';\nimport { SplashScreen } from '@capacitor/splash-screen';\n\nimport { isNativeMobile } from './isNativeMobile';\n\nexport const initializeSplashScreen = async (): Promise<void> => {\n const isNative = await isNativeMobile();\n\n if (isNative && Capacitor.isPluginAvailable('SplashScreen')) {\n try {\n await SplashScreen.show({\n autoHide: true\n });\n App.addListener('appStateChange', async ({ isActive }) => {\n if (isActive) {\n await SplashScreen.hide();\n } else {\n await SplashScreen.show();\n }\n });\n } catch (error) {\n console.error('Error managing splash screen:', error);\n }\n }\n};\n","import {\n createTheme,\n inputClasses,\n Theme,\n ThemeOptions,\n ThemeProvider\n} from '@mui/material';\nimport merge from '@mui/system/merge';\nimport { useGetWhiteLabelUnauthorized } from '@portal-middleware/hooks';\n\nimport { FC, memo, ReactNode, useMemo } from 'react';\n\nimport { VestwellPalette } from './global';\n\nexport type MaterialThemeProviderProps = {\n children: ReactNode;\n isWhitelabeled?: boolean;\n themeOverrides?: Partial<Theme>;\n};\n\nexport const palette: VestwellPalette = {\n alert: {\n contrastText: '#FFFFFF',\n dark: '#D46E29',\n light: '#FFAD73',\n main: '#F58645'\n },\n aliceBlue: {\n contrastText: '#0D0400',\n dark: '#C4DDE8',\n light: '#FFFFFF',\n main: '#F2FBFF'\n },\n apple: {\n contrastText: '#FFFFFF',\n dark: '#C56767',\n light: '#F5ADAD',\n main: '#E68888'\n },\n ash: {\n contrastText: '#FFFFFF',\n dark: '#B8BEC8',\n light: '#F1F3F6',\n main: '#DBE0E7'\n },\n azureishWhite: {\n contrastText: '#241007',\n dark: '#A8C9E0',\n light: '#F2FBFF',\n main: '#DBEFF8'\n },\n black: {\n contrastText: '#FFFFFF',\n dark: '#000000',\n light: '#333333',\n main: '#000000' // no darker variant than black\n },\n blister: {\n contrastText: '#FFFFFF',\n dark: '#B58A00',\n light: '#F2CE4F',\n main: '#DEB304'\n },\n bloodOrange: {\n contrastText: '#FFFFFF',\n dark: '#C2510D',\n light: '#FF9050',\n main: '#EC6517'\n },\n blueIvy: {\n contrastText: '#FFFFFF',\n dark: '#1F75A1',\n light: '#65B3E0',\n main: '#3092CB'\n },\n blueSapphire: {\n contrastText: '#FFFFFF',\n dark: '#06405B',\n light: '#3578A6',\n main: '#0B5A80'\n },\n brandyButter: {\n contrastText: '#FFFFFF',\n dark: '#C78A61',\n light: '#F9D2B7',\n main: '#F4B98F'\n },\n cherry: {\n contrastText: '#FFFFFF',\n dark: '#991F34',\n light: '#E46A80',\n main: '#C52C48'\n },\n cornflowerBlue: {\n contrastText: '#FFFFFF',\n dark: '#5D49C7',\n light: '#A18FF8',\n main: '#7D62EC'\n },\n darkBlue: {\n contrastText: '#FFFFFF',\n dark: '#0B2444',\n light: '#446294',\n main: '#123561'\n },\n darkGold: {\n contrastText: '#FFFFFF',\n dark: '#5E4F14',\n light: '#A5964C',\n main: '#7C6A20'\n },\n denim: {\n contrastText: '#FFFFFF',\n dark: '#206F98',\n light: '#5DAEDF',\n main: '#2C8FC5'\n },\n dijon: {\n contrastText: '#FFFFFF',\n dark: '#B79D2A',\n light: '#EBD27C',\n main: '#DDC04A'\n },\n disabled: {\n contrastText: '#000000',\n dark: '#6E6E6E',\n light: '#BFBFBF',\n main: '#959595'\n },\n emphasize: {\n contrastText: '#FFFFFF',\n dark: '#012332',\n light: '#266A82',\n main: '#033952'\n },\n error: {\n contrastText: '#FFFFFF',\n dark: '#8B071E',\n light: '#D8425A',\n main: '#C00A2B'\n },\n ghostWhite: {\n contrastText: '#241007',\n dark: '#C8DBE3',\n light: '#FFFFFF',\n main: '#F5FBFF'\n },\n grannyApple: {\n contrastText: '#0D0400',\n dark: '#A3BDB7',\n light: '#D9F3E0',\n main: '#C8E6C9'\n },\n grey100: {\n contrastText: '#FFFFFF',\n dark: '#3A3A3A',\n light: '#7A7A7A',\n main: '#4F4F4F'\n },\n grey200: {\n contrastText: '#FFFFFF',\n dark: '#4E4E4E',\n light: '#8C8C8C',\n main: '#6B6B6B'\n },\n grey300: {\n contrastText: '#FFFFFF',\n dark: '#525252',\n light: '#A0A0A0',\n main: '#737373'\n },\n grey400: {\n contrastText: '#FFFFFF',\n dark: '#676767',\n light: '#B5B5B5',\n main: '#919191'\n },\n grey50: {\n contrastText: '#FFFFFF',\n dark: '#1A1A1A',\n light: '#565656',\n main: '#333333'\n },\n grey500: {\n contrastText: '#000000',\n dark: '#999999',\n light: '#E0E0E0',\n main: '#BDBDBD'\n },\n grey600: {\n contrastText: '#000000',\n dark: '#BDBDBD',\n light: '#F2F2F2',\n main: '#E0E0E0'\n },\n grey700: {\n contrastText: '#000000',\n dark: '#E0E0E0',\n light: '#FFFFFF',\n main: '#F2F2F2'\n },\n grey800: {\n contrastText: '#000000',\n dark: '#E2E2E2',\n light: '#FFFFFF',\n main: '#F5F5F5'\n },\n grey900: {\n contrastText: '#000000',\n dark: '#EDEDED',\n light: '#FFFFFF',\n main: '#FAFAFA'\n },\n imgPlaceholder: {\n contrastText: '#000000',\n dark: '#D9D9D9',\n light: '#FFFFFF',\n main: '#F5F5F5'\n },\n info: {\n contrastText: '#FFFFFF',\n dark: '#07537B',\n light: '#5BA2D3',\n main: '#0C78AB'\n },\n interact: {\n contrastText: '#FFFFFF',\n dark: '#005E90',\n light: '#4CA5CF',\n main: '#0679af'\n },\n khaki: {\n contrastText: '#000000',\n dark: '#B1AC97',\n light: '#E9E6DB',\n main: '#D9D4C1'\n },\n lightBlue: {\n contrastText: '#FFFFFF',\n dark: '#5193BA',\n light: '#A2D2F4',\n main: '#77B8E6'\n },\n lightGold: {\n contrastText: '#FFFFFF',\n dark: '#C3A954',\n light: '#F5E29C',\n main: '#E8D377'\n },\n lightKhaki: {\n contrastText: '#000000',\n dark: '#E0DED6',\n light: '#FFFFFF',\n main: '#F4F2ED'\n },\n lightestGray: {\n contrastText: '#FFFFFF',\n dark: '#6E6E6E',\n light: '#BFBFBF',\n main: '#959595'\n },\n limeGreen: {\n contrastText: '#FFFFFF',\n dark: '#207614',\n light: '#5FB14E',\n main: '#2CA01C'\n },\n mahogany: {\n contrastText: '#FFFFFF',\n dark: '#8E3100',\n light: '#D66029',\n main: '#B64200'\n },\n malibu: {\n contrastText: '#FFFFFF',\n dark: '#48A1D7',\n light: '#A0DEFF',\n main: '#72C6FE'\n },\n mediumBlue: {\n contrastText: '#FFFFFF',\n dark: '#265480',\n light: '#639AC6',\n main: '#3574A7'\n },\n mediumGold: {\n contrastText: '#FFFFFF',\n dark: '#988835',\n light: '#DEC778',\n main: '#C3AD4D'\n },\n metallicBlue: {\n contrastText: '#FFFFFF',\n dark: '#133847',\n light: '#4D7C95',\n main: '#1F5670'\n },\n mint: {\n contrastText: '#FFFFFF',\n dark: '#5AB399',\n light: '#B4F3DE',\n main: '#88E6C4'\n },\n muck: {\n contrastText: '#FFFFFF',\n dark: '#0A3E2B',\n light: '#3A8066',\n main: '#105B41'\n },\n niceBlue: {\n contrastText: '#FFFFFF',\n dark: '#04587F',\n light: '#46A6D4',\n main: '#0678AC'\n },\n oceanGreen: {\n contrastText: '#FFFFFF',\n dark: '#28A475',\n light: '#70E5B9',\n main: '#39CC97'\n },\n onPayBlue: {\n contrastText: '#FFFFFF',\n dark: '#0C78AB',\n light: '#5BA2D3',\n main: '#054296'\n },\n oxfordBlue: {\n contrastText: '#FFFFFF',\n dark: '#012535',\n light: '#305E75',\n main: '#033952'\n },\n page: {\n contrastText: '#000000',\n dark: '#E0E0E0',\n light: '#FFFFFF',\n main: '#FAFAFA'\n },\n paleSalmon: {\n contrastText: '#FFFFFF',\n dark: '#D89366',\n light: '#F7CEAE',\n main: '#F4B98F'\n },\n pictonBlue: {\n contrastText: '#FFFFFF',\n dark: '#3A87B5',\n light: '#77C4F0',\n main: '#53ACE3'\n },\n pine: {\n contrastText: '#FFFFFF',\n dark: '#2EB083',\n light: '#71E7C0',\n main: '#45DCA6'\n },\n placeholder: {\n contrastText: '#FFFFFF',\n dark: '#515151',\n light: '#8A8A8A',\n main: '#6B6B6B'\n },\n plantation: {\n contrastText: '#FFFFFF',\n dark: '#1D4135',\n light: '#4D7A6B',\n main: '#285849'\n },\n primary: {\n contrastText: '#FFFFFF',\n dark: '#005E90',\n light: '#3394C6',\n main: '#0679AF'\n },\n regalBlue: {\n contrastText: '#FFFFFF',\n dark: '#002C50',\n light: '#276691',\n main: '#004574'\n },\n ruby: {\n contrastText: '#FFFFFF',\n dark: '#F03456',\n light: '#F5768E',\n main: '#F2526F'\n },\n seasick: {\n contrastText: '#000000',\n dark: '#AEDFCC',\n light: '#F1FCF5',\n main: '#DEF9EA'\n },\n secondary: {\n contrastText: '#FFFFFF',\n dark: '#116743',\n light: '#46A07F',\n main: '#19855F'\n },\n sky: {\n contrastText: '#FFFFFF',\n dark: '#66A6D0',\n light: '#A6DBF1',\n main: '#88CAE6'\n },\n slate: {\n contrastText: '#FFFFFF',\n dark: '#526679',\n light: '#92A2B2',\n main: '#6F889C'\n },\n spinach: {\n contrastText: '#FFFFFF',\n dark: '#116743',\n light: '#46A07F',\n main: '#19855F'\n },\n success: {\n contrastText: '#FFFFFF',\n dark: '#06603F',\n light: '#3CA574',\n main: '#098056'\n },\n vividBurgundy: {\n contrastText: '#FFFFFF',\n dark: '#6E0F20',\n light: '#B54156',\n main: '#9A142C'\n },\n warning: {\n contrastText: '#FFFFFF',\n dark: '#993600',\n light: '#E07233',\n main: '#CB4A00'\n },\n water: {\n contrastText: '#1F5670',\n dark: '#A5D7E8',\n light: '#F1FAFF',\n main: '#DCF1FA'\n },\n wheat: {\n contrastText: '#FFFFFF',\n dark: '#C7B377',\n light: '#F2E6B0',\n main: '#EEDD93'\n },\n white: {\n contrastText: '#000000',\n dark: '#F0F0F0',\n light: '#FFFFFF',\n main: '#FFFFFF'\n },\n wintersDay: {\n contrastText: '#0D0400',\n dark: '#BEDDE8',\n light: '#F0FAFF',\n main: '#DFF4FF'\n }\n};\n\nexport const theme = createTheme({\n components: {\n MuiAccordionSummary: {\n styleOverrides: {\n content: {\n '&.Mui-expanded': {\n margin: 0\n },\n margin: 0\n }\n }\n },\n MuiAlert: {\n defaultProps: {\n 'data-component': 'alert'\n },\n styleOverrides: {\n message: {\n '& a': {\n color: palette.black.main,\n textDecoration: 'underline'\n },\n '& button.MuiButton-inline': {\n color: palette.black.main,\n textDecoration: 'underline'\n }\n },\n root: {\n borderRadius: '7px',\n color: palette.grey50.main,\n fontSize: '0.875rem',\n lineHeight: 1.5,\n marginTop: '1rem',\n padding: '1rem auto',\n //the same as navbar\n zIndex: 120\n }\n }\n },\n MuiAutocomplete: {\n defaultProps: {\n 'data-component': 'autocomplete'\n },\n styleOverrides: {\n input: ({ theme }) => ({\n padding: theme.spacing(1, 2)\n })\n }\n },\n MuiAvatar: {\n defaultProps: {\n 'data-component': 'avatar'\n }\n },\n MuiBottomNavigation: {\n styleOverrides: {\n root: {\n boxShadow: '0 0 #0000, 0 0 #0000, 0px 0px 10px #72727226',\n height: 64\n }\n }\n },\n MuiBottomNavigationAction: {\n defaultProps: {\n focusRipple: false\n },\n styleOverrides: {\n root: {\n color: palette.black.main,\n height: '4rem',\n maxWidth: 'unset',\n minWidth: 'unset',\n padding: 0\n }\n }\n },\n MuiButton: {\n defaultProps: {\n disableFocusRipple: true\n },\n styleOverrides: {\n contained: {\n boxShadow: 'none',\n fontSize: '0.875rem',\n fontWeight: 700,\n lineHeight: '1.5',\n paddingLeft: '1rem',\n paddingRight: '1rem'\n },\n inline: {\n '&:hover': {\n backgroundColor: 'transparent'\n },\n fontWeight: 700,\n lineHeight: 'inherit',\n minWidth: 0,\n padding: 0,\n width: 'fit-content'\n },\n outlined: ({ ownerState, theme }) => ({\n border: `1px solid ${\n theme.palette[ownerState.color]?.main || theme.palette.primary.main\n }`,\n fontSize: '0.875rem',\n fontWeight: 700,\n lineHeight: '1.5',\n paddingLeft: '1rem',\n paddingRight: '1rem'\n }),\n root: ({ ownerState, theme }) => ({\n '& .MuiCircularProgress-root': {\n color: theme.palette.primary.main\n },\n '&.Mui-disabled': {\n backgroundColor: palette.grey700.main,\n borderColor: palette.grey600.main,\n color: palette.grey300.main\n },\n '&:focus-visible': {\n outline: `1px solid ${\n theme.palette[ownerState.color]?.main ||\n theme.palette.primary.main\n }`,\n outlineOffset: '2px'\n },\n borderRadius: '0.375rem',\n borderWidth: 1,\n fontSize: '0.875rem',\n fontWeight: 700,\n lineHeight: '1.5',\n marginBottom: 0,\n textTransform: 'unset'\n }),\n text: {\n fontWeight: 700,\n lineHeight: '1.5',\n paddingLeft: '1rem',\n paddingRight: '1rem'\n }\n }\n },\n MuiButtonBase: {\n defaultProps: {\n 'data-component': 'buttonBase'\n },\n styleOverrides: {\n root: {\n '&.MuiAccordionSummary-root.Mui-expanded': {\n minHeight: '48px'\n }\n }\n }\n },\n MuiButtonGroup: {\n defaultProps: {\n disableFocusRipple: true\n }\n },\n MuiCard: {\n defaultProps: {\n 'data-component': 'card'\n },\n styleOverrides: {\n root: {\n borderRadius: '0.5rem',\n padding: '16px'\n }\n }\n },\n MuiCardContent: {\n defaultProps: {\n 'data-component': 'cardContent'\n },\n styleOverrides: {\n root: {\n '&:last-child': {\n paddingBottom: 0\n },\n padding: 0\n }\n }\n },\n MuiCardHeader: {\n defaultProps: {\n 'data-component': 'cardHeader'\n },\n styleOverrides: {\n root: {\n paddingLeft: 0,\n paddingRight: 0,\n paddingTop: 0\n }\n }\n },\n MuiCheckbox: {\n defaultProps: {\n disableFocusRipple: true\n },\n styleOverrides: {\n root: ({ ownerState, theme }) => ({\n '&.Mui-focusVisible': {\n outline: `1px solid ${\n theme.palette[ownerState.color]?.main ||\n theme.palette.primary.main\n }`,\n outlineOffset: '2px'\n },\n borderRadius: '5px',\n margin: '0 9px',\n padding: 0\n })\n }\n },\n MuiCssBaseline: {\n styleOverrides: theme => ({\n '.bg-primary': {\n backgroundColor: theme.palette.primary.main\n },\n '.border-primary': {\n borderColor: theme.palette.primary.main\n },\n //TODO: return to it once Form is refactored\n '.contents': {\n display: 'contents'\n },\n '.list-disc': {\n listStyleType: 'disc'\n },\n '.list-inside': {\n listStylePosition: 'inside'\n },\n '.list-outside': {\n listStylePosition: 'outside'\n },\n '.sr-only': {\n borderWidth: 0,\n clip: 'rect(0, 0, 0, 0)',\n height: '1px',\n margin: '-1px',\n overflow: 'hidden',\n padding: 0,\n position: 'absolute',\n whiteSpace: 'nowrap',\n width: '1px'\n },\n '.text-primary': {\n color: theme.palette.primary.main\n },\n 'a:focus-visible': {\n borderRadius: '5px',\n outline: `1px solid ${theme.palette.primary.main}`,\n outlineOffset: '2px'\n },\n 'a:not(.MuiButtonBase-root)': {\n fontWeight: 700\n }\n })\n },\n MuiDataGrid: {\n defaultProps: {\n 'data-component': 'dataGrid'\n },\n styleOverrides: {\n cell: ({ theme }) => ({\n '&[aria-invalid=\"true\"].MuiDataGrid-cell--editing:focus-within': {\n outline: 'none'\n },\n '&[aria-invalid=\"true\"].MuiDataGrid-withBorderColor': {\n // todo:: find a way to better blend this into the palette\n backgroundColor: '#FEF8FF',\n border: `solid ${theme.palette.error.main} 1px`,\n outline: 'none'\n }\n }),\n editInputCell: ({ theme }) => ({\n '& input': {\n color: theme.palette.primary.main,\n fontSize: 'initial',\n padding: theme.spacing(0, 1)\n },\n height: '100%',\n margin: 0\n }),\n overlayWrapperInner: {\n display: 'flex',\n flexDirection: 'column'\n },\n root: ({ theme }) => ({\n '& .MuiDataGrid-cell': {\n alignItems: 'center',\n display: 'flex',\n fontSize: '1rem',\n lineHeight: 1.43,\n padding: '0.25rem'\n },\n '& .MuiDataGrid-cell--editable': {\n cursor: 'cell'\n },\n '& .MuiDataGrid-cell--editable > input': {\n padding: '0.25rem !important'\n },\n '& .MuiDataGrid-cell--textRight.MuiDataGrid-cell--editable > input': {\n textAlign: 'right'\n },\n '& .MuiDataGrid-columnHeader': {\n color: theme.palette.grey50.main,\n fontSize: '0.6875rem',\n fontWeight: 800,\n letterSpacing: '0.07em',\n lineHeight: 1.5,\n padding: '0 0.25rem',\n textTransform: 'uppercase'\n },\n '& .MuiDataGrid-columnHeader .MuiDataGrid-iconButtonContainer': {\n visibility: 'visible',\n width: 'auto'\n },\n '& .MuiDataGrid-columnHeader--alignRight': {\n textAlign: 'right'\n },\n '& .MuiDataGrid-columnHeader:not(.MuiDataGrid-columnHeader--sorted) .MuiDataGrid-sortIcon':\n {\n opacity: '1 !important'\n },\n '& .MuiDataGrid-columnHeaderTitle': {\n fontWeight: 800\n },\n '& .MuiDataGrid-columnHeaders': {\n height: '100%'\n },\n '& .MuiDataGrid-columnHeadersInner': {\n alignItems: 'center',\n height: 'inherit'\n },\n '& .MuiDataGrid-columnSeparator': {\n display: 'none'\n },\n '& .MuiDataGrid-container--top [role=row]': {\n backgroundColor: 'inherit'\n },\n '& .MuiDataGrid-row:hover': {\n backgroundColor: theme.palette.ghostWhite.main\n },\n '& .MuiIconButton-root': {\n color: theme.palette.grey300.main\n },\n '& .MuiIconButton-root:hover': {\n backgroundColor: 'transparent',\n color: theme.palette.primary.main\n },\n '& .MuiTablePagination-displayedRows': {\n color: theme.palette.grey100.main,\n fontSize: '1rem',\n marginBottom: 0\n },\n '& .MuiTablePagination-selectLabel': {\n color: theme.palette.grey100.main,\n fontSize: '1rem',\n marginBottom: 0\n },\n '&.MuiDataGrid-row--editing': {\n boxShadow: 'none'\n },\n border: 0,\n color: theme.palette.grey100.main\n })\n }\n },\n MuiIconButton: {\n defaultProps: {\n disableFocusRipple: true\n },\n styleOverrides: {\n root: ({ ownerState, theme }) => ({\n '&:focus-visible': {\n outline: `1px solid ${\n theme.palette[ownerState.color]?.main ||\n theme.palette.primary.main\n }`,\n outlineOffset: '2px'\n }\n }),\n sizeSmall: {\n '& > svg': {\n height: '0.75em',\n width: '0.75em'\n },\n height: '0.75em',\n width: '0.75em'\n }\n }\n },\n MuiInput: {\n styleOverrides: {\n input: {\n textAlign: 'inherit'\n },\n root: ({ ownerState, theme }) => ({\n '& input::placeholder': {\n color: theme.palette.grey300.main,\n opacity: 1\n },\n '&:after': {\n borderBottom: 0\n },\n '&:before': {\n borderBottom: `1px dashed ${\n ownerState['data-no-focus-style']\n ? 'transparent !important'\n : theme.palette[ownerState.disabled ? 'grey600' : 'grey300']\n .main\n }`\n },\n [`label+&.${inputClasses.root}`]: {\n marginTop: 0\n },\n [`&:hover:not(.${inputClasses.disabled}, .${inputClasses.error}, .${inputClasses.focused}):before`]:\n {\n borderBottom: ownerState['data-no-focus-style']\n ? `1px dashed transparent !important`\n : `1px dashed ${theme.palette.primary.main}`\n },\n [`&.${inputClasses.focused}:hover:before`]: {\n borderBottom: 0\n },\n [`&.${inputClasses.focused}`]: {\n outline: ownerState['data-no-focus-style']\n ? 'none'\n : `1px solid ${theme.palette.primary.main}`\n },\n [`&.${inputClasses.focused}:before`]: {\n borderBottom: 0\n },\n [`&.${inputClasses.focused}:after`]: {\n borderBottom: 0\n },\n backgroundColor:\n theme.palette[ownerState.disabled ? 'grey800' : 'white'].main,\n borderRadius: theme.spacing(0.5),\n color:\n theme.palette[ownerState.disabled ? 'grey400' : 'primary'].main,\n marginBottom: 0,\n padding: theme.spacing(1, 2)\n })\n }\n },\n MuiInputLabel: {\n styleOverrides: {\n root: {\n color: palette.grey100.main,\n fontWeight: 700,\n marginBottom: 0,\n position: 'relative',\n transform: 'none',\n whiteSpace: 'inherit',\n zIndex: 0\n }\n }\n },\n MuiList: {\n defaultProps: {\n 'data-component': 'list'\n }\n },\n MuiListItem: {\n defaultProps: {\n 'data-component': 'listItem'\n }\n },\n MuiListItemButton: {\n defaultProps: {\n 'data-component': 'listItemButton'\n }\n },\n MuiListSubheader: {\n defaultProps: {\n 'data-component': 'listSubheader'\n }\n },\n MuiMenuItem: {\n styleOverrides: {\n root: ({ theme }) => ({\n '&.Mui-selected': {\n '&:focus': {\n backgroundColor: theme.palette.grey900.main\n },\n '&:hover': {\n backgroundColor: theme.palette.grey900.main\n },\n backgroundColor: theme.palette.white.main,\n color: theme.palette.primary.main,\n fontWeight: 700\n },\n '&:focus': {\n backgroundColor: theme.palette.grey900.main,\n borderLeft: `4px solid ${theme.palette.primary.main}`\n },\n '&:hover': {\n backgroundColor: theme.palette.grey900.main\n },\n backgroundColor: theme.palette.white.main,\n borderBottomColor: theme.palette.grey600.main,\n borderBottomStyle: 'dashed',\n borderBottomWidth: 1,\n borderLeft: '4px solid transparent',\n color: theme.palette.grey100.main,\n fontSize: '1rem',\n fontWeight: 400,\n lineHeight: '1.5',\n margin: 0,\n outline: 'none',\n padding: 8,\n userSelect: 'none'\n })\n }\n },\n MuiModal: {\n defaultProps: {\n 'data-component': 'modal'\n }\n },\n MuiPaper: {\n defaultProps: {\n 'data-component': 'paper'\n },\n styleOverrides: {\n elevation0: ({ theme }) => ({\n '&.MuiCard-root': {\n border: `${theme.spacing(0.25)} solid ${theme.palette.grey600.main}`\n }\n }),\n // todo:: temporary workaround until we can get a valid shadow list from ux\n elevation1: ({ theme }) => ({\n '&.MuiCard-root': {\n boxShadow: theme.shadows[24]\n }\n })\n }\n },\n MuiPopper: {\n defaultProps: {\n 'data-component': 'popper'\n }\n },\n MuiRadio: {\n defaultProps: {\n disableFocusRipple: true\n },\n styleOverrides: {\n root: ({ ownerState, theme }) => ({\n '&.Mui-focusVisible': {\n outline: `1px solid ${\n theme.palette[ownerState.color]?.main ||\n theme.palette.primary.main\n }`,\n outlineOffset: '2px'\n },\n padding: 0\n })\n }\n },\n MuiSkeleton: {\n defaultProps: {\n 'data-component': 'skeleton'\n }\n },\n MuiSvgIcon: {\n styleOverrides: {\n fontSizeLarge: {\n height: '1.2em',\n width: '1.2em'\n },\n fontSizeSmall: {\n height: '0.85em',\n width: '0.85em'\n }\n }\n },\n MuiTableCell: {\n styleOverrides: {\n head: ({ theme }) => ({\n color: theme.palette.grey50.main,\n fontSize: '0.6875rem',\n fontWeight: 800,\n letterSpacing: '0.07em',\n lineHeight: 1.5,\n textTransform: 'uppercase'\n }),\n root: {\n '&[role=\"rowheader\"]': {\n fontWeight: 600\n },\n ':first-of-type': {\n paddingLeft: '0.25rem'\n },\n ':last-of-type': {\n paddingRight: '0.25rem'\n },\n fontSize: '1rem',\n padding: '0.6875rem'\n }\n }\n },\n MuiTableRow: {\n styleOverrides: {\n root: {\n ':last-child:not(.MuiTableRow-head) .MuiTableCell-root': {\n borderBottom: '1px solid transparent'\n }\n }\n }\n },\n MuiToggleButton: {\n styleOverrides: {\n root: {\n fontSize: '0.875rem',\n fontWeight: 500,\n lineHeight: '1.5',\n padding: '0.5rem 0.25rem',\n width: '3rem'\n }\n }\n },\n MuiToolbar: {\n defaultProps: {\n 'data-component': 'toolbar'\n },\n styleOverrides: {\n root: ({ theme }) => ({\n '& .MuiTablePagination-actions': {\n color: theme.palette.grey100.main,\n fontSize: '1rem',\n marginBottom: 0\n },\n '& .MuiTablePagination-displayedRows': {\n color: theme.palette.grey100.main,\n fontSize: '1rem',\n marginBottom: 0\n },\n '& .MuiTablePagination-selectLabel': {\n color: theme.palette.grey100.main,\n fontSize: '1rem',\n marginBottom: 0\n }\n })\n }\n },\n MuiTooltip: {\n styleOverrides: {\n arrow: {\n '&::before': {\n boxShadow: '0 2px 8px rgba(0, 0, 0, 0.25)'\n },\n color: palette.white.main\n },\n tooltip: {\n backgroundColor: palette.white.main,\n boxShadow: '0 2px 8px rgba(0, 0, 0, 0.25)',\n color: palette.grey300.main,\n fontSize: '0.875rem',\n fontWeight: 400,\n padding: '0.75rem'\n }\n }\n },\n MuiTypography: {\n defaultProps: {\n 'data-component': 'text'\n }\n },\n Navbar: {\n styleOverrides: {\n desktop: {\n selected: 'rgb(250,250,250)',\n unselected: 'rgb(242,242,242)'\n },\n mobile: {\n selected: '#153850FF',\n unselected: 'rgb(250,250,250)'\n }\n }\n }\n },\n palette,\n shadows: [\n 'none',\n '0px 2px 1px -1px rgba(114, 114, 114, 0.15),0px 1px 1px 0px rgba(114, 114, 114, 0.15),0px 1px 3px 0px rgba(114, 114, 114, 0.15)',\n '0px 3px 3px -2px rgba(114, 114, 114, 0.15),0px 3px 4px 0px rgba(114, 114, 114, 0.15),0px 1px 8px 0px rgba(114, 114, 114, 0.15)',\n '0px 3px 1px -2px rgba(114, 114, 114, 0.15),0px 2px 2px 0px rgba(114, 114, 114, 0.15),0px 1px 5px 0px rgba(114, 114, 114, 0.15)',\n '0px 2px 4px -1px rgba(114, 114, 114, 0.15),0px 4px 5px 0px rgba(114, 114, 114, 0.15),0px 1px 10px 0px rgba(114, 114, 114, 0.15)',\n '0px 3px 5px -1px rgba(114, 114, 114, 0.15),0px 5px 8px 0px rgba(114, 114, 114, 0.15),0px 1px 14px 0px rgba(114, 114, 114, 0.15)',\n '0px 3px 5px -1px rgba(114, 114, 114, 0.15),0px 6px 10px 0px rgba(114, 114, 114, 0.15),0px 1px 18px 0px rgba(114, 114, 114, 0.15)',\n '0px 4px 5px -2px rgba(114, 114, 114, 0.15),0px 7px 10px 1px rgba(114, 114, 114, 0.15),0px 2px 16px 1px rgba(114, 114, 114, 0.15)',\n '0px 5px 5px -3px rgba(114, 114, 114, 0.15),0px 8px 10px 1px rgba(114, 114, 114, 0.15),0px 3px 14px 2px rgba(114, 114, 114, 0.15)',\n '0px 5px 6px -3px rgba(114, 114, 114, 0.15),0px 9px 12px 1px rgba(114, 114, 114, 0.15),0px 3px 16px 2px rgba(114, 114, 114, 0.15)',\n '0px 6px 6px -3px rgba(114, 114, 114, 0.15),0px 10px 14px 1px rgba(114, 114, 114, 0.15),0px 4px 18px 3px rgba(114, 114, 114, 0.15)',\n '0px 6px 7px -4px rgba(114, 114, 114, 0.15),0px 11px 15px 1px rgba(114, 114, 114, 0.15),0px 4px 20px 3px rgba(114, 114, 114, 0.15)',\n '0px 7px 8px -4px rgba(114, 114, 114, 0.15),0px 12px 17px 2px rgba(114, 114, 114, 0.15),0px 5px 22px 4px rgba(114, 114, 114, 0.15)',\n '0px 7px 8px -4px rgba(114, 114, 114, 0.15),0px 13px 19px 2px rgba(114, 114, 114, 0.15),0px 5px 24px 4px rgba(114, 114, 114, 0.15)',\n '0px 7px 9px -4px rgba(114, 114, 114, 0.15),0px 14px 21px 2px rgba(114, 114, 114, 0.15),0px 5px 26px 4px rgba(114, 114, 114, 0.15)',\n '0px 8px 9px -5px rgba(114, 114, 114, 0.15),0px 15px 22px 2px rgba(114, 114, 114, 0.15),0px 6px 28px 5px rgba(114, 114, 114, 0.15)',\n '0px 8px 10px -5px rgba(114, 114, 114, 0.15),0px 16px 24px 2px rgba(114, 114, 114, 0.15),0px 6px 30px 5px rgba(114, 114, 114, 0.15)',\n '0px 8px 11px -5px rgba(114, 114, 114, 0.15),0px 17px 26px 2px rgba(114, 114, 114, 0.15),0px 6px 32px 5px rgba(114, 114, 114, 0.15)',\n '0px 9px 11px -5px rgba(114, 114, 114, 0.15),0px 18px 28px 2px rgba(114, 114, 114, 0.15),0px 7px 34px 6px rgba(114, 114, 114, 0.15)',\n '0px 9px 12px -6px rgba(114, 114, 114, 0.15),0px 19px 29px 2px rgba(114, 114, 114, 0.15),0px 7px 36px 6px rgba(114, 114, 114, 0.15)',\n '0px 10px 13px -6px rgba(114, 114, 114, 0.15),0px 20px 31px 3px rgba(114, 114, 114, 0.15),0px 8px 38px 7px rgba(114, 114, 114, 0.15)',\n '0px 10px 13px -6px rgba(114, 114, 114, 0.15),0px 21px 33px 3px rgba(114, 114, 114, 0.15),0px 8px 40px 7px rgba(114, 114, 114, 0.15)',\n '0px 10px 14px -6px rgba(114, 114, 114, 0.15),0px 22px 35px 3px rgba(114, 114, 114, 0.15),0px 8px 42px 7px rgba(114, 114, 114, 0.15)',\n '0px 11px 14px -7px rgba(114, 114, 114, 0.15),0px 23px 36px 3px rgba(114, 114, 114, 0.15),0px 9px 44px 8px rgba(114, 114, 114, 0.15)',\n '0 1px 3px #00000026' // shadow which is in use for all cards\n ],\n spacing: 4,\n typography: {\n a1: {\n fontSize: '3rem',\n fontWeight: 300,\n lineHeight: 1.2\n },\n a2: {\n fontSize: '3rem',\n fontWeight: 400,\n lineHeight: 1.2\n },\n allVariants: {\n marginBottom: '1rem'\n },\n b1: {\n fontSize: '2.5rem',\n fontWeight: 300,\n letterSpacing: '0.025rem',\n lineHeight: 1.15\n },\n b2: {\n fontSize: '2.5rem',\n fontWeight: 600,\n letterSpacing: '0.025rem',\n lineHeight: 1.15\n },\n c1: {\n fontSize: '2.0625rem',\n fontWeight: 400,\n letterSpacing: '0.02063rem',\n lineHeight: 1.15\n },\n c2: {\n fontSize: '2.0625rem',\n fontWeight: 600,\n letterSpacing: '0.02063rem',\n lineHeight: 1.15\n },\n d1: {\n fontSize: '1.6875rem',\n fontWeight: 400,\n letterSpacing: '0.01688rem',\n lineHeight: 1.15\n },\n d2: {\n fontSize: '1.6875rem',\n fontWeight: 700,\n letterSpacing: '0.01688rem',\n lineHeight: 1.15\n },\n e1: {\n fontSize: '1.5rem',\n fontWeight: 400,\n letterSpacing: '0.015rem',\n lineHeight: 1.25\n },\n e2: {\n fontSize: '1.5rem',\n fontWeight: 700,\n letterSpacing: '0.015rem',\n lineHeight: 1.25\n },\n f1: {\n fontSize: '1.1875rem',\n fontWeight: 400,\n letterSpacing: '0.01188rem',\n lineHeight: 1.4\n },\n f2: {\n fontSize: '1.1875rem',\n fontWeight: 700,\n letterSpacing: '0.01188rem',\n lineHeight: 1.4\n },\n fontFamily: [\n 'Nunito Sans',\n 'ui-sans-serif',\n 'system-ui',\n '-apple-system',\n 'BlinkMacSystemFont',\n 'Segoe UI',\n 'Roboto',\n 'Helvetica Neue',\n 'Arial',\n 'Noto Sans,sans-serif',\n 'Apple Color Emoji',\n 'Segoe UI Emoji',\n 'Segoe UI Symbol',\n 'Noto Color Emoji'\n ].join(','),\n fontSize: 13,\n g1: {\n fontSize: '1rem',\n fontWeight: 400,\n letterSpacing: '0.01rem',\n lineHeight: 1.36\n },\n g2: {\n fontSize: '1rem',\n fontWeight: 700,\n letterSpacing: '0.0075rem',\n lineHeight: 1.36\n },\n htmlFontSize: 13,\n i1: {\n fontFamily: 'Nunito Sans',\n fontSize: '0.875rem',\n fontWeight: 400,\n letterSpacing: '0.00875rem',\n lineHeight: 1.4\n },\n i2: {\n fontFamily: 'Nunito Sans',\n fontSize: '0.875rem',\n fontWeight: 700,\n letterSpacing: '0.00875rem',\n lineHeight: 1.4\n },\n j1: {\n fontFamily: 'Nunito Sans',\n fontSize: '0.75rem',\n fontWeight: 600,\n letterSpacing: '0.0075rem',\n lineHeight: 1.4\n },\n j2: {\n fontFamily: 'Nunito Sans',\n fontSize: '0.75rem',\n fontWeight: 700,\n letterSpacing: '0.015rem',\n lineHeight: 1.4\n },\n k3: {\n fontSize: '0.6875rem',\n fontWeight: 800,\n letterSpacing: '0.055rem',\n lineHeight: 1.45,\n textTransform: 'uppercase'\n }\n }\n} as ThemeOptions);\n\nexport const MaterialThemeProvider: FC<MaterialThemeProviderProps> = memo(\n ({ themeOverrides = {}, ...props }) => {\n const whitelabel = useGetWhiteLabelUnauthorized({\n query: {\n enabled: !!props.isWhitelabeled,\n keepPreviousData: true,\n useErrorBoundary: false\n }\n });\n\n const muiTheme = useMemo(\n () => ({\n ...merge(\n theme,\n !!props.isWhitelabeled && whitelabel.data?.theme\n ? whitelabel.data?.theme\n : themeOverrides\n )\n }),\n [whitelabel.data?.theme, props.isWhitelabeled, themeOverrides]\n );\n\n return <ThemeProvider theme={muiTheme}>{props.children}</ThemeProvider>;\n }\n);\n\nMaterialThemeProvider.displayName = 'MaterialThemeProvider';\n","import { StyledEngineProvider } from '@mui/material';\nimport { MaterialThemeProvider } from '@vestwell-frontend/style';\n\nimport { FC, memo, ReactNode } from 'react';\n\nexport type ThemeProviderProps = {\n isWhitelabeled?: boolean;\n children: ReactNode;\n};\n\nexport const ThemeProvider: FC<ThemeProviderProps> = memo(props => {\n return (\n <StyledEngineProvider injectFirst>\n <MaterialThemeProvider isWhitelabeled={props.isWhitelabeled}>\n {props.children}\n </MaterialThemeProvider>\n </StyledEngineProvider>\n );\n});\n\nThemeProvider.displayName = 'ThemeProvider';\n","import { CircularProgress, Stack, StackProps } from '@mui/material';\n\nimport { FC } from 'react';\n\nexport type LoaderProps = {\n 'data-testid'?: string;\n position?: StackProps['position'];\n};\n\nexport const Loader: FC<LoaderProps> = props => (\n <Stack\n alignItems='center'\n aria-busy\n bottom={0}\n data-component='Loader'\n data-testid={props['data-testid']}\n justifyContent='center'\n left={0}\n position={props.position || 'absolute'}\n right={0}\n top={0}>\n <CircularProgress />\n </Stack>\n);\n\nLoader.displayName = 'Loader';\n","import { createContext } from 'react';\n\nexport type PageContextValue = {\n hasMainSiblings: boolean;\n};\n\nexport const PageContext = createContext<PageContextValue>(null);\n","import { styled } from '@mui/material';\n\nimport { FC, ReactNode } from 'react';\n\nexport type PageFooterProps = {\n /** Rendered within bar */\n children?: ReactNode;\n /** Style for container */\n className?: string;\n /** Containing element to render in DOM */\n role?: string;\n sticky?: boolean;\n};\n\nconst StylePageFooter = styled('div', {\n shouldForwardProp: prop => prop !== 'sticky'\n})<{ sticky?: boolean }>(({ theme, sticky }) => ({\n display: 'flex',\n flexDirection: 'row',\n paddingBottom: theme.spacing(4),\n paddingRight: theme.spacing(4),\n paddingTop: theme.spacing(4),\n width: '100%',\n ...(sticky\n ? {\n backgroundColor: theme.palette.white.main,\n bottom: 0,\n boxShadow: '1px -3px 5px #72727226',\n marginLeft: theme.spacing(-12),\n marginRight: theme.spacing(-12),\n paddingLeft: theme.spacing(12),\n paddingRight: theme.spacing(12),\n position: 'sticky',\n width: 'unset',\n [theme.breakpoints.down('lg')]: {\n marginLeft: theme.spacing(-10),\n marginRight: theme.spacing(-10),\n paddingLeft: theme.spacing(10)\n },\n [theme.breakpoints.down('sm')]: {\n marginLeft: theme.spacing(-4),\n marginRight: theme.spacing(-4),\n paddingLeft: theme.spacing(4)\n }\n }\n : {\n gridArea: 'pageFooter'\n })\n}));\n\nexport const PageFooter: FC<PageFooterProps> = props => {\n return (\n <StylePageFooter {...props} data-component='pageFooter'>\n {props.children}\n </StylePageFooter>\n );\n};\n\nPageFooter.displayName = 'PageFooter';\n","import {\n CircularProgress,\n ExtendButtonBase,\n Button as MuiButton,\n ButtonProps as MuiButtonProps,\n styled\n} from '@mui/material';\nimport { ButtonTypeMap } from '@mui/material/Button/Button';\nimport { useCamelCase } from '@vestwell-frontend/hooks';\n\nimport {\n forwardRef,\n ForwardRefExoticComponent,\n HTMLAttributeAnchorTarget,\n RefAttributes\n} from 'react';\nimport * as React from 'react';\nimport { Link, LinkProps } from 'react-router-dom';\n\nexport type ButtonProps = MuiButtonProps<\n ExtendButtonBase<ButtonTypeMap>,\n {\n 'data-component'?: string;\n 'data-testid'?: string;\n loading?: boolean;\n target?: HTMLAttributeAnchorTarget | undefined;\n to?: string;\n external?: boolean;\n }\n>;\n\nconst StyledButton = styled(MuiButton, {\n shouldForwardProp: prop => prop !== 'loading'\n})<\n ButtonProps & {\n component?: ForwardRefExoticComponent<\n LinkProps & RefAttributes<HTMLAnchorElement>\n >;\n }\n>(({ color, ...props }) => ({\n backgroundColor: props.loading\n ? props.theme.palette.grey700.main\n : props.disabled && props.variant === 'inline'\n ? 'transparent'\n : undefined,\n color: props.loading\n ? 'transparent !important'\n : props.variant === 'inline'\n ? props.theme.palette[color ?? 'primary'].main\n : undefined\n}));\n\nconst LoadingIndicator = styled(CircularProgress, {\n shouldForwardProp: prop => prop !== 'loading'\n})(props => ({\n color: props.theme.palette.action.disabled,\n position: 'absolute'\n}));\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\n ({ color = 'primary', variant = 'contained', ...props }, ref) => {\n const dataTestId = useCamelCase(\n typeof props.children === 'string' ? props.children : ''\n );\n\n return (\n <StyledButton\n {...props}\n color={color}\n component={props.to ? Link : undefined}\n data-component={props['data-component'] || 'button'}\n data-disabled={!!props.disabled || !!props.loading}\n data-testid={props['data-testid'] || dataTestId}\n disabled={!!props.disabled || !!props.loading}\n ref={ref}\n target={\n props.external || (props.to && props.to.includes(':'))\n ? '_blank'\n : undefined\n }\n to={props.to}\n variant={variant}>\n {!!props.loading && <LoadingIndicator color='inherit' size={16} />}\n {props.children}\n </StyledButton>\n );\n }\n);\n\nButton.displayName = 'Button';\n","import { createSvgIcon, SvgIconProps } from '@mui/material';\n\nimport { FC } from 'react';\n\nexport const ExceptionIcon: FC<SvgIconProps> = createSvgIcon(\n <svg viewBox='0 0 127 128'>\n <path\n d='M9.61352 18.6494C8.31439 19.9511 8.31439 21.7737 9.61352 23.0755C10.9127 24.3772 12.7315 24.3772 14.0306 23.0755C36.1159 0.944975 71.9721 0.944975 94.0574 23.0755C102.372 31.4069 107.049 42.8627 107.049 54.5788C107.049 66.5553 102.372 77.7507 94.0574 86.0822C87.3019 92.8515 78.7276 96.4966 69.3738 96.4966C60.02 96.4966 51.1859 92.8515 44.6902 86.0822C39.4937 80.875 36.6356 74.1057 36.6356 66.5553C36.6356 59.2653 39.4937 52.2356 44.6902 47.0284C45.9893 45.7266 45.9893 43.9041 44.6902 42.6023C43.3911 41.3005 41.5723 41.3005 40.2731 42.6023C27.0219 55.8806 27.0219 77.23 40.2731 90.2479C48.068 98.0587 58.461 102.485 69.6336 102.485C80.8062 102.485 90.9394 98.0587 98.9941 90.2479C108.608 80.6147 113.804 67.8571 113.804 54.0581C113.804 40.2591 108.608 27.5015 98.9941 17.8683C74.0507 -6.08471 34.0373 -6.08471 9.61352 18.6494z'\n fill='currentColor'\n role='presentation'\n />\n <path\n d='M71.7123 19.1701C71.7123 17.3476 70.1533 15.7855 68.3346 15.7855C66.5158 15.7855 64.9568 17.3476 64.9568 19.1701C64.9568 20.9926 66.5158 22.5548 68.3346 22.5548C70.1533 22.5548 71.7123 20.9926 71.7123 19.1701z'\n fill='currentColor'\n role='presentation'\n />\n <path\n d='M7.01533 27.7618C7.01533 25.9393 5.45637 24.3772 3.63758 24.3772C1.81879 24.3772 0 25.9393 0 27.7618C0 29.8447 1.55896 31.4069 3.37775 31.4069C5.19654 31.4069 7.01533 29.8447 7.01533 27.7618z'\n fill='currentColor'\n role='presentation'\n />\n <path\n d='M7.01538 36.0933C8.83417 36.0933 10.3931 37.6555 10.3931 39.478C10.3931 41.5608 8.83417 43.123 7.01538 42.8626C5.19659 42.8626 3.63763 41.3005 3.63763 39.478C3.63763 37.6555 5.19659 36.0933 7.01538 36.0933z'\n fill='currentColor'\n role='presentation'\n />\n <path\n d='M119.52 88.6859C117.702 88.6859 116.143 90.248 116.143 92.0705C116.143 93.893 117.702 95.4552 119.52 95.4552C121.339 95.4552 122.898 93.893 122.898 92.0705C122.898 90.248 121.339 88.6859 119.52 88.6859z'\n fill='currentColor'\n role='presentation'\n />\n <path\n d='M120.56 63.6914C120.56 61.8689 122.119 60.3067 123.938 60.3067C125.756 60.3067 127.315 61.8689 127.315 63.6914C127.315 65.5139 125.756 67.0761 123.938 67.0761C122.119 67.0761 120.56 65.5139 120.56 63.6914z'\n fill='currentColor'\n role='presentation'\n />\n <path\n d='M49.3672 106.651C49.3672 104.828 47.8082 103.266 45.9895 103.266C44.1707 103.266 42.6117 104.828 42.6117 106.651C42.6117 108.473 44.1707 110.035 45.9895 110.035C47.8082 110.035 49.3672 108.473 49.3672 106.651z'\n fill='currentColor'\n role='presentation'\n />\n <path\n d='M68.0746 121.231C83.1446 121.231 97.4351 115.242 108.088 104.568C109.127 103.266 110.686 103.787 111.985 105.088C113.285 106.39 113.285 108.213 111.985 109.515C100.033 121.491 84.4437 128 67.555 128C50.6662 128 35.0766 121.491 23.1245 109.515C13.5109 99.8813 8.31438 87.1237 8.31438 73.3247C8.31438 59.5257 13.5109 46.7681 23.1245 37.1349C31.1792 29.3241 41.3124 24.898 52.485 24.898C63.6576 24.898 74.0507 29.3241 81.8455 37.1349C95.0967 50.1528 95.0967 71.5022 81.8455 84.7805C80.5463 86.0823 78.7275 86.0823 77.4284 84.7805C76.1293 83.4787 76.1293 81.6562 77.4284 80.3544C88.0813 69.6797 88.0813 52.2357 77.4284 41.561C70.9327 34.7916 62.0986 31.1466 52.7448 31.1466C43.391 31.1466 34.8168 34.7916 28.0612 41.561C19.7468 49.8924 15.0699 61.0878 15.0699 73.0643C15.0699 84.7805 19.7468 96.2362 28.0612 104.568C38.7142 115.242 53.0047 121.231 68.0746 121.231z'\n fill='currentColor'\n role='presentation'\n />\n <path\n clipRule='evenodd'\n d='M42.8715 63.1707C42.8715 52.7564 51.186 44.4249 61.579 44.4249C71.7123 44.4249 80.2866 52.7564 80.2866 63.1707C80.2866 73.5851 71.9721 81.9165 61.579 81.9165C51.186 81.9165 42.8715 73.5851 42.8715 63.1707zM49.1073 63.4311C49.1073 70.2004 54.8235 75.9283 61.579 75.9283C68.3346 75.9283 74.0508 70.2004 74.0508 63.4311C74.0508 56.6618 68.3346 50.9339 61.579 50.9339C54.8235 50.9339 49.1073 56.6618 49.1073 63.4311z'\n fill='currentColor'\n fillRule='evenodd'\n role='presentation'\n />\n </svg>,\n 'ExceptionIcon'\n);\n\nExceptionIcon.displayName = 'ExceptionIcon';\n","import { PaletteColor, styled, useTheme } from '@mui/material';\nimport { useDownload } from '@vestwell-frontend/hooks';\n\nimport { Children, cloneElement, forwardRef } from 'react';\nimport {\n Link as RouterLink,\n LinkProps as RouterLinkProps\n} from 'react-router-dom';\n\nimport { TextProps } from './Text';\n\nfunction injectLinkedProp(children) {\n if (\n Children.count(children) > 1 ||\n !children.type ||\n children.type.name !== 'Card'\n ) {\n return children;\n }\n return cloneElement(children, { isLinked: true });\n}\n\nexport type LinkProps = Omit<RouterLinkProps, 'to'> & {\n 'data-component'?: string;\n 'data-testid'?: string;\n external?: boolean;\n isSecureDownload?: boolean;\n to?: string;\n variant?: TextProps['variant'];\n};\n\nconst LinkStyled = styled(RouterLink)(props => ({\n color: (props.theme.palette[props.color] as PaletteColor)?.main\n}));\n\nconst AnchorStyled = styled('a')(props => ({\n color: (props.theme.palette[props.color] as PaletteColor)?.main\n}));\n\nAnchorStyled.displayName = 'AnchorStyled';\n\nexport const Link = forwardRef<any, LinkProps>(\n (\n {\n external,\n isSecureDownload,\n to,\n children,\n color = 'primary',\n variant,\n ...props\n },\n ref\n ) => {\n const theme = useTheme();\n const isExternal = external || (to && to.includes(':'));\n const target = isExternal ? '_blank' : undefined; // external + URL schemes\n\n const download = useDownload(to || '');\n\n if (isExternal || !to) {\n return (\n <AnchorStyled\n {...props}\n color={color}\n data-component={props['data-component'] || 'link'}\n href={isSecureDownload ? '#' : to}\n onClick={isSecureDownload ? download : props.onClick}\n ref={ref}\n sx={theme.typography[variant]}\n target={target}>\n {children}\n </AnchorStyled>\n );\n }\n\n const linkedChildren = injectLinkedProp(children);\n\n return (\n <LinkStyled\n {...props}\n color={color}\n data-component={props['data-component'] || 'link'}\n onClick={isSecureDownload ? download : props.onClick}\n ref={ref}\n sx={theme.typography[variant]}\n target={target}\n to={isSecureDownload ? '#' : to}>\n {linkedChildren}\n </LinkStyled>\n );\n }\n);\n\nLink.displayName = 'Link';\n","import isPropValid from '@emotion/is-prop-valid';\nimport {\n Palette,\n PaletteColor,\n Skeleton,\n SkeletonProps,\n styled\n} from '@mui/material';\n\nimport { FC, useId } from 'react';\n\nimport { useIsAnimationActive } from '../helpers';\nimport { TextProps } from './Text';\n\nexport type LoadingProps = Omit<SkeletonProps, 'variant'> & {\n 'aria-labelledby'?: string;\n 'data-testid'?: string;\n backgroundColor?: keyof Palette;\n className?: string;\n variant?: TextProps['variant'];\n};\n\nconst LoadingStyled = styled(Skeleton, {\n shouldForwardProp: isPropValid\n})<LoadingProps>(({ backgroundColor, height, theme, width, ...props }) => {\n const variantStyles = {\n a1: {\n borderRadius: '0.437rem',\n width: '6rem'\n },\n a2: {\n borderRadius: '0.625rem',\n width: '7rem'\n },\n b1: {\n borderRadius: '0.437rem',\n width: '6rem'\n },\n b2: {\n borderRadius: '0.625rem',\n width: '7rem'\n },\n c1: {\n borderRadius: '0.437rem',\n width: '6rem'\n },\n c2: {\n borderRadius: '0.625rem',\n width: '12rem'\n },\n d1: {\n borderRadius: '0.437rem',\n width: '6rem'\n },\n d2: {\n borderRadius: '0.437rem',\n width: '12rem'\n },\n e1: {\n borderRadius: '0.437rem',\n width: '6rem'\n },\n e2: {\n borderRadius: '0.437rem',\n width: '12rem'\n },\n f1: {\n borderRadius: '0.437rem',\n width: '6rem'\n },\n f2: {\n borderRadius: '0.3125rem',\n width: '7rem'\n },\n g1: {\n borderRadius: '0.437rem',\n width: '6rem'\n },\n g2: {\n borderRadius: '0.437rem',\n width: '6rem'\n },\n i1: {\n borderRadius: '0.3125rem',\n width: '6rem'\n },\n i2: {\n borderRadius: '0.3125rem',\n width: '6rem'\n },\n j1: {\n borderRadius: '0.3125rem',\n width: '6rem'\n },\n j2: {\n borderRadius: '0.3125rem',\n width: '6rem'\n },\n k3: {\n borderRadius: '0.437rem',\n width: '7rem'\n }\n }[props['data-variant']] || {\n borderRadius: '0.3125rem',\n width: '100%'\n };\n\n return {\n backgroundColor: backgroundColor\n ? (theme.palette[backgroundColor] as PaletteColor)?.main\n : undefined,\n borderRadius: variantStyles.borderRadius,\n display: 'inline-block',\n maxWidth: '100%',\n width: variantStyles.width\n };\n});\n\nexport const Loading: FC<LoadingProps> = ({ variant, ...props }) => {\n const isAnimationActive = useIsAnimationActive();\n\n const labelId = useId();\n\n return (\n <LoadingStyled\n {...props}\n animation={isAnimationActive ? undefined : false}\n aria-busy\n aria-labelledby={props['aria-labelledby'] || labelId}\n aria-valuetext='Loading'\n data-variant={variant}\n data-wg-notranslate\n role='progressbar'>\n <> </>\n <span className='sr-only' id={labelId} role='presentation'>\n Loading\n </span>\n </LoadingStyled>\n );\n};\n\nLoading.displayName = 'Loading';\n","import isChromatic from 'chromatic/isChromatic';\nimport { useMemo } from 'react';\n\nexport const useIsAnimationActive = () =>\n useMemo(() => {\n return !isChromatic();\n }, []);\n","import {\n Palette,\n PaletteColor,\n styled,\n Typography,\n TypographyProps\n} from '@mui/material';\n\nimport { AriaAttributes, FC, ReactNode } from 'react';\n\nimport { Loading } from './Loading';\n\nconst htmlTag = {\n a1: 'span',\n a2: 'h1',\n b1: 'span',\n b2: 'h1',\n c1: 'span',\n c2: 'h2',\n d1: 'span',\n d2: 'h2',\n e1: 'span',\n e2: 'h2',\n f1: 'span',\n f2: 'h3',\n g1: 'p',\n g2: 'span',\n i1: 'p',\n i2: 'span',\n j1: 'span',\n j2: 'p',\n k3: 'span'\n};\n\nexport type TextProps = {\n backgroundColor?: keyof Palette;\n className?: string;\n color?: keyof Palette;\n component?: ReactNode;\n id?: string;\n isLoading?: boolean;\n role?: string;\n tabIndex?: number;\n} & TypographyProps &\n AriaAttributes;\n\nconst TextContainer = styled(Typography, {\n shouldForwardProp: propName => propName !== 'isLoading'\n})<TextProps>(props => {\n return {\n backgroundColor:\n (props.theme.palette[props.backgroundColor] as PaletteColor)?.main ||\n props.theme.palette[props.bgcolor as string]?.main,\n color: props.theme.palette[props.color as string]?.main\n };\n});\n\nTextContainer.displayName = 'TextContainer';\n\nexport const Text: FC<TextProps> = ({\n maxWidth = '45rem',\n mb = 4,\n variant = 'g1',\n ...props\n}) => {\n return (\n <TextContainer\n component={props.component || htmlTag[variant]}\n data-component='text'\n data-variant={variant}\n maxWidth={maxWidth}\n mb={mb}\n variant={variant}\n {...props}\n aria-label={props.isLoading ? 'Loading' : props['aria-label']}>\n {props.isLoading ? <Loading variant={variant} /> : props.children}\n </TextContainer>\n );\n};\n\nText.displayName = 'Text';\n","import { Box, styled, useMediaQuery } from '@mui/material';\nimport { useQueryClient } from '@tanstack/react-query';\n\nimport { ElementType, FC, ReactNode } from 'react';\n\nimport { Button } from './Button';\nimport { ExceptionIcon } from './icon';\nimport { Link } from './Link';\nimport { Text } from './Text';\n\nexport const numericCodes = {\n BAD_REQUEST: 'VW0018',\n DOCUMENT_NOT_FOUND: 'VW0004',\n EMAIL_SEND: 'VW0017',\n ENCRYPT: 'VW0009',\n FORBIDDEN: 'VW0019',\n INVALID_ARG: 'VW0013',\n INVALID_ENV_VAR: 'VW0014',\n INVALID_RESPONSE: 'VW0020',\n INVALID_TOKEN: 'VW0015',\n MISSING_CONTEXT: 'VW0006',\n MISSING_COOKIE: 'VW0016',\n MISSING_ENV_VAR: 'VW0008',\n MISSING_PARAMETER: 'VW0005',\n MISSING_RELATIONSHIP: 'VW0007',\n NOT_FOUND: 'VW0003',\n PARTICIPANT_REGISTRATION_ADDRESS_VERIFY: 'VW0103',\n PARTICIPANT_REGISTRATION_COMPANY_VERIFY: 'VW0104',\n // preserve sub-100 range for general errors\n PARTICIPANT_REGISTRATION_EXISTS: 'VW0100',\n PARTICIPANT_REGISTRATION_LOCKOUT: 'VW0105',\n PARTICIPANT_REGISTRATION_NO_MATCH: 'VW0101',\n PARTICIPANT_REGISTRATION_PARTIAL_MATCH: 'VW0102',\n PARTICIPANT_REGISTRATION_USER_EXISTS: 'VW0106',\n SPONSOR_REGISTRATION_EXISTS: 'VW0108',\n SPONSOR_REGISTRATION_LOCKOUT: 'VW0107',\n SPONSOR_REGISTRATION_NO_MATCH: 'VW0109',\n SPONSOR_REGISTRATION_PARTIAL_MATCH: 'VW0110',\n SPONSOR_REGISTRATION_USER_EXISTS: 'VW0111',\n TOKEN_DECRYPT: 'VW0010',\n TOKEN_EXPIRED: 'VW0011',\n TOKEN_VERIFY: 'VW0012',\n UNAUTHORIZED: 'VW0002',\n UNKNOWN_EXCEPTION: 'VW0001'\n};\n\nexport type ErrorProps = {\n children?: ReactNode;\n /** Numeric error code */\n code?: string;\n /** ID on details DOM element */\n descriptionId?: string;\n /** Text to use for details */\n details?: ReactNode;\n icon?: ElementType;\n /** ID on title DOM element */\n labelId?: string;\n /** Override component name */\n name?: string;\n /** Support email address to show on error messaging. */\n supportEmail?: string;\n showRefreshButton?: boolean;\n /** Text to use for title */\n title?: ReactNode;\n};\n\nconst StyledExceptionIcon = styled(ExceptionIcon)(({ theme }) => ({\n color: theme.palette.dijon.main,\n height: theme.spacing(32),\n marginBottom: theme.spacing(4),\n width: theme.spacing(32)\n}));\n\nconst StyledLink = styled(Link)(({ theme }) => ({\n display: 'inline-block',\n marginTop: theme.spacing(8)\n}));\n\nexport const Error: FC<ErrorProps> = ({\n icon = StyledExceptionIcon,\n name = 'Error',\n ...props\n}) => {\n const isMobile = useMediaQuery(theme => theme.breakpoints.down('sm'));\n\n const queryClient = useQueryClient();\n\n const Icon = icon;\n\n return (\n <Box\n data-component={name}\n padding={8}\n role='presentation'\n textAlign='center'>\n <Icon color='dijon' />\n {props.title && (\n <Text\n color='black'\n component='h1'\n data-testid={`${name}__title`}\n id={props.labelId}\n marginX='auto'\n mt={isMobile ? 8 : 12}\n variant={isMobile ? 'e2' : 'b2'}>\n {props.title}\n </Text>\n )}\n {props.details && (\n <Text\n color='grey100'\n component='div'\n data-testid={`${name}__details`}\n id={props.descriptionId}\n marginX='auto'\n mb={isMobile ? 16 : undefined}\n mt={isMobile ? 8 : 6}\n textAlign={isMobile ? 'left' : undefined}>\n {props.details}\n </Text>\n )}\n {props.supportEmail && (\n <StyledLink\n data-testid='Error__supportEmail'\n to={`mailto:${props.supportEmail}`}>\n {props.supportEmail}\n </StyledLink>\n )}\n {props.children && (\n <Box data-testid='Error__children' mt={10}>\n {props.children}\n </Box>\n )}\n {props.code && (\n <Text\n color='grey300'\n component='code'\n data-testid='Error_code'\n display='block'\n mt={6}\n variant='i1'>\n Error Code: {numericCodes[props.code] || 'UNKNOWN_EXCEPTION'}\n </Text>\n )}\n {props.showRefreshButton && (\n <Button onClick={() => queryClient.resetQueries()}>Refresh</Button>\n )}\n </Box>\n );\n};\n\nError.displayName = 'Error';\n","import { createSvgIcon, SvgIconProps } from '@mui/material';\n\nimport { FC } from 'react';\n\nexport const Error404Icon: FC<SvgIconProps> = createSvgIcon(\n <svg viewBox='0 0 128 128'>\n <g fill='none'>\n <path\n clipRule='evenodd'\n d='M90.391 18.5469V63.7388L105.498 123.82C105.758 124.865 105.498 125.91 104.977 126.694C104.196 127.478 103.414 128 102.372 128H26.5768H25.7954H25.5349C25.2744 128 25.014 128 24.7535 127.478C24.7535 127.216 24.493 127.216 24.493 127.216L24.2326 126.955L23.9721 126.694L23.7117 126.433C23.4512 126.171 23.1907 125.649 23.1907 125.388V124.343V124.082L38.5582 63.4775V18.2857V18.0245V17.502C38.5582 17.502 38.8187 17.2408 38.8187 16.9796V16.7184L48.9769 1.56735C49.4978 0.522449 50.5396 0 51.5815 0H76.8467C77.8886 0 78.9305 0.522449 79.9723 1.82857L90.1305 16.9796V17.2408C90.1305 17.2408 90.391 17.502 90.391 17.7633V18.2857V18.5469zM75.2839 6.53061H53.4048L47.6745 15.151H81.0142L75.2839 6.53061zM83.8793 21.6816H44.8094V60.8653H83.8793V21.6816zM76.3258 67.3959H44.028L37.7768 93.2571L76.3258 67.3959zM84.9212 69.4857L35.1722 102.661L31.5256 117.551L87.5258 80.1959L84.9212 69.4857zM89.3491 86.7265L37.2559 121.731H55.749L91.9538 97.4367L89.3491 86.7265zM93.777 104.229L67.4699 121.731H98.2049L93.777 104.229zM28.4001 38.1387C29.9629 38.1387 31.5257 39.4449 31.5257 41.2734C31.5257 43.102 29.9629 44.6693 28.1396 44.6693H9.12559C7.5628 44.6693 6 43.102 6 41.2734C6 39.7061 7.30233 38.1387 9.12559 38.1387H28.4001zM12.2511 23.5102L28.6605 32.9143C29.1814 33.1755 29.7024 33.4367 30.2233 33.4367C31.2652 33.4367 32.5675 32.9143 33.0884 31.8694C33.8698 30.302 33.3489 28.2122 31.7861 27.4286L15.6372 18.0245C14.0744 16.9796 11.9907 17.502 10.9488 19.0694C10.1674 20.6367 10.6883 22.7265 12.2511 23.5102zM28.6605 49.3715C30.2233 48.5878 32.307 49.1103 33.0884 50.6776C34.1303 52.245 33.6094 54.0735 31.7861 54.8572L15.3767 64.2613C14.8558 64.5225 14.3349 64.7837 13.8139 64.7837C12.7721 64.7837 11.4697 64.2613 10.9488 63.2164C10.1674 61.649 10.6883 59.5592 12.2511 58.7756L28.6605 49.3715zM119.303 38.1387H100.289C98.4654 38.1387 97.1631 39.7061 97.1631 41.2734C97.1631 43.102 98.7259 44.6693 100.289 44.6693H119.303C121.126 44.6693 122.428 43.102 122.428 41.2734C122.689 39.4449 121.126 38.1387 119.303 38.1387zM99.7678 33.1756C99.2468 33.4368 98.7259 33.6981 98.205 33.6981C97.1631 33.6981 96.1213 32.9144 95.6003 31.6083C94.8189 30.0409 95.3399 27.9511 96.9027 27.1674L113.312 17.7634C114.875 16.9797 116.959 17.5021 117.74 19.0695C118.521 20.6368 118 22.7266 116.438 23.5103L99.7678 33.1756zM116.438 59.0368L99.7678 49.3715C98.205 48.5878 96.1212 49.1103 95.3399 50.6776C94.5584 52.245 95.0794 54.3348 96.6422 55.1184L113.052 64.5225C113.572 64.7837 114.093 65.045 114.614 65.045C115.656 65.045 116.959 64.5225 117.479 63.4776C118.521 61.9103 117.74 59.8205 116.438 59.0368zM50.0187 41.5347C50.0187 33.4368 56.5304 27.1674 64.3444 27.1674C72.1584 27.1674 78.4095 33.4368 78.67 41.5347C78.67 49.6327 72.1584 55.9021 64.3444 55.9021C56.2699 55.9021 50.0187 49.3715 50.0187 41.5347zM56.5304 41.2735C56.5304 45.7143 60.1769 49.1103 64.3444 49.1103C68.5118 49.1103 71.8979 45.4531 72.1584 41.2735C72.1584 36.8327 68.5118 33.4368 64.3444 33.4368C59.9165 33.4368 56.5304 37.0939 56.5304 41.2735z'\n fill='currentColor'\n fillRule='evenodd'\n role='presentation'\n />\n </g>\n </svg>,\n 'Error404Icon'\n);\n\nError404Icon.displayName = 'Error404Icon';\n","import { createSvgIcon, SvgIconProps } from '@mui/material';\n\nimport { FC } from 'react';\n\nexport const Error500Icon: FC<SvgIconProps> = createSvgIcon(\n <svg viewBox='0 0 128 128'>\n <g fill='none'>\n <path\n d='M82.7671 21.7143C77.0411 21.7143 70.274 24.8403 70.274 39.1681V43.0756C70.274 45.4202 70.274 47.7647 70.0137 48.8067C69.2329 49.0672 66.6301 49.0672 64.2877 49.0672H62.726V27.4454C62.726 11.8151 57.2603 4 46.3288 4C35.3973 4 29.9315 11.8151 29.9315 27.4454V66C27.589 66 25.2466 66 24.4658 65.7395C24.2055 64.958 24.2055 62.3529 24.2055 60.0084V47.5042V47.2437C24.2055 32.916 17.4384 29.7899 11.9726 29.7899C6.76712 30.0504 0 33.1765 0 47.5042V70.4286C0 83.9748 5.72603 89.9664 19.5205 89.9664H30.4521V124.874C30.4521 126.697 32.0137 128 33.5753 128H59.6027C61.4247 128 62.726 126.437 62.726 124.874V72.7731H75.2192C88.7534 72.7731 94.7397 67.042 94.7397 53.2353V39.1681C95 24.5798 88.2329 21.7143 82.7671 21.7143zM56.4795 121.487H36.9589V89.9664H42.6849C44.5069 89.9664 45.8082 88.4034 45.8082 86.8403C45.8082 85.2773 44.2466 83.7143 42.6849 83.7143H19.5205C9.36986 83.7143 6.50685 80.8487 6.50685 70.6891V47.7647C6.50685 36.8235 10.411 36.8235 12.2329 36.8235C14.0548 36.8235 17.9589 36.8235 17.9589 47.5042V47.7647V60.5294C17.9589 71.4706 19.5205 72.7731 30.1918 72.7731H42.1644C43.9863 72.7731 45.2877 71.2101 45.2877 69.6471C45.2877 68.084 43.726 66.521 42.1644 66.521H36.4384V27.4454C36.4384 10.5126 43.2055 10.5126 46.3288 10.5126C49.1918 10.5126 56.2192 10.5126 56.2192 27.4454V121.487H56.4795zM88.4932 53.2353C88.4932 63.395 85.6301 66.2605 75.4795 66.2605H62.9863V55.5798H64.5479C75.4794 55.5798 76.7808 54.0168 76.7808 43.0756V39.1681C76.7808 28.2269 80.6849 28.2269 82.5069 28.2269C84.3288 28.2269 88.2329 28.2269 88.2329 39.1681V53.2353H88.4932z'\n fill='currentColor'\n role='presentation'\n />\n <path\n d='M127.5 117.2C127.5 116.7 127.2 116.2 126.7 116C126.2 115.8 125.7 115.9 125.3 116.3C125.3 116.3 121.7 119.8 117.3 120.4C116.8 118.4 115.3 116.8 113.3 116.2C114 115.2 114.5 114 114.5 112.7C114.5 109.5 111.9 106.9 108.7 106.9H101.1C101.4 104.3 102 98.3 102 94.8C102 90.5 98.6 89 96.2 89H90.8C86.5 89 85 92.4 85 94.8C85 95.4 85.5 95.9 86.1 96L94 96.9V107.1C91.2 107.5 89 109.9 89 112.8C89 114.1 89.4 115.3 90.2 116.3C87.8 116.9 86 119.1 86 121.8C86 125 88.6 127.6 91.8 127.6H111.4H111.8H117.3C125.4 127.5 127.5 120.8 127.5 117.2zM87.7 93.7C88 92.7 88.7 91.5 90.8 91.5H96.3C96.6 91.5 99.5 91.6 99.5 94.7C99.5 98.2 98.9 104.4 98.6 106.9H96.5V95.8C96.5 95.2 96 94.6 95.4 94.6L87.7 93.7zM94.8 109.5H108.8C110.6 109.5 112 111 112 112.7C112 114.4 110.5 116 108.8 116H94.8C93 116 91.6 114.5 91.6 112.8C91.6 111.1 93 109.5 94.8 109.5zM111.3 125H91.8C90 125 88.6 123.5 88.6 121.8C88.6 120.1 90.1 118.6 91.8 118.6H111.8C113.6 118.6 115 120.1 115 121.8C115 123.5 113.5 125 111.8 125H111.3zM117.2 125H116.4C116.8 124.4 117.1 123.7 117.3 122.9C120.1 122.6 122.6 121.4 124.4 120.2C123.6 122.4 121.7 125 117.2 125z'\n fill='currentColor'\n role='presentation'\n />\n </g>\n </svg>,\n 'Error500Icon'\n);\n\nError500Icon.displayName = 'Error500Icon';\n","import { styled } from '@mui/material';\nimport type { HttpErrorType } from '@vestwell-frontend/hooks';\n\nimport { FC } from 'react';\n\nimport { Error, ErrorProps } from './Error';\nimport { Error404Icon, Error500Icon, ExceptionIcon } from './icon';\n\nexport const ERRORS = {\n 401: {\n message: 'Redirecting to login…',\n title: 'You have been logged out'\n },\n 404: {\n message:\n 'The page you were looking for does not seem to exist. We apologize for any inconvenience. Rest assured we are actively looking into where it went.',\n title: 'Page Not Found'\n },\n 500: {\n message:\n 'We recommend refreshing the page or going back and trying again. We apologize for any inconvenience. Rest assured we are actively looking into what happened.',\n title: 'Whoops… something’s gone wrong.'\n }\n};\n\nexport const GENERIC_ERROR = {\n message:\n 'If the problem persists, please reach out and tell us a bit about what happened.',\n title: 'Something’s gone wrong!'\n};\n\nexport type StatusCodeErrorProps = Partial<\n HttpErrorType &\n ErrorProps & {\n /** Styles to merge with container */\n className?: string;\n }\n>;\n\nconst StyledError404Icon = styled(Error404Icon)(({ theme }) => ({\n height: theme.spacing(32),\n width: theme.spacing(32)\n}));\n\nconst StyledExceptionIcon = styled(ExceptionIcon)(({ theme }) => ({\n color: theme.palette.dijon.main,\n height: theme.spacing(32),\n marginBottom: theme.spacing(4),\n width: theme.spacing(32)\n}));\n\nconst StyledError500Icon = styled(Error500Icon)(({ theme }) => ({\n height: theme.spacing(32),\n width: theme.spacing(32)\n}));\n\nexport const StatusCodeError: FC<StatusCodeErrorProps> = ({\n status,\n ...props\n}) => {\n const error = ERRORS[status] || GENERIC_ERROR;\n\n const errorStatus = status?.toString();\n\n const icon =\n errorStatus === '404'\n ? StyledError404Icon\n : errorStatus === '500'\n ? StyledError500Icon\n : StyledExceptionIcon;\n\n return (\n <Error\n {...props}\n details={error.message}\n icon={icon}\n name='StatusCodeError'\n showRefreshButton={errorStatus === '500'}\n title={error.title}\n />\n );\n};\n\nStatusCodeError.displayName = 'StatusCodeError';\n","import isPropValid from '@emotion/is-prop-valid';\nimport { Box, Container, styled } from '@mui/material';\nimport type { HttpErrorType } from '@vestwell-frontend/hooks';\n\nimport {\n Children,\n CSSProperties,\n DetailedHTMLProps,\n forwardRef,\n HTMLAttributes,\n isValidElement,\n ReactElement,\n ReactNode,\n useMemo\n} from 'react';\n\nimport { Loader } from './Loader';\nimport { PageContext } from './PageContext';\nimport { PageFooter, PageFooterProps } from './PageFooter';\nimport { StatusCodeError } from './StatusCodeError';\n\nconst Content = styled(Container, {\n shouldForwardProp: prop =>\n !['innerStyles', 'hasStickyFooter'].includes(prop.toString())\n})<{ innerStyles?: CSSProperties; hasStickyFooter?: boolean }>(\n ({ innerStyles, hasStickyFooter, theme }) => ({\n ...(hasStickyFooter && {\n marginBottom: theme.spacing(16)\n }),\n ...innerStyles\n })\n);\n\n/**\n * Page\n * Scrollable, stretched layout for content\n */\nexport type PageProps = DetailedHTMLProps<\n HTMLAttributes<HTMLDivElement>,\n HTMLDivElement\n> & {\n 'data-component'?: string;\n children: ReactNode;\n /** when truthy it displays the error message */\n error?: Pick<HttpErrorType, 'code' | 'status'>;\n /** Slot to render footer within layout */\n footer?: ReactNode;\n /** adds extra padding in mobile view for drawer button (padding-left) */\n hasDrawer?: boolean;\n /** adds extra padding in mobile view for shelf button (padding-right) */\n hasShelf?: boolean;\n /** add css styles to the nested div */\n innerStyles?: CSSProperties;\n /** display the loading indicator */\n isLoading?: boolean;\n /** temporary workaround for portals with corrected page structure */\n noBottomPadding?: boolean;\n};\n\nconst StyledPage = styled('div', {\n shouldForwardProp: isPropValid\n})<{\n hasDrawer?: boolean;\n hasShelf?: boolean;\n hasStickyFooter?: boolean;\n}>(props => ({\n '& + [data-component=\"pageFooter\"]': {\n boxShadow: '1px -3px 5px #72727226',\n paddingLeft: props.theme.spacing(12),\n paddingRight: props.theme.spacing(props.hasShelf ? 6 : 12),\n [props.theme.breakpoints.down('lg')]: {\n paddingLeft: props.theme.spacing(10),\n paddingRight: props.theme.spacing(10)\n },\n [props.theme.breakpoints.down('sm')]: {\n paddingLeft: props.theme.spacing(props.hasShelf ? 10 : 4),\n paddingRight: props.theme.spacing(props.hasShelf ? 10 : 4)\n }\n },\n display: 'flex',\n flex: 1,\n flexDirection: 'column',\n gridArea: 'page',\n height: '100%',\n overflowY: 'auto',\n paddingLeft: props.theme.spacing(12),\n paddingRight: props.theme.spacing(props.hasShelf ? 6 : 12),\n paddingTop: props.theme.spacing(8),\n position: 'relative',\n width: '100%',\n [props.theme.breakpoints.down('sm')]: {\n padding: props.theme.spacing(\n 5,\n props.hasShelf ? 10 : 4,\n 1,\n props.hasDrawer ? 10 : 4\n ),\n width: '100%'\n },\n ...(props.hasStickyFooter && {\n paddingBottom: '0 !important'\n })\n}));\n\nconst hasFooter = (\n element: ReactNode\n): element is ReactElement<PageFooterProps> =>\n isValidElement<PageFooterProps>(element) && element.type === PageFooter;\n\nexport const Page = forwardRef<HTMLDivElement, PageProps>(\n (\n {\n children,\n error,\n footer,\n innerStyles,\n isLoading,\n noBottomPadding,\n ...props\n },\n ref\n ) => {\n const ctx = useMemo(\n () => ({\n hasMainSiblings: Children.count(children) > 1\n }),\n [children]\n );\n const hasStickyFooter = useMemo(\n () => hasFooter(footer) && footer.props.sticky,\n [footer]\n );\n\n return (\n <PageContext.Provider value={ctx}>\n <StyledPage\n {...props}\n data-component={props['data-component'] || 'Page'}\n hasStickyFooter={hasStickyFooter}\n id='mainContent'\n ref={ref}>\n <Content\n hasStickyFooter={hasStickyFooter}\n innerStyles={innerStyles}\n //https://stackoverflow.com/questions/45519275/grid-in-material-ui-causes-horizontal-scroll-react\n maxWidth={false}>\n {isLoading && <Loader />}\n {error && (\n <Box\n alignItems='center'\n bottom={0}\n display='flex'\n height='100%'\n justifyContent='center'\n left={0}\n position='absolute'\n right={0}\n top={0}\n width='100%'>\n <StatusCodeError code={error.code} status={error.status} />\n </Box>\n )}\n {!isLoading && children}\n </Content>\n {!isLoading && footer}\n </StyledPage>\n </PageContext.Provider>\n );\n }\n);\n\nPage.displayName = 'Page';\n","import { Box } from '@mui/material';\nimport type { HttpErrorType } from '@vestwell-frontend/hooks';\n\nimport { Component, FC, Fragment, ReactNode, Suspense } from 'react';\n\nimport { Loader } from './Loader';\nimport { Page } from './Page';\nimport { StatusCodeError } from './StatusCodeError';\n\ntype ApiBoundaryState = {\n error?: Partial<HttpErrorType>;\n code?: string;\n status?: number;\n};\n\nexport type ApiBoundaryProps = {\n children?: ReactNode;\n hidePage?: boolean;\n isLoading?: boolean;\n error?: Partial<HttpErrorType>;\n};\n\nexport class ApiBoundary extends Component<ApiBoundaryProps, ApiBoundaryState> {\n state = {\n code: undefined,\n error: undefined,\n status: undefined\n };\n\n static getDerivedStateFromError(error) {\n return {\n code: error.code,\n error,\n status: error.status ?? 500\n };\n }\n\n render() {\n const error = this.state.error || this.props.error;\n const isPage = !this.props.hidePage;\n const Wrapper = isPage ? Page : Fragment;\n\n if (error && error?.status !== 401) {\n return (\n <Wrapper>\n {isPage ? (\n <Box\n alignItems='center'\n bottom={0}\n display='flex'\n height='100%'\n justifyContent='center'\n left={0}\n position='absolute'\n right={0}\n top={0}\n width='100%'>\n <StatusCodeError code={error.code} status={error.status} />\n </Box>\n ) : (\n <StatusCodeError code={error.code} status={error.status} />\n )}\n </Wrapper>\n );\n }\n\n if (this.props.isLoading) {\n return (\n <Wrapper>\n <Loader position={isPage ? 'absolute' : 'relative'} />\n </Wrapper>\n );\n }\n\n return (\n <Suspense\n fallback={\n <Wrapper>\n <Loader position={isPage ? 'absolute' : 'relative'} />\n </Wrapper>\n }>\n {this.props.children}\n </Suspense>\n );\n }\n}\n\nexport function withApiBoundary<Props>(\n Component,\n apiBoundaryProps?: ApiBoundaryProps\n): FC<Props> {\n const Wrapper: FC<Props> = props => (\n <ApiBoundary {...apiBoundaryProps}>\n <Component {...props} />\n </ApiBoundary>\n );\n\n Wrapper.displayName = 'ApiBoundary';\n\n return Wrapper;\n}\n","import { createSvgIcon, SvgIconProps } from '@mui/material';\n\nimport { FC } from 'react';\n\nexport const TimerIcon: FC<SvgIconProps> = createSvgIcon(\n <svg fill='none' viewBox='0 0 120 121'>\n <rect\n fill='white'\n height='8'\n rx='2'\n stroke='#033952'\n strokeWidth='1.5'\n transform='rotate(90 64 13.5)'\n width='15'\n x='64'\n y='13.5'\n />\n <rect\n height='58'\n rx='2'\n stroke='#DDC04A'\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeWidth='1.5'\n width='103'\n x='9'\n y='31.5'\n />\n <circle cx='86' cy='34.5' fill='white' r='6' />\n <circle cx='86' cy='34.5' fill='url(#paint0_linear_1882_12488)' r='6' />\n <path\n clipRule='evenodd'\n d='M12.25 37.5C12.25 35.9812 13.4812 34.75 15 34.75H106C107.519 34.75 108.75 35.9812 108.75 37.5V83.5C108.75 85.0188 107.519 86.25 106 86.25H15C13.4812 86.25 12.25 85.0188 12.25 83.5V37.5ZM15 36.25C14.3096 36.25 13.75 36.8096 13.75 37.5V83.5C13.75 84.1904 14.3096 84.75 15 84.75H106C106.69 84.75 107.25 84.1904 107.25 83.5V37.5C107.25 36.8096 106.69 36.25 106 36.25H15Z'\n fill='url(#paint1_linear_1882_12488)'\n fillRule='evenodd'\n />\n <circle cx='83' cy='74.5' fill='white' r='8' />\n <circle cx='60' cy='63.5' fill='white' r='40' />\n <circle cx='60' cy='65.5' fill='white' r='40' />\n <circle cx='60' cy='65.5' fill='url(#paint2_linear_1882_12488)' r='40' />\n <circle cx='60' cy='63.5' r='40' stroke='#033952' strokeWidth='1.5' />\n <path\n clipRule='evenodd'\n d='M61 31.25C61 30.8358 60.6642 30.5 60.25 30.5C42.1627 30.5 27.5 45.1627 27.5 63.25C27.5 81.3373 42.1627 96 60.25 96C78.3373 96 93 81.3373 93 63.25C93 62.8358 92.6642 62.5 92.25 62.5C91.8358 62.5 91.5 62.8358 91.5 63.25C91.5 80.5089 77.5089 94.5 60.25 94.5C42.9911 94.5 29 80.5089 29 63.25C29 46.2418 42.5876 32.4072 59.5 32.0088V63.25C59.5 63.6642 59.8358 64 60.25 64C60.6642 64 61 63.6642 61 63.25V31.25Z'\n fill='url(#paint3_linear_1882_12488)'\n fillRule='evenodd'\n />\n <rect fill='white' height='8' width='26' x='47' y='12.5' />\n <rect\n fill='url(#paint4_linear_1882_12488)'\n height='8'\n width='26'\n x='47'\n y='12.5'\n />\n <rect\n height='8'\n rx='2'\n stroke='#033952'\n strokeWidth='1.5'\n width='26'\n x='47'\n y='10.5'\n />\n <circle cx='86' cy='33.5' r='6' stroke='#033952' strokeWidth='1.5' />\n <defs>\n <linearGradient\n gradientUnits='userSpaceOnUse'\n id='paint0_linear_1882_12488'\n x1='86'\n x2='86'\n y1='28.5'\n y2='37.1842'>\n <stop stopColor='#E9F0F9' stopOpacity='0.5' />\n <stop offset='1' stopColor='#DBE0E7' stopOpacity='0' />\n </linearGradient>\n <linearGradient\n gradientUnits='userSpaceOnUse'\n id='paint1_linear_1882_12488'\n x1='60.5'\n x2='60.5'\n y1='34.75'\n y2='86.25'>\n <stop stopColor='white' stopOpacity='0' />\n <stop offset='0.635417' stopColor='#2C8FC5' stopOpacity='0.09' />\n </linearGradient>\n <linearGradient\n gradientUnits='userSpaceOnUse'\n id='paint2_linear_1882_12488'\n x1='60'\n x2='60'\n y1='25.5'\n y2='83.3947'>\n <stop stopColor='#E9F0F9' stopOpacity='0.5' />\n <stop offset='1' stopColor='#DBE0E7' stopOpacity='0' />\n </linearGradient>\n <linearGradient\n gradientUnits='userSpaceOnUse'\n id='paint3_linear_1882_12488'\n x1='60.25'\n x2='90.75'\n y1='63.25'\n y2='63.25'>\n <stop stopColor='#0679AF' />\n <stop offset='1' stopColor='#0679AF' stopOpacity='0' />\n </linearGradient>\n <linearGradient\n gradientUnits='userSpaceOnUse'\n id='paint4_linear_1882_12488'\n x1='60'\n x2='60'\n y1='12.5'\n y2='18.2895'>\n <stop stopColor='#E9F0F9' stopOpacity='0.5' />\n <stop offset='1' stopColor='#DBE0E7' stopOpacity='0' />\n </linearGradient>\n </defs>\n </svg>,\n 'TimerIcon'\n);\n\nTimerIcon.displayName = 'TimerIcon';\n","const safeAreaValues = {\n bottom: 'var(--safe-area-inset-bottom, env(safe-area-inset-bottom, 0px))',\n left: 'var(--safe-area-inset-left, env(safe-area-inset-left, 0px))',\n right: 'var(--safe-area-inset-right, env(safe-area-inset-right, 0px))',\n top: 'var(--safe-area-inset-top, env(safe-area-inset-top, 0px))'\n};\n\nexport const safeArea = safeAreaValues;\n","import { Alert, CircularProgress, styled } from '@mui/material';\n\nimport { FC, HTMLAttributes, ReactNode } from 'react';\n\nexport type ModalBodyProps = HTMLAttributes<HTMLDivElement> & {\n className?: string;\n children: ReactNode;\n error?: string | ReactNode;\n isLoading?: boolean;\n isRounded?: boolean;\n};\n\nconst StyledModalBody = styled('div', {\n shouldForwardProp: prop => prop !== 'isRounded'\n})<{\n isRounded?: boolean;\n}>(props => ({\n /** WCAG 1.4.10 */\n '@media (max-height: 500px)': {\n overflow: 'unset'\n },\n borderRadius: props.isRounded ? '0.75rem' : undefined,\n display: 'flex',\n flexDirection: 'column',\n flexGrow: 1,\n height: '100%',\n overflow: 'hidden'\n}));\n\nconst StyledModalBodyContents = styled('div', {\n shouldForwardProp: prop => prop !== 'isLoading'\n})<{\n isLoading?: boolean;\n}>(({ theme, isLoading }) => ({\n /** WCAG 1.4.10 */\n '@media (max-height: 500px)': {\n overflowY: 'unset'\n },\n overflowY: 'auto',\n padding: theme.spacing(10, 10),\n webkitOverflowScrolling: 'touch',\n [theme.breakpoints.down('sm')]: {\n padding: theme.spacing(10, 6)\n },\n ...(isLoading && {\n alignItems: 'center',\n display: 'flex',\n flexDirection: 'column'\n })\n}));\n\nexport const ModalBody: FC<ModalBodyProps> = ({ isRounded, ...props }) => {\n return (\n <StyledModalBody isRounded={isRounded}>\n <StyledModalBodyContents\n data-component='modalBody'\n isLoading={props.isLoading}\n role='presentation'\n {...props}>\n {props.isLoading && <CircularProgress data-component='modalLoader' />}\n {typeof props.error === 'string' && (\n <Alert\n dangerouslySetInnerHTML={{ __html: props.error }}\n data-component='modalError'\n severity='error'\n />\n )}\n {props.error && typeof props.error !== 'string' && (\n <Alert data-component='modalError' severity='error'>\n {props.error}\n </Alert>\n )}\n {!props.isLoading && props.children}\n </StyledModalBodyContents>\n </StyledModalBody>\n );\n};\n\nModalBody.displayName = 'ModalBody';\n","import isPropValid from '@emotion/is-prop-valid';\nimport { styled } from '@mui/material';\n\nimport { forwardRef, HTMLAttributes, ReactNode } from 'react';\n\nexport type ModalContainerProps = HTMLAttributes<HTMLDivElement> & {\n className?: string;\n children: ReactNode;\n lgWidth?: number | string;\n mdWidth?: number | string;\n};\n\nconst StyledModalContainer = styled('div', {\n shouldForwardProp: isPropValid\n})<ModalContainerProps>(props => ({\n '& > form': {\n display: 'contents'\n },\n /** WCAG 1.4.10 */\n '@media (max-height: 500px)': {\n overflowY: 'auto'\n },\n backgroundColor: 'white',\n borderRadius: '0.75rem',\n boxShadow: '0 0 #0000, 0 0 #0000, 0px 4px 48px #0006',\n display: 'flex',\n flexDirection: 'column',\n margin: props.theme.spacing(4),\n maxHeight: 'calc(100% - 1rem)',\n outline: 'none',\n position: 'relative',\n width: props.lgWidth ?? '44rem',\n [props.theme.breakpoints.down('md')]: {\n width: props.mdWidth ?? '44rem'\n },\n [props.theme.breakpoints.down('sm')]: {\n height: '100%',\n margin: 0,\n width: '100%'\n }\n}));\n\nexport const ModalContainer = forwardRef<HTMLDivElement, ModalContainerProps>(\n (props, ref) => {\n return (\n <StyledModalContainer {...props} ref={ref}>\n {props.children}\n </StyledModalContainer>\n );\n }\n);\n\nModalContainer.displayName = 'ModalContainer';\n","import isPropValid from '@emotion/is-prop-valid';\nimport { styled } from '@mui/material';\n\nimport { FC, HTMLAttributes, ReactNode } from 'react';\n\nimport { Text, TextProps } from './Text';\n\nexport type ModalHeaderProps = HTMLAttributes<HTMLDivElement> & {\n className?: string;\n children: ReactNode;\n};\n\nconst StyledModalHeader = styled('div', {\n shouldForwardProp: isPropValid\n})<ModalHeaderProps>(props => ({\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'space-between',\n padding: props.theme.spacing(6, 10),\n [props.theme.breakpoints.down('sm')]: {\n padding: props.theme.spacing(6)\n }\n}));\n\nconst StyledModalHeaderText = styled(Text)<TextProps>(props => ({\n alignItems: 'center',\n display: 'flex',\n justifyContent: 'flex-start',\n marginBottom: 0,\n width: '100%',\n [props.theme.breakpoints.down('sm')]: {\n justifyContent: 'center'\n }\n}));\n\nexport const ModalHeader: FC<ModalHeaderProps> = ({ id, ...props }) => {\n return (\n <StyledModalHeader data-component='modalHeader' {...props}>\n <StyledModalHeaderText color='grey100' id={id} variant='e2'>\n {props.children}\n </StyledModalHeaderText>\n </StyledModalHeader>\n );\n};\n\nModalHeader.displayName = 'ModalHeader';\n","import { Close } from '@mui/icons-material';\nimport {\n CircularProgress,\n Divider,\n IconButton,\n Modal as MuiModal,\n ModalProps as MuiModalProps,\n type Palette,\n styled,\n useTheme\n} from '@mui/material';\n\nimport {\n FC,\n ReactNode,\n SyntheticEvent,\n useCallback,\n useId,\n useMemo\n} from 'react';\n\nimport { safeArea } from '../helpers/safeArea.style';\nimport { ModalBody } from './ModalBody';\nimport { ModalContainer } from './ModalContainer';\nimport { ModalHeader } from './ModalHeader';\n\nexport type ModalProps = Pick<MuiModalProps, 'disableEnforceFocus' | 'ref'> & {\n /** Text content labeling the modal */\n 'aria-label'?: string;\n /** ID of an element that labels the modal */\n 'aria-labelledby'?: string;\n /** ID of an element with additional details about the modal */\n 'aria-describedby'?: string;\n /** unique id; used for test selector */\n 'data-testid'?: string;\n /** Text or component content */\n children: ReactNode;\n /** Display a close button */\n closeButton?: boolean;\n /** close confirmation dialog text */\n confirmMessage?: string;\n /** Text or component content for sticky header */\n header?: ReactNode;\n /** loading state of the modal */\n isLoading?: boolean;\n /** Determines the modal's visibility */\n isOpen?: boolean;\n /** sets width of modal for lg breakpoint */\n lgWidth?: number | string;\n /** Disable ability to close */\n locked?: boolean;\n /** sets width of modal for md breakpoint */\n mdWidth?: number | string;\n /** Handler function to close modal using keyboard */\n onRequestClose(e?: SyntheticEvent): void;\n /** Make the user confirm before closing */\n requireConfirmOnClose?: boolean;\n /** adds scroll event handler to modal body */\n onScroll?: (e?: SyntheticEvent) => void;\n /** Aria role */\n role?: string;\n /** Color for backdrop */\n overlayColor?: keyof Palette;\n};\n\nconst ModalLoader = styled('div', { name: 'modalLoader' })({\n alignItems: 'center',\n display: 'flex',\n justifyContent: 'center',\n minHeight: 350,\n width: '100%'\n});\n\nconst StyledMuiModal = styled(MuiModal)({\n alignItems: 'center',\n display: 'flex',\n justifyContent: 'center',\n left: 0,\n paddingBottom: safeArea.bottom,\n paddingTop: safeArea.top,\n position: 'fixed',\n right: 0,\n top: 0\n});\n\nconst StyledIconButton = styled(IconButton, {\n shouldForwardProp: prop => prop !== 'hasHeader'\n})<{ hasHeader: boolean }>(({ theme, hasHeader }) => ({\n color: theme.palette.black.main,\n position: 'absolute',\n right: hasHeader ? theme.spacing(8) : theme.spacing(2),\n top: hasHeader ? theme.spacing(4.5) : theme.spacing(2)\n}));\n\nexport const Modal: FC<ModalProps> = ({\n confirmMessage = 'Your data is not saved yet. Are you sure you want to close the form?',\n ...props\n}) => {\n const labelId = useId();\n\n const theme = useTheme();\n\n const ariaLabelledBy = useMemo(\n () => (typeof props.header === 'string' ? labelId : undefined),\n [labelId, props.header]\n );\n\n const handleClose = useCallback(() => {\n if (!props.requireConfirmOnClose) {\n return props.onRequestClose();\n }\n\n if (window.confirm(confirmMessage)) {\n props.onRequestClose();\n }\n }, [confirmMessage, props.onRequestClose, props.requireConfirmOnClose]);\n\n return (\n <StyledMuiModal\n onClose={props.locked ? undefined : handleClose}\n open={!!(props.locked || props.isOpen)}\n role='presentation'\n slotProps={{\n backdrop: {\n style: {\n backgroundColor: props.overlayColor\n ? theme.palette[props.overlayColor]?.main\n : undefined\n }\n }\n }}>\n <ModalContainer\n aria-describedby={props['aria-describedby']}\n aria-label={props['aria-label']}\n aria-labelledby={props['aria-labelledby'] ?? ariaLabelledBy}\n data-component='modalContainer'\n data-testid={props['data-testid']}\n lgWidth={props.lgWidth}\n mdWidth={props.mdWidth}\n role={props.role || 'dialog'}>\n {!props.isLoading && props.header && (\n <>\n <ModalHeader id={ariaLabelledBy}>{props.header}</ModalHeader>\n <Divider />\n </>\n )}\n {props.isLoading ? (\n <ModalBody isRounded={!props.header}>\n <ModalLoader>\n <CircularProgress />\n </ModalLoader>\n </ModalBody>\n ) : (\n props.children\n )}\n {props.closeButton && (\n <StyledIconButton\n aria-label='close'\n hasHeader={!!props.header}\n onClick={handleClose}>\n <Close />\n </StyledIconButton>\n )}\n </ModalContainer>\n </StyledMuiModal>\n );\n};\n\nModal.displayName = 'Modal';\n","import { Stack, StackProps, styled } from '@mui/material';\n\nimport { FC, ReactNode } from 'react';\n\nexport type ModalFooterProps = {\n children?: ReactNode;\n justifyBetween?: boolean;\n justifyCenter?: boolean;\n noBoxShadow?: boolean;\n};\n\nconst StyledModalFooter = styled(Stack, {\n shouldForwardProp: prop =>\n !['justifyBetween', 'justifyCenter', 'noBoxShadow'].includes(\n prop.toString()\n )\n})<\n {\n justifyBetween?: boolean;\n justifyCenter?: boolean;\n noBoxShadow?: boolean;\n } & StackProps\n>(props => ({\n backgroundColor: props.theme.palette.white.main,\n borderBottomLeftRadius: '0.75rem',\n borderBottomRightRadius: '0.75rem',\n boxShadow: props.noBoxShadow\n ? 'none'\n : '0 0 #0000, 0 0 #0000, 1px -3px 5px #72727226',\n gap: props.justifyBetween || props.justifyCenter ? 0 : props.theme.spacing(4),\n justifyContent: props.justifyBetween\n ? 'space-between'\n : props.justifyCenter\n ? 'center'\n : 'flex-end',\n transform: 'translateY(-1px) scaleX(1) scaleY(1)',\n [props.theme.breakpoints.down('sm')]: {\n '& > button': {\n width: '100%'\n },\n flexDirection: 'column-reverse',\n gap: props.theme.spacing(2),\n justifyContent: 'center'\n }\n}));\n\nexport const ModalFooter: FC<ModalFooterProps> = props => {\n return (\n <StyledModalFooter\n alignItems='center'\n bottom={0}\n data-component='modalFooter'\n direction='row'\n justifyBetween={props.justifyBetween}\n justifyCenter={props.justifyCenter}\n left={0}\n noBoxShadow={props.noBoxShadow}\n padding={2}\n right={0}\n role='presentation'>\n {props.children}\n </StyledModalFooter>\n );\n};\n\nModalFooter.displayName = 'ModalFooter';\n","import { Stack, styled } from '@mui/material';\nimport { logout } from '@vestwell-frontend/helpers';\nimport {\n Button,\n Modal,\n ModalBody,\n ModalFooter,\n Text,\n TimerIcon\n} from '@vestwell-frontend/ui';\n\nimport { FC, ReactNode, useCallback, useId, useMemo } from 'react';\nimport { useIdleTimer } from 'react-idle-timer';\nimport { useInterval, useLocation, useToggle } from 'react-use';\n\nconst timeout = {\n advisor: 3600 * 1000,\n participant: 900 * 1000,\n sponsor: 900 * 1000,\n user: 900 * 1000\n};\n\nconst promptBeforeIdle = {\n advisor: 60 * 1000,\n participant: 60 * 1000,\n sponsor: 60 * 1000,\n user: 60 * 1000\n};\n\nconst StyledTimerIcon = styled(TimerIcon)(({ theme }) => ({\n fill: 'none',\n height: theme.spacing(30.25),\n width: theme.spacing(30)\n}));\n\nexport const TimeoutModal: FC<{\n children: ReactNode;\n entity: 'advisor' | 'sponsor' | 'participant' | 'user';\n}> = props => {\n const headerId = useId();\n\n const location = useLocation();\n\n const originalTitle = useMemo(() => document.title, [location.pathname]);\n\n const [isModal, toggleModal] = useToggle(false);\n\n const timer = useIdleTimer({\n crossTab: true,\n onIdle: () => logout(true),\n onPrompt: toggleModal,\n promptBeforeIdle: promptBeforeIdle[props.entity],\n timeout: timeout[props.entity]\n });\n\n const onHere = useCallback(() => {\n document.title = originalTitle;\n timer.activate();\n toggleModal();\n }, []);\n\n useInterval(() => {\n const remainingMs = timer.getRemainingTime();\n const remainingSeconds = Math.floor(remainingMs / 1000);\n\n if (remainingMs < promptBeforeIdle[props.entity]) {\n document.title = `00:${\n remainingSeconds < 10 ? `0${remainingSeconds}` : remainingSeconds\n } in session remaining`;\n }\n }, 1000);\n\n return (\n <>\n <Modal\n aria-labelledby={headerId}\n data-testid='timeout'\n locked={isModal}\n onRequestClose={toggleModal}\n overlayColor='white'>\n <ModalBody>\n <Stack alignItems='center' width='100%'>\n <StyledTimerIcon />\n </Stack>\n <Text\n color='oxfordBlue'\n id={headerId}\n textAlign='center'\n variant='b2'>\n Your Session is About to Timeout\n </Text>\n <Text color='black' textAlign='center' variant='g1'>\n If you take no action, you will be logged out momentarily\n </Text>\n </ModalBody>\n <ModalFooter justifyBetween>\n <Button onClick={logout} variant='outlined'>\n Log Out\n </Button>\n <Button onClick={onHere} variant='contained'>\n I'm still here\n </Button>\n </ModalFooter>\n </Modal>\n {props.children}\n </>\n );\n};\n\nTimeoutModal.displayName = 'TimeoutModal';\n","import {\n Check,\n Close,\n InfoOutlined,\n WarningAmberOutlined\n} from '@mui/icons-material';\nimport { IconButton, styled } from '@mui/material';\n\nimport {\n MaterialDesignContent,\n SnackbarProvider,\n SnackbarProviderProps\n} from 'notistack';\nimport { FC, ReactNode, useRef } from 'react';\n\nexport type NotificationsProviderProps = SnackbarProviderProps & {\n children: ReactNode;\n};\n\nconst StyledMaterialDesignContent = styled(MaterialDesignContent)(\n ({ theme }) => ({\n '&.notistack-MuiContent': {\n fontSize: theme.spacing(4)\n },\n '&.notistack-MuiContent-error': {\n backgroundColor: theme.palette.error.main\n },\n '&.notistack-MuiContent-info': {\n backgroundColor: theme.palette.info.main\n },\n '&.notistack-MuiContent-success': {\n backgroundColor: theme.palette.success.main\n },\n '&.notistack-MuiContent-warning': {\n backgroundColor: theme.palette.warning.main\n }\n })\n);\n\nexport const NotificationsProvider: FC<NotificationsProviderProps> = ({\n anchorOrigin = {\n horizontal: 'center',\n vertical: 'bottom'\n },\n autoHideDuration = 3000,\n children,\n maxSnack = 6,\n preventDuplicate = true,\n ...props\n}) => {\n const $snackbar = useRef(null);\n\n const onDismiss = e => {\n $snackbar.current.closeSnackbar(e.target.dataset.key);\n };\n\n return (\n <SnackbarProvider\n Components={{\n error: StyledMaterialDesignContent,\n info: StyledMaterialDesignContent,\n success: StyledMaterialDesignContent,\n warning: StyledMaterialDesignContent\n }}\n action={key => (\n <IconButton\n aria-label='Close Notification'\n color='white'\n data-key={key}\n onClick={onDismiss}\n size='small'\n sx={{ marginRight: 4 }}>\n <Close />\n </IconButton>\n )}\n anchorOrigin={anchorOrigin}\n autoHideDuration={autoHideDuration}\n iconVariant={{\n error: (\n <InfoOutlined\n color='white'\n fontSize='small'\n sx={{ marginRight: 2 }}\n />\n ),\n info: (\n <InfoOutlined\n color='white'\n fontSize='small'\n sx={{ marginRight: 2 }}\n />\n ),\n success: (\n <Check color='white' fontSize='small' sx={{ marginRight: 2 }} />\n ),\n warning: (\n <WarningAmberOutlined\n color='white'\n fontSize='small'\n sx={{ marginRight: 2 }}\n />\n )\n }}\n maxSnack={maxSnack}\n preventDuplicate={preventDuplicate}\n {...props}\n ref={$snackbar}>\n {children}\n </SnackbarProvider>\n );\n};\n","import { Box, styled, useMediaQuery } from '@mui/material';\n\nimport { FC, useMemo } from 'react';\n\nimport { Error404Icon } from './icon';\nimport { Text } from './Text';\n\nexport type PageNotFoundProps = {\n basePath?: string;\n default?: boolean;\n defaultPath?: string;\n legacyPaths?: (string | RegExp)[];\n};\n\nconst Container = styled('div')(({ theme }) => ({\n alignItems: 'center',\n display: 'flex',\n flexDirection: 'column',\n gridArea: 'page',\n justifyContent: 'center',\n padding: theme.spacing(8),\n textAlign: 'center',\n width: '100%'\n}));\n\nconst StyledError404Icon = styled(Error404Icon)(({ theme }) => ({\n height: theme.spacing(32),\n width: theme.spacing(32)\n}));\n\nconst legacyPaths = [/^\\/api\\//, /^\\/auth\\/api\\//];\n\nexport const PageNotFound: FC<PageNotFoundProps> = props => {\n const isMobile = useMediaQuery(theme => theme.breakpoints.down('sm'));\n\n const isRedirectPath = useMemo(\n () =>\n [\n ...(props.basePath ? [props.basePath] : []),\n ...(process.env.NODE_ENV === 'development' ? ['/'] : [])\n ].some(p => p === window.location.pathname),\n [props.basePath]\n );\n\n const isLegacyPath = useMemo(\n () =>\n [...legacyPaths, ...(props.legacyPaths ?? [])].some(p => {\n return typeof p === 'string'\n ? window.location.pathname === p\n : p.test(window.location.pathname);\n }),\n [props.legacyPaths]\n );\n\n /**\n * redirect to the index path if path is props.basePath or \"/\" (dev only)\n * otherwise, show the page not found error.\n */\n if (isRedirectPath && props.defaultPath) {\n window.location.pathname = props.defaultPath;\n return null;\n }\n\n /**\n * redirect to the index path if path is props.basePath or \"/\" (dev only)\n * otherwise, show the page not found error.\n */\n if (isLegacyPath) {\n window.location.href = `${window.location.origin}${window.location.pathname}`;\n return null;\n }\n\n return (\n <Container data-component='PageNotFound' role='presentation'>\n <StyledError404Icon color='dijon' />\n <Text\n color='black'\n component='h1'\n data-testid='PageNotFound__title'\n marginX='auto'\n mt={isMobile ? 8 : 12}\n variant={isMobile ? 'e2' : 'b2'}>\n Page Not Found\n </Text>\n <Box mt={10}>\n The page you were looking for does not exist. We apologize for any\n inconvenience. We are continually working to improve the site.\n </Box>\n <Box mt={4}>If you need assistance, please contact Client Services.</Box>\n </Container>\n );\n};\n\nPageNotFound.displayName = 'PageNotFound';\n","import { Alert, Box, styled } from '@mui/material';\n\nimport type { FormikConfig, FormikContextType } from 'formik';\nimport {\n Formik,\n FormikErrors,\n Form as FormikForm,\n getIn,\n useFormikContext,\n yupToFormErrors\n} from 'formik';\nimport { pick } from 'lodash';\nimport {\n createContext,\n Dispatch,\n FC,\n forwardRef,\n memo,\n ReactNode,\n SetStateAction,\n useCallback,\n useEffect,\n useMemo,\n useState\n} from 'react';\nimport { useDebounce, useToggle, useUnmount, useUpdateEffect } from 'react-use';\n\nexport const FORM_SUBMIT_ERROR = 'error';\n\nexport type FormConfirmProps = {\n confirm: () => void | Promise<void>;\n dismiss: () => void | Promise<void>;\n open: boolean;\n values?: any;\n};\n\nexport type FormProps<T> = Omit<\n FormikConfig<T>,\n 'initialValues' | 'innerRef' | 'onSubmit'\n> & {\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n 'data-component'?: string;\n autoComplete?: string;\n children?: ReactNode;\n /** className to apply to the wrapping form element */\n className?: string;\n /** component used for confirmation */\n Confirm?: FC<FormConfirmProps>;\n initialValues?: any;\n /** onChange called when values in the form changed */\n onChange?:\n | Dispatch<SetStateAction<T | undefined>>\n | ((values: T) => void | Promise<void>);\n /** onChange called when values in the form changed */\n onErrors?:\n | Dispatch<SetStateAction<FormikErrors<T> | undefined>>\n | ((errors: FormikErrors<T>) => void | Promise<void>);\n /** onRawErrors called when raw yup errors are updated */\n onRawErrors?: (errors: FormikErrors<T> | null) => void;\n /** called when submitting state changes */\n onSubmitting?: (isSubmitting: boolean) => void | Promise<void>;\n /** called when resetting the form */\n onSubmit?: FormikConfig<T>['onSubmit'];\n /** called when submitting the form */\n onReset?: FormikConfig<T>['onReset'];\n /** onValidation called when form validation state changed */\n onValidation?:\n | Dispatch<SetStateAction<boolean | undefined>>\n | ((valid: boolean) => void | Promise<void>);\n /** prevent onChange from getting called after mount */\n preventOnChangeOnMount?: boolean;\n /** additional context to pass to yup validationSchema; accessed via this.options.context */\n validationContext?: Record<string, unknown>;\n};\n\n/**\n * this is a wrapper for the Confirm prop/component; it\n * implements to subsequent submission post confirmation\n */\nconst FormConfirm: FC<\n FormConfirmProps & {\n isConfirmed?: boolean;\n Confirm: FC<FormConfirmProps>;\n }\n> = memo(({ Confirm, isConfirmed, ...props }) => {\n const ctx = useFormikContext<any>();\n\n useUpdateEffect(() => {\n if (!props.open && isConfirmed) {\n (async () => {\n await ctx.handleSubmit();\n })();\n }\n }, [isConfirmed]);\n\n return <Confirm {...props} values={ctx.values} />;\n});\n/**\n * this is a workaround for adding an onChange callback to Form\n * unfortunately, formik does not provide onChange callback (only <form onChange>)\n */\nconst FormChangeHandler: FC<{\n onChange: FormProps<any>['onChange'];\n preventOnChangeOnMount?: boolean;\n}> = memo(props => {\n const ctx = useFormikContext<any>();\n const [mounted, setMounted] = useState(false);\n\n useEffect(() => {\n const $timeout = setTimeout(() => {\n setMounted(true);\n }, 10);\n return () => {\n clearTimeout($timeout);\n };\n }, []);\n\n const [, cancel] = useDebounce(\n () => {\n const shouldCall =\n !props.preventOnChangeOnMount ||\n (props.preventOnChangeOnMount && mounted);\n\n if (props.onChange && shouldCall) {\n props.onChange(ctx.values);\n }\n },\n 10,\n [ctx.values]\n );\n\n useUnmount(() => {\n cancel();\n });\n\n return null;\n});\n\n/**\n * this is a workaround for adding an onValidation callback to Form\n * unfortunately, formik does not provide onValidation callback\n */\nconst FormValidationHandler: FC<{\n onValidation: FormProps<any>['onValidation'];\n}> = memo(props => {\n const ctx = useFormikContext<any>();\n\n useEffect(() => {\n props.onValidation(ctx.isValid);\n }, [ctx.isValid]);\n\n return null;\n});\n\n/**\n * this is a workaround for adding an onErrors callback to Form\n * unfortunately, formik does not provide onErrors callback\n */\nconst FormErrorHandler: FC<{ onErrors: FormProps<any>['onErrors'] }> = memo(\n props => {\n const ctx = useFormikContext<any>();\n\n useEffect(() => {\n if (props.onErrors) {\n props.onErrors(ctx.errors);\n }\n }, [ctx.errors]);\n\n return null;\n }\n);\n\n/**\n * this is a workaround to re-validate form when schema changes\n */\nconst FormValidationSchemaChanged: FC<{ validationSchema: unknown }> = memo(\n props => {\n const ctx = useFormikContext<any>();\n\n useUpdateEffect(() => {\n ctx.validateForm();\n }, [props.validationSchema]);\n\n return null;\n }\n);\n\nexport const IsRequiredFieldContext = createContext({});\n\nexport const Form = forwardRef<FormikContextType<any>, FormProps<any>>(\n (\n {\n Confirm,\n enableReinitialize = true,\n initialValues = {},\n validateOnBlur = true,\n validateOnChange = true,\n validateOnMount = true,\n ...props\n },\n ref\n ) => {\n const [isConfirmed, toggleIsConfirmed] = useToggle(false);\n const [showConfirm, toggleShowConfirm] = useToggle(false);\n\n const onConfirm = useCallback(() => {\n toggleIsConfirmed(true);\n toggleShowConfirm(false);\n }, []);\n\n const onDismiss = useCallback(() => {\n toggleIsConfirmed(false);\n toggleShowConfirm(false);\n }, []);\n\n /** wrapper around callback to provide validationContext to the yup schema */\n const onValidate = useCallback(\n async values => {\n if (props.validate) {\n return props.validate(values);\n }\n\n try {\n await props.validationSchema.validate(values, {\n abortEarly: false,\n context: {\n ...(props.validationContext || {})\n }\n });\n } catch (e) {\n if (props.onRawErrors) {\n props.onRawErrors(e);\n }\n\n return yupToFormErrors(e);\n }\n },\n [\n props.onRawErrors,\n props.validate,\n props.validationContext,\n props.validationSchema\n ]\n );\n\n const onReset = useCallback(\n (values, ctx) => {\n if (Confirm && isConfirmed) {\n toggleIsConfirmed(false);\n }\n\n if (props.onReset) {\n return props.onReset(values, ctx);\n }\n },\n [Confirm, isConfirmed, props.onReset]\n );\n\n const onSubmit = useCallback(\n async (values, ctx) => {\n if (!isConfirmed && Confirm) {\n toggleShowConfirm(true);\n ctx.setSubmitting(false);\n return;\n }\n\n const result = props.onSubmit\n ? await props.onSubmit(values, ctx)\n : undefined;\n\n toggleIsConfirmed(false);\n\n return result;\n },\n [Confirm, isConfirmed, props.onSubmit]\n );\n\n const isRequiredFieldValue = useMemo(() => {\n if (!props.validationSchema) {\n return {};\n }\n\n const fields = props.validationSchema.describe().fields ?? {};\n\n return Object.keys(fields).reduce(\n (acc, field) => ({\n ...acc,\n [field]: !!getIn(fields, field)?.tests?.find(\n test => test.name === 'required'\n )\n }),\n {}\n );\n }, []);\n\n const ariaLabel = props['aria-label'];\n const ariaLabelledBy = props['aria-labelledby'];\n\n return (\n <IsRequiredFieldContext.Provider value={isRequiredFieldValue}>\n <Formik\n autoComplete={props.autoComplete}\n enableReinitialize={enableReinitialize}\n initialTouched={props.initialTouched}\n initialValues={initialValues}\n innerRef={ref as any}\n onReset={onReset}\n onSubmit={onSubmit}\n validate={onValidate}\n validateOnBlur={validateOnBlur}\n validateOnChange={validateOnChange}\n validateOnMount={validateOnMount}>\n <FormikForm\n {...(ariaLabel ? { 'aria-label': ariaLabel } : {})}\n {...(ariaLabelledBy ? { 'aria-labelledby': ariaLabel } : {})}\n {...pick(props, ['className'])}\n autoComplete={props.autoComplete}\n data-component={props['data-component'] || 'Form'}\n data-testid={props['data-testid']}>\n {props.children}\n {Confirm && (\n <FormConfirm\n Confirm={Confirm}\n confirm={onConfirm}\n dismiss={onDismiss}\n isConfirmed={isConfirmed}\n open={showConfirm}\n />\n )}\n {props.onValidation && (\n <FormValidationHandler onValidation={props.onValidation} />\n )}\n {props.onChange && (\n <FormChangeHandler\n onChange={props.onChange}\n preventOnChangeOnMount={props.preventOnChangeOnMount}\n />\n )}\n {props.onErrors && <FormErrorHandler onErrors={props.onErrors} />}\n <FormValidationSchemaChanged\n validationSchema={props.validationSchema}\n />\n </FormikForm>\n </Formik>\n </IsRequiredFieldContext.Provider>\n );\n }\n);\n\nexport type FormErrorsProps = {\n renderPlaceholder?: ReactNode | true;\n};\n\nconst StyledAlert = styled(Alert)(({ theme }) => ({\n marginBottom: theme.spacing(4),\n width: 'fit-content'\n}));\n\nexport const FormErrors: FC<FormErrorsProps> = props => {\n const { errors } = useFormikContext<any>();\n\n if (!errors.form && !props.renderPlaceholder) return null;\n\n if (Array.isArray(errors.form)) {\n return (\n <>\n {errors.form.map(error => (\n <StyledAlert {...props} key={error} severity='error'>\n {error}\n </StyledAlert>\n ))}\n </>\n );\n } else if (typeof errors.form === 'string') {\n return (\n <StyledAlert {...props} severity='error'>\n {errors.form}\n </StyledAlert>\n );\n } else if (props.renderPlaceholder === true) {\n return <Box aria-hidden='true' component='span' height={24} />;\n } else {\n // handle generic validation results, e.g. `true` without messaging\n return null;\n }\n};\n\nForm.displayName = 'Form';\n","import { VisibilityOffOutlined, VisibilityOutlined } from '@mui/icons-material';\nimport { IconButton, Input, InputProps, styled } from '@mui/material';\nimport { useCamelCase, useToggle } from '@vestwell-frontend/hooks';\n\nimport { format, parse, parseISO } from 'date-fns';\nimport { pick } from 'lodash';\nimport {\n forwardRef,\n ReactNode,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState\n} from 'react';\nimport {\n NumberFormatBase,\n NumberFormatBaseProps,\n NumericFormat\n} from 'react-number-format';\nimport { useUpdateEffect } from 'react-use';\n\nconst isNumberAllowed =\n ({ min, max }) =>\n input => {\n const isValueDefined = typeof input.floatValue === 'number';\n const isMinDefined = typeof min === 'number';\n const isMaxDefined = typeof max === 'number';\n\n const isAboveMin =\n !isMinDefined ||\n !isValueDefined ||\n (isMinDefined && isValueDefined && input.floatValue >= min);\n\n const isBelowMax =\n !isMaxDefined ||\n !isValueDefined ||\n (isMaxDefined && isValueDefined && input.floatValue <= max);\n\n return isAboveMin && isBelowMax ? input : false;\n };\n\nexport type TextBoxFormatProps = Omit<\n NumberFormatBaseProps,\n 'onChange' | 'value' | 'format'\n> & {\n dateMask?: 'MM/dd/yyyy' | 'MM/yyyy';\n dateInputFormat?: 'yyyy-MM-dd' | 'MM/dd/yyyy' | 'MM/yyyy';\n format?:\n | 'currencyUs'\n | 'date'\n | 'dateShort'\n | 'ein'\n | 'number'\n | 'numericString'\n | 'phoneUs'\n | 'percent'\n | 'routing'\n | 'ssn'\n | 'zip';\n precision?: number;\n onChange?(value): void;\n suffix?: string;\n value?: string;\n};\n\ntype MaskOptions = NumberFormatBaseProps & {\n allowEmptyFormatting?: boolean;\n expectFormattedValue?: boolean;\n expectNumericValue?: boolean;\n formatChangeValue?(value: string): string;\n formatPasteValue?(value: string): string;\n formatDisplayValue?(value: string): string;\n reformatOnBlur?(value: string): string;\n};\n\ntype Masks = Record<\n TextBoxFormatProps['format'],\n (options: {\n dateMask?: string;\n dateInputFormat?: string;\n max?: string | number | Date;\n min?: string | number | Date;\n precision?: number;\n suffix?: string;\n }) => MaskOptions\n>;\n\nexport const maskProps: Masks = {\n currencyUs: ({ min, max, precision }) => ({\n allowEmptyFormatting: false,\n allowLeadingZeros: false,\n allowNegative: ((min || 0) as number) < 0,\n decimalScale: precision || 0,\n expectNumericValue: true,\n isAllowed: isNumberAllowed({\n max,\n min: min || 0\n }),\n prefix: '$',\n thousandSeparator: true\n }),\n date: ({ dateMask, dateInputFormat }) => ({\n allowEmptyFormatting: false,\n expectFormattedValue: true,\n format: value => {\n return value\n .replace(/\\D/g, '')\n .replace(/^(\\d{2})(\\d{1,2})/, '$1/$2')\n .replace(/^(\\d{2})\\/(\\d{2})(.+)/, '$1/$2/$3')\n .substring(0, 10);\n },\n formatChangeValue: value => {\n try {\n return value.length < dateInputFormat.length\n ? value\n : format(new Date(value), dateInputFormat);\n } catch {\n return value.length === dateInputFormat.length ? value : '';\n }\n },\n formatDisplayValue: value => {\n try {\n return format(\n parse(value, dateInputFormat, new Date()) as any,\n dateMask\n );\n } catch {\n return '';\n }\n },\n formatPasteValue: value => {\n try {\n return format(\n parseISO(new Date(value).toISOString().replace('Z', '')),\n dateMask\n );\n } catch {\n return value;\n }\n },\n mask: '',\n placeholder: dateMask.toUpperCase()\n }),\n dateShort: () => ({\n allowEmptyFormatting: false,\n expectFormattedValue: true,\n format: value => {\n return value\n .replace(/\\D/g, '')\n .replace(/^(\\d{2})(\\d{1,2})/, '$1/$2')\n .substring(0, 5);\n }\n }),\n ein: () => ({\n allowEmptyFormatting: false,\n expectFormattedValue: true,\n format: value => {\n return value\n .replace(/\\D/g, '')\n .replace(/^(\\d{2})(\\d{1,7})/, '$1-$2')\n .substring(0, 10);\n },\n mask: '',\n placeholder: '##-#######'\n }),\n number: ({ min, max, precision }) => ({\n allowEmptyFormatting: false,\n allowLeadingZeros: false,\n allowNegative: ((min || 0) as number) < 0,\n decimalScale: precision || 0,\n expectNumericValue: true,\n isAllowed: isNumberAllowed({\n max,\n min: min || 0\n }),\n thousandSeparator: true\n }),\n numericString: ({ min, max }) => ({\n allowEmptyFormatting: false,\n allowLeadingZeros: true,\n allowNegative: ((min || 0) as number) < 0,\n decimalScale: 0,\n expectNumericValue: false,\n isAllowed: isNumberAllowed({\n max,\n min: min || 0\n }),\n thousandSeparator: false\n }),\n percent: ({ min, max, precision, suffix }) => ({\n allowEmptyFormatting: false,\n allowLeadingZeros: false,\n allowNegative: ((min || 0) as number) < 0,\n decimalScale: precision || 0,\n expectNumericValue: true,\n isAllowed: isNumberAllowed({\n max: max || 100,\n min: min || 0\n }),\n suffix: suffix || '%'\n }),\n phoneUs: () => ({\n allowEmptyFormatting: false,\n expectFormattedValue: true,\n format: value => {\n return value\n .replace(/\\D/g, '')\n .replace(/^(\\d{3})(\\d{1,2})/, '$1-$2')\n .replace(/^(\\d{3})-(\\d{3})(.+)/, '$1-$2-$3')\n .substring(0, 12);\n },\n mask: '',\n placeholder: '###-###-####'\n }),\n routing: () => ({\n allowEmptyFormatting: false,\n expectFormattedValue: true,\n format: value => {\n return value.replace(/\\D/g, '').substring(0, 9);\n },\n mask: '',\n placeholder: '#########'\n }),\n ssn: () => ({\n allowEmptyFormatting: false,\n expectFormattedValue: true,\n format: value => {\n return value\n .replace(/\\D/g, '')\n .replace(/^(\\d{3})(\\d{1,2})/, '$1-$2')\n .replace(/^(\\d{3})-(\\d{2})(.+)/, '$1-$2-$3')\n .substring(0, 11);\n },\n mask: '',\n placeholder: '###-##-####'\n }),\n zip: () => ({\n allowEmptyFormatting: false,\n expectFormattedValue: true,\n format: value => {\n return (value || '').length > 5\n ? value.substring(0, 5) + '-' + value.substring(5)\n : value;\n },\n isAllowed: input => {\n if (\n !(\n typeof input.formattedValue === 'string' &&\n input.formattedValue !== ''\n )\n ) {\n return true;\n }\n\n return (\n input.formattedValue.length >= 0 && input.formattedValue.length <= 10\n );\n },\n placeholder: '#####-####',\n reformatOnBlur: value => {\n if (value === '' || value === undefined) {\n return '';\n }\n\n if (value?.length >= 5 && value?.length < 10) {\n return value.substring(0, 5);\n }\n\n if (value?.length >= 0 && value?.length > 10) {\n return value.substring(0, 10);\n }\n\n return value;\n }\n })\n};\n\nexport const TextBoxFormat = forwardRef<HTMLInputElement, TextBoxFormatProps>(\n (\n {\n dateMask = 'MM/dd/yyyy',\n dateInputFormat = 'yyyy-MM-dd',\n format,\n onChange,\n min,\n max,\n precision,\n placeholder,\n ...props\n },\n ref\n ) => {\n const {\n allowEmptyFormatting,\n expectFormattedValue,\n expectNumericValue,\n formatChangeValue,\n formatDisplayValue,\n formatPasteValue,\n reformatOnBlur,\n ...inputProps\n } = useMemo<MaskOptions>(\n () =>\n maskProps[format]({\n dateInputFormat,\n dateMask,\n max,\n min,\n precision,\n suffix: props.suffix\n }),\n [dateInputFormat, dateMask, format, max, min, precision, props.suffix]\n );\n\n const isDate = format === 'date';\n\n const [isFocused, toggleIsFocused] = useToggle(false);\n\n const [textValue, setTextValue] = useState(() =>\n formatDisplayValue\n ? formatDisplayValue(props.value?.toString())\n : [null, undefined, ''].includes(props.value?.toString())\n ? ''\n : props.value\n );\n\n const onBlur = useCallback(\n e => {\n if (reformatOnBlur) {\n setTextValue(() => reformatOnBlur(e.target.value));\n }\n\n toggleIsFocused();\n\n if (props.onBlur) {\n props.onBlur(e);\n }\n },\n [props.onBlur, reformatOnBlur]\n );\n\n const onFocus = useCallback(\n e => {\n toggleIsFocused();\n\n if (props.onFocus) {\n props.onFocus(e);\n }\n },\n [props.onFocus]\n );\n\n const onPaste = useCallback(\n e => {\n e.stopPropagation();\n /** prevent duplication of value */\n e.preventDefault();\n setTextValue(formatPasteValue(e.clipboardData.getData('text')));\n },\n [formatPasteValue]\n );\n\n /** update the textValue when changes occur */\n const onValueChange = useCallback(\n event => {\n setTextValue(\n () =>\n event[\n expectFormattedValue\n ? 'formattedValue'\n : expectNumericValue\n ? 'floatValue'\n : 'value'\n ]\n );\n },\n [expectFormattedValue, expectNumericValue]\n );\n\n const Component = useMemo(\n () =>\n ['currencyUs', 'number', 'numericString', 'percent'].includes(format)\n ? NumericFormat\n : NumberFormatBase,\n [format]\n );\n\n useUpdateEffect(() => {\n onChange(\n expectNumericValue && textValue === ''\n ? null\n : formatChangeValue\n ? formatChangeValue(textValue)\n : textValue\n );\n }, [textValue]);\n\n /** update textValue whenever props.value is changed (external) */\n useUpdateEffect(() => {\n if (!isFocused) {\n const value = [null, undefined, ''].includes(props.value)\n ? ''\n : props.value;\n\n setTextValue(() =>\n formatDisplayValue ? formatDisplayValue(value) : value\n );\n }\n }, [props.value, isDate, dateMask]);\n\n return (\n <Component\n data-raw-value={props.value}\n {...props}\n {...inputProps}\n getInputRef={ref}\n onBlur={onBlur}\n onFocus={onFocus}\n onPaste={formatPasteValue ? onPaste : undefined}\n onValueChange={onValueChange}\n placeholder={placeholder || inputProps.placeholder}\n value={textValue}\n valueIsNumericString={\n typeof props.value === 'string' && /^\\d*\\.?\\d*$/.test(textValue)\n }\n />\n );\n }\n);\n\nTextBoxFormat.displayName = 'TextBoxFormat';\n\nexport type TextBoxProps = Omit<TextBoxFormatProps, 'format'> & {\n align?: 'center' | 'left' | 'right';\n endAdornment?: ReactNode;\n format?: TextBoxFormatProps['format'] | 'email';\n label?: ReactNode;\n noFocusStyle?: boolean;\n revealable?: boolean;\n variant?: 'small' | 'large';\n width?: number;\n fullWidth?: boolean;\n};\n\nconst StyledInput = styled(Input, {\n shouldForwardProp: prop => prop !== 'align'\n})<InputProps & Pick<TextBoxProps, 'align' | 'variant'>>(props => ({\n '& input': {\n ...(props['data-secure'] && {\n WebkitTextSecurity: 'disc'\n })\n },\n ...(props.variant === 'large' && {\n fontSize: props.theme.spacing(10)\n }),\n textAlign: props.align ? props.align : undefined\n}));\n\nconst StyledIconButton = styled(IconButton)(({ theme }) => ({\n marginRight: theme.spacing(2),\n padding: 0\n}));\n\nexport const TextBox = forwardRef<HTMLInputElement, TextBoxProps>(\n (\n {\n align,\n autoComplete = 'off',\n autoFocus = false,\n disabled,\n endAdornment,\n fullWidth,\n label,\n noFocusStyle = false,\n readOnly,\n required,\n revealable = false,\n type = 'text',\n variant = 'small',\n width,\n ...props\n },\n ref\n ) => {\n const testId = useCamelCase(props.name);\n\n const [reveal, toggleReveal] = useToggle(false);\n\n const $input = useRef(null);\n\n useImperativeHandle(ref, () => $input.current);\n\n useEffect(() => {\n const timeout = setTimeout(() => {\n if (autoFocus) {\n $input.current.focus();\n $input.current.select();\n }\n }, 10);\n\n return () => {\n clearTimeout(timeout);\n };\n }, []);\n\n const onPaste = useCallback(\n e => {\n if (props.onPaste) {\n return props.onPaste(e);\n }\n\n e.stopPropagation();\n e.preventDefault();\n\n props.onChange(e.clipboardData.getData('text').trim());\n },\n [props.onChange, props.onPaste]\n );\n\n const isMask = props.format && props.format !== 'email';\n\n return (\n <StyledInput\n {...pick(props, 'className')}\n align={align}\n data-no-focus-style={noFocusStyle}\n data-secure={!!revealable && type !== 'password' && !reveal}\n disabled={!!disabled}\n endAdornment={\n revealable ? (\n <StyledIconButton\n aria-label={`${reveal ? 'Hide' : 'Show'}${\n label || props.name ? ` ${label || props.name}` : ''\n }`}\n aria-pressed={reveal}\n data-component='textFieldRevealButton'\n data-testid={testId}\n onClick={toggleReveal}\n onMouseDown={toggleReveal}>\n {reveal ? (\n <VisibilityOffOutlined fontSize='small' />\n ) : (\n <VisibilityOutlined fontSize='small' />\n )}\n </StyledIconButton>\n ) : (\n endAdornment\n )\n }\n fullWidth={fullWidth}\n inputComponent={isMask ? (TextBoxFormat as any) : undefined}\n inputProps={{\n ...props,\n 'aria-disabled': !!disabled,\n 'aria-live': 'polite',\n 'aria-required': !!required,\n autoComplete:\n props.name === 'password'\n ? reveal\n ? 'off'\n : autoComplete\n : autoComplete,\n autoFocus,\n 'data-component': 'textFieldInput',\n 'data-testid': testId,\n onChange: isMask\n ? props.onChange\n : //@ts-expect-error\n e => props.onChange(e.target.value),\n onPaste: props.format === 'email' ? onPaste : props.onPaste,\n type:\n revealable && type === 'password'\n ? reveal\n ? 'text'\n : 'password'\n : type\n }}\n inputRef={$input}\n readOnly={readOnly}\n required={!!required}\n sx={theme => ({\n width: width ? theme.spacing(width) : undefined\n })}\n value={props.value ?? ''}\n variant={variant}\n />\n );\n }\n);\n\nTextBox.displayName = 'TextBox';\n","import { InfoOutlined } from '@mui/icons-material';\nimport {\n IconButton,\n Tooltip as MuiTooltip,\n TooltipProps as MuiTooltipProps\n} from '@mui/material';\nimport { IconButtonProps } from '@mui/material/IconButton/IconButton';\n\nimport { FC, ReactNode } from 'react';\n\nexport type IconTooltipProps = IconButtonProps & {\n 'aria-label'?: MuiTooltipProps['aria-label'];\n arrow?: MuiTooltipProps['arrow'];\n children?: ReactNode;\n id?: string;\n onClick?: MuiTooltipProps['onClick'];\n placement?: MuiTooltipProps['placement'];\n title?: MuiTooltipProps['title'];\n trigger?: ReactNode;\n ml?: number;\n};\n\nexport const IconTooltip: FC<IconTooltipProps> = ({\n ['aria-label']: ariaLabel,\n arrow = true,\n children,\n onClick,\n placement,\n title,\n trigger = <InfoOutlined color='primary' fontSize='small' />,\n ml,\n ...props\n}) => {\n return (\n <MuiTooltip\n aria-label={ariaLabel ?? 'More Info'}\n arrow={arrow}\n componentsProps={{\n popper: {\n // @ts-expect-error - problems with types\n 'data-testid': props['data-testid']\n }\n }}\n describeChild\n enterTouchDelay={0}\n onClick={onClick}\n placement={placement}\n title={title || children}>\n <IconButton\n {...props}\n size='small'\n sx={{\n ml: ml ?? 1\n }}>\n {trigger}\n </IconButton>\n </MuiTooltip>\n );\n};\n","import { LockOutlined } from '@mui/icons-material';\nimport {\n FormControlLabelProps,\n InputLabel,\n SelectProps,\n Stack,\n styled\n} from '@mui/material';\nimport { useCamelCase } from '@vestwell-frontend/hooks';\n\nimport { FC, ReactNode } from 'react';\nimport { useToggle } from 'react-use';\n\nimport { IconTooltip } from '../IconTooltip';\nimport { Modal } from '../Modal';\nimport { ModalBody } from '../ModalBody';\n\nconst Details = styled('p')(({ theme }) => ({\n color: theme.palette.grey300.main,\n fontSize: '.875rem',\n lineHeight: 1.625,\n maxWidth: '39.9375em'\n}));\n\nexport type FormFieldLabelProps = {\n 'data-component': string;\n info?: ReactNode;\n infoId?: string;\n details?: ReactNode;\n detailsId?: string;\n disabled?: SelectProps['disabled'];\n disabledId?: string;\n label: FormControlLabelProps['label'];\n labelId?: SelectProps['labelId'];\n helpModal?: ReactNode;\n helpModalId?: string;\n hideLabel?: boolean;\n hideLocked?: boolean;\n name: SelectProps['name'];\n required?: SelectProps['required'];\n};\n\nconst StyledInputLabel = styled(InputLabel)`\n pointer-events: all !important;\n`;\n\nexport const FormFieldLabel: FC<FormFieldLabelProps> = props => {\n const [isModalOpen, toggleIsModalOpen] = useToggle(false);\n\n const testIdName = useCamelCase(props.name);\n\n return !props.label || props.hideLabel ? (\n <label\n className='sr-only'\n data-component={props['data-component']}\n data-testid={testIdName}\n id={props.labelId}>\n {props.label || props.name}\n </label>\n ) : (\n <Stack>\n <Stack alignItems='center' direction='row'>\n <StyledInputLabel\n data-component={props['data-component']}\n data-testid={testIdName}\n disabled={props.disabled}\n id={props.labelId}\n required={!!props.required}\n shrink={false}>\n {props.label}\n </StyledInputLabel>\n {props.disabled && !props.hideLocked && (\n <IconTooltip\n aria-label='Disabled'\n data-component={`${props['data-component']}Disabled`}\n data-testid={testIdName}\n id={props.disabledId}\n trigger={<LockOutlined fontSize='small' />}\n />\n )}\n {props.info && (\n <IconTooltip\n aria-label={`More Info On ${props.label}`}\n data-component={`${props['data-component']}Info`}\n data-testid={testIdName}\n id={props.infoId}>\n {props.info}\n </IconTooltip>\n )}\n {props.helpModal && (\n <>\n <IconTooltip\n aria-label={`Info for ${props.label}`}\n data-component={`${props['data-component']}InfoModal`}\n data-testid={testIdName}\n id={props.helpModalId}\n onClick={toggleIsModalOpen}\n />\n <Modal\n aria-labelledby={props.helpModalId}\n closeButton\n isOpen={isModalOpen}\n onRequestClose={toggleIsModalOpen}>\n <ModalBody>{props.helpModal}</ModalBody>\n </Modal>\n </>\n )}\n </Stack>\n {props.details && (\n <Details\n data-component={`${props['data-component']}Details`}\n data-testid={testIdName}\n id={props.detailsId}>\n {props.details}\n </Details>\n )}\n </Stack>\n );\n};\n\nFormFieldLabel.displayName = 'FormFieldLabel';\n","import { InfoOutlined } from '@mui/icons-material';\nimport { FormControl, FormHelperText, Stack, styled } from '@mui/material';\nimport { useCamelCase } from '@vestwell-frontend/hooks';\n\nimport { FieldValidator, useField } from 'formik';\nimport { FC, ReactNode, useCallback, useContext, useId } from 'react';\n\nimport { TextBox, TextBoxProps } from '../TextBox';\nimport { IsRequiredFieldContext } from './Form';\nimport { FormFieldLabel } from './FormFieldLabel';\n\nexport type FormFieldProps = TextBoxProps & {\n details?: ReactNode;\n disabled?: boolean;\n help?: string | ReactNode;\n helpModal?: ReactNode;\n hideError?: boolean;\n hideLabel?: boolean;\n hideLocked?: boolean;\n label?: string;\n revealable?: boolean;\n validate?: FieldValidator;\n};\n\nconst StyledFormControl = styled(FormControl)(() => ({\n display: 'flex'\n}));\n\nconst StyledFormHelperText = styled(FormHelperText)(() => ({\n marginLeft: 0,\n marginRight: 0\n}));\n\nexport const FormField: FC<FormFieldProps> = ({\n align,\n 'aria-describedby': ariaDescribedBy,\n 'aria-labelledby': ariaLabelledBy,\n details,\n disabled,\n endAdornment,\n fullWidth,\n helpModal,\n hideLabel,\n hideLocked,\n hideError,\n help,\n label,\n readOnly,\n width,\n ...props\n}) => {\n const isRequired = useContext(IsRequiredFieldContext)[props.name] ?? false;\n\n const testId = useCamelCase(props.name);\n\n const [field, meta, helpers] = useField({\n name: props.name,\n validate: props.validate\n });\n\n const detailsId = useId();\n const disabledId = useId();\n const helpModalId = useId();\n const errorId = useId();\n const infoId = useId();\n const labelId = useId();\n\n const errorMessage = meta.touched ? meta.error : undefined;\n\n const describedBy =\n `${ariaDescribedBy ? `${ariaDescribedBy} ` : ''}${\n disabled ? `${disabledId} ` : ''\n }${help ? `${infoId} ` : ''}${helpModal ? `${helpModalId} ` : ''}${\n details ? `${detailsId} ` : ''\n }${errorMessage ? `${errorId} ` : ''}`.trimEnd() || undefined;\n\n const onChange = useCallback(\n value => {\n helpers.setValue(value);\n\n if (props.onChange) {\n props.onChange(value);\n }\n },\n [helpers.setValue, props.onChange]\n );\n\n return (\n <StyledFormControl\n data-component='textField'\n data-testid={testId}\n error={!!meta.error && !!meta.touched}\n required={!!isRequired}>\n <FormFieldLabel\n data-component='textFieldLabel'\n details={details}\n detailsId={detailsId}\n disabled={disabled}\n disabledId={disabledId}\n helpModal={helpModal}\n helpModalId={helpModalId}\n hideLabel={hideLabel}\n hideLocked={hideLocked}\n info={help}\n infoId={infoId}\n label={label}\n labelId={labelId}\n name={props.name}\n required={!!isRequired}\n />\n <TextBox\n {...props}\n align={align}\n aria-describedby={describedBy}\n aria-invalid={!!meta.error && !!meta.touched}\n aria-labelledby={`${\n ariaLabelledBy ? `${ariaLabelledBy} ` : ''\n }${labelId}`}\n disabled={disabled}\n endAdornment={endAdornment}\n fullWidth={fullWidth}\n id={props.id || props.name}\n label={label}\n onBlur={props.onBlur || field.onBlur}\n onChange={onChange}\n readOnly={readOnly}\n required={isRequired}\n value={field.value ?? ''}\n width={width}\n />\n <StyledFormHelperText\n aria-atomic='true'\n data-component='textFieldError'\n data-testid={testId}\n id={errorId}\n role='alert'>\n {!hideError && errorMessage ? (\n <Stack alignItems='center' direction='row' gap={1}>\n <InfoOutlined color='error' fontSize='small' />\n {!!label && <span className='sr-only'>Error for {label}:</span>}\n {errorMessage}\n </Stack>\n ) : (\n ' '\n )}\n </StyledFormHelperText>\n </StyledFormControl>\n );\n};\n\nFormField.displayName = 'FormField';\n","export const routes = {\n ACCOUNT_ACCESS_ISSUE: '/sso/missing-account',\n ACCOUNT_LOCKED: '/locked',\n ACCOUNT_SETUP: '/setup/account',\n AUTHORIZATION: '/authorization',\n AUTH_REDIRECTING_PAGE_MOBILE: '/auth/index.html',\n EMPLOYER_REGISTRATION: '/register/employer',\n FORGOT_PASSWORD: '/password/forgot',\n LOGIN_AND_SECURITY: '/login-and-security',\n LOGIN_VERIFICATION: '/auth/api/v1/login/verification',\n LOGOUT: '/logout',\n MFA_NUDGE: '/mfa',\n MFA_VERIFICATION: '/verification',\n PERSONAS: '/personas',\n PLATFORM_SELECTION: '/platform',\n REGISTRATION: '/register',\n RESET_PASSWORD: '/password/reset',\n RESET_PASSWORD_EXPIRED: '/password/reset-expired',\n SIGN_IN: '/'\n} as const;\n","import { Alert, styled } from '@mui/material';\n\nimport { useFormikContext } from 'formik';\nimport React, {\n forwardRef,\n ReactNode,\n useCallback,\n useEffect,\n useState\n} from 'react';\n\nimport { Button, ButtonProps } from '../Button';\n\nexport type FormSaveButtonProps = ButtonProps & {\n 'data-component'?: string;\n ensureDirty?: boolean;\n serverError?: ReactNode;\n};\n\nconst StyledAlert = styled(Alert)(() => ({\n width: 'fit-content'\n}));\n\nexport const FormSaveButton = forwardRef<\n HTMLButtonElement,\n FormSaveButtonProps\n>(\n (\n { children = 'Save', ensureDirty, serverError, type = 'submit', ...props },\n ref\n ) => {\n const ctx = useFormikContext<any>();\n\n if (!ctx) {\n throw new Error('FormSaveButton must be used inside a Formik context');\n }\n\n const [isDisabled, setDisabled] = useState(true);\n\n useEffect(() => {\n setDisabled(\n props.disabled ||\n ctx.isSubmitting ||\n !ctx.isValid ||\n (ctx.status === 'error' && !ctx.dirty) ||\n (ensureDirty && !ctx.dirty)\n );\n }, [\n ctx.dirty,\n ctx.isSubmitting,\n ctx.isValid,\n ctx.status,\n ensureDirty,\n props.disabled\n ]);\n\n const handleClick = useCallback(\n e => {\n ctx.handleSubmit(e);\n },\n [ctx.handleSubmit]\n );\n\n return (\n <>\n <Button\n {...props}\n data-component={props['data-component'] || 'formSubmitButton'}\n data-disabled={isDisabled}\n data-error={ctx.status === 'error'}\n data-is-dirty={ctx.dirty}\n data-is-valid={ctx.isValid}\n data-status={ctx.status}\n data-submitting={ctx.isSubmitting}\n disabled={isDisabled}\n loading={props.loading || ctx.isSubmitting}\n onClick={handleClick}\n ref={ref}\n type={type}>\n {children}\n </Button>\n {serverError && (\n <StyledAlert severity='error'>{serverError}</StyledAlert>\n )}\n </>\n );\n }\n);\n\nFormSaveButton.displayName = 'FormSaveButton';\n","import { styled } from '@mui/material';\nimport { FormSaveButton, FormSaveButtonProps } from '@vestwell-frontend/ui';\n\nimport { FC } from 'react';\n\nconst StyledFormSaveButton = styled(FormSaveButton)(({ theme }) => ({\n margin: theme.spacing(8, 0)\n}));\n\nexport const SubmitButton: FC<FormSaveButtonProps> = props => {\n return <StyledFormSaveButton fullWidth {...props} />;\n};\n\nSubmitButton.displayName = 'SubmitButton';\n","import { Alert, Grid2, styled } from '@mui/material';\nimport { usePostMfaVerify } from '@sentinel/hooks';\nimport { useAuth } from '@vestwell-frontend/elements';\nimport { Form, FormField, Text } from '@vestwell-frontend/ui';\n\nimport { FC, memo, useCallback } from 'react';\nimport * as yup from 'yup';\n\nimport { routes } from '../router/routes';\nimport { SubmitButton } from './SubmitButton';\n\nconst StyledFormFieldContainer = styled('div')(({ theme }) => ({\n '& > .MuiFormControl-root': {\n marginBottom: theme.spacing(4),\n width: theme.spacing(50)\n }\n}));\n\nconst StyledAlert = styled(Alert)(() => ({\n width: 'fit-content'\n}));\n\nconst schema = yup.object().shape({\n appVerification: yup\n .string()\n .min(6, 'Must be at least 6 digits')\n .required('Required')\n});\n\nexport const AppVerification: FC = memo(() => {\n const { setToken } = useAuth();\n\n const postMfaVerify = usePostMfaVerify({\n mutation: {\n onSuccess: data => {\n setToken(data);\n if (data) {\n window.location.replace(\n `${window.location.protocol}//${window.location.host}${routes.LOGIN_VERIFICATION}`\n );\n }\n }\n }\n });\n\n const onSubmit = useCallback(async values => {\n await postMfaVerify.mutateAsync({\n data: { code: values.appVerification, type: 'app' }\n });\n }, []);\n\n return (\n <>\n <Grid2>\n <Text\n align='center'\n data-testid='appVerificationTitle'\n variant='b2'\n width='100%'>\n Verify by Authentication App\n </Text>\n </Grid2>\n <Form\n className='contents'\n onChange={postMfaVerify.reset}\n onSubmit={onSubmit}\n validationSchema={schema}>\n <Grid2\n alignItems='center'\n container\n display='flex'\n flexDirection='column'\n flexGrow={1}\n justifyContent='space-between'>\n <Grid2 size={12}>\n <Text align='center' color='grey100' variant='i1'>\n Enter the 6-digit code generated by your authentication app.\n </Text>\n </Grid2>\n\n <Grid2\n alignItems='center'\n display='flex'\n flexDirection='column'\n flexGrow={1}\n justifyContent='center'\n size={12}>\n <StyledFormFieldContainer>\n <FormField\n align='center'\n autoComplete='one-time-code'\n autoFocus\n disabled={postMfaVerify.error?.message?.startsWith(\n 'Your account has been temporarily locked'\n )}\n format='numericString'\n label='Security Code'\n maxLength={6}\n name='appVerification'\n type='tel'\n variant='large'\n />\n </StyledFormFieldContainer>\n </Grid2>\n {postMfaVerify.error && (\n <StyledAlert severity='error'>\n {postMfaVerify.error.message}\n </StyledAlert>\n )}\n <SubmitButton\n disabled={\n !!postMfaVerify.error?.message?.startsWith(\n 'Your account has been temporarily locked'\n )\n }>\n Continue\n </SubmitButton>\n </Grid2>\n </Form>\n </>\n );\n});\n\nAppVerification.displayName = 'AppVerification';\n","import {\n DetailedHTMLProps,\n FC,\n ImgHTMLAttributes,\n useCallback,\n useState\n} from 'react';\n\nexport type SuspenseImageProps = DetailedHTMLProps<\n ImgHTMLAttributes<HTMLImageElement>,\n HTMLImageElement\n>;\n\nexport const SuspenseImage: FC<SuspenseImageProps> = ({\n alt = '',\n src,\n crossOrigin = null,\n ...rest\n}) => {\n const [imageUrl, setImageUrl] = useState(src || rest['data-defaultsrc']);\n\n const onError = useCallback(() => {\n setImageUrl(rest['data-defaultsrc']);\n }, [rest['data-defaultsrc']]);\n\n return (\n <img\n {...rest}\n alt={alt}\n crossOrigin={crossOrigin}\n onError={onError}\n src={imageUrl}\n />\n );\n};\n","import {\n GetWhiteLabelResDto,\n useGetWhiteLabelUnauthorized\n} from '@portal-middleware/hooks';\n\nimport { createContext, FC, ReactNode, useContext } from 'react';\nimport { createStore, StoreApi, useStore } from 'zustand';\n\ntype Config = GetWhiteLabelResDto;\n\ntype ConfigProviderProps = {\n children: ReactNode;\n};\n\nconst ConfigContext = createContext<StoreApi<Config>>(null);\n\nexport const useConfig = () => {\n const store = useContext(ConfigContext);\n return useStore(store) as Config;\n};\n\nexport const ConfigProvider: FC<ConfigProviderProps> = props => {\n const whitelabel = useGetWhiteLabelUnauthorized({\n query: {\n keepPreviousData: true,\n useErrorBoundary: true\n }\n });\n\n const configStore = createStore<Config>()(() => {\n return {\n ...whitelabel.data\n };\n });\n\n return whitelabel.isInitialLoading ? (\n <></>\n ) : (\n <ConfigContext.Provider value={configStore}>\n {props.children}\n </ConfigContext.Provider>\n );\n};\n","import { Card, Stack } from '@mui/material';\nimport { styled } from '@mui/material/styles';\nimport { SuspenseImage } from '@vestwell-frontend/ui';\n\nimport { FC, ReactNode } from 'react';\n\nimport { useConfig } from '../contexts';\n\nconst StyledCard = styled(Card, {\n shouldForwardProp: propName => propName !== 'isLogo'\n})<{ isLogo: boolean }>(({ theme, isLogo }) => ({\n alignItems: 'center',\n borderRadius: theme.spacing(1),\n borderTopColor: theme.palette.primary.main,\n borderTopWidth: theme.spacing(0.75),\n display: 'flex',\n flexDirection: 'column',\n minHeight: isLogo ? theme.spacing(152.5) : theme.spacing(132.5),\n [theme.breakpoints.down('sm')]: {\n width: '100%'\n },\n [theme.breakpoints.up('sm')]: {\n marginTop: isLogo ? '20%' : undefined,\n width: theme.spacing(110)\n }\n}));\n\nconst StyledSuspenseImage = styled(SuspenseImage)(({ theme }) => ({\n height: theme.spacing(12),\n marginTop: theme.spacing(8)\n}));\n\nexport const BackgroundCard: FC<{ children?: ReactNode }> = props => {\n const config = useConfig();\n\n return (\n <StyledCard isLogo={!!config.login?.logo}>\n {!!config.login?.logo && (\n <StyledSuspenseImage\n alt={`${\n ['connect', 'signin'].includes(config.subdomain)\n ? 'vestwell'\n : config.subdomain\n } logo`}\n data-component='logo'\n // todo:: remove after updating in db\n src={config.login.logo\n .replace('/clients/login/logos', '/login')\n .replace('.png', '.webp')}\n />\n )}\n <Stack alignItems='center' data-component='content' py={8} width='100%'>\n {props.children}\n </Stack>\n </StyledCard>\n );\n};\n\nBackgroundCard.displayName = 'BackgroundCard';\n","import { styled } from '@mui/material/styles';\nimport { SuspenseImage } from '@vestwell-frontend/ui';\n\nimport { FC } from 'react';\n\nimport { useConfig } from '../contexts';\n\nconst StyledBanner = styled(SuspenseImage)(({ theme }) => ({\n [theme.breakpoints.up('sm')]: {\n alignSelf: 'center',\n borderBottomLeftRadius: theme.spacing(2.5),\n borderBottomRightRadius: theme.spacing(2.5),\n maxWidth: theme.spacing(360),\n position: 'fixed',\n top: 0,\n zIndex: -1\n }\n}));\n\nexport const Banner: FC = () => {\n const config = useConfig();\n\n // todo:: update db entries path & extension\n return (\n !!config.login?.banner && (\n <StyledBanner\n data-component='banner'\n src={config.login.banner\n .replace('/clients/login', '')\n .replace('.png', '.webp')}\n />\n )\n );\n};\n\nBanner.displayName = 'Banner';\n","import { maskEmail } from '@vestwell-frontend/helpers';\n\nimport { FC, useMemo } from 'react';\n\nexport type FormatEmailProps = {\n mask?: boolean;\n showPlaceholder?: boolean;\n value: string;\n};\n\nexport const FormatEmail: FC<FormatEmailProps> = ({ value = '', ...props }) => {\n const formatted = useMemo(() => {\n return value\n ? props.mask\n ? maskEmail(value)\n : value\n : props.showPlaceholder\n ? '--'\n : '';\n }, [props.showPlaceholder, value]);\n\n return <>{formatted}</>;\n};\n\nFormatEmail.displayName = 'FormatEmail';\n","export const maskAccountNumber = (accountNumber: number | string) => {\n if (!accountNumber) return '';\n\n return accountNumber.toString().length >= 4\n ? `•••••${accountNumber.toString().substr(-4)}`\n : accountNumber;\n};\n\nexport const maskEmail = email => {\n if (!email) return '';\n\n const [username, domain] = email.split('@');\n return username.substring(0, 3) + '••••••@' + domain;\n};\n\nexport const maskPhoneNumber = phoneNumber => {\n if (!phoneNumber) return '';\n\n const prefix = '••• ••• ';\n return prefix + phoneNumber.slice(-4);\n};\n\nexport const maskRoutingNumber = routingNumber => {\n if (!routingNumber) return '';\n\n return routingNumber.replace(/\\d(?=\\d{4})/g, '•');\n};\n","import { Button, ButtonProps } from '@vestwell-frontend/ui';\n\nimport { differenceInSeconds } from 'date-fns';\nimport { useField } from 'formik';\nimport { forwardRef, useCallback, useMemo, useRef, useState } from 'react';\nimport { useInterval, useUnmount } from 'react-use';\nimport { useLocalStorage } from 'usehooks-ts';\n\nimport { MfaSetupState } from '../config/mfaSetup';\n\nexport type ResendOtpButtonProps = ButtonProps & {\n /** name of the input to set the otp value for */\n inputName: string;\n mfaEntryId?: MfaSetupState['mfaEntryId'];\n subType?: MfaSetupState['subType'];\n};\n\nexport const ResendOtpButton = forwardRef<\n HTMLButtonElement,\n ResendOtpButtonProps\n>(({ inputName, mfaEntryId, subType, ...props }, ref) => {\n const initSeconds = 30;\n\n const $abort = useRef<AbortController>(null);\n\n const [, , helpers] = useField(inputName);\n\n const [codeLastSentTime, setCodeLastSentTime] = useLocalStorage(\n 'codeLastSentTime',\n {}\n );\n\n const [seconds, setSeconds] = useState(\n initSeconds -\n differenceInSeconds(\n Date.now(),\n codeLastSentTime?.[mfaEntryId ?? inputName]\n )\n );\n\n const onClick = useCallback(\n async e => {\n setCodeLastSentTime(prevState => ({\n ...prevState,\n [mfaEntryId ?? inputName]: Date.now()\n }));\n\n await props.onClick(e);\n\n setSeconds(initSeconds);\n\n /** if it's an android device, listen for the sms credentials */\n //@ts-expect-error: Move it out from zendesk\n if (window?.OTPCredentials) {\n if ($abort.current) {\n $abort.current.abort();\n }\n\n $abort.current = new AbortController();\n\n const sms = await (navigator.credentials\n .get({\n //@ts-expect-error: Move it out from zendesk\n otp: {\n signal: $abort.current.signal,\n transport: ['sms']\n }\n })\n .catch(() =>\n Promise.resolve({\n code: null\n })\n ) as Promise<{ code?: string }>);\n\n $abort.current = null;\n\n if (sms?.code) {\n helpers.setValue(sms.code);\n }\n }\n },\n [initSeconds, props.onClick]\n );\n\n const isDisabled = useMemo(\n () => seconds > 0 && seconds <= initSeconds,\n [seconds, initSeconds]\n );\n\n useInterval(\n () => {\n setSeconds(prev => prev - 1);\n },\n seconds !== 0 ? 1000 : null\n );\n\n useUnmount(() => {\n if ($abort.current) {\n $abort.current.abort();\n $abort.current = null;\n }\n });\n\n return (\n <Button\n {...props}\n data-testid='resend'\n disabled={isDisabled || props.disabled}\n onClick={onClick}\n ref={ref}>\n {subType === 'voice' ? 'Call again?' : 'Resend Code'}\n <span data-wg-notranslate>\n {seconds > 0 && seconds <= initSeconds && ` (${seconds}s)`}\n </span>\n </Button>\n );\n});\n\nResendOtpButton.displayName = 'ResendOtpButton';\n","import { Alert, Grid2, styled } from '@mui/material';\nimport {\n GetMfaMethodsResDto,\n usePostMfaSend,\n usePostMfaVerify\n} from '@sentinel/hooks';\nimport { useAuth } from '@vestwell-frontend/elements';\nimport { Form, FormatEmail, FormField, Text } from '@vestwell-frontend/ui';\n\nimport { FC, memo, useCallback } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { useUpdateEffect } from 'react-use';\nimport { useLocalStorage } from 'usehooks-ts';\nimport * as yup from 'yup';\n\nimport { routes } from '../router/routes';\nimport { ResendOtpButton } from './ResendOtpButton';\nimport { SubmitButton } from './SubmitButton';\n\nconst StyledFormFieldContainer = styled('div')(({ theme }) => ({\n '& > .MuiFormControl-root': {\n marginBottom: theme.spacing(4),\n width: theme.spacing(50)\n }\n}));\n\nconst StyledResendOtpButton = styled(ResendOtpButton)(({ theme }) => ({\n marginBottom: theme.spacing(2),\n marginTop: theme.spacing(4)\n}));\n\nconst StyledAlert = styled(Alert)({\n width: 'fit-content'\n});\n\nexport type EmailVerificationProps = {\n email: Partial<GetMfaMethodsResDto>;\n};\n\nconst schema = yup.object().shape({\n emailVerification: yup\n .string()\n .min(6, 'Must be at least 6 digits')\n .required('Required')\n});\n\nexport const EmailVerification: FC<EmailVerificationProps> = memo(props => {\n const { setToken } = useAuth();\n\n const navigate = useNavigate();\n\n const postMfaSend = usePostMfaSend();\n\n const postMfaVerify = usePostMfaVerify({\n mutation: {\n onSuccess: data => {\n setToken(data);\n }\n }\n });\n\n const [, setCodeLastSentTime] = useLocalStorage('codeLastSentTime', {});\n\n const onSubmit = useCallback(\n async values => {\n await postMfaVerify.mutateAsync({\n data: {\n code: values.emailVerification,\n mfaEntryId: props.email.mfaEntryId,\n type: 'email'\n }\n });\n },\n [props.email.mfaEntryId]\n );\n\n const onResendCode = useCallback(async () => {\n const res = await postMfaSend.mutateAsync({\n data: { mfaEntryId: props.email.mfaEntryId, type: 'email' }\n });\n setCodeLastSentTime(prevState => ({\n ...prevState,\n [props.email.mfaEntryId]: Date.now()\n }));\n console.log(res.code);\n }, [props.email.mfaEntryId]);\n\n const isLoginDisabled = postMfaVerify.error?.message?.startsWith(\n 'Your account has been temporarily locked'\n );\n\n useUpdateEffect(() => {\n if (postMfaVerify.data) {\n navigate(routes.PERSONAS);\n }\n }, [postMfaVerify.data]);\n\n return (\n <>\n <Grid2>\n <Text\n align='center'\n data-testid='emailVerificationTitle'\n variant='b2'\n width='100%'>\n Verify Your Email\n </Text>\n </Grid2>\n <Form\n className='contents'\n onChange={postMfaVerify.reset}\n onSubmit={onSubmit}\n validationSchema={schema}>\n <Grid2\n alignItems='center'\n container\n display='flex'\n flexDirection='column'\n flexGrow={1}\n justifyContent='space-between'>\n <Grid2 size={12}>\n <Text align='center' color='grey100' variant='i1'>\n Enter the 6-digit code we have emailed to{' '}\n <FormatEmail value={props.email.value} />\n </Text>\n </Grid2>\n\n <Grid2\n alignItems='center'\n display='flex'\n flexDirection='column'\n flexGrow={1}\n justifyContent='center'\n size={12}>\n <StyledFormFieldContainer>\n <FormField\n align='center'\n autoComplete='one-time-code'\n autoFocus\n disabled={postMfaSend.isLoading || isLoginDisabled}\n format='numericString'\n label='Security Code'\n maxLength={6}\n name='emailVerification'\n type='tel'\n variant='large'\n />\n </StyledFormFieldContainer>\n <StyledResendOtpButton\n disabled={isLoginDisabled}\n inputName='emailVerification'\n mfaEntryId={props.email.mfaEntryId}\n onClick={onResendCode}\n variant='inline'\n />\n </Grid2>\n {postMfaVerify.error && (\n <StyledAlert severity='error'>\n {postMfaVerify.error.message}\n </StyledAlert>\n )}\n <Alert role='note' severity='warning'>\n Email-based two-factor authentication will soon be discontinued.\n Please set up an alternative phone or app-based method via Login &\n Security.\n </Alert>\n <SubmitButton disabled={isLoginDisabled}>Continue</SubmitButton>\n </Grid2>\n </Form>\n </>\n );\n});\n\nEmailVerification.displayName = 'EmailVerification';\n","import { Box, Divider, Stack, styled } from '@mui/material';\nimport { Link, Text } from '@vestwell-frontend/ui';\n\nimport { FC } from 'react';\n\nimport { useConfig } from '../contexts';\n\nconst StyledDivider = styled(Divider)(({ theme }) => ({\n margin: theme.spacing(0, 2)\n}));\n\nexport const Help: FC = () => {\n const config = useConfig();\n if (!config.login?.contacts?.length && !config.login?.resources?.length)\n return null;\n\n return (\n <Stack alignItems='center' my={8} textAlign='center'>\n {!!config.login?.resources?.length && (\n <Stack\n bgcolor={theme => theme.palette.white.main}\n borderRadius={4}\n direction='row'\n justifyContent='center'\n mb={2}\n px={4}\n py={1}\n width='fit-content'>\n {config.login.resources.map((resource, index) => (\n <Stack\n alignItems='center'\n direction='row'\n key={resource.description}>\n <Link external to={resource.url}>\n {resource.description}\n </Link>\n {index !== config.login.resources.length - 1 && (\n <StyledDivider flexItem orientation='vertical' />\n )}\n </Stack>\n ))}\n </Stack>\n )}\n {!!config.login?.contacts?.length && (\n <>\n <Text mb={2} mt={4}>\n Need Help?\n </Text>\n {config.login.contacts.map(contact => (\n <Box\n bgcolor={theme => theme.palette.white.main}\n borderRadius={4}\n key={contact.description}\n mb={2}\n px={4}\n py={1}\n width='fit-content'>\n {contact.description}{' '}\n <Link to={`mailto:${contact.email}`} type='email'>\n {contact.email}\n </Link>{' '}\n or call{' '}\n <Link to={`tel:${contact.phone}`} type='phone'>\n {contact.phone}\n </Link>\n </Box>\n ))}\n </>\n )}\n </Stack>\n );\n};\n\nHelp.displayName = 'Help';\n","import { formatPhoneNumber, maskPhoneNumber } from '@vestwell-frontend/helpers';\n\nimport { FC, useMemo } from 'react';\n\nexport type FormatPhoneNumberProps = {\n mask?: boolean;\n showPlaceholder?: boolean;\n value: string;\n};\n\nexport const FormatPhoneNumber: FC<FormatPhoneNumberProps> = ({\n value = '',\n ...props\n}) => {\n const formatted = useMemo(() => {\n const cleanedValue = value?.toString()?.replace(/-/g, '');\n\n return cleanedValue\n ? props.mask\n ? maskPhoneNumber(cleanedValue)\n : formatPhoneNumber(cleanedValue)\n : props.showPlaceholder\n ? '--'\n : '';\n }, [props.showPlaceholder, value]);\n\n return <>{formatted}</>;\n};\n\nFormatPhoneNumber.displayName = 'FormatPhoneNumber';\n","export function formatPhoneNumber(phoneNumber: string): string {\n if (!phoneNumber) return '';\n\n const digitsOnly = phoneNumber.replace(/\\D/g, '');\n\n return digitsOnly.length === 11\n ? digitsOnly.replace(/(\\d{1})(\\d{3})(\\d{3})(\\d{4})/, '$1-$2-$3-$4')\n : digitsOnly.replace(/(\\d{3})(\\d{3})(\\d{4})/, '$1-$2-$3');\n}\n","import { Divider, Stack, styled, useMediaQuery } from '@mui/material';\nimport { useToggle } from '@vestwell-frontend/hooks';\nimport {\n Button,\n FormatPhoneNumber,\n Link,\n Modal,\n ModalBody,\n ModalFooter,\n Text\n} from '@vestwell-frontend/ui';\n\nimport { FC, memo } from 'react';\n\nimport { useConfig } from '../contexts';\n\nconst StyledText = styled(Text)(({ theme }) => ({\n color: theme.palette.grey50.main,\n margin: theme.spacing(0, 4, 4, 4)\n}));\n\nexport const HelpModal: FC = memo(() => {\n const isMobile = useMediaQuery(theme => theme.breakpoints.down('sm'));\n\n const [isHelpModal, toggleIsHelpModal] = useToggle(false);\n\n const config = useConfig();\n\n return (\n !config.registration?.isState && (\n <>\n <Modal\n header='Need help with authentication?'\n isOpen={isHelpModal}\n onRequestClose={toggleIsHelpModal}>\n <ModalBody>\n <Stack\n direction={isMobile ? 'column' : 'row'}\n divider={<Divider flexItem orientation='vertical' />}\n justifyContent='space-between'>\n {!['jpmorgan'].includes(config.subdomain) && (\n <StyledText component='p' variant='f1'>\n State savers with an IRA, 529, or Able account, please{' '}\n <Link to='https://go.vestwell.com/vss/contact-us'>\n contact support\n </Link>{' '}\n for assistance.\n </StyledText>\n )}\n <StyledText component='p' variant='f1'>\n For retirement savers, plan sponsors, or advisors, please call{' '}\n <Link\n to={`tel:${config.support?.participant?.phone}`}\n type='phone'>\n <FormatPhoneNumber\n value={config.support?.participant?.phone}\n />\n </Link>\n </StyledText>\n </Stack>\n </ModalBody>\n <ModalFooter>\n <Button autoFocus onClick={toggleIsHelpModal} variant='contained'>\n Close\n </Button>\n </ModalFooter>\n </Modal>\n <Button onClick={toggleIsHelpModal} variant='inline'>\n Need help with authentication?\n </Button>\n </>\n )\n );\n});\n\nHelpModal.displayName = 'HelpModal';\n","export const PLACEHOLDER = '--';\n\nexport const EXAMPLE_LONG_PARAGRAPH = `\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Donec aliquet massa nec massa interdum efficitur. Suspendisse vitae quam nulla. Proin sodales odio vitae tortor fermentum aliquet. Aenean dapibus eleifend massa, at maximus mi ornare ac. Nam turpis velit, rhoncus ac ex sed, imperdiet dictum sem. Donec vitae sapien consectetur tortor aliquam vulputate fermentum malesuada arcu. Aenean vel orci vulputate, semper ipsum sit amet, placerat nisl. Aenean at consectetur diam. Etiam pellentesque libero mauris, nec dictum arcu dictum accumsan. Curabitur accumsan magna eget odio volutpat, eu hendrerit dui egestas. Duis a elementum sapien. Phasellus sit amet purus enim.\n`;\n","import { Grid2, styled } from '@mui/material';\nimport { useCamelCase } from '@vestwell-frontend/hooks';\n\nimport { FC, isValidElement, ReactNode } from 'react';\n\nimport { PLACEHOLDER } from '../../consts';\nimport { Link } from '../Link';\nimport { Loading } from '../Loading';\nimport { Text } from '../Text';\n\nexport type VerticalAttributeProps = {\n 'aria-level'?: number;\n excludeTranslation?: boolean;\n caption?: ReactNode;\n children?: ReactNode;\n 'data-testid'?: string;\n isLoading?: boolean;\n label: ReactNode;\n linkTo?: string;\n role?: string;\n tooltip?: ReactNode;\n value?: ReactNode;\n variant?: 'medium' | 'large';\n};\n\nconst StyledLink = styled(Link, { name: 'VerticalAttributeLink' })(\n ({ theme, ...props }) => ({\n ...(props['data-variant'] === 'large' && {\n fontSize: theme.spacing(4.5),\n fontWeight: theme.typography.fontWeightBold\n }),\n ...(props['data-variant'] === 'medium' && {\n fontSize: theme.spacing(4),\n fontWeight: theme.typography.fontWeightBold\n })\n })\n);\n\nconst StyledText = styled('div', { name: 'VerticalAttributeText' })(\n ({ theme, ...props }) => ({\n color: theme.palette.grey100.main,\n fontSize:\n props['data-variant'] === 'medium'\n ? theme.spacing(4)\n : theme.spacing(4.5),\n fontWeight: theme.typography.fontWeightBold\n })\n);\n\nconst StyledVerticalAttribute = styled('div', { name: 'VerticalAttribute' })(\n ({ theme }) => ({\n marginBottom: theme.spacing(8),\n textAlign: 'left'\n })\n);\n\nexport const VerticalAttribute: FC<VerticalAttributeProps> = ({\n variant = 'medium',\n ...props\n}) => {\n const testId = useCamelCase(\n props['data-testid'] || (typeof props.label === 'string' ? props.label : '')\n );\n\n return (\n <StyledVerticalAttribute\n {...props}\n data-component='verticalAttribute'\n data-testid={testId}>\n <Grid2 alignItems='end' container>\n <Grid2>\n <Text\n aria-level={props['aria-level']}\n color='grey300'\n data-component='verticalAttributeLabel'\n data-testid={testId}\n mb={0}\n role={props.role}>\n {props.label}\n </Text>\n </Grid2>\n <Grid2>{props.tooltip}</Grid2>\n </Grid2>\n {props.isLoading ? (\n <Loading\n backgroundColor='grey800'\n data-testid='VerticalAttributeLoading'\n width={80}\n />\n ) : (\n <>\n {props.linkTo ? (\n <StyledLink\n data-component='verticalAttributeLink'\n data-testid={testId}\n data-variant={variant}\n data-wg-notranslate={\n props.excludeTranslation ? 'true' : undefined\n }\n to={props.linkTo}>\n {props.children || props.value || PLACEHOLDER}\n </StyledLink>\n ) : (\n <StyledText\n data-component='verticalAttributeText'\n data-testid={testId}\n data-variant={variant}\n data-wg-notranslate={\n isValidElement(props.value) ? undefined : 'true'\n }>\n {props.children || props.value || PLACEHOLDER}\n </StyledText>\n )}\n {props.caption && (\n <Text\n color='grey300'\n data-component='verticalAttributeCaption'\n data-testid={testId}\n variant='i1'>\n {props.caption}\n </Text>\n )}\n </>\n )}\n </StyledVerticalAttribute>\n );\n};\n","import { nanoid } from 'nanoid';\nimport {\n createContext,\n FC,\n ReactNode,\n SyntheticEvent,\n useContext,\n useEffect,\n useMemo,\n useRef\n} from 'react';\nimport { useLocation, useNavigate } from 'react-router-dom';\nimport { usePrevious, useUpdateEffect } from 'react-use';\nimport { createStore, StoreApi, useStore } from 'zustand';\nimport { createJSONStorage, persist } from 'zustand/middleware';\n\nexport type WizardStatus = 'active' | 'inactive' | 'complete' | 'error';\n\nexport type WizardConfig<T = Record<string, unknown>> = {\n initialState: T;\n steps: WizardStep<T>[];\n};\n\nexport type WizardStep<State = Record<string, unknown>> = {\n caption?: ReactNode;\n /** set the component you want to render here */\n Component?: FC<{ state?: State } & Record<string, unknown>>;\n id?: number | string;\n index?: number;\n isVisible?: (prop?: boolean) => boolean;\n onClick?: () => void;\n /** status of step */\n status?: WizardStatus;\n subTitle?: ReactNode;\n /** title of step */\n title?: string;\n /** callback to set the step as active when it returns true */\n when?: (state: State) => boolean;\n url?: string;\n params?: object;\n};\n\nexport interface WizardProviderCtx<State = Record<string, unknown>> {\n /** whether the steps are link based */\n hasLinks: boolean;\n /** whether there is a next step */\n hasNextStep: boolean;\n /** whether there is a prev step */\n hasPrevStep: boolean;\n /** current step index */\n index: number;\n /** initial state of the state */\n initialState?: State;\n /** navigate to next step */\n nextStep: (e?: SyntheticEvent) => void;\n /** navigate to prev step */\n prevStep: (e?: SyntheticEvent) => void;\n /** reset state to initialState */\n resetState: () => void;\n /** update current state */\n setState: (state: Partial<State>) => void;\n /** update current step */\n setStep: (step: WizardStep) => void;\n /** update steps */\n setSteps: (steps: WizardStep[]) => void;\n /** tracks the current state for the wizard */\n state?: State;\n /** current step in wizard */\n step?: WizardStep;\n /** all steps for wizard */\n steps: WizardStep[];\n}\n\nexport interface WizardProviderProps<State = Record<string, unknown>> {\n children: ReactNode;\n /** initial state for the context */\n initialState?: State;\n /** namespace to use for localstorage */\n name?: string;\n /** callback for when state changes */\n onStateChange?: (state) => Promise<void> | void;\n /** callback for when step changes */\n onStepChange?: (step: WizardStep) => Promise<void> | void;\n /** current state; will use this value when change is detected */\n state?: State;\n /** the steps for the wizard */\n steps: WizardStep<State>[];\n /** enables localstorage of store */\n useLocalStorage?: boolean;\n}\n\nexport const WizardContext = createContext<StoreApi<WizardProviderCtx>>(null);\n\nexport function useWizard<State = Record<string, unknown>>() {\n const store = useContext(WizardContext);\n return useStore(store) as WizardProviderCtx<State>;\n}\n\nexport function storage<T>(useLocalStorage, store, name) {\n return useLocalStorage\n ? createStore<WizardProviderCtx<T>, any>(\n persist<WizardProviderCtx<T>>(set => store(set), {\n merge: (storage: WizardProviderCtx<T>, current) => {\n /**\n * load prior values stored, and re-hydrate the\n * steps with properties that could not be serialized,\n * e.g. when()\n */\n\n const initSteps = current.steps.reduce(\n (acc, step, i) => ({ ...acc, [i]: step }),\n {}\n );\n\n const steps = storage.steps.map((step, i) => ({\n ...step,\n ...initSteps[i]\n }));\n\n return {\n ...current,\n ...storage,\n steps\n };\n },\n name,\n storage: createJSONStorage(() => sessionStorage)\n })\n )\n : createStore<WizardProviderCtx<T>>(set => store(set));\n}\n\nexport function WizardProvider<State extends Record<string, unknown>>({\n useLocalStorage,\n name,\n ...props\n}: WizardProviderProps<State>) {\n const location = useLocation();\n const isStorybook = !!process.env.STORYBOOK;\n\n const steps = useMemo(\n () =>\n props.steps.map((step, index) => ({\n ...step,\n id: step.id || nanoid(),\n index,\n title: step.title\n })),\n [props.steps]\n );\n\n const hasLinks = useMemo(() => steps.every(step => step.url), [steps]);\n\n const index = useMemo(() => {\n if (!hasLinks) return 0;\n const foundIndex = steps.findIndex(({ url }) =>\n location.pathname.endsWith(url)\n );\n return foundIndex !== -1 || !isStorybook ? foundIndex : 0;\n }, [hasLinks, steps, location.pathname, isStorybook]);\n\n const createWizardStore = () =>\n storage<State>(\n useLocalStorage,\n set => ({\n hasLinks,\n hasNextStep: !!steps[index + 1],\n hasPrevStep: !!steps[index - 1],\n index,\n initialState: props.initialState,\n nextStep: () =>\n set(prev => {\n const index = prev.hasLinks\n ? prev.steps.findIndex(({ url }) =>\n window.location.pathname.endsWith(url)\n ) + 1\n : prev.index + 1;\n\n return {\n ...prev,\n hasNextStep: !!prev.steps[index + 1],\n hasPrevStep: true,\n index,\n step: prev.steps[index]\n };\n }),\n prevStep: () =>\n set(prev => {\n const index = prev.hasLinks\n ? prev.steps.findIndex(({ url }) =>\n window.location.pathname.endsWith(url)\n ) - 1\n : prev.index - 1;\n\n return {\n ...prev,\n hasNextStep: true,\n hasPrevStep: !!prev.steps[index - 1],\n index,\n step: prev.steps[index]\n };\n }),\n resetState: () =>\n set(prev => ({\n ...prev,\n state: prev.initialState\n })),\n setState: update =>\n set(prev => {\n return {\n ...prev,\n state: {\n ...prev.state,\n ...update\n }\n };\n }),\n setStep: (step: WizardStep<State>) =>\n set(prev => ({\n ...prev,\n hasNextStep: !!prev.steps[step.index + 1],\n hasPrevStep: !!prev.steps[step.index - 1],\n index: step.index,\n step\n })),\n setSteps: (steps: WizardStep<State>[]) =>\n set(prev => {\n const updatedSteps = steps.map((step, index) => ({\n ...step,\n id: step.id || nanoid(),\n index\n }));\n\n const hasLinks = updatedSteps.every(step => step.url);\n\n const index = hasLinks\n ? updatedSteps.findIndex(({ url }) =>\n location.pathname.endsWith(url)\n )\n : 0;\n\n return {\n ...prev,\n hasLinks,\n hasNextStep: !!prev.steps[index + 1],\n hasPrevStep: !!prev.steps[index - 1],\n index,\n step: prev.steps[index],\n steps: updatedSteps\n };\n }),\n state: props.state ?? props.initialState,\n step: steps[index],\n steps\n }),\n name\n );\n\n const storeRef = useRef<ReturnType<typeof createWizardStore>>(undefined);\n\n if (!storeRef.current) {\n storeRef.current = createWizardStore();\n }\n\n return (\n <WizardContext.Provider value={storeRef.current}>\n <WizardProviderCtrl\n initialState={props.initialState}\n onStateChange={props.onStateChange}\n onStepChange={props.onStepChange}\n steps={steps}>\n {props.children}\n </WizardProviderCtrl>\n </WizardContext.Provider>\n );\n}\n\nexport const WizardProviderCtrl: FC<\n Pick<\n WizardProviderProps,\n 'children' | 'initialState' | 'onStateChange' | 'onStepChange' | 'steps'\n >\n> = props => {\n const location = useLocation();\n const navigate = useNavigate();\n\n const store = useWizard();\n const prevIndex = usePrevious(store.step?.index ?? 0);\n\n /** update the steps and initialState when reference changes */\n useUpdateEffect(() => {\n if (props.steps?.length) {\n store.setState(props.initialState);\n store.setSteps(props.steps);\n }\n }, [props.steps]);\n\n /** update the step when state changes & at least one step has when property */\n useEffect(() => {\n /** using state driven */\n if (!store.hasLinks && prevIndex > -1 && prevIndex > store.step.index) {\n return;\n }\n\n if (!store.steps.some(step => step.when)) {\n return;\n }\n\n const nextStep = store.steps\n .slice()\n .reverse()\n .find(step => (step.when ? step.when(store.state) : step));\n\n const hasStepChanged = store.hasLinks\n ? nextStep && store.step?.url !== nextStep?.url\n : nextStep && store.step.index !== nextStep?.index;\n\n if (hasStepChanged) {\n store.setStep(nextStep);\n }\n\n if (store.hasLinks && nextStep && nextStep.url !== location.pathname) {\n navigate(nextStep.url);\n }\n }, [store.state, prevIndex, location.pathname]);\n\n /** update the step when url changes */\n useUpdateEffect(() => {\n if (store.hasLinks) {\n const nextStep = store.steps.find(({ url }) =>\n location.pathname.endsWith(url)\n );\n\n if (nextStep && store.step?.url !== nextStep?.url) {\n store.setStep(nextStep);\n }\n }\n }, [location.pathname, store.steps]);\n\n /** when step changes, navigate to that url */\n useUpdateEffect(() => {\n if (store.step?.url) {\n navigate(store.step.url, { state: store.step?.params });\n }\n }, [store.step?.url]);\n\n /** when state changes, call onStateChange */\n useUpdateEffect(() => {\n (async () => {\n if (props.onStateChange) {\n await props.onStateChange(store.state);\n }\n })();\n }, [store.state]);\n\n /** when step changes, call onStepChange */\n useEffect(() => {\n (async () => {\n if (props.onStepChange) {\n await props.onStepChange(store.step);\n }\n })();\n }, [store.step]);\n\n /**\n * prevent showing children when step is undefined;\n * e.g. wait for step to be defined\n */\n return <>{!!store.step && props.children}</>;\n};\n","import { getDate, getMonth, getYear, isExists } from 'date-fns';\nimport { get } from 'lodash';\nimport * as yup from 'yup';\n\nimport {\n AVOID_SIMPLE_OR_OBVIOUS_ENGLISH_WORDS,\n HAVE_AT_LEAST_EIGHT_CHARACTERS,\n HAVE_AT_LEAST_ONE_LOWERCASE_LETTER,\n HAVE_AT_LEAST_ONE_NUMBER,\n HAVE_AT_LEAST_ONE_SPECIAL_CHARACTER,\n HAVE_AT_LEAST_ONE_UPPERCASE_LETTER\n} from './consts/passwordRequirements';\nimport {\n CANADIAN_STATES,\n US_STATES,\n US_STATES_AND_TERRITORIES\n} from './consts/states';\nimport { formatDate } from './formatDate';\nimport { parseDate } from './parseDate';\nimport { numericStringRegex } from './parseNumber';\n\nconst EMAIL_REGEXP =\n /^(([a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+(\\.[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)*)|(\\.?[a-zA-Z0-9]+(\\.[a-zA-Z0-9]+)*))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\nconst SPECIAL_CHARACTERS_REGEXP = /^[^<>%${}]*$/;\nconst ZIP_US_REGEXP = /^([0-9]{5})(?:[-]([0-9]{4}))?$/;\nconst ZIP_CA_REGEXP =\n /^[ABCEGHJKLMNPRSTVXY]\\d[ABCEGHJKLMNPRSTVXY][ ]\\d[ABCEGHJKLMNPRSTVXY]\\d$/i;\nconst PHONE_REGEX = /^[^1]\\(?\\d{2}\\)?[\\s-]?\\d{3}[\\s-]?\\d{4}$/;\nconst EIN_REGEX = /^(\\d{2}-\\d{7}|\\d{9})$/;\nconst SDAT_REGEX = /^[A-Z]+\\d{8}/i;\nconst ADDRESS_REGEX =\n /(^(?!(.*p\\.?\\s*o\\.?\\s*box.*)|(.*post\\s*office\\s*box.*)))/i;\nconst SPECIAL_CHAR = /[~`!@#$%^&*+=\\-[\\]\\\\';,/{}|\\\\\":<>?]/;\nconst UPPER_CHAR = /[A-Z]/;\nconst LOWER_CHAR = /[a-z]/;\nconst NUMBER = /[0-9]/;\n\nexport function validateEmail(\n message = 'Invalid email value provided',\n excludeEmptyString = false\n) {\n return yup.string().matches(EMAIL_REGEXP, { excludeEmptyString, message });\n}\n\nexport function validateSafeString(errorMessage = 'Invalid value provided') {\n return yup.string().matches(SPECIAL_CHARACTERS_REGEXP, errorMessage);\n}\n\nexport function validateSdat(errorMessage = 'Invalid value provided') {\n return yup.string().matches(SDAT_REGEX, errorMessage);\n}\n\nexport function validateRoutingNumber(errorMessage = 'Invalid Routing Number') {\n return yup.string().test({\n test: function (value) {\n const isFormatValid =\n value?.length === 9 && !isNaN(+value) && value !== '000000000';\n\n if (!isFormatValid) {\n return this.createError({\n message: errorMessage,\n path: this.path\n });\n }\n\n const firstTwoDigits = +value.slice(0, 2);\n const isRangeValid =\n firstTwoDigits <= 12 ||\n (firstTwoDigits >= 21 && firstTwoDigits <= 32) ||\n (firstTwoDigits >= 61 && firstTwoDigits <= 72) ||\n firstTwoDigits === 80;\n const isChecksumValid =\n (3 * (+value[0] + +value[3] + +value[6]) +\n 7 * (+value[1] + +value[4] + +value[7]) +\n (+value[2] + +value[5] + +value[8])) %\n 10 ===\n 0;\n\n if (!isRangeValid || !isChecksumValid) {\n return this.createError({\n message: errorMessage,\n path: this.path\n });\n }\n\n return true;\n }\n });\n}\n\ntype DateValidatorOptions = {\n max?: string | Date;\n min?: string | Date;\n maxErrorMessage?: string;\n minErrorMessage?: string;\n required?: boolean;\n errorMessage?: string;\n};\n\n/** @deprecated - use dateValidator instead */\nexport function validateDate(options) {\n return value => {\n try {\n const date = new Date(value).getTime();\n const isValid = !isNaN(date);\n\n if (!isValid) {\n return false;\n }\n\n if (options?.min && date < options.min.getTime()) {\n return false;\n }\n\n return true;\n } catch {\n return false;\n }\n };\n}\n\nexport const dateValidator = (name, options: DateValidatorOptions) =>\n yup.string().test({\n test: function (value) {\n const date = parseDate(value);\n const maxDate = options?.max && parseDate(options.max);\n const minDate = options?.min && parseDate(options.min);\n\n const isLessThanMax = !maxDate || date <= maxDate;\n const isGreaterThanMin = !minDate || date >= minDate;\n const isValidDate =\n date instanceof Date &&\n isExists(getYear(date), getMonth(date), getDate(date));\n const isValid =\n date instanceof Date && !isNaN(date.getTime()) && isValidDate;\n\n if (options.required && !isValid) {\n return this.createError({\n message:\n options.errorMessage || `${name} is an invalid date [MM/DD/YYYY]`,\n path: this.path\n });\n }\n\n if (value && !isLessThanMax) {\n return this.createError({\n message:\n options.maxErrorMessage ||\n `${name} must be less than ${formatDate(maxDate as string)}`,\n path: this.path\n });\n }\n\n if (value && !isGreaterThanMin) {\n return this.createError({\n message:\n options.minErrorMessage ||\n `${name} must be greater than ${formatDate(minDate as string)}`,\n path: this.path\n });\n }\n\n return true;\n }\n });\n\nexport function validateZip(\n message = 'Invalid Zip',\n excludeEmptyString = false,\n country: 'US' | 'CA' = 'US'\n) {\n return yup\n .string()\n .matches(country === 'US' ? ZIP_US_REGEXP : ZIP_CA_REGEXP, {\n excludeEmptyString,\n message\n });\n}\n\nexport function validateConfirmation(\n field: string,\n errorMessage = 'Confirmation does not match'\n) {\n return yup.string().test({\n test: function (value) {\n return (\n get(this.parent, field) === value ||\n this.createError({\n message: errorMessage,\n path: this.path\n })\n );\n }\n });\n}\n\nexport function validateName(\n message = 'Invalid Name',\n excludeEmptyString = false\n) {\n return yup.string().matches(/^[a-zA-Z]+(([',. -][a-zA-Z ])?[a-zA-Z]*)*\\.?$/, {\n excludeEmptyString,\n message\n });\n}\n\nexport function validateNumericString(\n message = 'Invalid Number',\n excludeEmptyString = false\n) {\n return yup.string().matches(numericStringRegex, {\n excludeEmptyString,\n message\n });\n}\n\nexport function validateSsn(\n message = 'Invalid SSN Format',\n excludeEmptyString = true\n) {\n return yup\n .string()\n .nullable(false)\n .test(function (value = '') {\n if (excludeEmptyString && value === '') {\n return true;\n }\n\n if (!/^(\\d+-?)+\\d+$/.test(value)) {\n return this.createError({\n message,\n path: this.path\n });\n }\n\n const rawValue = value.replace(/[^0-9]/g, '');\n\n // check if the value is all the same number\n if (rawValue.length === 9 && /^([0-9])\\1+$/.test(rawValue)) {\n return this.createError({\n message,\n path: this.path\n });\n }\n\n if (['987654321', '123456789'].includes(rawValue)) {\n return this.createError({\n message,\n path: this.path\n });\n }\n\n /**\n * ITIN:\n * All valid ITINs are a nine-digit number in the same format\n * as the SSN (9XX-8X-XXXX), begins with a “9” and the\n * 4th and 5th digits range from 50 to 65, 70 to 88, 90 to 92,\n * and 94 to 99.\n */\n if (rawValue.startsWith('9')) {\n return (\n /^9\\d{2}(5\\d|6[0-5]|7\\d|8[0-8]|9[0-2,4-9])\\d{4}$/.test(rawValue) ||\n this.createError({\n message: message.replace('SSN', 'ITIN'),\n path: this.path\n })\n );\n }\n\n // SSN\n return (\n /^(?!(000|666|9))\\d{3}-?(?!(00))\\d{2}-?(?!(0000))\\d{4}$/.test(\n rawValue\n ) ||\n this.createError({\n message,\n path: this.path\n })\n );\n });\n}\n\nexport function validatePhone(\n message = 'Invalid value provided',\n excludeEmptyString = false\n) {\n return yup.string().matches(PHONE_REGEX, { excludeEmptyString, message });\n}\n\nexport function validateEin(\n message = 'Invalid value provided',\n excludeEmptyString = false\n) {\n return yup.string().matches(EIN_REGEX, { excludeEmptyString, message });\n}\n\nexport function validatePassword(value) {\n const tests = {\n [AVOID_SIMPLE_OR_OBVIOUS_ENGLISH_WORDS]:\n value.length > 0 &&\n !['password', 'vestwell', 'test', '401'].some(\n forbiddenString =>\n value.toUpperCase().indexOf(forbiddenString.toUpperCase()) > -1\n ),\n [HAVE_AT_LEAST_EIGHT_CHARACTERS]: value.length >= 8,\n [HAVE_AT_LEAST_ONE_LOWERCASE_LETTER]: LOWER_CHAR.test(value),\n [HAVE_AT_LEAST_ONE_NUMBER]: NUMBER.test(value),\n [HAVE_AT_LEAST_ONE_SPECIAL_CHARACTER]: SPECIAL_CHAR.test(value),\n [HAVE_AT_LEAST_ONE_UPPERCASE_LETTER]: UPPER_CHAR.test(value)\n };\n\n return Object.values(tests).every(Boolean) ? undefined : tests;\n}\n\nexport function validateAddress(\n message = \"Address can't be Post Office Box\",\n excludeEmptyString = false\n) {\n return yup.string().matches(ADDRESS_REGEX, { excludeEmptyString, message });\n}\n\nexport function validateState(country: 'US' | 'US_AND_TERRITORIES' | 'CA') {\n return yup.string().test({\n test: function (value) {\n if (country === 'US' && !US_STATES[value]) {\n return this.createError({\n message: 'Invalid US State',\n path: this.path\n });\n }\n\n if (\n country === 'US_AND_TERRITORIES' &&\n !US_STATES_AND_TERRITORIES[value]\n ) {\n return this.createError({\n message: 'Invalid US State',\n path: this.path\n });\n }\n\n if (country === 'CA' && !CANADIAN_STATES[value]) {\n return this.createError({\n message: 'Invalid Canadian State/Province',\n path: this.path\n });\n }\n\n return true;\n }\n });\n}\n\nexport function validateBlankSpaces(\n message = 'The field cannot begin or end with blank space',\n excludeEmptyString = true\n) {\n return yup\n .string()\n .matches(/^\\S+(\\s+\\S+)*$/, { excludeEmptyString, message });\n}\n","import { Alert, Grid2 } from '@mui/material';\nimport { usePostUserEmailChange } from '@sentinel/hooks';\nimport { validateEmail } from '@vestwell-frontend/helpers';\nimport {\n Button,\n Form,\n FormField,\n FormSaveButton,\n ModalBody,\n ModalFooter,\n Text,\n useWizard\n} from '@vestwell-frontend/ui';\n\nimport { FormikHelpers } from 'formik';\nimport { FC, useCallback, useState } from 'react';\nimport * as yup from 'yup';\n\nimport { ChangeLoginEmailState } from '../config/changeLoginEmail';\n\nconst schema = yup.object().shape({\n newLoginEmail: validateEmail('Please use standard email format').required(\n 'Required'\n )\n});\n\ntype ChangeLoginEmailProps = {\n onClose: () => void | Promise<void>;\n};\n\nexport const ChangeLoginEmail: FC<ChangeLoginEmailProps> = props => {\n const ctx = useWizard<ChangeLoginEmailState>();\n\n const [newEmail, setNewEmail] = useState(ctx.state.newLoginEmail);\n\n const postUserEmailChange = usePostUserEmailChange({\n mutation: {\n onSuccess: data => {\n console.log(data?.code);\n ctx.setState({ emailVerified: true, newLoginEmail: newEmail });\n }\n }\n });\n\n const onSubmit = useCallback(\n async (\n values: { newLoginEmail: string },\n formikHelpers: FormikHelpers<{ newLoginEmail: string }>\n ) => {\n setNewEmail(values.newLoginEmail);\n try {\n await postUserEmailChange.mutateAsync({\n data: { email: values.newLoginEmail }\n });\n } catch (e) {\n if (e.status === 409) {\n formikHelpers.setErrors({\n newLoginEmail:\n 'This email is already in use. Please contact support if you would like to merge your accounts.'\n });\n }\n }\n },\n []\n );\n\n return (\n <Form\n className='contents'\n initialValues={{ newLoginEmail: ctx.state.newLoginEmail || '' }}\n onChange={postUserEmailChange.reset}\n onSubmit={onSubmit}\n validateOnMount={false}\n validationSchema={schema}>\n <ModalBody>\n <Grid2 container direction='column' spacing={4}>\n <Grid2\n size={{\n lg: 10,\n md: 12\n }}>\n <Text mb={0}>\n We will send a 6-digit security code to your new login email.\n </Text>\n </Grid2>\n <Grid2\n display='flex'\n flexDirection='column'\n flexGrow={1}\n size={{\n lg: 7,\n md: 9,\n xs: 12\n }}>\n <FormField\n autoFocus\n fullWidth\n label='New Login Email'\n name='newLoginEmail'\n />\n </Grid2>\n {postUserEmailChange.error &&\n postUserEmailChange.error?.status !== 409 && (\n <Grid2>\n <Alert\n classes={{ root: 'flex-shrink inline-flex' }}\n severity='error'\n variant='standard'>\n {postUserEmailChange.error?.message}\n </Alert>\n </Grid2>\n )}\n </Grid2>\n </ModalBody>\n <ModalFooter>\n <Button onClick={props.onClose} variant='text'>\n Cancel\n </Button>\n <FormSaveButton\n disabled={!!postUserEmailChange.error}\n loading={postUserEmailChange.isLoading}\n variant='contained'>\n Next: Verify\n </FormSaveButton>\n </ModalFooter>\n </Form>\n );\n};\n\nChangeLoginEmail.displayName = 'ChangeLoginEmail';\n","import { Alert, Grid2, styled } from '@mui/material';\nimport { usePatchUserEmail, usePostUserEmailChange } from '@sentinel/hooks';\nimport { useAuth } from '@vestwell-frontend/elements';\nimport { useNotifications } from '@vestwell-frontend/hooks';\nimport {\n Button,\n Form,\n FormField,\n FormSaveButton,\n ModalBody,\n ModalFooter,\n Text,\n useWizard\n} from '@vestwell-frontend/ui';\n\nimport { useCallback } from 'react';\nimport * as yup from 'yup';\n\nimport { ChangeLoginEmailState } from '../config/changeLoginEmail';\nimport { ResendOtpButton } from './ResendOtpButton';\n\nconst StyledFormFieldContainer = styled('div')(({ theme }) => ({\n '& > .MuiFormControl-root': {\n marginBottom: theme.spacing(4),\n width: theme.spacing(50)\n }\n}));\n\nconst schema = yup.object().shape({\n securityCode: yup\n .string()\n .min(6, 'Must be at least 6 digits')\n .required('Required')\n});\n\nexport const ChangeLoginEmailVerifyCode = () => {\n const { setToken } = useAuth();\n\n const ctx = useWizard<ChangeLoginEmailState>();\n const notify = useNotifications();\n\n const postUserEmailChange = usePostUserEmailChange({\n mutation: {\n onSuccess: data => {\n console.log(data?.code);\n }\n }\n });\n\n const patchUserEmail = usePatchUserEmail({\n mutation: {\n onError: () => {\n notify.error('Couldn’t update your login email at this time');\n },\n onSuccess: data => {\n ctx.setState({\n codeVerified: true\n });\n\n setToken(data.token);\n\n notify.success('Successfully updated login email');\n }\n }\n });\n\n const onBack = useCallback(() => {\n ctx.setState({\n emailVerified: false\n });\n }, []);\n\n const onResendCode = useCallback(async () => {\n await postUserEmailChange.mutateAsync({\n data: {\n email: ctx.state.newLoginEmail\n }\n });\n }, [ctx.state]);\n\n const onSubmit = useCallback(async values => {\n await patchUserEmail.mutateAsync({\n data: {\n token: values.securityCode\n }\n });\n }, []);\n\n const isDisabled = patchUserEmail.error?.message?.startsWith(\n 'Your account has been temporarily locked'\n );\n\n return (\n <Form\n className='contents'\n onChange={patchUserEmail.reset}\n onSubmit={onSubmit}\n validateOnMount={false}\n validationSchema={schema}>\n <ModalBody>\n <Grid2 alignItems='center' container direction='column' spacing={4}>\n <Grid2\n alignItems='center'\n display='flex'\n flexDirection='column'\n size={{\n lg: 12\n }}>\n <Text mb={0} textAlign='center'>\n Enter the 6-digit code sent to{' '}\n <strong>{ctx.state.newLoginEmail}</strong>. The code will expire\n in 10 minutes\n </Text>\n </Grid2>\n <Grid2\n alignItems='center'\n display='flex'\n flexDirection='column'\n flexGrow={1}\n justifyContent='center'\n size={{\n lg: 12\n }}>\n <StyledFormFieldContainer>\n <FormField\n align='center'\n autoComplete='one-time-code'\n autoFocus\n disabled={isDisabled}\n format='numericString'\n label='Security Code'\n maxLength={6}\n name='securityCode'\n type='tel'\n variant='large'\n />\n </StyledFormFieldContainer>\n <ResendOtpButton\n disabled={isDisabled}\n inputName='emailVerification'\n onClick={onResendCode}\n variant='inline'\n />\n </Grid2>\n {(postUserEmailChange.error || patchUserEmail.error) && (\n <Grid2>\n <Alert\n classes={{ root: 'flex-shrink inline-flex' }}\n severity='error'\n variant='standard'>\n {postUserEmailChange.error?.message ??\n patchUserEmail.error?.message}\n </Alert>\n </Grid2>\n )}\n </Grid2>\n </ModalBody>\n <ModalFooter>\n <Button disabled={isDisabled} onClick={onBack} variant='text'>\n Back\n </Button>\n <FormSaveButton disabled={isDisabled || !!patchUserEmail.error}>\n Confirm\n </FormSaveButton>\n </ModalFooter>\n </Form>\n );\n};\n\nChangeLoginEmailVerifyCode.displayName = 'ChangeLoginEmailVerifyCode';\n","import { KeyboardArrowRightOutlined } from '@mui/icons-material';\nimport { Alert, Grid2 } from '@mui/material';\nimport { useGetSessionInfo, usePostVerifyPassword } from '@sentinel/hooks';\nimport {\n Button,\n Form,\n FormField,\n FormSaveButton,\n ModalBody,\n ModalFooter,\n PLACEHOLDER,\n Text,\n useWizard\n} from '@vestwell-frontend/ui';\n\nimport { FC, useCallback } from 'react';\nimport * as yup from 'yup';\n\nimport { State } from './types';\n\ntype VerifyPasswordProps = {\n isMfaSetup: boolean;\n onClose?: () => void | Promise<void>;\n};\n\nconst schema = yup.object().shape({\n password: yup.string().required('Required')\n});\n\nexport const VerifyPassword: FC<VerifyPasswordProps> = props => {\n const ctx = useWizard<State>();\n\n const user = useGetSessionInfo('user');\n\n const verify = usePostVerifyPassword({\n mutation: {\n onSuccess: data => {\n if (data.isValid) {\n ctx.setState({\n passwordVerified: true\n });\n }\n }\n }\n });\n\n const onSubmit = useCallback(async values => {\n await verify.mutateAsync({\n data: {\n password: values.password\n }\n });\n }, []);\n\n return (\n <>\n <Form\n className='contents'\n initialValues={{ password: '' }}\n onChange={verify.reset}\n onSubmit={onSubmit}\n validateOnMount={false}\n validationSchema={schema}>\n <ModalBody>\n <Grid2 container direction='column' spacing={4}>\n <Grid2\n size={{\n lg: 10,\n md: 12\n }}>\n <Text mb={0}>\n For security, please enter your password for{' '}\n <strong>{user.data?.email ?? PLACEHOLDER}</strong>.\n </Text>\n </Grid2>\n <Grid2\n display='flex'\n flexDirection='column'\n flexGrow={1}\n size={{\n lg: 6,\n md: 9,\n xs: 12\n }}>\n <FormField\n autoComplete='current-password'\n autoFocus\n fullWidth\n label='Password'\n name='password'\n revealable\n type='password'\n />\n {verify.data?.isValid === false && (\n <Grid2 display='flex' flexDirection='column'>\n <Alert\n classes={{ root: 'flex-shrink inline-flex' }}\n severity='error'\n variant='standard'>\n The password you entered is incorrect. Please try again.\n </Alert>\n </Grid2>\n )}\n </Grid2>\n </Grid2>\n </ModalBody>\n <ModalFooter>\n <Button onClick={props.onClose} variant='text'>\n Cancel\n </Button>\n <FormSaveButton\n endIcon={\n props.isMfaSetup ? (\n <KeyboardArrowRightOutlined fontSize='small' />\n ) : undefined\n }\n variant='contained'>\n {props.isMfaSetup ? 'Next: Setup' : 'Continue'}\n </FormSaveButton>\n </ModalFooter>\n </Form>\n </>\n );\n};\n\nVerifyPassword.displayName = 'VerifyPassword';\n","import { WizardStep } from '@vestwell-frontend/ui';\n\nimport { ChangeLoginEmail } from '../components/ChangeLoginEmail';\nimport { ChangeLoginEmailVerifyCode } from '../components/ChangeLoginEmailVerifyCode';\nimport { VerifyPassword } from '../components/VerifyPassword';\n\nexport type ChangeLoginEmailState = {\n emailVerified?: boolean;\n codeVerified?: boolean;\n passwordVerified?: boolean;\n newLoginEmail?: string;\n};\n\nexport const changeLoginEmail = {\n initialState: {\n codeVerified: false,\n emailVerified: false,\n newLoginEmail: '',\n passwordVerified: false\n },\n steps: [\n {\n Component: VerifyPassword,\n title: 'Please Verify Your Password',\n when: state => !state.passwordVerified\n },\n {\n Component: ChangeLoginEmail,\n title: 'Enter New Login Email',\n when: state => state.passwordVerified\n },\n {\n Component: ChangeLoginEmailVerifyCode,\n title: 'Verify Security Code',\n when: state => state.emailVerified\n }\n ] as WizardStep<ChangeLoginEmailState>[]\n};\n","import { styled } from '@mui/material';\nimport {\n Button,\n Modal,\n WizardProvider,\n WizardStep\n} from '@vestwell-frontend/ui';\n\nimport { FC, useEffect, useState } from 'react';\nimport { useToggle } from 'react-use';\n\nimport {\n changeLoginEmail,\n ChangeLoginEmailState\n} from '../config/changeLoginEmail';\n\ntype ChangeLoginEmailModalProps = {\n onSuccess: () => Promise<any>;\n};\n\nconst StyledButton = styled(Button)(({ theme }) => ({\n marginBottom: theme.spacing(4)\n}));\n\nexport const ChangeLoginEmailModal: FC<ChangeLoginEmailModalProps> = props => {\n const [isOpen, toggleIsOpen] = useToggle(false);\n const [state, setState] = useState<ChangeLoginEmailState>(null);\n const [step, setStep] = useState<WizardStep>(null);\n\n useEffect(() => {\n if (state?.codeVerified) {\n setStep(null);\n setState(null);\n\n props.onSuccess();\n }\n }, [state]);\n\n const Component = step?.Component;\n\n return (\n <>\n <StyledButton\n aria-haspopup='dialog'\n aria-label='Change Login Email'\n data-testid='changeLoginEmailButton'\n onClick={toggleIsOpen}\n variant='inline'>\n Change Login Email\n </StyledButton>\n <WizardProvider<ChangeLoginEmailState>\n initialState={changeLoginEmail.initialState}\n key={isOpen ? '1' : '0'}\n name='Change Login Email'\n onStateChange={setState}\n onStepChange={setStep}\n steps={changeLoginEmail.steps}>\n {step && (\n <Modal\n header={step.title}\n isOpen={isOpen}\n onRequestClose={toggleIsOpen}>\n {Component && (\n <Component isMfaSetup={false} onClose={toggleIsOpen} />\n )}\n </Modal>\n )}\n </WizardProvider>\n </>\n );\n};\n\nChangeLoginEmailModal.displayName = 'ChangeLoginEmailModal';\n","import { Alert, Grid2, styled } from '@mui/material';\nimport {\n useGetSessionInfo,\n usePostForgotPassword,\n usePostVerifyPassword\n} from '@sentinel/hooks';\nimport { useNotifications } from '@vestwell-frontend/hooks';\nimport {\n Button,\n Form,\n FormField,\n FormSaveButton,\n Modal,\n ModalBody,\n ModalFooter,\n Text,\n VerticalAttribute\n} from '@vestwell-frontend/ui';\n\nimport { FC, useCallback } from 'react';\nimport { useToggle } from 'react-use';\nimport * as yup from 'yup';\n\nconst StyledVerticalAttribute = styled(VerticalAttribute)({\n marginBottom: 0\n});\n\nconst schema = yup.object().shape({\n password: yup.string().required('Required')\n});\n\nexport const PasswordResetModal: FC = () => {\n const notify = useNotifications();\n\n const user = useGetSessionInfo('user');\n\n const reset = usePostForgotPassword();\n const verify = usePostVerifyPassword();\n\n const [open, toggleOpen] = useToggle(false);\n\n const onChange = useCallback(() => {\n reset.reset();\n verify.reset();\n }, []);\n\n const onSubmit = useCallback(\n async values => {\n const res = await verify.mutateAsync({\n data: {\n password: values.password\n }\n });\n\n if (res.isValid) {\n await reset.mutateAsync({\n data: {\n email: user.data?.email\n }\n });\n }\n\n if (res.isValid) {\n notify.success('Reset Password Link Sent');\n toggleOpen();\n }\n },\n [user.data?.email]\n );\n\n return (\n <>\n <StyledVerticalAttribute\n label='Password'\n value={\n <Button aria-haspopup='dialog' onClick={toggleOpen} variant='inline'>\n Reset Password\n </Button>\n }\n />\n <Modal\n closeButton\n data-testid='resetPassword'\n header='Reset Password'\n isOpen={open}\n key={open ? '1' : '0'}\n onRequestClose={toggleOpen}>\n <Form\n className='contents'\n initialValues={{ password: '' }}\n onChange={onChange}\n onSubmit={onSubmit}\n validateOnMount={false}\n validationSchema={schema}>\n <ModalBody isLoading={user.isLoading}>\n <Grid2 container direction='column' spacing={4}>\n <Grid2>\n <Text mb={0}>\n For security, please enter your password for{' '}\n <strong>{user.data?.email}</strong>. On password reset, a link\n to reset your password will be sent to your login email.\n </Text>\n </Grid2>\n <Grid2\n display='flex'\n flexDirection='column'\n flexGrow={1}\n size={{\n lg: 6,\n md: 9,\n xs: 12\n }}>\n <FormField\n autoComplete='current-password'\n autoFocus\n fullWidth\n label='Password'\n name='password'\n revealable\n type='password'\n />\n {(reset.error || verify.data?.isValid === false) && (\n <Grid2 display='flex' flexDirection='column'>\n <Alert\n classes={{ root: 'flex-shrink inline-flex' }}\n severity='error'\n variant='standard'>\n {reset.error?.message ?? (\n <>\n The password you entered is incorrect. Please try\n again.\n </>\n )}\n </Alert>\n </Grid2>\n )}\n </Grid2>\n </Grid2>\n </ModalBody>\n <ModalFooter>\n <Button onClick={toggleOpen} variant='text'>\n Cancel\n </Button>\n <FormSaveButton\n data-testid='sendResetLink'\n disabled={!!user.isLoading || !!verify.error}>\n Send Reset Link\n </FormSaveButton>\n </ModalFooter>\n </Form>\n </Modal>\n </>\n );\n};\n\nPasswordResetModal.displayName = 'PasswordResetModal';\n","import { Card, styled } from '@mui/material';\nimport { useGetSessionInfo } from '@sentinel/hooks';\nimport { Text, VerticalAttribute } from '@vestwell-frontend/ui';\n\nimport { FC } from 'react';\n\nimport { ChangeLoginEmailModal } from './ChangeLoginEmailModal';\nimport { PasswordResetModal } from './PasswordResetModal';\n\nconst SectionCard = styled(Card)(({ theme }) => ({\n [theme.breakpoints.down('sm')]: {\n width: '100%'\n },\n [theme.breakpoints.up('sm')]: {\n width: theme.spacing(140)\n }\n}));\n\nconst StyledVerticalAttribute = styled(VerticalAttribute)({\n marginBottom: 0\n});\n\nexport const LoginSettingsSection: FC = () => {\n const user = useGetSessionInfo('user');\n\n return (\n <SectionCard data-component='section' data-testid='password'>\n <Text color='grey50' component='h2' variant='f2'>\n Login Settings\n </Text>\n <StyledVerticalAttribute label='Login Email' value={user.data?.email} />\n <ChangeLoginEmailModal onSuccess={user.refetch} />\n <PasswordResetModal />\n </SectionCard>\n );\n};\n\nLoginSettingsSection.displayName = 'LoginSettingsSection';\n","import { Skeleton } from '@mui/material';\nimport { useCamelCase } from '@vestwell-frontend/hooks';\n\nimport AbortablePromise from 'promise-abortable';\nimport { FC, useEffect, useState } from 'react';\nimport { useToggle, useUpdateEffect } from 'react-use';\n\nexport const Img: FC<Partial<HTMLImageElement> & { isLoading?: boolean }> = ({\n isLoading: loading,\n height = 1,\n width = 1,\n ...props\n}) => {\n const [isLoading, toggleIsLoading] = useToggle(true);\n const [src, setSrc] = useState(undefined);\n\n const loaderId = useCamelCase(`${props['data-component']} Loader`);\n\n useEffect(() => {\n toggleIsLoading(true);\n\n if (!props.src) {\n return;\n }\n\n const promise = new AbortablePromise((resolve, reject, signal) => {\n const img = new Image();\n\n img.onload = () => {\n toggleIsLoading(false);\n setSrc(props.src);\n resolve();\n };\n\n img.onerror = () => {\n toggleIsLoading(false);\n setSrc(props.src);\n resolve();\n };\n\n img.src = props.src;\n\n signal.onabort = () => {\n img.onerror = null;\n img.onload = null;\n img.src = null;\n };\n });\n\n return () => {\n promise.abort();\n setSrc(undefined);\n };\n }, [props.src]);\n\n useUpdateEffect(() => {\n toggleIsLoading(loading);\n }, [loading]);\n\n return (\n <>\n {isLoading || !src ? (\n <Skeleton\n animation='wave'\n data-component={loaderId}\n height={height}\n variant='rectangular'\n width={width}\n />\n ) : (\n <img\n {...(props as any)}\n alt={props.alt}\n height={height}\n src={src}\n width={width}\n />\n )}\n </>\n );\n};\n\nImg.displayName = 'Img';\n","import { Button, Img, PLACEHOLDER, Text } from '@vestwell-frontend/ui';\n\nimport { FC } from 'react';\nimport { useToggle } from 'react-use';\n\nexport type MfaQrCodeProps = {\n isLoading: boolean;\n qrCode: string;\n secret: string;\n};\n\nexport const MfaQrCode: FC<MfaQrCodeProps> = props => {\n const [isManualCode, toggleIsManualCode] = useToggle(false);\n\n return (\n <>\n <Img\n alt='QR Code'\n data-component='qrCode'\n height={175}\n isLoading={props.isLoading}\n src={props.qrCode}\n width={175}\n />\n {!isManualCode && (\n <Button onClick={toggleIsManualCode} variant='inline'>\n Can't scan barcode?\n </Button>\n )}\n {isManualCode && (\n <>\n <Text color='grey50' mb={2} variant='g1'>\n Input this verification code manually:\n </Text>\n <Text\n data-testid='qrCodeSecret'\n display='flex'\n flexWrap='wrap'\n fontFamily='Roboto Mono'\n fontSize={18}\n fontWeight={500}\n justifyContent='center'\n letterSpacing='0.065em'>\n {props.secret?.split('')?.map((letter, i) => (\n <Text\n color={i % 4 === 0 ? 'bloodOrange' : 'grey50'}\n key={letter + i.toString()}\n mb={0}>\n {letter}\n </Text>\n )) ?? PLACEHOLDER}\n </Text>\n </>\n )}\n </>\n );\n};\n","export function hexToRgba(hex: string, opacity = 1) {\n if (opacity === 1 || typeof opacity !== 'number') {\n return hex;\n }\n\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n\n const rgba = result\n ? [\n parseInt(result[1], 16),\n parseInt(result[2], 16),\n parseInt(result[3], 16),\n opacity\n ]\n : null;\n\n return rgba ? `rgba(${rgba.join(', ')})` : hex;\n}\n","import { Palette, PaletteColor, styled } from '@mui/material';\n\nimport { FC, ReactNode } from 'react';\n\nimport { PLACEHOLDER } from '../consts';\nimport { hexToRgba } from '../helpers';\nimport { Loading } from './Loading';\n\nexport type PillProps = {\n 'data-testid'?: string;\n backgroundColor: keyof Palette;\n backgroundColorOpacity?: number;\n fontColor?: keyof Palette;\n isLoading?: boolean;\n value: ReactNode;\n};\n\nconst StyledBox = styled('div')<\n Pick<PillProps, 'backgroundColor' | 'backgroundColorOpacity'> & {\n color: PillProps['fontColor'];\n }\n>(({ theme, color, backgroundColor, backgroundColorOpacity }) => ({\n backgroundColor: hexToRgba(\n (theme.palette[backgroundColor] as PaletteColor)?.main,\n backgroundColorOpacity\n ),\n borderRadius: theme.spacing(2),\n color: (theme.palette[color] as PaletteColor)?.main,\n fontSize: theme.spacing(2.5),\n fontWeight: 800,\n padding: theme.spacing(1, 2),\n textTransform: 'uppercase',\n width: 'fit-content'\n}));\n\nexport const Pill: FC<PillProps> = ({\n backgroundColorOpacity = 0.3,\n ...props\n}) => (\n <StyledBox\n {...props}\n backgroundColor={props.backgroundColor}\n backgroundColorOpacity={backgroundColorOpacity}\n color={props.fontColor}\n data-component='pill'\n data-testid={props['data-testid']}>\n {props.value || <span>{props.isLoading ? <Loading /> : PLACEHOLDER}</span>}\n </StyledBox>\n);\n\nPill.displayName = 'Pill';\n","import { Menu, MenuItem, MenuProps, Palette, styled } from '@mui/material';\nimport { useCamelCase, useDownload } from '@vestwell-frontend/hooks';\n\nimport {\n cloneElement,\n ElementType,\n FC,\n MouseEvent,\n ReactElement,\n ReactNode,\n useCallback,\n useId,\n useMemo,\n useState\n} from 'react';\n\nconst StyledMenu = styled(Menu)(({ theme }) => ({\n '& .MuiPaper-root': {\n '& .MuiMenu-list': {\n padding: 0\n },\n borderRadius: theme.spacing(1.25),\n boxShadow: theme.shadows[24],\n marginTop: theme.spacing(1)\n }\n}));\n\nconst StyledListItem = styled(MenuItem, {\n shouldForwardProp: propName => propName !== 'isIcon'\n})<{ isIcon: boolean }>(({ isIcon, theme }) => ({\n marginBottom: 0,\n paddingLeft: isIcon ? theme.spacing(0) : theme.spacing(2),\n paddingRight: theme.spacing(2)\n}));\n\nexport type ActionMenuItemProps = {\n content?: ReactNode;\n id: string;\n icon?: ElementType;\n iconColor?: keyof Palette;\n index?: number;\n isSecureDownload?: boolean;\n href?: string;\n meta?: Record<string, unknown>;\n onClose?: () => void;\n onSelect?: (meta?: Record<string, unknown>) => void | Promise<void>;\n};\n\nconst ActionMenuItem: FC<ActionMenuItemProps> = props => {\n const label = typeof props.content === 'string' ? props.content : undefined;\n const testId = useCamelCase(label || props.id);\n const download = useDownload(props.href || '');\n\n const onClick = useCallback(\n async (e: MouseEvent<HTMLElement>) => {\n if (props.href && props.isSecureDownload) {\n await download(e);\n }\n\n if (props.href && !props.isSecureDownload) {\n window.location.replace(props.href);\n }\n\n if (props.onSelect) {\n props.onSelect(props.meta);\n }\n\n if (props.onClose) {\n props.onClose();\n }\n },\n [props.href, props.meta, props.onClose, props.onSelect, download]\n );\n\n const Icon = props.icon;\n\n return (\n <StyledListItem\n aria-label={label}\n autoFocus={props.index === 0}\n data-testid={testId}\n disableRipple\n isIcon={!!Icon}\n onClick={onClick}>\n {Icon && (\n <Icon\n fontSize='small'\n sx={theme => ({\n color: theme.palette[props.iconColor ?? 'grey100']?.main,\n marginLeft: theme.spacing(2),\n marginRight: theme.spacing(2)\n })}\n />\n )}\n {props.content}\n </StyledListItem>\n );\n};\n\nexport type ActionMenuProps = {\n actions: ActionMenuItemProps[];\n title: string;\n trigger: ReactElement<any>;\n};\n\nexport const ActionMenu: FC<ActionMenuProps> = props => {\n const menuId = useId();\n const triggerId = useId();\n\n const title = useCamelCase(props.title);\n\n const [anchorEl, setAnchorEl] = useState<MenuProps['anchorEl']>(null);\n\n const isOpen = Boolean(anchorEl);\n\n const onClick = useCallback(event => {\n setAnchorEl(event?.target);\n }, []);\n\n const onClose = useCallback(() => {\n setAnchorEl(null);\n }, []);\n\n const trigger = useMemo(() => {\n return props.trigger\n ? cloneElement(props.trigger, {\n ...props.trigger.props,\n 'aria-controls': isOpen ? menuId : undefined,\n 'aria-expanded': isOpen ? 'true' : undefined,\n 'aria-haspopup': 'true',\n 'data-component': 'actionMenuTrigger',\n 'data-testid': title,\n disableElevation: true,\n id: triggerId,\n onClick,\n role: 'button'\n })\n : null;\n }, [props.trigger, isOpen, title, triggerId, menuId, onClick]);\n\n return (\n <>\n {trigger}\n <StyledMenu\n MenuListProps={{\n 'aria-labelledby': triggerId\n }}\n anchorEl={anchorEl}\n data-component='actionMenu'\n data-testid={title}\n elevation={0}\n id={menuId}\n onClose={onClose}\n open={isOpen}>\n {props.actions?.length ? (\n props.actions.map((action, index) => (\n <ActionMenuItem\n content={action.content}\n href={action.href}\n icon={action.icon}\n iconColor={action.iconColor}\n id={action.id}\n index={index}\n isSecureDownload={action.isSecureDownload}\n key={action.id}\n meta={action.meta}\n onClose={onClose}\n onSelect={action.onSelect}\n />\n ))\n ) : (\n <ActionMenuItem content='No Items' id='noItems' index={0} />\n )}\n </StyledMenu>\n </>\n );\n};\n","import { KeyboardArrowRightOutlined } from '@mui/icons-material';\nimport { Alert, Grid2 } from '@mui/material';\nimport { useGetQrCode, usePostMfaSetup } from '@sentinel/hooks';\nimport {\n Button,\n Link,\n ModalBody,\n ModalFooter,\n Text,\n useWizard\n} from '@vestwell-frontend/ui';\n\nimport { FC, useCallback } from 'react';\nimport { useMount } from 'react-use';\n\nimport { MfaSetupState } from '../config/mfaSetup';\nimport { MfaQrCode } from './MfaQrCode';\n\nexport const MfaSetupApp: FC = () => {\n const ctx = useWizard<MfaSetupState>();\n\n const setup = usePostMfaSetup({\n mutation: {\n onSuccess: res => {\n console.log(res.code);\n }\n }\n });\n\n const qrCode = useGetQrCode({\n query: {\n enabled: setup.isSuccess,\n refetchOnMount: 'always',\n suspense: false\n }\n });\n\n const onContinue = useCallback(() => {\n ctx.setState({ methodSelected: true });\n }, []);\n\n useMount(async () => {\n await setup.mutateAsync({\n data: { mfaEntryId: ctx.state.mfaEntryId, type: 'app' }\n });\n });\n\n const isLoading = setup.isLoading || qrCode.isInitialLoading;\n\n return (\n <>\n <ModalBody>\n <Grid2 alignItems='center' container direction='column' spacing={4}>\n <Grid2\n alignItems='center'\n display='flex'\n flexDirection='column'\n size={{\n lg: 10,\n xs: 12\n }}>\n <Text align='center'>\n Download an authenticator app such as{' '}\n <Link\n data-testid='googleAuthenticatorLink'\n external\n to='https://support.google.com/accounts/answer/1066447'>\n Google Authenticator\n </Link>\n , or{' '}\n <Link\n data-testid='microsoftAuthenticatorLink'\n external\n to='https://support.microsoft.com/en-au/account-billing/download-and-install-the-microsoft-authenticator-app-351498fc-850a-45da-b7b6-27e523b8702a'>\n Microsoft Authenticator\n </Link>\n . Once downloaded, scan the following barcode from within the app.\n </Text>\n </Grid2>\n <Grid2\n alignItems='center'\n display='flex'\n flexDirection='column'\n size={{\n lg: 9,\n xs: 12\n }}>\n <MfaQrCode\n isLoading={qrCode.isInitialLoading}\n qrCode={qrCode.data?.qrCode}\n secret={qrCode.data?.secret}\n />\n </Grid2>\n {(setup.error || qrCode.error) && (\n <Grid2 alignItems='center' display='flex' flexDirection='column'>\n <Alert\n classes={{ root: 'flex-shrink inline-flex' }}\n severity='error'\n variant='standard'>\n {setup.error?.message || qrCode.error?.message}\n </Alert>\n </Grid2>\n )}\n </Grid2>\n </ModalBody>\n <ModalFooter>\n <Button\n autoFocus\n disabled={isLoading || !!setup.error || !!qrCode.error}\n endIcon={<KeyboardArrowRightOutlined fontSize='small' />}\n onClick={onContinue}>\n Next: Verify\n </Button>\n </ModalFooter>\n </>\n );\n};\n\nMfaSetupApp.displayName = 'MfaSetupApp';\n","import { InfoOutlined } from '@mui/icons-material';\nimport {\n FormControl,\n FormControlLabel,\n FormControlLabelProps,\n FormControlProps,\n FormHelperText,\n RadioGroup as MuiRadioGroup,\n RadioGroupProps as MuiRadioGroupProps,\n Radio,\n RadioProps,\n Stack,\n styled\n} from '@mui/material';\nimport { useCamelCase } from '@vestwell-frontend/hooks';\n\nimport {\n createContext,\n FC,\n ReactNode,\n useCallback,\n useContext,\n useId,\n useMemo,\n useState\n} from 'react';\nimport { useUpdateEffect } from 'react-use';\n\nimport { FormFieldLabel, FormFieldLabelProps } from './form/FormFieldLabel';\n\nexport type RadioButtonVariant = 'standard' | 'card';\n\nexport type RadioGroupProps = Partial<FormFieldLabelProps> &\n Omit<MuiRadioGroupProps, 'onChange'> & {\n error?: FormControlProps['error'];\n errorMessage?: ReactNode;\n formField?: boolean;\n hideError?: boolean;\n label?: FormControlLabelProps['label'];\n fullWidth?: FormControlProps['fullWidth'];\n onChange?: (value: any) => void;\n required?: boolean;\n position?: 'left' | 'right';\n variant?: RadioButtonVariant;\n };\n\ntype RadioGroupContextValue = Pick<\n RadioGroupProps,\n | 'disabled'\n | 'fullWidth'\n | 'name'\n | 'onChange'\n | 'required'\n | 'position'\n | 'value'\n | 'variant'\n>;\n\nconst RadioGroupContext = createContext<RadioGroupContextValue>({\n variant: 'standard'\n});\n\nconst StyledRadio = styled(Radio, {\n shouldForwardProp: prop => prop !== 'variant'\n})<RadioProps & { variant: RadioButtonVariant }>(props => ({\n margin: props.variant === 'card' ? undefined : props.theme.spacing(1, 2)\n}));\n\nconst StyledFormControlLabel = styled(FormControlLabel, {\n shouldForwardProp: prop =>\n !['fullWidth', 'position', 'variant'].includes(prop as string)\n})<\n FormControlLabelProps &\n Pick<RadioGroupContextValue, 'fullWidth' | 'position' | 'variant'>\n>(props => ({\n ...(props.variant === 'card'\n ? {\n '& .MuiFormControlLabel-label': {\n flex: 1\n },\n '& .MuiRadio-root': {\n flex: 0\n },\n alignItems: 'flex-start',\n ...(props.checked\n ? { border: `1px solid ${props.theme.palette.primary.main}` }\n : { border: '1px solid transparent' }),\n borderRadius: '0.437rem',\n boxShadow: props.theme.shadows[props.theme.shadows.length - 1],\n columnGap: props.theme.spacing(3),\n display: 'flex',\n flexDirection: props.position === 'left' ? 'row' : 'row-reverse',\n justifyContent: props.position === 'left' ? undefined : 'space-between',\n marginBottom: props.theme.spacing(4),\n marginRight: 0,\n maxWidth: '100%',\n padding: props.theme.spacing(3),\n ...(props.fullWidth\n ? { width: '100%' }\n : {\n // todo:: old rule; should be replaced with width: 100%\n minWidth: '18.75rem'\n })\n }\n : {})\n}));\n\nexport type RadioButtonProps = Omit<FormControlLabelProps, 'control'>;\n\nexport const RadioButton: FC<RadioButtonProps> = ({ label, ...props }) => {\n const ctx = useContext(RadioGroupContext);\n\n const onChange = useCallback(() => {\n if (!props.disabled) {\n ctx.onChange(props.value);\n }\n }, [ctx.onChange, props.disabled, props.value]);\n\n return (\n <StyledFormControlLabel\n {...props}\n checked={ctx.value === props.value}\n control={\n <StyledRadio\n inputProps={{\n 'aria-checked': ctx.value === props.value,\n 'aria-disabled': !!ctx.disabled,\n 'aria-required': !!ctx.required,\n //@ts-expect-error\n 'data-component': 'radioButtonInput',\n 'data-testid': `${ctx.name}_${useCamelCase(\n props.value?.toString()\n )}`\n }}\n onChange={onChange}\n size={ctx.variant === 'card' ? 'medium' : 'small'}\n variant={ctx.variant}\n />\n }\n data-component='radioButtonLabel'\n data-testid={`${ctx.name}_${useCamelCase(props.value?.toString())}`}\n disableTypography\n disabled={props.disabled || !!ctx.disabled}\n fullWidth={ctx.fullWidth}\n label={label}\n position={ctx.position}\n variant={ctx.variant}\n />\n );\n};\n\nRadioButton.displayName = 'RadioButton';\n\nconst StyledFormControl = styled(FormControl)(() => ({\n display: 'flex'\n}));\n\nconst StyledFormHelperText = styled(FormHelperText)({\n marginLeft: 0,\n marginRight: 0\n});\n\nexport const RadioGroup: FC<RadioGroupProps> = ({\n details,\n disabled,\n error,\n errorMessage,\n formField,\n fullWidth,\n label,\n helpModal,\n hideLabel,\n hideError,\n info,\n onChange,\n position = 'right',\n value: initialValue = '',\n variant = 'standard',\n ...props\n}) => {\n const detailsId = useId();\n const disabledId = useId();\n const helpModalId = useId();\n const errorId = useId();\n const infoId = useId();\n const labelId = useId();\n\n const [value, setValue] = useState(initialValue);\n\n const describedBy =\n `${disabled ? `${disabledId} ` : ''}${info ? `${infoId} ` : ''}${\n helpModal ? `${helpModalId} ` : ''\n }${details ? `${detailsId} ` : ''}${\n errorMessage ? `${errorId} ` : ''\n }`.trimEnd() || undefined;\n\n const onRadioButtonChange = useCallback(\n value => {\n setValue(value);\n\n if (onChange) {\n onChange(value);\n }\n },\n [onChange]\n );\n\n const ctx = useMemo(\n () => ({\n disabled: !!disabled,\n fullWidth: !!fullWidth,\n name: props.name,\n onChange: onRadioButtonChange,\n position,\n required: !!props.required,\n value,\n variant\n }),\n [\n disabled,\n fullWidth,\n onRadioButtonChange,\n position,\n value,\n variant,\n props.name,\n props.required\n ]\n );\n\n useUpdateEffect(() => {\n setValue(initialValue);\n }, [initialValue]);\n\n return (\n <StyledFormControl\n data-component='radioGroupControl'\n data-testid={props.name}\n error={error}\n fullWidth={fullWidth}>\n <FormFieldLabel\n data-component='radioGroupLabel'\n details={details}\n detailsId={detailsId}\n disabled={!!disabled}\n disabledId={disabledId}\n helpModal={helpModal}\n helpModalId={helpModalId}\n hideLabel={hideLabel}\n info={info}\n infoId={infoId}\n label={label}\n labelId={labelId}\n name={props.name}\n required={!!props.required}\n />\n <RadioGroupContext.Provider value={ctx}>\n <MuiRadioGroup\n {...props}\n aria-describedby={describedBy}\n aria-disabled={!!disabled}\n aria-invalid={!!error}\n aria-labelledby={labelId}\n aria-required={!!props.required}\n data-component='radioGroup'\n data-testid={props.name}\n value={initialValue}\n />\n </RadioGroupContext.Provider>\n {formField && (\n <StyledFormHelperText\n aria-atomic='true'\n data-component='radioGroupError'\n data-testid={props.name}\n id={errorId}\n role='alert'>\n {!hideError && errorMessage ? (\n <Stack alignItems='center' direction='row' gap={1}>\n <InfoOutlined color='error' fontSize='small' />\n {!!label && <span className='sr-only'>Error for {label}:</span>}\n {errorMessage}\n </Stack>\n ) : (\n ' '\n )}\n </StyledFormHelperText>\n )}\n </StyledFormControl>\n );\n};\n\nRadioGroup.displayName = 'RadioGroup';\n","import { styled } from '@mui/material';\n\nimport { useField } from 'formik';\nimport { FC, useCallback, useContext } from 'react';\n\nimport { RadioGroup, RadioGroupProps } from '../RadioButton';\nimport { IsRequiredFieldContext } from './Form';\n\nexport type FormRadioGroupProps = Omit<\n RadioGroupProps,\n 'value' | 'required'\n> & {\n name: string;\n align?:\n | 'center'\n | 'flex-start'\n | 'flex-end'\n | 'space-between'\n | 'space-around'\n | 'space-evenly';\n};\n\nconst StyledRadioGroup = styled(RadioGroup, {\n shouldForwardProp: prop => prop !== 'align'\n})<FormRadioGroupProps>(props => ({\n ...(props.align && {\n '& .MuiFormGroup-root': {\n justifyContent: props.align\n }\n })\n}));\n\nexport const FormRadioGroup: FC<FormRadioGroupProps> = props => {\n const isRequired = useContext(IsRequiredFieldContext)[props.name] ?? false;\n\n const [field, meta, helpers] = useField(props.name);\n\n const onBlur = useCallback(\n e => {\n helpers.setTouched(true);\n\n if (props.onBlur) {\n props.onBlur(e);\n }\n },\n [helpers.setTouched, props.onBlur]\n );\n\n const onChange = useCallback(\n value => {\n helpers.setValue(value);\n\n if (props.onChange) {\n props.onChange(value);\n }\n },\n [helpers.setValue, props.onChange]\n );\n\n return (\n <StyledRadioGroup\n {...props}\n error={!!meta.error && !!meta.touched}\n errorMessage={meta.touched ? meta.error : undefined}\n formField\n id={props.id || props.name}\n onBlur={onBlur}\n onChange={onChange}\n required={isRequired}\n value={field.value}\n />\n );\n};\n\nFormRadioGroup.displayName = 'FormRadioGroup';\n","import { KeyboardArrowRightOutlined } from '@mui/icons-material';\nimport { Alert, Grid2 } from '@mui/material';\nimport { usePostMfaSetup } from '@sentinel/hooks';\nimport { validatePhone } from '@vestwell-frontend/helpers';\nimport {\n Form,\n FormField,\n FormRadioGroup,\n FormSaveButton,\n ModalBody,\n ModalFooter,\n RadioButton,\n Text,\n useWizard\n} from '@vestwell-frontend/ui';\n\nimport { FC, useCallback } from 'react';\nimport * as yup from 'yup';\n\nimport { MfaSetupState } from '../config/mfaSetup';\n\nconst schema = yup.object().shape({\n phone: validatePhone('Must be a valid US phone number'),\n type: yup.string()\n});\n\nexport const MfaSetupPhone: FC = () => {\n const ctx = useWizard<MfaSetupState>();\n\n const setup = usePostMfaSetup({\n mutation: {\n onSuccess: res => {\n console.log(res.code);\n ctx.setState({\n methodSelected: true,\n //@ts-expect-error: waiting for hooks\n subType: res.entrySubType,\n value: res.phoneNumber\n });\n }\n }\n });\n\n const onSubmit = useCallback(async values => {\n await setup.mutateAsync({\n data: {\n mfaEntryId: ctx.state.mfaEntryId,\n subType: values.type,\n type: 'phone',\n value: values.phone\n }\n });\n }, []);\n\n return (\n <Form\n className='contents'\n initialValues={{\n phone: ctx.state.value || '',\n type: ctx.state.subType ?? 'text'\n }}\n onChange={setup.reset}\n onSubmit={onSubmit}\n validateOnMount={false}\n validationSchema={schema}>\n <ModalBody>\n <Grid2 container direction='column' spacing={4}>\n <Grid2\n size={{\n lg: 10,\n md: 12\n }}>\n <Text mb={0}>\n We will provide you a 6-digit security code via the method you\n prefer.\n </Text>\n </Grid2>\n <Grid2\n display='flex'\n flexDirection='column'\n flexGrow={1}\n size={{\n lg: 6,\n md: 9,\n xs: 12\n }}>\n <FormField\n autoFocus\n format='phoneUs'\n fullWidth\n label='Phone Number'\n name='phone'\n />\n </Grid2>\n <Grid2\n display='flex'\n flexDirection='column'\n flexGrow={1}\n size={{\n lg: 6,\n md: 9,\n xs: 12\n }}>\n <FormRadioGroup\n label='Verification Method'\n name='type'\n variant='standard'>\n <RadioButton label='Via text message' value='text' />\n <RadioButton label='Via voice call' value='voice' />\n </FormRadioGroup>\n </Grid2>\n {setup.error && (\n <Grid2>\n <Alert\n classes={{ root: 'flex-shrink inline-flex' }}\n severity='error'\n variant='standard'>\n {setup.error?.message}\n </Alert>\n </Grid2>\n )}\n </Grid2>\n </ModalBody>\n <ModalFooter>\n <FormSaveButton\n disabled={!!setup.error}\n endIcon={<KeyboardArrowRightOutlined fontSize='small' />}>\n Next: Verify\n </FormSaveButton>\n </ModalFooter>\n </Form>\n );\n};\n\nMfaSetupPhone.displayName = 'MfaSetupPhone';\n","import { KeyboardArrowRightOutlined } from '@mui/icons-material';\nimport { Alert, Grid2, styled } from '@mui/material';\nimport { usePostMfaSetup, usePostMfaSetupVerify } from '@sentinel/hooks';\nimport { useAuth } from '@vestwell-frontend/elements';\nimport {\n Button,\n Form,\n FormatPhoneNumber,\n FormField,\n FormFieldProps,\n FormSaveButton,\n ModalBody,\n ModalFooter,\n Text,\n useWizard\n} from '@vestwell-frontend/ui';\n\nimport { FC, useCallback } from 'react';\nimport * as yup from 'yup';\n\nimport { MfaSetupState } from '../config/mfaSetup';\nimport { ResendOtpButton } from './ResendOtpButton';\n\nconst StyledFormFieldContainer = styled('div')<\n FormFieldProps & { method: MfaSetupState['method'] }\n>(({ method, theme }) => ({\n '& > .MuiFormControl-root': {\n marginBottom: method === 'phone' ? theme.spacing(4) : theme.spacing(8),\n width: theme.spacing(50)\n }\n}));\n\nconst StyledResendOtpButton = styled(ResendOtpButton)(({ theme }) => ({\n marginBottom: theme.spacing(8)\n}));\n\nconst schema = yup.object().shape({\n securityCode: yup\n .string()\n .min(6, 'Must be at least 6 digits')\n .required('Required')\n});\n\nexport const MfaSetupVerifyCode: FC = () => {\n const { setToken } = useAuth();\n\n const ctx = useWizard<MfaSetupState>();\n\n const postMfaSetup = usePostMfaSetup({\n mutation: {\n onSuccess: res => {\n console.log(res.code);\n }\n }\n });\n\n const postMfaSetupVerify = usePostMfaSetupVerify({\n mutation: {\n onSuccess: data => {\n ctx.setState({\n methodVerified: true\n });\n setToken(data.token);\n }\n }\n });\n\n const onBack = useCallback(() => {\n ctx.setState({\n methodSelected: false\n });\n }, []);\n\n const onResendCode = useCallback(async () => {\n await postMfaSetup.mutateAsync({\n data: {\n type: ctx.state.method,\n value: ctx.state.value\n }\n });\n }, [ctx.state]);\n\n const onSubmit = useCallback(\n async values => {\n await postMfaSetupVerify.mutateAsync({\n data: {\n code: values.securityCode,\n subType: ctx.state.subType\n }\n });\n },\n [ctx.state.subType]\n );\n\n const isDisabled = postMfaSetupVerify.error?.message?.startsWith(\n 'Your account has been temporarily locked'\n );\n\n return (\n <Form\n className='contents'\n onChange={postMfaSetupVerify.reset}\n onSubmit={onSubmit}\n validateOnMount={false}\n validationSchema={schema}>\n <ModalBody>\n <Grid2 alignItems='center' container direction='column' spacing={4}>\n <Grid2\n alignItems='center'\n display='flex'\n flexDirection='column'\n size={{\n lg: 12\n }}>\n <Text align='center' mb={0}>\n Enter the 6-digit code{' '}\n {ctx.state.subType === 'text'\n ? 'we have sent to '\n : ctx.state.subType === 'voice'\n ? 'provided on the call to '\n : 'generated by your authentication app'}\n {ctx.state.method === 'phone' && (\n <>\n <FormatPhoneNumber mask value={ctx.state.value} />.\n </>\n )}\n </Text>\n </Grid2>\n <Grid2\n alignItems='center'\n display='flex'\n flexDirection='column'\n flexGrow={1}\n justifyContent='center'\n size={{\n lg: 12\n }}>\n <StyledFormFieldContainer method={ctx.state.method}>\n <FormField\n align='center'\n autoComplete='one-time-code'\n autoFocus\n disabled={isDisabled}\n format='numericString'\n label='Security Code'\n maxLength={6}\n name='securityCode'\n type='tel'\n variant='large'\n />\n </StyledFormFieldContainer>\n {ctx.state.method === 'phone' && (\n <StyledResendOtpButton\n disabled={isDisabled}\n inputName={`${ctx.state.method}Verification`}\n onClick={onResendCode}\n variant='inline'\n />\n )}\n </Grid2>\n {(postMfaSetup.error || postMfaSetupVerify.error) && (\n <Grid2>\n <Alert\n classes={{ root: 'flex-shrink inline-flex' }}\n severity='error'\n variant='standard'>\n {postMfaSetup.error?.message ??\n postMfaSetupVerify.error?.message}\n </Alert>\n </Grid2>\n )}\n </Grid2>\n </ModalBody>\n <ModalFooter>\n <Button disabled={isDisabled} onClick={onBack} variant='text'>\n Back\n </Button>\n <FormSaveButton\n disabled={isDisabled}\n endIcon={<KeyboardArrowRightOutlined fontSize='small' />}>\n Confirm\n </FormSaveButton>\n </ModalFooter>\n </Form>\n );\n};\n\nMfaSetupVerifyCode.displayName = 'MfaSetupVerifyCode';\n","import { WizardStep } from '@vestwell-frontend/ui';\n\nimport { MfaSetupApp } from '../components/MfaSetupApp';\nimport { MfaSetupPhone } from '../components/MfaSetupPhone';\nimport { MfaSetupVerifyCode } from '../components/MfaSetupVerifyCode';\nimport { VerifyPassword } from '../components/VerifyPassword';\n\nexport type MfaSetupState = {\n methodSelected?: boolean;\n methodVerified?: boolean;\n method?: 'app' | 'email' | 'phone';\n mfaEntryId: number;\n passwordVerified?: boolean;\n subType?: 'text' | 'voice';\n value?: string;\n};\n\nexport const mfaSetup = {\n initialState: {\n method: undefined,\n methodSelected: false,\n // final step\n methodVerified: false,\n mfaEntryId: null,\n passwordVerified: false,\n value: ''\n },\n steps: [\n {\n Component: VerifyPassword,\n title: 'Verify Your Password',\n when: state => !state.passwordVerified\n },\n {\n Component: MfaSetupApp,\n title: 'Setup Authentication App',\n when: state => state.passwordVerified && state.method === 'app'\n },\n {\n Component: MfaSetupPhone,\n title: 'Enter Phone Number',\n when: state => state.passwordVerified && state.method === 'phone'\n },\n {\n Component: MfaSetupVerifyCode,\n title: 'Verify Security Code',\n when: state => state.methodSelected\n }\n ] as WizardStep<MfaSetupState>[]\n};\n","import { useNotifications } from '@vestwell-frontend/hooks';\nimport { Modal, WizardProvider, WizardStep } from '@vestwell-frontend/ui';\n\nimport { FC, useEffect, useMemo, useState } from 'react';\n\nimport { mfaSetup, MfaSetupState } from '../config/mfaSetup';\n\nexport type MfaEditModalProps = {\n isOpen: boolean;\n method?: MfaSetupState['method'];\n mfaEntryId: number;\n onClose: () => void | Promise<void>;\n onSuccess: () => void | Promise<void>;\n value?: string;\n};\n\nexport const MfaEditModal: FC<MfaEditModalProps> = props => {\n const notify = useNotifications();\n\n const [state, setState] = useState<MfaSetupState>(null);\n const [step, setStep] = useState<WizardStep>(null);\n\n const initialState = useMemo(() => {\n return {\n ...mfaSetup.initialState,\n method: props.method,\n mfaEntryId: props.mfaEntryId,\n ...('phone' === props.method ? { value: props.value } : {})\n };\n }, [props.method, props.value]);\n\n useEffect(() => {\n if (state?.methodVerified) {\n notify.success(\n `${state.method === 'app' ? 'App based' : 'Phone based'} 2FA updated`\n );\n\n props.onClose();\n\n setStep(null);\n setState(null);\n\n props.onSuccess();\n }\n }, [state, props.onSuccess]);\n\n const Component = step?.Component;\n\n return (\n <WizardProvider<MfaSetupState>\n initialState={initialState}\n key={props.isOpen ? '1' : '0'}\n name='Mfa Edit'\n onStateChange={setState}\n onStepChange={setStep}\n steps={mfaSetup.steps}>\n {step && (\n <Modal closeButton isOpen={props.isOpen} onRequestClose={props.onClose}>\n {Component && <Component isMfaSetup onClose={props.onClose} />}\n </Modal>\n )}\n </WizardProvider>\n );\n};\n\nMfaEditModal.displayName = 'MfaEditModal';\n","import { Add } from '@mui/icons-material';\nimport { useCamelCase, useNotifications } from '@vestwell-frontend/hooks';\nimport {\n Button,\n Modal,\n WizardProvider,\n WizardStep\n} from '@vestwell-frontend/ui';\n\nimport { FC, useEffect, useMemo, useState } from 'react';\nimport { useToggle } from 'react-use';\n\nimport { mfaSetup, MfaSetupState } from '../config/mfaSetup';\n\nexport type MfaSetupModalProps = {\n isBackup?: boolean;\n method: MfaSetupState['method'];\n onSuccess: () => void | Promise<void>;\n};\n\nexport const MfaSetupModal: FC<MfaSetupModalProps> = props => {\n const notify = useNotifications();\n\n const [open, toggleOpen] = useToggle(false);\n const [state, setState] = useState<MfaSetupState>(null);\n const [step, setStep] = useState<WizardStep>(null);\n\n const testId = useCamelCase(`setup ${props.method}`);\n\n const initialState = useMemo(() => {\n return {\n ...mfaSetup.initialState,\n method: props.method\n };\n }, [props.method]);\n\n useEffect(() => {\n if (state?.methodVerified) {\n notify.success(\n `${state.method === 'app' ? 'App based' : 'Phone based'} 2FA setup`\n );\n\n toggleOpen();\n setState(null);\n\n props.onSuccess();\n }\n }, [state, props.onSuccess]);\n\n const Component = step?.Component;\n\n return (\n <>\n {props.isBackup ? (\n <Button\n aria-haspopup='dialog'\n data-testid={testId}\n onClick={toggleOpen}\n startIcon={<Add />}\n variant='inline'>\n Add a Backup Number\n </Button>\n ) : (\n <Button\n aria-haspopup='dialog'\n data-testid={testId}\n onClick={toggleOpen}\n variant='inline'>\n Setup\n </Button>\n )}\n <WizardProvider<MfaSetupState>\n initialState={initialState}\n key={open ? '1' : '0'}\n name='Mfa Setup'\n onStateChange={setState}\n onStepChange={setStep}\n steps={mfaSetup.steps}>\n {step && (\n <Modal\n closeButton\n header={step.title}\n isOpen={open}\n onRequestClose={toggleOpen}>\n {Component && <Component isMfaSetup onClose={toggleOpen} />}\n </Modal>\n )}\n </WizardProvider>\n </>\n );\n};\n\nMfaSetupModal.displayName = 'MfaSetupModal';\n","import {\n EmailOutlined,\n MoreVert,\n PermPhoneMsgOutlined,\n ScreenshotOutlined\n} from '@mui/icons-material';\nimport { Card, Divider, IconButton, Stack, styled } from '@mui/material';\nimport {\n GetMfaMethodsResDto,\n useDeleteMfaEntry,\n useGetMfaMethods,\n useGetSessionInfo,\n usePatchMfaIsPrimary\n} from '@sentinel/hooks';\nimport { useNotifications } from '@vestwell-frontend/hooks';\nimport {\n ActionMenu,\n FormatPhoneNumber,\n IconTooltip,\n Link,\n Pill,\n Text\n} from '@vestwell-frontend/ui';\n\nimport { FC, useCallback, useState } from 'react';\n\nimport { MfaSetupState } from '../config/mfaSetup';\nimport { MfaEditModal } from './MfaEditModal';\nimport { MfaSetupModal } from './MfaSetupModal';\n\nconst SectionCard = styled(Card)(props => ({\n [props.theme.breakpoints.down('sm')]: {\n width: '100%'\n },\n [props.theme.breakpoints.up('sm')]: {\n width: props.theme.spacing(140)\n }\n}));\n\nexport const MfaSection: FC = () => {\n const notify = useNotifications();\n\n const user = useGetSessionInfo('user');\n\n const mfaMethods = useGetMfaMethods({\n query: {\n select: data => ({\n all: data,\n formatted: data.reduce(\n (acc, method) => {\n if (method.entryType === 'phone') {\n return {\n ...acc,\n phone: (acc.phone ?? []).concat(method)\n };\n }\n\n return {\n ...acc,\n [method.entryType]: method\n };\n },\n {} as {\n app: GetMfaMethodsResDto;\n email: GetMfaMethodsResDto;\n phone: GetMfaMethodsResDto[];\n }\n )\n })\n }\n });\n\n const [isEditModal, setIsEditModal] = useState<{\n mfaEntryId: number;\n type: MfaSetupState['method'];\n value: string;\n }>(null);\n\n const patchMfaIsPrimary = usePatchMfaIsPrimary({\n mutation: {\n onSuccess: async data => {\n notify.success(\n `${\n data.entryType === 'app' ? 'App based' : 'Phone based'\n } 2FA set as default`\n );\n\n await mfaMethods.refetch();\n }\n }\n });\n\n const deleteMfaEntry = useDeleteMfaEntry({\n mutation: {\n onSuccess: async data => {\n notify.success(\n `${\n data.entryType === 'app' ? 'App based' : 'Phone based'\n } 2FA removed`\n );\n\n await mfaMethods.refetch();\n }\n }\n });\n\n const onEditClose = useCallback(async () => {\n setIsEditModal(null);\n }, []);\n\n const onSuccess = useCallback(async () => {\n await user.refetch();\n await mfaMethods.refetch();\n }, []);\n\n return (\n <SectionCard data-component='section' data-testid='mfa'>\n <Text color='grey50' component='h2' mb={0} variant='f2'>\n Two-Factor Authentication\n <IconTooltip aria-label='More Info on Two-Factor Authentication'>\n In addition to entering your password, at the time of login we will\n send you a 1-time temporary code via mobile phone number. All you have\n to do is enter this code on our verification screen.\n </IconTooltip>\n </Text>\n <Text color='grey100' mb={4} variant='i1'>\n Add an extra layer of security to your account.\n </Text>\n <Stack divider={<Divider />} spacing={2}>\n <Stack data-component='mfaMethod' data-testid='app'>\n <Stack\n alignItems='center'\n direction='row'\n justifyContent='space-between'>\n <Stack alignItems='center' direction='row' spacing={2.5}>\n <ScreenshotOutlined color='grey400' fontSize='small' />\n <Text color='grey50' mb={0} variant='g2'>\n Authentication App\n </Text>\n {!mfaMethods.data?.formatted?.app && (\n <Pill\n backgroundColor='ash'\n backgroundColorOpacity={0.3}\n fontColor='grey200'\n value='RECOMMENDED'\n />\n )}\n {!!mfaMethods.data?.formatted?.app && (\n <Pill\n backgroundColor='mint'\n backgroundColorOpacity={0.3}\n fontColor='plantation'\n value='ENABLED'\n />\n )}\n {!!mfaMethods.data?.formatted?.app?.isPrimary && (\n <Pill\n backgroundColor='ash'\n backgroundColorOpacity={0.3}\n fontColor='grey200'\n value='DEFAULT'\n />\n )}\n </Stack>\n {!mfaMethods.data?.formatted?.app && (\n <MfaSetupModal method='app' onSuccess={onSuccess} />\n )}\n {!!mfaMethods.data?.formatted?.app && (\n <ActionMenu\n actions={[\n ...(mfaMethods.data.all.length > 1\n ? [\n {\n content: 'Remove',\n id: 'removeApp',\n meta: {\n mfaEntryId: mfaMethods.data.formatted.app.mfaEntryId\n },\n onSelect: async meta => {\n await deleteMfaEntry.mutateAsync({\n mfaEntryId: meta.mfaEntryId\n });\n }\n }\n ]\n : []),\n {\n content: 'Edit',\n id: 'editApp',\n meta: {\n mfaEntryId: mfaMethods.data.formatted.app.mfaEntryId,\n type: 'app',\n value: mfaMethods.data.formatted.app.value\n },\n onSelect: (meta: any) => {\n setIsEditModal({\n mfaEntryId: meta.mfaEntryId,\n type: meta.type,\n value: meta.value\n });\n }\n },\n ...(mfaMethods.data.all.length > 1 &&\n !mfaMethods.data.formatted.app.isPrimary\n ? [\n {\n content: 'Set as default',\n id: 'toggleAppPrimary',\n meta: {\n mfaEntryId: mfaMethods.data.formatted.app.mfaEntryId\n },\n onSelect: async meta => {\n await patchMfaIsPrimary.mutateAsync({\n mfaEntryId: meta.mfaEntryId\n });\n }\n }\n ]\n : [])\n ]}\n title='Trigger'\n trigger={\n <IconButton\n aria-label='App Options'\n color='primary'\n data-testid='appOptions'>\n <MoreVert fontSize='small' />\n </IconButton>\n }\n />\n )}\n </Stack>\n <Text color='grey200' mb={0} ml={7.5} variant='i1'>\n ex.{' '}\n <Link\n data-testid='googleAuthenticatorLink'\n external\n to='https://support.google.com/accounts/answer/1066447'>\n Google Authenticator\n </Link>\n , \n <Link\n data-testid='microsoftAuthenticatorLink'\n external\n to='https://support.microsoft.com/en-au/account-billing/download-and-install-the-microsoft-authenticator-app-351498fc-850a-45da-b7b6-27e523b8702a'>\n Microsoft Authenticator\n </Link>\n </Text>\n </Stack>\n <Stack data-component='mfaMethod' data-testid='phone'>\n <Stack\n alignItems='center'\n direction='row'\n justifyContent='space-between'>\n <Stack alignItems='center' direction='row' spacing={2.5}>\n <PermPhoneMsgOutlined color='grey400' fontSize='small' />\n <Text color='grey50' mb={0} variant='g2'>\n Phone Numbers\n </Text>\n {!!mfaMethods.data?.formatted?.phone?.length && (\n <Pill\n backgroundColor='mint'\n backgroundColorOpacity={0.3}\n fontColor='plantation'\n value='ENABLED'\n />\n )}\n </Stack>\n {!mfaMethods.data?.formatted?.phone?.length && (\n <MfaSetupModal method='phone' onSuccess={onSuccess} />\n )}\n </Stack>\n <Stack mb={1} ml={7.5}>\n <Text color='grey200' mb={0} variant='i1'>\n Verify your identity via a text message or voice call.\n </Text>\n <Text color='grey200' mb={0} variant='i1'>\n Standard rates may apply.\n </Text>\n {mfaMethods.data?.formatted?.phone?.length && (\n <Divider sx={{ mt: 2 }} />\n )}\n </Stack>\n {mfaMethods.data?.formatted?.phone?.length && (\n <Stack divider={<Divider />} ml={7.5} spacing={1}>\n {mfaMethods.data.formatted.phone.map(phone => (\n <Stack\n alignItems='center'\n direction='row'\n justifyContent='space-between'\n key={phone.value}>\n <Stack alignItems='center' direction='row' spacing={2.5}>\n <Text color='grey50' mb={0} variant='g2'>\n <FormatPhoneNumber mask value={phone.value} />\n </Text>\n {!!phone.isPrimary && (\n <Pill\n backgroundColor='ash'\n backgroundColorOpacity={0.3}\n fontColor='grey200'\n value='DEFAULT'\n />\n )}\n </Stack>\n <ActionMenu\n actions={[\n ...(mfaMethods.data.all.length > 1\n ? [\n {\n content: 'Remove',\n id: 'removePhone',\n meta: {\n mfaEntryId: phone.mfaEntryId\n },\n onSelect: async meta => {\n await deleteMfaEntry.mutateAsync({\n mfaEntryId: meta.mfaEntryId\n });\n }\n }\n ]\n : []),\n {\n content: 'Edit',\n id: 'edit',\n meta: {\n mfaEntryId: phone.mfaEntryId,\n type: phone.entryType,\n value: phone.value\n },\n onSelect: (meta: any) => {\n setIsEditModal({\n mfaEntryId: meta.mfaEntryId,\n type: meta.type,\n value: meta.value\n });\n }\n },\n ...(mfaMethods.data.all.length > 1 && !phone.isPrimary\n ? [\n {\n content: 'Set as default',\n id: 'togglePrimaryPhone',\n meta: {\n mfaEntryId: phone.mfaEntryId\n },\n onSelect: async meta => {\n await patchMfaIsPrimary.mutateAsync({\n mfaEntryId: meta.mfaEntryId\n });\n }\n }\n ]\n : [])\n ]}\n title='Trigger'\n trigger={\n <IconButton\n aria-label='Phone Options'\n color='primary'\n data-testid='phoneOptions'>\n <MoreVert fontSize='small' />\n </IconButton>\n }\n />\n </Stack>\n ))}\n {mfaMethods.data?.formatted?.phone?.length === 1 && (\n <MfaSetupModal isBackup method='phone' onSuccess={onSuccess} />\n )}\n </Stack>\n )}\n </Stack>\n {!!mfaMethods.data?.formatted?.email && (\n <Stack data-component='mfaMethod' data-testid='email'>\n <Stack\n alignItems='center'\n direction='row'\n justifyContent='space-between'>\n <Stack alignItems='center' direction='row' spacing={2.5}>\n <EmailOutlined color='grey400' fontSize='small' />\n <Text color='grey50' mb={0} variant='g2'>\n Email\n </Text>\n <Pill\n backgroundColor='mint'\n backgroundColorOpacity={0.3}\n fontColor='plantation'\n value='ENABLED'\n />\n </Stack>\n <ActionMenu\n actions={[\n {\n content: 'Remove',\n id: 'removeEmail',\n meta: {\n mfaEntryId: mfaMethods.data.formatted.email.mfaEntryId\n },\n onSelect: async (meta: any) => {\n await deleteMfaEntry.mutateAsync({\n mfaEntryId: meta.mfaEntryId\n });\n }\n }\n ]}\n title='Trigger'\n trigger={\n <IconButton\n aria-label='Email Options'\n color='primary'\n data-testid='emailOptions'>\n <MoreVert fontSize='small' />\n </IconButton>\n }\n />\n </Stack>\n <Stack ml={7.5}>\n <Text color='grey50' mb={2} variant='g2'>\n {mfaMethods.data.formatted.email.value}\n </Text>\n <Text color='grey200' mb={0} variant='i1'>\n This option will soon be removed. Please set up an alternative\n method\n </Text>\n </Stack>\n </Stack>\n )}\n </Stack>\n <MfaEditModal\n isOpen={!!isEditModal}\n method={isEditModal?.type}\n mfaEntryId={isEditModal?.mfaEntryId}\n onClose={onEditClose}\n onSuccess={onSuccess}\n value={isEditModal?.value}\n />\n </SectionCard>\n );\n};\n\nMfaSection.displayName = 'MfaSection';\n","import { Grid } from '@mui/material';\nimport { styled } from '@mui/material/styles';\n\nimport { FC, ReactNode } from 'react';\n\nconst StyledPage = styled(Grid)(props => ({\n alignItems: 'center',\n flexGrow: 1,\n flexWrap: 'nowrap',\n height: `calc(100% - ${props.theme.spacing(16)})`,\n justifyContent: 'start',\n overflowY: 'auto'\n}));\n\nexport type PageProps = {\n children: ReactNode;\n};\n\nexport const Page: FC<PageProps> = props => {\n return (\n <StyledPage container data-component='page' direction='column'>\n {props.children}\n </StyledPage>\n );\n};\n\nPage.displayName = 'Page';\n","import { Alert, Grid2, styled } from '@mui/material';\nimport {\n GetMfaMethodsResDto,\n usePostMfaSend,\n usePostMfaVerify\n} from '@sentinel/hooks';\nimport { useAuth } from '@vestwell-frontend/elements';\nimport {\n Form,\n FormatPhoneNumber,\n FormField,\n FormRadioGroup,\n RadioButton,\n Text\n} from '@vestwell-frontend/ui';\n\nimport { FC, memo, useCallback } from 'react';\nimport { useLocalStorage } from 'usehooks-ts';\nimport * as yup from 'yup';\n\nimport { routes } from '../router/routes';\nimport { ResendOtpButton } from './ResendOtpButton';\nimport { SubmitButton } from './SubmitButton';\n\nconst StyledFormFieldContainer = styled('div')(({ theme }) => ({\n '& > .MuiFormControl-root': {\n marginBottom: theme.spacing(4),\n width: theme.spacing(50)\n }\n}));\n\nconst StyledRadioButton = styled(RadioButton)(() => ({\n marginLeft: 0\n}));\n\nexport type PhoneVerificationProps = {\n onSubTypeSelect: (values: {\n mfaEntryId: number;\n subType: 'text' | 'voice';\n }) => Promise<void>;\n phone: Partial<GetMfaMethodsResDto> & {\n subType?: 'text' | 'voice';\n };\n};\n\nconst subTypeSchema = yup.object().shape({\n subType: yup.string().required('Required')\n});\n\nconst schema = yup.object().shape({\n phoneVerification: yup\n .string()\n .min(6, 'Must be at least 6 digits')\n .required('Required')\n});\n\nexport const PhoneVerification: FC<PhoneVerificationProps> = memo(props => {\n const { setToken } = useAuth();\n\n const postMfaSend = usePostMfaSend();\n const postMfaVerify = usePostMfaVerify({\n mutation: {\n onSuccess: data => {\n setToken(data);\n if (data) {\n window.location.replace(\n `${window.location.protocol}//${window.location.host}${routes.LOGIN_VERIFICATION}`\n );\n }\n }\n }\n });\n\n const [, setCodeLastSentTime] = useLocalStorage('codeLastSentTime', {});\n\n const onSubmit = useCallback(\n async values => {\n await postMfaVerify.mutateAsync({\n data: {\n code: values.phoneVerification,\n mfaEntryId: props.phone.mfaEntryId,\n subType: props.phone.subType,\n type: 'phone'\n }\n });\n },\n [props.phone]\n );\n\n const onSubTypeSubmit = useCallback(\n async values => {\n await props.onSubTypeSelect({\n mfaEntryId: props.phone.mfaEntryId,\n subType: values.subType\n });\n },\n [props.phone, props.onSubTypeSelect]\n );\n\n const onResendCode = useCallback(async () => {\n const res = await postMfaSend.mutateAsync({\n data: {\n mfaEntryId: props.phone.mfaEntryId,\n subType: props.phone.subType,\n type: 'phone'\n }\n });\n setCodeLastSentTime(prevState => ({\n ...prevState,\n [props.phone.mfaEntryId]: Date.now()\n }));\n console.log(res.code);\n }, [props.phone]);\n\n const isLoginDisabled = postMfaVerify.error?.message?.startsWith(\n 'Your account has been temporarily locked'\n );\n\n return (\n <>\n <Grid2>\n <Text\n align='center'\n data-testid='phoneVerificationTitle'\n variant='b2'\n width='100%'>\n {!props.phone.subType\n ? 'Verify via phone'\n : props.phone.subType === 'text'\n ? 'Verify by Text Message'\n : 'Verify by Voice Call'}\n </Text>\n </Grid2>\n {props.phone.subType ? (\n <Form\n className='contents'\n onChange={postMfaVerify.reset}\n onSubmit={onSubmit}\n validationSchema={schema}>\n <Grid2\n alignItems='center'\n container\n display='flex'\n flexDirection='column'\n flexGrow={1}\n justifyContent='space-between'>\n <Grid2 size={12}>\n <Text align='center' color='grey100' variant='i1'>\n {props.phone.subType === 'text'\n ? 'Enter the 6-digit code we have texted to'\n : 'Enter the 6-digit code provided on the call to'}{' '}\n <FormatPhoneNumber mask value={props.phone?.value} />.\n </Text>\n </Grid2>\n\n <Grid2\n alignItems='center'\n display='flex'\n flexDirection='column'\n flexGrow={1}\n justifyContent='center'\n size={12}>\n <StyledFormFieldContainer>\n <FormField\n align='center'\n autoComplete='one-time-code'\n autoFocus\n disabled={postMfaSend.isLoading || isLoginDisabled}\n format='numericString'\n label='Security Code'\n maxLength={6}\n name='phoneVerification'\n type='tel'\n variant='large'\n />\n </StyledFormFieldContainer>\n <ResendOtpButton\n className='mt-4 mb-2'\n disabled={isLoginDisabled}\n inputName='phoneVerification'\n mfaEntryId={props.phone.mfaEntryId}\n onClick={onResendCode}\n variant='inline'\n />\n </Grid2>\n {postMfaVerify.error && (\n <Alert className='w-fit-content' severity='error'>\n {postMfaVerify.error.message}\n </Alert>\n )}\n <SubmitButton disabled={isLoginDisabled}>Continue</SubmitButton>\n </Grid2>\n </Form>\n ) : (\n <Form\n className='contents'\n initialValues={{ subType: 'text' }}\n onSubmit={onSubTypeSubmit}\n validateOnMount={false}\n validationSchema={subTypeSchema}>\n <Grid2 flexGrow={1} mt={8}>\n <FormRadioGroup\n hideLabel\n label='Mfa Method'\n name='subType'\n variant='card'>\n <Text align='center' color='grey50' variant='g2'>\n Select a method for{' '}\n <FormatPhoneNumber mask value={props.phone?.value} />\n </Text>\n <StyledRadioButton label='Receive a text message' value='text' />\n <StyledRadioButton label='Receive a voice call' value='voice' />\n </FormRadioGroup>\n </Grid2>\n <SubmitButton>Continue</SubmitButton>\n </Form>\n )}\n </>\n );\n});\n\nPhoneVerification.displayName = 'PhoneVerification';\n","import {\n differenceInDays,\n differenceInHours,\n differenceInMinutes,\n differenceInMonths\n} from 'date-fns';\n\nconst formatTimeAgo = (n: number, unit: string) => {\n return `${n} ${unit}${n !== 1 ? 's' : ''} ago`;\n};\n\nexport const getTimeAgo = (date: string) => {\n if (!date) {\n return '--';\n }\n\n const dateLeft = new Date();\n const dateRight = new Date(date);\n\n const minutes = differenceInMinutes(dateLeft, dateRight);\n const hours = differenceInHours(dateLeft, dateRight);\n const days = differenceInDays(dateLeft, dateRight);\n const months = differenceInMonths(dateLeft, dateRight);\n\n if (months > 0) {\n return formatTimeAgo(months, 'month');\n } else if (days > 0) {\n return formatTimeAgo(days, 'day');\n } else if (hours > 0) {\n return formatTimeAgo(hours, 'hour');\n } else if (minutes > 0) {\n return formatTimeAgo(minutes, 'min');\n } else {\n return 'Just now';\n }\n};\n","import { Card, Divider, Stack, styled } from '@mui/material';\nimport { useGetLoginLog } from '@sentinel/hooks';\nimport { getTimeAgo } from '@vestwell-frontend/helpers';\nimport { Pill, PLACEHOLDER, Text } from '@vestwell-frontend/ui';\n\nimport { FC, useEffect } from 'react';\n\nconst SectionCard = styled(Card)(props => ({\n [props.theme.breakpoints.down('sm')]: {\n width: '100%'\n },\n [props.theme.breakpoints.up('sm')]: {\n width: props.theme.spacing(140)\n }\n}));\n\nexport const RecentLoginsSection: FC = () => {\n const loginLog = useGetLoginLog(\n { lastAttemptsCount: 5 },\n {\n query: {\n refetchInterval: 60000, // Refetch every 1 minute (60000 milliseconds)\n refetchOnWindowFocus: true,\n select: data =>\n data?.map(log => ({\n ...log,\n formattedCreatedAt: getTimeAgo(log.createdAt)\n })) ?? []\n }\n }\n );\n\n useEffect(() => {\n // Effect runs when loginLog.dataUpdatedAt is changing\n // This will cause the component to re-render to show correct dates\n }, [loginLog.dataUpdatedAt]);\n\n return (\n <SectionCard data-component='section' data-testid='recentLogins'>\n <Text color='grey50' component='h2' variant='f2'>\n Recent Logins\n </Text>\n <Stack data-componet='recentLoginsList' role='list' spacing={4}>\n {loginLog.data?.map((log, index) => (\n <Stack\n data-componet='recentLoginsLog'\n data-testid={log.createdAt}\n key={log.createdAt}\n role='listitem'>\n <Stack direction='row' justifyContent='space-between'>\n <Text\n color='grey50'\n data-componet='recentLoginsLogBrowser'\n mb={0}\n variant='g2'>\n {log.browser ?? PLACEHOLDER}\n </Text>\n {index === 0 && (\n <Pill\n backgroundColor='sky'\n fontColor='blueSapphire'\n value='Current Session'\n />\n )}\n </Stack>\n <Stack\n direction='row'\n divider={<Divider flexItem orientation='vertical' />}\n spacing={2}>\n <Text\n color='grey200'\n data-componet='recentLoginsLogIpAddress'\n mb={0}\n variant='i1'>\n IP: {log.ipAddress ?? PLACEHOLDER}\n </Text>\n <Text\n color='grey200'\n data-componet='recentLoginsLogCreatedAt'\n mb={0}\n variant='i1'>\n {log.formattedCreatedAt}\n </Text>\n </Stack>\n </Stack>\n ))}\n </Stack>\n </SectionCard>\n );\n};\n\nRecentLoginsSection.displayName = 'RecentLoginsSection';\n","import {\n AdminPanelSettingsOutlined,\n ArrowDropDown,\n GppGoodOutlined,\n Logout,\n LoopOutlined\n} from '@mui/icons-material';\nimport { IconButton, ListItemIcon, Menu, MenuItem } from '@mui/material';\nimport { useGetPersonas } from '@sentinel/hooks';\nimport { isEmbeddedBrowser, logout } from '@vestwell-frontend/helpers';\nimport { useSecureStorage, useSubdomain } from '@vestwell-frontend/hooks';\n\nimport Cookies from 'js-cookie';\nimport { FC, useCallback, useEffect, useId, useState } from 'react';\nimport { useLocation } from 'react-use';\n\nimport { useAuth } from './AuthProvider';\n\nexport const AccountMenu: FC = () => {\n const menuId = useId();\n\n const subdomain = useSubdomain();\n\n const location = useLocation();\n\n const [anchorEl, setAnchorEl] = useState(null);\n\n const [baseUrl] = useSecureStorage('BASE_API_URL');\n\n const [isEmbedded, setIsEmbedded] = useState(false);\n\n const { isNative } = useAuth();\n\n const open = Boolean(anchorEl);\n\n const personas = useGetPersonas(\n {\n disableDetails: true\n },\n {\n query: {\n enabled: location.pathname !== '/personas',\n keepPreviousData: true,\n suspense: true,\n useErrorBoundary: true\n }\n }\n );\n\n useEffect(() => {\n (async () => {\n const embeddedResult = await isEmbeddedBrowser();\n setIsEmbedded(embeddedResult);\n })();\n }, []);\n\n const onClick = useCallback(event => {\n setAnchorEl(event.currentTarget);\n }, []);\n\n const onClose = useCallback(() => {\n setAnchorEl(null);\n }, []);\n\n const onLoginAndSecurity = useCallback(async () => {\n if (!isNative) {\n window.location.pathname = '/login-and-security';\n } else {\n window.location.assign(\n `${window.location.protocol}//${window.location.host}/auth/index.html?redirectUrl=/login-and-security?originPath=${window.location.pathname}`\n );\n }\n }, [isNative, baseUrl]);\n\n const onSwitchAccount = useCallback(async () => {\n if (!isNative) {\n Cookies.remove('isLoginDisclosure', {\n domain: `.${window.location.host.split('.').slice(-2).join('.')}`,\n path: '/'\n });\n\n window.location.pathname = '/personas';\n } else {\n window.location.assign(\n `${window.location.protocol}//${window.location.host}/auth/index.html?redirectUrl=/personas`\n );\n }\n }, [isNative, baseUrl]);\n\n return (\n <>\n <IconButton\n aria-controls={open ? menuId : undefined}\n aria-expanded={open ? 'true' : undefined}\n aria-haspopup='true'\n aria-label='Open Account Settings'\n data-testid='accountSettings'\n onClick={onClick}\n size='small'\n sx={{\n height: 'fit-content',\n width: 'fit-content'\n }}>\n <AdminPanelSettingsOutlined fontSize='large' />\n <ArrowDropDown />\n </IconButton>\n <Menu\n anchorEl={anchorEl}\n hideBackdrop\n id={menuId}\n onClick={onClose}\n onClose={onClose}\n open={open}>\n {subdomain !== 'abaretirement' && !isEmbedded && (\n <MenuItem onClick={onLoginAndSecurity}>\n <ListItemIcon>\n <GppGoodOutlined sx={{ fontSize: 24 }} />\n </ListItemIcon>\n Login & Security\n </MenuItem>\n )}\n {location.pathname !== '/personas' &&\n personas.data?.count > 1 &&\n !isEmbedded && (\n <MenuItem onClick={onSwitchAccount}>\n <ListItemIcon>\n <LoopOutlined sx={{ fontSize: 24 }} />\n </ListItemIcon>\n Switch Account\n </MenuItem>\n )}\n <MenuItem onClick={logout}>\n <ListItemIcon>\n <Logout sx={{ fontSize: 24 }} />\n </ListItemIcon>\n Sign out\n </MenuItem>\n </Menu>\n </>\n );\n};\n","import { useGetUserinfo } from '@sentinel/hooks';\n\nimport { useMemo } from 'react';\nimport { useLocation } from 'react-use';\n\nexport function useSubdomain(): string {\n const location = useLocation();\n const user = useGetUserinfo();\n\n return useMemo(\n // @ts-ignore\n () => user.data?.subDomain ?? location.host?.split('.')[0],\n [location.host, user.data]\n );\n}\n","import { SafeArea } from 'capacitor-plugin-safe-area';\n\ninterface SafeAreaInsets {\n top: string;\n bottom: string;\n left: string;\n right: string;\n}\n\nconst defaultInsets: SafeAreaInsets = {\n bottom: 'env(safe-area-inset-bottom)',\n left: 'env(safe-area-inset-left)',\n right: 'env(safe-area-inset-right)',\n top: 'env(safe-area-inset-top)'\n};\n\nexport const initializeSafeArea = async (): Promise<SafeAreaInsets> => {\n try {\n const { insets } = await SafeArea.getSafeAreaInsets();\n\n console.debug('Received safe area insets:', insets);\n\n Object.entries(insets).forEach(([key, value]) => {\n document.documentElement.style.setProperty(\n `--safe-area-inset-${key}`,\n `${value}px`\n );\n });\n\n const safeAreaInsets: SafeAreaInsets = {\n bottom: 'var(--safe-area-inset-bottom)',\n left: 'var(--safe-area-inset-left)',\n right: 'var(--safe-area-inset-right)',\n top: 'var(--safe-area-inset-top)'\n };\n return safeAreaInsets;\n } catch (e) {\n console.debug('Could not get safe area insets, using env() values', e);\n return defaultInsets;\n }\n};\n","import {\n AppBar,\n AppBarProps,\n Container,\n ContainerProps,\n styled\n} from '@mui/material';\n\nimport { DetailedHTMLProps, FC, HTMLAttributes } from 'react';\n\nimport { safeArea } from '../helpers/safeArea.style';\n\nexport type TopbarProps = DetailedHTMLProps<\n HTMLAttributes<HTMLElement>,\n HTMLElement\n> & {\n 'data-component'?: string;\n};\n\nconst TopbarStyled = styled(AppBar)<AppBarProps>(() => ({\n backgroundColor: 'rgba(255,255,255,1)',\n boxShadow: '0 0 #0000, 0 0 #0000, 1px 3px 5px #72727226',\n gridArea: 'topBar',\n paddingTop: safeArea.top,\n zIndex: 120\n}));\n\nconst ContainerStyled = styled(Container)<ContainerProps>(props => ({\n alignItems: 'center',\n display: 'flex',\n flexDirection: 'row',\n height: props.theme.spacing(16),\n justifyContent: 'space-between',\n maxWidth: '100%',\n paddingLeft: '0px !important',\n paddingRight: '0px !important',\n zIndex: 120,\n [props.theme.breakpoints.down('lg')]: {\n maxWidth: '100%'\n },\n [props.theme.breakpoints.up('lg')]: {\n maxWidth: '100%'\n }\n}));\n\nexport const Topbar: FC<TopbarProps> = props => {\n return (\n <TopbarStyled as='div' data-component='topBar'>\n <ContainerStyled>{props.children}</ContainerStyled>\n </TopbarStyled>\n );\n};\n","import { Box, styled, useMediaQuery } from '@mui/material';\nimport { AccountMenu } from '@vestwell-frontend/elements';\nimport { useWeglot } from '@vestwell-frontend/hooks';\nimport { initializeSafeArea, Topbar } from '@vestwell-frontend/ui';\n\nimport { FC, ReactNode } from 'react';\nimport { Outlet } from 'react-router-dom';\nimport { useEffectOnce, useLocation } from 'react-use';\n\nimport { routes } from '../router/routes';\nimport { BackgroundCard } from './BackgroundCard';\nimport { Banner } from './Banner';\nimport { Help } from './Help';\nimport { Page } from './Page';\n\nconst HelpContainer = styled('div')(({ theme }) => ({\n display: 'flex',\n flexDirection: 'column',\n [theme.breakpoints.up('sm')]: {\n alignItems: 'center',\n margin: 'auto'\n },\n [theme.breakpoints.down('sm')]: {\n width: '100%'\n }\n}));\n\nexport const Root: FC<{\n children?: ReactNode;\n isSpecialPage?: boolean;\n}> = props => {\n initializeSafeArea();\n const isMobile = useMediaQuery(theme => theme.breakpoints.down('sm'));\n const path = useLocation();\n const isSpecialPage =\n [\n routes.AUTHORIZATION,\n routes.LOGIN_AND_SECURITY,\n routes.PERSONAS,\n routes.PLATFORM_SELECTION,\n routes.LOGOUT\n ].includes(path.pathname as any) || props.isSpecialPage;\n const isTopBar =\n path.pathname === routes.PERSONAS ||\n path.pathname === routes.PLATFORM_SELECTION;\n const weglot = useWeglot();\n\n useEffectOnce(() => {\n weglot.syncLanguageWithCookie();\n });\n\n return (\n <>\n {isTopBar && (\n <Topbar>\n <Box ml='auto'>\n <AccountMenu />\n </Box>\n </Topbar>\n )}\n {!isSpecialPage && !isMobile && <Banner />}\n <Page>\n {isSpecialPage ? (\n props.children || <Outlet />\n ) : (\n <>\n {!isSpecialPage && isMobile && <Banner />}\n <HelpContainer>\n <BackgroundCard>{props.children || <Outlet />}</BackgroundCard>\n <Help />\n </HelpContainer>\n </>\n )}\n </Page>\n </>\n );\n};\n\nRoot.displayName = 'Root';\n","import { logout } from '@vestwell-frontend/helpers';\nimport { Button, Text } from '@vestwell-frontend/ui';\n\nimport { FC, memo } from 'react';\n\nimport { routes } from '../router/routes';\n\nexport type SignInButtonProps = {\n forceLogout?: boolean;\n mb?: number;\n};\n\nexport const SignInLink: FC<SignInButtonProps> = memo(\n (props: SignInButtonProps) => {\n return (\n <Text align='center' mb={props.mb}>\n <Button\n data-testid='signInLink'\n onClick={props.forceLogout ? logout : undefined}\n to={props.forceLogout ? undefined : routes.SIGN_IN}\n variant='inline'>\n Return to login\n </Button>\n </Text>\n );\n }\n);\n\nSignInLink.displayName = 'SignInLink';\n","import { Box, createSvgIcon, SvgIconProps } from '@mui/material';\nimport { useDocumentTitle } from '@vestwell-frontend/hooks';\nimport { Text } from '@vestwell-frontend/ui';\n\nimport { FC } from 'react';\n\nexport const AccountAccessIssueIcon: FC<SvgIconProps> = createSvgIcon(\n <svg\n fill='none'\n height='121'\n viewBox='0 0 120 121'\n width='120'\n xmlns='http://www.w3.org/2000/svg'>\n <rect\n height='58'\n rx='2'\n stroke='#DDC04A'\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeWidth='1.5'\n width='103'\n x='9'\n y='31.5'\n />\n <path\n clipRule='evenodd'\n d='M12.25 37.5C12.25 35.9812 13.4812 34.75 15 34.75H106C107.519 34.75 108.75 35.9812 108.75 37.5V83.5C108.75 85.0188 107.519 86.25 106 86.25H15C13.4812 86.25 12.25 85.0188 12.25 83.5V37.5ZM15 36.25C14.3096 36.25 13.75 36.8096 13.75 37.5V83.5C13.75 84.1904 14.3096 84.75 15 84.75H106C106.69 84.75 107.25 84.1904 107.25 83.5V37.5C107.25 36.8096 106.69 36.25 106 36.25H15Z'\n fill='url(#paint0_linear_6582_12552)'\n fillRule='evenodd'\n />\n <path\n d='M93 98.5C93 78.6177 76.8823 62.5 57 62.5C37.1177 62.5 21 78.6177 21 98.5H93Z'\n fill='white'\n />\n <path\n d='M93 98.5C93 78.6177 76.8823 62.5 57 62.5C37.1177 62.5 21 78.6177 21 98.5H93Z'\n fill='url(#paint1_linear_6582_12552)'\n />\n <path\n d='M93 96.5C93 76.6177 76.8823 60.5 57 60.5C37.1177 60.5 21 76.6177 21 96.5'\n stroke='#033952'\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeWidth='1.5'\n />\n <circle cx='57' cy='34.5' fill='white' r='20' />\n <circle cx='57' cy='34.5' fill='url(#paint2_linear_6582_12552)' r='20' />\n <circle cx='57' cy='32.5' r='20' stroke='#033952' strokeWidth='1.5' />\n <circle cx='91' cy='68.5' fill='#6E6E6E' r='14' />\n <rect fill='white' height='3' rx='1.5' width='3' x='89.5' y='72.5' />\n <path\n d='M88 65.5C88 63.8431 89.3431 62.5 91 62.5C92.6569 62.5 94 63.8431 94 65.5C94 66.6356 93.369 67.6239 92.4385 68.1333C91.7118 68.5311 91 69.1716 91 70V70.5'\n stroke='white'\n strokeLinecap='round'\n strokeWidth='2'\n />\n <defs>\n <linearGradient\n gradientUnits='userSpaceOnUse'\n id='paint0_linear_6582_12552'\n x1='60.5'\n x2='60.5'\n y1='34.75'\n y2='86.25'>\n <stop stopColor='white' stopOpacity='0' />\n <stop offset='0.635417' stopColor='#2C8FC5' stopOpacity='0.09' />\n </linearGradient>\n <linearGradient\n gradientUnits='userSpaceOnUse'\n id='paint1_linear_6582_12552'\n x1='57'\n x2='57'\n y1='62.5'\n y2='94.5'>\n <stop stopColor='#F5F9FF' />\n <stop offset='1' stopColor='white' />\n </linearGradient>\n <linearGradient\n gradientUnits='userSpaceOnUse'\n id='paint2_linear_6582_12552'\n x1='57'\n x2='57'\n y1='14.5'\n y2='41'>\n <stop stopColor='#F5F9FF' />\n <stop offset='1' stopColor='white' />\n </linearGradient>\n </defs>\n </svg>,\n 'AccountAccessIssueIcon'\n);\n\nexport function AccountAccessIssuePage() {\n useDocumentTitle('Account Access Issue');\n\n return (\n <Box mb={8} px={8}>\n <Box display='flex' justifyContent='center'>\n <AccountAccessIssueIcon sx={{ height: 120, width: 120 }} />\n </Box>\n <Text\n align='center'\n color='emphasize'\n data-testid='accountAccessIssueTitle'\n mb={8}\n variant='b2'>\n Account Access Issue\n </Text>\n <Text color='grey100' fontWeight={400} textAlign='center' variant='f2'>\n Your account is not yet available, or there was an issue linking your\n profile.\n </Text>\n <Text color='grey100' fontWeight={400} textAlign='center' variant='f2'>\n Contact your employer for assistance.\n </Text>\n </Box>\n );\n}\n","import { Box } from '@mui/material';\nimport { useDocumentTitle } from '@vestwell-frontend/hooks';\nimport { Link, Text } from '@vestwell-frontend/ui';\n\nimport { SignInLink } from '../components';\nimport { routes } from '../router/routes';\n\nexport function AccountLockedPage() {\n useDocumentTitle('Account Locked');\n\n return (\n <>\n <Box mb={8} px={8}>\n <Text\n align='center'\n color='emphasize'\n data-testid='accountLockedTitle'\n mb={8}\n variant='b2'>\n Account Locked\n </Text>\n <Text color='grey100' variant='f2'>\n You have attempted too many invalid sign-in attempts. For your\n security, your account has been locked.\n </Text>\n <Text color='grey100' variant='f2'>\n In order to regain access to your account, please{' '}\n <Link data-testid='forgotPasswordLink' to={routes.FORGOT_PASSWORD}>\n reset your password.\n </Link>\n </Text>\n </Box>\n <SignInLink />\n </>\n );\n}\n\nAccountLockedPage.displayName = 'AccountLockedPage';\n","import { Grid2, styled } from '@mui/material';\nimport { useCamelCase, useDocumentTitle } from '@vestwell-frontend/hooks';\nimport {\n Button,\n Form,\n FormRadioGroup,\n FormSaveButton,\n RadioButton,\n Text\n} from '@vestwell-frontend/ui';\n\nimport { FC, useCallback } from 'react';\nimport * as yup from 'yup';\n\nimport { useConfig } from '../contexts';\nimport { routes } from '../router/routes';\n\nconst schema = yup.object().shape({\n type: yup.string().required('Required')\n});\n\nconst StyledRadioButton = styled(RadioButton)(({ theme }) => ({\n marginLeft: 0,\n paddingBottom: theme.spacing(4),\n paddingTop: theme.spacing(4)\n}));\n\nexport const AccountSetupPage: FC = () => {\n const config = useConfig();\n\n useDocumentTitle(config.login?.accountSetup?.page?.title);\n\n const onSubmit = useCallback(values => {\n window.location.href = values?.type;\n }, []);\n\n return (\n <>\n <Text align='center' color='emphasize' mb={8} variant='c2'>\n {config.login?.accountSetup?.page?.title}\n </Text>\n <Form\n className='contents'\n data-testid={useCamelCase(config.login?.accountSetup?.page?.title)}\n initialValues={{ type: '' }}\n onSubmit={onSubmit}\n validateOnMount\n validationSchema={schema}>\n <Grid2\n alignItems='center'\n columns={12}\n container\n direction='column'\n spacing={4}>\n <Grid2\n size={{\n lg: 10,\n xs: 12\n }}>\n <FormRadioGroup\n fullWidth\n hideError\n hideLabel\n label={config.login?.accountSetup?.page?.title}\n name='type'\n position='left'\n variant='card'>\n {config.login?.accountSetup?.page?.selections?.map(option => {\n return (\n <StyledRadioButton\n key={option?.title}\n label={\n <div>\n <Text\n color='grey50'\n component='h2'\n mb={2}\n mt={1}\n variant='g2'>\n {option?.title}\n </Text>\n <Text color='grey300' mb={0} variant='i1'>\n {option?.description}\n </Text>\n </div>\n }\n value={option?.link}\n />\n );\n })}\n </FormRadioGroup>\n </Grid2>\n <Grid2\n size={{\n lg: 10,\n xs: 12\n }}>\n <FormSaveButton data-testid='continue' fullWidth>\n Continue\n </FormSaveButton>\n </Grid2>\n <Grid2\n size={{\n lg: 10,\n xs: 12\n }}>\n <Button\n data-testid='cancel'\n fullWidth\n to={routes.SIGN_IN}\n variant='text'>\n Cancel\n </Button>\n </Grid2>\n </Grid2>\n </Form>\n </>\n );\n};\n\nAccountSetupPage.displayName = 'AccountSetupPage';\n","import { FC, useEffect } from 'react';\nimport { useNavigate } from 'react-router-dom';\n\nexport const Redirect: FC<{ to: string }> = props => {\n const navigate = useNavigate();\n\n useEffect(() => {\n navigate(props.to);\n });\n\n return null;\n};\n","import { Redirect } from '@vestwell-frontend/ui';\n\nimport { FC } from 'react';\nimport { useLocation } from 'react-use';\n\nexport const AuthRedirectingPage: FC<unknown> = () => {\n const { search } = useLocation();\n const urlParams = new URLSearchParams(search);\n const redirectUrl = urlParams.get('redirectUrl');\n\n let path = '/';\n\n if (redirectUrl) {\n path = `${redirectUrl}`;\n }\n\n return <Redirect to={path} />;\n};\n","import { SecureStoragePlugin } from 'capacitor-secure-storage-plugin';\nimport { SemVer } from 'semver';\n\nconst compareToCurrentVersion = async versionTarget => {\n let capgoVersion;\n try {\n capgoVersion = await SecureStoragePlugin.get({\n key: 'CAPGO_BUNDLE'\n });\n } catch {\n // @ts-ignore: if the version is requested from embedded browser, it will be in window, not secure storage\n capgoVersion = { value: window.CAPGO_BUNDLE };\n }\n\n try {\n const cutoffVersion = new SemVer(versionTarget);\n if (!capgoVersion.value) {\n console.warn('No CAPGO_BUNDLE found');\n return 0;\n } else {\n const currentVersion = new SemVer(capgoVersion.value);\n return currentVersion.compare(cutoffVersion);\n }\n } catch (e) {\n console.warn('Error getting CAPGO_BUNDLE', e);\n }\n};\n\nexport const isMobileVersionHigherThan = async versionTarget => {\n try {\n const compareVersions = await compareToCurrentVersion(versionTarget);\n return compareVersions > 0;\n } catch (e) {\n console.error(e);\n return false;\n }\n};\n\nexport const isMobileVersionLowerThan = async versionTarget => {\n try {\n const compareVersions = await compareToCurrentVersion(versionTarget);\n return compareVersions < 0;\n } catch (e) {\n console.error(e);\n return false;\n }\n};\n","import { useGetUserinfo, usePostToken } from '@sentinel/hooks';\nimport { useAuth } from '@vestwell-frontend/elements';\nimport {\n broadcastToApp,\n isEmbeddedBrowser,\n isMobileVersionHigherThan\n} from '@vestwell-frontend/helpers';\nimport {\n useDocumentTitle,\n useNavigate,\n useSearchParams\n} from '@vestwell-frontend/hooks';\n\nimport { useState } from 'react';\nimport { useMount, useUpdateEffect } from 'react-use';\n\nimport { routes } from '../router/routes';\n\nexport function AuthorizationPage() {\n useDocumentTitle('Authorization');\n\n const params = useSearchParams();\n\n const { setToken } = useAuth();\n const [isEmbedded, setIsEmbedded] = useState(false);\n const [isHigherVersion, setIsHigherVersion] = useState(null);\n\n const navigate = useNavigate();\n\n const postToken = usePostToken({\n mutation: {\n onSuccess: data => {\n setToken(data);\n }\n }\n });\n const userInfo = useGetUserinfo({\n query: {\n enabled: !!postToken.data?.access_token\n }\n });\n\n useMount(async () => {\n setToken('');\n const embedded = await isEmbeddedBrowser();\n setIsEmbedded(embedded);\n if (embedded) {\n const isHigher = await isMobileVersionHigherThan('4.0.0');\n setIsHigherVersion(isHigher);\n }\n await postToken.mutateAsync({\n //@ts-expect-error: TODO: fix types\n data: { code: params.code, grant_type: 'authorization_code' }\n });\n });\n\n useUpdateEffect(() => {\n if (userInfo.data && isEmbedded && isHigherVersion) {\n broadcastToApp('ROUTE_TO_PERSONAS', {\n message: 'Authorization complete'\n });\n return;\n }\n\n //@ts-expect-error TODO: fix types\n if (userInfo.data?.entity && (!isEmbedded || isHigherVersion !== null)) {\n navigate(routes.PERSONAS + '?redirect=true');\n return;\n }\n\n if (userInfo.data && (!isEmbedded || isHigherVersion !== null)) {\n navigate(routes.PERSONAS);\n }\n }, [userInfo.data, isEmbedded, isHigherVersion]);\n\n return null;\n}\n\nAuthorizationPage.displayName = 'AuthorizationPage';\n","import { useRef } from 'react';\nimport { useNavigate as useNavigateFn } from 'react-router-dom';\n\n/**\n * wrapper around react-dom-router useNavigation\n * to provide support for relative pathing:\n *\n * e.g. ../../foo\n */\nexport const useNavigate = (): ((path: string | -1) => void) => {\n const navigate = useNavigateFn();\n\n const fn = useRef((path: string | -1) => {\n const backParts =\n typeof path === 'string' &&\n path.includes('../') &&\n path.split('../').filter(part => !part);\n const urlPaths = window.location.pathname.split('/');\n\n const url = backParts\n ? [\n ...(urlPaths.splice(\n urlPaths.length - backParts.length,\n backParts.length\n ) && urlPaths),\n path.replaceAll('../', '')\n ].join('/')\n : path;\n\n return typeof url === 'string' ? navigate(url) : window.history.back();\n });\n\n return fn.current;\n};\n","import { Alert, Box, styled } from '@mui/material';\nimport { usePostForgotPassword } from '@sentinel/hooks';\nimport { validateEmail } from '@vestwell-frontend/helpers';\nimport { useDocumentTitle } from '@vestwell-frontend/hooks';\nimport { Form, FormField, Text } from '@vestwell-frontend/ui';\n\nimport { useState } from 'react';\nimport * as yup from 'yup';\n\nimport { SignInLink, SubmitButton } from '../components';\n\nexport const forgotPasswordSchema = yup.object().shape({\n email: validateEmail('Please use standard email format').required('Required'),\n emailConfirm: validateEmail('Please use standard email format')\n .oneOf([yup.ref('email'), undefined], 'Emails Must Match')\n .required('Required')\n});\n\nconst FormContainer = styled(Form)(({ theme }) => ({\n width: theme.spacing(64)\n}));\n\nconst StyledFormFieldContainer = styled('div')(({ theme }) => ({\n '& > .MuiFormControl-root': {\n marginBottom: theme.spacing(2),\n width: theme.spacing(64)\n }\n}));\n\nconst StyledAlert = styled(Alert)(({ theme }) => ({\n marginTop: theme.spacing(0),\n width: 'fit-content'\n}));\n\nexport function ForgotPasswordPage() {\n useDocumentTitle('Password Reset');\n\n const [values, setValues] = useState({\n email: '',\n emailConfirm: ''\n });\n\n const forgotPassword = usePostForgotPassword();\n\n const onSubmit = async values => {\n const res = await forgotPassword.mutateAsync({\n data: {\n email: values.email\n }\n });\n\n console.log(res.link);\n };\n\n return (\n <>\n {forgotPassword.isSuccess ? (\n <Box px={8}>\n <Text\n align='center'\n color='emphasize'\n data-testid='resetLinkEmailedTitle'\n mb={8}\n variant='b2'>\n Reset Link Emailed\n </Text>\n <Text color='grey100' variant='f2'>\n Thanks for submitting your request.\n </Text>\n <Text color='grey100'>\n If you have an account associated with: <b>{values?.email}</b> you\n can expect to see a password reset link in your inbox within{' '}\n <b>10 minutes</b>.\n </Text>\n <Text color='grey100' mb={8}>\n If you do not see an email in that time, please check your spam\n folder or you may need to try a different email address. It can be a\n personal or work email address, so try both if you are having\n trouble.\n </Text>\n <SignInLink />\n </Box>\n ) : (\n <>\n <Text\n align='center'\n color='emphasize'\n data-testid='forgotPasswordTitle'\n mb={8}\n variant='b2'>\n Password Reset\n </Text>\n <FormContainer\n initialValues={{\n email: '',\n emailConfirm: ''\n }}\n onChange={setValues}\n onSubmit={onSubmit}\n validationSchema={forgotPasswordSchema}>\n <StyledFormFieldContainer>\n <FormField format='email' label='Email' name='email' />\n <FormField\n format='email'\n label='Confirm email'\n name='emailConfirm'\n />\n </StyledFormFieldContainer>\n {forgotPassword.error && (\n <StyledAlert severity='error'>\n {forgotPassword.error?.message}\n </StyledAlert>\n )}\n <Text color='grey100' variant='i1'>\n Enter a valid email associated with your account, and we will send\n you a link to reset your password.\n </Text>\n <SubmitButton>Send Password Reset Link</SubmitButton>\n </FormContainer>\n <SignInLink />\n </>\n )}\n </>\n );\n}\n\nForgotPasswordPage.displayName = 'ForgotPasswordPage';\n","import { ArrowBack } from '@mui/icons-material';\nimport { Stack, styled } from '@mui/material';\nimport {\n broadcastToApp,\n isEmbeddedBrowser,\n isNativeMobile\n} from '@vestwell-frontend/helpers';\nimport { useDocumentTitle } from '@vestwell-frontend/hooks';\nimport { Button, Text } from '@vestwell-frontend/ui';\n\nimport { useCallback, useEffect, useState } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { useLocation } from 'react-use';\n\nimport {\n LoginSettingsSection,\n MfaSection,\n RecentLoginsSection\n} from '../components';\n\nconst StyledButton = styled(Button)({\n alignSelf: 'center'\n});\n\nexport function LoginAndSecurityPage() {\n useDocumentTitle('Login & Security');\n\n const [isEmbedded, setIsEmbedded] = useState(false);\n const [isNative, setIsNative] = useState(false);\n\n const { search } = useLocation();\n\n useEffect(() => {\n (async () => {\n const isEmbeddedBr = await isEmbeddedBrowser();\n setIsEmbedded(isEmbeddedBr);\n const isNativeApp = await isNativeMobile();\n setIsNative(isNativeApp);\n })();\n }, []);\n\n const navigate = useNavigate();\n\n const onBack = useCallback(() => {\n if (!isEmbedded && !isNative) {\n navigate(-1);\n } else if (!isEmbedded && isNative) {\n const urlParams = new URLSearchParams(search);\n const originPath = urlParams.get('originPath');\n const portal = /\\/(.+?)\\//.exec(originPath);\n if (portal && portal.length) {\n window.location.assign(\n `${window.location.protocol}//${window.location.host}/${portal[1]}/index.html?redirectUrl=${originPath}`\n );\n } else {\n // Page accessed from persona selector\n window.location.assign(\n `${window.location.protocol}//${window.location.host}/auth/index.html?redirectUrl=${originPath}`\n );\n }\n } else {\n broadcastToApp('CLOSE');\n }\n }, [isEmbedded, isNative, search]);\n\n return (\n <Stack my={8} spacing={6}>\n <Stack>\n <StyledButton\n onClick={onBack}\n startIcon={<ArrowBack fontSize='small' />}\n variant='inline'>\n Back\n </StyledButton>\n <Text align='center' color='black' mb={6} variant='b2' width='100%'>\n Login & Security\n </Text>\n </Stack>\n <LoginSettingsSection />\n <MfaSection />\n <RecentLoginsSection />\n </Stack>\n );\n}\n\nLoginAndSecurityPage.displayName = 'LoginAndSecurityPage';\n","import { logout } from '@vestwell-frontend/helpers';\nimport { useDocumentTitle } from '@vestwell-frontend/hooks';\nimport { Loader } from '@vestwell-frontend/ui';\n\nimport { useSearchParams } from 'react-router-dom';\nimport { useMount } from 'react-use';\n\nexport function LogoutPage() {\n useDocumentTitle('Signing out');\n\n const [params] = useSearchParams();\n\n useMount(async () => {\n await logout(params.get('timeout') === 'true');\n });\n\n return <Loader />;\n}\n\nLogoutPage.displayName = 'LogoutPage';\n","import { KeyboardArrowRightOutlined } from '@mui/icons-material';\nimport { Alert, Grid2 } from '@mui/material';\nimport { useGetQrCode, usePostMfaSetup } from '@sentinel/hooks';\nimport { useDocumentTitle } from '@vestwell-frontend/hooks';\nimport {\n Button,\n Link,\n ModalBody,\n ModalFooter,\n Text,\n useWizard\n} from '@vestwell-frontend/ui';\n\nimport { FC, useCallback } from 'react';\nimport { useMount } from 'react-use';\n\nimport { MfaQrCode } from '../components';\nimport { MfaNudgeState } from '../config/mfaNudge';\n\nexport const MfaNudgeAppSetupPage: FC = () => {\n const ctx = useWizard<MfaNudgeState>();\n\n useDocumentTitle(ctx.step.title as string);\n\n const setup = usePostMfaSetup({\n mutation: {\n onSuccess: res => {\n console.log(res.code);\n }\n }\n });\n\n const qrCode = useGetQrCode({\n query: {\n enabled: setup.isSuccess,\n refetchOnMount: 'always',\n suspense: false\n }\n });\n\n const onBack = useCallback(async () => {\n ctx.setState({ isMfaMethodSelected: false });\n }, []);\n\n const onContinue = useCallback(() => {\n ctx.setState({ hasSetupMfaMethod: true });\n }, []);\n\n useMount(async () => {\n await setup.mutateAsync({\n data: { type: 'app' }\n });\n });\n\n const isLoading = setup.isLoading || qrCode.isInitialLoading;\n\n return (\n <>\n <ModalBody>\n <Grid2\n alignItems='center'\n columns={12}\n container\n direction='column'\n spacing={4}>\n <Grid2\n alignItems='center'\n display='flex'\n flexDirection='column'\n size={{\n lg: 12\n }}>\n <Text\n align='center'\n color='oxfordBlue'\n component='span'\n mb={2}\n variant='f2'>\n Two-Factor Authentication\n </Text>\n <Text align='center' color='oxfordBlue' variant='b2'>\n {ctx.step.title}\n </Text>\n </Grid2>\n <Grid2\n alignItems='center'\n display='flex'\n flexDirection='column'\n size={{\n lg: 11,\n xs: 12\n }}>\n <Text align='center'>\n Download an authenticator app such as{' '}\n <Link\n data-testid='googleAuthenticatorLink'\n external\n to='https://support.google.com/accounts/answer/1066447'>\n Google Authenticator\n </Link>\n , or{' '}\n <Link\n data-testid='microsoftAuthenticatorLink'\n external\n to='https://support.microsoft.com/en-au/account-billing/download-and-install-the-microsoft-authenticator-app-351498fc-850a-45da-b7b6-27e523b8702a'>\n Microsoft Authenticator\n </Link>\n . Once downloaded, scan the following barcode from within the app.\n </Text>\n </Grid2>\n <Grid2\n alignItems='center'\n display='flex'\n flexDirection='column'\n size={{\n lg: 9,\n xs: 12\n }}>\n <MfaQrCode\n isLoading={qrCode.isInitialLoading}\n qrCode={qrCode.data?.qrCode}\n secret={qrCode.data?.secret}\n />\n </Grid2>\n {(setup.error || qrCode.error) && (\n <Grid2\n alignItems='center'\n display='flex'\n flexDirection='column'\n size={{\n lg: 12\n }}>\n <Alert severity='error' variant='standard'>\n {setup.error?.message || qrCode.error?.message}\n </Alert>\n </Grid2>\n )}\n </Grid2>\n </ModalBody>\n <ModalFooter justifyBetween noBoxShadow>\n <Button onClick={onBack} variant='text'>\n Back\n </Button>\n <Button\n disabled={isLoading || !!setup.error || !!qrCode.error}\n endIcon={<KeyboardArrowRightOutlined fontSize='small' />}\n onClick={onContinue}>\n Next: Verify\n </Button>\n </ModalFooter>\n </>\n );\n};\n\nMfaNudgeAppSetupPage.displayName = 'MfaNudgeAppSetupPage';\n","import { createSvgIcon, SvgIconProps } from '@mui/material';\n\nimport { FC } from 'react';\n\nexport const AvatarIcon: FC<SvgIconProps> = createSvgIcon(\n <svg\n fill='none'\n height='132'\n viewBox='0 0 132 132'\n width='132'\n xmlns='http://www.w3.org/2000/svg'>\n <g filter='url(#filter0_d_629_68979)'>\n <rect fill='white' height='120' rx='60' width='120' x='6' y='2' />\n <path\n d='M35 79.4927C35 65.6341 46.2346 54.3994 60.0933 54.3994C65.4247 54.3994 70.3678 56.0621 74.4323 58.8972M74.4323 33.339C74.4323 41.2582 68.0125 47.678 60.0933 47.678C52.1741 47.678 45.7543 41.2582 45.7543 33.339C45.7543 25.4198 52.1741 19 60.0933 19C68.0125 19 74.4323 25.4198 74.4323 33.339Z'\n stroke='#2C8FC5'\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeWidth='1.5'\n />\n <rect\n fill='white'\n height='25.1928'\n rx='2.68856'\n stroke='#39CC97'\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeWidth='1.5'\n width='33.0815'\n x='65.918'\n y='77.6007'\n />\n <rect\n fill='#E7FFF3'\n height='18.82'\n rx='2.24047'\n width='26.8856'\n x='69.0166'\n y='80.8369'\n />\n <path\n d='M72.5342 77.6007V71.4933C72.5342 66.0122 76.9775 61.5688 82.4586 61.5688V61.5688C87.9398 61.5688 92.3831 66.0122 92.3831 71.4933V77.6007'\n stroke='#39CC97'\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeWidth='1.5'\n />\n <path\n d='M76.0967 77.6007V71.4933C76.0967 67.9798 78.945 65.1315 82.4585 65.1315V65.1315C85.9721 65.1315 88.8203 67.9798 88.8203 71.4933V77.6007'\n stroke='#39CC97'\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeWidth='1.5'\n />\n <path\n d='M73.8066 89.5609L79.7868 95.541L90.8563 84.4714'\n stroke='#39CC97'\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeWidth='1.5'\n />\n </g>\n <defs>\n <filter\n colorInterpolationFilters='sRGB'\n filterUnits='userSpaceOnUse'\n height='132'\n id='filter0_d_629_68979'\n width='132'\n x='0'\n y='0'>\n <feFlood floodOpacity='0' result='BackgroundImageFix' />\n <feColorMatrix\n in='SourceAlpha'\n result='hardAlpha'\n type='matrix'\n values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0'\n />\n <feMorphology\n in='SourceAlpha'\n operator='erode'\n radius='4'\n result='effect1_dropShadow_629_68979'\n />\n <feOffset dy='4' />\n <feGaussianBlur stdDeviation='5' />\n <feComposite in2='hardAlpha' operator='out' />\n <feColorMatrix\n type='matrix'\n values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.12 0'\n />\n <feBlend\n in2='BackgroundImageFix'\n mode='normal'\n result='effect1_dropShadow_629_68979'\n />\n <feBlend\n in='SourceGraphic'\n in2='effect1_dropShadow_629_68979'\n mode='normal'\n result='shape'\n />\n </filter>\n </defs>\n </svg>,\n 'AvatarIcon'\n);\n\nAvatarIcon.displayName = 'AvatarIcon';\n","import { KeyboardArrowRightOutlined } from '@mui/icons-material';\nimport { Grid2, styled } from '@mui/material';\nimport { useDocumentTitle } from '@vestwell-frontend/hooks';\nimport {\n AvatarIcon,\n Button,\n ModalBody,\n ModalFooter,\n Text,\n useWizard\n} from '@vestwell-frontend/ui';\n\nimport { MfaNudgeState } from '../config/mfaNudge';\nimport { routes } from '../router/routes';\n\nconst StyledModalBody = styled(ModalBody)({\n background: 'linear-gradient(180deg, #DFF4FF 0%, #FFFFFF 45.01%), #FFFFFF'\n});\n\nconst StyledAvatarIcon = styled(AvatarIcon)(({ theme }) => ({\n height: theme.spacing(33),\n width: theme.spacing(33)\n}));\n\nexport function MfaNudgeCompletedPage() {\n const ctx = useWizard<MfaNudgeState>();\n\n useDocumentTitle(ctx.step.title as string);\n\n return (\n <>\n <StyledModalBody>\n <Grid2\n alignItems='center'\n columns={12}\n container\n direction='column'\n spacing={2}>\n <Grid2\n display='flex'\n flexDirection='row'\n justifyContent='center'\n size={{\n lg: 12\n }}>\n <StyledAvatarIcon />\n </Grid2>\n <Grid2\n alignItems='center'\n display='flex'\n justifyContent='center'\n size={{\n lg: 9,\n md: 10,\n xs: 12\n }}>\n <Text align='center' variant='b2'>\n {ctx.step.title}\n </Text>\n </Grid2>\n <Grid2\n alignItems='center'\n display='flex'\n flexDirection='column'\n justifyContent='center'\n size={{\n lg: 10,\n xs: 12\n }}>\n <Text align='center'>\n Your account is now more secure. We will prompt you for the\n security code the next time you log in. You can add additional\n methods or change the selected authentication method from the\n security menu.\n </Text>\n </Grid2>\n </Grid2>\n </StyledModalBody>\n <ModalFooter noBoxShadow>\n <Button\n autoFocus\n endIcon={<KeyboardArrowRightOutlined fontSize='small' />}\n to={routes.LOGIN_VERIFICATION}>\n Continue to your portal\n </Button>\n </ModalFooter>\n </>\n );\n}\n\nMfaNudgeCompletedPage.displayName = 'MfaNudgeCompletedPage';\n","import { KeyboardArrowRightOutlined } from '@mui/icons-material';\nimport { Grid2, Stack, styled } from '@mui/material';\nimport { useDocumentTitle } from '@vestwell-frontend/hooks';\nimport {\n Button,\n Form,\n FormRadioGroup,\n FormSaveButton,\n Link,\n ModalBody,\n ModalFooter,\n RadioButton,\n Text,\n useWizard\n} from '@vestwell-frontend/ui';\n\nimport { FC, useCallback } from 'react';\nimport * as yup from 'yup';\n\nimport { MfaNudgeState } from '../config/mfaNudge';\n\nconst schema = yup.object().shape({\n mfaMethod: yup.string().required('Required')\n});\n\nconst StyledRadioButton = styled(RadioButton)(({ theme }) => ({\n paddingBottom: theme.spacing(4),\n paddingTop: theme.spacing(4)\n}));\n\nexport const MfaNudgeMethodPage: FC = () => {\n const ctx = useWizard<MfaNudgeState>();\n\n useDocumentTitle(ctx.step.title as string);\n\n const onSubmit = useCallback(async data => {\n ctx.setState({\n isMfaMethodSelected: true,\n mfaMethod: data.mfaMethod\n });\n }, []);\n\n const onBack = useCallback(() => {\n ctx.setState({\n isUserReadyToEnableMfa: false\n });\n }, []);\n\n return (\n <Form\n className='contents'\n initialValues={{ mfaMethod: 'app' }}\n onSubmit={onSubmit}\n validateOnMount\n validationSchema={schema}>\n <ModalBody>\n <Grid2\n alignItems='center'\n columns={12}\n container\n direction='column'\n spacing={4}>\n <Grid2\n alignItems='center'\n display='flex'\n flexDirection='column'\n size={{\n lg: 12\n }}>\n <Text\n align='center'\n color='oxfordBlue'\n component='span'\n mb={2}\n variant='f2'>\n Two-Factor Authentication\n </Text>\n <Text align='center' color='oxfordBlue' variant='b2'>\n {ctx.step.title}\n </Text>\n </Grid2>\n <Grid2\n size={{\n lg: 10,\n xs: 12\n }}>\n <Text align='center' color='black' mb={4}>\n As an added layer of security, you must enter a security code\n after entering your password. Select your preferred method to\n receive security codes.\n </Text>\n </Grid2>\n <Grid2\n size={{\n lg: 10,\n xs: 12\n }}>\n <FormRadioGroup\n fullWidth\n hideLabel\n label='Mfa Method'\n name='mfaMethod'\n variant='card'>\n <Stack spacing={4}>\n <StyledRadioButton\n label={\n <div>\n <Text color='grey300' mb={0} variant='k3'>\n Recommended\n </Text>\n <Text color='grey50' component='h2' mb={0} variant='f2'>\n Authentication App\n </Text>\n <Text color='grey300' mb={0} variant='i1'>\n (ex.{' '}\n <Link\n data-testid='googleAuthenticatorLink'\n external\n to='https://support.google.com/accounts/answer/1066447'>\n Google Authenticator\n </Link>\n , \n <Link\n data-testid='googleAuthenticatorLink'\n external\n to='https://support.microsoft.com/en-au/account-billing/download-and-install-the-microsoft-authenticator-app-351498fc-850a-45da-b7b6-27e523b8702a'>\n Microsoft Authenticator\n </Link>\n )\n </Text>\n </div>\n }\n value='app'\n />\n\n <StyledRadioButton\n label={\n <div>\n <Text color='grey50' component='h2' mb={0} variant='f2'>\n Phone Number\n </Text>\n <Text\n color='grey300'\n display='block'\n mb={0}\n mt={2}\n variant='i1'>\n Verify your identity via a text message or voice call.\n </Text>\n <Text color='grey300' display='block' mb={0} variant='i1'>\n Standard rates may apply.\n </Text>\n </div>\n }\n value='phone'\n />\n </Stack>\n </FormRadioGroup>\n </Grid2>\n </Grid2>\n </ModalBody>\n <ModalFooter justifyBetween noBoxShadow>\n <Button onClick={onBack} variant='text'>\n Back\n </Button>\n <FormSaveButton\n data-testid='nextSetup'\n endIcon={<KeyboardArrowRightOutlined fontSize='small' />}>\n Next: Set up\n </FormSaveButton>\n </ModalFooter>\n </Form>\n );\n};\n\nMfaNudgeMethodPage.displayName = 'MfaNudgeMethodPage';\n","import { WizardStep } from '@vestwell-frontend/ui';\n\nexport type MfaNudgeState = {\n hasSetupMfaMethod?: boolean;\n hasSetupMfaSkipped?: boolean;\n hasSetupMfaVerified?: boolean;\n isMfaEnabled?: boolean;\n isMfaMethodSelected?: boolean;\n isUserReadyToEnableMfa?: boolean;\n mfaMethod?: 'app' | 'phone';\n mfaMethodSubType?: 'text' | 'voice';\n mfaPhone?: string;\n};\n\nexport const mfaNudge: {\n initialState: MfaNudgeState;\n steps: WizardStep<MfaNudgeState>[];\n} = {\n initialState: {\n hasSetupMfaMethod: false,\n hasSetupMfaSkipped: false,\n hasSetupMfaVerified: false,\n isMfaEnabled: false,\n isMfaMethodSelected: false,\n isUserReadyToEnableMfa: false,\n mfaMethod: undefined,\n mfaPhone: ''\n },\n steps: [\n {\n title: 'Setup Two-Factor Authentication',\n url: '/mfa',\n when: state => !state.isMfaEnabled && !state.isUserReadyToEnableMfa\n },\n {\n title: 'Select A Method',\n url: '/mfa/method',\n when: state => !state.isMfaMethodSelected && state.isUserReadyToEnableMfa\n },\n {\n title: 'Setup Authentication App',\n url: '/mfa/app',\n when: state => state.isMfaMethodSelected && state.mfaMethod === 'app'\n },\n {\n title: 'Enter Phone Number',\n url: '/mfa/phone',\n when: state => state.isMfaMethodSelected && state.mfaMethod === 'phone'\n },\n {\n title: 'Verify Security Code',\n url: '/mfa/verify',\n when: state => state.hasSetupMfaMethod\n },\n {\n title: 'Two-Factor Authentication Is Now Enabled',\n url: '/mfa/completed',\n when: state => state.hasSetupMfaVerified\n }\n ]\n};\n","import { useGetSessionInfo, useGetStatus } from '@sentinel/hooks';\nimport { useToggle } from '@vestwell-frontend/hooks';\nimport { Modal, WizardProvider } from '@vestwell-frontend/ui';\n\nimport { FC, useEffect } from 'react';\nimport { Outlet, useNavigate } from 'react-router-dom';\n\nimport { mfaNudge, MfaNudgeState } from '../config/mfaNudge';\nimport { routes } from '../router/routes';\n\nexport const MfaNudgePage: FC = () => {\n const navigate = useNavigate();\n\n const user = useGetSessionInfo('user');\n\n useGetStatus({\n query: {\n refetchInterval: 10 * 1000,\n refetchOnWindowFocus: true,\n useErrorBoundary: true\n }\n });\n\n useEffect(() => {\n if (user.data && !user.data.hasMfaNudge) {\n navigate(routes.LOGIN_VERIFICATION);\n }\n }, [user.data]);\n\n const [isOpen, toggleOpen] = useToggle(true);\n\n return user.data?.hasMfaNudge ? (\n <WizardProvider<MfaNudgeState>\n initialState={mfaNudge.initialState}\n name='mfaNudge'\n steps={mfaNudge.steps}\n useLocalStorage>\n <Modal\n aria-label='Two-Factor Authentication Setup'\n data-testid='mfaNudge'\n lgWidth='34vw'\n locked={isOpen}\n mdWidth='75vw'\n onRequestClose={toggleOpen}\n overlayColor='white'>\n <Outlet />\n </Modal>\n </WizardProvider>\n ) : null;\n};\n\nMfaNudgePage.displayName = 'MfaNudgePage';\n","import { KeyboardArrowRightOutlined } from '@mui/icons-material';\nimport { Alert, Box, Grid2 } from '@mui/material';\nimport { usePostMfaSetup } from '@sentinel/hooks';\nimport { validatePhone } from '@vestwell-frontend/helpers';\nimport { useDocumentTitle } from '@vestwell-frontend/hooks';\nimport {\n Button,\n Form,\n FormField,\n FormRadioGroup,\n FormSaveButton,\n ModalBody,\n ModalFooter,\n RadioButton,\n Text,\n useWizard\n} from '@vestwell-frontend/ui';\n\nimport { FC, useCallback } from 'react';\nimport * as yup from 'yup';\n\nimport { MfaNudgeState } from '../config/mfaNudge';\n\nconst schema = yup.object().shape({\n phoneNumber: validatePhone('Must be a valid US phone number'),\n type: yup.string()\n});\n\nexport const MfaNudgePhoneSetupPage: FC = () => {\n const ctx = useWizard<MfaNudgeState>();\n\n useDocumentTitle(ctx.step.title as string);\n\n const setup = usePostMfaSetup({\n mutation: {\n onSuccess: res => {\n console.log(res.code);\n ctx.setState({\n hasSetupMfaMethod: true,\n //@ts-expect-error: waiting for hooks\n mfaMethodSubType: res.entrySubType,\n mfaPhone: res.phoneNumber\n });\n }\n }\n });\n\n const onBack = useCallback(async () => {\n ctx.setState({ isMfaMethodSelected: false });\n }, []);\n\n const onSubmit = useCallback(async values => {\n await setup.mutateAsync({\n data: {\n subType: values.type,\n type: 'phone',\n value: values.phoneNumber\n }\n });\n }, []);\n\n return (\n <Form\n className='contents'\n initialValues={{\n phoneNumber: ctx.state.mfaPhone || '',\n type: ctx.state.mfaMethodSubType ?? 'text'\n }}\n onChange={setup.reset}\n onSubmit={onSubmit}\n validateOnMount\n validationSchema={schema}>\n <ModalBody>\n <Grid2\n alignItems='center'\n columns={12}\n container\n direction='column'\n spacing={4}>\n <Grid2\n alignItems='center'\n display='flex'\n flexDirection='column'\n size={{\n lg: 12\n }}>\n <Text\n align='center'\n color='oxfordBlue'\n component='span'\n mb={2}\n variant='f2'>\n Two-Factor Authentication\n </Text>\n <Text align='center' color='oxfordBlue' variant='b2'>\n {ctx.step.title}\n </Text>\n </Grid2>\n <Grid2\n size={{\n lg: 10,\n md: 12\n }}>\n <Text align='center' mb={0}>\n We will provide you a 6-digit security code via the method you\n prefer.\n </Text>\n </Grid2>\n <Grid2\n alignItems='center'\n display='flex'\n flexDirection='column'\n flexGrow={1}\n size={{\n lg: 7,\n md: 9,\n xs: 12\n }}>\n <Box mt={10} width='100%'>\n <FormField\n autoFocus\n format='phoneUs'\n fullWidth\n label='Mobile Phone Number'\n name='phoneNumber'\n />\n </Box>\n </Grid2>\n <Grid2\n display='flex'\n flexDirection='column'\n flexGrow={1}\n size={{\n lg: 7,\n md: 9,\n xs: 12\n }}>\n <FormRadioGroup\n label='Verification Method'\n name='type'\n variant='standard'>\n <RadioButton label='Via text message' value='text' />\n <RadioButton label='Via voice call' value='voice' />\n </FormRadioGroup>\n </Grid2>\n {setup.error && (\n <Grid2\n alignItems='center'\n display='flex'\n flexDirection='column'\n size={{\n lg: 12\n }}>\n <Alert severity='error' variant='standard'>\n {setup.error?.message}\n </Alert>\n </Grid2>\n )}\n </Grid2>\n </ModalBody>\n <ModalFooter justifyBetween noBoxShadow>\n <Button onClick={onBack} variant='text'>\n Back\n </Button>\n <FormSaveButton\n data-testid='nextVerify'\n disabled={!!setup.error}\n endIcon={<KeyboardArrowRightOutlined fontSize='small' />}>\n Next: Verify\n </FormSaveButton>\n </ModalFooter>\n </Form>\n );\n};\n\nMfaNudgePhoneSetupPage.displayName = 'MfaNudgePhoneSetupPage';\n","import { createSvgIcon, SvgIconProps } from '@mui/material';\n\nimport { FC } from 'react';\n\nexport const AuthIcon: FC<SvgIconProps> = createSvgIcon(\n <svg\n fill='none'\n height='122'\n viewBox='0 0 120 122'\n width='120'\n xmlns='http://www.w3.org/2000/svg'>\n <path\n d='M16.2942 1C11.8281 1 8 4.40275 8 8.65618V60.3354C8 73.9464 16.5069 88.1954 33.0953 102.657C44.7922 112.865 55.648 119.458 56.0734 119.883C58.8381 121.372 62.2408 121.372 65.0056 119.883C65.4309 119.671 77.5436 112.865 88.8152 102.657C104.766 87.9827 112.847 73.9464 112.847 60.5481V8.65618C112.847 4.40275 109.232 1 104.553 1H16.2942Z'\n stroke='#DDC04A'\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeWidth='1.5'\n />\n <g filter='url(#filter0_d_732_70784)'>\n <path\n clipRule='evenodd'\n d='M36.369 98.9006L36.371 98.9023C42.0515 103.86 47.5434 107.952 51.6789 110.864C53.7435 112.317 55.4657 113.473 56.7053 114.297C56.9655 114.47 57.215 114.635 57.4439 114.787C57.7428 114.985 58.0064 115.159 58.2121 115.297C58.3813 115.41 58.5485 115.523 58.6935 115.624C59.9372 116.187 61.4368 116.144 62.6418 115.496L62.7082 115.46L62.7757 115.426C62.7707 115.429 62.7877 115.419 62.8257 115.397C63.2312 115.167 66.0319 113.579 70.0709 110.876C74.4267 107.962 80.0574 103.862 85.4544 98.9762C101.002 84.6681 107.862 71.874 107.862 60.548V8.65616C107.862 7.49643 106.833 5.98352 104.552 5.98352H16.2931C14.1388 5.98352 12.9824 7.57579 12.9824 8.65616V60.3354C12.9824 71.8068 20.1952 84.8004 36.369 98.9006Z'\n fill='white'\n fillRule='evenodd'\n />\n </g>\n <rect\n height='35.2408'\n rx='4.27161'\n stroke='#39CC97'\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeWidth='1.5'\n width='46.2758'\n x='37.292'\n y='39.4443'\n />\n <rect\n fill='#E7FFF3'\n height='29.5453'\n rx='1.77984'\n width='40.5803'\n x='40.1387'\n y='42.2921'\n />\n <path\n d='M46.5479 39.4444V30.9012C46.5479 23.2339 52.7634 17.0184 60.4306 17.0184V17.0184C68.0978 17.0184 74.3133 23.2339 74.3133 30.9012V39.4444'\n stroke='#39CC97'\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeWidth='1.5'\n />\n <filter\n colorInterpolationFilters='sRGB'\n filterUnits='userSpaceOnUse'\n height='112.881'\n id='filter0_d_732_70784'\n width='97.7276'\n x='11.5586'\n y='5.98352'>\n <feFlood floodOpacity='0' result='BackgroundImageFix' />\n <feColorMatrix\n in='SourceAlpha'\n result='hardAlpha'\n type='matrix'\n values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0'\n />\n <feOffset dy='1.42387' />\n <feGaussianBlur stdDeviation='0.711935' />\n <feComposite in2='hardAlpha' operator='out' />\n <feColorMatrix\n type='matrix'\n values='0 0 0 0 0.172549 0 0 0 0 0.560784 0 0 0 0 0.772549 0 0 0 0.09 0'\n />\n <feBlend\n in2='BackgroundImageFix'\n mode='normal'\n result='effect1_dropShadow_732_70784'\n />\n <feBlend\n in='SourceGraphic'\n in2='effect1_dropShadow_732_70784'\n mode='normal'\n result='shape'\n />\n </filter>\n <path\n d='M51.5312 39.4444V30.9011C51.5312 25.9863 55.5156 22.002 60.4304 22.002V22.002C65.3453 22.002 69.3296 25.9863 69.3296 30.9011V39.4444'\n stroke='#39CC97'\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeWidth='1.5'\n />\n <path\n d='M48.3262 56.1749L56.6914 64.5401L72.176 49.0555'\n stroke='#39CC97'\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeWidth='1.5'\n />\n <defs></defs>\n </svg>,\n 'AuthIcon'\n);\n\nAuthIcon.displayName = 'AuthIcon';\n","import { KeyboardArrowRightOutlined } from '@mui/icons-material';\nimport { Grid2, styled } from '@mui/material';\nimport { useDocumentTitle } from '@vestwell-frontend/hooks';\nimport {\n AuthIcon,\n Button,\n ModalBody,\n ModalFooter,\n Text,\n useWizard\n} from '@vestwell-frontend/ui';\n\nimport { FC, useCallback, useEffect } from 'react';\n\nimport { SignInLink } from '../components';\nimport { mfaNudge, MfaNudgeState } from '../config/mfaNudge';\n\nconst StyledModalBody = styled(ModalBody)({\n background: 'linear-gradient(180deg, #DFF4FF 0%, #FFFFFF 45.01%), #FFFFFF'\n});\n\nconst StyledAuthIcon = styled(AuthIcon)(({ theme }) => ({\n height: theme.spacing(35),\n width: theme.spacing(30)\n}));\n\nexport const MfaNudgeStartPage: FC = () => {\n const ctx = useWizard<MfaNudgeState>();\n\n useDocumentTitle(ctx.step.title as string);\n\n useEffect(() => {\n ctx.setState({ ...mfaNudge.initialState });\n }, []);\n\n const onContinue = useCallback(() => {\n ctx.setState({ isUserReadyToEnableMfa: true });\n }, []);\n\n return (\n <>\n <StyledModalBody>\n <Grid2\n alignItems='center'\n columns={12}\n container\n direction='column'\n spacing={4}>\n <Grid2\n alignContent='center'\n display='flex'\n justifyContent='center'\n size={{\n lg: 12\n }}>\n <StyledAuthIcon data-component='authIcon' />\n </Grid2>\n <Grid2\n alignItems='center'\n display='flex'\n justifyContent='center'\n size={{\n lg: 12\n }}>\n <Text align='center' color='oxfordBlue' mb={4} variant='b2'>\n {ctx.step.title}\n </Text>\n </Grid2>\n <Grid2\n display='flex'\n justifyContent='center'\n size={{\n lg: 10,\n xs: 12\n }}>\n <Text align='center' mb={0}>\n We require you to enable an added layer of protection on your\n account to help further protect your sensitive information.\n </Text>\n </Grid2>\n <Grid2\n alignItems='center'\n display='flex'\n justifyContent='center'\n size={{\n lg: 12\n }}>\n <Text align='center' mb={0}>\n Setup is easy and will only take a few minutes.\n </Text>\n </Grid2>\n </Grid2>\n </StyledModalBody>\n <ModalFooter justifyBetween noBoxShadow>\n <SignInLink forceLogout mb={0} />\n <Button\n endIcon={<KeyboardArrowRightOutlined fontSize='small' />}\n onClick={onContinue}>\n Continue\n </Button>\n </ModalFooter>\n </>\n );\n};\n\nMfaNudgeStartPage.displayName = 'MfaNudgeStartPage';\n","import { KeyboardArrowRightOutlined } from '@mui/icons-material';\nimport { Alert, Grid2, styled } from '@mui/material';\nimport { usePostMfaSetup, usePostMfaSetupVerify } from '@sentinel/hooks';\nimport { useAuth } from '@vestwell-frontend/elements';\nimport { useDocumentTitle } from '@vestwell-frontend/hooks';\nimport {\n Button,\n Form,\n FormatPhoneNumber,\n FormField,\n FormSaveButton,\n ModalBody,\n ModalFooter,\n Text,\n useWizard\n} from '@vestwell-frontend/ui';\n\nimport { FC, useCallback } from 'react';\nimport * as yup from 'yup';\n\nimport { ResendOtpButton } from '../components';\nimport { MfaNudgeState } from '../config/mfaNudge';\n\nconst StyledFormFieldContainer = styled('div')(({ theme }) => ({\n '& > .MuiFormControl-root': {\n marginBottom: theme.spacing(4),\n width: theme.spacing(50)\n }\n}));\n\nconst schema = yup.object().shape({\n securityCode: yup\n .string()\n .min(6, 'Must be at least 6 digits')\n .required('Required')\n});\n\nconst StyledGrid = styled(Grid2)(props => ({\n minHeight: 400,\n [props.theme.breakpoints.down('sm')]: {\n maxHeight: '75vh'\n }\n}));\n\nconst FlexGrowGrid = styled(Grid2)({\n flexGrow: '1 !important' // <Grid /> overrides with flex-grow: 0 on >1200px\n});\n\nconst StyledResendOtpButton = styled(ResendOtpButton)(({ theme }) => ({\n marginBottom: theme.spacing(4)\n}));\n\nexport const MfaNudgeVerifyPage: FC = () => {\n const { setToken } = useAuth();\n\n const ctx = useWizard<MfaNudgeState>();\n\n useDocumentTitle(ctx.step.title as string);\n\n const postMfaSetup = usePostMfaSetup({\n mutation: {\n onSuccess: res => {\n console.log(res.code);\n }\n }\n });\n\n const postMfaSetupVerify = usePostMfaSetupVerify({\n mutation: {\n onSuccess: data => {\n ctx.setState({\n hasSetupMfaVerified: true\n });\n\n setToken(data.token);\n }\n }\n });\n\n const onBack = useCallback(() => {\n ctx.setState({ hasSetupMfaMethod: false });\n }, []);\n\n const onResendCode = useCallback(async () => {\n await postMfaSetup.mutateAsync({\n data: {\n type: ctx.state.mfaMethod,\n value: ctx.state.mfaPhone\n }\n });\n }, [ctx.state]);\n\n const onSubmit = useCallback(\n async values => {\n await postMfaSetupVerify.mutateAsync({\n data: {\n code: values.securityCode,\n isRegistration: true,\n subType: ctx.state.mfaMethodSubType\n }\n });\n },\n [ctx.state]\n );\n\n const isDisabled = postMfaSetupVerify.error?.message?.startsWith(\n 'Your account has been temporarily locked'\n );\n\n return (\n <Form\n className='contents'\n onChange={postMfaSetupVerify.reset}\n onSubmit={onSubmit}\n validationSchema={schema}>\n <ModalBody>\n <StyledGrid\n alignItems='center'\n columns={12}\n container\n direction='column'\n spacing={4}>\n <Grid2\n alignItems='center'\n display='flex'\n flexDirection='column'\n size={{\n lg: 12\n }}>\n <Text\n align='center'\n color='oxfordBlue'\n component='span'\n mb={2}\n variant='f2'>\n Two-Factor Authentication\n </Text>\n <Text align='center' color='oxfordBlue' variant='b2'>\n {ctx.step.title}\n </Text>\n </Grid2>\n <Grid2\n alignItems='center'\n display='flex'\n flexDirection='column'\n size={{\n lg: 12\n }}>\n <Text align='center' color='black' mb={0}>\n Enter the 6-digit code{' '}\n {ctx.state.mfaMethodSubType === 'text'\n ? 'we have sent to '\n : ctx.state.mfaMethodSubType === 'voice'\n ? 'provided on the call to '\n : 'generated by your authentication app'}\n {ctx.state.mfaMethod === 'phone' && (\n <>\n <FormatPhoneNumber mask value={ctx.state.mfaPhone} />.\n </>\n )}\n </Text>\n </Grid2>\n <FlexGrowGrid\n alignItems='center'\n display='flex'\n flexDirection='column'\n justifyContent='center'\n size={{ lg: 12 }}>\n <StyledFormFieldContainer>\n <FormField\n align='center'\n autoComplete='one-time-code'\n autoFocus\n disabled={isDisabled}\n format='numericString'\n label='Security Code'\n maxLength={6}\n name='securityCode'\n type='tel'\n variant='large'\n />\n </StyledFormFieldContainer>\n {ctx.state.mfaMethod === 'phone' && (\n <StyledResendOtpButton\n disabled={isDisabled}\n inputName={`${ctx.state.mfaMethod}Verification`}\n onClick={onResendCode}\n variant='inline'\n />\n )}\n </FlexGrowGrid>\n {(postMfaSetup.error || postMfaSetupVerify.error) && (\n <Grid2\n alignItems='center'\n display='flex'\n flexDirection='column'\n size={{\n lg: 12\n }}>\n <Alert severity='error' variant='standard'>\n {postMfaSetup.error?.message ??\n postMfaSetupVerify.error?.message}\n </Alert>\n </Grid2>\n )}\n </StyledGrid>\n </ModalBody>\n <ModalFooter justifyBetween noBoxShadow>\n <Button disabled={isDisabled} onClick={onBack} variant='text'>\n Back\n </Button>\n <FormSaveButton\n data-testid='confirm'\n disabled={isDisabled}\n endIcon={<KeyboardArrowRightOutlined fontSize='small' />}>\n Confirm\n </FormSaveButton>\n </ModalFooter>\n </Form>\n );\n};\n\nMfaNudgeVerifyPage.displayName = 'MfaNudgeVerifyPage';\n","import { logout } from '@vestwell-frontend/helpers';\n\nimport { useEffect } from 'react';\n\nexport const useBackButtonBehavior = () => {\n useEffect(() => {\n window.history.pushState(null, null, window.location.pathname);\n\n window.addEventListener('popstate', logout);\n\n return () => {\n window.removeEventListener('popstate', logout);\n };\n }, []);\n};\n","import { useRef } from 'react';\nimport { NavigateFunction, useNavigate } from 'react-router-dom';\n\nexport function useNav(): {\n to: NavigateFunction;\n external: (url: string) => void;\n} {\n const navigate = useNavigate();\n\n const nav = useRef({\n external: url =>\n window.location.assign(\n `${url.startsWith('http') ? '' : window.location.origin}${url}`\n ),\n to: navigate\n });\n\n return nav.current;\n}\n","import {\n EmailOutlined,\n PermPhoneMsgOutlined,\n ScreenshotOutlined\n} from '@mui/icons-material';\nimport { Grid2, Stack, styled } from '@mui/material';\nimport {\n GetMfaMethodsResDto,\n useGetMfaMethods,\n useGetStatus,\n usePostMfaSend\n} from '@sentinel/hooks';\nimport { useDocumentTitle } from '@vestwell-frontend/hooks';\nimport {\n Button,\n Form,\n FormatEmail,\n FormatPhoneNumber,\n FormRadioGroup,\n RadioButton,\n Text\n} from '@vestwell-frontend/ui';\n\nimport { differenceInSeconds } from 'date-fns';\nimport { useCallback, useEffect, useState } from 'react';\nimport { useLocalStorage } from 'usehooks-ts';\nimport * as yup from 'yup';\n\nimport {\n AppVerification,\n EmailVerification,\n HelpModal,\n PhoneVerification,\n SignInLink,\n SubmitButton\n} from '../components';\nimport { useBackButtonBehavior } from '../hooks';\n\nconst schema = yup.object().shape({\n mfaEntryId: yup.number().required('Required')\n});\n\nconst StyledRadioButton = styled(RadioButton)(() => ({\n marginLeft: 0\n}));\n\nconst TryAnotherMethodButton = styled(Button)(() => ({\n width: '100%'\n}));\n\nexport function MfaPage() {\n useDocumentTitle('Two-Factor Authentication');\n\n useBackButtonBehavior();\n\n useGetStatus({\n query: {\n refetchOnWindowFocus: true,\n useErrorBoundary: true\n }\n });\n\n const mfaMethods = useGetMfaMethods({\n query: {\n select: data => ({\n all: data,\n formatted: data.reduce(\n (acc, method) => {\n if (method.entryType === 'phone') {\n return {\n ...acc,\n phone: (acc.phone ?? []).concat(method)\n };\n }\n\n return {\n ...acc,\n [method.entryType]: method\n };\n },\n {} as {\n app: GetMfaMethodsResDto;\n email: GetMfaMethodsResDto;\n phone: GetMfaMethodsResDto[];\n }\n )\n })\n }\n });\n\n const postMfaSend = usePostMfaSend();\n\n const [method, setMethod] = useState<\n Partial<GetMfaMethodsResDto> & { subType?: 'text' | 'voice' }\n >({ mfaEntryId: null });\n\n const [codeLastSentTime, setCodeLastSentTime] = useLocalStorage(\n 'codeLastSentTime',\n {}\n );\n\n const onChangeAuthMethod = useCallback(() => {\n setMethod({ mfaEntryId: null });\n }, []);\n\n const onMethodSelect = useCallback(\n async (values: { mfaEntryId: number; subType?: 'text' | 'voice' }) => {\n const primaryMethod = (mfaMethods.data?.all ?? []).find(\n ({ isPrimary }) => isPrimary\n );\n\n if (!values.mfaEntryId) {\n if (primaryMethod) {\n setMethod(primaryMethod);\n return;\n } else {\n return;\n }\n }\n\n const selectedMethod = (mfaMethods.data?.all ?? []).find(\n ({ mfaEntryId }) => mfaEntryId === values.mfaEntryId\n );\n\n setMethod({\n ...selectedMethod,\n subType: values.subType\n });\n\n if (selectedMethod.entryType === 'phone' && !values.subType) {\n return;\n }\n\n const seconds = 30;\n\n const diff =\n seconds -\n differenceInSeconds(\n Date.now(),\n codeLastSentTime?.[selectedMethod.mfaEntryId]\n );\n\n if (\n !codeLastSentTime?.[selectedMethod.mfaEntryId] ||\n diff > seconds ||\n diff < 0\n ) {\n setCodeLastSentTime(prevState => ({\n ...prevState,\n [selectedMethod.mfaEntryId]: Date.now()\n }));\n\n const res = await postMfaSend.mutateAsync({\n data: {\n mfaEntryId: selectedMethod.mfaEntryId,\n subType: values.subType,\n type: selectedMethod.entryType\n }\n });\n\n console.log(res?.code);\n }\n },\n [codeLastSentTime, mfaMethods.data]\n );\n\n useEffect(() => {\n if (mfaMethods.data?.all?.length) {\n onMethodSelect({\n mfaEntryId: null\n });\n }\n }, [mfaMethods.data]);\n\n return (\n <Grid2\n container\n display='flex'\n flexDirection='column'\n minHeight={530}\n p={2}>\n {method.entryType === 'app' && <AppVerification />}\n {method.entryType === 'email' && <EmailVerification email={method} />}\n {method.entryType === 'phone' && (\n <PhoneVerification onSubTypeSelect={onMethodSelect} phone={method} />\n )}\n {method.mfaEntryId !== null && (\n <TryAnotherMethodButton\n data-testid='tryAnotherMethod'\n onClick={onChangeAuthMethod}\n variant='inline'>\n Try another way to authenticate\n </TryAnotherMethodButton>\n )}\n {method.mfaEntryId === null && (\n <Grid2\n alignItems='center'\n container\n direction='column'\n display='flex'\n height='100%'\n justifyContent='space-between'>\n <Grid2>\n <Text align='center' mb={8} variant='b2' width='100%'>\n Two-Factor Authentication\n </Text>\n </Grid2>\n\n <Form\n className='contents'\n initialValues={{\n mfaEntryId:\n mfaMethods.data?.formatted?.app?.mfaEntryId ||\n mfaMethods?.data?.formatted?.phone?.[0]?.mfaEntryId ||\n mfaMethods?.data?.formatted?.email?.mfaEntryId\n }}\n onSubmit={onMethodSelect}\n validateOnMount={false}\n validationSchema={schema}>\n <Grid2 flexGrow={1}>\n <FormRadioGroup\n hideLabel\n label='Mfa Method'\n name='mfaEntryId'\n variant='card'>\n <Text align='center' color='grey50' variant='g2'>\n How would you like us to verify your identity?\n </Text>\n {mfaMethods.data?.formatted?.app && (\n <StyledRadioButton\n label={\n <div>\n <Stack\n alignItems='center'\n direction='row'\n spacing={2.5}>\n <ScreenshotOutlined\n color='grey400'\n fontSize='small'\n />\n <Text\n color='grey50'\n component='h2'\n mb={0}\n variant='f2'>\n Via authentication app\n </Text>\n </Stack>\n <Text color='grey200' mb={0} ml={7.5} variant='g1'>\n ex. Google Authenticator\n </Text>\n </div>\n }\n value={mfaMethods.data?.formatted?.app?.mfaEntryId}\n />\n )}\n {mfaMethods.data?.formatted?.phone?.map(phone => (\n <StyledRadioButton\n key={phone.value}\n label={\n <div>\n <Stack\n alignItems='center'\n direction='row'\n spacing={2.5}>\n <PermPhoneMsgOutlined\n color='grey400'\n fontSize='small'\n />\n <Text\n color='grey50'\n component='h2'\n mb={0}\n variant='f2'>\n Get a code via{' '}\n <FormatPhoneNumber mask value={phone.value} />\n </Text>\n </Stack>\n <Text color='grey200' mb={0} ml={7.5} variant='g1'>\n Standard rates may apply.\n </Text>\n </div>\n }\n value={phone.mfaEntryId}\n />\n ))}\n {mfaMethods.data?.formatted?.email && (\n <StyledRadioButton\n label={\n <div>\n <Stack\n alignItems='center'\n direction='row'\n spacing={2.5}>\n <EmailOutlined color='grey400' fontSize='small' />\n <Text\n color='grey50'\n component='h2'\n mb={0}\n variant='f2'>\n Via email\n </Text>\n </Stack>\n <Text color='grey200' mb={0} ml={7.5} variant='g1'>\n <FormatEmail\n mask\n value={mfaMethods.data.formatted.email.value}\n />\n </Text>\n </div>\n }\n value={mfaMethods.data.formatted.email.mfaEntryId}\n />\n )}\n </FormRadioGroup>\n </Grid2>\n <SubmitButton>Continue</SubmitButton>\n </Form>\n <SignInLink forceLogout />\n <HelpModal />\n </Grid2>\n )}\n </Grid2>\n );\n}\n\nMfaPage.displayName = 'MfaPage';\n","import { createSvgIcon, SvgIconProps } from '@mui/material';\n\nimport { FC } from 'react';\n\nexport const ContributionsIcon: FC<SvgIconProps> = createSvgIcon(\n <svg viewBox='0 0 32 32'>\n <path\n clipRule='evenodd'\n d='M20.9522 10.789C20.6617 10.2768 20.1566 9.98718 19.6363 9.98737H15.3041C15.3041 9.98737 15.3042 9.98737 15.3041 9.98737C15.0264 9.98749 14.7506 10.0695 14.5077 10.2289L11.1799 13.5715C10.8877 13.8651 10.4128 13.8661 10.1192 13.5739C9.8257 13.2817 9.82464 12.8068 10.1169 12.5132L13.4942 9.12086C13.5241 9.09077 13.5566 9.06328 13.5912 9.03869C14.0937 8.68153 14.6897 8.48754 15.3037 8.48737H19.6358C19.6359 8.48737 19.6357 8.48737 19.6358 8.48737C20.7264 8.48707 21.7149 9.09381 22.2565 10.0483C22.2567 10.0485 22.2564 10.048 22.2565 10.0483L22.6677 10.7702C22.6677 10.7703 22.6676 10.7701 22.6677 10.7702C23.1996 11.7032 23.2424 12.855 22.784 13.8273C22.7839 13.8273 22.784 13.8272 22.784 13.8273L22.4115 14.6193C21.81 15.8994 20.4495 16.6322 19.0686 16.3381C19.0684 16.3381 19.0687 16.3381 19.0686 16.3381L15.366 15.5512L15.3637 15.5529C14.889 15.8865 14.6077 16.4912 14.6688 17.1327L14.669 17.1344C14.6778 17.229 14.7322 17.281 14.7694 17.2966C14.7696 17.2967 14.7693 17.2966 14.7694 17.2966L21.0582 19.8682C21.0582 19.8682 21.0581 19.8682 21.0582 19.8682C21.377 19.9985 21.7253 20.01 22.0498 19.902L28.7637 17.6724C29.1568 17.5419 29.5813 17.7547 29.7118 18.1478C29.8424 18.5409 29.6295 18.9654 29.2364 19.096L22.5234 21.3253C21.8578 21.5468 21.1402 21.5222 20.4906 21.2566L14.2004 18.6845L14.1987 18.6838C13.6125 18.4423 13.2327 17.8866 13.1755 17.2741C13.0664 16.1258 13.5618 14.988 14.4973 14.3283C14.8318 14.0883 15.2507 13.9951 15.6588 14.0799L15.6621 14.0806L19.3804 14.8709C20.0335 15.0101 20.7283 14.6744 21.054 13.9813L21.4268 13.1884C21.6779 12.656 21.6534 12.0197 21.3647 11.5133L20.9522 10.789z'\n fill='currentColor'\n fillRule='evenodd'\n role='presentation'\n />\n <path\n clipRule='evenodd'\n d='M22.475 4.25622C23.1114 4.21466 23.7409 4.38231 24.2777 4.73069L24.2803 4.73241L29.4098 8.09229C29.7563 8.31926 29.8532 8.78414 29.6262 9.13064C29.3992 9.47713 28.9344 9.57404 28.5879 9.34707L23.4611 5.98892C23.4607 5.98867 23.4603 5.98842 23.4599 5.98817C23.1893 5.81287 22.8798 5.73285 22.5721 5.75307L22.5698 5.75323L14.3123 6.26965L14.3105 6.26976C13.9755 6.28989 13.6494 6.42928 13.3864 6.67592C13.3861 6.67621 13.3858 6.6765 13.3854 6.6768L9.27084 10.5707C9.06584 10.7641 8.90805 11.0158 8.81829 11.303L8.81772 11.3048L8.02397 13.8219C7.89939 14.2169 7.47816 14.4362 7.08313 14.3116C6.68809 14.187 6.46884 13.7658 6.59341 13.3708L7.38659 10.8555C7.38669 10.8552 7.3865 10.8558 7.38659 10.8555C7.55084 10.3305 7.84409 9.85465 8.24115 9.47999C8.24133 9.47983 8.24098 9.48016 8.24115 9.47999L12.3586 5.58333C12.8693 5.10376 13.5241 4.81454 14.2196 4.77252C14.2199 4.7725 14.2192 4.77254 14.2196 4.77252L22.4737 4.2563C22.4742 4.25628 22.4746 4.25625 22.475 4.25622z'\n fill='currentColor'\n fillRule='evenodd'\n role='presentation'\n />\n <path\n clipRule='evenodd'\n d='M9.40652 16.0162H11.8007C12.215 16.0162 12.5507 16.3519 12.5507 16.7662C12.5507 17.1804 12.215 17.5162 11.8007 17.5162H9.40283C9.04075 17.5149 8.67459 17.7934 8.58998 18.2589C8.50434 18.7301 8.75267 19.1592 9.10962 19.3103L9.11119 19.3109L11.5384 20.3443C12.5844 20.7918 13.143 21.9355 12.9416 23.0432C12.7393 24.1564 11.8056 25.0178 10.6559 25.0187H8.27294C7.85873 25.0187 7.52294 24.6829 7.52294 24.2687C7.52294 23.8545 7.85873 23.5187 8.27294 23.5187H10.6548C11.0165 23.5184 11.3813 23.2396 11.4658 22.7749C11.5512 22.3049 11.3047 21.8761 10.9489 21.7236C10.9487 21.7235 10.949 21.7237 10.9489 21.7236L8.52518 20.6917C8.5249 20.6916 8.52546 20.6918 8.52518 20.6917C7.47513 20.247 6.9124 19.1007 7.11416 17.9906C7.31693 16.8751 8.25439 16.0129 9.40652 16.0162z'\n fill='currentColor'\n fillRule='evenodd'\n role='presentation'\n />\n <path\n clipRule='evenodd'\n d='M10.0368 15.0783C10.451 15.0783 10.7868 15.4141 10.7868 15.8283V16.7661C10.7868 17.1803 10.451 17.5161 10.0368 17.5161C9.62258 17.5161 9.28679 17.1803 9.28679 16.7661V15.8283C9.28679 15.4141 9.62258 15.0783 10.0368 15.0783z'\n fill='currentColor'\n fillRule='evenodd'\n role='presentation'\n />\n <path\n clipRule='evenodd'\n d='M10.0368 23.5186C10.451 23.5186 10.7868 23.8544 10.7868 24.2686V25.2065C10.7868 25.6207 10.451 25.9565 10.0368 25.9565C9.62258 25.9565 9.28679 25.6207 9.28679 25.2065V24.2686C9.28679 23.8544 9.62258 23.5186 10.0368 23.5186z'\n fill='currentColor'\n fillRule='evenodd'\n role='presentation'\n />\n <path\n clipRule='evenodd'\n d='M3.20623 16.5519C4.85779 13.3589 8.31526 11.6659 11.72 12.4569C12.1235 12.5506 12.3746 12.9537 12.2808 13.3571C12.1871 13.7606 11.7841 14.0117 11.3806 13.918C8.68657 13.2921 5.89546 14.6177 4.53856 17.241C3.17669 19.874 3.61192 23.1444 5.58711 25.2667C7.55165 27.3775 10.5655 27.8504 13.006 26.4581C15.4601 25.058 16.786 22.0816 16.2094 19.1281C16.13 18.7215 16.3952 18.3276 16.8018 18.2482C17.2083 18.1689 17.6022 18.4341 17.6816 18.8406C18.3739 22.3866 16.7962 26.0227 13.7493 27.761C10.6889 29.507 6.91572 28.8959 4.48909 26.2886C2.0731 23.6927 1.55964 19.7353 3.20623 16.5519z'\n fill='currentColor'\n fillRule='evenodd'\n role='presentation'\n />\n </svg>,\n 'ContributionsIcon'\n);\n\nContributionsIcon.displayName = 'ContributionsIcon';\n","import { createSvgIcon, SvgIconProps } from '@mui/material';\n\nimport { FC } from 'react';\n\nexport const AccountIcon: FC<SvgIconProps> = createSvgIcon(\n <svg viewBox='0 0 32 32'>\n <path\n clipRule='evenodd'\n d='M25.25 3.25C25.4669 3.25 25.6731 3.34387 25.8155 3.50739C25.958 3.67091 26.0227 3.88808 25.9929 4.10289L25.2929 9.15708C26.1386 10.0765 26.7902 11.2155 27.2619 12.3577H29C29.4142 12.3577 29.75 12.6935 29.75 13.1077V20.4923C29.75 20.9065 29.4142 21.2423 29 21.2423H26.3012C25.709 22.1879 24.9571 23.0345 24.125 23.7848V27.0154C24.125 27.8705 23.4638 28.75 22.375 28.75H20.5C19.66 28.75 18.75 28.1155 18.75 27.0154V26.5554C16.803 27.061 14.6971 27.061 12.75 26.5554V27.0154C12.75 27.8705 12.0888 28.75 11 28.75H9.12501C8.28497 28.75 7.37501 28.1155 7.37501 27.0154V23.8053C5.16417 21.9655 3.81665 19.3906 3.64393 16.5605C1.66948 16.0915 0.25 14.3821 0.25 12.2462C0.25 11.8319 0.585786 11.4962 1 11.4962C1.41421 11.4962 1.75 11.8319 1.75 12.2462C1.75 13.5518 2.53394 14.617 3.70094 15.0176C4.17675 11.1707 6.52343 8.36718 9.55635 6.7674C12.6291 5.14661 16.4343 4.74059 19.8119 5.70287C20.7084 4.51547 21.993 3.91234 23.0375 3.6038C23.6366 3.42684 24.1817 3.33895 24.5773 3.29498C24.7758 3.27291 24.9387 3.26168 25.0543 3.25596C25.1121 3.2531 25.1583 3.25161 25.1913 3.25084L25.231 3.25013L25.2431 3.25002L25.2472 3.25L25.2488 3.25L25.2494 3.25C25.2497 3.25 25.25 3.25 25.25 4V3.25zM24.3771 4.83567C24.1069 4.87921 23.7936 4.94455 23.4625 5.04235C22.4584 5.33895 21.3874 5.90356 20.7737 6.96108C20.595 7.26889 20.2247 7.40877 19.8872 7.2959C16.7717 6.25409 13.1401 6.57294 10.2562 8.09414C7.56367 9.51436 5.55097 11.9618 5.1757 15.3209C5.37162 15.4562 5.5 15.6823 5.5 15.9385C5.5 16.2064 5.35954 16.4415 5.14824 16.5741C5.32899 19.0373 6.5574 21.2777 8.5853 22.854C8.76808 22.9961 8.87501 23.2146 8.87501 23.4462V27.0154C8.87501 27.1046 8.9054 27.1505 8.94002 27.1817C8.98481 27.2221 9.05395 27.25 9.12501 27.25H11C11.1022 27.25 11.154 27.215 11.1854 27.1813C11.2255 27.1382 11.25 27.0757 11.25 27.0154V25.5385C11.25 25.2939 11.3692 25.0647 11.5695 24.9243C11.7697 24.7839 12.0259 24.75 12.2558 24.8334C14.4655 25.635 17.0345 25.635 19.2442 24.8334C19.4741 24.75 19.7303 24.7839 19.9305 24.9243C20.1308 25.0647 20.25 25.2939 20.25 25.5385V27.0154C20.25 27.1046 20.2804 27.1505 20.315 27.1817C20.3598 27.2221 20.4289 27.25 20.5 27.25H22.375C22.4772 27.25 22.529 27.215 22.5604 27.1813C22.6005 27.1382 22.625 27.0757 22.625 27.0154V23.4462C22.625 23.2279 22.7201 23.0204 22.8855 22.8779C23.8376 22.0576 24.6496 21.1378 25.2218 20.1238C25.3548 19.8881 25.6044 19.7423 25.875 19.7423H28.25V13.8577H26.75C26.436 13.8577 26.1552 13.6621 26.0464 13.3675C25.5704 12.0785 24.8704 10.8326 23.9738 9.94981C23.8049 9.78354 23.7246 9.54724 23.7571 9.3125L24.3771 4.83567zM11.933 9.72029C14.5089 8.51888 17.4911 8.51888 20.067 9.72029C20.4424 9.89537 20.6048 10.3416 20.4297 10.717C20.2546 11.0924 19.8084 11.2548 19.433 11.0797C17.2589 10.0657 14.7411 10.0657 12.567 11.0797C12.1916 11.2548 11.7454 11.0924 11.5703 10.717C11.3952 10.3416 11.5576 9.89537 11.933 9.72029zM22.1825 14.7806C22.1944 14.7688 22.25 14.7096 22.25 14.5846C22.25 14.4596 22.1944 14.4004 22.1825 14.3887C22.1698 14.3762 22.1149 14.3269 22 14.3269C21.8852 14.3269 21.8302 14.3762 21.8176 14.3887C21.8056 14.4004 21.75 14.4596 21.75 14.5846C21.75 14.7096 21.8056 14.7688 21.8176 14.7806C21.8302 14.793 21.8852 14.8423 22 14.8423C22.1149 14.8423 22.1698 14.793 22.1825 14.7806zM21.1301 13.7117C21.3302 13.5147 21.6352 13.3423 22 13.3423C22.3649 13.3423 22.6698 13.5147 22.87 13.7117C23.0694 13.9081 23.25 14.2135 23.25 14.5846C23.25 14.9558 23.0694 15.2611 22.87 15.4575C22.6698 15.6546 22.3649 15.8269 22 15.8269C21.6352 15.8269 21.3302 15.6546 21.1301 15.4575C20.9306 15.2611 20.75 14.9558 20.75 14.5846C20.75 14.2135 20.9306 13.9081 21.1301 13.7117z'\n fill='currentColor'\n fillRule='evenodd'\n role='presentation'\n />\n </svg>,\n 'AccountIcon'\n);\n\nAccountIcon.displayName = 'AccountIcon';\n","import { createSvgIcon, SvgIconProps } from '@mui/material';\n\nimport { FC } from 'react';\n\nexport const GiftIcon: FC<SvgIconProps> = createSvgIcon(\n <svg\n fill='none'\n focusable='false'\n height='24'\n viewBox='0 0 24 24'\n width='24'\n xmlns='http://www.w3.org/2000/svg'>\n <path\n clipRule='evenodd'\n d='M20.1598 19.6159C20.1598 20.4408 19.4716 21.1123 18.6264 21.1123H12.9207V9.17822H19.8532C20.0225 9.17822 20.1598 9.3123 20.1598 9.4775V19.6159ZM3.84015 19.6159V9.4763C3.84015 9.3123 3.97878 9.17702 4.14684 9.17702L11.0805 9.17822V21.1123H5.37361C4.52837 21.1123 3.84015 20.4408 3.84015 19.6159ZM7.00521 5.99387C6.54272 5.60002 6.17224 5.16546 5.98577 4.72971C5.83856 4.38374 5.82016 4.03299 5.99436 3.70857C6.13666 3.4428 6.4041 3.17106 6.82611 2.90051C7.13771 2.70059 7.4309 2.61559 7.70447 2.62038C8.12893 2.62996 8.55094 2.86459 8.92879 3.2381C9.36674 3.67145 9.73477 4.2772 9.99607 4.95118C10.3003 5.74128 10.4451 6.60441 10.3813 7.38254H9.51886C8.69202 7.12276 7.74986 6.62835 7.00521 5.99387ZM14.0039 4.95118C14.2652 4.2772 14.6333 3.67145 15.0724 3.2381C15.4491 2.86459 15.8711 2.62996 16.2968 2.62038C16.5691 2.61559 16.8635 2.70059 17.1739 2.90051C17.5959 3.17106 17.8633 3.4428 18.0056 3.70857C18.1811 4.03299 18.1614 4.38374 18.0142 4.72971C17.829 5.16546 17.4573 5.60002 16.9948 5.99387C16.2501 6.62835 15.3068 7.12276 14.4811 7.38254H13.6187C13.5549 6.60441 13.6997 5.74128 14.0039 4.95118ZM19.8532 7.38254H17.7321C17.8314 7.30472 17.9333 7.22691 18.0277 7.1467C18.662 6.6056 19.1821 5.9819 19.4655 5.3187C19.7857 4.56571 19.8139 3.7756 19.3956 2.99987C19.133 2.51025 18.6926 2.04456 18.0363 1.62198C17.4413 1.24129 16.8451 1.07849 16.2661 1.09046C15.3951 1.10961 14.6075 1.51663 13.9524 2.16308C13.4286 2.68263 12.9845 3.3626 12.6594 4.1096C12.4484 4.60042 12.0423 4.74527 11.7356 4.52979C11.4375 4.32149 11.24 3.76722 10.9824 3.39612C10.7137 2.93163 10.3997 2.51144 10.0476 2.16308C9.39373 1.51663 8.60492 1.10961 7.73514 1.09046C7.15488 1.07849 6.55867 1.24129 5.96491 1.62198C5.30859 2.04456 4.86696 2.51025 4.60443 2.99987C4.18733 3.7756 4.21432 4.56571 4.53573 5.3187C4.81789 5.9819 5.33804 6.6056 5.9735 7.1467C6.06796 7.22691 6.16856 7.30472 6.26915 7.38254L4.14684 7.38134C2.96301 7.38134 2 8.32108 2 9.4763V19.6159C2 21.4308 3.51383 22.908 5.37361 22.908H18.6264C20.4874 22.908 22 21.4308 22 19.6159V9.4775C22 8.32228 21.037 7.38254 19.8532 7.38254Z'\n fill='currentColor'\n fillRule='evenodd'\n role='presentation'\n />\n </svg>,\n 'GiftIcon'\n);\n\nGiftIcon.displayName = 'GiftIcon';\n","import { ArrowDropDownOutlined } from '@mui/icons-material';\nimport { Grid2 } from '@mui/material';\n\nimport { FC } from 'react';\n\ntype SelectChevronProps = {\n className?: string;\n};\n\nexport const SelectChevron: FC<SelectChevronProps> = props => (\n <Grid2 {...props} alignItems='center' display='flex' height='1em'>\n <ArrowDropDownOutlined />\n </Grid2>\n);\n","import { CloseOutlined, InfoOutlined } from '@mui/icons-material';\nimport {\n BaseSelectProps,\n Checkbox,\n CircularProgress,\n FormControl,\n FormControlProps,\n FormHelperText,\n IconButton,\n inputClasses,\n InputProps,\n ListItemText,\n ListSubheader,\n MenuItem,\n Input as MuiInput,\n OutlinedSelectProps,\n Select,\n Stack,\n styled\n} from '@mui/material';\nimport { useCamelCase } from '@vestwell-frontend/hooks';\n\nimport { camelCase, isObject } from 'lodash';\nimport {\n forwardRef,\n ReactNode,\n useCallback,\n useId,\n useMemo,\n useState\n} from 'react';\nimport { useUpdateEffect } from 'react-use';\nimport stringify from 'safe-stable-stringify';\n\nimport { PLACEHOLDER } from '../consts';\nimport { FormFieldLabel, FormFieldLabelProps } from './form/FormFieldLabel';\nimport { SelectChevron } from './SelectChevron';\nimport { Text } from './Text';\n\nconst parseJson = json => {\n try {\n return JSON.parse(json);\n } catch {\n return json;\n }\n};\n\nconst StyledCloseBtn = styled(IconButton)(({ theme }) => ({\n marginRight: theme.spacing(1.25)\n}));\n\nconst Input = styled(MuiInput, {\n shouldForwardProp: prop => prop !== 'width'\n})<InputProps & { multiple?: boolean; width?: number }>(\n ({ fullWidth, multiple, theme, width, value }) => ({\n [`& .${inputClasses.input}`]: {\n alignItems: 'center',\n color:\n (Array.isArray(value) && !value?.length) || !value\n ? theme.palette.grey400.main\n : undefined,\n transition: theme.transitions.create(['border-color', 'box-shadow']),\n whiteSpace: multiple ? 'nowrap' : 'normal !important'\n },\n width: fullWidth\n ? undefined\n : width\n ? theme.spacing(width)\n : theme.spacing(56)\n })\n);\n\nconst StyledFormHelperText = styled(FormHelperText)(() => ({\n marginLeft: 0,\n marginRight: 0\n}));\n\nInput.displayName = 'Input';\n\ntype MuiOutlinedSelectProps = OutlinedSelectProps & BaseSelectProps;\n\nexport type DropdownProps = Partial<FormFieldLabelProps> &\n Omit<MuiOutlinedSelectProps, 'onChange' | 'onSelect'> & {\n error?: FormControlProps['error'];\n errorMessage?: ReactNode;\n formField?: boolean;\n hideError?: boolean;\n loading?: boolean;\n noFocusStyle?: boolean;\n onChange?: (value: MuiOutlinedSelectProps['value']) => void;\n onSelect?(value: MuiOutlinedSelectProps['value'], name: string): void;\n options: {\n label: string;\n value: string | number | Record<string, unknown>;\n isSubheader?: boolean;\n excludeTranslation?: boolean;\n }[];\n width?: number;\n };\n\nconst StyledFormControl = styled(FormControl)(() => ({\n display: 'flex'\n}));\n\nconst StyledListSubheader = styled(ListSubheader)(({ theme }) => ({\n backgroundColor: theme.palette.grey900.main,\n color: theme.palette.grey100.main,\n fontSize: theme.spacing(3.5),\n fontWeight: 700\n}));\n\nexport const Dropdown = forwardRef<HTMLInputElement, DropdownProps>(\n (\n {\n details,\n disabled,\n error,\n errorMessage,\n formField,\n label,\n loading,\n helpModal,\n hideLabel,\n hideError,\n info,\n noFocusStyle,\n options: defaultOptions,\n onChange,\n onSelect,\n width,\n ...props\n },\n ref\n ) => {\n const detailsId = useId();\n const disabledId = useId();\n const helpModalId = useId();\n const errorId = useId();\n const infoId = useId();\n const labelId = useId();\n\n const describedBy =\n `${disabled ? `${disabledId} ` : ''}${info ? `${infoId} ` : ''}${\n helpModal ? `${helpModalId} ` : ''\n }${details ? `${detailsId} ` : ''}${\n errorMessage ? `${errorId} ` : ''\n }`.trimEnd() || undefined;\n\n const testIdName = useCamelCase(props.name);\n\n const hasObjectValues = useMemo(() => {\n return defaultOptions.some(o => isObject(o.value));\n }, [defaultOptions]);\n\n const [value, setValue] = useState<DropdownProps['value']>(\n hasObjectValues\n ? props.multiple\n ? (props.value || props.defaultValue || ([] as any)).map(item =>\n stringify(item)\n )\n : stringify(props.value || props.defaultValue || '')\n : props.value || props.defaultValue || (props.multiple ? [] : '')\n );\n\n const onChangeValue = useCallback<MuiOutlinedSelectProps['onChange']>(\n event => {\n setValue(event.target.value);\n },\n []\n );\n\n const options = useMemo<\n {\n excludeTranslation?: boolean;\n label: string;\n value: string | number;\n isSubheader?: boolean;\n }[]\n >(() => {\n return defaultOptions.map(o => ({\n ...(o.isSubheader ? { isSubheader: o.isSubheader } : {}),\n ...(o.excludeTranslation\n ? { excludeTranslation: o.excludeTranslation }\n : {}),\n label: o.label,\n value: (hasObjectValues ? stringify(o.value as any) : o.value) as\n | string\n | number\n }));\n }, [hasObjectValues, defaultOptions]);\n\n const optionsHash = useMemo(() => {\n return options.reduce(\n (acc, o) => ({\n ...acc,\n [o.value]: o.label\n }),\n {}\n );\n }, [options]);\n\n const renderValue = useCallback<MuiOutlinedSelectProps['renderValue']>(\n selected => {\n if (loading) {\n return (\n <CircularProgress\n color='primary'\n disableShrink\n size={16}\n variant='indeterminate'\n />\n );\n }\n\n if ((Array.isArray(selected) && !selected.length) || !selected) {\n return props.placeholder\n ? props.placeholder\n : options?.length\n ? 'Select'\n : PLACEHOLDER;\n }\n\n if (Array.isArray(selected)) {\n return selected.map(item => optionsHash[item]).join(', ');\n }\n\n return optionsHash[selected as any];\n },\n [loading, optionsHash, options?.length]\n );\n\n const onClearAll = useCallback(() => {\n setValue([]);\n }, []);\n\n const slotProps = useMemo<DropdownProps['slotProps']>(\n () => ({\n listbox: {\n 'data-component': 'dropdownListbox',\n 'data-testid': testIdName\n },\n popper: {\n 'data-component': 'dropdownPopper',\n 'data-testid': testIdName\n },\n root: {\n 'data-component': 'dropdownRoot',\n 'data-testid': testIdName\n },\n ...props.slotProps\n }),\n [props.slotProps]\n );\n\n useUpdateEffect(() => {\n const formattedValue = hasObjectValues\n ? props.multiple\n ? (value as any).map(item => parseJson(item))\n : parseJson(value)\n : value;\n\n if (onSelect) {\n onSelect(formattedValue, props.name);\n }\n\n if (onChange) {\n onChange(formattedValue);\n }\n }, [value]);\n\n useUpdateEffect(() => {\n const newValue =\n hasObjectValues && props.value && isObject(props.value)\n ? stringify(props.value)\n : props.value;\n\n const oldValue =\n hasObjectValues && value && isObject(value) ? stringify(value) : value;\n\n if (oldValue !== newValue) {\n setValue(() => newValue);\n }\n }, [props.value]);\n\n return (\n <StyledFormControl\n data-component='dropdown'\n data-testid={testIdName}\n error={error}\n fullWidth={props.fullWidth}\n required={!!props.required}>\n <FormFieldLabel\n data-component='dropdownLabel'\n details={details}\n detailsId={detailsId}\n disabled={!!disabled}\n disabledId={disabledId}\n helpModal={helpModal}\n helpModalId={helpModalId}\n hideLabel={hideLabel}\n info={info}\n infoId={infoId}\n label={label}\n labelId={labelId}\n name={props.name}\n required={!!props.required}\n />\n <Select\n {...props}\n MenuProps={{\n sx: theme => ({\n '& .MuiMenuItem-root': {\n whiteSpace: 'normal'\n },\n maxHeight: theme.spacing(82),\n width: props.fullWidth\n ? undefined\n : width\n ? theme.spacing(width)\n : theme.spacing(56)\n })\n }}\n SelectDisplayProps={{\n 'aria-invalid': !!error,\n 'aria-required': !!props.required\n }}\n aria-describedby={describedBy}\n disabled={!!disabled || !!loading}\n displayEmpty\n endAdornment={\n Array.isArray(value) &&\n value.length > 0 && (\n <StyledCloseBtn\n aria-label='Clear all selected values'\n data-testid='clearAll'\n onClick={onClearAll}\n size='small'>\n <CloseOutlined />\n </StyledCloseBtn>\n )\n }\n input={\n <Input\n data-component='dropdownInputContainer'\n data-no-focus-style={noFocusStyle}\n data-testid={testIdName}\n disabled={!!disabled || !!loading}\n fullWidth={props.fullWidth}\n multiple={props.multiple}\n required={!!props.required}\n width={width}\n />\n }\n inputProps={{\n IconComponent: props =>\n Array.isArray(value) && value.length ? undefined : (\n <SelectChevron {...props} />\n ),\n 'data-component': 'dropdownInput',\n 'data-testid': testIdName\n }}\n inputRef={ref}\n labelId={labelId}\n notched={undefined} // otherwise we get \"notched is a boolean should be string\" runtime error\n onChange={onChangeValue}\n renderValue={renderValue}\n required={!!props.required}\n slotProps={slotProps}\n value={value}>\n {options?.length ? (\n options.map(option =>\n option.isSubheader ? (\n <StyledListSubheader key={option.label}>\n {option.label}\n </StyledListSubheader>\n ) : (\n <MenuItem\n data-component='dropdownOption'\n data-testid={camelCase(option.label)}\n data-wg-notranslate={\n option.excludeTranslation ? 'true' : undefined\n }\n disableRipple\n key={option.label}\n value={option.value}>\n {props.multiple ? (\n <Stack alignItems='center' direction='row'>\n <Checkbox\n checked={(value as [string | number]).includes(\n option.value\n )}\n />\n <ListItemText\n primary={option.label}\n primaryTypographyProps={{\n sx: { marginBottom: 0 }\n }}\n />\n </Stack>\n ) : (\n option.label\n )}\n </MenuItem>\n )\n )\n ) : (\n <Text\n data-component='dropdownNoOptions'\n data-testid={camelCase('No options')}\n margin={2}>\n No options\n </Text>\n )}\n </Select>\n {formField && (\n <StyledFormHelperText\n aria-atomic='true'\n data-component='dropdownError'\n data-testid={testIdName}\n id={errorId}\n role='alert'>\n {!hideError && errorMessage ? (\n <Stack alignItems='center' direction='row' gap={1}>\n <InfoOutlined color='error' fontSize='small' />\n {!!label && <span className='sr-only'>Error for {label}:</span>}\n {errorMessage}\n </Stack>\n ) : (\n ' '\n )}\n </StyledFormHelperText>\n )}\n </StyledFormControl>\n );\n }\n);\n\nDropdown.displayName = 'Dropdown';\n","import isPropValid from '@emotion/is-prop-valid';\nimport {\n Tab as TabMui,\n TabProps as TabMuiProps,\n TabPanel as TabPanelMui,\n TabPanelProps as TabPanelMuiProps,\n TabsList as TabsListMui,\n Tabs as TabsMui\n} from '@mui/base';\nimport { styled, useMediaQuery } from '@mui/material';\nimport { useCamelCase } from '@vestwell-frontend/hooks';\n\nimport { get } from 'lodash';\nimport {\n Children,\n createContext,\n FC,\n ReactNode,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState\n} from 'react';\nimport { useLocation, useNavigate } from 'react-router-dom';\n\nimport { Dropdown } from './Dropdown';\n\nconst TabContext = createContext(null);\n\nexport const TabPanel: FC<TabPanelMuiProps> = props => {\n const { tabs, index } = useContext(TabContext);\n\n const title = tabs[index]?.title ?? 'Untitled';\n\n return (\n <TabPanelMui\n {...props}\n data-component='tabPanel'\n data-testid={useCamelCase(title)}\n value={props.value?.toString()}\n />\n );\n};\n\ntype MobileTabListProps = {\n children?: ReactNode;\n};\n\nconst StyledDropdownContainer = styled('div')(({ theme }) => ({\n '& > .MuiFormControl-root': {\n marginBottom: theme.spacing(4),\n marginTop: theme.spacing(2)\n },\n display: 'flex',\n justifyContent: 'center'\n}));\n\nconst MobileTabList: FC<MobileTabListProps> = () => {\n const { name, setIndex, tabs, index } = useContext(TabContext);\n\n const dropdownOptions = useMemo(() => {\n return tabs\n .filter(tab => !!tab.title)\n .map(tab => ({ label: tab.title, value: tab.index.toString() }));\n }, [tabs]);\n\n return (\n <StyledDropdownContainer role='presentation'>\n <Dropdown\n fullWidth\n name={name}\n onChange={setIndex}\n options={dropdownOptions}\n value={index.toString()}\n />\n </StyledDropdownContainer>\n );\n};\n\nexport type TabListProps = {\n children?: ReactNode;\n};\n\nconst StyledTabsList = styled(TabsListMui, {\n shouldForwardProp: prop => prop !== 'variant'\n})<{ variant?: 'large' | 'small' | 'mobile' }>(({ theme, variant }) => ({\n fontFamily: theme.typography.fontFamily,\n ...(variant === 'large' && {\n borderBottom: `1px solid ${theme.palette.grey600.main}`\n }),\n marginBottom: theme.spacing(8)\n}));\n\nexport const TabList: FC<TabListProps> = ({ children, ...props }) => {\n const { variant } = useContext(TabContext);\n const isMobile = useMediaQuery(theme => theme.breakpoints.down('sm'));\n\n if (isMobile || variant === 'mobile') {\n return <MobileTabList {...props}>{children}</MobileTabList>;\n }\n\n return (\n <StyledTabsList variant={variant} {...props}>\n {children}\n </StyledTabsList>\n );\n};\n\nexport type TabProps = TabMuiProps & {\n /** Route path to sync Tabs state with; selects tab on match and navigates on selection */\n route?: string;\n /** Visible tab label */\n title: string;\n};\n\nconst StyledTab = styled(TabMui, {\n shouldForwardProp: isPropValid\n})<TabProps>(({ theme, ...props }) => ({\n alignItems: 'center',\n display: 'inline-flex',\n gap: theme.spacing(2),\n justifyContent: 'center',\n ...(props['data-variant'] === 'small'\n ? {\n ...(props['aria-selected']\n ? {\n backgroundColor: theme.palette.primary.main,\n borderColor: theme.palette.primary.main,\n color: theme.palette.white.main\n }\n : {\n backgroundColor: theme.palette.white.main,\n borderColor: theme.palette.ash.main\n }),\n '&:first-of-type': {\n borderRadius: theme.spacing(1.5, 0, 0, 1.5)\n },\n '&:last-of-type': {\n borderRadius: theme.spacing(0, 1.5, 1.5, 0)\n },\n '&:only-of-type': {\n borderRadius: theme.spacing(1.5)\n },\n borderWidth: theme.spacing(0.25),\n fontSize: theme.spacing(3.5),\n fontWeight: 700,\n minWidth: theme.spacing(24),\n padding: theme.spacing(2, 1)\n }\n : {\n ...(props['aria-selected']\n ? {\n borderTopColor: theme.palette.primary.main,\n color: theme.palette.oxfordBlue.main,\n fontWeight: 700\n }\n : {\n '&:hover': {\n backgroundColor: theme.palette.grey800.main\n },\n borderColor: 'transparent'\n }),\n borderRadius: theme.spacing(0.5, 0.5, 0, 0),\n borderWidth: theme.spacing(0.5, 0.25, 0, 0.25),\n fontSize: theme.spacing(4.5),\n lineHeight: theme.spacing(4),\n minWidth: theme.spacing(16),\n padding: theme.spacing(3.75, 6)\n }),\n ...(props['aria-selected']\n ? {}\n : {\n color: theme.palette.grey50.main\n }),\n '&:focus-visible': {\n outline: `1px solid ${theme.palette.primary.main}`\n }\n}));\n\nconst StyledTabsMui = styled(TabsMui)(({ theme }) => ({\n marginBottom: theme.spacing(8)\n}));\n\nexport const Tab: FC<TabProps> = ({ type = 'button', ...props }) => {\n const { variant, index, setIndex } = useContext(TabContext);\n\n const isSelected = props.value === index;\n\n const onClick = useCallback(event => {\n setIndex(+event.target?.dataset?.index);\n }, []);\n\n return (\n <StyledTab\n {...props}\n aria-selected={isSelected}\n data-component='tab'\n data-index={props.value}\n data-route={props.route}\n data-testid={useCamelCase(props.title)}\n data-variant={variant}\n onClick={onClick}\n title={props.title}\n type={type}\n value={props.value?.toString()}>\n {props.title}\n {props.children}\n </StyledTab>\n );\n};\n\nexport type TabsProps = {\n children: ReactNode;\n /** Initial selected tab for uncontrolled usage */\n defaultIndex?: number;\n /** Control selected tab; must be used together with onChange */\n index?: number;\n /** Disambiguate with a label when multiple sets of tabs are present */\n name?: string;\n /** (tabIndex: Number) - emits on tab selection */\n onChange?(index: number): void;\n variant?: 'large' | 'small' | 'mobile';\n};\n\nexport const Tabs: FC<TabsProps> = ({\n name = 'tabs',\n variant = 'large',\n ...props\n}) => {\n const tabs = useMemo(\n () =>\n Children.map(\n get(props.children, '0.props.children', []),\n (child, index) => ({\n index,\n route: get(child, 'props.route'),\n title: get(child, 'props.title')\n })\n ),\n [props.children]\n );\n\n const location = useLocation();\n const navigate = useNavigate();\n\n const routes = useMemo(() => tabs.map(tab => tab.route), [tabs]);\n\n const locationIndex = useMemo(\n () => routes.findIndex(route => route === location.pathname),\n [location.pathname, routes]\n );\n\n const initialIndex =\n props.defaultIndex !== undefined\n ? props.defaultIndex\n : locationIndex !== -1\n ? locationIndex\n : 0;\n\n // Drive tab selection from state so child components (e.g. mobile variant) can change tab via Context API\n const [index, setIndex] = useState(initialIndex);\n\n useEffect(() => {\n if (locationIndex === -1 && props.index === undefined) return;\n locationIndex >= 0 ? setIndex(locationIndex) : setIndex(props.index);\n }, [locationIndex, props.index]);\n\n useEffect(() => {\n const route = tabs[index] && tabs[index].route;\n\n if (route && route !== location.pathname) {\n navigate(route);\n }\n\n if (props.onChange) {\n props.onChange(index);\n }\n\n // exclude location and navigate dependencies; this should only trigger on state updates\n }, [index]);\n\n const onChange = useCallback(event => {\n setIndex(+event.target?.dataset?.index);\n }, []);\n\n const ctx = useMemo(\n () => ({\n index,\n name,\n setIndex,\n tabs,\n variant\n }),\n [name, variant, index, tabs]\n );\n\n return (\n <TabContext.Provider value={ctx}>\n <StyledTabsMui\n {...props}\n aria-label={name}\n data-component='Tabs'\n defaultValue={initialIndex}\n onChange={onChange}\n value={index.toString()}>\n {props.children}\n </StyledTabsMui>\n </TabContext.Provider>\n );\n};\n","import {\n AccountBalanceOutlined,\n ChevronRight,\n PersonOutlineOutlined\n} from '@mui/icons-material';\nimport {\n Alert,\n Avatar,\n AvatarProps,\n Box,\n Card,\n CircularProgress,\n Divider,\n List,\n ListItemButton,\n ListItemButtonProps,\n ListProps,\n ListSubheader,\n ListSubheaderProps,\n Stack,\n styled,\n useMediaQuery\n} from '@mui/material';\nimport {\n DataGrid,\n GridSortModel,\n GridToolbarQuickFilter\n} from '@mui/x-data-grid';\nimport {\n ParticipantPersona,\n StateSaverPersona,\n useGetPersonas,\n useGetSessionInfo\n} from '@sentinel/hooks';\nimport { useAuth } from '@vestwell-frontend/elements';\nimport { broadcastToApp, isEmbeddedBrowser } from '@vestwell-frontend/helpers';\nimport { useDocumentTitle, usePostMutation } from '@vestwell-frontend/hooks';\nimport {\n AccountIcon,\n ContributionsIcon,\n DataGridProps,\n GiftIcon,\n PLACEHOLDER,\n Tab,\n TabList,\n TabListProps,\n TabPanel,\n Tabs,\n TabsProps,\n Text\n} from '@vestwell-frontend/ui';\n\nimport { groupBy, sortBy } from 'lodash';\nimport { useCallback, useEffect, useMemo, useState } from 'react';\nimport { useSearchParams } from 'react-router-dom';\nimport { useMeasure } from 'react-use';\n\nimport { useBackButtonBehavior, useNav } from '../hooks';\nimport { routes } from '../router/routes';\n\nconst StyledContributionsIcon = styled(ContributionsIcon)(({ theme }) => ({\n color: '#2C8FC5',\n height: theme.spacing(8),\n width: theme.spacing(8)\n}));\n\nconst StyledAccountIcon = styled(AccountIcon)(({ theme }) => ({\n height: theme.spacing(12),\n width: theme.spacing(8)\n}));\n\nconst planType = {\n '401k': {\n avatarBgColor: '#EBF4F8',\n avatarIcon: <StyledContributionsIcon />,\n nameForParticipant: 'Retirement Savings 401(k)',\n nameForSponsor: '401(k)'\n },\n '403b': {\n avatarBgColor: '#EBF4F8',\n avatarIcon: <StyledContributionsIcon />,\n nameForParticipant: 'Retirement Savings 403(b)',\n nameForSponsor: '403(b)'\n },\n ESA: {\n avatarBgColor: '#FFF2E9',\n avatarIcon: <StyledAccountIcon color='alert' />,\n nameForParticipant: 'Emergency Savings',\n nameForSponsor: 'Emergency Savings'\n },\n 'Solo 401k': {\n avatarBgColor: '#EBF4F8',\n avatarIcon: <StyledContributionsIcon />,\n nameForParticipant: 'Retirement Savings Solo 401(k)',\n nameForSponsor: 'Solo 401(k)'\n },\n 'Starter 401k': {\n avatarBgColor: '#EBF4F8',\n avatarIcon: <StyledContributionsIcon />,\n nameForParticipant: 'Retirement Savings Starter 401(k)',\n nameForSponsor: 'Starter 401k'\n },\n 'State IRA': {\n avatarBgColor: '#F2F2F2',\n avatarIcon: <AccountBalanceOutlined color='grey100' />,\n nameForParticipant: 'State IRA',\n nameForSponsor: 'State IRA'\n },\n cash_balance: {\n avatarBgColor: '#EBF4F8',\n avatarIcon: <StyledContributionsIcon />,\n nameForParticipant: 'Cash Balance',\n nameForSponsor: 'Cash Balance'\n },\n giftor: {\n avatarBgColor: '#F5F2FF',\n avatarIcon: <GiftIcon color='cornflowerBlue' />,\n nameForParticipant: 'Give a gift'\n },\n vss: {\n avatarBgColor: '#F2F2F2',\n avatarIcon: <AccountBalanceOutlined color='grey100' />,\n nameForParticipant: 'Cash Balance',\n nameForSponsor: 'Cash Balance'\n }\n} as const;\n\nconst StyledAvatar = styled(Avatar, {\n shouldForwardProp: prop => !['customBgColor'].includes(prop.toString())\n})<AvatarProps & { customBgColor?: string }>(({ customBgColor, theme }) => ({\n backgroundColor: customBgColor || theme.palette.grey700.main,\n marginRight: theme.spacing(4)\n}));\n\nconst StyledList = styled(List)<ListProps>(({ theme }) => ({\n backgroundColor: theme.palette.white.main,\n border: `${theme.spacing(0.25)} solid ${theme.palette.grey600.main}`,\n borderRadius: theme.spacing(1),\n boxShadow: theme.shadows[24],\n marginBottom: theme.spacing(6),\n padding: 0,\n [theme.breakpoints.down('sm')]: {\n width: '100%'\n },\n [theme.breakpoints.up('sm')]: {\n width: theme.spacing(160)\n }\n}));\n\nconst StyledListItemButton = styled(ListItemButton)<ListItemButtonProps>(\n ({ theme }) => ({\n '&:last-of-type': {\n borderBottom: `${theme.spacing(0.25)} solid transparent`\n },\n alignItems: 'center',\n borderBottom: `${theme.spacing(0.25)} solid ${theme.palette.grey700.main}`,\n display: 'flex',\n justifyContent: 'space-between',\n padding: theme.spacing(4)\n })\n);\n\nconst StyledListSubheader = styled(ListSubheader)<ListSubheaderProps>(\n ({ theme }) => ({\n alignItems: 'center',\n backgroundColor: theme.palette.aliceBlue.main,\n borderBottom: `${theme.spacing(0.25)} solid ${theme.palette.grey700.main}`,\n borderRadius: theme.spacing(1, 1, 0, 0),\n display: 'flex',\n height: theme.spacing(9.5)\n })\n);\n\nconst StyledTabs = styled(Tabs)<TabsProps>(({ theme }) => ({\n padding: theme.spacing(0, 4),\n width: '100%'\n}));\n\nconst StyledTabList = styled(TabList)<TabListProps>({\n display: 'flex',\n justifyContent: 'center',\n width: '100%'\n});\n\nconst StyledTabPanel = styled(TabPanel)({\n alignItems: 'center',\n display: 'flex',\n flexDirection: 'column',\n width: '100%'\n});\n\nconst StyledAlert = styled(Alert)(({ theme }) => ({\n [theme.breakpoints.down('sm')]: {\n width: '100%'\n },\n [theme.breakpoints.up('sm')]: {\n width: theme.spacing(160)\n }\n}));\n\nconst StyledDivider = styled(Divider)(({ theme }) => ({\n margin: theme.spacing(0, 2)\n}));\n\nconst StyledCircularProgress = styled(CircularProgress)(() => ({\n margin: 'auto'\n}));\n\nconst columns: DataGridProps['columns'] = [\n {\n field: 'sponsorId',\n flex: 0.3,\n headerName: 'ID',\n renderCell: params => {\n return (\n <Text color='primary' mb={0} variant='i2'>\n {params.row.recordKeeperId === 2\n ? (params.row.externalSponsorPlanId ?? PLACEHOLDER)\n : (params.row.sponsorPlanId ?? PLACEHOLDER)}\n </Text>\n );\n },\n sortable: false,\n valueGetter: (value, row) => {\n return row.recordKeeperId === 2\n ? (row.externalSponsorPlanId ?? PLACEHOLDER)\n : (row.sponsorPlanId ?? PLACEHOLDER);\n }\n },\n {\n field: 'externalSponsorPlanId',\n headerName: 'externalSponsorPlanId',\n sortable: false\n },\n {\n field: 'planType',\n flex: 0.3,\n headerName: 'Type',\n renderCell: params => {\n return params.row.recordKeeperId === 2\n ? `Voya ${planType[params.row.planType]?.nameForSponsor}`\n : planType[params.row.planType]?.nameForSponsor;\n },\n sortable: false\n },\n {\n field: 'company',\n flex: 1,\n headerName: 'Employer name',\n sortable: false,\n width: 200\n }\n];\n\nexport function PersonasPage() {\n useDocumentTitle('Your Accounts');\n\n useBackButtonBehavior();\n\n const [params] = useSearchParams();\n\n const { setToken, isNative } = useAuth();\n\n const nav = useNav();\n\n const isMobile = useMediaQuery(theme => theme.breakpoints.down('sm'));\n\n const [entity, setEntity] = useState(null);\n const [isEmbedded, setIsEmbedded] = useState(false);\n const [sortModel, setSortModel] = useState<GridSortModel>([]);\n const [hasMultipleCommercialPlatforms, setHasMultipleCommercialPlatforms] =\n useState(false);\n\n const [ref, dimensions] = useMeasure();\n\n const getMobileLocation = (entityType: string) => {\n if (['participant', 'sponsor', 'advisor'].includes(entityType)) {\n return `${window.location.protocol}//mobile.vestwell/${entityType}/index.html`;\n } else if (entityType === 'state_saver') {\n return `${window.location.protocol}//mobile.vestwell/account/index.html`;\n } else if (entityType === 'giftor') {\n return `${window.location.protocol}//mobile.vestwell/gifting/index.html`;\n } else {\n throw new Error('Invalid entity type');\n }\n };\n\n useGetSessionInfo('user', {\n query: {\n onSuccess: async user => {\n if (user?.hasMfaNudge && !user.isMfaEnabled) {\n nav.to(routes.MFA_NUDGE);\n return;\n }\n\n if (user?.isMfaEnabled && !user.isMfaVerified) {\n nav.to(routes.MFA_VERIFICATION);\n return;\n }\n\n if (user?.postLoginPath) {\n if (!isNative) {\n nav.external(user.postLoginPath);\n return;\n } else {\n return window.location.assign(getMobileLocation(user.entity?.type));\n }\n }\n\n if (params.get('redirect') && user.entity) {\n setEntity({\n entityId: user.entity?.id,\n entityType: user.type,\n hasPersona: true\n });\n }\n\n if (\n //@ts-expect-error\n !user?.hasPersona &&\n (user?.advisorId || user?.participantId || user?.sponsorId)\n ) {\n setEntity({\n ...(user?.advisorId && user?.type === 'advisor'\n ? {\n entityId: user?.advisorId,\n entityType: 'advisor'\n }\n : user?.participantId && user?.type === 'participant'\n ? {\n entityId: user?.participantId,\n entityType: 'participant'\n }\n : {\n entityId: user?.sponsorId,\n entityType: 'sponsor'\n }),\n hasPersona: true\n });\n }\n },\n suspense: true,\n useErrorBoundary: true\n }\n });\n\n const personas = useGetPersonas(null, {\n query: {\n onSuccess: personas => {\n if (\n personas?.count === 1 &&\n !(\n personas?.stateSavers?.length === 1 &&\n 'error' in personas.stateSavers[0]\n )\n ) {\n if (personas?.advisors[0]?.commercialPlatformsCount > 1) {\n setHasMultipleCommercialPlatforms(true);\n }\n setEntity({\n ...(personas?.advisors?.[0]\n ? {\n entityId: personas?.advisors?.[0].advisorId,\n entityType: 'advisor'\n }\n : personas?.participants?.[0]\n ? {\n entityId: personas?.participants?.[0].participantId,\n entityType: 'participant'\n }\n : personas?.sponsors?.[0]\n ? {\n entityId: personas?.sponsors?.[0].sponsorId,\n entityType: 'sponsor'\n }\n : personas?.giftors?.[0]\n ? {\n entityId: personas?.giftors?.[0].giftorId,\n entityType: 'giftor'\n }\n : {\n entityId: personas?.stateSavers?.[0].stateSaverId,\n entityType: 'state_saver'\n }),\n hasPersona: true\n });\n }\n },\n suspense: true,\n useErrorBoundary: true\n }\n });\n\n const [postEntity, postEntityResult] = usePostMutation(\n '/auth/api/v1/login/entity',\n {},\n {\n onSuccess: async (data, vars) => {\n setToken(data?.token);\n if (isEmbedded) {\n broadcastToApp('CLOSE', data?.token);\n } else if (!isNative) {\n if (hasMultipleCommercialPlatforms) {\n nav.to(routes.PLATFORM_SELECTION);\n } else {\n nav.external(data?.homeUrl);\n }\n } else if (isNative) {\n if (hasMultipleCommercialPlatforms) {\n nav.to(routes.PLATFORM_SELECTION);\n } else {\n return window.location.assign(getMobileLocation(vars?.entityType));\n }\n }\n }\n }\n );\n\n const advisors = useMemo(() => {\n const grouped = groupBy(personas.data?.advisors || [], 'company');\n\n return Object.keys(grouped)\n .sort()\n .map(company => ({\n company,\n users: grouped[company]\n }));\n }, [personas.data]);\n\n const participants = useMemo(() => {\n const groupedNames = [\n ...(personas.data?.stateSavers || []),\n ...(personas.data?.participants || []),\n ...(personas.data?.giftors || [])\n ].reduce((acc, obj) => {\n const key = obj.name?.toLowerCase().replace(/[^a-z0-9]/g, ''); // Convert to lowercase, remove spaces, and remove symbols\n acc[key] = (acc[key] || []).concat(obj);\n return acc;\n }, {});\n\n return Object.keys(groupedNames)\n .sort()\n .map(name => {\n const companies: {\n company: string;\n users: ParticipantPersona[] | StateSaverPersona[];\n }[] = sortBy(\n Object.entries(groupBy(groupedNames[name], 'company')),\n 'company'\n ).map(([company, users]) => ({\n company,\n users\n }));\n\n if (companies.length > 0 && companies[0].users[0].name) {\n return {\n companies,\n name: companies[0].users[0].name\n };\n }\n })\n .filter(Boolean);\n }, [personas.data]);\n\n const sponsors = useMemo(() => {\n const grouped = groupBy(personas.data?.sponsors || [], 'company');\n\n const companies = Object.keys(grouped).sort();\n\n return companies.map(company => ({\n company,\n users: grouped[company]\n }));\n }, [personas.data]);\n\n const isTheOnlyTab = useMemo(\n () =>\n (personas.data?.advisors?.length ? 1 : 0) +\n (personas.data?.sponsors?.length ? 1 : 0) +\n (personas.data?.participants?.length ||\n personas.data?.stateSavers?.length\n ? 1\n : 0) ===\n 1,\n [personas.data]\n );\n\n const onClick = useCallback(\n async (entity: { entityId: number; entityType: string }) => {\n if (\n entity.entityType === 'advisor' &&\n personas.data?.advisors?.some(\n advisor =>\n advisor.advisorId === entity.entityId &&\n advisor.commercialPlatformsCount > 1\n )\n ) {\n setHasMultipleCommercialPlatforms(true);\n }\n await postEntity({ ...entity, hasPersona: true });\n },\n [personas.data?.advisors]\n );\n\n const onRowClick = params =>\n onClick({\n entityId: params.row.sponsorId,\n entityType: params.row.type\n });\n\n // doing this in useEffect to avoid headers conflict in react query and make sure that order of calls is correct\n useEffect(() => {\n if (entity) {\n (async () => {\n await postEntity(entity);\n })();\n }\n }, [entity]);\n\n useEffect(() => {\n isEmbeddedBrowser().then(result => setIsEmbedded(result));\n }, []);\n\n return (\n <Stack alignItems='center' flexGrow={1} ref={ref} width='100%'>\n {(personas.data?.count < 2 &&\n !(\n personas.data?.stateSavers?.length === 1 &&\n 'error' in personas.data.stateSavers[0]\n )) ||\n postEntityResult.isLoading ||\n postEntityResult.isSuccess ? (\n <StyledCircularProgress />\n ) : (\n <>\n <Text\n align='center'\n color='grey50'\n pb={2}\n pt={6}\n variant='c2'\n width='100%'>\n Your Accounts\n </Text>\n {personas.data?.count < 2 &&\n personas.data?.stateSavers?.length === 1 &&\n 'error' in personas.data.stateSavers[0] && (\n <Stack alignItems='center'>\n <StyledAlert severity='warning'>\n Due to technical issues, access to State Saving Accounts (IRA,\n 529 and Able) is temporarily unavailable. Please try again\n after some time.\n </StyledAlert>\n </Stack>\n )}\n <StyledTabs\n defaultIndex={advisors.length ? 0 : participants.length ? 1 : 2}\n key={advisors.length ? 0 : participants.length ? 1 : 2}\n variant='small'>\n {isTheOnlyTab ? undefined : (\n <StyledTabList>\n {advisors.length ? (\n <Tab title='Advisor' value={0} />\n ) : undefined}\n {participants.length ? (\n <Tab title='Personal' value={1} />\n ) : undefined}\n {sponsors.length ? (\n <Tab title='Employer' value={2} />\n ) : undefined}\n </StyledTabList>\n )}\n {advisors.length ? (\n <StyledTabPanel value={0}>\n {advisors.map(advisor => (\n <StyledList\n aria-labelledby={`${advisor.company}`}\n component='nav'\n data-company={advisor.company}\n key={advisor.company}\n subheader={\n <StyledListSubheader\n component='div'\n data-company={advisor.company}\n id={`${advisor.company}`}>\n <Text\n color='grey100'\n data-wg-notranslate\n mb={0}\n variant='g2'>\n {advisor.company}\n </Text>\n </StyledListSubheader>\n }>\n {advisor.users.map(user => (\n <StyledListItemButton\n data-company={user.company}\n data-name={user.name}\n data-testid={user.advisorId}\n key={user.advisorId}\n onClick={() =>\n onClick({\n entityId: user.advisorId,\n entityType: user.type\n })\n }>\n <Stack alignItems='center' direction='row'>\n <StyledAvatar>\n <PersonOutlineOutlined color='grey100' />\n </StyledAvatar>\n <div>\n <Text\n color='grey50'\n data-wg-notranslate\n mb={0}\n variant='e1'>\n {user.name}\n </Text>\n <Text\n color='grey100'\n component='div'\n mb={0}\n variant='i1'>\n ID: {user.advisorId}\n </Text>\n </div>\n </Stack>\n <ChevronRight color='primary' />\n </StyledListItemButton>\n ))}\n </StyledList>\n ))}\n </StyledTabPanel>\n ) : undefined}\n {participants.length ? (\n <StyledTabPanel value={1}>\n {participants.map(participant => (\n <Stack\n alignItems='center'\n key={participant.name}\n width='100%'>\n <Text\n color='grey50'\n data-component='listHeader'\n data-name={participant.name}\n data-wg-notranslate\n id={`${participant.name}`}\n variant='e2'>\n {participant.name}\n </Text>\n {participant.companies.map(group => (\n <StyledList\n aria-labelledby={`${participant.name} ${group.company}`}\n component='nav'\n data-company={group.company}\n data-name={participant.name}\n key={`${participant.name} ${group.company}`}\n subheader={\n <StyledListSubheader\n component='div'\n data-company={group.company}\n id={`${group.company}`}>\n <Text\n color='grey100'\n data-wg-notranslate\n mb={0}\n variant='g2'>\n {group.company}\n </Text>\n </StyledListSubheader>\n }>\n {group.users.map(user => (\n <StyledListItemButton\n data-plantype={\n planType[user.planType]?.nameForParticipant ??\n user.planType\n }\n data-testid={user.participantId || user.giftorId}\n key={user.participantId || user.giftorId}\n onClick={() =>\n onClick({\n entityId: user.participantId\n ? user.participantId\n : user.stateSaverId || user.giftorId,\n entityType: user.type\n })\n }>\n <Stack alignItems='center' direction='row'>\n <StyledAvatar\n customBgColor={\n planType[user.planType]?.avatarBgColor\n }>\n {planType[user.planType]?.avatarIcon || (\n <PersonOutlineOutlined color='grey100' />\n )}\n </StyledAvatar>\n <div>\n <Text color='grey50' mb={0} variant='e1'>\n {user.planType === 'vss'\n ? `${user.planName}${\n user.plansCount > 1 ? ' and others' : ''\n }`\n : (planType[user.planType]\n ?.nameForParticipant ?? user.planType)}\n </Text>\n {!['giftor', 'vss'].includes(user.planType) && (\n <Text\n color='grey100'\n component='div'\n mb={0}\n variant='i1'>\n ID: {user.participantId}\n </Text>\n )}\n </div>\n </Stack>\n <ChevronRight color='primary' />\n </StyledListItemButton>\n ))}\n </StyledList>\n ))}\n </Stack>\n ))}\n {personas.data?.stateSavers?.some(sS => 'error' in sS) && (\n <StyledAlert severity='warning'>\n Due to technical issues, access to State Saving Accounts\n (IRA, 529 and Able) is temporarily unavailable. Please try\n again after some time.\n </StyledAlert>\n )}\n </StyledTabPanel>\n ) : undefined}\n {sponsors.length ? (\n <StyledTabPanel value={2}>\n {sponsors.length > 500 ? (\n <Box\n component={Card}\n justifyContent='center'\n width={isMobile ? dimensions.width - 20 : '660px'}>\n <DataGrid\n autoHeight\n columnHeaderHeight={32}\n columnVisibilityModel={{\n externalSponsorPlanId: false\n }}\n columns={columns}\n data-wg-notranslate\n disableColumnMenu\n disableRowSelectionOnClick\n getRowId={row => row.sponsorId}\n hideFooter={false}\n hideFooterPagination={false}\n localeText={{\n footerTotalRows: 'Displaying'\n }}\n onCellKeyDown={(params, e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n onRowClick(params);\n e.defaultMuiPrevented = true;\n }\n }}\n onRowClick={onRowClick}\n onSortModelChange={model => setSortModel(model)}\n pageSizeOptions={[]}\n rowHeight={40}\n rowSelection={false}\n rows={sponsors.flatMap(sponsor => sponsor.users)}\n slotProps={{\n toolbar: {\n placeholder: 'Enter an ID or Name',\n showQuickFilter: true,\n sx: {\n mb: 2\n }\n }\n }}\n slots={{\n // @ts-expect-error - in new dataGrid it should be strongly typed, but not support yet\n toolbar: GridToolbarQuickFilter\n }}\n sortModel={sortModel}\n sx={{\n '& .MuiDataGrid-row': {\n cursor: 'pointer'\n }\n }}\n />\n </Box>\n ) : (\n sponsors.map(sponsor => (\n <StyledList\n component='nav'\n data-company={sponsor.company}\n key={sponsor.company}>\n {sponsor.users.map(user => (\n <StyledListItemButton\n data-firmcompanyname={user.firmCompanyName}\n data-plantype={\n planType[user.planType]?.nameForSponsor ??\n user.planType\n }\n data-testid={user.sponsorId}\n key={user.sponsorId}\n onClick={() =>\n onClick({\n entityId: user.sponsorId,\n entityType: user.type\n })\n }>\n <Stack alignItems='center' direction='row'>\n <StyledAvatar\n customBgColor={\n planType[user.planType]?.avatarBgColor\n }>\n {planType[user.planType]?.avatarIcon || (\n <PersonOutlineOutlined color='grey100' />\n )}\n </StyledAvatar>\n <div>\n <Text\n color='grey50'\n data-wg-notranslate\n mb={0}\n variant='e1'>\n {user.company}\n </Text>\n <Text\n color='grey100'\n component='div'\n mb={0}\n variant='i1'>\n <Stack\n direction={{ sm: 'row', xs: 'column' }}\n divider={\n <StyledDivider\n flexItem\n orientation='vertical'\n />\n }>\n {planType[user.planType] && (\n <b>\n {planType[user.planType]?.nameForSponsor}\n </b>\n )}\n {user.recordKeeperId === 4 &&\n user.firmCompanyName}\n {user.recordKeeperId === 2\n ? `Voya ID: ${\n user.externalSponsorPlanId ??\n PLACEHOLDER\n }`\n : `ID: ${user.sponsorPlanId ?? PLACEHOLDER}`}\n </Stack>\n </Text>\n </div>\n </Stack>\n <ChevronRight color='primary' />\n </StyledListItemButton>\n ))}\n </StyledList>\n ))\n )}\n </StyledTabPanel>\n ) : undefined}\n </StyledTabs>\n </>\n )}\n </Stack>\n );\n}\n\nPersonasPage.displayName = 'PersonasPage';\n","import Decimal from 'decimal.js';\n\nexport const numericStringRegex = /^(?:[1-9]\\d*|0)\\.?\\d*$/;\n\nexport const isNumericString = str =>\n numericStringRegex.test(str?.toString() ?? '');\n\nexport const stripSpecialNumericChars = value =>\n isNumericValue(value) ||\n isNumericString(value?.toString().replace(/(\\$|,|%)/g, ''))\n ? value\n ?.toString()\n .replace(/(\\$|,|%)/g, '')\n ?.trim()\n : '';\n\nexport const isNumericValue = value =>\n typeof value === 'number' || isNumericString(value);\n\nexport const parseNumber = (value: string | number | Decimal) => {\n return isNaN(Number(stripSpecialNumericChars(value)))\n ? ''\n : stripSpecialNumericChars(value)\n ? new Decimal(stripSpecialNumericChars(value)).toNumber()\n : '';\n};\n","import Decimal from 'decimal.js';\n\nimport { CURRENCY, LOCALE, PLACEHOLDER } from './consts/strings';\nimport { parseNumber } from './parseNumber';\n\nconst formatNumber = (dividend, divisor) =>\n Number(new Decimal(dividend / divisor).toFixed(2).toString());\n\n/**\n * https://git.io/v7PD5 - bostock copypasta\n * number conversion and back to string strips insignificant trailing zeroes\n */\n\nconst formatBillion = x => formatNumber(x, 1e9) + 'B';\nconst formatMillion = x => formatNumber(x, 1e6) + 'MM';\nconst formatThousand = x => formatNumber(x, 1e3) + 'k';\n\nfunction abbreviateValue(x) {\n const value = Math.abs(x);\n\n if (value >= 0.9995e9) return formatBillion(value);\n if (value >= 0.9995e6) return formatMillion(value);\n\n return formatThousand(value);\n}\n\n/**\n * formatCurrency\n * Stylize number values displayed as a string\n *\n * @param {*} amount\n * @param {Object} [options]\n * @param {Boolean} [options.abbreviate=false] - display with letter abbreviatons\n * @param {Boolean} [options.currencySymbol=true] - show/hide currency symbol\n * @param {'parenthetical'|'minus'|'disabled'} [options.negativeNotation=parenthetical] - consumer or professional notation\n * @param {'none'|'plus'} [options.positiveNotation=none] - emphasis of positive values\n * @param {Boolean} [options.showPlaceholder=true] - display placeholder instead of 0, null, or undefined\n * @param {Boolean} [options.showZero=false] - display 0 instead of placeholder\n * @param {Boolean} [options.stripTrailingZeros=true] - display integer only when value is whole\n */\n\nexport type FormatCurrencyOptions = {\n abbreviate?: boolean;\n currencySymbol?: boolean;\n negativeNotation?: 'minus' | 'parenthetical' | 'disabled';\n positiveNotation?: 'none' | 'plus';\n showPlaceholder?: boolean;\n showZero?: boolean;\n stripTrailingZeros?: boolean;\n} & Intl.NumberFormatOptions;\n\nexport function formatCurrency(\n value: number | string | Decimal,\n options?: FormatCurrencyOptions\n): string {\n const opts = {\n abbreviate: false,\n currency: CURRENCY,\n currencySymbol: true,\n negativeNotation: 'minus',\n positiveNotation: 'none',\n showPlaceholder: true,\n showZero: false,\n stripTrailingZeros: true,\n style: 'currency' as const,\n ...options\n };\n\n if (value === null || value === undefined) {\n return value as string;\n }\n\n const amount = parseNumber(value);\n\n if (amount === 0 && opts.showPlaceholder && !opts.showZero) {\n return PLACEHOLDER;\n }\n\n if (typeof amount !== 'number') {\n return amount;\n }\n\n let currency = Number(amount).toLocaleString(LOCALE, {\n currency: opts.currency,\n currencyDisplay: opts.currencyDisplay,\n currencySign: opts.currencySign,\n localeMatcher: opts.localeMatcher,\n maximumFractionDigits: opts.maximumFractionDigits,\n maximumSignificantDigits: opts.maximumSignificantDigits,\n minimumFractionDigits: opts.minimumFractionDigits,\n minimumIntegerDigits: opts.minimumIntegerDigits,\n minimumSignificantDigits: opts.minimumSignificantDigits,\n roundingMode: opts.roundingMode,\n style: opts.style,\n useGrouping: opts.useGrouping\n });\n\n if (opts.abbreviate && amount > 0) {\n currency = '$' + abbreviateValue(amount);\n } else if (opts.abbreviate) {\n currency = '-$' + abbreviateValue(amount);\n }\n\n if (amount >= 0 && opts.positiveNotation === 'plus') {\n currency = `+${currency}`;\n }\n\n if (amount < 0 && opts.negativeNotation === 'parenthetical') {\n currency = currency.replace('-$', '($').concat(')');\n } else if (amount < 0 && opts.negativeNotation === 'minus') {\n currency = `-${currency.replace('-', '')}`;\n } else if (amount < 0 && opts.negativeNotation === 'disabled') {\n currency = `${currency.replace('-', '')}`;\n }\n\n if (!opts.currencySymbol) currency = currency.replace('$', '');\n\n if (currency.includes('.00') && opts.stripTrailingZeros) {\n return currency.replace('.00', '');\n }\n\n return currency;\n}\n","import {\n ChevronRight,\n FolderOutlined,\n InsertChartOutlinedOutlined\n} from '@mui/icons-material';\nimport {\n List,\n ListItemButton,\n ListItemButtonProps,\n ListProps,\n Stack,\n styled\n} from '@mui/material';\nimport { useGetAdvisorCommercialPlatforms } from '@portal-middleware/hooks';\nimport { useGetSessionInfo } from '@sentinel/hooks';\nimport { useAuth } from '@vestwell-frontend/elements';\nimport { formatCurrency } from '@vestwell-frontend/helpers';\nimport { useDocumentTitle, usePostMutation } from '@vestwell-frontend/hooks';\nimport { Loader, SuspenseImage, Text } from '@vestwell-frontend/ui';\n\nimport { useCallback } from 'react';\n\nimport { useNav } from '../hooks';\n\nconst StyledList = styled(List)<ListProps>(({ theme }) => ({\n backgroundColor: theme.palette.white.main,\n border: `${theme.spacing(0.25)} solid ${theme.palette.grey600.main}`,\n borderRadius: theme.spacing(1),\n boxShadow: theme.shadows[24],\n marginBottom: theme.spacing(6),\n padding: 0,\n [theme.breakpoints.down('sm')]: {\n width: '100%'\n },\n [theme.breakpoints.up('sm')]: {\n width: theme.spacing(160)\n }\n}));\n\nconst StyledLogo = styled(SuspenseImage)(({ theme }) => ({\n maxHeight: '100%',\n [theme.breakpoints.up('sm')]: {\n width: 'auto'\n },\n [theme.breakpoints.down('sm')]: {\n width: '70%'\n }\n}));\n\nconst StyledListItemButton = styled(ListItemButton)<ListItemButtonProps>(\n ({ theme }) => ({\n '&:last-of-type': {\n borderBottom: `${theme.spacing(0.25)} solid transparent`\n },\n alignItems: 'center',\n borderBottom: `${theme.spacing(0.25)} solid ${theme.palette.grey700.main}`,\n display: 'flex',\n [theme.breakpoints.up('sm')]: {\n height: theme.spacing(21)\n },\n [theme.breakpoints.down('sm')]: {\n height: 'fit-content'\n },\n justifyContent: 'space-between',\n padding: theme.spacing(4)\n })\n);\n\nexport function PlatformSelectionPage() {\n useDocumentTitle('Books of Business');\n\n const { setToken, isNative } = useAuth();\n\n const nav = useNav();\n\n const advisor = useGetSessionInfo('advisor');\n\n const commercialPlatforms = useGetAdvisorCommercialPlatforms(\n { advisorId: advisor?.data?.advisorId, firmId: advisor?.data?.firmId },\n {\n query: {\n enabled: !!advisor?.data?.advisorId && !!advisor?.data?.firmId\n }\n }\n );\n\n const [postEntity, { isLoading }] = usePostMutation(\n '/auth/api/v1/login/entity',\n {},\n {\n onSuccess: async data => {\n setToken(data?.token);\n if (!isNative) {\n nav.external(data?.homeUrl);\n } else {\n return window.location.assign(\n `${window.location.protocol}//mobile.vestwell/advisor/index.html`\n );\n }\n }\n }\n );\n\n const onClick = useCallback(\n async (entity: {\n entityId: number;\n entityType: string;\n commercialPlatformId: number;\n }) => {\n await postEntity({ ...entity, hasPersona: true });\n },\n [commercialPlatforms?.data]\n );\n\n return isLoading ? (\n <Loader />\n ) : (\n <Stack alignItems='center' flexGrow={1} width='100%'>\n <Text\n align='center'\n color='grey50'\n pb={2}\n pt={6}\n variant='c2'\n width='100%'>\n Books of Business\n </Text>\n {commercialPlatforms.data.map(platform => (\n <StyledList component='nav' key={platform.name}>\n <StyledListItemButton\n onClick={() => {\n onClick({\n commercialPlatformId: platform.commercialPlatformId,\n entityId: advisor.data.advisorId,\n entityType: 'advisor'\n });\n }}>\n <Stack\n alignItems={{ sm: 'center', xs: 'baseline' }}\n direction={{ sm: 'row', xs: 'column' }}\n gap={2}\n height='100%'\n justifyContent='space-between'\n pr={10}\n width='100%'>\n {platform.navbar?.logo?.desktop ? (\n <StyledLogo\n alt={`${platform.name} logo`}\n height='auto'\n src={platform.navbar?.logo?.desktop}\n />\n ) : (\n <Text color='grey100' mb={0} variant='e1'>\n {platform.name}\n </Text>\n )}\n <Stack\n alignItems={{ sm: 'center', xs: 'baseline' }}\n direction={{ sm: 'row', xs: 'column' }}\n gap={2}>\n <Stack\n alignItems='center'\n color='white'\n direction='row'\n gap={1}>\n <FolderOutlined fontSize='small' />\n <Text color='grey100' mb={0} variant='i1'>\n {`${platform.numberOfSponsorPlans} ${platform.numberOfSponsorPlans > 1 ? 'plans' : 'plan'}`}\n </Text>\n </Stack>\n <Stack\n alignItems='center'\n color='white'\n direction='row'\n gap={1}>\n <InsertChartOutlinedOutlined fontSize='small' />\n <Text color='grey100' mb={0} variant='i1'>\n {formatCurrency(platform.stats.totalBalance)}\n </Text>\n </Stack>\n </Stack>\n </Stack>\n <ChevronRight color='primary' />\n </StyledListItemButton>\n </StyledList>\n ))}\n </Stack>\n );\n}\n\nPlatformSelectionPage.displayName = 'PlatformSelectionPage';\n","import { Box } from '@mui/material';\nimport { useDocumentTitle } from '@vestwell-frontend/hooks';\nimport { Link, Text } from '@vestwell-frontend/ui';\n\nimport { SignInLink } from '../components';\nimport { routes } from '../router/routes';\n\nexport function ResetPasswordExpiredPage() {\n useDocumentTitle('Reset Password');\n\n return (\n <>\n <Box mb={8} px={8}>\n <Text\n align='center'\n color='emphasize'\n data-testid='resetPasswordExpiredTitle'\n mb={8}\n variant='b2'>\n Reset Password\n </Text>\n <Text color='grey100' variant='f2'>\n This link has expired\n </Text>\n <Text color='grey100'>\n We care a lot about protecting your account. Disabling idle or used\n links helps us do just that.\n </Text>\n <Text color='grey100'>\n Please{' '}\n <Link data-testid='forgotPasswordLink' to={routes.FORGOT_PASSWORD}>\n request a new link to reset\n </Link>{' '}\n your password.\n </Text>\n </Box>\n <SignInLink />\n </>\n );\n}\n\nResetPasswordExpiredPage.displayName = 'ResetPasswordExpiredPage';\n","import { Check, Close } from '@mui/icons-material';\nimport { List, ListItem, ListItemIcon } from '@mui/material';\nimport { passwordErrorMsg } from '@sentinel/utils';\nimport { Text } from '@vestwell-frontend/ui';\n\nimport { useFormikContext } from 'formik';\nimport { pick } from 'lodash';\nimport { FC, useMemo } from 'react';\n\nconst ERRORS = pick(passwordErrorMsg, [\n 'minLength',\n 'obvious',\n 'oneNumber',\n 'oneSpecialCharacter',\n 'repeatingChars',\n 'contextSpecific'\n]);\n\nexport const validatePasswords = schema => async values => {\n if (typeof schema === 'function') {\n schema = schema();\n }\n try {\n await schema.validate(values, { abortEarly: false });\n } catch (err) {\n return err.inner.reduce(\n (errors, error) => {\n if (error.path === 'password') {\n errors[error.path] = errors.passwordConditions.push(error.message);\n }\n errors[error.path] = error.message;\n\n return errors;\n },\n { passwordConditions: [] }\n );\n }\n};\n\nexport const PasswordCheckList: FC<{\n describedById?: string;\n}> = props => {\n const ctx = useFormikContext<{\n password: string;\n passwordConfirm: string;\n passwordConditions: string[];\n }>();\n\n const checkList = useMemo(\n () =>\n Object.keys(ERRORS)\n .sort()\n .map(error => ({\n checked: !ctx.errors.passwordConditions?.includes(ERRORS[error]),\n id: error,\n message: ERRORS[error]\n })),\n [ctx.errors.passwordConditions]\n );\n\n return (\n <div data-testid='passwordCheckList'>\n <Text color='grey100' mt={2} variant='j2'>\n Your password must:\n </Text>\n <List data-component='list' sx={{ p: 0 }}>\n {checkList.map(item => (\n <ListItem\n data-checked={item.checked}\n data-component='listItem'\n data-testid={item.id}\n key={item.id}\n sx={{ my: 2, p: 0 }}>\n <ListItemIcon sx={{ minWidth: 0, mr: 2 }}>\n {item.checked ? (\n <Check fontSize='small' style={{ color: '#19855F' }} />\n ) : (\n <Close fontSize='small' style={{ color: '#C52C48' }} />\n )}\n </ListItemIcon>\n <span className='sr-only'>\n {item.checked\n ? 'Password Requirement Met:'\n : 'Password Requirement Not Met:'}\n </span>\n <Text color='grey50' mb={0} variant='i1'>\n {item.message}\n </Text>\n </ListItem>\n ))}\n </List>\n <span className='sr-only' id={props.describedById}>\n Create a password with a minimum of 10 characters including a mix of\n letters, numbers and symbols.\n </span>\n </div>\n );\n};\n\nPasswordCheckList.displayName = 'PasswordCheckList';\n","import { Alert, Stack, styled } from '@mui/material';\nimport { useGetSessionInfo, usePutResetPassword } from '@sentinel/hooks';\nimport { validatePassword } from '@sentinel/utils';\nimport {\n PasswordCheckList,\n useAuth,\n validatePasswords\n} from '@vestwell-frontend/elements';\nimport {\n useDocumentTitle,\n useNotifications,\n useSearchParams,\n useToggle\n} from '@vestwell-frontend/hooks';\nimport { Form, FormField, Text } from '@vestwell-frontend/ui';\n\nimport { useCallback, useEffect, useId, useMemo } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport * as yup from 'yup';\n\nimport { SubmitButton } from '../components';\nimport { routes } from '../router/routes';\n\nconst StyledAlert = styled(Alert)(({ theme }) => ({\n marginBottom: theme.spacing(0),\n marginTop: theme.spacing(0),\n width: 'fit-content'\n}));\n\nconst PasswordFormFieldContainer = styled('div')(({ theme }) => ({\n '& > .MuiFormControl-root': {\n marginBottom: theme.spacing(4),\n width: theme.spacing(64)\n }\n}));\n\nconst ConfirmPasswordFormFieldContainer = styled('div')(({ theme }) => ({\n '& > .MuiFormControl-root': {\n width: theme.spacing(64)\n }\n}));\n\nconst StyledForm = styled(Form)(({ theme }) => ({\n width: theme.spacing(64)\n}));\n\nexport function ResetPasswordPage() {\n useDocumentTitle('Reset Password');\n\n const describedById = useId();\n\n const [startRequests, toggleStartRequests] = useToggle(false);\n\n const navigate = useNavigate();\n const notify = useNotifications();\n\n const params = useSearchParams();\n\n const auth = useAuth();\n\n const sessionInfo = useGetSessionInfo('password-reset', {\n query: {\n enabled: startRequests,\n refetchOnWindowFocus: true,\n useErrorBoundary: true\n }\n });\n\n const resetPassword = usePutResetPassword({\n mutation: {\n onSuccess: () => {\n notify.success('Password reset successful');\n auth.setToken('');\n navigate(routes.SIGN_IN);\n }\n }\n });\n\n useEffect(() => {\n if (params.token) {\n auth.setToken(params.token);\n toggleStartRequests(true);\n\n window.history.replaceState({}, '', routes.RESET_PASSWORD);\n }\n }, []);\n\n const validate = useMemo(\n () =>\n validatePasswords(\n yup.object().shape({\n password: validatePassword([sessionInfo.data?.email || '']).required(\n 'Required'\n ),\n passwordConfirm: yup\n .string()\n .oneOf([yup.ref('password'), undefined], 'Passwords Must Match')\n })\n ),\n [sessionInfo.data?.email]\n );\n\n const onSubmit = useCallback(async values => {\n await resetPassword.mutateAsync({\n data: {\n password: values.password\n }\n });\n }, []);\n\n return (\n <>\n <Text\n align='center'\n color='emphasize'\n data-testid='resetPasswordTitle'\n mb={8}\n variant='b2'>\n Reset Password\n </Text>\n <StyledForm\n initialValues={{\n password: '',\n passwordConfirm: ''\n }}\n onSubmit={onSubmit}\n validate={validate}>\n <PasswordFormFieldContainer>\n <FormField\n aria-describedby={describedById}\n label='Password'\n name='password'\n revealable\n type='password'\n width={64}\n />\n </PasswordFormFieldContainer>\n <ConfirmPasswordFormFieldContainer>\n <FormField\n label='Confirm Password'\n name='passwordConfirm'\n type='password'\n width={64}\n />\n </ConfirmPasswordFormFieldContainer>\n <Stack>\n {resetPassword.error && (\n <StyledAlert severity='error'>\n {resetPassword.error?.message}\n </StyledAlert>\n )}\n <SubmitButton>Save New Password</SubmitButton>\n <PasswordCheckList describedById={describedById} />\n </Stack>\n </StyledForm>\n </>\n );\n}\n\nResetPasswordPage.displayName = 'ResetPasswordPage';\n","import { CloseOutlined } from '@mui/icons-material';\nimport { AlertProps, Box, IconButton, Stack, styled } from '@mui/material';\n\nimport Cookies from 'js-cookie';\nimport { FC, ReactNode, useCallback, useEffect, useId } from 'react';\n\nexport type CookiesBannerProps = Pick<AlertProps, 'onClose'> & {\n bannerName: string;\n isOpen: boolean;\n setIsOpen: (value: boolean) => void;\n icon?: ReactNode;\n text: ReactNode;\n title: ReactNode;\n};\n\nconst StyledStack = styled(Stack)(({ theme }) => ({\n backgroundColor: theme.palette.white.main,\n borderRadius: theme.spacing(1),\n bottom: theme.spacing(6),\n boxShadow: theme.shadows[4],\n maxWidth: theme.spacing(80),\n padding: theme.spacing(4),\n position: 'absolute',\n right: theme.spacing(6),\n [theme.breakpoints.down('sm')]: {\n bottom: theme.spacing(4),\n maxWidth: '92%',\n right: 'auto'\n }\n}));\n\nexport const CookiesBanner: FC<CookiesBannerProps> = props => {\n const labelId = useId();\n\n const onClose = useCallback(async () => {\n Cookies.set(props.bannerName, JSON.stringify({ dismissed: true }), {\n expires: 1,\n path: '/'\n });\n props.setIsOpen(false);\n }, []);\n\n useEffect(() => {\n const cookie = Cookies.get(props.bannerName);\n const dismissed = cookie ? JSON.parse(cookie).dismissed : false;\n if (!dismissed) {\n props.setIsOpen(true);\n }\n }, []);\n\n return props.isOpen ? (\n <StyledStack\n aria-labelledby={labelId}\n data-component='cookiesBanner'\n spacing={1}>\n <Stack\n alignItems='center'\n direction='row'\n id={labelId}\n justifyContent='space-between'>\n <Stack alignItems='center' direction='row' spacing={2}>\n {props.icon ? props.icon : null}\n <Box>{props.title}</Box>\n </Stack>\n <IconButton data-component='cookiesBannerCloseButton' onClick={onClose}>\n <CloseOutlined fontSize='small' />\n </IconButton>\n </Stack>\n {props.text}\n </StyledStack>\n ) : undefined;\n};\n\nCookiesBanner.displayName = 'CookiesBanner';\n","import { Alert as MaintenanceAlert } from '@hermes/ui';\nimport { CookieOutlined } from '@mui/icons-material';\nimport { Alert, Box, Stack, styled } from '@mui/material';\nimport { usePostLogin } from '@sentinel/hooks';\nimport { useAuth } from '@vestwell-frontend/elements';\nimport {\n broadcastToApp,\n isEmbeddedBrowser,\n validateEmail\n} from '@vestwell-frontend/helpers';\nimport {\n useDocumentTitle,\n useNotifications,\n useSearchParams\n} from '@vestwell-frontend/hooks';\nimport {\n Button,\n CookiesBanner,\n Form,\n FormField,\n Link,\n Text\n} from '@vestwell-frontend/ui';\n\nimport Cookies from 'js-cookie';\nimport { useCallback, useState } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { useEffectOnce, useUpdateEffect } from 'react-use';\nimport { useLocalStorage } from 'usehooks-ts';\nimport * as Yup from 'yup';\n\nimport { SubmitButton } from '../components';\nimport { useConfig } from '../contexts';\nimport { routes } from '../router/routes';\n\nconst StyledAlert = styled(Alert)(() => ({\n marginTop: 0,\n width: 'fit-content'\n}));\n\nconst StyledIcon = styled(CookieOutlined)(({ theme }) => ({\n backgroundColor: theme.palette.water.main,\n borderRadius: theme.spacing(25),\n padding: theme.spacing(1)\n}));\n\nexport const loginSchema = Yup.object().shape({\n email: validateEmail('Please use standard email format').required('Required'),\n password: Yup.string().required('Required')\n});\n\nexport function SignInPage() {\n useDocumentTitle('Sign In');\n\n const notify = useNotifications();\n const navigate = useNavigate();\n const params = useSearchParams();\n const [credentials, setCredentials] = useState({});\n const [isOpen, setIsOpen] = useState(false);\n\n const [, setCodeLastSentTime] = useLocalStorage('codeLastSentTime', {});\n\n const auth = useAuth();\n const config = useConfig();\n\n const login = usePostLogin({\n mutation: {\n onSuccess: async () => {\n if (await isEmbeddedBrowser()) {\n broadcastToApp('LOGIN', credentials);\n }\n window.location.href = `${window.location.origin}${routes.LOGIN_VERIFICATION}`;\n }\n }\n });\n\n const submitLogIn = useCallback(\n async values => {\n auth.setToken('');\n setCredentials(values);\n await login.mutateAsync({\n data: {\n password: values.password,\n redirectParams: params,\n username: values.email\n }\n });\n },\n [params, setCredentials]\n );\n\n const onClick = useCallback(async () => {\n Cookies.set('cookiesBanner', JSON.stringify({ dismissed: true }), {\n expires: 1,\n path: '/'\n });\n setIsOpen(false);\n window.open('https://www.jpmorgan.com/privacy', '_blank');\n }, []);\n\n useEffectOnce(() => {\n if (params.error) {\n notify.error(\n 'You have been logged out due to inactivity. Please log in again.',\n {\n persist: true\n }\n );\n\n window.history.replaceState({}, '', routes.SIGN_IN);\n }\n setCodeLastSentTime({});\n });\n\n useUpdateEffect(() => {\n if (login.error?.code === 'LOCKED_OUT') {\n navigate(routes.ACCOUNT_LOCKED);\n }\n }, [login.error]);\n\n return (\n <>\n <Text color='emphasize' data-testid='signInTitle' mb={8} variant='b2'>\n Sign In\n </Text>\n <MaintenanceAlert />\n <Form\n initialValues={{\n email: '',\n password: ''\n }}\n onChange={login.reset}\n onSubmit={submitLogIn}\n validationSchema={loginSchema}>\n <Stack spacing={2} width={256}>\n <FormField\n autoComplete='on'\n data-testid='emailField'\n format='email'\n label='Email'\n name='email'\n width={64}\n />\n <FormField\n label='Password'\n name='password'\n revealable\n type='password'\n width={64}\n />\n <Stack alignItems='center'>\n {login.error && (\n <StyledAlert severity='error'>{login.error?.message}</StyledAlert>\n )}\n <Link\n data-testid='forgotPasswordLink'\n to={routes.FORGOT_PASSWORD}\n variant='i1'>\n Forgot your password?\n </Link>\n <SubmitButton disabled={!!login.error}>Sign In</SubmitButton>\n </Stack>\n </Stack>\n </Form>\n <Text color='grey100' variant='i2'>\n {config.login?.accountSetup?.link?.description\n ? `${config.login?.accountSetup?.link?.description} `\n : `Don't have an account yet? `}\n <Box\n color={theme => theme.palette.primary.main}\n component='a'\n data-testid='registrationLink'\n href={`${new URL(window.location.href.replace('signin', 'connect')).origin}/${\n config.login?.accountSetup\n ? routes.ACCOUNT_SETUP.slice(1)\n : config.registration?.isState\n ? routes.EMPLOYER_REGISTRATION.slice(1)\n : routes.REGISTRATION.slice(1)\n }?${new URL(window.location.href).searchParams.toString()}`}\n sx={theme => theme.typography.i1}>\n {config.login?.accountSetup?.link?.text ?? 'Start here'}\n </Box>\n </Text>\n {config.subdomain === 'jpmorgan' && (\n <CookiesBanner\n bannerName='cookiesBanner'\n icon={<StyledIcon color='info' fontSize='medium' />}\n isOpen={isOpen}\n setIsOpen={setIsOpen}\n text={\n <Text mb={0} variant='i1'>\n We and our partners use cookies and other tools for advertising,\n to help stop fraud, and for other purposes. By using this site,\n you agree to how your information is used as outlined in our{' '}\n <Button onClick={onClick} variant='inline'>\n Privacy Policy\n </Button>\n .\n </Text>\n }\n title={\n <Text mb={0} variant='i2'>\n Cookies\n </Text>\n }\n />\n )}\n </>\n );\n}\n\nSignInPage.displayName = 'SignInPage';\n","import { CssBaseline, GlobalStyles } from '@mui/material';\nimport { TimeoutModal } from '@vestwell-frontend/elements';\nimport { NotificationsProvider, PageNotFound } from '@vestwell-frontend/ui';\n\nimport { BrowserRouter, Route, Routes } from 'react-router-dom';\nimport { useLocation } from 'react-use';\n\nimport { Root } from '../components';\nimport { ConfigProvider } from '../contexts';\nimport {\n AccountAccessIssuePage,\n AccountLockedPage,\n AccountSetupPage,\n AuthorizationPage,\n AuthRedirectingPage,\n ForgotPasswordPage,\n LoginAndSecurityPage,\n LogoutPage,\n MfaNudgeAppSetupPage,\n MfaNudgeCompletedPage,\n MfaNudgeMethodPage,\n MfaNudgePage,\n MfaNudgePhoneSetupPage,\n MfaNudgeStartPage,\n MfaNudgeVerifyPage,\n MfaPage,\n PersonasPage,\n PlatformSelectionPage,\n ResetPasswordExpiredPage,\n ResetPasswordPage,\n SignInPage\n} from '../pages';\nimport { routes } from './routes';\n\nexport const AppRouter = () => {\n const path = useLocation();\n\n return (\n <>\n <CssBaseline />\n <NotificationsProvider>\n <ConfigProvider>\n <GlobalStyles\n styles={theme => ({\n body: {\n backgroundColor: `${\n theme.palette[\n path.pathname === routes.PERSONAS ? 'grey900' : 'grey700'\n ].main\n } !important`\n },\n 'div#root': {\n justifyContent: 'center',\n overflowY: 'auto'\n }\n })}\n />\n <BrowserRouter>\n <Routes>\n <Route element={<Root />} path=''>\n <Route element={<LogoutPage />} path={routes.LOGOUT} />\n <Route\n element={<AccountLockedPage />}\n path={routes.ACCOUNT_LOCKED}\n />\n <Route\n element={<AuthorizationPage />}\n path={routes.AUTHORIZATION}\n />\n <Route\n element={<AccountSetupPage />}\n path={routes.ACCOUNT_SETUP}\n />\n <Route\n element={\n <TimeoutModal entity='user'>\n <LoginAndSecurityPage />\n </TimeoutModal>\n }\n path={routes.LOGIN_AND_SECURITY}\n />\n <Route\n element={\n <TimeoutModal entity='user'>\n <PlatformSelectionPage />\n </TimeoutModal>\n }\n path={routes.PLATFORM_SELECTION}\n />\n <Route element={<MfaPage />} path={routes.MFA_VERIFICATION} />\n <Route element={<MfaNudgePage />} path={routes.MFA_NUDGE}>\n <Route\n element={<MfaNudgeAppSetupPage />}\n path={`${routes.MFA_NUDGE}/app`}\n />\n <Route\n element={<MfaNudgeCompletedPage />}\n path={`${routes.MFA_NUDGE}/completed`}\n />\n <Route\n element={<MfaNudgeMethodPage />}\n path={`${routes.MFA_NUDGE}/method`}\n />\n <Route\n element={<MfaNudgePhoneSetupPage />}\n path={`${routes.MFA_NUDGE}/phone`}\n />\n <Route\n element={<MfaNudgeVerifyPage />}\n path={`${routes.MFA_NUDGE}/verify`}\n />\n <Route\n element={<MfaNudgeStartPage />}\n path={`${routes.MFA_NUDGE}`}\n />\n </Route>\n <Route\n element={<ForgotPasswordPage />}\n path={routes.FORGOT_PASSWORD}\n />\n <Route\n element={\n <TimeoutModal entity='user'>\n <PersonasPage />\n </TimeoutModal>\n }\n path={routes.PERSONAS}\n />\n <Route\n element={<ResetPasswordPage />}\n path={routes.RESET_PASSWORD}\n />\n <Route\n element={<ResetPasswordExpiredPage />}\n path={routes.RESET_PASSWORD_EXPIRED}\n />\n <Route\n element={<AccountAccessIssuePage />}\n path={routes.ACCOUNT_ACCESS_ISSUE}\n />\n <Route\n element={<AuthRedirectingPage />}\n path={routes.AUTH_REDIRECTING_PAGE_MOBILE}\n />\n <Route element={<SignInPage />} path={routes.SIGN_IN} />\n </Route>\n <Route element={<PageNotFound />} path='*' />\n </Routes>\n </BrowserRouter>\n </ConfigProvider>\n </NotificationsProvider>\n </>\n );\n};\n","import { Overlay } from '@hermes/ui';\nimport { CircularProgress, Stack } from '@mui/material';\nimport { QueryClient, QueryClientProvider } from '@tanstack/react-query';\nimport { AuthProvider, Favicon } from '@vestwell-frontend/elements';\nimport {\n getBearerToken,\n getMobileHostname,\n initializeSplashScreen,\n isEmbeddedBrowser,\n isNativeMobile,\n logout,\n setEmbeddedHeaders,\n setMobileHeaders\n} from '@vestwell-frontend/helpers';\nimport { ApiBoundary, ThemeProvider } from '@vestwell-frontend/ui';\n\nimport type { AxiosError } from 'axios';\nimport axios from 'axios';\nimport { Suspense } from 'react';\nimport { createRoot } from 'react-dom/client';\n\nimport { AppRouter } from './router/AppRouter';\n\n(async () => {\n const isNative = await isNativeMobile();\n const isEmbedded = await isEmbeddedBrowser();\n\n let mobileHost;\n\n if (isNative) {\n await setMobileHeaders(axios);\n mobileHost = await getMobileHostname();\n }\n if (isEmbedded) {\n setEmbeddedHeaders(axios);\n }\n const token = await getBearerToken(isNative);\n\n axios.defaults.headers.common['Authorization'] = token;\n\n const unauthorizedLanding = isNative\n ? `${window.location.protocol}//${mobileHost}?logout=true`\n : window.location.origin;\n\n const queryClient = new QueryClient({\n defaultOptions: {\n mutations: {\n retry: false,\n useErrorBoundary: false\n },\n queries: {\n cacheTime: 60 * 1000 * 5,\n onError: async (e: AxiosError) => {\n if (\n [401, 403].includes(e?.status) ||\n ['Unauthorized', 'Forbidden'].includes(e?.message)\n ) {\n await logout();\n window.location.href = unauthorizedLanding;\n }\n },\n refetchOnMount: 'always',\n refetchOnReconnect: 'always',\n refetchOnWindowFocus: false,\n retry: (failureCount, error: AxiosError) =>\n (['ECONNABORTED', 'ENOTFOUND', 'ETIMEDOUT', 'ECONNREFUSED'].includes(\n error?.code\n ) ||\n [503, 504].includes(error?.status)) &&\n failureCount < 6,\n suspense: true\n }\n }\n });\n\n await initializeSplashScreen();\n\n const root = createRoot(document.getElementById('root'));\n\n root.render(\n <AuthProvider>\n <QueryClientProvider client={queryClient}>\n <ThemeProvider isWhitelabeled>\n <Suspense\n fallback={\n <Stack\n alignItems='center'\n height='100vh'\n justifyContent='center'\n sx={theme => ({ backgroundColor: theme.palette.grey900.main })}\n width='100vw'>\n <CircularProgress />\n </Stack>\n }>\n <Favicon />\n <Overlay />\n <ApiBoundary>\n <AppRouter />\n </ApiBoundary>\n </Suspense>\n </ThemeProvider>\n </QueryClientProvider>\n </AuthProvider>\n );\n})();\n","import { Device } from '@capacitor/device';\n\nexport const isNativeMobile = async () => {\n const deviceInfo = await Device.getInfo();\n return ['ios', 'android'].includes(deviceInfo?.platform);\n};\n\nexport const isEmbeddedBrowser = async () => {\n const isNative = await isNativeMobile();\n const isInstanceOfCordovaIAB =\n //@ts-ignore\n !!window?.webkit?.messageHandlers?.cordova_iab || !!window?.cordova_iab;\n\n return !isNative && isInstanceOfCordovaIAB;\n};\n"],"names":["getBearerToken","isMobile","tokenData","tokenObject","e","bearerToken","SecureStoragePlugin","get","key","value","JSON","parse","access_token","token_type","console","warn","Cookies","indexOf","getMobileHostname","capgoVersion","localhostCutoffVersion","SemVer","compare","cleanUpStaleCookies","domain","window","location","host","split","slice","join","remove","path","logout","timeout","isNative","token","mobileHost","isNativeMobile","axios","headers","Authorization","href","origin","catch","assign","protocol","error","broadcastToApp","channel","message","webkit","messageHandlers","cordova_iab","postMessage","stringify","content","useCamelCase","text","useMemo","camelCase","HttpClientError","props","name","status","HttpError","code","meta","method","traceId","url","Error","getErrorCode","body","defaultCode","errors","pending","useDocumentTitle","title","args","whitelabel","useGetWhiteLabelUnauthorized","useEffect","data","metadata","document","useNotifications","snackbar","useSnackbar","close","closeSnackbar","options","enqueueSnackbar","variant","blobToBase64DataUrl","blob","Promise","resolve","reject","reader","FileReader","onloadend","result","onerror","readAsDataURL","triggerFileDownload","link","createElement","download","appendChild","click","removeChild","useDownload","pathname","avoidPreview","useState","fileUri","setFileUri","fileName","setFileName","isLoading","setIsLoading","isMobileApp","setIsMobileApp","useBearerToken","bearerTokenValue","setBearerTokenValue","getBearerTokenValue","useCallback","then","handleTokenChange","addEventListener","removeEventListener","notify","contentDisposition","response","downloadedFileName","dataUrl","blobUrl","savedFile","preventDefault","info","open","FileOpener","filePath","openWithDefault","responseType","replace","getFileExtension","Date","getTime","type","URL","createObjectURL","Filesystem","writeFile","directory","Directory","Documents","recursive","uri","mimeType","usePostMutation","config","useRqMutation","keys","i","rawValue","params","isPlainObject","order","undefined","every","v","queryParams","Array","isArray","Object","length","nanoid","source","CancelToken","request","cancelToken","paramsSerializer","serialize","qs","arrayFormat","client","mutateAsync","useWeglot","languageOptions","setLanguageOptions","currentLanguage","setCurrentLanguage","currentLanguageLabel","setCurrentLanguageLabel","languagePreference","setLanguagePreference","isWeglotAvailable","setIsWeglotAvailable","Weglot","languages","map","lang","language_to","language_from","label","getLanguageName","currentLang","getCurrentLang","handleLanguageChange","newLang","on","off","switchLanguage","newLanguage","set","expires","switchTo","syncLanguageWithCookie","savedLanguage","useSearchParams","searchParams","useSearchParamsReactRouterDom","fromEntries","useSecureStorage","secureStorageValue","setSecureStorageValue","setSecureStorageValueInStorage","getSecureStorageValue","useToggle","initialValue","state","setState","prev","format","lastDayOfMonth","getFullYear","AuthContext","createContext","useAuth","store","useContext","useStore","AuthProvider","mobileToken","setMobileToken","mobileTokenExpiration","setMobileTokenExpiration","setWhitelabelSubdomain","isEmbedded","setIsEmbedded","isNativeApp","setIsNativeApp","setAuthToken","tokenExpiration","setAuthTokenExpiration","isInitializing","setIsInitializing","isUpdatingToken","setIsUpdatingToken","fetchData","embeddedResult","isEmbeddedBrowser","expiration","decodedToken","jwtDecode","subDomain","defaults","common","isSameHost","accessToken","isAuthorizationPage","authConfigStore","getState","updateToken","createStore","expirationTime","toISOString","refreshToken","refresh_token","tokenChangeEvent","CustomEvent","dispatchEvent","post","grant_type","setToken","checkTokenExpiration","valueOf","interval","setInterval","clearInterval","Provider","children","Favicon","favicon","querySelector","id","rel","getElementsByTagName","includes","subdomain","displayName","setMobileHeaders","baseUrl","whitelabelSubdomain","baseUAPIUrl","process","env","VW_UNIFIED_API_URL","baseURL","callCount","initializeSplashScreen","Capacitor","isPluginAvailable","SplashScreen","show","autoHide","App","addListener","isActive","hide","palette","alert","contrastText","dark","light","main","aliceBlue","apple","ash","azureishWhite","black","blister","bloodOrange","blueIvy","blueSapphire","brandyButter","cherry","cornflowerBlue","darkBlue","darkGold","denim","dijon","disabled","emphasize","ghostWhite","grannyApple","grey100","grey200","grey300","grey400","grey50","grey500","grey600","grey700","grey800","grey900","imgPlaceholder","interact","khaki","lightBlue","lightGold","lightKhaki","lightestGray","limeGreen","mahogany","malibu","mediumBlue","mediumGold","metallicBlue","mint","muck","niceBlue","oceanGreen","onPayBlue","oxfordBlue","page","paleSalmon","pictonBlue","pine","placeholder","plantation","primary","regalBlue","ruby","seasick","secondary","sky","slate","spinach","success","vividBurgundy","warning","water","wheat","white","wintersDay","theme","createTheme","components","MuiAccordionSummary","styleOverrides","margin","MuiAlert","defaultProps","color","textDecoration","root","borderRadius","fontSize","lineHeight","marginTop","padding","zIndex","MuiAutocomplete","spacing","MuiAvatar","MuiBottomNavigation","boxShadow","height","MuiBottomNavigationAction","focusRipple","maxWidth","minWidth","MuiButton","disableFocusRipple","contained","fontWeight","paddingLeft","paddingRight","inline","backgroundColor","width","ownerState","border","borderColor","outline","outlineOffset","borderWidth","marginBottom","textTransform","MuiButtonBase","minHeight","MuiButtonGroup","MuiCard","MuiCardContent","paddingBottom","MuiCardHeader","paddingTop","MuiCheckbox","MuiCssBaseline","display","listStyleType","listStylePosition","clip","overflow","position","whiteSpace","MuiDataGrid","editInputCell","overlayWrapperInner","flexDirection","alignItems","cursor","textAlign","letterSpacing","visibility","opacity","MuiIconButton","sizeSmall","MuiInput","input","borderBottom","inputClasses","focused","MuiInputLabel","transform","MuiList","MuiListItem","MuiListItemButton","MuiListSubheader","MuiMenuItem","borderLeft","borderBottomColor","borderBottomStyle","borderBottomWidth","userSelect","MuiModal","MuiPaper","shadows","MuiPopper","MuiRadio","MuiSkeleton","MuiSvgIcon","fontSizeLarge","fontSizeSmall","MuiTableCell","MuiTableRow","MuiToggleButton","MuiToolbar","MuiTooltip","arrow","tooltip","MuiTypography","Navbar","desktop","selected","unselected","mobile","typography","a1","a2","allVariants","b1","b2","c1","c2","d1","d2","e1","e2","f1","f2","fontFamily","g1","g2","htmlFontSize","i1","i2","j1","j2","k3","MaterialThemeProvider","memo","themeOverrides","query","enabled","isWhitelabeled","keepPreviousData","useErrorBoundary","muiTheme","merge","ThemeProvider","StyledEngineProvider","injectFirst","Loader","Stack","aria-busy","bottom","data-component","data-testid","justifyContent","left","right","top","CircularProgress","PageContext","StylePageFooter","styled","shouldForwardProp","prop","sticky","marginLeft","marginRight","breakpoints","down","gridArea","PageFooter","StyledButton","loading","LoadingIndicator","action","Button","forwardRef","ref","dataTestId","component","to","Link","data-disabled","target","external","size","ExceptionIcon","createSvgIcon","svg","viewBox","d","fill","role","clipRule","fillRule","LinkStyled","RouterLink","AnchorStyled","isSecureDownload","useTheme","isExternal","onClick","sx","linkedChildren","Children","count","cloneElement","isLinked","injectLinkedProp","LoadingStyled","Skeleton","isPropValid","variantStyles","Loading","isAnimationActive","isChromatic","labelId","useId","animation","aria-labelledby","aria-valuetext","data-variant","data-wg-notranslate","span","className","htmlTag","TextContainer","Typography","propName","bgcolor","Text","mb","aria-label","numericCodes","BAD_REQUEST","DOCUMENT_NOT_FOUND","EMAIL_SEND","ENCRYPT","FORBIDDEN","INVALID_ARG","INVALID_ENV_VAR","INVALID_RESPONSE","INVALID_TOKEN","MISSING_CONTEXT","MISSING_COOKIE","MISSING_ENV_VAR","MISSING_PARAMETER","MISSING_RELATIONSHIP","NOT_FOUND","PARTICIPANT_REGISTRATION_ADDRESS_VERIFY","PARTICIPANT_REGISTRATION_COMPANY_VERIFY","PARTICIPANT_REGISTRATION_EXISTS","PARTICIPANT_REGISTRATION_LOCKOUT","PARTICIPANT_REGISTRATION_NO_MATCH","PARTICIPANT_REGISTRATION_PARTIAL_MATCH","PARTICIPANT_REGISTRATION_USER_EXISTS","SPONSOR_REGISTRATION_EXISTS","SPONSOR_REGISTRATION_LOCKOUT","SPONSOR_REGISTRATION_NO_MATCH","SPONSOR_REGISTRATION_PARTIAL_MATCH","SPONSOR_REGISTRATION_USER_EXISTS","TOKEN_DECRYPT","TOKEN_EXPIRED","TOKEN_VERIFY","UNAUTHORIZED","UNKNOWN_EXCEPTION","StyledExceptionIcon","StyledLink","icon","useMediaQuery","queryClient","useQueryClient","Icon","Box","marginX","mt","details","descriptionId","supportEmail","showRefreshButton","resetQueries","Error404Icon","g","Error500Icon","ERRORS","GENERIC_ERROR","StyledError404Icon","StyledError500Icon","StatusCodeError","errorStatus","toString","Content","Container","innerStyles","hasStickyFooter","StyledPage","hasShelf","flex","overflowY","hasDrawer","Page","footer","noBottomPadding","ctx","hasMainSiblings","element","isValidElement","ApiBoundary","getDerivedStateFromError","render","this","isPage","hidePage","Wrapper","Fragment","Suspense","fallback","Component","TimerIcon","rect","rx","stroke","strokeWidth","x","y","strokeLinecap","strokeLinejoin","circle","cx","cy","r","defs","linearGradient","gradientUnits","x1","x2","y1","y2","stop","stopColor","stopOpacity","offset","safeArea","StyledModalBody","isRounded","flexGrow","StyledModalBodyContents","webkitOverflowScrolling","ModalBody","Alert","dangerouslySetInnerHTML","__html","severity","StyledModalContainer","maxHeight","lgWidth","mdWidth","ModalContainer","StyledModalHeader","StyledModalHeaderText","ModalHeader","ModalLoader","StyledMuiModal","StyledIconButton","IconButton","hasHeader","Modal","confirmMessage","ariaLabelledBy","header","handleClose","requireConfirmOnClose","onRequestClose","confirm","onClose","locked","isOpen","slotProps","backdrop","style","overlayColor","aria-describedby","Divider","closeButton","Close","StyledModalFooter","borderBottomLeftRadius","borderBottomRightRadius","noBoxShadow","gap","justifyBetween","justifyCenter","ModalFooter","direction","advisor","participant","sponsor","user","promptBeforeIdle","StyledTimerIcon","TimeoutModal","headerId","useLocation","originalTitle","isModal","toggleModal","timer","useIdleTimer","crossTab","onPrompt","entity","onHere","activate","useInterval","remainingMs","getRemainingTime","remainingSeconds","Math","floor","StyledMaterialDesignContent","MaterialDesignContent","NotificationsProvider","anchorOrigin","horizontal","vertical","autoHideDuration","maxSnack","preventDuplicate","$snackbar","useRef","onDismiss","current","dataset","SnackbarProvider","Components","data-key","iconVariant","InfoOutlined","Check","WarningAmberOutlined","legacyPaths","PageNotFound","isRedirectPath","basePath","some","p","isLegacyPath","test","defaultPath","FormConfirm","Confirm","isConfirmed","useFormikContext","useUpdateEffect","handleSubmit","values","FormChangeHandler","mounted","setMounted","$timeout","setTimeout","clearTimeout","cancel","useDebounce","shouldCall","preventOnChangeOnMount","onChange","useUnmount","FormValidationHandler","onValidation","isValid","FormErrorHandler","onErrors","FormValidationSchemaChanged","validateForm","validationSchema","IsRequiredFieldContext","Form","enableReinitialize","initialValues","validateOnBlur","validateOnChange","validateOnMount","toggleIsConfirmed","showConfirm","toggleShowConfirm","onConfirm","onValidate","validate","abortEarly","context","validationContext","onRawErrors","yupToFormErrors","onReset","onSubmit","setSubmitting","isRequiredFieldValue","fields","describe","reduce","acc","field","getIn","tests","find","ariaLabel","Formik","autoComplete","initialTouched","innerRef","FormikForm","pick","dismiss","isNumberAllowed","min","max","isValueDefined","floatValue","isMinDefined","isMaxDefined","isAboveMin","isBelowMax","maskProps","allowEmptyFormatting","allowLeadingZeros","allowNegative","decimalScale","precision","expectNumericValue","isAllowed","prefix","thousandSeparator","dateMask","dateInputFormat","expectFormattedValue","substring","formatDisplayValue","parseISO","mask","toUpperCase","ein","numericString","suffix","ssn","formattedValue","TextBoxFormat","formatChangeValue","formatPasteValue","reformatOnBlur","inputProps","isDate","isFocused","toggleIsFocused","textValue","setTextValue","onBlur","onFocus","onPaste","stopPropagation","clipboardData","getData","onValueChange","event","NumericFormat","NumberFormatBase","data-raw-value","getInputRef","valueIsNumericString","StyledInput","Input","WebkitTextSecurity","align","TextBox","autoFocus","endAdornment","fullWidth","noFocusStyle","readOnly","required","revealable","testId","reveal","toggleReveal","$input","useImperativeHandle","focus","select","trim","isMask","data-no-focus-style","data-secure","aria-pressed","onMouseDown","VisibilityOffOutlined","VisibilityOutlined","inputComponent","inputRef","IconTooltip","placement","trigger","ml","componentsProps","popper","describeChild","enterTouchDelay","Details","StyledInputLabel","InputLabel","FormFieldLabel","isModalOpen","toggleIsModalOpen","testIdName","hideLabel","shrink","hideLocked","disabledId","LockOutlined","infoId","helpModal","helpModalId","detailsId","StyledFormControl","FormControl","StyledFormHelperText","FormHelperText","FormField","ariaDescribedBy","hideError","help","isRequired","useField","helpers","errorId","errorMessage","touched","describedBy","trimEnd","setValue","aria-invalid","aria-atomic","routes","ACCOUNT_ACCESS_ISSUE","ACCOUNT_LOCKED","ACCOUNT_SETUP","AUTHORIZATION","AUTH_REDIRECTING_PAGE_MOBILE","EMPLOYER_REGISTRATION","FORGOT_PASSWORD","LOGIN_AND_SECURITY","LOGIN_VERIFICATION","LOGOUT","MFA_NUDGE","MFA_VERIFICATION","PERSONAS","PLATFORM_SELECTION","REGISTRATION","RESET_PASSWORD","RESET_PASSWORD_EXPIRED","SIGN_IN","StyledAlert","FormSaveButton","ensureDirty","serverError","isDisabled","setDisabled","isSubmitting","dirty","handleClick","data-error","data-is-dirty","data-is-valid","data-status","data-submitting","StyledFormSaveButton","SubmitButton","StyledFormFieldContainer","schema","yup","shape","appVerification","AppVerification","postMfaVerify","usePostMfaVerify","mutation","onSuccess","Grid2","reset","container","startsWith","maxLength","SuspenseImage","alt","src","crossOrigin","rest","imageUrl","setImageUrl","onError","img","ConfigContext","useConfig","ConfigProvider","configStore","isInitialLoading","StyledCard","Card","isLogo","borderTopColor","borderTopWidth","up","StyledSuspenseImage","BackgroundCard","login","logo","py","StyledBanner","alignSelf","Banner","banner","FormatEmail","formatted","email","username","maskEmail","showPlaceholder","ResendOtpButton","inputName","mfaEntryId","subType","initSeconds","$abort","useLocalStorage","codeLastSentTime","setCodeLastSentTime","differenceInSeconds","now","seconds","setSeconds","sms","prevState","OTPCredentials","abort","AbortController","navigator","credentials","otp","signal","transport","StyledResendOtpButton","emailVerification","EmailVerification","navigate","useNavigate","postMfaSend","usePostMfaSend","onResendCode","res","log","isLoginDisabled","StyledDivider","Help","contacts","resources","my","px","resource","index","description","flexItem","orientation","contact","phone","FormatPhoneNumber","phoneNumber","cleanedValue","digitsOnly","formatPhoneNumber","StyledText","HelpModal","isHelpModal","toggleIsHelpModal","registration","isState","divider","support","PLACEHOLDER","fontWeightBold","StyledVerticalAttribute","VerticalAttribute","aria-level","linkTo","excludeTranslation","caption","WizardContext","useWizard","WizardProvider","isStorybook","STORYBOOK","steps","step","hasLinks","foundIndex","findIndex","endsWith","storeRef","persist","storage","initSteps","createJSONStorage","sessionStorage","hasNextStep","hasPrevStep","initialState","resetState","update","setStep","updatedSteps","WizardProviderCtrl","onStateChange","onStepChange","prevIndex","usePrevious","setSteps","when","nextStep","reverse","EMAIL_REGEXP","PHONE_REGEX","validateEmail","excludeEmptyString","matches","validatePhone","newLoginEmail","ChangeLoginEmail","postUserEmailChange","newEmail","setNewEmail","usePostUserEmailChange","emailVerified","formikHelpers","setErrors","lg","md","xs","classes","securityCode","ChangeLoginEmailVerifyCode","patchUserEmail","usePatchUserEmail","codeVerified","onBack","strong","password","VerifyPassword","verify","useGetSessionInfo","usePostVerifyPassword","passwordVerified","endIcon","isMfaSetup","KeyboardArrowRightOutlined","changeLoginEmail","ChangeLoginEmailModal","toggleIsOpen","aria-haspopup","PasswordResetModal","usePostForgotPassword","toggleOpen","SectionCard","LoginSettingsSection","refetch","Img","toggleIsLoading","setSrc","loaderId","promise","AbortablePromise","Image","onload","onabort","MfaQrCode","isManualCode","toggleIsManualCode","qrCode","flexWrap","secret","letter","hexToRgba","hex","exec","rgba","parseInt","StyledBox","backgroundColorOpacity","Pill","fontColor","StyledMenu","Menu","StyledListItem","MenuItem","isIcon","ActionMenuItem","onSelect","disableRipple","iconColor","ActionMenu","menuId","triggerId","anchorEl","setAnchorEl","Boolean","disableElevation","MenuListProps","elevation","actions","MfaSetupApp","setup","usePostMfaSetup","useGetQrCode","isSuccess","refetchOnMount","suspense","onContinue","methodSelected","useMount","RadioGroupContext","StyledRadio","Radio","StyledFormControlLabel","FormControlLabel","checked","columnGap","RadioButton","control","disableTypography","RadioGroup","formField","onRadioButtonChange","MuiRadioGroup","aria-disabled","aria-required","StyledRadioGroup","FormRadioGroup","setTouched","MfaSetupPhone","entrySubType","MfaSetupVerifyCode","postMfaSetupVerify","postMfaSetup","usePostMfaSetupVerify","methodVerified","mfaSetup","MfaEditModal","MfaSetupModal","isBackup","startIcon","Add","MfaSection","mfaMethods","useGetMfaMethods","all","entryType","concat","isEditModal","setIsEditModal","patchMfaIsPrimary","usePatchMfaIsPrimary","deleteMfaEntry","useDeleteMfaEntry","onEditClose","ScreenshotOutlined","app","isPrimary","MoreVert","PermPhoneMsgOutlined","EmailOutlined","Grid","StyledRadioButton","subTypeSchema","phoneVerification","PhoneVerification","onSubTypeSubmit","onSubTypeSelect","formatTimeAgo","n","unit","getTimeAgo","date","dateLeft","dateRight","minutes","differenceInMinutes","hours","differenceInHours","days","differenceInDays","months","differenceInMonths","RecentLoginsSection","loginLog","useGetLoginLog","lastAttemptsCount","refetchInterval","refetchOnWindowFocus","formattedCreatedAt","createdAt","dataUpdatedAt","data-componet","browser","ipAddress","AccountMenu","personas","useGetUserinfo","useSubdomain","useGetPersonas","disableDetails","currentTarget","onLoginAndSecurity","onSwitchAccount","aria-controls","aria-expanded","AdminPanelSettingsOutlined","ArrowDropDown","hideBackdrop","ListItemIcon","GppGoodOutlined","LoopOutlined","Logout","defaultInsets","initializeSafeArea","insets","SafeArea","getSafeAreaInsets","debug","entries","forEach","documentElement","setProperty","TopbarStyled","AppBar","ContainerStyled","Topbar","as","HelpContainer","Root","isSpecialPage","isTopBar","weglot","useEffectOnce","Outlet","SignInLink","forceLogout","AccountAccessIssueIcon","xmlns","AccountAccessIssuePage","AccountLockedPage","AccountSetupPage","accountSetup","columns","selections","option","div","Redirect","AuthRedirectingPage","search","redirectUrl","URLSearchParams","compareToCurrentVersion","versionTarget","cutoffVersion","CAPGO_BUNDLE","isMobileVersionHigherThan","AuthorizationPage","postToken","isHigherVersion","setIsHigherVersion","useNavigateFn","backParts","filter","part","urlPaths","splice","replaceAll","history","back","usePostToken","userInfo","embedded","isHigher","forgotPasswordSchema","emailConfirm","oneOf","FormContainer","ForgotPasswordPage","forgotPassword","setValues","b","LoginAndSecurityPage","setIsNative","isEmbeddedBr","originPath","portal","ArrowBack","LogoutPage","MfaNudgeAppSetupPage","isMfaMethodSelected","hasSetupMfaMethod","AvatarIcon","colorInterpolationFilters","filterUnits","feFlood","floodOpacity","feColorMatrix","in","feMorphology","operator","radius","feOffset","dy","feGaussianBlur","stdDeviation","feComposite","in2","feBlend","mode","background","StyledAvatarIcon","MfaNudgeCompletedPage","mfaMethod","MfaNudgeMethodPage","isUserReadyToEnableMfa","mfaNudge","hasSetupMfaSkipped","hasSetupMfaVerified","isMfaEnabled","mfaPhone","MfaNudgePage","useGetStatus","hasMfaNudge","MfaNudgePhoneSetupPage","mfaMethodSubType","AuthIcon","StyledAuthIcon","MfaNudgeStartPage","alignContent","StyledGrid","FlexGrowGrid","MfaNudgeVerifyPage","isRegistration","useBackButtonBehavior","pushState","useNav","TryAnotherMethodButton","MfaPage","setMethod","onChangeAuthMethod","onMethodSelect","primaryMethod","selectedMethod","diff","ContributionsIcon","AccountIcon","GiftIcon","focusable","SelectChevron","ArrowDropDownOutlined","parseJson","json","StyledCloseBtn","multiple","transition","transitions","create","StyledListSubheader","ListSubheader","Dropdown","defaultOptions","hasObjectValues","o","isObject","defaultValue","item","onChangeValue","isSubheader","optionsHash","renderValue","disableShrink","onClearAll","listbox","newValue","Select","MenuProps","SelectDisplayProps","displayEmpty","CloseOutlined","notched","Checkbox","ListItemText","primaryTypographyProps","TabContext","StyledDropdownContainer","MobileTabList","setIndex","tabs","dropdownOptions","tab","StyledTabsList","TabsListMui","StyledTab","TabMui","StyledTabsMui","TabsMui","Tab","isSelected","aria-selected","data-index","data-route","route","StyledContributionsIcon","StyledAccountIcon","planType","avatarBgColor","avatarIcon","nameForParticipant","nameForSponsor","ESA","AccountBalanceOutlined","cash_balance","giftor","vss","StyledAvatar","Avatar","customBgColor","StyledList","List","StyledListItemButton","ListItemButton","StyledTabs","child","locationIndex","initialIndex","defaultIndex","StyledTabList","StyledTabPanel","TabPanelMui","StyledCircularProgress","headerName","renderCell","row","recordKeeperId","externalSponsorPlanId","sponsorPlanId","sortable","valueGetter","PersonasPage","nav","setEntity","sortModel","setSortModel","hasMultipleCommercialPlatforms","setHasMultipleCommercialPlatforms","useMeasure","dimensions","getMobileLocation","entityType","isMfaVerified","postLoginPath","entityId","hasPersona","advisorId","participantId","sponsorId","stateSavers","advisors","commercialPlatformsCount","participants","sponsors","giftors","giftorId","stateSaverId","vars","homeUrl","postEntity","postEntityResult","grouped","groupBy","sort","company","users","groupedNames","obj","toLowerCase","companies","sortBy","isTheOnlyTab","onRowClick","pb","pt","data-company","subheader","data-name","PersonOutlineOutlined","ChevronRight","group","data-plantype","planName","plansCount","sS","DataGrid","autoHeight","columnHeaderHeight","columnVisibilityModel","disableColumnMenu","disableRowSelectionOnClick","getRowId","hideFooter","hideFooterPagination","localeText","footerTotalRows","onCellKeyDown","defaultMuiPrevented","onSortModelChange","model","pageSizeOptions","rowHeight","rowSelection","rows","flatMap","toolbar","showQuickFilter","slots","GridToolbarQuickFilter","data-firmcompanyname","firmCompanyName","sm","CURRENCY","LOCALE","numericStringRegex","isNumericString","str","stripSpecialNumericChars","isNumericValue","parseNumber","isNaN","Number","Decimal","toNumber","formatNumber","dividend","divisor","toFixed","formatBillion","formatMillion","formatThousand","abbreviateValue","abs","formatCurrency","opts","abbreviate","currency","currencySymbol","negativeNotation","positiveNotation","showZero","stripTrailingZeros","amount","toLocaleString","currencyDisplay","currencySign","localeMatcher","maximumFractionDigits","maximumSignificantDigits","minimumFractionDigits","minimumIntegerDigits","minimumSignificantDigits","roundingMode","useGrouping","StyledLogo","PlatformSelectionPage","commercialPlatforms","useGetAdvisorCommercialPlatforms","firmId","platform","commercialPlatformId","pr","navbar","FolderOutlined","numberOfSponsorPlans","InsertChartOutlinedOutlined","stats","totalBalance","ResetPasswordExpiredPage","passwordErrorMsg","validatePasswords","err","inner","passwordConditions","push","PasswordCheckList","checkList","ListItem","data-checked","mr","describedById","PasswordFormFieldContainer","ConfirmPasswordFormFieldContainer","StyledForm","ResetPasswordPage","sessionInfo","resetPassword","startRequests","toggleStartRequests","auth","usePutResetPassword","replaceState","validatePassword","passwordConfirm","StyledStack","CookiesBanner","bannerName","dismissed","setIsOpen","cookie","StyledIcon","CookieOutlined","loginSchema","Yup","SignInPage","setCredentials","usePostLogin","submitLogIn","redirectParams","MaintenanceAlert","AppRouter","CssBaseline","GlobalStyles","styles","BrowserRouter","Routes","Route","unauthorizedLanding","handleDeviceInfo","deviceInfo","detail","deviceHeader","osVersion","setEmbeddedHeaders","QueryClient","mutations","retry","queries","cacheTime","refetchOnReconnect","failureCount","createRoot","getElementById","QueryClientProvider","Overlay","Device","getInfo","isInstanceOfCordovaIAB"],"sourceRoot":""}