six-degrees 0.6.0 → 0.8.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 +4 -0
- package/.next/standalone/.next/build-manifest.json +3 -3
- package/.next/standalone/.next/prerender-manifest.json +42 -14
- package/.next/standalone/.next/routes-manifest.json +24 -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 +3 -3
- 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 +5 -3
- 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/insights/page/app-paths-manifest.json +3 -0
- package/.next/standalone/.next/server/app/insights/page/build-manifest.json +20 -0
- package/.next/standalone/.next/server/app/insights/page/next-font-manifest.json +11 -0
- package/.next/standalone/.next/server/app/insights/page/react-loadable-manifest.json +1 -0
- package/.next/standalone/.next/server/app/insights/page/server-reference-manifest.json +4 -0
- package/.next/standalone/.next/server/app/insights/page.js +13 -0
- package/.next/standalone/.next/server/app/insights/page.js.map +5 -0
- package/.next/standalone/.next/server/app/insights/page.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/insights/page_client-reference-manifest.js +3 -0
- package/.next/standalone/.next/server/app/insights.html +1 -0
- package/.next/standalone/.next/server/app/insights.meta +26 -0
- package/.next/standalone/.next/server/app/insights.rsc +35 -0
- package/.next/standalone/.next/server/app/insights.segments/_full.segment.rsc +35 -0
- package/.next/standalone/.next/server/app/insights.segments/_tree.segment.rsc +4 -0
- package/.next/standalone/.next/server/app/insights.segments/insights/__PAGE__.segment.rsc +33 -0
- 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 +21 -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 +4 -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]__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]__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]__15wc9e-._.js → [root-of-the-server]__0r-0t-9._.js} +2 -2
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0ra6xyg._.js +15 -0
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__20rwfdw._.js → [root-of-the-server]__0rcpjad._.js} +6 -3
- 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/_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_00nndai.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_03ibb-x.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_03ri3ji.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_078ce48.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_0a69mgr.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_0c9d9ti.js +7 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_0cej3t8.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_0cmh4g6.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_0nx2_pc.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_0r79-w1.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_0t552z6.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_0yx8ynd.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_12p-o9-.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_1466dnb.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_1sryxv6.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_1trn-x5.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_1ygu_mv.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0egamyq._.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/_04am_h8._.js +3 -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/_0gds903._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_0hb-dhy._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_0klqt9z._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_14jak5s._.js +7 -0
- package/.next/standalone/.next/server/chunks/ssr/_14nxd3q._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_1cj2yog._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_1fm1ih_._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_1hdqw0-._.js +7 -0
- package/.next/standalone/.next/server/chunks/ssr/_1k2nmbw._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_1r62six._.js +7 -0
- package/.next/standalone/.next/server/chunks/ssr/_next-internal_server_app_insights_page_actions_0-0tf75.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/app_141w189._.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_components_settings_SectorPicker_1c-29qw.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/app_components_ui_0pdmz2z.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/app_import_page_1fmu6_l.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/app_insights_page_1d_chja.js +3 -0
- 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 +26 -14
- 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/next-font-manifest.js +1 -1
- package/.next/standalone/.next/server/next-font-manifest.json +4 -0
- 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/prefetch-hints.json +14 -0
- 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/02wnf8dkxegxg.js +34 -0
- 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/0838_s6w-i_ik.js +1 -0
- package/.next/standalone/.next/static/chunks/0_1r-3csplxnj.js +1 -0
- package/.next/standalone/.next/static/chunks/0ka4prpk3w9wn.js +34 -0
- package/.next/standalone/.next/static/chunks/0kscsqnvfq3-r.js +1 -0
- package/.next/standalone/.next/static/chunks/0s_xxwp7z88vv.js +1 -0
- package/.next/standalone/.next/static/chunks/1-nnl8amfm4yh.js +57 -0
- package/.next/standalone/.next/static/chunks/112mv-com-mqa.js +21 -0
- package/.next/standalone/.next/static/chunks/1bkt_hhjzvbh8.js +1 -0
- package/.next/standalone/.next/static/chunks/1cmphb3kh2ers.css +3 -0
- package/.next/standalone/.next/static/chunks/1d8yv3k_atka7.js +1 -0
- package/.next/standalone/.next/static/chunks/{0ws7zy0w57ufi.js → 1eyajb9ntzlrl.js} +1 -1
- package/.next/standalone/.next/static/chunks/1z9lb-dbcg4aa.js +1 -0
- package/.next/standalone/.next/static/chunks/23hc51oa4vkhc.js +5 -0
- package/.next/standalone/.next/static/chunks/27n8k9wxlz5-7.js +1 -0
- package/.next/standalone/.next/static/chunks/2q9i7pcxcnph1.js +7 -0
- package/.next/standalone/.next/static/chunks/2w-y83mjlpnse.js +1 -0
- package/.next/standalone/.next/static/chunks/2ws1xf293j-tm.js +5 -0
- package/.next/standalone/.next/static/chunks/2z1-q0_vunbql.js +2 -0
- package/.next/standalone/.next/static/chunks/34g73qhayuevu.js +1 -0
- package/.next/standalone/.next/static/chunks/3cqn-r-y5rrw1.js +5 -0
- package/.next/standalone/.next/static/chunks/3opgg1efrx8q6.js +1 -0
- package/.next/standalone/.next/static/chunks/3p51fpxxi4d5y.js +34 -0
- package/.next/standalone/.next/static/chunks/3y40z6of3r9py.js +1 -0
- package/.next/standalone/.next/static/chunks/403dpflln8ah5.js +1 -0
- package/.next/standalone/.next/static/chunks/43pg2sursiypz.js +1 -0
- package/.next/standalone/CHANGELOG.md +203 -0
- package/.next/standalone/README.md +96 -50
- package/.next/standalone/SECURITY.md +25 -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/outreach/route.js +13 -73
- package/.next/standalone/app/api/queue/route.js +1 -1
- package/.next/standalone/app/api/scraper/route.js +217 -36
- package/.next/standalone/app/api/social/crm/route.js +2 -1
- package/.next/standalone/app/components/AppHeader.js +41 -21
- package/.next/standalone/app/components/AppTabs.js +12 -8
- package/.next/standalone/app/components/AutoConnect.js +286 -0
- 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 +258 -113
- 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 +25 -18
- 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 +57 -27
- 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 +56 -35
- 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 +40 -21
- package/.next/standalone/app/components/ScanTrail.js +21 -8
- package/.next/standalone/app/components/SeparationView.js +172 -124
- package/.next/standalone/app/components/Sidebar.js +308 -199
- 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/insights/Boards.js +275 -0
- package/.next/standalone/app/components/insights/PeopleView.js +266 -0
- package/.next/standalone/app/components/insights/Rail.js +156 -0
- package/.next/standalone/app/components/insights/Report.js +382 -0
- package/.next/standalone/app/components/insights/parts.js +239 -0
- 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 +360 -0
- package/.next/standalone/app/components/ui.js +8 -8
- package/.next/standalone/app/globals.css +161 -5
- package/.next/standalone/app/import/page.js +94 -38
- package/.next/standalone/app/insights/page.js +220 -0
- package/.next/standalone/app/launch/page.js +5 -5
- package/.next/standalone/app/layout.js +6 -2
- package/.next/standalone/app/page.js +53 -53
- 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 +84 -72
- 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 +236 -133
- 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/auto-connect.js +145 -0
- package/.next/standalone/lib/backups.js +458 -0
- package/.next/standalone/lib/chain-layout.js +32 -0
- package/.next/standalone/lib/companies.js +1 -1
- 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/in-progress.js +46 -0
- package/.next/standalone/lib/ingest.js +1 -1
- package/.next/standalone/lib/insights-board.js +613 -0
- package/.next/standalone/lib/linkedin-limits.js +240 -14
- package/.next/standalone/lib/liquid-glass.js +59 -0
- package/.next/standalone/lib/notifications.js +13 -0
- package/.next/standalone/lib/requests-client.js +10 -0
- package/.next/standalone/lib/requests.js +124 -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/scan-state.js +1 -0
- package/.next/standalone/lib/scanner-setup.js +97 -15
- package/.next/standalone/lib/scraper-client.js +35 -8
- package/.next/standalone/lib/search-risk.js +7 -3
- package/.next/standalone/lib/settings-client.js +5 -3
- package/.next/standalone/lib/settings.js +13 -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 +200 -0
- package/.next/standalone/package-lock.json +2 -2
- package/.next/standalone/package.json +1 -1
- package/.next/standalone/scripts/scrape.py +595 -11
- package/.next/static/chunks/02wnf8dkxegxg.js +34 -0
- package/.next/static/chunks/03-_esd2x_yk6.js +1 -0
- package/.next/static/chunks/03-demj2iy-0p.js +44 -0
- package/.next/static/chunks/0838_s6w-i_ik.js +1 -0
- package/.next/static/chunks/0_1r-3csplxnj.js +1 -0
- package/.next/static/chunks/0ka4prpk3w9wn.js +34 -0
- package/.next/static/chunks/0kscsqnvfq3-r.js +1 -0
- package/.next/static/chunks/0s_xxwp7z88vv.js +1 -0
- package/.next/static/chunks/1-nnl8amfm4yh.js +57 -0
- package/.next/static/chunks/112mv-com-mqa.js +21 -0
- package/.next/static/chunks/1bkt_hhjzvbh8.js +1 -0
- package/.next/static/chunks/1cmphb3kh2ers.css +3 -0
- package/.next/static/chunks/1d8yv3k_atka7.js +1 -0
- package/.next/static/chunks/{0ws7zy0w57ufi.js → 1eyajb9ntzlrl.js} +1 -1
- package/.next/static/chunks/1z9lb-dbcg4aa.js +1 -0
- package/.next/static/chunks/23hc51oa4vkhc.js +5 -0
- package/.next/static/chunks/27n8k9wxlz5-7.js +1 -0
- package/.next/static/chunks/2q9i7pcxcnph1.js +7 -0
- package/.next/static/chunks/2w-y83mjlpnse.js +1 -0
- package/.next/static/chunks/2ws1xf293j-tm.js +5 -0
- package/.next/static/chunks/2z1-q0_vunbql.js +2 -0
- package/.next/static/chunks/34g73qhayuevu.js +1 -0
- package/.next/static/chunks/3cqn-r-y5rrw1.js +5 -0
- package/.next/static/chunks/3opgg1efrx8q6.js +1 -0
- package/.next/static/chunks/3p51fpxxi4d5y.js +34 -0
- package/.next/static/chunks/3y40z6of3r9py.js +1 -0
- package/.next/static/chunks/403dpflln8ah5.js +1 -0
- package/.next/static/chunks/43pg2sursiypz.js +1 -0
- package/CHANGELOG.md +203 -0
- package/README.md +96 -50
- package/SECURITY.md +25 -11
- package/lib/auto-connect.js +145 -0
- package/lib/backups.js +458 -0
- package/lib/chain-layout.js +32 -0
- package/lib/companies.js +1 -1
- 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/in-progress.js +46 -0
- package/lib/ingest.js +1 -1
- package/lib/insights-board.js +613 -0
- package/lib/linkedin-limits.js +240 -14
- package/lib/liquid-glass.js +59 -0
- package/lib/notifications.js +13 -0
- package/lib/requests-client.js +10 -0
- package/lib/requests.js +124 -0
- package/lib/scan-pace.js +11 -0
- package/lib/scan-progress.js +20 -0
- package/lib/scan-risk.js +44 -0
- package/lib/scan-state.js +1 -0
- package/lib/scanner-setup.js +97 -15
- package/lib/scraper-client.js +35 -8
- package/lib/search-risk.js +7 -3
- package/lib/settings-client.js +5 -3
- package/lib/settings.js +13 -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 +200 -0
- package/package.json +1 -1
- package/scripts/scrape.py +595 -11
- 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]__13dx4sd._.js +0 -8
- 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/_02twlca._.js +0 -10
- 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/_1f_n00p._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_2105jz8._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/app_components_0t908t-._.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 → 3NCyJyAPDCEYsYTwF1Ieu}/_buildManifest.js +0 -0
- /package/.next/standalone/.next/static/{dQUvvVSXqbkEFC3-CNcwT → 3NCyJyAPDCEYsYTwF1Ieu}/_clientMiddlewareManifest.js +0 -0
- /package/.next/standalone/.next/static/{dQUvvVSXqbkEFC3-CNcwT → 3NCyJyAPDCEYsYTwF1Ieu}/_ssgManifest.js +0 -0
- /package/.next/static/{dQUvvVSXqbkEFC3-CNcwT → 3NCyJyAPDCEYsYTwF1Ieu}/_buildManifest.js +0 -0
- /package/.next/static/{dQUvvVSXqbkEFC3-CNcwT → 3NCyJyAPDCEYsYTwF1Ieu}/_clientMiddlewareManifest.js +0 -0
- /package/.next/static/{dQUvvVSXqbkEFC3-CNcwT → 3NCyJyAPDCEYsYTwF1Ieu}/_ssgManifest.js +0 -0
|
@@ -13,16 +13,17 @@ import { buildQuest, XP_SEND, STAGE_SIZE } from '../../lib/quest';
|
|
|
13
13
|
import { initialsFor } from '../../lib/tiers';
|
|
14
14
|
import { localPhoto } from '../../lib/photos';
|
|
15
15
|
import { TIER_COLORS as THEME_TIERS } from '../../lib/themes';
|
|
16
|
+
import ConnectChoice from './AutoConnect';
|
|
16
17
|
|
|
17
18
|
const TIER = THEME_TIERS; // the theme's dot colours (lib/themes.js)
|
|
18
|
-
const LINE = '1px solid rgba(255,255,255,0.1)';
|
|
19
|
+
const LINE = '1px solid rgba(var(--sd-ink, 255, 255, 255), 0.1)';
|
|
19
20
|
|
|
20
21
|
function Face({ person, size = 36, ring }) {
|
|
21
22
|
const color = TIER[person?.tier] || '#667';
|
|
22
23
|
return (
|
|
23
24
|
<div style={{ position: 'relative', width: size, height: size, flexShrink: 0 }}>
|
|
24
25
|
<div style={{
|
|
25
|
-
width: size, height: size, borderRadius: '50%', background: color, color: person?.tier === 'S' ? '#000' : '#fff',
|
|
26
|
+
width: size, height: size, borderRadius: '50%', background: color, color: person?.tier === 'S' ? '#000' : 'var(--sd-fg-1, #fff)',
|
|
26
27
|
display: 'flex', alignItems: 'center', justifyContent: 'center', fontSize: size * 0.34, fontWeight: 800,
|
|
27
28
|
border: `2px solid ${ring || color}`,
|
|
28
29
|
}}>{initialsFor(person?.name || '?')}</div>
|
|
@@ -40,7 +41,7 @@ function Ring({ progress, size = 86, color = '#FF6B35', children }) {
|
|
|
40
41
|
return (
|
|
41
42
|
<div style={{ position: 'relative', width: size, height: size }}>
|
|
42
43
|
<svg width={size} height={size} style={{ position: 'absolute', inset: 0, transform: 'rotate(-90deg)' }}>
|
|
43
|
-
<circle cx={size / 2} cy={size / 2} r={r} fill="none" stroke="rgba(255,255,255,0.08)" strokeWidth={5} />
|
|
44
|
+
<circle cx={size / 2} cy={size / 2} r={r} fill="none" stroke="rgba(var(--sd-ink, 255, 255, 255), 0.08)" strokeWidth={5} />
|
|
44
45
|
<circle cx={size / 2} cy={size / 2} r={r} fill="none" stroke={color} strokeWidth={5} strokeLinecap="round"
|
|
45
46
|
strokeDasharray={`${c * Math.min(1, progress)} ${c}`} style={{ transition: 'stroke-dasharray 0.5s ease' }} />
|
|
46
47
|
</svg>
|
|
@@ -49,7 +50,8 @@ function Ring({ progress, size = 86, color = '#FF6B35', children }) {
|
|
|
49
50
|
);
|
|
50
51
|
}
|
|
51
52
|
|
|
52
|
-
|
|
53
|
+
// canAuto: Auto beside every invite (components/AutoConnect.js; Blake, 2026-10-03), on your own network.
|
|
54
|
+
export default function OutlinkQuest({ recs, sentIds, added, mappedIds, reach, onSend, onUndo, canAuto = false }) {
|
|
53
55
|
const quest = useMemo(() => buildQuest({ recs, sentIds, added, mappedIds, reach }), [recs, sentIds, added, mappedIds, reach]);
|
|
54
56
|
const [open, setOpen] = useState(null); // bridge id of the expanded cluster
|
|
55
57
|
const [toast, setToast] = useState(null);
|
|
@@ -57,10 +59,15 @@ export default function OutlinkQuest({ recs, sentIds, added, mappedIds, reach, o
|
|
|
57
59
|
|
|
58
60
|
async function send(person, cluster) {
|
|
59
61
|
await onSend(person);
|
|
62
|
+
cheer(person, cluster);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// The points and the circle's progress, for an invite sent by hand or by Auto.
|
|
66
|
+
function cheer(person, cluster) {
|
|
60
67
|
const done = cluster.done + 1;
|
|
61
68
|
const first = String(cluster.bridge.name || '').split(/[\s,]+/)[0];
|
|
62
69
|
setToast(done >= cluster.targets.length
|
|
63
|
-
? `+${XP_SEND[person.tier] || 2} · Stage ${cluster.stage} of ${first}'s circle cleared
|
|
70
|
+
? `+${XP_SEND[person.tier] || 2} · Stage ${cluster.stage} of ${first}'s circle cleared. The next ${STAGE_SIZE} are up`
|
|
64
71
|
: `+${XP_SEND[person.tier] || 2} · ${first}'s circle ${done}/${cluster.targets.length}`);
|
|
65
72
|
setTimeout(() => setToast(null), 3500);
|
|
66
73
|
}
|
|
@@ -76,20 +83,20 @@ export default function OutlinkQuest({ recs, sentIds, added, mappedIds, reach, o
|
|
|
76
83
|
<div style={{ fontSize: 26, fontWeight: 900, lineHeight: 1 }}>{level.level}</div>
|
|
77
84
|
</div>
|
|
78
85
|
<div style={{ flex: 1, minWidth: 220 }}>
|
|
79
|
-
<div style={{ fontSize: 13, color: '#dfe6e9' }}>
|
|
86
|
+
<div style={{ fontSize: 13, color: 'var(--sd-fg-1, #dfe6e9)' }}>
|
|
80
87
|
<b>{quest.points}</b> points · <b>{level.next - quest.points}</b> to level {level.level + 1}
|
|
81
88
|
</div>
|
|
82
|
-
<div style={{ height: 8, borderRadius: 4, background: 'rgba(255,255,255,0.08)', marginTop: 6, overflow: 'hidden' }}>
|
|
89
|
+
<div style={{ height: 8, borderRadius: 4, background: 'rgba(var(--sd-ink, 255, 255, 255), 0.08)', marginTop: 6, overflow: 'hidden' }}>
|
|
83
90
|
<div style={{ height: '100%', width: `${Math.round(level.progress * 100)}%`, background: 'linear-gradient(90deg, #FFD700, #FF6B35)', transition: 'width 0.5s' }} />
|
|
84
91
|
</div>
|
|
85
|
-
<div style={{ fontSize: 11.5, color: '#8b9a9a', marginTop: 6 }}>
|
|
86
|
-
Points come from invites you send and people who accept
|
|
92
|
+
<div style={{ fontSize: 11.5, color: 'var(--sd-fg-3, #8b9a9a)', marginTop: 6 }}>
|
|
93
|
+
Points come from invites you send and people who accept, not from browsing.
|
|
87
94
|
</div>
|
|
88
95
|
</div>
|
|
89
96
|
{[[quest.sentTotal, 'invites sent'], [quest.addedTotal, 'people added'], [quest.clearedStages, 'stages cleared']].map(([n, l]) => (
|
|
90
97
|
<div key={l} style={{ textAlign: 'center', minWidth: 80 }}>
|
|
91
98
|
<div style={{ fontSize: 24, fontWeight: 900 }}>{n}</div>
|
|
92
|
-
<div style={{ fontSize: 11, color: '#8b9a9a' }}>{l}</div>
|
|
99
|
+
<div style={{ fontSize: 11, color: 'var(--sd-fg-3, #8b9a9a)' }}>{l}</div>
|
|
93
100
|
</div>
|
|
94
101
|
))}
|
|
95
102
|
</div>
|
|
@@ -97,7 +104,7 @@ export default function OutlinkQuest({ recs, sentIds, added, mappedIds, reach, o
|
|
|
97
104
|
{quest.newDoors.length > 0 && (
|
|
98
105
|
<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 }}>
|
|
99
106
|
🚪 <b>{quest.newDoors.length} new {quest.newDoors.length === 1 ? 'door' : 'doors'}:</b> people you added through a circle, whose own circle isn’t mapped yet.
|
|
100
|
-
That’s the next degree. <Link href="/setup" style={{ color: '#00ff88' }}>Map them on the Scan page →</Link>
|
|
107
|
+
That’s the next degree. <Link href="/setup" style={{ color: 'var(--sd-green, #00ff88)' }}>Map them on the Scan page →</Link>
|
|
101
108
|
</div>
|
|
102
109
|
)}
|
|
103
110
|
|
|
@@ -107,24 +114,29 @@ export default function OutlinkQuest({ recs, sentIds, added, mappedIds, reach, o
|
|
|
107
114
|
<h3 style={{ margin: '22px 0 10px', fontSize: 15 }}>Next best moves</h3>
|
|
108
115
|
<div style={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(300px, 1fr))', gap: 12 }}>
|
|
109
116
|
{quest.nextMoves.map(({ person, cluster }, i) => (
|
|
110
|
-
<div key={person.id} style={{ padding: 14, borderRadius: 12, border: `1px solid ${TIER[person.tier]}55`, background: 'rgba(255,255,255,0.03)', position: 'relative' }}>
|
|
111
|
-
<div style={{ position: 'absolute', top: 10, right: 12, fontSize: 11, fontWeight: 800, color: '#FF6B35' }}>#{i + 1}</div>
|
|
117
|
+
<div key={person.id} style={{ padding: 14, borderRadius: 12, border: `1px solid ${TIER[person.tier]}55`, background: 'rgba(var(--sd-ink, 255, 255, 255), 0.03)', position: 'relative' }}>
|
|
118
|
+
<div style={{ position: 'absolute', top: 10, right: 12, fontSize: 11, fontWeight: 800, color: 'var(--sd-orange, #FF6B35)' }}>#{i + 1}</div>
|
|
112
119
|
<div style={{ display: 'flex', gap: 10, alignItems: 'center' }}>
|
|
113
120
|
<Face person={person} size={44} />
|
|
114
121
|
<div style={{ minWidth: 0 }}>
|
|
115
122
|
<div style={{ fontWeight: 700, fontSize: 14 }}>{person.name}</div>
|
|
116
|
-
<div style={{ fontSize: 11.5, color: '#8b9a9a', overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap', maxWidth: 220 }}>{person.headline}</div>
|
|
123
|
+
<div style={{ fontSize: 11.5, color: 'var(--sd-fg-3, #8b9a9a)', overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap', maxWidth: 220 }}>{person.headline}</div>
|
|
117
124
|
</div>
|
|
118
125
|
</div>
|
|
119
|
-
<div style={{ fontSize: 11.5, color: '#aab7b7', margin: '10px 0' }}>
|
|
126
|
+
<div style={{ fontSize: 11.5, color: 'var(--sd-fg-2, #aab7b7)', margin: '10px 0' }}>
|
|
120
127
|
via <b style={{ color: TIER[cluster.bridge.tier] }}>{cluster.bridge.name}</b> · their circle {cluster.done}/{cluster.targets.length} this stage
|
|
121
128
|
</div>
|
|
122
|
-
<
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
129
|
+
<ConnectChoice person={person} canAuto={canAuto} size="quest" onSent={(p) => cheer(p, cluster)} connect={(second) => {
|
|
130
|
+
const by = (
|
|
131
|
+
<>
|
|
132
|
+
{person.profile_url && (
|
|
133
|
+
<a href={person.profile_url} target="_blank" rel="noopener noreferrer" style={btnGhost}>Open on LinkedIn</a>
|
|
134
|
+
)}
|
|
135
|
+
<button onClick={() => send(person, cluster)} style={second ? btnGhost : btnHot}>I sent an invite · +{XP_SEND[person.tier] || 2}</button>
|
|
136
|
+
</>
|
|
137
|
+
);
|
|
138
|
+
return second ? by : <div style={{ display: 'flex', gap: 8 }}>{by}</div>;
|
|
139
|
+
}} />
|
|
128
140
|
</div>
|
|
129
141
|
))}
|
|
130
142
|
</div>
|
|
@@ -133,7 +145,7 @@ export default function OutlinkQuest({ recs, sentIds, added, mappedIds, reach, o
|
|
|
133
145
|
|
|
134
146
|
{/* 3. clusters */}
|
|
135
147
|
<h3 style={{ margin: '26px 0 4px', fontSize: 15 }}>Circles to work through</h3>
|
|
136
|
-
<div style={{ fontSize: 12, color: '#8b9a9a', marginBottom: 12 }}>
|
|
148
|
+
<div style={{ fontSize: 12, color: 'var(--sd-fg-3, #8b9a9a)', marginBottom: 12 }}>
|
|
137
149
|
Each is one of your connections and the best people they know, {STAGE_SIZE} at a time. Fill the ring to clear a stage.
|
|
138
150
|
</div>
|
|
139
151
|
<div style={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fill, minmax(190px, 1fr))', gap: 12 }}>
|
|
@@ -141,15 +153,15 @@ export default function OutlinkQuest({ recs, sentIds, added, mappedIds, reach, o
|
|
|
141
153
|
const isOpen = open === c.bridge.id;
|
|
142
154
|
return (
|
|
143
155
|
<button key={c.bridge.id} onClick={() => setOpen(isOpen ? null : c.bridge.id)} style={{
|
|
144
|
-
padding: 12, borderRadius: 12, cursor: 'pointer', textAlign: 'center', color: '#fff',
|
|
145
|
-
border: isOpen ? '1px solid #FF6B35' : LINE, background: c.complete ? 'rgba(0,255,136,0.06)' : 'rgba(255,255,255,0.03)',
|
|
156
|
+
padding: 12, borderRadius: 12, cursor: 'pointer', textAlign: 'center', color: 'var(--sd-fg-1, #fff)',
|
|
157
|
+
border: isOpen ? '1px solid #FF6B35' : LINE, background: c.complete ? 'rgba(0,255,136,0.06)' : 'rgba(var(--sd-ink, 255, 255, 255), 0.03)',
|
|
146
158
|
display: 'flex', flexDirection: 'column', alignItems: 'center', gap: 6,
|
|
147
159
|
}}>
|
|
148
160
|
<Ring progress={c.progress} color={c.complete ? '#00ff88' : '#FF6B35'}>
|
|
149
161
|
<Face person={c.bridge} size={60} />
|
|
150
162
|
</Ring>
|
|
151
163
|
<div style={{ fontWeight: 700, fontSize: 13, maxWidth: 170, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>{c.bridge.name}</div>
|
|
152
|
-
<div style={{ fontSize: 11, color: c.complete ? '#00ff88' : '#aab7b7' }}>
|
|
164
|
+
<div style={{ fontSize: 11, color: c.complete ? 'var(--sd-green, #00ff88)' : 'var(--sd-fg-2, #aab7b7)' }}>
|
|
153
165
|
{c.complete ? 'Circle cleared' : `Stage ${c.stage} of ${c.stages} · ${c.done}/${c.targets.length}`}
|
|
154
166
|
</div>
|
|
155
167
|
<div style={{ display: 'flex', gap: 4 }}>
|
|
@@ -160,7 +172,7 @@ export default function OutlinkQuest({ recs, sentIds, added, mappedIds, reach, o
|
|
|
160
172
|
}} />
|
|
161
173
|
))}
|
|
162
174
|
</div>
|
|
163
|
-
<div style={{ fontSize: 10.5, color: '#778' }}>
|
|
175
|
+
<div style={{ fontSize: 10.5, color: 'var(--sd-fg-4, #778)' }}>
|
|
164
176
|
{c.open.S ? `${c.open.S} S · ` : ''}{c.open.A ? `${c.open.A} A · ` : ''}{c.people.length} worth adding{c.added.length ? ` · ★ ${c.added.length} added` : ''}
|
|
165
177
|
</div>
|
|
166
178
|
</button>
|
|
@@ -174,27 +186,36 @@ export default function OutlinkQuest({ recs, sentIds, added, mappedIds, reach, o
|
|
|
174
186
|
<Face person={expanded.bridge} size={40} />
|
|
175
187
|
<div>
|
|
176
188
|
<div style={{ fontWeight: 800 }}>{expanded.bridge.name}’s circle · stage {expanded.stage} of {expanded.stages}</div>
|
|
177
|
-
<div style={{ fontSize: 12, color: '#aab7b7' }}>Ask {expanded.bridge.name?.split(' ')[0]} for an intro, or invite them directly. Mark each one when it’s sent.</div>
|
|
189
|
+
<div style={{ fontSize: 12, color: 'var(--sd-fg-2, #aab7b7)' }}>Ask {expanded.bridge.name?.split(' ')[0]} for an intro, or invite them directly. Mark each one when it’s sent.</div>
|
|
178
190
|
</div>
|
|
179
191
|
</div>
|
|
180
192
|
{expanded.targets.map((p) => {
|
|
181
193
|
const sent = sentIds.has(p.id);
|
|
182
194
|
return (
|
|
183
|
-
<div key={p.id} style={{ display: 'flex', alignItems: 'center', gap: 10, padding: '8px 0', borderTop: '1px solid rgba(255,255,255,0.05)' }}>
|
|
195
|
+
<div key={p.id} style={{ display: 'flex', alignItems: 'center', gap: 10, padding: '8px 0', borderTop: '1px solid rgba(var(--sd-ink, 255, 255, 255), 0.05)' }}>
|
|
184
196
|
<Face person={p} size={34} ring={sent ? '#00ff88' : undefined} />
|
|
185
197
|
<div style={{ flex: 1, minWidth: 0 }}>
|
|
186
198
|
<div style={{ fontWeight: 600, fontSize: 13 }}>{p.name} <span style={{ color: TIER[p.tier], fontSize: 11 }}>{p.tier}</span></div>
|
|
187
|
-
<div style={{ fontSize: 11.5, color: '#8b9a9a', overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>{p.headline}</div>
|
|
199
|
+
<div style={{ fontSize: 11.5, color: 'var(--sd-fg-3, #8b9a9a)', overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>{p.headline}</div>
|
|
188
200
|
</div>
|
|
189
|
-
{
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
201
|
+
{sent ? (
|
|
202
|
+
<>
|
|
203
|
+
{p.profile_url && <a href={p.profile_url} target="_blank" rel="noopener noreferrer" style={btnGhost}>LinkedIn</a>}
|
|
204
|
+
<button onClick={() => onUndo(p)} style={{ ...btnGhost, color: 'var(--sd-green, #00ff88)' }}>Sent ✓ (undo)</button>
|
|
205
|
+
</>
|
|
206
|
+
) : (
|
|
207
|
+
<ConnectChoice person={p} canAuto={canAuto} size="quest" onSent={(x) => cheer(x, expanded)} connect={(second) => (
|
|
208
|
+
<>
|
|
209
|
+
{p.profile_url && <a href={p.profile_url} target="_blank" rel="noopener noreferrer" style={btnGhost}>LinkedIn</a>}
|
|
210
|
+
<button onClick={() => send(p, expanded)} style={second ? btnGhost : btnHot}>Sent · +{XP_SEND[p.tier] || 2}</button>
|
|
211
|
+
</>
|
|
212
|
+
)} />
|
|
213
|
+
)}
|
|
193
214
|
</div>
|
|
194
215
|
);
|
|
195
216
|
})}
|
|
196
217
|
{expanded.added.length > 0 && (
|
|
197
|
-
<div style={{ marginTop: 10, fontSize: 12, color: '#00ff88' }}>
|
|
218
|
+
<div style={{ marginTop: 10, fontSize: 12, color: 'var(--sd-green, #00ff88)' }}>
|
|
198
219
|
★ Added from this circle: {expanded.added.map((a) => a.name).join(', ')}
|
|
199
220
|
</div>
|
|
200
221
|
)}
|
|
@@ -211,4 +232,4 @@ export default function OutlinkQuest({ recs, sentIds, added, mappedIds, reach, o
|
|
|
211
232
|
}
|
|
212
233
|
|
|
213
234
|
const btnHot = { padding: '7px 12px', borderRadius: 8, border: 'none', cursor: 'pointer', fontWeight: 800, fontSize: 12, background: 'linear-gradient(135deg, #FF6B35, #FFD700)', color: '#000' };
|
|
214
|
-
const btnGhost = { padding: '7px 12px', borderRadius: 8, border: LINE, cursor: 'pointer', fontWeight: 600, fontSize: 12, background: 'rgba(255,255,255,0.05)', color: '#dfe6e9', textDecoration: 'none' };
|
|
235
|
+
const btnGhost = { padding: '7px 12px', borderRadius: 8, border: LINE, cursor: 'pointer', fontWeight: 600, fontSize: 12, background: 'rgba(var(--sd-ink, 255, 255, 255), 0.05)', color: 'var(--sd-fg-1, #dfe6e9)', textDecoration: 'none' };
|
|
@@ -28,7 +28,7 @@ import {
|
|
|
28
28
|
import { TIER_COLORS as THEME_TIERS } from '../../lib/themes';
|
|
29
29
|
|
|
30
30
|
const TIER = THEME_TIERS; // the theme's dot colours (lib/themes.js)
|
|
31
|
-
const LINE = '1px solid rgba(255,255,255,0.1)';
|
|
31
|
+
const LINE = '1px solid rgba(var(--sd-ink, 255, 255, 255), 0.1)';
|
|
32
32
|
const MAX_BUBBLES = 140;
|
|
33
33
|
const ALL_INDUSTRIES = [...INDUSTRIES, UNKNOWN_INDUSTRY];
|
|
34
34
|
|
|
@@ -44,7 +44,7 @@ export function Seg({ value, onChange, options }) {
|
|
|
44
44
|
{options.map(([v, label]) => (
|
|
45
45
|
<button key={v} onClick={() => onChange(v)} style={{
|
|
46
46
|
padding: '5px 10px', fontSize: 11.5, fontWeight: 600, border: 'none', cursor: 'pointer',
|
|
47
|
-
background: value === v ? 'rgba(52,152,219,0.25)' : 'transparent', color: value === v ? '#cfe6f7' : '#8b9a9a',
|
|
47
|
+
background: value === v ? 'rgba(52,152,219,0.25)' : 'transparent', color: value === v ? 'var(--sd-fg-1, #cfe6f7)' : 'var(--sd-fg-3, #8b9a9a)',
|
|
48
48
|
}}>{label}</button>
|
|
49
49
|
))}
|
|
50
50
|
</div>
|
|
@@ -80,27 +80,28 @@ export function SidePanel({ open, onToggle, children }) {
|
|
|
80
80
|
<button type="button" onClick={onToggle} style={{
|
|
81
81
|
position: 'fixed', left: 16, top: 140, zIndex: 30, cursor: 'pointer', height: 36, borderRadius: 18, padding: '0 14px 0 10px',
|
|
82
82
|
display: 'flex', alignItems: 'center', gap: 6, background: 'rgba(52,152,219,0.15)', border: '2px solid rgba(52,152,219,0.5)',
|
|
83
|
-
color: '#3498DB', fontWeight: 700, boxShadow: '0 0 12px rgba(52,152,219,0.3)', backdropFilter: 'blur(8px)',
|
|
83
|
+
color: 'var(--sd-blue, #3498DB)', fontWeight: 700, boxShadow: '0 0 12px rgba(52,152,219,0.3)', backdropFilter: 'blur(8px)',
|
|
84
84
|
}}>
|
|
85
85
|
<span style={{ fontSize: 18 }}>›</span><span style={{ fontSize: 11, fontWeight: 600 }}>Filters</span>
|
|
86
86
|
</button>
|
|
87
87
|
);
|
|
88
88
|
}
|
|
89
89
|
return (
|
|
90
|
-
<aside style={{
|
|
90
|
+
<aside data-glass-panel="side" style={{
|
|
91
91
|
width: 300, flexShrink: 0, height: '100%', overflowY: 'auto', boxSizing: 'border-box', padding: '16px 14px',
|
|
92
92
|
borderRight: '1px solid rgba(52,152,219,0.15)', background: 'var(--sd-panel)', fontSize: 13,
|
|
93
|
+
backdropFilter: 'var(--sd-panel-blur)', WebkitBackdropFilter: 'var(--sd-panel-blur)',
|
|
93
94
|
}}>
|
|
94
95
|
<button type="button" onClick={onToggle} style={{
|
|
95
96
|
display: 'flex', alignItems: 'center', gap: 6, width: '100%', marginBottom: 14, padding: '6px 12px', borderRadius: 6, cursor: 'pointer',
|
|
96
|
-
background: 'rgba(255,255,255,0.06)', border: '1px solid rgba(255,255,255,0.1)', color: '#aaa', fontSize: 12, fontWeight: 600,
|
|
97
|
+
background: 'rgba(var(--sd-ink, 255, 255, 255), 0.06)', border: '1px solid rgba(var(--sd-ink, 255, 255, 255), 0.1)', color: 'var(--sd-fg-3, #aaa)', fontSize: 12, fontWeight: 600,
|
|
97
98
|
}}><span style={{ fontSize: 16 }}>›</span> Close</button>
|
|
98
99
|
{children}
|
|
99
100
|
</aside>
|
|
100
101
|
);
|
|
101
102
|
}
|
|
102
103
|
|
|
103
|
-
export const panelHeading = { fontSize: 9, fontWeight: 700, color: '#555', letterSpacing: 1, margin: '14px 0 6px', textTransform: 'uppercase' };
|
|
104
|
+
export const panelHeading = { fontSize: 9, fontWeight: 700, color: 'var(--sd-fg-5, #555)', letterSpacing: 1, margin: '14px 0 6px', textTransform: 'uppercase' };
|
|
104
105
|
|
|
105
106
|
/** Does this person pass the filters? Tier and degree from the grid, as in Network Circle. */
|
|
106
107
|
function passes(p, f) {
|
|
@@ -195,9 +196,9 @@ export default function PathsAnalyzer({ d1 = [], d2 = [], d3 = [], initialShow =
|
|
|
195
196
|
industries={industries} hidden={hidden} setHidden={setHidden}
|
|
196
197
|
onIndustry={(key) => setFocus({ kind: 'industry', key })} />
|
|
197
198
|
<div style={panelHeading}>Read the map</div>
|
|
198
|
-
<div style={{ fontSize: 11, color: '#8b9a9a', marginBottom: 4 }}>Bubble size</div>
|
|
199
|
+
<div style={{ fontSize: 11, color: 'var(--sd-fg-3, #8b9a9a)', marginBottom: 4 }}>Bubble size</div>
|
|
199
200
|
<Seg value={sizeBy} onChange={setSizeBy} options={[['people', 'Your people'], ['sa', 'S & A there'], ['known', 'You know']]} />
|
|
200
|
-
<div style={{ fontSize: 11, color: '#8b9a9a', margin: '10px 0 4px' }}>Names</div>
|
|
201
|
+
<div style={{ fontSize: 11, color: 'var(--sd-fg-3, #8b9a9a)', margin: '10px 0 4px' }}>Names</div>
|
|
201
202
|
<Seg value={labels} onChange={setLabels} options={[['top', 'Biggest'], ['all', 'All'], ['none', 'None']]} />
|
|
202
203
|
{look('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.')}
|
|
203
204
|
</SidePanel>
|
|
@@ -226,10 +227,10 @@ function Filters({ filters, setFilters, counts, query, setQuery, industries, hid
|
|
|
226
227
|
<div style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>
|
|
227
228
|
<div style={panelHeading}>Filter</div>
|
|
228
229
|
<input value={query} onChange={(e) => setQuery(e.target.value)} placeholder="Find a company"
|
|
229
|
-
style={{ padding: '6px 10px', borderRadius: 7, border: LINE, background: 'rgba(255,255,255,0.05)', color: '#fff', fontSize: 13, width: '100%', boxSizing: 'border-box' }} />
|
|
230
|
+
style={{ padding: '6px 10px', borderRadius: 7, border: LINE, background: 'rgba(var(--sd-ink, 255, 255, 255), 0.05)', color: 'var(--sd-fg-1, #fff)', fontSize: 13, width: '100%', boxSizing: 'border-box' }} />
|
|
230
231
|
{/* The same tiers × degrees as Network Circle (Blake, 2026-10-02) */}
|
|
231
232
|
<TierGrid grid={filters.grid} counts={counts} onChange={(g) => set('grid', g)} mode="paths" />
|
|
232
|
-
<div style={{ fontSize: 11, color: '#8b9a9a', marginTop: -10 }}>Level</div>
|
|
233
|
+
<div style={{ fontSize: 11, color: 'var(--sd-fg-3, #8b9a9a)', marginTop: -10 }}>Level</div>
|
|
233
234
|
<Seg value={filters.seniority} onChange={(v) => set('seniority', v)} options={[['all', 'Any level'], ['senior', 'Director+'], ['csuite', 'C-suite']]} />
|
|
234
235
|
<div style={panelHeading}>Industries</div>
|
|
235
236
|
<div style={{ display: 'flex', gap: 6, flexWrap: 'wrap' }}>
|
|
@@ -241,13 +242,13 @@ function Filters({ filters, setFilters, counts, query, setQuery, industries, hid
|
|
|
241
242
|
onClick={() => setHidden((h) => { const n = new Set(h); if (n.has(i.key)) n.delete(i.key); else n.add(i.key); return n; })}
|
|
242
243
|
style={{ padding: '3px 7px', border: 'none', background: `${i.color}22`, cursor: 'pointer', color: i.color, fontSize: 11 }}>●</button>
|
|
243
244
|
<button onClick={() => onIndustry(i.key)} title="Analyse this industry"
|
|
244
|
-
style={{ padding: '3px 9px 3px 5px', border: 'none', background: 'transparent', cursor: 'pointer', color: '#cfd8d8', fontSize: 11.5 }}>
|
|
245
|
-
{i.label} <span style={{ color: '#778' }}>{i.people.length}</span>
|
|
245
|
+
style={{ padding: '3px 9px 3px 5px', border: 'none', background: 'transparent', cursor: 'pointer', color: 'var(--sd-fg-2, #cfd8d8)', fontSize: 11.5 }}>
|
|
246
|
+
{i.label} <span style={{ color: 'var(--sd-fg-4, #778)' }}>{i.people.length}</span>
|
|
246
247
|
</button>
|
|
247
248
|
</span>
|
|
248
249
|
);
|
|
249
250
|
})}
|
|
250
|
-
<span style={{ fontSize: 11, color: '#667', alignSelf: 'center' }}>Inferred from companies and headlines. ● hides one; its name opens it.</span>
|
|
251
|
+
<span style={{ fontSize: 11, color: 'var(--sd-fg-4, #667)', alignSelf: 'center' }}>Inferred from companies and headlines. ● hides one; its name opens it.</span>
|
|
251
252
|
</div>
|
|
252
253
|
</div>
|
|
253
254
|
);
|
|
@@ -349,7 +350,7 @@ function CompanyMap({ companies, links, focus, onCompany, onIndustry, onClear, s
|
|
|
349
350
|
const on = active && (e.source.id === active || e.target.id === active);
|
|
350
351
|
return (
|
|
351
352
|
<line key={i} x1={e.source.x} y1={e.source.y} x2={e.target.x} y2={e.target.y}
|
|
352
|
-
stroke={on ? '#FF6B35' : '#8fa6c0'} strokeOpacity={on ? 0.8 : active ? 0.04 : 0.14}
|
|
353
|
+
stroke={on ? '#FF6B35' : 'var(--sd-fg-3, #8fa6c0)'} strokeOpacity={on ? 0.8 : active ? 0.04 : 0.14}
|
|
353
354
|
strokeWidth={on ? 1 + Math.log2(1 + e.weight) : 0.4 + Math.log2(1 + e.weight) * 0.5} />
|
|
354
355
|
);
|
|
355
356
|
})}
|
|
@@ -371,19 +372,19 @@ function CompanyMap({ companies, links, focus, onCompany, onIndustry, onClear, s
|
|
|
371
372
|
onPointerDown={drag ? (ev) => drag(ev, n) : undefined}
|
|
372
373
|
onClick={(ev) => { ev.stopPropagation(); if (clicked()) onCompany(n.id); }}>
|
|
373
374
|
<title>{`${n.co.name} · ${n.co.industry.label} (inferred)\n${n.co.d1} you know · ${n.co.d2} reachable${n.co.d3 ? ` · ${n.co.d3} further` : ''}`}</title>
|
|
374
|
-
<circle r={n.r} fill={hot ? heatColour(heat(n)) : n.co.industry.color} fillOpacity={hot ? 0.9 : 0.75}
|
|
375
|
-
stroke={sel ? '#fff' : n.co.S ? TIER.S : 'rgba(0,0,0,0.35)'} strokeWidth={sel ? 2.5 : n.co.S ? 1.5 : 0.6} />
|
|
375
|
+
<circle className="sd-dot" r={n.r} fill={hot ? heatColour(heat(n)) : n.co.industry.color} fillOpacity={hot ? 0.9 : 0.75}
|
|
376
|
+
stroke={sel ? 'var(--sd-fg-1, #fff)' : n.co.S ? TIER.S : 'rgba(0,0,0,0.35)'} strokeWidth={sel ? 2.5 : n.co.S ? 1.5 : 0.6} />
|
|
376
377
|
{/* the share you already know, as an inner disc */}
|
|
377
|
-
{n.co.d1 > 0 && <circle r={n.r * Math.sqrt(n.co.d1 / Math.max(1, n.co.people.length))} fill="#fff" fillOpacity={0.35} />}
|
|
378
|
+
{n.co.d1 > 0 && <circle r={n.r * Math.sqrt(n.co.d1 / Math.max(1, n.co.people.length))} fill="var(--sd-fg-1, #fff)" fillOpacity={0.35} />}
|
|
378
379
|
{(labelled.has(n.id) || n.id === active || sel) && (
|
|
379
|
-
<text y={n.r + 11} textAnchor="middle" fontSize={10} fill="#e6edf0" style={{ pointerEvents: 'none' }}>{n.co.name}</text>
|
|
380
|
+
<text y={n.r + 11} textAnchor="middle" fontSize={10} fill="var(--sd-fg-1, #e6edf0)" style={{ pointerEvents: 'none' }}>{n.co.name}</text>
|
|
380
381
|
)}
|
|
381
382
|
</g>
|
|
382
383
|
);
|
|
383
384
|
})}
|
|
384
385
|
</svg>
|
|
385
386
|
)}
|
|
386
|
-
<div style={{ position: 'absolute', left: 12, bottom: 10, fontSize: 11, color: '#778', lineHeight: 1.6, pointerEvents: 'none' }}>
|
|
387
|
+
<div style={{ position: 'absolute', left: 12, bottom: 10, fontSize: 11, color: 'var(--sd-fg-4, #778)', lineHeight: 1.6, pointerEvents: 'none' }}>
|
|
387
388
|
Bubble = a company, sized by your people there; {hot ? '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.<br />
|
|
388
389
|
A line = one of your connections at one company knows people at the other.
|
|
389
390
|
{layout.cut ? ` Showing the ${MAX_BUBBLES} largest; ${layout.cut} smaller companies are in Companies.` : ''}
|
|
@@ -394,7 +395,7 @@ function CompanyMap({ companies, links, focus, onCompany, onIndustry, onClear, s
|
|
|
394
395
|
|
|
395
396
|
function Bar({ parts, total }) {
|
|
396
397
|
return (
|
|
397
|
-
<div style={{ display: 'flex', height: 6, borderRadius: 3, overflow: 'hidden', background: 'rgba(255,255,255,0.06)' }}>
|
|
398
|
+
<div style={{ display: 'flex', height: 6, borderRadius: 3, overflow: 'hidden', background: 'rgba(var(--sd-ink, 255, 255, 255), 0.06)' }}>
|
|
398
399
|
{parts.map(([n, color], i) => <div key={i} style={{ width: `${(n / Math.max(1, total)) * 100}%`, background: color }} />)}
|
|
399
400
|
</div>
|
|
400
401
|
);
|
|
@@ -406,7 +407,7 @@ function PersonLine({ p, note }) {
|
|
|
406
407
|
<span style={{ width: 7, height: 7, borderRadius: '50%', background: TIER[p.tier] || '#667', flexShrink: 0 }} />
|
|
407
408
|
<div style={{ minWidth: 0, flex: 1 }}>
|
|
408
409
|
<div style={{ fontWeight: 600, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>{p.name}</div>
|
|
409
|
-
<div style={{ fontSize: 11, color: '#8b9a9a', overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>{note || p.headline}</div>
|
|
410
|
+
<div style={{ fontSize: 11, color: 'var(--sd-fg-3, #8b9a9a)', overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>{note || p.headline}</div>
|
|
410
411
|
</div>
|
|
411
412
|
</div>
|
|
412
413
|
);
|
|
@@ -437,9 +438,9 @@ function AnalyzerPanel({ focus, data, index, links, d1, d2, filters, onClose, on
|
|
|
437
438
|
const topCos = !isCompany ? [...data.companies.entries()].sort((a, b) => b[1] - a[1]).slice(0, 10) : [];
|
|
438
439
|
|
|
439
440
|
return (
|
|
440
|
-
<aside style={{ width: 360, flexShrink: 0, borderLeft: LINE, overflow: 'auto', padding: 16, background: 'rgba(255,255,255,0.02)' }}>
|
|
441
|
-
<button onClick={onClose} style={{ background: 'none', border: 'none', color: '#888', cursor: 'pointer', fontSize: 12, padding: 0 }}>✕ Close</button>
|
|
442
|
-
<div style={{ fontSize: 10, letterSpacing: 1, color: '#8b9a9a', marginTop: 8 }}>{isCompany ? 'COMPANY' : 'INDUSTRY'} ANALYZER</div>
|
|
441
|
+
<aside style={{ width: 360, flexShrink: 0, borderLeft: LINE, overflow: 'auto', padding: 16, background: 'rgba(var(--sd-ink, 255, 255, 255), 0.02)' }}>
|
|
442
|
+
<button onClick={onClose} style={{ background: 'none', border: 'none', color: 'var(--sd-fg-3, #888)', cursor: 'pointer', fontSize: 12, padding: 0 }}>✕ Close</button>
|
|
443
|
+
<div style={{ fontSize: 10, letterSpacing: 1, color: 'var(--sd-fg-3, #8b9a9a)', marginTop: 8 }}>{isCompany ? 'COMPANY' : 'INDUSTRY'} ANALYZER</div>
|
|
443
444
|
<h2 style={{ margin: '4px 0 6px', fontSize: 20 }}>{isCompany ? data.name : data.label}</h2>
|
|
444
445
|
{/* A company's industry opens that industry here (Blake, 2026-10-02: industries live in the side card, not a tab). */}
|
|
445
446
|
{isCompany && onIndustry ? (
|
|
@@ -455,9 +456,9 @@ function AnalyzerPanel({ focus, data, index, links, d1, d2, filters, onClose, on
|
|
|
455
456
|
|
|
456
457
|
<div style={{ display: 'grid', gridTemplateColumns: 'repeat(3, 1fr)', gap: 8, margin: '14px 0' }}>
|
|
457
458
|
{[[d1n, 'you know', '#00ff88'], [d2n, 'reachable', '#FF6B35'], [people.filter((p) => isSenior(p.headline)).length, 'director+', '#FFD700']].map(([n, l, c]) => (
|
|
458
|
-
<div key={l} style={{ padding: 8, borderRadius: 8, background: 'rgba(255,255,255,0.04)', textAlign: 'center' }}>
|
|
459
|
+
<div key={l} style={{ padding: 8, borderRadius: 8, background: 'rgba(var(--sd-ink, 255, 255, 255), 0.04)', textAlign: 'center' }}>
|
|
459
460
|
<div style={{ fontSize: 20, fontWeight: 800, color: c }}>{n}</div>
|
|
460
|
-
<div style={{ fontSize: 10.5, color: '#8b9a9a' }}>{l}</div>
|
|
461
|
+
<div style={{ fontSize: 10.5, color: 'var(--sd-fg-3, #8b9a9a)' }}>{l}</div>
|
|
461
462
|
</div>
|
|
462
463
|
))}
|
|
463
464
|
</div>
|
|
@@ -465,16 +466,16 @@ function AnalyzerPanel({ focus, data, index, links, d1, d2, filters, onClose, on
|
|
|
465
466
|
<Section title="By level">
|
|
466
467
|
{levels.map(([label, { n }]) => (
|
|
467
468
|
<div key={label} style={{ display: 'grid', gridTemplateColumns: '110px 1fr 28px', gap: 8, alignItems: 'center', fontSize: 11.5, marginBottom: 4 }}>
|
|
468
|
-
<span style={{ color: '#aab7b7' }}>{label}</span>
|
|
469
|
+
<span style={{ color: 'var(--sd-fg-2, #aab7b7)' }}>{label}</span>
|
|
469
470
|
<Bar total={people.length} parts={[[n, '#3498DB']]} />
|
|
470
|
-
<span style={{ color: '#778', textAlign: 'right' }}>{n}</span>
|
|
471
|
+
<span style={{ color: 'var(--sd-fg-4, #778)', textAlign: 'right' }}>{n}</span>
|
|
471
472
|
</div>
|
|
472
473
|
))}
|
|
473
474
|
</Section>
|
|
474
475
|
|
|
475
476
|
{isCompany && ways && (
|
|
476
477
|
<Section title="Ways in">
|
|
477
|
-
{ways.direct.length > 0 && <div style={{ fontSize: 11, color: '#00ff88', margin: '2px 0' }}>You already know {ways.direct.length} here</div>}
|
|
478
|
+
{ways.direct.length > 0 && <div style={{ fontSize: 11, color: 'var(--sd-green, #00ff88)', margin: '2px 0' }}>You already know {ways.direct.length} here</div>}
|
|
478
479
|
{(() => {
|
|
479
480
|
// One line per person: someone who works here and also knows others
|
|
480
481
|
// here is the best way in of all, so they lead, with both facts.
|
|
@@ -492,7 +493,7 @@ function AnalyzerPanel({ focus, data, index, links, d1, d2, filters, onClose, on
|
|
|
492
493
|
</>
|
|
493
494
|
);
|
|
494
495
|
})()}
|
|
495
|
-
{!ways.direct.length && !ways.bridges.length && <div style={{ fontSize: 12, color: '#778' }}>No one you know links here yet.</div>}
|
|
496
|
+
{!ways.direct.length && !ways.bridges.length && <div style={{ fontSize: 12, color: 'var(--sd-fg-4, #778)' }}>No one you know links here yet.</div>}
|
|
496
497
|
</Section>
|
|
497
498
|
)}
|
|
498
499
|
|
|
@@ -504,8 +505,8 @@ function AnalyzerPanel({ focus, data, index, links, d1, d2, filters, onClose, on
|
|
|
504
505
|
<Section title="Connected companies">
|
|
505
506
|
<div style={{ display: 'flex', gap: 6, flexWrap: 'wrap' }}>
|
|
506
507
|
{related.map((r) => (
|
|
507
|
-
<button key={r.name} onClick={() => onCompany(r.name)} style={{ padding: '3px 9px', borderRadius: 10, border: LINE, background: `${(index.get(r.name)?.industry.color || '#666')}22`, color: '#dfe6e9', fontSize: 11.5, cursor: 'pointer' }}>
|
|
508
|
-
{r.name} <span style={{ color: '#778' }}>{r.weight}</span>
|
|
508
|
+
<button key={r.name} onClick={() => onCompany(r.name)} style={{ padding: '3px 9px', borderRadius: 10, border: LINE, background: `${(index.get(r.name)?.industry.color || '#666')}22`, color: 'var(--sd-fg-1, #dfe6e9)', fontSize: 11.5, cursor: 'pointer' }}>
|
|
509
|
+
{r.name} <span style={{ color: 'var(--sd-fg-4, #778)' }}>{r.weight}</span>
|
|
509
510
|
</button>
|
|
510
511
|
))}
|
|
511
512
|
</div>
|
|
@@ -518,7 +519,7 @@ function AnalyzerPanel({ focus, data, index, links, d1, d2, filters, onClose, on
|
|
|
518
519
|
<div key={name} onClick={() => onCompany(name)} style={{ display: 'grid', gridTemplateColumns: '1fr 60px 24px', gap: 8, alignItems: 'center', fontSize: 12, padding: '3px 0', cursor: 'pointer' }}>
|
|
519
520
|
<span style={{ overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>{name}</span>
|
|
520
521
|
<Bar total={topCos[0][1]} parts={[[n, industry.color]]} />
|
|
521
|
-
<span style={{ color: '#778', textAlign: 'right' }}>{n}</span>
|
|
522
|
+
<span style={{ color: 'var(--sd-fg-4, #778)', textAlign: 'right' }}>{n}</span>
|
|
522
523
|
</div>
|
|
523
524
|
))}
|
|
524
525
|
</Section>
|
|
@@ -536,7 +537,7 @@ function AnalyzerPanel({ focus, data, index, links, d1, d2, filters, onClose, on
|
|
|
536
537
|
function Section({ title, children }) {
|
|
537
538
|
return (
|
|
538
539
|
<div style={{ marginTop: 14 }}>
|
|
539
|
-
<div style={{ fontSize: 10.5, letterSpacing: 0.8, color: '#8b9a9a', fontWeight: 700, marginBottom: 6 }}>{title.toUpperCase()}</div>
|
|
540
|
+
<div style={{ fontSize: 10.5, letterSpacing: 0.8, color: 'var(--sd-fg-3, #8b9a9a)', fontWeight: 700, marginBottom: 6 }}>{title.toUpperCase()}</div>
|
|
540
541
|
{children}
|
|
541
542
|
</div>
|
|
542
543
|
);
|
|
@@ -550,8 +551,8 @@ function CompanyScoreLine({ name }) {
|
|
|
550
551
|
if (!c) return null;
|
|
551
552
|
const from = { yours: 'your score', known: 'known list', network: 'estimated', default: 'unknown company' }[c.source];
|
|
552
553
|
return (
|
|
553
|
-
<div style={{ display: 'flex', alignItems: 'center', gap: 8, marginTop: 10, fontSize: 12, color: '#aab7b7' }}>
|
|
554
|
-
Company score <b style={{ color: '#fff', fontSize: 15 }}>{c.score}</b>/10 · {from}
|
|
554
|
+
<div style={{ display: 'flex', alignItems: 'center', gap: 8, marginTop: 10, fontSize: 12, color: 'var(--sd-fg-2, #aab7b7)' }}>
|
|
555
|
+
Company score <b style={{ color: 'var(--sd-fg-1, #fff)', fontSize: 15 }}>{c.score}</b>/10 · {from}
|
|
555
556
|
<span style={{ marginLeft: 'auto' }}><ScorePicker company={c} onSet={setScore} compact /></span>
|
|
556
557
|
</div>
|
|
557
558
|
);
|
|
@@ -25,7 +25,7 @@ import { clusterStrength } from '../../lib/map-heat';
|
|
|
25
25
|
import { TIER_COLORS as THEME_TIERS } from '../../lib/themes';
|
|
26
26
|
|
|
27
27
|
const TIER = THEME_TIERS; // the theme's dot colours (lib/themes.js)
|
|
28
|
-
const LINE = '1px solid rgba(255,255,255,0.1)';
|
|
28
|
+
const LINE = '1px solid rgba(var(--sd-ink, 255, 255, 255), 0.1)';
|
|
29
29
|
const UNSCANNED = '#3a3f55';
|
|
30
30
|
const MAX_BUBBLES = 400;
|
|
31
31
|
const ALL_INDUSTRIES = [...INDUSTRIES, UNKNOWN_INDUSTRY];
|
|
@@ -88,7 +88,7 @@ export default function PeopleMap({ d1 = [], d2 = [], top = null, look = null, c
|
|
|
88
88
|
{top}
|
|
89
89
|
<div style={panelHeading}>Filter</div>
|
|
90
90
|
<input value={query} onChange={(e) => setQuery(e.target.value)} placeholder="Find a person"
|
|
91
|
-
style={{ width: '100%', boxSizing: 'border-box', padding: '6px 10px', borderRadius: 7, border: LINE, background: 'rgba(255,255,255,0.05)', color: '#fff', fontSize: 13, marginBottom: 8 }} />
|
|
91
|
+
style={{ width: '100%', boxSizing: 'border-box', padding: '6px 10px', borderRadius: 7, border: LINE, background: 'rgba(var(--sd-ink, 255, 255, 255), 0.05)', color: 'var(--sd-fg-1, #fff)', fontSize: 13, marginBottom: 8 }} />
|
|
92
92
|
<div style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>
|
|
93
93
|
<Seg value={who} onChange={setWho} options={[['scanned', `Scanned (${fmt(scannedCount)})`], ['all', `All (${fmt(model.people.length)})`]]} />
|
|
94
94
|
</div>
|
|
@@ -103,18 +103,18 @@ export default function PeopleMap({ d1 = [], d2 = [], top = null, look = null, c
|
|
|
103
103
|
<button key={i.key} title={off ? 'Show on the map' : 'Hide from the map'}
|
|
104
104
|
onClick={() => setHidden((h) => { const n = new Set(h); if (n.has(i.key)) n.delete(i.key); else n.add(i.key); return n; })}
|
|
105
105
|
style={{ display: 'inline-flex', alignItems: 'center', gap: 6, padding: '3px 10px', borderRadius: 14, cursor: 'pointer',
|
|
106
|
-
border: `1px solid ${i.color}55`, background: off ? 'transparent' : `${i.color}14`, color: '#cfd8d8', fontSize: 11.5, opacity: off ? 0.4 : 1 }}>
|
|
106
|
+
border: `1px solid ${i.color}55`, background: off ? 'transparent' : `${i.color}14`, color: 'var(--sd-fg-2, #cfd8d8)', fontSize: 11.5, opacity: off ? 0.4 : 1 }}>
|
|
107
107
|
<span style={{ width: 7, height: 7, borderRadius: '50%', background: i.color }} />
|
|
108
|
-
{i.label} <span style={{ color: '#778' }}>{fmt(i.count)}</span>
|
|
108
|
+
{i.label} <span style={{ color: 'var(--sd-fg-4, #778)' }}>{fmt(i.count)}</span>
|
|
109
109
|
</button>
|
|
110
110
|
);
|
|
111
111
|
})}
|
|
112
112
|
</div>
|
|
113
|
-
<div style={{ fontSize: 10.5, color: '#667', marginTop: 6 }}>Inferred from where each connection works.</div>
|
|
113
|
+
<div style={{ fontSize: 10.5, color: 'var(--sd-fg-4, #667)', marginTop: 6 }}>Inferred from where each connection works.</div>
|
|
114
114
|
<div style={panelHeading}>Read the map</div>
|
|
115
|
-
<div style={{ fontSize: 11, color: '#8b9a9a', marginBottom: 4 }}>Bubble size</div>
|
|
115
|
+
<div style={{ fontSize: 11, color: 'var(--sd-fg-3, #8b9a9a)', marginBottom: 4 }}>Bubble size</div>
|
|
116
116
|
<Seg value={sizeBy} onChange={setSizeBy} options={Object.entries(SIZE_BY).map(([k, v]) => [k, v.label])} />
|
|
117
|
-
<div style={{ fontSize: 11, color: '#8b9a9a', margin: '10px 0 4px' }}>Names</div>
|
|
117
|
+
<div style={{ fontSize: 11, color: 'var(--sd-fg-3, #8b9a9a)', margin: '10px 0 4px' }}>Names</div>
|
|
118
118
|
<Seg value={labels} onChange={setLabels} options={[['top', 'Biggest'], ['all', 'All'], ['none', 'None']]} />
|
|
119
119
|
{look}
|
|
120
120
|
</SidePanel>
|
|
@@ -221,7 +221,7 @@ function Bubbles({ people, links, sizeBy, sectorOf, rank, onOpen, names = 'top',
|
|
|
221
221
|
const on = hover && (e.source.id === hover || e.target.id === hover);
|
|
222
222
|
return (
|
|
223
223
|
<line key={i} x1={e.source.x} y1={e.source.y} x2={e.target.x} y2={e.target.y}
|
|
224
|
-
stroke={on ? '#FF6B35' : '#8fa6c0'} strokeOpacity={on ? 0.8 : hover ? 0.03 : 0.09}
|
|
224
|
+
stroke={on ? '#FF6B35' : 'var(--sd-fg-3, #8fa6c0)'} strokeOpacity={on ? 0.8 : hover ? 0.03 : 0.09}
|
|
225
225
|
strokeWidth={on ? 1 + Math.log2(1 + e.weight) : 0.4 + Math.log2(1 + e.weight) * 0.4} />
|
|
226
226
|
);
|
|
227
227
|
})}
|
|
@@ -239,14 +239,14 @@ function Bubbles({ people, links, sizeBy, sectorOf, rank, onOpen, names = 'top',
|
|
|
239
239
|
onMouseEnter={() => setHover(n.id)} onMouseLeave={() => setHover(null)}
|
|
240
240
|
onPointerDown={drag ? (ev) => drag(ev, n) : undefined}
|
|
241
241
|
onClick={() => { if (clicked() && p.size) onOpen(n.id); }}>
|
|
242
|
-
<circle r={n.r} fill={!p.size ? UNSCANNED : hot ? heatColour(heat(n)) : n.sector.color} fillOpacity={p.size ? 0.92 : 0.6}
|
|
243
|
-
stroke={hover === n.id ? '#fff' : p.S ? TIER.S : 'rgba(0,0,0,0.35)'}
|
|
242
|
+
<circle className="sd-dot" r={n.r} fill={!p.size ? UNSCANNED : hot ? heatColour(heat(n)) : n.sector.color} fillOpacity={p.size ? 0.92 : 0.6}
|
|
243
|
+
stroke={hover === n.id ? 'var(--sd-fg-1, #fff)' : p.S ? TIER.S : 'rgba(0,0,0,0.35)'}
|
|
244
244
|
strokeWidth={hover === n.id ? 2.5 : p.S ? Math.min(4, 1 + p.S / 40) : 0.6} />
|
|
245
245
|
{/* The share of their cluster only they can open, as an inner disc */}
|
|
246
|
-
{p.size > 0 && p.only > 0 && <circle r={n.r * Math.sqrt(p.share) * 0.85} fill="#fff" fillOpacity={0.3} />}
|
|
246
|
+
{p.size > 0 && p.only > 0 && <circle r={n.r * Math.sqrt(p.share) * 0.85} fill="var(--sd-fg-1, #fff)" fillOpacity={0.3} />}
|
|
247
247
|
{(labelled.has(n.id) || hover === n.id) && (
|
|
248
|
-
<text y={n.r + 11} textAnchor="middle" fontSize={10} fill="#e6edf0" style={{ pointerEvents: 'none' }}
|
|
249
|
-
paintOrder="stroke" stroke="rgba(0,0,0,0.6)" strokeWidth={3}>{p.person.name}</text>
|
|
248
|
+
<text y={n.r + 11} textAnchor="middle" fontSize={10} fill="var(--sd-fg-1, #e6edf0)" style={{ pointerEvents: 'none' }}
|
|
249
|
+
paintOrder="stroke" stroke="rgba(var(--sd-shade, 0, 0, 0), 0.6)" strokeWidth={3}>{p.person.name}</text>
|
|
250
250
|
)}
|
|
251
251
|
</g>
|
|
252
252
|
);
|
|
@@ -254,7 +254,7 @@ function Bubbles({ people, links, sizeBy, sectorOf, rank, onOpen, names = 'top',
|
|
|
254
254
|
</svg>
|
|
255
255
|
)}
|
|
256
256
|
{hovered && <Card n={hovered} at={onScreen(hovered)} w={w} rank={rank(hovered.id)} />}
|
|
257
|
-
<div style={{ position: 'absolute', left: 12, bottom: 10, fontSize: 11, color: '#778', lineHeight: 1.6, pointerEvents: 'none' }}>
|
|
257
|
+
<div style={{ position: 'absolute', left: 12, bottom: 10, fontSize: 11, color: 'var(--sd-fg-4, #778)', lineHeight: 1.6, pointerEvents: 'none' }}>
|
|
258
258
|
Bubble = one of your connections, sized by {sizeBy.label.toLowerCase()} (value: S tier counts 3, A tier 2, everyone else 1){hot ? '; colour = how strong their cluster is, person for person, cold to white hot' : ''};
|
|
259
259
|
white centre = the share of their cluster only they can open; gold ring = S tier inside.<br />
|
|
260
260
|
A line = two of your connections whose clusters share people. Grey = not scanned yet.
|
|
@@ -273,11 +273,11 @@ function Card({ n, at, w, rank }) {
|
|
|
273
273
|
return (
|
|
274
274
|
<div style={{
|
|
275
275
|
position: 'absolute', left, top: Math.max(8, at.y - 70), width, pointerEvents: 'none', zIndex: 5,
|
|
276
|
-
padding: '12px 14px', borderRadius: 12, background: 'rgba(8,10,22,0.96)', border: `1px solid ${n.sector.color}99`,
|
|
277
|
-
boxShadow: '0 12px 40px rgba(0,0,0,0.6)', fontSize: 12, lineHeight: 1.45, color: '#ddd',
|
|
276
|
+
padding: '12px 14px', borderRadius: 12, background: 'var(--sd-surface, rgba(8,10,22,0.96))', border: `1px solid ${n.sector.color}99`,
|
|
277
|
+
boxShadow: '0 12px 40px rgba(0,0,0,0.6)', fontSize: 12, lineHeight: 1.45, color: 'var(--sd-fg-1, #ddd)',
|
|
278
278
|
}}>
|
|
279
|
-
<div style={{ fontSize: 15, fontWeight: 800, color: '#fff' }}>{p.person.name}</div>
|
|
280
|
-
<div style={{ fontSize: 11.5, color: '#8a8fa8' }}>
|
|
279
|
+
<div style={{ fontSize: 15, fontWeight: 800, color: 'var(--sd-fg-1, #fff)' }}>{p.person.name}</div>
|
|
280
|
+
<div style={{ fontSize: 11.5, color: 'var(--sd-fg-3, #8a8fa8)' }}>
|
|
281
281
|
{role}{p.person.tier ? ` · ${p.person.tier}-tier` : ''} · {n.sector.label}
|
|
282
282
|
</div>
|
|
283
283
|
{p.size ? (
|
|
@@ -288,12 +288,12 @@ function Card({ n, at, w, rank }) {
|
|
|
288
288
|
<Stat value={`${fmt(p.S)} S · ${fmt(p.A)} A`} label="the strongest among them" color="#FFD700" />
|
|
289
289
|
<Stat value={`${fmt(p.only)} (${Math.round(p.share * 100)}%)`} label="only through them" color="#00E5FF" />
|
|
290
290
|
</div>
|
|
291
|
-
<div style={{ fontSize: 11.5, color: '#aab' }}>
|
|
291
|
+
<div style={{ fontSize: 11.5, color: 'var(--sd-fg-3, #aab)' }}>
|
|
292
292
|
{rank === 1 ? 'The most valuable cluster you’ve scanned. ' : rank != null ? `Worth more than ${Math.round(rank * 100)}% of the clusters you’ve scanned. ` : ''}Click to open it in Bridge Chains.
|
|
293
293
|
</div>
|
|
294
294
|
</>
|
|
295
295
|
) : (
|
|
296
|
-
<div style={{ fontSize: 11.5, color: '#aab', marginTop: 8 }}>Their circle isn’t scanned yet, so there’s no cluster to size.</div>
|
|
296
|
+
<div style={{ fontSize: 11.5, color: 'var(--sd-fg-3, #aab)', marginTop: 8 }}>Their circle isn’t scanned yet, so there’s no cluster to size.</div>
|
|
297
297
|
)}
|
|
298
298
|
</div>
|
|
299
299
|
);
|
|
@@ -303,7 +303,7 @@ function Stat({ value, label, color = '#fff' }) {
|
|
|
303
303
|
return (
|
|
304
304
|
<div>
|
|
305
305
|
<div style={{ fontSize: 15, fontWeight: 800, color }}>{value}</div>
|
|
306
|
-
<div style={{ fontSize: 10.5, color: '#8a8fa8' }}>{label}</div>
|
|
306
|
+
<div style={{ fontSize: 10.5, color: 'var(--sd-fg-3, #8a8fa8)' }}>{label}</div>
|
|
307
307
|
</div>
|
|
308
308
|
);
|
|
309
309
|
}
|