{"version":3,"file":"UserAvatar.DTMXJsDc.mjs","names":["React.useState","React.useMemo"],"sources":["https:/framerusercontent.com/modules/xs6CnGGI4vfF0veDm68n/lo2xC025eoMM68Qq18Je/UserAvatar.js"],"sourcesContent":["import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import*as React from\"react\";import{addPropertyControls,ControlType,RenderTarget}from\"framer\";import{API_BASE}from\"https://framer.com/m/GlobalStore-5Rjw.js\";function getAuthStore(){if(typeof window===\"undefined\")return null;return window.__authStore||null;}function getAvatarUrl(store){if(!store)return null;return store.user?.image||store.member?.avatar||store.member?.avatar_url||store.member?.profile_photo_url||null;}function getUserName(store){if(!store)return null;if(store.member?.first_name&&store.member?.last_name){return`${store.member.first_name} ${store.member.last_name}`;}return store.user?.name||null;}function subscribeToAuthStore(callback){if(typeof window===\"undefined\")return()=>{};window.addEventListener(\"authPreviewChange\",callback);const listeners=window.__authStoreListeners;if(listeners){listeners.add(callback);}return()=>{window.removeEventListener(\"authPreviewChange\",callback);if(listeners){listeners.delete(callback);}};}async function fetchAuthData(){try{const res=await fetch(`${API_BASE}/api/me`,{credentials:\"include\"});if(res.ok){const data=await res.json();if(data.authenticated&&data.user){return{user:data.user,member:data.member};}}return null;}catch{return null;}}// ============================================================================\n// COLOR SCHEME HOOK\n// ============================================================================\nfunction useColorScheme(){const[scheme,setScheme]=React.useState(\"light\");React.useEffect(()=>{if(typeof window===\"undefined\")return;const mq=window.matchMedia(\"(prefers-color-scheme: dark)\");setScheme(mq.matches?\"dark\":\"light\");const h=e=>setScheme(e.matches?\"dark\":\"light\");mq.addEventListener(\"change\",h);return()=>mq.removeEventListener(\"change\",h);},[]);return scheme;}// ============================================================================\n// COMPONENT\n// ============================================================================\n/**\n * UserAvatar - Displays the current user's avatar image\n * \n * Fetches avatar from auth store (same as displayUserAvatar override)\n * but renders as a standard <img> element for reliable display.\n * \n * @framerSupportedLayoutWidth fixed\n * @framerSupportedLayoutHeight fixed\n * @framerIntrinsicWidth 80\n * @framerIntrinsicHeight 80\n */export default function UserAvatar(props){const{size=80,borderRadius=\"50%\",borderWidth=0,borderColor=\"#e5e7eb\",placeholderBgColor=\"#e5e7eb\",placeholderBgColorDark=\"#374151\",showPlaceholderIcon=true,style}=props;const isCanvas=RenderTarget.current()===RenderTarget.canvas;const colorScheme=useColorScheme();const isDark=colorScheme===\"dark\";// Read auth store synchronously on mount to avoid flash on remount/resize\nconst initialStore=isCanvas?null:getAuthStore();const hasInitialData=!!(initialStore?.initialized&&initialStore?.user);const[avatarUrl,setAvatarUrl]=React.useState(hasInitialData?getAvatarUrl(initialStore):null);const[userName,setUserName]=React.useState(hasInitialData?getUserName(initialStore):null);const[loading,setLoading]=React.useState(!hasInitialData&&!isCanvas);const[imageError,setImageError]=React.useState(false);// Fetch auth data if not available synchronously, and subscribe to changes\nReact.useEffect(()=>{if(isCanvas){setLoading(false);return;}let mounted=true;const loadAuthData=async()=>{// If we already got data synchronously, skip fetching\nconst store=getAuthStore();if(store?.initialized&&store?.user){if(mounted){setAvatarUrl(getAvatarUrl(store));setUserName(getUserName(store));setLoading(false);}return;}// Otherwise fetch from API\nconst data=await fetchAuthData();if(mounted&&data){setAvatarUrl(getAvatarUrl(data));setUserName(getUserName(data));}if(mounted){setLoading(false);}};loadAuthData();// Subscribe to auth changes\nconst unsubscribe=subscribeToAuthStore(()=>{const store=getAuthStore();if(store?.user){setAvatarUrl(getAvatarUrl(store));setUserName(getUserName(store));setImageError(false);}});// Listen for avatar changes from MemberSettings (cross-module via CustomEvent)\nconst avatarHandler=e=>{const detail=e.detail;const url=detail?.url??null;setAvatarUrl(url);setImageError(false);};window.addEventListener(\"avatarChanged\",avatarHandler);return()=>{mounted=false;unsubscribe();window.removeEventListener(\"avatarChanged\",avatarHandler);};},[isCanvas]);// Generate fallback avatar URL using initials\nconst fallbackUrl=React.useMemo(()=>{if(userName){return`https://api.dicebear.com/7.x/initials/svg?seed=${encodeURIComponent(userName)}&backgroundColor=F02F4E`;}return`https://api.dicebear.com/7.x/initials/svg?seed=User&backgroundColor=F02F4E`;},[userName]);const finalAvatarUrl=!imageError&&avatarUrl||fallbackUrl;const bgColor=isDark?placeholderBgColorDark:placeholderBgColor;// Container styles\nconst containerStyle={width:size,height:size,borderRadius,overflow:\"hidden\",flexShrink:0,position:\"relative\",backgroundColor:bgColor,border:borderWidth>0?`${borderWidth}px solid ${borderColor}`:undefined,...style};// Canvas placeholder\nif(isCanvas){return /*#__PURE__*/_jsx(\"div\",{style:containerStyle,children:/*#__PURE__*/_jsx(\"img\",{src:fallbackUrl,alt:\"User avatar\",style:{width:\"100%\",height:\"100%\",objectFit:\"cover\"}})});}// Loading state\nif(loading){return /*#__PURE__*/_jsx(\"div\",{style:containerStyle,children:showPlaceholderIcon&&/*#__PURE__*/_jsx(\"div\",{style:{width:\"100%\",height:\"100%\",display:\"flex\",alignItems:\"center\",justifyContent:\"center\"},children:/*#__PURE__*/_jsxs(\"svg\",{width:size*.5,height:size*.5,viewBox:\"0 0 24 24\",fill:\"none\",stroke:isDark?\"#6B7280\":\"#9CA3AF\",strokeWidth:\"1.5\",strokeLinecap:\"round\",strokeLinejoin:\"round\",children:[/*#__PURE__*/_jsx(\"circle\",{cx:\"12\",cy:\"8\",r:\"4\"}),/*#__PURE__*/_jsx(\"path\",{d:\"M4 21v-2a4 4 0 0 1 4-4h8a4 4 0 0 1 4 4v2\"})]})})});}// Render avatar image\nreturn /*#__PURE__*/_jsxs(\"div\",{className:\"m43-user-avatar\",tabIndex:0,role:\"img\",\"aria-label\":\"User avatar\",style:containerStyle,children:[/*#__PURE__*/_jsx(\"style\",{children:`\n                .m43-user-avatar:focus-visible {\n                    outline: none !important;\n                    box-shadow: 0 0 0 3px rgb(56, 189, 248);\n                }\n            `}),/*#__PURE__*/_jsx(\"img\",{src:finalAvatarUrl,alt:\"User avatar\",onError:()=>setImageError(true),style:{width:\"100%\",height:\"100%\",objectFit:\"cover\",display:\"block\"}})]});}addPropertyControls(UserAvatar,{size:{type:ControlType.Number,title:\"Size\",defaultValue:80,min:24,max:200,step:4},borderRadius:{type:ControlType.String,title:\"Border Radius\",defaultValue:\"50%\",description:\"Use '50%' for circle, or pixels like '12px'\"},borderWidth:{type:ControlType.Number,title:\"Border Width\",defaultValue:0,min:0,max:8,step:1},borderColor:{type:ControlType.Color,title:\"Border Color\",defaultValue:\"#e5e7eb\"},placeholderBgColor:{type:ControlType.Color,title:\"Placeholder Bg\",defaultValue:\"#e5e7eb\"},placeholderBgColorDark:{type:ControlType.Color,title:\"Placeholder Bg (Dark)\",defaultValue:\"#374151\"},showPlaceholderIcon:{type:ControlType.Boolean,title:\"Show Icon\",defaultValue:true,description:\"Show user icon while loading\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"UserAvatar\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\",\"framerIntrinsicHeight\":\"80\",\"framerSupportedLayoutHeight\":\"fixed\",\"framerIntrinsicWidth\":\"80\",\"framerSupportedLayoutWidth\":\"fixed\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./UserAvatar.map"],"mappings":"2QAAqN,SAAS,GAAc,CAA4C,OAAjC,IAAS,OAAmB,KAAY,EAAO,aAAa,KAAM,SAAS,EAAa,EAAM,CAAuB,OAAlB,IAAyB,EAAM,MAAM,OAAO,EAAM,QAAQ,QAAQ,EAAM,QAAQ,YAAY,EAAM,QAAQ,oBAA7F,KAAsH,SAAS,EAAY,EAAM,CAA2I,OAAtI,EAAqB,EAAM,QAAQ,YAAY,EAAM,QAAQ,UAAiB,GAAG,EAAM,OAAO,WAAW,GAAG,EAAM,OAAO,YAAoB,EAAM,MAAM,MAAM,KAAlJ,KAAwJ,SAAS,EAAqB,EAAS,CAAC,GAAU,IAAS,OAAY,UAAU,GAAG,EAAO,iBAAiB,oBAAoB,EAAS,CAAC,IAAM,EAAU,EAAO,qBAA4D,OAApC,GAAW,EAAU,IAAI,EAAS,KAAY,CAAC,EAAO,oBAAoB,oBAAoB,EAAS,CAAI,GAAW,EAAU,OAAO,EAAS,EAAK,eAAe,GAAe,CAAC,GAAG,CAAC,IAAM,EAAI,MAAM,MAAM,GAAG,EAAS,SAAS,CAAC,YAAY,UAAU,CAAC,CAAC,GAAG,EAAI,GAAG,CAAC,IAAM,EAAK,MAAM,EAAI,MAAM,CAAC,GAAG,EAAK,eAAe,EAAK,KAAM,MAAM,CAAC,KAAK,EAAK,KAAK,OAAO,EAAK,OAAO,CAAG,OAAO,UAAW,CAAC,OAAO,MAGtuC,SAAS,GAAgB,CAAC,GAAK,CAAC,EAAO,GAAWA,EAAe,QAAQ,CAA8R,OAA7R,MAAoB,CAAC,GAAU,IAAS,OAAY,OAAO,IAAM,EAAG,EAAO,WAAW,+BAA+B,CAAC,EAAU,EAAG,QAAQ,OAAO,QAAQ,CAAC,IAAM,EAAE,GAAG,EAAU,EAAE,QAAQ,OAAO,QAAQ,CAAiC,OAAhC,EAAG,iBAAiB,SAAS,EAAE,KAAW,EAAG,oBAAoB,SAAS,EAAE,EAAG,EAAE,CAAC,CAAQ,EAa3W,SAAwB,EAAW,EAAM,CAAC,GAAK,CAAC,OAAK,GAAG,eAAa,MAAM,cAAY,EAAE,cAAY,UAAU,qBAAmB,UAAU,yBAAuB,UAAU,sBAAoB,GAAK,SAAO,EAAY,EAAS,EAAa,SAAS,GAAG,EAAa,OAAgD,EAAvB,GAAgB,GAA4B,OAC1U,EAAa,EAAS,KAAK,GAAc,CAAO,EAAe,CAAC,EAAE,GAAc,aAAa,GAAc,MAAW,CAAC,EAAU,GAAcA,EAAe,EAAe,EAAa,EAAa,CAAC,KAAK,CAAM,CAAC,EAAS,GAAaA,EAAe,EAAe,EAAY,EAAa,CAAC,KAAK,CAAM,CAAC,EAAQ,GAAYA,EAAe,CAAC,GAAgB,CAAC,EAAS,CAAM,CAAC,EAAW,GAAeA,EAAe,GAAM,CACxa,MAAoB,CAAC,GAAG,EAAS,CAAC,EAAW,GAAM,CAAC,OAAQ,IAAI,EAAQ,IAAwB,SAAS,CACzG,IAAM,EAAM,GAAc,CAAC,GAAG,GAAO,aAAa,GAAO,KAAK,CAAI,IAAS,EAAa,EAAa,EAAM,CAAC,CAAC,EAAY,EAAY,EAAM,CAAC,CAAC,EAAW,GAAM,EAAE,OAChK,IAAM,EAAK,MAAM,GAAe,CAAI,GAAS,IAAM,EAAa,EAAa,EAAK,CAAC,CAAC,EAAY,EAAY,EAAK,CAAC,EAAK,GAAS,EAAW,GAAM,IAAkB,CACnK,IAAM,EAAY,MAAyB,CAAC,IAAM,EAAM,GAAc,CAAI,GAAO,OAAM,EAAa,EAAa,EAAM,CAAC,CAAC,EAAY,EAAY,EAAM,CAAC,CAAC,EAAc,GAAM,GAAI,CAC3K,EAAc,GAAG,CAAmD,EAArC,EAAE,QAAyB,KAAK,KAAsB,CAAC,EAAc,GAAM,EAA0D,OAAvD,EAAO,iBAAiB,gBAAgB,EAAc,KAAW,CAAC,EAAQ,GAAM,GAAa,CAAC,EAAO,oBAAoB,gBAAgB,EAAc,GAAK,CAAC,EAAS,CAAC,CAC1R,IAAM,EAAYC,MAAsB,EAAgB,kDAAkD,mBAAmB,EAAS,CAAC,yBAAgC,6EAA+E,CAAC,EAAS,CAAC,CAAO,EAAe,CAAC,GAAY,GAAW,EACzS,EAAe,CAAC,MAAM,EAAK,OAAO,EAAK,eAAa,SAAS,SAAS,WAAW,EAAE,SAAS,WAAW,gBAD4N,EAAO,EAAuB,EAClO,OAAO,EAAY,EAAE,GAAG,EAAY,WAAW,IAAc,IAAA,GAAU,GAAG,EAAM,CAGrN,OAFG,EAA8B,EAAK,MAAM,CAAC,MAAM,EAAe,SAAsB,EAAK,MAAM,CAAC,IAAI,EAAY,IAAI,cAAc,MAAM,CAAC,MAAM,OAAO,OAAO,OAAO,UAAU,QAAQ,CAAC,CAAC,CAAC,CAAC,CAC3L,EAA6B,EAAK,MAAM,CAAC,MAAM,EAAe,SAAS,GAAkC,EAAK,MAAM,CAAC,MAAM,CAAC,MAAM,OAAO,OAAO,OAAO,QAAQ,OAAO,WAAW,SAAS,eAAe,SAAS,CAAC,SAAsB,EAAM,MAAM,CAAC,MAAM,EAAK,GAAG,OAAO,EAAK,GAAG,QAAQ,YAAY,KAAK,OAAO,OAAO,EAAO,UAAU,UAAU,YAAY,MAAM,cAAc,QAAQ,eAAe,QAAQ,SAAS,CAAc,EAAK,SAAS,CAAC,GAAG,KAAK,GAAG,IAAI,EAAE,IAAI,CAAC,CAAc,EAAK,OAAO,CAAC,EAAE,2CAA2C,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAC/gB,EAAM,MAAM,CAAC,UAAU,kBAAkB,SAAS,EAAE,KAAK,MAAM,aAAa,cAAc,MAAM,EAAe,SAAS,CAAc,EAAK,QAAQ,CAAC,SAAS;;;;;cAKnK,CAAC,CAAc,EAAK,MAAM,CAAC,IAAI,EAAe,IAAI,cAAc,YAAY,EAAc,GAAK,CAAC,MAAM,CAAC,MAAM,OAAO,OAAO,OAAO,UAAU,QAAQ,QAAQ,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,sBAhC9H,IAA4B,IAAiE,IAA+D,CAgC5B,EAAoB,EAAW,CAAC,KAAK,CAAC,KAAK,EAAY,OAAO,MAAM,OAAO,aAAa,GAAG,IAAI,GAAG,IAAI,IAAI,KAAK,EAAE,CAAC,aAAa,CAAC,KAAK,EAAY,OAAO,MAAM,gBAAgB,aAAa,MAAM,YAAY,8CAA8C,CAAC,YAAY,CAAC,KAAK,EAAY,OAAO,MAAM,eAAe,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,YAAY,CAAC,KAAK,EAAY,MAAM,MAAM,eAAe,aAAa,UAAU,CAAC,mBAAmB,CAAC,KAAK,EAAY,MAAM,MAAM,iBAAiB,aAAa,UAAU,CAAC,uBAAuB,CAAC,KAAK,EAAY,MAAM,MAAM,wBAAwB,aAAa,UAAU,CAAC,oBAAoB,CAAC,KAAK,EAAY,QAAQ,MAAM,YAAY,aAAa,GAAK,YAAY,+BAA+B,CAAC,CAAC"}