six-degrees 0.6.0 โ 0.7.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/app-path-routes-manifest.json +3 -0
- package/.next/standalone/.next/build-manifest.json +3 -3
- package/.next/standalone/.next/prerender-manifest.json +14 -14
- package/.next/standalone/.next/routes-manifest.json +18 -0
- 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 +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 +26 -18
- package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +26 -18
- package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +25 -16
- package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/api/admin-delete/route.js +2 -2
- 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 +2 -2
- 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 +2 -2
- 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 +2 -2
- 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 +3 -3
- 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 +3 -3
- 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 +2 -2
- package/.next/standalone/.next/server/app/api/connections/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/data/backup/route/app-paths-manifest.json +3 -0
- package/.next/standalone/.next/server/app/api/data/backup/route/build-manifest.json +12 -0
- package/.next/standalone/.next/server/app/api/data/backup/route/server-reference-manifest.json +4 -0
- package/.next/standalone/.next/server/app/api/data/backup/route.js +7 -0
- package/.next/standalone/.next/server/app/api/data/backup/route.js.map +5 -0
- package/.next/standalone/.next/server/app/api/data/backup/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/data/backup/route_client-reference-manifest.js +3 -0
- package/.next/standalone/.next/server/app/api/data/csv/route/app-paths-manifest.json +3 -0
- package/.next/standalone/.next/server/app/api/data/csv/route/build-manifest.json +12 -0
- package/.next/standalone/.next/server/app/api/data/csv/route/server-reference-manifest.json +4 -0
- package/.next/standalone/.next/server/app/api/data/csv/route.js +8 -0
- package/.next/standalone/.next/server/app/api/data/csv/route.js.map +5 -0
- package/.next/standalone/.next/server/app/api/data/csv/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/data/csv/route_client-reference-manifest.js +3 -0
- package/.next/standalone/.next/server/app/api/data/export/route.js +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 +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 +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/restore/route/app-paths-manifest.json +3 -0
- package/.next/standalone/.next/server/app/api/data/restore/route/build-manifest.json +12 -0
- package/.next/standalone/.next/server/app/api/data/restore/route/server-reference-manifest.json +4 -0
- package/.next/standalone/.next/server/app/api/data/restore/route.js +7 -0
- package/.next/standalone/.next/server/app/api/data/restore/route.js.map +5 -0
- package/.next/standalone/.next/server/app/api/data/restore/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/data/restore/route_client-reference-manifest.js +3 -0
- package/.next/standalone/.next/server/app/api/data/reveal/route.js +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 +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 +2 -2
- 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 +2 -2
- package/.next/standalone/.next/server/app/api/ingest/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/route.js +2 -2
- package/.next/standalone/.next/server/app/api/network/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/notifications/route.js +2 -2
- package/.next/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/outreach/route.js +2 -2
- package/.next/standalone/.next/server/app/api/outreach/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/queue/route.js +2 -2
- package/.next/standalone/.next/server/app/api/queue/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/scraper/route.js +4 -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 +3 -3
- 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 +3 -3
- 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 +3 -3
- 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 +2 -2
- 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 +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 +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 +2 -2
- package/.next/standalone/.next/server/app/api/social/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/unlock/route.js +2 -2
- 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 +2 -2
- 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 +2 -2
- package/.next/standalone/.next/server/app/api/users/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/avatars/[file]/route.js +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 +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 +32 -24
- package/.next/standalone/.next/server/app/import.segments/_full.segment.rsc +32 -24
- package/.next/standalone/.next/server/app/import.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/import.segments/import/__PAGE__.segment.rsc +23 -18
- package/.next/standalone/.next/server/app/index.html +1 -1
- package/.next/standalone/.next/server/app/index.rsc +29 -22
- package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +20 -15
- package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +29 -22
- package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/launch/page.js +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 +32 -24
- package/.next/standalone/.next/server/app/launch.segments/_full.segment.rsc +32 -24
- package/.next/standalone/.next/server/app/launch.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/launch.segments/launch/__PAGE__.segment.rsc +23 -18
- package/.next/standalone/.next/server/app/page.js +1 -1
- package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/paths/page.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 +32 -24
- package/.next/standalone/.next/server/app/paths.segments/_full.segment.rsc +32 -24
- package/.next/standalone/.next/server/app/paths.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/paths.segments/paths/__PAGE__.segment.rsc +21 -18
- package/.next/standalone/.next/server/app/profile/page.js +1 -1
- package/.next/standalone/.next/server/app/profile/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/profile/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/profile.html +1 -1
- package/.next/standalone/.next/server/app/profile.rsc +32 -24
- package/.next/standalone/.next/server/app/profile.segments/_full.segment.rsc +32 -24
- package/.next/standalone/.next/server/app/profile.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/profile.segments/profile/__PAGE__.segment.rsc +23 -18
- package/.next/standalone/.next/server/app/queue/page.js +1 -1
- 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 +32 -24
- package/.next/standalone/.next/server/app/queue.segments/_full.segment.rsc +32 -24
- package/.next/standalone/.next/server/app/queue.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/queue.segments/queue/__PAGE__.segment.rsc +20 -18
- package/.next/standalone/.next/server/app/scores/page.js +1 -1
- 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 +32 -24
- package/.next/standalone/.next/server/app/scores.segments/_full.segment.rsc +32 -24
- package/.next/standalone/.next/server/app/scores.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/scores.segments/scores/__PAGE__.segment.rsc +23 -18
- package/.next/standalone/.next/server/app/settings/page.js +1 -1
- 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 +32 -24
- package/.next/standalone/.next/server/app/settings.segments/_full.segment.rsc +32 -24
- package/.next/standalone/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +20 -18
- package/.next/standalone/.next/server/app/setup/page.js +1 -1
- package/.next/standalone/.next/server/app/setup/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/setup/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/setup.html +1 -1
- package/.next/standalone/.next/server/app/setup.rsc +32 -24
- package/.next/standalone/.next/server/app/setup.segments/_full.segment.rsc +32 -24
- package/.next/standalone/.next/server/app/setup.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/setup.segments/setup/__PAGE__.segment.rsc +21 -18
- package/.next/standalone/.next/server/app/social/page.js +1 -1
- 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 +32 -24
- package/.next/standalone/.next/server/app/social.segments/_full.segment.rsc +32 -24
- package/.next/standalone/.next/server/app/social.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/social.segments/social/__PAGE__.segment.rsc +23 -18
- package/.next/standalone/.next/server/app-paths-manifest.json +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__00la_y0._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__05_3-22._.js +1 -1
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__15wc9e-._.js โ [root-of-the-server]__063s0x7._.js} +2 -2
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__066rab1._.js +7 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__07t47cm._.js +1 -1
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__13dx4sd._.js โ [root-of-the-server]__0_4y8z7._.js} +3 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0cj5jqc._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0e0fei3._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0fooke1._.js +7 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0ljnyho._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0o5-tcg._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0qrnous._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0t3v1a1._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0t6y79e._.js +7 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0wmexuc._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0x29muh._.js +7 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0xu34sz._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__133knx1._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__15-17hl._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__19b7mig._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1a_6x37._.js +8 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1an_8pa._.js +7 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1bbcwub._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1ducpz2._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1eris29._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1gjo_cq._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1qcm08_._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1tir0vc._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1w25q0m._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1xhyinn._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__20rwfdw._.js +1 -1
- package/.next/standalone/.next/server/chunks/_02twlca._.js +1 -1
- package/.next/standalone/.next/server/chunks/_072jl0y._.js +1 -1
- package/.next/standalone/.next/server/chunks/_0lw8_i0._.js +1 -1
- package/.next/standalone/.next/server/chunks/_0sqqpzb._.js +3 -0
- package/.next/standalone/.next/server/chunks/_1_fynia._.js +7 -7
- package/.next/standalone/.next/server/chunks/_1fn30_l._.js +1 -1
- 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/_next-internal_server_app_api_data_backup_route_actions_0zoj04p.js +3 -0
- package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_data_csv_route_actions_0l6m7lg.js +3 -0
- package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_data_restore_route_actions_0-b05bv.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_02iz_9q._.js +4 -0
- package/.next/standalone/.next/server/chunks/lib_05agvk3._.js +4 -0
- package/.next/standalone/.next/server/chunks/lib_0v84u66._.js +4 -0
- package/.next/standalone/.next/server/chunks/lib_db-client_0_dch35.js +174 -0
- package/.next/standalone/.next/server/chunks/lib_linkedin-export_12imqxg.js +1 -1
- package/.next/standalone/.next/server/chunks/lib_rpc_005abye.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_0b17r6v.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_0c9d9ti.js +7 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_0doq0t-.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_0fd2rlw.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_0is4qoc.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_0jnfp2e.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_0nef_n7.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_0plrzra.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_13a4m0c.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_1if17c-.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_1j-zw7v.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_1sngt-q.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_1v2sgme.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_1vh-tgx.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_1zaubz7.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0qd8pzm._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0qdeuyo._.js โ [root-of-the-server]__1-012q1._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_01o3i5y._.js +7 -0
- package/.next/standalone/.next/server/chunks/ssr/_02sband._.js +7 -0
- package/.next/standalone/.next/server/chunks/ssr/_06rgzfh._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_07zb7lu._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_0_79idq._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_0gy11ar._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_0hb-dhy._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_14nxd3q._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_189g8lg._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_1f_n00p._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_1fm1ih_._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_1k2nmbw._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_1k9qfsk._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/app_141w189._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/app_components_0t908t-._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/app_components_0uuff77._.js +25 -2
- package/.next/standalone/.next/server/chunks/ssr/app_components_1j3q-h5._.js +25 -2
- package/.next/standalone/.next/server/chunks/ssr/app_components_CompanyScores_1g0mytz.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/app_import_page_1fmu6_l.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/app_launch_page_19t0dyd.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/app_page_1fazqbf.js +25 -13
- 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 +11 -11
- 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 +12 -13
- package/.next/standalone/.next/server/chunks/ssr/app_social_page_0h7zxda.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{lib_1c4ieuw._.js โ lib_csv_1ttiu_h.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/lib_galaxy-lab_108_lu-.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/lib_separation_1305zsx.js +3 -0
- package/.next/standalone/.next/server/edge/chunks/[root-of-the-server]__0pco7a6._.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/03-_esd2x_yk6.js +1 -0
- package/.next/standalone/.next/static/chunks/03-demj2iy-0p.js +44 -0
- package/.next/standalone/.next/static/chunks/0_1r-3csplxnj.js +1 -0
- package/.next/standalone/.next/static/chunks/0an_b6zi1r_qq.js +5 -0
- package/.next/standalone/.next/static/chunks/0e3g0sil79cus.js +21 -0
- package/.next/standalone/.next/static/chunks/0kscsqnvfq3-r.js +1 -0
- package/.next/standalone/.next/static/chunks/0p3g5tfostsep.js +7 -0
- package/.next/standalone/.next/static/chunks/0zd0t7e60bn4z.js +1 -0
- package/.next/standalone/.next/static/chunks/163b-20vwa06i.js +34 -0
- package/.next/standalone/.next/static/chunks/{0ws7zy0w57ufi.js โ 1eyajb9ntzlrl.js} +1 -1
- package/.next/standalone/.next/static/chunks/1pa-2v1ajvrko.js +1 -0
- package/.next/standalone/.next/static/chunks/1qbjermbf68xj.js +1 -0
- package/.next/standalone/.next/static/chunks/1z9lb-dbcg4aa.js +1 -0
- package/.next/standalone/.next/static/chunks/23_1z47al92nz.js +57 -0
- package/.next/standalone/.next/static/chunks/260bomtr214m8.js +34 -0
- package/.next/standalone/.next/static/chunks/2eo9pqq9gay3r.js +34 -0
- package/.next/standalone/.next/static/chunks/2xk2ra4piiuod.js +34 -0
- package/.next/standalone/.next/static/chunks/2z1-q0_vunbql.js +2 -0
- package/.next/standalone/.next/static/chunks/2zf4jmz9l3li2.js +1 -0
- package/.next/standalone/.next/static/chunks/34g73qhayuevu.js +1 -0
- package/.next/standalone/.next/static/chunks/3b0-14cxqsprt.js +1 -0
- package/.next/standalone/.next/static/chunks/3jarus1_38s2z.js +1 -0
- package/.next/standalone/.next/static/chunks/3ssu341hav_sq.css +3 -0
- package/.next/standalone/.next/static/chunks/3v1qd3sqhqn0d.js +1 -0
- package/.next/standalone/.next/static/chunks/43pg2sursiypz.js +1 -0
- package/.next/standalone/.next/static/chunks/44yn0tcd9dfk3.js +1 -0
- package/.next/standalone/CHANGELOG.md +143 -0
- package/.next/standalone/README.md +71 -49
- package/.next/standalone/SECURITY.md +17 -11
- package/.next/standalone/app/api/data/backup/route.js +25 -0
- package/.next/standalone/app/api/data/csv/route.js +74 -0
- package/.next/standalone/app/api/data/export/route.js +1 -1
- package/.next/standalone/app/api/data/restore/route.js +48 -0
- package/.next/standalone/app/api/data/reveal/route.js +19 -6
- package/.next/standalone/app/api/data/route.js +15 -4
- package/.next/standalone/app/api/ingest/route.js +1 -1
- package/.next/standalone/app/api/queue/route.js +1 -1
- package/.next/standalone/app/api/scraper/route.js +120 -32
- package/.next/standalone/app/api/social/crm/route.js +2 -1
- package/.next/standalone/app/components/AppHeader.js +20 -16
- package/.next/standalone/app/components/AppTabs.js +8 -8
- package/.next/standalone/app/components/AutoScanButton.js +2 -2
- package/.next/standalone/app/components/Avatar.js +1 -1
- package/.next/standalone/app/components/ChainView.js +184 -112
- package/.next/standalone/app/components/CirclePanel.js +16 -16
- package/.next/standalone/app/components/ClusterSpinner.js +64 -0
- package/.next/standalone/app/components/CompanyScores.js +20 -20
- package/.next/standalone/app/components/EmptyState.js +39 -18
- package/.next/standalone/app/components/FieldStep.js +15 -13
- package/.next/standalone/app/components/FilterPanel.js +17 -17
- package/.next/standalone/app/components/ForceGraph.js +49 -14
- package/.next/standalone/app/components/GalaxyLab.js +33 -33
- package/.next/standalone/app/components/GridView.js +18 -18
- package/.next/standalone/app/components/LegacyScoresCard.js +10 -11
- package/.next/standalone/app/components/LinkedInLimits.js +24 -19
- package/.next/standalone/app/components/LiquidGlass.js +99 -0
- package/.next/standalone/app/components/ListView.js +20 -20
- package/.next/standalone/app/components/MapControls.js +5 -5
- package/.next/standalone/app/components/MappingProgress.js +16 -16
- package/.next/standalone/app/components/NoteDetail.js +13 -13
- package/.next/standalone/app/components/OnboardingGate.js +4 -4
- package/.next/standalone/app/components/OutlinkQuest.js +25 -25
- package/.next/standalone/app/components/PathsAnalyzer.js +37 -36
- package/.next/standalone/app/components/PeopleMap.js +21 -21
- package/.next/standalone/app/components/RingsView.js +11 -11
- package/.next/standalone/app/components/ScanRadar.js +84 -39
- package/.next/standalone/app/components/ScanStatusBar.js +22 -18
- package/.next/standalone/app/components/ScanTrail.js +8 -5
- package/.next/standalone/app/components/SeparationView.js +168 -104
- package/.next/standalone/app/components/Sidebar.js +161 -161
- package/.next/standalone/app/components/StaleServerBanner.js +4 -4
- package/.next/standalone/app/components/TheirCircle.js +26 -26
- package/.next/standalone/app/components/ThemeDefs.js +42 -0
- package/.next/standalone/app/components/ThemeLoader.js +20 -1
- package/.next/standalone/app/components/UpdatePanel.js +22 -22
- package/.next/standalone/app/components/UserProvider.js +22 -15
- package/.next/standalone/app/components/settings/AppearanceSection.js +47 -24
- package/.next/standalone/app/components/settings/DataSection.js +276 -109
- package/.next/standalone/app/components/settings/NetworkHealthSection.js +13 -13
- package/.next/standalone/app/components/settings/SectorPicker.js +12 -12
- package/.next/standalone/app/components/settings/SectorSection.js +13 -14
- package/.next/standalone/app/components/settings/TierSection.js +9 -9
- package/.next/standalone/app/components/settings/TitleSection.js +11 -11
- package/.next/standalone/app/components/settings/UsageSection.js +313 -0
- package/.next/standalone/app/components/ui.js +8 -8
- package/.next/standalone/app/globals.css +159 -2
- package/.next/standalone/app/import/page.js +94 -38
- package/.next/standalone/app/launch/page.js +5 -5
- package/.next/standalone/app/layout.js +6 -2
- package/.next/standalone/app/page.js +53 -37
- package/.next/standalone/app/paths/page.js +63 -63
- package/.next/standalone/app/profile/page.js +58 -58
- package/.next/standalone/app/queue/page.js +54 -54
- package/.next/standalone/app/scores/page.js +2 -2
- package/.next/standalone/app/settings/page.js +16 -13
- package/.next/standalone/app/setup/page.js +221 -125
- package/.next/standalone/app/social/Crm.js +63 -62
- package/.next/standalone/app/social/SocialHub.js +22 -22
- package/.next/standalone/app/social/Thread.js +7 -7
- package/.next/standalone/app/social/page.js +2 -2
- package/.next/standalone/lib/backups.js +458 -0
- package/.next/standalone/lib/chain-layout.js +32 -0
- package/.next/standalone/lib/csv-store.js +131 -0
- package/.next/standalone/lib/csv.js +137 -39
- package/.next/standalone/lib/data-folder.js +19 -3
- package/.next/standalone/lib/data-import.js +5 -2
- package/.next/standalone/lib/db-client.js +78 -20
- package/.next/standalone/lib/demo.js +5 -4
- package/.next/standalone/lib/galaxy-export.js +9 -2
- package/.next/standalone/lib/galaxy-lab.js +19 -5
- package/.next/standalone/lib/galaxy-layouts.js +43 -0
- package/.next/standalone/lib/gate.js +10 -4
- package/.next/standalone/lib/ingest.js +1 -1
- package/.next/standalone/lib/linkedin-limits.js +212 -11
- package/.next/standalone/lib/liquid-glass.js +59 -0
- package/.next/standalone/lib/notifications.js +13 -0
- package/.next/standalone/lib/scan-pace.js +11 -0
- package/.next/standalone/lib/scan-progress.js +20 -0
- package/.next/standalone/lib/scan-risk.js +44 -0
- package/.next/standalone/lib/scanner-setup.js +97 -15
- package/.next/standalone/lib/scraper-client.js +17 -3
- package/.next/standalone/lib/search-risk.js +7 -3
- package/.next/standalone/lib/settings-client.js +5 -3
- package/.next/standalone/lib/settings.js +10 -0
- package/.next/standalone/lib/social-store.js +3 -2
- package/.next/standalone/lib/synced-setting.js +46 -0
- package/.next/standalone/lib/theme-store.js +42 -10
- package/.next/standalone/lib/themes.js +111 -21
- package/.next/standalone/lib/usage.js +195 -0
- package/.next/standalone/package-lock.json +2 -2
- package/.next/standalone/package.json +1 -1
- package/.next/standalone/scripts/scrape.py +26 -2
- package/.next/static/chunks/03-_esd2x_yk6.js +1 -0
- package/.next/static/chunks/03-demj2iy-0p.js +44 -0
- package/.next/static/chunks/0_1r-3csplxnj.js +1 -0
- package/.next/static/chunks/0an_b6zi1r_qq.js +5 -0
- package/.next/static/chunks/0e3g0sil79cus.js +21 -0
- package/.next/static/chunks/0kscsqnvfq3-r.js +1 -0
- package/.next/static/chunks/0p3g5tfostsep.js +7 -0
- package/.next/static/chunks/0zd0t7e60bn4z.js +1 -0
- package/.next/static/chunks/163b-20vwa06i.js +34 -0
- package/.next/static/chunks/{0ws7zy0w57ufi.js โ 1eyajb9ntzlrl.js} +1 -1
- package/.next/static/chunks/1pa-2v1ajvrko.js +1 -0
- package/.next/static/chunks/1qbjermbf68xj.js +1 -0
- package/.next/static/chunks/1z9lb-dbcg4aa.js +1 -0
- package/.next/static/chunks/23_1z47al92nz.js +57 -0
- package/.next/static/chunks/260bomtr214m8.js +34 -0
- package/.next/static/chunks/2eo9pqq9gay3r.js +34 -0
- package/.next/static/chunks/2xk2ra4piiuod.js +34 -0
- package/.next/static/chunks/2z1-q0_vunbql.js +2 -0
- package/.next/static/chunks/2zf4jmz9l3li2.js +1 -0
- package/.next/static/chunks/34g73qhayuevu.js +1 -0
- package/.next/static/chunks/3b0-14cxqsprt.js +1 -0
- package/.next/static/chunks/3jarus1_38s2z.js +1 -0
- package/.next/static/chunks/3ssu341hav_sq.css +3 -0
- package/.next/static/chunks/3v1qd3sqhqn0d.js +1 -0
- package/.next/static/chunks/43pg2sursiypz.js +1 -0
- package/.next/static/chunks/44yn0tcd9dfk3.js +1 -0
- package/CHANGELOG.md +143 -0
- package/README.md +71 -49
- package/SECURITY.md +17 -11
- package/lib/backups.js +458 -0
- package/lib/chain-layout.js +32 -0
- package/lib/csv-store.js +131 -0
- package/lib/csv.js +137 -39
- package/lib/data-folder.js +19 -3
- package/lib/data-import.js +5 -2
- package/lib/db-client.js +78 -20
- package/lib/demo.js +5 -4
- package/lib/galaxy-export.js +9 -2
- package/lib/galaxy-lab.js +19 -5
- package/lib/galaxy-layouts.js +43 -0
- package/lib/gate.js +10 -4
- package/lib/ingest.js +1 -1
- package/lib/linkedin-limits.js +212 -11
- package/lib/liquid-glass.js +59 -0
- package/lib/notifications.js +13 -0
- package/lib/scan-pace.js +11 -0
- package/lib/scan-progress.js +20 -0
- package/lib/scan-risk.js +44 -0
- package/lib/scanner-setup.js +97 -15
- package/lib/scraper-client.js +17 -3
- package/lib/search-risk.js +7 -3
- package/lib/settings-client.js +5 -3
- package/lib/settings.js +10 -0
- package/lib/social-store.js +3 -2
- package/lib/synced-setting.js +46 -0
- package/lib/theme-store.js +42 -10
- package/lib/themes.js +111 -21
- package/lib/usage.js +195 -0
- package/package.json +1 -1
- package/scripts/scrape.py +26 -2
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0-rnla2._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__14ou7j5._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__16iu0hv._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1kbl21f._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1rphsdk._.js +0 -3
- package/.next/standalone/.next/server/chunks/lib_0851sk0._.js +0 -8
- package/.next/standalone/.next/server/chunks/lib_1q7p2ro._.js +0 -8
- package/.next/standalone/.next/server/chunks/lib_1r6l86l._.js +0 -8
- package/.next/standalone/.next/server/chunks/lib_db-client_15le7cw.js +0 -174
- package/.next/standalone/.next/server/chunks/lib_rpc_04s8mzr.js +0 -3
- package/.next/standalone/.next/server/chunks/lib_rpc_053z7as.js +0 -3
- package/.next/standalone/.next/server/chunks/lib_rpc_0b_-2te.js +0 -3
- package/.next/standalone/.next/server/chunks/lib_rpc_0dhbxdm.js +0 -3
- package/.next/standalone/.next/server/chunks/lib_rpc_0dxlk31.js +0 -3
- package/.next/standalone/.next/server/chunks/lib_rpc_0f8b-qc.js +0 -3
- package/.next/standalone/.next/server/chunks/lib_rpc_0pzie7_.js +0 -3
- package/.next/standalone/.next/server/chunks/lib_rpc_0r76fq_.js +0 -3
- package/.next/standalone/.next/server/chunks/lib_rpc_0ut7pjp.js +0 -3
- package/.next/standalone/.next/server/chunks/lib_rpc_15zyqaz.js +0 -3
- package/.next/standalone/.next/server/chunks/lib_rpc_18zpjtq.js +0 -3
- package/.next/standalone/.next/server/chunks/lib_rpc_1a8xkiz.js +0 -3
- package/.next/standalone/.next/server/chunks/lib_rpc_1e_55xo.js +0 -3
- package/.next/standalone/.next/server/chunks/lib_rpc_1oxfd1_.js +0 -3
- package/.next/standalone/.next/server/chunks/lib_rpc_1s0lod0.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__08oxiqh._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_03l7vge._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_08g31gm._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_0gk_ofx._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_0nwsf93._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_0vho1lb._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_1-658fq._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_1bc46kz._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_2105jz8._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/app_components_settings_SectorPicker_1c-29qw.js +0 -3
- package/.next/standalone/.next/static/chunks/02pq76u7y4v9-.js +0 -22
- package/.next/standalone/.next/static/chunks/0cmq0exd4d0h9.js +0 -1
- package/.next/standalone/.next/static/chunks/0i02yxppzds1o.js +0 -1
- package/.next/standalone/.next/static/chunks/0m_p4k-q2qh--.js +0 -1
- package/.next/standalone/.next/static/chunks/0oyslj62jkubd.js +0 -1
- package/.next/standalone/.next/static/chunks/0vo-l8hxneba6.css +0 -3
- package/.next/standalone/.next/static/chunks/0yh8z2tbrc5i_.js +0 -1
- package/.next/standalone/.next/static/chunks/17-rhp8sg4m1b.js +0 -44
- package/.next/standalone/.next/static/chunks/172e10mi-tpo_.js +0 -34
- package/.next/standalone/.next/static/chunks/1ei5vbe2uw6fl.js +0 -1
- package/.next/standalone/.next/static/chunks/1f7_pl_wq7lh3.js +0 -11
- package/.next/standalone/.next/static/chunks/1jzbe7zdx9vbj.js +0 -2
- package/.next/standalone/.next/static/chunks/1m3017gp790pw.js +0 -45
- package/.next/standalone/.next/static/chunks/1t20e8u0st7ep.js +0 -1
- package/.next/standalone/.next/static/chunks/2-ch9rm27eril.js +0 -11
- package/.next/standalone/.next/static/chunks/2ldv-v3s9yaif.js +0 -1
- package/.next/standalone/.next/static/chunks/3bp284gjf7dyq.js +0 -1
- package/.next/standalone/.next/static/chunks/3k1f6clbn3gj3.js +0 -7
- package/.next/standalone/.next/static/chunks/3l4t8je6iguzc.js +0 -1
- package/.next/standalone/.next/static/chunks/3tplzuc9jk-tl.js +0 -1
- package/.next/standalone/.next/static/chunks/42m0bqr8pbovz.js +0 -11
- package/.next/static/chunks/02pq76u7y4v9-.js +0 -22
- package/.next/static/chunks/0cmq0exd4d0h9.js +0 -1
- package/.next/static/chunks/0i02yxppzds1o.js +0 -1
- package/.next/static/chunks/0m_p4k-q2qh--.js +0 -1
- package/.next/static/chunks/0oyslj62jkubd.js +0 -1
- package/.next/static/chunks/0vo-l8hxneba6.css +0 -3
- package/.next/static/chunks/0yh8z2tbrc5i_.js +0 -1
- package/.next/static/chunks/17-rhp8sg4m1b.js +0 -44
- package/.next/static/chunks/172e10mi-tpo_.js +0 -34
- package/.next/static/chunks/1ei5vbe2uw6fl.js +0 -1
- package/.next/static/chunks/1f7_pl_wq7lh3.js +0 -11
- package/.next/static/chunks/1jzbe7zdx9vbj.js +0 -2
- package/.next/static/chunks/1m3017gp790pw.js +0 -45
- package/.next/static/chunks/1t20e8u0st7ep.js +0 -1
- package/.next/static/chunks/2-ch9rm27eril.js +0 -11
- package/.next/static/chunks/2ldv-v3s9yaif.js +0 -1
- package/.next/static/chunks/3bp284gjf7dyq.js +0 -1
- package/.next/static/chunks/3k1f6clbn3gj3.js +0 -7
- package/.next/static/chunks/3l4t8je6iguzc.js +0 -1
- package/.next/static/chunks/3tplzuc9jk-tl.js +0 -1
- package/.next/static/chunks/42m0bqr8pbovz.js +0 -11
- /package/.next/standalone/.next/static/{dQUvvVSXqbkEFC3-CNcwT โ ZVpLBK-2vpllv2HxOFs2d}/_buildManifest.js +0 -0
- /package/.next/standalone/.next/static/{dQUvvVSXqbkEFC3-CNcwT โ ZVpLBK-2vpllv2HxOFs2d}/_clientMiddlewareManifest.js +0 -0
- /package/.next/standalone/.next/static/{dQUvvVSXqbkEFC3-CNcwT โ ZVpLBK-2vpllv2HxOFs2d}/_ssgManifest.js +0 -0
- /package/.next/static/{dQUvvVSXqbkEFC3-CNcwT โ ZVpLBK-2vpllv2HxOFs2d}/_buildManifest.js +0 -0
- /package/.next/static/{dQUvvVSXqbkEFC3-CNcwT โ ZVpLBK-2vpllv2HxOFs2d}/_clientMiddlewareManifest.js +0 -0
- /package/.next/static/{dQUvvVSXqbkEFC3-CNcwT โ ZVpLBK-2vpllv2HxOFs2d}/_ssgManifest.js +0 -0
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import { Suspense, useEffect, useState, useRef, useMemo, useCallback } from 'react';
|
|
4
4
|
import { useSearchParams } from 'next/navigation';
|
|
5
|
-
import {
|
|
5
|
+
import { fillsCircles, loadScanNotes, NO_SCAN_NOTES } from '../lib/scraper-client';
|
|
6
6
|
import useScanner from './components/useScanner';
|
|
7
7
|
import useRequests from './components/useRequests';
|
|
8
8
|
import { requestCount } from '../lib/requests-client';
|
|
@@ -18,7 +18,7 @@ import OnboardingGate from './components/OnboardingGate';
|
|
|
18
18
|
import EmptyState from './components/EmptyState';
|
|
19
19
|
import { useUser } from './components/UserProvider';
|
|
20
20
|
import { IS_DEMO, loadDemoNetwork } from '../lib/demo';
|
|
21
|
-
import {
|
|
21
|
+
import { loadCsvNetwork, closeCsvNetwork, REMOVE_CSV_QUESTION } from '../lib/csv';
|
|
22
22
|
import Link from 'next/link';
|
|
23
23
|
import AppHeader from './components/AppHeader';
|
|
24
24
|
import { networkLevel } from '../lib/level';
|
|
@@ -110,10 +110,11 @@ function HomeInner() {
|
|
|
110
110
|
useEffect(() => {
|
|
111
111
|
if (!userId) return;
|
|
112
112
|
async function load() {
|
|
113
|
-
//
|
|
114
|
-
//
|
|
115
|
-
//
|
|
116
|
-
|
|
113
|
+
// Three possible sources: the bundled demo snapshot (demo mode), the
|
|
114
|
+
// sample opened in this tab or a CSV import kept in the data folder
|
|
115
|
+
// (1st degree only, never in the database), or the database. Which one
|
|
116
|
+
// is lib/csv.js openNetworkSource: a scan you've made wins over a CSV.
|
|
117
|
+
const csv = await loadCsvNetwork();
|
|
117
118
|
if (csv) { setCsvMode(true); setCsvSource(csv.source || 'csv'); }
|
|
118
119
|
const { degree1: d1, degree2: d2, degree3: d3 = [] } = IS_DEMO
|
|
119
120
|
? await loadDemoNetwork()
|
|
@@ -129,11 +130,9 @@ function HomeInner() {
|
|
|
129
130
|
shapeRef.current = networkShape(d1, d2);
|
|
130
131
|
setStats(statsFor(d1, d2));
|
|
131
132
|
setLoading(false);
|
|
133
|
+
if (!IS_DEMO && !csv) loadScanNotes().then(setScanNotes);
|
|
132
134
|
}
|
|
133
135
|
load();
|
|
134
|
-
if (!IS_DEMO && !hasCsvNetwork()) {
|
|
135
|
-
loadScanNotes().then(setScanNotes);
|
|
136
|
-
}
|
|
137
136
|
}, [userId]);
|
|
138
137
|
|
|
139
138
|
// The network again, after a scan: circles fill in while they're scanned
|
|
@@ -141,7 +140,7 @@ function HomeInner() {
|
|
|
141
140
|
// is published, because the graph views rebuild their scene whenever these
|
|
142
141
|
// lists change identity (TRAPS ยง29).
|
|
143
142
|
const reload = useCallback(async () => {
|
|
144
|
-
if (IS_DEMO ||
|
|
143
|
+
if (IS_DEMO || csvMode || !userId) return;
|
|
145
144
|
try {
|
|
146
145
|
const [{ degree1: d1, degree2: d2, degree3: d3 = [] }, notes] = await Promise.all([loadNetwork(userId), loadScanNotes()]);
|
|
147
146
|
setScanNotes((prev) => (JSON.stringify(prev) === JSON.stringify(notes) ? prev : notes));
|
|
@@ -153,7 +152,7 @@ function HomeInner() {
|
|
|
153
152
|
setDegree2(d2);
|
|
154
153
|
setStats(statsFor(d1, d2));
|
|
155
154
|
} catch { /* the app restarting, say: keep what's on screen */ }
|
|
156
|
-
}, [userId]);
|
|
155
|
+
}, [userId, csvMode]);
|
|
157
156
|
|
|
158
157
|
// Followed once: Bridge Chains has opened it, so leaving that view and coming
|
|
159
158
|
// back, or reloading, starts from the overview.
|
|
@@ -249,9 +248,9 @@ function HomeInner() {
|
|
|
249
248
|
|
|
250
249
|
if (loading) {
|
|
251
250
|
return (
|
|
252
|
-
<div style={{ minHeight: '100vh', display: 'flex', flexDirection: 'column', alignItems: 'center', justifyContent: 'center', background: 'var(--sd-page)', color: '#fff' }}>
|
|
251
|
+
<div style={{ minHeight: '100vh', display: 'flex', flexDirection: 'column', alignItems: 'center', justifyContent: 'center', background: 'var(--sd-page)', color: 'var(--sd-fg-1, #fff)' }}>
|
|
253
252
|
<div style={{ fontSize: 24, fontWeight: 700 }}>Loading Six Degreesโฆ</div>
|
|
254
|
-
<div style={{ fontSize: 14, color: '#888', marginTop: 8 }}>Mapping your LinkedIn network</div>
|
|
253
|
+
<div style={{ fontSize: 14, color: 'var(--sd-fg-3, #888)', marginTop: 8 }}>Mapping your LinkedIn network</div>
|
|
255
254
|
</div>
|
|
256
255
|
);
|
|
257
256
|
}
|
|
@@ -260,7 +259,7 @@ function HomeInner() {
|
|
|
260
259
|
const canScan = !IS_DEMO && !csvMode;
|
|
261
260
|
|
|
262
261
|
return (
|
|
263
|
-
<div data-map style={{ height: '100vh', overflow: 'hidden', background: 'var(--sd-page)', color: '#fff', fontFamily: 'var(--sd-font)' }}>
|
|
262
|
+
<div data-map style={{ height: '100vh', overflow: 'hidden', background: 'var(--sd-page)', color: 'var(--sd-fg-1, #fff)', fontFamily: 'var(--sd-font)' }}>
|
|
264
263
|
<AppHeader
|
|
265
264
|
active={mode}
|
|
266
265
|
isMobile={isMobile}
|
|
@@ -271,27 +270,34 @@ function HomeInner() {
|
|
|
271
270
|
openNoteId={linkedNote}
|
|
272
271
|
// Which network you are looking at, and the way back out of it. Loading
|
|
273
272
|
// the sample used to be a one-way door: it lives in sessionStorage, and
|
|
274
|
-
// nothing in the UI cleared it.
|
|
273
|
+
// nothing in the UI cleared it. A CSV import is kept in the data folder
|
|
274
|
+
// now, so ร is how it's removed for good, and it asks first, as every
|
|
275
|
+
// delete of something kept on this computer does.
|
|
275
276
|
chips={csvMode && (
|
|
276
277
|
<div style={{
|
|
277
278
|
display: 'flex', alignItems: 'center', gap: 6,
|
|
278
279
|
marginLeft: isMobile ? 4 : 10, padding: isMobile ? '4px 8px' : '5px 10px',
|
|
279
|
-
borderRadius: 999, background: 'rgba(255,255,255,0.05)',
|
|
280
|
-
border: '1px solid rgba(255,255,255,0.12)',
|
|
280
|
+
borderRadius: 999, background: 'rgba(var(--sd-ink, 255, 255, 255), 0.05)',
|
|
281
|
+
border: '1px solid rgba(var(--sd-ink, 255, 255, 255), 0.12)',
|
|
281
282
|
}}>
|
|
282
283
|
<span style={{
|
|
283
284
|
width: 6, height: 6, borderRadius: '50%',
|
|
284
285
|
background: csvSource === 'sample' ? '#9B59B6' : '#2ecc71',
|
|
285
286
|
}} />
|
|
286
|
-
<span style={{ fontSize: isMobile ? 10 : 12, color: 'rgba(255,255,255,0.65)', whiteSpace: 'nowrap' }}>
|
|
287
|
+
<span style={{ fontSize: isMobile ? 10 : 12, color: 'rgba(var(--sd-ink, 255, 255, 255), 0.65)', whiteSpace: 'nowrap' }}>
|
|
287
288
|
{csvSource === 'sample' ? 'Sample network' : 'Your CSV'}
|
|
288
289
|
</span>
|
|
289
290
|
<button
|
|
290
|
-
onClick={() => {
|
|
291
|
-
|
|
291
|
+
onClick={async () => {
|
|
292
|
+
if (csvSource !== 'sample' && !window.confirm(REMOVE_CSV_QUESTION)) return;
|
|
293
|
+
const closed = await closeCsvNetwork(csvSource);
|
|
294
|
+
if (!closed.ok) { alert(closed.error); return; }
|
|
295
|
+
window.location.href = '/';
|
|
296
|
+
}}
|
|
297
|
+
title={csvSource === 'sample' ? 'Leave the sample network' : 'Remove this import from this computer'}
|
|
292
298
|
style={{
|
|
293
299
|
border: 'none', background: 'transparent', cursor: 'pointer',
|
|
294
|
-
color: '#888', fontSize: isMobile ? 13 : 15, lineHeight: 1,
|
|
300
|
+
color: 'var(--sd-fg-3, #888)', fontSize: isMobile ? 13 : 15, lineHeight: 1,
|
|
295
301
|
padding: '0 0 0 2px',
|
|
296
302
|
}}
|
|
297
303
|
>
|
|
@@ -304,7 +310,7 @@ function HomeInner() {
|
|
|
304
310
|
{isDegreesMode && !csvMode && pendingCount > 0 && (
|
|
305
311
|
<Link href="/queue" style={{
|
|
306
312
|
padding: '5px 12px', borderRadius: 16, fontSize: 12, fontWeight: 600, textDecoration: 'none',
|
|
307
|
-
background: 'rgba(255,107,53,0.12)', color: '#FF6B35',
|
|
313
|
+
background: 'rgba(255,107,53,0.12)', color: 'var(--sd-orange, #FF6B35)',
|
|
308
314
|
border: '1px solid rgba(255,107,53,0.25)',
|
|
309
315
|
display: 'inline-flex', alignItems: 'center', gap: 5,
|
|
310
316
|
}}>
|
|
@@ -330,8 +336,11 @@ function HomeInner() {
|
|
|
330
336
|
// No connections at all: offer a way in rather than a black screen.
|
|
331
337
|
if (degree1.length === 0) return <EmptyState />;
|
|
332
338
|
|
|
333
|
-
// Every Degrees surface is built from 2nd-degree rows
|
|
334
|
-
//
|
|
339
|
+
// Every Degrees surface is built from 2nd-degree rows, so with none
|
|
340
|
+
// say why instead of rendering an empty canvas. Why depends on where
|
|
341
|
+
// the network came from: a CSV import (csvMode) can never have them,
|
|
342
|
+
// while a scanned network just hasn't had step 4 yet. It used to tell
|
|
343
|
+
// everyone the CSV reason, scanner users included.
|
|
335
344
|
if (isDegreesMode && degree2.length === 0) {
|
|
336
345
|
return (
|
|
337
346
|
<div style={{
|
|
@@ -340,16 +349,21 @@ function HomeInner() {
|
|
|
340
349
|
}}>
|
|
341
350
|
<div style={{ maxWidth: 440 }}>
|
|
342
351
|
<div style={{ fontSize: 40, marginBottom: 16, opacity: 0.5 }}>🔗</div>
|
|
343
|
-
<h2 style={{ fontSize: 22, fontWeight: 800, margin: '0 0 12px', color: '#fff' }}>
|
|
344
|
-
Degrees need 2nd-degree data
|
|
352
|
+
<h2 style={{ fontSize: 22, fontWeight: 800, margin: '0 0 12px', color: 'var(--sd-fg-1, #fff)' }}>
|
|
353
|
+
{csvMode ? 'Degrees need 2nd-degree data' : 'Who they know comes next'}
|
|
345
354
|
</h2>
|
|
346
|
-
<p style={{ color: 'rgba(255,255,255,0.45)', fontSize: 14, lineHeight: 1.7, margin: '0 0 20px' }}>
|
|
347
|
-
This view maps who <em>your connections</em>{' '}know
|
|
348
|
-
|
|
355
|
+
<p style={{ color: 'rgba(var(--sd-ink, 255, 255, 255), 0.45)', fontSize: 14, lineHeight: 1.7, margin: '0 0 20px' }}>
|
|
356
|
+
This view maps who <em>your connections</em>{' '}know: the people you haven’t met yet.{' '}
|
|
357
|
+
{csvMode
|
|
358
|
+
? <>LinkedIn’s CSV export only covers your own 1st-degree list, so there are no circles to open here.</>
|
|
359
|
+
: <>Your own connections are mapped. Step 4 on the Scan page reads their circles, one person at a
|
|
360
|
+
time: the first shows up here in a few minutes, and the rest fill in over days.</>}
|
|
349
361
|
</p>
|
|
350
|
-
<p style={{ color: '#666', fontSize: 13, lineHeight: 1.7, margin: 0 }}>
|
|
351
|
-
The local scanner maps those circles (and captures real photos).{' '}
|
|
352
|
-
<Link href="/setup" style={{ color: '#3498DB', textDecoration: 'none' }}>
|
|
362
|
+
<p style={{ color: 'var(--sd-fg-4, #666)', fontSize: 13, lineHeight: 1.7, margin: 0 }}>
|
|
363
|
+
{csvMode ? <>The local scanner maps those circles (and captures real photos).{' '}</> : null}
|
|
364
|
+
<Link href="/setup" style={{ color: 'var(--sd-blue, #3498DB)', textDecoration: 'none' }}>
|
|
365
|
+
{csvMode ? 'Set up scanning' : 'Map who they know'} →
|
|
366
|
+
</Link>
|
|
353
367
|
</p>
|
|
354
368
|
</div>
|
|
355
369
|
</div>
|
|
@@ -428,14 +442,16 @@ function networkShape(d1, d2) {
|
|
|
428
442
|
}
|
|
429
443
|
|
|
430
444
|
// Looks at the network again when a scan has changed it: once when any scan
|
|
431
|
-
// ends, and every 20 seconds while
|
|
432
|
-
// open, since the scanner saves every 10 pages and
|
|
433
|
-
// does.
|
|
434
|
-
//
|
|
445
|
+
// ends, and every 20 seconds while circles are being scanned with Bridge Chains
|
|
446
|
+
// open, since the scanner saves every 10 pages and a circle fills in as it
|
|
447
|
+
// does. A batch (Map 2nd degree) counts too, not only one person's scan: the
|
|
448
|
+
// Scan page's "Watch it fill in" opens the circle it is reading. Its own
|
|
449
|
+
// component so the scanner's answer, which changes every second or two while
|
|
450
|
+
// a scan runs, re-renders it and not the whole map.
|
|
435
451
|
function NetworkRefresh({ onChange, live }) {
|
|
436
452
|
const scan = useScanner();
|
|
437
453
|
const ended = scan.finished.find(CHANGES_NETWORK)?.startedAt ?? null;
|
|
438
|
-
const filling = live && scan.running &&
|
|
454
|
+
const filling = live && scan.running && fillsCircles(scan);
|
|
439
455
|
useEffect(() => {
|
|
440
456
|
if (ended != null) onChange();
|
|
441
457
|
}, [ended, onChange]);
|
|
@@ -7,7 +7,7 @@ import { useRouter, useSearchParams } from 'next/navigation';
|
|
|
7
7
|
import { runScrape, scraperStatus, notReadyMessage, busyReason } from '../../lib/scraper-client';
|
|
8
8
|
import { loadNetwork } from '../../lib/network';
|
|
9
9
|
import { IS_DEMO } from '../../lib/demo';
|
|
10
|
-
import {
|
|
10
|
+
import { loadCsvNetwork } from '../../lib/csv';
|
|
11
11
|
import OnboardingGate from '../components/OnboardingGate';
|
|
12
12
|
import PathsAnalyzer from '../components/PathsAnalyzer';
|
|
13
13
|
import { useUser } from '../components/UserProvider';
|
|
@@ -57,17 +57,17 @@ function PathsInner() {
|
|
|
57
57
|
}, [tab, selectedCompany]);
|
|
58
58
|
// Bumped when company scores change, so the network reloads with new tiers.
|
|
59
59
|
const [reloadKey, setReloadKey] = useState(0);
|
|
60
|
-
// The sample or a CSV import:
|
|
60
|
+
// The sample or a CSV import: neither is in the database, so a company scan could only fail.
|
|
61
61
|
const [localOnly, setLocalOnly] = useState(false);
|
|
62
62
|
|
|
63
63
|
useEffect(() => {
|
|
64
64
|
if (IS_DEMO) return;
|
|
65
65
|
if (!userId) return;
|
|
66
66
|
async function load() {
|
|
67
|
-
// A CSV import (1st degree only
|
|
68
|
-
// in this tab
|
|
67
|
+
// A CSV import (1st degree only, kept in the data folder) and the sample
|
|
68
|
+
// network (both degrees, in this tab) aren't in the database. Keep the sample's 2nd degree: without it
|
|
69
69
|
// the company map has no links and nobody is "reachable".
|
|
70
|
-
const csv =
|
|
70
|
+
const csv = await loadCsvNetwork();
|
|
71
71
|
setLocalOnly(Boolean(csv));
|
|
72
72
|
let d1 = [], d2 = [], d3 = [];
|
|
73
73
|
if (csv) {
|
|
@@ -240,23 +240,23 @@ function PathsInner() {
|
|
|
240
240
|
return (
|
|
241
241
|
<div style={{
|
|
242
242
|
minHeight: '100vh', display: 'flex', flexDirection: 'column', alignItems: 'center', justifyContent: 'center',
|
|
243
|
-
gap: 12, background: 'var(--sd-page)', color: 'rgba(255,255,255,0.7)',
|
|
243
|
+
gap: 12, background: 'var(--sd-page)', color: 'rgba(var(--sd-ink, 255, 255, 255), 0.7)',
|
|
244
244
|
fontFamily: 'var(--sd-font)',
|
|
245
245
|
}}>
|
|
246
|
-
<h1 style={{ fontSize: 20, fontWeight: 700, margin: 0, color: '#fff' }}>Not part of the demo</h1>
|
|
246
|
+
<h1 style={{ fontSize: 20, fontWeight: 700, margin: 0, color: 'var(--sd-fg-1, #fff)' }}>Not part of the demo</h1>
|
|
247
247
|
<p style={{ fontSize: 13, margin: 0 }}>The public demo includes the Network Circle and Degrees views only.</p>
|
|
248
|
-
<Link href="/" style={{ fontSize: 13, color: '#888', textDecoration: 'none' }}>← Back to the network</Link>
|
|
248
|
+
<Link href="/" style={{ fontSize: 13, color: 'var(--sd-fg-3, #888)', textDecoration: 'none' }}>← Back to the network</Link>
|
|
249
249
|
</div>
|
|
250
250
|
);
|
|
251
251
|
}
|
|
252
252
|
|
|
253
253
|
if (loading) {
|
|
254
|
-
return <div style={{ minHeight: '100vh', display: 'flex', alignItems: 'center', justifyContent: 'center', background: 'var(--sd-page)', color: '#fff' }}>Loading...</div>;
|
|
254
|
+
return <div style={{ minHeight: '100vh', display: 'flex', alignItems: 'center', justifyContent: 'center', background: 'var(--sd-page)', color: 'var(--sd-fg-1, #fff)' }}>Loading...</div>;
|
|
255
255
|
}
|
|
256
256
|
|
|
257
257
|
return (
|
|
258
258
|
<div style={{
|
|
259
|
-
height: '100vh', background: 'var(--sd-page)', color: '#fff',
|
|
259
|
+
height: '100vh', background: 'var(--sd-page)', color: 'var(--sd-fg-1, #fff)',
|
|
260
260
|
fontFamily: 'var(--sd-font)',
|
|
261
261
|
display: 'flex', flexDirection: 'column', overflow: 'hidden',
|
|
262
262
|
}}>
|
|
@@ -264,26 +264,26 @@ function PathsInner() {
|
|
|
264
264
|
Industries and Companies sit in the notch under it. */}
|
|
265
265
|
<AppHeader active="paths" csvMode={localOnly} />
|
|
266
266
|
{selectedCompany && (
|
|
267
|
-
<div style={{ padding: '10px 24px', borderBottom: '1px solid rgba(255,255,255,0.08)', flexShrink: 0 }}>
|
|
267
|
+
<div style={{ padding: '10px 24px', borderBottom: '1px solid rgba(var(--sd-ink, 255, 255, 255), 0.08)', flexShrink: 0 }}>
|
|
268
268
|
<div style={{ display: 'flex', alignItems: 'center', gap: 12 }}>
|
|
269
269
|
{selectedCompany && (
|
|
270
270
|
<>
|
|
271
271
|
<button onClick={() => { setSelectedCompany(null); setCompanyPeople([]); }}
|
|
272
|
-
style={{ background: 'none', border: 'none', color: '#888', cursor: 'pointer', fontSize: 12 }}>
|
|
272
|
+
style={{ background: 'none', border: 'none', color: 'var(--sd-fg-3, #888)', cursor: 'pointer', fontSize: 12 }}>
|
|
273
273
|
โ Companies
|
|
274
274
|
</button>
|
|
275
275
|
<span style={{ fontSize: 13, fontWeight: 600 }}>{selectedCompany.name}</span>
|
|
276
|
-
<span style={{ fontSize: 11, color: '#888' }}>
|
|
276
|
+
<span style={{ fontSize: 11, color: 'var(--sd-fg-3, #888)' }}>
|
|
277
277
|
{connectedCount}/{companyPeople.length} connected
|
|
278
278
|
</span>
|
|
279
279
|
{localOnly ? (
|
|
280
|
-
<span style={{ marginLeft: 'auto', fontSize: 11, color: '#888' }}>Scanning needs your own network</span>
|
|
280
|
+
<span style={{ marginLeft: 'auto', fontSize: 11, color: 'var(--sd-fg-3, #888)' }}>Scanning needs your own network</span>
|
|
281
281
|
) : (
|
|
282
282
|
<button onClick={scanFullCompany} disabled={scanning || Boolean(busy)}
|
|
283
283
|
title={busy ? `${busy}. One scan at a time.` : undefined}
|
|
284
284
|
style={{
|
|
285
285
|
marginLeft: 'auto', padding: '5px 12px', borderRadius: 6, border: 'none', cursor: scanning || busy ? 'not-allowed' : 'pointer',
|
|
286
|
-
background: scanning || busy ? '#333' : 'rgba(0,255,136,0.15)', color: scanning || busy ? '#555' : '#00ff88',
|
|
286
|
+
background: scanning || busy ? '#333' : 'rgba(0,255,136,0.15)', color: scanning || busy ? 'var(--sd-fg-5, #555)' : 'var(--sd-green, #00ff88)',
|
|
287
287
|
fontSize: 11, fontWeight: 600,
|
|
288
288
|
}}>
|
|
289
289
|
{scanning ? 'Scanning...' : busy ? 'Scanner busy' : '+ Scan Full Company'}
|
|
@@ -293,7 +293,7 @@ function PathsInner() {
|
|
|
293
293
|
title="Not yet tested against live LinkedIn. Results may be incomplete."
|
|
294
294
|
style={{
|
|
295
295
|
fontSize: 9.5, fontWeight: 800, letterSpacing: 0.6, padding: '3px 7px',
|
|
296
|
-
borderRadius: 20, border: '1px solid rgba(255,215,0,0.45)', color: '#FFD700',
|
|
296
|
+
borderRadius: 20, border: '1px solid rgba(255,215,0,0.45)', color: 'var(--sd-gold, #FFD700)',
|
|
297
297
|
}}
|
|
298
298
|
>EXPERIMENTAL</span>
|
|
299
299
|
</>
|
|
@@ -312,31 +312,31 @@ function PathsInner() {
|
|
|
312
312
|
{/* Company selection grid */}
|
|
313
313
|
{!selectedCompany && (
|
|
314
314
|
<>
|
|
315
|
-
<p style={{ fontSize: 13, color: '#888', marginBottom: 16 }}>
|
|
315
|
+
<p style={{ fontSize: 13, color: 'var(--sd-fg-3, #888)', marginBottom: 16 }}>
|
|
316
316
|
Pick a company to see your path to the top. Based on {d1Data.length + d2Data.length} people in your network.
|
|
317
317
|
</p>
|
|
318
318
|
<div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 10 }}>
|
|
319
319
|
{companies.slice(0, 60).map(co => (
|
|
320
320
|
<button key={co.name} onClick={() => selectCompany(co)} style={{
|
|
321
321
|
padding: '14px', borderRadius: 10, border: 'none', cursor: 'pointer', textAlign: 'left',
|
|
322
|
-
background: 'rgba(255,255,255,0.04)', transition: 'background 0.15s',
|
|
322
|
+
background: 'rgba(var(--sd-ink, 255, 255, 255), 0.04)', transition: 'background 0.15s',
|
|
323
323
|
borderLeft: `3px solid ${co.sCount > 0 ? '#FFD700' : co.aCount > 0 ? '#9B59B6' : '#3498DB'}`,
|
|
324
324
|
}}
|
|
325
|
-
onMouseEnter={e => e.currentTarget.style.background = 'rgba(255,255,255,0.08)'}
|
|
326
|
-
onMouseLeave={e => e.currentTarget.style.background = 'rgba(255,255,255,0.04)'}
|
|
325
|
+
onMouseEnter={e => e.currentTarget.style.background = 'rgba(var(--sd-ink, 255, 255, 255), 0.08)'}
|
|
326
|
+
onMouseLeave={e => e.currentTarget.style.background = 'rgba(var(--sd-ink, 255, 255, 255), 0.04)'}
|
|
327
327
|
>
|
|
328
|
-
<div style={{ fontSize: 14, fontWeight: 700, color: '#fff', marginBottom: 4 }}>{co.name}</div>
|
|
329
|
-
<div style={{ display: 'flex', gap: 8, fontSize: 10, color: '#888' }}>
|
|
330
|
-
<span style={{ color: '#00ff88' }}>{co.d1} connected</span>
|
|
328
|
+
<div style={{ fontSize: 14, fontWeight: 700, color: 'var(--sd-fg-1, #fff)', marginBottom: 4 }}>{co.name}</div>
|
|
329
|
+
<div style={{ display: 'flex', gap: 8, fontSize: 10, color: 'var(--sd-fg-3, #888)' }}>
|
|
330
|
+
<span style={{ color: 'var(--sd-green, #00ff88)' }}>{co.d1} connected</span>
|
|
331
331
|
<span>{co.d2 + co.d3} locked</span>
|
|
332
332
|
</div>
|
|
333
333
|
<div style={{ display: 'flex', gap: 6, marginTop: 4, fontSize: 9 }}>
|
|
334
|
-
{co.sCount > 0 && <span style={{ color: '#FFD700', fontWeight: 600 }}>{co.sCount}S</span>}
|
|
335
|
-
{co.aCount > 0 && <span style={{ color: '#9B59B6', fontWeight: 600 }}>{co.aCount}A</span>}
|
|
336
|
-
<span style={{ color: '#555' }}>{co.d1 + co.d2} total</span>
|
|
334
|
+
{co.sCount > 0 && <span style={{ color: 'var(--sd-gold, #FFD700)', fontWeight: 600 }}>{co.sCount}S</span>}
|
|
335
|
+
{co.aCount > 0 && <span style={{ color: 'var(--sd-purple, #9B59B6)', fontWeight: 600 }}>{co.aCount}A</span>}
|
|
336
|
+
<span style={{ color: 'var(--sd-fg-5, #555)' }}>{co.d1 + co.d2} total</span>
|
|
337
337
|
</div>
|
|
338
338
|
{/* Progress bar */}
|
|
339
|
-
<div style={{ height: 3, background: 'rgba(255,255,255,0.08)', borderRadius: 2, marginTop: 6 }}>
|
|
339
|
+
<div style={{ height: 3, background: 'rgba(var(--sd-ink, 255, 255, 255), 0.08)', borderRadius: 2, marginTop: 6 }}>
|
|
340
340
|
<div style={{
|
|
341
341
|
height: '100%', borderRadius: 2,
|
|
342
342
|
width: `${(co.d1 / Math.max(co.d1 + co.d2 + co.d3, 1)) * 100}%`,
|
|
@@ -357,9 +357,9 @@ function PathsInner() {
|
|
|
357
357
|
}}>
|
|
358
358
|
<div style={{ display: 'flex', alignItems: 'center', gap: 6, marginBottom: 4 }}>
|
|
359
359
|
<div style={{ width: 6, height: 6, borderRadius: '50%', background: '#00ff88', animation: 'pulse 1s infinite' }} />
|
|
360
|
-
<span style={{ fontSize: 10, fontWeight: 600, color: '#00ff88' }}>Scanning LinkedIn...</span>
|
|
360
|
+
<span style={{ fontSize: 10, fontWeight: 600, color: 'var(--sd-green, #00ff88)' }}>Scanning LinkedIn...</span>
|
|
361
361
|
</div>
|
|
362
|
-
<div style={{ fontFamily: 'monospace', fontSize: 9, color: '#777', maxHeight: 60, overflow: 'auto' }}>
|
|
362
|
+
<div style={{ fontFamily: 'monospace', fontSize: 9, color: 'var(--sd-fg-4, #777)', maxHeight: 60, overflow: 'auto' }}>
|
|
363
363
|
{scanLog.map((l, i) => <div key={i}>{l}</div>)}
|
|
364
364
|
</div>
|
|
365
365
|
</div>
|
|
@@ -377,15 +377,15 @@ function PathsInner() {
|
|
|
377
377
|
<div>
|
|
378
378
|
<span style={{
|
|
379
379
|
fontSize: 12, fontWeight: 700,
|
|
380
|
-
color: level.level >= 5 ? '#FFD700' : level.level >= 3 ? '#9B59B6' : '#3498DB',
|
|
380
|
+
color: level.level >= 5 ? 'var(--sd-gold, #FFD700)' : level.level >= 3 ? 'var(--sd-purple, #9B59B6)' : 'var(--sd-blue, #3498DB)',
|
|
381
381
|
}}>{level.label}</span>
|
|
382
|
-
{level.level >= 5 && <span style={{ fontSize: 9, color: '#FF6B35', marginLeft: 8, fontWeight: 700 }}>TARGET</span>}
|
|
382
|
+
{level.level >= 5 && <span style={{ fontSize: 9, color: 'var(--sd-orange, #FF6B35)', marginLeft: 8, fontWeight: 700 }}>TARGET</span>}
|
|
383
383
|
</div>
|
|
384
384
|
<div style={{ display: 'flex', gap: 8, alignItems: 'center' }}>
|
|
385
|
-
<span style={{ fontSize: 9, color: '#FF6B35', fontWeight: 600 }}>
|
|
385
|
+
<span style={{ fontSize: 9, color: 'var(--sd-orange, #FF6B35)', fontWeight: 600 }}>
|
|
386
386
|
+{level.people.filter(p => !p.connected).reduce((s, p) => s + (p.xp || 0), 0)} XP
|
|
387
387
|
</span>
|
|
388
|
-
<span style={{ fontSize: 10, color: '#666' }}>
|
|
388
|
+
<span style={{ fontSize: 10, color: 'var(--sd-fg-4, #666)' }}>
|
|
389
389
|
{level.people.filter(p => p.connected).length}/{level.people.length}
|
|
390
390
|
</span>
|
|
391
391
|
</div>
|
|
@@ -418,43 +418,43 @@ function PathPersonRow({ p, level, companyPeople, d1Urls, selectedCompany }) {
|
|
|
418
418
|
// How many people above would gain a mutual
|
|
419
419
|
const aboveCount = aboveMe.length;
|
|
420
420
|
if (aboveCount > 0) {
|
|
421
|
-
unlockInsights.push({ icon: 'โฌ๏ธ', text: `Adding them gives you a mutual with ${aboveCount} people above in the hierarchy`, color: '#00ff88' });
|
|
421
|
+
unlockInsights.push({ icon: 'โฌ๏ธ', text: `Adding them gives you a mutual with ${aboveCount} people above in the hierarchy`, color: 'var(--sd-green, #00ff88)' });
|
|
422
422
|
}
|
|
423
423
|
|
|
424
424
|
// Same level connections help with social proof
|
|
425
425
|
const sameLevelConnected = sameLevel.filter(op => d1Urls.has(op.profile_url || op.profileUrl)).length;
|
|
426
426
|
if (sameLevelConnected > 0) {
|
|
427
|
-
unlockInsights.push({ icon: '๐ค', text: `${sameLevelConnected} people at their level already connected
|
|
427
|
+
unlockInsights.push({ icon: '๐ค', text: `${sameLevelConnected} people at their level already connected: high social proof`, color: 'var(--sd-gold, #FFD700)' });
|
|
428
428
|
} else {
|
|
429
|
-
unlockInsights.push({ icon: '๐ฏ', text: `First connection at this level
|
|
429
|
+
unlockInsights.push({ icon: '๐ฏ', text: `First connection at this level: opens a new layer`, color: 'var(--sd-blue, #3498DB)' });
|
|
430
430
|
}
|
|
431
431
|
|
|
432
432
|
// Bridge path value
|
|
433
433
|
if (p.bridgeName) {
|
|
434
|
-
unlockInsights.push({ icon: '๐', text: `Reachable through ${p.bridgeName}
|
|
434
|
+
unlockInsights.push({ icon: '๐', text: `Reachable through ${p.bridgeName}: warm intro possible`, color: 'var(--sd-orange, #FF6B35)' });
|
|
435
435
|
}
|
|
436
436
|
|
|
437
437
|
// Role-specific value
|
|
438
438
|
if (p.seniority.level >= 5) {
|
|
439
|
-
unlockInsights.push({ icon: '๐', text: `${p.seniority.label}
|
|
439
|
+
unlockInsights.push({ icon: '๐', text: `${p.seniority.label}: decision maker, high strategic value but low accept rate`, color: 'var(--sd-gold, #FFD700)' });
|
|
440
440
|
} else if (p.seniority.level >= 3) {
|
|
441
|
-
unlockInsights.push({ icon: '๐', text: `${p.seniority.label}
|
|
441
|
+
unlockInsights.push({ icon: '๐', text: `${p.seniority.label}: middle management, good balance of access and accept rate`, color: 'var(--sd-purple, #9B59B6)' });
|
|
442
442
|
} else {
|
|
443
|
-
unlockInsights.push({ icon: 'โ
', text: `${p.seniority.label}
|
|
443
|
+
unlockInsights.push({ icon: 'โ
', text: `${p.seniority.label}: highest accept rate, builds mutual foundation for people above`, color: 'var(--sd-green, #00ff88)' });
|
|
444
444
|
}
|
|
445
445
|
|
|
446
446
|
// Likelihood explanation
|
|
447
447
|
if (p.likelihood >= 60) {
|
|
448
|
-
unlockInsights.push({ icon: '๐ฅ', text: `${p.likelihood}% likely to accept
|
|
448
|
+
unlockInsights.push({ icon: '๐ฅ', text: `${p.likelihood}% likely to accept: strong mutual overlap + approachable role`, color: 'var(--sd-green, #00ff88)' });
|
|
449
449
|
} else if (p.likelihood >= 30) {
|
|
450
|
-
unlockInsights.push({ icon: 'โก', text: `${p.likelihood}% likely
|
|
450
|
+
unlockInsights.push({ icon: 'โก', text: `${p.likelihood}% likely: moderate chance, add more people at their level first`, color: 'var(--sd-gold, #FFD700)' });
|
|
451
451
|
} else {
|
|
452
|
-
unlockInsights.push({ icon: '๐', text: `${p.likelihood}% likely
|
|
452
|
+
unlockInsights.push({ icon: '๐', text: `${p.likelihood}% likely: low chance right now, build more connections below them first`, color: 'var(--sd-red, #ff5050)' });
|
|
453
453
|
}
|
|
454
454
|
}
|
|
455
455
|
|
|
456
456
|
return (
|
|
457
|
-
<div style={{ borderBottom: '1px solid rgba(255,255,255,0.03)' }}>
|
|
457
|
+
<div style={{ borderBottom: '1px solid rgba(var(--sd-ink, 255, 255, 255), 0.03)' }}>
|
|
458
458
|
{/* Main row */}
|
|
459
459
|
<div
|
|
460
460
|
onClick={() => setExpanded(!expanded)}
|
|
@@ -462,11 +462,11 @@ function PathPersonRow({ p, level, companyPeople, d1Urls, selectedCompany }) {
|
|
|
462
462
|
display: 'flex', alignItems: 'center', gap: 8, padding: '6px 8px',
|
|
463
463
|
cursor: 'pointer', opacity: p.connected ? 0.7 : 1,
|
|
464
464
|
}}
|
|
465
|
-
onMouseEnter={e => e.currentTarget.style.background = 'rgba(255,255,255,0.04)'}
|
|
465
|
+
onMouseEnter={e => e.currentTarget.style.background = 'rgba(var(--sd-ink, 255, 255, 255), 0.04)'}
|
|
466
466
|
onMouseLeave={e => e.currentTarget.style.background = 'transparent'}
|
|
467
467
|
>
|
|
468
468
|
{/* Expand arrow */}
|
|
469
|
-
<span style={{ fontSize: 8, color: '#555', flexShrink: 0, width: 10 }}>
|
|
469
|
+
<span style={{ fontSize: 8, color: 'var(--sd-fg-5, #555)', flexShrink: 0, width: 10 }}>
|
|
470
470
|
{expanded ? 'โพ' : 'โธ'}
|
|
471
471
|
</span>
|
|
472
472
|
|
|
@@ -474,9 +474,9 @@ function PathPersonRow({ p, level, companyPeople, d1Urls, selectedCompany }) {
|
|
|
474
474
|
<div style={{
|
|
475
475
|
width: 18, height: 18, borderRadius: '50%', flexShrink: 0, fontSize: 8,
|
|
476
476
|
display: 'flex', alignItems: 'center', justifyContent: 'center',
|
|
477
|
-
background: p.connected ? 'rgba(0,255,136,0.2)' : 'rgba(255,255,255,0.05)',
|
|
478
|
-
color: p.connected ? '#00ff88' : '#555',
|
|
479
|
-
border: `1px solid ${p.connected ? 'rgba(0,255,136,0.3)' : 'rgba(255,255,255,0.1)'}`,
|
|
477
|
+
background: p.connected ? 'rgba(0,255,136,0.2)' : 'rgba(var(--sd-ink, 255, 255, 255), 0.05)',
|
|
478
|
+
color: p.connected ? 'var(--sd-green, #00ff88)' : 'var(--sd-fg-5, #555)',
|
|
479
|
+
border: `1px solid ${p.connected ? 'rgba(0,255,136,0.3)' : 'rgba(var(--sd-ink, 255, 255, 255), 0.1)'}`,
|
|
480
480
|
}}>{p.connected ? 'โ' : '๐'}</div>
|
|
481
481
|
|
|
482
482
|
{/* Photo */}
|
|
@@ -487,21 +487,21 @@ function PathPersonRow({ p, level, companyPeople, d1Urls, selectedCompany }) {
|
|
|
487
487
|
) : (
|
|
488
488
|
<div style={{
|
|
489
489
|
width: 26, height: 26, borderRadius: '50%', flexShrink: 0, fontSize: 10, fontWeight: 700,
|
|
490
|
-
background: '#333', color: '#888', display: 'flex', alignItems: 'center', justifyContent: 'center',
|
|
490
|
+
background: '#333', color: 'var(--sd-fg-3, #888)', display: 'flex', alignItems: 'center', justifyContent: 'center',
|
|
491
491
|
}}>{p.name?.charAt(0)}</div>
|
|
492
492
|
)}
|
|
493
493
|
|
|
494
494
|
{/* Name + headline */}
|
|
495
495
|
<div style={{ flex: 1, minWidth: 0 }}>
|
|
496
496
|
<div style={{ fontSize: 11, fontWeight: 600, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>{p.name}</div>
|
|
497
|
-
<div style={{ fontSize: 8, color: '#666', overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>
|
|
497
|
+
<div style={{ fontSize: 8, color: 'var(--sd-fg-4, #666)', overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>
|
|
498
498
|
{p.headline?.substring(0, 45)}
|
|
499
499
|
</div>
|
|
500
500
|
</div>
|
|
501
501
|
|
|
502
502
|
{/* Bridge */}
|
|
503
503
|
{!p.connected && p.bridgeName && (
|
|
504
|
-
<span style={{ fontSize: 8, color: '#FF6B35', flexShrink: 0, maxWidth: 55, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>
|
|
504
|
+
<span style={{ fontSize: 8, color: 'var(--sd-orange, #FF6B35)', flexShrink: 0, maxWidth: 55, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>
|
|
505
505
|
via {p.bridgeName.split(' ')[0]}
|
|
506
506
|
</span>
|
|
507
507
|
)}
|
|
@@ -509,10 +509,10 @@ function PathPersonRow({ p, level, companyPeople, d1Urls, selectedCompany }) {
|
|
|
509
509
|
{/* XP + Likelihood */}
|
|
510
510
|
{!p.connected && (
|
|
511
511
|
<div style={{ display: 'flex', alignItems: 'center', gap: 6, flexShrink: 0 }}>
|
|
512
|
-
<span style={{ fontSize: 8, fontWeight: 700, color: '#FF6B35' }}>+{p.xp}</span>
|
|
512
|
+
<span style={{ fontSize: 8, fontWeight: 700, color: 'var(--sd-orange, #FF6B35)' }}>+{p.xp}</span>
|
|
513
513
|
<div style={{
|
|
514
514
|
fontSize: 9, fontWeight: 700, minWidth: 30, textAlign: 'right',
|
|
515
|
-
color: p.likelihood >= 60 ? '#00ff88' : p.likelihood >= 30 ? '#FFD700' : '#ff5050',
|
|
515
|
+
color: p.likelihood >= 60 ? 'var(--sd-green, #00ff88)' : p.likelihood >= 30 ? 'var(--sd-gold, #FFD700)' : 'var(--sd-red, #ff5050)',
|
|
516
516
|
}}>{p.likelihood}%</div>
|
|
517
517
|
</div>
|
|
518
518
|
)}
|
|
@@ -531,11 +531,11 @@ function PathPersonRow({ p, level, companyPeople, d1Urls, selectedCompany }) {
|
|
|
531
531
|
{expanded && (
|
|
532
532
|
<div style={{
|
|
533
533
|
padding: '8px 12px 10px 44px',
|
|
534
|
-
background: 'rgba(255,255,255,0.02)',
|
|
535
|
-
borderTop: '1px solid rgba(255,255,255,0.04)',
|
|
534
|
+
background: 'rgba(var(--sd-ink, 255, 255, 255), 0.02)',
|
|
535
|
+
borderTop: '1px solid rgba(var(--sd-ink, 255, 255, 255), 0.04)',
|
|
536
536
|
}}>
|
|
537
537
|
{/* Full role */}
|
|
538
|
-
<div style={{ fontSize: 11, color: '#aaa', marginBottom: 8 }}>
|
|
538
|
+
<div style={{ fontSize: 11, color: 'var(--sd-fg-3, #aaa)', marginBottom: 8 }}>
|
|
539
539
|
{p.headline || 'No headline available'}
|
|
540
540
|
</div>
|
|
541
541
|
|
|
@@ -544,7 +544,7 @@ function PathPersonRow({ p, level, companyPeople, d1Urls, selectedCompany }) {
|
|
|
544
544
|
<div style={{
|
|
545
545
|
display: 'inline-block', padding: '2px 8px', borderRadius: 4, fontSize: 9, fontWeight: 600,
|
|
546
546
|
background: p.seniority.level >= 5 ? 'rgba(255,215,0,0.1)' : p.seniority.level >= 3 ? 'rgba(155,89,182,0.1)' : 'rgba(52,152,219,0.1)',
|
|
547
|
-
color: p.seniority.level >= 5 ? '#FFD700' : p.seniority.level >= 3 ? '#9B59B6' : '#3498DB',
|
|
547
|
+
color: p.seniority.level >= 5 ? 'var(--sd-gold, #FFD700)' : p.seniority.level >= 3 ? 'var(--sd-purple, #9B59B6)' : 'var(--sd-blue, #3498DB)',
|
|
548
548
|
border: `1px solid ${p.seniority.level >= 5 ? 'rgba(255,215,0,0.2)' : p.seniority.level >= 3 ? 'rgba(155,89,182,0.2)' : 'rgba(52,152,219,0.2)'}`,
|
|
549
549
|
}}>
|
|
550
550
|
{p.seniority.label} ยท Level {p.seniority.level}
|
|
@@ -552,7 +552,7 @@ function PathPersonRow({ p, level, companyPeople, d1Urls, selectedCompany }) {
|
|
|
552
552
|
{!p.connected && (
|
|
553
553
|
<div style={{
|
|
554
554
|
display: 'inline-block', padding: '2px 8px', borderRadius: 4, fontSize: 9, fontWeight: 700,
|
|
555
|
-
background: 'rgba(255,107,53,0.1)', color: '#FF6B35',
|
|
555
|
+
background: 'rgba(255,107,53,0.1)', color: 'var(--sd-orange, #FF6B35)',
|
|
556
556
|
border: '1px solid rgba(255,107,53,0.2)',
|
|
557
557
|
}}>
|
|
558
558
|
+{p.xp} XP
|
|
@@ -563,11 +563,11 @@ function PathPersonRow({ p, level, companyPeople, d1Urls, selectedCompany }) {
|
|
|
563
563
|
{/* Strategic insights */}
|
|
564
564
|
{!p.connected && unlockInsights.length > 0 && (
|
|
565
565
|
<div style={{ marginTop: 4 }}>
|
|
566
|
-
<div style={{ fontSize: 9, fontWeight: 700, color: '#888', letterSpacing: 0.5, marginBottom: 4 }}>
|
|
566
|
+
<div style={{ fontSize: 9, fontWeight: 700, color: 'var(--sd-fg-3, #888)', letterSpacing: 0.5, marginBottom: 4 }}>
|
|
567
567
|
STRATEGIC VALUE
|
|
568
568
|
</div>
|
|
569
569
|
{unlockInsights.map((ins, idx) => (
|
|
570
|
-
<div key={idx} style={{ display: 'flex', gap: 6, alignItems: 'flex-start', padding: '2px 0', fontSize: 10, color: '#bbb' }}>
|
|
570
|
+
<div key={idx} style={{ display: 'flex', gap: 6, alignItems: 'flex-start', padding: '2px 0', fontSize: 10, color: 'var(--sd-fg-2, #bbb)' }}>
|
|
571
571
|
<span style={{ fontSize: 11, lineHeight: 1 }}>{ins.icon}</span>
|
|
572
572
|
<span style={{ color: ins.color }}>{ins.text}</span>
|
|
573
573
|
</div>
|
|
@@ -577,8 +577,8 @@ function PathPersonRow({ p, level, companyPeople, d1Urls, selectedCompany }) {
|
|
|
577
577
|
|
|
578
578
|
{/* Connected state */}
|
|
579
579
|
{p.connected && (
|
|
580
|
-
<div style={{ fontSize: 10, color: '#00ff88', fontWeight: 600 }}>
|
|
581
|
-
โ Already connected
|
|
580
|
+
<div style={{ fontSize: 10, color: 'var(--sd-green, #00ff88)', fontWeight: 600 }}>
|
|
581
|
+
โ Already connected: contributes as mutual for others at {selectedCompany?.name}
|
|
582
582
|
</div>
|
|
583
583
|
)}
|
|
584
584
|
</div>
|