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
|
@@ -55,7 +55,7 @@ export default function RingsView({ connections, degree2 = [], onSelect, mode })
|
|
|
55
55
|
<div style={{
|
|
56
56
|
width: 56, height: 56, borderRadius: '50%', margin: '0 auto',
|
|
57
57
|
border: `3px solid ${TIER_COLORS[cl.bridge.tier]}`,
|
|
58
|
-
overflow: 'hidden', background: '#1a1a2e',
|
|
58
|
+
overflow: 'hidden', background: 'var(--sd-card, #1a1a2e)',
|
|
59
59
|
boxShadow: hoveredId === cl.bridge.id ? `0 0 20px ${TIER_COLORS[cl.bridge.tier]}60` : `0 0 10px ${TIER_COLORS[cl.bridge.tier]}20`,
|
|
60
60
|
transition: 'box-shadow 0.2s',
|
|
61
61
|
}}>
|
|
@@ -63,12 +63,12 @@ export default function RingsView({ connections, degree2 = [], onSelect, mode })
|
|
|
63
63
|
<img src={localPhoto(cl.bridge.profile_image_url)} alt="" style={{ width: '100%', height: '100%', objectFit: 'cover' }} />
|
|
64
64
|
) : (
|
|
65
65
|
<div style={{ width: '100%', height: '100%', display: 'flex', alignItems: 'center', justifyContent: 'center',
|
|
66
|
-
background: TIER_COLORS[cl.bridge.tier], color: cl.bridge.tier === 'S' ? '#000' : '#fff', fontSize: 20, fontWeight: 800 }}>
|
|
66
|
+
background: TIER_COLORS[cl.bridge.tier], color: cl.bridge.tier === 'S' ? '#000' : 'var(--sd-fg-1, #fff)', fontSize: 20, fontWeight: 800 }}>
|
|
67
67
|
{cl.bridge.name?.charAt(0)}
|
|
68
68
|
</div>
|
|
69
69
|
)}
|
|
70
70
|
</div>
|
|
71
|
-
<div style={{ fontSize: 12, fontWeight: 700, color: '#fff', marginTop: 4 }}>{cl.bridge.name}</div>
|
|
71
|
+
<div style={{ fontSize: 12, fontWeight: 700, color: 'var(--sd-fg-1, #fff)', marginTop: 4 }}>{cl.bridge.name}</div>
|
|
72
72
|
<div style={{ fontSize: 9, color: TIER_COLORS[cl.bridge.tier], fontWeight: 600 }}>
|
|
73
73
|
{cl.bridge.tier}-Tier · {cl.total} connections · {cl.sCount > 0 ? cl.sCount + 'S ' : ''}{cl.aCount > 0 ? cl.aCount + 'A' : ''}
|
|
74
74
|
</div>
|
|
@@ -106,7 +106,7 @@ export default function RingsView({ connections, degree2 = [], onSelect, mode })
|
|
|
106
106
|
onError={e => { e.target.style.display = 'none'; e.target.parentElement.style.background = TIER_COLORS[tier]; }} />
|
|
107
107
|
) : (
|
|
108
108
|
<span style={{ display: 'flex', width: '100%', height: '100%', alignItems: 'center', justifyContent: 'center',
|
|
109
|
-
fontSize: size * 0.4, fontWeight: 700, color: tier === 'S' ? '#000' : '#fff' }}>
|
|
109
|
+
fontSize: size * 0.4, fontWeight: 700, color: tier === 'S' ? '#000' : 'var(--sd-fg-1, #fff)' }}>
|
|
110
110
|
{p.name?.charAt(0)}
|
|
111
111
|
</span>
|
|
112
112
|
)}
|
|
@@ -118,8 +118,8 @@ export default function RingsView({ connections, degree2 = [], onSelect, mode })
|
|
|
118
118
|
}}>
|
|
119
119
|
<div style={{
|
|
120
120
|
fontSize: isHov ? 10 : 8, fontWeight: 600,
|
|
121
|
-
color: isHov ? '#fff' : '#aaa',
|
|
122
|
-
background: isHov ? 'rgba(0,0,0,0.85)' : 'transparent',
|
|
121
|
+
color: isHov ? 'var(--sd-fg-1, #fff)' : 'var(--sd-fg-3, #aaa)',
|
|
122
|
+
background: isHov ? 'var(--sd-surface, rgba(0,0,0,0.85))' : 'transparent',
|
|
123
123
|
padding: isHov ? '3px 8px' : 0, borderRadius: 4,
|
|
124
124
|
}}>
|
|
125
125
|
{p.name?.split(' ')[0]}
|
|
@@ -221,7 +221,7 @@ export default function RingsView({ connections, degree2 = [], onSelect, mode })
|
|
|
221
221
|
) : (
|
|
222
222
|
<span style={{
|
|
223
223
|
fontSize: size * 0.4, fontWeight: 700,
|
|
224
|
-
color: tier === 'S' ? '#000' : '#fff',
|
|
224
|
+
color: tier === 'S' ? '#000' : 'var(--sd-fg-1, #fff)',
|
|
225
225
|
}}>{c.name?.charAt(0)}</span>
|
|
226
226
|
)}
|
|
227
227
|
</div>
|
|
@@ -235,8 +235,8 @@ export default function RingsView({ connections, degree2 = [], onSelect, mode })
|
|
|
235
235
|
}}>
|
|
236
236
|
<div style={{
|
|
237
237
|
fontSize: tier === 'S' ? 9 : 10, fontWeight: 600,
|
|
238
|
-
color: isHovered ? '#fff' : '#aaa',
|
|
239
|
-
background: isHovered ? 'rgba(0,0,0,0.85)' : 'transparent',
|
|
238
|
+
color: isHovered ? 'var(--sd-fg-1, #fff)' : 'var(--sd-fg-3, #aaa)',
|
|
239
|
+
background: isHovered ? 'var(--sd-surface, rgba(0,0,0,0.85))' : 'transparent',
|
|
240
240
|
padding: isHovered ? '3px 8px' : 0,
|
|
241
241
|
borderRadius: 4,
|
|
242
242
|
}}>
|
|
@@ -249,8 +249,8 @@ export default function RingsView({ connections, degree2 = [], onSelect, mode })
|
|
|
249
249
|
</div>
|
|
250
250
|
{isHovered && c.headline && (
|
|
251
251
|
<div style={{
|
|
252
|
-
fontSize: 8, color: '#888', marginTop: 2,
|
|
253
|
-
background: 'rgba(0,0,0,0.85)', padding: '2px 6px', borderRadius: 3,
|
|
252
|
+
fontSize: 8, color: 'var(--sd-fg-3, #888)', marginTop: 2,
|
|
253
|
+
background: 'rgba(var(--sd-shade, 0, 0, 0), 0.85)', padding: '2px 6px', borderRadius: 3,
|
|
254
254
|
maxWidth: 160, overflow: 'hidden', textOverflow: 'ellipsis',
|
|
255
255
|
}}>{c.headline.substring(0, 40)}</div>
|
|
256
256
|
)}
|
|
@@ -2,28 +2,44 @@
|
|
|
2
2
|
|
|
3
3
|
// The Scan page's radar (Blake, 2026-10-02: "making the scan button more
|
|
4
4
|
// gamified, having the slow medium high scan option"). A round Scan button in
|
|
5
|
-
// the middle
|
|
6
|
-
//
|
|
7
|
-
//
|
|
8
|
-
//
|
|
5
|
+
// the middle, the last 24 hours' searches against the budget round the edge,
|
|
6
|
+
// and beside it the three speeds with what each means for the rest of the
|
|
7
|
+
// budget. Speed only changes searches an hour (lib/scan-pace.js); the daily
|
|
8
|
+
// budget is still the cap.
|
|
9
|
+
//
|
|
10
|
+
// While a scan runs the Scan button is a hub and the people it finds gather
|
|
11
|
+
// round it as a cluster, as the map draws one (Blake, 2026-10-03: "for the
|
|
12
|
+
// scanner its a cluster and shows the dots building every page adds to the
|
|
13
|
+
// ring so it fits our theme and style"): a dot for each person each page
|
|
14
|
+
// found, filling the rings from the inside out, each page's batch in the next
|
|
15
|
+
// of the theme's gold, purple and blue (the header's dots, page for page). Only
|
|
16
|
+
// what the scanner has said: how many each page found, nothing about who.
|
|
9
17
|
|
|
18
|
+
import { useSyncExternalStore } from 'react';
|
|
10
19
|
import { PACES, PACE_NAMES, paceOf, paceSeconds, searchesPerHour, durationText } from '../../lib/scan-pace';
|
|
20
|
+
import { ringLayout } from '../../lib/chain-layout';
|
|
21
|
+
import { TIER_COLORS } from '../../lib/themes';
|
|
22
|
+
import { watchScanner, scannerNow, SCANNER_UNKNOWN } from '../../lib/scraper-client';
|
|
11
23
|
|
|
12
24
|
const SIZE = 236;
|
|
13
25
|
const C = SIZE / 2;
|
|
14
26
|
const CSS = `
|
|
15
|
-
@keyframes
|
|
16
|
-
@keyframes
|
|
17
|
-
|
|
18
|
-
.
|
|
27
|
+
@keyframes clusterTurn { to { transform: rotate(360deg); } }
|
|
28
|
+
@keyframes clusterIn { from { opacity: 0; transform: scale(0.2); } }
|
|
29
|
+
@keyframes clusterHub { 0%, 100% { opacity: .35; } 50% { opacity: .8; } }
|
|
30
|
+
.cluster-turn { transform-origin: ${C}px ${C}px; animation: clusterTurn 90s linear infinite; }
|
|
31
|
+
.cluster-dot { transition: transform .6s cubic-bezier(.2,.8,.2,1); transform-box: fill-box; }
|
|
32
|
+
.cluster-dot.fresh circle { animation: clusterIn .45s cubic-bezier(.2,.9,.3,1.3) both; transform-box: fill-box; transform-origin: center; }
|
|
33
|
+
.cluster-hub { animation: clusterHub 1.8s ease-in-out infinite; }
|
|
19
34
|
.radar-go { transition: transform .15s ease, box-shadow .2s ease; }
|
|
20
35
|
.radar-go:not(:disabled):hover { transform: scale(1.04); box-shadow: 0 0 34px rgba(0,255,136,.45); }
|
|
21
36
|
.radar-go:not(:disabled):active { transform: scale(.97); }
|
|
22
|
-
@media (prefers-reduced-motion: reduce) { .
|
|
37
|
+
@media (prefers-reduced-motion: reduce) { .cluster-turn, .cluster-dot.fresh circle, .cluster-hub { animation: none; } .cluster-dot { transition: none; } }
|
|
23
38
|
`;
|
|
24
39
|
|
|
25
|
-
//
|
|
26
|
-
const
|
|
40
|
+
// Past this many, the newest are drawn and the count says the rest.
|
|
41
|
+
const MAX_DOTS = 420;
|
|
42
|
+
const INNER = 72; // the first ring, just clear of the Scan button
|
|
27
43
|
|
|
28
44
|
function arc(r, from, to) {
|
|
29
45
|
const p = (a) => `${(C + r * Math.cos(a)).toFixed(2)} ${(C + r * Math.sin(a)).toFixed(2)}`;
|
|
@@ -31,7 +47,22 @@ function arc(r, from, to) {
|
|
|
31
47
|
return `M${p(from)} A${r} ${r} 0 ${large} 1 ${p(to)}`;
|
|
32
48
|
}
|
|
33
49
|
|
|
50
|
+
/** Where each person found so far sits round the hub, and which page found them. */
|
|
51
|
+
function clusterDots(found, R) {
|
|
52
|
+
const total = found.reduce((a, b) => a + b, 0);
|
|
53
|
+
const n = Math.min(total, MAX_DOTS);
|
|
54
|
+
if (!n) return { dots: [], total };
|
|
55
|
+
const page = [];
|
|
56
|
+
for (let i = found.length - 1; i >= 0 && page.length < n; i--) for (let k = 0; k < found[i] && page.length < n; k++) page.push(i);
|
|
57
|
+
page.reverse(); // oldest first, so they take the inner rings
|
|
58
|
+
const { points } = ringLayout(n, { inner: INNER, outer: R - 8, spacing: 9, minSpacing: 3.2 });
|
|
59
|
+
const last = found.length - 1;
|
|
60
|
+
return { dots: points.map((pt, i) => ({ x: C + pt.x, y: C + pt.y, page: page[i], fresh: page[i] === last })), total };
|
|
61
|
+
}
|
|
62
|
+
|
|
34
63
|
export default function ScanRadar({ li, running, scanning, disabled, label, sublabel, onScan, onPace }) {
|
|
64
|
+
const scan = useSyncExternalStore(watchScanner, scannerNow, () => SCANNER_UNKNOWN);
|
|
65
|
+
const found = running ? scan.found || [] : [];
|
|
35
66
|
const pace = li?.limits?.pace || 'fast';
|
|
36
67
|
const daily = li?.limits?.daily || 0;
|
|
37
68
|
const used = li?.unreadable ? daily : li?.searchesToday || 0;
|
|
@@ -40,15 +71,17 @@ export default function ScanRadar({ li, running, scanning, disabled, label, subl
|
|
|
40
71
|
const tone = share >= 0.9 ? '#ff6b6b' : share >= 0.6 ? '#FFD700' : '#00ff88';
|
|
41
72
|
const top = -Math.PI / 2;
|
|
42
73
|
const R = C - 10;
|
|
74
|
+
const colours = [TIER_COLORS.S, TIER_COLORS.A, TIER_COLORS.B];
|
|
75
|
+
const { dots, total } = clusterDots(found, R);
|
|
43
76
|
|
|
44
77
|
return (
|
|
45
78
|
<div style={{ display: 'flex', gap: 22, alignItems: 'center', flexWrap: 'wrap', padding: '14px 16px', borderRadius: 14,
|
|
46
|
-
border: '1px solid rgba(0,255,136,0.18)', background: 'radial-gradient(circle at 20% 50%, rgba(0,255,136,0.06), rgba(255,255,255,0.02) 60%)' }}>
|
|
79
|
+
border: '1px solid rgba(0,255,136,0.18)', background: 'radial-gradient(circle at 20% 50%, rgba(0,255,136,0.06), rgba(var(--sd-ink, 255, 255, 255), 0.02) 60%)' }}>
|
|
47
80
|
<style>{CSS}</style>
|
|
48
81
|
<div style={{ position: 'relative', width: SIZE, height: SIZE, flexShrink: 0 }}>
|
|
49
82
|
<svg width={SIZE} height={SIZE} aria-hidden="true" style={{ position: 'absolute', inset: 0 }}>
|
|
50
83
|
<defs>
|
|
51
|
-
<radialGradient id="radarBg"><stop offset="0" stopColor="#
|
|
84
|
+
<radialGradient id="radarBg"><stop offset="0" stopColor="color-mix(in srgb, var(--sd-bg, #0a0a1a) 80%, #00ff88)" /><stop offset="1" stopColor="var(--sd-bg, #0a0a1a)" /></radialGradient>
|
|
52
85
|
<linearGradient id="radarBeam" x1="0" y1="0" x2="1" y2="0">
|
|
53
86
|
<stop offset="0" stopColor="#00ff88" stopOpacity="0" /><stop offset="1" stopColor="#00ff88" stopOpacity="0.45" />
|
|
54
87
|
</linearGradient>
|
|
@@ -57,38 +90,49 @@ export default function ScanRadar({ li, running, scanning, disabled, label, subl
|
|
|
57
90
|
{[0.33, 0.66].map((k) => <circle key={k} cx={C} cy={C} r={R * k} fill="none" stroke="rgba(0,255,136,0.14)" strokeDasharray="2 5" />)}
|
|
58
91
|
<line x1={C - R} y1={C} x2={C + R} y2={C} stroke="rgba(0,255,136,0.1)" />
|
|
59
92
|
<line x1={C} y1={C - R} x2={C} y2={C + R} stroke="rgba(0,255,136,0.1)" />
|
|
60
|
-
{/* The
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
<
|
|
64
|
-
</g>
|
|
65
|
-
{BLIPS.map(([k, a], i) => (
|
|
66
|
-
<g key={i}>
|
|
67
|
-
<circle cx={C + R * k * Math.cos(a)} cy={C + R * k * Math.sin(a)} r={2.4} fill="#00ff88" opacity={running ? 0.9 : 0.35} />
|
|
68
|
-
{running && <circle className="radar-ping" style={{ animationDelay: `${(a / (2 * Math.PI)) * 2.6}s` }}
|
|
69
|
-
cx={C + R * k * Math.cos(a)} cy={C + R * k * Math.sin(a)} r={3} fill="none" stroke="#00ff88" />}
|
|
70
|
-
</g>
|
|
93
|
+
{/* The cluster: a dot for each person each page found, round the Scan button.
|
|
94
|
+
Before any, the rings it will fill. */}
|
|
95
|
+
{!dots.length && [INNER, (INNER + R) / 2, R - 8].map((r) => (
|
|
96
|
+
<circle key={r} cx={C} cy={C} r={r} fill="none" stroke="rgba(0,255,136,0.13)" strokeDasharray="2 6" />
|
|
71
97
|
))}
|
|
72
|
-
{
|
|
73
|
-
|
|
98
|
+
{running && !dots.length && <circle className="cluster-hub" cx={C} cy={C} r={INNER - 6} fill="none" stroke="#00ff88" strokeOpacity={0.6} />}
|
|
99
|
+
{dots.length > 0 && (
|
|
100
|
+
<g className="cluster-turn">
|
|
101
|
+
{/* Every dot joined to the hub, faintly, as the map joins a circle to its connection */}
|
|
102
|
+
<path d={dots.map((d) => `M${C} ${C}L${d.x.toFixed(1)} ${d.y.toFixed(1)}`).join('')} stroke="#fff" strokeOpacity={0.05} strokeWidth={0.6} />
|
|
103
|
+
{dots.map((d, i) => (
|
|
104
|
+
<g key={i} className={`cluster-dot${d.fresh ? ' fresh' : ''}`} style={{ transform: `translate(${d.x}px, ${d.y}px)` }}>
|
|
105
|
+
<circle className="sd-dot" r={d.fresh ? 3 : 2.5} fill={colours[d.page % colours.length]} opacity={d.fresh ? 1 : 0.85}
|
|
106
|
+
style={d.fresh ? { filter: `drop-shadow(0 0 3px ${colours[d.page % colours.length]})` } : undefined} />
|
|
107
|
+
</g>
|
|
108
|
+
))}
|
|
109
|
+
</g>
|
|
110
|
+
)}
|
|
111
|
+
{/* The last 24 hours' searches against the budget, round the edge */}
|
|
112
|
+
<path d={arc(R + 5, top, top + 2 * Math.PI - 0.001)} fill="none" stroke="rgba(var(--sd-ink, 255, 255, 255), 0.08)" strokeWidth={5} />
|
|
74
113
|
{share > 0 && <path d={arc(R + 5, top, top + 2 * Math.PI * share - 0.001)} fill="none" stroke={tone} strokeWidth={5} strokeLinecap="round" />}
|
|
75
114
|
</svg>
|
|
76
115
|
<button type="button" className="radar-go" onClick={onScan} disabled={disabled}
|
|
77
116
|
style={{
|
|
78
117
|
position: 'absolute', left: C - 62, top: C - 62, width: 124, height: 124, borderRadius: '50%', cursor: disabled ? 'not-allowed' : 'pointer',
|
|
79
|
-
border: `2px solid ${disabled ? 'rgba(255,255,255,0.12)' : '#00ff88'}`,
|
|
80
|
-
background: disabled ? 'rgba(20,24,40,0.92)' : 'radial-gradient(circle at 50% 35%, #134d3a, #0b2a22 70%)',
|
|
81
|
-
color: disabled ? '#667' : '#eafff5', boxShadow: disabled ? 'none' : '0 0 22px rgba(0,255,136,0.25)',
|
|
118
|
+
border: `2px solid ${disabled ? 'rgba(var(--sd-ink, 255, 255, 255), 0.12)' : '#00ff88'}`,
|
|
119
|
+
background: disabled ? 'var(--sd-card, rgba(20,24,40,0.92))' : 'radial-gradient(circle at 50% 35%, #134d3a, #0b2a22 70%)',
|
|
120
|
+
color: disabled ? 'var(--sd-fg-4, #667)' : 'var(--sd-fg-1, #eafff5)', boxShadow: disabled ? 'none' : '0 0 22px rgba(0,255,136,0.25)',
|
|
82
121
|
display: 'flex', flexDirection: 'column', alignItems: 'center', justifyContent: 'center', gap: 2, padding: 8,
|
|
83
122
|
}}>
|
|
84
123
|
<span style={{ fontSize: 22, fontWeight: 900, letterSpacing: 2 }}>{scanning ? '•••' : 'SCAN'}</span>
|
|
85
124
|
<span style={{ fontSize: 11, fontWeight: 700, opacity: 0.85, lineHeight: 1.25, textAlign: 'center' }}>{label}</span>
|
|
86
|
-
{sublabel && <span style={{ fontSize: 10, opacity: 0.6, textAlign: 'center' }}>{sublabel}</span>}
|
|
125
|
+
{sublabel && <span style={{ fontSize: 10, opacity: 0.6, textAlign: 'center', textWrap: 'balance' }}>{sublabel}</span>}
|
|
87
126
|
</button>
|
|
127
|
+
{running && found.length > 0 && (
|
|
128
|
+
<div style={{ position: 'absolute', left: 0, right: 0, bottom: -18, textAlign: 'center', fontSize: 11, fontWeight: 700, color: 'var(--sd-fg-2, #9fe8c4)', fontVariantNumeric: 'tabular-nums' }}>
|
|
129
|
+
{total.toLocaleString('en-US')} found · {found.length} page{found.length === 1 ? '' : 's'}
|
|
130
|
+
</div>
|
|
131
|
+
)}
|
|
88
132
|
</div>
|
|
89
133
|
|
|
90
134
|
<div style={{ flex: 1, minWidth: 260 }}>
|
|
91
|
-
<div style={{ fontSize: 10, fontWeight: 800, letterSpacing: 1, color: '#6b7090', textTransform: 'uppercase', marginBottom: 8 }}>Speed</div>
|
|
135
|
+
<div style={{ fontSize: 10, fontWeight: 800, letterSpacing: 1, color: 'var(--sd-fg-4, #6b7090)', textTransform: 'uppercase', marginBottom: 8 }}>Speed</div>
|
|
92
136
|
<div role="radiogroup" aria-label="Scan speed" style={{ display: 'grid', gridTemplateColumns: 'repeat(3, 1fr)', gap: 6 }}>
|
|
93
137
|
{PACE_NAMES.map((name) => {
|
|
94
138
|
const p = PACES[name];
|
|
@@ -100,25 +144,26 @@ export default function ScanRadar({ li, running, scanning, disabled, label, subl
|
|
|
100
144
|
title={`${p.pagePause} s before each page, ${p.chunkCooldown / 60} min more after every 10, profiles ${p.profileGap} s apart`}
|
|
101
145
|
style={{
|
|
102
146
|
padding: '10px 8px', borderRadius: 10, cursor: running ? 'not-allowed' : 'pointer', textAlign: 'left',
|
|
103
|
-
border: `1.5px solid ${on ? color : 'rgba(255,255,255,0.1)'}`, background: on ? `${color}1a` : 'rgba(255,255,255,0.03)',
|
|
104
|
-
color: '#ddd',
|
|
147
|
+
border: `1.5px solid ${on ? color : 'rgba(var(--sd-ink, 255, 255, 255), 0.1)'}`, background: on ? `${color}1a` : 'rgba(var(--sd-ink, 255, 255, 255), 0.03)',
|
|
148
|
+
color: 'var(--sd-fg-1, #ddd)',
|
|
105
149
|
}}>
|
|
106
|
-
<div style={{ fontSize: 14, fontWeight: 800, color: on ? color : '#ccd' }}>{p.label}</div>
|
|
107
|
-
<div style={{ fontSize: 11, color: '#8a8fa8', marginTop: 2 }}>~{searchesPerHour(name)} searches an hour</div>
|
|
108
|
-
<div style={{ fontSize: 10.5, color: '#6b7090', marginTop: 1 }}>{p.pagePause} s between pages</div>
|
|
150
|
+
<div style={{ fontSize: 14, fontWeight: 800, color: on ? color : 'var(--sd-fg-2, #ccd)' }}>{p.label}</div>
|
|
151
|
+
<div style={{ fontSize: 11, color: 'var(--sd-fg-3, #8a8fa8)', marginTop: 2 }}>~{searchesPerHour(name)} searches an hour</div>
|
|
152
|
+
<div style={{ fontSize: 10.5, color: 'var(--sd-fg-4, #6b7090)', marginTop: 1 }}>{p.pagePause} s between pages</div>
|
|
109
153
|
</button>
|
|
110
154
|
);
|
|
111
155
|
})}
|
|
112
156
|
</div>
|
|
113
|
-
<div style={{ marginTop: 10, fontSize: 12.5, color: '#b8c4c4', lineHeight: 1.6 }}>
|
|
157
|
+
<div style={{ marginTop: 10, fontSize: 12.5, color: 'var(--sd-fg-2, #b8c4c4)', lineHeight: 1.6 }}>
|
|
114
158
|
{!li
|
|
115
159
|
? <>Today’s searches show here once the scanner can read them.</>
|
|
116
160
|
: left == null
|
|
117
161
|
? <>No daily cap is set.</>
|
|
118
|
-
|
|
162
|
+
// The budget counts a rolling 24 hours (lib/linkedin-limits.js usage), not since midnight.
|
|
163
|
+
: <><b style={{ color: tone }}>{left}</b> of {daily} searches left, counting the last 24 hours
|
|
119
164
|
{left > 0 && <> · at {paceOf(pace).label}, {durationText(paceSeconds(pace, left))} to use them</>}.</>}
|
|
120
165
|
</div>
|
|
121
|
-
<div style={{ marginTop: 4, fontSize: 11.5, color: '#778', lineHeight: 1.55 }}>
|
|
166
|
+
<div style={{ marginTop: 4, fontSize: 11.5, color: 'var(--sd-fg-4, #778)', lineHeight: 1.55 }}>
|
|
122
167
|
Fast is how the scanner has always run; Medium and Slow only add waiting, so fewer searches an hour reach
|
|
123
168
|
LinkedIn. Your daily budget stays the cap at every speed: slower spreads it out, it doesn’t shrink it.
|
|
124
169
|
Slower lowers the odds of a check from LinkedIn; it can’t promise there won’t be one.
|
|
@@ -6,13 +6,14 @@
|
|
|
6
6
|
// every page (Blake, 2026-09-29: "a notch ui of the thing scanning"). It stays
|
|
7
7
|
// out of the way: nothing at all while nothing runs; a tiny dimmed "Auto scan"
|
|
8
8
|
// when the all-day mode is on but idle; while a scan runs, what it's doing and
|
|
9
|
-
// how far it's got. Hover or click it to open it: who,
|
|
10
|
-
// the
|
|
11
|
-
//
|
|
9
|
+
// how far it's got. Hover or click it to open it: who, the LinkedIn budget over
|
|
10
|
+
// the last 24 hours (a link to Settings → LinkedIn usage), the latest line,
|
|
11
|
+
// Details and Stop. Stop saves what was read, and the Scan page's Resume
|
|
12
|
+
// carries on from that page. Other long jobs can show here too
|
|
12
13
|
// (lib/island.js). It only reports: the pacing and the caps live in the scanner
|
|
13
14
|
// (scripts/scrape.py, lib/linkedin-limits.js).
|
|
14
15
|
|
|
15
|
-
import { useEffect, useState, useSyncExternalStore } from 'react';
|
|
16
|
+
import { useEffect, useRef, useState, useSyncExternalStore } from 'react';
|
|
16
17
|
import { usePathname } from 'next/navigation';
|
|
17
18
|
import Link from 'next/link';
|
|
18
19
|
import { watchScanner, scannerNow, stopScrape } from '../../lib/scraper-client';
|
|
@@ -34,6 +35,7 @@ const WHAT = {
|
|
|
34
35
|
photos: 'Saving photos',
|
|
35
36
|
messages: 'Reading your messages list',
|
|
36
37
|
'messages-full': 'Reading your whole messages history',
|
|
38
|
+
connect: 'Sending a connection request',
|
|
37
39
|
};
|
|
38
40
|
|
|
39
41
|
// Green while there's plenty left, amber past 60%, red past 90%.
|
|
@@ -58,6 +60,7 @@ export default function ScanStatusBar() {
|
|
|
58
60
|
// be swapped for a new one, or wrap to two rows.
|
|
59
61
|
const pathname = usePathname();
|
|
60
62
|
const [top, setTop] = useState(null);
|
|
63
|
+
const barRef = useRef(null);
|
|
61
64
|
const [centre, setCentre] = useState(null);
|
|
62
65
|
useEffect(() => {
|
|
63
66
|
let header = null;
|
|
@@ -81,7 +84,13 @@ export default function ScanStatusBar() {
|
|
|
81
84
|
};
|
|
82
85
|
const later = () => { if (!queued) queued = requestAnimationFrame(measure); };
|
|
83
86
|
later();
|
|
84
|
-
|
|
87
|
+
// Measuring waits for the next frame, which drew the notch once over the
|
|
88
|
+
// blank page: hidden here, before that frame is painted, the moment the
|
|
89
|
+
// header goes (and shown again the moment it's back).
|
|
90
|
+
const mo = new MutationObserver(() => {
|
|
91
|
+
if (barRef.current) barRef.current.style.visibility = document.querySelector('header') ? '' : 'hidden';
|
|
92
|
+
later();
|
|
93
|
+
});
|
|
85
94
|
mo.observe(document.body, { childList: true, subtree: true });
|
|
86
95
|
window.addEventListener('resize', later);
|
|
87
96
|
return () => { cancelAnimationFrame(queued); ro?.disconnect(); mo.disconnect(); window.removeEventListener('resize', later); };
|
|
@@ -97,6 +106,11 @@ export default function ScanStatusBar() {
|
|
|
97
106
|
return () => setNotchShown(false);
|
|
98
107
|
}, [showing]);
|
|
99
108
|
if (!status && !tabs) return null;
|
|
109
|
+
// Only with a page under it: between tabs the next page has no header until
|
|
110
|
+
// it has loaded, and the notch would hang over a blank screen (Blake,
|
|
111
|
+
// 2026-10-03: "the notch is seen the whole time as the screen blanks out
|
|
112
|
+
// loading to the next … have it appear with the section"). It fades in with it.
|
|
113
|
+
if (top == null) return null;
|
|
100
114
|
|
|
101
115
|
const p = job?.progress;
|
|
102
116
|
const step = p?.kind === 'batch' && p.total ? `${p.current || p.done || 0} of ${p.total}`
|
|
@@ -117,13 +131,16 @@ export default function ScanStatusBar() {
|
|
|
117
131
|
|
|
118
132
|
return (
|
|
119
133
|
<div
|
|
134
|
+
ref={barRef}
|
|
135
|
+
data-glass-panel="bar"
|
|
136
|
+
className="notch-in"
|
|
120
137
|
onMouseLeave={() => setOpen(false)}
|
|
121
138
|
style={{
|
|
122
|
-
position: 'fixed', left, top
|
|
139
|
+
position: 'fixed', left, top, transform: 'translateX(-50%)', zIndex: 60,
|
|
123
140
|
maxWidth: 'calc(100vw - 16px)',
|
|
124
141
|
padding: expanded && status ? '4px 6px 10px' : '4px 6px 5px',
|
|
125
|
-
borderRadius: '0 0 14px 14px', border: `1px solid ${running ? 'rgba(0,255,136,0.25)' : 'rgba(255,255,255,0.1)'}`, borderTop: 'none',
|
|
126
|
-
background: 'rgba(8,10,22,0.96)', color: '#cfd8d8', fontSize: 12,
|
|
142
|
+
borderRadius: '0 0 14px 14px', border: `1px solid ${running ? 'rgba(0,255,136,0.25)' : 'rgba(var(--sd-ink, 255, 255, 255), 0.1)'}`, borderTop: 'none',
|
|
143
|
+
background: 'var(--sd-surface, rgba(8,10,22,0.96))', color: 'var(--sd-fg-2, #cfd8d8)', fontSize: 12,
|
|
127
144
|
opacity: tabs || running || other || expanded ? 1 : 0.55,
|
|
128
145
|
boxShadow: running ? '0 6px 20px rgba(0,0,0,0.35)' : 'none',
|
|
129
146
|
transition: 'padding 0.18s ease, opacity 0.18s ease',
|
|
@@ -141,7 +158,7 @@ export default function ScanStatusBar() {
|
|
|
141
158
|
style={{
|
|
142
159
|
display: 'flex', alignItems: 'center', gap: 6, padding: '5px 11px', borderRadius: 8, border: 'none',
|
|
143
160
|
cursor: 'pointer', whiteSpace: 'nowrap', fontSize: 12, fontWeight: 600,
|
|
144
|
-
background: on ? 'rgba(52,152,219,0.22)' : 'transparent', color: on ? '#cfe6f7' : '#8b9aa8',
|
|
161
|
+
background: on ? 'rgba(52,152,219,0.22)' : 'transparent', color: on ? 'var(--sd-fg-1, #cfe6f7)' : 'var(--sd-fg-3, #8b9aa8)',
|
|
145
162
|
}}
|
|
146
163
|
>
|
|
147
164
|
{t.icon && <span aria-hidden="true">{t.icon}</span>}
|
|
@@ -151,7 +168,7 @@ export default function ScanStatusBar() {
|
|
|
151
168
|
})}
|
|
152
169
|
</div>
|
|
153
170
|
)}
|
|
154
|
-
{tabs && status && <span aria-hidden="true" style={{ width: 1, alignSelf: 'stretch', margin: '3px 4px', background: 'rgba(255,255,255,0.12)' }} />}
|
|
171
|
+
{tabs && status && <span aria-hidden="true" style={{ width: 1, alignSelf: 'stretch', margin: '3px 4px', background: 'rgba(var(--sd-ink, 255, 255, 255), 0.12)' }} />}
|
|
155
172
|
{status && (
|
|
156
173
|
<button
|
|
157
174
|
onMouseEnter={() => setOpen(true)}
|
|
@@ -162,42 +179,44 @@ export default function ScanStatusBar() {
|
|
|
162
179
|
>
|
|
163
180
|
<span className={running ? 'notch-pulse' : undefined} style={{ width: 7, height: 7, borderRadius: '50%', background: dot, flexShrink: 0 }} />
|
|
164
181
|
<span role="status" aria-live="polite" style={{ display: 'flex', alignItems: 'center', gap: 8 }}>
|
|
165
|
-
<b style={{ color: running || other ? '#fff' : '#b8c4c4', fontWeight: 600 }}>{label}</b>
|
|
166
|
-
{short && <span style={{ color: '#8b9a9a' }}>{short}</span>}
|
|
182
|
+
<b style={{ color: running || other ? 'var(--sd-fg-1, #fff)' : 'var(--sd-fg-2, #b8c4c4)', fontWeight: 600 }}>{label}</b>
|
|
183
|
+
{short && <span style={{ color: 'var(--sd-fg-3, #8b9a9a)' }}>{short}</span>}
|
|
167
184
|
</span>
|
|
168
|
-
{!running && !other && expanded && <span style={{ color: '#8b9a9a' }}>ready · press Auto scan beside Scan to start</span>}
|
|
185
|
+
{!running && !other && expanded && <span style={{ color: 'var(--sd-fg-3, #8b9a9a)' }}>ready · press Auto scan beside Scan to start</span>}
|
|
169
186
|
</button>
|
|
170
187
|
)}
|
|
171
188
|
</div>
|
|
172
189
|
{status && fraction != null && (
|
|
173
|
-
<div style={{ height: 2, margin: '3px 6px 0', borderRadius: 2, background: 'rgba(255,255,255,0.08)', overflow: 'hidden' }}>
|
|
190
|
+
<div style={{ height: 2, margin: '3px 6px 0', borderRadius: 2, background: 'rgba(var(--sd-ink, 255, 255, 255), 0.08)', overflow: 'hidden' }}>
|
|
174
191
|
<div style={{ width: `${Math.round(fraction * 100)}%`, height: '100%', background: running ? '#00ff88' : '#3498DB', transition: 'width 0.4s ease' }} />
|
|
175
192
|
</div>
|
|
176
193
|
)}
|
|
177
194
|
{expanded && running && (
|
|
178
195
|
<div style={{ display: 'flex', alignItems: 'center', gap: 12, margin: '8px 8px 0', flexWrap: 'wrap' }}>
|
|
179
196
|
{job.target?.name && <span>{job.target.name}</span>}
|
|
197
|
+
{/* A rolling 24 hours, as the budget counts them (lib/linkedin-limits.js usage), not
|
|
198
|
+
since midnight; it opens Settings → LinkedIn usage for the rest. */}
|
|
180
199
|
{b && (
|
|
181
|
-
<
|
|
182
|
-
{b.searches}{b.cap ? ` of ${b.cap}` : ''} searches
|
|
183
|
-
</
|
|
200
|
+
<Link href="/settings#usage" style={{ color: tone(b.searches, b.cap), textDecoration: 'none' }} title="Searches on your LinkedIn account in the last 24 hours, and your daily budget. Open LinkedIn usage">
|
|
201
|
+
{b.searches}{b.cap ? ` of ${b.cap}` : ''} searches in the last 24 hours
|
|
202
|
+
</Link>
|
|
184
203
|
)}
|
|
185
204
|
{last && (
|
|
186
|
-
<span style={{ color: '#667', maxWidth: 280, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }} title={last}>{last}</span>
|
|
205
|
+
<span style={{ color: 'var(--sd-fg-4, #667)', maxWidth: 280, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }} title={last}>{last}</span>
|
|
187
206
|
)}
|
|
188
|
-
<Link href="/setup" style={{ color: '#3498DB', textDecoration: 'none' }}>Details</Link>
|
|
207
|
+
<Link href="/setup" style={{ color: 'var(--sd-blue, #3498DB)', textDecoration: 'none' }}>Details</Link>
|
|
189
208
|
<button
|
|
190
209
|
onClick={async () => { setStopping(true); try { await stopScrape(); } catch { setStopping(false); } }}
|
|
191
210
|
disabled={stopping}
|
|
192
211
|
title="Stops after saving what's been read; Resume on the Scan page carries on from the same page"
|
|
193
212
|
style={{
|
|
194
213
|
padding: '3px 10px', borderRadius: 8, fontSize: 12, cursor: stopping ? 'default' : 'pointer',
|
|
195
|
-
background: 'rgba(255,107,107,0.12)', color: '#ff9b9b', border: '1px solid rgba(255,107,107,0.35)',
|
|
214
|
+
background: 'rgba(255,107,107,0.12)', color: 'var(--sd-fg-2, #ff9b9b)', border: '1px solid rgba(255,107,107,0.35)',
|
|
196
215
|
}}
|
|
197
216
|
>{stopping ? 'Stopping…' : 'Stop'}</button>
|
|
198
217
|
</div>
|
|
199
218
|
)}
|
|
200
|
-
{expanded && !running && other?.detail && <div style={{ margin: '6px 8px 0', color: '#8b9a9a' }}>{other.detail}</div>}
|
|
219
|
+
{expanded && !running && other?.detail && <div style={{ margin: '6px 8px 0', color: 'var(--sd-fg-3, #8b9a9a)' }}>{other.detail}</div>}
|
|
201
220
|
</div>
|
|
202
221
|
);
|
|
203
222
|
}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
// scanner reads, collecting from the left (Blake, 2026-10-03: "for every page
|
|
5
5
|
// it collects then small dots start collecting on the left side of the line on
|
|
6
6
|
// the lower header line giving that active feel"). The map's own colours, in
|
|
7
|
-
// the order of the name's gradient: gold, purple, blue. The newest one glows;
|
|
7
|
+
// the order of the name's gradient: gold, purple, blue (the theme's S, A and B). The newest one glows;
|
|
8
8
|
// a pulsing seed sits at the start until the first page is in. It's on every
|
|
9
9
|
// tab, since the header is, and a click opens the Scan page.
|
|
10
10
|
//
|
|
@@ -15,8 +15,10 @@
|
|
|
15
15
|
import { useEffect, useRef, useState } from 'react';
|
|
16
16
|
import Link from 'next/link';
|
|
17
17
|
import useScanner from './useScanner';
|
|
18
|
+
import { TIER_COLORS } from '../../lib/themes';
|
|
18
19
|
|
|
19
|
-
|
|
20
|
+
// The theme's S, A and B dots, in that order (the Scan page's cluster uses the same, page for page).
|
|
21
|
+
const colours = () => [TIER_COLORS.S, TIER_COLORS.A, TIER_COLORS.B];
|
|
20
22
|
const STEP = 9; // a dot and its gap
|
|
21
23
|
const LINGER_MS = 4000;
|
|
22
24
|
|
|
@@ -55,9 +57,17 @@ export default function ScanTrail({ inset }) {
|
|
|
55
57
|
useEffect(() => {
|
|
56
58
|
const el = boxRef.current;
|
|
57
59
|
if (!el) return undefined;
|
|
58
|
-
|
|
60
|
+
// On a computer the tabs sit on this same line (AppHeader): the dots stop short of them.
|
|
61
|
+
const fit = () => {
|
|
62
|
+
const box = el.getBoundingClientRect();
|
|
63
|
+
const tabs = document.getElementById('main-tabs')?.getBoundingClientRect();
|
|
64
|
+
const width = tabs && tabs.left > box.left ? Math.min(box.width, tabs.left - box.left - 12) : box.width;
|
|
65
|
+
setRoom(Math.max(8, Math.floor(width / STEP) - 4));
|
|
66
|
+
};
|
|
67
|
+
const ro = new ResizeObserver(fit);
|
|
59
68
|
ro.observe(el);
|
|
60
|
-
|
|
69
|
+
window.addEventListener('resize', fit);
|
|
70
|
+
return () => { ro.disconnect(); window.removeEventListener('resize', fit); };
|
|
61
71
|
}, []);
|
|
62
72
|
|
|
63
73
|
const { pages } = shown;
|
|
@@ -67,16 +77,19 @@ export default function ScanTrail({ inset }) {
|
|
|
67
77
|
for (let i = first; i < pages; i++) dots.push(i);
|
|
68
78
|
const title = `${shown.label}: ${pages === 0 ? 'starting' : `${pages.toLocaleString('en-US')} page${pages === 1 ? '' : 's'} read`}. Open the Scan page`;
|
|
69
79
|
return (
|
|
70
|
-
|
|
80
|
+
// Above the page under the header: the dots straddle its line, and a page
|
|
81
|
+
// drawn after the header (Paths' panel) covered their lower half.
|
|
82
|
+
<div ref={boxRef} aria-hidden={!shown.on} style={{ position: 'absolute', left: inset, right: inset, bottom: -4, height: 7, pointerEvents: 'none', zIndex: 5 }}>
|
|
71
83
|
<style>{CSS}</style>
|
|
72
84
|
<Link href="/setup" title={title} tabIndex={shown.on ? 0 : -1} className="scan-trail" style={{
|
|
73
85
|
position: 'absolute', left: 0, top: 0, height: 7, display: 'flex', alignItems: 'center', gap: STEP - 5,
|
|
74
86
|
pointerEvents: shown.on ? 'auto' : 'none', opacity: shown.on ? 1 : 0, textDecoration: 'none',
|
|
75
87
|
}}>
|
|
76
|
-
{first > 0 && <span style={{ fontSize: 9, fontWeight: 700, color: '#889', marginRight: 2, fontVariantNumeric: 'tabular-nums' }}>+{first.toLocaleString('en-US')}</span>}
|
|
88
|
+
{first > 0 && <span style={{ fontSize: 9, fontWeight: 700, color: 'var(--sd-fg-3, #889)', marginRight: 2, fontVariantNumeric: 'tabular-nums' }}>+{first.toLocaleString('en-US')}</span>}
|
|
77
89
|
{dots.map((i) => {
|
|
78
|
-
const
|
|
79
|
-
|
|
90
|
+
const cs = colours();
|
|
91
|
+
const c = cs[i % cs.length];
|
|
92
|
+
return <span key={i} className={`dot sd-dot-html${i === pages - 1 ? ' newest' : ''}`} style={{ width: 5, height: 5, borderRadius: '50%', background: c, color: c, flexShrink: 0 }} />;
|
|
80
93
|
})}
|
|
81
94
|
{shown.on && <span className="seed" style={{ width: 5, height: 5, borderRadius: '50%', background: '#00ff88', flexShrink: 0 }} />}
|
|
82
95
|
</Link>
|