six-degrees 0.4.11 → 0.5.0
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 +9 -9
- 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/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/_not-found.html +1 -1
- package/.next/standalone/.next/server/app/_not-found.rsc +12 -12
- package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +12 -12
- package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +11 -11
- 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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +3 -2
- package/.next/standalone/.next/server/app/api/scraper/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/settings/route.js +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 +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 +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 +1 -1
- package/.next/standalone/.next/server/app/api/setup-profile/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/social/crm/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/social/messages/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/social/route.js +3 -3
- package/.next/standalone/.next/server/app/api/social/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/unlock/route.js +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 +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 +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/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/import/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/import.html +1 -1
- package/.next/standalone/.next/server/app/import.rsc +14 -14
- package/.next/standalone/.next/server/app/import.segments/_full.segment.rsc +14 -14
- 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 +13 -13
- package/.next/standalone/.next/server/app/index.html +1 -1
- package/.next/standalone/.next/server/app/index.rsc +14 -14
- package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +13 -13
- package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +14 -14
- package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/launch/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/launch/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/launch.html +2 -2
- package/.next/standalone/.next/server/app/launch.rsc +14 -14
- package/.next/standalone/.next/server/app/launch.segments/_full.segment.rsc +14 -14
- 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 +13 -13
- 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/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/paths/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 +14 -14
- package/.next/standalone/.next/server/app/paths.segments/_full.segment.rsc +14 -14
- 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 +13 -13
- 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 +14 -14
- package/.next/standalone/.next/server/app/profile.segments/_full.segment.rsc +14 -14
- 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 +13 -13
- 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 +14 -14
- package/.next/standalone/.next/server/app/queue.segments/_full.segment.rsc +14 -14
- 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 +13 -13
- package/.next/standalone/.next/server/app/scores/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/scores/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/scores.html +1 -1
- package/.next/standalone/.next/server/app/scores.rsc +14 -14
- package/.next/standalone/.next/server/app/scores.segments/_full.segment.rsc +14 -14
- 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 +13 -13
- package/.next/standalone/.next/server/app/settings/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/settings.html +1 -1
- package/.next/standalone/.next/server/app/settings.rsc +14 -14
- package/.next/standalone/.next/server/app/settings.segments/_full.segment.rsc +14 -14
- 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 +13 -13
- 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 +14 -14
- package/.next/standalone/.next/server/app/setup.segments/_full.segment.rsc +14 -14
- 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 +13 -13
- package/.next/standalone/.next/server/app/social/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/social/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/social.html +1 -1
- package/.next/standalone/.next/server/app/social.rsc +14 -14
- package/.next/standalone/.next/server/app/social.segments/_full.segment.rsc +14 -14
- package/.next/standalone/.next/server/app/social.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/social.segments/social/__PAGE__.segment.rsc +13 -13
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__0bat8nx._.js → [root-of-the-server]__13dx4sd._.js} +2 -2
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__15wc9e-._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1kbl21f._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__20rwfdw._.js +8 -0
- package/.next/standalone/.next/server/chunks/_072jl0y._.js +1 -1
- package/.next/standalone/.next/server/chunks/_1_fynia._.js +7 -7
- package/.next/standalone/.next/server/chunks/_1itd1o_._.js +1 -1
- package/.next/standalone/.next/server/chunks/_1iwkh8t._.js +1 -1
- package/.next/standalone/.next/server/chunks/lib_0851sk0._.js +8 -0
- package/.next/standalone/.next/server/chunks/lib_1q7p2ro._.js +8 -0
- package/.next/standalone/.next/server/chunks/lib_1r6l86l._.js +8 -0
- package/.next/standalone/.next/server/chunks/lib_db-client_15le7cw.js +8 -8
- package/.next/standalone/.next/server/chunks/lib_rpc_04s8mzr.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_053z7as.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_0b_-2te.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_0dhbxdm.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_0dxlk31.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_0f8b-qc.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_0pzie7_.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_0r76fq_.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_0ut7pjp.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_15zyqaz.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_18zpjtq.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_1a8xkiz.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_1e_55xo.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_1oxfd1_.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_1s0lod0.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_scoring_1-e4ur0.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_01kacen._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_03l7vge._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{_1ap1tu_._.js → _0gtv9jb._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_0jdkqgi._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_0xi-fbs._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_0xmwmfv._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_1-b9hj7._.js +9 -0
- package/.next/standalone/.next/server/chunks/ssr/_112ewem._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_16ab63q._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_1fxm0-s._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_1ra1d3r._.js +9 -0
- package/.next/standalone/.next/server/chunks/ssr/app_141w189._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/app_components_ui_0pdmz2z.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/app_page_1fazqbf.js +22 -10
- package/.next/standalone/.next/server/chunks/ssr/app_paths_page_1ol90m7.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/app_profile_page_0u3-l5y.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/app_queue_page_0c6znd6.js +6 -5
- package/.next/standalone/.next/server/chunks/ssr/app_settings_page_1f8mjj_.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/app_setup_page_1-282zx.js +19 -3
- package/.next/standalone/.next/server/chunks/ssr/app_social_page_0h7zxda.js +1 -2
- package/.next/standalone/.next/server/chunks/ssr/lib_0i8v-s3._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/lib_13rapwj._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/lib_galaxy-lab_108_lu-.js +1 -1
- 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/03bziijw5srol.js +1 -0
- package/.next/standalone/.next/static/chunks/0bgq8wmopl_ig.js +7 -0
- package/.next/standalone/.next/static/chunks/0ezus6p2eb-vg.js +1 -0
- package/.next/standalone/.next/static/chunks/0g_fy2034bp0x.js +34 -0
- package/.next/standalone/.next/static/chunks/0q5dru4q6gxl5.js +22 -0
- package/.next/standalone/.next/static/chunks/0w-byiwb2zax8.js +2 -0
- package/.next/standalone/.next/static/chunks/1g7jcovdejc9-.js +1 -0
- package/.next/standalone/.next/static/chunks/1i51yylxdzht1.js +1 -0
- package/.next/standalone/.next/static/chunks/1zf8swaasjf1e.js +43 -0
- package/.next/standalone/.next/static/chunks/2rqtpccruavf2.js +1 -0
- package/.next/standalone/.next/static/chunks/2wgz9ietkqqe6.js +1 -0
- package/.next/standalone/.next/static/chunks/30x3oq_st7a5r.js +1 -0
- package/.next/standalone/.next/static/chunks/355ryio1b7sm1.js +1 -0
- package/.next/standalone/.next/static/chunks/3ap5hgma7n0o7.js +1 -0
- package/.next/standalone/.next/static/chunks/3fci6qi39-1n5.js +1 -0
- package/.next/standalone/.next/static/chunks/{24tvdun1cb3g1.js → 3sowbvbaj1s6n.js} +1 -1
- package/.next/standalone/CHANGELOG.md +187 -0
- package/.next/standalone/app/api/ingest/route.js +40 -1
- package/.next/standalone/app/api/scraper/route.js +7 -1
- package/.next/standalone/app/api/settings/sector-preview/route.js +2 -1
- package/.next/standalone/app/components/AppTabs.js +59 -0
- package/.next/standalone/app/components/ChainView.js +303 -89
- package/.next/standalone/app/components/CirclePanel.js +162 -0
- package/.next/standalone/app/components/CompanyScores.js +2 -2
- package/.next/standalone/app/components/FieldStep.js +4 -4
- package/.next/standalone/app/components/FilterPanel.js +121 -183
- package/.next/standalone/app/components/ForceGraph.js +41 -3
- package/.next/standalone/app/components/GalaxyLab.js +26 -31
- package/.next/standalone/app/components/LegacyScoresCard.js +2 -2
- package/.next/standalone/app/components/MapControls.js +154 -0
- package/.next/standalone/app/components/NoteDetail.js +118 -0
- package/.next/standalone/app/components/PathsAnalyzer.js +147 -110
- package/.next/standalone/app/components/PeopleMap.js +308 -0
- package/.next/standalone/app/components/ScanRadar.js +129 -0
- package/.next/standalone/app/components/ScanStatusBar.js +71 -27
- package/.next/standalone/app/components/SeparationView.js +626 -118
- package/.next/standalone/app/components/Sidebar.js +28 -2
- package/.next/standalone/app/components/settings/NetworkHealthSection.js +1 -1
- package/.next/standalone/app/components/settings/SectorSection.js +2 -2
- package/.next/standalone/app/components/settings/TierSection.js +1 -1
- package/.next/standalone/app/components/settings/TitleSection.js +149 -0
- package/.next/standalone/app/components/views.js +15 -14
- package/.next/standalone/app/page.js +89 -156
- package/.next/standalone/app/paths/page.js +39 -27
- package/.next/standalone/app/profile/page.js +33 -5
- package/.next/standalone/app/queue/page.js +56 -34
- package/.next/standalone/app/scores/page.js +16 -66
- package/.next/standalone/app/settings/page.js +27 -13
- package/.next/standalone/app/setup/page.js +298 -205
- package/.next/standalone/app/social/SocialHub.js +374 -0
- package/.next/standalone/app/social/page.js +10 -362
- package/.next/standalone/lib/chain-layout.js +105 -35
- package/.next/standalone/lib/degrees.js +0 -6
- package/.next/standalone/lib/dot-rings.js +25 -0
- package/.next/standalone/lib/galaxy-lab.js +65 -6
- package/.next/standalone/lib/ingest.js +2 -0
- package/.next/standalone/lib/island.js +40 -0
- package/.next/standalone/lib/linkedin-limits.js +6 -2
- package/.next/standalone/lib/map-heat.js +20 -0
- package/.next/standalone/lib/network-health.js +1 -1
- package/.next/standalone/lib/notifications.js +121 -0
- package/.next/standalone/lib/people-map.js +82 -0
- package/.next/standalone/lib/rarity.js +45 -3
- package/.next/standalone/lib/reach.js +7 -6
- package/.next/standalone/lib/rpc.js +15 -4
- package/.next/standalone/lib/scan-pace.js +46 -0
- package/.next/standalone/lib/scoring.js +39 -8
- package/.next/standalone/lib/scraper-client.js +19 -6
- package/.next/standalone/lib/sector-focus.js +4 -4
- package/.next/standalone/lib/separation.js +137 -10
- package/.next/standalone/lib/settings-effects.js +20 -11
- package/.next/standalone/lib/settings.js +3 -0
- package/.next/standalone/lib/tier-grid.js +99 -0
- package/.next/standalone/lib/title-ranking.js +83 -0
- package/.next/standalone/package-lock.json +2 -2
- package/.next/standalone/package.json +1 -1
- package/.next/standalone/scripts/scrape.py +51 -13
- package/.next/static/chunks/03bziijw5srol.js +1 -0
- package/.next/static/chunks/0bgq8wmopl_ig.js +7 -0
- package/.next/static/chunks/0ezus6p2eb-vg.js +1 -0
- package/.next/static/chunks/0g_fy2034bp0x.js +34 -0
- package/.next/static/chunks/0q5dru4q6gxl5.js +22 -0
- package/.next/static/chunks/0w-byiwb2zax8.js +2 -0
- package/.next/static/chunks/1g7jcovdejc9-.js +1 -0
- package/.next/static/chunks/1i51yylxdzht1.js +1 -0
- package/.next/static/chunks/1zf8swaasjf1e.js +43 -0
- package/.next/static/chunks/2rqtpccruavf2.js +1 -0
- package/.next/static/chunks/2wgz9ietkqqe6.js +1 -0
- package/.next/static/chunks/30x3oq_st7a5r.js +1 -0
- package/.next/static/chunks/355ryio1b7sm1.js +1 -0
- package/.next/static/chunks/3ap5hgma7n0o7.js +1 -0
- package/.next/static/chunks/3fci6qi39-1n5.js +1 -0
- package/.next/static/chunks/{24tvdun1cb3g1.js → 3sowbvbaj1s6n.js} +1 -1
- package/CHANGELOG.md +187 -0
- package/lib/chain-layout.js +105 -35
- package/lib/degrees.js +0 -6
- package/lib/dot-rings.js +25 -0
- package/lib/galaxy-lab.js +65 -6
- package/lib/ingest.js +2 -0
- package/lib/island.js +40 -0
- package/lib/linkedin-limits.js +6 -2
- package/lib/map-heat.js +20 -0
- package/lib/network-health.js +1 -1
- package/lib/notifications.js +121 -0
- package/lib/people-map.js +82 -0
- package/lib/rarity.js +45 -3
- package/lib/reach.js +7 -6
- package/lib/rpc.js +15 -4
- package/lib/scan-pace.js +46 -0
- package/lib/scoring.js +39 -8
- package/lib/scraper-client.js +19 -6
- package/lib/sector-focus.js +4 -4
- package/lib/separation.js +137 -10
- package/lib/settings-effects.js +20 -11
- package/lib/settings.js +3 -0
- package/lib/tier-grid.js +99 -0
- package/lib/title-ranking.js +83 -0
- package/package.json +1 -1
- package/scripts/scrape.py +51 -13
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__17hjtzl._.js +0 -8
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__20tmem7._.js +0 -3
- package/.next/standalone/.next/server/chunks/lib_rpc_03i8xef.js +0 -3
- package/.next/standalone/.next/server/chunks/lib_rpc_05gt5ya.js +0 -3
- package/.next/standalone/.next/server/chunks/lib_rpc_08fc3rp.js +0 -3
- package/.next/standalone/.next/server/chunks/lib_rpc_08r2t_q.js +0 -3
- package/.next/standalone/.next/server/chunks/lib_rpc_0btpv1t.js +0 -3
- package/.next/standalone/.next/server/chunks/lib_rpc_0c9d9ti.js +0 -8
- package/.next/standalone/.next/server/chunks/lib_rpc_0cm2ev3.js +0 -3
- package/.next/standalone/.next/server/chunks/lib_rpc_0iovswz.js +0 -3
- package/.next/standalone/.next/server/chunks/lib_rpc_0is8flp.js +0 -3
- package/.next/standalone/.next/server/chunks/lib_rpc_0v8ajtd.js +0 -3
- package/.next/standalone/.next/server/chunks/lib_rpc_0xgmvvt.js +0 -3
- package/.next/standalone/.next/server/chunks/lib_rpc_144mzbf.js +0 -3
- package/.next/standalone/.next/server/chunks/lib_rpc_1bggi0n.js +0 -3
- package/.next/standalone/.next/server/chunks/lib_rpc_1dkcu9f.js +0 -3
- package/.next/standalone/.next/server/chunks/lib_rpc_1o0jb6w.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_0-85h6g._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_08cfj2b._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_0c_y09g._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_0j4-lc3._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_0l8cxmo._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_0xkur4p._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_14iv_zy._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_15x6q32._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_212xw8q._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/app_components_19c2d9c._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/app_scores_page_09wepvv.js +0 -3
- package/.next/standalone/.next/static/chunks/0a5iadnmt9u9k.js +0 -1
- package/.next/standalone/.next/static/chunks/15sjx07xhpn6p.js +0 -1
- package/.next/standalone/.next/static/chunks/160wjb73ddwqd.js +0 -6
- package/.next/standalone/.next/static/chunks/1a74dky22dxd6.js +0 -1
- package/.next/standalone/.next/static/chunks/1c_n0973t07l0.js +0 -2
- package/.next/standalone/.next/static/chunks/1e1n0kkz-psdb.js +0 -1
- package/.next/standalone/.next/static/chunks/236f0jtp68j_h.js +0 -1
- package/.next/standalone/.next/static/chunks/297e1z34yi--z.js +0 -1
- package/.next/standalone/.next/static/chunks/2_ak6qjxb6oa5.js +0 -1
- package/.next/standalone/.next/static/chunks/2kfhc58df2xyo.js +0 -1
- package/.next/standalone/.next/static/chunks/39hr8d-b2ibtw.js +0 -31
- package/.next/standalone/.next/static/chunks/3ui4d-uqkqj5d.js +0 -2
- package/.next/standalone/.next/static/chunks/3zw8bv7-mc4n6.js +0 -33
- package/.next/standalone/app/components/OrbitGraph.js +0 -737
- package/.next/static/chunks/0a5iadnmt9u9k.js +0 -1
- package/.next/static/chunks/15sjx07xhpn6p.js +0 -1
- package/.next/static/chunks/160wjb73ddwqd.js +0 -6
- package/.next/static/chunks/1a74dky22dxd6.js +0 -1
- package/.next/static/chunks/1c_n0973t07l0.js +0 -2
- package/.next/static/chunks/1e1n0kkz-psdb.js +0 -1
- package/.next/static/chunks/236f0jtp68j_h.js +0 -1
- package/.next/static/chunks/297e1z34yi--z.js +0 -1
- package/.next/static/chunks/2_ak6qjxb6oa5.js +0 -1
- package/.next/static/chunks/2kfhc58df2xyo.js +0 -1
- package/.next/static/chunks/39hr8d-b2ibtw.js +0 -31
- package/.next/static/chunks/3ui4d-uqkqj5d.js +0 -2
- package/.next/static/chunks/3zw8bv7-mc4n6.js +0 -33
- /package/.next/standalone/.next/static/{jqE2D3zWqSGz5su948Azf → I-cj79yE2IZ8taX2dZGp3}/_buildManifest.js +0 -0
- /package/.next/standalone/.next/static/{jqE2D3zWqSGz5su948Azf → I-cj79yE2IZ8taX2dZGp3}/_clientMiddlewareManifest.js +0 -0
- /package/.next/standalone/.next/static/{jqE2D3zWqSGz5su948Azf → I-cj79yE2IZ8taX2dZGp3}/_ssgManifest.js +0 -0
- /package/.next/static/{jqE2D3zWqSGz5su948Azf → I-cj79yE2IZ8taX2dZGp3}/_buildManifest.js +0 -0
- /package/.next/static/{jqE2D3zWqSGz5su948Azf → I-cj79yE2IZ8taX2dZGp3}/_clientMiddlewareManifest.js +0 -0
- /package/.next/static/{jqE2D3zWqSGz5su948Azf → I-cj79yE2IZ8taX2dZGp3}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,77305,e=>{"use strict";var t=e.i(43476),n=e.i(71645),o=e.i(18566),r=e.i(26005),i=e.i(22016),s=e.i(15812),l=e.i(19821),a=e.i(84278),d=e.i(39160),c=e.i(7214),p=e.i(40996),h=e.i(8819),g=e.i(64745);let f=Object.freeze([{id:"new",label:"New"},{id:"contacted",label:"Contacted"},{id:"replied",label:"Replied"},{id:"meeting",label:"Meeting"},{id:"won",label:"Won/Partner"},{id:"not-now",label:"Not now"}]);f.map(e=>e.id);let u=e=>f.find(t=>t.id===e)?.label||"",x=e=>"string"==typeof e&&e.length>0&&e.length<300;function m(){return{version:1,settings:{awaitDays:7},people:{}}}function y(e=new Date){let t=e=>String(e).padStart(2,"0");return`${e.getFullYear()}-${t(e.getMonth()+1)}-${t(e.getDate())}`}let b=/^https:\/\/(www\.)?linkedin\.com\/in\/[^/?#\s]+$/,w={S:0,A:1,B:2,C:3,D:4},v=(e,t)=>(e.degree??9)<(t.degree??9)||(e.degree??9)===(t.degree??9)&&(w[e.tier]??9)<(w[t.tier]??9),j=e=>"sponsored"===e.kind;function k(e,t,n=7){let o=[];for(let r of e){if(j(r)||!1!==r.lastFromThem||!r.last)continue;let e=Math.floor((t-r.last)/864e5);e>=n&&o.push({contact:r,waited:e})}return o.sort((e,t)=>e.waited-t.waited)}function S(e,t,n=null){let o=String(t||"").trim().toLowerCase();return!o||[e.name,e.row?.company,e.row?.role,e.row?.headline,...e.crm?.tags||[],e.crm?.notes].filter(Boolean).join("\n").toLowerCase().includes(o)||!!n&&e.conversations.some(e=>n.has(e.id))}function z(e){let t=null==e?"":String(e);return/^[=+\-@\t\r]/.test(t)&&(t=`'${t}`),/[",\r\n]/.test(t)?`"${t.replace(/"/g,'""')}"`:t}let C=e=>e?new Date(e).toISOString().slice(0,10):"",T=["Name","Company","Profile","Connection","Stage","Tags","Last contact","Who wrote last","Next follow-up","Notes"];function F({id:e,keep:o,group:r,token:i}){let[s,l]=(0,n.useState)(null),[a,d]=(0,n.useState)(null),c=(0,n.useRef)(null),p=(0,n.useRef)(null);async function g(){let t=c.current,n=await fetch(`/api/social/messages?id=${encodeURIComponent(e)}&before=${s.start}&limit=200`).then(e=>e.json()).catch(()=>null);n&&!n.error&&(p.current=t?t.scrollHeight-t.scrollTop:null,l({...s,start:n.start,messages:[...n.messages,...s.messages]}))}(0,n.useEffect)(()=>{if(!o)return;let t=!0;return fetch(`/api/social/messages?id=${encodeURIComponent(e)}&limit=100`).then(e=>e.json()).then(e=>{t&&(e.error?d(e.error):(p.current="bottom",l(e)))}).catch(()=>{t&&d("It couldn’t be read.")}),()=>{t=!1}},[e,o,i]),(0,n.useLayoutEffect)(()=>{let e=c.current;e&&p.current&&("bottom"===p.current?e.scrollTop=e.scrollHeight:e.scrollTop=e.scrollHeight-p.current,p.current=null)},[s]);let f={padding:"10px 14px 14px",fontSize:12.5,color:"#8b9a9a"};return o?a?(0,t.jsx)("div",{style:{...f,color:"#ff9b9b"},children:a}):s?s.total?(0,t.jsxs)("div",{ref:c,style:{maxHeight:440,overflowY:"auto",padding:"8px 14px 12px",background:"rgba(0,0,0,0.2)"},children:[s.start>0&&(0,t.jsx)("div",{style:{textAlign:"center",margin:"4px 0 10px"},children:(0,t.jsxs)("button",{onClick:g,style:{background:"rgba(255,255,255,0.06)",border:h.LINE,borderRadius:6,color:"#cfe6f7",cursor:"pointer",fontSize:12,padding:"4px 12px"},children:["Show earlier (",s.start.toLocaleString()," more)"]})}),s.messages.map((e,n)=>{let o;return(0,t.jsx)("div",{style:{display:"flex",justifyContent:e.fromMe?"flex-end":"flex-start",margin:"6px 0"},children:(0,t.jsxs)("div",{style:{maxWidth:"72%"},children:[(0,t.jsx)("div",{style:{padding:"7px 11px",borderRadius:12,fontSize:13,lineHeight:1.45,whiteSpace:"pre-wrap",overflowWrap:"anywhere",background:e.fromMe?"rgba(52,152,219,0.35)":"rgba(255,255,255,0.08)",color:"#eef",borderBottomRightRadius:e.fromMe?4:12,borderBottomLeftRadius:e.fromMe?12:4},children:e.text||(0,t.jsx)("i",{style:{color:"#8b9a9a"},children:"(no words: an attachment or a reaction)"})}),(0,t.jsxs)("div",{style:{fontSize:10.5,color:"#778",marginTop:2,textAlign:e.fromMe?"right":"left"},children:[e.fromMe?"You":r?"Someone in the group":"Them"," · ",(o=e.t)?new Date(o).toLocaleString(void 0,{day:"numeric",month:"short",year:"numeric",hour:"numeric",minute:"2-digit"}):""]})]})},s.start+n)})]}):(0,t.jsx)("div",{style:f,children:"No messages are kept for this conversation yet. Choose your export folder again, or sync your messages, to bring them in."}):(0,t.jsx)("div",{style:f,children:"Opening…"}):(0,t.jsxs)("div",{style:f,children:["Turn on ",(0,t.jsx)("b",{children:"Keep my messages"})," to read them here."]})}let B={S:"#FFD700",A:"#9B59B6",B:"#3498DB",C:"#95A5A6",D:"#BDC3C7"},$={new:"#8b9a9a",contacted:"#3498DB",replied:"#00d4aa",meeting:"#ff9f43",won:"#FFD700","not-now":"#667"},I=e=>e?new Date(e).toLocaleDateString(void 0,{day:"numeric",month:"short",year:"numeric"}):"",D=e=>e?new Date(`${e}T12:00:00`).toLocaleDateString(void 0,{day:"numeric",month:"short",year:"numeric"}):"",W=e=>/^https:\/\/(www\.)?linkedin\.com\//.test(String(e||""))?e:null,R=(e,t,n=`${t}s`)=>`${e.toLocaleString()} ${1===e?t:n}`,_=[["inbox","Inbox"],["awaiting","Awaiting reply"],["due","Follow-ups due"],["pipeline","Pipeline"],["sent","Sent"],["received","Received"],["all","All"]],L=(e,t="#dfe8e8")=>({fontSize:10.5,padding:"1px 6px",borderRadius:4,background:e,color:t,whiteSpace:"nowrap"}),O={background:"rgba(255,255,255,0.06)",border:h.LINE,borderRadius:6,color:"#cfe6f7",cursor:"pointer",fontSize:12,padding:"4px 10px"},A={padding:"6px 10px",borderRadius:6,border:h.LINE,background:"rgba(0,0,0,0.3)",color:"#fff",fontSize:13};function E({net:e,asOf:o,keep:r,onKeep:i,switching:s,token:l,crmToken:d}){let[p,g]=(0,n.useState)(null),[w,F]=(0,n.useState)(null),[B,$]=(0,n.useState)("inbox"),[W,L]=(0,n.useState)(""),[N,U]=(0,n.useState)(null),[q,H]=(0,n.useState)(null),[J,V]=(0,n.useState)(100),[X,Q]=(0,n.useState)(null),Z=(0,n.useRef)(null);(0,n.useEffect)(()=>{let e=!0;return fetch("/api/social/messages").then(e=>e.json()).then(t=>{e&&g(t)}).catch(()=>{e&&g({conversations:[],invitations:[],names:{},inviteNotes:{}})}),()=>{e=!1}},[l,r]),(0,n.useEffect)(()=>{let e=!0;return fetch("/api/social/crm").then(e=>e.json()).then(t=>{e&&F(t.crm||m())}).catch(()=>{e&&F(m())}),()=>{e=!1}},[d]),(0,n.useEffect)(()=>{let e=W.trim();if(!r||e.length<2)return;let t=!0,n=setTimeout(()=>{fetch(`/api/social/messages?q=${encodeURIComponent(e)}`).then(e=>e.json()).then(n=>{t&&U({q:e,ids:new Set(n.ids||[])})}).catch(()=>{})},250);return()=>{t=!1,clearTimeout(n)}},[W,r,l]);let ee=q?.type==="person"?q.key:null,{contacts:et,groups:en}=(0,n.useMemo)(()=>(function({conversations:e=[],invitations:t=[],network:n={},crm:o=m(),names:r={},also:i=[]}={}){let s=n.degree1||[],l=n.degree2||[],d=[...s,...l,...n.degree3||[]],p=new Map,h=new Map;for(let e of d){let t=(0,c.keyFor)(e),n=p.get(t);(!n||v(e,n))&&p.set(t,e)}for(let[e,t]of p){let n=(0,a.nameKey)(t.name);n&&h.set(n,h.has(n)&&h.get(n)!==e?null:e)}let g=new Set(s.map(c.keyFor)),f=(0,c.routeIndex)(l),u=new Map(s.map(e=>[e.id,e])),y=e=>e.startsWith("name:")&&h.get(e.slice(5))||e,w=new Map,j=e=>{var t,n,i;let s=y(e),l=w.get(s);if(l)return l;let a=p.get(s)||null;return l={key:s,name:(t=s,n=a,i=r,n?.name?n.name:i[t]?i[t]:t.startsWith("name:")?t.slice(5).replace(/\b\w/g,e=>e.toUpperCase()):String(t||"").replace(/\/+$/,"").split("/").pop()),row:a,connection:g.has(s),degree:a?.degree??null,profileUrl:b.test(s)?s:a?.profile_url&&b.test((0,c.keyFor)(a))?(0,c.keyFor)(a):null,introducers:a&&2===a.degree?[...new Set((0,c.routesFor)(a,f,u).map(e=>e.bridge?.name).filter(Boolean))]:[],conversations:[],groups:[],last:null,lastFromThem:null,unread:null,threadUrl:null,count:0,theyWrote:!1,kind:null,invitesIn:[],invitesOut:[],request:null,crm:o?.people?.[s]||null,lastContact:null},w.set(s,l),l},k=[];for(let t of e){if(!t||!Array.isArray(t.people))continue;if(t.group){k.push({...t,people:t.people.map(y)});continue}if(!t.people.length){k.push({...t,unknown:!0});continue}let e=j(t.people[0]);e.conversations.push(t),e.count+=t.count||0,(!0===t.lastFromThem||null!=t.count&&null!=t.mine&&t.count>t.mine)&&(e.theyWrote=!0),t.last&&(!e.last||t.last>=e.last)?(e.last=t.last,e.lastFromThem=t.lastFromThem,e.unread=t.unread,e.threadUrl=t.threadUrl||e.threadUrl):e.last||t.last||(e.threadUrl=t.threadUrl||e.threadUrl)}for(let e of w.values()){e.conversations.sort((e,t)=>(t.last||0)-(e.last||0));let t=new Set(e.conversations.map(e=>e.kind||null));e.kind=1===t.size?[...t][0]:null}for(let e of k)for(let t of e.people)w.get(t)?.groups.push(e.id);for(let e of t){if(!e?.key)continue;let t=j(e.key);!e.name||t.row||r[t.key]||(t.name=e.name),("in"===e.dir?t.invitesIn:t.invitesOut).push(e)}for(let e of d){if("sent"!==e.outreach_status&&"accepted"!==e.outreach_status&&"pending"!==e.unlock_status)continue;let t=j((0,c.keyFor)(e)),n=t.connection||"accepted"===e.outreach_status?"accepted":"pending";t.request&&"accepted"!==n||(t.request={status:n})}for(let e of Object.keys(o?.people||{}))j(e);for(let e of i)x(e)&&j(e);for(let e of w.values()){let t=[e.last,...e.invitesIn.map(e=>e.t),...e.invitesOut.map(e=>e.t)].filter(Boolean);e.lastContact=t.length?Math.max(...t):null}return{contacts:w,groups:k}})({conversations:p?.conversations||[],invitations:p?.invitations||[],network:e||{},crm:w||m(),names:p?.names||{},also:ee?[ee]:[]}),[p,e,w,ee]),eo=(0,n.useMemo)(()=>{let t=new Map;for(let n of[...e?.degree1||[],...e?.degree2||[]])t.has((0,c.keyFor)(n))||t.set((0,c.keyFor)(n),n);let n=p?.names||{};return e=>et.get(e)?.name||t.get(e)?.name||n[e]||null},[et,e,p]),er=w?.settings?.awaitDays||7,[ei]=(0,n.useState)(()=>Date.now()),es=o||ei,el=y(new Date(ei)),ea=(0,n.useMemo)(()=>[...et.values()],[et]),ed=(0,n.useMemo)(()=>{let e=(e,t)=>({type:"person",key:e.key,c:e,sub:t,t:e.lastContact||0}),t=e=>null==e.lastFromThem?"":e.lastFromThem?`They wrote ${I(e.last)}`:`You wrote ${I(e.last)}`,n=ea.filter(e=>e.lastContact||e.crm||e.request).map(n=>e(n,t(n)||(n.invitesOut[0]?`You asked to connect ${I(n.invitesOut[0].t)}`:"")||(n.invitesIn[0]?`Asked to connect ${I(n.invitesIn[0].t)}`:"")||(n.request?`Tracked request \xb7 ${n.request.status}`:"")||(n.crm?.stage?u(n.crm.stage):"")));for(let e of en)n.push({type:"group",id:e.id,g:e,sub:e.last?`${e.lastFromThem?"Someone wrote":"You wrote"} ${I(e.last)}`:"",t:e.last||0});return n.sort((e,t)=>t.t-e.t),{inbox:[...ea].filter(e=>!j(e)&&(!0===e.lastFromThem||e.unread>0)).sort((e,t)=>(t.unread>0)-(e.unread>0)||(t.last||0)-(e.last||0)).map(n=>e(n,n.unread>0?`${n.unread} unread \xb7 ${t(n)}`:t(n))),awaiting:k(ea,es,er).map(t=>e(t.contact,`You wrote ${I(t.contact.last)}, no reply for ${R(t.waited,"day")}`)),due:(function(e,t=y()){return[...e].filter(e=>e.crm?.followUp&&e.crm.followUp<=t).sort((e,t)=>e.crm.followUp.localeCompare(t.crm.followUp))})(ea,el).map(t=>e(t,t.crm.followUp===el?"Follow up today":`Follow up was due ${D(t.crm.followUp)}`)),pipeline:function(e){let t=Object.fromEntries(f.map(e=>[e.id,[]]));for(let n of e)n.crm?.stage&&t[n.crm.stage].push(n);for(let e of Object.values(t))e.sort((e,t)=>(t.lastContact||0)-(e.lastContact||0));return t}(ea),sent:(function(e,t,n=7){let o=[...e],r=new Map(k(o,t,n).map(e=>[e.contact.key,e.waited])),i=[];for(let e of o){let t=[];for(let n of e.invitesOut)t.push({type:"invite",id:n.id,t:n.t,status:e.connection?"accepted":"pending"});e.request&&t.push({type:"request",status:e.request.status}),r.has(e.key)&&t.push({type:"awaiting",t:e.last,waited:r.get(e.key)}),t.length&&i.push({contact:e,items:t,t:Math.max(0,...t.map(e=>e.t||0))})}return i.sort((e,t)=>t.t-e.t)})(ea,es,er).map(t=>e(t.contact,t.items.map(e=>"invite"===e.type?`Request ${I(e.t)} \xb7 ${e.status}`:"request"===e.type?`Tracked request \xb7 ${e.status}`:`No reply for ${R(e.waited,"day")}`).join(" · "))),received:(function(e){let t=[];for(let n of e)!n.connection&&n.invitesIn.length&&t.push({contact:n,t:Math.max(0,...n.invitesIn.map(e=>e.t||0))});return t.sort((e,t)=>t.t-e.t)})(ea).map(t=>e(t.contact,`Asked to connect ${I(t.t)}`)),all:n}},[ea,en,es,er,el]),ec=r&&N?.q===W.trim()?N.ids:null,ep=W.trim().toLowerCase(),eh=(0,n.useMemo)(()=>{let t="pipeline"===B?[]:ed[B];if(!ep)return t;let n=t.filter(e=>"person"===e.type?S(e.c,ep,ec):String(e.g.title||"").toLowerCase().includes(ep)||e.g.people.some(e=>String(eo(e)||"").toLowerCase().includes(ep))||ec?.has(e.g.id));if("all"===B&&ep.length>=2&&e){let t=new Set(n.map(e=>e.key)),o=new Set;for(let r of[...e.degree1||[],...e.degree2||[]]){let e=(0,c.keyFor)(r);if(!(t.has(e)||o.has(e))&&[r.name,r.company,r.role,r.headline].some(e=>String(e||"").toLowerCase().includes(ep))&&(o.add(e),n.push({type:"person",key:e,c:null,row:r,sub:"Nothing on file yet",t:0}),o.size>=50))break}}return n},[ed,B,ep,ec,e,eo]),eg=(0,n.useMemo)(()=>{if("pipeline"!==B)return null;let e={};for(let[t,n]of Object.entries(ed.pipeline))e[t]=ep?n.filter(e=>S(e,ep,ec)):n;return e},[ed,B,ep,ec]),ef={inbox:ed.inbox.length,awaiting:ed.awaiting.length,due:ed.due.length,pipeline:Object.values(ed.pipeline).reduce((e,t)=>e+t.length,0),sent:ed.sent.length,received:ed.received.length,all:ed.all.length};function eu(e){H(e),window.matchMedia?.("(max-width: 760px)").matches&&setTimeout(()=>Z.current?.scrollIntoView({behavior:"smooth",block:"start"}),50)}async function ex(e,t){let n=await fetch("/api/social/crm",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({key:e,set:t})}),o=await n.json().catch(()=>({}));if(!n.ok)throw Error(o.error||"That couldn’t be saved.");F(t=>{let n={...t||m(),people:{...t?.people||{}}};return o.entry?n.people[e]=o.entry:delete n.people[e],n})}async function em(e){let t=await fetch("/api/social/crm",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({settings:{awaitDays:e}})}),n=await t.json().catch(()=>({}));t.ok&&F(e=>({...e||m(),settings:n.settings}))}async function ey(){window.confirm("Delete your CRM: every stage, tag, note and follow-up date you added? This can’t be undone.")&&(await fetch("/api/social/crm",{method:"DELETE"}),F(m()),Q("Your CRM notes are deleted."))}let eb=!p||!w||!e,ew={padding:"12px 14px",borderRadius:8,border:h.LINE,background:"rgba(255,255,255,0.03)",marginTop:10},ev=q?.type==="group"?en.find(e=>e.id===q.id):null,ej=ee?et.get(ee):null;return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{style:ew,children:[(0,t.jsxs)("label",{style:{display:"flex",gap:8,alignItems:"center",fontSize:13.5,color:"#fff",cursor:s?"default":"pointer"},children:[(0,t.jsx)("input",{type:"checkbox",checked:r,disabled:s,onChange:e=>i(e.target.checked)}),(0,t.jsx)("b",{children:"Keep my messages on this computer"}),(0,t.jsx)("span",{style:{fontSize:11.5,color:r?"#00ff88":"#8b9a9a"},children:r?"on":"off"})]}),(0,t.jsxs)(h.Body,{style:{margin:"6px 0 0",fontSize:12.5},children:["Off unless you turn it on. When it’s on, the messages themselves, including what other people wrote to you, and the notes sent with connection requests, are saved only in the app’s data folder on this computer. They’re never sent anywhere, and they aren’t in “Save a copy of my network”. ",(0,t.jsx)("i",{children:"Forget it"}),", or switching this off, deletes them. With it off, the CRM still shows who, when and who wrote last. Your own stages, tags, notes and follow-ups are always kept, on this computer only."]})]}),(0,t.jsxs)("div",{className:"crm-grid",style:{marginTop:10},children:[(0,t.jsxs)("div",{className:"pipeline"===B?"crm-wide":void 0,style:{...ew,marginTop:0,padding:0,minWidth:0},children:[(0,t.jsx)("div",{role:"tablist","aria-label":"CRM views",style:{display:"flex",flexWrap:"wrap",gap:4,padding:"10px 10px 6px",borderBottom:h.LINE},children:_.map(([e,n])=>(0,t.jsxs)("button",{role:"tab","aria-selected":B===e,onClick:()=>{$(e),V(100)},style:{...O,padding:"4px 9px",fontSize:12,background:B===e?"rgba(52,152,219,0.28)":"rgba(255,255,255,0.04)",color:B===e?"#fff":"#b8c4c4"},children:[n," ",(0,t.jsx)("span",{style:{color:B===e?"#cfe6f7":"#778"},children:eb?"":ef[e].toLocaleString()})]},e))}),(0,t.jsxs)("div",{style:{padding:"8px 10px",borderBottom:h.LINE,display:"flex",gap:8,alignItems:"center",flexWrap:"wrap"},children:[(0,t.jsx)("input",{type:"search",value:W,onChange:e=>{L(e.target.value),V(100)},placeholder:r?"Search names, companies, tags, notes, what was said":"Search names, companies, tags, notes","aria-label":"Search the CRM",style:{...A,flex:"1 1 180px",minWidth:0}}),(0,t.jsx)("button",{onClick:function(){var e;let t,n,o=ea.filter(e=>"sponsored"!==e.kind).sort((e,t)=>(t.lastContact||0)-(e.lastContact||0)),r=`Six Degrees CRM ${y()}.csv`;e=function(e){let t=[T.map(z).join(",")];for(let n of e)t.push([n.name,n.row?.company||"",n.profileUrl||"",n.connection?"Yes":"No",u(n.crm?.stage),(n.crm?.tags||[]).join("; "),C(n.lastContact),null==n.lastFromThem?"":n.lastFromThem?"Them":"You",n.crm?.followUp||"",n.crm?.notes||""].map(z).join(","));return`\uFEFF${t.join("\r\n")}\r
|
|
2
|
+
`}(o),t=URL.createObjectURL(new Blob([e],{type:"text/csv;charset=utf-8"})),(n=document.createElement("a")).href=t,n.download=r,n.style.position="fixed",n.style.left="-9999px",document.body.appendChild(n),n.click(),n.remove(),setTimeout(()=>URL.revokeObjectURL(t),6e4),Q(`Made “${r}” (${R(o.length,"person","people")}). Look for it in your Downloads folder, or wherever you chose to save it. It holds your notes: keep it private.`)},disabled:eb,style:O,title:"A spreadsheet of everyone here, with your stages, tags, follow-ups and notes",children:"Export CSV"})]}),"awaiting"===B&&(0,t.jsxs)("div",{style:{padding:"8px 12px",borderBottom:h.LINE,fontSize:12.5,color:"#b8c4c4",display:"flex",gap:6,alignItems:"center",flexWrap:"wrap"},children:["You wrote last and nothing came back for",(0,t.jsx)("input",{type:"number",min:1,max:365,value:er,"aria-label":"Days with no reply",onChange:e=>{let t=Number(e.target.value);t>=1&&t<=365&&em(t)},style:{...A,width:64,padding:"3px 6px"}}),"days or more",o?`, as of ${I(o)}`:"","."]}),X&&(0,t.jsx)("div",{style:{padding:"8px 12px",fontSize:12.5,color:"#00ff88",borderBottom:h.LINE},children:X}),eb&&(0,t.jsx)("div",{style:{padding:12,fontSize:13,color:"#8b9a9a"},children:"Loading…"}),!eb&&"pipeline"===B&&(0,t.jsx)(Y,{pipeline:eg,picked:ee,onPick:e=>eu({type:"person",key:e})}),!eb&&"pipeline"!==B&&0===eh.length&&(0,t.jsx)("div",{style:{padding:12,fontSize:13,color:"#8b9a9a"},children:ep?"Nothing matches that.":M[B]}),!eb&&"pipeline"!==B&&(0,t.jsxs)("div",{children:[eh.slice(0,J).map(e=>(0,t.jsx)(P,{r:e,nameOf:eo,active:"person"===e.type?ee===e.key:q?.id===e.id,onPick:()=>eu("person"===e.type?{type:"person",key:e.key}:{type:"group",id:e.id})},"person"===e.type?`p:${e.key}`:`g:${e.id}`)),eh.length>J&&(0,t.jsxs)("button",{onClick:()=>V(J+100),style:{width:"100%",padding:10,background:"none",border:"none",color:"#3498DB",cursor:"pointer",fontSize:13},children:["Show ",Math.min(100,eh.length-J).toLocaleString()," more of ",eh.length.toLocaleString()]})]})]}),(0,t.jsxs)("div",{ref:Z,className:"pipeline"===B?"crm-wide":void 0,style:{...ew,marginTop:0,minWidth:0,scrollMarginTop:80},children:[!q&&(0,t.jsx)("div",{style:{fontSize:13,color:"#8b9a9a"},children:"Pick someone to see everything with them, and to add a stage, tags, notes or a follow-up."}),ej&&(0,t.jsx)(K,{c:ej,nameOf:eo,groups:en,keep:r,token:l,inviteNotes:p?.inviteNotes||{},onChange:ex,onPickGroup:e=>eu({type:"group",id:e})},ej.key),ev&&(0,t.jsx)(G,{g:ev,contacts:et,nameOf:eo,keep:r,token:l,onPick:e=>eu({type:"person",key:e})})]})]}),(0,t.jsxs)("div",{style:{fontSize:11.5,color:"#778",marginTop:6},children:["Everyone from your export and the live sync, connections or not; groups are listed and marked. Sponsored messages are marked and kept out of the Inbox. Awaiting reply and warmth are judged as of the newest thing your data knows.",Object.keys(w?.people||{}).length>0&&(0,t.jsxs)(t.Fragment,{children:[" ","Your notes are in the app’s data folder, not in “Save a copy of my network”."," ",(0,t.jsx)("button",{onClick:ey,style:{background:"none",border:"none",color:"#ff9b9b",cursor:"pointer",fontSize:11.5,padding:0},children:"Delete my CRM notes"})]})]})]})}let M={inbox:"No one is waiting on a reply.",awaiting:"Nobody you wrote to is overdue a reply.",due:"No follow-ups are due. Set one on anyone, and it shows here on the day.",sent:"Nothing sent yet: choose your export folder above (its Invitations.csv), or mark requests sent in the app.",received:"No requests waiting on you, as far as your export shows.",all:"Nobody here yet. Choose your export folder above, or sync your messages."};function N({tier:e}){return(0,t.jsx)("span",{style:{width:8,height:8,borderRadius:"50%",background:B[e]||"#556",flexShrink:0,display:"inline-block"}})}function U({c:e}){return(0,t.jsxs)(t.Fragment,{children:[e&&!e.connection&&(0,t.jsx)("span",{style:L("rgba(255,159,67,0.18)","#ffc58a"),children:2===e.degree?"2nd degree":"Not a connection"}),e?.kind==="sponsored"&&(0,t.jsx)("span",{style:L("rgba(255,255,255,0.08)"),children:"Sponsored"}),e?.kind==="inmail"&&(0,t.jsx)("span",{style:L("rgba(155,89,182,0.25)"),children:"InMail"}),e?.crm?.stage&&(0,t.jsx)("span",{style:L("rgba(255,255,255,0.06)",$[e.crm.stage]),children:u(e.crm.stage)})]})}function P({r:e,nameOf:n,active:o,onPick:r}){let i,s=null,l=null;if("person"===e.type){let n=e.c;i=n?.name||e.row?.name||e.key,s=n?.row?.tier||e.row?.tier,l=(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(U,{c:n||{connection:e.row?.degree===1,degree:e.row?.degree}}),n?.unread>0&&(0,t.jsxs)("span",{style:L("#3498DB","#fff"),children:[n.unread," unread"]})]})}else i=q(e.g,n),l=(0,t.jsx)("span",{style:L("rgba(255,255,255,0.08)"),children:e.g.unknown?"To someone unnamed":"Group"});let a="person"===e.type?e.c?.row?.company||e.row?.company:null;return(0,t.jsxs)("div",{role:"button",tabIndex:0,"aria-pressed":o,onClick:r,onKeyDown:e=>{("Enter"===e.key||" "===e.key)&&(e.preventDefault(),r())},style:{padding:"8px 12px",borderBottom:"1px solid rgba(255,255,255,0.04)",cursor:"pointer",background:o?"rgba(52,152,219,0.14)":"none"},children:[(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:6,fontSize:13,minWidth:0,flexWrap:"wrap"},children:[(0,t.jsx)(N,{tier:s}),(0,t.jsx)("b",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",maxWidth:"100%"},children:i}),l]}),(0,t.jsx)("div",{style:{fontSize:11.5,color:"#8b9a9a",marginTop:2,paddingLeft:14,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:[a,e.sub].filter(Boolean).join(" · ")})]})}function q(e,t){if(e.title)return e.title;if(e.unknown)return"A conversation only you wrote in";let n=e.people.map(t).filter(Boolean);return n.length?`${n.slice(0,3).join(", ")}${e.people.length>3?` +${e.people.length-3}`:""}`:`${e.people.length} people`}function Y({pipeline:e,picked:n,onPick:o}){return(0,t.jsx)("div",{className:"crm-board",children:f.map(r=>(0,t.jsxs)("div",{style:{minWidth:0},children:[(0,t.jsxs)("div",{style:{fontSize:12,fontWeight:650,color:$[r.id],margin:"0 0 6px",display:"flex",justifyContent:"space-between"},children:[(0,t.jsx)("span",{children:r.label}),(0,t.jsx)("span",{style:{color:"#778"},children:e[r.id].length.toLocaleString()})]}),0===e[r.id].length&&(0,t.jsx)("div",{style:{fontSize:11.5,color:"#667",padding:"6px 0"},children:"No one"}),e[r.id].slice(0,200).map(e=>(0,t.jsxs)("div",{role:"button",tabIndex:0,onClick:()=>o(e.key),onKeyDown:t=>{("Enter"===t.key||" "===t.key)&&(t.preventDefault(),o(e.key))},style:{padding:"7px 9px",marginBottom:6,borderRadius:6,border:h.LINE,cursor:"pointer",fontSize:12.5,background:n===e.key?"rgba(52,152,219,0.18)":"rgba(255,255,255,0.03)"},children:[(0,t.jsxs)("div",{style:{display:"flex",gap:6,alignItems:"center"},children:[(0,t.jsx)(N,{tier:e.row?.tier}),(0,t.jsx)("b",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e.name})]}),(0,t.jsx)("div",{style:{color:"#8b9a9a",fontSize:11,marginTop:2},children:[e.row?.company,e.crm.followUp?`Follow up ${D(e.crm.followUp)}`:null].filter(Boolean).join(" · ")})]},e.key)),e[r.id].length>200&&(0,t.jsxs)("div",{style:{fontSize:11,color:"#778"},children:["and ",(e[r.id].length-200).toLocaleString()," more (search to find them)"]})]},r.id))})}let H={fontSize:12,fontWeight:650,color:"#b8c4c4",margin:"16px 0 6px",textTransform:"uppercase",letterSpacing:.4};function K({c:e,nameOf:o,groups:r,keep:i,token:s,inviteNotes:l,onChange:a,onPickGroup:d}){let c=e.row,[p,g]=(0,n.useState)(e.conversations[0]?.id||null),f=W(e.profileUrl),u=W(e.threadUrl),x=e.connection?`A connection${c?.connected_date?` since ${I(Date.parse(c.connected_date))}`:""}.`:2===e.degree?"2nd degree: not a connection yet.":"Not a connection.";return(0,t.jsxs)("div",{style:{fontSize:13},children:[(0,t.jsxs)("div",{style:{display:"flex",gap:8,alignItems:"center",flexWrap:"wrap"},children:[(0,t.jsx)(N,{tier:c?.tier}),(0,t.jsx)("h3",{style:{margin:0,fontSize:17},children:e.name}),c?.tier&&(0,t.jsxs)("span",{style:L("rgba(255,255,255,0.06)",B[c.tier]),children:[c.tier," tier"]}),(0,t.jsx)(U,{c:e})]}),(c?.headline||c?.company)&&(0,t.jsx)("div",{style:{color:"#b8c4c4",marginTop:4},children:c.headline||[c.role,c.company].filter(Boolean).join(" at ")}),(0,t.jsxs)("div",{style:{color:"#8b9a9a",marginTop:4,fontSize:12.5},children:[x,e.introducers.length>0&&(0,t.jsxs)(t.Fragment,{children:[" Who can introduce you: ",(0,t.jsx)("b",{style:{color:"#dfe8e8"},children:e.introducers.slice(0,6).join(", ")}),e.introducers.length>6?` and ${e.introducers.length-6} more`:"","."]}),c?.unlocked_from_name&&e.connection&&(0,t.jsxs)(t.Fragment,{children:[" You met through ",(0,t.jsx)("b",{style:{color:"#dfe8e8"},children:c.unlocked_from_name}),"."]})]}),(0,t.jsxs)("div",{style:{display:"flex",gap:12,marginTop:6,flexWrap:"wrap",fontSize:12.5},children:[f&&(0,t.jsx)("a",{href:f,target:"_blank",rel:"noreferrer",style:{color:"#3498DB",textDecoration:"none"},children:"Profile on LinkedIn ↗"}),u&&(0,t.jsx)("a",{href:u,target:"_blank",rel:"noreferrer",style:{color:"#3498DB",textDecoration:"none"},children:"Conversation on LinkedIn ↗"})]}),(0,t.jsx)(J,{c:e,onChange:a}),(0,t.jsx)("div",{style:H,children:"Conversations"}),0===e.conversations.length&&(0,t.jsx)("div",{style:{color:"#8b9a9a",fontSize:12.5},children:"None one to one."}),e.conversations.map(e=>(0,t.jsxs)("div",{style:{border:h.LINE,borderRadius:6,marginBottom:6,overflow:"hidden"},children:[(0,t.jsxs)("div",{role:"button",tabIndex:0,"aria-expanded":p===e.id,onClick:()=>g(p===e.id?null:e.id),onKeyDown:t=>{("Enter"===t.key||" "===t.key)&&(t.preventDefault(),g(p===e.id?null:e.id))},style:{display:"flex",gap:8,alignItems:"center",flexWrap:"wrap",padding:"7px 10px",cursor:"pointer",fontSize:12.5,background:p===e.id?"rgba(255,255,255,0.04)":"none"},children:[(0,t.jsx)("span",{style:{color:"#dfe8e8"},children:I(e.last)||"No date"}),null!=e.lastFromThem&&(0,t.jsx)("span",{style:{color:e.lastFromThem?"#ff9f43":"#8b9a9a"},children:e.lastFromThem?"They wrote last":"You wrote last"}),null!=e.count&&(0,t.jsx)("span",{style:{color:"#8b9a9a"},children:R(e.count,"message")}),null!=e.mine&&null!=e.count&&e.mine===e.count&&(0,t.jsx)("span",{style:L("rgba(255,255,255,0.06)"),children:"Only you wrote"}),e.folder&&"inbox"!==e.folder&&(0,t.jsx)("span",{style:L("rgba(255,255,255,0.06)"),children:e.folder}),"inmail"===e.kind&&(0,t.jsx)("span",{style:L("rgba(155,89,182,0.25)"),children:"InMail"}),"sponsored"===e.kind&&(0,t.jsx)("span",{style:L("rgba(255,255,255,0.08)"),children:"Sponsored"}),e.unread>0&&(0,t.jsxs)("span",{style:L("#3498DB","#fff"),children:[e.unread," unread"]})]}),p===e.id&&(0,t.jsx)(F,{id:e.id,keep:i,group:!1,token:s},`${e.id}:${s}:${i}`)]},e.id)),e.groups.length>0&&(0,t.jsxs)("div",{style:{fontSize:12.5,color:"#8b9a9a",marginTop:4},children:["Also in ",R(e.groups.length,"group"),":"," ",e.groups.slice(0,8).map((e,n)=>{let i=r.find(t=>t.id===e);return(0,t.jsxs)("span",{children:[n>0?", ":"",(0,t.jsx)("button",{onClick:()=>d(e),style:{background:"none",border:"none",color:"#3498DB",cursor:"pointer",padding:0,fontSize:12.5},children:i?q(i,o):"a group"})]},e)})]}),(0,t.jsx)("div",{style:H,children:"Requests"}),e.invitesOut.length+e.invitesIn.length===0&&!e.request&&(0,t.jsx)("div",{style:{color:"#8b9a9a",fontSize:12.5},children:"None on file."}),[...e.invitesOut,...e.invitesIn].sort((e,t)=>(t.t||0)-(e.t||0)).map(n=>(0,t.jsxs)("div",{style:{fontSize:12.5,marginBottom:6},children:[(0,t.jsx)("span",{style:{color:"#dfe8e8"},children:"out"===n.dir?"You asked to connect":"They asked to connect"}),(0,t.jsxs)("span",{style:{color:"#8b9a9a"},children:[" · ",I(n.t)||"no date"," · ",e.connection?"accepted":"out"===n.dir?"pending":"not accepted yet"]}),i&&l[n.id]&&(0,t.jsx)("div",{style:{marginTop:3,padding:"6px 9px",borderRadius:8,background:"rgba(255,255,255,0.06)",whiteSpace:"pre-wrap",overflowWrap:"anywhere"},children:l[n.id]})]},n.id)),e.request&&(0,t.jsxs)("div",{style:{fontSize:12.5},children:[(0,t.jsx)("span",{style:{color:"#dfe8e8"},children:"Request tracked in the app"}),(0,t.jsxs)("span",{style:{color:"#8b9a9a"},children:[" · ",e.request.status]})]})]})}function J({c:e,onChange:o}){let r=e.crm||{},[i,s]=(0,n.useState)(r.notes||""),[l,a]=(0,n.useState)(""),[d,c]=(0,n.useState)(null),p=(0,n.useRef)(null),h=e.theyWrote?"replied":e.conversations.length||e.invitesOut.length||e.request?"contacted":"new";async function g(t){c("Saving…");try{await o(e.key,t),c("Saved")}catch(e){c(e.message)}}(0,n.useEffect)(()=>()=>clearTimeout(p.current),[]);let x=e=>y(new Date(Date.now()+864e5*e)),m=r.tags||[];function b(){let e=l.trim();e&&(a(""),g({tags:[...m,...e.split(",")]}))}return(0,t.jsxs)("div",{style:{marginTop:12,padding:"10px 12px",borderRadius:8,background:"rgba(52,152,219,0.06)",border:"1px solid rgba(52,152,219,0.18)"},children:[(0,t.jsxs)("div",{style:{display:"flex",gap:12,flexWrap:"wrap",alignItems:"flex-end"},children:[(0,t.jsxs)("label",{style:{fontSize:11.5,color:"#8b9a9a",display:"flex",flexDirection:"column",gap:3},children:["Stage",(0,t.jsxs)("select",{value:r.stage||"",onChange:e=>g({stage:e.target.value||null}),style:{...A,padding:"5px 8px"},children:[(0,t.jsxs)("option",{value:"",children:["Not set (looks like ",u(h),")"]}),f.map(e=>(0,t.jsx)("option",{value:e.id,children:e.label},e.id))]})]}),(0,t.jsxs)("label",{style:{fontSize:11.5,color:"#8b9a9a",display:"flex",flexDirection:"column",gap:3},children:["Next follow-up",(0,t.jsx)("input",{type:"date",value:r.followUp||"",onChange:e=>g({followUp:e.target.value||null}),style:{...A,padding:"4px 8px",colorScheme:"dark"}})]}),(0,t.jsxs)("div",{style:{display:"flex",gap:4,flexWrap:"wrap"},children:[(0,t.jsx)("button",{onClick:()=>g({followUp:x(3)}),style:O,children:"In 3 days"}),(0,t.jsx)("button",{onClick:()=>g({followUp:x(7)}),style:O,children:"In a week"}),r.followUp&&(0,t.jsx)("button",{onClick:()=>g({followUp:null}),style:O,children:"Clear"})]})]}),null==r.stage&&"new"!==h&&(0,t.jsxs)("button",{onClick:()=>g({stage:h}),style:{...O,marginTop:8},children:["Set to ",u(h)]}),(0,t.jsxs)("div",{style:{marginTop:10,display:"flex",gap:6,flexWrap:"wrap",alignItems:"center"},children:[m.map(e=>(0,t.jsxs)("span",{style:{...L("rgba(255,255,255,0.08)"),fontSize:11.5,display:"inline-flex",gap:4,alignItems:"center"},children:[e,(0,t.jsx)("button",{"aria-label":`Remove ${e}`,onClick:()=>g({tags:m.filter(t=>t!==e)}),style:{background:"none",border:"none",color:"#8b9a9a",cursor:"pointer",padding:0,fontSize:12},children:"×"})]},e)),(0,t.jsx)("input",{value:l,onChange:e=>a(e.target.value),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),b())},onBlur:b,placeholder:"Add a tag","aria-label":"Add a tag",style:{...A,padding:"3px 8px",fontSize:12,width:120}})]}),(0,t.jsx)("textarea",{value:i,onChange:e=>{var t;s(t=e.target.value),clearTimeout(p.current),p.current=setTimeout(()=>g({notes:t}),800)},onBlur:function(){clearTimeout(p.current),i!==(r.notes||"")&&g({notes:i})},placeholder:"Your notes on them: kept on this computer only","aria-label":"Notes",rows:4,style:{...A,width:"100%",marginTop:10,resize:"vertical",fontFamily:"inherit",lineHeight:1.45,boxSizing:"border-box"}}),(0,t.jsx)("div",{style:{fontSize:11,color:d&&"Saved"!==d&&"Saving…"!==d?"#ff9b9b":"#778",marginTop:4,minHeight:14},children:d||""})]})}function G({g:e,contacts:n,nameOf:o,keep:r,token:i,onPick:s}){let l=W(e.threadUrl);return(0,t.jsxs)("div",{style:{fontSize:13},children:[(0,t.jsxs)("div",{style:{display:"flex",gap:8,alignItems:"center",flexWrap:"wrap"},children:[(0,t.jsx)("h3",{style:{margin:0,fontSize:17},children:q(e,o)}),(0,t.jsx)("span",{style:L("rgba(255,255,255,0.08)"),children:e.unknown?"To someone unnamed":"Group"}),e.unread>0&&(0,t.jsxs)("span",{style:L("#3498DB","#fff"),children:[e.unread," unread"]})]}),(0,t.jsx)("div",{style:{color:"#8b9a9a",marginTop:4,fontSize:12.5},children:[e.last?`Last active ${I(e.last)}`:null,null!=e.count?R(e.count,"message"):null].filter(Boolean).join(" · ")}),l&&(0,t.jsx)("a",{href:l,target:"_blank",rel:"noreferrer",style:{color:"#3498DB",textDecoration:"none",fontSize:12.5,display:"inline-block",marginTop:6},children:"Conversation on LinkedIn ↗"}),e.people.length>0&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("div",{style:H,children:"Who’s in it"}),(0,t.jsx)("div",{style:{display:"flex",flexWrap:"wrap",gap:6},children:e.people.map(e=>{let r=n.get(e);return(0,t.jsxs)("button",{onClick:()=>s(e),style:{...O,display:"inline-flex",gap:6,alignItems:"center"},children:[(0,t.jsx)(N,{tier:r?.row?.tier}),o(e)||e.split("/").pop(),r&&!r.connection&&(0,t.jsx)("span",{style:{color:"#ffc58a",fontSize:10.5},children:"not a connection"})]},e)})})]}),(0,t.jsx)("div",{style:H,children:"Messages"}),(0,t.jsx)("div",{style:{border:h.LINE,borderRadius:6,overflow:"hidden"},children:(0,t.jsx)(F,{id:e.id,keep:r,group:!0,token:i},`${e.id}:${i}:${r}`)})]})}let V={warm:["Warm","#ff9f43"],cool:["Cool","#3498DB"],dormant:["Dormant","#8899aa"],never:["Never messaged","#556"]},X={"connections.csv":"first name","messages.csv":"conversation id","invitations.csv":"direction","positions.csv":"company name","shares.csv":"date"},Q=e=>e?new Date(e).toLocaleDateString(void 0,{day:"numeric",month:"short",year:"numeric"}):"";async function Z(e){let t=[],n={},o=0;for(let r of e)for(let e of r.messages){let i=JSON.stringify(e).length+2;o+i>25e5&&o>0&&(t.push(n),n={},o=0),n[r.id]||(n[r.id]={title:r.title||"",messages:[]},o+=r.id.length+(r.title||"").length+40),n[r.id].messages.push(e),o+=i}t.push(n);for(let e=0;e<t.length;e++){let n=await fetch("/api/social/messages",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({part:e,parts:t.length,threads:t[e]})});if(!n.ok)throw Error((await n.json().catch(()=>({}))).error||"The messages couldn’t be saved.")}}async function ee(e){let t={};for(let n of e)n.note&&(t[n.id]=n.note);let n=await fetch("/api/social/messages",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({invites:t})});if(!n.ok)throw Error((await n.json().catch(()=>({}))).error||"The requests’ notes couldn’t be saved.")}function et({embedded:e=!1}){let{userId:o}=(0,s.useUser)(),[r,f]=(0,n.useState)(void 0),[u,x]=(0,n.useState)(null),[m,y]=(0,n.useState)(!1),[b,w]=(0,n.useState)(null),[v,j]=(0,n.useState)(!1),[k,S]=(0,n.useState)(()=>(0,p.scannerNow)()),[z,C]=(0,n.useState)(!1),[T,F]=(0,n.useState)(0),[B,$]=(0,n.useState)(0),I=(0,n.useRef)(null),D=(0,n.useRef)(null),W=r?.keepMessages===!0,R=()=>fetch("/api/social").then(e=>e.json()).then(e=>f(e.social||null)).catch(()=>f(null)).finally(()=>F(e=>e+1));async function _(e){j(!0),w(null);try{let t={};for(let n of Array.from(e||[])){let e=n.name.toLowerCase();X[e]&&!t[e]&&(t[e]=(0,a.readTable)(await n.text(),X[e]))}if(!Object.keys(t).length)throw Error("That folder doesn’t have LinkedIn’s export files in it (Connections.csv, messages.csv and so on).");let n=t["connections.csv"]||[],o=t["messages.csv"]?(0,a.messageStats)(t["messages.csv"]):{asOf:null,people:new Map},r=t["messages.csv"]?(0,a.buildConversations)(t["messages.csv"],{keepText:W}):null,i=t["invitations.csv"]?(0,a.buildInvitations)(t["invitations.csv"],{keepText:W}):null;I.current=t["messages.csv"]||null,D.current=t["invitations.csv"]||null;let s={};for(let[e,t]of o.people)s[e]={last:t.last,lastFromThem:t.lastFromThem,total:t.total,recent:t.recent};if(m)for(let e of n){let t=e["email address"];if(!t)continue;let n=(0,c.keyFor)({profile_url:e.url});s[n]={...s[n]||{},email:t}}let l=o.asOf||Date.now(),d={asOf:l,people:s,conversations:r?r.conversations.map(a.conversationSummary):[],chapters:(0,a.careerChapters)(t["positions.csv"]||[],n,l),posts:t["shares.csv"]?(0,a.postingEffect)(t["shares.csv"],n):null,invites:t["invitations.csv"]?(0,a.invitationSplit)(t["invitations.csv"]):null,invitations:(i||[]).map(({note:e,...t})=>t),names:r?r.names:{},emails:m},p=await fetch("/api/social",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(d)});if(!p.ok)throw Error((await p.json().catch(()=>({}))).error||"It couldn’t be saved.");r&&W&&await Z(r.conversations),i&&W&&await ee(i);let h=r?[r.drafts?`${r.drafts.toLocaleString()} unsent ${1===r.drafts?"draft":"drafts"} left out`:"",r.skipped?`${r.skipped.toLocaleString()} ${1===r.skipped?"row":"rows"} with no conversation or date left out`:""].filter(Boolean):[];w({good:!0,text:`Read ${Object.keys(t).length} of LinkedIn’s files: ${o.people.size.toLocaleString()} people you’ve messaged one to one`+(r?`, ${r.conversations.length.toLocaleString()} conversations${W?", their messages kept on this computer":""}`:"")+(i?`, ${i.length.toLocaleString()} connection requests`:"")+`.${h.length?` (${h.join("; ")}.)`:""}`}),await R()}catch(e){w({good:!1,text:e.message})}finally{j(!1)}}async function L(e=!1){w(null);try{let t=await (0,p.runScrape)(e?"messages-full":"messages");w(t?.exitCode===0?{good:!0,text:e?"Your whole messages history is read.":"Your messages list is read."}:{good:!1,text:"The sync stopped before it finished. The Scan page has the log."}),await R()}catch(e){w({good:!1,text:e.message})}}async function O(e){await fetch("/api/social",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({autoSync:e})}),R()}async function A(e){if(e||window.confirm("Delete the messages kept on this computer? The list of conversations stays; the messages themselves are deleted.")){C(!0),w(null);try{if(e||await fetch("/api/social/messages",{method:"DELETE"}),!(await fetch("/api/social",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({keepMessages:e})})).ok)throw Error("The switch couldn’t be saved.");e&&(I.current||D.current)?(I.current&&await Z((0,a.buildConversations)(I.current,{keepText:!0}).conversations),D.current&&await ee((0,a.buildInvitations)(D.current,{keepText:!0})),w({good:!0,text:"Your messages are kept on this computer now."})):e?w({good:!0,text:"On. Choose your export folder again, or sync your messages, to bring the messages in."}):w({good:!0,text:"Off. The kept messages are deleted."})}catch(e){w({good:!1,text:e.message})}finally{C(!1),R()}}}async function M(){await fetch("/api/social",{method:"DELETE"}),I.current=null,D.current=null;let e="Forgotten. Nothing from your export or messages is kept here now, the messages themselves included.";window.confirm("Also delete your CRM: the stages, tags, notes and follow-up dates you added? This can’t be undone. Cancel keeps them.")?(await fetch("/api/social/crm",{method:"DELETE"}),$(e=>e+1),e+=" Your CRM notes are deleted too."):e+=" Your CRM notes are kept.",w({good:!0,text:e}),R()}(0,n.useEffect)(()=>{R()},[]),(0,n.useEffect)(()=>(0,p.watchScanner)(()=>S((0,p.scannerNow)())),[]),(0,n.useEffect)(()=>{if(!o)return;let e=!0;return(0,l.loadNetwork)(o).then(t=>{e&&x(t)}).catch(()=>{}),()=>{e=!1}},[o]);let{merged:N,asOf:U}=(0,n.useMemo)(()=>(0,d.mergeSocial)(r),[r]),P=(0,n.useMemo)(()=>{let e={warm:0,cool:0,dormant:0,never:0};for(let t of u?.degree1||[])e[(0,a.warmthOf)(N.get((0,c.keyFor)(t)),U)]+=1;return e},[u,N,U]);if(g.IS_DEMO)return(0,t.jsx)("div",{style:{minHeight:"100vh",background:"#0a0a1a",color:"#aaa",padding:40,fontFamily:h.FONT},children:"Not part of the demo."});let q=k?.running,Y={padding:"12px 14px",borderRadius:8,border:h.LINE,background:"rgba(255,255,255,0.03)",marginTop:10},H={fontSize:16,margin:"24px 0 6px"};return(0,t.jsxs)("div",{style:e?{color:"#fff",fontFamily:h.FONT}:{minHeight:"100vh",background:"#0a0a1a",color:"#fff",fontFamily:h.FONT},children:[!e&&(0,t.jsxs)("header",{style:{padding:"16px 24px",borderBottom:h.LINE,display:"flex",alignItems:"center",gap:16},children:[(0,t.jsx)(i.default,{href:"/",style:{color:"#888",textDecoration:"none",fontSize:13,fontWeight:600,padding:"6px 14px",borderRadius:6,background:"rgba(255,255,255,0.06)",border:h.LINE},children:"← Back to Map"}),(0,t.jsxs)("h1",{style:{fontSize:22,fontWeight:700,margin:0,color:"#FFD700"},children:["Social ",(0,t.jsx)("span",{style:{fontSize:12,color:"#8b9a9a",fontWeight:600},children:"experimental"})]})]}),(0,t.jsxs)("main",{style:{maxWidth:1180,margin:"0 auto",padding:"8px 16px 64px"},children:[(0,t.jsxs)(h.Body,{style:{marginTop:16},children:["Everyone you’ve been in touch with on LinkedIn, connections or not: who’s waiting on you, who hasn’t answered, what you’ve sent and received, and your own notes and follow-ups on each, from your own LinkedIn data. Only dates, who wrote last, counts and names are kept on this computer, and what messages say only if you turn on ",(0,t.jsx)("i",{children:"Keep my messages"})," below."]}),(0,t.jsx)("h2",{style:H,children:"Your LinkedIn export"}),(0,t.jsxs)("div",{style:Y,children:[(0,t.jsxs)(h.Body,{style:{margin:0},children:["On LinkedIn: ",(0,t.jsx)("i",{children:"Settings → Data privacy → Get a copy of your data"}),", pick the larger archive, and unzip the file it emails you. Then choose that folder here. It’s read in this window; nothing goes to LinkedIn."]}),(0,t.jsxs)("label",{style:{display:"flex",gap:8,alignItems:"flex-start",fontSize:12.5,color:"#b8c4c4",marginTop:10},children:[(0,t.jsx)("input",{type:"checkbox",checked:m,onChange:e=>y(e.target.checked),style:{marginTop:3}}),(0,t.jsx)("span",{children:"Also keep email addresses from it, on this computer only, for one-click email."})]}),(0,t.jsxs)("div",{style:{marginTop:10,display:"flex",gap:10,alignItems:"center",flexWrap:"wrap"},children:[(0,t.jsxs)("label",{style:{padding:"7px 14px",borderRadius:8,background:"rgba(52,152,219,0.18)",color:"#cfe6f7",cursor:v?"default":"pointer",fontSize:13},children:[v?"Reading…":r?"Choose a newer export":"Choose the export folder",(0,t.jsx)("input",{type:"file",webkitdirectory:"",directory:"",multiple:!0,disabled:v,style:{display:"none"},onChange:e=>_(e.target.files)})]}),r&&(0,t.jsxs)("span",{style:{fontSize:12,color:"#8b9a9a"},children:["From an export up to ",Q(r.asOf),r.liveAt?` \xb7 messages synced ${Q(Date.parse(r.liveAt))}`:""]}),r&&(0,t.jsx)("button",{onClick:M,style:{background:"none",border:"none",color:"#ff9b9b",cursor:"pointer",fontSize:12},children:"Forget it"})]})]}),(0,t.jsxs)("h2",{style:H,children:["Live messages sync ",(0,t.jsx)("span",{style:{fontSize:11,color:"#FFD700"},children:"experimental"})]}),(0,t.jsxs)("div",{style:Y,children:[(0,t.jsxs)(h.Body,{style:{margin:0},children:["Reads your messages list once, in your own Chrome: who each conversation is with, connections or not, when it was last active, whether it’s unread and who wrote last. It uses no search budget and opens no conversation. The newest message’s words are kept only if ",(0,t.jsx)("i",{children:"Keep my messages"})," is on. The daily sync reads the top of the list; ",(0,t.jsx)("i",{children:"Read my whole history"})," keeps scrolling until no more conversations load (at most 60 scrolls, about 1,000 conversations), at the same slow, fixed pace, so it takes a few minutes."]}),(0,t.jsxs)("div",{style:{marginTop:10,display:"flex",gap:12,alignItems:"center",flexWrap:"wrap"},children:[(0,t.jsx)("button",{onClick:()=>L(!1),disabled:q,style:{padding:"7px 14px",borderRadius:8,border:"none",background:q?"#333":"rgba(0,255,136,0.15)",color:q?"#777":"#00ff88",cursor:q?"default":"pointer",fontSize:13},children:q?"The scanner is busy":"Sync messages now"}),(0,t.jsx)("button",{onClick:()=>L(!0),disabled:q,style:{padding:"7px 14px",borderRadius:8,border:h.LINE,background:"none",color:q?"#777":"#cfe6f7",cursor:q?"default":"pointer",fontSize:13},children:"Read my whole history"}),(0,t.jsxs)("label",{style:{display:"flex",gap:6,alignItems:"center",fontSize:12.5,color:"#b8c4c4"},children:[(0,t.jsx)("input",{type:"checkbox",checked:r?.autoSync===!0,onChange:e=>O(e.target.checked)}),"Once a day while the app is open (daytime only)"]})]})]}),b&&(0,t.jsx)("div",{style:{marginTop:10,fontSize:13,color:b.good?"#00ff88":"#ff9b9b"},children:b.text}),(0,t.jsx)("h2",{style:H,children:"People"}),(0,t.jsx)(E,{net:u,asOf:r?U:null,keep:W,onKeep:A,switching:z||v,token:T,crmToken:B}),r&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("h2",{style:H,children:"Warmth"}),(0,t.jsx)("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(160px, 1fr))",gap:10},children:Object.entries(V).map(([e,[n,o]])=>(0,t.jsxs)("div",{style:{...Y,marginTop:0},children:[(0,t.jsx)("div",{style:{fontSize:22,fontWeight:700,color:o},children:(P[e]||0).toLocaleString()}),(0,t.jsx)("div",{style:{fontSize:12.5,color:"#b8c4c4"},children:n})]},e))}),(0,t.jsx)("div",{style:{fontSize:11.5,color:"#778",marginTop:6},children:"Of your connections. Warm: messaged in the last 30 days, or 3+ messages in 90. Cool: within a year. Dormant: longer ago."}),r.chapters?.length>0&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("h2",{style:H,children:"Career chapters"}),(0,t.jsx)("div",{style:{...Y,padding:0},children:r.chapters.map(e=>{let n=(e.people||[]).filter(e=>["warm","cool"].includes((0,a.warmthOf)(N.get((0,c.keyFor)({profile_url:e})),U))).length;return(0,t.jsxs)("div",{style:{display:"flex",gap:10,padding:"8px 14px",borderBottom:"1px solid rgba(255,255,255,0.04)",fontSize:13,alignItems:"baseline"},children:[(0,t.jsxs)("span",{style:{flex:1},children:[(0,t.jsx)("b",{children:e.company})," ",(0,t.jsxs)("span",{style:{color:"#8b9a9a"},children:[e.title," · ",new Date(e.from).getFullYear(),"–",e.to?new Date(e.to).getFullYear():"now"]})]}),(0,t.jsxs)("span",{style:{color:"#b8c4c4"},children:[e.made.toLocaleString()," connections made"]}),(0,t.jsx)("span",{style:{color:"#ff9f43",minWidth:90,textAlign:"right"},children:e.made?`${Math.round(100*n/e.made)}% still in touch`:""})]},`${e.company}-${e.from}`)})})]}),r.posts?.posts?.length>0&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("h2",{style:H,children:"Does posting work?"}),(0,t.jsxs)("div",{style:Y,children:[(0,t.jsxs)("div",{style:{fontSize:13},children:["In the week after a post you made ",(0,t.jsx)("b",{children:r.posts.afterPosts.toFixed(1)})," new connections on average; a usual week, ",(0,t.jsx)("b",{children:r.posts.usualWeek.toFixed(1)}),"."]}),(0,t.jsx)("div",{style:{fontSize:11.5,color:"#778",marginTop:4},children:"What came after a post, not proof it came from it."}),[...r.posts.posts].sort((e,t)=>t.week-e.week).slice(0,3).map(e=>(0,t.jsxs)("div",{style:{fontSize:12.5,color:"#b8c4c4",marginTop:6},children:[Q(e.t),": ",e.week," new connections that week ",e.link?(0,t.jsx)("a",{href:e.link,target:"_blank",rel:"noreferrer",style:{color:"#3498DB",textDecoration:"none"},children:"Post ↗"}):null]},e.t))]})]}),r.invites?.total>0&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("h2",{style:H,children:"Who reaches out"}),(0,t.jsx)("div",{style:Y,children:(0,t.jsxs)("span",{style:{fontSize:13},children:[r.invites.incoming.toLocaleString()," requests came to you and you sent ",r.invites.outgoing.toLocaleString()," ","(",Math.round(100*r.invites.incoming/r.invites.total),"% came to you), as far as your export shows."]})})]})]})]})]})}var en=e.i(99883),eo=e.i(48235);let er={S:25,A:15,B:10,C:5,D:2},ei={S:100,A:60,B:35,C:15,D:5};var es=e.i(5258),el=e.i(36774);let ea={S:"#FFD700",A:"#9B59B6",B:"#3498DB",C:"#95A5A6",D:"#BDC3C7"},ed="1px solid rgba(255,255,255,0.1)";function ec({person:e,size:n=36,ring:o}){let r=ea[e?.tier]||"#667";return(0,t.jsxs)("div",{style:{position:"relative",width:n,height:n,flexShrink:0},children:[(0,t.jsx)("div",{style:{width:n,height:n,borderRadius:"50%",background:r,color:e?.tier==="S"?"#000":"#fff",display:"flex",alignItems:"center",justifyContent:"center",fontSize:.34*n,fontWeight:800,border:`2px solid ${o||r}`},children:(0,es.initialsFor)(e?.name||"?")}),(0,el.localPhoto)(e?.profile_image_url)&&(0,t.jsx)("img",{src:(0,el.localPhoto)(e.profile_image_url),alt:"",onError:e=>{e.currentTarget.style.display="none"},style:{position:"absolute",inset:0,width:n,height:n,borderRadius:"50%",objectFit:"cover",border:`2px solid ${o||r}`}})]})}function ep({progress:e,size:n=86,color:o="#FF6B35",children:r}){let i=n/2-5,s=2*Math.PI*i;return(0,t.jsxs)("div",{style:{position:"relative",width:n,height:n},children:[(0,t.jsxs)("svg",{width:n,height:n,style:{position:"absolute",inset:0,transform:"rotate(-90deg)"},children:[(0,t.jsx)("circle",{cx:n/2,cy:n/2,r:i,fill:"none",stroke:"rgba(255,255,255,0.08)",strokeWidth:5}),(0,t.jsx)("circle",{cx:n/2,cy:n/2,r:i,fill:"none",stroke:o,strokeWidth:5,strokeLinecap:"round",strokeDasharray:`${s*Math.min(1,e)} ${s}`,style:{transition:"stroke-dasharray 0.5s ease"}})]}),(0,t.jsx)("div",{style:{position:"absolute",inset:9,display:"flex",alignItems:"center",justifyContent:"center"},children:r})]})}function eh({recs:e,sentIds:o,added:r,mappedIds:s,reach:l,onSend:a,onUndo:d}){let c=(0,n.useMemo)(()=>(function({recs:e=[],sentIds:t=new Set,added:n=[],mappedIds:o=new Set,reach:r=null}){var i;let s,l,a,d=new Map,c=new Set;for(let t of[...e].sort((e,t)=>(t.priority||0)-(e.priority||0))){if(!t.bridge)continue;let e=`${t.bridge.id}|${t.profile_url||t.id}`;if(c.has(e))continue;c.add(e);let n=d.get(t.bridge.id);n||(n={bridge:t.bridge,people:[]},d.set(t.bridge.id,n)),n.people.push(t)}let p=new Map;for(let e of n){let t=e.unlocked_from_bridge_id;t&&p.set(t,[...p.get(t)||[],e])}let h=[],g=0,f=0;for(let{bridge:e,people:n}of d.values()){let o=n.filter(e=>t.has(e.id)),r=p.get(e.id)||[];f+=o.length,g+=o.reduce((e,t)=>e+(er[t.tier]||2),0),g+=r.reduce((e,t)=>e+(ei[t.tier]||5),0);let i=Math.ceil(n.length/5)||1,s=0;for(;s<i-1&&n.slice(5*s,(s+1)*5).every(e=>t.has(e.id));)s++;let l=n.slice(5*s,(s+1)*5),a=l.filter(e=>t.has(e.id)).length,d=a===l.length&&s===i-1;h.push({bridge:e,people:n,stage:s+1,stages:i,targets:l,done:a,progress:l.length?a/l.length:1,complete:d,sent:o.length,added:r,value:l.filter(e=>!t.has(e.id)).reduce((e,t)=>e+(t.priority||0),0),open:{S:l.filter(e=>"S"===e.tier&&!t.has(e.id)).length,A:l.filter(e=>"A"===e.tier&&!t.has(e.id)).length}})}h.sort((e,t)=>e.complete-t.complete||(t.progress>0&&t.progress<1)-(e.progress>0&&e.progress<1)||t.progress-e.progress||t.value-e.value);let u=h.filter(e=>!e.complete).flatMap(e=>e.targets.filter(e=>!t.has(e.id)).map(t=>({person:t,cluster:e,score:(t.priority||0)*(1+.6*e.progress)}))).sort((e,t)=>t.score-e.score),x=new Set,m=[];for(let e of u){let t=e.person.profile_url||e.person.id;if(!x.has(t)&&(x.add(t),m.push(e),3===m.length))break}let y=n.filter(e=>e.unlocked_from_bridge_id).length;return{clusters:h,nextMoves:m,points:g,level:(l=((s=Math.floor(Math.sqrt(Math.max(0,i=g)/40))+1)-1)**2*40,a=s**2*40,{level:s,floor:l,next:a,progress:(i-l)/(a-l)}),sentTotal:f,addedTotal:y,newDoors:n.filter(e=>e.unlocked_from_bridge_id&&"todo"===(0,eo.circleState)(e,r||{scanned:o,hidden:new Set})),clearedStages:h.reduce((e,t)=>e+(t.stage-1)+ +!!t.complete,0)}})({recs:e,sentIds:o,added:r,mappedIds:s,reach:l}),[e,o,r,s,l]),[p,h]=(0,n.useState)(null),[g,f]=(0,n.useState)(null),{level:u}=c;async function x(e,t){await a(e);let n=t.done+1,o=String(t.bridge.name||"").split(/[\s,]+/)[0];f(n>=t.targets.length?`+${er[e.tier]||2} \xb7 Stage ${t.stage} of ${o}'s circle cleared — the next 5 are up`:`+${er[e.tier]||2} \xb7 ${o}'s circle ${n}/${t.targets.length}`),setTimeout(()=>f(null),3500)}let m=c.clusters.find(e=>e.bridge.id===p);return(0,t.jsxs)("div",{style:{maxWidth:1100,margin:"0 auto",padding:"16px 20px 60px"},children:[(0,t.jsxs)("div",{style:{display:"flex",gap:16,alignItems:"center",flexWrap:"wrap",padding:16,borderRadius:12,border:ed,background:"linear-gradient(135deg, rgba(255,107,53,0.10), rgba(155,89,182,0.08))"},children:[(0,t.jsxs)("div",{style:{width:64,height:64,borderRadius:16,background:"linear-gradient(135deg, #FFD700, #FF6B35)",color:"#000",display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center"},children:[(0,t.jsx)("div",{style:{fontSize:10,fontWeight:800},children:"LEVEL"}),(0,t.jsx)("div",{style:{fontSize:26,fontWeight:900,lineHeight:1},children:u.level})]}),(0,t.jsxs)("div",{style:{flex:1,minWidth:220},children:[(0,t.jsxs)("div",{style:{fontSize:13,color:"#dfe6e9"},children:[(0,t.jsx)("b",{children:c.points})," points · ",(0,t.jsx)("b",{children:u.next-c.points})," to level ",u.level+1]}),(0,t.jsx)("div",{style:{height:8,borderRadius:4,background:"rgba(255,255,255,0.08)",marginTop:6,overflow:"hidden"},children:(0,t.jsx)("div",{style:{height:"100%",width:`${Math.round(100*u.progress)}%`,background:"linear-gradient(90deg, #FFD700, #FF6B35)",transition:"width 0.5s"}})}),(0,t.jsx)("div",{style:{fontSize:11.5,color:"#8b9a9a",marginTop:6},children:"Points come from invites you send and people who accept — not from browsing."})]}),[[c.sentTotal,"invites sent"],[c.addedTotal,"people added"],[c.clearedStages,"stages cleared"]].map(([e,n])=>(0,t.jsxs)("div",{style:{textAlign:"center",minWidth:80},children:[(0,t.jsx)("div",{style:{fontSize:24,fontWeight:900},children:e}),(0,t.jsx)("div",{style:{fontSize:11,color:"#8b9a9a"},children:n})]},n))]}),c.newDoors.length>0&&(0,t.jsxs)("div",{style:{marginTop:12,padding:"10px 14px",borderRadius:10,border:"1px solid rgba(0,255,136,0.3)",background:"rgba(0,255,136,0.06)",fontSize:13},children:["🚪 ",(0,t.jsxs)("b",{children:[c.newDoors.length," new ",1===c.newDoors.length?"door":"doors",":"]})," people you added through a circle, whose own circle isn’t mapped yet. That’s the next degree. ",(0,t.jsx)(i.default,{href:"/setup",style:{color:"#00ff88"},children:"Map them on the Scan page →"})]}),c.nextMoves.length>0&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("h3",{style:{margin:"22px 0 10px",fontSize:15},children:"Next best moves"}),(0,t.jsx)("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(300px, 1fr))",gap:12},children:c.nextMoves.map(({person:e,cluster:n},o)=>(0,t.jsxs)("div",{style:{padding:14,borderRadius:12,border:`1px solid ${ea[e.tier]}55`,background:"rgba(255,255,255,0.03)",position:"relative"},children:[(0,t.jsxs)("div",{style:{position:"absolute",top:10,right:12,fontSize:11,fontWeight:800,color:"#FF6B35"},children:["#",o+1]}),(0,t.jsxs)("div",{style:{display:"flex",gap:10,alignItems:"center"},children:[(0,t.jsx)(ec,{person:e,size:44}),(0,t.jsxs)("div",{style:{minWidth:0},children:[(0,t.jsx)("div",{style:{fontWeight:700,fontSize:14},children:e.name}),(0,t.jsx)("div",{style:{fontSize:11.5,color:"#8b9a9a",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",maxWidth:220},children:e.headline})]})]}),(0,t.jsxs)("div",{style:{fontSize:11.5,color:"#aab7b7",margin:"10px 0"},children:["via ",(0,t.jsx)("b",{style:{color:ea[n.bridge.tier]},children:n.bridge.name})," · their circle ",n.done,"/",n.targets.length," this stage"]}),(0,t.jsxs)("div",{style:{display:"flex",gap:8},children:[e.profile_url&&(0,t.jsx)("a",{href:e.profile_url,target:"_blank",rel:"noopener noreferrer",style:ef,children:"Open on LinkedIn"}),(0,t.jsxs)("button",{onClick:()=>x(e,n),style:eg,children:["I sent an invite · +",er[e.tier]||2]})]})]},e.id))})]}),(0,t.jsx)("h3",{style:{margin:"26px 0 4px",fontSize:15},children:"Circles to work through"}),(0,t.jsxs)("div",{style:{fontSize:12,color:"#8b9a9a",marginBottom:12},children:["Each is one of your connections and the best people they know, ",5," at a time. Fill the ring to clear a stage."]}),(0,t.jsx)("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fill, minmax(190px, 1fr))",gap:12},children:c.clusters.map(e=>{let n=p===e.bridge.id;return(0,t.jsxs)("button",{onClick:()=>h(n?null:e.bridge.id),style:{padding:12,borderRadius:12,cursor:"pointer",textAlign:"center",color:"#fff",border:n?"1px solid #FF6B35":ed,background:e.complete?"rgba(0,255,136,0.06)":"rgba(255,255,255,0.03)",display:"flex",flexDirection:"column",alignItems:"center",gap:6},children:[(0,t.jsx)(ep,{progress:e.progress,color:e.complete?"#00ff88":"#FF6B35",children:(0,t.jsx)(ec,{person:e.bridge,size:60})}),(0,t.jsx)("div",{style:{fontWeight:700,fontSize:13,maxWidth:170,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e.bridge.name}),(0,t.jsx)("div",{style:{fontSize:11,color:e.complete?"#00ff88":"#aab7b7"},children:e.complete?"Circle cleared":`Stage ${e.stage} of ${e.stages} \xb7 ${e.done}/${e.targets.length}`}),(0,t.jsx)("div",{style:{display:"flex",gap:4},children:e.targets.map(e=>(0,t.jsx)("span",{title:e.name,style:{width:12,height:12,borderRadius:"50%",border:`2px solid ${ea[e.tier]||"#667"}`,background:o.has(e.id)?ea[e.tier]||"#667":"transparent"}},e.id))}),(0,t.jsxs)("div",{style:{fontSize:10.5,color:"#778"},children:[e.open.S?`${e.open.S} S \xb7 `:"",e.open.A?`${e.open.A} A \xb7 `:"",e.people.length," worth adding",e.added.length?` \xb7 ★ ${e.added.length} added`:""]})]},e.bridge.id)})}),m&&(0,t.jsxs)("div",{style:{marginTop:14,padding:16,borderRadius:12,border:"1px solid rgba(255,107,53,0.4)",background:"rgba(255,107,53,0.05)"},children:[(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:10,marginBottom:10},children:[(0,t.jsx)(ec,{person:m.bridge,size:40}),(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{style:{fontWeight:800},children:[m.bridge.name,"’s circle · stage ",m.stage," of ",m.stages]}),(0,t.jsxs)("div",{style:{fontSize:12,color:"#aab7b7"},children:["Ask ",m.bridge.name?.split(" ")[0]," for an intro, or invite them directly. Mark each one when it’s sent."]})]})]}),m.targets.map(e=>{let n=o.has(e.id);return(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:10,padding:"8px 0",borderTop:"1px solid rgba(255,255,255,0.05)"},children:[(0,t.jsx)(ec,{person:e,size:34,ring:n?"#00ff88":void 0}),(0,t.jsxs)("div",{style:{flex:1,minWidth:0},children:[(0,t.jsxs)("div",{style:{fontWeight:600,fontSize:13},children:[e.name," ",(0,t.jsx)("span",{style:{color:ea[e.tier],fontSize:11},children:e.tier})]}),(0,t.jsx)("div",{style:{fontSize:11.5,color:"#8b9a9a",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e.headline})]}),e.profile_url&&(0,t.jsx)("a",{href:e.profile_url,target:"_blank",rel:"noopener noreferrer",style:ef,children:"LinkedIn"}),n?(0,t.jsx)("button",{onClick:()=>d(e),style:{...ef,color:"#00ff88"},children:"Sent ✓ (undo)"}):(0,t.jsxs)("button",{onClick:()=>x(e,m),style:eg,children:["Sent · +",er[e.tier]||2]})]},e.id)}),m.added.length>0&&(0,t.jsxs)("div",{style:{marginTop:10,fontSize:12,color:"#00ff88"},children:["★ Added from this circle: ",m.added.map(e=>e.name).join(", ")]})]}),g&&(0,t.jsx)("div",{role:"status",style:{position:"fixed",bottom:24,left:"50%",transform:"translateX(-50%)",padding:"10px 18px",borderRadius:24,background:"linear-gradient(135deg, #FFD700, #FF6B35)",color:"#000",fontWeight:800,fontSize:13,boxShadow:"0 8px 30px rgba(0,0,0,0.5)",zIndex:50},children:g})]})}let eg={padding:"7px 12px",borderRadius:8,border:"none",cursor:"pointer",fontWeight:800,fontSize:12,background:"linear-gradient(135deg, #FF6B35, #FFD700)",color:"#000"},ef={padding:"7px 12px",borderRadius:8,border:ed,cursor:"pointer",fontWeight:600,fontSize:12,background:"rgba(255,255,255,0.05)",color:"#dfe6e9",textDecoration:"none"};var eu=e.i(2776),ex=e.i(90179),em=e.i(28867),ey=e.i(86106);let eb={S:"#FFD700",A:"#9B59B6",B:"#3498DB",C:"#95A5A6",D:"#BDC3C7"},ew=["quest","recs","pending","messages"];function ev(){let{userId:e,userProfile:a}=(0,s.useUser)(),d=a?.sectors||[],[h,f]=(0,n.useState)([]),[u,x]=(0,n.useState)(!0),[m,y]=(0,n.useState)("all"),[b,w]=(0,n.useState)(new Set),v=(0,em.default)(),[j,k]=(0,n.useState)([]),[S,z]=(0,n.useState)({}),C=(0,o.useSearchParams)().get("view"),[T,F]=(0,n.useState)(()=>ew.includes(C)?C:"quest"),[B,$]=(0,n.useState)([]),[I,D]=(0,n.useState)(()=>new Set),[W,R]=(0,n.useState)(null),[_,L]=(0,n.useState)(null),[O,A]=(0,n.useState)(()=>{{let e=new URLSearchParams(window.location.search);if(e.get("groupBy"))return e.get("groupBy")}return"bridge"});(0,n.useEffect)(()=>{{let e=new URLSearchParams(window.location.search).get("bridge");e&&L(e)}},[]),(0,n.useEffect)(()=>{!g.IS_DEMO&&e&&t();async function t(){let[t,n,o]=await Promise.all([(0,l.loadNetwork)(e),fetch(`/api/outreach?userId=${e}`).then(e=>e.json()).catch(()=>({pending:[]})),(0,p.loadScanNotes)()]),r=t.degree1,i=t.degree2;$(r.filter(e=>e.unlocked_from_bridge_id)),D(new Set(i.map(e=>e.source_connection_id).filter(Boolean))),R((0,eo.reachIndex)(r,i,o));let s=new Set(r.map(e=>e.profile_url)),a={};r.forEach(e=>{a[e.id]=e}),k(n.pending||[]),z(a),f(i.filter(e=>("S"===e.tier||"A"===e.tier||"B"===e.tier)&&!s.has(e.profile_url)).map(e=>{let t,n,o=a[e.source_connection_id],r=(t=parseFloat(e.power_score)||0,n=(e.headline||"").toLowerCase(),(0,ex.rowCompanyScore)(e)>=ex.TOP_COMPANY&&(t+=1),(d||[]).forEach(e=>{n.includes(e.toLowerCase())&&(t+=.5)}),"S"===e.tier?t*=1.5:"A"===e.tier&&(t*=1.2),t),i="S"===e.tier?50:"A"===e.tier?25:10;return{...e,bridge:o,priority:r,xp:i}}).sort((e,t)=>t.priority-e.priority)),x(!1)}},[e]);let E=(0,n.useMemo)(()=>new Set([...j,...h].filter(e=>(0,ey.hasRequest)(e,v)).map(e=>e.id)),[j,h,v]),M=(0,n.useMemo)(()=>{let e=new Set,t=[];for(let n of[...j,...h]){let o=(0,c.keyFor)(n);!e.has(o)&&(0,ey.hasRequest)(n,v)&&(e.add(o),t.push({...n,bridge:S[n.source_connection_id]||n.bridge||null}))}return t},[j,h,v,S]);if((0,n.useEffect)(()=>((0,en.setNotchTabs)({items:[{key:"quest",label:"Circles"},{key:"recs",label:`To add (${h.length})`},{key:"pending",label:`Pending (${M.length})`},{key:"messages",label:"Messages & follow-ups"}],current:T,onPick:F}),()=>(0,en.setNotchTabs)(null)),[T,h.length,M.length]),g.IS_DEMO)return(0,t.jsxs)("div",{style:{minHeight:"100vh",background:"#0a0a1a",color:"rgba(255,255,255,0.7)",fontFamily:'-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif',display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",gap:10,textAlign:"center",padding:24},children:[(0,t.jsx)("h2",{style:{margin:0,fontSize:18,fontWeight:700,color:"#fff"},children:"Not part of the demo"}),(0,t.jsx)("div",{style:{fontSize:13},children:"The public demo includes the Network Circle and Degrees views only."}),(0,t.jsx)(i.default,{href:"/",style:{fontSize:12,color:"rgba(255,255,255,0.5)",textDecoration:"none"},children:"← Back to the network"})]});let N="all"===m?h:h.filter(e=>e.tier===m);_&&(N=N.filter(e=>e.bridge?.id===_));let U={S:0,A:0,B:0};h.forEach(e=>{void 0!==U[e.tier]&&U[e.tier]++});let P={};N.forEach(e=>{let t;P[t="bridge"===O?e.bridge?.id||"unknown":"company"===O?(e.company||"Unknown").trim()||"Unknown":e.tier]||(P[t]=[]),P[t].push(e)});let q={S:0,A:1,B:2},Y=Object.entries(P).sort((e,t)=>{if("tier"===O)return(q[e[0]]||9)-(q[t[0]]||9);if("bridge"===O){let n=e[1][0]?.bridge,o=t[1][0]?.bridge,r=q[n?.tier]??9,i=q[o?.tier]??9;if(r!==i)return r-i}return t[1].length-e[1].length});function H(e){w(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})}return u?(0,t.jsx)("div",{style:{minHeight:"100vh",display:"flex",alignItems:"center",justifyContent:"center",background:"#0a0a1a",color:"#fff"},children:"Loading..."}):(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.jsx)("header",{style:{padding:"20px 30px",borderBottom:"1px solid rgba(255,255,255,0.1)",flexShrink:0},children:(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:12},children:[(0,t.jsx)(i.default,{href:"/",style:{textDecoration:"none"},children:(0,t.jsx)("h1",{style:{fontSize:28,fontWeight:700,margin:0,background:"linear-gradient(135deg, #FFD700, #9B59B6, #3498DB)",WebkitBackgroundClip:"text",WebkitTextFillColor:"transparent"},children:"Six Degrees"})}),(0,t.jsx)(r.default,{active:"outlink"}),(0,t.jsx)(i.default,{href:"/settings",title:"Settings","aria-label":"Settings",style:{width:32,height:32,borderRadius:"50%",flexShrink:0,background:"rgba(255,255,255,0.06)",color:"#888",fontSize:16,textDecoration:"none",display:"flex",alignItems:"center",justifyContent:"center"},children:"⚙"})]})}),("recs"===T||"pending"===T)&&(0,t.jsxs)("div",{style:{padding:"10px 24px",borderBottom:"1px solid rgba(255,255,255,0.08)",flexShrink:0},children:[(0,t.jsx)("div",{style:{display:"flex",alignItems:"center",gap:12,marginBottom:10},children:(0,t.jsx)("div",{style:{marginLeft:"auto",display:"flex",gap:6},children:"recs"===T&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("button",{onClick:()=>A("tier"),style:{padding:"4px 10px",borderRadius:4,border:"none",fontSize:10,fontWeight:600,cursor:"pointer",background:"tier"===O?"rgba(255,255,255,0.15)":"rgba(255,255,255,0.05)",color:"tier"===O?"#fff":"#666"},children:"By Tier"}),(0,t.jsx)("button",{onClick:()=>A("bridge"),style:{padding:"4px 10px",borderRadius:4,border:"none",fontSize:10,fontWeight:600,cursor:"pointer",background:"bridge"===O?"rgba(255,255,255,0.15)":"rgba(255,255,255,0.05)",color:"bridge"===O?"#fff":"#666"},children:"By Bridge"}),(0,t.jsx)("button",{onClick:()=>A("company"),style:{padding:"4px 10px",borderRadius:4,border:"none",fontSize:10,fontWeight:600,cursor:"pointer",background:"company"===O?"rgba(255,255,255,0.15)":"rgba(255,255,255,0.05)",color:"company"===O?"#fff":"#666"},children:"By Company"})]})})}),(0,t.jsx)("div",{style:{display:"flex",gap:6},children:[{k:"all",l:`All (${h.length})`},{k:"S",l:`S (${U.S})`,c:eb.S},{k:"A",l:`A (${U.A})`,c:eb.A},{k:"B",l:`B (${U.B})`,c:eb.B}].map(e=>(0,t.jsx)("button",{onClick:()=>y(e.k),style:{padding:"4px 12px",borderRadius:16,border:"none",fontSize:11,fontWeight:600,cursor:"pointer",background:m===e.k?e.c||"#fff":"rgba(255,255,255,0.06)",color:m===e.k?"#000":e.c||"#888"},children:e.l},e.k))})]}),"messages"===T&&(0,t.jsx)("div",{style:{flex:1,overflow:"auto",padding:"40px 8px 0"},children:(0,t.jsx)(et,{embedded:!0})}),"recs"===T&&b.size>0&&(0,t.jsxs)("div",{style:{padding:"10px 24px",background:"rgba(255,215,0,0.08)",borderBottom:"1px solid rgba(255,215,0,0.2)",display:"flex",alignItems:"center",gap:12,flexShrink:0},children:[(0,t.jsxs)("span",{style:{fontSize:12,color:"#FFD700",fontWeight:600},children:[b.size," selected"]}),(0,t.jsxs)("button",{onClick:function(){let e=N.filter(e=>b.has(e.id));if(0===e.length)return;if(1===e.length)return void window.open(e[0].profile_url,"_blank");let t=new Blob([`<!DOCTYPE html><html><head><title>Outlink — ${e.length} profiles</title>
|
|
3
|
+
<style>body{background:#0a0a1a;color:#fff;font-family:-apple-system,sans-serif;padding:24px;margin:0}
|
|
4
|
+
h2{color:#FFD700;margin-bottom:4px}p{color:#888;font-size:13px;margin-bottom:16px}
|
|
5
|
+
.btn{display:block;padding:12px 16px;margin-bottom:6px;background:rgba(255,255,255,0.06);
|
|
6
|
+
border:1px solid rgba(255,255,255,0.1);border-radius:8px;color:#fff;text-decoration:none;
|
|
7
|
+
font-size:13px;transition:background 0.15s}.btn:hover{background:rgba(0,119,181,0.2)}
|
|
8
|
+
.name{font-weight:700}.tier{font-size:11px;margin-left:8px;font-weight:600}
|
|
9
|
+
.open-all{display:inline-block;padding:12px 24px;background:linear-gradient(135deg,#FFD700,#FF6B35);
|
|
10
|
+
color:#000;border-radius:8px;font-weight:700;font-size:14px;cursor:pointer;border:none;margin-bottom:20px}</style></head>
|
|
11
|
+
<body><h2>Open ${e.length} Profiles</h2>
|
|
12
|
+
<p>Click each link or use the button below to open all at once.</p>
|
|
13
|
+
<button class="open-all" onclick="document.querySelectorAll('.btn').forEach((a,i)=>setTimeout(()=>a.click(),i*300))">
|
|
14
|
+
Open All (${e.length})</button>
|
|
15
|
+
${e.map(e=>{let t="S"===e.tier?"#FFD700":"A"===e.tier?"#9B59B6":"#3498DB";return'<a class="btn" href="'+e.profile_url+'" target="_blank"><span class="name">'+(e.name||"")+'</span><span class="tier" style="color:'+t+'">'+e.tier+" · "+parseFloat(e.power_score||0).toFixed(1)+'</span><br><span style="color:#666;font-size:11px">'+(e.headline||"").substring(0,60)+"</span></a>"}).join("")}
|
|
16
|
+
</body></html>`],{type:"text/html"});window.open(URL.createObjectURL(t),"_blank")},style:{padding:"6px 16px",borderRadius:6,border:"none",cursor:"pointer",background:"#0077B5",color:"#fff",fontWeight:700,fontSize:12},children:["Open ",b.size," on LinkedIn"]}),(0,t.jsxs)("span",{style:{fontSize:10,color:"#888"},children:["+",N.filter(e=>b.has(e.id)).reduce((e,t)=>e+t.xp,0)," XP potential"]}),(0,t.jsx)("button",{onClick:()=>w(new Set),style:{marginLeft:"auto",background:"none",border:"none",color:"#888",cursor:"pointer",fontSize:11},children:"Clear"})]}),"quest"===T&&(0,t.jsx)("div",{style:{flex:1,overflow:"auto"},children:(0,t.jsx)(eh,{recs:h,sentIds:E,added:B,mappedIds:I,reach:W,onSend:e=>(0,ey.markRequested)(e,{bridgeId:e.source_connection_id}).catch(()=>{}),onUndo:e=>(0,ey.undoRequest)(e).catch(()=>{})})}),("recs"===T||"pending"===T)&&(0,t.jsx)("div",{style:{flex:1,overflow:"auto",padding:"12px 24px"},children:(0,t.jsxs)("div",{style:{maxWidth:700,margin:"0 auto"},children:["pending"===T&&(0,t.jsx)(t.Fragment,{children:0===M.length?(0,t.jsxs)("div",{style:{textAlign:"center",padding:40,color:"#555"},children:[(0,t.jsx)("div",{style:{fontSize:32,marginBottom:8},children:"⏳"}),(0,t.jsx)("div",{style:{fontSize:14,fontWeight:600},children:"No pending requests"}),(0,t.jsx)("div",{style:{fontSize:11,color:"#444",marginTop:4},children:'Click "Add" on someone to track your outreach'})]}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("div",{style:{fontSize:10,color:"#666",marginBottom:12},children:"Waiting for response. When they accept, their cluster unlocks for bridging."}),M.map(e=>(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:10,padding:"10px 12px",marginBottom:4,background:"rgba(255,107,53,0.04)",borderRadius:8,border:"1px solid rgba(255,107,53,0.1)"},children:[(0,el.localPhoto)(e.profile_image_url)?(0,t.jsx)("img",{src:(0,el.localPhoto)(e.profile_image_url),alt:"",style:{width:36,height:36,borderRadius:"50%",objectFit:"cover",flexShrink:0,border:`2px solid ${eb[e.tier]||"#555"}`},onError:e=>{e.target.style.display="none"}}):(0,t.jsx)("div",{style:{width:36,height:36,borderRadius:"50%",flexShrink:0,fontSize:14,fontWeight:700,background:eb[e.tier]||"#555",color:"S"===e.tier?"#000":"#fff",display:"flex",alignItems:"center",justifyContent:"center"},children:e.name?.charAt(0)}),(0,t.jsxs)("div",{style:{flex:1,minWidth:0},children:[(0,t.jsx)("div",{style:{fontSize:13,fontWeight:600},children:e.name}),(0,t.jsx)("div",{style:{fontSize:10,color:"#888",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e.headline?.substring(0,55)}),e.bridge&&(0,t.jsxs)("div",{style:{fontSize:9,color:"#FF6B35",marginTop:2},children:["via ",e.bridge.name?.split(" ")[0]," · unlocks bridge cluster"]})]}),(0,t.jsxs)("div",{style:{textAlign:"center",flexShrink:0},children:[(0,t.jsx)("div",{style:{fontSize:10,fontWeight:800,color:eb[e.tier],padding:"2px 8px",borderRadius:4,background:`${eb[e.tier]||"#555"}15`},children:e.tier}),(0,t.jsx)("div",{style:{fontSize:8,color:"#FF6B35",marginTop:2,fontWeight:600},children:"PENDING"})]}),(0,t.jsxs)("div",{style:{display:"flex",gap:4,flexShrink:0},children:[(0,t.jsx)("a",{href:e.profile_url,target:"_blank",rel:"noopener noreferrer",style:{padding:"4px 8px",borderRadius:4,fontSize:9,fontWeight:700,background:"#0077B5",color:"#fff",textDecoration:"none"},children:"View"}),(0,t.jsx)("button",{onClick:()=>{(0,ey.undoRequest)(e).catch(()=>{})},style:{padding:"4px 8px",borderRadius:4,fontSize:9,fontWeight:600,background:"rgba(255,255,255,0.06)",color:"#666",border:"none",cursor:"pointer"},children:"Undo"})]})]},e.id))]})}),"recs"===T&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:8,marginBottom:8},children:[(0,t.jsx)("input",{type:"checkbox",checked:b.size===N.length&&N.length>0,onChange:function(){b.size===N.length?w(new Set):w(new Set(N.map(e=>e.id)))},style:{cursor:"pointer"}}),(0,t.jsxs)("span",{style:{fontSize:10,color:"#666"},children:["Select all (",N.length,")"]})]}),Y.map(([e,n])=>(0,t.jsxs)("div",{style:{marginBottom:16},children:["bridge"===O?(()=>{let e=n[0]?.bridge;if(!e)return null;let o=n.filter(e=>"S"===e.tier).length,r=n.filter(e=>"A"===e.tier).length,i=n.filter(e=>"B"===e.tier).length,s=3*o+2*r+i;return(0,t.jsxs)("div",{style:{padding:"10px 12px",marginBottom:6,borderRadius:8,background:`${eb[e.tier]||"#555"}08`,border:`1px solid ${eb[e.tier]||"#555"}20`},children:[(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:10},children:[(0,el.localPhoto)(e.profile_image_url)?(0,t.jsx)("img",{src:(0,el.localPhoto)(e.profile_image_url),alt:"",style:{width:36,height:36,borderRadius:"50%",objectFit:"cover",border:`2px solid ${eb[e.tier]}`},onError:e=>{e.target.style.display="none"}}):(0,t.jsx)("div",{style:{width:36,height:36,borderRadius:"50%",fontSize:14,fontWeight:700,background:eb[e.tier],color:"S"===e.tier?"#000":"#fff",display:"flex",alignItems:"center",justifyContent:"center"},children:e.name?.charAt(0)}),(0,t.jsxs)("div",{style:{flex:1,minWidth:0},children:[(0,t.jsx)("div",{style:{fontSize:13,fontWeight:700,color:"#fff"},children:e.name}),(0,t.jsx)("div",{style:{fontSize:9,color:"#888",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e.headline?.substring(0,50)})]}),(0,t.jsxs)("div",{style:{textAlign:"right",flexShrink:0},children:[(0,t.jsx)("div",{style:{fontSize:11,fontWeight:800,color:eb[e.tier]},children:e.tier}),(0,t.jsxs)("div",{style:{fontSize:8,color:"#666"},children:[n.length," to add"]})]})]}),(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:8,marginTop:8},children:[(0,t.jsxs)("div",{style:{display:"flex",gap:4,fontSize:9},children:[o>0&&(0,t.jsxs)("span",{style:{color:"#FFD700",fontWeight:700},children:[o,"S"]}),r>0&&(0,t.jsxs)("span",{style:{color:"#9B59B6",fontWeight:700},children:[r,"A"]}),i>0&&(0,t.jsxs)("span",{style:{color:"#3498DB",fontWeight:700},children:[i,"B"]})]}),(0,t.jsx)("div",{style:{flex:1,height:4,background:"rgba(255,255,255,0.06)",borderRadius:2},children:(0,t.jsx)("div",{style:{height:"100%",borderRadius:2,width:`${Math.min(100,s/30*100)}%`,background:`linear-gradient(90deg, ${eb[e.tier]}, #FF6B35)`}})}),(0,t.jsxs)("button",{onClick:()=>{let e=n.map(e=>e.profile_url);if(1===e.length)return void window.open(e[0],"_blank");let t=`<!DOCTYPE html><html><head><title>Top ${Math.min(10,e.length)}</title>
|
|
17
|
+
<style>body{background:#0a0a1a;color:#fff;font-family:-apple-system,sans-serif;padding:24px}
|
|
18
|
+
.btn{display:block;padding:10px 14px;margin-bottom:4px;background:rgba(255,255,255,0.06);
|
|
19
|
+
border:1px solid rgba(255,255,255,0.1);border-radius:6px;color:#fff;text-decoration:none;font-size:12px}
|
|
20
|
+
.btn:hover{background:rgba(0,119,181,0.2)}
|
|
21
|
+
.oa{display:inline-block;padding:10px 20px;background:#0077B5;color:#fff;border-radius:6px;
|
|
22
|
+
font-weight:700;font-size:13px;cursor:pointer;border:none;margin-bottom:16px}</style></head>
|
|
23
|
+
<body><h3 style="color:#FF6B35">Top ${Math.min(10,e.length)} to connect</h3>
|
|
24
|
+
<button class="oa" onclick="document.querySelectorAll('.btn').forEach((a,i)=>setTimeout(()=>a.click(),i*300))">
|
|
25
|
+
Open All</button>${e.slice(0,10).map(e=>'<a class="btn" href="'+e+'" target="_blank">'+e.split("/in/")[1]?.replace("/","")+"</a>").join("")}</body></html>`;window.open(URL.createObjectURL(new Blob([t],{type:"text/html"})),"_blank")},style:{padding:"4px 10px",borderRadius:4,border:"none",cursor:"pointer",background:"#0077B5",color:"#fff",fontSize:9,fontWeight:700,whiteSpace:"nowrap"},children:["Open Top ",Math.min(10,n.length)]})]})]})})():(0,t.jsxs)("div",{style:{padding:"6px 10px",marginBottom:4,background:"tier"===O?`${eb[e]||"#555"}15`:"rgba(255,255,255,0.04)",borderLeft:`3px solid ${"tier"===O?eb[e]||"#555":"#FF6B35"}`,borderRadius:4,display:"flex",justifyContent:"space-between",alignItems:"center"},children:[(0,t.jsx)("span",{style:{fontSize:11,fontWeight:700,color:"tier"===O?eb[e]||"#888":"#FF6B35"},children:"tier"===O?`${e}-Tier`:e}),(0,t.jsx)("span",{style:{fontSize:10,color:"#666"},children:n.length})]}),"bridge"===O?["S","A","B"].map(e=>{let o=n.filter(t=>t.tier===e);return 0===o.length?null:(0,t.jsxs)("div",{style:{marginBottom:6},children:[(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:6,padding:"3px 8px",marginBottom:2,borderLeft:`2px solid ${eb[e]}`},children:[(0,t.jsx)("input",{type:"checkbox",checked:o.every(e=>b.has(e.id)),onChange:()=>{let e=o.every(e=>b.has(e.id));w(t=>{let n=new Set(t);return o.forEach(t=>{e?n.delete(t.id):n.add(t.id)}),n})},style:{cursor:"pointer",flexShrink:0}}),(0,t.jsx)("div",{style:{width:6,height:6,borderRadius:"50%",background:eb[e]}}),(0,t.jsxs)("span",{style:{fontSize:9,fontWeight:700,color:eb[e]},children:[e,"-Tier"]}),(0,t.jsx)("span",{style:{fontSize:8,color:"#555"},children:o.length}),(0,t.jsxs)("button",{onClick:()=>{if(1===o.length)return void window.open(o[0].profile_url,"_blank");let t=`<!DOCTYPE html><html><head><title>${e}-Tier — ${o.length}</title>
|
|
26
|
+
<style>body{background:#0a0a1a;color:#fff;font-family:-apple-system,sans-serif;padding:24px}
|
|
27
|
+
.btn{display:block;padding:10px 14px;margin-bottom:4px;background:rgba(255,255,255,0.06);
|
|
28
|
+
border:1px solid rgba(255,255,255,0.1);border-radius:6px;color:#fff;text-decoration:none;font-size:12px}
|
|
29
|
+
.btn:hover{background:rgba(0,119,181,0.2)}
|
|
30
|
+
.oa{display:inline-block;padding:10px 20px;background:#0077B5;color:#fff;border-radius:6px;
|
|
31
|
+
font-weight:700;font-size:13px;cursor:pointer;border:none;margin-bottom:16px}</style></head>
|
|
32
|
+
<body><h3 style="color:${eb[e]}">${e}-Tier (${o.length})</h3>
|
|
33
|
+
<button class="oa" onclick="document.querySelectorAll('.btn').forEach((a,i)=>setTimeout(()=>a.click(),i*300))">
|
|
34
|
+
Open All</button>${o.map(e=>'<a class="btn" href="'+e.profile_url+'" target="_blank">'+e.name+" · "+parseFloat(e.power_score||0).toFixed(1)+"</a>").join("")}</body></html>`;window.open(URL.createObjectURL(new Blob([t],{type:"text/html"})),"_blank")},style:{marginLeft:"auto",padding:"2px 8px",borderRadius:3,border:"none",cursor:"pointer",background:"#0077B5",color:"#fff",fontSize:8,fontWeight:700},children:["Open All ",e]})]}),o.map(e=>(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:8,padding:"5px 8px 5px 16px",borderBottom:"1px solid rgba(255,255,255,0.02)",background:b.has(e.id)?"rgba(255,215,0,0.05)":"transparent",cursor:"pointer"},onMouseEnter:t=>{b.has(e.id)||(t.currentTarget.style.background="rgba(255,255,255,0.04)")},onMouseLeave:t=>{b.has(e.id)||(t.currentTarget.style.background="transparent")},children:[(0,t.jsx)("input",{type:"checkbox",checked:b.has(e.id),onChange:()=>H(e.id),onClick:e=>e.stopPropagation(),style:{cursor:"pointer",flexShrink:0}}),(0,el.localPhoto)(e.profile_image_url)?(0,t.jsx)("img",{src:(0,el.localPhoto)(e.profile_image_url),alt:"",style:{width:28,height:28,borderRadius:"50%",objectFit:"cover",flexShrink:0,border:`1.5px solid ${eb[e.tier]||"#555"}`},onError:e=>{e.target.style.display="none"}}):(0,t.jsx)("div",{style:{width:28,height:28,borderRadius:"50%",flexShrink:0,fontSize:10,fontWeight:700,background:eb[e.tier]||"#555",color:"S"===e.tier?"#000":"#fff",display:"flex",alignItems:"center",justifyContent:"center"},children:e.name?.charAt(0)}),(0,t.jsxs)("div",{style:{flex:1,minWidth:0},onClick:()=>H(e.id),children:[(0,t.jsx)("div",{style:{fontSize:11,fontWeight:600,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e.name}),(0,t.jsx)("div",{style:{fontSize:8,color:"#666",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e.headline?.substring(0,45)})]}),(0,t.jsx)("span",{style:{fontSize:9,fontWeight:700,color:eb[e.tier],flexShrink:0},children:parseFloat(e.power_score||0).toFixed(1)}),E.has(e.id)?(0,t.jsx)("span",{style:{padding:"3px 6px",borderRadius:3,fontSize:8,fontWeight:700,background:"rgba(255,107,53,0.15)",color:"#FF6B35",flexShrink:0},children:"Sent"}):(0,t.jsx)("a",{href:e.profile_url,target:"_blank",rel:"noopener noreferrer",onClick:t=>{t.stopPropagation(),(0,ey.markRequested)(e,{bridgeId:e.source_connection_id}).catch(()=>{})},style:{padding:"3px 6px",borderRadius:3,fontSize:8,fontWeight:700,background:"#0077B5",color:"#fff",textDecoration:"none",flexShrink:0},children:"Add"})]},e.id))]},e)}):n.map(e=>(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:8,padding:"6px 8px",borderBottom:"1px solid rgba(255,255,255,0.03)",background:b.has(e.id)?"rgba(255,215,0,0.05)":"transparent",cursor:"pointer"},onMouseEnter:t=>{b.has(e.id)||(t.currentTarget.style.background="rgba(255,255,255,0.04)")},onMouseLeave:t=>{b.has(e.id)||(t.currentTarget.style.background="transparent")},children:[(0,t.jsx)("input",{type:"checkbox",checked:b.has(e.id),onChange:()=>H(e.id),onClick:e=>e.stopPropagation(),style:{cursor:"pointer",flexShrink:0}}),(0,el.localPhoto)(e.profile_image_url)?(0,t.jsx)("img",{src:(0,el.localPhoto)(e.profile_image_url),alt:"",style:{width:32,height:32,borderRadius:"50%",objectFit:"cover",flexShrink:0,border:`1.5px solid ${eb[e.tier]||"#555"}`},onError:e=>{e.target.style.display="none",e.target.nextSibling.style.display="flex"}}):null,(0,t.jsx)("div",{style:{width:32,height:32,borderRadius:"50%",flexShrink:0,fontSize:12,fontWeight:700,background:eb[e.tier]||"#555",color:"S"===e.tier?"#000":"#fff",display:(0,el.localPhoto)(e.profile_image_url)?"none":"flex",alignItems:"center",justifyContent:"center"},children:e.name?.charAt(0)}),(0,t.jsxs)("div",{style:{flex:1,minWidth:0},onClick:()=>H(e.id),children:[(0,t.jsx)("div",{style:{fontSize:12,fontWeight:600,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e.name}),(0,t.jsx)("div",{style:{fontSize:9,color:"#666",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e.headline?.substring(0,50)})]}),e.bridge&&(0,t.jsxs)("span",{style:{fontSize:8,color:"#555",flexShrink:0,maxWidth:60,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:["via ",e.bridge.name?.split(" ")[0]]}),(0,t.jsx)("div",{style:{textAlign:"right",flexShrink:0,minWidth:32},children:(0,t.jsx)("div",{style:{fontSize:10,fontWeight:700,color:eb[e.tier]},children:parseFloat(e.power_score).toFixed(1)})}),E.has(e.id)?(0,t.jsx)("span",{style:{padding:"4px 8px",borderRadius:4,fontSize:9,fontWeight:700,background:"rgba(255,107,53,0.15)",color:"#FF6B35",flexShrink:0},children:"⏳ Sent"}):(0,t.jsx)("a",{href:e.profile_url,target:"_blank",rel:"noopener noreferrer",onClick:t=>{t.stopPropagation(),(0,ey.markRequested)(e,{bridgeId:e.source_connection_id}).catch(()=>{})},style:{padding:"4px 8px",borderRadius:4,fontSize:9,fontWeight:700,background:"#0077B5",color:"#fff",textDecoration:"none",flexShrink:0},children:"Add"})]},e.id))]},e))]})]})})]})}e.s(["default",0,function(){return(0,t.jsx)(n.Suspense,{fallback:null,children:(0,t.jsx)(eu.default,{children:(0,t.jsx)(ev,{})})})}],77305)}]);
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,68863,e=>{"use strict";var n=e.i(43476),t=e.i(71645),i=e.i(18566),o=e.i(2776),s=e.i(22016),a=e.i(40996);let r={install:"Install",setup:"Set up the scanner"};var l=e.i(64745),d=e.i(48235),c=e.i(51798);let h=`
|
|
2
|
+
@keyframes radarSweep { to { transform: rotate(360deg); } }
|
|
3
|
+
@keyframes radarPing { 0% { opacity: .9; r: 3; } 100% { opacity: 0; r: 11; } }
|
|
4
|
+
.radar-sweep { transform-origin: 118px 118px; animation: radarSweep 2.6s linear infinite; }
|
|
5
|
+
.radar-ping { animation: radarPing 2.6s ease-out infinite; }
|
|
6
|
+
.radar-go { transition: transform .15s ease, box-shadow .2s ease; }
|
|
7
|
+
.radar-go:not(:disabled):hover { transform: scale(1.04); box-shadow: 0 0 34px rgba(0,255,136,.45); }
|
|
8
|
+
.radar-go:not(:disabled):active { transform: scale(.97); }
|
|
9
|
+
@media (prefers-reduced-motion: reduce) { .radar-sweep, .radar-ping { animation: none; } }
|
|
10
|
+
`,p=[[.62,.7],[.38,2.1],[.8,3.3],[.5,4.4],[.72,5.6]];function g(e,n,t){let i=n=>`${(118+e*Math.cos(n)).toFixed(2)} ${(118+e*Math.sin(n)).toFixed(2)}`,o=+(t-n>Math.PI);return`M${i(n)} A${e} ${e} 0 ${o} 1 ${i(t)}`}function u({li:e,running:t,scanning:i,disabled:o,label:s,sublabel:a,onScan:r,onPace:l}){let d=e?.limits?.pace||"fast",f=e?.limits?.daily||0,x=e?.unreadable?f:e?.searchesToday||0,y=f?Math.max(0,f-x):null,b=f?Math.min(1,x/f):0,m=b>=.9?"#ff6b6b":b>=.6?"#FFD700":"#00ff88",j=-Math.PI/2,w=108;return(0,n.jsxs)("div",{style:{display:"flex",gap:22,alignItems:"center",flexWrap:"wrap",padding:"14px 16px",borderRadius:14,border:"1px solid rgba(0,255,136,0.18)",background:"radial-gradient(circle at 20% 50%, rgba(0,255,136,0.06), rgba(255,255,255,0.02) 60%)"},children:[(0,n.jsx)("style",{children:h}),(0,n.jsxs)("div",{style:{position:"relative",width:236,height:236,flexShrink:0},children:[(0,n.jsxs)("svg",{width:236,height:236,"aria-hidden":"true",style:{position:"absolute",inset:0},children:[(0,n.jsxs)("defs",{children:[(0,n.jsxs)("radialGradient",{id:"radarBg",children:[(0,n.jsx)("stop",{offset:"0",stopColor:"#0f2a22"}),(0,n.jsx)("stop",{offset:"1",stopColor:"#0a0a1a"})]}),(0,n.jsxs)("linearGradient",{id:"radarBeam",x1:"0",y1:"0",x2:"1",y2:"0",children:[(0,n.jsx)("stop",{offset:"0",stopColor:"#00ff88",stopOpacity:"0"}),(0,n.jsx)("stop",{offset:"1",stopColor:"#00ff88",stopOpacity:"0.45"})]})]}),(0,n.jsx)("circle",{cx:118,cy:118,r:w,fill:"url(#radarBg)",stroke:"rgba(0,255,136,0.25)"}),[.33,.66].map(e=>(0,n.jsx)("circle",{cx:118,cy:118,r:w*e,fill:"none",stroke:"rgba(0,255,136,0.14)",strokeDasharray:"2 5"},e)),(0,n.jsx)("line",{x1:118-w,y1:118,x2:118+w,y2:118,stroke:"rgba(0,255,136,0.1)"}),(0,n.jsx)("line",{x1:118,y1:118-w,x2:118,y2:118+w,stroke:"rgba(0,255,136,0.1)"}),(0,n.jsxs)("g",{className:t?"radar-sweep":void 0,opacity:t?1:.35,children:[(0,n.jsx)("path",{d:`M118 118 L${118+w} 118 A${w} ${w} 0 0 0 ${118+.8525245220595057*w} ${118+-.5226872289306592*w} Z`,fill:"url(#radarBeam)"}),(0,n.jsx)("line",{x1:118,y1:118,x2:118+w,y2:118,stroke:"#00ff88",strokeOpacity:.8,strokeWidth:1.5})]}),p.map(([e,i],o)=>(0,n.jsxs)("g",{children:[(0,n.jsx)("circle",{cx:118+w*e*Math.cos(i),cy:118+w*e*Math.sin(i),r:2.4,fill:"#00ff88",opacity:t?.9:.35}),t&&(0,n.jsx)("circle",{className:"radar-ping",style:{animationDelay:`${i/(2*Math.PI)*2.6}s`},cx:118+w*e*Math.cos(i),cy:118+w*e*Math.sin(i),r:3,fill:"none",stroke:"#00ff88"})]},o)),(0,n.jsx)("path",{d:g(w+5,j,j+2*Math.PI-.001),fill:"none",stroke:"rgba(255,255,255,0.08)",strokeWidth:5}),b>0&&(0,n.jsx)("path",{d:g(w+5,j,j+2*Math.PI*b-.001),fill:"none",stroke:m,strokeWidth:5,strokeLinecap:"round"})]}),(0,n.jsxs)("button",{type:"button",className:"radar-go",onClick:r,disabled:o,style:{position:"absolute",left:56,top:56,width:124,height:124,borderRadius:"50%",cursor:o?"not-allowed":"pointer",border:`2px solid ${o?"rgba(255,255,255,0.12)":"#00ff88"}`,background:o?"rgba(20,24,40,0.92)":"radial-gradient(circle at 50% 35%, #134d3a, #0b2a22 70%)",color:o?"#667":"#eafff5",boxShadow:o?"none":"0 0 22px rgba(0,255,136,0.25)",display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",gap:2,padding:8},children:[(0,n.jsx)("span",{style:{fontSize:22,fontWeight:900,letterSpacing:2},children:i?"•••":"SCAN"}),(0,n.jsx)("span",{style:{fontSize:11,fontWeight:700,opacity:.85,lineHeight:1.25,textAlign:"center"},children:s}),a&&(0,n.jsx)("span",{style:{fontSize:10,opacity:.6,textAlign:"center"},children:a})]})]}),(0,n.jsxs)("div",{style:{flex:1,minWidth:260},children:[(0,n.jsx)("div",{style:{fontSize:10,fontWeight:800,letterSpacing:1,color:"#6b7090",textTransform:"uppercase",marginBottom:8},children:"Speed"}),(0,n.jsx)("div",{role:"radiogroup","aria-label":"Scan speed",style:{display:"grid",gridTemplateColumns:"repeat(3, 1fr)",gap:6},children:c.PACE_NAMES.map(e=>{let i=c.PACES[e],o=d===e,s="slow"===e?"#00E5FF":"medium"===e?"#FFD700":"#FF7043";return(0,n.jsxs)("button",{type:"button",role:"radio","aria-checked":o,disabled:t||!l,onClick:()=>l?.(e),title:`${i.pagePause} s before each page, ${i.chunkCooldown/60} min more after every 10, profiles ${i.profileGap} s apart`,style:{padding:"10px 8px",borderRadius:10,cursor:t?"not-allowed":"pointer",textAlign:"left",border:`1.5px solid ${o?s:"rgba(255,255,255,0.1)"}`,background:o?`${s}1a`:"rgba(255,255,255,0.03)",color:"#ddd"},children:[(0,n.jsx)("div",{style:{fontSize:14,fontWeight:800,color:o?s:"#ccd"},children:i.label}),(0,n.jsxs)("div",{style:{fontSize:11,color:"#8a8fa8",marginTop:2},children:["~",(0,c.searchesPerHour)(e)," searches an hour"]}),(0,n.jsxs)("div",{style:{fontSize:10.5,color:"#6b7090",marginTop:1},children:[i.pagePause," s between pages"]})]},e)})}),(0,n.jsx)("div",{style:{marginTop:10,fontSize:12.5,color:"#b8c4c4",lineHeight:1.6},children:e?null==y?(0,n.jsx)(n.Fragment,{children:"No daily cap is set."}):(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("b",{style:{color:m},children:y})," of ",f," searches left today",y>0&&(0,n.jsxs)(n.Fragment,{children:[" · at ",(0,c.paceOf)(d).label,", ",(0,c.durationText)((0,c.paceSeconds)(d,y))," to use them"]}),"."]}):(0,n.jsx)(n.Fragment,{children:"Today’s searches show here once the scanner can read them."})}),(0,n.jsx)("div",{style:{marginTop:4,fontSize:11.5,color:"#778",lineHeight:1.55},children:"Fast is how the scanner has always run; Medium and Slow only add waiting, so fewer searches an hour reach LinkedIn. Your daily budget stays the cap at every speed: slower spreads it out, it doesn’t shrink it. Slower lowers the odds of a check from LinkedIn; it can’t promise there won’t be one."})]})]})}var f=e.i(26005);let x={daily:50,monthly:250},y="1px solid rgba(255,255,255,0.1)",b={S:"#FFD700",A:"#9B59B6",B:"#3498DB",C:"#95A5A6",D:"#BDC3C7"},m=[25,50,100,200,500],j=[100,250,500,1e3,0],w=[10,25,50,100],k=e=>new Date(e).toLocaleDateString(void 0,{month:"short",day:"numeric"});function v({cooldown:e,onLift:i,disabled:o}){let[s,a]=(0,t.useState)(!1);return e?(0,n.jsxs)("div",{role:"status",style:{padding:"12px 14px",borderRadius:8,fontSize:13,lineHeight:1.6,background:"rgba(255,80,80,0.08)",border:"1px solid rgba(255,80,80,0.35)",color:"#f3c9c9"},children:[(0,n.jsxs)("b",{style:{color:"#ff8080"},children:["Scanning is paused until ",new Date(e.until).toLocaleString(void 0,{weekday:"short",month:"short",day:"numeric",hour:"numeric",minute:"2-digit"}),"."]})," ",e.reason,". Nothing that searches LinkedIn will run until then, so the account can recover.",(0,n.jsx)("div",{style:{marginTop:8,display:"flex",gap:8,alignItems:"center",flexWrap:"wrap"},children:s?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("span",{style:{fontSize:12.5},children:"Only if people search works normally for you on linkedin.com right now."}),(0,n.jsx)("button",{onClick:()=>{a(!1),i()},style:{...W,color:"#ff8080"},children:"Yes, lift it"}),(0,n.jsx)("button",{onClick:()=>a(!1),style:W,children:"Keep it"})]}):(0,n.jsx)("button",{onClick:()=>a(!0),disabled:o,style:W,children:"Lift it early…"})})]}):null}function S({used:e,cap:t}){let i=t?Math.min(100,Math.round(e/t*100)):0;return(0,n.jsx)("div",{style:{height:5,borderRadius:3,background:"rgba(255,255,255,0.07)",overflow:"hidden",marginTop:4},children:(0,n.jsx)("div",{style:{height:"100%",width:`${i}%`,background:i>=100?"#ff6b6b":i>=75?"#FFD700":"#3498DB"}})})}function I({li:e,onSetLimits:t,disabled:i}){if(!e)return null;let{limits:o}=e,s=e.unreadable?"?":e.searchesToday,a=e.unreadable?"?":e.profilesToday,r=e=>t({...o,...e}),l=e=>{let n=function(e={},n={}){return Number(n.daily)>100&&Number(n.daily)>Number(e.daily)?`${n.daily} searches a day is more than LinkedIn has put up with. A real account was restricted after 373 searches in 24 hours, run back to back. The default is ${x.daily} a day.
|
|
11
|
+
|
|
12
|
+
Set ${n.daily} a day anyway?`:0===n.monthly&&0!==e.monthly?`With no monthly cap, only the daily budget stops a scan. A real account was restricted after 373 searches in 24 hours with no monthly cap set.
|
|
13
|
+
|
|
14
|
+
Turn the monthly cap off anyway?`:null}(o,{...o,...e});(!n||window.confirm(n))&&r(e)},d=function({daily:e,monthly:n}={}){if(!(({daily:e,monthly:n}={})=>Number(e)>100||0===n)({daily:e,monthly:n}))return null;let t=["A real account was restricted after 373 searches in 24 hours."];return Number(e)>100&&t.push(`${e} a day can use up a free account's month in a day or two.`),0===n&&t.push("With no monthly cap, nothing but the daily budget stops a long run."),t.join(" ")}(o);return(0,n.jsxs)("div",{style:{padding:"12px 14px",borderRadius:8,border:y,background:"rgba(255,255,255,0.03)",fontSize:12.5,color:"#b8c4c4"},children:[(0,n.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(210px, 1fr))",gap:14},children:[(0,n.jsxs)("div",{children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("b",{style:{color:"#fff"},children:s})," of ",o.daily||"no limit"," searches in the last 24 hours"]}),(0,n.jsx)(S,{used:e.searchesToday||0,cap:o.daily})]}),(0,n.jsxs)("div",{children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("b",{style:{color:"#fff"},children:e.searchesMonth})," of ",o.monthly||"no limit"," this month · resets ",k(e.monthResets)]}),(0,n.jsx)(S,{used:e.searchesMonth,cap:o.monthly})]}),(0,n.jsxs)("div",{children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("b",{style:{color:"#fff"},children:a})," of ",o.profiles," profile views today"]}),(0,n.jsx)(S,{used:e.unreadable?o.profiles:e.profilesToday,cap:o.profiles})]})]}),(0,n.jsxs)("div",{style:{display:"flex",gap:8,alignItems:"center",flexWrap:"wrap",marginTop:10},children:[(0,n.jsx)("span",{children:"Budget:"}),(0,n.jsx)("select",{value:o.daily,disabled:i,onChange:e=>l({daily:Number(e.target.value)}),style:z,children:m.map(e=>(0,n.jsxs)("option",{value:e,children:[e," a day"]},e))}),(0,n.jsx)("select",{value:o.monthly,disabled:i,onChange:e=>l({monthly:Number(e.target.value)}),style:z,children:j.map(e=>(0,n.jsx)("option",{value:e,children:e?`${e} a month`:"no monthly cap (Premium)"},e))}),(0,n.jsx)("select",{value:o.profiles,disabled:i,onChange:e=>r({profiles:Number(e.target.value)}),style:z,children:w.map(e=>(0,n.jsxs)("option",{value:e,children:[e," profile views a day"]},e))})]}),(0,n.jsx)("div",{style:{marginTop:8,color:"#778",lineHeight:1.6},children:"Every page of someone’s connections is one search. LinkedIn limits a free account’s people searches by the month (it doesn’t say how many; reports put it around 250–350), resetting on the 1st. When a budget is used, a scan saves what it read and stops; the next one carries on from the same page."}),d&&(0,n.jsxs)("div",{style:{marginTop:8,display:"flex",gap:10,alignItems:"center",flexWrap:"wrap",color:"#FFD700",lineHeight:1.6},children:[(0,n.jsx)("b",{style:{flex:1,minWidth:200},children:d}),(0,n.jsxs)("button",{onClick:()=>r(x),disabled:i,style:{...z,cursor:i?"not-allowed":"pointer",color:"#FFD700",borderColor:"rgba(255,215,0,0.4)"},children:["Back to ",x.daily," a day, ",x.monthly," a month"]})]}),(0,n.jsx)("div",{style:{marginTop:6,color:"#778",lineHeight:1.6},children:"Each circle scan opens the person’s profile once, which is one profile view. Profile views are what LinkedIn restricted an account for, after about 20 in an hour. The scanner opens at most one a minute, and once today’s are used, a scan stops before the next profile and tries that person next time."})]})}function C({paused:e=[],onResume:i,onResumeAll:o,disabled:s}){let[a,r]=(0,t.useState)(!1);if(!e.length)return null;let l=e.filter(e=>e.legacy).length,d=a?e:e.slice(0,8);return(0,n.jsxs)("div",{style:{borderRadius:8,border:y,background:"rgba(255,255,255,0.03)"},children:[(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:10,padding:"10px 14px",borderBottom:y,flexWrap:"wrap"},children:[(0,n.jsxs)("div",{style:{flex:1,minWidth:200},children:[(0,n.jsxs)("b",{style:{fontSize:13.5},children:["Paused — ",e.length," ",1===e.length?"list":"lists"," with more to read"]}),(0,n.jsxs)("div",{style:{fontSize:12,color:"#8b9a9a",marginTop:2},children:["Each carries on from the page it stopped at",l?`; ${l} were read to page 10 before whole lists were read`:"","."]})]}),(0,n.jsx)("button",{onClick:o,disabled:s,style:{...T,opacity:s?.4:1,cursor:s?"not-allowed":"pointer",background:s?"rgba(255,255,255,0.06)":"linear-gradient(135deg, #3498DB, #9B59B6)"},children:"Resume all"})]}),(0,n.jsx)("div",{children:d.map(e=>(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:10,padding:"8px 14px",borderBottom:"1px solid rgba(255,255,255,0.04)"},children:[(0,n.jsx)("span",{style:{width:8,height:8,borderRadius:"50%",background:b[e.tier]||"#667",flexShrink:0}}),(0,n.jsxs)("div",{style:{flex:1,minWidth:0},children:[(0,n.jsx)("div",{style:{fontSize:13,fontWeight:600,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e.name}),(0,n.jsxs)("div",{style:{fontSize:11.5,color:"#8b9a9a"},children:["Read to page ",e.pagesRead," · carries on at ",e.nextPage,e.at?` \xb7 ${k(e.at)}`:"",e.unclear>=2?" · came back unclear twice, so it waits at the back of Resume all":""]})]}),(0,n.jsx)("button",{onClick:()=>i(e),disabled:s,style:{...T,padding:"6px 12px",fontSize:12,opacity:s?.4:1,cursor:s?"not-allowed":"pointer"},children:"Resume"})]},e.id))}),e.length>8&&(0,n.jsx)("button",{onClick:()=>r(!a),style:{...W,padding:"10px 14px"},children:a?"Show fewer":`Show all ${e.length}`})]})}let T={padding:"8px 14px",borderRadius:7,fontSize:13,fontWeight:700,cursor:"pointer",border:y,background:"rgba(255,255,255,0.08)",color:"#fff"},W={background:"none",border:"none",color:"#8fb8d6",cursor:"pointer",fontSize:12.5,fontWeight:600,padding:0},z={padding:"6px 8px",borderRadius:6,fontSize:12.5,fontWeight:600,background:"rgba(255,255,255,0.08)",color:"#fff",border:y};var B=e.i(8819),F=e.i(98197);e.i(77170);var R=e.i(69083),P=e.i(56899);let D={color:"#3498DB"};function $({onDone:e}){let[i,o]=(0,t.useState)([]),[s,a]=(0,t.useState)(null),[r,l]=(0,t.useState)(null);async function d(){a("pick"),l(null);let n=await (0,P.saveSettings)({sectorFocus:{sectors:i,strength:"lean"},fieldAsked:!0});n.settings?e(n.settings.sectorFocus.sectors):(l(n.error),a(null))}async function c(){a("skip"),l(null),await (0,P.saveSettings)({fieldAsked:!0}),e([])}return(0,n.jsxs)("section",{"aria-labelledby":"field-question","data-field-question":!0,style:{margin:"8px 0 0",padding:"20px 22px 0",borderRadius:12,border:B.LINE,background:"rgba(255,255,255,0.03)"},children:[(0,n.jsx)("div",{style:{fontSize:12,color:"#788",textTransform:"uppercase",letterSpacing:.6},children:"Before you scan · optional"}),(0,n.jsx)("h2",{id:"field-question",style:{fontSize:18,fontWeight:700,margin:"6px 0 4px"},children:"What field are you in?"}),(0,n.jsx)(B.Body,{style:{marginTop:0,marginBottom:14},children:"Pick up to three. Companies in your field count for more when your network is scored, so the people there rank higher. You can change it anytime in Settings."}),(0,n.jsx)(F.default,{sectors:i,onChange:o,disabled:!!s}),(0,n.jsxs)("div",{style:{position:"sticky",bottom:0,margin:"16px -22px 0",padding:"12px 22px 16px",borderTop:B.LINE,borderRadius:"0 0 11px 11px",background:"#111121"},children:[(0,n.jsxs)("div",{style:{display:"flex",gap:8,flexWrap:"wrap"},children:[(0,n.jsx)(B.Btn,{primary:!0,onClick:d,disabled:!i.length||!!s,children:"pick"===s?"Saving…":"Continue"}),(0,n.jsx)(B.Btn,{onClick:c,disabled:!!s,children:"Skip for now"})]}),r&&(0,n.jsx)(B.Status,{tone:"bad",children:r})]})]})}function L({sectors:e}){return e.length?(0,n.jsxs)(B.Status,{tone:"ok",children:["Your field: ",e.map(e=>(0,R.sectorByKey)(e).label).join(" · "),". Your first scan is scored with it. Change it anytime in ",(0,n.jsx)(s.default,{href:"/settings#sector",style:D,children:"Settings"}),"."]}):(0,n.jsxs)(B.Status,{children:["No field for now. You can pick one anytime in ",(0,n.jsx)(s.default,{href:"/settings#sector",style:D,children:"Settings"}),"."]})}let M="1px solid rgba(255,255,255,0.1)",A={photos:"Saving profile photos to this computer",install:"Installing the scanner",setup:"Setting up the scanner",login:"Waiting for you to sign in",full:"Scanning your whole network",refresh:"Checking for new connections","auto-bridge":"Mapping 2nd-degree connections","auto-bridge-retry":"Mapping 2nd degree, hidden ones included",resume:"Carrying on with one paused list","resume-all":"Carrying on with every paused list"};function N(){let e;(0,t.useEffect)(()=>{"updates"===new URLSearchParams(window.location.search).get("check")&&window.location.replace("/settings?check=updates")},[]);let[o,h]=(0,t.useState)(null),[p,g]=(0,t.useState)(!1),[x,y]=(0,t.useState)(10),[b,m]=(0,t.useState)(["S","A"]),[j,w]=H("six-degrees-bridge-order","newest"),[k,S]=H("six-degrees-bridge-pages-v2",100),[T,W]=H("six-degrees-bridge-finish",!0),[z,B]=H("six-degrees-experimental-auto",!1),[F,R]=H(a.HIDE_CHROME_KEY,!1),[P,D]=(0,t.useState)(null),[N,O]=(0,t.useState)(null),_=(0,t.useRef)(null),[ee,en]=(0,t.useState)(void 0),[et,ei]=(0,t.useState)(null),eo=(0,i.useSearchParams)().get("scan"),[es,ea]=(0,t.useState)(null);(0,t.useEffect)(()=>{if(!eo)return;let e=!0;return(0,a.pickedPerson)(eo).then(n=>{e&&ea(n?.person?n:null)},()=>{}),()=>{e=!1}},[eo]);let er=(0,t.useCallback)(async()=>{try{let e=await fetch("/api/scraper");h(await e.json())}catch{h(e=>e||{ready:!1,checks:{},log:[]})}},[]);async function el(){D(null),await (0,a.stopScrape)().catch(e=>D(e.message)),er()}async function ed(e,n={}){D(null),g(!0);try{let t=await fetch("/api/scraper",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify((0,a.scanRequest)(e,n,F))}),i=await t.json();t.ok||D(i.error||"Could not start.")}catch(e){D(e.message)}finally{g(!1),er()}}(0,t.useEffect)(()=>{er();let e=setInterval(er,1500);return()=>clearInterval(e)},[er]),(0,t.useEffect)(()=>{if(l.IS_DEMO)return;let e=!1;return fetch("/api/settings").then(e=>e.ok?e.json():null).then(n=>{e||en(n?.settings||null)}).catch(()=>{e||en(null)}),()=>{e=!0}},[]),(0,t.useEffect)(()=>{_.current&&(_.current.scrollTop=_.current.scrollHeight)},[o?.log?.length]);let ec=o?.checks||{},eh=o?.running,ep={...e=function(e){let n=e?.checks||{},t=(n,t,i)=>e?.running&&e.action===n?i:t;if(n.dependencies)return"bundled"===n.pythonSource?{done:!0,text:"Ready. The scanner and its Python come with the app, so there is nothing to install.",button:null}:"custom"===n.pythonSource?{done:!0,text:`Ready, on the Python named in SIX_DEGREES_PYTHON (${n.pythonPath}).`,button:null}:{done:!0,text:"Installed.",button:null};let i=n.ownPython&&"bundled"!==n.ownPython.source?`The Python named in SIX_DEGREES_PYTHON didn't work (${n.ownPython.problem}), so the scanner needs setting up another way. `:"";if(n.installFrom)return{done:!1,text:i+("downloaded"===n.installFrom.source?"Its own Python is already here. One more step, about a minute: it installs the browser-automation packages into it.":"One-time, about a minute. Downloads the browser-automation packages."),button:{action:"install",label:t("install","Install","Installing…")}};if(n.download){let e=Math.round(n.download.size/1048576);return{done:!1,text:`${i}${function(e){if(!e?.version)return"This computer has no Python the scanner can use.";let[n,t]=String(e.version).split(".").map(Number);return 3===n&&t>=10&&t<=14&&!1===e.venv?`This computer's Python ${e.version} can't make the scanner's own environment (on Ubuntu or Debian, python3-venv isn't installed).`:`This computer has Python ${e.version}, and the scanner needs 3.10 to 3.14.`}(n.systemPython)} Set up the scanner downloads its own Python ${n.download.version} (${e} MB, from GitHub) and the scanner's packages (from PyPI) into your data folder. Nothing else on this computer changes. About two minutes.`,button:{action:"setup",label:t("setup","Set up the scanner","Setting up…")}}}return{done:!1,text:`${i}No Python 3.10 to 3.14 was found on this machine. Install one from python.org, then reload.`,button:null}}(o),note:function(e,{done:n,button:t}){if(e?.source!=="bundled")return null;let i=/SIGKILL|code signature|not valid for use in process|quarantine|not permitted/i.test(e.problem||""),o=[`The Python that comes with the app didn't work (${e.problem}).`];return i&&o.push("macOS may have blocked it."),!1===e.retry&&o.push("Six Degrees won't try it again until you restart it."),n?o.push("The scanner uses another Python on this computer instead."):t?o.push(`To scan now, use ${r[t.action]} below: it gives the scanner a Python of its own in your data folder.`):o.push("To scan now, install Python 3.10 to 3.14 from python.org, then reload."),o.join(" ")}(o?.checks?.ownPython,e)};o&&ec.dependencies;let eg=o&&!ec.chrome,eu=o&&!ec.scriptsFound,ef=o?.ready&&!eh,ex=o?.linkedin,ey=!!ex?.cooldown,eb=ef&&!ey,em=o?.network||{first:0,second:0,third:0},ej=em.first,ew=o&&ep.done?ec.signedIn?0===ej?3:4:2:1,ek=N??ew,ev=!l.IS_DEMO&&!et&&function(e,n){if(!e)return null;let t=e.network;return!!t&&!t.first&&!t.second&&!t.third&&!e.running&&(void 0===n?null:!!(n&&!n.fieldAsked&&!n.sectorFocus?.sectors?.length))}(o,ee),eS=o&&!eh&&null!=o.exitCode&&0!==o.exitCode,eI=eS?o.failure?.length?o.failure.join("\n"):[...o.log||[]].reverse().find(e=>!/^Stopped \(exit/.test(e)&&!/Warning|warnings\.warn/.test(e)):null;return(0,n.jsxs)("div",{style:{minHeight:"100vh",background:"#0a0a1a",color:"#fff",fontFamily:'-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif'},children:[(0,n.jsx)("header",{style:{padding:"20px 30px",borderBottom:M},children:(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:12,flexWrap:"wrap"},children:[(0,n.jsx)(s.default,{href:"/",style:{textDecoration:"none"},children:(0,n.jsx)("span",{style:{fontSize:28,fontWeight:700,background:"linear-gradient(135deg, #FFD700, #9B59B6, #3498DB)",WebkitBackgroundClip:"text",WebkitTextFillColor:"transparent"},children:"Six Degrees"})}),(0,n.jsx)(f.default,{active:"scan"}),(0,n.jsx)(s.default,{href:"/settings",title:"Settings","aria-label":"Settings",style:{width:32,height:32,borderRadius:"50%",flexShrink:0,background:"rgba(255,255,255,0.06)",color:"#888",fontSize:16,textDecoration:"none",display:"flex",alignItems:"center",justifyContent:"center"},children:"⚙"})]})}),(0,n.jsxs)("div",{style:{maxWidth:720,margin:"0 auto",padding:"32px 24px 64px"},children:[(0,n.jsxs)("div",{style:{padding:"26px 26px 22px",borderRadius:16,marginBottom:22,position:"relative",overflow:"hidden",background:"radial-gradient(120% 140% at 0% 0%, rgba(0,255,136,0.10), rgba(52,152,219,0.06) 45%, rgba(255,255,255,0.02) 75%)",border:"1px solid rgba(0,255,136,0.22)"},children:[(0,n.jsx)("div",{style:{fontSize:11,fontWeight:800,letterSpacing:1.6,color:"#00ff88"},children:"YOUR SCANNER"}),(0,n.jsx)("h1",{style:{fontSize:27,fontWeight:800,margin:"6px 0 8px",lineHeight:1.2},children:ej>0?"Your network is mapped. Send the scanner further.":"Map your network in four steps."}),(0,n.jsx)("div",{style:{fontSize:14.5,color:"#aab7c4",lineHeight:1.6,maxWidth:560},children:"It works in your own Chrome on this Mac, slowly and in the open, and keeps everything here. You launch it; it does the reading; you watch it go."}),(0,n.jsx)("div",{style:{display:"flex",gap:"8px 18px",flexWrap:"wrap",marginTop:16},children:["Never posts or messages anyone","Never sees your password","Nothing leaves this Mac","Stops the moment you say"].map(e=>(0,n.jsxs)("span",{style:{fontSize:12.5,color:"#cfe8dc",display:"flex",alignItems:"center",gap:6},children:[(0,n.jsx)("span",{style:{color:"#00ff88",fontWeight:900},children:"✓"}),e]},e))})]}),null===ev&&(0,n.jsx)("p",{style:{color:"#778",fontSize:13},children:"Checking your setup…"}),ev&&(0,n.jsx)($,{onDone:function(e){ei({sectors:e}),window.scrollTo(0,0)}}),et&&(0,n.jsx)(L,{sectors:et.sectors}),!1===ev&&(0,n.jsxs)(n.Fragment,{children:[es?.person.id===eo&&(0,n.jsx)(E,{pick:es,pages:k,setPages:S,li:ex,running:eh,s:o,canSearch:eb,busy:p,onUnpick:function(){ea(null);try{window.history.replaceState(null,"",window.location.pathname)}catch{}},onStart:()=>ed("bridge",{id:es.person.id,maxPages:k})}),ej>0&&!eh&&(0,n.jsx)(J,{children:(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:14,flexWrap:"wrap"},children:[(0,n.jsxs)("div",{style:{flex:1,minWidth:200},children:[(0,n.jsxs)("b",{children:[ej.toLocaleString()," connections"]}),em.second>0&&(0,n.jsxs)(n.Fragment,{children:[", plus ",em.second.toLocaleString()," people in their circles"]}),em.third>0&&(0,n.jsxs)(n.Fragment,{children:[" and ",em.third.toLocaleString()," from company scans"]}),"."," ",(0,n.jsx)("span",{style:{color:"#9aa"},children:"Your galaxy is ready."})]}),(0,n.jsx)(s.default,{href:"/",style:{padding:"9px 18px",borderRadius:7,fontSize:13.5,fontWeight:700,color:"#0a0a1a",textDecoration:"none",background:"linear-gradient(135deg, #FFD700, #FF6B35)"},children:"See your network →"})]})}),o?.photosWaiting>0&&!eh&&(0,n.jsx)(J,{children:(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:14,flexWrap:"wrap"},children:[(0,n.jsxs)("div",{style:{flex:1,minWidth:200},children:[(0,n.jsxs)("b",{children:[o.photosWaiting.toLocaleString()," ",1===o.photosWaiting?"photo isn’t":"photos aren’t"," saved on this computer yet."]})," ",(0,n.jsx)("span",{style:{color:"#9aa"},children:"An older version kept them as links to LinkedIn. The app doesn’t load photos from LinkedIn while you browse, so those people show initials until the photos are saved here: now, or at the end of your next scan. An expired link can’t be saved; that person’s photo comes back when they’re next scanned."}),o&&!ec.dependencies&&(0,n.jsx)("div",{style:{color:"#8b9a9a",fontSize:12.5,marginTop:6},children:"Set up the scanner first (step 1 below): it saves them."})]}),(0,n.jsx)(X,{onClick:()=>ed("photos"),disabled:p||!ec.dependencies,children:"Save photos"})]})}),eS&&(0,n.jsxs)(J,{tone:"bad",children:[(0,n.jsx)("b",{children:"The last run stopped before it finished."}),eI&&(0,n.jsx)("div",{style:{marginTop:6,color:"#e8c4c4",whiteSpace:"pre-wrap",fontFamily:"ui-monospace, SFMono-Regular, Menlo, monospace",fontSize:12.5},children:eI}),(0,n.jsx)("div",{style:{color:"#9aa",marginTop:6},children:"The full log is below."})]}),eu&&(0,n.jsxs)(J,{tone:"bad",children:[(0,n.jsx)("b",{children:"Can’t find the scanner files."}),(0,n.jsx)("br",{}),(0,n.jsxs)("span",{style:{color:"#9aa"},children:["Expected ",(0,n.jsx)("code",{style:Y,children:"scripts/scrape.py"})," next to the app. If you downloaded a zip, run the app from inside the project folder."]})]}),eg&&(0,n.jsxs)(J,{tone:"bad",children:[(0,n.jsx)("b",{children:"Google Chrome isn’t installed."}),(0,n.jsx)("br",{}),(0,n.jsxs)("span",{style:{color:"#9aa"},children:["The scanner drives your real Chrome. Install it from"," ",(0,n.jsx)("a",{href:"https://www.google.com/chrome/",target:"_blank",rel:"noreferrer",style:{color:"#3498DB"},children:"google.com/chrome"}),", then reload this page."]})]}),o&&ep.note&&(0,n.jsx)(J,{tone:ep.done?void 0:"bad",children:ep.note}),(0,n.jsx)(U,{current:ew,view:ek,onView:O,steps:[{key:1,label:"Get ready",done:ep.done},{key:2,label:"Sign in",done:!!ec.signedIn},{key:3,label:"Who you know",done:ej>0},{key:4,label:"Who they know",done:em.second>0}]}),1===ek&&(0,n.jsx)(K,{step:1,title:"Get your scanner ready",time:"A minute or two, once",body:o?ep.text:"Checking…",launch:o&&ep.button&&(0,n.jsx)(q,{onClick:()=>ed(ep.button.action),disabled:p||eh,children:ep.button.label})}),2===ek&&(0,n.jsx)(K,{step:2,title:"Sign in to LinkedIn, once",time:"You do this part",body:ec.signedIn?"Signed in on this Mac. If LinkedIn ever asks for a security check, or a scan says you were signed out, open LinkedIn here and finish it by hand.":"A Chrome window opens. Sign in with your email and password there: the scanner never sees them. (“Continue with Google” can’t work in it, because Google blocks its sign-in in automated browsers.)",launch:ec.dependencies&&(0,n.jsx)(q,{onClick:()=>ed("login"),disabled:p||eh,quiet:!!ec.signedIn,children:eh&&"login"===o.action?"Waiting for you…":ec.signedIn?"Open LinkedIn again":"Open LinkedIn"})}),3===ek&&(0,n.jsx)(K,{step:3,title:"Map the people you know",time:"About a minute and a half for 750 people",body:"It reads your connections list and saves everyone here. After the first time, Check for new only looks at who you've added since.",launch:(0,n.jsx)(q,{onClick:()=>ed("full"),disabled:!eb,quiet:ej>0,children:eh&&"full"===o.action?"Scanning…":ej>0?"Scan it all again":"Scan my network"}),more:(0,n.jsx)(X,{onClick:()=>ed("refresh"),disabled:!eb,primary:ej>0,children:eh&&"refresh"===o.action?"Checking…":"Check for new"})}),4===ek&&(0,n.jsxs)(K,{step:4,title:"Map who they know",time:"A small batch a day, slowly",body:(0,n.jsxs)(n.Fragment,{children:["It opens your connections one at a time and reads who ",(0,n.jsx)("i",{children:"they"})," know: that fills Degrees, Separation and Outlink. Every round picks up where the last one stopped."]}),children:[(0,n.jsx)(v,{cooldown:ex?.cooldown,disabled:p,onLift:()=>ed("lift-cooldown")}),(0,n.jsxs)("div",{style:{display:"flex",gap:24,flexWrap:"wrap",alignItems:"center",marginTop:4},children:[(0,n.jsx)(u,{li:ex,running:!!eh,scanning:!!(eh&&o?.action?.startsWith("auto-bridge")),disabled:!eb||"score"===j&&!b.length,label:eh&&o?.action==="auto-bridge"?"Mapping…":"Map 2nd degree",sublabel:x?`${x} people`:"everyone",onScan:()=>ed("auto-bridge",{maxBridges:x,tiers:"score"===j?b:[],order:j,maxPages:k,deeper:T,experimental:z}),onPace:p?void 0:e=>ed("set-limits",{...ex?.limits||{},pace:e})}),(0,n.jsxs)("div",{style:{flex:"1 1 230px",display:"flex",flexDirection:"column",gap:12},children:[(0,n.jsxs)("label",{style:{display:"flex",gap:10,alignItems:"center",fontSize:13,color:"#cfd8d8"},children:["This round",(0,n.jsxs)("select",{value:x,onChange:e=>y(Number(e.target.value)),disabled:eh,style:G,children:[(0,n.jsx)("option",{value:5,children:"5 people"}),(0,n.jsx)("option",{value:10,children:"10 people"}),(0,n.jsx)("option",{value:25,children:"25 people"}),(0,n.jsx)("option",{value:0,children:"everyone — not advised"})]})]}),(0,n.jsxs)("label",{style:{display:"flex",gap:10,alignItems:"center",fontSize:13,color:"#cfd8d8"},children:["Start with",(0,n.jsxs)("select",{value:j,onChange:e=>w(e.target.value),disabled:eh,style:G,children:[(0,n.jsx)("option",{value:"newest",children:"Newest connections"}),(0,n.jsx)("option",{value:"score",children:"Highest tier"})]})]}),"score"===j&&(0,n.jsxs)("div",{style:{display:"flex",gap:8,alignItems:"center",flexWrap:"wrap"},children:[(0,n.jsx)("span",{style:{fontSize:12,color:"#8b9a9a"},children:"Work through"}),["S","A","B","C","D"].map(e=>{let t=b.includes(e);return(0,n.jsx)("button",{onClick:()=>m(n=>n.includes(e)?n.filter(n=>n!==e):[...n,e]),disabled:eh,style:{width:30,height:28,borderRadius:7,fontSize:12,fontWeight:700,cursor:eh?"not-allowed":"pointer",border:M,background:t?"rgba(52,152,219,0.22)":"rgba(255,255,255,0.05)",color:t?"#cfe6f7":"#667"},children:e},e)}),(0,n.jsx)("span",{style:{fontSize:11.5,color:"#667"},children:b.length?"":"pick at least one"})]}),"newest"===j&&(0,n.jsxs)("div",{style:{fontSize:12,color:"#8b9a9a",lineHeight:1.6},children:["Goes by the date you connected, newest first, across every tier. Run"," ",(0,n.jsx)("b",{children:"Check for new"})," first so your latest connections are in the list."]}),(0,n.jsx)(V,{})]})]})]}),eh&&(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:12,marginTop:20,padding:"14px 16px",borderRadius:8,background:"rgba(0,255,136,0.06)",border:"1px solid rgba(0,255,136,0.3)"},children:[(0,n.jsx)(Q,{}),(0,n.jsxs)("div",{style:{flex:1,fontSize:13.5},children:[(0,n.jsx)("div",{style:{fontSize:11,fontWeight:800,letterSpacing:1.2,color:"#00ff88",marginBottom:2},children:"YOUR SCANNER IS WORKING"}),(0,n.jsx)("b",{children:A[o.action]||"Working"}),o.progress&&(0,n.jsx)(Z,{p:o.progress,action:o.action}),(0,n.jsx)("div",{style:{color:"#8b9a9a",fontSize:12.5,marginTop:2},children:"Stopping closes the browser cleanly and keeps everything found so far."})]}),(0,n.jsx)(X,{onClick:el,tone:"bad",children:"Stop"})]}),(0,n.jsxs)("details",{style:{margin:"18px 0 4px",borderRadius:10,border:M,background:"rgba(255,255,255,0.02)"},children:[(0,n.jsxs)("summary",{style:{padding:"12px 16px",cursor:"pointer",fontSize:13.5,fontWeight:650,color:"#cfd8d8"},children:["Fine-tune the scanner",(0,n.jsx)("span",{style:{fontWeight:500,color:"#778",marginLeft:8},children:"daily budget, how much of each list, the hidden window, paused lists"})]}),(0,n.jsxs)("div",{style:{padding:"4px 16px 16px",display:"flex",flexDirection:"column",gap:12},children:[(0,n.jsx)(I,{li:ex,disabled:p,onSetLimits:e=>ed("set-limits",e)}),(0,n.jsxs)("label",{style:{display:"flex",gap:10,alignItems:"center",fontSize:12.5,color:"#cfd8d8"},children:["Read up to",(0,n.jsxs)("select",{value:k,onChange:e=>S(Number(e.target.value)),disabled:eh,style:G,children:[(0,n.jsx)("option",{value:100,children:"every page, to the end of their list"}),(0,n.jsx)("option",{value:50,children:"50 pages each"}),(0,n.jsx)("option",{value:25,children:"25 pages each"}),(0,n.jsx)("option",{value:10,children:"10 pages (~100 people) each"})]})]}),(0,n.jsxs)("label",{style:{display:"flex",gap:8,alignItems:"center",fontSize:12.5,color:"#cfd8d8",cursor:eh?"not-allowed":"pointer"},children:[(0,n.jsx)("input",{type:"checkbox",checked:T,onChange:e=>W(e.target.checked),disabled:eh}),"Also finish people already mapped, from the page each one stopped at"]}),(0,n.jsxs)("label",{style:{display:"flex",gap:8,alignItems:"flex-start",fontSize:12.5,color:"#b8c4c4",cursor:eh?"default":"pointer"},children:[(0,n.jsx)("input",{type:"checkbox",checked:z,disabled:eh,style:{marginTop:3},onChange:e=>{B(e.target.checked),window.dispatchEvent(new Event("six-degrees:experimental"))}}),(0,n.jsxs)("span",{children:[(0,n.jsx)("b",{style:{color:"#FFD700"},children:"Experimental:"})," all-day pacing. Up to 8 pages in a sitting, then an hour’s rest; searches only from 9:00 to 18:00; never more than 40 searches in a day or 200 in a week, however high your budget; two days’ rest after any check from LinkedIn; at the budget it waits instead of stopping; and it saves every page. It also reads LinkedIn’s own data beside the page text, to fill gaps and measure how the two compare. It keeps running while the app is open."]})]}),(0,n.jsxs)("label",{style:{display:"flex",gap:8,alignItems:"flex-start",fontSize:12.5,color:"#b8c4c4",cursor:eh?"default":"pointer"},children:[(0,n.jsx)("input",{type:"checkbox",checked:F,disabled:eh,style:{marginTop:3},onChange:e=>R(e.target.checked)}),(0,n.jsxs)("span",{children:[(0,n.jsx)("b",{style:{color:"#FFD700"},children:"Hide the Chrome window while scanning."})," Every scan runs with no window popping up; the status bar still shows what it’s doing, and Stop still works. Signing in always opens the window.",(0,n.jsx)("span",{style:{display:"block",marginTop:4,color:"#e0a080"},children:"The risks: a hidden Chrome is easier for LinkedIn to tell apart from a person, so it may make a warning or restriction more likely. If LinkedIn asks you to check it’s you (a code, a puzzle, signing in again) you won’t see it, and the scan will stop instead of waiting for you. Untick this and scan again to see what LinkedIn wants. It changes nothing about pacing or your daily budget."})]})]}),(0,n.jsxs)("div",{style:{fontSize:12,color:"#FFD700",lineHeight:1.6},children:["Every page is a LinkedIn search, so at ",(0,c.paceOf)(ex?.limits?.pace).label," it rests"," ",(0,c.paceOf)(ex?.limits?.pace).pagePause," seconds before each one and"," ",(0,c.paceOf)(ex?.limits?.pace).chunkCooldown/60==1?"a minute":`${(0,c.paceOf)(ex?.limits?.pace).chunkCooldown/60} minutes`," after every 10, and a long list can take"," ","about ",(0,d.circleScanCost)(k,ex?.limits?.pace).minutes," minutes a person. LinkedIn shows 100 pages of anyone’s connections at most. Free accounts have a monthly search limit: if LinkedIn says it has been reached, the scan saves what it read and stops, and carries on from that page next time. Keep batches small."]}),(0,n.jsxs)("div",{children:[(0,n.jsx)(X,{onClick:()=>ed("auto-bridge-retry",{maxBridges:x,tiers:"score"===j?b:[],order:j,maxPages:k,deeper:T}),disabled:!eb||"score"===j&&!b.length,children:"Retry hidden ones"}),(0,n.jsx)("span",{style:{fontSize:12,color:"#8b9a9a",marginLeft:10},children:"People whose list was hidden last time, in case they've opened it."})]}),(0,n.jsx)(C,{paused:o?.paused||[],disabled:!eb,onResume:e=>ed("resume",{id:e.id}),onResumeAll:()=>ed("resume-all",{maxBridges:x})})]})]}),P&&(0,n.jsx)(J,{tone:"bad",children:P}),o?.log?.length>0&&(0,n.jsxs)("details",{open:eS,style:{marginTop:20},children:[(0,n.jsxs)("summary",{style:{display:"flex",alignItems:"center",gap:10,cursor:"pointer",margin:"8px 0",fontSize:12,color:"#788",textTransform:"uppercase",letterSpacing:.6},children:[eh&&(0,n.jsx)(Q,{}),eh?"What it’s doing (the log)":"The last run’s log"]}),(0,n.jsx)("pre",{ref:_,style:{background:"rgba(0,0,0,0.45)",border:M,borderRadius:8,padding:14,maxHeight:280,overflow:"auto",margin:0,fontSize:12.5,lineHeight:1.7,color:"#b9c6c6",fontFamily:"ui-monospace, SFMono-Regular, Menlo, monospace",whiteSpace:"pre-wrap",wordBreak:"break-word"},children:o.log.join("\n")})]})]}),(0,n.jsxs)("div",{style:{marginTop:32,paddingTop:20,borderTop:M,fontSize:13.5,color:"#8b9a9a"},children:["Checking for updates has moved to"," ",(0,n.jsx)(s.default,{href:"/settings#updates",style:{color:"#3498DB"},children:"Settings →"})]}),(0,n.jsxs)("p",{style:{color:"#667",fontSize:12.5,lineHeight:1.7,marginTop:32},children:["Automating LinkedIn may go against its User Agreement, and accounts have been restricted for it. This runs locally against your own account, at your own risk. LinkedIn’s own CSV export is the supported route and needs none of this —"," ",(0,n.jsx)(s.default,{href:"/import",style:{color:"#3498DB"},children:"import a CSV instead"}),"."]})]}),(0,n.jsx)("style",{children:`@keyframes spin { to { transform: rotate(360deg) } }
|
|
15
|
+
@keyframes slide { 0% { transform: translateX(-100%) } 100% { transform: translateX(300%) } }`})]})}function E({pick:e,pages:t,setPages:i,li:o,running:a,s:r,canSearch:l,busy:c,onStart:h,onUnpick:p}){let{person:g,circle:u}=e,f=String(g.name||"").trim().split(/\s+/)[0]||"them",x=(0,d.circleScanCost)(t,o?.limits?.pace),y=a&&r?.target?.id===g.id,b=o?.leftToday!=null&&o.leftToday<x.searches;return(0,n.jsxs)("div",{style:{margin:"16px 0",padding:"16px 18px",borderRadius:10,fontSize:13.5,lineHeight:1.6,background:"rgba(0,255,136,0.05)",border:"1px solid rgba(0,255,136,0.3)"},children:[(0,n.jsx)("div",{style:{fontSize:11,fontWeight:700,color:"#00ff88",letterSpacing:.6,textTransform:"uppercase",marginBottom:4},children:"Scan one circle"}),(0,n.jsxs)("div",{style:{fontSize:16,fontWeight:700},children:[g.name," ",(0,n.jsxs)("span",{style:{fontSize:12,color:O[g.tier]||"#888"},children:[g.tier,"-tier"]})]}),g.unlocked_from_name&&(0,n.jsxs)("div",{style:{fontSize:12.5,color:"#9aa"},children:["Was in ",g.unlocked_from_name,"’s circle"]}),y?(0,n.jsxs)("div",{style:{marginTop:10},children:[(0,n.jsxs)("b",{children:["Scanning ",f,"’s circle."]})," It saves every 10 pages, and"," ",(0,n.jsx)(s.default,{href:`/?chain=${encodeURIComponent(g.id)}`,style:{color:"#00ff88"},children:"Bridge Chains shows it filling in →"})]}):(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("div",{style:{color:"#b8c4c4",marginTop:10},children:["It costs ",(0,n.jsxs)("b",{children:[x.profileViews," profile view"]})," to find their list, then ",(0,n.jsx)("b",{children:"one LinkedIn search for every page"})," of it: up to ",x.searches," ",1===x.searches?"page":"pages",", about ",x.minutes," minutes.",o?.leftToday!=null&&(0,n.jsxs)(n.Fragment,{children:[" ",(0,n.jsx)("b",{children:o.leftToday})," of your ",o.limits?.daily," searches a day are left",b?"; the scan stops when they run out, and can carry on from that page later":"","."]})]}),"scanned"===u&&(0,n.jsx)("div",{style:{color:"#FFD700",fontSize:12.5,marginTop:6},children:"Their circle is already scanned. This reads their whole list again from page 1; to carry on from where a read stopped, use Resume on their card or in the Paused list below."}),"hidden"===u&&(0,n.jsx)("div",{style:{color:"#FFD700",fontSize:12.5,marginTop:6},children:"Their list was hidden last time it was tried. Trying again costs a profile view."}),(0,n.jsxs)("div",{style:{display:"flex",gap:10,alignItems:"center",flexWrap:"wrap",marginTop:12},children:[(0,n.jsxs)(X,{onClick:h,disabled:!l||c,primary:!0,children:["Scan ",f,"’s circle"]}),(0,n.jsxs)("select",{value:t,onChange:e=>i(Number(e.target.value)),disabled:a,style:G,"aria-label":"How many pages of their list to read",children:[(0,n.jsx)("option",{value:100,children:"every page, to the end of their list"}),(0,n.jsx)("option",{value:50,children:"up to 50 pages"}),(0,n.jsx)("option",{value:25,children:"up to 25 pages"}),(0,n.jsx)("option",{value:10,children:"up to 10 pages (~100 people)"})]}),(0,n.jsx)(X,{onClick:p,children:"Not now"})]}),!l&&(0,n.jsx)("div",{style:{fontSize:12.5,color:"#8b9a9a",marginTop:8},children:a?"Something else is running. One scan at a time: this one can start when it finishes.":o?.cooldown?"Scanning is paused for now (see below).":"The scanner isn’t ready yet: finish the steps below first."})]})]})}let O={S:"#FFD700",A:"#9B59B6",B:"#3498DB",C:"#95A5A6",D:"#BDC3C7"};function H(e,n){let[i,o]=(0,t.useState)(n);return(0,t.useEffect)(()=>{try{let n=localStorage.getItem(e);null!==n&&o(JSON.parse(n))}catch{}},[e]),[i,n=>{o(n);try{localStorage.setItem(e,JSON.stringify(n))}catch{}}]}let Y={background:"rgba(255,255,255,0.08)",padding:"1px 5px",borderRadius:4},G={padding:"9px 10px",borderRadius:7,fontSize:13.5,fontWeight:600,background:"rgba(255,255,255,0.08)",color:"#fff",border:M},_=`
|
|
16
|
+
@keyframes stepPulse { 0%, 100% { box-shadow: 0 0 0 0 rgba(0,255,136,.45); } 50% { box-shadow: 0 0 0 7px rgba(0,255,136,0); } }
|
|
17
|
+
.journey-now { animation: stepPulse 2.2s ease-in-out infinite; }
|
|
18
|
+
.launch-go { transition: transform .15s ease, box-shadow .2s ease, filter .2s ease; }
|
|
19
|
+
.launch-go:not(:disabled):hover { transform: translateY(-1px); box-shadow: 0 8px 30px rgba(0,255,136,.35); filter: brightness(1.08); }
|
|
20
|
+
.launch-go:not(:disabled):active { transform: translateY(0) scale(.98); }
|
|
21
|
+
@media (prefers-reduced-motion: reduce) { .journey-now { animation: none; } }
|
|
22
|
+
`;function U({steps:e,current:t,view:i,onView:o}){return(0,n.jsxs)("div",{role:"tablist","aria-label":"Scanning, step by step",style:{display:"flex",alignItems:"flex-start",margin:"4px 0 14px"},children:[(0,n.jsx)("style",{children:_}),e.map((s,a)=>{let r=s.key===t&&!s.done,l=s.key===i,d=s.done?"#00ff88":r?"#fff":"#667";return(0,n.jsxs)("div",{style:{flex:1,display:"flex",alignItems:"flex-start",minWidth:0},children:[(0,n.jsxs)("button",{type:"button",role:"tab","aria-selected":l,onClick:()=>o(s.key===t?null:s.key),style:{flex:"0 0 auto",width:76,display:"flex",flexDirection:"column",alignItems:"center",gap:7,background:"none",border:"none",cursor:"pointer",padding:0},children:[(0,n.jsx)("span",{className:r?"journey-now":void 0,style:{width:38,height:38,borderRadius:"50%",display:"grid",placeItems:"center",fontSize:15,fontWeight:800,background:s.done?"rgba(0,255,136,0.16)":r?"linear-gradient(135deg, #00ff88, #1abc9c)":"rgba(255,255,255,0.05)",color:s.done?"#00ff88":r?"#04140c":"#778",border:`2px solid ${l?"#fff":s.done?"rgba(0,255,136,0.55)":r?"transparent":"rgba(255,255,255,0.12)"}`},children:s.done?"✓":s.key}),(0,n.jsx)("span",{style:{fontSize:12,fontWeight:l?800:650,color:d,textAlign:"center",lineHeight:1.25,maxWidth:76,overflowWrap:"break-word"},children:s.label})]}),a<e.length-1&&(0,n.jsx)("span",{"aria-hidden":"true",style:{flex:1,height:2,marginTop:19,borderRadius:1,minWidth:8,background:s.done?"linear-gradient(90deg, rgba(0,255,136,0.7), rgba(0,255,136,0.25))":"rgba(255,255,255,0.1)"}})]},s.key)})]})}function K({step:e,title:t,time:i,body:o,launch:s,more:a,children:r}){return(0,n.jsxs)("div",{style:{padding:"20px 22px",borderRadius:14,marginBottom:8,background:"rgba(255,255,255,0.035)",border:"1px solid rgba(255,255,255,0.1)"},children:[(0,n.jsxs)("div",{style:{display:"flex",alignItems:"baseline",gap:10,flexWrap:"wrap"},children:[(0,n.jsxs)("span",{style:{fontSize:11,fontWeight:800,letterSpacing:1.2,color:"#778"},children:["STEP ",e]}),(0,n.jsx)("span",{style:{fontSize:19,fontWeight:800},children:t}),i&&(0,n.jsxs)("span",{style:{fontSize:12,color:"#8fd9b6",marginLeft:"auto"},children:["⏱ ",i]})]}),(0,n.jsx)("div",{style:{fontSize:14,color:"#9fb0bb",lineHeight:1.6,margin:"8px 0 14px",maxWidth:600},children:o}),r,(s||a)&&(0,n.jsxs)("div",{style:{display:"flex",gap:10,alignItems:"center",flexWrap:"wrap"},children:[s,a]})]})}function q({children:e,onClick:t,disabled:i,quiet:o=!1}){return(0,n.jsxs)("button",{type:"button",className:"launch-go",onClick:t,disabled:i,style:{display:"inline-flex",alignItems:"center",gap:10,padding:o?"10px 18px":"13px 26px",borderRadius:12,fontSize:o?14:16,fontWeight:800,cursor:i?"not-allowed":"pointer",color:i?"#667":o?"#cfe8dc":"#04140c",border:o?"1px solid rgba(0,255,136,0.35)":"none",background:i?"rgba(255,255,255,0.06)":o?"rgba(0,255,136,0.08)":"linear-gradient(135deg, #00ff88, #1abc9c)",boxShadow:i||o?"none":"0 4px 22px rgba(0,255,136,0.25)"},children:[(0,n.jsx)("span",{"aria-hidden":"true",style:{fontSize:o?11:13},children:"▶"}),e]})}function V(){return(0,n.jsxs)("details",{style:{fontSize:12.5,color:"#8b9a9a",lineHeight:1.6},children:[(0,n.jsx)("summary",{style:{cursor:"pointer",color:"#aab7c4",fontWeight:600},children:"Why so slow?"}),(0,n.jsxs)("div",{style:{marginTop:6},children:["This is the part LinkedIn notices. While this app was being built, a real account was restricted for a while after roughly ",(0,n.jsx)("b",{children:"19 people in one sitting"}),". So: a small batch, a day’s rest, another batch, and stop the moment LinkedIn mentions unusual activity. Most people hide their connections; those are noted and never tried again. A list is read to the end, saving every 10 pages, and a stopped read carries on from the same page."]})]})}function X({children:e,onClick:t,disabled:i,primary:o,tone:s}){return(0,n.jsx)("button",{onClick:t,disabled:i,style:{padding:"9px 18px",borderRadius:7,fontSize:13.5,fontWeight:650,color:i?"#667":"#fff",background:i?"rgba(255,255,255,0.05)":"bad"===s?"rgba(255,80,80,0.15)":o?"linear-gradient(135deg, #9B59B6, #3498DB)":"rgba(255,255,255,0.08)",border:M,cursor:i?"not-allowed":"pointer"},children:e})}function J({children:e,tone:t}){return(0,n.jsx)("div",{style:{margin:"16px 0",padding:"14px 16px",borderRadius:8,fontSize:13.5,lineHeight:1.6,background:"bad"===t?"rgba(255,80,80,0.08)":"rgba(255,255,255,0.05)",border:`1px solid ${"bad"===t?"rgba(255,80,80,0.3)":"rgba(255,255,255,0.12)"}`},children:e})}function Z({p:e,action:t}){let i;if("saving"===e.kind)return(0,n.jsxs)("div",{style:{margin:"8px 0 6px"},children:[(0,n.jsx)("div",{role:"progressbar","aria-label":"Saving",style:{height:8,borderRadius:4,overflow:"hidden",background:"rgba(255,255,255,0.08)",marginBottom:6},children:(0,n.jsx)("div",{style:{width:"35%",height:"100%",borderRadius:4,background:"linear-gradient(90deg, #9B59B6, #3498DB)",animation:"slide 1.2s ease-in-out infinite"}})}),(0,n.jsx)("div",{style:{fontSize:12.5,color:"#cfe6f7"},children:"Saving to your network and fetching photos — this can take a minute or two."})]});let o=Math.max(0,Math.min(100,Math.round(e.done/e.total*100)));return i="download"===e.kind?`Downloading Python: ${e.done.toFixed(1)} of ${e.total.toFixed(1)} MB \xb7 ${o}%`:"batch"===e.kind?`Person ${e.current} of ${e.total}`:"refresh"===t?`Looked at ${e.done.toLocaleString()} so far — stops once it reaches people already saved`:`${e.done.toLocaleString()} of ${e.total.toLocaleString()} connections \xb7 ${o}%`,(0,n.jsxs)("div",{style:{margin:"8px 0 6px"},children:["refresh"!==t&&(0,n.jsx)("div",{role:"progressbar","aria-valuemin":0,"aria-valuemax":e.total,"aria-valuenow":e.done,"aria-label":i,style:{height:8,borderRadius:4,overflow:"hidden",background:"rgba(255,255,255,0.08)",marginBottom:6},children:(0,n.jsx)("div",{style:{width:`${o}%`,height:"100%",borderRadius:4,background:"linear-gradient(90deg, #9B59B6, #3498DB)",transition:"width 0.6s ease"}})}),(0,n.jsx)("div",{style:{fontSize:12.5,color:"#cfe6f7"},children:i})]})}function Q(){return(0,n.jsx)("span",{style:{width:11,height:11,borderRadius:"50%",display:"inline-block",border:"2px solid rgba(255,255,255,0.2)",borderTopColor:"#3498DB",animation:"spin 0.8s linear infinite"}})}e.s(["default",0,function(){return(0,n.jsx)(o.default,{children:(0,n.jsx)(t.Suspense,{children:(0,n.jsx)(N,{})})})}],68863)}]);
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,85957,e=>{"use strict";var t=e.i(43476),n=e.i(71645),o=e.i(26005),i=e.i(99883),r=e.i(18566),l=e.i(40996),s=e.i(19821),a=e.i(64745),d=e.i(7837),c=e.i(2776);e.i(47716);var h=e.i(36534),p=e.i(77899),u=e.i(17983),f=e.i(43079),g=e.i(52048),x=e.i(47560),y=e.i(94657),m=e.i(7214),b=e.i(89154),v=e.i(82044),j=e.i(39160);let k=Object.freeze({live:!1,spread:1,pull:1,links:1}),S={fontSize:10.5,color:"#667",lineHeight:1.45,marginTop:6},w=[{key:"spread",label:"Spread",min:.2,max:4,step:.05,tip:"How hard bubbles push each other apart."},{key:"pull",label:"Pull to their group",min:0,max:4,step:.05,tip:"How hard each bubble keeps to its sector. At 0 they find their own shape."},{key:"links",label:"Pull along lines",min:0,max:6,step:.05,tip:"How hard two bubbles joined by a line pull together."}];function M({colourBy:e,onColourBy:n,physics:o,onPhysics:i,heatHint:r}){return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("div",{style:H,children:"Colour"}),(0,t.jsx)(_,{value:e,onChange:n,options:[["sector","Sector"],["heat","Heat"]]}),"heat"===e&&(0,t.jsx)("div",{style:S,children:r}),(0,t.jsx)("div",{style:H,children:"Physics"}),(0,t.jsx)(_,{value:o.live?"on":"off",onChange:e=>i({...o,live:"on"===e}),options:[["off","Still"],["on","Live"]]}),o.live?(0,t.jsxs)("div",{style:{marginTop:8},children:[w.map(e=>(0,t.jsxs)("label",{title:e.tip,style:{display:"block",marginBottom:6},children:[(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",fontSize:11,color:"#aab"},children:[(0,t.jsx)("span",{children:e.label}),(0,t.jsxs)("span",{style:{color:o[e.key]===k[e.key]?"#556":"#cfe6f7",fontVariantNumeric:"tabular-nums"},children:[o[e.key].toFixed(2),"×"]})]}),(0,t.jsx)("input",{type:"range",min:e.min,max:e.max,step:e.step,value:o[e.key],onChange:t=>i({...o,[e.key]:Number(t.target.value)}),style:{width:"100%",accentColor:"#3498DB"}})]},e.key)),(0,t.jsx)("div",{style:S,children:"Drag a bubble and the ones joined to it follow. Click still opens it."}),(0,t.jsx)("button",{type:"button",onClick:()=>i({...k,live:!0}),style:{marginTop:6,padding:"4px 10px",borderRadius:6,fontSize:10.5,cursor:"pointer",border:"1px solid rgba(255,255,255,0.1)",background:"rgba(255,255,255,0.04)",color:"#aab"},children:"Reset the forces"})]}):(0,t.jsx)("div",{style:S,children:"Live lets the bubbles move: drag them, and change the forces that lay the map out."})]})}function z(e,t){let[,o]=(0,n.useState)(0),i=(0,n.useRef)(null),r=(0,n.useRef)(!1);return(0,n.useEffect)(()=>{if(!t.live||!e.nodes.length)return;let n=0,r=(0,f.forceSimulation)(e.nodes).force("x",(0,g.forceX)(e=>e.ax).strength(.12*t.pull)).force("y",(0,x.forceY)(e=>e.ay).strength(.12*t.pull)).force("collide",(0,h.forceCollide)(e=>e.r+3).iterations(2)).force("charge",(0,u.forceManyBody)().strength(-25*t.spread)).force("link",(0,p.forceLink)(e.edges).id(e=>e.id).strength(e=>(e.k??.1)*t.links).distance(60*Math.sqrt(t.spread))).alpha(.15).on("tick",()=>{n||(n=requestAnimationFrame(()=>{n=0,o(e=>e+1)}))});return i.current=r,()=>{r.stop(),cancelAnimationFrame(n),i.current=null}},[e,t.live,t.spread,t.pull,t.links]),{drag:t.live?(e,t)=>{let n=i.current;if(!n)return;let o=e.currentTarget.ownerSVGElement,l=o?.getScreenCTM();if(!l)return;let s=l.inverse(),a=e=>{let t=o.createSVGPoint();return t.x=e.clientX,t.y=e.clientY,t.matrixTransform(s)},d={x:e.clientX,y:e.clientY};r.current=!1;let c=e=>{Math.hypot(e.clientX-d.x,e.clientY-d.y)>3&&(r.current=!0);let n=a(e);t.fx=n.x,t.fy=n.y},h=()=>{t.fx=null,t.fy=null,n.alphaTarget(0),window.removeEventListener("pointermove",c),window.removeEventListener("pointerup",h)},p=a(e);t.fx=p.x,t.fy=p.y,n.alphaTarget(.08).restart(),window.addEventListener("pointermove",c),window.addEventListener("pointerup",h)}:null,clicked:()=>!r.current||(r.current=!1,!1)}}function C({id:e}){return(0,t.jsx)("defs",{children:[0,1,2,3,4,5].map(n=>(0,t.jsxs)("radialGradient",{id:`${e}-${n}`,children:[(0,t.jsx)("stop",{offset:"0",stopColor:(0,j.heatColour)(n/5),stopOpacity:.16+.07*n}),(0,t.jsx)("stop",{offset:"1",stopColor:(0,j.heatColour)(n/5),stopOpacity:0})]},n))})}function B({id:e,nodes:n,heat:o}){return(0,t.jsx)("g",{style:{mixBlendMode:"screen",pointerEvents:"none"},children:n.filter(e=>o(e)>=.5).map(n=>(0,t.jsx)("circle",{cx:n.x,cy:n.y,r:1.9*n.r+18,fill:`url(#${e}-${Math.round(5*o(n))})`},n.id))})}var F=e.i(44902);let $=[...b.INDUSTRIES,b.UNKNOWN_INDUSTRY],R=e=>Number(e||0).toLocaleString("en-US"),T={value:{label:"Cluster value",of:e=>e.value,k:2},size:{label:"Cluster size",of:e=>e.size,k:2.6},s:{label:"S tier inside",of:e=>e.S,k:6}};function I({d1:e=[],d2:o=[],top:i=null,look:l=null,colourBy:s="sector",physics:a=k}){let d=(0,r.useRouter)(),[c,h]=(0,n.useState)("value"),[p,u]=(0,n.useState)("scanned"),[f,g]=(0,n.useState)(()=>(0,F.makeGrid)([1])),[x,y]=(0,n.useState)(()=>new Set),[j,S]=(0,n.useState)(""),[w,M]=(0,n.useState)(!0),[z,C]=(0,n.useState)("top"),B=(0,n.useMemo)(()=>(function(e=[],t=[],{maxLinks:n=400}={}){let o=new Set((e||[]).map(e=>e.id)),i=new Map,r=new Map;for(let e of t||[]){let t=e?.source_connection_id;if(null==t||!o.has(t))continue;let n=(0,m.keyFor)(e),l=i.get(t);l||i.set(t,l=new Map),l.has(n)||l.set(n,e);let s=r.get(n);s||r.set(n,s=new Set),s.add(t)}let l=(e||[]).map(e=>{let t=i.get(e.id),n=0,o=0,l=0;if(t)for(let[e,i]of t)"S"===i.tier?n++:"A"===i.tier&&o++,r.get(e)?.size===1&&l++;let s=t?t.size:0;return{person:e,id:e.id,key:(0,m.keyFor)(e),size:s,S:n,A:o,value:(({size:e=0,S:t=0,A:n=0}={})=>e+2*t+n)({size:s,S:n,A:o}),only:l,share:s?l/s:0}}),s=new Map;for(let e of r.values()){if(e.size<2||e.size>8)continue;let t=[...e].sort();for(let e=0;e<t.length;e++)for(let n=e+1;n<t.length;n++){let o=`${t[e]}\u0000${t[n]}`;s.set(o,(s.get(o)||0)+1)}}let a=[...s].map(([e,t])=>{let[n,o]=e.split("\0");return{a:n,b:o,shared:t}}).sort((e,t)=>t.shared-e.shared||(e.a<t.a?-1:1)).slice(0,n),d=l.filter(e=>e.size>0).map(e=>e.value).sort((e,t)=>e-t);return{people:l,links:a,rank:e=>{let t=l.find(t=>t.id===e);if(!t||!t.size||d.length<2)return null;let n=0;for(;n<d.length&&d[n]<t.value;)n++;return n/(d.length-1)}}})(e,o),[e,o]),D=(0,n.useMemo)(()=>(0,F.gridCounts)({1:B.people.filter(e=>"all"===p||e.size>0).map(e=>e.person)}),[B,p]),A=(0,n.useMemo)(()=>{let e=new Map;for(let t of B.people)e.set(t.id,(0,b.industryOf)((0,b.companyOf)(t.person),t.person.headline));return e},[B]),O=(0,n.useMemo)(()=>B.people.filter(e=>e.size>0).length,[B]),L=(0,n.useMemo)(()=>{let e=j.trim().toLowerCase();return B.people.filter(t=>("all"===p||t.size>0)&&(0,F.shows)(f,t.person.tier,1)&&!x.has(A.get(t.id).key)&&(!e||String(t.person.name||"").toLowerCase().includes(e))).sort((e,t)=>t.value-e.value||t.size-e.size)},[B,p,f,x,j,A]),N=(0,n.useMemo)(()=>{let e=new Map;for(let t of B.people){if("all"!==p&&!t.size)continue;let n=A.get(t.id).key;e.set(n,(e.get(n)||0)+1)}return $.filter(t=>e.get(t.key)).map(t=>({...t,count:e.get(t.key)})).sort((e,t)=>t.count-e.count)},[B,p,A]);return(0,t.jsxs)("div",{style:{flex:1,minHeight:0,display:"flex"},children:[(0,t.jsxs)(U,{open:w,onToggle:()=>M(e=>!e),children:[i,(0,t.jsx)("div",{style:H,children:"Filter"}),(0,t.jsx)("input",{value:j,onChange:e=>S(e.target.value),placeholder:"Find a person",style:{width:"100%",boxSizing:"border-box",padding:"6px 10px",borderRadius:7,border:"1px solid rgba(255,255,255,0.1)",background:"rgba(255,255,255,0.05)",color:"#fff",fontSize:13,marginBottom:8}}),(0,t.jsx)("div",{style:{display:"flex",flexDirection:"column",gap:8},children:(0,t.jsx)(_,{value:p,onChange:u,options:[["scanned",`Scanned (${R(O)})`],["all",`All (${R(B.people.length)})`]]})}),(0,t.jsx)("div",{style:{marginTop:12},children:(0,t.jsx)(v.TierGrid,{grid:f,counts:D,onChange:g,mode:"paths"})}),(0,t.jsx)("div",{style:H,children:"Sectors"}),(0,t.jsx)("div",{style:{display:"flex",gap:6,flexWrap:"wrap"},children:N.map(e=>{let n=x.has(e.key);return(0,t.jsxs)("button",{title:n?"Show on the map":"Hide from the map",onClick:()=>y(t=>{let n=new Set(t);return n.has(e.key)?n.delete(e.key):n.add(e.key),n}),style:{display:"inline-flex",alignItems:"center",gap:6,padding:"3px 10px",borderRadius:14,cursor:"pointer",border:`1px solid ${e.color}55`,background:n?"transparent":`${e.color}14`,color:"#cfd8d8",fontSize:11.5,opacity:n?.4:1},children:[(0,t.jsx)("span",{style:{width:7,height:7,borderRadius:"50%",background:e.color}}),e.label," ",(0,t.jsx)("span",{style:{color:"#778"},children:R(e.count)})]},e.key)})}),(0,t.jsx)("div",{style:{fontSize:10.5,color:"#667",marginTop:6},children:"Inferred from where each connection works."}),(0,t.jsx)("div",{style:H,children:"Read the map"}),(0,t.jsx)("div",{style:{fontSize:11,color:"#8b9a9a",marginBottom:4},children:"Bubble size"}),(0,t.jsx)(_,{value:c,onChange:h,options:Object.entries(T).map(([e,t])=>[e,t.label])}),(0,t.jsx)("div",{style:{fontSize:11,color:"#8b9a9a",margin:"10px 0 4px"},children:"Names"}),(0,t.jsx)(_,{value:z,onChange:C,options:[["top","Biggest"],["all","All"],["none","None"]]}),l]}),(0,t.jsx)("div",{style:{flex:1,minWidth:0,display:"flex",flexDirection:"column",paddingTop:40,boxSizing:"border-box"},children:(0,t.jsx)(W,{people:L,links:B.links,sizeBy:T[c],sectorOf:A,rank:B.rank,names:z,colourBy:s,physics:a,onOpen:e=>d.push(`/?chain=${encodeURIComponent(e)}`)})})]})}function W({people:e,links:o,sizeBy:i,sectorOf:r,rank:l,onOpen:s,names:a="top",colourBy:d="sector",physics:c=k}){let y=(0,n.useRef)(null),{w:m,h:v}=P(y),[S,w]=(0,n.useState)(null),M=(0,n.useMemo)(()=>{let t=e.slice(0,400),n=new Set(t.map(e=>e.id)),l=[...new Set(t.map(e=>r.get(e.id).key))],s=new Map(l.map((e,t)=>{let n=t/Math.max(1,l.length)*Math.PI*2-Math.PI/2;return[e,{x:260*Math.cos(n),y:260*Math.sin(n)}]})),a=t.map(e=>{let t=s.get(r.get(e.id).key);return{id:e.id,p:e,sector:r.get(e.id),r:e.size?4+Math.sqrt(Math.max(0,i.of(e)))*i.k:3,x:t.x+(E(String(e.id))-.5)*40,y:t.y+(E(`${e.id}#`)-.5)*40,ax:t.x,ay:t.y}}),d=o.filter(e=>n.has(e.a)&&n.has(e.b)).map(e=>({source:e.a,target:e.b,weight:e.shared,k:Math.min(.25,.02*e.shared)})),c=(0,f.forceSimulation)(a).force("x",(0,g.forceX)(e=>s.get(e.sector.key).x).strength(.12)).force("y",(0,x.forceY)(e=>s.get(e.sector.key).y).strength(.12)).force("collide",(0,h.forceCollide)(e=>e.r+3)).force("charge",(0,u.forceManyBody)().strength(-25)).force("link",(0,p.forceLink)(d).id(e=>e.id).strength(e=>e.k).distance(60)).stop();for(let e=0;e<320;e++)c.tick();let y=a.flatMap(e=>[e.x-e.r,e.x+e.r]),m=a.flatMap(e=>[e.y-e.r,e.y+e.r]),v=a.length?{x:Math.min(...y)-60,y:Math.min(...m)-40,w:Math.max(...y)-Math.min(...y)+120,h:Math.max(...m)-Math.min(...m)+80}:{x:-300,y:-300,w:600,h:600},j=l.map(e=>{let t=a.filter(t=>t.sector.key===e),n=t.reduce((e,t)=>e+t.x,0)/t.length,o=t.reduce((e,t)=>e+t.y,0)/t.length,i=Math.hypot(n,o)||1,r=n/i,l=o/i,s=Math.max(...t.map(e=>(e.x-n)*r+(e.y-o)*l+e.r));return{key:e,x:n+r*(s+16),y:o+l*(s+16)+4,anchor:r>.35?"start":r<-.35?"end":"middle",ind:(0,b.industryByKey)(e)}});for(let e of j){let t=7.5*e.ind.label.length,n="start"===e.anchor?e.x:"end"===e.anchor?e.x-t:e.x-t/2,o=Math.max(v.x+v.w,n+t+10);v.x=Math.min(v.x,n-10),v.w=o-v.x;let i=Math.max(v.y+v.h,e.y+12);v.y=Math.min(v.y,e.y-18),v.h=i-v.y}return v.h+=Math.max(60,.1*v.h),{nodes:a,edges:d,box:v,labels:j,cut:Math.max(0,e.length-t.length)}},[e,o,i,r]),{drag:F,clicked:$}=z(M,c),T=(0,n.useMemo)(()=>(0,j.heatBy)(M.nodes,e=>(function({size:e=0,S:t=0,A:n=0}={}){return e?(3*t+2*n+Math.max(0,e-t-n))/e:-1})(e.p)),[M]),I="heat"===d,A=S?M.nodes.find(e=>e.id===S):null,O=(0,n.useMemo)(()=>{if(!S)return null;let e=new Set([S]);for(let t of M.edges)t.source.id===S&&e.add(t.target.id),t.target.id===S&&e.add(t.source.id);return e},[S,M]),L=(0,n.useMemo)(()=>new Set("none"===a?[]:M.nodes.filter(e=>e.p.size).slice(0,"all"===a?1/0:28).map(e=>e.id)),[M,a]),N=m&&v?Math.min(m/M.box.w,v/M.box.h):1,_=(m-M.box.w*N)/2,U=(v-M.box.h*N)/2;return(0,t.jsxs)("div",{ref:y,style:{flex:1,minHeight:360,position:"relative"},children:[m>0&&(0,t.jsxs)("svg",{width:m,height:v,viewBox:`${M.box.x} ${M.box.y} ${M.box.w} ${M.box.h}`,style:{display:"block",touchAction:F?"none":void 0},children:[I&&(0,t.jsx)(C,{id:"pplheat"}),I&&(0,t.jsx)(B,{id:"pplheat",nodes:M.nodes.filter(e=>e.p.size),heat:T}),(0,t.jsx)("g",{children:M.edges.map((e,n)=>{let o=S&&(e.source.id===S||e.target.id===S);return(0,t.jsx)("line",{x1:e.source.x,y1:e.source.y,x2:e.target.x,y2:e.target.y,stroke:o?"#FF6B35":"#8fa6c0",strokeOpacity:o?.8:S?.03:.09,strokeWidth:o?1+Math.log2(1+e.weight):.4+.4*Math.log2(1+e.weight)},n)})}),M.labels.map(e=>(0,t.jsx)("text",{x:e.x,y:e.y,textAnchor:e.anchor,fontSize:13,fontWeight:800,fill:e.ind.color,opacity:.85,children:e.ind.label},e.key)),M.nodes.map(e=>{let{p:n}=e,o=O&&!O.has(e.id);return(0,t.jsxs)("g",{transform:`translate(${e.x},${e.y})`,style:{cursor:F?"grab":n.size?"pointer":"default"},opacity:o?.18:1,onMouseEnter:()=>w(e.id),onMouseLeave:()=>w(null),onPointerDown:F?t=>F(t,e):void 0,onClick:()=>{$()&&n.size&&s(e.id)},children:[(0,t.jsx)("circle",{r:e.r,fill:n.size?I?(0,j.heatColour)(T(e)):e.sector.color:"#3a3f55",fillOpacity:n.size?.92:.6,stroke:S===e.id?"#fff":n.S?"#FFD700":"rgba(0,0,0,0.35)",strokeWidth:S===e.id?2.5:n.S?Math.min(4,1+n.S/40):.6}),n.size>0&&n.only>0&&(0,t.jsx)("circle",{r:e.r*Math.sqrt(n.share)*.85,fill:"#fff",fillOpacity:.3}),(L.has(e.id)||S===e.id)&&(0,t.jsx)("text",{y:e.r+11,textAnchor:"middle",fontSize:10,fill:"#e6edf0",style:{pointerEvents:"none"},paintOrder:"stroke",stroke:"rgba(0,0,0,0.6)",strokeWidth:3,children:n.person.name})]},e.id)})]}),A&&(0,t.jsx)(D,{n:A,at:{x:_+(A.x-M.box.x)*N,y:U+(A.y-M.box.y)*N,r:A.r*N},w:m,rank:l(A.id)}),(0,t.jsxs)("div",{style:{position:"absolute",left:12,bottom:10,fontSize:11,color:"#778",lineHeight:1.6,pointerEvents:"none"},children:["Bubble = one of your connections, sized by ",i.label.toLowerCase()," (value: S tier counts 3, A tier 2, everyone else 1)",I?"; colour = how strong their cluster is, person for person, cold to white hot":"","; white centre = the share of their cluster only they can open; gold ring = S tier inside.",(0,t.jsx)("br",{}),"A line = two of your connections whose clusters share people. Grey = not scanned yet.",M.cut?` Showing the 400 largest of ${R(M.cut+400)}.`:""]})]})}function D({n:e,at:n,w:o,rank:i}){let{p:r}=e,l=n.x+n.r+14+280>o?Math.max(8,n.x-n.r-14-280):n.x+n.r+14,s=[r.person.role,(0,b.companyOf)(r.person)].filter(Boolean).join(" @ ")||r.person.headline||"";return(0,t.jsxs)("div",{style:{position:"absolute",left:l,top:Math.max(8,n.y-70),width:280,pointerEvents:"none",zIndex:5,padding:"12px 14px",borderRadius:12,background:"rgba(8,10,22,0.96)",border:`1px solid ${e.sector.color}99`,boxShadow:"0 12px 40px rgba(0,0,0,0.6)",fontSize:12,lineHeight:1.45,color:"#ddd"},children:[(0,t.jsx)("div",{style:{fontSize:15,fontWeight:800,color:"#fff"},children:r.person.name}),(0,t.jsxs)("div",{style:{fontSize:11.5,color:"#8a8fa8"},children:[s,r.person.tier?` \xb7 ${r.person.tier}-tier`:""," · ",e.sector.label]}),r.size?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"6px 10px",margin:"10px 0 8px"},children:[(0,t.jsx)(A,{value:R(r.value),label:"cluster value",color:"#FFD700"}),(0,t.jsx)(A,{value:R(r.size),label:"people in their cluster"}),(0,t.jsx)(A,{value:`${R(r.S)} S \xb7 ${R(r.A)} A`,label:"the strongest among them",color:"#FFD700"}),(0,t.jsx)(A,{value:`${R(r.only)} (${Math.round(100*r.share)}%)`,label:"only through them",color:"#00E5FF"})]}),(0,t.jsxs)("div",{style:{fontSize:11.5,color:"#aab"},children:[1===i?"The most valuable cluster you’ve scanned. ":null!=i?`Worth more than ${Math.round(100*i)}% of the clusters you’ve scanned. `:"","Click to open it in Bridge Chains."]})]}):(0,t.jsx)("div",{style:{fontSize:11.5,color:"#aab",marginTop:8},children:"Their circle isn’t scanned yet, so there’s no cluster to size."})]})}function A({value:e,label:n,color:o="#fff"}){return(0,t.jsxs)("div",{children:[(0,t.jsx)("div",{style:{fontSize:15,fontWeight:800,color:o},children:e}),(0,t.jsx)("div",{style:{fontSize:10.5,color:"#8a8fa8"},children:n})]})}let O={S:"#FFD700",A:"#9B59B6",B:"#3498DB",C:"#95A5A6",D:"#BDC3C7"},L="1px solid rgba(255,255,255,0.1)",N=[...b.INDUSTRIES,b.UNKNOWN_INDUSTRY];function E(e){let t=0x811c9dc5;for(let n=0;n<e.length;n++)t=Math.imul(t^e.charCodeAt(n),0x1000193);return(t>>>0)%1e3/1e3}function _({value:e,onChange:n,options:o}){return(0,t.jsx)("div",{style:{display:"flex",borderRadius:7,overflow:"hidden",border:L},children:o.map(([o,i])=>(0,t.jsx)("button",{onClick:()=>n(o),style:{padding:"5px 10px",fontSize:11.5,fontWeight:600,border:"none",cursor:"pointer",background:e===o?"rgba(52,152,219,0.25)":"transparent",color:e===o?"#cfe6f7":"#8b9a9a"},children:i},o))})}function P(e){let[t,o]=(0,n.useState)({w:0,h:0});return(0,n.useEffect)(()=>{let t=e.current;if(!t)return;let n=()=>{let e=t.getBoundingClientRect();o(t=>t.w===Math.round(e.width)&&t.h===Math.round(e.height)?t:{w:Math.round(e.width),h:Math.round(e.height)})};n();let i=new ResizeObserver(n);return i.observe(t),()=>i.disconnect()},[e]),t}function U({open:e,onToggle:n,children:o}){return e?(0,t.jsxs)("aside",{style:{width:300,flexShrink:0,height:"100%",overflowY:"auto",boxSizing:"border-box",padding:"16px 14px",borderRight:"1px solid rgba(52,152,219,0.15)",background:"rgba(10,15,30,0.65)",fontSize:13},children:[(0,t.jsxs)("button",{type:"button",onClick:n,style:{display:"flex",alignItems:"center",gap:6,width:"100%",marginBottom:14,padding:"6px 12px",borderRadius:6,cursor:"pointer",background:"rgba(255,255,255,0.06)",border:"1px solid rgba(255,255,255,0.1)",color:"#aaa",fontSize:12,fontWeight:600},children:[(0,t.jsx)("span",{style:{fontSize:16},children:"›"})," Close"]}),o]}):(0,t.jsxs)("button",{type:"button",onClick:n,style:{position:"fixed",left:16,top:140,zIndex:30,cursor:"pointer",height:36,borderRadius:18,padding:"0 14px 0 10px",display:"flex",alignItems:"center",gap:6,background:"rgba(52,152,219,0.15)",border:"2px solid rgba(52,152,219,0.5)",color:"#3498DB",fontWeight:700,boxShadow:"0 0 12px rgba(52,152,219,0.3)",backdropFilter:"blur(8px)"},children:[(0,t.jsx)("span",{style:{fontSize:18},children:"›"}),(0,t.jsx)("span",{style:{fontSize:11,fontWeight:600},children:"Filters"})]})}let H={fontSize:9,fontWeight:700,color:"#555",letterSpacing:1,margin:"14px 0 6px",textTransform:"uppercase"};function Y(e,t){return(!t.grid||!!(0,F.shows)(t.grid,e.tier,Number(e.degree)||1))&&("senior"!==t.seniority||!!(0,b.isSenior)(e.headline))&&("csuite"!==t.seniority||!((0,b.getSeniority)(e.headline).level<6))}function G({show:e,onShow:n}){return(0,t.jsxs)("div",{style:{marginBottom:6},children:[(0,t.jsx)("div",{style:{...H,marginTop:0},children:"Bubbles are"}),(0,t.jsx)(_,{value:e,onChange:n,options:[["companies","Companies"],["people","People"]]})]})}function X({d1:e=[],d2:o=[],d3:i=[],initialShow:r="companies",onOpenCompany:l}){let[s,a]=(0,n.useState)(r),[d,c]=(0,n.useState)(()=>({seniority:"all",grid:(0,F.makeGrid)([1,2,3])})),[h,p]=(0,n.useState)("sector"),[u,f]=(0,n.useState)(k),[g,x]=(0,n.useState)(()=>new Set),[y,m]=(0,n.useState)(""),[v,j]=(0,n.useState)(null),[S,w]=(0,n.useState)(!0),[z,C]=(0,n.useState)("people"),[B,$]=(0,n.useState)("top"),R=(0,n.useMemo)(()=>[...e,...o,...i],[e,o,i]),T=(0,n.useMemo)(()=>(0,F.gridCounts)({1:e,2:o,3:i}),[e,o,i]),W=(0,n.useMemo)(()=>(0,b.buildCompanyIndex)(R),[R]),D=(0,n.useMemo)(()=>(0,b.companyLinks)(e,o),[e,o]),A=(0,n.useMemo)(()=>{let e=y.trim().toLowerCase(),t=[];for(let n of W.values()){if(g.has(n.industry.key)||e&&!n.name.toLowerCase().includes(e))continue;let o=n.people.filter(e=>Y(e,d));o.length&&t.push({...n,shown:o})}return t.sort((e,t)=>t.shown.length-e.shown.length)},[W,d,g,y]),O=(0,n.useMemo)(()=>{let e=new Map(N.map(e=>[e.key,{...e,people:[],companies:new Map}])),t=new Set;for(let n of R){let o=n.profile_url||`id:${n.id}`;if(t.has(o)||(t.add(o),!Y(n,d)))continue;let i=(0,b.companyOf)(n),r=i?W.get(i)?.industry||(0,b.industryOf)(i,n.headline):(0,b.industryOf)(null,n.headline),l=e.get(r.key);l.people.push(n),i&&l.companies.set(i,(l.companies.get(i)||0)+1)}return[...e.values()].filter(e=>e.people.length).sort((e,t)=>t.people.length-e.people.length)},[R,W,d]),L=v?.kind==="company"?W.get(v.key):v?.kind==="industry"?O.find(e=>e.key===v.key):null,E=e=>(0,t.jsx)(M,{colourBy:h,onColourBy:p,physics:u,onPhysics:f,heatHint:e});return"people"===s?(0,t.jsx)(I,{d1:e,d2:o,top:(0,t.jsx)(G,{show:s,onShow:a}),colourBy:h,physics:u,look:E("How strong each cluster is, person for person (S counts 3, A 2, the rest 1): the hotter, the stronger. Size is still how big it is.")}):(0,t.jsxs)("div",{style:{display:"flex",flex:1,minHeight:0},children:[(0,t.jsxs)(U,{open:S,onToggle:()=>w(e=>!e),children:[(0,t.jsx)(G,{show:s,onShow:a}),(0,t.jsx)(q,{filters:d,setFilters:c,counts:T,query:y,setQuery:m,industries:O,hidden:g,setHidden:x,onIndustry:e=>j({kind:"industry",key:e})}),(0,t.jsx)("div",{style:H,children:"Read the map"}),(0,t.jsx)("div",{style:{fontSize:11,color:"#8b9a9a",marginBottom:4},children:"Bubble size"}),(0,t.jsx)(_,{value:z,onChange:C,options:[["people","Your people"],["sa","S & A there"],["known","You know"]]}),(0,t.jsx)("div",{style:{fontSize:11,color:"#8b9a9a",margin:"10px 0 4px"},children:"Names"}),(0,t.jsx)(_,{value:B,onChange:$,options:[["top","Biggest"],["all","All"],["none","None"]]}),E("How strong your people at each company are: the average power score of the five strongest. The hotter, the stronger; size is still how many.")]}),(0,t.jsx)("div",{style:{flex:1,minWidth:0,display:"flex",flexDirection:"column",paddingTop:40,boxSizing:"border-box"},children:(0,t.jsx)(K,{companies:A,links:D,focus:v,sizeBy:z,labels:B,colourBy:h,physics:u,onCompany:e=>j({kind:"company",key:e}),onIndustry:e=>j({kind:"industry",key:e}),onClear:()=>j(null)})}),L&&(0,t.jsx)(Z,{focus:v,data:L,index:W,links:D,d1:e,d2:o,filters:d,onClose:()=>j(null),onCompany:e=>j({kind:"company",key:e}),onIndustry:e=>j({kind:"industry",key:e}),onOpenCompany:l})]})}function q({filters:e,setFilters:n,counts:o,query:i,setQuery:r,industries:l,hidden:s,setHidden:a,onIndustry:d}){let c=(e,t)=>n(n=>({...n,[e]:t}));return(0,t.jsxs)("div",{style:{display:"flex",flexDirection:"column",gap:8},children:[(0,t.jsx)("div",{style:H,children:"Filter"}),(0,t.jsx)("input",{value:i,onChange:e=>r(e.target.value),placeholder:"Find a company",style:{padding:"6px 10px",borderRadius:7,border:L,background:"rgba(255,255,255,0.05)",color:"#fff",fontSize:13,width:"100%",boxSizing:"border-box"}}),(0,t.jsx)(v.TierGrid,{grid:e.grid,counts:o,onChange:e=>c("grid",e),mode:"paths"}),(0,t.jsx)("div",{style:{fontSize:11,color:"#8b9a9a",marginTop:-10},children:"Level"}),(0,t.jsx)(_,{value:e.seniority,onChange:e=>c("seniority",e),options:[["all","Any level"],["senior","Director+"],["csuite","C-suite"]]}),(0,t.jsx)("div",{style:H,children:"Industries"}),(0,t.jsxs)("div",{style:{display:"flex",gap:6,flexWrap:"wrap"},children:[l.map(e=>{let n=s.has(e.key);return(0,t.jsxs)("span",{style:{display:"inline-flex",borderRadius:14,border:`1px solid ${e.color}55`,overflow:"hidden",opacity:n?.4:1},children:[(0,t.jsx)("button",{title:n?"Show on the map":"Hide from the map",onClick:()=>a(t=>{let n=new Set(t);return n.has(e.key)?n.delete(e.key):n.add(e.key),n}),style:{padding:"3px 7px",border:"none",background:`${e.color}22`,cursor:"pointer",color:e.color,fontSize:11},children:"●"}),(0,t.jsxs)("button",{onClick:()=>d(e.key),title:"Analyse this industry",style:{padding:"3px 9px 3px 5px",border:"none",background:"transparent",cursor:"pointer",color:"#cfd8d8",fontSize:11.5},children:[e.label," ",(0,t.jsx)("span",{style:{color:"#778"},children:e.people.length})]})]},e.key)}),(0,t.jsx)("span",{style:{fontSize:11,color:"#667",alignSelf:"center"},children:"Inferred from companies and headlines. ● hides one; its name opens it."})]})]})}function K({companies:e,links:o,focus:i,onCompany:r,onIndustry:l,onClear:s,sizeBy:a="people",labels:d="top",colourBy:c="sector",physics:y=k}){let v=(0,n.useRef)(null),{w:S,h:w}=P(v),[M,F]=(0,n.useState)(null),$=(0,n.useMemo)(()=>{let t=e.slice(0,140),n=new Set(t.map(e=>e.name)),i=[...new Set(t.map(e=>e.industry.key))],r=new Map(i.map((e,t)=>{let n=t/Math.max(1,i.length)*Math.PI*2-Math.PI/2;return[e,{x:260*Math.cos(n),y:260*Math.sin(n)}]})),l=t.map(e=>({id:e.name,co:e,r:4+Math.sqrt("sa"===a?e.shown.filter(e=>"S"===e.tier||"A"===e.tier).length:"known"===a?e.d1:e.shown.length)*("people"===a?3.4:5),x:r.get(e.industry.key).x+(E(e.name)-.5)*40,y:r.get(e.industry.key).y+(E(e.name+"#")-.5)*40,ax:r.get(e.industry.key).x,ay:r.get(e.industry.key).y})),s=o.filter(e=>n.has(e.a)&&n.has(e.b)).map(e=>({source:e.a,target:e.b,weight:e.weight,via:e.via.size,k:Math.min(.25,.03*e.weight)})),d=(0,f.forceSimulation)(l).force("x",(0,g.forceX)(e=>r.get(e.co.industry.key).x).strength(.12)).force("y",(0,x.forceY)(e=>r.get(e.co.industry.key).y).strength(.12)).force("collide",(0,h.forceCollide)(e=>e.r+3)).force("charge",(0,u.forceManyBody)().strength(-25)).force("link",(0,p.forceLink)(s).id(e=>e.id).strength(e=>e.k).distance(60)).stop();for(let e=0;e<320;e++)d.tick();let c=l.flatMap(e=>[e.x-e.r,e.x+e.r]),y=l.flatMap(e=>[e.y-e.r,e.y+e.r]),m=l.length?{x:Math.min(...c)-60,y:Math.min(...y)-40,w:Math.max(...c)-Math.min(...c)+120,h:Math.max(...y)-Math.min(...y)+80}:{x:-300,y:-300,w:600,h:600},v=i.map(e=>{let t=l.filter(t=>t.co.industry.key===e),n=t.reduce((e,t)=>e+t.x,0)/t.length,o=t.reduce((e,t)=>e+t.y,0)/t.length,i=Math.hypot(n,o)||1,r=n/i,s=o/i,a=Math.max(...t.map(e=>(e.x-n)*r+(e.y-o)*s+e.r));return{key:e,x:n+r*(a+16),y:o+s*(a+16)+4,anchor:r>.35?"start":r<-.35?"end":"middle",ind:(0,b.industryByKey)(e)}});for(let e of v){let t=7.5*e.ind.label.length,n="start"===e.anchor?e.x:"end"===e.anchor?e.x-t:e.x-t/2,o=Math.max(m.x+m.w,n+t+10);m.x=Math.min(m.x,n-10),m.w=o-m.x;let i=Math.max(m.y+m.h,e.y+12);m.y=Math.min(m.y,e.y-18),m.h=i-m.y}return m.h+=Math.max(60,.1*m.h),{nodes:l,edges:s,box:m,labels:v,cut:Math.max(0,e.length-t.length)}},[e,o,a]),{drag:R,clicked:T}=z($,y),I=(0,n.useMemo)(()=>{let e=new Map($.nodes.map(e=>[e.id,function(e=[]){let t=e.map(m.score).sort((e,t)=>t-e).slice(0,5);return t.length?t.reduce((e,t)=>e+t,0)/t.length:0}(e.co.shown)]));return(0,j.heatBy)($.nodes,t=>e.get(t.id))},[$]),W="heat"===c,D=M||(i?.kind==="company"?i.key:null),A=i?.kind==="industry"?i.key:null,L=(0,n.useMemo)(()=>{if(!D)return null;let e=new Set([D]);for(let t of $.edges)t.source.id===D&&e.add(t.target.id),t.target.id===D&&e.add(t.source.id);return e},[D,$]),N=(0,n.useMemo)(()=>new Set("none"===d?[]:("all"===d?$.nodes:[...$.nodes].sort((e,t)=>t.r-e.r).slice(0,28)).map(e=>e.id)),[$,d]);return(0,t.jsxs)("div",{ref:v,style:{flex:1,minHeight:360,position:"relative"},onClick:s,children:[S>0&&(0,t.jsxs)("svg",{width:S,height:w,viewBox:`${$.box.x} ${$.box.y} ${$.box.w} ${$.box.h}`,style:{display:"block",touchAction:R?"none":void 0},children:[W&&(0,t.jsx)(C,{id:"coheat"}),W&&(0,t.jsx)(B,{id:"coheat",nodes:$.nodes,heat:I}),(0,t.jsx)("g",{children:$.edges.map((e,n)=>{let o=D&&(e.source.id===D||e.target.id===D);return(0,t.jsx)("line",{x1:e.source.x,y1:e.source.y,x2:e.target.x,y2:e.target.y,stroke:o?"#FF6B35":"#8fa6c0",strokeOpacity:o?.8:D?.04:.14,strokeWidth:o?1+Math.log2(1+e.weight):.4+.5*Math.log2(1+e.weight)},n)})}),$.labels.map(e=>(0,t.jsx)("text",{x:e.x,y:e.y,textAnchor:e.anchor,fontSize:13,fontWeight:800,fill:e.ind.color,opacity:A&&A!==e.key?.25:.85,style:{cursor:"pointer"},onClick:t=>{t.stopPropagation(),l(e.key)},children:e.ind.label},e.key)),$.nodes.map(e=>{let n=L&&!L.has(e.id)||A&&e.co.industry.key!==A,o=i?.kind==="company"&&i.key===e.id;return(0,t.jsxs)("g",{transform:`translate(${e.x},${e.y})`,style:{cursor:R?"grab":"pointer"},opacity:n?.18:1,onMouseEnter:()=>F(e.id),onMouseLeave:()=>F(null),onPointerDown:R?t=>R(t,e):void 0,onClick:t=>{t.stopPropagation(),T()&&r(e.id)},children:[(0,t.jsx)("title",{children:`${e.co.name} \xb7 ${e.co.industry.label} (inferred)
|
|
2
|
+
${e.co.d1} you know \xb7 ${e.co.d2} reachable${e.co.d3?` \xb7 ${e.co.d3} further`:""}`}),(0,t.jsx)("circle",{r:e.r,fill:W?(0,j.heatColour)(I(e)):e.co.industry.color,fillOpacity:W?.9:.75,stroke:o?"#fff":e.co.S?O.S:"rgba(0,0,0,0.35)",strokeWidth:o?2.5:e.co.S?1.5:.6}),e.co.d1>0&&(0,t.jsx)("circle",{r:e.r*Math.sqrt(e.co.d1/Math.max(1,e.co.people.length)),fill:"#fff",fillOpacity:.35}),(N.has(e.id)||e.id===D||o)&&(0,t.jsx)("text",{y:e.r+11,textAnchor:"middle",fontSize:10,fill:"#e6edf0",style:{pointerEvents:"none"},children:e.co.name})]},e.id)})]}),(0,t.jsxs)("div",{style:{position:"absolute",left:12,bottom:10,fontSize:11,color:"#778",lineHeight:1.6,pointerEvents:"none"},children:["Bubble = a company, sized by your people there; ",W?"colour = how strong they are, cold to white hot":"colour = its industry","; white centre = the share you already know; gold ring = an S-tier person inside.",(0,t.jsx)("br",{}),"A line = one of your connections at one company knows people at the other.",$.cut?` Showing the 140 largest; ${$.cut} smaller companies are in Companies.`:""]})]})}function V({parts:e,total:n}){return(0,t.jsx)("div",{style:{display:"flex",height:6,borderRadius:3,overflow:"hidden",background:"rgba(255,255,255,0.06)"},children:e.map(([e,o],i)=>(0,t.jsx)("div",{style:{width:`${e/Math.max(1,n)*100}%`,background:o}},i))})}function Q({p:e,note:n}){return(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:8,padding:"5px 0",fontSize:12.5},children:[(0,t.jsx)("span",{style:{width:7,height:7,borderRadius:"50%",background:O[e.tier]||"#667",flexShrink:0}}),(0,t.jsxs)("div",{style:{minWidth:0,flex:1},children:[(0,t.jsx)("div",{style:{fontWeight:600,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e.name}),(0,t.jsx)("div",{style:{fontSize:11,color:"#8b9a9a",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:n||e.headline})]})]})}function Z({focus:e,data:o,index:i,links:r,d1:l,d2:s,filters:a,onClose:d,onCompany:c,onIndustry:h,onOpenCompany:p}){let u,f,g,x="company"===e.kind,y=o.people.filter(e=>Y(e,a)),m=(0,n.useMemo)(()=>{let e=new Map;for(let t of y){let n=(0,b.getSeniority)(t.headline);e.set(n.label,{n:(e.get(n.label)?.n||0)+1,level:n.level})}return[...e.entries()].sort((e,t)=>t[1].level-e[1].level)},[y]),v=(0,n.useMemo)(()=>x?(0,b.waysInto)(o.name,l,s):null,[x,o,l,s]),j=(0,n.useMemo)(()=>x?r.filter(e=>e.a===o.name||e.b===o.name).map(e=>({name:e.a===o.name?e.b:e.a,weight:e.weight})).sort((e,t)=>t.weight-e.weight).slice(0,8):[],[x,r,o]),k=[...y].sort((e,t)=>(Number(t.power_score)||0)-(Number(e.power_score)||0)).slice(0,6),S=x?o.industry:o,w=y.filter(e=>1===e.degree).length,M=y.filter(e=>2===e.degree).length,z=x?[]:[...o.companies.entries()].sort((e,t)=>t[1]-e[1]).slice(0,10);return(0,t.jsxs)("aside",{style:{width:360,flexShrink:0,borderLeft:L,overflow:"auto",padding:16,background:"rgba(255,255,255,0.02)"},children:[(0,t.jsx)("button",{onClick:d,style:{background:"none",border:"none",color:"#888",cursor:"pointer",fontSize:12,padding:0},children:"✕ Close"}),(0,t.jsxs)("div",{style:{fontSize:10,letterSpacing:1,color:"#8b9a9a",marginTop:8},children:[x?"COMPANY":"INDUSTRY"," ANALYZER"]}),(0,t.jsx)("h2",{style:{margin:"4px 0 6px",fontSize:20},children:x?o.name:o.label}),x&&h?(0,t.jsxs)("button",{type:"button",onClick:()=>h(S.key),title:`Open ${S.label}: everyone there and its top companies`,style:{fontSize:11,padding:"2px 8px",borderRadius:10,border:"none",cursor:"pointer",background:`${S.color}22`,color:S.color},children:[S.label," · inferred →"]}):(0,t.jsxs)("span",{style:{fontSize:11,padding:"2px 8px",borderRadius:10,background:`${S.color}22`,color:S.color},children:[S.label,x?" · inferred":""]}),x&&(0,t.jsx)(ee,{name:o.name}),(0,t.jsx)("div",{style:{display:"grid",gridTemplateColumns:"repeat(3, 1fr)",gap:8,margin:"14px 0"},children:[[w,"you know","#00ff88"],[M,"reachable","#FF6B35"],[y.filter(e=>(0,b.isSenior)(e.headline)).length,"director+","#FFD700"]].map(([e,n,o])=>(0,t.jsxs)("div",{style:{padding:8,borderRadius:8,background:"rgba(255,255,255,0.04)",textAlign:"center"},children:[(0,t.jsx)("div",{style:{fontSize:20,fontWeight:800,color:o},children:e}),(0,t.jsx)("div",{style:{fontSize:10.5,color:"#8b9a9a"},children:n})]},n))}),(0,t.jsx)(J,{title:"By level",children:m.map(([e,{n}])=>(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"110px 1fr 28px",gap:8,alignItems:"center",fontSize:11.5,marginBottom:4},children:[(0,t.jsx)("span",{style:{color:"#aab7b7"},children:e}),(0,t.jsx)(V,{total:y.length,parts:[[n,"#3498DB"]]}),(0,t.jsx)("span",{style:{color:"#778",textAlign:"right"},children:n})]},e))}),x&&v&&(0,t.jsxs)(J,{title:"Ways in",children:[v.direct.length>0&&(0,t.jsxs)("div",{style:{fontSize:11,color:"#00ff88",margin:"2px 0"},children:["You already know ",v.direct.length," here"]}),(u=new Map(v.bridges.map(({bridge:e,n:t})=>[e.id,t])),f=[...v.direct].sort((e,t)=>(u.get(t.id)||0)-(u.get(e.id)||0)).slice(0,4),g=new Set(v.direct.map(e=>e.id)),(0,t.jsxs)(t.Fragment,{children:[f.map(e=>(0,t.jsx)(Q,{p:e,note:u.get(e.id)?`works here \xb7 knows ${u.get(e.id)} here`:`works here \xb7 ${e.headline||""}`},e.id)),v.bridges.filter(({bridge:e})=>!g.has(e.id)).slice(0,5).map(({bridge:e,n})=>(0,t.jsx)(Q,{p:e,note:`knows ${n} ${1===n?"person":"people"} here`},e.id))]})),!v.direct.length&&!v.bridges.length&&(0,t.jsx)("div",{style:{fontSize:12,color:"#778"},children:"No one you know links here yet."})]}),(0,t.jsx)(J,{title:x?"Most powerful people here":"Most powerful people in this industry",children:k.map(e=>(0,t.jsx)(Q,{p:e,note:`${1===e.degree?"you know them":2===e.degree?"2nd degree":"3rd+"} \xb7 ${e.headline||""}`},e.id))}),x&&j.length>0&&(0,t.jsx)(J,{title:"Connected companies",children:(0,t.jsx)("div",{style:{display:"flex",gap:6,flexWrap:"wrap"},children:j.map(e=>(0,t.jsxs)("button",{onClick:()=>c(e.name),style:{padding:"3px 9px",borderRadius:10,border:L,background:`${i.get(e.name)?.industry.color||"#666"}22`,color:"#dfe6e9",fontSize:11.5,cursor:"pointer"},children:[e.name," ",(0,t.jsx)("span",{style:{color:"#778"},children:e.weight})]},e.name))})}),!x&&(0,t.jsx)(J,{title:"Companies",children:z.map(([e,n])=>(0,t.jsxs)("div",{onClick:()=>c(e),style:{display:"grid",gridTemplateColumns:"1fr 60px 24px",gap:8,alignItems:"center",fontSize:12,padding:"3px 0",cursor:"pointer"},children:[(0,t.jsx)("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e}),(0,t.jsx)(V,{total:z[0][1],parts:[[n,S.color]]}),(0,t.jsx)("span",{style:{color:"#778",textAlign:"right"},children:n})]},e))}),x&&p&&(0,t.jsxs)("button",{onClick:()=>p(o),style:{marginTop:14,width:"100%",padding:"10px",borderRadius:8,border:"none",cursor:"pointer",fontWeight:700,background:"linear-gradient(135deg, #00ff88, #3498DB)",color:"#000"},children:["Path to the top of ",o.name," →"]})]})}function J({title:e,children:n}){return(0,t.jsxs)("div",{style:{marginTop:14},children:[(0,t.jsx)("div",{style:{fontSize:10.5,letterSpacing:.8,color:"#8b9a9a",fontWeight:700,marginBottom:6},children:e.toUpperCase()}),n]})}function ee({name:e}){let{companies:n,setScore:o}=(0,y.useCompanyScores)(),i=n?.find(t=>t.name===e);if(!i)return null;let r={yours:"your score",known:"known list",network:"estimated",default:"unknown company"}[i.source];return(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:8,marginTop:10,fontSize:12,color:"#aab7b7"},children:["Company score ",(0,t.jsx)("b",{style:{color:"#fff",fontSize:15},children:i.score}),"/10 · ",r,(0,t.jsx)("span",{style:{marginLeft:"auto"},children:(0,t.jsx)(y.ScorePicker,{company:i,onSet:o,compact:!0})})]})}var et=e.i(15812),en=e.i(30215),eo=e.i(22016),ei=e.i(36774);let er=[["map","Map"],["companies","Companies"]];function el(){let{userId:e}=(0,et.useUser)(),[c,h]=(0,n.useState)([]),[p,u]=(0,n.useState)(null),[f,g]=(0,n.useState)([]),[x,y]=(0,n.useState)(!0),[m,v]=(0,n.useState)([]),[j,k]=(0,n.useState)([]),[S,w]=(0,n.useState)([]),M=(0,r.useSearchParams)().get("tab"),[z,C]=(0,n.useState)(()=>er.some(([e])=>e===M)?M:"map"),B=(0,r.useRouter)();(0,n.useEffect)(()=>{"scores"===M&&B.replace("/settings#companies")},[M,B]),(0,n.useEffect)(()=>p?void(0,i.setNotchTabs)(null):((0,i.setNotchTabs)({items:er.map(([e,t])=>({key:e,label:t})),current:z,onPick:C}),()=>(0,i.setNotchTabs)(null)),[z,p]);let[F,$]=(0,n.useState)(0),[R,T]=(0,n.useState)(!1);(0,n.useEffect)(()=>{!a.IS_DEMO&&e&&t();async function t(){let t=(0,d.hasCsvNetwork)()?(0,d.loadCsvNetwork)():null;T(!!t);let n=[],o=[],i=[];if(t)n=t.degree1,o=t.degree2||[];else{let t=await (0,s.loadNetwork)(e);n=t.degree1,o=t.degree2,i=t.degree3}v(n),k(o),w(i||[]);let r={},l=new Set;[...n,...o,...i].forEach(e=>{if(l.has(e.profile_url))return;l.add(e.profile_url);let t=(0,b.companyOf)(e);t&&(r[t]||(r[t]={name:t,d1:0,d2:0,d3:0,sCount:0,aCount:0,people:[]}),1===e.degree?r[t].d1++:2===e.degree?r[t].d2++:r[t].d3++,"S"===e.tier&&r[t].sCount++,"A"===e.tier&&r[t].aCount++,r[t].people.push(e))}),h(Object.values(r).filter(e=>e.d1+e.d2+e.d3>=3).sort((e,t)=>3*t.sCount+2*t.aCount+t.d1+t.d2+t.d3-(3*e.sCount+2*e.aCount+e.d1+e.d2+e.d3))),y(!1)}},[e,F]);let[I,W]=(0,n.useState)(!1),[D,A]=(0,n.useState)([]),O=(0,en.default)(),L=!I&&O.running?(0,l.busyReason)(O):null;function N(e){let t=new Set(m.map(e=>e.profile_url)),n=new Set([...m,...j].map(e=>e.profile_url)),o=new Map,i=0;for(let n of e)t.has(n.profile_url||n.profileUrl)&&(i++,o.set(n.id,(o.get(n.id)||0)+1));return e.map(e=>({...e,connected:t.has(e.profile_url||e.profileUrl),known:n.has(e.profile_url||e.profileUrl),seniority:(0,b.getSeniority)(e.headline),mutualCount:i-(o.get(e.id)||0)}))}function E(e){u(e),g(N(e.people))}async function _(){if(a.IS_DEMO||R||!p)return;let e=!1;try{e="1"===localStorage.getItem("six-degrees-company-scan-ok")}catch{}if(!e){if(!window.confirm("Company scans are experimental: they have not been tested against live LinkedIn yet, so the results may be incomplete. Like any scan, it opens a Chrome window and counts toward the profile views LinkedIn watches.\n\nRun it anyway?"))return;try{localStorage.setItem("six-degrees-company-scan-ok","1")}catch{}}W(!0),A(["Checking the scanner..."]);let t=(0,l.notReadyMessage)(await (0,l.scraperStatus)().catch(()=>null));if(t){A([t]),W(!1);return}try{let e=await (0,l.runScrape)("company",{name:p.name,onLog:A});if(0===e.exitCode){A(e=>[...e,"Loading the new people..."]);let e=await fetch(`/api/connections?scanned_company=${encodeURIComponent(p.name)}&limit=500`),t=(await e.json()).connections||[];t.length?(g(N(t)),A(e=>[...e,`${t.length} people at ${p.name}.`])):A(e=>[...e,"Nothing new was found."])}}catch(e){A([e.message||"Failed to start the scan"])}finally{W(!1)}}let P=new Map;for(let e of m)P.has(e.id)||P.set(e.id,e);let U=new Set(m.map(e=>e.profile_url)),H={},Y=0;f.forEach(e=>{let t=e.seniority.key;H[t]||(H[t]={...e.seniority,people:[]}),e.connected&&Y++;let n=Math.min(90,12*e.mutualCount);e.seniority.level<=1?n+=20:e.seniority.level<=2?n+=10:e.seniority.level>=5&&(n-=10),n=Math.max(5,Math.min(95,n)),e.connected&&(n=100);let o=null;if(2===e.degree&&e.source_connection_id){let t=P.get(e.source_connection_id);t&&(o=t.name)}let i={0:5,1:10,2:20,3:35,4:50,5:75,6:100}[e.seniority.level]||10;H[t].people.push({...e,likelihood:n,bridgeName:o,xp:i})}),Object.values(H).forEach(e=>e.people.sort((e,t)=>t.likelihood-e.likelihood));let G=Object.values(H).sort((e,t)=>t.level-e.level);return a.IS_DEMO?(0,t.jsxs)("div",{style:{minHeight:"100vh",display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",gap:12,background:"#0a0a1a",color:"rgba(255,255,255,0.7)",fontFamily:'-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif'},children:[(0,t.jsx)("h1",{style:{fontSize:20,fontWeight:700,margin:0,color:"#fff"},children:"Not part of the demo"}),(0,t.jsx)("p",{style:{fontSize:13,margin:0},children:"The public demo includes the Network Circle and Degrees views only."}),(0,t.jsx)(eo.default,{href:"/",style:{fontSize:13,color:"#888",textDecoration:"none"},children:"← Back to the network"})]}):x?(0,t.jsx)("div",{style:{minHeight:"100vh",display:"flex",alignItems:"center",justifyContent:"center",background:"#0a0a1a",color:"#fff"},children:"Loading..."}):(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.jsx)("header",{style:{padding:"20px 30px",borderBottom:"1px solid rgba(255,255,255,0.1)",flexShrink:0},children:(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:12},children:[(0,t.jsx)(eo.default,{href:"/",style:{textDecoration:"none"},children:(0,t.jsx)("h1",{style:{fontSize:28,fontWeight:700,margin:0,background:"linear-gradient(135deg, #FFD700, #9B59B6, #3498DB)",WebkitBackgroundClip:"text",WebkitTextFillColor:"transparent"},children:"Six Degrees"})}),(0,t.jsx)(o.default,{active:"paths",csvMode:R}),(0,t.jsx)(eo.default,{href:"/settings",title:"Settings","aria-label":"Settings",style:{width:32,height:32,borderRadius:"50%",flexShrink:0,background:"rgba(255,255,255,0.06)",color:"#888",fontSize:16,textDecoration:"none",display:"flex",alignItems:"center",justifyContent:"center"},children:"⚙"})]})}),p&&(0,t.jsx)("div",{style:{padding:"10px 24px",borderBottom:"1px solid rgba(255,255,255,0.08)",flexShrink:0},children:(0,t.jsx)("div",{style:{display:"flex",alignItems:"center",gap:12},children:p&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("button",{onClick:()=>{u(null),g([])},style:{background:"none",border:"none",color:"#888",cursor:"pointer",fontSize:12},children:"← Companies"}),(0,t.jsx)("span",{style:{fontSize:13,fontWeight:600},children:p.name}),(0,t.jsxs)("span",{style:{fontSize:11,color:"#888"},children:[Y,"/",f.length," connected"]}),R?(0,t.jsx)("span",{style:{marginLeft:"auto",fontSize:11,color:"#888"},children:"Scanning needs your own network"}):(0,t.jsx)("button",{onClick:_,disabled:I||!!L,title:L?`${L}. One scan at a time.`:void 0,style:{marginLeft:"auto",padding:"5px 12px",borderRadius:6,border:"none",cursor:I||L?"not-allowed":"pointer",background:I||L?"#333":"rgba(0,255,136,0.15)",color:I||L?"#555":"#00ff88",fontSize:11,fontWeight:600},children:I?"Scanning...":L?"Scanner busy":"+ Scan Full Company"}),(0,t.jsx)("span",{title:"Not yet tested against live LinkedIn. Results may be incomplete.",style:{fontSize:9.5,fontWeight:800,letterSpacing:.6,padding:"3px 7px",borderRadius:20,border:"1px solid rgba(255,215,0,0.45)",color:"#FFD700"},children:"EXPERIMENTAL"})]})})}),p||"companies"===z?(0,t.jsx)("div",{style:{flex:1,overflow:"auto",padding:"16px 24px"},children:(0,t.jsxs)("div",{style:{maxWidth:700,margin:"0 auto"},children:[!p&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("p",{style:{fontSize:13,color:"#888",marginBottom:16},children:["Pick a company to see your path to the top. Based on ",m.length+j.length," people in your network."]}),(0,t.jsx)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:10},children:c.slice(0,60).map(e=>(0,t.jsxs)("button",{onClick:()=>E(e),style:{padding:"14px",borderRadius:10,border:"none",cursor:"pointer",textAlign:"left",background:"rgba(255,255,255,0.04)",transition:"background 0.15s",borderLeft:`3px solid ${e.sCount>0?"#FFD700":e.aCount>0?"#9B59B6":"#3498DB"}`},onMouseEnter:e=>e.currentTarget.style.background="rgba(255,255,255,0.08)",onMouseLeave:e=>e.currentTarget.style.background="rgba(255,255,255,0.04)",children:[(0,t.jsx)("div",{style:{fontSize:14,fontWeight:700,color:"#fff",marginBottom:4},children:e.name}),(0,t.jsxs)("div",{style:{display:"flex",gap:8,fontSize:10,color:"#888"},children:[(0,t.jsxs)("span",{style:{color:"#00ff88"},children:[e.d1," connected"]}),(0,t.jsxs)("span",{children:[e.d2+e.d3," locked"]})]}),(0,t.jsxs)("div",{style:{display:"flex",gap:6,marginTop:4,fontSize:9},children:[e.sCount>0&&(0,t.jsxs)("span",{style:{color:"#FFD700",fontWeight:600},children:[e.sCount,"S"]}),e.aCount>0&&(0,t.jsxs)("span",{style:{color:"#9B59B6",fontWeight:600},children:[e.aCount,"A"]}),(0,t.jsxs)("span",{style:{color:"#555"},children:[e.d1+e.d2," total"]})]}),(0,t.jsx)("div",{style:{height:3,background:"rgba(255,255,255,0.08)",borderRadius:2,marginTop:6},children:(0,t.jsx)("div",{style:{height:"100%",borderRadius:2,width:`${e.d1/Math.max(e.d1+e.d2+e.d3,1)*100}%`,background:e.sCount>0?"#FFD700":"#00ff88"}})})]},e.name))})]}),I&&(0,t.jsxs)("div",{style:{padding:"10px",borderRadius:8,background:"rgba(0,255,136,0.06)",border:"1px solid rgba(0,255,136,0.2)",marginBottom:12},children:[(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:6,marginBottom:4},children:[(0,t.jsx)("div",{style:{width:6,height:6,borderRadius:"50%",background:"#00ff88",animation:"pulse 1s infinite"}}),(0,t.jsx)("span",{style:{fontSize:10,fontWeight:600,color:"#00ff88"},children:"Scanning LinkedIn..."})]}),(0,t.jsx)("div",{style:{fontFamily:"monospace",fontSize:9,color:"#777",maxHeight:60,overflow:"auto"},children:D.map((e,n)=>(0,t.jsx)("div",{children:e},n))})]}),p&&G.map(e=>(0,t.jsxs)("div",{style:{marginBottom:16},children:[(0,t.jsxs)("div",{style:{padding:"8px 12px",borderRadius:6,marginBottom:4,background:e.level>=5?"rgba(255,215,0,0.08)":e.level>=3?"rgba(155,89,182,0.08)":"rgba(52,152,219,0.08)",borderLeft:`3px solid ${e.level>=5?"#FFD700":e.level>=3?"#9B59B6":"#3498DB"}`,display:"flex",justifyContent:"space-between",alignItems:"center"},children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{style:{fontSize:12,fontWeight:700,color:e.level>=5?"#FFD700":e.level>=3?"#9B59B6":"#3498DB"},children:e.label}),e.level>=5&&(0,t.jsx)("span",{style:{fontSize:9,color:"#FF6B35",marginLeft:8,fontWeight:700},children:"TARGET"})]}),(0,t.jsxs)("div",{style:{display:"flex",gap:8,alignItems:"center"},children:[(0,t.jsxs)("span",{style:{fontSize:9,color:"#FF6B35",fontWeight:600},children:["+",e.people.filter(e=>!e.connected).reduce((e,t)=>e+(t.xp||0),0)," XP"]}),(0,t.jsxs)("span",{style:{fontSize:10,color:"#666"},children:[e.people.filter(e=>e.connected).length,"/",e.people.length]})]})]}),e.people.map((n,o)=>(0,t.jsx)(es,{p:n,level:e,companyPeople:f,d1Urls:U,selectedCompany:p},n.id||o))]},e.key))]})}):(0,t.jsx)(X,{d1:m,d2:j,d3:S,initialShow:"people"===M?"people":"companies",onOpenCompany:e=>E({...e,sCount:e.S,aCount:e.A})})]})}function es({p:e,level:o,companyPeople:i,d1Urls:r,selectedCompany:l}){let[s,a]=(0,n.useState)(!1),d=[];if(s&&!e.connected){let t=i.filter(t=>t.seniority.level>e.seniority.level&&!r.has(t.profile_url||t.profileUrl)),n=i.filter(t=>t.seniority.level===e.seniority.level&&t.id!==e.id),o=t.length;o>0&&d.push({icon:"⬆️",text:`Adding them gives you a mutual with ${o} people above in the hierarchy`,color:"#00ff88"});let l=n.filter(e=>r.has(e.profile_url||e.profileUrl)).length;l>0?d.push({icon:"🤝",text:`${l} people at their level already connected — high social proof`,color:"#FFD700"}):d.push({icon:"🎯",text:"First connection at this level — opens a new layer",color:"#3498DB"}),e.bridgeName&&d.push({icon:"🔗",text:`Reachable through ${e.bridgeName} — warm intro possible`,color:"#FF6B35"}),e.seniority.level>=5?d.push({icon:"👑",text:`${e.seniority.label} — decision maker, high strategic value but low accept rate`,color:"#FFD700"}):e.seniority.level>=3?d.push({icon:"📊",text:`${e.seniority.label} — middle management, good balance of access and accept rate`,color:"#9B59B6"}):d.push({icon:"✅",text:`${e.seniority.label} — highest accept rate, builds mutual foundation for people above`,color:"#00ff88"}),e.likelihood>=60?d.push({icon:"🔥",text:`${e.likelihood}% likely to accept — strong mutual overlap + approachable role`,color:"#00ff88"}):e.likelihood>=30?d.push({icon:"⚡",text:`${e.likelihood}% likely — moderate chance, add more people at their level first`,color:"#FFD700"}):d.push({icon:"🔒",text:`${e.likelihood}% likely — low chance right now, build more connections below them first`,color:"#ff5050"})}return(0,t.jsxs)("div",{style:{borderBottom:"1px solid rgba(255,255,255,0.03)"},children:[(0,t.jsxs)("div",{onClick:()=>a(!s),style:{display:"flex",alignItems:"center",gap:8,padding:"6px 8px",cursor:"pointer",opacity:e.connected?.7:1},onMouseEnter:e=>e.currentTarget.style.background="rgba(255,255,255,0.04)",onMouseLeave:e=>e.currentTarget.style.background="transparent",children:[(0,t.jsx)("span",{style:{fontSize:8,color:"#555",flexShrink:0,width:10},children:s?"▾":"▸"}),(0,t.jsx)("div",{style:{width:18,height:18,borderRadius:"50%",flexShrink:0,fontSize:8,display:"flex",alignItems:"center",justifyContent:"center",background:e.connected?"rgba(0,255,136,0.2)":"rgba(255,255,255,0.05)",color:e.connected?"#00ff88":"#555",border:`1px solid ${e.connected?"rgba(0,255,136,0.3)":"rgba(255,255,255,0.1)"}`},children:e.connected?"✓":"🔒"}),(0,ei.localPhoto)(e.profile_image_url||e.imageUrl)?(0,t.jsx)("img",{src:(0,ei.localPhoto)(e.profile_image_url||e.imageUrl),alt:"",style:{width:26,height:26,borderRadius:"50%",objectFit:"cover",flexShrink:0},onError:e=>e.target.style.display="none"}):(0,t.jsx)("div",{style:{width:26,height:26,borderRadius:"50%",flexShrink:0,fontSize:10,fontWeight:700,background:"#333",color:"#888",display:"flex",alignItems:"center",justifyContent:"center"},children:e.name?.charAt(0)}),(0,t.jsxs)("div",{style:{flex:1,minWidth:0},children:[(0,t.jsx)("div",{style:{fontSize:11,fontWeight:600,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e.name}),(0,t.jsx)("div",{style:{fontSize:8,color:"#666",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e.headline?.substring(0,45)})]}),!e.connected&&e.bridgeName&&(0,t.jsxs)("span",{style:{fontSize:8,color:"#FF6B35",flexShrink:0,maxWidth:55,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:["via ",e.bridgeName.split(" ")[0]]}),!e.connected&&(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:6,flexShrink:0},children:[(0,t.jsxs)("span",{style:{fontSize:8,fontWeight:700,color:"#FF6B35"},children:["+",e.xp]}),(0,t.jsxs)("div",{style:{fontSize:9,fontWeight:700,minWidth:30,textAlign:"right",color:e.likelihood>=60?"#00ff88":e.likelihood>=30?"#FFD700":"#ff5050"},children:[e.likelihood,"%"]})]}),!e.connected&&(0,t.jsx)("a",{href:e.profile_url||e.profileUrl,target:"_blank",rel:"noopener noreferrer",onClick:e=>e.stopPropagation(),style:{padding:"3px 7px",borderRadius:4,fontSize:8,fontWeight:700,background:"#0077B5",color:"#fff",textDecoration:"none",flexShrink:0},children:"Add"})]}),s&&(0,t.jsxs)("div",{style:{padding:"8px 12px 10px 44px",background:"rgba(255,255,255,0.02)",borderTop:"1px solid rgba(255,255,255,0.04)"},children:[(0,t.jsx)("div",{style:{fontSize:11,color:"#aaa",marginBottom:8},children:e.headline||"No headline available"}),(0,t.jsxs)("div",{style:{display:"flex",gap:6,alignItems:"center",marginBottom:8,flexWrap:"wrap"},children:[(0,t.jsxs)("div",{style:{display:"inline-block",padding:"2px 8px",borderRadius:4,fontSize:9,fontWeight:600,background:e.seniority.level>=5?"rgba(255,215,0,0.1)":e.seniority.level>=3?"rgba(155,89,182,0.1)":"rgba(52,152,219,0.1)",color:e.seniority.level>=5?"#FFD700":e.seniority.level>=3?"#9B59B6":"#3498DB",border:`1px solid ${e.seniority.level>=5?"rgba(255,215,0,0.2)":e.seniority.level>=3?"rgba(155,89,182,0.2)":"rgba(52,152,219,0.2)"}`},children:[e.seniority.label," · Level ",e.seniority.level]}),!e.connected&&(0,t.jsxs)("div",{style:{display:"inline-block",padding:"2px 8px",borderRadius:4,fontSize:9,fontWeight:700,background:"rgba(255,107,53,0.1)",color:"#FF6B35",border:"1px solid rgba(255,107,53,0.2)"},children:["+",e.xp," XP"]})]}),!e.connected&&d.length>0&&(0,t.jsxs)("div",{style:{marginTop:4},children:[(0,t.jsx)("div",{style:{fontSize:9,fontWeight:700,color:"#888",letterSpacing:.5,marginBottom:4},children:"STRATEGIC VALUE"}),d.map((e,n)=>(0,t.jsxs)("div",{style:{display:"flex",gap:6,alignItems:"flex-start",padding:"2px 0",fontSize:10,color:"#bbb"},children:[(0,t.jsx)("span",{style:{fontSize:11,lineHeight:1},children:e.icon}),(0,t.jsx)("span",{style:{color:e.color},children:e.text})]},n))]}),e.connected&&(0,t.jsxs)("div",{style:{fontSize:10,color:"#00ff88",fontWeight:600},children:["✓ Already connected — contributes as mutual for others at ",l?.name]})]})]})}e.s(["default",0,function(){return(0,t.jsx)(c.default,{children:(0,t.jsx)(n.Suspense,{children:(0,t.jsx)(el,{})})})}],85957)}]);
|