build-valuecurve/_app/immutable/nodes/6.iPfekCE9.js

6 lines
12 KiB
JavaScript

import{f as b,a as x,c as me}from"../chunks/Bh-96fzJ.js";import{p as pt,j as y,m as Le,u as ue,g as e,i as v,d as r,s as o,t as F,e as vt,f as mt,$ as ut,r as s,n as Te,k as G}from"../chunks/mO2F3zLa.js";import{d as ft,s as g}from"../chunks/eH5yZvH4.js";import{i as h}from"../chunks/tuD4s8Oc.js";import{h as xt,N as bt,F as yt,r as Se,s as I,e as _t,i as gt}from"../chunks/3CBxeiL8.js";import{b as Me}from"../chunks/Da-hDQCT.js";import{b as Be}from"../chunks/CJrErHKE.js";import{b as fe}from"../chunks/DBQEMQMg.js";var ht=b('<meta name="description" content="Explore global development data: GDP, life expectancy, and population trends from 1952-2007."/>'),wt=b('<div class="bg-red-50 border border-red-200 text-red-700 px-4 py-3 rounded-lg mb-4"> </div>'),$t=b('<span class="text-gray-400">(N/A for trends)</span>'),Pt=b("<button> </button>"),At=b('<div class="mb-4 px-4 py-2 rounded-lg text-sm text-gray-500 bg-gray-100 text-center">Line Trends shows all years</div>'),Et=b("<option> </option>"),Ft=b('<label for="topn-slider" class="block text-xs font-medium text-gray-600 mb-2">Top N Countries: <span class="text-primary-600 font-bold"> </span></label> <input id="topn-slider" type="range" min="5" max="25" step="5" class="w-full h-2 bg-gray-200 rounded-lg appearance-none cursor-pointer accent-primary-600"/>',1),Ct=b('<label class="block text-xs font-medium text-gray-600 mb-2">Countries: <span class="text-primary-600 font-bold"> </span></label> <div class="text-xs text-gray-400">All countries displayed</div>',1),kt=b('<div class="border-t border-gray-200 pt-4 mt-4"><h4 class="text-xs font-semibold text-gray-700 mb-3"> </h4> <div class="space-y-2 text-xs"><div class="flex justify-between"><span class="text-gray-500">Mean:</span> <span class="font-medium"> </span></div> <div class="flex justify-between"><span class="text-gray-500">Median:</span> <span class="font-medium"> </span></div> <div class="flex justify-between"><span class="text-gray-500">Std Dev:</span> <span class="font-medium"> </span></div> <div class="flex justify-between"><span class="text-gray-500">Min:</span> <span class="font-medium"> </span></div> <div class="flex justify-between"><span class="text-gray-500">Max:</span> <span class="font-medium"> </span></div></div></div>'),jt=b('<div class="flex items-center justify-center h-96"><div class="animate-spin rounded-full h-12 w-12 border-b-2 border-primary-600"></div></div>'),Dt=b('<div class="w-full h-full"></div>'),Lt=b('<div class="w-full h-full"></div>'),Tt=b('<div class="w-full h-full"></div>'),St=b('<div class="h-[500px]"><!></div>'),Mt=b('<div class="mt-4 pt-4 border-t border-gray-200"><p class="text-xs text-gray-500"> </p></div>'),Bt=b('<div class="min-h-screen bg-gradient-to-b from-slate-50 to-white"><!> <main class="pt-20 pb-10 px-5"><div class="max-w-7xl mx-auto"><div class="mb-5 flex items-center justify-between"><div class="flex items-center gap-4"><a href="/tools/" class="text-sm text-primary-600 hover:text-primary-700">&larr; Tools</a> <h1 class="text-2xl font-bold text-gray-900">EDA Gapminder</h1> <span class="text-gray-400 text-sm hidden sm:inline">|</span> <p class="text-gray-500 text-sm hidden sm:inline">Explore global development data (1952-2007)</p></div></div> <!> <div class="grid grid-cols-1 lg:grid-cols-4 gap-4"><div class="bg-white rounded-xl border border-gray-100 shadow-sm p-4"><h3 class="text-sm font-semibold text-gray-700 mb-4">Filters</h3> <div><label class="block text-xs font-medium text-gray-600 mb-2">Year: <span class="text-primary-600 font-bold"> </span> <!></label> <input type="range" min="1952" max="2007" step="5" class="w-full h-2 bg-gray-200 rounded-lg appearance-none cursor-pointer disabled:cursor-not-allowed accent-primary-600"/> <div class="flex justify-between text-xs text-gray-500 mt-1"><span>1952</span> <span>2007</span></div></div> <!> <div class="mb-4"><label class="block text-xs font-medium text-gray-600 mb-2">Continent</label> <select class="w-full px-3 py-2 border border-gray-200 rounded-lg focus:ring-2 focus:ring-primary-500 focus:border-primary-500 text-sm"><option>All Continents</option><!></select></div> <div class="mb-4"><label class="block text-xs font-medium text-gray-600 mb-2">Metric</label> <select class="w-full px-3 py-2 border border-gray-200 rounded-lg focus:ring-2 focus:ring-primary-500 focus:border-primary-500 text-sm"><option>GDP per Capita</option><option>Life Expectancy</option><option>Population</option></select></div> <div class="mb-4"><!></div> <!></div> <div class="lg:col-span-3 bg-white rounded-xl border border-gray-100 shadow-sm p-4"><div class="flex border-b border-gray-200 mb-4"><button>Scatter Plot</button> <button>Bar Chart Race</button> <button>Line Trends</button></div> <!> <!></div></div></div></main> <!></div>');function Ut(Ge,Ie){pt(Ie,!0);const T="https://cockpit.valuecurve.co/api/v1";let V=y(!1),S=y(""),R=y(null),A=y(Le([])),C=y(null),_=y(2007),$=y(""),f=y("gdpPercap"),M=y(15),j=y(!1),z=y(null),N=y(Le([])),m=y("scatter"),O,Y,q,w=y(null),xe=y(!1);ue(()=>{if(typeof window<"u"&&!e(xe)){const t=document.createElement("script");t.src="https://cdn.plot.ly/plotly-2.27.0.min.js",t.onload=()=>{v(w,window.Plotly,!0),v(xe,!0),Re()},document.head.appendChild(t)}});async function Re(){v(V,!0),v(S,"");try{const t=await fetch(`${T}/eda/metadata`);v(R,await t.json(),!0),v(N,e(R).years,!0),await H()}catch(t){v(S,t instanceof Error?t.message:"Failed to load data",!0)}finally{v(V,!1)}}async function H(){if(e(w))try{const t=new URLSearchParams;e(_)&&t.append("year",e(_).toString()),e($)&&t.append("continent",e($));const i=await(await fetch(`${T}/eda/data?${t}`)).json();v(A,i.data,!0);const p=await fetch(`${T}/eda/statistics?column=${e(f)}&group_by=continent&year=${e(_)}`);v(C,await p.json(),!0),e(m)==="scatter"?be():e(m)==="barrace"?ye():e(m)==="trends"&&_e()}catch(t){v(S,t instanceof Error?t.message:"Failed to update charts",!0)}}function be(){if(!O||!e(w)||e(A).length===0)return;const t=[...new Set(e(A).map(n=>n.continent))],a={Africa:"#636EFA",Americas:"#EF553B",Asia:"#00CC96",Europe:"#AB63FA",Oceania:"#FFA15A"},i=Math.max(...e(A).map(n=>n.pop)),p=60,u=t.map(n=>{const l=e(A).filter(d=>d.continent===n);return{x:l.map(d=>d.gdpPercap),y:l.map(d=>d.lifeExp),mode:"markers",name:n,text:l.map(d=>`${d.country}<br>Pop: ${(d.pop/1e6).toFixed(1)}M`),marker:{size:l.map(d=>d.pop),sizemode:"area",sizeref:2*i/(p*p),sizemin:4,color:a[n],opacity:.7,line:{width:1,color:"white"}},hovertemplate:"<b>%{text}</b><br>GDP: $%{x:,.0f}<br>Life Exp: %{y:.1f} years<extra></extra>"}}),c={title:`GDP per Capita vs Life Expectancy (${e(_)})`,xaxis:{title:"GDP per Capita (log scale)",type:"log",range:[2.5,5.2]},yaxis:{title:"Life Expectancy (years)",range:[20,90]},showlegend:!0,legend:{x:.02,y:.98},hovermode:"closest",paper_bgcolor:"rgba(0,0,0,0)",plot_bgcolor:"rgba(0,0,0,0)",font:{family:"Inter, system-ui, sans-serif"}};e(w).newPlot(O,u,c,{responsive:!0})}async function ye(){if(!(!Y||!e(w)))try{const a=await(await fetch(`${T}/eda/ranking?year=${e(_)}&metric=${e(f)}&top_n=${e(M)}`)).json(),i={Africa:"#636EFA",Americas:"#EF553B",Asia:"#00CC96",Europe:"#AB63FA",Oceania:"#FFA15A"},p={gdpPercap:"GDP per Capita ($)",lifeExp:"Life Expectancy (years)",pop:"Population"},u=a.data.sort((l,d)=>l[e(f)]-d[e(f)]),c={type:"bar",x:u.map(l=>l[e(f)]),y:u.map(l=>l.country),orientation:"h",marker:{color:u.map(l=>i[l.continent])},text:u.map(l=>e(f)==="pop"?`${(l[e(f)]/1e6).toFixed(1)}M`:e(f)==="gdpPercap"?`$${l[e(f)].toFixed(0)}`:l[e(f)].toFixed(1)),textposition:"outside",hovertemplate:"<b>%{y}</b><br>%{x:,.0f}<extra></extra>"},n={title:`Top ${e(M)} Countries by ${p[e(f)]} (${e(_)})`,xaxis:{title:p[e(f)]},yaxis:{automargin:!0},paper_bgcolor:"rgba(0,0,0,0)",plot_bgcolor:"rgba(0,0,0,0)",font:{family:"Inter, system-ui, sans-serif"},margin:{l:150}};e(w).newPlot(Y,[c],n,{responsive:!0})}catch(t){console.error("Bar race error:",t)}}async function _e(){if(!(!q||!e(w)))try{const a=await(await fetch(`${T}/eda/timeseries?metric=${e(f)}&top_n=10${e($)?`&continent=${e($)}`:""}`)).json(),p=[...new Set(a.data.map(n=>n.country))].map(n=>{const l=a.data.filter(d=>d.country===n).sort((d,D)=>d.year-D.year);return{x:l.map(d=>d.year),y:l.map(d=>d[e(f)]),mode:"lines+markers",name:n,hovertemplate:`<b>${n}</b><br>Year: %{x}<br>Value: %{y:,.0f}<extra></extra>`}}),u={gdpPercap:"GDP per Capita ($)",lifeExp:"Life Expectancy (years)",pop:"Population"},c={title:`${u[e(f)]} Over Time (Top 10)`,xaxis:{title:"Year",dtick:5},yaxis:{title:u[e(f)]},showlegend:!0,legend:{x:1.02,y:1},paper_bgcolor:"rgba(0,0,0,0)",plot_bgcolor:"rgba(0,0,0,0)",font:{family:"Inter, system-ui, sans-serif"}};e(w).newPlot(q,p,c,{responsive:!0})}catch(t){console.error("Trends error:",t)}}function ze(){if(e(j)){ge();return}v(j,!0);let t=e(N).indexOf(e(_));v(z,setInterval(()=>{t=(t+1)%e(N).length,v(_,e(N)[t],!0),H()},1e3),!0)}function ge(){v(j,!1),e(z)&&(clearInterval(e(z)),v(z,null))}ue(()=>{e(w)&&(e(_)||e($)||e(f))&&H()}),ue(()=>{e(w)&&e(m)&&(e(m)==="trends"&&e(j)&&ge(),setTimeout(()=>{e(m)==="scatter"?be():e(m)==="barrace"?ye():e(m)==="trends"&&_e()},100))});var J=Bt();xt("1vulqo1",t=>{var a=ht();mt(()=>{ut.title="EDA Gapminder | Build with AI"}),x(t,a)});var he=r(J);bt(he,{});var K=o(he,2),we=r(K),$e=o(r(we),2);{var Ne=t=>{var a=wt(),i=r(a,!0);s(a),F(()=>g(i,e(S))),x(t,a)};h($e,t=>{e(S)&&t(Ne)})}var Pe=o($e,2),Q=r(Pe),U=o(r(Q),2),W=r(U),X=o(r(W)),Oe=r(X,!0);s(X);var Ye=o(X,2);{var qe=t=>{var a=$t();x(t,a)};h(Ye,t=>{e(m)==="trends"&&t(qe)})}s(W);var Z=o(W,2);Se(Z),Te(2),s(U);var Ae=o(U,2);{var Ue=t=>{var a=Pt();a.__click=ze;var i=r(a,!0);s(a),F(()=>{I(a,1,`w-full mb-4 px-4 py-2 rounded-lg text-sm font-medium transition-colors
${e(j)?"bg-red-100 text-red-700 hover:bg-red-200":"bg-primary-100 text-primary-700 hover:bg-primary-200"}`),g(i,e(j)?"Stop Animation":"Play Timeline")}),x(t,a)},Ve=t=>{var a=At();x(t,a)};h(Ae,t=>{e(m)!=="trends"?t(Ue):t(Ve,!1)})}var ee=o(Ae,2),te=o(r(ee),2),ae=r(te);ae.value=ae.__value="";var He=o(ae);{var Je=t=>{var a=me(),i=G(a);_t(i,17,()=>e(R).continents,gt,(p,u)=>{var c=Et(),n=r(c,!0);s(c);var l={};F(()=>{g(n,e(u)),l!==(l=e(u))&&(c.value=(c.__value=e(u))??"")}),x(p,c)}),x(t,a)};h(He,t=>{e(R)&&t(Je)})}s(te),s(ee);var re=o(ee,2),se=o(r(re),2),oe=r(se);oe.value=oe.__value="gdpPercap";var ie=o(oe);ie.value=ie.__value="lifeExp";var Ee=o(ie);Ee.value=Ee.__value="pop",s(se),s(re);var ne=o(re,2),Ke=r(ne);{var Qe=t=>{var a=Ft(),i=G(a),p=o(r(i)),u=r(p,!0);s(p),s(i);var c=o(i,2);Se(c),F(()=>g(u,e(M))),Me(c,()=>e(M),n=>v(M,n)),x(t,a)},We=t=>{var a=Ct(),i=G(a),p=o(r(i)),u=r(p,!0);s(p),s(i),Te(2),F(()=>g(u,e(A).length||142)),x(t,a)};h(Ke,t=>{e(m)==="barrace"?t(Qe):t(We,!1)})}s(ne);var Xe=o(ne,2);{var Ze=t=>{var a=kt(),i=r(a),p=r(i);s(i);var u=o(i,2),c=r(u),n=o(r(c),2),l=r(n,!0);s(n),s(c);var d=o(c,2),D=o(r(d),2),E=r(D,!0);s(D),s(d);var P=o(d,2),L=o(r(P),2),pe=r(L,!0);s(L),s(P);var k=o(P,2),B=o(r(k),2),ve=r(B,!0);s(B),s(k);var je=o(k,2),De=o(r(je),2),ot=r(De,!0);s(De),s(je),s(u),s(a),F((it,nt,lt,dt,ct)=>{g(p,`Statistics (${e(_)??""})`),g(l,it),g(E,nt),g(pe,lt),g(ve,dt),g(ot,ct)},[()=>e(C).mean.toFixed(2),()=>e(C).median.toFixed(2),()=>e(C).std.toFixed(2),()=>e(C).min.toFixed(2),()=>e(C).max.toFixed(2)]),x(t,a)};h(Xe,t=>{e(C)&&t(Ze)})}s(Q);var Fe=o(Q,2),le=r(Fe),de=r(le);de.__click=()=>v(m,"scatter");var ce=o(de,2);ce.__click=()=>v(m,"barrace");var Ce=o(ce,2);Ce.__click=()=>v(m,"trends"),s(le);var ke=o(le,2);{var et=t=>{var a=jt();x(t,a)},tt=t=>{var a=St(),i=r(a);{var p=c=>{var n=Dt();fe(n,l=>O=l,()=>O),x(c,n)},u=c=>{var n=me(),l=G(n);{var d=E=>{var P=Lt();fe(P,L=>Y=L,()=>Y),x(E,P)},D=E=>{var P=me(),L=G(P);{var pe=k=>{var B=Tt();fe(B,ve=>q=ve,()=>q),x(k,B)};h(L,k=>{e(m)==="trends"&&k(pe)},!0)}x(E,P)};h(l,E=>{e(m)==="barrace"?E(d):E(D,!1)},!0)}x(c,n)};h(i,c=>{e(m)==="scatter"?c(p):c(u,!1)})}s(a),x(t,a)};h(ke,t=>{e(V)?t(et):t(tt,!1)})}var at=o(ke,2);{var rt=t=>{var a=Mt(),i=r(a),p=r(i);s(i),s(a),F(()=>g(p,`Showing ${e(A).length??""} records for ${e(_)??""}
${e($)?` in ${e($)}`:""}`)),x(t,a)};h(at,t=>{e(A).length>0&&t(rt)})}s(Fe),s(Pe),s(we),s(K);var st=o(K,2);yt(st),s(J),F(()=>{I(U,1,`mb-4 ${e(m)==="trends"?"opacity-50":""}`),g(Oe,e(_)),Z.disabled=e(m)==="trends",I(de,1,`px-4 py-2 text-sm font-medium transition-colors
${e(m)==="scatter"?"text-primary-600 border-b-2 border-primary-600":"text-gray-500 hover:text-gray-700"}`),I(ce,1,`px-4 py-2 text-sm font-medium transition-colors
${e(m)==="barrace"?"text-primary-600 border-b-2 border-primary-600":"text-gray-500 hover:text-gray-700"}`),I(Ce,1,`px-4 py-2 text-sm font-medium transition-colors
${e(m)==="trends"?"text-primary-600 border-b-2 border-primary-600":"text-gray-500 hover:text-gray-700"}`)}),Me(Z,()=>e(_),t=>v(_,t)),Be(te,()=>e($),t=>v($,t)),Be(se,()=>e(f),t=>v(f,t)),x(Ge,J),vt()}ft(["click"]);export{Ut as component};