{"version":3,"file":"FloatingChatButton.Cva7U3--.mjs","names":["useMemo","useState","MessageCircle"],"sources":["https:/framerusercontent.com/modules/V0AfVF50c2fZu8dKux6o/pwU3czevOQFgFI9JmSUA/FloatingChatButton.js"],"sourcesContent":["/* FloatingChatButton.tsx — ONE component for desktop/tablet/phone\n   - Always centered horizontally, pinned near bottom (safe-area aware)\n   - Works independently of parent layouts (position: fixed)\n   - Pure inline styles (no Tailwind required) → upload once, reuse on all breakpoints\n   - Brand color #a3b18a\n   - Optional unread badge via RPC count_unread_v2 (non-blocking)\n   - Responsive sizing built-in (mobile/tablet/desktop)\n*/\"use client\";import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{useEffect,useMemo,useState}from\"react\";import{createClient}from\"@supabase/supabase-js\";import{MessageCircle}from\"lucide-react\";/* ----------------------------- Config ----------------------------- */const SUPABASE_URL=\"https://xnwbfkrbikpcvfzfajah.supabase.co\";const SUPABASE_ANON_KEY=\"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Inhud2Jma3JiaWtwY3ZmemZhamFoIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NTIxODk1MzQsImV4cCI6MjA2Nzc2NTUzNH0.hPKNFC2BKPb1CX6o-8ZLh45-KEN5ijCHWzndAjWxq6o\";function useBrowserSupabase(){const isBrowser=typeof window!==\"undefined\";return useMemo(()=>isBrowser?createClient(SUPABASE_URL,SUPABASE_ANON_KEY):null,[isBrowser]);}async function detectIdentity(supabase){const{data:auth}=await supabase.auth.getUser();const uid=auth.user?.id;if(!uid)return null;const{data:prod}=await supabase.from(\"producers\").select(\"id, user_id\").eq(\"user_id\",uid).maybeSingle();if(prod)return{role:\"producer\",profile_id:prod.id};const{data:rest}=await supabase.from(\"restaurants\").select(\"id, user_id\").eq(\"user_id\",uid).maybeSingle();if(rest)return{role:\"restaurant\",profile_id:rest.id};const{data:cons}=await supabase.from(\"consumers\").select(\"id, user_id\").eq(\"user_id\",uid).maybeSingle();if(cons)return{role:\"consumer\",profile_id:cons.id};return null;}export default function FloatingChatButton({href=\"/chat\",label=\"Messages\",/** Base icon size; component auto-adjusts per breakpoint if sizeMobile/Tablet unset */size=44,sizeTablet,sizeMobile,showUnreadBadge=true,openInNewTab=false,bottom=24}){const supabase=useBrowserSupabase();const[me,setMe]=useState(null);const[unread,setUnread]=useState(0);const[vw,setVw]=useState(typeof window!==\"undefined\"?window.innerWidth:1200);// Track viewport width for responsive sizes\nuseEffect(()=>{if(typeof window===\"undefined\")return;const onResize=()=>setVw(window.innerWidth);window.addEventListener(\"resize\",onResize);return()=>window.removeEventListener(\"resize\",onResize);},[]);useEffect(()=>{if(!supabase||!showUnreadBadge)return;let mounted=true;(async()=>{try{const id=await detectIdentity(supabase);if(!mounted)return;setMe(id);if(id)await refreshUnread(id);}catch(e){// badge is optional — button still works\nconsole.warn(\"FloatingChatButton badge disabled:\",e);}})();const t=setInterval(()=>{if(me)refreshUnread(me);},3e4);return()=>{mounted=false;clearInterval(t);};// eslint-disable-next-line react-hooks/exhaustive-deps\n},[supabase,showUnreadBadge]);async function refreshUnread(identity){if(!supabase)return;const{data,error}=await supabase.rpc(\"count_unread_v2\",{p_role:identity.role,p_profile_id:identity.profile_id});if(!error&&typeof data===\"number\")setUnread(data);}// Choose size based on viewport (simple breakpoints: <640 mobile, <1024 tablet)\nconst iconSize=vw<640?sizeMobile??Math.max(36,size-8):vw<1024?sizeTablet??Math.max(40,size-4):size;const buttonSide=iconSize+20// padding around icon\n;const text=unread>99?\"99+\":String(unread);// Style objects (no external CSS)\nconst wrapStyle={position:\"fixed\",left:\"50%\",transform:\"translateX(-50%)\",bottom:`calc(${bottom}px + env(safe-area-inset-bottom, 0px))`,zIndex:9999,textDecoration:\"none\"};const btnStyle={position:\"relative\",width:buttonSide,height:buttonSide,borderRadius:9999,background:\"#a3b18a\",color:\"#ffffff\",display:\"inline-flex\",alignItems:\"center\",justifyContent:\"center\",boxShadow:\"0 8px 24px rgba(0,0,0,0.15)\",userSelect:\"none\",WebkitTapHighlightColor:\"transparent\",cursor:\"pointer\"};const badgeStyle={position:\"absolute\",top:-4,right:-4,minWidth:20,height:20,borderRadius:9999,background:\"#ffffff\",color:\"#a3b18a\",fontSize:11,lineHeight:\"20px\",textAlign:\"center\",padding:\"0 4px\",border:\"1px solid #a3b18a\",boxShadow:\"0 2px 6px rgba(0,0,0,0.12)\"};return /*#__PURE__*/_jsx(\"a\",{href:href,target:openInNewTab?\"_blank\":undefined,rel:openInNewTab?\"noopener noreferrer\":undefined,\"aria-label\":label,title:label,style:wrapStyle,children:/*#__PURE__*/_jsxs(\"div\",{style:btnStyle,children:[/*#__PURE__*/_jsx(MessageCircle,{style:{width:iconSize,height:iconSize}}),showUnreadBadge&&unread>0&&/*#__PURE__*/_jsx(\"span\",{style:badgeStyle,children:text})]})});}\nexport const __FramerMetadata__ = {\"exports\":{\"Identity\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"default\":{\"type\":\"reactComponent\",\"name\":\"FloatingChatButton\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"Role\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./FloatingChatButton.map"],"mappings":"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"}