1!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new e.Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="fc903472-bf26-423d-9e4a-50e3e8d8471f",e._sentryDebugIdIdentifier="sentry-dbid-fc903472-bf26-423d-9e4a-50e3e8d8471f")}catch(e){}}();"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[4047],{14047:(e,t,n)=>{n.r(t),n.d(t,{default:()=>a});var o=n(81613),r=n(33487);function c(e,t,n){if("undefined"==typeof sessionStorage)return console.log("\uD83D\uDCCA [Tracker] sessionStorage not available, using fallback ID"),"no-storage";let o="pitch-deck-session-id-".concat(e,"-").concat(t,"-").concat(n),r="pitch-deck-session-timestamp-".concat(e,"-").concat(t,"-").concat(n),c=sessionStorage.getItem(o),a=sessionStorage.getItem(r),l=Date.now();if(c&&a){let e=l-parseInt(a,10);if(e<3e5)return console.log("\uD83D\uDCCA [Tracker] Reusing session ID:",c,"(age: ".concat(Math.round(e/1e3),"s)")),sessionStorage.setItem(r,l.toString()),c;console.log("\uD83D\uDCCA [Tracker] Session expired (age:",Math.round(e/1e3),"s), creating new")}let i="undefined"!=typeof crypto&&crypto.randomUUID?crypto.randomUUID():Math.random().toString(36).slice(2)+Math.random().toString(36).slice(2);return sessionStorage.setItem(o,i),sessionStorage.setItem(r,l.toString()),console.log("\uD83D\uDCCA [Tracker] Created new session ID:",i,"for deck:",n),i}function a(e){let{dealId:t,pitchDeckUrl:n,investorEmail:a,investorFirstName:l,investorLastName:i,totalPages:s,enabled:u}=e;console.log("\uD83D\uDCCA [Tracker] Component initialized",{dealId:t,pitchDeckUrl:n,investorEmail:a,investorFirstName:l,investorLastName:i,totalPages:s,enabled:u});let d=(0,o.useRef)({dealId:t,investorEmail:a,investorFirstName:l,investorLastName:i,totalPages:s});d.current={dealId:t,investorEmail:a,investorFirstName:l,investorLastName:i,totalPages:s};let g=(0,o.useRef)(u);g.current=u;let D=(0,o.useRef)(c(t,a,n)),m=(0,o.useRef)(Date.now()),f=(0,o.useRef)(!1),T=(0,o.useRef)(new Map),p=(0,o.useRef)(!1),k=(0,o.useRef)(null);return(0,o.useEffect)(()=>{console.log("\uD83D\uDCCA [Tracker] Component mounted - initializing tracker");let e=c(t,a,n);D.current=e,m.current=Date.now(),f.current=!1;let o=Date.now();T.current.clear();let l=null,i=0,s=()=>{var e,t,n,c;if(!g.current){console.log("\uD83D\uDCCA [Tracker] Waiting for enabled=true, retrying in 500ms..."),++i<20?setTimeout(s,500):console.warn("\uD83D\uDCCA [Tracker] â Timed out waiting for enabled=true");return}let a=document.querySelectorAll(".react-pdf__Page");if(!a.length){if(i++,console.log("\uD83D\uDCCA [Tracker] Retry ".concat(i,"/").concat(20,": PDF pages not found yet, retrying in 500ms...")),i<20){setTimeout(s,500);return}console.warn("\uD83D\uDCCA [Tracker] â Failed to find PDF pages after 20 retries (10 seconds)");return}console.log("\uD83D\uDCCA [Tracker] â
Found ".concat(a.length," PDF pages - Initializing tracking")),a.forEach((e,t)=>{T.current.set(t+1,{enterTime:null,accumulated:0})});let u=(null===(e=a[0])||void 0===e?void 0:e.closest(".scrollable"))||(null===(t=a[0])||void 0===t?void 0:t.closest('[class*="pdf"]'))||(null===(c=a[0])||void 0===c?void 0:null===(n=c.parentElement)||void 0===n?void 0:n.parentElement);u?(k.current=u,console.log("\uD83D\uDCCA [Tracker] Found deck container for activation tracking:",u.className)):console.warn("\uD83D\uDCCA [Tracker] â ï¸ Could not find deck container for activation tracking"),l=function(e){let t=new Set,n=new Map;function o(){let t=Date.now()-e;if(console.log("\uD83D\uDCCA [Tracker] fireBeacon called",{alreadySent:f.current,sessionAge:"".concat((t/1e3).toFixed(1),"s"),sessionId:D.current}),f.current){console.log("\uD83D\uDCCA [Tracker] â Beacon already sent, skipping");return}if(t<2e3){console.log("\uD83D\uDCCA [Tracker] â ï¸ Session < 2s (Strict Mode protection), skipping beacon");return}f.current=!0,console.log("\uD83D\uDCCA [Tracker] \uD83D\uDD12 sentRef locked - no more beacons for this session");let n=d.current,o=function(){let e=Date.now(),t=[];T.current.forEach((n,o)=>{let r=n.accumulated;n.enterTime&&(r+=(e-n.enterTime)/1e3),t.push({page:o,duration:Math.round(r)})});let n=t.filter(e=>e.duration>0).sort((e,t)=>
1e.page-t.page);return console.log("\uD83D\uDCCA [Tracker] Page data calculated:",{totalPages:t.length,pagesWithDuration:n.length,data:n}),n}(),c=o.reduce((e,t)=>e+t.duration,0);if(0===c){console.log("\uD83D\uDCCA [Tracker] â ï¸ No tracking data (0s duration), skipping beacon");return}let a={dealId:n.dealId,email:n.investorEmail,firstName:n.investorFirstName,lastName:n.investorLastName,sessionId:D.current,totalDuration:c,pages:o,userAgent:navigator.userAgent};console.log("\uD83D\uDCCA [Tracker] \uD83D\uDE80 Sending tracking data:",{...a,totalDurationNote:"".concat(c,"s (sum of ").concat(o.length," page durations)")});try{let e=new Blob([JSON.stringify(a)],{type:"application/json"});navigator.sendBeacon("".concat(r.H$,"/deals/").concat(n.dealId,"/pitch-deck-analytics/track"),e)?console.log("\uD83D\uDCCA [Tracker] â
Beacon queued successfully",{pages:o.length,totalDuration:"".concat(c,"s")}):console.warn("\uD83D\uDCCA [Tracker] â ï¸ Beacon failed to queue")}catch(e){console.error("\uD83D\uDCCA [Tracker] â Error sending beacon:",e)}}console.log("\uD83D\uDCCA [Tracker] Setting up IntersectionObserver and event listeners");let c=new Set,a=!0,l=!0;console.log("\uD83D\uDCCA [Tracker] Initial state: active =",!0,"windowHasFocus =",!0);let i=null;k.current&&(i=function(e){let t=()=>{if(!p.current){p.current=!0,console.log("\uD83D\uDCCA [Tracker] ⨠Deck activated by user interaction");let e=Date.now();c.forEach(t=>{let n=T.current.get(t);n&&!n.enterTime&&a&&(n.enterTime=e,console.log("\uD83D\uDCCA [Tracker] â±ï¸ Started timer for page ".concat(t," (activation)")))})}},n=()=>{p.current&&(p.current=!1,console.log("\uD83D\uDCCA [Tracker] \uD83D\uDD04 Deck deactivated (user left deck area)"),T.current.forEach((e,t)=>{if(e.enterTime){let n=(Date.now()-e.enterTime)/1e3;e.accumulated+=n,e.enterTime=null,console.log("\uD83D\uDCCA [Tracker] â¹ï¸ Paused page ".concat(t," (+").concat(n.toFixed(1),"s, total: ").concat(e.accumulated.toFixed(1),"s)"))}}))},o=t=>{p.current&&!e.contains(t.target)&&n()},r=["click","scroll","touchstart","keydown"];return r.forEach(n=>{e.addEventListener(n,t,{passive:!0,capture:!0})}),document.addEventListener("click",o,!0),e.addEventListener("mouseleave",n),console.log("\uD83D\uDCCA [Tracker] Activation detection enabled (requires user interaction)"),()=>{r.forEach(n=>{e.removeEventListener(n,t,{capture:!0})}),document.removeEventListener("click",o,!0),e.removeEventListener("mouseleave",n)}}(k.current));let s=new IntersectionObserver(e=>{e.forEach(e=>{let t=n.get(e.target);if(!t){console.warn("\uD83D\uDCCA [Tracker] Could not find page number for element - not in map");return}let o=T.current.get(t);if(o||(console.log("\uD83D\uDCCA [Tracker] \uD83C\uDD95 Initializing timer for dynamically added page ".concat(t)),o={enterTime:null,accumulated:0},T.current.set(t,o)),e.isIntersecting)console.log("\uD83D\uDCCA [Tracker] \uD83D\uDC41ï¸ Page ".concat(t," became visible (").concat((100*e.intersectionRatio).toFixed(0),"% visible)")),c.add(t),a&&p.current?(o.enterTime=Date.now(),console.log("\uD83D\uDCCA [Tracker] â±ï¸ Started timer for page ".concat(t))):a&&!p.current?console.log("\uD83D\uDCCA [Tracker] Page ".concat(t," visible but deck not activated yet (waiting for interaction)")):console.log("\uD83D\uDCCA [Tracker] Tab not active, timer for page ".concat(t," will start on resume"));else{if(console.log("\uD83D\uDCCA [Tracker] \uD83D\uDE48 Page ".concat(t," became hidden")),c.delete(t),o.enterTime){let e=(Date.now()-o.enterTime)/1e3;o.accumulated+=e,o.enterTime=null,console.log("\uD83D\uDCCA [Tracker] â¹ï¸ Stopped timer for page ".concat(t," (+").concat(e.toFixed(1),"s, total: ").concat(o.accumulated.toFixed(1),"s)"))}0===c.size&&p.current&&(p.current=!1,console.log("\uD83D\uDCCA [Tracker] \uD83D\uDD04 Deck deactivated (scrolled out of view)"))}}),console.log("\uD83D\uDCCA [Tracker] Current visible pages:",Array.from(c))},{threshold:.3});function u(e){let o=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=[];return o&&e.length>=5&&(console.log("\uD83D\uDCCA [Tracker] \uD83D\uDD04 New viewer detected (".concat(e.length," pages), resetting tracker state")),t.forEach(e
1=>s.unobserve(e)),t.clear(),n.clear(),c.clear(),T.current.forEach((e,t)=>{if(e.enterTime){let n=(Date.now()-e.enterTime)/1e3;e.accumulated+=n,e.enterTime=null,console.log("\uD83D\uDCCA [Tracker] â¹ï¸ Paused page ".concat(t," for viewer switch (+").concat(n.toFixed(1),"s)"))}})),e.forEach(e=>{if(!t.has(e)){t.add(e),r.push(e);let o=e.getAttribute("data-page-number"),c=o?parseInt(o,10):0;c>0?(n.set(e,c),console.log("\uD83D\uDCCA [Tracker] Mapped element to page ".concat(c))):console.warn("\uD83D\uDCCA [Tracker] Failed to determine page number for element (no data-page-number attribute)"),s.observe(e)}}),r.length>0&&console.log("\uD83D\uDCCA [Tracker] \uD83D\uDD0D Now observing ".concat(r.length," new pages (total observed: ").concat(t.size,")")),r.length}let g=document.querySelectorAll(".react-pdf__Page");u(g),console.log("\uD83D\uDCCA [Tracker] IntersectionObserver attached to",g.length,"initial pages");let m=new MutationObserver(e=>{let o=[],r=[],l=!1,i=null;e.forEach(e=>{"childList"===e.type&&e.target instanceof Element&&e.target.classList.contains("react-pdf__Page")&&(l=!0,i=e.target),e.addedNodes.forEach(e=>{if(e instanceof Element&&e.classList.contains("react-pdf__Page"))o.push(e);else if(e instanceof Element){let t=e.querySelectorAll(".react-pdf__Page");t.length>0&&o.push(...Array.from(t))}}),e.removedNodes.forEach(e=>{if(e instanceof Element&&e.classList.contains("react-pdf__Page"))r.push(e);else if(e instanceof Element){let t=e.querySelectorAll(".react-pdf__Page");t.length>0&&r.push(...Array.from(t))}})}),l&&i&&(console.log("\uD83D\uDCCA [Tracker] \uD83D\uDD04 Page content changed, updating page number"),function(e){let t=e.getAttribute("data-page-number"),o=t?parseInt(t,10):0,r=n.get(e);if(o>0&&o!==r&&(console.log("\uD83D\uDCCA [Tracker] \uD83D\uDD04 Page element updated: page ".concat(r," â ").concat(o)),n.set(e,o),r&&c.has(r))){c.delete(r),c.add(o);let e=T.current.get(r);if(null==e?void 0:e.enterTime){let t=(Date.now()-e.enterTime)/1e3;e.accumulated+=t,e.enterTime=null,console.log("\uD83D\uDCCA [Tracker] â¹ï¸ Stopped timer for page ".concat(r," (+").concat(t.toFixed(1),"s)"))}let t=T.current.get(o);t||(t={enterTime:null,accumulated:0},T.current.set(o,t)),a&&p.current&&(t.enterTime=Date.now(),console.log("\uD83D\uDCCA [Tracker] â±ï¸ Started timer for page ".concat(o)))}}(i)),o.length>0&&(console.log("\uD83D\uDCCA [Tracker] \uD83C\uDD95 Detected ".concat(o.length," new PDF pages added to DOM")),u(o,o.length>=5)),r.length>0&&(console.log("\uD83D\uDCCA [Tracker] \uD83D\uDDD1ï¸ Detected ".concat(r.length," PDF pages removed from DOM")),r.forEach(e=>{let o=n.get(e);t.delete(e),n.delete(e),o&&c.delete(o)}),setTimeout(()=>{let e=document.querySelectorAll(".react-pdf__Page"),n=[];e.forEach(e=>{t.has(e)||n.push(e)}),n.length>0&&(console.log("\uD83D\uDCCA [Tracker] \uD83D\uDD04 Found ".concat(n.length," unobserved pages after removal, observing them")),u(n,!1))},100))});function v(){let e=!document.hidden&&l,t=a;if(a&&!e){a=!1;let e=document.hidden?"tab hidden":"window lost focus";console.log("\uD83D\uDCCA [Tracker] \uD83D\uDD34 Tab/Window became inactive (".concat(e,") - pausing timers")),T.current.forEach((e,t)=>{if(e.enterTime){let n=(Date.now()-e.enterTime)/1e3;e.accumulated+=n,e.enterTime=null,console.log("\uD83D\uDCCA [Tracker] Paused page ".concat(t," (+").concat(n.toFixed(1),"s, total: ").concat(e.accumulated.toFixed(1),"s)"))}})}else if(!a&&e){a=!0;let e=document.hidden?"tab visible":"window gained focus";console.log("\uD83D\uDCCA [Tracker] \uD83D\uDFE2 Tab/Window became active (".concat(e,") - resuming timers"));let t=Date.now(),n=0;c.forEach(e=>{let o=T.current.get(e);o&&!o.enterTime&&p.current?(o.enterTime=t,n++,console.log("\uD83D\uDCCA [Tracker] Resumed page ".concat(e," (accumulated: ").concat(o.accumulated.toFixed(1),"s)"))):!o||o.enterTime||p.current||console.log("\uD83D\uDCCA [Tracker] Page ".concat(e," visible but deck not activated (waiting for interaction)"))}),0===n&&console.log("\uD83D\uDCCA [Tracker] No visible pages to resume")}t!==a&&console.log("\uD83D\uDCCA [Tracker] Active state changed:",t,"â",a)}function h(){console.log("\uD83D\uDCCA [Tracker] \uD83D\uDD35 window.blur event fired"),l=!1,v()}function b(){console.log("\uD83D\uDCCA [Tracker] \uD83D\uDD35 window.focus event fired"),l=!0,v()}m.observe(document.body,{childList:!0,subtree:!0}),console.log("\uD83D\uDCCA [Tracker] MutationObserver enabled to detect new pages and content changes");let w=null;function C(){w&&clearTimeout(w),a||document.hidden||!l||(console.log("\uD83D\uDCCA [Tracker] User activity detected - resuming from idle"),a=!0,function(){console.log("\uD83D\uDCCA [Tracker] â¶ï¸ Resuming visible timers for pages:",Array.from(c));let e=Date.now(),t=0;
1c.forEach(n=>{let o=T.current.get(n);o&&!o.enterTime&&p.current?(o.enterTime=e,t++,console.log("\uD83D\uDCCA [Tracker] Resumed page ".concat(n))):!o||o.enterTime||p.current||console.log("\uD83D\uDCCA [Tracker] Page ".concat(n," visible but deck not activated (skipping resume)"))}),0===t&&console.log("\uD83D\uDCCA [Tracker] No timers to resume (either already running or no visible pages)")}()),w=setTimeout(()=>{if(a){let e;console.log("\uD83D\uDCCA [Tracker] \uD83D\uDE34 User idle for 60s - pausing tracking"),a=!1,console.log("\uD83D\uDCCA [Tracker] â¸ï¸ Pausing all timers"),e=0,T.current.forEach((t,n)=>{if(t.enterTime){let o=(Date.now()-t.enterTime)/1e3;t.accumulated+=o,t.enterTime=null,e++,console.log("\uD83D\uDCCA [Tracker] Paused page ".concat(n," (+").concat(o.toFixed(1),"s)"))}}),0===e&&console.log("\uD83D\uDCCA [Tracker] No active timers to pause")}},6e4)}let E=["scroll","mousemove","touchstart","keydown"];E.forEach(e=>document.addEventListener(e,C,{passive:!0})),C(),console.log("\uD83D\uDCCA [Tracker] Idle detection enabled (60s timeout)");let y=()=>{console.log("\uD83D\uDCCA [Tracker] \uD83D\uDCE4 beforeunload event - firing beacon"),o()},A=()=>{console.log("\uD83D\uDCCA [Tracker] \uD83D\uDCE4 pagehide event - firing beacon"),o()};return document.addEventListener("visibilitychange",v),window.addEventListener("blur",h),window.addEventListener("focus",b),window.addEventListener("beforeunload",y),window.addEventListener("pagehide",A),console.log("\uD83D\uDCCA [Tracker] Event listeners attached (visibilitychange, blur, focus, beforeunload, pagehide)"),()=>{console.log("\uD83D\uDCCA [Tracker] \uD83E\uDDF9 Cleaning up - disconnecting observers and removing listeners"),s.disconnect(),m.disconnect(),w&&clearTimeout(w),E.forEach(e=>document.removeEventListener(e,C)),document.removeEventListener("visibilitychange",v),window.removeEventListener("blur",h),window.removeEventListener("focus",b),window.removeEventListener("beforeunload",y),window.removeEventListener("pagehide",A),i&&i(),o()}}(o),console.log("\uD83D\uDCCA [Tracker] Tracking setup complete")};return s(),()=>{console.log("\uD83D\uDCCA [Tracker] Component unmounting - final cleanup"),l&&l()}},[]),null}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.