1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[588],{60588:(e,t,n)=>{n.r(t),n.d(t,{HomePageStatsV2:()=>u});var r=n(85047),i=n(31615),a=n(33700),s=n(12954),l=n(90654),c=n(57195);function o({value:e,prefix:t="",suffix:n="",start:a=!1}){let[s,l]=(0,i.useState)(0),c=(0,i.useRef)(void 0);return(0,i.useEffect)(()=>{if(!a)return void l(0);let t=performance.now(),n=r=>{let i=Math.min((r-t)/1600,1);l(Math.floor(e*(1-Math.pow(1-i,4)))),i<1?c.current=requestAnimationFrame(n):l(e)};return c.current=requestAnimationFrame(n),()=>{c.current&&cancelAnimationFrame(c.current)}},[e,a]),(0,r.jsxs)("span",{children:[t,s.toLocaleString(),n]})}function u({initialStats:e=null}){let t=(0,c.Xj)(),[n,d]=(0,i.useState)(e),[m,h]=(0,i.useState)(null==e),[v,f]=(0,i.useState)(new Set);(0,i.useEffect)(()=>{!async function(){try{null==e&&h(!0);let t=await fetch("/api/public/homepage-stats",{cache:"no-store"});if(!t.ok)return;let n=await t.json();n.success&&n.data&&d(n.data)}catch{}finally{h(!1)}}()},[e]);let x=n?[{id:"registered",kind:"number",value:n.totals.registeredUsers,suffix:"+",label:s.cV},{id:"advisors",kind:"number",value:n.totals.advisorCount,suffix:"",label:s._v},{id:"sponsor",kind:"currency",value:s.co,label:s.qM}]:[];return(0,r.jsxs)("section",{className:`relative overflow-hidden ${t.statsSection}`,children:[(0,r.jsx)(l.B,{particleCount:55,connectionDistance:160,speed:.35,className:"opacity-70"}),(0,r.jsxs)("div",{className:"container relative z-10",children:[(0,r.jsxs)(a.P.div,{initial:{opacity:0,y:12},whileInView:{opacity:1,y:0},viewport:{once:!0},className:`mb-10 ${t.isCenter?"mx-auto max-w-2xl text-center":"max-w-xl"}`,children:[(0,r.jsx)("h2",{className:`mb-3 ${t.statsTitleColor?t.sectionTitleOnDark:t.sectionTitle}`,children:s.nB}),(0,r.jsx)("p",{className:`text-lg ${t.statsHeaderMuted}`,children:s.he})]}),m?(0,r.jsx)("div",{className:`${t.statsGrid} animate-pulse`,children:[1,2,3].map(e=>(0,r.jsx)("div",{className:`h-32 rounded-2xl ${t.statsTitleColor?"bg-white/10":"bg-muted"}`},e))}):(0,r.jsx)("div",{className:t.statsGrid,children:x.map((e,n)=>(0,r.jsxs)(a.P.div,{initial:{opacity:0,y:16},whileInView:{opacity:1,y:0},viewport:{once:!0},transition:{delay:.07*n},onViewportEnter:()=>f(t=>new Set(t).add(e.id)),className:t.statCard,children:[(0,r.jsx)("div",{className:t.statNumber,children:"currency"===e.kind?(0,r.jsx)(o,{value:e.value,prefix:"NT$",start:v.has(e.id)}):(0,r.jsx)(o,{value:e.value,suffix:e.suffix,start:v.has(e.id)})}),(0,r.jsx)("p",{className:`mt-3 text-base font-semibold ${t.statsLabelColor}`,children:e.label})]},e.id))})]})]})}},90654:(e,t,n)=>{n.d(t,{B:()=>s});var r=n(85047),i=n(31615);let a=e=>{let t=window.innerWidth;return t<768?Math.min(40,Math.max(30,Math.floor(.35*e))):t<1024?Math.min(70,Math.max(60,Math.floor(.65*e))):e};function s({className:e="",particleCount:t=100,connectionDistance:n=200,speed:l=.5}){let c=(0,i.useRef)(null),o=(0,i.useRef)(void 0),u=(0,i.useRef)([]),d=(0,i.useRef)({x:0,y:0}),m=(0,i.useRef)(!1),h=(0,i.useRef)(!1),v=(0,i.useRef)(null),f=(0,i.useRef)(!1),[x,p]=(0,i.useState)(()=>a(t));return(0,i.useEffect)(()=>{let e=()=>{let e=a(t);e!==x&&(p(e),f.current=!1)};return e(),window.addEventListener("resize",e),()=>window.removeEventListener("resize",e)},[t,x]),(0,i.useEffect)(()=>{let e=c.current;if(!e)return;let t=e.getContext("2d");if(!t)return;let r=()=>{if(!e.parentElement)return;let n=e.parentElement.offsetWidth||e.parentElement.clientWidth,r=e.parentElement.offsetHeight||e.parentElement.clientHeight;if(n<=0||r<=0)return;let i=window.devicePixelRatio||1;e.width=n*i,e.height=r*i,t.setTransform(1,0,0,1,0,0),t.scale(i,i),e.style.width=`${n}px`,e.style.height=`${r}px`},i=()=>{if(!e.parentElement)return;let t=e.parentElement.offsetWidth||e.parentElement.clientWidth,n=e.parentElement.offsetHeight||e.parentElement.clientHeight;if(t<=0||n<=0)return void setTimeout(()=>i(),100);if(f.current&&u.current.length!==x&&(f.current=!1),!f.current){u.current=[];for(let e=0;e<x;e++)u.current.push({x:Math.random()*t,y:Math.random()*n,vx:(Math.random()-.5)*l,vy:(Math.random()-.5)*l,radius:3*Math.random()+2});f.current=!0}},a=()=>{e.parentElement?(r(),requestAnimationFrame(()=>{setTimeout(()=>{f.current||i()},150)})):requestAnimationFrame(a)};requestAnimationFrame(a),setTimeout(()=>{!f.current&&e.parentElement&&(r(),i())},300),window.addEventListener("resize",r);let s=new ResizeObserver(()=>{if(r(),f.current&&e.parentElement){let t=e.parentElement.getBoundingClientRect();
1u.current.forEach(e=>{e.x>t.width&&(e.x=t.width),e.y>t.height&&(e.y=t.height)})}else setTimeout(()=>{i()},50)});e.parentElement&&s.observe(e.parentElement);let p=()=>"ontouchstart"in window||navigator.maxTouchPoints>0,y=t=>{if(!e.parentElement||p())return;let n=e.getBoundingClientRect();d.current={x:t.clientX-n.left,y:t.clientY-n.top}},E=()=>{p()||(m.current=!0)},w=()=>{p()||(m.current=!1)},g=t=>{let n,r;if(!e.parentElement||!p())return;let i=e.getBoundingClientRect();if(t instanceof TouchEvent){let e=t.touches[0]||t.changedTouches[0];if(!e)return;n=e.clientX,r=e.clientY}else n=t.clientX,r=t.clientY;d.current={x:n-i.left,y:r-i.top},h.current=!0,v.current&&clearTimeout(v.current),v.current=setTimeout(()=>{h.current=!1},500)},b=e.parentElement;b&&(p()||(b.addEventListener("mousemove",y),b.addEventListener("mouseenter",E),b.addEventListener("mouseleave",w)),p()&&(b.addEventListener("click",g,{passive:!0}),b.addEventListener("touchend",g,{passive:!0}))),i();let M={current:"hidden"!==document.visibilityState},L=()=>{if(!M.current){o.current=void 0;return}t.clearRect(0,0,e.width,e.height);let r=u.current,i=d.current,a=e.parentElement?e.parentElement.offsetWidth||e.parentElement.clientWidth:e.width/(window.devicePixelRatio||1),s=e.parentElement?e.parentElement.offsetHeight||e.parentElement.clientHeight:e.height/(window.devicePixelRatio||1);r.forEach((e,l)=>{if(m.current||h.current){let t=i.x-e.x,n=i.y-e.y,r=Math.sqrt(t*t+n*n);if(r<150){let i=(150-r)/150,a=Math.atan2(n,t);e.vx-=Math.cos(a)*i*.5,e.vy-=Math.sin(a)*i*.5}}e.x+=e.vx,e.y+=e.vy,(e.x<0||e.x>a)&&(e.vx*=-1),(e.y<0||e.y>s)&&(e.vy*=-1),e.x=Math.max(0,Math.min(a,e.x)),e.y=Math.max(0,Math.min(s,e.y)),Math.abs(e.vx)>.1?e.vx*=.998:Math.abs(e.vx)>0&&(e.vx=e.vx>0?.1:-.1),Math.abs(e.vy)>.1?e.vy*=.998:Math.abs(e.vy)>0&&(e.vy=e.vy>0?.1:-.1),t.beginPath(),t.arc(e.x,e.y,e.radius,0,2*Math.PI);let c=l%3;0===c?t.fillStyle="hsla(217, 91%, 60%, 0.7)":1===c?t.fillStyle="hsla(270, 70%, 60%, 0.7)":t.fillStyle="hsla(45, 100%, 50%, 0.7)",t.fill();for(let i=l+1;i<r.length;i++){let a=r[i].x-e.x,s=r[i].y-e.y,l=Math.sqrt(a*a+s*s);if(l<n){let a=1-l/n;t.beginPath(),t.moveTo(e.x,e.y),t.lineTo(r[i].x,r[i].y);let s=t.createLinearGradient(e.x,e.y,r[i].x,r[i].y);s.addColorStop(0,`hsla(217, 91%, 60%, ${.3*a})`),s.addColorStop(1,`hsla(270, 70%, 60%, ${.3*a})`),t.strokeStyle=s,t.lineWidth=1.5,t.stroke()}}}),o.current=requestAnimationFrame(L)},j=()=>{M.current="hidden"!==document.visibilityState,M.current&&void 0===o.current&&L()};return document.addEventListener("visibilitychange",j),L(),()=>{document.removeEventListener("visibilitychange",j),window.removeEventListener("resize",r);let t=e.parentElement;t&&(t.removeEventListener("mousemove",y),t.removeEventListener("mouseenter",E),t.removeEventListener("mouseleave",w),t.removeEventListener("click",g),t.removeEventListener("touchend",g)),v.current&&clearTimeout(v.current),s.disconnect(),o.current&&cancelAnimationFrame(o.current),f.current=!1}},[x,n,l]),(0,r.jsx)("canvas",{ref:c,className:`absolute inset-0 ${e}`,style:{zIndex:0},suppressHydrationWarning:!0})}}}]);
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.