1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[9406],{28415:(e,t,r)=>{r.d(t,{m:()=>l});var i=r(12115),n=r(91010);let s="ecomatin_visitor_id";var a=r(88230),o=r.n(a);let l=(e,t,r={})=>{let{impressionThreshold:a=.5,impressionDelay:l=1e3,enableHoverTracking:c=!0,hoverDelay:u=500,enableScrollDepthTracking:d=!1,scrollDepthThresholds:f=[25,50,75,100],enableTimeSpentTracking:v=!1,timeSpentInterval:h=5e3,onTrackingError:b,debug:g=!1}=r,m=(0,i.useRef)(!1),k=(0,i.useRef)(!1),p=(0,i.useRef)(new Set),w=(0,i.useRef)(void 0),y=(0,i.useRef)(void 0),x=(0,i.useRef)(void 0),R=(0,i.useRef)(null),S=(0,i.useRef)(""),T=(0,i.useRef)(0),C=(0,i.useRef)(0),I=(0,i.useRef)(!1),E=(0,i.useRef)([]),[M,_]=(0,i.useState)({impressions:0,clicks:0,hovers:0,views:0,timeSpent:0,maxScrollDepth:0,isVisible:!1});(0,i.useEffect)(()=>{S.current=`${Date.now()}-${Math.random().toString(36).substr(2,9)}`},[]),(0,i.useEffect)(()=>()=>{E.current.forEach(clearTimeout),E.current=[]},[]);let A=(0,i.useCallback)((e,t)=>{},[g]),P=(0,i.useCallback)(async(r,i,a=3)=>{if(e)try{let a,{visitor_id:o,device_type:l}={visitor_id:function(){try{let e=localStorage.getItem(s);return e||(e=(0,n.A)(),localStorage.setItem(s,e)),e}catch(e){return window.__visitorId||(window.__visitorId=(0,n.A)()),window.__visitorId}}(),device_type:(a=navigator.userAgent,/iPad/i.test(a)||"MacIntel"===navigator.platform&&navigator.maxTouchPoints>1||/Android/i.test(a)&&!/Mobile/i.test(a)||/Tablet|PlayBook|Kindle|Silk/i.test(a)?"tablet":/iPhone|iPod/i.test(a)||/Android/i.test(a)&&/Mobile/i.test(a)||/Mobile|Windows Phone|webOS|BlackBerry|Opera Mini|IEMobile/i.test(a)?"mobile":/Smart-?TV|TV|WebOS|Tizen|BRAVIA|CrKey|Roku|AppleTV|Fire TV|Vizio/i.test(a)?"tv":"desktop")},c={adId:e.id,eventType:r,position:t,sessionId:S.current,referrer:document.referrer,visitorId:o,deviceType:l,metadata:{...i,timestamp:new Date().toISOString(),url:window.location.href,viewport:{width:window.innerWidth,height:window.innerHeight}}};A(`Tracking ${r} event`,c);let u=await fetch("/api/ads/track",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(c)});if(!u.ok)throw Error(`HTTP error! status: ${u.status}`);_(e=>{let t={};switch(r){case"impression":t.impressions=e.impressions+1;break;case"click":t.clicks=e.clicks+1;break;case"hover":t.hovers=e.hovers+1;break;case"view":t.views=e.views+1}return{...e,...t}}),A(`Successfully tracked ${r} event`)}catch(e){A(`Error tracking ${r} event`,e),a>0?(A(`Retrying... (${a} attempts left)`),E.current.push(setTimeout(()=>P(r,i,a-1),1e3))):(console.error("Failed to track ad event after retries:",e),b?.(e))}},[e,t,A,b]),D=(0,i.useCallback)(async()=>{m.current||(m.current=!0,await P("impression",{visibilityRatio:1,triggeredByClick:!0})),P("click",{clickPosition:R.current?.getBoundingClientRect()})},[P]),V=(0,i.useCallback)(()=>{c&&!k.current&&(k.current=!0,P("hover"))},[P,c]),B=(0,i.useCallback)(()=>{P("view")},[P]),$=(0,i.useMemo)(()=>o()(e=>{p.current.has(e)||(p.current.add(e),P("scroll",{depth:e}),_(t=>({...t,maxScrollDepth:Math.max(t.maxScrollDepth,e)})))},300),[P]),j=(0,i.useCallback)(()=>{I.current&&v&&(Date.now(),T.current,C.current+=h/1e3,P("time_spent",{seconds:C.current}),_(e=>({...e,timeSpent:C.current})))},[P,v,h]),N=(0,i.useCallback)(()=>{c&&!k.current&&(y.current=setTimeout(()=>{V()},u))},[V,c,u]),O=(0,i.useCallback)(()=>{y.current&&(clearTimeout(y.current),y.current=void 0)},[]);return(0,i.useEffect)(()=>{if(!e||!R.current)return;let t=new IntersectionObserver(e=>{e.forEach(e=>{let t=I.current;if(I.current=e.isIntersecting,_(t=>({...t,isVisible:e.isIntersecting})),e.isIntersecting&&e.intersectionRatio>=a)t||(T.current=Date.now(),A("Ad entered viewport")),m.current||w.current||(w.current=setTimeout(()=>{!m.current&&I.current&&(m.current=!0,P("impression",{visibilityRatio:e.intersectionRatio}))},l));else{if(t&&v){let e=Math.round((Date.now()-T.current)/1e3);C.current+=e,A(`Ad left viewport after ${e}s`)}w.current&&(clearTimeout(w.current),w.current=void 0)}})},{threshold:[0,.25,.5,.75,1],rootMargin:"0px"});return t.observe(R.current),()=>{t.disconnect(),w.current&&clearTimeout(w.current)}},[e,a,l,P,v,A]),(0,i.useEffect)(()=>
1{if(!d||!R.current)return;let e=()=>{if(!R.current||!I.current)return;let e=R.current.getBoundingClientRect(),t=window.innerHeight,r=Math.round(Math.max(0,Math.min(e.bottom,t)-Math.max(e.top,0))/e.height*100);for(let e of f)if(r>=e&&!p.current.has(e)){$(e);break}};return window.addEventListener("scroll",e,{passive:!0}),e(),()=>{window.removeEventListener("scroll",e)}},[d,f,$]),(0,i.useEffect)(()=>{if(v)return x.current=setInterval(j,h),()=>{x.current&&clearInterval(x.current)}},[v,h,j]),(0,i.useEffect)(()=>()=>{v&&C.current>0&&P("time_spent",{seconds:C.current,final:!0})},[v,P]),{elementRef:R,trackClick:D,trackHover:V,trackView:B,metrics:M,isVisible:M.isVisible,handlers:{onClick:D,onMouseEnter:N,onMouseLeave:O}}}},58717:(e,t,r)=>{r.d(t,{BN:()=>n,kP:()=>o,kX:()=>a,yY:()=>s});let i={top:3.88,bottom:1240/177,middle:3.88,right:.5,"in-article-pub":null,"mobile-popup":null},n={base:400,lg:480};function s(e){let t=i[e];return null===t?void 0:String(t)}function a(e){return!e||decodeURIComponent(e).includes("null_white.png")}function o(e,t,r){if(Array.isArray(e))return e.filter(e=>e.position===t)[r]}},59204:(e,t,r)=>{r.d(t,{A:()=>c,i:()=>l});var i=r(95155),n=r(58717),s=r(7590),a=r(73321),o=r(12115);let l=(0,o.createContext)({loading:!0,ads:[],getAd:()=>void 0});function c({children:e,initialAds:t}){let r=(0,o.useRef)(!1),u=!!t&&t.length>0,{loading:d,error:f,data:v,call:h}=(0,s.A)({url:"/api/ads",defaultData:t??[],defaultLoading:!u,onSuccess:e=>e}),b=(0,o.useCallback)((e,t)=>(0,n.kP)(v,e,t),[v]),g=(0,a.usePathname)(),m=(0,o.useRef)(0);(0,o.useEffect)(()=>{r.current&&!d&&Date.now()-m.current>6e4&&(m.current=Date.now(),h())},[g]),(0,o.useEffect)(()=>{!r.current&&(r.current=!0,m.current=Date.now(),u||h())},[]);let k=(0,o.useMemo)(()=>({ads:v,loading:d,error:f,getAd:b}),[v,d,f,b]);return(0,i.jsx)(l.Provider,{value:k,children:e})}},89239:(e,t,r)=>{r.d(t,{$:()=>u,r:()=>c});var i=r(95155),n=r(12115),s=r(42442),a=r(99873),o=r(40980),l=r(92571);let c=(0,a.F)("inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-white transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-slate-950 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 dark:ring-offset-slate-950 dark:focus-visible:ring-slate-300 select-none",{variants:{variant:{default:"bg-slate-900 text-slate-50 hover:bg-slate-900/90 dark:bg-slate-50 dark:text-slate-900 dark:hover:bg-slate-50/90",destructive:"bg-red-500 text-slate-50 hover:bg-red-500/90 dark:bg-red-900 dark:text-slate-50 dark:hover:bg-red-900/90",outline:"border border-slate-200 bg-white hover:bg-slate-100 hover:text-slate-900 dark:border-slate-800 dark:bg-slate-950 dark:hover:bg-slate-800 dark:hover:text-slate-50",secondary:"bg-slate-100 text-slate-900 hover:bg-slate-100/80 dark:bg-slate-800 dark:text-slate-50 dark:hover:bg-slate-800/80",customPrimary:"bg-primary-500 text-white hover:bg-primary-500/80 dark:bg-primary-50 dark:text-primary-500 dark:hover:bg-primary-50/80",customSecondary:"bg-secondary-500 text-white hover:bg-secondary-500/80 dark:bg-secondary-500 dark:text-secondary-50 dark:hover:bg-secondary-500/80",ghost:"hover:bg-slate-100 hover:text-slate-900 dark:hover:bg-slate-800 dark:hover:text-slate-50",link:"text-slate-900 underline-offset-4 hover:underline dark:text-slate-50"},size:{default:"h-10 px-4 py-2",sm:"h-9 rounded-md px-3",lg:"h-11 rounded-md px-8",icon:"h-10 w-10"}},defaultVariants:{variant:"default",size:"default"}}),u=n.forwardRef(({className:e,variant:t,size:r,asChild:n=!1,disabled:a,loading:u,icon:d,type:f,children:v,...h},b)=>{let g=n?s.DX:"button";return(0,i.jsxs)(g,{className:(0,o.cn)(c({variant:t,size:r,className:e}),"inline-flex items-center justify-center gap-2"),ref:b,disabled:a||u,type:n?f:f??"button",...h,children:[u?(0,i.jsx)(l.A,{size:16,className:"animate-spin"}):d||(0,i.jsx)(i.Fragment,{}),v]})});u.displayName="Button"}}]);
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.