six-degrees 0.4.1 → 0.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/standalone/.next/BUILD_ID +1 -1
- package/.next/standalone/.next/build-manifest.json +3 -3
- package/.next/standalone/.next/prerender-manifest.json +3 -3
- package/.next/standalone/.next/server/app/_global-error.html +1 -1
- package/.next/standalone/.next/server/app/_global-error.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_not-found.html +1 -1
- package/.next/standalone/.next/server/app/_not-found.rsc +1 -1
- package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/api/admin-delete/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/admin-update/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/bridges/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/bulk-import/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/company-scores/legacy/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/company-scores/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/connections/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/data/export/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/data/import/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/data/restart/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/data/reveal/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/data/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/delete-cluster/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/ingest/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/outreach/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/queue/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/scraper/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/settings/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/settings/sector-preview/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/settings/sector-suggestions/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/setup-profile/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/unlock/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/update/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/update-images/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/users/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/avatars/[file]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/import.html +1 -1
- package/.next/standalone/.next/server/app/import.rsc +1 -1
- package/.next/standalone/.next/server/app/import.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/import.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/import.segments/import/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/index.html +1 -1
- package/.next/standalone/.next/server/app/index.rsc +2 -2
- package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/launch.html +1 -1
- package/.next/standalone/.next/server/app/launch.rsc +1 -1
- package/.next/standalone/.next/server/app/launch.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/launch.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/launch.segments/launch/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/paths.html +1 -1
- package/.next/standalone/.next/server/app/paths.rsc +1 -1
- package/.next/standalone/.next/server/app/paths.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/paths.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/paths.segments/paths/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/profile/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/profile/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/profile.html +1 -1
- package/.next/standalone/.next/server/app/profile.rsc +2 -2
- package/.next/standalone/.next/server/app/profile.segments/_full.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/profile.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/profile.segments/profile/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/queue/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/queue/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/queue.html +1 -1
- package/.next/standalone/.next/server/app/queue.rsc +2 -2
- package/.next/standalone/.next/server/app/queue.segments/_full.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/queue.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/queue.segments/queue/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/scores.html +1 -1
- package/.next/standalone/.next/server/app/scores.rsc +1 -1
- package/.next/standalone/.next/server/app/scores.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/scores.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/scores.segments/scores/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/settings.html +1 -1
- package/.next/standalone/.next/server/app/settings.rsc +1 -1
- package/.next/standalone/.next/server/app/settings.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/settings.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/setup/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/setup/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/setup.html +1 -1
- package/.next/standalone/.next/server/app/setup.rsc +2 -2
- package/.next/standalone/.next/server/app/setup.segments/_full.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/setup.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/setup.segments/setup/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/chunks/_1_fynia._.js +6 -6
- package/.next/standalone/.next/server/chunks/_1itd1o_._.js +1 -1
- package/.next/standalone/.next/server/chunks/lib_db-client_15le7cw.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_15xuwkv._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_1hgd5dp._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_20w06i-._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/app_page_1fazqbf.js +4 -4
- package/.next/standalone/.next/server/middleware-build-manifest.js +3 -3
- package/.next/standalone/.next/server/middleware-manifest.json +5 -5
- package/.next/standalone/.next/server/pages/404.html +1 -1
- package/.next/standalone/.next/server/pages/500.html +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/static/chunks/{3e8zg6ctvvb8p.js → 049vavjsmqgmn.js} +3 -3
- package/.next/standalone/.next/static/chunks/0ljxa-wk_iu__.js +18 -0
- package/.next/{static/chunks/3ol1xux1-ofm4.js → standalone/.next/static/chunks/0mp9b72fm-jp6.js} +2 -2
- package/.next/standalone/.next/static/chunks/1pre1cotntk6-.js +1 -0
- package/.next/standalone/.next/static/chunks/{18xu0fbgo_qz-.js → 22x2_r768-u5i.js} +1 -1
- package/.next/standalone/CHANGELOG.md +27 -0
- package/.next/standalone/app/api/scraper/route.js +10 -2
- package/.next/standalone/app/components/ChainView.js +17 -10
- package/.next/standalone/app/components/ForceGraph.js +106 -13
- package/.next/standalone/app/components/OrbitGraph.js +92 -30
- package/.next/standalone/lib/dot-rings.js +21 -0
- package/.next/standalone/lib/reach.js +22 -1
- package/.next/standalone/package-lock.json +2 -2
- package/.next/standalone/package.json +1 -1
- package/.next/standalone/scripts/scrape.py +10 -0
- package/.next/static/chunks/{3e8zg6ctvvb8p.js → 049vavjsmqgmn.js} +3 -3
- package/.next/static/chunks/0ljxa-wk_iu__.js +18 -0
- package/.next/{standalone/.next/static/chunks/3ol1xux1-ofm4.js → static/chunks/0mp9b72fm-jp6.js} +2 -2
- package/.next/static/chunks/1pre1cotntk6-.js +1 -0
- package/.next/static/chunks/{18xu0fbgo_qz-.js → 22x2_r768-u5i.js} +1 -1
- package/CHANGELOG.md +27 -0
- package/lib/dot-rings.js +21 -0
- package/lib/reach.js +22 -1
- package/package.json +1 -1
- package/scripts/scrape.py +10 -0
- package/.next/standalone/.next/static/chunks/10784r7w7t5gw.js +0 -18
- package/.next/standalone/.next/static/chunks/2pnbm1z6j7xab.js +0 -1
- package/.next/static/chunks/10784r7w7t5gw.js +0 -18
- package/.next/static/chunks/2pnbm1z6j7xab.js +0 -1
- /package/.next/standalone/.next/static/{LlDgA9g8ToBkDLlo9Qtov → wGVrXBkFLmEB4snfhtOcO}/_buildManifest.js +0 -0
- /package/.next/standalone/.next/static/{LlDgA9g8ToBkDLlo9Qtov → wGVrXBkFLmEB4snfhtOcO}/_clientMiddlewareManifest.js +0 -0
- /package/.next/standalone/.next/static/{LlDgA9g8ToBkDLlo9Qtov → wGVrXBkFLmEB4snfhtOcO}/_ssgManifest.js +0 -0
- /package/.next/static/{LlDgA9g8ToBkDLlo9Qtov → wGVrXBkFLmEB4snfhtOcO}/_buildManifest.js +0 -0
- /package/.next/static/{LlDgA9g8ToBkDLlo9Qtov → wGVrXBkFLmEB4snfhtOcO}/_clientMiddlewareManifest.js +0 -0
- /package/.next/static/{LlDgA9g8ToBkDLlo9Qtov → wGVrXBkFLmEB4snfhtOcO}/_ssgManifest.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,2776,e=>{"use strict";var t=e.i(43476),r=e.i(15812);e.s(["default",0,function({children:e}){let{userId:n,ready:i}=(0,r.useUser)();return i&&n?e:(0,t.jsx)("div",{style:{minHeight:"100vh",display:"flex",alignItems:"center",justifyContent:"center",background:"#0a0a1a",color:"#fff",padding:24,textAlign:"center",fontFamily:'-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif'},children:i?(0,t.jsxs)("div",{style:{maxWidth:420},children:[(0,t.jsx)("div",{style:{fontSize:18,fontWeight:700,marginBottom:8},children:"Can’t reach Six Degrees’ local server"}),(0,t.jsx)("div",{style:{color:"#888",fontSize:14,lineHeight:1.6},children:"The page loaded but the app behind it is not answering. If you started it from a terminal, check that window for an error, then reload this page."})]}):(0,t.jsx)("div",{style:{fontSize:18,fontWeight:600},children:"Loading…"})})}])},99201,e=>{"use strict";var t=e.i(43476),r=e.i(71645),n=e.i(19821),i=e.i(5258),o=e.i(48235);let l={height:10,borderRadius:6},a={background:"rgba(52,152,219,0.06)",borderRadius:12,padding:20,marginBottom:24,border:"1px solid rgba(52,152,219,0.2)"};function s({degree1:e=[],degree2:r=[],skips:n=[]}){let c=function(e=[],t=[],r=[]){let n=(0,o.reachIndex)(e,t,{skips:r}),i=e=>{let t=(0,o.circleState)(e,n);return"scanned"===t?"mapped":t},l={mapped:0,hidden:0,todo:0},a={};for(let t of e){let e=i(t);l[e]+=1;let r=t.tier||"D";a[r]=a[r]||{mapped:0,hidden:0,todo:0,total:0},a[r][e]+=1,a[r].total+=1}let s=e.length,d=l.mapped+l.hidden;return{...l,total:s,resolved:d,percent:s?Math.round(d/s*100):0,batches:Math.ceil(l.todo/25),byTier:a}}(e,r,n);if(!c.total)return null;let u=e=>c.total?e/c.total*100:0,f=0===c.todo;return(0,t.jsxs)("div",{style:a,children:[(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"baseline",marginBottom:10},children:[(0,t.jsx)("h3",{style:{fontSize:14,fontWeight:700,margin:0,color:"#3498DB"},children:"2nd-degree mapping"}),(0,t.jsx)("span",{style:{fontSize:12,color:f?"#00ff88":"#8b9a9a",fontWeight:600},children:f?"Everything reachable is mapped":`${c.percent}%`})]}),(0,t.jsxs)("div",{style:{...l,display:"flex",overflow:"hidden",background:"rgba(255,255,255,0.06)"},children:[(0,t.jsx)("div",{style:{width:`${u(c.mapped)}%`,background:"#00ff88"}}),(0,t.jsx)("div",{style:{width:`${u(c.hidden)}%`,background:"rgba(255,255,255,0.22)"}})]}),(0,t.jsxs)("div",{style:{display:"flex",gap:16,marginTop:10,fontSize:12,flexWrap:"wrap"},children:[(0,t.jsx)(d,{color:"#00ff88",label:"mapped",value:c.mapped}),(0,t.jsx)(d,{color:"rgba(255,255,255,0.35)",label:"hidden",value:c.hidden}),(0,t.jsx)(d,{color:"rgba(255,255,255,0.12)",label:"to go",value:c.todo}),(0,t.jsxs)("span",{style:{color:"#667",marginLeft:"auto"},children:["of ",c.total]})]}),c.hidden>0&&(0,t.jsx)("p",{style:{fontSize:11.5,color:"#667",margin:"10px 0 0",lineHeight:1.6},children:"Hidden means they keep their connections private — that will not change, and it does not count against you."}),!f&&(0,t.jsxs)("p",{style:{fontSize:11.5,color:"#8b9a9a",margin:"10px 0 0",lineHeight:1.6},children:[c.todo," left — about ",(0,t.jsxs)("b",{children:[c.batches," ",1===c.batches?"batch":"batches"]})," of ",25,". Run one, leave it a while, run another. Long unbroken runs are what gets an account restricted."]}),(0,t.jsx)("div",{style:{marginTop:16,display:"flex",flexDirection:"column",gap:7},children:["S","A","B","C","D"].filter(e=>c.byTier[e]?.total).map(e=>{let r=c.byTier[e];return(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:10,fontSize:11},children:[(0,t.jsx)("span",{style:{width:14,color:i.TIER_COLORS_CLASSIC[e],fontWeight:700},children:e}),(0,t.jsxs)("div",{style:{flex:1,height:5,borderRadius:3,display:"flex",overflow:"hidden",background:"rgba(255,255,255,0.06)"},children:[(0,t.jsx)("div",{style:{width:`${r.mapped/r.total*100}%`,background:i.TIER_COLORS_CLASSIC[e]}}),(0,t.jsx)("div",{style:{width:`${r.hidden/r.total*100}%`,background:"rgba(255,255,255,0.22)"}})]}),(0,t.jsxs)("span",{style:{color:"#667",width:62,textAlign:"right"},children:[r.mapped,"/",r.total]})]},e)})})]})}function d({color:e,label:r,value:n}){return(0,t.jsxs)("span",{style:{display:"flex",alignItems:"center",gap:6,color:"#8b9a9a"},children:[(0,t.jsx)("span",{style:{width:8,height:8,borderRadius:2,background:e}}),(0,t.jsx)("b",{style:{color:"#e2e8f0"},children:n})," ",r]})}var c=e.i(64745),u=e.i(2776),f=e.i(15812),g=e.i(69083),h=e.i(22016);let p={1:"Observer",11:"Connector",31:"Networker",51:"Strategist",76:"Architect"};function y(){let{userId:e,userName:i,userProfile:o}=(0,f.useUser)(),l=o||{name:i||"User",headline:"",sectors:[],goals:[]},[a,d]=(0,r.useState)(null),[u,y]=(0,r.useState)(!0),[b,x]=(0,r.useState)([]),[v,S]=(0,r.useState)({total:0,sent:0,accepted:0}),[j,w]=(0,r.useState)({degree1:[],degree2:[],skips:[]}),[k,C]=(0,r.useState)(null);if((0,r.useEffect)(()=>{!c.IS_DEMO&&e&&t();async function t(){fetch("/api/settings").then(e=>e.json().then(t=>e.ok&&t.settings?t:Promise.reject(Error(t.error)))).then(e=>C(e.settings.sectorFocus||{sectors:[],strength:"lean"})).catch(()=>C({failed:!0}));let t=await (0,n.loadNetwork)(e),r=t.degree1,i=t.degree2,o={S:0,A:0,B:0,C:0,D:0};r.forEach(e=>{o[e.tier]=(o[e.tier]||0)+1});let l={S:0,A:0,B:0,C:0,D:0};i.forEach(e=>{l[e.tier]=(l[e.tier]||0)+1});let a=[...new Set(i.map(e=>e.source_connection_id).filter(Boolean))].length,s=r.filter(e=>e.is_catalyst).length,c={};r.forEach(e=>{e.company&&(c[e.company]=(c[e.company]||0)+1)});let u=Object.entries(c).sort((e,t)=>t[1]-e[1]).slice(0,10),f=100*o.S+40*o.A+15*o.B+5*o.C+ +o.D+200*a+150*s+50*l.S+r.length,g=Math.floor(Math.sqrt(f/10)),h=g*g*10,p=(g+1)*(g+1)*10;d({d1Count:r.length,d2Count:i.length,tiers:o,d2Tiers:l,clusters:a,catalysts:s,networkPower:f,level:g,xpProgress:(f-h)/(p-h)*100,topCompanies:u,unlockedPaths:0}),fetch("/api/scraper").then(e=>e.json()).then(e=>w({degree1:r,degree2:i,skips:e.skips||[]})).catch(()=>w({degree1:r,degree2:i,skips:[]})),fetch(`/api/notifications?userId=${e}`).then(e=>e.json()).then(e=>x(e.notifications||[])).catch(()=>{}),fetch("/api/queue").then(e=>e.json()).then(e=>{let t=e.items||[];S({total:t.length,sent:t.filter(e=>"sent"===e.status).length,accepted:t.filter(e=>"accepted"===e.status).length})}).catch(()=>{}),y(!1)}},[e]),c.IS_DEMO)return(0,t.jsxs)("div",{style:{minHeight:"100vh",background:"#0a0a1a",color:"rgba(255,255,255,0.7)",display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",gap:12,textAlign:"center",padding:24,fontFamily:'-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif'},children:[(0,t.jsx)("h2",{style:{margin:0,fontSize:20,fontWeight:700,color:"#fff"},children:"Not part of the demo"}),(0,t.jsx)("p",{style:{margin:0,fontSize:13},children:"The public demo includes the Network Circle and Degrees views only."}),(0,t.jsx)(h.default,{href:"/",style:{fontSize:12,color:"rgba(255,255,255,0.5)",textDecoration:"none"},children:"← Back to the network"})]});if(u)return(0,t.jsx)("div",{style:{minHeight:"100vh",display:"flex",alignItems:"center",justifyContent:"center",background:"#0a0a1a",color:"#fff"},children:"Loading profile..."});let _={S:"#FFD700",A:"#9B59B6",B:"#3498DB",C:"#95A5A6",D:"#BDC3C7"},I=[{label:"First S-Tier",done:a.tiers.S>0,icon:"👑"},{label:"100 Connections",done:a.d1Count>=100,icon:"🔗"},{label:"500 Connections",done:a.d1Count>=500,icon:"🌐"},{label:"First Cluster",done:a.clusters>0,icon:"🔭"},{label:"10 Clusters",done:a.clusters>=10,icon:"🏰"},{label:"50 S-Tier",done:a.tiers.S>=50,icon:"💎"},{label:"Catalyst Found",done:a.catalysts>0,icon:"⚡"},{label:"Level 25",done:a.level>=25,icon:"🎯"},{label:"Level 50",done:a.level>=50,icon:"🚀"},{label:"D2 S-Tier > 50",done:a.d2Tiers.S>=50,icon:"🌟"}];return(0,t.jsxs)("div",{style:{height:"100vh",background:"#0a0a1a",color:"#fff",fontFamily:'-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif',display:"flex",flexDirection:"column",overflow:"hidden"},children:[(0,t.jsxs)("header",{style:{padding:"16px 24px",borderBottom:"1px solid rgba(255,255,255,0.1)",display:"flex",alignItems:"center",gap:16},children:[(0,t.jsxs)(h.default,{href:"/",style:{display:"flex",alignItems:"center",gap:6,color:"#888",textDecoration:"none",fontSize:13,fontWeight:600,padding:"6px 14px",borderRadius:6,background:"rgba(255,255,255,0.06)",border:"1px solid rgba(255,255,255,0.1)"},children:[(0,t.jsx)("span",{style:{fontSize:16},children:"←"})," Back to Map"]}),(0,t.jsx)("h1",{style:{fontSize:22,fontWeight:700,margin:0,background:"linear-gradient(135deg, #FFD700, #9B59B6, #3498DB)",WebkitBackgroundClip:"text",WebkitTextFillColor:"transparent"},children:"Profile"})]}),(0,t.jsx)("div",{style:{flex:1,overflow:"auto",padding:"30px 20px"},children:(0,t.jsxs)("div",{style:{maxWidth:700,margin:"0 auto"},children:[(0,t.jsxs)("div",{style:{background:"rgba(255,255,255,0.05)",borderRadius:16,padding:32,marginBottom:24,border:"1px solid rgba(255,215,0,0.2)",textAlign:"center"},children:[(0,t.jsx)("div",{style:{width:100,height:100,borderRadius:"50%",margin:"0 auto 16px",background:"linear-gradient(135deg, #FFD700, #FF6B35)",display:"flex",alignItems:"center",justifyContent:"center",fontSize:36,fontWeight:800,color:"#000",boxShadow:"0 0 30px rgba(255,215,0,0.3)"},children:a.level}),(0,t.jsx)("div",{style:{fontSize:24,fontWeight:700,marginBottom:4},children:l.name}),(0,t.jsx)("div",{style:{fontSize:14,color:"#888",marginBottom:4},children:l.headline}),(0,t.jsx)("div",{style:{display:"inline-block",padding:"4px 16px",borderRadius:20,background:"rgba(255,215,0,0.15)",border:"1px solid rgba(255,215,0,0.3)",color:"#FFD700",fontSize:13,fontWeight:700,marginBottom:16},children:function(e){let t="Observer";for(let[r,n]of Object.entries(p))e>=parseInt(r)&&(t=n);return t}(a.level)}),(0,t.jsxs)("div",{style:{maxWidth:300,margin:"0 auto"},children:[(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",fontSize:10,color:"#666",marginBottom:4},children:[(0,t.jsxs)("span",{children:["Level ",a.level]}),(0,t.jsxs)("span",{children:["Level ",a.level+1]})]}),(0,t.jsx)("div",{style:{height:8,background:"rgba(255,255,255,0.1)",borderRadius:4},children:(0,t.jsx)("div",{style:{height:"100%",width:`${Math.min(a.xpProgress,100)}%`,background:"linear-gradient(90deg, #FFD700, #FF6B35)",borderRadius:4,transition:"width 1s ease"}})}),(0,t.jsxs)("div",{style:{fontSize:10,color:"#888",marginTop:4},children:["Network Power: ",a.networkPower.toLocaleString()]})]})]}),(0,t.jsx)(s,{degree1:j.degree1,degree2:j.degree2,skips:j.skips}),(0,t.jsxs)("div",{style:{background:"rgba(255,107,53,0.06)",borderRadius:12,padding:20,marginBottom:24,border:"1px solid rgba(255,107,53,0.2)"},children:[(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:12},children:[(0,t.jsx)("h3",{style:{fontSize:14,fontWeight:700,margin:0,color:"#FF6B35"},children:"Queue Progress"}),(0,t.jsx)(h.default,{href:"/queue",style:{fontSize:11,color:"#FF6B35",textDecoration:"none",fontWeight:600},children:"View Queue →"})]}),(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr 1fr",gap:12},children:[(0,t.jsxs)("div",{style:{textAlign:"center"},children:[(0,t.jsx)("div",{style:{fontSize:22,fontWeight:700,color:"#FFA500"},children:v.total}),(0,t.jsx)("div",{style:{fontSize:10,color:"#888"},children:"In Queue"})]}),(0,t.jsxs)("div",{style:{textAlign:"center"},children:[(0,t.jsx)("div",{style:{fontSize:22,fontWeight:700,color:"#3498DB"},children:v.sent}),(0,t.jsx)("div",{style:{fontSize:10,color:"#888"},children:"Sent"})]}),(0,t.jsxs)("div",{style:{textAlign:"center"},children:[(0,t.jsx)("div",{style:{fontSize:22,fontWeight:700,color:"#00ff88"},children:v.accepted}),(0,t.jsx)("div",{style:{fontSize:10,color:"#888"},children:"Accepted"})]})]})]}),b.length>0&&(0,t.jsxs)("div",{style:{background:"rgba(255,255,255,0.04)",borderRadius:12,padding:20,marginBottom:24,border:"1px solid rgba(255,255,255,0.08)"},children:[(0,t.jsxs)("h3",{style:{fontSize:14,fontWeight:700,marginTop:0,marginBottom:12},children:["Recent Activity (",b.filter(e=>!e.seen).length," new)"]}),(0,t.jsx)("div",{style:{display:"flex",flexDirection:"column",gap:6,maxHeight:200,overflowY:"auto"},children:b.slice(0,10).map(e=>(0,t.jsxs)("div",{style:{display:"flex",gap:8,alignItems:"center",padding:"6px 8px",borderRadius:6,background:e.seen?"transparent":"rgba(255,215,0,0.05)",borderLeft:e.seen?"none":"2px solid #FFD700"},children:[(0,t.jsx)("span",{style:{fontSize:16},children:e.icon||"📌"}),(0,t.jsxs)("div",{style:{flex:1,minWidth:0},children:[(0,t.jsx)("div",{style:{fontSize:12,fontWeight:600,color:e.seen?"#888":"#fff"},children:e.title}),e.message&&(0,t.jsx)("div",{style:{fontSize:10,color:"#666"},children:e.message})]}),(0,t.jsx)("span",{style:{fontSize:9,color:"#555",flexShrink:0},children:new Date(e.created_at).toLocaleDateString()})]},e.id))})]}),(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr 1fr",gap:12,marginBottom:24},children:[(0,t.jsx)(m,{label:"Connections",value:a.d1Count}),(0,t.jsx)(m,{label:"Degree-2 Reach",value:a.d2Count}),(0,t.jsx)(m,{label:"Clusters",value:a.clusters}),(0,t.jsx)(m,{label:"S-Tier",value:a.tiers.S,color:"#FFD700"}),(0,t.jsx)(m,{label:"A-Tier",value:a.tiers.A,color:"#9B59B6"}),(0,t.jsx)(m,{label:"Catalysts",value:a.catalysts,color:"#00ff88"})]}),(0,t.jsxs)("div",{style:{background:"rgba(255,255,255,0.04)",borderRadius:12,padding:20,marginBottom:24,border:"1px solid rgba(255,255,255,0.08)"},children:[(0,t.jsx)("h3",{style:{fontSize:14,fontWeight:700,marginTop:0,marginBottom:12},children:"Tier Distribution"}),["S","A","B","C","D"].map(e=>{let r=a.tiers[e]||0,n=a.d1Count>0?r/a.d1Count*100:0;return(0,t.jsxs)("div",{style:{marginBottom:8},children:[(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",fontSize:11,marginBottom:2},children:[(0,t.jsxs)("span",{style:{color:_[e],fontWeight:600},children:[e,"-Tier"]}),(0,t.jsxs)("span",{style:{color:"#888"},children:[r," (",n.toFixed(1),"%)"]})]}),(0,t.jsx)("div",{style:{height:6,background:"rgba(255,255,255,0.08)",borderRadius:3},children:(0,t.jsx)("div",{style:{height:"100%",width:`${n}%`,background:_[e],borderRadius:3}})})]},e)})]}),(0,t.jsxs)("div",{style:{background:"rgba(255,255,255,0.04)",borderRadius:12,padding:20,marginBottom:24,border:"1px solid rgba(255,255,255,0.08)"},children:[(0,t.jsx)("h3",{style:{fontSize:14,fontWeight:700,marginTop:0,marginBottom:12},children:"Degree-2 Reach"}),(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:12},children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("div",{style:{fontSize:24,fontWeight:700,color:"#FF6B35"},children:a.d2Count}),(0,t.jsx)("div",{style:{fontSize:11,color:"#888"},children:"People reachable via bridges"})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("div",{style:{fontSize:24,fontWeight:700,color:"#FFD700"},children:a.d2Tiers.S}),(0,t.jsx)("div",{style:{fontSize:11,color:"#888"},children:"S-Tier degree-2"})]})]})]}),(0,t.jsxs)("div",{style:{background:"rgba(255,255,255,0.04)",borderRadius:12,padding:20,marginBottom:24,border:"1px solid rgba(255,255,255,0.08)"},children:[(0,t.jsxs)("h3",{style:{fontSize:14,fontWeight:700,marginTop:0,marginBottom:12},children:["Milestones (",I.filter(e=>e.done).length,"/",I.length,")"]}),(0,t.jsx)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:8},children:I.map((e,r)=>(0,t.jsxs)("div",{style:{padding:"8px 10px",borderRadius:8,fontSize:12,background:e.done?"rgba(255,215,0,0.08)":"rgba(255,255,255,0.02)",border:`1px solid ${e.done?"rgba(255,215,0,0.2)":"rgba(255,255,255,0.05)"}`,color:e.done?"#FFD700":"#555",display:"flex",alignItems:"center",gap:6},children:[(0,t.jsx)("span",{style:{fontSize:16},children:e.done?e.icon:"🔒"}),(0,t.jsx)("span",{style:{fontWeight:e.done?600:400},children:e.label})]},r))})]}),(0,t.jsxs)("div",{style:{background:"rgba(255,255,255,0.04)",borderRadius:12,padding:20,marginBottom:24,border:"1px solid rgba(255,255,255,0.08)"},children:[(0,t.jsx)("h3",{style:{fontSize:14,fontWeight:700,marginTop:0,marginBottom:12},children:"Top Companies in Your Network"}),a.topCompanies.map(([e,r],n)=>(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",padding:"4px 0",borderBottom:n<a.topCompanies.length-1?"1px solid rgba(255,255,255,0.04)":"none",fontSize:12},children:[(0,t.jsx)("span",{children:e}),(0,t.jsx)("span",{style:{color:"#888"},children:r})]},n))]}),(0,t.jsxs)("div",{style:{background:"rgba(255,255,255,0.04)",borderRadius:12,padding:20,border:"1px solid rgba(255,255,255,0.08)"},children:[(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:12},children:[(0,t.jsx)("h3",{style:{fontSize:14,fontWeight:700,margin:0},children:"Your Sectors"}),(0,t.jsxs)(h.default,{href:"/scores#sector",style:{fontSize:11,color:"#3498DB",textDecoration:"none",fontWeight:600},children:[k?.sectors?.length?"Change":k&&!k.failed?"Pick on Scores":"Scores"," →"]})]}),k?k.failed?(0,t.jsx)("div",{style:{fontSize:12,color:"#ff7676"},children:"Couldn’t load your sectors. Reload this page, or open Settings to see them."}):k.sectors?.length?(0,t.jsxs)("div",{style:{display:"flex",flexWrap:"wrap",gap:6,alignItems:"center"},children:[k.sectors.map(e=>{let r=(0,g.sectorByKey)(e);return(0,t.jsx)("span",{style:{padding:"4px 12px",borderRadius:20,fontSize:11,fontWeight:600,background:`${r.color}26`,border:`1px solid ${r.color}66`,color:r.color},children:r.label},e)}),(0,t.jsxs)("span",{style:{fontSize:11,color:"#888"},children:["strong"===k.strength?"Strong":"Lean",": companies here count for more in your scores."]})]}):(0,t.jsx)("div",{style:{fontSize:12,color:"#888"},children:"None picked. Pick up to three in Settings and companies in them count for more in your scores."}):(0,t.jsx)("div",{style:{fontSize:12,color:"#888"},children:"Loading…"})]})]})})]})}function m({label:e,value:r,color:n}){return(0,t.jsxs)("div",{style:{background:"rgba(255,255,255,0.04)",borderRadius:10,padding:"14px 12px",border:"1px solid rgba(255,255,255,0.08)",textAlign:"center"},children:[(0,t.jsx)("div",{style:{fontSize:22,fontWeight:700,color:n||"#fff"},children:r}),(0,t.jsx)("div",{style:{fontSize:10,color:"#888",marginTop:2},children:e})]})}e.s(["default",0,function(){return(0,t.jsx)(u.default,{children:(0,t.jsx)(y,{})})}],99201)},89154,e=>{"use strict";var t=e.i(90179);function r(e){let r=(0,t.readTitle)(e);return{key:r.key,label:r.label,level:r.level}}function n(e){return(0,t.currentCompany)(e)}let i=[{key:"defense",label:"Government, Defense & Aerospace",color:"#7f8c8d",words:/\b(government|federal|state of|county|city of|defen[cs]e|army|navy|air force|marine corps|military|dod|nasa|aerospace|lockheed|northrop|boeing|raytheon|l3harris|leidos|blue origin|spacex|public sector)\b/i},{key:"finance",label:"Finance & Investing",color:"#2ecc71",words:/\b(bank|banking|capital|ventures?|vc|investments?|investor|fund|private equity|growth equity|asset management|wealth|trading|trader|hedge|crypto|blockchain|web3|defi|fintech|stripe|coinbase|blackrock|robinhood|goldman|morgan stanley|jpmorgan|chase|bny|mellon|wells fargo|citi|citigroup|capital one|fidelity|vanguard|schwab|visa|mastercard|amex|american express|paypal|insurance|accounting|cpa|financial)\b/i},{key:"health",label:"Healthcare & Biotech",color:"#e74c3c",words:/\b(health|healthcare|medical|medicine|hospital|clinic|pharma|pharmaceutical|biotech|nurse|nursing|physician|doctor|dental|therapy|therapist|wellness)\b/i},{key:"education",label:"Education",color:"#f1c40f",words:/\b(university|college|school|education|student|professor|teacher|academy|phd|faculty|alumni)\b/i},{key:"media",label:"Marketing & Media",color:"#e67e22",words:/\b(marketing|brand|branding|advertising|agency|media|content|social media|creative|creator|influencer|pr|public relations|communications|tiktok|pinterest|youtube|growth marketing)\b/i},{key:"entertainment",label:"Entertainment & Gaming",color:"#9b59b6",words:/\b(entertainment|film|movie|music|records|gaming|games?|esports|studio|studios|netflix|disney|spotify|hollywood|theater|theatre|sports)\b/i},{key:"tech",label:"Tech, Software & AI",color:"#3498db",words:/\b(software|saas|engineer|engineering|developer|tech|technology|technologies|ai|artificial intelligence|machine learning|ml|data|cloud|cyber|security|devops|product manager|google|microsoft|apple|meta|amazon|nvidia|openai|anthropic|palantir|salesforce|oracle|ibm|intel|app|apps|startup|platform|labs?)\b/i},{key:"consulting",label:"Consulting, Legal & Services",color:"#1abc9c",words:/\b(consulting|consultant|consultancy|deloitte|accenture|mckinsey|kpmg|pwc|ey|bain|bcg|legal|law|lawyer|attorney|paralegal|recruiting|recruiter|staffing|talent)\b/i},{key:"realestate",label:"Real Estate & Construction",color:"#d35400",words:/\b(real estate|realtor|realty|property|properties|construction|architecture|architect|mortgage|homes|housing|builders?)\b/i},{key:"consumer",label:"Retail, Consumer & Hospitality",color:"#ff79c6",words:/\b(retail|e-?commerce|shopify|consumer|cpg|fashion|apparel|beauty|cosmetics|food|beverage|restaurant|hospitality|hotel|travel|tourism|coca-cola|nike|store|shop)\b/i},{key:"industry",label:"Manufacturing, Energy & Logistics",color:"#95a5a6",words:/\b(manufacturing|energy|oil|gas|solar|utilities|automotive|tesla|siemens|ge|general electric|honeywell|3m|logistics|supply chain|shipping|freight|fedex|ups|industrial|mining|chemicals?)\b/i},{key:"nonprofit",label:"Nonprofit & Community",color:"#bdc3c7",words:/\b(nonprofit|non-profit|foundation|charity|ngo|church|ministry|volunteer)\b/i}],o={key:"unknown",label:"Unclear",color:"#555c66"},l=Object.fromEntries([...i,o].map(e=>[e.key,e])),a=e=>l[e]||o;function s(e,t){for(let r of[e,t]){if(!r)continue;let e=i.find(e=>e.words.test(r));if(e)return e}return o}let d=(e,t)=>s(e,t).key,c=e=>r(e).level>=4;e.s(["INDUSTRIES",0,i,"UNKNOWN_INDUSTRY",0,o,"buildCompanyIndex",0,function(e=[]){let r=new Map,n=e=>(r.has(e)||r.set(e,(0,t.rolesWithCompanies)(e)),r.get(e)),{industries:i}=(0,t.networkCompanies)(e,{industryOf:d,rolesOf:n}),o=new Map;for(let t of e){let e=t.profile_url||`id:${t.id}`,r=o.get(e);(!r||(t.degree||9)<(r.degree||9))&&o.set(e,t)}let l=new Map;for(let e of o.values()){let t=n(e).find(e=>!e.former)?.company;if(!t)continue;let r=l.get(t);r||(r={name:t,people:[],d1:0,d2:0,d3:0,S:0,A:0,senior:0},l.set(t,r)),r.people.push(e),1===e.degree?r.d1++:2===e.degree?r.d2++:r.d3++,"S"===e.tier&&r.S++,"A"===e.tier&&r.A++,c(e.headline)&&r.senior++}for(let e of l.values())e.industry=a(i.get(e.name));return l},"companyLinks",0,function(e=[],t=[]){let r=new Map;for(let t of e){let e=n(t);e&&r.set(t.id,e)}let i=new Map;for(let e of t){let t=r.get(e.source_connection_id),o=n(e);if(!t||!o||t===o)continue;let[l,a]=t<o?[t,o]:[o,t],s=`${l}\u0000${a}`,d=i.get(s);d||(d={a:l,b:a,weight:0,via:new Set},i.set(s,d)),d.weight++,d.via.add(e.source_connection_id)}return[...i.values()]},"companyOf",0,n,"getSeniority",0,r,"industryByKey",0,a,"industryOf",0,s,"isSenior",0,c,"waysInto",0,function(e,t=[],r=[]){let i=t.filter(t=>n(t)===e),o=new Map;for(let t of r)n(t)===e&&o.set(t.source_connection_id,(o.get(t.source_connection_id)||0)+1);let l=new Map(t.map(e=>[e.id,e]));return{direct:i,bridges:[...o.entries()].map(([e,t])=>({bridge:l.get(e),n:t})).filter(e=>e.bridge).sort((e,t)=>t.n-e.n||(Number(t.bridge.power_score)||0)-(Number(e.bridge.power_score)||0))}}])},19821,e=>{"use strict";async function t(e){let t=e?`/api/network?userId=${encodeURIComponent(e)}`:"/api/network",r=await fetch(t);if(!r.ok)throw Error(`Failed to load network (${r.status})`);let n=await r.json();return{degree1:n.degree1||[],degree2:n.degree2||[],degree3:n.degree3||[]}}e.s(["loadNetwork",0,t])},36774,e=>{"use strict";let t=/^[A-Za-z0-9_-]+\.(webp|jpg|jpeg|png)$/,r="/avatars/";e.s(["localPhoto",0,function(e){return"string"==typeof e&&e.startsWith(r)&&t.test(e.slice(r.length))?e:null}])},48235,7214,e=>{"use strict";var t=e.i(36774);let r={S:0,A:1,B:2,C:3,D:4};function n(e){let t=parseFloat(e?.power_score);return Number.isFinite(t)?t:0}function i(e){return Math.round(10*n(e))/10}function o(e){return String(e?.profile_url||"").split(/[?#]/)[0].replace(/\/+$/,"")||`id:${e?.id}`}let l=(e,t)=>String(e??"").localeCompare(String(t??""),void 0,{numeric:!0});function a(e,t){return(r[e.tier]??9)-(r[t.tier]??9)||n(t)-n(e)||String(e.name||"").localeCompare(String(t.name||""))||l(e.id,t.id)}function s(e,t){return e.bridge&&t.bridge?a(e.bridge,t.bridge):e.bridge?-1:t.bridge?1:l(e.id,t.id)}function d(e,t){return t.score-e.score||t.waysIn-e.waysIn||s(e.routes[0]||c,t.routes[0]||c)||String(e.person.name||"").localeCompare(String(t.person.name||""))||(e.key<t.key?-1:+(e.key>t.key))}let c={id:null,bridge:null};function u(e){let t=String(e||"").trim().split(/\s+/).filter(Boolean);return t.length<2?t[0]||"":`${t[0]} ${t[t.length-1].charAt(0)}.`}function f(e,t){let r=String(e||"");return t<=1?r?"…":"":r.length>t?`${r.slice(0,t-1)}…`:r}function g(e,t){return e?t.scanned.has(e.id)||e.profile_url&&t.read?.has(o(e))?"scanned":e.profile_url&&t.hidden.has(o(e))?"hidden":"todo":"todo"}function h(e,t){if(!e||1!==e.degree||null==e.unlocked_from_bridge_id)return null;let r=g(e,t);return"todo"===r?"ready":r}e.s(["TIERS",0,["S","A","B","C","D"],"compareBridges",0,a,"compareWaysIn",0,function(e,t){return t.waysIn-e.waysIn||d(e,t)},"keyFor",0,o,"routeIndex",0,function(e=[]){let t=new Map;for(let r of e||[]){let e=o(r),n=t.get(e);n||(n=new Set,t.set(e,n)),n.add(r.source_connection_id??null)}return t},"routesFor",0,function(e,t,r){return e?[...t?.get(o(e))??(null!=e.source_connection_id?new Set([e.source_connection_id]):new Set)].map(e=>({id:e,bridge:r?.get(e)??null})).sort(s):[]},"score",0,n,"score1",0,i,"separationPeople",0,function(e=[],r=[]){let n=new Map;for(let e of r||[])n.set(e.id,e);let a=new Map,c=new Map;for(let r of e||[]){let e=o(r);c.set(r.id,e);let n=a.get(e);n?function(e,r){let n=i(e)-i(r);if(n)return n>0;let o=!!(0,t.localPhoto)(e.profile_image_url);return!!(0,t.localPhoto)(r.profile_image_url)!==o?o:0>l(e.id,r.id)}(r,n.person)&&(n.person=r):(n={key:e,person:r,rowIds:[],routeIds:new Set},a.set(e,n)),n.rowIds.push(r.id),n.routeIds.add(r.source_connection_id??null)}let u={people:a.size,byTier:{S:0,A:0,B:0,C:0,D:0},multi:0,bridges:0,unresolvedIds:0,peopleOnlyUnresolved:0,onlyUnresolvedVia:0},f=new Set,g=new Set,h=new Set,p=[];for(let e of a.values()){let t=[...e.routeIds].map(e=>({id:e,bridge:n.get(e)??null}));t.sort(s);let r=t.filter(e=>e.bridge);for(let e of t)(e.bridge?f:g).add(e.id);if(!r.length)for(let e of(u.peopleOnlyUnresolved++,t))h.add(e.id);let{person:o}=e,l=o.tier;void 0!==u.byTier[l]&&u.byTier[l]++,t.length>1&&u.multi++,p.push({key:e.key,person:o,score:i(o),tier:l,routes:t,waysIn:t.length,rowIds:e.rowIds,haystack:[o.name,o.headline,o.company,o.role,...r.map(e=>e.bridge.name)].filter(Boolean).join("\n").toLowerCase(),rank:0,tied:!1})}return u.bridges=f.size,u.unresolvedIds=g.size,u.onlyUnresolvedVia=h.size,p.sort(d),function(e){for(let t=0;t<e.length;t++){let r=e[t],n=e[t-1],i=n&&n.score===r.score&&n.waysIn===r.waysIn;r.rank=i?n.rank:t+1,i&&(r.tied=!0,n.tied=!0)}}(p),{people:p,rowToKey:c,summary:u}},"shortName",0,u,"summitLayout",0,function(e=[],t=800,r=!1){let n=r?36:26,i=Math.round(.42*t),o=Math.round(.58*t),l=e.map((e,r)=>{var i;return{key:e.key,p:e,x:o,y:16+r*n,r:(i=e.waysIn)>=4?8.5:3===i?7:2===i?5.5:4,label:f(`#${e.rank}${e.tied?"=":""} ${e.person.name||""}`,Math.floor((t-o-60)/6.2))}}),s=new Map,d="\0unresolved";for(let e of l)for(let t of e.p.routes){let r=t.bridge?t.id:d,n=s.get(r);n||(n={id:t.bridge?t.id:null,bridge:t.bridge,unresolved:!t.bridge,ys:[],count:0},s.set(r,n)),n.count++,n.ys.push(e.y)}let c=[...s.values()].map(e=>({...e,bary:e.ys.reduce((e,t)=>e+t,0)/e.ys.length}));c.sort((e,t)=>e.bary-t.bary||e.unresolved-t.unresolved||(e.bridge&&t.bridge?a(e.bridge,t.bridge):0));let g=l.length?l[l.length-1].y:16,h=c.length>1?Math.max(18,(g-16)/(c.length-1)):0,p=Math.max(4,Math.floor((i-10-42)/6));c.forEach((e,t)=>{if(e.x=i,e.y=1===c.length?(16+g)/2:16+t*h,e.r=5,e.unresolved)e.label=f(`can't be named (${e.count})`,p);else{let t=e.bridge.name||"";e.label=t.length<=p?t:f(u(t),p)}delete e.ys});let y=new Map(c.map(e=>[e.unresolved?d:e.id,e])),m=[];for(let e of l){let t=new Set;e.p.routes.forEach((r,n)=>{let i=r.bridge?r.id:d;if(t.has(i))return;t.add(i);let o=y.get(i);m.push({key:e.key,bridgeId:o.id,primary:0===n&&!o.unresolved,unresolved:o.unresolved,tier:o.bridge?.tier??null,x1:o.x,y1:o.y,x2:e.x,y2:e.y})})}let b=Math.max(g,c.length?c[c.length-1].y:0),x=l.length?Math.ceil(b+16):0,v={x:20,y:l.length?(16+Math.max(g,b))/2:16,r:14},S=c.map(e=>({id:e.id,x1:v.x,y1:v.y,x2:e.x,y2:e.y}));return{width:t,height:x,you:v,people:l,bridges:c,links:m,spokes:S}}],7214),e.s(["circleScanCost",0,function(e=100){let t=Math.max(1,Math.min(100,Math.round(e)||100));return{profileViews:1,searches:t,minutes:t>=100?55:Math.max(5,Math.round(.55*t))}},"circleState",0,g,"reachIndex",0,function(e=[],t=[],r={}){let n=new Set;for(let e of t||[])e?.source_connection_id!=null&&n.add(e.source_connection_id);let i=new Set;for(let e of r?.skips||[])e?.profileUrl&&i.add(o({profile_url:e.profileUrl}));let l=new Set;for(let e of r?.read||[])e&&l.add(o({profile_url:e}));let a=new Map;for(let t of e||[]){let e=t?.unlocked_from_bridge_id;if(null==e||1!==t.degree)continue;let r=a.get(e);r||a.set(e,r=[]),r.push(t)}return{scanned:n,read:l,hidden:i,reachedFrom:a}},"reachState",0,h,"readyByCircle",0,function(e){let t=new Map;for(let[r,n]of e.reachedFrom){let i=n.filter(t=>"ready"===h(t,e)).length;i&&t.set(r,i)}return t},"readyToScan",0,function(e,t){return(e||[]).filter(e=>"ready"===h(e,t)).sort(a)}],48235)},69083,e=>{"use strict";var t=e.i(89154);let r=new Map(t.INDUSTRIES.map(e=>[e.key,e.color])),n=new Map([...t.INDUSTRIES.map(e=>[e.key,Object.freeze({key:e.key,label:e.label,color:e.color,group:e.key,kind:"industry"})]),...Object.entries({software:["Software & SaaS","tech","function"],"ai-data":["AI & Data","tech","function"],cybersecurity:["Cybersecurity","tech","function"],telecom:["Telecom","tech","industry"],fintech:["Fintech & Payments","finance","industry"],banking:["Banking & Lending","finance","industry"],"vc-pe":["Venture Capital & Private Equity","finance","industry"],wealth:["Wealth & Asset Management","finance","industry"],insurance:["Insurance","finance","industry"],accounting:["Accounting & Tax","finance","function"],crypto:["Crypto & Web3","finance","industry"],hospitals:["Hospitals & Clinics","health","industry"],dental:["Dental","health","industry"],"pharma-biotech":["Pharma & Biotech","health","industry"],"medical-devices":["Medical Devices","health","industry"],"mental-health":["Mental Health","health","industry"],"fitness-wellness":["Fitness & Wellness","health","industry"],veterinary:["Veterinary & Animal Care","health","industry"],k12:["K-12 Education","education","industry"],"higher-ed":["Higher Education","education","industry"],"marketing-advertising":["Marketing & Advertising","media","function"],"pr-comms":["PR & Communications","media","function"],"media-publishing":["Media & Publishing","media","industry"],"creator-economy":["Creator Economy","media","industry"],"film-tv-music":["Film, TV & Music","entertainment","industry"],"gaming-esports":["Gaming & Esports","entertainment","industry"],sports:["Sports","entertainment","industry"],"ecommerce-retail":["E-commerce & Retail","consumer","industry"],"consumer-goods":["Consumer Goods","consumer","industry"],restaurants:["Restaurants & Food Service","consumer","industry"],"hospitality-travel":["Hospitality & Travel","consumer","industry"],"beauty-personal-care":["Beauty & Personal Care","consumer","industry"],logistics:["Logistics & Supply Chain","industry","industry"],manufacturing:["Manufacturing","industry","industry"],energy:["Energy & Utilities","industry","industry"],automotive:["Automotive","industry","industry"],agriculture:["Agriculture & Farming","industry","industry"],"aerospace-defense":["Aerospace & Defense","defense","industry"],military:["Military","defense","industry"],government:["Government & Public Sector","defense","industry"],legal:["Legal","consulting","function"],"management-consulting":["Management Consulting","consulting","function"],"hr-recruiting":["HR & Recruiting","consulting","function"],"security-services":["Security Services","consulting","function"],"real-estate":["Real Estate","realestate","industry"],"construction-trades":["Construction & Trades","realestate","industry"],charities:["Nonprofits & Charities","nonprofit","industry"],"social-work":["Social Work & Human Services","nonprofit","industry"],faith:["Faith & Ministry","nonprofit","industry"]}).map(([e,[n,i,o]])=>[e,Object.freeze({key:e,label:n,color:r.get(i)||t.UNKNOWN_INDUSTRY.color,group:i,kind:o})])]);e.s(["sectorByKey",0,function(e){return n.get(e)||{key:e,label:t.UNKNOWN_INDUSTRY.label,color:t.UNKNOWN_INDUSTRY.color,group:null,kind:null}}])},5258,e=>{"use strict";e.s(["TIER_COLORS",0,{S:"#f6c344",A:"#a78bfa",B:"#60a5fa",C:"#94a3b8",D:"#6b7280"},"TIER_COLORS_CLASSIC",0,{S:"#FFD700",A:"#9B59B6",B:"#3498DB",C:"#95A5A6",D:"#BDC3C7"},"TIER_ORDER",0,["S","A","B","C","D"],"TIER_RING_RADIUS",0,{S:150,A:230,B:310,C:390,D:470},"initialsFor",0,function(e){let t=String(e||"").trim().split(/\s+/).filter(Boolean);return 0===t.length?"?":(t[0].charAt(0)+(t.length>1?t[t.length-1].charAt(0):"")).toUpperCase()}])},22016,(e,t,r)=>{"use strict";e.i(47167),Object.defineProperty(r,"__esModule",{value:!0});var n={default:function(){return m},useLinkStatus:function(){return x}};for(var i in n)Object.defineProperty(r,i,{enumerable:!0,get:n[i]});let o=e.r(90809),l=e.r(43476),a=o._(e.r(71645)),s=e.r(95057),d=e.r(8372),c=e.r(18581),u=e.r(18967),f=e.r(5550),g=e.r(88540),h=e.r(91949),p=e.r(73668),y=e.r(9396);function m(t){var r;let n,i,o,[m,x]=(0,a.useOptimistic)(h.IDLE_LINK_STATUS),v=(0,a.useRef)(null),{href:S,as:j,children:w,prefetch:k=null,passHref:C,replace:_,shallow:I,scroll:B,onClick:R,onMouseEnter:T,onTouchStart:D,legacyBehavior:M=!1,onNavigate:A,transitionTypes:E,ref:F,unstable_dynamicOnHover:z,...P}=t;n=w,M&&("string"==typeof n||"number"==typeof n)&&(n=(0,l.jsx)("a",{children:n}));let O=a.default.useContext(d.AppRouterContext),N=!1!==k,W=!1===k?"none":!0===k?"full":"auto",L="none"!==W?"auto"===W?y.FetchStrategy.PPR:y.FetchStrategy.Full:y.FetchStrategy.PPR,U="string"==typeof(r=j||S)?r:(0,s.formatUrl)(r);if(M){if(n?.$$typeof===Symbol.for("react.lazy"))throw Object.defineProperty(Error("`<Link legacyBehavior>` received a direct child that is either a Server Component, or JSX that was loaded with React.lazy(). This is not supported. Either remove legacyBehavior, or make the direct child a Client Component that renders the Link's `<a>` tag."),"__NEXT_ERROR_CODE",{value:"E863",enumerable:!1,configurable:!0});i=a.default.Children.only(n)}let $=M?i&&"object"==typeof i&&i.ref:F,K,H=a.default.useCallback(e=>(null!==O&&(v.current=(0,h.mountLinkInstance)(e,U,O,L,N,x,K)),()=>{v.current&&((0,h.unmountLinkForCurrentNavigation)(v.current),v.current=null),(0,h.unmountPrefetchableInstance)(e)}),[N,U,O,L,x,K]),V={ref:(0,c.useMergedRef)(H,$),onClick(t){M||"function"!=typeof R||R(t),M&&i.props&&"function"==typeof i.props.onClick&&i.props.onClick(t),!O||t.defaultPrevented||function(t,r,n,i,o,l,s,d="none"){if("u">typeof window){let c,{nodeName:u}=t.currentTarget;if("A"===u.toUpperCase()&&((c=t.currentTarget.getAttribute("target"))&&"_self"!==c||t.metaKey||t.ctrlKey||t.shiftKey||t.altKey||t.nativeEvent&&2===t.nativeEvent.which)||t.currentTarget.hasAttribute("download"))return;if(!(0,p.isLocalURL)(r)){i&&(t.preventDefault(),location.replace(r));return}if(t.preventDefault(),l){let e=!1;if(l({preventDefault:()=>{e=!0}}),e)return}let{dispatchNavigateAction:f}=e.r(99781);a.default.startTransition(()=>{f(r,i?"replace":"push",!1===o?g.ScrollBehavior.NoScroll:g.ScrollBehavior.Default,n.current,s,d)})}}(t,U,v,_,B,A,E,W)},onMouseEnter(e){M||"function"!=typeof T||T(e),M&&i.props&&"function"==typeof i.props.onMouseEnter&&i.props.onMouseEnter(e),O&&N&&(0,h.onNavigationIntent)(e.currentTarget,!0===z)},onTouchStart:function(e){M||"function"!=typeof D||D(e),M&&i.props&&"function"==typeof i.props.onTouchStart&&i.props.onTouchStart(e),O&&N&&(0,h.onNavigationIntent)(e.currentTarget,!0===z)}};return(0,u.isAbsoluteUrl)(U)?V.href=U:M&&!C&&("a"!==i.type||"href"in i.props)||(V.href=(0,f.addBasePath)(U)),o=M?a.default.cloneElement(i,V):(0,l.jsx)("a",{...P,...V,children:n}),(0,l.jsx)(b.Provider,{value:m,children:o})}let b=(0,a.createContext)(h.IDLE_LINK_STATUS),x=()=>(0,a.useContext)(b);("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},18581,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"useMergedRef",{enumerable:!0,get:function(){return i}});let n=e.r(71645);function i(e,t){let r=(0,n.useRef)(null),i=(0,n.useRef)(null);return(0,n.useCallback)(n=>{if(null===n){let e=r.current;e&&(r.current=null,e());let t=i.current;t&&(i.current=null,t())}else e&&(r.current=o(e,n)),t&&(i.current=o(t,n))},[e,t])}function o(e,t){if("function"!=typeof e)return e.current=t,()=>{e.current=null};{let r=e(t);return"function"==typeof r?r:()=>e(null)}}("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},18967,(e,t,r)=>{"use strict";e.i(47167),Object.defineProperty(r,"__esModule",{value:!0});var n={DecodeError:function(){return m},MiddlewareNotFoundError:function(){return S},MissingStaticPage:function(){return v},NormalizeError:function(){return b},PageNotFoundError:function(){return x},SP:function(){return p},ST:function(){return y},WEB_VITALS:function(){return o},execOnce:function(){return l},getDisplayName:function(){return u},getLocationOrigin:function(){return d},getURL:function(){return c},isAbsoluteUrl:function(){return s},isResSent:function(){return f},loadGetInitialProps:function(){return h},normalizeRepeatedSlashes:function(){return g},stringifyError:function(){return j}};for(var i in n)Object.defineProperty(r,i,{enumerable:!0,get:n[i]});let o=["CLS","FCP","FID","INP","LCP","TTFB"];function l(e){let t,r=!1;return(...n)=>(r||(r=!0,t=e(...n)),t)}let a=/^[a-zA-Z][a-zA-Z\d+\-.]*?:/,s=e=>{let t=e.charCodeAt(0);return!!(t>=65&&t<=90||t>=97&&t<=122)&&a.test(e)};function d(){let{protocol:e,hostname:t,port:r}=window.location;return`${e}//${t}${r?":"+r:""}`}function c(){let{href:e}=window.location,t=d();return e.substring(t.length)}function u(e){return"string"==typeof e?e:e.displayName||e.name||"Unknown"}function f(e){return e.finished||e.headersSent}function g(e){let t=e.split("?");return t[0].replace(/\\/g,"/").replace(/\/\/+/g,"/")+(t[1]?`?${t.slice(1).join("?")}`:"")}async function h(e,t){let r=t.res||t.ctx&&t.ctx.res;if(!e.getInitialProps)return t.ctx&&t.Component?{pageProps:await h(t.Component,t.ctx)}:{};let n=await e.getInitialProps(t);if(r&&f(r))return n;if(!n)throw Object.defineProperty(Error(`"${u(e)}.getInitialProps()" should resolve to an object. But found "${n}" instead.`),"__NEXT_ERROR_CODE",{value:"E1025",enumerable:!1,configurable:!0});return n}let p="u">typeof performance,y=p&&["mark","measure","getEntriesByName"].every(e=>"function"==typeof performance[e]);class m extends Error{}class b extends Error{}class x extends Error{constructor(e){super(),this.code="ENOENT",this.name="PageNotFoundError",this.message=`Cannot find module for page: ${e}`}}class v extends Error{constructor(e,t){super(),this.message=`Failed to load static file for page: ${e} ${t}`}}class S extends Error{constructor(){super(),this.code="ENOENT",this.message="Cannot find the middleware module"}}function j(e){return JSON.stringify({message:e.message,stack:e.stack})}},73668,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"isLocalURL",{enumerable:!0,get:function(){return o}});let n=e.r(18967),i=e.r(52817);function o(e){if(!(0,n.isAbsoluteUrl)(e))return!0;try{let t=(0,n.getLocationOrigin)(),r=new URL(e,t);return r.origin===t&&(0,i.hasBasePath)(r.pathname)}catch(e){return!1}}},98183,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={assign:function(){return s},searchParamsToUrlQuery:function(){return o},urlQueryToSearchParams:function(){return a}};for(var i in n)Object.defineProperty(r,i,{enumerable:!0,get:n[i]});function o(e){let t={};for(let[r,n]of e.entries()){let e=t[r];void 0===e?t[r]=n:Array.isArray(e)?e.push(n):t[r]=[e,n]}return t}function l(e){return"string"==typeof e?e:("number"!=typeof e||isNaN(e))&&"boolean"!=typeof e?"":String(e)}function a(e){let t=new URLSearchParams;for(let[r,n]of Object.entries(e))if(Array.isArray(n))for(let e of n)t.append(r,l(e));else t.set(r,l(n));return t}function s(e,...t){for(let r of t){for(let t of r.keys())e.delete(t);for(let[t,n]of r.entries())e.append(t,n)}return e}},95057,(e,t,r)=>{"use strict";e.i(47167),Object.defineProperty(r,"__esModule",{value:!0});var n={formatUrl:function(){return a},formatWithValidation:function(){return d},urlObjectKeys:function(){return s}};for(var i in n)Object.defineProperty(r,i,{enumerable:!0,get:n[i]});let o=e.r(90809)._(e.r(98183)),l=/https?|ftp|gopher|file/;function a(e){let{auth:t,hostname:r}=e,n=e.protocol||"",i=e.pathname||"",a=e.hash||"",s=e.query||"",d=!1;t=t?encodeURIComponent(t).replace(/%3A/i,":")+"@":"",e.host?d=t+e.host:r&&(d=t+(~r.indexOf(":")?`[${r}]`:r),e.port&&(d+=":"+e.port)),s&&"object"==typeof s&&(s=String(o.urlQueryToSearchParams(s)));let c=e.search||s&&`?${s}`||"";return n&&!n.endsWith(":")&&(n+=":"),e.slashes||(!n||l.test(n))&&!1!==d?(d="//"+(d||""),i&&"/"!==i[0]&&(i="/"+i)):d||(d=""),a&&"#"!==a[0]&&(a="#"+a),c&&"?"!==c[0]&&(c="?"+c),i=i.replace(/[?#]/g,encodeURIComponent),c=c.replace("#","%23"),`${n}${d}${i}${c}${a}`}let s=["auth","hash","host","hostname","href","path","pathname","port","protocol","query","search","slashes"];function d(e){return a(e)}}]);
|
|
1
|
+
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,2776,e=>{"use strict";var t=e.i(43476),r=e.i(15812);e.s(["default",0,function({children:e}){let{userId:n,ready:i}=(0,r.useUser)();return i&&n?e:(0,t.jsx)("div",{style:{minHeight:"100vh",display:"flex",alignItems:"center",justifyContent:"center",background:"#0a0a1a",color:"#fff",padding:24,textAlign:"center",fontFamily:'-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif'},children:i?(0,t.jsxs)("div",{style:{maxWidth:420},children:[(0,t.jsx)("div",{style:{fontSize:18,fontWeight:700,marginBottom:8},children:"Can’t reach Six Degrees’ local server"}),(0,t.jsx)("div",{style:{color:"#888",fontSize:14,lineHeight:1.6},children:"The page loaded but the app behind it is not answering. If you started it from a terminal, check that window for an error, then reload this page."})]}):(0,t.jsx)("div",{style:{fontSize:18,fontWeight:600},children:"Loading…"})})}])},99201,e=>{"use strict";var t=e.i(43476),r=e.i(71645),n=e.i(19821),i=e.i(5258),o=e.i(48235);let l={height:10,borderRadius:6},a={background:"rgba(52,152,219,0.06)",borderRadius:12,padding:20,marginBottom:24,border:"1px solid rgba(52,152,219,0.2)"};function s({degree1:e=[],degree2:r=[],skips:n=[]}){let c=function(e=[],t=[],r=[]){let n=(0,o.reachIndex)(e,t,{skips:r}),i=e=>{let t=(0,o.circleState)(e,n);return"scanned"===t?"mapped":t},l={mapped:0,hidden:0,todo:0},a={};for(let t of e){let e=i(t);l[e]+=1;let r=t.tier||"D";a[r]=a[r]||{mapped:0,hidden:0,todo:0,total:0},a[r][e]+=1,a[r].total+=1}let s=e.length,d=l.mapped+l.hidden;return{...l,total:s,resolved:d,percent:s?Math.round(d/s*100):0,batches:Math.ceil(l.todo/25),byTier:a}}(e,r,n);if(!c.total)return null;let u=e=>c.total?e/c.total*100:0,f=0===c.todo;return(0,t.jsxs)("div",{style:a,children:[(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"baseline",marginBottom:10},children:[(0,t.jsx)("h3",{style:{fontSize:14,fontWeight:700,margin:0,color:"#3498DB"},children:"2nd-degree mapping"}),(0,t.jsx)("span",{style:{fontSize:12,color:f?"#00ff88":"#8b9a9a",fontWeight:600},children:f?"Everything reachable is mapped":`${c.percent}%`})]}),(0,t.jsxs)("div",{style:{...l,display:"flex",overflow:"hidden",background:"rgba(255,255,255,0.06)"},children:[(0,t.jsx)("div",{style:{width:`${u(c.mapped)}%`,background:"#00ff88"}}),(0,t.jsx)("div",{style:{width:`${u(c.hidden)}%`,background:"rgba(255,255,255,0.22)"}})]}),(0,t.jsxs)("div",{style:{display:"flex",gap:16,marginTop:10,fontSize:12,flexWrap:"wrap"},children:[(0,t.jsx)(d,{color:"#00ff88",label:"mapped",value:c.mapped}),(0,t.jsx)(d,{color:"rgba(255,255,255,0.35)",label:"hidden",value:c.hidden}),(0,t.jsx)(d,{color:"rgba(255,255,255,0.12)",label:"to go",value:c.todo}),(0,t.jsxs)("span",{style:{color:"#667",marginLeft:"auto"},children:["of ",c.total]})]}),c.hidden>0&&(0,t.jsx)("p",{style:{fontSize:11.5,color:"#667",margin:"10px 0 0",lineHeight:1.6},children:"Hidden means they keep their connections private — that will not change, and it does not count against you."}),!f&&(0,t.jsxs)("p",{style:{fontSize:11.5,color:"#8b9a9a",margin:"10px 0 0",lineHeight:1.6},children:[c.todo," left — about ",(0,t.jsxs)("b",{children:[c.batches," ",1===c.batches?"batch":"batches"]})," of ",25,". Run one, leave it a while, run another. Long unbroken runs are what gets an account restricted."]}),(0,t.jsx)("div",{style:{marginTop:16,display:"flex",flexDirection:"column",gap:7},children:["S","A","B","C","D"].filter(e=>c.byTier[e]?.total).map(e=>{let r=c.byTier[e];return(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:10,fontSize:11},children:[(0,t.jsx)("span",{style:{width:14,color:i.TIER_COLORS_CLASSIC[e],fontWeight:700},children:e}),(0,t.jsxs)("div",{style:{flex:1,height:5,borderRadius:3,display:"flex",overflow:"hidden",background:"rgba(255,255,255,0.06)"},children:[(0,t.jsx)("div",{style:{width:`${r.mapped/r.total*100}%`,background:i.TIER_COLORS_CLASSIC[e]}}),(0,t.jsx)("div",{style:{width:`${r.hidden/r.total*100}%`,background:"rgba(255,255,255,0.22)"}})]}),(0,t.jsxs)("span",{style:{color:"#667",width:62,textAlign:"right"},children:[r.mapped,"/",r.total]})]},e)})})]})}function d({color:e,label:r,value:n}){return(0,t.jsxs)("span",{style:{display:"flex",alignItems:"center",gap:6,color:"#8b9a9a"},children:[(0,t.jsx)("span",{style:{width:8,height:8,borderRadius:2,background:e}}),(0,t.jsx)("b",{style:{color:"#e2e8f0"},children:n})," ",r]})}var c=e.i(64745),u=e.i(2776),f=e.i(15812),g=e.i(69083),h=e.i(22016);let p={1:"Observer",11:"Connector",31:"Networker",51:"Strategist",76:"Architect"};function y(){let{userId:e,userName:i,userProfile:o}=(0,f.useUser)(),l=o||{name:i||"User",headline:"",sectors:[],goals:[]},[a,d]=(0,r.useState)(null),[u,y]=(0,r.useState)(!0),[b,x]=(0,r.useState)([]),[v,S]=(0,r.useState)({total:0,sent:0,accepted:0}),[j,w]=(0,r.useState)({degree1:[],degree2:[],skips:[]}),[k,C]=(0,r.useState)(null);if((0,r.useEffect)(()=>{!c.IS_DEMO&&e&&t();async function t(){fetch("/api/settings").then(e=>e.json().then(t=>e.ok&&t.settings?t:Promise.reject(Error(t.error)))).then(e=>C(e.settings.sectorFocus||{sectors:[],strength:"lean"})).catch(()=>C({failed:!0}));let t=await (0,n.loadNetwork)(e),r=t.degree1,i=t.degree2,o={S:0,A:0,B:0,C:0,D:0};r.forEach(e=>{o[e.tier]=(o[e.tier]||0)+1});let l={S:0,A:0,B:0,C:0,D:0};i.forEach(e=>{l[e.tier]=(l[e.tier]||0)+1});let a=[...new Set(i.map(e=>e.source_connection_id).filter(Boolean))].length,s=r.filter(e=>e.is_catalyst).length,c={};r.forEach(e=>{e.company&&(c[e.company]=(c[e.company]||0)+1)});let u=Object.entries(c).sort((e,t)=>t[1]-e[1]).slice(0,10),f=100*o.S+40*o.A+15*o.B+5*o.C+ +o.D+200*a+150*s+50*l.S+r.length,g=Math.floor(Math.sqrt(f/10)),h=g*g*10,p=(g+1)*(g+1)*10;d({d1Count:r.length,d2Count:i.length,tiers:o,d2Tiers:l,clusters:a,catalysts:s,networkPower:f,level:g,xpProgress:(f-h)/(p-h)*100,topCompanies:u,unlockedPaths:0}),fetch("/api/scraper").then(e=>e.json()).then(e=>w({degree1:r,degree2:i,skips:e.skips||[]})).catch(()=>w({degree1:r,degree2:i,skips:[]})),fetch(`/api/notifications?userId=${e}`).then(e=>e.json()).then(e=>x(e.notifications||[])).catch(()=>{}),fetch("/api/queue").then(e=>e.json()).then(e=>{let t=e.items||[];S({total:t.length,sent:t.filter(e=>"sent"===e.status).length,accepted:t.filter(e=>"accepted"===e.status).length})}).catch(()=>{}),y(!1)}},[e]),c.IS_DEMO)return(0,t.jsxs)("div",{style:{minHeight:"100vh",background:"#0a0a1a",color:"rgba(255,255,255,0.7)",display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",gap:12,textAlign:"center",padding:24,fontFamily:'-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif'},children:[(0,t.jsx)("h2",{style:{margin:0,fontSize:20,fontWeight:700,color:"#fff"},children:"Not part of the demo"}),(0,t.jsx)("p",{style:{margin:0,fontSize:13},children:"The public demo includes the Network Circle and Degrees views only."}),(0,t.jsx)(h.default,{href:"/",style:{fontSize:12,color:"rgba(255,255,255,0.5)",textDecoration:"none"},children:"← Back to the network"})]});if(u)return(0,t.jsx)("div",{style:{minHeight:"100vh",display:"flex",alignItems:"center",justifyContent:"center",background:"#0a0a1a",color:"#fff"},children:"Loading profile..."});let _={S:"#FFD700",A:"#9B59B6",B:"#3498DB",C:"#95A5A6",D:"#BDC3C7"},B=[{label:"First S-Tier",done:a.tiers.S>0,icon:"👑"},{label:"100 Connections",done:a.d1Count>=100,icon:"🔗"},{label:"500 Connections",done:a.d1Count>=500,icon:"🌐"},{label:"First Cluster",done:a.clusters>0,icon:"🔭"},{label:"10 Clusters",done:a.clusters>=10,icon:"🏰"},{label:"50 S-Tier",done:a.tiers.S>=50,icon:"💎"},{label:"Catalyst Found",done:a.catalysts>0,icon:"⚡"},{label:"Level 25",done:a.level>=25,icon:"🎯"},{label:"Level 50",done:a.level>=50,icon:"🚀"},{label:"D2 S-Tier > 50",done:a.d2Tiers.S>=50,icon:"🌟"}];return(0,t.jsxs)("div",{style:{height:"100vh",background:"#0a0a1a",color:"#fff",fontFamily:'-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif',display:"flex",flexDirection:"column",overflow:"hidden"},children:[(0,t.jsxs)("header",{style:{padding:"16px 24px",borderBottom:"1px solid rgba(255,255,255,0.1)",display:"flex",alignItems:"center",gap:16},children:[(0,t.jsxs)(h.default,{href:"/",style:{display:"flex",alignItems:"center",gap:6,color:"#888",textDecoration:"none",fontSize:13,fontWeight:600,padding:"6px 14px",borderRadius:6,background:"rgba(255,255,255,0.06)",border:"1px solid rgba(255,255,255,0.1)"},children:[(0,t.jsx)("span",{style:{fontSize:16},children:"←"})," Back to Map"]}),(0,t.jsx)("h1",{style:{fontSize:22,fontWeight:700,margin:0,background:"linear-gradient(135deg, #FFD700, #9B59B6, #3498DB)",WebkitBackgroundClip:"text",WebkitTextFillColor:"transparent"},children:"Profile"})]}),(0,t.jsx)("div",{style:{flex:1,overflow:"auto",padding:"30px 20px"},children:(0,t.jsxs)("div",{style:{maxWidth:700,margin:"0 auto"},children:[(0,t.jsxs)("div",{style:{background:"rgba(255,255,255,0.05)",borderRadius:16,padding:32,marginBottom:24,border:"1px solid rgba(255,215,0,0.2)",textAlign:"center"},children:[(0,t.jsx)("div",{style:{width:100,height:100,borderRadius:"50%",margin:"0 auto 16px",background:"linear-gradient(135deg, #FFD700, #FF6B35)",display:"flex",alignItems:"center",justifyContent:"center",fontSize:36,fontWeight:800,color:"#000",boxShadow:"0 0 30px rgba(255,215,0,0.3)"},children:a.level}),(0,t.jsx)("div",{style:{fontSize:24,fontWeight:700,marginBottom:4},children:l.name}),(0,t.jsx)("div",{style:{fontSize:14,color:"#888",marginBottom:4},children:l.headline}),(0,t.jsx)("div",{style:{display:"inline-block",padding:"4px 16px",borderRadius:20,background:"rgba(255,215,0,0.15)",border:"1px solid rgba(255,215,0,0.3)",color:"#FFD700",fontSize:13,fontWeight:700,marginBottom:16},children:function(e){let t="Observer";for(let[r,n]of Object.entries(p))e>=parseInt(r)&&(t=n);return t}(a.level)}),(0,t.jsxs)("div",{style:{maxWidth:300,margin:"0 auto"},children:[(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",fontSize:10,color:"#666",marginBottom:4},children:[(0,t.jsxs)("span",{children:["Level ",a.level]}),(0,t.jsxs)("span",{children:["Level ",a.level+1]})]}),(0,t.jsx)("div",{style:{height:8,background:"rgba(255,255,255,0.1)",borderRadius:4},children:(0,t.jsx)("div",{style:{height:"100%",width:`${Math.min(a.xpProgress,100)}%`,background:"linear-gradient(90deg, #FFD700, #FF6B35)",borderRadius:4,transition:"width 1s ease"}})}),(0,t.jsxs)("div",{style:{fontSize:10,color:"#888",marginTop:4},children:["Network Power: ",a.networkPower.toLocaleString()]})]})]}),(0,t.jsx)(s,{degree1:j.degree1,degree2:j.degree2,skips:j.skips}),(0,t.jsxs)("div",{style:{background:"rgba(255,107,53,0.06)",borderRadius:12,padding:20,marginBottom:24,border:"1px solid rgba(255,107,53,0.2)"},children:[(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:12},children:[(0,t.jsx)("h3",{style:{fontSize:14,fontWeight:700,margin:0,color:"#FF6B35"},children:"Queue Progress"}),(0,t.jsx)(h.default,{href:"/queue",style:{fontSize:11,color:"#FF6B35",textDecoration:"none",fontWeight:600},children:"View Queue →"})]}),(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr 1fr",gap:12},children:[(0,t.jsxs)("div",{style:{textAlign:"center"},children:[(0,t.jsx)("div",{style:{fontSize:22,fontWeight:700,color:"#FFA500"},children:v.total}),(0,t.jsx)("div",{style:{fontSize:10,color:"#888"},children:"In Queue"})]}),(0,t.jsxs)("div",{style:{textAlign:"center"},children:[(0,t.jsx)("div",{style:{fontSize:22,fontWeight:700,color:"#3498DB"},children:v.sent}),(0,t.jsx)("div",{style:{fontSize:10,color:"#888"},children:"Sent"})]}),(0,t.jsxs)("div",{style:{textAlign:"center"},children:[(0,t.jsx)("div",{style:{fontSize:22,fontWeight:700,color:"#00ff88"},children:v.accepted}),(0,t.jsx)("div",{style:{fontSize:10,color:"#888"},children:"Accepted"})]})]})]}),b.length>0&&(0,t.jsxs)("div",{style:{background:"rgba(255,255,255,0.04)",borderRadius:12,padding:20,marginBottom:24,border:"1px solid rgba(255,255,255,0.08)"},children:[(0,t.jsxs)("h3",{style:{fontSize:14,fontWeight:700,marginTop:0,marginBottom:12},children:["Recent Activity (",b.filter(e=>!e.seen).length," new)"]}),(0,t.jsx)("div",{style:{display:"flex",flexDirection:"column",gap:6,maxHeight:200,overflowY:"auto"},children:b.slice(0,10).map(e=>(0,t.jsxs)("div",{style:{display:"flex",gap:8,alignItems:"center",padding:"6px 8px",borderRadius:6,background:e.seen?"transparent":"rgba(255,215,0,0.05)",borderLeft:e.seen?"none":"2px solid #FFD700"},children:[(0,t.jsx)("span",{style:{fontSize:16},children:e.icon||"📌"}),(0,t.jsxs)("div",{style:{flex:1,minWidth:0},children:[(0,t.jsx)("div",{style:{fontSize:12,fontWeight:600,color:e.seen?"#888":"#fff"},children:e.title}),e.message&&(0,t.jsx)("div",{style:{fontSize:10,color:"#666"},children:e.message})]}),(0,t.jsx)("span",{style:{fontSize:9,color:"#555",flexShrink:0},children:new Date(e.created_at).toLocaleDateString()})]},e.id))})]}),(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr 1fr",gap:12,marginBottom:24},children:[(0,t.jsx)(m,{label:"Connections",value:a.d1Count}),(0,t.jsx)(m,{label:"Degree-2 Reach",value:a.d2Count}),(0,t.jsx)(m,{label:"Clusters",value:a.clusters}),(0,t.jsx)(m,{label:"S-Tier",value:a.tiers.S,color:"#FFD700"}),(0,t.jsx)(m,{label:"A-Tier",value:a.tiers.A,color:"#9B59B6"}),(0,t.jsx)(m,{label:"Catalysts",value:a.catalysts,color:"#00ff88"})]}),(0,t.jsxs)("div",{style:{background:"rgba(255,255,255,0.04)",borderRadius:12,padding:20,marginBottom:24,border:"1px solid rgba(255,255,255,0.08)"},children:[(0,t.jsx)("h3",{style:{fontSize:14,fontWeight:700,marginTop:0,marginBottom:12},children:"Tier Distribution"}),["S","A","B","C","D"].map(e=>{let r=a.tiers[e]||0,n=a.d1Count>0?r/a.d1Count*100:0;return(0,t.jsxs)("div",{style:{marginBottom:8},children:[(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",fontSize:11,marginBottom:2},children:[(0,t.jsxs)("span",{style:{color:_[e],fontWeight:600},children:[e,"-Tier"]}),(0,t.jsxs)("span",{style:{color:"#888"},children:[r," (",n.toFixed(1),"%)"]})]}),(0,t.jsx)("div",{style:{height:6,background:"rgba(255,255,255,0.08)",borderRadius:3},children:(0,t.jsx)("div",{style:{height:"100%",width:`${n}%`,background:_[e],borderRadius:3}})})]},e)})]}),(0,t.jsxs)("div",{style:{background:"rgba(255,255,255,0.04)",borderRadius:12,padding:20,marginBottom:24,border:"1px solid rgba(255,255,255,0.08)"},children:[(0,t.jsx)("h3",{style:{fontSize:14,fontWeight:700,marginTop:0,marginBottom:12},children:"Degree-2 Reach"}),(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:12},children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("div",{style:{fontSize:24,fontWeight:700,color:"#FF6B35"},children:a.d2Count}),(0,t.jsx)("div",{style:{fontSize:11,color:"#888"},children:"People reachable via bridges"})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("div",{style:{fontSize:24,fontWeight:700,color:"#FFD700"},children:a.d2Tiers.S}),(0,t.jsx)("div",{style:{fontSize:11,color:"#888"},children:"S-Tier degree-2"})]})]})]}),(0,t.jsxs)("div",{style:{background:"rgba(255,255,255,0.04)",borderRadius:12,padding:20,marginBottom:24,border:"1px solid rgba(255,255,255,0.08)"},children:[(0,t.jsxs)("h3",{style:{fontSize:14,fontWeight:700,marginTop:0,marginBottom:12},children:["Milestones (",B.filter(e=>e.done).length,"/",B.length,")"]}),(0,t.jsx)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:8},children:B.map((e,r)=>(0,t.jsxs)("div",{style:{padding:"8px 10px",borderRadius:8,fontSize:12,background:e.done?"rgba(255,215,0,0.08)":"rgba(255,255,255,0.02)",border:`1px solid ${e.done?"rgba(255,215,0,0.2)":"rgba(255,255,255,0.05)"}`,color:e.done?"#FFD700":"#555",display:"flex",alignItems:"center",gap:6},children:[(0,t.jsx)("span",{style:{fontSize:16},children:e.done?e.icon:"🔒"}),(0,t.jsx)("span",{style:{fontWeight:e.done?600:400},children:e.label})]},r))})]}),(0,t.jsxs)("div",{style:{background:"rgba(255,255,255,0.04)",borderRadius:12,padding:20,marginBottom:24,border:"1px solid rgba(255,255,255,0.08)"},children:[(0,t.jsx)("h3",{style:{fontSize:14,fontWeight:700,marginTop:0,marginBottom:12},children:"Top Companies in Your Network"}),a.topCompanies.map(([e,r],n)=>(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",padding:"4px 0",borderBottom:n<a.topCompanies.length-1?"1px solid rgba(255,255,255,0.04)":"none",fontSize:12},children:[(0,t.jsx)("span",{children:e}),(0,t.jsx)("span",{style:{color:"#888"},children:r})]},n))]}),(0,t.jsxs)("div",{style:{background:"rgba(255,255,255,0.04)",borderRadius:12,padding:20,border:"1px solid rgba(255,255,255,0.08)"},children:[(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:12},children:[(0,t.jsx)("h3",{style:{fontSize:14,fontWeight:700,margin:0},children:"Your Sectors"}),(0,t.jsxs)(h.default,{href:"/scores#sector",style:{fontSize:11,color:"#3498DB",textDecoration:"none",fontWeight:600},children:[k?.sectors?.length?"Change":k&&!k.failed?"Pick on Scores":"Scores"," →"]})]}),k?k.failed?(0,t.jsx)("div",{style:{fontSize:12,color:"#ff7676"},children:"Couldn’t load your sectors. Reload this page, or open Settings to see them."}):k.sectors?.length?(0,t.jsxs)("div",{style:{display:"flex",flexWrap:"wrap",gap:6,alignItems:"center"},children:[k.sectors.map(e=>{let r=(0,g.sectorByKey)(e);return(0,t.jsx)("span",{style:{padding:"4px 12px",borderRadius:20,fontSize:11,fontWeight:600,background:`${r.color}26`,border:`1px solid ${r.color}66`,color:r.color},children:r.label},e)}),(0,t.jsxs)("span",{style:{fontSize:11,color:"#888"},children:["strong"===k.strength?"Strong":"Lean",": companies here count for more in your scores."]})]}):(0,t.jsx)("div",{style:{fontSize:12,color:"#888"},children:"None picked. Pick up to three in Settings and companies in them count for more in your scores."}):(0,t.jsx)("div",{style:{fontSize:12,color:"#888"},children:"Loading…"})]})]})})]})}function m({label:e,value:r,color:n}){return(0,t.jsxs)("div",{style:{background:"rgba(255,255,255,0.04)",borderRadius:10,padding:"14px 12px",border:"1px solid rgba(255,255,255,0.08)",textAlign:"center"},children:[(0,t.jsx)("div",{style:{fontSize:22,fontWeight:700,color:n||"#fff"},children:r}),(0,t.jsx)("div",{style:{fontSize:10,color:"#888",marginTop:2},children:e})]})}e.s(["default",0,function(){return(0,t.jsx)(u.default,{children:(0,t.jsx)(y,{})})}],99201)},89154,e=>{"use strict";var t=e.i(90179);function r(e){let r=(0,t.readTitle)(e);return{key:r.key,label:r.label,level:r.level}}function n(e){return(0,t.currentCompany)(e)}let i=[{key:"defense",label:"Government, Defense & Aerospace",color:"#7f8c8d",words:/\b(government|federal|state of|county|city of|defen[cs]e|army|navy|air force|marine corps|military|dod|nasa|aerospace|lockheed|northrop|boeing|raytheon|l3harris|leidos|blue origin|spacex|public sector)\b/i},{key:"finance",label:"Finance & Investing",color:"#2ecc71",words:/\b(bank|banking|capital|ventures?|vc|investments?|investor|fund|private equity|growth equity|asset management|wealth|trading|trader|hedge|crypto|blockchain|web3|defi|fintech|stripe|coinbase|blackrock|robinhood|goldman|morgan stanley|jpmorgan|chase|bny|mellon|wells fargo|citi|citigroup|capital one|fidelity|vanguard|schwab|visa|mastercard|amex|american express|paypal|insurance|accounting|cpa|financial)\b/i},{key:"health",label:"Healthcare & Biotech",color:"#e74c3c",words:/\b(health|healthcare|medical|medicine|hospital|clinic|pharma|pharmaceutical|biotech|nurse|nursing|physician|doctor|dental|therapy|therapist|wellness)\b/i},{key:"education",label:"Education",color:"#f1c40f",words:/\b(university|college|school|education|student|professor|teacher|academy|phd|faculty|alumni)\b/i},{key:"media",label:"Marketing & Media",color:"#e67e22",words:/\b(marketing|brand|branding|advertising|agency|media|content|social media|creative|creator|influencer|pr|public relations|communications|tiktok|pinterest|youtube|growth marketing)\b/i},{key:"entertainment",label:"Entertainment & Gaming",color:"#9b59b6",words:/\b(entertainment|film|movie|music|records|gaming|games?|esports|studio|studios|netflix|disney|spotify|hollywood|theater|theatre|sports)\b/i},{key:"tech",label:"Tech, Software & AI",color:"#3498db",words:/\b(software|saas|engineer|engineering|developer|tech|technology|technologies|ai|artificial intelligence|machine learning|ml|data|cloud|cyber|security|devops|product manager|google|microsoft|apple|meta|amazon|nvidia|openai|anthropic|palantir|salesforce|oracle|ibm|intel|app|apps|startup|platform|labs?)\b/i},{key:"consulting",label:"Consulting, Legal & Services",color:"#1abc9c",words:/\b(consulting|consultant|consultancy|deloitte|accenture|mckinsey|kpmg|pwc|ey|bain|bcg|legal|law|lawyer|attorney|paralegal|recruiting|recruiter|staffing|talent)\b/i},{key:"realestate",label:"Real Estate & Construction",color:"#d35400",words:/\b(real estate|realtor|realty|property|properties|construction|architecture|architect|mortgage|homes|housing|builders?)\b/i},{key:"consumer",label:"Retail, Consumer & Hospitality",color:"#ff79c6",words:/\b(retail|e-?commerce|shopify|consumer|cpg|fashion|apparel|beauty|cosmetics|food|beverage|restaurant|hospitality|hotel|travel|tourism|coca-cola|nike|store|shop)\b/i},{key:"industry",label:"Manufacturing, Energy & Logistics",color:"#95a5a6",words:/\b(manufacturing|energy|oil|gas|solar|utilities|automotive|tesla|siemens|ge|general electric|honeywell|3m|logistics|supply chain|shipping|freight|fedex|ups|industrial|mining|chemicals?)\b/i},{key:"nonprofit",label:"Nonprofit & Community",color:"#bdc3c7",words:/\b(nonprofit|non-profit|foundation|charity|ngo|church|ministry|volunteer)\b/i}],o={key:"unknown",label:"Unclear",color:"#555c66"},l=Object.fromEntries([...i,o].map(e=>[e.key,e])),a=e=>l[e]||o;function s(e,t){for(let r of[e,t]){if(!r)continue;let e=i.find(e=>e.words.test(r));if(e)return e}return o}let d=(e,t)=>s(e,t).key,c=e=>r(e).level>=4;e.s(["INDUSTRIES",0,i,"UNKNOWN_INDUSTRY",0,o,"buildCompanyIndex",0,function(e=[]){let r=new Map,n=e=>(r.has(e)||r.set(e,(0,t.rolesWithCompanies)(e)),r.get(e)),{industries:i}=(0,t.networkCompanies)(e,{industryOf:d,rolesOf:n}),o=new Map;for(let t of e){let e=t.profile_url||`id:${t.id}`,r=o.get(e);(!r||(t.degree||9)<(r.degree||9))&&o.set(e,t)}let l=new Map;for(let e of o.values()){let t=n(e).find(e=>!e.former)?.company;if(!t)continue;let r=l.get(t);r||(r={name:t,people:[],d1:0,d2:0,d3:0,S:0,A:0,senior:0},l.set(t,r)),r.people.push(e),1===e.degree?r.d1++:2===e.degree?r.d2++:r.d3++,"S"===e.tier&&r.S++,"A"===e.tier&&r.A++,c(e.headline)&&r.senior++}for(let e of l.values())e.industry=a(i.get(e.name));return l},"companyLinks",0,function(e=[],t=[]){let r=new Map;for(let t of e){let e=n(t);e&&r.set(t.id,e)}let i=new Map;for(let e of t){let t=r.get(e.source_connection_id),o=n(e);if(!t||!o||t===o)continue;let[l,a]=t<o?[t,o]:[o,t],s=`${l}\u0000${a}`,d=i.get(s);d||(d={a:l,b:a,weight:0,via:new Set},i.set(s,d)),d.weight++,d.via.add(e.source_connection_id)}return[...i.values()]},"companyOf",0,n,"getSeniority",0,r,"industryByKey",0,a,"industryOf",0,s,"isSenior",0,c,"waysInto",0,function(e,t=[],r=[]){let i=t.filter(t=>n(t)===e),o=new Map;for(let t of r)n(t)===e&&o.set(t.source_connection_id,(o.get(t.source_connection_id)||0)+1);let l=new Map(t.map(e=>[e.id,e]));return{direct:i,bridges:[...o.entries()].map(([e,t])=>({bridge:l.get(e),n:t})).filter(e=>e.bridge).sort((e,t)=>t.n-e.n||(Number(t.bridge.power_score)||0)-(Number(e.bridge.power_score)||0))}}])},19821,e=>{"use strict";async function t(e){let t=e?`/api/network?userId=${encodeURIComponent(e)}`:"/api/network",r=await fetch(t);if(!r.ok)throw Error(`Failed to load network (${r.status})`);let n=await r.json();return{degree1:n.degree1||[],degree2:n.degree2||[],degree3:n.degree3||[]}}e.s(["loadNetwork",0,t])},36774,e=>{"use strict";let t=/^[A-Za-z0-9_-]+\.(webp|jpg|jpeg|png)$/,r="/avatars/";e.s(["localPhoto",0,function(e){return"string"==typeof e&&e.startsWith(r)&&t.test(e.slice(r.length))?e:null}])},48235,7214,e=>{"use strict";var t=e.i(36774);let r={S:0,A:1,B:2,C:3,D:4};function n(e){let t=parseFloat(e?.power_score);return Number.isFinite(t)?t:0}function i(e){return Math.round(10*n(e))/10}function o(e){return String(e?.profile_url||"").split(/[?#]/)[0].replace(/\/+$/,"")||`id:${e?.id}`}let l=(e,t)=>String(e??"").localeCompare(String(t??""),void 0,{numeric:!0});function a(e,t){return(r[e.tier]??9)-(r[t.tier]??9)||n(t)-n(e)||String(e.name||"").localeCompare(String(t.name||""))||l(e.id,t.id)}function s(e,t){return e.bridge&&t.bridge?a(e.bridge,t.bridge):e.bridge?-1:t.bridge?1:l(e.id,t.id)}function d(e,t){return t.score-e.score||t.waysIn-e.waysIn||s(e.routes[0]||c,t.routes[0]||c)||String(e.person.name||"").localeCompare(String(t.person.name||""))||(e.key<t.key?-1:+(e.key>t.key))}let c={id:null,bridge:null};function u(e){let t=String(e||"").trim().split(/\s+/).filter(Boolean);return t.length<2?t[0]||"":`${t[0]} ${t[t.length-1].charAt(0)}.`}function f(e,t){let r=String(e||"");return t<=1?r?"…":"":r.length>t?`${r.slice(0,t-1)}…`:r}function g(e,t){return e?t.scanned.has(e.id)||e.profile_url&&t.read?.has(o(e))?"scanned":e.profile_url&&t.hidden.has(o(e))?"hidden":"todo":"todo"}function h(e,t){if(!e||1!==e.degree||null==e.unlocked_from_bridge_id)return null;let r=g(e,t);return"todo"===r?"ready":r}e.s(["TIERS",0,["S","A","B","C","D"],"compareBridges",0,a,"compareWaysIn",0,function(e,t){return t.waysIn-e.waysIn||d(e,t)},"keyFor",0,o,"routeIndex",0,function(e=[]){let t=new Map;for(let r of e||[]){let e=o(r),n=t.get(e);n||(n=new Set,t.set(e,n)),n.add(r.source_connection_id??null)}return t},"routesFor",0,function(e,t,r){return e?[...t?.get(o(e))??(null!=e.source_connection_id?new Set([e.source_connection_id]):new Set)].map(e=>({id:e,bridge:r?.get(e)??null})).sort(s):[]},"score",0,n,"score1",0,i,"separationPeople",0,function(e=[],r=[]){let n=new Map;for(let e of r||[])n.set(e.id,e);let a=new Map,c=new Map;for(let r of e||[]){let e=o(r);c.set(r.id,e);let n=a.get(e);n?function(e,r){let n=i(e)-i(r);if(n)return n>0;let o=!!(0,t.localPhoto)(e.profile_image_url);return!!(0,t.localPhoto)(r.profile_image_url)!==o?o:0>l(e.id,r.id)}(r,n.person)&&(n.person=r):(n={key:e,person:r,rowIds:[],routeIds:new Set},a.set(e,n)),n.rowIds.push(r.id),n.routeIds.add(r.source_connection_id??null)}let u={people:a.size,byTier:{S:0,A:0,B:0,C:0,D:0},multi:0,bridges:0,unresolvedIds:0,peopleOnlyUnresolved:0,onlyUnresolvedVia:0},f=new Set,g=new Set,h=new Set,p=[];for(let e of a.values()){let t=[...e.routeIds].map(e=>({id:e,bridge:n.get(e)??null}));t.sort(s);let r=t.filter(e=>e.bridge);for(let e of t)(e.bridge?f:g).add(e.id);if(!r.length)for(let e of(u.peopleOnlyUnresolved++,t))h.add(e.id);let{person:o}=e,l=o.tier;void 0!==u.byTier[l]&&u.byTier[l]++,t.length>1&&u.multi++,p.push({key:e.key,person:o,score:i(o),tier:l,routes:t,waysIn:t.length,rowIds:e.rowIds,haystack:[o.name,o.headline,o.company,o.role,...r.map(e=>e.bridge.name)].filter(Boolean).join("\n").toLowerCase(),rank:0,tied:!1})}return u.bridges=f.size,u.unresolvedIds=g.size,u.onlyUnresolvedVia=h.size,p.sort(d),function(e){for(let t=0;t<e.length;t++){let r=e[t],n=e[t-1],i=n&&n.score===r.score&&n.waysIn===r.waysIn;r.rank=i?n.rank:t+1,i&&(r.tied=!0,n.tied=!0)}}(p),{people:p,rowToKey:c,summary:u}},"shortName",0,u,"summitLayout",0,function(e=[],t=800,r=!1){let n=r?36:26,i=Math.round(.42*t),o=Math.round(.58*t),l=e.map((e,r)=>{var i;return{key:e.key,p:e,x:o,y:16+r*n,r:(i=e.waysIn)>=4?8.5:3===i?7:2===i?5.5:4,label:f(`#${e.rank}${e.tied?"=":""} ${e.person.name||""}`,Math.floor((t-o-60)/6.2))}}),s=new Map,d="\0unresolved";for(let e of l)for(let t of e.p.routes){let r=t.bridge?t.id:d,n=s.get(r);n||(n={id:t.bridge?t.id:null,bridge:t.bridge,unresolved:!t.bridge,ys:[],count:0},s.set(r,n)),n.count++,n.ys.push(e.y)}let c=[...s.values()].map(e=>({...e,bary:e.ys.reduce((e,t)=>e+t,0)/e.ys.length}));c.sort((e,t)=>e.bary-t.bary||e.unresolved-t.unresolved||(e.bridge&&t.bridge?a(e.bridge,t.bridge):0));let g=l.length?l[l.length-1].y:16,h=c.length>1?Math.max(18,(g-16)/(c.length-1)):0,p=Math.max(4,Math.floor((i-10-42)/6));c.forEach((e,t)=>{if(e.x=i,e.y=1===c.length?(16+g)/2:16+t*h,e.r=5,e.unresolved)e.label=f(`can't be named (${e.count})`,p);else{let t=e.bridge.name||"";e.label=t.length<=p?t:f(u(t),p)}delete e.ys});let y=new Map(c.map(e=>[e.unresolved?d:e.id,e])),m=[];for(let e of l){let t=new Set;e.p.routes.forEach((r,n)=>{let i=r.bridge?r.id:d;if(t.has(i))return;t.add(i);let o=y.get(i);m.push({key:e.key,bridgeId:o.id,primary:0===n&&!o.unresolved,unresolved:o.unresolved,tier:o.bridge?.tier??null,x1:o.x,y1:o.y,x2:e.x,y2:e.y})})}let b=Math.max(g,c.length?c[c.length-1].y:0),x=l.length?Math.ceil(b+16):0,v={x:20,y:l.length?(16+Math.max(g,b))/2:16,r:14},S=c.map(e=>({id:e.id,x1:v.x,y1:v.y,x2:e.x,y2:e.y}));return{width:t,height:x,you:v,people:l,bridges:c,links:m,spokes:S}}],7214),e.s(["circleScanCost",0,function(e=100){let t=Math.max(1,Math.min(100,Math.round(e)||100));return{profileViews:1,searches:t,minutes:t>=100?55:Math.max(5,Math.round(.55*t))}},"circleState",0,g,"reachIndex",0,function(e=[],t=[],r={}){let n=new Set;for(let e of t||[])e?.source_connection_id!=null&&n.add(e.source_connection_id);let i=new Set;for(let e of r?.skips||[])e?.profileUrl&&i.add(o({profile_url:e.profileUrl}));let l=new Set;for(let e of r?.read||[])e&&l.add(o({profile_url:e}));let a=new Map;for(let[e,t]of Object.entries(r?.lists||{}))e&&t&&a.set(o({profile_url:e}),t);let s=new Map;for(let t of e||[]){let e=t?.unlocked_from_bridge_id;if(null==e||1!==t.degree)continue;let r=s.get(e);r||s.set(e,r=[]),r.push(t)}return{scanned:n,read:l,hidden:i,reachedFrom:s,lists:a}},"reachState",0,h,"readyByCircle",0,function(e){let t=new Map;for(let[r,n]of e.reachedFrom){let i=n.filter(t=>"ready"===h(t,e)).length;i&&t.set(r,i)}return t},"readyToScan",0,function(e,t){return(e||[]).filter(e=>"ready"===h(e,t)).sort(a)},"scanBars",0,function(e,t){let r=g(e,t),n=e?.profile_url?t.lists?.get(o(e)):null;return"hidden"===r?null:n?n.more?n.total?Math.max(1,Math.min(4,Math.round(5*Math.min(1,10*n.pages/n.total)))):2:5:"scanned"===r?2:null}],48235)},69083,e=>{"use strict";var t=e.i(89154);let r=new Map(t.INDUSTRIES.map(e=>[e.key,e.color])),n=new Map([...t.INDUSTRIES.map(e=>[e.key,Object.freeze({key:e.key,label:e.label,color:e.color,group:e.key,kind:"industry"})]),...Object.entries({software:["Software & SaaS","tech","function"],"ai-data":["AI & Data","tech","function"],cybersecurity:["Cybersecurity","tech","function"],telecom:["Telecom","tech","industry"],fintech:["Fintech & Payments","finance","industry"],banking:["Banking & Lending","finance","industry"],"vc-pe":["Venture Capital & Private Equity","finance","industry"],wealth:["Wealth & Asset Management","finance","industry"],insurance:["Insurance","finance","industry"],accounting:["Accounting & Tax","finance","function"],crypto:["Crypto & Web3","finance","industry"],hospitals:["Hospitals & Clinics","health","industry"],dental:["Dental","health","industry"],"pharma-biotech":["Pharma & Biotech","health","industry"],"medical-devices":["Medical Devices","health","industry"],"mental-health":["Mental Health","health","industry"],"fitness-wellness":["Fitness & Wellness","health","industry"],veterinary:["Veterinary & Animal Care","health","industry"],k12:["K-12 Education","education","industry"],"higher-ed":["Higher Education","education","industry"],"marketing-advertising":["Marketing & Advertising","media","function"],"pr-comms":["PR & Communications","media","function"],"media-publishing":["Media & Publishing","media","industry"],"creator-economy":["Creator Economy","media","industry"],"film-tv-music":["Film, TV & Music","entertainment","industry"],"gaming-esports":["Gaming & Esports","entertainment","industry"],sports:["Sports","entertainment","industry"],"ecommerce-retail":["E-commerce & Retail","consumer","industry"],"consumer-goods":["Consumer Goods","consumer","industry"],restaurants:["Restaurants & Food Service","consumer","industry"],"hospitality-travel":["Hospitality & Travel","consumer","industry"],"beauty-personal-care":["Beauty & Personal Care","consumer","industry"],logistics:["Logistics & Supply Chain","industry","industry"],manufacturing:["Manufacturing","industry","industry"],energy:["Energy & Utilities","industry","industry"],automotive:["Automotive","industry","industry"],agriculture:["Agriculture & Farming","industry","industry"],"aerospace-defense":["Aerospace & Defense","defense","industry"],military:["Military","defense","industry"],government:["Government & Public Sector","defense","industry"],legal:["Legal","consulting","function"],"management-consulting":["Management Consulting","consulting","function"],"hr-recruiting":["HR & Recruiting","consulting","function"],"security-services":["Security Services","consulting","function"],"real-estate":["Real Estate","realestate","industry"],"construction-trades":["Construction & Trades","realestate","industry"],charities:["Nonprofits & Charities","nonprofit","industry"],"social-work":["Social Work & Human Services","nonprofit","industry"],faith:["Faith & Ministry","nonprofit","industry"]}).map(([e,[n,i,o]])=>[e,Object.freeze({key:e,label:n,color:r.get(i)||t.UNKNOWN_INDUSTRY.color,group:i,kind:o})])]);e.s(["sectorByKey",0,function(e){return n.get(e)||{key:e,label:t.UNKNOWN_INDUSTRY.label,color:t.UNKNOWN_INDUSTRY.color,group:null,kind:null}}])},5258,e=>{"use strict";e.s(["TIER_COLORS",0,{S:"#f6c344",A:"#a78bfa",B:"#60a5fa",C:"#94a3b8",D:"#6b7280"},"TIER_COLORS_CLASSIC",0,{S:"#FFD700",A:"#9B59B6",B:"#3498DB",C:"#95A5A6",D:"#BDC3C7"},"TIER_ORDER",0,["S","A","B","C","D"],"TIER_RING_RADIUS",0,{S:150,A:230,B:310,C:390,D:470},"initialsFor",0,function(e){let t=String(e||"").trim().split(/\s+/).filter(Boolean);return 0===t.length?"?":(t[0].charAt(0)+(t.length>1?t[t.length-1].charAt(0):"")).toUpperCase()}])},22016,(e,t,r)=>{"use strict";e.i(47167),Object.defineProperty(r,"__esModule",{value:!0});var n={default:function(){return m},useLinkStatus:function(){return x}};for(var i in n)Object.defineProperty(r,i,{enumerable:!0,get:n[i]});let o=e.r(90809),l=e.r(43476),a=o._(e.r(71645)),s=e.r(95057),d=e.r(8372),c=e.r(18581),u=e.r(18967),f=e.r(5550),g=e.r(88540),h=e.r(91949),p=e.r(73668),y=e.r(9396);function m(t){var r;let n,i,o,[m,x]=(0,a.useOptimistic)(h.IDLE_LINK_STATUS),v=(0,a.useRef)(null),{href:S,as:j,children:w,prefetch:k=null,passHref:C,replace:_,shallow:B,scroll:I,onClick:R,onMouseEnter:T,onTouchStart:M,legacyBehavior:D=!1,onNavigate:A,transitionTypes:E,ref:F,unstable_dynamicOnHover:z,...P}=t;n=w,D&&("string"==typeof n||"number"==typeof n)&&(n=(0,l.jsx)("a",{children:n}));let O=a.default.useContext(d.AppRouterContext),N=!1!==k,W=!1===k?"none":!0===k?"full":"auto",L="none"!==W?"auto"===W?y.FetchStrategy.PPR:y.FetchStrategy.Full:y.FetchStrategy.PPR,U="string"==typeof(r=j||S)?r:(0,s.formatUrl)(r);if(D){if(n?.$$typeof===Symbol.for("react.lazy"))throw Object.defineProperty(Error("`<Link legacyBehavior>` received a direct child that is either a Server Component, or JSX that was loaded with React.lazy(). This is not supported. Either remove legacyBehavior, or make the direct child a Client Component that renders the Link's `<a>` tag."),"__NEXT_ERROR_CODE",{value:"E863",enumerable:!1,configurable:!0});i=a.default.Children.only(n)}let $=D?i&&"object"==typeof i&&i.ref:F,K,H=a.default.useCallback(e=>(null!==O&&(v.current=(0,h.mountLinkInstance)(e,U,O,L,N,x,K)),()=>{v.current&&((0,h.unmountLinkForCurrentNavigation)(v.current),v.current=null),(0,h.unmountPrefetchableInstance)(e)}),[N,U,O,L,x,K]),V={ref:(0,c.useMergedRef)(H,$),onClick(t){D||"function"!=typeof R||R(t),D&&i.props&&"function"==typeof i.props.onClick&&i.props.onClick(t),!O||t.defaultPrevented||function(t,r,n,i,o,l,s,d="none"){if("u">typeof window){let c,{nodeName:u}=t.currentTarget;if("A"===u.toUpperCase()&&((c=t.currentTarget.getAttribute("target"))&&"_self"!==c||t.metaKey||t.ctrlKey||t.shiftKey||t.altKey||t.nativeEvent&&2===t.nativeEvent.which)||t.currentTarget.hasAttribute("download"))return;if(!(0,p.isLocalURL)(r)){i&&(t.preventDefault(),location.replace(r));return}if(t.preventDefault(),l){let e=!1;if(l({preventDefault:()=>{e=!0}}),e)return}let{dispatchNavigateAction:f}=e.r(99781);a.default.startTransition(()=>{f(r,i?"replace":"push",!1===o?g.ScrollBehavior.NoScroll:g.ScrollBehavior.Default,n.current,s,d)})}}(t,U,v,_,I,A,E,W)},onMouseEnter(e){D||"function"!=typeof T||T(e),D&&i.props&&"function"==typeof i.props.onMouseEnter&&i.props.onMouseEnter(e),O&&N&&(0,h.onNavigationIntent)(e.currentTarget,!0===z)},onTouchStart:function(e){D||"function"!=typeof M||M(e),D&&i.props&&"function"==typeof i.props.onTouchStart&&i.props.onTouchStart(e),O&&N&&(0,h.onNavigationIntent)(e.currentTarget,!0===z)}};return(0,u.isAbsoluteUrl)(U)?V.href=U:D&&!C&&("a"!==i.type||"href"in i.props)||(V.href=(0,f.addBasePath)(U)),o=D?a.default.cloneElement(i,V):(0,l.jsx)("a",{...P,...V,children:n}),(0,l.jsx)(b.Provider,{value:m,children:o})}let b=(0,a.createContext)(h.IDLE_LINK_STATUS),x=()=>(0,a.useContext)(b);("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},18581,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"useMergedRef",{enumerable:!0,get:function(){return i}});let n=e.r(71645);function i(e,t){let r=(0,n.useRef)(null),i=(0,n.useRef)(null);return(0,n.useCallback)(n=>{if(null===n){let e=r.current;e&&(r.current=null,e());let t=i.current;t&&(i.current=null,t())}else e&&(r.current=o(e,n)),t&&(i.current=o(t,n))},[e,t])}function o(e,t){if("function"!=typeof e)return e.current=t,()=>{e.current=null};{let r=e(t);return"function"==typeof r?r:()=>e(null)}}("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},18967,(e,t,r)=>{"use strict";e.i(47167),Object.defineProperty(r,"__esModule",{value:!0});var n={DecodeError:function(){return m},MiddlewareNotFoundError:function(){return S},MissingStaticPage:function(){return v},NormalizeError:function(){return b},PageNotFoundError:function(){return x},SP:function(){return p},ST:function(){return y},WEB_VITALS:function(){return o},execOnce:function(){return l},getDisplayName:function(){return u},getLocationOrigin:function(){return d},getURL:function(){return c},isAbsoluteUrl:function(){return s},isResSent:function(){return f},loadGetInitialProps:function(){return h},normalizeRepeatedSlashes:function(){return g},stringifyError:function(){return j}};for(var i in n)Object.defineProperty(r,i,{enumerable:!0,get:n[i]});let o=["CLS","FCP","FID","INP","LCP","TTFB"];function l(e){let t,r=!1;return(...n)=>(r||(r=!0,t=e(...n)),t)}let a=/^[a-zA-Z][a-zA-Z\d+\-.]*?:/,s=e=>{let t=e.charCodeAt(0);return!!(t>=65&&t<=90||t>=97&&t<=122)&&a.test(e)};function d(){let{protocol:e,hostname:t,port:r}=window.location;return`${e}//${t}${r?":"+r:""}`}function c(){let{href:e}=window.location,t=d();return e.substring(t.length)}function u(e){return"string"==typeof e?e:e.displayName||e.name||"Unknown"}function f(e){return e.finished||e.headersSent}function g(e){let t=e.split("?");return t[0].replace(/\\/g,"/").replace(/\/\/+/g,"/")+(t[1]?`?${t.slice(1).join("?")}`:"")}async function h(e,t){let r=t.res||t.ctx&&t.ctx.res;if(!e.getInitialProps)return t.ctx&&t.Component?{pageProps:await h(t.Component,t.ctx)}:{};let n=await e.getInitialProps(t);if(r&&f(r))return n;if(!n)throw Object.defineProperty(Error(`"${u(e)}.getInitialProps()" should resolve to an object. But found "${n}" instead.`),"__NEXT_ERROR_CODE",{value:"E1025",enumerable:!1,configurable:!0});return n}let p="u">typeof performance,y=p&&["mark","measure","getEntriesByName"].every(e=>"function"==typeof performance[e]);class m extends Error{}class b extends Error{}class x extends Error{constructor(e){super(),this.code="ENOENT",this.name="PageNotFoundError",this.message=`Cannot find module for page: ${e}`}}class v extends Error{constructor(e,t){super(),this.message=`Failed to load static file for page: ${e} ${t}`}}class S extends Error{constructor(){super(),this.code="ENOENT",this.message="Cannot find the middleware module"}}function j(e){return JSON.stringify({message:e.message,stack:e.stack})}},73668,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"isLocalURL",{enumerable:!0,get:function(){return o}});let n=e.r(18967),i=e.r(52817);function o(e){if(!(0,n.isAbsoluteUrl)(e))return!0;try{let t=(0,n.getLocationOrigin)(),r=new URL(e,t);return r.origin===t&&(0,i.hasBasePath)(r.pathname)}catch(e){return!1}}},98183,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={assign:function(){return s},searchParamsToUrlQuery:function(){return o},urlQueryToSearchParams:function(){return a}};for(var i in n)Object.defineProperty(r,i,{enumerable:!0,get:n[i]});function o(e){let t={};for(let[r,n]of e.entries()){let e=t[r];void 0===e?t[r]=n:Array.isArray(e)?e.push(n):t[r]=[e,n]}return t}function l(e){return"string"==typeof e?e:("number"!=typeof e||isNaN(e))&&"boolean"!=typeof e?"":String(e)}function a(e){let t=new URLSearchParams;for(let[r,n]of Object.entries(e))if(Array.isArray(n))for(let e of n)t.append(r,l(e));else t.set(r,l(n));return t}function s(e,...t){for(let r of t){for(let t of r.keys())e.delete(t);for(let[t,n]of r.entries())e.append(t,n)}return e}},95057,(e,t,r)=>{"use strict";e.i(47167),Object.defineProperty(r,"__esModule",{value:!0});var n={formatUrl:function(){return a},formatWithValidation:function(){return d},urlObjectKeys:function(){return s}};for(var i in n)Object.defineProperty(r,i,{enumerable:!0,get:n[i]});let o=e.r(90809)._(e.r(98183)),l=/https?|ftp|gopher|file/;function a(e){let{auth:t,hostname:r}=e,n=e.protocol||"",i=e.pathname||"",a=e.hash||"",s=e.query||"",d=!1;t=t?encodeURIComponent(t).replace(/%3A/i,":")+"@":"",e.host?d=t+e.host:r&&(d=t+(~r.indexOf(":")?`[${r}]`:r),e.port&&(d+=":"+e.port)),s&&"object"==typeof s&&(s=String(o.urlQueryToSearchParams(s)));let c=e.search||s&&`?${s}`||"";return n&&!n.endsWith(":")&&(n+=":"),e.slashes||(!n||l.test(n))&&!1!==d?(d="//"+(d||""),i&&"/"!==i[0]&&(i="/"+i)):d||(d=""),a&&"#"!==a[0]&&(a="#"+a),c&&"?"!==c[0]&&(c="?"+c),i=i.replace(/[?#]/g,encodeURIComponent),c=c.replace("#","%23"),`${n}${d}${i}${c}${a}`}let s=["auth","hash","host","hostname","href","path","pathname","port","protocol","query","search","slashes"];function d(e){return a(e)}}]);
|
|
@@ -6,6 +6,33 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [0.4.2] - 2026-09-29
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
- **Orbit goes past 2nd degree.** Someone you added through a circle, whose own circle is
|
|
13
|
+
scanned, now sits in the fan of the circle they came from, green-ringed, and their people fan
|
|
14
|
+
out behind them a band further out, fainter, with a faint line to each. Their added people's
|
|
15
|
+
circles go further out again, to 6th degree. Before, they sat on the ring as one more bridge,
|
|
16
|
+
and Orbit showed only 2nd degree.
|
|
17
|
+
- **A ring round each connection's dot.** Five thin bars show how much of their circle is
|
|
18
|
+
scanned: all five once their list is read to the end, and part-way the pages read against
|
|
19
|
+
LinkedIn's own count of the list, which scans now keep (no extra traffic). Lists read before
|
|
20
|
+
scans kept a count show two. A small badge counts the people in their circle ready to scan,
|
|
21
|
+
and a catalyst is the green outline on the dot. It's on the Galaxy and on Bridge Chains'
|
|
22
|
+
bridges.
|
|
23
|
+
|
|
24
|
+
### Changed
|
|
25
|
+
- **The Galaxy in bands when more than your connections are drawn.** With 2nd (or 3rd) degree
|
|
26
|
+
on, your connections sit on a tighter inner ring, their circles in a band outside it, and past
|
|
27
|
+
someone you added through a circle, their people further out again. Each band is sorted by
|
|
28
|
+
tier, S nearest, and has a faint label. Lines follow the chain: from you to your connections,
|
|
29
|
+
from each connection to their circle, and from someone you added to theirs. Your connections
|
|
30
|
+
alone keep the roomier tier rings.
|
|
31
|
+
|
|
32
|
+
### Removed
|
|
33
|
+
- **The "N only here" line under each bridge in Bridge Chains.** Their card still says who is
|
|
34
|
+
reached only through them.
|
|
35
|
+
|
|
9
36
|
## [0.4.1] - 2026-09-29
|
|
10
37
|
|
|
11
38
|
### Added
|
|
@@ -139,11 +139,19 @@ function bridgeSkips() {
|
|
|
139
139
|
*/
|
|
140
140
|
function scanNotes() {
|
|
141
141
|
let read = [];
|
|
142
|
+
const lists = {};
|
|
142
143
|
try {
|
|
143
144
|
const me = resolveProfile({ create: false });
|
|
144
|
-
if (me)
|
|
145
|
+
if (me) {
|
|
146
|
+
const progress = readProgress(dataDir(), me.id);
|
|
147
|
+
read = Object.keys(progress);
|
|
148
|
+
// How far each list was read, for the rings round a dot (lib/reach.js scanBars).
|
|
149
|
+
for (const [url, e] of Object.entries(progress)) {
|
|
150
|
+
lists[url] = { pages: Number(e?.pages) || 0, more: !!e?.more, total: Number(e?.total) || null };
|
|
151
|
+
}
|
|
152
|
+
}
|
|
145
153
|
} catch {}
|
|
146
|
-
return { skips: bridgeSkips(), read };
|
|
154
|
+
return { skips: bridgeSkips(), read, lists };
|
|
147
155
|
}
|
|
148
156
|
|
|
149
157
|
/**
|
|
@@ -31,9 +31,10 @@ import Link from 'next/link';
|
|
|
31
31
|
import { useRouter } from 'next/navigation';
|
|
32
32
|
import { circleIndex } from '../../lib/circle';
|
|
33
33
|
import { localPhoto } from '../../lib/photos';
|
|
34
|
-
import { reachIndex, reachState, circleState, readyByCircle, circleScanCost } from '../../lib/reach';
|
|
34
|
+
import { reachIndex, reachState, circleState, readyByCircle, circleScanCost, scanBars } from '../../lib/reach';
|
|
35
|
+
import { ringSegments, RING } from '../../lib/dot-rings';
|
|
35
36
|
import { ringLayout, dotRadius, previewBand, tierBandLayout, outerFans } from '../../lib/chain-layout';
|
|
36
|
-
import {
|
|
37
|
+
import { redundancy } from '../../lib/brokerage';
|
|
37
38
|
import { keyFor, score } from '../../lib/separation';
|
|
38
39
|
import { hasRequest } from '../../lib/requests-client';
|
|
39
40
|
import { watchScanner, scannerNow, isCircleScan } from '../../lib/scraper-client';
|
|
@@ -139,8 +140,6 @@ export default function ChainView({ connections, degree2 = [], onSelect, userNam
|
|
|
139
140
|
const index = useMemo(() => circleIndex(all1, all2), [all1, all2]);
|
|
140
141
|
const reach = useMemo(() => reachIndex(all1, all2, scanNotes), [all1, all2, scanNotes]);
|
|
141
142
|
const readyCount = useMemo(() => readyByCircle(reach), [reach]);
|
|
142
|
-
// Who only this bridge reaches, across every circle scanned (lib/brokerage.js).
|
|
143
|
-
const exclusive = useMemo(() => exclusiveReach(fullDegree2 || degree2, fullDegree1 || connections), [fullDegree2, degree2, fullDegree1, connections]);
|
|
144
143
|
const twoWays = useMemo(() => redundancy(fullDegree2 || degree2, fullDegree1 || connections), [fullDegree2, degree2, fullDegree1, connections]);
|
|
145
144
|
const rowById = useMemo(() => {
|
|
146
145
|
const m = new Map();
|
|
@@ -294,6 +293,20 @@ export default function ChainView({ connections, degree2 = [], onSelect, userNam
|
|
|
294
293
|
<circle cx={b.x} cy={b.y} r={isHov ? 20 : 16}
|
|
295
294
|
fill={`${TIER_COLORS[b.tier]}08`}
|
|
296
295
|
stroke={`${TIER_COLORS[b.tier]}${isHov ? '60' : '25'}`} strokeWidth={1} />
|
|
296
|
+
{/* How much of their circle is scanned: five thin bars (design C) */}
|
|
297
|
+
{(() => {
|
|
298
|
+
const bars = scanBars(b, reach);
|
|
299
|
+
if (bars == null) return null;
|
|
300
|
+
return (
|
|
301
|
+
<g transform={`translate(${b.x} ${b.y})`} pointerEvents="none">
|
|
302
|
+
{ringSegments((isHov ? 20 : 16) + 3.5).map((seg) => (
|
|
303
|
+
<path key={seg.i} d={seg.d} fill="none" strokeLinecap="round" strokeWidth={1.6}
|
|
304
|
+
stroke={seg.i < bars ? RING.filled : RING.empty} />
|
|
305
|
+
))}
|
|
306
|
+
<title>{bars === 5 ? 'Their whole list is scanned' : `About ${bars * 20}% of their list is scanned`}</title>
|
|
307
|
+
</g>
|
|
308
|
+
);
|
|
309
|
+
})()}
|
|
297
310
|
{/* Node */}
|
|
298
311
|
<circle cx={b.x} cy={b.y} r={isHov ? 13 : 11}
|
|
299
312
|
fill={localPhoto(b.profile_image_url) ? '#1a1a2e' : TIER_COLORS[b.tier]}
|
|
@@ -329,12 +342,6 @@ export default function ChainView({ connections, degree2 = [], onSelect, userNam
|
|
|
329
342
|
<text x={b.x} y={b.y + (isHov ? 34 : 32)} textAnchor="middle" fill="#888" fontSize={7}>
|
|
330
343
|
{b.clusterSize} · {sCount > 0 ? sCount + 'S ' : ''}{aCount > 0 ? aCount + 'A' : ''}
|
|
331
344
|
</text>
|
|
332
|
-
{exclusive.get(b.id)?.only > 0 && (
|
|
333
|
-
<text x={b.x} y={b.y + (isHov ? 43 : 41)} textAnchor="middle" fill="#00ff88" fillOpacity={0.75} fontSize={6.5}>
|
|
334
|
-
{exclusive.get(b.id).only.toLocaleString()} only here
|
|
335
|
-
<title>{`${exclusive.get(b.id).only.toLocaleString()} of the people in ${b.name?.split(' ')[0]}’s circle are reached by none of your other connections`}</title>
|
|
336
|
-
</text>
|
|
337
|
-
)}
|
|
338
345
|
</g>
|
|
339
346
|
);
|
|
340
347
|
})}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
|
-
import { useEffect, useRef, useState } from 'react';
|
|
3
|
+
import { useEffect, useMemo, useRef, useState } from 'react';
|
|
4
4
|
import * as d3 from 'd3';
|
|
5
5
|
import { localPhoto } from '../../lib/photos';
|
|
6
6
|
import { recentre } from '../../lib/galaxy';
|
|
7
|
+
import { reachIndex, readyByCircle, scanBars } from '../../lib/reach';
|
|
8
|
+
import { ringSegments, RING } from '../../lib/dot-rings';
|
|
7
9
|
|
|
8
10
|
// Connection fields are attacker-reachable: /api/ingest and /api/update-images
|
|
9
11
|
// accept writes, and a page on any other site can POST to this app on localhost.
|
|
@@ -57,7 +59,21 @@ const RING_CSS = `
|
|
|
57
59
|
.galaxy-ring-pulse { animation: none; opacity: 0.8; }
|
|
58
60
|
}`;
|
|
59
61
|
|
|
60
|
-
export default function ForceGraph({ connections, onSelect, tierColors, focusNodeRef, userName, selectedId = null }) {
|
|
62
|
+
export default function ForceGraph({ connections, onSelect, tierColors, focusNodeRef, userName, selectedId = null, scanNotes, fullDegree1, fullDegree2 }) {
|
|
63
|
+
// The ring round a connection's dot (design C): how much of their circle is
|
|
64
|
+
// scanned, and how many in it are ready to scan (lib/reach.js).
|
|
65
|
+
const marks = useMemo(() => {
|
|
66
|
+
const reach = reachIndex(fullDegree1 || connections, fullDegree2 || [], scanNotes || {});
|
|
67
|
+
const ready = readyByCircle(reach);
|
|
68
|
+
const out = new Map();
|
|
69
|
+
for (const c of connections) {
|
|
70
|
+
if ((c.degree || 1) !== 1) continue;
|
|
71
|
+
const bars = scanBars(c, reach);
|
|
72
|
+
const r = ready.get(c.id) || 0;
|
|
73
|
+
if (bars != null || r) out.set(c.id, { bars, ready: r });
|
|
74
|
+
}
|
|
75
|
+
return out;
|
|
76
|
+
}, [connections, fullDegree1, fullDegree2, scanNotes]);
|
|
61
77
|
const svgRef = useRef(null);
|
|
62
78
|
const ringRef = useRef(null);
|
|
63
79
|
const sceneRef = useRef(null); // The scene on screen: { resize, select }
|
|
@@ -123,7 +139,7 @@ export default function ForceGraph({ connections, onSelect, tierColors, focusNod
|
|
|
123
139
|
const saved = transform ? recentre(transform, setFor, size) : null;
|
|
124
140
|
|
|
125
141
|
const select = (d) => onSelectRef.current?.(d);
|
|
126
|
-
const scene = renderNetworkMode(svg, ringRef.current, size, connections, select, tierColors, focusNodeRef, saved, viewRef, userName);
|
|
142
|
+
const scene = renderNetworkMode(svg, ringRef.current, size, connections, select, tierColors, focusNodeRef, saved, viewRef, userName, marks);
|
|
127
143
|
sceneRef.current = scene;
|
|
128
144
|
scene.select(selectedIdRef.current);
|
|
129
145
|
|
|
@@ -145,7 +161,7 @@ export default function ForceGraph({ connections, onSelect, tierColors, focusNod
|
|
|
145
161
|
// why onSelect is not a dependency. The size is read through sizeRef: a new
|
|
146
162
|
// size re-fits the view rather than rebuilding.
|
|
147
163
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
148
|
-
}, [connections, tierColors, measured]);
|
|
164
|
+
}, [connections, tierColors, measured, marks]);
|
|
149
165
|
|
|
150
166
|
return (
|
|
151
167
|
<div style={{ flex: 1, position: 'relative', overflow: 'hidden' }}>
|
|
@@ -200,7 +216,7 @@ function easeRadius(el, r) {
|
|
|
200
216
|
// Graph coordinates put you at 0,0, whatever the size of the box; the zoom
|
|
201
217
|
// transform places that in the box. So a new size only moves the view, and a
|
|
202
218
|
// rebuild can start from the view as it was.
|
|
203
|
-
function renderNetworkMode(svg, ring, box, connections, onSelect, tierColors, focusNodeRef, savedTransform, viewRef, userName) {
|
|
219
|
+
function renderNetworkMode(svg, ring, box, connections, onSelect, tierColors, focusNodeRef, savedTransform, viewRef, userName, marks = new Map()) {
|
|
204
220
|
const centerNode = {
|
|
205
221
|
id: CENTER_ID, name: userName || 'You', tier: 'center', degree: 0,
|
|
206
222
|
power_score: 10, fx: 0, fy: 0,
|
|
@@ -208,6 +224,7 @@ function renderNetworkMode(svg, ring, box, connections, onSelect, tierColors, fo
|
|
|
208
224
|
|
|
209
225
|
const nodes = [centerNode, ...connections.map(c => ({
|
|
210
226
|
id: c.id, name: c.name, tier: c.tier, degree: c.degree || 1, source_connection_id: c.source_connection_id,
|
|
227
|
+
unlocked_from_bridge_id: c.unlocked_from_bridge_id,
|
|
211
228
|
power_score: parseFloat(c.power_score) || 1,
|
|
212
229
|
company: c.company, role: c.role, headline: c.headline,
|
|
213
230
|
profile_url: c.profile_url, profile_image_url: localPhoto(c.profile_image_url),
|
|
@@ -219,18 +236,54 @@ function renderNetworkMode(svg, ring, box, connections, onSelect, tierColors, fo
|
|
|
219
236
|
}))];
|
|
220
237
|
const nodeById = new Map(nodes.map(n => [n.id, n]));
|
|
221
238
|
|
|
222
|
-
// Your connections hang off you; someone
|
|
223
|
-
// connection whose circle
|
|
224
|
-
//
|
|
239
|
+
// Who hangs off whom. Your connections hang off you; someone in a circle off
|
|
240
|
+
// the connection whose circle it is, when that one is drawn too; and with
|
|
241
|
+
// more than your connections drawn (Filter → Degree), someone you added
|
|
242
|
+
// through a circle off the one they came from, so a chain reads as a chain.
|
|
225
243
|
const drawnD1 = new Set(connections.filter(c => (c.degree || 1) === 1).map(c => c.id));
|
|
244
|
+
const multi = connections.some(c => (c.degree || 1) > 1);
|
|
245
|
+
const parentOf = new Map();
|
|
246
|
+
for (const n of nodes) {
|
|
247
|
+
if (n.id === CENTER_ID) continue;
|
|
248
|
+
const from = n.unlocked_from_bridge_id;
|
|
249
|
+
if (n.degree === 1 && multi && from != null && from !== n.id && drawnD1.has(from)) parentOf.set(n.id, from);
|
|
250
|
+
else if (n.degree === 2 && drawnD1.has(n.source_connection_id)) parentOf.set(n.id, n.source_connection_id);
|
|
251
|
+
}
|
|
252
|
+
// How far along the chain: 1 for your connections, one more past each person
|
|
253
|
+
// you came through, to 6.
|
|
254
|
+
const bandMemo = new Map();
|
|
255
|
+
const bandOf = (n, seen = new Set()) => {
|
|
256
|
+
if (n.id === CENTER_ID) return 0;
|
|
257
|
+
if (bandMemo.has(n.id)) return bandMemo.get(n.id);
|
|
258
|
+
const p = parentOf.get(n.id);
|
|
259
|
+
let b = n.degree >= 3 ? 3 : n.degree;
|
|
260
|
+
if (p != null && !seen.has(n.id)) { seen.add(n.id); b = bandOf(nodeById.get(p), seen) + 1; }
|
|
261
|
+
b = Math.min(b, 6);
|
|
262
|
+
bandMemo.set(n.id, b);
|
|
263
|
+
return b;
|
|
264
|
+
};
|
|
226
265
|
const links = connections.map(c => {
|
|
227
|
-
const via =
|
|
266
|
+
const via = parentOf.get(c.id) ?? CENTER_ID;
|
|
228
267
|
return { source: via, target: c.id, near: via !== CENTER_ID };
|
|
229
268
|
});
|
|
230
269
|
|
|
231
270
|
const tierRadius = (tier) => {
|
|
232
271
|
switch (tier) { case 'S': return 150; case 'A': return 250; case 'B': return 350; case 'C': return 450; default: return 520; }
|
|
233
272
|
};
|
|
273
|
+
// More than one band drawn: a band for each step along the chain, the first
|
|
274
|
+
// (your connections) a tighter ring, each sorted by tier with S nearest, close
|
|
275
|
+
// enough to read as layers and far enough apart not to clump. One band alone
|
|
276
|
+
// keeps the roomier tier rings.
|
|
277
|
+
const TIERS = ['S', 'A', 'B', 'C', 'D'];
|
|
278
|
+
const SLOTS = [[115, 135, 155, 175, 192], [265, 300, 335, 370, 398], [465, 500, 535, 565, 590], [660, 690, 720, 745, 765]];
|
|
279
|
+
const bands = [...new Set(nodes.filter(n => n.id !== CENTER_ID).map(n => bandOf(n)))].sort((a, b) => a - b);
|
|
280
|
+
const layered = multi && bands.length > 1;
|
|
281
|
+
const radiusOf = (d) => {
|
|
282
|
+
if (!layered) return tierRadius(d.tier);
|
|
283
|
+
const slot = Math.min(bands.indexOf(bandOf(d)), SLOTS.length - 1);
|
|
284
|
+
const t = TIERS.indexOf(d.tier);
|
|
285
|
+
return SLOTS[slot][t < 0 ? 4 : t];
|
|
286
|
+
};
|
|
234
287
|
|
|
235
288
|
const nodeRadius = (d) => {
|
|
236
289
|
if (d.id === CENTER_ID) return 18;
|
|
@@ -249,7 +302,19 @@ function renderNetworkMode(svg, ring, box, connections, onSelect, tierColors, fo
|
|
|
249
302
|
// Once the layout settles they move to where each tier's dots actually sit
|
|
250
303
|
// (the median distance out), which the other forces push past that radius.
|
|
251
304
|
const guideRings = new Map();
|
|
252
|
-
if (!isMobileGraph) {
|
|
305
|
+
if (!isMobileGraph && layered) {
|
|
306
|
+
// In bands: a faint ring and a label for each step along the chain instead.
|
|
307
|
+
const guides = g.append('g').attr('class', 'degree-guides').style('pointer-events', 'none');
|
|
308
|
+
const names = ['', '1st', '2nd', '3rd', '4th', '5th', '6th'];
|
|
309
|
+
bands.slice(0, SLOTS.length).forEach((b, slot) => {
|
|
310
|
+
const r = SLOTS[slot][2];
|
|
311
|
+
guides.append('circle').attr('r', r).attr('fill', 'none').attr('stroke', '#8899aa')
|
|
312
|
+
.attr('stroke-opacity', 0.12).attr('stroke-width', 1).attr('stroke-dasharray', '2 4');
|
|
313
|
+
guides.append('text').attr('x', 0).attr('y', -SLOTS[slot][4] - 8).attr('text-anchor', 'middle')
|
|
314
|
+
.attr('font-size', 10).attr('font-weight', 700).attr('fill', '#8899aa').attr('fill-opacity', 0.55)
|
|
315
|
+
.text(names[b] || `${b}th`);
|
|
316
|
+
});
|
|
317
|
+
} else if (!isMobileGraph) {
|
|
253
318
|
const guides = g.append('g').attr('class', 'tier-guides').style('pointer-events', 'none');
|
|
254
319
|
for (const tier of ['S', 'A', 'B', 'C', 'D']) {
|
|
255
320
|
const r = tierRadius(tier);
|
|
@@ -357,11 +422,11 @@ function renderNetworkMode(svg, ring, box, connections, onSelect, tierColors, fo
|
|
|
357
422
|
}
|
|
358
423
|
|
|
359
424
|
const simulation = d3.forceSimulation(nodes)
|
|
360
|
-
.force('link', d3.forceLink(links).id(d => d.id).distance(d => (d.near ?
|
|
425
|
+
.force('link', d3.forceLink(links).id(d => d.id).distance(d => (d.near ? Math.max(40, radiusOf(d.target) - radiusOf(d.source)) : radiusOf(d.target))).strength(isMobileGraph ? 0 : layered ? 0.06 : 0.1))
|
|
361
426
|
.force('charge', d3.forceManyBody().strength(isMobileGraph ? 0 : (d => d.id === CENTER_ID ? -300 : -15)))
|
|
362
427
|
.force('center', isMobileGraph ? null : d3.forceCenter(0, 0))
|
|
363
428
|
.force('collision', isMobileGraph ? null : d3.forceCollide().radius(d => nodeRadius(d) + 2))
|
|
364
|
-
.force('radial', isMobileGraph ? null : d3.forceRadial(d => d.id === CENTER_ID ? 0 :
|
|
429
|
+
.force('radial', isMobileGraph ? null : d3.forceRadial(d => d.id === CENTER_ID ? 0 : radiusOf(d), 0, 0).strength(layered ? 0.45 : 0.3));
|
|
365
430
|
simulation.on('end.guides', () => {
|
|
366
431
|
for (const [tier, { ring, label }] of guideRings) {
|
|
367
432
|
const out = nodes.filter((n) => n.tier === tier && n.id !== CENTER_ID).map((n) => Math.hypot(n.x || 0, n.y || 0)).sort((x, y) => x - y);
|
|
@@ -380,7 +445,10 @@ function renderNetworkMode(svg, ring, box, connections, onSelect, tierColors, fo
|
|
|
380
445
|
.attr('stroke-opacity', 0.15).attr('stroke-width', 0.5);
|
|
381
446
|
|
|
382
447
|
// Catalyst outer glow rings (rendered behind the nodes)
|
|
383
|
-
|
|
448
|
+
// A catalyst is the green outline on their dot (design C, with the scan
|
|
449
|
+
// bars round it); the dashed glow ring that used to sit here hid the bars,
|
|
450
|
+
// so it's only drawn for a catalyst with no bars.
|
|
451
|
+
const catalysts = nodes.filter(n => n.is_catalyst && marks.get(n.id)?.bars == null);
|
|
384
452
|
if (catalysts.length) {
|
|
385
453
|
const defs = svg.select('defs').size() ? svg.select('defs') : svg.append('defs');
|
|
386
454
|
if (!defs.select('#catalyst-glow-nm').size()) {
|
|
@@ -397,6 +465,30 @@ function renderNetworkMode(svg, ring, box, connections, onSelect, tierColors, fo
|
|
|
397
465
|
.attr('class', 'catalyst-ring');
|
|
398
466
|
}
|
|
399
467
|
|
|
468
|
+
// Design C round a connection's dot: five thin bars for how much of their
|
|
469
|
+
// circle is scanned, and a small badge for how many in it are ready to scan.
|
|
470
|
+
const ringed = nodes.filter((n) => marks.has(n.id));
|
|
471
|
+
const dotRings = g.append('g').attr('class', 'dot-rings').style('pointer-events', 'none')
|
|
472
|
+
.selectAll('g').data(ringed).join('g')
|
|
473
|
+
.attr('transform', d => `translate(${d.x || 0},${d.y || 0})`);
|
|
474
|
+
dotRings.each(function (d) {
|
|
475
|
+
const { bars, ready } = marks.get(d.id);
|
|
476
|
+
const r = nodeRadius(d) + 3.5;
|
|
477
|
+
const el = d3.select(this);
|
|
478
|
+
if (bars != null) {
|
|
479
|
+
for (const seg of ringSegments(r)) {
|
|
480
|
+
el.append('path').attr('d', seg.d).attr('fill', 'none').attr('stroke-linecap', 'round')
|
|
481
|
+
.attr('stroke-width', 1.6).attr('stroke', seg.i < bars ? RING.filled : RING.empty);
|
|
482
|
+
}
|
|
483
|
+
}
|
|
484
|
+
if (ready > 0) {
|
|
485
|
+
const at = r * 0.72;
|
|
486
|
+
el.append('circle').attr('cx', at).attr('cy', at).attr('r', 5.5).attr('fill', RING.badge);
|
|
487
|
+
el.append('text').attr('x', at).attr('y', at + 2.5).attr('text-anchor', 'middle')
|
|
488
|
+
.attr('font-size', 7).attr('font-weight', 700).attr('fill', '#fff').text(ready > 9 ? '9+' : ready);
|
|
489
|
+
}
|
|
490
|
+
});
|
|
491
|
+
|
|
400
492
|
const node = g.append('g').selectAll('circle').data(nodes).join('circle')
|
|
401
493
|
.attr('r', nodeRadius)
|
|
402
494
|
.attr('fill', d => d.id === CENTER_ID ? '#fff' : tierColors[d.tier] || '#666')
|
|
@@ -483,6 +575,7 @@ function renderNetworkMode(svg, ring, box, connections, onSelect, tierColors, fo
|
|
|
483
575
|
link.attr('x1', d => d.source.x).attr('y1', d => d.source.y).attr('x2', d => d.target.x).attr('y2', d => d.target.y);
|
|
484
576
|
node.attr('cx', d => d.x).attr('cy', d => d.y);
|
|
485
577
|
catalystRings.attr('cx', d => d.x).attr('cy', d => d.y);
|
|
578
|
+
dotRings.attr('transform', d => `translate(${d.x},${d.y})`);
|
|
486
579
|
labels.attr('x', d => d.x).attr('y', d => d.y);
|
|
487
580
|
placeRing();
|
|
488
581
|
});
|