{"version":3,"file":"Activity_Tracker.CvnxZHEe.mjs","names":["React.useRef","React.useCallback"],"sources":["https:/framerusercontent.com/modules/wX5SybyMXXALk7TmxW34/IbChtb45cb6Xd7Mi9hxe/Activity_Tracker.js"],"sourcesContent":["import{jsx as _jsx}from\"react/jsx-runtime\";import*as React from\"react\";import{RenderTarget}from\"framer\";import{createClient}from\"@supabase/supabase-js\";const supabase=createClient(\"https://letjwhzwopngqqpujwoq.supabase.co\",\"sb_publishable_OSqyeLZWY6Z5iTJ2nbRC-Q_y6p4rIYF\");const HEARTBEAT_MS=45e3;function detectDevice(){const ua=(navigator.userAgent||\"\").toLowerCase();const platform=(navigator.platform||\"\").toLowerCase();let deviceType=\"Desktop\";if(ua.includes(\"ipad\")||ua.includes(\"tablet\")||ua.includes(\"nexus 7\")||ua.includes(\"nexus 10\")){deviceType=\"Tablet\";}else if(ua.includes(\"android\")||ua.includes(\"iphone\")||ua.includes(\"ipod\")||ua.includes(\"mobile\")){deviceType=\"Mobile\";}let osName=\"Unknown\";if(ua.includes(\"iphone\")||ua.includes(\"ipad\")||ua.includes(\"ipod\")){osName=\"iOS\";}else if(ua.includes(\"android\")){osName=\"Android\";}else if(ua.includes(\"windows\")||platform.includes(\"win\")){osName=\"Windows\";}else if(ua.includes(\"macintosh\")||ua.includes(\"mac os x\")||platform.includes(\"mac\")){osName=\"macOS\";}else if(ua.includes(\"linux\")){osName=\"Linux\";}let browserName=\"Browser\";if(ua.includes(\"samsungbrowser\")){browserName=\"Samsung Internet\";}else if(ua.includes(\"edg/\")){browserName=\"Edge\";}else if(ua.includes(\"crios\")||ua.includes(\"chrome/\")){browserName=\"Chrome\";}else if(ua.includes(\"fxios\")||ua.includes(\"firefox/\")){browserName=\"Firefox\";}else if(ua.includes(\"safari/\")&&!ua.includes(\"chrome\")&&!ua.includes(\"crios\")&&!ua.includes(\"android\")){browserName=\"Safari\";}return{deviceType,osName,browserName};}function areaFromPath(pathname){const path=pathname.toLowerCase();if(path.includes(\"challenge\"))return\"Challenges\";if(path.includes(\"banner\"))return\"Best Banner\";if(path.includes(\"scrim\"))return\"Scrims\";if(path.includes(\"archive\"))return\"Archives\";if(path.includes(\"leaderboard\"))return\"Leaderboards\";if(path.includes(\"hopchat\"))return\"HopChat\";if(path===\"/\"||!path)return\"Home\";return pathname.split(\"/\").filter(Boolean).map(part=>{const words=part.replaceAll(\"-\",\" \").replaceAll(\"_\",\" \").split(\" \");return words.filter(Boolean).map(word=>word.charAt(0).toUpperCase()+word.slice(1)).join(\" \");}).join(\" › \");}function makeSessionId(){try{return crypto.randomUUID();}catch{return`web-${Date.now()}-${Math.random().toString(36).slice(2)}`;}}/**\n * Wild Bunnies — invisible website activity tracker.\n *\n * Place ONE instance in a shared Framer layout/header so it stays mounted\n * while members browse the site. It records only lightweight usage metadata:\n * page/area, App vs Website, device/browser and last-seen time.\n *\n * @framerSupportedLayoutWidth fixed\n * @framerSupportedLayoutHeight fixed\n * @framerIntrinsicWidth 1\n * @framerIntrinsicHeight 1\n */export default function WildBunniesActivityTracker({style}){const canvas=RenderTarget.current()===RenderTarget.canvas;const sessionIdRef=React.useRef(makeSessionId());const currentAreaRef=React.useRef(\"\");const currentPathRef=React.useRef(\"\");const userIdRef=React.useRef(\"\");const sendingRef=React.useRef(false);const record=React.useCallback(async(eventType,forcedArea)=>{if(canvas||sendingRef.current)return;if(!userIdRef.current)return;const path=window.location.pathname||\"/\";const area=forcedArea||currentAreaRef.current||areaFromPath(path);const{deviceType,osName,browserName}=detectDevice();sendingRef.current=true;try{await supabase.rpc(\"wb_record_member_activity\",{p_source:\"website\",p_area:area,p_page_path:path,p_device_type:deviceType,p_os_name:osName,p_browser_name:browserName,p_event_type:eventType,p_client_session_id:sessionIdRef.current});}catch{// Activity tracking must never interfere with the site.\n}finally{sendingRef.current=false;}},[canvas]);React.useEffect(()=>{if(canvas)return;let active=true;const start=async()=>{const{data}=await supabase.auth.getUser();if(!active)return;userIdRef.current=data.user?.id||\"\";currentPathRef.current=window.location.pathname||\"/\";currentAreaRef.current=areaFromPath(currentPathRef.current);if(userIdRef.current){void record(\"page_view\");}};void start();const{data:{subscription}}=supabase.auth.onAuthStateChange((_event,session)=>{userIdRef.current=session?.user?.id||\"\";if(userIdRef.current){currentPathRef.current=window.location.pathname||\"/\";currentAreaRef.current=areaFromPath(currentPathRef.current);void record(\"page_view\");}});return()=>{active=false;subscription.unsubscribe();};},[canvas,record]);React.useEffect(()=>{if(canvas)return;const onArea=event=>{const area=String(event.detail?.area||\"\").trim();if(!area||area===currentAreaRef.current)return;currentAreaRef.current=area;void record(\"area_change\",area);};window.addEventListener(\"wb-activity-area\",onArea);return()=>window.removeEventListener(\"wb-activity-area\",onArea);},[canvas,record]);React.useEffect(()=>{if(canvas)return;const heartbeat=()=>{if(document.visibilityState!==\"visible\")return;void record(\"heartbeat\");};const foreground=()=>{if(document.visibilityState!==\"visible\")return;void record(\"foreground\");};const timer=window.setInterval(heartbeat,HEARTBEAT_MS);window.addEventListener(\"focus\",foreground);document.addEventListener(\"visibilitychange\",foreground);return()=>{window.clearInterval(timer);window.removeEventListener(\"focus\",foreground);document.removeEventListener(\"visibilitychange\",foreground);};},[canvas,record]);React.useEffect(()=>{if(canvas)return;const timer=window.setInterval(()=>{const path=window.location.pathname||\"/\";if(path===currentPathRef.current)return;currentPathRef.current=path;currentAreaRef.current=areaFromPath(path);void record(\"page_view\");},1200);return()=>window.clearInterval(timer);},[canvas,record]);if(canvas){return /*#__PURE__*/_jsx(\"div\",{style:{...style,width:1,height:1,opacity:.35,background:\"#59a9ff\",borderRadius:999},title:\"Wild Bunnies Activity Tracker\"});}return /*#__PURE__*/_jsx(\"div\",{style:{...style,width:1,height:1,pointerEvents:\"none\"}});}\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"WildBunniesActivityTracker\",\"slots\":[],\"annotations\":{\"framerSupportedLayoutHeight\":\"fixed\",\"framerIntrinsicWidth\":\"1\",\"framerContractVersion\":\"1\",\"framerSupportedLayoutWidth\":\"fixed\",\"framerIntrinsicHeight\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Activity_Tracker.map"],"mappings":"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"}