{"version":3,"file":"WithInitialsFallback.CYj-dWdN.mjs","names":["useDeferredValue","useSyncExternalStore","useState","useMemo"],"sources":["https:/framerusercontent.com/modules/UWVDXuXouTeZgHkk3UX4/pqQSenLhQaVzU8lIHT6c/WithInitialsFallback.js"],"sourcesContent":["import{jsx as _jsx}from\"react/jsx-runtime\";import{forwardRef,startTransition,useDeferredValue,useEffect,useMemo,useState,useSyncExternalStore}from\"react\";// Create a Framer code override named withInitialsFallback for a canvas-native User Avatar instance:\n// keep canvas styling/structure editable, and switch variant by data availability:\n// - Avatar when avatar is present and usable\n// - Initials when avatar is unusable and initials are present/non-empty\n// - Fallback when both avatar and initials are unavailable\n// Handle avatar as string URL or object with src/srcSet.\nfunction getUsableAvatarSource(avatar){if(typeof avatar===\"string\"){return avatar.trim();}if(avatar&&typeof avatar===\"object\"){const candidate=avatar;if(typeof candidate.src===\"string\"&&candidate.src.trim()){return candidate.src.trim();}if(typeof candidate.srcSet===\"string\"&&candidate.srcSet.trim()){const firstEntry=candidate.srcSet.split(\",\")[0]?.trim()??\"\";const srcFromSrcSet=firstEntry.split(/\\s+/)[0]?.trim()??\"\";return srcFromSrcSet;}}return\"\";}function getUsableInitials(initials){if(typeof initials!==\"string\")return\"\";const normalizedInitials=initials.trim();if(!normalizedInitials)return\"\";return normalizedInitials;}function getCandidateAvatarFromProps(props){const fromAvatar=getUsableAvatarSource(props?.avatar);if(fromAvatar)return fromAvatar;const fromAvatarUrl=getUsableAvatarSource(props?.avatarUrl);if(fromAvatarUrl)return fromAvatarUrl;const fromAvatarImage=getUsableAvatarSource(props?.avatarImage);if(fromAvatarImage)return fromAvatarImage;return\"\";}function hasExplicitInitials(props){if(props?.initialsExplicit===true)return true;if(props?.initialsFromFetch===true)return true;if(props?.initialsSource===\"fetch\"||props?.initialsSource===\"explicit\"){return true;}return false;}function getFetchedUserData(data){if(!data||typeof data!==\"object\")return null;const candidate=data;const avatar=getUsableAvatarSource(candidate.avatar);const initials=getUsableInitials(candidate.initials);if(!avatar&&!initials)return null;return{avatar,initials};}function canRunUserFetchInBrowser(){return typeof window!==\"undefined\"&&[\"www.framer.com\",\"framer.com\"].includes(window.location.hostname);}function subscribeToHydrationChange(onStoreChange){// The hostname is only safe to read after hydration, so trigger one client\n// snapshot refresh instead of making it part of the hydration render.\nconst timeoutId=window.setTimeout(onStoreChange,0);return()=>window.clearTimeout(timeoutId);}export function withInitialsFallback(Component){return /*#__PURE__*/forwardRef(function WithInitialsFallback(props,ref){const canRunUserFetchSync=useSyncExternalStore(subscribeToHydrationChange,canRunUserFetchInBrowser,()=>false);const canRunUserFetch=useDeferredValue(canRunUserFetchSync);const[fetchedUser,setFetchedUser]=useState(null);const[userFetchResolved,setUserFetchResolved]=useState(!canRunUserFetch);useEffect(()=>{if(!canRunUserFetch){startTransition(()=>setUserFetchResolved(true));return;}let cancelled=false;const fetchUser=async()=>{try{const response=await fetch(\"https://api.framer.com/site/users/me\",{credentials:\"include\"});if(!response.ok){if(cancelled)return;startTransition(()=>{setFetchedUser(null);setUserFetchResolved(true);});return;}const data=await response.json();const parsedUser=getFetchedUserData(data);if(cancelled)return;startTransition(()=>{setFetchedUser(parsedUser);setUserFetchResolved(true);});}catch(_error){if(cancelled)return;startTransition(()=>{setFetchedUser(null);setUserFetchResolved(true);});}};fetchUser().catch(()=>{if(cancelled)return;startTransition(()=>{setFetchedUser(null);setUserFetchResolved(true);});});return()=>{cancelled=true;};},[canRunUserFetch]);const explicitAvatarSrc=getCandidateAvatarFromProps(props);const fetchedAvatarSrc=getUsableAvatarSource(fetchedUser?.avatar);const usableAvatarSrc=explicitAvatarSrc||fetchedAvatarSrc;const initialsAreExplicit=hasExplicitInitials(props);const initialsCandidate=initialsAreExplicit?props?.initialsValue??props?.initials:\"\";const explicitInitials=getUsableInitials(initialsCandidate);const fetchedInitials=getUsableInitials(fetchedUser?.initials);const usableInitials=explicitInitials||fetchedInitials;const[avatarFailed,setAvatarFailed]=useState(false);const[avatarPending,setAvatarPending]=useState(false);useEffect(()=>{startTransition(()=>setAvatarFailed(false));startTransition(()=>setAvatarPending(Boolean(usableAvatarSrc)));if(!usableAvatarSrc){startTransition(()=>setAvatarPending(false));return;}if(typeof window===\"undefined\"){startTransition(()=>setAvatarPending(false));return;}let cancelled=false;let resolved=false;let timeoutId=0;const image=new window.Image;const finishWithSuccess=()=>{if(cancelled||resolved)return;resolved=true;window.clearTimeout(timeoutId);startTransition(()=>{setAvatarFailed(false);setAvatarPending(false);});};const finishWithFailure=()=>{if(cancelled||resolved)return;resolved=true;window.clearTimeout(timeoutId);startTransition(()=>{setAvatarFailed(true);setAvatarPending(false);});};image.onload=()=>{if(typeof image.naturalWidth===\"number\"&&image.naturalWidth<=0){finishWithFailure();return;}finishWithSuccess();};image.onerror=()=>{finishWithFailure();};image.onabort=()=>{finishWithFailure();};timeoutId=window.setTimeout(()=>{finishWithFailure();},2500);image.src=usableAvatarSrc;return()=>{cancelled=true;window.clearTimeout(timeoutId);image.onload=null;image.onerror=null;image.onabort=null;image.src=\"\";};},[usableAvatarSrc]);const variant=useMemo(()=>{if(!userFetchResolved)return\"Loading\";if(usableAvatarSrc&&avatarPending)return\"Loading\";if(usableAvatarSrc){if(!avatarFailed)return\"Avatar\";return usableInitials?\"Initials\":\"Fallback\";}return usableInitials?\"Initials\":\"Fallback\";},[avatarFailed,avatarPending,usableAvatarSrc,usableInitials,userFetchResolved]);const{initials,initialsValue,avatar,avatarUrl,avatarImage,...restProps}=props;const forwardedInitials=usableInitials||undefined;const forwardedAvatar=usableAvatarSrc||undefined;return /*#__PURE__*/_jsx(Component,{ref:ref,...restProps,avatar:forwardedAvatar,avatarUrl:forwardedAvatar,avatarImage:forwardedAvatar,initials:forwardedInitials,initialsValue:forwardedInitials,variant:variant});});}\nexport const __FramerMetadata__ = {\"exports\":{\"withInitialsFallback\":{\"type\":\"reactHoc\",\"name\":\"withInitialsFallback\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./WithInitialsFallback.map"],"mappings":"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"}