varminer-app-header 2.2.7 → 2.2.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/DrawerContext.tsx","../src/utils/localStorage.ts","../src/utils/translations.ts","../src/asset/Impactomics.svg","../src/asset/flags/gb.png","../src/asset/flags/es.png","../src/LanguageSelector.tsx","../src/AppHeader.tsx"],"sourcesContent":["import * as React from \"react\";\r\n\r\ninterface DrawerContextType {\r\n isDrawerOpen: boolean;\r\n openDrawer: () => void;\r\n closeDrawer: () => void;\r\n toggleDrawer: () => void;\r\n}\r\n\r\nconst DrawerContext = React.createContext<DrawerContextType>({\r\n isDrawerOpen: false,\r\n openDrawer: () => {},\r\n closeDrawer: () => {},\r\n toggleDrawer: () => {},\r\n});\r\n\r\nexport const DrawerProvider = ({ children }: { children: React.ReactNode }) => {\r\n const [isDrawerOpen, setIsDrawerOpen] = React.useState(false);\r\n\r\n const openDrawer = () => {\r\n setIsDrawerOpen(true);\r\n };\r\n\r\n const closeDrawer = () => {\r\n setIsDrawerOpen(false);\r\n };\r\n\r\n const toggleDrawer = () => {\r\n setIsDrawerOpen((prev) => !prev);\r\n };\r\n\r\n return (\r\n <DrawerContext.Provider\r\n value={{ isDrawerOpen, openDrawer, closeDrawer, toggleDrawer }}\r\n >\r\n {children}\r\n </DrawerContext.Provider>\r\n );\r\n};\r\n\r\nexport const useDrawer = () => React.useContext(DrawerContext);\r\n\r\n","// --- IAM app user details (shared from IAM after verify-OTP, same origin) ---\r\n/** localStorage key used by IAM app for user details (GET /v1/userManagement/userDetails response). */\r\nexport const USER_DETAILS_STORAGE_KEY = \"linn-i-am-userDetails\";\r\n\r\n/** Stored value is the full API response from userDetails. */\r\nexport interface UserDetailsStoredResponse {\r\n status: \"SUCCESS\" | \"FAILURE\";\r\n statusinfo: {\r\n code: string;\r\n message: string;\r\n };\r\n data?: {\r\n usersDetails: UserDetailsItem[];\r\n };\r\n errors?: Record<string, string> | null;\r\n}\r\n\r\nexport interface UserDetailsItem {\r\n userId: number;\r\n firstName: string;\r\n lastName: string;\r\n email: string;\r\n status: string;\r\n roles?: string[];\r\n lastLogin?: string;\r\n createdDate?: string;\r\n contactNumber?: { phoneType: string; phoneNumber: string }[];\r\n timeZone?: string;\r\n workInfo?: {\r\n jobTitle?: string;\r\n department?: string;\r\n supervisor?: string;\r\n };\r\n}\r\n\r\n/**\r\n * Read user details from IAM app localStorage (set after verify-OTP on same origin).\r\n * Does not write or overwrite this key; IAM app is the source of truth.\r\n */\r\nexport function getStoredUserDetails(): UserDetailsItem | null {\r\n try {\r\n const raw = localStorage.getItem(USER_DETAILS_STORAGE_KEY);\r\n if (!raw) return null;\r\n\r\n const parsed = JSON.parse(raw) as UserDetailsStoredResponse;\r\n if (parsed.status !== \"SUCCESS\" || !parsed.data?.usersDetails?.length) {\r\n return null;\r\n }\r\n\r\n return parsed.data.usersDetails[0];\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\n// --- Header-owned persist store (unique key, no conflict with other apps) ---\r\n/** Unique localStorage key for this header package. Used only for access token; user details come from IAM (linn-i-am-userDetails). */\r\nexport const PERSIST_HEADER_KEY = \"persist:varminer-app-header\";\r\n\r\n/** Auth shape stored under PERSIST_HEADER_KEY. Host app should call setHeaderAuth after login so the header can make authenticated calls. */\r\nexport interface HeaderAuthState {\r\n accessToken?: string;\r\n refreshToken?: string;\r\n user_id?: number | string;\r\n [key: string]: unknown;\r\n}\r\n\r\n/**\r\n * Store auth (e.g. accessToken) in the header's own persist key. Call this after login so the header can use the token for profile picture etc.\r\n * User details are not stored here; they come from IAM (linn-i-am-userDetails).\r\n */\r\nexport function setHeaderAuth(auth: HeaderAuthState | null): void {\r\n try {\r\n const payload = auth ? { auth } : {};\r\n localStorage.setItem(PERSIST_HEADER_KEY, JSON.stringify(payload));\r\n } catch (err) {\r\n console.error(\"Error setting header auth:\", err);\r\n }\r\n}\r\n\r\n/**\r\n * User display data: from IAM only (linn-i-am-userDetails). No dependency on persist:userdb.\r\n */\r\nexport const getUserDataFromStorage = (): { name: string; email: string; role: string; avatar?: string; initials?: string } | null => {\r\n const iamUser = getStoredUserDetails();\r\n if (!iamUser) return null;\r\n const name = [iamUser.firstName, iamUser.lastName].filter(Boolean).join(\" \").trim();\r\n const role = iamUser.roles?.length ? iamUser.roles[0] : iamUser.workInfo?.jobTitle ?? \"\";\r\n return {\r\n name: name || \"\",\r\n email: iamUser.email || \"\",\r\n role: role || \"\",\r\n avatar: undefined,\r\n initials: name ? name.split(/\\s+/).map((s) => s[0]).join(\"\").slice(0, 2).toUpperCase() : undefined,\r\n };\r\n};\r\n\r\nexport const getNotificationCountFromStorage = (): number => {\r\n const userDbString = localStorage.getItem(\"persist:userdb\");\r\n if (userDbString) {\r\n try {\r\n const parsedOuter = JSON.parse(userDbString);\r\n \r\n const parseNested = (value: any) => {\r\n if (typeof value === 'string') {\r\n try {\r\n return JSON.parse(value);\r\n } catch {\r\n return value;\r\n }\r\n }\r\n return value;\r\n };\r\n \r\n if (parsedOuter.notifications) {\r\n const parsedNotifications = parseNested(parsedOuter.notifications);\r\n const count = parsedNotifications.count || parsedNotifications.unreadCount || parsedNotifications.total;\r\n if (typeof count === 'number') return count;\r\n }\r\n \r\n if (parsedOuter.app) {\r\n const parsedApp = parseNested(parsedOuter.app);\r\n if (parsedApp.notificationCount !== undefined) {\r\n return parsedApp.notificationCount;\r\n }\r\n }\r\n } catch (err) {\r\n console.error(\"Error parsing notification count from localStorage:\", err);\r\n }\r\n }\r\n return 0;\r\n};\r\n\r\nexport const getMessageCountFromStorage = (): number | undefined => {\r\n const userDbString = localStorage.getItem(\"persist:userdb\");\r\n if (userDbString) {\r\n try {\r\n const parsedOuter = JSON.parse(userDbString);\r\n \r\n const parseNested = (value: any) => {\r\n if (typeof value === 'string') {\r\n try {\r\n return JSON.parse(value);\r\n } catch {\r\n return value;\r\n }\r\n }\r\n return value;\r\n };\r\n \r\n if (parsedOuter.messages) {\r\n const parsedMessages = parseNested(parsedOuter.messages);\r\n const count = parsedMessages.count || parsedMessages.unreadCount || parsedMessages.total;\r\n if (typeof count === 'number') return count;\r\n }\r\n \r\n if (parsedOuter.app) {\r\n const parsedApp = parseNested(parsedOuter.app);\r\n if (parsedApp.messageCount !== undefined) {\r\n return parsedApp.messageCount;\r\n }\r\n }\r\n } catch (err) {\r\n console.error(\"Error parsing message count from localStorage:\", err);\r\n }\r\n }\r\n return undefined;\r\n};\r\n\r\nexport const getI18nLocaleFromStorage = (): string | null => {\r\n try {\r\n return localStorage.getItem(\"lnc-i18n\");\r\n } catch (err) {\r\n console.error(\"Error getting i18n locale from localStorage:\", err);\r\n return null;\r\n }\r\n};\r\n\r\nexport const setI18nLocaleToStorage = (locale: string): void => {\r\n try {\r\n localStorage.setItem(\"lnc-i18n\", locale);\r\n } catch (err) {\r\n console.error(\"Error setting i18n locale to localStorage:\", err);\r\n }\r\n};\r\n\r\n/**\r\n * Decodes a JWT token and returns its payload\r\n * @param token - JWT token string\r\n * @returns Decoded payload object or null if decoding fails\r\n */\r\nconst decodeJWT = (token: string): any => {\r\n try {\r\n if (!token) return null;\r\n \r\n // JWT format: header.payload.signature\r\n const parts = token.split('.');\r\n if (parts.length !== 3) return null;\r\n \r\n // Decode the payload (second part)\r\n const payload = parts[1];\r\n \r\n // Base64 decode and parse JSON\r\n // Replace URL-safe base64 characters and add padding if needed\r\n const base64 = payload.replace(/-/g, '+').replace(/_/g, '/');\r\n const padded = base64 + '='.repeat((4 - (base64.length % 4)) % 4);\r\n \r\n const decoded = atob(padded);\r\n return JSON.parse(decoded);\r\n } catch (err) {\r\n console.error(\"Error decoding JWT token:\", err);\r\n return null;\r\n }\r\n};\r\n\r\nconst emptyStorageResult = () => ({\r\n auth: null,\r\n user: null,\r\n authDetails: null,\r\n userDetails: null,\r\n profile: null,\r\n notifications: null,\r\n messages: null,\r\n app: null,\r\n decodedToken: null,\r\n rawData: null,\r\n});\r\n\r\n/**\r\n * Get auth (and decoded token) for header use. Reads from header's own persist key first; falls back to persist:userdb only for access token.\r\n * User details are not read from userdb—use getStoredUserDetails / getUserDataFromStorage (IAM) for that.\r\n * @returns Object with auth, decodedToken, and other keys (user/userDetails/profile null when using header key)\r\n */\r\nexport const getAllDataFromStorage = () => {\r\n // Prefer header-owned persist key (unique, no conflict with other apps)\r\n const headerStr = localStorage.getItem(PERSIST_HEADER_KEY);\r\n if (headerStr) {\r\n try {\r\n const parsed = JSON.parse(headerStr) as { auth?: HeaderAuthState };\r\n const auth = parsed?.auth as Record<string, unknown> | undefined;\r\n const accessToken = auth?.accessToken ?? auth?.access_token ?? auth?.token;\r\n if (accessToken && typeof accessToken === \"string\") {\r\n const decodedToken = decodeJWT(accessToken);\r\n return {\r\n ...emptyStorageResult(),\r\n auth: auth as Record<string, unknown>,\r\n decodedToken: decodedToken ? Object.fromEntries(Object.entries(decodedToken).map(([k, v]) => [k, v ?? null])) : null,\r\n rawData: parsed,\r\n };\r\n }\r\n } catch (err) {\r\n console.error(\"Error parsing header persist:\", err);\r\n }\r\n }\r\n\r\n // Fallback: try IAM persist key (persist:linn-i-am) then persist:userdb\r\n const tryParsePersistForAuth = (raw: string | null): Record<string, unknown> | null => {\r\n if (!raw) return null;\r\n try {\r\n const outer = JSON.parse(raw) as Record<string, unknown>;\r\n const parseNested = (v: unknown): unknown =>\r\n typeof v === \"string\" ? (() => { try { return JSON.parse(v); } catch { return v; } })() : v;\r\n for (const key of Object.keys(outer)) {\r\n const parsed = parseNested(outer[key]) as Record<string, unknown>;\r\n if (parsed?.accessToken || parsed?.access_token || parsed?.token || parsed?.refreshToken) return parsed;\r\n if (parsed?.auth && typeof parsed.auth === \"object\") {\r\n const a = parsed.auth as Record<string, unknown>;\r\n if (a.accessToken || a.access_token || a.token) return a;\r\n }\r\n }\r\n } catch {\r\n /* ignore */\r\n }\r\n return null;\r\n };\r\n const iamPersist = localStorage.getItem(\"persist:linn-i-am\");\r\n const iamAuth = tryParsePersistForAuth(iamPersist);\r\n if (iamAuth) {\r\n const token = (iamAuth.accessToken ?? iamAuth.access_token ?? iamAuth.token) as string | undefined;\r\n if (token) {\r\n const decodedToken = decodeJWT(token);\r\n return {\r\n ...emptyStorageResult(),\r\n auth: iamAuth,\r\n decodedToken: decodedToken ? Object.fromEntries(Object.entries(decodedToken).map(([k, v]) => [k, v ?? null])) : null,\r\n rawData: iamAuth,\r\n };\r\n }\r\n }\r\n\r\n // Fallback: read access token from persist:userdb (e.g. legacy or shared auth)\r\n const userDbString = localStorage.getItem(\"persist:userdb\");\r\n if (!userDbString) {\r\n return emptyStorageResult();\r\n }\r\n\r\n try {\r\n const parsedOuter = JSON.parse(userDbString);\r\n \r\n // Helper function to parse nested JSON strings\r\n const parseNested = (value: any) => {\r\n if (typeof value === 'string') {\r\n try {\r\n return JSON.parse(value);\r\n } catch {\r\n return value;\r\n }\r\n }\r\n return value;\r\n };\r\n\r\n // Parse all top-level keys dynamically (no hardcoding)\r\n const parsedData: any = {};\r\n let authData: any = null;\r\n \r\n // Helper to recursively find auth data (contains accessToken, access_token, token, or refreshToken)\r\n const findAuthData = (obj: any): any => {\r\n if (!obj || typeof obj !== 'object') return null;\r\n if (obj.accessToken || obj.access_token || obj.token || obj.refreshToken) return obj;\r\n for (const key in obj) {\r\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\r\n const nested = findAuthData(obj[key]);\r\n if (nested) return nested;\r\n }\r\n }\r\n return null;\r\n };\r\n \r\n // Parse all keys in parsedOuter dynamically\r\n Object.keys(parsedOuter).forEach((key) => {\r\n parsedData[key] = parseNested(parsedOuter[key]);\r\n \r\n // Dynamically find auth data in any structure\r\n const foundAuth = findAuthData(parsedData[key]);\r\n if (foundAuth && !authData) {\r\n authData = foundAuth;\r\n parsedData.auth = authData;\r\n }\r\n });\r\n\r\n // Get accessToken (support accessToken, access_token, token) and decode it\r\n let decodedToken = null;\r\n const accessToken =\r\n authData?.accessToken ?? authData?.access_token ?? authData?.token ??\r\n parsedData.auth?.accessToken ?? parsedData.auth?.access_token ?? parsedData.auth?.token ??\r\n (parsedData.authDetails as Record<string, unknown>)?.accessToken ?? (parsedData.authDetails as Record<string, unknown>)?.access_token ?? (parsedData.authDetails as Record<string, unknown>)?.token;\r\n if (accessToken) {\r\n decodedToken = decodeJWT(accessToken);\r\n }\r\n\r\n // Extract all auth-related fields from authData dynamically (no hardcoding)\r\n const authFields = authData ? Object.keys(authData).reduce((acc: any, key) => {\r\n acc[key] = authData[key] !== undefined ? authData[key] : null;\r\n return acc;\r\n }, {}) : null;\r\n\r\n // Build return object dynamically with all parsed data\r\n const result: any = {\r\n ...Object.keys(parsedData).reduce((acc: any, key) => {\r\n acc[key] = parsedData[key] !== undefined ? parsedData[key] : null;\r\n return acc;\r\n }, {}),\r\n decodedToken: decodedToken ? Object.keys(decodedToken).reduce((acc: any, key) => {\r\n acc[key] = decodedToken[key] !== undefined ? decodedToken[key] : null;\r\n return acc;\r\n }, {}) : null,\r\n rawData: parsedOuter, // Include raw parsed data for any other fields\r\n };\r\n \r\n // Add auth field if we have authData\r\n if (authFields) {\r\n result.auth = authFields;\r\n }\r\n \r\n return result;\r\n } catch (err) {\r\n console.error(\"Error parsing all data from localStorage:\", err);\r\n return { ...emptyStorageResult(), error: err instanceof Error ? err.message : \"Unknown error\" };\r\n }\r\n};\r\n\r\n/**\r\n * Get profile picture URL from object store API using user_id.\r\n * @param baseUrl - Base URL for the object store API (default: http://objectstore.impact0mics.local:9012)\r\n * @returns Profile picture URL or null if user_id is not available\r\n */\r\nexport const getProfilePictureUrl = (baseUrl: string = \"http://objectstore.impact0mics.local:9012\"): string | null => {\r\n try {\r\n const allData = getAllDataFromStorage();\r\n const userId =\r\n allData.decodedToken?.user_id ?? allData.auth?.user_id ?? getStoredUserDetails()?.userId ?? null;\r\n if (userId == null) return null;\r\n return `${baseUrl.replace(/\\/$/, \"\")}/v1/objectStore/profilePicture/path/4590`;\r\n } catch (err) {\r\n console.error(\"Error getting profile picture URL:\", err);\r\n return null;\r\n }\r\n};\r\n\r\n/**\r\n * Fetch profile picture from object store API (plain GET with Authorization header).\r\n * API returns the image directly; response is converted to a blob URL for use in img src.\r\n * @param baseUrl - Base URL for the object store API (default: http://objectstore.impact0mics.local:9012)\r\n * @returns Promise that resolves to blob URL string or null if fetch fails\r\n */\r\n/** Resolve access token from auth object (supports accessToken, access_token, token). */\r\nfunction getAccessTokenFromAuth(auth: Record<string, unknown> | null | undefined): string | undefined {\r\n if (!auth || typeof auth !== \"object\") return undefined;\r\n const token =\r\n (auth.accessToken as string) ??\r\n (auth.access_token as string) ??\r\n (auth.token as string);\r\n return typeof token === \"string\" && token.length > 0 ? token : undefined;\r\n}\r\n\r\n/** True if string looks like a JWT (three base64 parts) or a bearer token, not JSON. */\r\nfunction looksLikeToken(s: string): boolean {\r\n return s.length > 0 && !s.trimStart().startsWith(\"{\") && !s.trimStart().startsWith(\"[\");\r\n}\r\n\r\n/** Recursively find first string value at keys accessToken, access_token, or token. */\r\nfunction findTokenInObject(obj: unknown): string | undefined {\r\n if (obj === null || obj === undefined) return undefined;\r\n if (typeof obj === \"string\") return looksLikeToken(obj) ? obj : undefined;\r\n if (typeof obj !== \"object\") return undefined;\r\n const rec = obj as Record<string, unknown>;\r\n const direct =\r\n (rec.accessToken as string) ?? (rec.access_token as string) ?? (rec.token as string);\r\n if (typeof direct === \"string\" && looksLikeToken(direct)) return direct;\r\n for (const key of Object.keys(rec)) {\r\n const found = findTokenInObject(rec[key]);\r\n if (found) return found;\r\n }\r\n return undefined;\r\n}\r\n\r\n/** Parse redux-persist style value (may be double stringified). */\r\nfunction parsePersistValue(raw: string | null): unknown {\r\n if (!raw) return null;\r\n try {\r\n const first = JSON.parse(raw);\r\n if (typeof first === \"string\") {\r\n try {\r\n return JSON.parse(first);\r\n } catch {\r\n return first;\r\n }\r\n }\r\n return first;\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\n/** Get a nested value that may be a string (need parse) or already an object. */\r\nfunction parseNestedValue(val: unknown): unknown {\r\n if (val == null) return null;\r\n if (typeof val === \"string\") return parsePersistValue(val);\r\n return val;\r\n}\r\n\r\n/**\r\n * Extract access token from persist:userdb shape: authDetails (string) → parse → auth.accessToken.\r\n * Structure: { authDetails: \"{\\\"auth\\\":{\\\"accessToken\\\":\\\"...\\\"}}\", profileInformation: \"...\", _persist: \"...\" }\r\n */\r\nfunction getTokenFromUserDbPersist(parsed: Record<string, unknown>): string | undefined {\r\n const authDetails = parsed.authDetails;\r\n const inner = parseNestedValue(authDetails);\r\n const obj = typeof inner === \"object\" && inner !== null ? (inner as Record<string, unknown>) : null;\r\n if (!obj) return undefined;\r\n const auth = obj.auth;\r\n const authObj = typeof auth === \"object\" && auth !== null ? (auth as Record<string, unknown>) : null;\r\n if (!authObj) return undefined;\r\n const token =\r\n (authObj.accessToken as string) ??\r\n (authObj.access_token as string) ??\r\n (authObj.token as string);\r\n return typeof token === \"string\" && looksLikeToken(token) ? token : undefined;\r\n}\r\n\r\n/**\r\n * Get access token from all known storage keys (header, IAM, userdb, and plain keys).\r\n * persist:userdb shape: authDetails (stringified) contains auth.accessToken.\r\n */\r\nexport function getAccessTokenForRequest(): string | undefined {\r\n const keysToTry = [\r\n PERSIST_HEADER_KEY,\r\n \"persist:linn-i-am\",\r\n \"persist:userdb\",\r\n \"token\",\r\n \"accessToken\",\r\n \"auth\",\r\n ];\r\n for (const key of keysToTry) {\r\n const raw = localStorage.getItem(key);\r\n if (!raw) continue;\r\n const parsed = key.startsWith(\"persist:\") ? parsePersistValue(raw) : (() => { try { return JSON.parse(raw); } catch { return raw; } })();\r\n const token = findTokenInObject(parsed);\r\n if (token) return token;\r\n if (key.startsWith(\"persist:\")) {\r\n const outer = typeof parsed === \"object\" && parsed !== null ? (parsed as Record<string, unknown>) : null;\r\n if (outer) {\r\n if (key === \"persist:userdb\") {\r\n const fromUserDb = getTokenFromUserDbPersist(outer);\r\n if (fromUserDb) return fromUserDb;\r\n }\r\n for (const k of Object.keys(outer)) {\r\n const inner = parseNestedValue(outer[k]);\r\n const t = findTokenInObject(inner);\r\n if (t) return t;\r\n }\r\n }\r\n }\r\n }\r\n return getAccessTokenFromAuth(getAllDataFromStorage().auth as Record<string, unknown> | null);\r\n}\r\n\r\nexport const fetchProfilePictureAsBlobUrl = async (\r\n baseUrl: string = \"http://objectstore.impact0mics.local:9012\",\r\n accessTokenOverride?: string | null\r\n): Promise<string | null> => {\r\n try {\r\n const profilePictureUrl = getProfilePictureUrl(baseUrl);\r\n if (!profilePictureUrl) return null;\r\n\r\n const accessToken =\r\n (typeof accessTokenOverride === \"string\" && accessTokenOverride.length > 0\r\n ? accessTokenOverride\r\n : null) ?? getAccessTokenForRequest();\r\n const headers: Record<string, string> = {\r\n \"X-Message-Id\": `msg-${Date.now()}-${Math.random().toString(36).slice(2, 11)}`,\r\n \"X-Correlation-Id\": `corr-${Date.now()}-${Math.random().toString(36).slice(2, 11)}`,\r\n };\r\n if (accessToken) {\r\n headers[\"Authorization\"] = `Bearer ${accessToken}`;\r\n }\r\n\r\n const response = await fetch(profilePictureUrl, { method: \"GET\", headers });\r\n if (!response.ok) {\r\n console.warn(`Failed to fetch profile picture: ${response.status} ${response.statusText}`);\r\n return null;\r\n }\r\n const contentType = response.headers.get(\"content-type\");\r\n if (!contentType || !contentType.startsWith(\"image/\")) {\r\n console.warn(`Profile picture response is not an image: ${contentType}`);\r\n return null;\r\n }\r\n const blob = await response.blob();\r\n return URL.createObjectURL(blob);\r\n } catch (err) {\r\n console.error(\"Error fetching profile picture:\", err);\r\n return null;\r\n }\r\n};\r\n\r\n","export type SupportedLanguage = 'en' | 'es';\r\n\r\nexport interface Translations {\r\n accountSettings: string;\r\n profile: string;\r\n signOut: string;\r\n messages: string;\r\n notifications: string;\r\n online: string;\r\n offline: string;\r\n role: string;\r\n}\r\n\r\nexport const translations: Record<SupportedLanguage, Translations> = {\r\n en: {\r\n accountSettings: 'Account Settings',\r\n profile: 'Profile',\r\n signOut: 'Sign out',\r\n messages: 'Messages',\r\n notifications: 'Notifications',\r\n online: 'Online',\r\n offline: 'Offline',\r\n role: 'Role',\r\n },\r\n es: {\r\n accountSettings: 'Configuración de cuenta',\r\n profile: 'Perfil',\r\n signOut: 'Cerrar sesión',\r\n messages: 'Mensajes',\r\n notifications: 'Notificaciones',\r\n online: 'En línea',\r\n offline: 'Desconectado',\r\n role: 'Rol',\r\n },\r\n};\r\n\r\nexport const getTranslations = (language: SupportedLanguage = 'en'): Translations => {\r\n return translations[language] || translations.en;\r\n};\r\n\r\n","export default \"data:image/svg+xml,%3Csvg%20width%3D%22134%22%20height%3D%2223%22%20viewBox%3D%220%200%20134%2023%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M0%2016.9641V0H2.29277V16.9641H0Z%22%20fill%3D%22black%22%2F%3E%3Cpath%20d%3D%22M19.7586%204.39182C20.6034%204.36006%2021.361%204.53721%2022.0278%204.92659C22.3033%205.0887%2022.5771%205.30261%2022.8458%205.57C23.1146%205.83738%2023.3531%206.17663%2023.5647%206.58941C23.7764%207.00219%2023.946%207.49519%2024.077%208.07007C24.2064%208.64495%2024.2719%209.32011%2024.2719%2010.0972V16.9891H22.0765V10.6788C22.0765%209.95014%2021.9909%209.3151%2021.8195%208.77364C21.6482%208.23217%2021.4214%207.77929%2021.1359%207.41497C20.8504%207.05065%2020.5262%206.77992%2020.16%206.60111C19.7938%206.42396%2019.4243%206.33372%2019.0497%206.33372C18.6752%206.33372%2018.2821%206.42229%2017.9159%206.60111C17.5498%206.77992%2017.2205%207.05065%2016.9283%207.41497C16.636%207.77929%2016.3992%208.23217%2016.2211%208.77364C16.0414%209.31677%2015.9524%209.95014%2015.9524%2010.6788V16.9891H13.757V10.6788C13.757%209.95014%2013.6714%209.3151%2013.5017%208.77364C13.3304%208.23217%2013.1036%207.77929%2012.8181%207.41497C12.5342%207.05065%2012.2084%206.77992%2011.8422%206.60111C11.476%206.42396%2011.1065%206.33372%2010.7319%206.33372C10.3573%206.33372%209.9643%206.42229%209.59813%206.60111C9.23196%206.77992%208.90274%207.05065%208.61047%207.41497C8.3182%207.77929%208.08137%208.23217%207.90332%208.77364C7.72359%209.31677%207.63457%209.95014%207.63457%2010.6788V16.9891H5.3418V4.58734H7.63457V6.74817C7.97555%206.13318%208.36692%205.66859%208.80531%205.35274C9.24371%205.03689%209.6586%204.80627%2010.05%204.66088C10.5052%204.49877%2010.9688%204.4102%2011.4407%204.39349C12.027%204.36174%2012.588%204.45031%2013.1238%204.66088C13.5958%204.83969%2014.0627%205.13883%2014.5263%205.5583C14.9899%205.97943%2015.3511%206.62618%2015.6114%207.5002C15.9205%206.69135%2016.3102%206.07636%2016.7821%205.65522C17.2541%205.23409%2017.7093%204.92659%2018.1477%204.73274C18.6684%204.52217%2019.2043%204.40853%2019.7586%204.39349V4.39182Z%22%20fill%3D%22black%22%2F%3E%3Cpath%20d%3D%22M32.9558%204.39185C34.0291%204.44031%2034.9882%204.69934%2035.8348%205.16894C36.1926%205.3628%2036.5453%205.61013%2036.8964%205.90927C37.2457%206.20841%2037.5548%206.58108%2037.8236%207.02561C38.0923%207.47015%2038.3073%207.99323%2038.4702%208.59151C38.6332%209.18979%2038.7138%209.88666%2038.7138%2010.6788V10.8727C38.7138%2011.6665%2038.6315%2012.365%2038.4702%2012.9717C38.3073%2013.5783%2038.0923%2014.1047%2037.8236%2014.5492C37.5548%2014.9938%2037.2457%2015.3664%2036.8964%2015.6656C36.547%2015.9647%2036.1926%2016.2121%2035.8348%2016.4059C34.9882%2016.8588%2034.0291%2017.1095%2032.9558%2017.1579C32.5174%2017.1412%2032.0773%2017.061%2031.6389%2016.9156C31.2644%2016.7869%2030.8663%2016.5797%2030.443%2016.2973C30.0197%2016.0149%2029.63%2015.6138%2029.2723%2015.0957V22.8132H26.9795V4.5857H29.2723V6.47914C29.63%205.94604%2030.0197%205.5366%2030.443%205.25417C30.8663%204.97174%2031.2644%204.76452%2031.6389%204.63584C32.0773%204.49044%2032.5174%204.41023%2032.9558%204.39352V4.39185ZM36.4932%2010.6788C36.4932%209.95017%2036.3908%209.31512%2036.1875%208.77366C35.9843%208.2322%2035.7155%207.77931%2035.383%207.415C35.0487%207.05068%2034.6674%206.77995%2034.2357%206.60114C33.8041%206.42399%2033.3606%206.33375%2032.9071%206.33375C32.4536%206.33375%2032.0085%206.42232%2031.5768%206.60114C31.1451%206.77995%2030.7588%207.05068%2030.4178%207.415C30.0768%207.77931%2029.7997%208.2322%2029.588%208.77366C29.3764%209.3168%2029.2706%209.95017%2029.2706%2010.6788V10.8727C29.2706%2011.6013%2029.3764%2012.2363%2029.588%2012.7778C29.7997%2013.3209%2030.0752%2013.7738%2030.4178%2014.1365C30.7588%2014.5008%2031.1451%2014.7715%2031.5768%2014.9503C32.0068%2015.1291%2032.4502%2015.2177%2032.9071%2015.2177C33.364%2015.2177%2033.8057%2015.1291%2034.2357%2014.9503C34.6657%2014.7732%2035.0487%2014.5008%2035.383%2014.1365C35.7155%2013.7721%2035.9843%2013.3193%2036.1875%2012.7778C36.3908%2012.2363%2036.4932%2011.6013%2036.4932%2010.8727V10.6788Z%22%20fill%3D%22black%22%2F%3E%3Cpath%20d%3D%22M41.0529%205.99458C41.3301%205.8659%2041.6795%205.70714%2042.1011%205.52164C42.5243%205.33614%2042.9913%205.16234%2043.5036%205.00023C44.0159%204.83813%2044.5568%204.70109%2045.1262%204.58745C45.6956%204.47381%2046.2482%204.41699%2046.7857%204.41699C47.3232%204.41699%2047.8338%204.48551%2048.3226%204.62255C48.8097%204.75958%2049.238%204.99856%2049.6025%205.33781C49.9687%205.67706%2050.2576%206.13162%2050.4693%206.69647C50.6809%207.263%2050.7867%207.97492%2050.7867%208.83223V16.9876H48.6149V14.8769C48.4839%2015.2161%2048.2689%2015.5286%2047.9682%2015.8111C47.6675%2016.0935%2047.3215%2016.3375%2046.9318%2016.5397C46.5422%2016.7419%2046.1138%2016.8956%2045.6502%2017.0009C45.1866%2017.1062%2044.7197%2017.158%2044.2477%2017.158C43.7757%2017.158%2043.292%2017.0928%2042.8452%2016.9642C42.3984%2016.8355%2042.0003%2016.6333%2041.6492%2016.3575C41.2998%2016.0835%2041.0193%2015.7308%2040.8077%2015.3013C40.5961%2014.8735%2040.4902%2014.3505%2040.4902%2013.7355C40.4902%2012.9266%2040.6851%2012.223%2041.0764%2011.6248C41.4661%2011.0265%2042.0154%2010.5201%2042.7225%2010.1073C43.4297%209.69456%2044.2847%209.38372%2045.2841%209.17315C46.2835%208.96258%2047.3937%208.8573%2048.6132%208.8573V8.83223C48.6132%208.36263%2048.5561%207.96991%2048.4419%207.65573C48.3277%207.33987%2048.1647%207.08586%2047.9548%206.892C47.7431%206.69814%2047.5029%206.56111%2047.2359%206.47922C46.9671%206.39901%2046.6715%206.35722%2046.3456%206.35722C45.9072%206.35722%2045.4504%206.41739%2044.98%206.53938C44.508%206.66138%2044.0646%206.80176%2043.6497%206.96386C43.2348%207.12596%2042.8653%207.28306%2042.5395%207.4368C42.2136%207.59055%2041.9784%207.69918%2041.8323%207.76435L41.0512%205.99291L41.0529%205.99458ZM48.6149%2010.7507C48.0287%2010.7507%2047.3904%2010.7875%2046.7%2010.8594C46.008%2010.9329%2045.363%2011.0733%2044.76%2011.2838C44.1587%2011.4944%2043.6581%2011.7936%2043.26%2012.1813C42.862%2012.569%2042.6621%2013.0787%2042.6621%2013.7104C42.6621%2014.2769%2042.8821%2014.7014%2043.3205%2014.9855C43.7589%2015.2679%2044.2796%2015.41%2044.8826%2015.41C45.3059%2015.41%2045.7359%2015.3381%2046.176%2015.191C46.6144%2015.0457%2047.0175%2014.8234%2047.3837%2014.5243C47.7498%2014.2251%2048.0455%2013.8524%2048.2739%2013.4079C48.5007%2012.9634%2048.6149%2012.442%2048.6149%2011.842V10.7507Z%22%20fill%3D%22black%22%2F%3E%3Cpath%20d%3D%22M55.1523%2010.7991C55.1523%2011.5595%2055.2665%2012.228%2055.4933%2012.8012C55.72%2013.3761%2056.0207%2013.8523%2056.3953%2014.2334C56.7698%2014.6144%2057.1998%2014.9002%2057.6886%2015.0957C58.1757%2015.2895%2058.6796%2015.3865%2059.2004%2015.3865C59.8185%2015.3865%2060.44%2015.2528%2061.0665%2014.9854C61.693%2014.718%2062.2574%2014.3019%2062.7613%2013.7354L63.9085%2014.9971C63.3391%2015.7257%2062.6286%2016.2722%2061.7736%2016.6348C60.9204%2016.9992%2060.0301%2017.1813%2059.1029%2017.1813C58.3387%2017.1813%2057.5912%2017.051%2056.8589%2016.7936C56.1265%2016.5346%2055.4714%2016.1469%2054.8953%2015.6288C54.3175%2015.1107%2053.8539%2014.4473%2053.5045%2013.6384C53.1552%2012.8296%2052.9805%2011.8837%2052.9805%2010.7991C52.9805%209.71451%2053.1552%208.74857%2053.5045%207.94808C53.8539%207.14759%2054.3175%206.48413%2054.8953%205.95771C55.4731%205.43129%2056.1265%205.04024%2056.8589%204.78121C57.5912%204.52218%2058.3387%204.39349%2059.1029%204.39349C60.0301%204.39349%2060.9204%204.57565%2061.7736%204.93997C62.6269%205.30428%2063.3391%205.85076%2063.9085%206.57772L62.7613%207.83946C62.2574%207.27293%2061.6913%206.8568%2061.0665%206.58942C60.44%206.32203%2059.8185%206.18834%2059.2004%206.18834C58.6796%206.18834%2058.1757%206.28526%2057.6886%206.47912C57.2015%206.67298%2056.7698%206.96376%2056.3953%207.35314C56.0207%207.74086%2055.72%208.22383%2055.4933%208.79704C55.2648%209.37192%2055.1523%2010.0387%2055.1523%2010.7991Z%22%20fill%3D%22black%22%2F%3E%3Cpath%20d%3D%22M71.9846%2015.2662L72.1559%2016.8672C71.6352%2016.949%2071.1632%2017.0126%2070.7416%2017.061C70.3184%2017.1095%2069.9438%2017.1345%2069.6196%2017.1345C69.067%2017.1345%2068.6152%2017.066%2068.2658%2016.929C67.9164%2016.792%2067.6443%2016.5814%2067.4495%2016.2973C67.2546%2016.0149%2067.1202%2015.6505%2067.0463%2015.2043C66.9724%2014.7598%2066.9288%2014.2217%2066.912%2013.59V6.35715H64.9854V4.5857H66.912V2.6438H69.2047V4.5857H72.1324V6.35715H69.2047V13.59C69.2047%2013.9459%2069.2165%2014.2334%2069.2417%2014.4523C69.2669%2014.6712%2069.3677%2014.84%2069.5474%2014.962C69.7254%2015.084%2070.0059%2015.1642%2070.3889%2015.2043C70.7702%2015.2444%2071.3043%2015.2645%2071.9863%2015.2645L71.9846%2015.2662Z%22%20fill%3D%22black%22%2F%3E%3Cpath%20d%3D%22M100.591%204.39163C101.435%204.35988%20102.193%204.53703%20102.86%204.92641C103.135%205.08851%20103.409%205.30242%20103.678%205.56981C103.947%205.8372%20104.185%206.17645%20104.397%206.58923C104.608%207.00201%20104.778%207.495%20104.909%208.06989C105.038%208.64477%20105.104%209.31993%20105.104%2010.097V16.9889H102.909V10.6786C102.909%209.94996%20102.823%209.31491%20102.652%208.77345C102.48%208.23199%20102.253%207.7791%20101.968%207.41479C101.682%207.05047%20101.358%206.77974%20100.992%206.60093C100.626%206.42378%20100.256%206.33354%2099.8818%206.33354C99.5072%206.33354%2099.1142%206.42211%2098.748%206.60093C98.3818%206.77974%2098.0526%207.05047%2097.7603%207.41479C97.4681%207.7791%2097.2312%208.23199%2097.0532%208.77345C96.8734%209.31658%2096.7844%209.94996%2096.7844%2010.6786V16.9889H94.5891V10.6786C94.5891%209.94996%2094.5034%209.31491%2094.3338%208.77345C94.1624%208.23199%2093.9357%207.7791%2093.6501%207.41479C93.3663%207.05047%2093.0404%206.77974%2092.6742%206.60093C92.308%206.42378%2091.9385%206.33354%2091.564%206.33354C91.1894%206.33354%2090.7963%206.42211%2090.4302%206.60093C90.064%206.77974%2089.7348%207.05047%2089.4425%207.41479C89.1502%207.7791%2088.9134%208.23199%2088.7354%208.77345C88.5556%209.31658%2088.4666%209.94996%2088.4666%2010.6786V16.9889H86.1738V4.58716H88.4666V6.74799C88.8076%206.133%2089.199%205.66841%2089.6374%205.35256C90.0758%205.03671%2090.4906%204.80609%2090.882%204.66069C91.3372%204.49859%2091.8008%204.41002%2092.2728%204.3933C92.859%204.36155%2093.42%204.45013%2093.9558%204.66069C94.4278%204.83951%2094.8948%205.13865%2095.3584%205.55811C95.822%205.97925%2096.1831%206.62599%2096.4434%207.50002C96.7525%206.69117%2097.1422%206.07618%2097.6142%205.65504C98.0862%205.23391%2098.5414%204.92641%2098.9798%204.73255C99.5005%204.52199%20100.036%204.40834%20100.591%204.3933V4.39163Z%22%20fill%3D%22black%22%2F%3E%3Cpath%20d%3D%22M108.933%203.34883C108.559%203.34883%20108.241%203.22015%20107.982%202.96112C107.722%202.70209%20107.593%202.38624%20107.593%202.01524C107.593%201.64424%20107.722%201.32838%20107.982%201.06935C108.243%200.810321%20108.56%200.681641%20108.933%200.681641C109.306%200.681641%20109.629%200.811992%20109.897%201.06935C110.166%201.32838%20110.3%201.64424%20110.3%202.01524C110.3%202.38624%20110.166%202.70376%20109.897%202.96112C109.629%203.22015%20109.308%203.34883%20108.933%203.34883ZM107.786%2016.989V4.58717H110.104V16.989H107.786Z%22%20fill%3D%22black%22%2F%3E%3Cpath%20d%3D%22M114.569%2010.7989C114.569%2011.5593%20114.684%2012.2278%20114.91%2012.801C115.137%2013.3759%20115.438%2013.8522%20115.812%2014.2332C116.187%2014.6142%20116.617%2014.9%20117.106%2015.0955C117.593%2015.2894%20118.097%2015.3863%20118.617%2015.3863C119.235%2015.3863%20119.857%2015.2526%20120.483%2014.9852C121.11%2014.7178%20121.674%2014.3017%20122.178%2013.7352L123.326%2014.9969C122.756%2015.7255%20122.046%2016.272%20121.191%2016.6347C120.337%2016.999%20119.447%2017.1811%20118.52%2017.1811C117.756%2017.1811%20117.008%2017.0508%20116.276%2016.7934C115.544%2016.5344%20114.888%2016.1467%20114.312%2015.6286C113.734%2015.1106%20113.271%2014.4471%20112.922%2013.6382C112.572%2012.8294%20112.397%2011.8835%20112.397%2010.7989C112.397%209.71433%20112.572%208.74839%20112.922%207.9479C113.271%207.14741%20113.734%206.48395%20114.312%205.95753C114.89%205.43111%20115.544%205.04006%20116.276%204.78102C117.008%204.52199%20117.756%204.39331%20118.52%204.39331C119.447%204.39331%20120.337%204.57547%20121.191%204.93979C122.044%205.3041%20122.756%205.85058%20123.326%206.57754L122.178%207.83927C121.674%207.27274%20121.108%206.85662%20120.483%206.58923C119.857%206.32185%20119.235%206.18815%20118.617%206.18815C118.097%206.18815%20117.593%206.28508%20117.106%206.47894C116.619%206.67279%20116.187%206.96358%20115.812%207.35296C115.438%207.74067%20115.137%208.22364%20114.91%208.79685C114.682%209.37174%20114.569%2010.0385%20114.569%2010.7989Z%22%20fill%3D%22black%22%2F%3E%3Cpath%20d%3D%22M127.764%207.62027C127.764%207.94447%20127.914%208.21855%20128.216%208.44583C128.517%208.67311%20128.895%208.89036%20129.35%209.10093C129.805%209.31149%20130.3%209.53376%20130.838%209.76773C131.374%2010.0017%20131.871%2010.2858%20132.326%2010.6167C132.781%2010.9492%20133.159%2011.3537%20133.46%2011.83C133.761%2012.3079%20133.912%2012.8861%20133.912%2013.5646C133.912%2014.1796%20133.789%2014.7177%20133.546%2015.179C133.302%2015.6402%20132.98%2016.0213%20132.581%2016.3204C132.183%2016.6195%20131.72%2016.8468%20131.191%2017.0006C130.662%2017.1543%20130.114%2017.2312%20129.545%2017.2312C128.586%2017.2312%20127.653%2017.0206%20126.751%2016.5995C125.849%2016.1783%20125.146%2015.54%20124.642%2014.6826L125.958%2013.202C126.414%2013.9306%20126.943%2014.4604%20127.544%2014.7913C128.145%2015.1238%20128.732%2015.2893%20129.301%2015.2893C129.87%2015.2893%20130.358%2015.1355%20130.764%2014.828C131.171%2014.5205%20131.374%2014.0994%20131.374%2013.5663C131.374%2013.0967%20131.223%2012.7257%20130.922%2012.45C130.621%2012.1742%20130.252%2011.9369%20129.812%2011.7347C129.373%2011.5325%20128.888%2011.3386%20128.36%2011.1515C127.831%2010.966%20127.348%2010.7303%20126.909%2010.4479C126.471%2010.1655%20126.1%209.80115%20125.799%209.35495C125.498%208.91041%20125.347%208.32383%20125.347%207.5952C125.347%207.06042%20125.456%206.5925%20125.676%206.18807C125.896%205.78365%20126.189%205.44774%20126.555%205.18035C126.921%204.91297%20127.339%204.71075%20127.811%204.57372C128.283%204.43668%20128.77%204.36816%20129.274%204.36816C130.007%204.36816%20130.717%204.50186%20131.409%204.76924C132.099%205.03663%20132.665%205.4444%20133.104%205.99422L131.811%207.32948C131.404%206.8766%20130.989%206.5457%20130.566%206.33514C130.143%206.12457%20129.744%206.01928%20129.37%206.01928C128.898%206.01928%20128.512%206.16133%20128.211%206.44376C127.91%206.72786%20127.759%207.11891%20127.759%207.62027H127.764Z%22%20fill%3D%22black%22%2F%3E%3Cpath%20d%3D%22M82.2257%2016.5045C82.7489%2016.5045%2083.173%2016.0825%2083.173%2015.5619C83.173%2015.0414%2082.7489%2014.6194%2082.2257%2014.6194C81.7025%2014.6194%2081.2783%2015.0414%2081.2783%2015.5619C81.2783%2016.0825%2081.7025%2016.5045%2082.2257%2016.5045Z%22%20fill%3D%22%235BC0BE%22%2F%3E%3Cpath%20d%3D%22M83.3365%207.03215C82.799%206.22831%2082.4748%205.97596%2082.4379%205.94421C82.4076%205.97763%2081.86%206.56923%2081.3964%207.65716C81.64%207.98304%2081.7509%208.27215%2081.9071%208.71502C82.1019%209.2665%2082.201%209.91325%2082.201%2010.6402C82.201%2011.414%2082.0986%2012.0975%2081.8953%2012.6724C81.6904%2013.2489%2081.4216%2013.7336%2081.0958%2014.1146C80.7682%2014.4973%2080.3886%2014.7914%2079.9704%2014.9869C79.1322%2015.3797%2078.2067%2015.3797%2077.3686%2014.9869C76.9503%2014.7914%2076.5673%2014.4973%2076.2331%2014.1146C75.8971%2013.7319%2075.6284%2013.2472%2075.4336%2012.6707C75.2387%2012.0975%2075.1396%2011.4223%2075.1396%2010.6636C75.1396%209.90489%2075.2421%209.28823%2075.447%208.73841C75.6502%208.18692%2075.919%207.72234%2076.2465%207.35635C76.5741%206.98869%2076.957%206.70794%2077.3837%206.52077C77.8086%206.33359%2078.2554%206.24001%2078.7022%206.24001C79.149%206.24001%2079.5757%206.32858%2079.9922%206.5074C80.2492%206.61769%2080.3668%206.70125%2080.5919%206.88341C80.9396%206.36702%2081.2016%205.79715%2081.3696%205.18048C81.3528%205.17046%2081.336%205.16043%2081.3175%205.1504C80.5146%204.71088%2079.71%204.53207%2078.6888%204.48193H78.6703H78.6518C77.6306%204.53207%2076.7051%204.7794%2075.9022%205.21725C75.5528%205.40776%2075.2118%205.65008%2074.8877%205.94087C74.5652%206.23165%2074.2679%206.59764%2074.0075%207.03047C73.7455%207.46331%2073.5338%207.98304%2073.3743%208.57464C73.2164%209.16623%2073.1357%209.85977%2073.1357%2010.6369C73.1357%2011.414%2073.2164%2012.1359%2073.3743%2012.7342C73.5322%2013.3341%2073.7455%2013.8622%2074.0075%2014.3034C74.2695%2014.7446%2074.5652%2015.124%2074.8893%2015.4298C75.2135%2015.7373%2075.5562%2015.998%2075.9089%2016.2052C76.7051%2016.6548%2077.6256%2016.9171%2078.6451%2016.984H78.6703H78.6955C79.6748%2016.9205%2080.5633%2016.6731%2081.3444%2016.2503C81.0303%2015.8091%2081.0706%2015.1942%2081.467%2014.7998C81.897%2014.3719%2082.584%2014.3602%2083.0291%2014.7597C83.1332%2014.6159%2083.2357%2014.4655%2083.3314%2014.3034C83.5918%2013.8639%2083.8051%2013.3358%2083.9647%2012.7342C84.1226%2012.1326%2084.2032%2011.4273%2084.2032%2010.6369C84.2032%209.8464%2084.1226%209.16958%2083.963%208.57464C83.8034%207.98137%2083.5901%207.46164%2083.3298%207.03047L83.3365%207.03215Z%22%20fill%3D%22black%22%2F%3E%3Cpath%20d%3D%22M77.0141%209.74781C75.4268%2011.7031%2077.7582%2014.2817%2079.7788%2013.2322C81.5173%2012.3298%2080.7883%2010.9343%2080.8152%209.58237C80.8387%208.37076%2081.4955%206.88175%2082.2547%205.94923C83.0626%204.95488%2085.1303%204.66243%2084.7238%202.9712C84.4165%201.6961%2082.6864%201.39529%2081.9104%202.3913C81.3594%203.09654%2081.7542%203.96722%2081.603%204.77607C81.3443%206.17651%2080.6153%207.36639%2079.5135%208.25545C78.7777%208.84872%2077.5365%209.10608%2077.0141%209.74781Z%22%20fill%3D%22%235BC0BE%22%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAUCAMAAADImI+JAAAANlBMVEX////w8vfyxcx8jbJCWpAOLHFVa5sBIWnIEC7WTGLnv8qAkLTheYpecqHx0digrMfz3+T21dqBS5WQAAAApUlEQVQoz8WTyxpFMAyEpyqOuhTv/7IntImmurAzC59kfsIIhA5wnn6iASMLgzbIT2Fk6joUaAUKBsiJm+kJ0iyuR1mQBam8Cex1dINkZ6EesSZwrR8JfdYWl7AcbCRw5ypytYmPpy6w3X6jL8HXL6PxOODgTPYEcnXmFe94cuBsdJzwpIFrRwK3WPkJLQqL2aUoUVisXjOvLizWWNyMVljrV0gz/wdhEi0lRIbcAAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAbCAMAAAA5zj1cAAAApVBMVEX6vQCtFRnBPxP3tgCkSRTxsQC9miCtkjL3ugDcdwrVkwndpwauUEi3k3ecLQyvGx01YomtXy3Zhha+gw+4LiCzn4jKeBKyYgjmoAOkXUK/RhC1kJmmKh+0oKCbYwN5OAWWHxSVi0HypQNcdGsDAgC9g1j6vgSWhnLfsSXCn169cE24eBuaNwzQaiOYagW8bxWIOhqoKhPLdq4yUHR+UgVZLWaBHkAs3esWAAAAk0lEQVQ4y+WTVxLDIAxESQwBAwb33tKc3sv9j5YbWJp8JvurNzsrzYpMkCI/BU6RIt9phqIcJSOpEGBu7c2WA+iXOWmbtTmTACh42PdelSgwp+d2nXdvTjuAc3X5vL6qJo4XQEZ9qd8PXaR7yDE5GFOf6XbNRrmB8cgcKaUraJm5z4NiE4RLH3FyIUaG6Pb85XN9AIg9CvrV7UGSAAAAAElFTkSuQmCC\"","import React from \"react\";\nimport {\n Button,\n Menu,\n MenuItem,\n ListItemIcon,\n ListItemText,\n Box,\n} from \"@mui/material\";\nimport ArrowDropDownIcon from \"@mui/icons-material/ArrowDropDown\";\nimport { SupportedLanguage } from \"./utils/translations\";\nimport { setI18nLocaleToStorage } from \"./utils/localStorage\";\nimport GBFlag from \"./asset/flags/gb.png\";\nimport ESFlag from \"./asset/flags/es.png\";\n\ninterface LanguageOption {\n code: SupportedLanguage;\n name: string;\n flag: string;\n}\n\nconst languages: LanguageOption[] = [\n { code: \"en\", name: \"English\", flag: GBFlag },\n { code: \"es\", name: \"Spanish\", flag: ESFlag },\n];\n\ninterface LanguageSelectorProps {\n currentLanguage: SupportedLanguage;\n onLanguageChange: (language: SupportedLanguage) => void;\n}\n\nconst LanguageSelector: React.FC<LanguageSelectorProps> = ({\n currentLanguage,\n onLanguageChange: _onLanguageChange, // reserved for parent callback; we reload the page on select\n}) => {\n const [anchorEl, setAnchorEl] = React.useState<null | HTMLElement>(null);\n const open = Boolean(anchorEl);\n\n const currentLang = languages.find((lang) => lang.code === currentLanguage) || languages[0];\n\n const handleClick = (event: React.MouseEvent<HTMLElement>) => {\n setAnchorEl(event.currentTarget);\n };\n\n const handleClose = () => {\n setAnchorEl(null);\n };\n\n const handleLanguageSelect = (languageCode: SupportedLanguage) => {\n // Update localStorage\n setI18nLocaleToStorage(languageCode);\n \n // Get current path\n const currentPath = window.location.pathname;\n const search = window.location.search;\n const hash = window.location.hash;\n \n // Find and replace existing locale /:locale/ with new locale\n const newPath = currentPath.replace(/\\/(en|es)\\//, `/${languageCode}/`);\n \n // Construct full URL and reload the page to apply translations\n const fullUrl = newPath + search + hash;\n window.location.href = fullUrl;\n \n handleClose();\n };\n\n return (\n <>\n <Button\n onClick={handleClick}\n sx={{\n color: \"#1e2f97\",\n textTransform: \"none\",\n padding: \"4px 8px\",\n minWidth: \"auto\",\n display: \"flex\",\n alignItems: \"center\",\n gap: \"4px\",\n \"&:hover\": {\n backgroundColor: \"rgba(30, 47, 151, 0.04)\",\n },\n }}\n aria-label=\"Select language\"\n aria-controls={open ? \"language-menu\" : undefined}\n aria-haspopup=\"true\"\n aria-expanded={open ? \"true\" : undefined}\n >\n <Box\n component=\"img\"\n src={currentLang.flag}\n alt={currentLang.name}\n sx={{\n width: \"20px\",\n height: \"15px\",\n objectFit: \"cover\",\n borderRadius: \"2px\",\n }}\n />\n <Box\n component=\"span\"\n sx={{\n fontSize: \"14px\",\n fontWeight: 500,\n marginLeft: \"4px\",\n }}\n >\n {currentLang.code.toUpperCase()}\n </Box>\n <ArrowDropDownIcon\n sx={{\n fontSize: \"20px\",\n marginLeft: \"2px\",\n display: \"flex\",\n alignSelf: \"center\",\n }}\n />\n </Button>\n <Menu\n id=\"language-menu\"\n anchorEl={anchorEl}\n open={open}\n onClose={handleClose}\n anchorOrigin={{\n vertical: \"bottom\",\n horizontal: \"right\",\n }}\n transformOrigin={{\n vertical: \"top\",\n horizontal: \"right\",\n }}\n slotProps={{\n paper: {\n sx: {\n mt: 1,\n minWidth: 150,\n },\n },\n }}\n >\n {languages.map((language) => (\n <MenuItem\n key={language.code}\n onClick={() => handleLanguageSelect(language.code)}\n selected={language.code === currentLanguage}\n >\n <ListItemIcon>\n <Box\n component=\"img\"\n src={language.flag}\n alt={language.name}\n sx={{\n width: \"24px\",\n height: \"18px\",\n objectFit: \"cover\",\n borderRadius: \"2px\",\n }}\n />\n </ListItemIcon>\n <ListItemText primary={language.name} />\n </MenuItem>\n ))}\n </Menu>\n </>\n );\n};\n\nexport default LanguageSelector;\n\n","import AccountCircle from \"@mui/icons-material/AccountCircle\";\nimport LogoutOutlinedIcon from \"@mui/icons-material/LogoutOutlined\";\nimport MailIcon from \"@mui/icons-material/Mail\";\nimport MenuIcon from \"@mui/icons-material/Menu\";\nimport MenuOpenIcon from \"@mui/icons-material/MenuOpen\";\nimport MoreIcon from \"@mui/icons-material/MoreVert\";\nimport NotificationsActiveOutlined from \"@mui/icons-material/NotificationsActiveOutlined\";\nimport PersonOutlineOutlinedIcon from \"@mui/icons-material/PersonOutlineOutlined\";\nimport SettingsOutlinedIcon from \"@mui/icons-material/SettingsOutlined\";\nimport {\n AppBar,\n Avatar,\n Badge,\n Box,\n Divider,\n IconButton,\n List,\n ListItem,\n ListItemAvatar,\n ListItemIcon,\n ListItemText,\n Menu,\n MenuItem,\n styled,\n Toolbar,\n Typography,\n} from \"@mui/material\";\nimport { deepOrange } from \"@mui/material/colors\";\nimport React from \"react\";\nimport { useDrawer } from \"./DrawerContext\";\nimport { AppHeaderProps, UserProfile } from \"./types\";\nimport { getUserDataFromStorage, getNotificationCountFromStorage, getMessageCountFromStorage, getI18nLocaleFromStorage, setI18nLocaleToStorage, getAllDataFromStorage, fetchProfilePictureAsBlobUrl, getAccessTokenForRequest } from \"./utils/localStorage\";\nimport { getTranslations, SupportedLanguage } from \"./utils/translations\";\nimport ImpactomicsLogo from \"./asset/Impactomics.svg\";\nimport LanguageSelector from \"./LanguageSelector\";\nimport \"./styles/Header.scss\";\n\nconst DEFAULT_ROUTES = {\n settings: \"/account/overview\",\n profile: \"/user/profile\",\n logout: \"/user/login\",\n};\n\nconst AppHeader: React.FC<AppHeaderProps> = ({ language: languageProp, accessToken: accessTokenProp }) => {\n // Get initial language from props, URL, localStorage, or default to 'en'\n const getInitialLanguage = (): SupportedLanguage => {\n // Priority 1: Props\n if (languageProp) {\n setI18nLocaleToStorage(languageProp);\n return languageProp as SupportedLanguage;\n }\n \n // Priority 2: URL path - pattern is /:locale/base-name/...\n const currentPath = window.location.pathname;\n const localePattern = /^\\/(en|es)(\\/|$)/;\n const localeMatch = currentPath.match(localePattern);\n if (localeMatch && localeMatch[1]) {\n const urlLocale = localeMatch[1] as SupportedLanguage;\n setI18nLocaleToStorage(urlLocale);\n return urlLocale;\n }\n \n // Priority 3: localStorage\n const storedLocale = getI18nLocaleFromStorage();\n if (storedLocale && (storedLocale === 'en' || storedLocale === 'es')) {\n return storedLocale as SupportedLanguage;\n }\n \n // Default\n return 'en';\n };\n\n const [currentLanguage, setCurrentLanguage] = React.useState<SupportedLanguage>(getInitialLanguage);\n const t = getTranslations(currentLanguage);\n \n const { isDrawerOpen, toggleDrawer } = useDrawer();\n const [anchorEl, setAnchorEl] = React.useState<null | HTMLElement>(null);\n const [mobileMoreAnchorEl, setMobileMoreAnchorEl] =\n React.useState<null | HTMLElement>(null);\n \n const [user, setUser] = React.useState<UserProfile>(() => {\n const allData = getAllDataFromStorage();\n let userName = \"\";\n let userEmail = \"\";\n let userRole = \"\";\n\n const buildNameFromFirstLast = (obj: Record<string, unknown> | null | undefined): string => {\n if (!obj || typeof obj !== \"object\") return \"\";\n const first = (obj.firstName ?? obj.given_name ?? obj.first_name) as string | undefined;\n const last = (obj.lastName ?? obj.family_name ?? obj.last_name) as string | undefined;\n return [first, last].filter(Boolean).join(\" \").trim();\n };\n\n // Prefer getUserDataFromStorage first (IAM firstName+lastName or persist:userdb name)\n const storedUser = getUserDataFromStorage();\n if (storedUser) {\n userName = storedUser.name || \"\";\n userEmail = userEmail || storedUser.email || \"\";\n userRole = userRole || storedUser.role || \"\";\n }\n\n // Then enrich from decoded token (email from sub; name only if token has name/given_name/family_name, never use sub as name)\n if (allData.decodedToken) {\n const token = allData.decodedToken as Record<string, unknown>;\n userEmail = userEmail || (token.sub as string) || (token.email as string) || \"\";\n const tokenName = (token.name as string) || buildNameFromFirstLast(token);\n userName = userName || (tokenName || \"\");\n userRole = userRole || (token.role as string) || \"\";\n }\n\n if (allData.auth) {\n const auth = allData.auth as Record<string, unknown>;\n userEmail = userEmail || (auth.email as string) || (auth.sub as string) || \"\";\n userName = userName || (auth.name as string) || buildNameFromFirstLast(auth) || \"\";\n userRole = userRole || (auth.role as string) || (auth.activeRole as string) || \"\";\n }\n\n if (allData.userDetails) {\n const userDetails = (allData.userDetails as Record<string, unknown>).user\n || (allData.userDetails as Record<string, unknown>).data\n || allData.userDetails;\n const details = userDetails as Record<string, unknown> | undefined;\n if (details) {\n userEmail = userEmail || (details.email as string) || (details.emailAddress as string) || \"\";\n userName = userName || (details.name as string) || (details.fullName as string) || buildNameFromFirstLast(details) || \"\";\n userRole = userRole || (details.role as string) || (details.userRole as string) || \"\";\n }\n }\n\n if (allData.user) {\n const u = (allData.user as Record<string, unknown>).user\n || (allData.user as Record<string, unknown>).data\n || (allData.user as Record<string, unknown>).currentUser\n || allData.user;\n const userData = u as Record<string, unknown> | undefined;\n if (userData) {\n userEmail = userEmail || (userData.email as string) || (userData.emailAddress as string) || \"\";\n userName = userName || (userData.name as string) || (userData.fullName as string) || buildNameFromFirstLast(userData) || \"\";\n userRole = userRole || (userData.role as string) || (userData.userRole as string) || \"\";\n }\n }\n\n if (allData.profile) {\n const p = (allData.profile as Record<string, unknown>).user\n || (allData.profile as Record<string, unknown>).data\n || allData.profile;\n const profileData = p as Record<string, unknown> | undefined;\n if (profileData) {\n userEmail = userEmail || (profileData.email as string) || (profileData.emailAddress as string) || \"\";\n userName = userName || (profileData.name as string) || (profileData.fullName as string) || buildNameFromFirstLast(profileData) || \"\";\n userRole = userRole || (profileData.role as string) || (profileData.userRole as string) || \"\";\n }\n }\n\n const avatarSrc =\n storedUser?.avatar ??\n (allData.auth as Record<string, unknown> | undefined)?.avatar ??\n (allData.profile as Record<string, unknown> | undefined)?.avatar;\n const initialsVal =\n storedUser?.initials ??\n (allData.auth as Record<string, unknown> | undefined)?.initials ??\n (allData.profile as Record<string, unknown> | undefined)?.initials;\n return {\n name: userName || \"\",\n email: userEmail || \"\",\n role: userRole || \"\",\n avatar: typeof avatarSrc === \"string\" ? avatarSrc : undefined,\n initials: typeof initialsVal === \"string\" ? initialsVal : undefined,\n };\n });\n\n const [notificationCount, setNotificationCount] = React.useState<number>(() => {\n const count = getNotificationCountFromStorage();\n return count !== null && count !== undefined ? count : 0;\n });\n \n const [messageCount, setMessageCount] = React.useState<number | undefined>(() => {\n return getMessageCountFromStorage() ?? undefined;\n });\n\n // State for profile picture blob URL\n const [profilePictureBlobUrl, setProfilePictureBlobUrl] = React.useState<string | null>(null);\n\n // Fetch profile picture from API when component mounts or user data changes\n React.useEffect(() => {\n const fetchProfilePicture = async () => {\n const token = accessTokenProp ?? getAccessTokenForRequest();\n const blobUrl = await fetchProfilePictureAsBlobUrl(undefined, token ?? undefined);\n if (blobUrl) {\n // Clean up previous blob URL if it exists\n setProfilePictureBlobUrl((prevUrl) => {\n if (prevUrl) {\n URL.revokeObjectURL(prevUrl);\n }\n return blobUrl;\n });\n }\n };\n\n fetchProfilePicture();\n\n // Cleanup function to revoke blob URL when component unmounts or effect re-runs\n return () => {\n setProfilePictureBlobUrl((prevUrl) => {\n if (prevUrl) {\n URL.revokeObjectURL(prevUrl);\n }\n return null;\n });\n };\n }, [accessTokenProp]); // Refetch when accessToken prop changes (e.g. after login)\n\n React.useEffect(() => {\n const allData = getAllDataFromStorage();\n let userName = \"\";\n let userEmail = \"\";\n let userRole = \"\";\n let userAvatar: string | undefined;\n let userInitials: string | undefined;\n\n const buildNameFromFirstLast = (obj: Record<string, unknown> | null | undefined): string => {\n if (!obj || typeof obj !== \"object\") return \"\";\n const first = (obj.firstName ?? obj.given_name ?? obj.first_name) as string | undefined;\n const last = (obj.lastName ?? obj.family_name ?? obj.last_name) as string | undefined;\n return [first, last].filter(Boolean).join(\" \").trim();\n };\n\n const storedUser = getUserDataFromStorage();\n if (storedUser) {\n userName = storedUser.name || \"\";\n userEmail = userEmail || storedUser.email || \"\";\n userRole = userRole || storedUser.role || \"\";\n userAvatar = storedUser.avatar;\n userInitials = storedUser.initials;\n }\n\n if (allData.decodedToken) {\n const token = allData.decodedToken as Record<string, unknown>;\n userEmail = userEmail || (token.sub as string) || (token.email as string) || \"\";\n const tokenName = (token.name as string) || buildNameFromFirstLast(token);\n userName = userName || (tokenName || \"\");\n userRole = userRole || (token.role as string) || \"\";\n }\n\n if (allData.auth) {\n const auth = allData.auth as Record<string, unknown>;\n userEmail = userEmail || (auth.email as string) || (auth.sub as string) || \"\";\n userName = userName || (auth.name as string) || buildNameFromFirstLast(auth) || \"\";\n userRole = userRole || (auth.role as string) || (auth.activeRole as string) || \"\";\n userAvatar = userAvatar || (auth.avatar as string) || undefined;\n userInitials = userInitials || (auth.initials as string) || undefined;\n }\n\n if (allData.userDetails) {\n const userDetails = (allData.userDetails as Record<string, unknown>).user\n || (allData.userDetails as Record<string, unknown>).data\n || allData.userDetails;\n const details = userDetails as Record<string, unknown> | undefined;\n if (details) {\n userEmail = userEmail || (details.email as string) || (details.emailAddress as string) || \"\";\n userName = userName || (details.name as string) || (details.fullName as string) || buildNameFromFirstLast(details) || \"\";\n userRole = userRole || (details.role as string) || (details.userRole as string) || \"\";\n userAvatar = userAvatar || (details.avatar as string) || (details.profilePicture as string) || undefined;\n userInitials = userInitials || (details.initials as string) || undefined;\n }\n }\n\n if (allData.user) {\n const u = (allData.user as Record<string, unknown>).user\n || (allData.user as Record<string, unknown>).data\n || (allData.user as Record<string, unknown>).currentUser\n || allData.user;\n const userData = u as Record<string, unknown> | undefined;\n if (userData) {\n userEmail = userEmail || (userData.email as string) || (userData.emailAddress as string) || \"\";\n userName = userName || (userData.name as string) || (userData.fullName as string) || buildNameFromFirstLast(userData) || \"\";\n userRole = userRole || (userData.role as string) || (userData.userRole as string) || \"\";\n userAvatar = userAvatar || (userData.avatar as string) || (userData.profilePicture as string) || undefined;\n userInitials = userInitials || (userData.initials as string) || undefined;\n }\n }\n\n if (allData.profile) {\n const p = (allData.profile as Record<string, unknown>).user\n || (allData.profile as Record<string, unknown>).data\n || allData.profile;\n const profileData = p as Record<string, unknown> | undefined;\n if (profileData) {\n userEmail = userEmail || (profileData.email as string) || (profileData.emailAddress as string) || \"\";\n userName = userName || (profileData.name as string) || (profileData.fullName as string) || buildNameFromFirstLast(profileData) || \"\";\n userRole = userRole || (profileData.role as string) || (profileData.userRole as string) || \"\";\n userAvatar = userAvatar || (profileData.avatar as string) || (profileData.profilePicture as string) || undefined;\n userInitials = userInitials || (profileData.initials as string) || undefined;\n }\n }\n\n setUser({\n name: userName || \"\",\n email: userEmail || \"\",\n role: userRole || \"\",\n avatar: profilePictureBlobUrl || userAvatar,\n initials: userInitials,\n });\n \n // Update online status\n if (allData.auth?.isOnline !== undefined) {\n setIsOnlineStatus(allData.auth.isOnline);\n } else if (allData.userDetails?.isOnline !== undefined) {\n setIsOnlineStatus(allData.userDetails.isOnline);\n } else if (allData.user?.isOnline !== undefined) {\n setIsOnlineStatus(allData.user.isOnline);\n } else if (allData.profile?.isOnline !== undefined) {\n setIsOnlineStatus(allData.profile.isOnline);\n }\n \n const notifCount = getNotificationCountFromStorage();\n setNotificationCount(notifCount !== null && notifCount !== undefined ? notifCount : 0);\n \n const msgCount = getMessageCountFromStorage();\n setMessageCount(msgCount ?? undefined);\n\n // Initialize language from props if provided\n if (languageProp && languageProp !== currentLanguage) {\n setCurrentLanguage(languageProp as SupportedLanguage);\n setI18nLocaleToStorage(languageProp);\n }\n }, [languageProp, profilePictureBlobUrl]); // Also update when profile picture is fetched\n\n const finalRoutes = DEFAULT_ROUTES;\n \n // Get online status from localStorage dynamically\n const [isOnlineStatus, setIsOnlineStatus] = React.useState<boolean>(() => {\n const allData = getAllDataFromStorage();\n if (allData.auth?.isOnline !== undefined) {\n return allData.auth.isOnline;\n }\n if (allData.userDetails?.isOnline !== undefined) {\n return allData.userDetails.isOnline;\n }\n if (allData.user?.isOnline !== undefined) {\n return allData.user.isOnline;\n }\n if (allData.profile?.isOnline !== undefined) {\n return allData.profile.isOnline;\n }\n // Default to true if not specified (for backward compatibility)\n return true;\n });\n \n const notificationCountValue = notificationCount;\n \n const isMobileMenuOpen = Boolean(mobileMoreAnchorEl);\n\n const OnlineBadge = styled(Badge)(({ theme }) => ({\n \"& .MuiBadge-badge\": {\n backgroundColor: \"#44b700\",\n color: \"#44b700\",\n boxShadow: `0 0 0 2px ${theme.palette.background.paper}`,\n width: 12,\n height: 12,\n borderRadius: \"50%\",\n },\n }));\n\n const OfflineBadge = styled(Badge)(({ theme }) => ({\n \"& .MuiBadge-badge\": {\n backgroundColor: \"gray\",\n color: \"gray\",\n boxShadow: `0 0 0 2px ${theme.palette.background.paper}`,\n width: 12,\n height: 12,\n borderRadius: \"50%\",\n },\n }));\n\n const handleProfileMenuOpen = (event: React.MouseEvent<HTMLElement>) => {\n setAnchorEl(event.currentTarget);\n };\n\n const handleMobileMenuClose = () => {\n setMobileMoreAnchorEl(null);\n };\n\n const handleMobileMenuOpen = (event: React.MouseEvent<HTMLElement>) => {\n setMobileMoreAnchorEl(event.currentTarget);\n };\n\n const open = Boolean(anchorEl);\n\n const handleClose = () => {\n setAnchorEl(null);\n };\n\n const handleSettingsClick = () => {\n handleClose();\n const path = finalRoutes.settings.startsWith('/') \n ? finalRoutes.settings \n : `/${finalRoutes.settings}`;\n window.location.href = path;\n };\n\n const handleProfileClick = () => {\n handleClose();\n const path = finalRoutes.profile.startsWith('/') \n ? finalRoutes.profile \n : `/${finalRoutes.profile}`;\n window.location.href = path;\n };\n\n const handleSignOutClick = () => {\n handleClose();\n try {\n localStorage.clear();\n sessionStorage.clear();\n } catch (e) {\n console.warn(\"Clear storage on logout:\", e);\n }\n const path = finalRoutes.logout.startsWith('/') \n ? finalRoutes.logout \n : `/${finalRoutes.logout}`;\n window.location.href = path;\n };\n\n const menuId = \"primary-account-menu\";\n\n const getInitials = () => {\n if (user.initials) return user.initials;\n return user.name\n .split(\" \")\n .map((n) => n[0])\n .join(\"\")\n .toUpperCase()\n .slice(0, 2);\n };\n\n // Check if user has permission to see settings (Account Owner, Account Admin, or Global Admin)\n const canViewSettings = React.useMemo(() => {\n const allData = getAllDataFromStorage();\n let userRole = \"\";\n \n // Get role from decoded token\n if (allData.decodedToken?.role) {\n userRole = allData.decodedToken.role;\n }\n // Get role from auth data\n else if (allData.auth?.role) {\n userRole = allData.auth.role;\n }\n // Get role from user data\n else if (user.role) {\n userRole = user.role;\n }\n // Get role from userDetails\n else if (allData.userDetails) {\n const userDetails = allData.userDetails.user || allData.userDetails.data || allData.userDetails;\n userRole = userDetails?.role || userDetails?.userRole || \"\";\n }\n // Get role from user\n else if (allData.user) {\n const userData = allData.user.user || allData.user.data || allData.user.currentUser || allData.user;\n userRole = userData?.role || userData?.userRole || \"\";\n }\n \n // Normalize role for comparison (case-insensitive, handle spaces/underscores/hyphens)\n const normalizedRole = userRole.toLowerCase().trim().replace(/[_\\s-]+/g, \" \");\n const allowedRoles = [\n \"account owner\",\n \"account admin\",\n \"global admin\"\n ];\n \n // Check for exact match or if role starts with allowed role\n // This handles variations like \"Account Owner\", \"ACCOUNT_OWNER\", \"Account-Owner\", \"Account Owner - Manager\"\n return allowedRoles.some(allowedRole => {\n return normalizedRole === allowedRole || normalizedRole.startsWith(allowedRole + \" \");\n });\n }, [user.role]);\n\n const profileList = (\n <List\n className=\"profile-menu-section\"\n sx={{\n width: \"100%\",\n maxWidth: 360,\n pointerEvents: \"none\",\n }}\n component=\"div\"\n aria-hidden=\"true\"\n tabIndex={-1}\n >\n <ListItem alignItems=\"flex-start\" className=\"profile-menu-item\">\n <ListItemAvatar>\n {isOnlineStatus ? (\n <OnlineBadge\n overlap=\"circular\"\n anchorOrigin={{ vertical: \"bottom\", horizontal: \"right\" }}\n variant=\"dot\"\n title={t.online}\n aria-label={`${t.online} status badge`}\n data-testid=\"online-badge\"\n >\n <Avatar\n sx={{ bgcolor: deepOrange[500] }}\n alt={user.name}\n title={user.name}\n src={user.avatar}\n >\n {getInitials()}\n </Avatar>\n </OnlineBadge>\n ) : (\n <OfflineBadge\n overlap=\"circular\"\n anchorOrigin={{ vertical: \"bottom\", horizontal: \"right\" }}\n variant=\"dot\"\n title={t.offline}\n aria-label={`${t.offline} status badge`}\n data-testid=\"offline-badge\"\n >\n <Avatar\n sx={{ bgcolor: deepOrange[500] }}\n alt={user.name}\n title={user.name}\n src={user.avatar}\n >\n {getInitials()}\n </Avatar>\n </OfflineBadge>\n )}\n </ListItemAvatar>\n <ListItemText\n primary={\n <Typography className=\"profile-name\" component=\"span\">\n {user.name || user.email}\n </Typography>\n }\n secondary={\n <React.Fragment>\n {user.name && user.email ? (\n <Typography className=\"profile-email\" component=\"p\">\n {user.email}\n </Typography>\n ) : null}\n <Typography className=\"profile-role\" component=\"p\">\n {t.role}: {user.role}\n </Typography>\n </React.Fragment>\n }\n />\n </ListItem>\n </List>\n );\n\n const renderMenu = (\n <Menu\n anchorEl={anchorEl}\n id=\"account-menu\"\n open={open}\n onClose={handleClose}\n onClick={handleClose}\n slotProps={{\n paper: {\n elevation: 0,\n sx: {\n overflow: \"visible\",\n filter: \"drop-shadow(0px 2px 8px rgba(0,0,0,0.32))\",\n mt: 1.5,\n \"& .MuiAvatar-root\": {\n width: 32,\n height: 32,\n ml: -0.5,\n mr: 1,\n },\n \"&::before\": {\n content: '\"\"',\n display: \"block\",\n position: \"absolute\",\n top: 0,\n right: 14,\n width: 10,\n height: 10,\n bgcolor: \"background.paper\",\n transform: \"translateY(-50%) rotate(45deg)\",\n zIndex: 0,\n },\n },\n },\n }}\n transformOrigin={{ horizontal: \"right\", vertical: \"top\" }}\n anchorOrigin={{ horizontal: \"right\", vertical: \"bottom\" }}\n >\n {profileList}\n <Divider />\n <MenuItem onClick={handleProfileClick}>\n <ListItemIcon>\n <PersonOutlineOutlinedIcon fontSize=\"small\" />\n </ListItemIcon>\n {t.profile}\n </MenuItem>\n {canViewSettings && (\n <MenuItem onClick={handleSettingsClick}>\n <ListItemIcon>\n <SettingsOutlinedIcon fontSize=\"small\" />\n </ListItemIcon>\n {t.accountSettings}\n </MenuItem>\n )}\n <MenuItem onClick={handleSignOutClick}>\n <ListItemIcon>\n <LogoutOutlinedIcon fontSize=\"small\" />\n </ListItemIcon>\n {t.signOut}\n </MenuItem>\n </Menu>\n );\n\n const mobileMenuId = \"primary-account-menu-mobile\";\n const renderMobileMenu = (\n <Menu\n anchorEl={mobileMoreAnchorEl}\n anchorOrigin={{\n vertical: \"top\",\n horizontal: \"right\",\n }}\n id={mobileMenuId}\n keepMounted\n transformOrigin={{\n vertical: \"top\",\n horizontal: \"right\",\n }}\n open={isMobileMenuOpen}\n onClose={handleMobileMenuClose}\n >\n {messageCount !== undefined && (\n <MenuItem>\n <IconButton \n size=\"large\" \n aria-label={`show ${messageCount} new mails`}\n sx={{ color: '#1e2f97' }}\n >\n <Badge badgeContent={messageCount} color=\"error\">\n <MailIcon />\n </Badge>\n </IconButton>\n <p>{t.messages}</p>\n </MenuItem>\n )}\n {notificationCountValue > 0 && (\n <MenuItem>\n <IconButton\n size=\"large\"\n aria-label={`show ${notificationCountValue} new notifications`}\n sx={{ color: '#1e2f97' }}\n >\n <Badge badgeContent={notificationCount} color=\"error\">\n <NotificationsActiveOutlined />\n </Badge>\n </IconButton>\n <p>{t.notifications}</p>\n </MenuItem>\n )}\n <MenuItem onClick={handleProfileMenuOpen}>\n <IconButton\n size=\"large\"\n aria-label=\"account of current user\"\n aria-controls=\"primary-account-menu\"\n aria-haspopup=\"true\"\n sx={{ color: '#1e2f97' }}\n >\n {isOnlineStatus ? (\n <OnlineBadge\n overlap=\"circular\"\n anchorOrigin={{ vertical: \"bottom\", horizontal: \"right\" }}\n variant=\"dot\"\n title={t.online}\n aria-label={`${t.online} status badge`}\n data-testid=\"online-badge\"\n >\n <AccountCircle\n titleAccess={user.name}\n aria-label=\"User avatar\"\n />\n </OnlineBadge>\n ) : (\n <OfflineBadge\n overlap=\"circular\"\n anchorOrigin={{ vertical: \"bottom\", horizontal: \"right\" }}\n variant=\"dot\"\n title={t.offline}\n aria-label={`${t.offline} status badge`}\n data-testid=\"offline-badge\"\n >\n <AccountCircle\n titleAccess={user.name}\n aria-label=\"User avatar\"\n />\n </OfflineBadge>\n )}\n </IconButton>\n <p>{t.profile}</p>\n </MenuItem>\n </Menu>\n );\n\n return (\n <Box sx={{ flexGrow: 1 }} className=\"app-header\">\n <AppBar\n elevation={0}\n sx={{\n backgroundColor: \"#ffffff\",\n boxShadow: 'none !important',\n position: 'fixed',\n zIndex: 200,\n height: '65px',\n }}\n >\n <Toolbar sx={{ minHeight: '65px !important', height: '65px' }}>\n <IconButton\n size=\"large\"\n edge=\"start\"\n aria-label=\"open drawer\"\n sx={{ \n mr: '10px !important',\n color: '#1e2f97',\n padding: 0,\n paddingLeft: '14px',\n '&:hover': {\n backgroundColor: 'rgba(30, 47, 151, 0.04)',\n }\n }}\n onClick={() => {\n toggleDrawer();\n }}\n >\n {isDrawerOpen ? (\n <MenuOpenIcon fontSize=\"large\" />\n ) : (\n <MenuIcon fontSize=\"large\" />\n )}\n </IconButton>\n <Box\n component=\"div\"\n sx={{ \n display: { xs: \"none\", sm: \"flex\" },\n alignItems: 'center',\n height: '65px',\n }}\n data-testid=\"impactomics-logo-wrapper\"\n >\n <img \n src={ImpactomicsLogo} \n alt=\"Impactomics\" \n style={{ height: '23px', width: 'auto', display: 'block' }}\n />\n </Box>\n <Box sx={{ flexGrow: 1 }} />\n <Box sx={{ display: { xs: \"none\", md: \"flex\" }, alignItems: \"center\", gap: \"4px\" }}>\n <LanguageSelector\n currentLanguage={currentLanguage}\n onLanguageChange={(lang) => {\n setCurrentLanguage(lang);\n // The LanguageSelector component handles URL and localStorage updates\n }}\n />\n <IconButton\n size=\"large\"\n aria-label={notificationCountValue > 0 ? `show ${notificationCountValue} new notifications` : \"show notifications\"}\n sx={{\n color: '#1e2f97',\n '&:hover': {\n backgroundColor: 'rgba(30, 47, 151, 0.04)',\n }\n }}\n >\n <Badge badgeContent={notificationCountValue > 0 ? notificationCountValue : 0} color=\"error\">\n <NotificationsActiveOutlined />\n </Badge>\n </IconButton>\n <IconButton\n size=\"large\"\n edge=\"end\"\n aria-label=\"account of current user\"\n aria-controls={menuId}\n aria-haspopup=\"true\"\n onClick={handleProfileMenuOpen}\n sx={{\n color: '#1e2f97',\n '&:hover': {\n backgroundColor: 'rgba(30, 47, 151, 0.04)',\n }\n }}\n >\n {isOnlineStatus ? (\n <OnlineBadge\n overlap=\"circular\"\n anchorOrigin={{ vertical: \"bottom\", horizontal: \"right\" }}\n variant=\"dot\"\n title={t.online}\n aria-label={`${t.online} status badge`}\n data-testid=\"online-badge\"\n >\n <Avatar\n sx={{\n bgcolor: deepOrange[500],\n width: 20,\n height: 20,\n p: 1,\n }}\n alt={user.name}\n title={user.name}\n src={user.avatar}\n sizes=\"large\"\n >\n {getInitials()}\n </Avatar>\n </OnlineBadge>\n ) : (\n <OfflineBadge\n overlap=\"circular\"\n anchorOrigin={{ vertical: \"bottom\", horizontal: \"right\" }}\n variant=\"dot\"\n title={t.offline}\n aria-label={`${t.offline} status badge`}\n data-testid=\"offline-badge\"\n >\n <Avatar\n sx={{\n bgcolor: deepOrange[500],\n width: 20,\n height: 20,\n p: 1,\n }}\n alt={user.name}\n title={user.name}\n src={user.avatar}\n >\n {getInitials()}\n </Avatar>\n </OfflineBadge>\n )}\n </IconButton>\n </Box>\n <Box sx={{ display: { xs: \"flex\", md: \"none\" } }}>\n <IconButton\n size=\"large\"\n aria-label=\"show more\"\n aria-controls={mobileMenuId}\n aria-haspopup=\"true\"\n onClick={handleMobileMenuOpen}\n sx={{\n color: '#1e2f97',\n '&:hover': {\n backgroundColor: 'rgba(30, 47, 151, 0.04)',\n }\n }}\n >\n <MoreIcon />\n </IconButton>\n </Box>\n </Toolbar>\n </AppBar>\n {renderMobileMenu}\n {renderMenu}\n </Box>\n );\n};\n\nexport default AppHeader;\n\n"],"names":["React","_jsx","_jsxs","_Fragment","Button","Box","Menu","MenuItem","ListItemIcon","ListItemText","styled","Badge","List","ListItem","ListItemAvatar","Avatar","deepOrange","Typography","Divider","IconButton","AppBar","Toolbar"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/DrawerContext.tsx","../src/utils/localStorage.ts","../src/utils/translations.ts","../src/asset/Impactomics.svg","../src/asset/flags/gb.png","../src/asset/flags/es.png","../src/LanguageSelector.tsx","../src/AppHeader.tsx"],"sourcesContent":["import * as React from \"react\";\r\n\r\ninterface DrawerContextType {\r\n isDrawerOpen: boolean;\r\n openDrawer: () => void;\r\n closeDrawer: () => void;\r\n toggleDrawer: () => void;\r\n}\r\n\r\nconst DrawerContext = React.createContext<DrawerContextType>({\r\n isDrawerOpen: false,\r\n openDrawer: () => {},\r\n closeDrawer: () => {},\r\n toggleDrawer: () => {},\r\n});\r\n\r\nexport const DrawerProvider = ({ children }: { children: React.ReactNode }) => {\r\n const [isDrawerOpen, setIsDrawerOpen] = React.useState(false);\r\n\r\n const openDrawer = () => {\r\n setIsDrawerOpen(true);\r\n };\r\n\r\n const closeDrawer = () => {\r\n setIsDrawerOpen(false);\r\n };\r\n\r\n const toggleDrawer = () => {\r\n setIsDrawerOpen((prev) => !prev);\r\n };\r\n\r\n return (\r\n <DrawerContext.Provider\r\n value={{ isDrawerOpen, openDrawer, closeDrawer, toggleDrawer }}\r\n >\r\n {children}\r\n </DrawerContext.Provider>\r\n );\r\n};\r\n\r\nexport const useDrawer = () => React.useContext(DrawerContext);\r\n\r\n","// --- IAM app user details (shared from IAM after verify-OTP, same origin) ---\r\n/** localStorage key used by IAM app for user details (GET /v1/userManagement/userDetails response). */\r\nexport const USER_DETAILS_STORAGE_KEY = \"linn-i-am-userDetails\";\r\n\r\n/** Stored value is the full API response from userDetails. */\r\nexport interface UserDetailsStoredResponse {\r\n status: \"SUCCESS\" | \"FAILURE\";\r\n statusinfo: {\r\n code: string;\r\n message: string;\r\n };\r\n data?: {\r\n usersDetails: UserDetailsItem[];\r\n };\r\n errors?: Record<string, string> | null;\r\n}\r\n\r\nexport interface UserDetailsItem {\r\n userId: number;\r\n firstName: string;\r\n lastName: string;\r\n email: string;\r\n status: string;\r\n roles?: string[];\r\n lastLogin?: string;\r\n createdDate?: string;\r\n contactNumber?: { phoneType: string; phoneNumber: string }[];\r\n timeZone?: string;\r\n workInfo?: {\r\n jobTitle?: string;\r\n department?: string;\r\n supervisor?: string;\r\n };\r\n}\r\n\r\n/**\r\n * Read user details from IAM app localStorage (set after verify-OTP on same origin).\r\n * Does not write or overwrite this key; IAM app is the source of truth.\r\n */\r\nexport function getStoredUserDetails(): UserDetailsItem | null {\r\n try {\r\n const raw = localStorage.getItem(USER_DETAILS_STORAGE_KEY);\r\n if (!raw) return null;\r\n\r\n const parsed = JSON.parse(raw) as UserDetailsStoredResponse;\r\n if (parsed.status !== \"SUCCESS\" || !parsed.data?.usersDetails?.length) {\r\n return null;\r\n }\r\n\r\n return parsed.data.usersDetails[0];\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\n// --- Header-owned persist store (unique key, no conflict with other apps) ---\r\n/** Unique localStorage key for this header package. Used only for access token; user details come from IAM (linn-i-am-userDetails). */\r\nexport const PERSIST_HEADER_KEY = \"persist:varminer-app-header\";\r\n\r\n/** Auth shape stored under PERSIST_HEADER_KEY. Host app should call setHeaderAuth after login so the header can make authenticated calls. */\r\nexport interface HeaderAuthState {\r\n accessToken?: string;\r\n refreshToken?: string;\r\n user_id?: number | string;\r\n [key: string]: unknown;\r\n}\r\n\r\n/**\r\n * Store auth (e.g. accessToken) in the header's own persist key. Call this after login so the header can use the token for profile picture etc.\r\n * User details are not stored here; they come from IAM (linn-i-am-userDetails).\r\n */\r\nexport function setHeaderAuth(auth: HeaderAuthState | null): void {\r\n try {\r\n const payload = auth ? { auth } : {};\r\n localStorage.setItem(PERSIST_HEADER_KEY, JSON.stringify(payload));\r\n } catch (err) {\r\n console.error(\"Error setting header auth:\", err);\r\n }\r\n}\r\n\r\n/**\r\n * User display data: from IAM only (linn-i-am-userDetails). No dependency on persist:userdb.\r\n */\r\nexport const getUserDataFromStorage = (): { name: string; email: string; role: string; avatar?: string; initials?: string } | null => {\r\n const iamUser = getStoredUserDetails();\r\n if (!iamUser) return null;\r\n const name = [iamUser.firstName, iamUser.lastName].filter(Boolean).join(\" \").trim();\r\n const role = iamUser.roles?.length ? iamUser.roles[0] : iamUser.workInfo?.jobTitle ?? \"\";\r\n return {\r\n name: name || \"\",\r\n email: iamUser.email || \"\",\r\n role: role || \"\",\r\n avatar: undefined,\r\n initials: name ? name.split(/\\s+/).map((s) => s[0]).join(\"\").slice(0, 2).toUpperCase() : undefined,\r\n };\r\n};\r\n\r\nexport const getNotificationCountFromStorage = (): number => {\r\n const userDbString = localStorage.getItem(\"persist:userdb\");\r\n if (userDbString) {\r\n try {\r\n const parsedOuter = JSON.parse(userDbString);\r\n \r\n const parseNested = (value: any) => {\r\n if (typeof value === 'string') {\r\n try {\r\n return JSON.parse(value);\r\n } catch {\r\n return value;\r\n }\r\n }\r\n return value;\r\n };\r\n \r\n if (parsedOuter.notifications) {\r\n const parsedNotifications = parseNested(parsedOuter.notifications);\r\n const count = parsedNotifications.count || parsedNotifications.unreadCount || parsedNotifications.total;\r\n if (typeof count === 'number') return count;\r\n }\r\n \r\n if (parsedOuter.app) {\r\n const parsedApp = parseNested(parsedOuter.app);\r\n if (parsedApp.notificationCount !== undefined) {\r\n return parsedApp.notificationCount;\r\n }\r\n }\r\n } catch (err) {\r\n console.error(\"Error parsing notification count from localStorage:\", err);\r\n }\r\n }\r\n return 0;\r\n};\r\n\r\nexport const getMessageCountFromStorage = (): number | undefined => {\r\n const userDbString = localStorage.getItem(\"persist:userdb\");\r\n if (userDbString) {\r\n try {\r\n const parsedOuter = JSON.parse(userDbString);\r\n \r\n const parseNested = (value: any) => {\r\n if (typeof value === 'string') {\r\n try {\r\n return JSON.parse(value);\r\n } catch {\r\n return value;\r\n }\r\n }\r\n return value;\r\n };\r\n \r\n if (parsedOuter.messages) {\r\n const parsedMessages = parseNested(parsedOuter.messages);\r\n const count = parsedMessages.count || parsedMessages.unreadCount || parsedMessages.total;\r\n if (typeof count === 'number') return count;\r\n }\r\n \r\n if (parsedOuter.app) {\r\n const parsedApp = parseNested(parsedOuter.app);\r\n if (parsedApp.messageCount !== undefined) {\r\n return parsedApp.messageCount;\r\n }\r\n }\r\n } catch (err) {\r\n console.error(\"Error parsing message count from localStorage:\", err);\r\n }\r\n }\r\n return undefined;\r\n};\r\n\r\nexport const getI18nLocaleFromStorage = (): string | null => {\r\n try {\r\n return localStorage.getItem(\"lnc-i18n\");\r\n } catch (err) {\r\n console.error(\"Error getting i18n locale from localStorage:\", err);\r\n return null;\r\n }\r\n};\r\n\r\nexport const setI18nLocaleToStorage = (locale: string): void => {\r\n try {\r\n localStorage.setItem(\"lnc-i18n\", locale);\r\n } catch (err) {\r\n console.error(\"Error setting i18n locale to localStorage:\", err);\r\n }\r\n};\r\n\r\n/**\r\n * Decodes a JWT token and returns its payload\r\n * @param token - JWT token string\r\n * @returns Decoded payload object or null if decoding fails\r\n */\r\nconst decodeJWT = (token: string): any => {\r\n try {\r\n if (!token) return null;\r\n \r\n // JWT format: header.payload.signature\r\n const parts = token.split('.');\r\n if (parts.length !== 3) return null;\r\n \r\n // Decode the payload (second part)\r\n const payload = parts[1];\r\n \r\n // Base64 decode and parse JSON\r\n // Replace URL-safe base64 characters and add padding if needed\r\n const base64 = payload.replace(/-/g, '+').replace(/_/g, '/');\r\n const padded = base64 + '='.repeat((4 - (base64.length % 4)) % 4);\r\n \r\n const decoded = atob(padded);\r\n return JSON.parse(decoded);\r\n } catch (err) {\r\n console.error(\"Error decoding JWT token:\", err);\r\n return null;\r\n }\r\n};\r\n\r\nconst emptyStorageResult = () => ({\r\n auth: null,\r\n user: null,\r\n authDetails: null,\r\n userDetails: null,\r\n profile: null,\r\n notifications: null,\r\n messages: null,\r\n app: null,\r\n decodedToken: null,\r\n rawData: null,\r\n});\r\n\r\n/**\r\n * Get auth (and decoded token) for header use. Reads from header's own persist key first; falls back to persist:userdb only for access token.\r\n * User details are not read from userdb—use getStoredUserDetails / getUserDataFromStorage (IAM) for that.\r\n * @returns Object with auth, decodedToken, and other keys (user/userDetails/profile null when using header key)\r\n */\r\nexport const getAllDataFromStorage = () => {\r\n // Prefer header-owned persist key (unique, no conflict with other apps)\r\n const headerStr = localStorage.getItem(PERSIST_HEADER_KEY);\r\n if (headerStr) {\r\n try {\r\n const parsed = JSON.parse(headerStr) as { auth?: HeaderAuthState };\r\n const auth = parsed?.auth as Record<string, unknown> | undefined;\r\n const accessToken = auth?.accessToken ?? auth?.access_token ?? auth?.token;\r\n if (accessToken && typeof accessToken === \"string\") {\r\n const decodedToken = decodeJWT(accessToken);\r\n return {\r\n ...emptyStorageResult(),\r\n auth: auth as Record<string, unknown>,\r\n decodedToken: decodedToken ? Object.fromEntries(Object.entries(decodedToken).map(([k, v]) => [k, v ?? null])) : null,\r\n rawData: parsed,\r\n };\r\n }\r\n } catch (err) {\r\n console.error(\"Error parsing header persist:\", err);\r\n }\r\n }\r\n\r\n // Fallback: try IAM persist key (persist:linn-i-am) then persist:userdb\r\n const tryParsePersistForAuth = (raw: string | null): Record<string, unknown> | null => {\r\n if (!raw) return null;\r\n try {\r\n const outer = JSON.parse(raw) as Record<string, unknown>;\r\n const parseNested = (v: unknown): unknown =>\r\n typeof v === \"string\" ? (() => { try { return JSON.parse(v); } catch { return v; } })() : v;\r\n for (const key of Object.keys(outer)) {\r\n const parsed = parseNested(outer[key]) as Record<string, unknown>;\r\n if (parsed?.accessToken || parsed?.access_token || parsed?.token || parsed?.refreshToken) return parsed;\r\n if (parsed?.auth && typeof parsed.auth === \"object\") {\r\n const a = parsed.auth as Record<string, unknown>;\r\n if (a.accessToken || a.access_token || a.token) return a;\r\n }\r\n }\r\n } catch {\r\n /* ignore */\r\n }\r\n return null;\r\n };\r\n const iamPersist = localStorage.getItem(\"persist:linn-i-am\");\r\n const iamAuth = tryParsePersistForAuth(iamPersist);\r\n if (iamAuth) {\r\n const token = (iamAuth.accessToken ?? iamAuth.access_token ?? iamAuth.token) as string | undefined;\r\n if (token) {\r\n const decodedToken = decodeJWT(token);\r\n return {\r\n ...emptyStorageResult(),\r\n auth: iamAuth,\r\n decodedToken: decodedToken ? Object.fromEntries(Object.entries(decodedToken).map(([k, v]) => [k, v ?? null])) : null,\r\n rawData: iamAuth,\r\n };\r\n }\r\n }\r\n\r\n // Fallback: read access token from persist:userdb (e.g. legacy or shared auth)\r\n const userDbString = localStorage.getItem(\"persist:userdb\");\r\n if (!userDbString) {\r\n return emptyStorageResult();\r\n }\r\n\r\n try {\r\n const parsedOuter = JSON.parse(userDbString);\r\n \r\n // Helper function to parse nested JSON strings\r\n const parseNested = (value: any) => {\r\n if (typeof value === 'string') {\r\n try {\r\n return JSON.parse(value);\r\n } catch {\r\n return value;\r\n }\r\n }\r\n return value;\r\n };\r\n\r\n // Parse all top-level keys dynamically (no hardcoding)\r\n const parsedData: any = {};\r\n let authData: any = null;\r\n \r\n // Helper to recursively find auth data (contains accessToken, access_token, token, or refreshToken)\r\n const findAuthData = (obj: any): any => {\r\n if (!obj || typeof obj !== 'object') return null;\r\n if (obj.accessToken || obj.access_token || obj.token || obj.refreshToken) return obj;\r\n for (const key in obj) {\r\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\r\n const nested = findAuthData(obj[key]);\r\n if (nested) return nested;\r\n }\r\n }\r\n return null;\r\n };\r\n \r\n // Parse all keys in parsedOuter dynamically\r\n Object.keys(parsedOuter).forEach((key) => {\r\n parsedData[key] = parseNested(parsedOuter[key]);\r\n \r\n // Dynamically find auth data in any structure\r\n const foundAuth = findAuthData(parsedData[key]);\r\n if (foundAuth && !authData) {\r\n authData = foundAuth;\r\n parsedData.auth = authData;\r\n }\r\n });\r\n\r\n // Get accessToken (support accessToken, access_token, token) and decode it\r\n let decodedToken = null;\r\n const accessToken =\r\n authData?.accessToken ?? authData?.access_token ?? authData?.token ??\r\n parsedData.auth?.accessToken ?? parsedData.auth?.access_token ?? parsedData.auth?.token ??\r\n (parsedData.authDetails as Record<string, unknown>)?.accessToken ?? (parsedData.authDetails as Record<string, unknown>)?.access_token ?? (parsedData.authDetails as Record<string, unknown>)?.token;\r\n if (accessToken) {\r\n decodedToken = decodeJWT(accessToken);\r\n }\r\n\r\n // Extract all auth-related fields from authData dynamically (no hardcoding)\r\n const authFields = authData ? Object.keys(authData).reduce((acc: any, key) => {\r\n acc[key] = authData[key] !== undefined ? authData[key] : null;\r\n return acc;\r\n }, {}) : null;\r\n\r\n // Build return object dynamically with all parsed data\r\n const result: any = {\r\n ...Object.keys(parsedData).reduce((acc: any, key) => {\r\n acc[key] = parsedData[key] !== undefined ? parsedData[key] : null;\r\n return acc;\r\n }, {}),\r\n decodedToken: decodedToken ? Object.keys(decodedToken).reduce((acc: any, key) => {\r\n acc[key] = decodedToken[key] !== undefined ? decodedToken[key] : null;\r\n return acc;\r\n }, {}) : null,\r\n rawData: parsedOuter, // Include raw parsed data for any other fields\r\n };\r\n \r\n // Add auth field if we have authData\r\n if (authFields) {\r\n result.auth = authFields;\r\n }\r\n \r\n return result;\r\n } catch (err) {\r\n console.error(\"Error parsing all data from localStorage:\", err);\r\n return { ...emptyStorageResult(), error: err instanceof Error ? err.message : \"Unknown error\" };\r\n }\r\n};\r\n\r\n/**\r\n * Get profile picture URL from object store API using user_id.\r\n * @param baseUrl - Base URL for the object store API (default: http://objectstore.impact0mics.local:9012)\r\n * @returns Profile picture URL or null if user_id is not available\r\n */\r\nconst VERIFICATION_USER_ID: number | null = 4590; // set to null to use only storage userId\r\n\r\nexport const getProfilePictureUrl = (baseUrl: string = \"http://objectstore.impact0mics.local:9012\"): string | null => {\r\n try {\r\n const allData = getAllDataFromStorage();\r\n const userId =\r\n allData.decodedToken?.user_id ?? allData.auth?.user_id ?? getStoredUserDetails()?.userId ?? VERIFICATION_USER_ID ?? null;\r\n if (userId == null) return null;\r\n return `${baseUrl.replace(/\\/$/, \"\")}/v1/objectStore/profilePicture/path/${userId}`;\r\n } catch (err) {\r\n console.error(\"Error getting profile picture URL:\", err);\r\n return null;\r\n }\r\n};\r\n\r\n/** Extract S3 object key from s3Uri (e.g. s3://bucket/key → key). */\r\nfunction getKeyFromS3Uri(s3Uri: string): string | null {\r\n const match = /^s3:\\/\\/[^/]+\\/(.+)$/.exec(s3Uri.trim());\r\n return match ? match[1] : null;\r\n}\r\n\r\n/**\r\n * Fetch profile picture: (1) GET path API for JSON with filePath/s3Uri, (2) GET download API with key; download returns JSON with base64 fileContent.\r\n * Path API: { statusResponse, filePath, s3Uri, errors }. Download API: { statusResponse, fileName, contentType, fileContent (base64), errors }.\r\n * @param baseUrl - Base URL for the object store API (default: http://objectstore.impact0mics.local:9012)\r\n * @returns Promise that resolves to blob URL string or null if fetch fails\r\n */\r\n/** Resolve access token from auth object (supports accessToken, access_token, token). */\r\nfunction getAccessTokenFromAuth(auth: Record<string, unknown> | null | undefined): string | undefined {\r\n if (!auth || typeof auth !== \"object\") return undefined;\r\n const token =\r\n (auth.accessToken as string) ??\r\n (auth.access_token as string) ??\r\n (auth.token as string);\r\n return typeof token === \"string\" && token.length > 0 ? token : undefined;\r\n}\r\n\r\n/** True if string looks like a JWT (three base64 parts) or a bearer token, not JSON. */\r\nfunction looksLikeToken(s: string): boolean {\r\n return s.length > 0 && !s.trimStart().startsWith(\"{\") && !s.trimStart().startsWith(\"[\");\r\n}\r\n\r\n/** Recursively find first string value at keys accessToken, access_token, or token. */\r\nfunction findTokenInObject(obj: unknown): string | undefined {\r\n if (obj === null || obj === undefined) return undefined;\r\n if (typeof obj === \"string\") return looksLikeToken(obj) ? obj : undefined;\r\n if (typeof obj !== \"object\") return undefined;\r\n const rec = obj as Record<string, unknown>;\r\n const direct =\r\n (rec.accessToken as string) ?? (rec.access_token as string) ?? (rec.token as string);\r\n if (typeof direct === \"string\" && looksLikeToken(direct)) return direct;\r\n for (const key of Object.keys(rec)) {\r\n const found = findTokenInObject(rec[key]);\r\n if (found) return found;\r\n }\r\n return undefined;\r\n}\r\n\r\n/** Parse redux-persist style value (may be double stringified). */\r\nfunction parsePersistValue(raw: string | null): unknown {\r\n if (!raw) return null;\r\n try {\r\n const first = JSON.parse(raw);\r\n if (typeof first === \"string\") {\r\n try {\r\n return JSON.parse(first);\r\n } catch {\r\n return first;\r\n }\r\n }\r\n return first;\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\n/** Get a nested value that may be a string (need parse) or already an object. */\r\nfunction parseNestedValue(val: unknown): unknown {\r\n if (val == null) return null;\r\n if (typeof val === \"string\") return parsePersistValue(val);\r\n return val;\r\n}\r\n\r\n/**\r\n * Extract access token from persist:userdb shape: authDetails (string) → parse → auth.accessToken.\r\n * Structure: { authDetails: \"{\\\"auth\\\":{\\\"accessToken\\\":\\\"...\\\"}}\", profileInformation: \"...\", _persist: \"...\" }\r\n */\r\nfunction getTokenFromUserDbPersist(parsed: Record<string, unknown>): string | undefined {\r\n const authDetails = parsed.authDetails;\r\n const inner = parseNestedValue(authDetails);\r\n const obj = typeof inner === \"object\" && inner !== null ? (inner as Record<string, unknown>) : null;\r\n if (!obj) return undefined;\r\n const auth = obj.auth;\r\n const authObj = typeof auth === \"object\" && auth !== null ? (auth as Record<string, unknown>) : null;\r\n if (!authObj) return undefined;\r\n const token =\r\n (authObj.accessToken as string) ??\r\n (authObj.access_token as string) ??\r\n (authObj.token as string);\r\n return typeof token === \"string\" && looksLikeToken(token) ? token : undefined;\r\n}\r\n\r\n/**\r\n * Get access token from all known storage keys (header, IAM, userdb, and plain keys).\r\n * persist:userdb shape: authDetails (stringified) contains auth.accessToken.\r\n */\r\nexport function getAccessTokenForRequest(): string | undefined {\r\n const keysToTry = [\r\n PERSIST_HEADER_KEY,\r\n \"persist:linn-i-am\",\r\n \"persist:userdb\",\r\n \"token\",\r\n \"accessToken\",\r\n \"auth\",\r\n ];\r\n for (const key of keysToTry) {\r\n const raw = localStorage.getItem(key);\r\n if (!raw) continue;\r\n const parsed = key.startsWith(\"persist:\") ? parsePersistValue(raw) : (() => { try { return JSON.parse(raw); } catch { return raw; } })();\r\n const token = findTokenInObject(parsed);\r\n if (token) return token;\r\n if (key.startsWith(\"persist:\")) {\r\n const outer = typeof parsed === \"object\" && parsed !== null ? (parsed as Record<string, unknown>) : null;\r\n if (outer) {\r\n if (key === \"persist:userdb\") {\r\n const fromUserDb = getTokenFromUserDbPersist(outer);\r\n if (fromUserDb) return fromUserDb;\r\n }\r\n for (const k of Object.keys(outer)) {\r\n const inner = parseNestedValue(outer[k]);\r\n const t = findTokenInObject(inner);\r\n if (t) return t;\r\n }\r\n }\r\n }\r\n }\r\n return getAccessTokenFromAuth(getAllDataFromStorage().auth as Record<string, unknown> | null);\r\n}\r\n\r\nexport const fetchProfilePictureAsBlobUrl = async (\r\n baseUrl: string = \"http://objectstore.impact0mics.local:9012\",\r\n accessTokenOverride?: string | null\r\n): Promise<string | null> => {\r\n try {\r\n const profilePicturePathUrl = getProfilePictureUrl(baseUrl);\r\n if (!profilePicturePathUrl) return null;\r\n\r\n const accessToken =\r\n (typeof accessTokenOverride === \"string\" && accessTokenOverride.length > 0\r\n ? accessTokenOverride\r\n : null) ?? getAccessTokenForRequest();\r\n const headers: Record<string, string> = {\r\n \"X-Message-Id\": `msg-${Date.now()}-${Math.random().toString(36).slice(2, 11)}`,\r\n \"X-Correlation-Id\": `corr-${Date.now()}-${Math.random().toString(36).slice(2, 11)}`,\r\n };\r\n if (accessToken) {\r\n headers[\"Authorization\"] = `Bearer ${accessToken}`;\r\n }\r\n\r\n // Step 1: GET path API → JSON with filePath, s3Uri\r\n const pathResponse = await fetch(profilePicturePathUrl, { method: \"GET\", headers });\r\n if (!pathResponse.ok) {\r\n console.warn(`Failed to fetch profile picture path: ${pathResponse.status} ${pathResponse.statusText}`);\r\n return null;\r\n }\r\n const pathData = (await pathResponse.json()) as {\r\n statusResponse?: { status?: string };\r\n filePath?: string;\r\n s3Uri?: string;\r\n key?: string;\r\n errors?: unknown[];\r\n };\r\n const status = pathData?.statusResponse?.status;\r\n if (status !== \"SUCCESS\") {\r\n console.warn(\"Profile picture path API did not return SUCCESS:\", status, pathData?.errors);\r\n return null;\r\n }\r\n // Key for download API: from s3Uri (s3://bucket/key) or response.key\r\n let downloadKey =\r\n pathData.key ??\r\n (pathData.s3Uri ? getKeyFromS3Uri(pathData.s3Uri) : null);\r\n if (!downloadKey && pathData.filePath) {\r\n try {\r\n const u = new URL(pathData.filePath);\r\n downloadKey = u.pathname.replace(/^\\//, \"\"); // path without leading slash as key\r\n } catch {\r\n // ignore\r\n }\r\n }\r\n if (!downloadKey) {\r\n console.warn(\"Profile picture response has no key/s3Uri/filePath for download\");\r\n return null;\r\n }\r\n\r\n // Step 2: GET download API → JSON with fileContent (base64) and contentType\r\n const cleanBase = baseUrl.replace(/\\/$/, \"\");\r\n const downloadUrl = `${cleanBase}/v1/objectStore/download?key=${encodeURIComponent(downloadKey)}`;\r\n const imageResponse = await fetch(downloadUrl, { method: \"GET\", headers });\r\n if (!imageResponse.ok) {\r\n console.warn(`Failed to fetch profile picture image: ${imageResponse.status} ${imageResponse.statusText}`);\r\n return null;\r\n }\r\n const downloadData = (await imageResponse.json()) as {\r\n statusResponse?: { status?: string };\r\n fileName?: string;\r\n contentType?: string;\r\n fileContent?: string;\r\n errors?: unknown[];\r\n };\r\n const downloadStatus = downloadData?.statusResponse?.status;\r\n if (downloadStatus !== \"SUCCESS\") {\r\n console.warn(\"Profile picture download API did not return SUCCESS:\", downloadStatus, downloadData?.errors);\r\n return null;\r\n }\r\n const fileContent = downloadData?.fileContent;\r\n const contentType = (downloadData?.contentType || \"\").trim() || \"image/png\";\r\n if (!fileContent || typeof fileContent !== \"string\") {\r\n console.warn(\"Profile picture download response has no fileContent\");\r\n return null;\r\n }\r\n if (!contentType.startsWith(\"image/\")) {\r\n console.warn(`Profile picture download contentType is not an image: ${contentType}`);\r\n return null;\r\n }\r\n // Decode base64 fileContent → Blob → object URL\r\n const binary = atob(fileContent);\r\n const bytes = new Uint8Array(binary.length);\r\n for (let i = 0; i < binary.length; i++) bytes[i] = binary.charCodeAt(i);\r\n const blob = new Blob([bytes], { type: contentType });\r\n return URL.createObjectURL(blob);\r\n } catch (err) {\r\n console.error(\"Error fetching profile picture:\", err);\r\n return null;\r\n }\r\n};\r\n\r\n","export type SupportedLanguage = 'en' | 'es';\r\n\r\nexport interface Translations {\r\n accountSettings: string;\r\n profile: string;\r\n signOut: string;\r\n messages: string;\r\n notifications: string;\r\n online: string;\r\n offline: string;\r\n role: string;\r\n}\r\n\r\nexport const translations: Record<SupportedLanguage, Translations> = {\r\n en: {\r\n accountSettings: 'Account Settings',\r\n profile: 'Profile',\r\n signOut: 'Sign out',\r\n messages: 'Messages',\r\n notifications: 'Notifications',\r\n online: 'Online',\r\n offline: 'Offline',\r\n role: 'Role',\r\n },\r\n es: {\r\n accountSettings: 'Configuración de cuenta',\r\n profile: 'Perfil',\r\n signOut: 'Cerrar sesión',\r\n messages: 'Mensajes',\r\n notifications: 'Notificaciones',\r\n online: 'En línea',\r\n offline: 'Desconectado',\r\n role: 'Rol',\r\n },\r\n};\r\n\r\nexport const getTranslations = (language: SupportedLanguage = 'en'): Translations => {\r\n return translations[language] || translations.en;\r\n};\r\n\r\n","export default \"data:image/svg+xml,%3Csvg%20width%3D%22134%22%20height%3D%2223%22%20viewBox%3D%220%200%20134%2023%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M0%2016.9641V0H2.29277V16.9641H0Z%22%20fill%3D%22black%22%2F%3E%3Cpath%20d%3D%22M19.7586%204.39182C20.6034%204.36006%2021.361%204.53721%2022.0278%204.92659C22.3033%205.0887%2022.5771%205.30261%2022.8458%205.57C23.1146%205.83738%2023.3531%206.17663%2023.5647%206.58941C23.7764%207.00219%2023.946%207.49519%2024.077%208.07007C24.2064%208.64495%2024.2719%209.32011%2024.2719%2010.0972V16.9891H22.0765V10.6788C22.0765%209.95014%2021.9909%209.3151%2021.8195%208.77364C21.6482%208.23217%2021.4214%207.77929%2021.1359%207.41497C20.8504%207.05065%2020.5262%206.77992%2020.16%206.60111C19.7938%206.42396%2019.4243%206.33372%2019.0497%206.33372C18.6752%206.33372%2018.2821%206.42229%2017.9159%206.60111C17.5498%206.77992%2017.2205%207.05065%2016.9283%207.41497C16.636%207.77929%2016.3992%208.23217%2016.2211%208.77364C16.0414%209.31677%2015.9524%209.95014%2015.9524%2010.6788V16.9891H13.757V10.6788C13.757%209.95014%2013.6714%209.3151%2013.5017%208.77364C13.3304%208.23217%2013.1036%207.77929%2012.8181%207.41497C12.5342%207.05065%2012.2084%206.77992%2011.8422%206.60111C11.476%206.42396%2011.1065%206.33372%2010.7319%206.33372C10.3573%206.33372%209.9643%206.42229%209.59813%206.60111C9.23196%206.77992%208.90274%207.05065%208.61047%207.41497C8.3182%207.77929%208.08137%208.23217%207.90332%208.77364C7.72359%209.31677%207.63457%209.95014%207.63457%2010.6788V16.9891H5.3418V4.58734H7.63457V6.74817C7.97555%206.13318%208.36692%205.66859%208.80531%205.35274C9.24371%205.03689%209.6586%204.80627%2010.05%204.66088C10.5052%204.49877%2010.9688%204.4102%2011.4407%204.39349C12.027%204.36174%2012.588%204.45031%2013.1238%204.66088C13.5958%204.83969%2014.0627%205.13883%2014.5263%205.5583C14.9899%205.97943%2015.3511%206.62618%2015.6114%207.5002C15.9205%206.69135%2016.3102%206.07636%2016.7821%205.65522C17.2541%205.23409%2017.7093%204.92659%2018.1477%204.73274C18.6684%204.52217%2019.2043%204.40853%2019.7586%204.39349V4.39182Z%22%20fill%3D%22black%22%2F%3E%3Cpath%20d%3D%22M32.9558%204.39185C34.0291%204.44031%2034.9882%204.69934%2035.8348%205.16894C36.1926%205.3628%2036.5453%205.61013%2036.8964%205.90927C37.2457%206.20841%2037.5548%206.58108%2037.8236%207.02561C38.0923%207.47015%2038.3073%207.99323%2038.4702%208.59151C38.6332%209.18979%2038.7138%209.88666%2038.7138%2010.6788V10.8727C38.7138%2011.6665%2038.6315%2012.365%2038.4702%2012.9717C38.3073%2013.5783%2038.0923%2014.1047%2037.8236%2014.5492C37.5548%2014.9938%2037.2457%2015.3664%2036.8964%2015.6656C36.547%2015.9647%2036.1926%2016.2121%2035.8348%2016.4059C34.9882%2016.8588%2034.0291%2017.1095%2032.9558%2017.1579C32.5174%2017.1412%2032.0773%2017.061%2031.6389%2016.9156C31.2644%2016.7869%2030.8663%2016.5797%2030.443%2016.2973C30.0197%2016.0149%2029.63%2015.6138%2029.2723%2015.0957V22.8132H26.9795V4.5857H29.2723V6.47914C29.63%205.94604%2030.0197%205.5366%2030.443%205.25417C30.8663%204.97174%2031.2644%204.76452%2031.6389%204.63584C32.0773%204.49044%2032.5174%204.41023%2032.9558%204.39352V4.39185ZM36.4932%2010.6788C36.4932%209.95017%2036.3908%209.31512%2036.1875%208.77366C35.9843%208.2322%2035.7155%207.77931%2035.383%207.415C35.0487%207.05068%2034.6674%206.77995%2034.2357%206.60114C33.8041%206.42399%2033.3606%206.33375%2032.9071%206.33375C32.4536%206.33375%2032.0085%206.42232%2031.5768%206.60114C31.1451%206.77995%2030.7588%207.05068%2030.4178%207.415C30.0768%207.77931%2029.7997%208.2322%2029.588%208.77366C29.3764%209.3168%2029.2706%209.95017%2029.2706%2010.6788V10.8727C29.2706%2011.6013%2029.3764%2012.2363%2029.588%2012.7778C29.7997%2013.3209%2030.0752%2013.7738%2030.4178%2014.1365C30.7588%2014.5008%2031.1451%2014.7715%2031.5768%2014.9503C32.0068%2015.1291%2032.4502%2015.2177%2032.9071%2015.2177C33.364%2015.2177%2033.8057%2015.1291%2034.2357%2014.9503C34.6657%2014.7732%2035.0487%2014.5008%2035.383%2014.1365C35.7155%2013.7721%2035.9843%2013.3193%2036.1875%2012.7778C36.3908%2012.2363%2036.4932%2011.6013%2036.4932%2010.8727V10.6788Z%22%20fill%3D%22black%22%2F%3E%3Cpath%20d%3D%22M41.0529%205.99458C41.3301%205.8659%2041.6795%205.70714%2042.1011%205.52164C42.5243%205.33614%2042.9913%205.16234%2043.5036%205.00023C44.0159%204.83813%2044.5568%204.70109%2045.1262%204.58745C45.6956%204.47381%2046.2482%204.41699%2046.7857%204.41699C47.3232%204.41699%2047.8338%204.48551%2048.3226%204.62255C48.8097%204.75958%2049.238%204.99856%2049.6025%205.33781C49.9687%205.67706%2050.2576%206.13162%2050.4693%206.69647C50.6809%207.263%2050.7867%207.97492%2050.7867%208.83223V16.9876H48.6149V14.8769C48.4839%2015.2161%2048.2689%2015.5286%2047.9682%2015.8111C47.6675%2016.0935%2047.3215%2016.3375%2046.9318%2016.5397C46.5422%2016.7419%2046.1138%2016.8956%2045.6502%2017.0009C45.1866%2017.1062%2044.7197%2017.158%2044.2477%2017.158C43.7757%2017.158%2043.292%2017.0928%2042.8452%2016.9642C42.3984%2016.8355%2042.0003%2016.6333%2041.6492%2016.3575C41.2998%2016.0835%2041.0193%2015.7308%2040.8077%2015.3013C40.5961%2014.8735%2040.4902%2014.3505%2040.4902%2013.7355C40.4902%2012.9266%2040.6851%2012.223%2041.0764%2011.6248C41.4661%2011.0265%2042.0154%2010.5201%2042.7225%2010.1073C43.4297%209.69456%2044.2847%209.38372%2045.2841%209.17315C46.2835%208.96258%2047.3937%208.8573%2048.6132%208.8573V8.83223C48.6132%208.36263%2048.5561%207.96991%2048.4419%207.65573C48.3277%207.33987%2048.1647%207.08586%2047.9548%206.892C47.7431%206.69814%2047.5029%206.56111%2047.2359%206.47922C46.9671%206.39901%2046.6715%206.35722%2046.3456%206.35722C45.9072%206.35722%2045.4504%206.41739%2044.98%206.53938C44.508%206.66138%2044.0646%206.80176%2043.6497%206.96386C43.2348%207.12596%2042.8653%207.28306%2042.5395%207.4368C42.2136%207.59055%2041.9784%207.69918%2041.8323%207.76435L41.0512%205.99291L41.0529%205.99458ZM48.6149%2010.7507C48.0287%2010.7507%2047.3904%2010.7875%2046.7%2010.8594C46.008%2010.9329%2045.363%2011.0733%2044.76%2011.2838C44.1587%2011.4944%2043.6581%2011.7936%2043.26%2012.1813C42.862%2012.569%2042.6621%2013.0787%2042.6621%2013.7104C42.6621%2014.2769%2042.8821%2014.7014%2043.3205%2014.9855C43.7589%2015.2679%2044.2796%2015.41%2044.8826%2015.41C45.3059%2015.41%2045.7359%2015.3381%2046.176%2015.191C46.6144%2015.0457%2047.0175%2014.8234%2047.3837%2014.5243C47.7498%2014.2251%2048.0455%2013.8524%2048.2739%2013.4079C48.5007%2012.9634%2048.6149%2012.442%2048.6149%2011.842V10.7507Z%22%20fill%3D%22black%22%2F%3E%3Cpath%20d%3D%22M55.1523%2010.7991C55.1523%2011.5595%2055.2665%2012.228%2055.4933%2012.8012C55.72%2013.3761%2056.0207%2013.8523%2056.3953%2014.2334C56.7698%2014.6144%2057.1998%2014.9002%2057.6886%2015.0957C58.1757%2015.2895%2058.6796%2015.3865%2059.2004%2015.3865C59.8185%2015.3865%2060.44%2015.2528%2061.0665%2014.9854C61.693%2014.718%2062.2574%2014.3019%2062.7613%2013.7354L63.9085%2014.9971C63.3391%2015.7257%2062.6286%2016.2722%2061.7736%2016.6348C60.9204%2016.9992%2060.0301%2017.1813%2059.1029%2017.1813C58.3387%2017.1813%2057.5912%2017.051%2056.8589%2016.7936C56.1265%2016.5346%2055.4714%2016.1469%2054.8953%2015.6288C54.3175%2015.1107%2053.8539%2014.4473%2053.5045%2013.6384C53.1552%2012.8296%2052.9805%2011.8837%2052.9805%2010.7991C52.9805%209.71451%2053.1552%208.74857%2053.5045%207.94808C53.8539%207.14759%2054.3175%206.48413%2054.8953%205.95771C55.4731%205.43129%2056.1265%205.04024%2056.8589%204.78121C57.5912%204.52218%2058.3387%204.39349%2059.1029%204.39349C60.0301%204.39349%2060.9204%204.57565%2061.7736%204.93997C62.6269%205.30428%2063.3391%205.85076%2063.9085%206.57772L62.7613%207.83946C62.2574%207.27293%2061.6913%206.8568%2061.0665%206.58942C60.44%206.32203%2059.8185%206.18834%2059.2004%206.18834C58.6796%206.18834%2058.1757%206.28526%2057.6886%206.47912C57.2015%206.67298%2056.7698%206.96376%2056.3953%207.35314C56.0207%207.74086%2055.72%208.22383%2055.4933%208.79704C55.2648%209.37192%2055.1523%2010.0387%2055.1523%2010.7991Z%22%20fill%3D%22black%22%2F%3E%3Cpath%20d%3D%22M71.9846%2015.2662L72.1559%2016.8672C71.6352%2016.949%2071.1632%2017.0126%2070.7416%2017.061C70.3184%2017.1095%2069.9438%2017.1345%2069.6196%2017.1345C69.067%2017.1345%2068.6152%2017.066%2068.2658%2016.929C67.9164%2016.792%2067.6443%2016.5814%2067.4495%2016.2973C67.2546%2016.0149%2067.1202%2015.6505%2067.0463%2015.2043C66.9724%2014.7598%2066.9288%2014.2217%2066.912%2013.59V6.35715H64.9854V4.5857H66.912V2.6438H69.2047V4.5857H72.1324V6.35715H69.2047V13.59C69.2047%2013.9459%2069.2165%2014.2334%2069.2417%2014.4523C69.2669%2014.6712%2069.3677%2014.84%2069.5474%2014.962C69.7254%2015.084%2070.0059%2015.1642%2070.3889%2015.2043C70.7702%2015.2444%2071.3043%2015.2645%2071.9863%2015.2645L71.9846%2015.2662Z%22%20fill%3D%22black%22%2F%3E%3Cpath%20d%3D%22M100.591%204.39163C101.435%204.35988%20102.193%204.53703%20102.86%204.92641C103.135%205.08851%20103.409%205.30242%20103.678%205.56981C103.947%205.8372%20104.185%206.17645%20104.397%206.58923C104.608%207.00201%20104.778%207.495%20104.909%208.06989C105.038%208.64477%20105.104%209.31993%20105.104%2010.097V16.9889H102.909V10.6786C102.909%209.94996%20102.823%209.31491%20102.652%208.77345C102.48%208.23199%20102.253%207.7791%20101.968%207.41479C101.682%207.05047%20101.358%206.77974%20100.992%206.60093C100.626%206.42378%20100.256%206.33354%2099.8818%206.33354C99.5072%206.33354%2099.1142%206.42211%2098.748%206.60093C98.3818%206.77974%2098.0526%207.05047%2097.7603%207.41479C97.4681%207.7791%2097.2312%208.23199%2097.0532%208.77345C96.8734%209.31658%2096.7844%209.94996%2096.7844%2010.6786V16.9889H94.5891V10.6786C94.5891%209.94996%2094.5034%209.31491%2094.3338%208.77345C94.1624%208.23199%2093.9357%207.7791%2093.6501%207.41479C93.3663%207.05047%2093.0404%206.77974%2092.6742%206.60093C92.308%206.42378%2091.9385%206.33354%2091.564%206.33354C91.1894%206.33354%2090.7963%206.42211%2090.4302%206.60093C90.064%206.77974%2089.7348%207.05047%2089.4425%207.41479C89.1502%207.7791%2088.9134%208.23199%2088.7354%208.77345C88.5556%209.31658%2088.4666%209.94996%2088.4666%2010.6786V16.9889H86.1738V4.58716H88.4666V6.74799C88.8076%206.133%2089.199%205.66841%2089.6374%205.35256C90.0758%205.03671%2090.4906%204.80609%2090.882%204.66069C91.3372%204.49859%2091.8008%204.41002%2092.2728%204.3933C92.859%204.36155%2093.42%204.45013%2093.9558%204.66069C94.4278%204.83951%2094.8948%205.13865%2095.3584%205.55811C95.822%205.97925%2096.1831%206.62599%2096.4434%207.50002C96.7525%206.69117%2097.1422%206.07618%2097.6142%205.65504C98.0862%205.23391%2098.5414%204.92641%2098.9798%204.73255C99.5005%204.52199%20100.036%204.40834%20100.591%204.3933V4.39163Z%22%20fill%3D%22black%22%2F%3E%3Cpath%20d%3D%22M108.933%203.34883C108.559%203.34883%20108.241%203.22015%20107.982%202.96112C107.722%202.70209%20107.593%202.38624%20107.593%202.01524C107.593%201.64424%20107.722%201.32838%20107.982%201.06935C108.243%200.810321%20108.56%200.681641%20108.933%200.681641C109.306%200.681641%20109.629%200.811992%20109.897%201.06935C110.166%201.32838%20110.3%201.64424%20110.3%202.01524C110.3%202.38624%20110.166%202.70376%20109.897%202.96112C109.629%203.22015%20109.308%203.34883%20108.933%203.34883ZM107.786%2016.989V4.58717H110.104V16.989H107.786Z%22%20fill%3D%22black%22%2F%3E%3Cpath%20d%3D%22M114.569%2010.7989C114.569%2011.5593%20114.684%2012.2278%20114.91%2012.801C115.137%2013.3759%20115.438%2013.8522%20115.812%2014.2332C116.187%2014.6142%20116.617%2014.9%20117.106%2015.0955C117.593%2015.2894%20118.097%2015.3863%20118.617%2015.3863C119.235%2015.3863%20119.857%2015.2526%20120.483%2014.9852C121.11%2014.7178%20121.674%2014.3017%20122.178%2013.7352L123.326%2014.9969C122.756%2015.7255%20122.046%2016.272%20121.191%2016.6347C120.337%2016.999%20119.447%2017.1811%20118.52%2017.1811C117.756%2017.1811%20117.008%2017.0508%20116.276%2016.7934C115.544%2016.5344%20114.888%2016.1467%20114.312%2015.6286C113.734%2015.1106%20113.271%2014.4471%20112.922%2013.6382C112.572%2012.8294%20112.397%2011.8835%20112.397%2010.7989C112.397%209.71433%20112.572%208.74839%20112.922%207.9479C113.271%207.14741%20113.734%206.48395%20114.312%205.95753C114.89%205.43111%20115.544%205.04006%20116.276%204.78102C117.008%204.52199%20117.756%204.39331%20118.52%204.39331C119.447%204.39331%20120.337%204.57547%20121.191%204.93979C122.044%205.3041%20122.756%205.85058%20123.326%206.57754L122.178%207.83927C121.674%207.27274%20121.108%206.85662%20120.483%206.58923C119.857%206.32185%20119.235%206.18815%20118.617%206.18815C118.097%206.18815%20117.593%206.28508%20117.106%206.47894C116.619%206.67279%20116.187%206.96358%20115.812%207.35296C115.438%207.74067%20115.137%208.22364%20114.91%208.79685C114.682%209.37174%20114.569%2010.0385%20114.569%2010.7989Z%22%20fill%3D%22black%22%2F%3E%3Cpath%20d%3D%22M127.764%207.62027C127.764%207.94447%20127.914%208.21855%20128.216%208.44583C128.517%208.67311%20128.895%208.89036%20129.35%209.10093C129.805%209.31149%20130.3%209.53376%20130.838%209.76773C131.374%2010.0017%20131.871%2010.2858%20132.326%2010.6167C132.781%2010.9492%20133.159%2011.3537%20133.46%2011.83C133.761%2012.3079%20133.912%2012.8861%20133.912%2013.5646C133.912%2014.1796%20133.789%2014.7177%20133.546%2015.179C133.302%2015.6402%20132.98%2016.0213%20132.581%2016.3204C132.183%2016.6195%20131.72%2016.8468%20131.191%2017.0006C130.662%2017.1543%20130.114%2017.2312%20129.545%2017.2312C128.586%2017.2312%20127.653%2017.0206%20126.751%2016.5995C125.849%2016.1783%20125.146%2015.54%20124.642%2014.6826L125.958%2013.202C126.414%2013.9306%20126.943%2014.4604%20127.544%2014.7913C128.145%2015.1238%20128.732%2015.2893%20129.301%2015.2893C129.87%2015.2893%20130.358%2015.1355%20130.764%2014.828C131.171%2014.5205%20131.374%2014.0994%20131.374%2013.5663C131.374%2013.0967%20131.223%2012.7257%20130.922%2012.45C130.621%2012.1742%20130.252%2011.9369%20129.812%2011.7347C129.373%2011.5325%20128.888%2011.3386%20128.36%2011.1515C127.831%2010.966%20127.348%2010.7303%20126.909%2010.4479C126.471%2010.1655%20126.1%209.80115%20125.799%209.35495C125.498%208.91041%20125.347%208.32383%20125.347%207.5952C125.347%207.06042%20125.456%206.5925%20125.676%206.18807C125.896%205.78365%20126.189%205.44774%20126.555%205.18035C126.921%204.91297%20127.339%204.71075%20127.811%204.57372C128.283%204.43668%20128.77%204.36816%20129.274%204.36816C130.007%204.36816%20130.717%204.50186%20131.409%204.76924C132.099%205.03663%20132.665%205.4444%20133.104%205.99422L131.811%207.32948C131.404%206.8766%20130.989%206.5457%20130.566%206.33514C130.143%206.12457%20129.744%206.01928%20129.37%206.01928C128.898%206.01928%20128.512%206.16133%20128.211%206.44376C127.91%206.72786%20127.759%207.11891%20127.759%207.62027H127.764Z%22%20fill%3D%22black%22%2F%3E%3Cpath%20d%3D%22M82.2257%2016.5045C82.7489%2016.5045%2083.173%2016.0825%2083.173%2015.5619C83.173%2015.0414%2082.7489%2014.6194%2082.2257%2014.6194C81.7025%2014.6194%2081.2783%2015.0414%2081.2783%2015.5619C81.2783%2016.0825%2081.7025%2016.5045%2082.2257%2016.5045Z%22%20fill%3D%22%235BC0BE%22%2F%3E%3Cpath%20d%3D%22M83.3365%207.03215C82.799%206.22831%2082.4748%205.97596%2082.4379%205.94421C82.4076%205.97763%2081.86%206.56923%2081.3964%207.65716C81.64%207.98304%2081.7509%208.27215%2081.9071%208.71502C82.1019%209.2665%2082.201%209.91325%2082.201%2010.6402C82.201%2011.414%2082.0986%2012.0975%2081.8953%2012.6724C81.6904%2013.2489%2081.4216%2013.7336%2081.0958%2014.1146C80.7682%2014.4973%2080.3886%2014.7914%2079.9704%2014.9869C79.1322%2015.3797%2078.2067%2015.3797%2077.3686%2014.9869C76.9503%2014.7914%2076.5673%2014.4973%2076.2331%2014.1146C75.8971%2013.7319%2075.6284%2013.2472%2075.4336%2012.6707C75.2387%2012.0975%2075.1396%2011.4223%2075.1396%2010.6636C75.1396%209.90489%2075.2421%209.28823%2075.447%208.73841C75.6502%208.18692%2075.919%207.72234%2076.2465%207.35635C76.5741%206.98869%2076.957%206.70794%2077.3837%206.52077C77.8086%206.33359%2078.2554%206.24001%2078.7022%206.24001C79.149%206.24001%2079.5757%206.32858%2079.9922%206.5074C80.2492%206.61769%2080.3668%206.70125%2080.5919%206.88341C80.9396%206.36702%2081.2016%205.79715%2081.3696%205.18048C81.3528%205.17046%2081.336%205.16043%2081.3175%205.1504C80.5146%204.71088%2079.71%204.53207%2078.6888%204.48193H78.6703H78.6518C77.6306%204.53207%2076.7051%204.7794%2075.9022%205.21725C75.5528%205.40776%2075.2118%205.65008%2074.8877%205.94087C74.5652%206.23165%2074.2679%206.59764%2074.0075%207.03047C73.7455%207.46331%2073.5338%207.98304%2073.3743%208.57464C73.2164%209.16623%2073.1357%209.85977%2073.1357%2010.6369C73.1357%2011.414%2073.2164%2012.1359%2073.3743%2012.7342C73.5322%2013.3341%2073.7455%2013.8622%2074.0075%2014.3034C74.2695%2014.7446%2074.5652%2015.124%2074.8893%2015.4298C75.2135%2015.7373%2075.5562%2015.998%2075.9089%2016.2052C76.7051%2016.6548%2077.6256%2016.9171%2078.6451%2016.984H78.6703H78.6955C79.6748%2016.9205%2080.5633%2016.6731%2081.3444%2016.2503C81.0303%2015.8091%2081.0706%2015.1942%2081.467%2014.7998C81.897%2014.3719%2082.584%2014.3602%2083.0291%2014.7597C83.1332%2014.6159%2083.2357%2014.4655%2083.3314%2014.3034C83.5918%2013.8639%2083.8051%2013.3358%2083.9647%2012.7342C84.1226%2012.1326%2084.2032%2011.4273%2084.2032%2010.6369C84.2032%209.8464%2084.1226%209.16958%2083.963%208.57464C83.8034%207.98137%2083.5901%207.46164%2083.3298%207.03047L83.3365%207.03215Z%22%20fill%3D%22black%22%2F%3E%3Cpath%20d%3D%22M77.0141%209.74781C75.4268%2011.7031%2077.7582%2014.2817%2079.7788%2013.2322C81.5173%2012.3298%2080.7883%2010.9343%2080.8152%209.58237C80.8387%208.37076%2081.4955%206.88175%2082.2547%205.94923C83.0626%204.95488%2085.1303%204.66243%2084.7238%202.9712C84.4165%201.6961%2082.6864%201.39529%2081.9104%202.3913C81.3594%203.09654%2081.7542%203.96722%2081.603%204.77607C81.3443%206.17651%2080.6153%207.36639%2079.5135%208.25545C78.7777%208.84872%2077.5365%209.10608%2077.0141%209.74781Z%22%20fill%3D%22%235BC0BE%22%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAUCAMAAADImI+JAAAANlBMVEX////w8vfyxcx8jbJCWpAOLHFVa5sBIWnIEC7WTGLnv8qAkLTheYpecqHx0digrMfz3+T21dqBS5WQAAAApUlEQVQoz8WTyxpFMAyEpyqOuhTv/7IntImmurAzC59kfsIIhA5wnn6iASMLgzbIT2Fk6joUaAUKBsiJm+kJ0iyuR1mQBam8Cex1dINkZ6EesSZwrR8JfdYWl7AcbCRw5ypytYmPpy6w3X6jL8HXL6PxOODgTPYEcnXmFe94cuBsdJzwpIFrRwK3WPkJLQqL2aUoUVisXjOvLizWWNyMVljrV0gz/wdhEi0lRIbcAAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAbCAMAAAA5zj1cAAAApVBMVEX6vQCtFRnBPxP3tgCkSRTxsQC9miCtkjL3ugDcdwrVkwndpwauUEi3k3ecLQyvGx01YomtXy3Zhha+gw+4LiCzn4jKeBKyYgjmoAOkXUK/RhC1kJmmKh+0oKCbYwN5OAWWHxSVi0HypQNcdGsDAgC9g1j6vgSWhnLfsSXCn169cE24eBuaNwzQaiOYagW8bxWIOhqoKhPLdq4yUHR+UgVZLWaBHkAs3esWAAAAk0lEQVQ4y+WTVxLDIAxESQwBAwb33tKc3sv9j5YbWJp8JvurNzsrzYpMkCI/BU6RIt9phqIcJSOpEGBu7c2WA+iXOWmbtTmTACh42PdelSgwp+d2nXdvTjuAc3X5vL6qJo4XQEZ9qd8PXaR7yDE5GFOf6XbNRrmB8cgcKaUraJm5z4NiE4RLH3FyIUaG6Pb85XN9AIg9CvrV7UGSAAAAAElFTkSuQmCC\"","import React from \"react\";\nimport {\n Button,\n Menu,\n MenuItem,\n ListItemIcon,\n ListItemText,\n Box,\n} from \"@mui/material\";\nimport ArrowDropDownIcon from \"@mui/icons-material/ArrowDropDown\";\nimport { SupportedLanguage } from \"./utils/translations\";\nimport { setI18nLocaleToStorage } from \"./utils/localStorage\";\nimport GBFlag from \"./asset/flags/gb.png\";\nimport ESFlag from \"./asset/flags/es.png\";\n\ninterface LanguageOption {\n code: SupportedLanguage;\n name: string;\n flag: string;\n}\n\nconst languages: LanguageOption[] = [\n { code: \"en\", name: \"English\", flag: GBFlag },\n { code: \"es\", name: \"Spanish\", flag: ESFlag },\n];\n\ninterface LanguageSelectorProps {\n currentLanguage: SupportedLanguage;\n onLanguageChange: (language: SupportedLanguage) => void;\n}\n\nconst LanguageSelector: React.FC<LanguageSelectorProps> = ({\n currentLanguage,\n onLanguageChange: _onLanguageChange, // reserved for parent callback; we reload the page on select\n}) => {\n const [anchorEl, setAnchorEl] = React.useState<null | HTMLElement>(null);\n const open = Boolean(anchorEl);\n\n const currentLang = languages.find((lang) => lang.code === currentLanguage) || languages[0];\n\n const handleClick = (event: React.MouseEvent<HTMLElement>) => {\n setAnchorEl(event.currentTarget);\n };\n\n const handleClose = () => {\n setAnchorEl(null);\n };\n\n const handleLanguageSelect = (languageCode: SupportedLanguage) => {\n // Update localStorage\n setI18nLocaleToStorage(languageCode);\n \n // Get current path\n const currentPath = window.location.pathname;\n const search = window.location.search;\n const hash = window.location.hash;\n \n // Find and replace existing locale /:locale/ with new locale\n const newPath = currentPath.replace(/\\/(en|es)\\//, `/${languageCode}/`);\n \n // Construct full URL and reload the page to apply translations\n const fullUrl = newPath + search + hash;\n window.location.href = fullUrl;\n \n handleClose();\n };\n\n return (\n <>\n <Button\n onClick={handleClick}\n sx={{\n color: \"#1e2f97\",\n textTransform: \"none\",\n padding: \"4px 8px\",\n minWidth: \"auto\",\n display: \"flex\",\n alignItems: \"center\",\n gap: \"4px\",\n \"&:hover\": {\n backgroundColor: \"rgba(30, 47, 151, 0.04)\",\n },\n }}\n aria-label=\"Select language\"\n aria-controls={open ? \"language-menu\" : undefined}\n aria-haspopup=\"true\"\n aria-expanded={open ? \"true\" : undefined}\n >\n <Box\n component=\"img\"\n src={currentLang.flag}\n alt={currentLang.name}\n sx={{\n width: \"20px\",\n height: \"15px\",\n objectFit: \"cover\",\n borderRadius: \"2px\",\n }}\n />\n <Box\n component=\"span\"\n sx={{\n fontSize: \"14px\",\n fontWeight: 500,\n marginLeft: \"4px\",\n }}\n >\n {currentLang.code.toUpperCase()}\n </Box>\n <ArrowDropDownIcon\n sx={{\n fontSize: \"20px\",\n marginLeft: \"2px\",\n display: \"flex\",\n alignSelf: \"center\",\n }}\n />\n </Button>\n <Menu\n id=\"language-menu\"\n anchorEl={anchorEl}\n open={open}\n onClose={handleClose}\n anchorOrigin={{\n vertical: \"bottom\",\n horizontal: \"right\",\n }}\n transformOrigin={{\n vertical: \"top\",\n horizontal: \"right\",\n }}\n slotProps={{\n paper: {\n sx: {\n mt: 1,\n minWidth: 150,\n },\n },\n }}\n >\n {languages.map((language) => (\n <MenuItem\n key={language.code}\n onClick={() => handleLanguageSelect(language.code)}\n selected={language.code === currentLanguage}\n >\n <ListItemIcon>\n <Box\n component=\"img\"\n src={language.flag}\n alt={language.name}\n sx={{\n width: \"24px\",\n height: \"18px\",\n objectFit: \"cover\",\n borderRadius: \"2px\",\n }}\n />\n </ListItemIcon>\n <ListItemText primary={language.name} />\n </MenuItem>\n ))}\n </Menu>\n </>\n );\n};\n\nexport default LanguageSelector;\n\n","import AccountCircle from \"@mui/icons-material/AccountCircle\";\nimport LogoutOutlinedIcon from \"@mui/icons-material/LogoutOutlined\";\nimport MailIcon from \"@mui/icons-material/Mail\";\nimport MenuIcon from \"@mui/icons-material/Menu\";\nimport MenuOpenIcon from \"@mui/icons-material/MenuOpen\";\nimport MoreIcon from \"@mui/icons-material/MoreVert\";\nimport NotificationsActiveOutlined from \"@mui/icons-material/NotificationsActiveOutlined\";\nimport PersonOutlineOutlinedIcon from \"@mui/icons-material/PersonOutlineOutlined\";\nimport SettingsOutlinedIcon from \"@mui/icons-material/SettingsOutlined\";\nimport {\n AppBar,\n Avatar,\n Badge,\n Box,\n Divider,\n IconButton,\n List,\n ListItem,\n ListItemAvatar,\n ListItemIcon,\n ListItemText,\n Menu,\n MenuItem,\n styled,\n Toolbar,\n Typography,\n} from \"@mui/material\";\nimport { deepOrange } from \"@mui/material/colors\";\nimport React from \"react\";\nimport { useDrawer } from \"./DrawerContext\";\nimport { AppHeaderProps, UserProfile } from \"./types\";\nimport { getUserDataFromStorage, getNotificationCountFromStorage, getMessageCountFromStorage, getI18nLocaleFromStorage, setI18nLocaleToStorage, getAllDataFromStorage, fetchProfilePictureAsBlobUrl, getAccessTokenForRequest } from \"./utils/localStorage\";\nimport { getTranslations, SupportedLanguage } from \"./utils/translations\";\nimport ImpactomicsLogo from \"./asset/Impactomics.svg\";\nimport LanguageSelector from \"./LanguageSelector\";\nimport \"./styles/Header.scss\";\n\nconst DEFAULT_ROUTES = {\n settings: \"/account/overview\",\n profile: \"/user/profile\",\n logout: \"/user/login\",\n};\n\nconst AppHeader: React.FC<AppHeaderProps> = ({ language: languageProp, accessToken: accessTokenProp }) => {\n // Get initial language from props, URL, localStorage, or default to 'en'\n const getInitialLanguage = (): SupportedLanguage => {\n // Priority 1: Props\n if (languageProp) {\n setI18nLocaleToStorage(languageProp);\n return languageProp as SupportedLanguage;\n }\n \n // Priority 2: URL path - pattern is /:locale/base-name/...\n const currentPath = window.location.pathname;\n const localePattern = /^\\/(en|es)(\\/|$)/;\n const localeMatch = currentPath.match(localePattern);\n if (localeMatch && localeMatch[1]) {\n const urlLocale = localeMatch[1] as SupportedLanguage;\n setI18nLocaleToStorage(urlLocale);\n return urlLocale;\n }\n \n // Priority 3: localStorage\n const storedLocale = getI18nLocaleFromStorage();\n if (storedLocale && (storedLocale === 'en' || storedLocale === 'es')) {\n return storedLocale as SupportedLanguage;\n }\n \n // Default\n return 'en';\n };\n\n const [currentLanguage, setCurrentLanguage] = React.useState<SupportedLanguage>(getInitialLanguage);\n const t = getTranslations(currentLanguage);\n \n const { isDrawerOpen, toggleDrawer } = useDrawer();\n const [anchorEl, setAnchorEl] = React.useState<null | HTMLElement>(null);\n const [mobileMoreAnchorEl, setMobileMoreAnchorEl] =\n React.useState<null | HTMLElement>(null);\n \n const [user, setUser] = React.useState<UserProfile>(() => {\n const allData = getAllDataFromStorage();\n let userName = \"\";\n let userEmail = \"\";\n let userRole = \"\";\n\n const buildNameFromFirstLast = (obj: Record<string, unknown> | null | undefined): string => {\n if (!obj || typeof obj !== \"object\") return \"\";\n const first = (obj.firstName ?? obj.given_name ?? obj.first_name) as string | undefined;\n const last = (obj.lastName ?? obj.family_name ?? obj.last_name) as string | undefined;\n return [first, last].filter(Boolean).join(\" \").trim();\n };\n\n // Prefer getUserDataFromStorage first (IAM firstName+lastName or persist:userdb name)\n const storedUser = getUserDataFromStorage();\n if (storedUser) {\n userName = storedUser.name || \"\";\n userEmail = userEmail || storedUser.email || \"\";\n userRole = userRole || storedUser.role || \"\";\n }\n\n // Then enrich from decoded token (email from sub; name only if token has name/given_name/family_name, never use sub as name)\n if (allData.decodedToken) {\n const token = allData.decodedToken as Record<string, unknown>;\n userEmail = userEmail || (token.sub as string) || (token.email as string) || \"\";\n const tokenName = (token.name as string) || buildNameFromFirstLast(token);\n userName = userName || (tokenName || \"\");\n userRole = userRole || (token.role as string) || \"\";\n }\n\n if (allData.auth) {\n const auth = allData.auth as Record<string, unknown>;\n userEmail = userEmail || (auth.email as string) || (auth.sub as string) || \"\";\n userName = userName || (auth.name as string) || buildNameFromFirstLast(auth) || \"\";\n userRole = userRole || (auth.role as string) || (auth.activeRole as string) || \"\";\n }\n\n if (allData.userDetails) {\n const userDetails = (allData.userDetails as Record<string, unknown>).user\n || (allData.userDetails as Record<string, unknown>).data\n || allData.userDetails;\n const details = userDetails as Record<string, unknown> | undefined;\n if (details) {\n userEmail = userEmail || (details.email as string) || (details.emailAddress as string) || \"\";\n userName = userName || (details.name as string) || (details.fullName as string) || buildNameFromFirstLast(details) || \"\";\n userRole = userRole || (details.role as string) || (details.userRole as string) || \"\";\n }\n }\n\n if (allData.user) {\n const u = (allData.user as Record<string, unknown>).user\n || (allData.user as Record<string, unknown>).data\n || (allData.user as Record<string, unknown>).currentUser\n || allData.user;\n const userData = u as Record<string, unknown> | undefined;\n if (userData) {\n userEmail = userEmail || (userData.email as string) || (userData.emailAddress as string) || \"\";\n userName = userName || (userData.name as string) || (userData.fullName as string) || buildNameFromFirstLast(userData) || \"\";\n userRole = userRole || (userData.role as string) || (userData.userRole as string) || \"\";\n }\n }\n\n if (allData.profile) {\n const p = (allData.profile as Record<string, unknown>).user\n || (allData.profile as Record<string, unknown>).data\n || allData.profile;\n const profileData = p as Record<string, unknown> | undefined;\n if (profileData) {\n userEmail = userEmail || (profileData.email as string) || (profileData.emailAddress as string) || \"\";\n userName = userName || (profileData.name as string) || (profileData.fullName as string) || buildNameFromFirstLast(profileData) || \"\";\n userRole = userRole || (profileData.role as string) || (profileData.userRole as string) || \"\";\n }\n }\n\n const avatarSrc =\n storedUser?.avatar ??\n (allData.auth as Record<string, unknown> | undefined)?.avatar ??\n (allData.profile as Record<string, unknown> | undefined)?.avatar;\n const initialsVal =\n storedUser?.initials ??\n (allData.auth as Record<string, unknown> | undefined)?.initials ??\n (allData.profile as Record<string, unknown> | undefined)?.initials;\n return {\n name: userName || \"\",\n email: userEmail || \"\",\n role: userRole || \"\",\n avatar: typeof avatarSrc === \"string\" ? avatarSrc : undefined,\n initials: typeof initialsVal === \"string\" ? initialsVal : undefined,\n };\n });\n\n const [notificationCount, setNotificationCount] = React.useState<number>(() => {\n const count = getNotificationCountFromStorage();\n return count !== null && count !== undefined ? count : 0;\n });\n \n const [messageCount, setMessageCount] = React.useState<number | undefined>(() => {\n return getMessageCountFromStorage() ?? undefined;\n });\n\n // State for profile picture blob URL\n const [profilePictureBlobUrl, setProfilePictureBlobUrl] = React.useState<string | null>(null);\n\n // Fetch profile picture from API when component mounts or user data changes\n React.useEffect(() => {\n const fetchProfilePicture = async () => {\n const token = accessTokenProp ?? getAccessTokenForRequest();\n const blobUrl = await fetchProfilePictureAsBlobUrl(undefined, token ?? undefined);\n if (blobUrl) {\n // Clean up previous blob URL if it exists\n setProfilePictureBlobUrl((prevUrl) => {\n if (prevUrl) {\n URL.revokeObjectURL(prevUrl);\n }\n return blobUrl;\n });\n }\n };\n\n fetchProfilePicture();\n\n // Cleanup function to revoke blob URL when component unmounts or effect re-runs\n return () => {\n setProfilePictureBlobUrl((prevUrl) => {\n if (prevUrl) {\n URL.revokeObjectURL(prevUrl);\n }\n return null;\n });\n };\n }, [accessTokenProp]); // Refetch when accessToken prop changes (e.g. after login)\n\n React.useEffect(() => {\n const allData = getAllDataFromStorage();\n let userName = \"\";\n let userEmail = \"\";\n let userRole = \"\";\n let userAvatar: string | undefined;\n let userInitials: string | undefined;\n\n const buildNameFromFirstLast = (obj: Record<string, unknown> | null | undefined): string => {\n if (!obj || typeof obj !== \"object\") return \"\";\n const first = (obj.firstName ?? obj.given_name ?? obj.first_name) as string | undefined;\n const last = (obj.lastName ?? obj.family_name ?? obj.last_name) as string | undefined;\n return [first, last].filter(Boolean).join(\" \").trim();\n };\n\n const storedUser = getUserDataFromStorage();\n if (storedUser) {\n userName = storedUser.name || \"\";\n userEmail = userEmail || storedUser.email || \"\";\n userRole = userRole || storedUser.role || \"\";\n userAvatar = storedUser.avatar;\n userInitials = storedUser.initials;\n }\n\n if (allData.decodedToken) {\n const token = allData.decodedToken as Record<string, unknown>;\n userEmail = userEmail || (token.sub as string) || (token.email as string) || \"\";\n const tokenName = (token.name as string) || buildNameFromFirstLast(token);\n userName = userName || (tokenName || \"\");\n userRole = userRole || (token.role as string) || \"\";\n }\n\n if (allData.auth) {\n const auth = allData.auth as Record<string, unknown>;\n userEmail = userEmail || (auth.email as string) || (auth.sub as string) || \"\";\n userName = userName || (auth.name as string) || buildNameFromFirstLast(auth) || \"\";\n userRole = userRole || (auth.role as string) || (auth.activeRole as string) || \"\";\n userAvatar = userAvatar || (auth.avatar as string) || undefined;\n userInitials = userInitials || (auth.initials as string) || undefined;\n }\n\n if (allData.userDetails) {\n const userDetails = (allData.userDetails as Record<string, unknown>).user\n || (allData.userDetails as Record<string, unknown>).data\n || allData.userDetails;\n const details = userDetails as Record<string, unknown> | undefined;\n if (details) {\n userEmail = userEmail || (details.email as string) || (details.emailAddress as string) || \"\";\n userName = userName || (details.name as string) || (details.fullName as string) || buildNameFromFirstLast(details) || \"\";\n userRole = userRole || (details.role as string) || (details.userRole as string) || \"\";\n userAvatar = userAvatar || (details.avatar as string) || (details.profilePicture as string) || undefined;\n userInitials = userInitials || (details.initials as string) || undefined;\n }\n }\n\n if (allData.user) {\n const u = (allData.user as Record<string, unknown>).user\n || (allData.user as Record<string, unknown>).data\n || (allData.user as Record<string, unknown>).currentUser\n || allData.user;\n const userData = u as Record<string, unknown> | undefined;\n if (userData) {\n userEmail = userEmail || (userData.email as string) || (userData.emailAddress as string) || \"\";\n userName = userName || (userData.name as string) || (userData.fullName as string) || buildNameFromFirstLast(userData) || \"\";\n userRole = userRole || (userData.role as string) || (userData.userRole as string) || \"\";\n userAvatar = userAvatar || (userData.avatar as string) || (userData.profilePicture as string) || undefined;\n userInitials = userInitials || (userData.initials as string) || undefined;\n }\n }\n\n if (allData.profile) {\n const p = (allData.profile as Record<string, unknown>).user\n || (allData.profile as Record<string, unknown>).data\n || allData.profile;\n const profileData = p as Record<string, unknown> | undefined;\n if (profileData) {\n userEmail = userEmail || (profileData.email as string) || (profileData.emailAddress as string) || \"\";\n userName = userName || (profileData.name as string) || (profileData.fullName as string) || buildNameFromFirstLast(profileData) || \"\";\n userRole = userRole || (profileData.role as string) || (profileData.userRole as string) || \"\";\n userAvatar = userAvatar || (profileData.avatar as string) || (profileData.profilePicture as string) || undefined;\n userInitials = userInitials || (profileData.initials as string) || undefined;\n }\n }\n\n setUser({\n name: userName || \"\",\n email: userEmail || \"\",\n role: userRole || \"\",\n avatar: profilePictureBlobUrl || userAvatar,\n initials: userInitials,\n });\n \n // Update online status\n if (allData.auth?.isOnline !== undefined) {\n setIsOnlineStatus(allData.auth.isOnline);\n } else if (allData.userDetails?.isOnline !== undefined) {\n setIsOnlineStatus(allData.userDetails.isOnline);\n } else if (allData.user?.isOnline !== undefined) {\n setIsOnlineStatus(allData.user.isOnline);\n } else if (allData.profile?.isOnline !== undefined) {\n setIsOnlineStatus(allData.profile.isOnline);\n }\n \n const notifCount = getNotificationCountFromStorage();\n setNotificationCount(notifCount !== null && notifCount !== undefined ? notifCount : 0);\n \n const msgCount = getMessageCountFromStorage();\n setMessageCount(msgCount ?? undefined);\n\n // Initialize language from props if provided\n if (languageProp && languageProp !== currentLanguage) {\n setCurrentLanguage(languageProp as SupportedLanguage);\n setI18nLocaleToStorage(languageProp);\n }\n }, [languageProp, profilePictureBlobUrl]); // Also update when profile picture is fetched\n\n const finalRoutes = DEFAULT_ROUTES;\n \n // Get online status from localStorage dynamically\n const [isOnlineStatus, setIsOnlineStatus] = React.useState<boolean>(() => {\n const allData = getAllDataFromStorage();\n if (allData.auth?.isOnline !== undefined) {\n return allData.auth.isOnline;\n }\n if (allData.userDetails?.isOnline !== undefined) {\n return allData.userDetails.isOnline;\n }\n if (allData.user?.isOnline !== undefined) {\n return allData.user.isOnline;\n }\n if (allData.profile?.isOnline !== undefined) {\n return allData.profile.isOnline;\n }\n // Default to true if not specified (for backward compatibility)\n return true;\n });\n \n const notificationCountValue = notificationCount;\n \n const isMobileMenuOpen = Boolean(mobileMoreAnchorEl);\n\n const OnlineBadge = styled(Badge)(({ theme }) => ({\n \"& .MuiBadge-badge\": {\n backgroundColor: \"#44b700\",\n color: \"#44b700\",\n boxShadow: `0 0 0 2px ${theme.palette.background.paper}`,\n width: 12,\n height: 12,\n borderRadius: \"50%\",\n },\n }));\n\n const OfflineBadge = styled(Badge)(({ theme }) => ({\n \"& .MuiBadge-badge\": {\n backgroundColor: \"gray\",\n color: \"gray\",\n boxShadow: `0 0 0 2px ${theme.palette.background.paper}`,\n width: 12,\n height: 12,\n borderRadius: \"50%\",\n },\n }));\n\n const handleProfileMenuOpen = (event: React.MouseEvent<HTMLElement>) => {\n setAnchorEl(event.currentTarget);\n };\n\n const handleMobileMenuClose = () => {\n setMobileMoreAnchorEl(null);\n };\n\n const handleMobileMenuOpen = (event: React.MouseEvent<HTMLElement>) => {\n setMobileMoreAnchorEl(event.currentTarget);\n };\n\n const open = Boolean(anchorEl);\n\n const handleClose = () => {\n setAnchorEl(null);\n };\n\n const handleSettingsClick = () => {\n handleClose();\n const path = finalRoutes.settings.startsWith('/') \n ? finalRoutes.settings \n : `/${finalRoutes.settings}`;\n window.location.href = path;\n };\n\n const handleProfileClick = () => {\n handleClose();\n const path = finalRoutes.profile.startsWith('/') \n ? finalRoutes.profile \n : `/${finalRoutes.profile}`;\n window.location.href = path;\n };\n\n const handleSignOutClick = () => {\n handleClose();\n try {\n localStorage.clear();\n sessionStorage.clear();\n } catch (e) {\n console.warn(\"Clear storage on logout:\", e);\n }\n const path = finalRoutes.logout.startsWith('/') \n ? finalRoutes.logout \n : `/${finalRoutes.logout}`;\n window.location.href = path;\n };\n\n const menuId = \"primary-account-menu\";\n\n const getInitials = () => {\n if (user.initials) return user.initials;\n return user.name\n .split(\" \")\n .map((n) => n[0])\n .join(\"\")\n .toUpperCase()\n .slice(0, 2);\n };\n\n // Check if user has permission to see settings (Account Owner, Account Admin, or Global Admin)\n const canViewSettings = React.useMemo(() => {\n const allData = getAllDataFromStorage();\n let userRole = \"\";\n \n // Get role from decoded token\n if (allData.decodedToken?.role) {\n userRole = allData.decodedToken.role;\n }\n // Get role from auth data\n else if (allData.auth?.role) {\n userRole = allData.auth.role;\n }\n // Get role from user data\n else if (user.role) {\n userRole = user.role;\n }\n // Get role from userDetails\n else if (allData.userDetails) {\n const userDetails = allData.userDetails.user || allData.userDetails.data || allData.userDetails;\n userRole = userDetails?.role || userDetails?.userRole || \"\";\n }\n // Get role from user\n else if (allData.user) {\n const userData = allData.user.user || allData.user.data || allData.user.currentUser || allData.user;\n userRole = userData?.role || userData?.userRole || \"\";\n }\n \n // Normalize role for comparison (case-insensitive, handle spaces/underscores/hyphens)\n const normalizedRole = userRole.toLowerCase().trim().replace(/[_\\s-]+/g, \" \");\n const allowedRoles = [\n \"account owner\",\n \"account admin\",\n \"global admin\"\n ];\n \n // Check for exact match or if role starts with allowed role\n // This handles variations like \"Account Owner\", \"ACCOUNT_OWNER\", \"Account-Owner\", \"Account Owner - Manager\"\n return allowedRoles.some(allowedRole => {\n return normalizedRole === allowedRole || normalizedRole.startsWith(allowedRole + \" \");\n });\n }, [user.role]);\n\n const profileList = (\n <List\n className=\"profile-menu-section\"\n sx={{\n width: \"100%\",\n maxWidth: 360,\n pointerEvents: \"none\",\n }}\n component=\"div\"\n aria-hidden=\"true\"\n tabIndex={-1}\n >\n <ListItem alignItems=\"flex-start\" className=\"profile-menu-item\">\n <ListItemAvatar>\n {isOnlineStatus ? (\n <OnlineBadge\n overlap=\"circular\"\n anchorOrigin={{ vertical: \"bottom\", horizontal: \"right\" }}\n variant=\"dot\"\n title={t.online}\n aria-label={`${t.online} status badge`}\n data-testid=\"online-badge\"\n >\n <Avatar\n sx={{ bgcolor: deepOrange[500] }}\n alt={user.name}\n title={user.name}\n src={user.avatar}\n >\n {getInitials()}\n </Avatar>\n </OnlineBadge>\n ) : (\n <OfflineBadge\n overlap=\"circular\"\n anchorOrigin={{ vertical: \"bottom\", horizontal: \"right\" }}\n variant=\"dot\"\n title={t.offline}\n aria-label={`${t.offline} status badge`}\n data-testid=\"offline-badge\"\n >\n <Avatar\n sx={{ bgcolor: deepOrange[500] }}\n alt={user.name}\n title={user.name}\n src={user.avatar}\n >\n {getInitials()}\n </Avatar>\n </OfflineBadge>\n )}\n </ListItemAvatar>\n <ListItemText\n primary={\n <Typography className=\"profile-name\" component=\"span\">\n {user.name || user.email}\n </Typography>\n }\n secondary={\n <React.Fragment>\n {user.name && user.email ? (\n <Typography className=\"profile-email\" component=\"p\">\n {user.email}\n </Typography>\n ) : null}\n <Typography className=\"profile-role\" component=\"p\">\n {t.role}: {user.role}\n </Typography>\n </React.Fragment>\n }\n />\n </ListItem>\n </List>\n );\n\n const renderMenu = (\n <Menu\n anchorEl={anchorEl}\n id=\"account-menu\"\n open={open}\n onClose={handleClose}\n onClick={handleClose}\n slotProps={{\n paper: {\n elevation: 0,\n sx: {\n overflow: \"visible\",\n filter: \"drop-shadow(0px 2px 8px rgba(0,0,0,0.32))\",\n mt: 1.5,\n \"& .MuiAvatar-root\": {\n width: 32,\n height: 32,\n ml: -0.5,\n mr: 1,\n },\n \"&::before\": {\n content: '\"\"',\n display: \"block\",\n position: \"absolute\",\n top: 0,\n right: 14,\n width: 10,\n height: 10,\n bgcolor: \"background.paper\",\n transform: \"translateY(-50%) rotate(45deg)\",\n zIndex: 0,\n },\n },\n },\n }}\n transformOrigin={{ horizontal: \"right\", vertical: \"top\" }}\n anchorOrigin={{ horizontal: \"right\", vertical: \"bottom\" }}\n >\n {profileList}\n <Divider />\n <MenuItem onClick={handleProfileClick}>\n <ListItemIcon>\n <PersonOutlineOutlinedIcon fontSize=\"small\" />\n </ListItemIcon>\n {t.profile}\n </MenuItem>\n {canViewSettings && (\n <MenuItem onClick={handleSettingsClick}>\n <ListItemIcon>\n <SettingsOutlinedIcon fontSize=\"small\" />\n </ListItemIcon>\n {t.accountSettings}\n </MenuItem>\n )}\n <MenuItem onClick={handleSignOutClick}>\n <ListItemIcon>\n <LogoutOutlinedIcon fontSize=\"small\" />\n </ListItemIcon>\n {t.signOut}\n </MenuItem>\n </Menu>\n );\n\n const mobileMenuId = \"primary-account-menu-mobile\";\n const renderMobileMenu = (\n <Menu\n anchorEl={mobileMoreAnchorEl}\n anchorOrigin={{\n vertical: \"top\",\n horizontal: \"right\",\n }}\n id={mobileMenuId}\n keepMounted\n transformOrigin={{\n vertical: \"top\",\n horizontal: \"right\",\n }}\n open={isMobileMenuOpen}\n onClose={handleMobileMenuClose}\n >\n {messageCount !== undefined && (\n <MenuItem>\n <IconButton \n size=\"large\" \n aria-label={`show ${messageCount} new mails`}\n sx={{ color: '#1e2f97' }}\n >\n <Badge badgeContent={messageCount} color=\"error\">\n <MailIcon />\n </Badge>\n </IconButton>\n <p>{t.messages}</p>\n </MenuItem>\n )}\n {notificationCountValue > 0 && (\n <MenuItem>\n <IconButton\n size=\"large\"\n aria-label={`show ${notificationCountValue} new notifications`}\n sx={{ color: '#1e2f97' }}\n >\n <Badge badgeContent={notificationCount} color=\"error\">\n <NotificationsActiveOutlined />\n </Badge>\n </IconButton>\n <p>{t.notifications}</p>\n </MenuItem>\n )}\n <MenuItem onClick={handleProfileMenuOpen}>\n <IconButton\n size=\"large\"\n aria-label=\"account of current user\"\n aria-controls=\"primary-account-menu\"\n aria-haspopup=\"true\"\n sx={{ color: '#1e2f97' }}\n >\n {isOnlineStatus ? (\n <OnlineBadge\n overlap=\"circular\"\n anchorOrigin={{ vertical: \"bottom\", horizontal: \"right\" }}\n variant=\"dot\"\n title={t.online}\n aria-label={`${t.online} status badge`}\n data-testid=\"online-badge\"\n >\n <AccountCircle\n titleAccess={user.name}\n aria-label=\"User avatar\"\n />\n </OnlineBadge>\n ) : (\n <OfflineBadge\n overlap=\"circular\"\n anchorOrigin={{ vertical: \"bottom\", horizontal: \"right\" }}\n variant=\"dot\"\n title={t.offline}\n aria-label={`${t.offline} status badge`}\n data-testid=\"offline-badge\"\n >\n <AccountCircle\n titleAccess={user.name}\n aria-label=\"User avatar\"\n />\n </OfflineBadge>\n )}\n </IconButton>\n <p>{t.profile}</p>\n </MenuItem>\n </Menu>\n );\n\n return (\n <Box sx={{ flexGrow: 1 }} className=\"app-header\">\n <AppBar\n elevation={0}\n sx={{\n backgroundColor: \"#ffffff\",\n boxShadow: 'none !important',\n position: 'fixed',\n zIndex: 200,\n height: '65px',\n }}\n >\n <Toolbar sx={{ minHeight: '65px !important', height: '65px' }}>\n <IconButton\n size=\"large\"\n edge=\"start\"\n aria-label=\"open drawer\"\n sx={{ \n mr: '10px !important',\n color: '#1e2f97',\n padding: 0,\n paddingLeft: '14px',\n '&:hover': {\n backgroundColor: 'rgba(30, 47, 151, 0.04)',\n }\n }}\n onClick={() => {\n toggleDrawer();\n }}\n >\n {isDrawerOpen ? (\n <MenuOpenIcon fontSize=\"large\" />\n ) : (\n <MenuIcon fontSize=\"large\" />\n )}\n </IconButton>\n <Box\n component=\"div\"\n sx={{ \n display: { xs: \"none\", sm: \"flex\" },\n alignItems: 'center',\n height: '65px',\n }}\n data-testid=\"impactomics-logo-wrapper\"\n >\n <img \n src={ImpactomicsLogo} \n alt=\"Impactomics\" \n style={{ height: '23px', width: 'auto', display: 'block' }}\n />\n </Box>\n <Box sx={{ flexGrow: 1 }} />\n <Box sx={{ display: { xs: \"none\", md: \"flex\" }, alignItems: \"center\", gap: \"4px\" }}>\n <LanguageSelector\n currentLanguage={currentLanguage}\n onLanguageChange={(lang) => {\n setCurrentLanguage(lang);\n // The LanguageSelector component handles URL and localStorage updates\n }}\n />\n <IconButton\n size=\"large\"\n aria-label={notificationCountValue > 0 ? `show ${notificationCountValue} new notifications` : \"show notifications\"}\n sx={{\n color: '#1e2f97',\n '&:hover': {\n backgroundColor: 'rgba(30, 47, 151, 0.04)',\n }\n }}\n >\n <Badge badgeContent={notificationCountValue > 0 ? notificationCountValue : 0} color=\"error\">\n <NotificationsActiveOutlined />\n </Badge>\n </IconButton>\n <IconButton\n size=\"large\"\n edge=\"end\"\n aria-label=\"account of current user\"\n aria-controls={menuId}\n aria-haspopup=\"true\"\n onClick={handleProfileMenuOpen}\n sx={{\n color: '#1e2f97',\n '&:hover': {\n backgroundColor: 'rgba(30, 47, 151, 0.04)',\n }\n }}\n >\n {isOnlineStatus ? (\n <OnlineBadge\n overlap=\"circular\"\n anchorOrigin={{ vertical: \"bottom\", horizontal: \"right\" }}\n variant=\"dot\"\n title={t.online}\n aria-label={`${t.online} status badge`}\n data-testid=\"online-badge\"\n >\n <Avatar\n sx={{\n bgcolor: deepOrange[500],\n width: 20,\n height: 20,\n p: 1,\n }}\n alt={user.name}\n title={user.name}\n src={user.avatar}\n sizes=\"large\"\n >\n {getInitials()}\n </Avatar>\n </OnlineBadge>\n ) : (\n <OfflineBadge\n overlap=\"circular\"\n anchorOrigin={{ vertical: \"bottom\", horizontal: \"right\" }}\n variant=\"dot\"\n title={t.offline}\n aria-label={`${t.offline} status badge`}\n data-testid=\"offline-badge\"\n >\n <Avatar\n sx={{\n bgcolor: deepOrange[500],\n width: 20,\n height: 20,\n p: 1,\n }}\n alt={user.name}\n title={user.name}\n src={user.avatar}\n >\n {getInitials()}\n </Avatar>\n </OfflineBadge>\n )}\n </IconButton>\n </Box>\n <Box sx={{ display: { xs: \"flex\", md: \"none\" } }}>\n <IconButton\n size=\"large\"\n aria-label=\"show more\"\n aria-controls={mobileMenuId}\n aria-haspopup=\"true\"\n onClick={handleMobileMenuOpen}\n sx={{\n color: '#1e2f97',\n '&:hover': {\n backgroundColor: 'rgba(30, 47, 151, 0.04)',\n }\n }}\n >\n <MoreIcon />\n </IconButton>\n </Box>\n </Toolbar>\n </AppBar>\n {renderMobileMenu}\n {renderMenu}\n </Box>\n );\n};\n\nexport default AppHeader;\n\n"],"names":["React","_jsx","_jsxs","_Fragment","Button","Box","Menu","MenuItem","ListItemIcon","ListItemText","styled","Badge","List","ListItem","ListItemAvatar","Avatar","deepOrange","Typography","Divider","IconButton","AppBar","Toolbar"],"mappings":"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"}