six-degrees 0.4.2 → 0.4.4

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.
Files changed (282) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/app-path-routes-manifest.json +3 -1
  3. package/.next/standalone/.next/build-manifest.json +3 -3
  4. package/.next/standalone/.next/prerender-manifest.json +41 -13
  5. package/.next/standalone/.next/routes-manifest.json +12 -0
  6. package/.next/standalone/.next/server/app/_global-error.html +1 -1
  7. package/.next/standalone/.next/server/app/_global-error.rsc +1 -1
  8. package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  9. package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  10. package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  11. package/.next/standalone/.next/server/app/_not-found/page.js +1 -1
  12. package/.next/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  13. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  14. package/.next/standalone/.next/server/app/_not-found.html +1 -1
  15. package/.next/standalone/.next/server/app/_not-found.rsc +19 -17
  16. package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +19 -17
  17. package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +15 -13
  18. package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  19. package/.next/standalone/.next/server/app/api/admin-delete/route.js.nft.json +1 -1
  20. package/.next/standalone/.next/server/app/api/admin-update/route.js.nft.json +1 -1
  21. package/.next/standalone/.next/server/app/api/bridges/route.js.nft.json +1 -1
  22. package/.next/standalone/.next/server/app/api/bulk-import/route.js.nft.json +1 -1
  23. package/.next/standalone/.next/server/app/api/company-scores/legacy/route.js.nft.json +1 -1
  24. package/.next/standalone/.next/server/app/api/company-scores/route.js.nft.json +1 -1
  25. package/.next/standalone/.next/server/app/api/connections/route.js.nft.json +1 -1
  26. package/.next/standalone/.next/server/app/api/data/export/route.js.nft.json +1 -1
  27. package/.next/standalone/.next/server/app/api/data/import/route.js.nft.json +1 -1
  28. package/.next/standalone/.next/server/app/api/data/restart/route.js.nft.json +1 -1
  29. package/.next/standalone/.next/server/app/api/data/reveal/route.js.nft.json +1 -1
  30. package/.next/standalone/.next/server/app/api/data/route.js.nft.json +1 -1
  31. package/.next/standalone/.next/server/app/api/delete-cluster/route.js.nft.json +1 -1
  32. package/.next/standalone/.next/server/app/api/ingest/route.js.nft.json +1 -1
  33. package/.next/standalone/.next/server/app/api/network/route.js.nft.json +1 -1
  34. package/.next/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
  35. package/.next/standalone/.next/server/app/api/outreach/route.js.nft.json +1 -1
  36. package/.next/standalone/.next/server/app/api/queue/route.js.nft.json +1 -1
  37. package/.next/standalone/.next/server/app/api/scraper/route.js +1 -1
  38. package/.next/standalone/.next/server/app/api/scraper/route.js.nft.json +1 -1
  39. package/.next/standalone/.next/server/app/api/settings/route.js.nft.json +1 -1
  40. package/.next/standalone/.next/server/app/api/settings/sector-preview/route.js.nft.json +1 -1
  41. package/.next/standalone/.next/server/app/api/settings/sector-suggestions/route.js.nft.json +1 -1
  42. package/.next/standalone/.next/server/app/api/setup-profile/route.js.nft.json +1 -1
  43. package/.next/standalone/.next/server/app/api/social/route/app-paths-manifest.json +3 -0
  44. package/.next/standalone/.next/server/app/api/social/route/build-manifest.json +12 -0
  45. package/.next/standalone/.next/server/app/api/social/route/server-reference-manifest.json +4 -0
  46. package/.next/standalone/.next/server/app/api/social/route.js +8 -0
  47. package/.next/standalone/.next/server/app/api/social/route.js.map +5 -0
  48. package/.next/standalone/.next/server/app/api/social/route.js.nft.json +1 -0
  49. package/.next/standalone/.next/server/app/api/social/route_client-reference-manifest.js +3 -0
  50. package/.next/standalone/.next/server/app/api/unlock/route.js.nft.json +1 -1
  51. package/.next/standalone/.next/server/app/api/update/route.js.nft.json +1 -1
  52. package/.next/standalone/.next/server/app/api/update-images/route.js.nft.json +1 -1
  53. package/.next/standalone/.next/server/app/api/users/route.js.nft.json +1 -1
  54. package/.next/standalone/.next/server/app/avatars/[file]/route.js.nft.json +1 -1
  55. package/.next/standalone/.next/server/app/import/page.js +1 -1
  56. package/.next/standalone/.next/server/app/import/page.js.nft.json +1 -1
  57. package/.next/standalone/.next/server/app/import/page_client-reference-manifest.js +1 -1
  58. package/.next/standalone/.next/server/app/import.html +1 -1
  59. package/.next/standalone/.next/server/app/import.rsc +23 -21
  60. package/.next/standalone/.next/server/app/import.segments/_full.segment.rsc +23 -21
  61. package/.next/standalone/.next/server/app/import.segments/_tree.segment.rsc +2 -2
  62. package/.next/standalone/.next/server/app/import.segments/import/__PAGE__.segment.rsc +17 -15
  63. package/.next/standalone/.next/server/app/index.html +1 -1
  64. package/.next/standalone/.next/server/app/index.rsc +21 -19
  65. package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +17 -15
  66. package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +21 -19
  67. package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  68. package/.next/standalone/.next/server/app/launch/page.js +1 -1
  69. package/.next/standalone/.next/server/app/launch/page.js.nft.json +1 -1
  70. package/.next/standalone/.next/server/app/launch/page_client-reference-manifest.js +1 -1
  71. package/.next/standalone/.next/server/app/launch.html +2 -2
  72. package/.next/standalone/.next/server/app/launch.rsc +23 -21
  73. package/.next/standalone/.next/server/app/launch.segments/_full.segment.rsc +23 -21
  74. package/.next/standalone/.next/server/app/launch.segments/_tree.segment.rsc +2 -2
  75. package/.next/standalone/.next/server/app/launch.segments/launch/__PAGE__.segment.rsc +17 -15
  76. package/.next/standalone/.next/server/app/page.js +1 -1
  77. package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
  78. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  79. package/.next/standalone/.next/server/app/paths/page.js +1 -1
  80. package/.next/standalone/.next/server/app/paths/page.js.nft.json +1 -1
  81. package/.next/standalone/.next/server/app/paths/page_client-reference-manifest.js +1 -1
  82. package/.next/standalone/.next/server/app/paths.html +1 -1
  83. package/.next/standalone/.next/server/app/paths.rsc +23 -21
  84. package/.next/standalone/.next/server/app/paths.segments/_full.segment.rsc +23 -21
  85. package/.next/standalone/.next/server/app/paths.segments/_tree.segment.rsc +2 -2
  86. package/.next/standalone/.next/server/app/paths.segments/paths/__PAGE__.segment.rsc +17 -15
  87. package/.next/standalone/.next/server/app/profile/page.js +1 -1
  88. package/.next/standalone/.next/server/app/profile/page.js.nft.json +1 -1
  89. package/.next/standalone/.next/server/app/profile/page_client-reference-manifest.js +1 -1
  90. package/.next/standalone/.next/server/app/profile.html +1 -1
  91. package/.next/standalone/.next/server/app/profile.rsc +23 -21
  92. package/.next/standalone/.next/server/app/profile.segments/_full.segment.rsc +23 -21
  93. package/.next/standalone/.next/server/app/profile.segments/_tree.segment.rsc +2 -2
  94. package/.next/standalone/.next/server/app/profile.segments/profile/__PAGE__.segment.rsc +17 -15
  95. package/.next/standalone/.next/server/app/queue/page.js +1 -1
  96. package/.next/standalone/.next/server/app/queue/page.js.nft.json +1 -1
  97. package/.next/standalone/.next/server/app/queue/page_client-reference-manifest.js +1 -1
  98. package/.next/standalone/.next/server/app/queue.html +1 -1
  99. package/.next/standalone/.next/server/app/queue.rsc +23 -21
  100. package/.next/standalone/.next/server/app/queue.segments/_full.segment.rsc +23 -21
  101. package/.next/standalone/.next/server/app/queue.segments/_tree.segment.rsc +2 -2
  102. package/.next/standalone/.next/server/app/queue.segments/queue/__PAGE__.segment.rsc +17 -15
  103. package/.next/standalone/.next/server/app/scores/page.js +1 -1
  104. package/.next/standalone/.next/server/app/scores/page.js.nft.json +1 -1
  105. package/.next/standalone/.next/server/app/scores/page_client-reference-manifest.js +1 -1
  106. package/.next/standalone/.next/server/app/scores.html +1 -1
  107. package/.next/standalone/.next/server/app/scores.rsc +23 -21
  108. package/.next/standalone/.next/server/app/scores.segments/_full.segment.rsc +23 -21
  109. package/.next/standalone/.next/server/app/scores.segments/_tree.segment.rsc +2 -2
  110. package/.next/standalone/.next/server/app/scores.segments/scores/__PAGE__.segment.rsc +17 -15
  111. package/.next/standalone/.next/server/app/settings/page.js +1 -1
  112. package/.next/standalone/.next/server/app/settings/page.js.nft.json +1 -1
  113. package/.next/standalone/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  114. package/.next/standalone/.next/server/app/settings.html +1 -1
  115. package/.next/standalone/.next/server/app/settings.rsc +23 -21
  116. package/.next/standalone/.next/server/app/settings.segments/_full.segment.rsc +23 -21
  117. package/.next/standalone/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
  118. package/.next/standalone/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +17 -15
  119. package/.next/standalone/.next/server/app/setup/page.js +1 -1
  120. package/.next/standalone/.next/server/app/setup/page.js.nft.json +1 -1
  121. package/.next/standalone/.next/server/app/setup/page_client-reference-manifest.js +1 -1
  122. package/.next/standalone/.next/server/app/setup.html +1 -1
  123. package/.next/standalone/.next/server/app/setup.rsc +23 -21
  124. package/.next/standalone/.next/server/app/setup.segments/_full.segment.rsc +23 -21
  125. package/.next/standalone/.next/server/app/setup.segments/_tree.segment.rsc +2 -2
  126. package/.next/standalone/.next/server/app/setup.segments/setup/__PAGE__.segment.rsc +17 -15
  127. package/.next/standalone/.next/server/app/social/page/app-paths-manifest.json +3 -0
  128. package/.next/standalone/.next/server/app/social/page/build-manifest.json +20 -0
  129. package/.next/standalone/.next/server/app/social/page/next-font-manifest.json +11 -0
  130. package/.next/standalone/.next/server/app/social/page/react-loadable-manifest.json +1 -0
  131. package/.next/standalone/.next/server/app/social/page/server-reference-manifest.json +4 -0
  132. package/.next/standalone/.next/server/app/social/page.js +13 -0
  133. package/.next/standalone/.next/server/app/social/page.js.map +5 -0
  134. package/.next/standalone/.next/server/app/social/page.js.nft.json +1 -0
  135. package/.next/standalone/.next/server/app/social/page_client-reference-manifest.js +3 -0
  136. package/.next/standalone/.next/server/app/social.html +1 -0
  137. package/.next/standalone/.next/server/app/social.meta +26 -0
  138. package/.next/standalone/.next/server/app/social.rsc +26 -0
  139. package/.next/standalone/.next/server/app/social.segments/_full.segment.rsc +26 -0
  140. package/.next/standalone/.next/server/app/social.segments/_tree.segment.rsc +4 -0
  141. package/.next/standalone/.next/server/app/social.segments/social/__PAGE__.segment.rsc +30 -0
  142. package/.next/standalone/.next/server/app-paths-manifest.json +3 -1
  143. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0ljnyho._.js +1 -1
  144. package/.next/standalone/.next/server/chunks/[root-of-the-server]__17kn1mk._.js +8 -0
  145. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__0uag-k5._.js → [root-of-the-server]__1dmc7-t._.js} +1 -1
  146. package/.next/standalone/.next/server/chunks/_1_fynia._.js +5 -5
  147. package/.next/standalone/.next/server/chunks/_1itd1o_._.js +1 -1
  148. package/.next/standalone/.next/server/chunks/_1xh07bp._.js +3 -0
  149. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_social_route_actions_1_3c6qn.js +3 -0
  150. package/.next/standalone/.next/server/chunks/lib_db-client_15le7cw.js +1 -1
  151. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__16hs8kw._.js +3 -0
  152. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1feicqq._.js +3 -0
  153. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1jeztd-._.js +3 -0
  154. package/.next/standalone/.next/server/chunks/ssr/_005q9n1._.js +3 -0
  155. package/.next/standalone/.next/server/chunks/ssr/_08_03wh._.js +3 -0
  156. package/.next/standalone/.next/server/chunks/ssr/_08cfj2b._.js +3 -0
  157. package/.next/standalone/.next/server/chunks/ssr/_0j4-lc3._.js +3 -0
  158. package/.next/standalone/.next/server/chunks/ssr/{_0hw_qnj._.js → _0wxbq78._.js} +1 -1
  159. package/.next/standalone/.next/server/chunks/ssr/_0xkur4p._.js +3 -0
  160. package/.next/standalone/.next/server/chunks/ssr/_15x6q32._.js +3 -0
  161. package/.next/standalone/.next/server/chunks/ssr/{_1cyxocj._.js → _1ap1tu_._.js} +2 -2
  162. package/.next/standalone/.next/server/chunks/ssr/_1mj739k._.js +3 -0
  163. package/.next/standalone/.next/server/chunks/ssr/_next-internal_server_app_social_page_actions_176i1kl.js +3 -0
  164. package/.next/standalone/.next/server/chunks/ssr/app_page_1fazqbf.js +3 -3
  165. package/.next/standalone/.next/server/chunks/ssr/app_scores_page_09wepvv.js +1 -1
  166. package/.next/standalone/.next/server/chunks/ssr/app_setup_page_1-282zx.js +1 -1
  167. package/.next/standalone/.next/server/chunks/ssr/app_social_page_0h7zxda.js +3 -0
  168. package/.next/standalone/.next/server/chunks/ssr/lib_0i8v-s3._.js +3 -0
  169. package/.next/standalone/.next/server/middleware-build-manifest.js +3 -3
  170. package/.next/standalone/.next/server/middleware-manifest.json +5 -5
  171. package/.next/standalone/.next/server/next-font-manifest.js +1 -1
  172. package/.next/standalone/.next/server/next-font-manifest.json +4 -0
  173. package/.next/standalone/.next/server/pages/404.html +1 -1
  174. package/.next/standalone/.next/server/pages/500.html +1 -1
  175. package/.next/standalone/.next/server/prefetch-hints.json +14 -0
  176. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  177. package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
  178. package/.next/standalone/.next/static/chunks/04a3zockahetx.js +1 -0
  179. package/.next/standalone/.next/static/chunks/0a5iadnmt9u9k.js +1 -0
  180. package/.next/standalone/.next/static/chunks/{2p6o90z0vgcwr.css → 0bo1dxn5gwzpk.css} +1 -1
  181. package/.next/standalone/.next/static/chunks/0g_p4p7oci18u.js +1 -0
  182. package/.next/standalone/.next/static/chunks/{0ax_9zzboyv6d.js → 17-rhp8sg4m1b.js} +2 -2
  183. package/.next/standalone/.next/static/chunks/1ra4cwcp75tfa.js +1 -0
  184. package/.next/standalone/.next/static/chunks/236f0jtp68j_h.js +1 -0
  185. package/.next/standalone/.next/static/chunks/24m745q_85u34.js +6 -0
  186. package/.next/standalone/.next/static/chunks/2_wcobfqry2uj.js +1 -0
  187. package/.next/standalone/.next/static/chunks/2dwtoszeq91us.js +1 -0
  188. package/.next/standalone/.next/static/chunks/2hvcevue9aro4.js +1 -0
  189. package/.next/standalone/.next/static/chunks/2uo9i03_05rqi.js +18 -0
  190. package/.next/standalone/.next/static/chunks/3p_pwu5gx2i9h.js +1 -0
  191. package/.next/standalone/.next/static/chunks/3yc3rzp4dxvyo.js +1 -0
  192. package/.next/standalone/.next/static/chunks/3zw8bv7-mc4n6.js +33 -0
  193. package/.next/standalone/CHANGELOG.md +63 -0
  194. package/.next/standalone/app/api/network/route.js +11 -0
  195. package/.next/standalone/app/api/scraper/route.js +19 -0
  196. package/.next/standalone/app/api/social/route.js +96 -0
  197. package/.next/standalone/app/components/AutoScanButton.js +41 -0
  198. package/.next/standalone/app/components/ChainView.js +7 -0
  199. package/.next/standalone/app/components/FilterPanel.js +37 -5
  200. package/.next/standalone/app/components/OrbitGraph.js +17 -4
  201. package/.next/standalone/app/components/ScanStatusBar.js +96 -0
  202. package/.next/standalone/app/components/SeparationView.js +9 -1
  203. package/.next/standalone/app/components/Sidebar.js +88 -26
  204. package/.next/standalone/app/components/SocialAutoSync.js +34 -0
  205. package/.next/standalone/app/components/settings/NetworkHealthSection.js +85 -0
  206. package/.next/standalone/app/globals.css +4 -0
  207. package/.next/standalone/app/layout.js +6 -0
  208. package/.next/standalone/app/page.js +37 -4
  209. package/.next/standalone/app/scores/page.js +3 -0
  210. package/.next/standalone/app/setup/page.js +13 -1
  211. package/.next/standalone/app/social/page.js +293 -0
  212. package/.next/standalone/lib/experimental-client.js +38 -0
  213. package/.next/standalone/lib/insights.js +54 -0
  214. package/.next/standalone/lib/linkedin-export.js +156 -0
  215. package/.next/standalone/lib/network-health.js +42 -0
  216. package/.next/standalone/lib/network.js +1 -0
  217. package/.next/standalone/lib/scraper-client.js +1 -0
  218. package/.next/standalone/package-lock.json +2 -2
  219. package/.next/standalone/package.json +1 -1
  220. package/.next/standalone/scripts/scrape.py +335 -5
  221. package/.next/static/chunks/04a3zockahetx.js +1 -0
  222. package/.next/static/chunks/0a5iadnmt9u9k.js +1 -0
  223. package/.next/static/chunks/{2p6o90z0vgcwr.css → 0bo1dxn5gwzpk.css} +1 -1
  224. package/.next/static/chunks/0g_p4p7oci18u.js +1 -0
  225. package/.next/static/chunks/{0ax_9zzboyv6d.js → 17-rhp8sg4m1b.js} +2 -2
  226. package/.next/static/chunks/1ra4cwcp75tfa.js +1 -0
  227. package/.next/static/chunks/236f0jtp68j_h.js +1 -0
  228. package/.next/static/chunks/24m745q_85u34.js +6 -0
  229. package/.next/static/chunks/2_wcobfqry2uj.js +1 -0
  230. package/.next/static/chunks/2dwtoszeq91us.js +1 -0
  231. package/.next/static/chunks/2hvcevue9aro4.js +1 -0
  232. package/.next/static/chunks/2uo9i03_05rqi.js +18 -0
  233. package/.next/static/chunks/3p_pwu5gx2i9h.js +1 -0
  234. package/.next/static/chunks/3yc3rzp4dxvyo.js +1 -0
  235. package/.next/static/chunks/3zw8bv7-mc4n6.js +33 -0
  236. package/CHANGELOG.md +63 -0
  237. package/lib/experimental-client.js +38 -0
  238. package/lib/insights.js +54 -0
  239. package/lib/linkedin-export.js +156 -0
  240. package/lib/network-health.js +42 -0
  241. package/lib/network.js +1 -0
  242. package/lib/scraper-client.js +1 -0
  243. package/package.json +1 -1
  244. package/scripts/scrape.py +335 -5
  245. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0h1_f_2._.js +0 -3
  246. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__19ip1qq._.js +0 -3
  247. package/.next/standalone/.next/server/chunks/ssr/_06w_gl4._.js +0 -3
  248. package/.next/standalone/.next/server/chunks/ssr/_13kzrwv._.js +0 -3
  249. package/.next/standalone/.next/server/chunks/ssr/_15xuwkv._.js +0 -3
  250. package/.next/standalone/.next/server/chunks/ssr/_1hgd5dp._.js +0 -3
  251. package/.next/standalone/.next/server/chunks/ssr/_1vpfyd-._.js +0 -3
  252. package/.next/standalone/.next/server/chunks/ssr/_20w06i-._.js +0 -3
  253. package/.next/standalone/.next/server/chunks/ssr/lib_1bn38gs._.js +0 -3
  254. package/.next/standalone/.next/server/chunks/ssr/node_modules_1f8t_rp._.js +0 -23
  255. package/.next/standalone/.next/static/chunks/049vavjsmqgmn.js +0 -33
  256. package/.next/standalone/.next/static/chunks/0cuuo2jwc9h94.js +0 -1
  257. package/.next/standalone/.next/static/chunks/0ljxa-wk_iu__.js +0 -18
  258. package/.next/standalone/.next/static/chunks/0mp9b72fm-jp6.js +0 -6
  259. package/.next/standalone/.next/static/chunks/1pre1cotntk6-.js +0 -1
  260. package/.next/standalone/.next/static/chunks/22x2_r768-u5i.js +0 -1
  261. package/.next/standalone/.next/static/chunks/28bu26ausqzmn.js +0 -1
  262. package/.next/standalone/.next/static/chunks/2jz311xl1pp_8.js +0 -1
  263. package/.next/standalone/.next/static/chunks/2ot61qsv6_0eq.js +0 -1
  264. package/.next/standalone/.next/static/chunks/2xjho0lroiwlq.js +0 -1
  265. package/.next/standalone/.next/static/chunks/3zs_6-nn0dapb.js +0 -1
  266. package/.next/static/chunks/049vavjsmqgmn.js +0 -33
  267. package/.next/static/chunks/0cuuo2jwc9h94.js +0 -1
  268. package/.next/static/chunks/0ljxa-wk_iu__.js +0 -18
  269. package/.next/static/chunks/0mp9b72fm-jp6.js +0 -6
  270. package/.next/static/chunks/1pre1cotntk6-.js +0 -1
  271. package/.next/static/chunks/22x2_r768-u5i.js +0 -1
  272. package/.next/static/chunks/28bu26ausqzmn.js +0 -1
  273. package/.next/static/chunks/2jz311xl1pp_8.js +0 -1
  274. package/.next/static/chunks/2ot61qsv6_0eq.js +0 -1
  275. package/.next/static/chunks/2xjho0lroiwlq.js +0 -1
  276. package/.next/static/chunks/3zs_6-nn0dapb.js +0 -1
  277. /package/.next/standalone/.next/static/{wGVrXBkFLmEB4snfhtOcO → VE8LeJXfD2H0_OgJxuJcm}/_buildManifest.js +0 -0
  278. /package/.next/standalone/.next/static/{wGVrXBkFLmEB4snfhtOcO → VE8LeJXfD2H0_OgJxuJcm}/_clientMiddlewareManifest.js +0 -0
  279. /package/.next/standalone/.next/static/{wGVrXBkFLmEB4snfhtOcO → VE8LeJXfD2H0_OgJxuJcm}/_ssgManifest.js +0 -0
  280. /package/.next/static/{wGVrXBkFLmEB4snfhtOcO → VE8LeJXfD2H0_OgJxuJcm}/_buildManifest.js +0 -0
  281. /package/.next/static/{wGVrXBkFLmEB4snfhtOcO → VE8LeJXfD2H0_OgJxuJcm}/_clientMiddlewareManifest.js +0 -0
  282. /package/.next/static/{wGVrXBkFLmEB4snfhtOcO → VE8LeJXfD2H0_OgJxuJcm}/_ssgManifest.js +0 -0
@@ -0,0 +1 @@
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,2776,e=>{"use strict";var t=e.i(43476),n=e.i(15812);e.s(["default",0,function({children:e}){let{userId:o,ready:i}=(0,n.useUser)();return i&&o?e:(0,t.jsx)("div",{style:{minHeight:"100vh",display:"flex",alignItems:"center",justifyContent:"center",background:"#0a0a1a",color:"#fff",padding:24,textAlign:"center",fontFamily:'-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif'},children:i?(0,t.jsxs)("div",{style:{maxWidth:420},children:[(0,t.jsx)("div",{style:{fontSize:18,fontWeight:700,marginBottom:8},children:"Can’t reach Six Degrees’ local server"}),(0,t.jsx)("div",{style:{color:"#888",fontSize:14,lineHeight:1.6},children:"The page loaded but the app behind it is not answering. If you started it from a terminal, check that window for an error, then reload this page."})]}):(0,t.jsx)("div",{style:{fontSize:18,fontWeight:600},children:"Loading…"})})}])},8819,e=>{"use strict";var t=e.i(43476);let n="1px solid rgba(255,255,255,0.1)";function o({children:e,style:n}){return(0,t.jsx)("div",{style:{fontSize:13.5,color:"#8b9a9a",lineHeight:1.6,marginTop:4,...n},children:e})}e.s(["Body",0,o,"Btn",0,function({children:e,onClick:o,disabled:i,primary:a,tone:r,type:s="button"}){return(0,t.jsx)("button",{type:s,onClick:o,disabled:i,style:{padding:"9px 18px",borderRadius:7,fontSize:13.5,fontWeight:650,color:i?"#667":"#fff",border:n,background:i?"rgba(255,255,255,0.05)":"bad"===r?"rgba(255,80,80,0.15)":a?"linear-gradient(135deg, #9B59B6, #3498DB)":"rgba(255,255,255,0.08)",cursor:i?"not-allowed":"pointer"},children:e})},"FONT",0,'-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif',"LINE",0,n,"Mono",0,function({children:e}){return(0,t.jsx)("code",{style:{background:"rgba(255,255,255,0.08)",padding:"1px 5px",borderRadius:4,wordBreak:"break-all"},children:e})},"Section",0,function({id:e,title:i,intro:a,children:r}){return(0,t.jsxs)("section",{id:e,style:{padding:"24px 0",borderBottom:n,scrollMarginTop:16},children:[(0,t.jsx)("h2",{style:{fontSize:16,fontWeight:650,margin:"0 0 6px"},children:i}),a&&(0,t.jsx)(o,{style:{marginTop:0,marginBottom:12},children:a}),r]})},"Status",0,function({children:e,tone:n}){return(0,t.jsxs)("div",{role:"status",style:{marginTop:10,padding:"10px 14px",borderRadius:8,fontSize:13.5,lineHeight:1.6,color:"ok"===n?"#00ff88":"bad"===n?"#ff7676":"#e8e8ee",background:"ok"===n?"rgba(0,255,136,0.08)":"bad"===n?"rgba(255,80,80,0.08)":"rgba(255,255,255,0.05)",border:`1px solid ${"ok"===n?"rgba(0,255,136,0.3)":"bad"===n?"rgba(255,80,80,0.3)":"rgba(255,255,255,0.12)"}`},children:["ok"===n&&"✓ ",e]})}])},5445,e=>{"use strict";var t=e.i(43476),n=e.i(71645),o=e.i(22016),i=e.i(18566),a=e.i(2776),r=e.i(8819);function s(){let[e,o]=(0,n.useState)(null);return((0,n.useEffect)(()=>{fetch("/api/update").then(e=>e.json()).then(o).catch(()=>{})},[]),e)?e.installed?(0,t.jsx)(h,{local:e}):(0,t.jsx)(d,{local:e}):null}async function l(e){let t=await fetch("/api/update",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}),n=await t.json().catch(()=>({}));return{ok:t.ok,d:n}}function d({local:e}){let[o,i]=(0,n.useState)(null),[a,s]=(0,n.useState)(null),[c,h]=(0,n.useState)(null),[p,u]=(0,n.useState)(null);async function y(e){s(e),h(null);try{let{ok:t,d:n}=await l({action:e});if(!t){h(n.error||"Something went wrong."),n.dirty&&i({dirty:n.dirty});return}"check"===e?i(n):(u(n),i(null))}catch(e){h(e.message)}finally{s(null)}}return(0,n.useEffect)(()=>{"updates"===new URLSearchParams(window.location.search).get("check")&&(document.getElementById("updates")?.scrollIntoView({block:"center"}),y("check"),window.history.replaceState(null,"",window.location.pathname))},[]),(0,t.jsxs)(r.Section,{id:"updates",title:"Updates",children:[p?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(r.Body,{children:["Updated to ",(0,t.jsx)(r.Mono,{children:p.sha})," — “",p.subject,"”."]}),(0,t.jsx)(r.Body,{style:{color:p.needsRestart?"#FFD700":void 0},children:p.needsRestart?"Stop the app in your terminal and start it again — this update changed how it starts.":"The page will pick up most changes on its own. Restart the app if anything looks odd."})]}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(r.Body,{children:["You are on ",(0,t.jsx)(r.Mono,{children:e.sha})," — “",e.subject,"”."]}),o&&0===o.behind&&(0,t.jsx)(r.Status,{tone:"ok",children:"You’re up to date."}),o&&o.behind>0&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(r.Body,{style:{color:"#00ff88"},children:[o.behind," update",1===o.behind?"":"s"," available."]}),(0,t.jsx)("pre",{style:x,children:o.commits.join("\n")})]}),o?.dirty?.length>0&&(0,t.jsxs)(r.Body,{children:["Changed files here:"," ",(0,t.jsx)(r.Mono,{children:o.dirty.join(", ")}),". Commit or discard them first — this will not throw away your work."]}),(0,t.jsxs)(f,{children:[(0,t.jsx)(r.Btn,{onClick:()=>y("check"),disabled:!!a,children:"check"===a?"Checking…":"Check for updates"}),o?.behind>0&&(0,t.jsx)(r.Btn,{onClick:()=>y("pull"),disabled:!!a,primary:!0,children:"pull"===a?"Updating…":`Install ${o.behind} update${1===o.behind?"":"s"}`})]})]}),c&&(0,t.jsx)(r.Body,{style:{color:"#ff7676"},children:c}),(0,t.jsxs)(r.Body,{style:{fontSize:12,color:"#667",marginTop:12},children:["Nothing is checked automatically and nothing about you is sent — this runs the same ",(0,t.jsx)(r.Mono,{children:"git fetch"})," and ",(0,t.jsx)(r.Mono,{children:"git pull"})," you would type yourself."]})]})}let c=["checking","downloading","verifying","preparing","restarting"];function h({local:e}){let o="mac-app"===e.kind,[i,a]=(0,n.useState)(!1),[s,d]=(0,n.useState)(null),[m,b]=(0,n.useState)(null),[j,w]=(0,n.useState)(!1),[k,S]=(0,n.useState)(null),[v,B]=(0,n.useState)(e.job||null),[T,C]=(0,n.useState)(!1),[D,I]=(0,n.useState)(null),[$,F]=(0,n.useState)(null),[M,R]=(0,n.useState)(void 0),[z,E]=(0,n.useState)(0),[L,N]=(0,n.useState)(!1),A=!!(v&&c.includes(v.phase)),O=A&&("restarting"===v.phase||z>0);async function U(){a(!0),d(null),b(null),I(null),F(null),R(void 0),B(e=>e&&c.includes(e.phase)?e:null);try{let{ok:e,d:t}=await l({action:"check-release"});e?(d(t),S(new Date)):b(t.error||"Could not check.")}catch(e){b(e.message)}finally{a(!1)}}async function W(){C(!0),I(null),F(null),R(void 0),E(0),N(!1);try{let{ok:e,d:t}=await l({action:"install-release"});t.job&&B(t.job),!e&&(I(t.error||"The update could not start."),F(t.refusal||null),"fallback"in t&&R(t.fallback))}catch(e){I(e.message)}finally{C(!1)}}async function Y(){try{let{d:e}=await l({action:"cancel-install"});e.job&&B(e.job)}catch{}}async function P(){try{await navigator.clipboard.writeText(e.command),w(!0),setTimeout(()=>w(!1),1600)}catch{b("Could not copy — select the line and copy it by hand.")}}(0,n.useEffect)(()=>{"#updates"===window.location.hash&&document.getElementById("updates")?.scrollIntoView({block:"start"}),"updates"!==new URLSearchParams(window.location.search).get("check")||(window.history.replaceState(null,"",window.location.pathname),e.job&&c.includes(e.job.phase)||(document.getElementById("updates")?.scrollIntoView({block:"center"}),U().then(()=>document.getElementById("updates")?.scrollIntoView({block:"end",behavior:"smooth"}))))},[e.job]),(0,n.useEffect)(()=>{if(!A)return;let e=!0,t=setTimeout(async()=>{try{if(O){let t=await fetch("/api/update",{cache:"no-store"}),n=await t.json();if(!e)return;if(!n.job||n.job.id!==v.id)return void window.location.reload();E(0),B(n.job)}else{let{ok:t,d:n}=await l({action:"update-status"});e&&t&&n.job&&B(n.job)}}catch{e&&E(e=>e+1)}},O?1500:600);return()=>{e=!1,clearTimeout(t)}},[v,z,A,O]),(0,n.useEffect)(()=>{if(!O)return;let e=setTimeout(()=>N(!0),6e4);return()=>clearTimeout(e)},[O]);let H=v?.phase==="failed",V=o&&s?.install?.possible,G=H&&"stale-check"===v.code||"not-checked"===$,K=void 0!==M?M:s?.fallback,_=s?.newer&&(!o||K)&&(!V||H||D||e.lastUpdate?.tone==="bad"),q=function({mac:e,kind:t,canInstall:n,fallback:o}){if(!e)return"source"===t?"A copy built from the source code updates by fetching the code and building it again, which it can't do while it runs. Stop it (Ctrl-C), then run this in the six-degrees folder. Your network stays where it is.":"This copy runs inside the terminal that started it, so it can't replace itself while it runs. Stop it first (Ctrl-C), then run this to start the newest version. Your network stays where it is.";if(!o)return null;let i=o.dataDir?` It opens the new version on the usual data folder, not on ${o.dataDir}: to use that one, quit it and open it again with --data-dir, as you opened this one.`:"";return"replace"===o.mode?`${n?"Or paste this into Terminal.":"Paste this into Terminal instead."} It closes this app, puts the new version in its place and opens it. Your network stays where it is.${i}`:`${n?"Or copy":"Copy"} this line, quit Six Degrees, then paste it into Terminal. It installs the new version at ${o.installsTo}, not where this copy is, and opens it: use that one from then on. Your network stays where it is.${i}`}({mac:o,kind:e.kind,canInstall:V,fallback:K});return(0,t.jsxs)(r.Section,{id:"updates",title:"Updates",children:[e.lastUpdate&&!A&&(0,t.jsx)(y,{report:e.lastUpdate}),(0,t.jsxs)(r.Body,{children:["You have version ",(0,t.jsx)(r.Mono,{children:e.version}),"."]}),A?(0,t.jsx)(u,{job:v,restarting:O,slow:L,onCancel:Y}):(0,t.jsxs)(t.Fragment,{children:[H&&(0,t.jsxs)(r.Status,{tone:"bad",children:[(0,t.jsx)("strong",{children:"The update didn’t finish."})," ",v.error," Nothing was changed."]}),v?.phase==="cancelled"&&(0,t.jsx)(r.Status,{children:"Cancelled. Nothing was changed."}),D&&(0,t.jsx)(r.Status,{tone:"bad",children:D}),s&&!s.latest&&(0,t.jsx)(r.Status,{children:"No release has been published yet."}),s?.latest&&!s.newer&&(0,t.jsxs)(r.Status,{tone:"ok",children:["You’re up to date: ",s.latest.version," is the newest version.",k&&(0,t.jsxs)("span",{style:{color:"#8b9a9a"},children:[" Checked at ",k.toLocaleTimeString([],{hour:"numeric",minute:"2-digit"}),"."]})]}),s?.newer&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(r.Body,{style:{color:"#00ff88"},children:["Version ",s.latest.version," is available."]}),V&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(r.Body,{children:["It downloads ",s.install.size?`about ${p(s.install.size)} MB`:"the new version"," from GitHub, checks it, then closes, replaces itself and reopens. Your network isn’t touched, and a backup of it is made first."]}),(0,t.jsxs)(f,{children:[G?(0,t.jsx)(r.Btn,{onClick:U,disabled:i,primary:!0,children:i?"Checking…":"Check again"}):(0,t.jsx)(r.Btn,{onClick:W,disabled:T,primary:!0,children:T?"Starting…":H||D?"Try again":"Install and restart"}),(0,t.jsx)(g,{url:s.latest.url})]})]}),o&&!V&&s.install?.reason&&(0,t.jsx)(r.Body,{children:s.install.reason}),_&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(r.Body,{children:q}),e.testReleases?(0,t.jsx)("pre",{style:x,children:"Not shown in test mode: it would install the real release from GitHub into Applications."}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("pre",{style:x,children:e.command}),(0,t.jsxs)(f,{children:[(0,t.jsx)(r.Btn,{onClick:P,primary:!V,children:j?"Copied":"Copy"}),!V&&(0,t.jsx)(g,{url:s.latest.url})]})]})]}),!V&&!_&&(0,t.jsx)(f,{children:(0,t.jsx)(g,{url:s.latest.url})})]}),!s?.newer&&(0,t.jsx)(f,{children:(0,t.jsx)(r.Btn,{onClick:U,disabled:i,children:i?"Checking…":s?"Check again":"Check for updates"})})]}),m&&(0,t.jsx)(r.Body,{style:{color:"#ff7676"},children:m}),(0,t.jsxs)(r.Body,{style:{fontSize:12,color:"#667",marginTop:12},children:["Nothing is checked automatically. The button asks GitHub for the newest version number, and nothing about you is sent.",o&&" Only a second click, Install and restart, downloads the new version."]}),e.testReleases&&(0,t.jsxs)(r.Body,{style:{fontSize:12,color:"#FFD700",marginTop:6},children:["Test mode: releases are read from ",(0,t.jsx)(r.Mono,{children:e.testReleases})," on this computer, not from GitHub."]})]})}let p=e=>Math.max(1,Math.round(e/1e6));function u({job:e,restarting:n,slow:o,onCancel:i}){let a=e.total?Math.min(100,Math.round(e.received/e.total*100)):null,s=n?"Restarting… Six Degrees closes and opens again in a moment.":"checking"===e.phase?"Asking GitHub for the newest version…":"downloading"===e.phase?`Downloading ${e.version}…${null!==a?` ${a}% (${p(e.received)} of ${p(e.total)} MB)`:""}`:"verifying"===e.phase?"Checking the download…":"Preparing the new version…";return(0,t.jsxs)("div",{role:"status","aria-live":"polite",style:{marginTop:12},children:[(0,t.jsx)(r.Body,{style:{color:"#e8e8ee"},children:s}),"downloading"===e.phase&&null!==a&&(0,t.jsx)("div",{role:"progressbar","aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":a,"aria-label":"Download",style:{height:6,borderRadius:3,background:"rgba(255,255,255,0.08)",marginTop:10,overflow:"hidden",maxWidth:420},children:(0,t.jsx)("div",{style:{width:`${a}%`,height:"100%",background:"linear-gradient(90deg, #9B59B6, #3498DB)",transition:"width 0.4s ease"}})}),o&&(0,t.jsx)(r.Body,{children:"This is taking longer than it should. If Six Degrees doesn’t open again by itself, open it from your Applications folder."}),!n&&(0,t.jsx)(f,{children:(0,t.jsx)(r.Btn,{onClick:i,children:"Cancel"})})]})}function y({report:e}){let n=new Date(e.at).toLocaleString([],{dateStyle:"medium",timeStyle:"short"});return(0,t.jsxs)(r.Status,{tone:"ok"===e.tone?"ok":"bad",children:[e.text," ",(0,t.jsxs)("span",{style:{color:"#8b9a9a"},children:["(",n,")"]}),"ok"===e.tone&&e.previous&&(0,t.jsxs)("span",{style:{display:"block",fontSize:12.5,color:"#8b9a9a",marginTop:4},children:["A copy of the version you had is kept in ",(0,t.jsx)(r.Mono,{children:e.previous})," until the next update. To go back to it, open that file and drag the app it gives you into your Applications folder."]})]})}function g({url:e}){return e?(0,t.jsx)("a",{href:e,target:"_blank",rel:"noreferrer",style:{color:"#3498DB",fontSize:13.5},children:"What changed →"}):null}function f({children:e}){return(0,t.jsx)("div",{style:{display:"flex",gap:10,marginTop:12,flexWrap:"wrap",alignItems:"center"},children:e})}let x={background:"rgba(0,0,0,0.45)",border:r.LINE,borderRadius:8,padding:12,margin:"8px 0 0",fontSize:12,lineHeight:1.7,color:"#b9c6c6",fontFamily:"ui-monospace, SFMono-Regular, Menlo, monospace",whiteSpace:"pre-wrap",maxHeight:180,overflow:"auto"};function m(e){if(!e)return"0 KB";if(e<1048576)return`${Math.max(1,Math.round(e/1024))} KB`;let t=e/1048576;return`${t<10?t.toFixed(1):Math.round(t)} MB`}let b=e=>Number(e||0).toLocaleString("en-US"),j=(e,t,n=`${t}s`)=>`${b(e)} ${1===Number(e)?t:n}`;function w(e,t=!0){if(!e)return null;let n=new Date(e);return Number.isNaN(n.getTime())?null:n.toLocaleString(void 0,t?{dateStyle:"medium",timeStyle:"short"}:{dateStyle:"medium"})}let k={auto:"before a new version",import:"before an import",manual:"made by hand"};async function S(e,t){let n=await e.json().catch(()=>({}));if(!e.ok)throw Object.assign(Error(n.error||t),{data:n});return n}let v={display:"flex",gap:10,marginTop:12,flexWrap:"wrap",alignItems:"center"},B={fontSize:12,color:"#667",marginTop:10},T={fontSize:14,fontWeight:650,margin:"26px 0 4px",color:"#e8e8ee"},C={display:"flex",gap:8,alignItems:"flex-start",marginTop:12,fontSize:13,color:"#c8d0d0",lineHeight:1.5,cursor:"pointer"};function D({label:e,children:n}){return(0,t.jsxs)("div",{style:{display:"flex",gap:12,justifyContent:"space-between",padding:"7px 0",borderTop:r.LINE,fontSize:13.5},children:[(0,t.jsx)("span",{style:{color:"#8b9a9a"},children:e}),(0,t.jsx)("span",{style:{color:"#e8e8ee",textAlign:"right"},children:n})]})}function I(){return(0,t.jsx)("a",{href:"https://github.com/blakeb056/six-degrees#undo-an-import",target:"_blank",rel:"noreferrer",style:{color:"inherit",textDecoration:"underline"},children:"Undo an import"})}function $(){let[e,o]=(0,n.useState)(null),[i,a]=(0,n.useState)(null),[s,l]=(0,n.useState)(null),[d,c]=(0,n.useState)(null),[h,p]=(0,n.useState)(null),[u,y]=(0,n.useState)(null),[g,f]=(0,n.useState)(!0),[x,$]=(0,n.useState)(null),[F,M]=(0,n.useState)(!1),[R,z]=(0,n.useState)(!1),E=(0,n.useRef)(null),L=(0,n.useRef)(!1),N=(0,n.useCallback)(()=>fetch("/api/data",{cache:"no-store"}).then(e=>S(e,"The data folder could not be read.")).then(e=>{let t=Date.parse(e.lastImport?.appliedAt||"");o({...e,importIsRecent:Number.isFinite(t)&&Date.now()-t<864e5}),a(null)}).catch(e=>a(e.message)),[]);async function A(){c(null);try{await navigator.clipboard.writeText(e.dataDir),c({tone:"ok",text:"Copied the folder’s path."})}catch{c({tone:"bad",text:"This window can’t copy. Select the path above and copy it instead."})}}async function O(){l("reveal"),c(null);try{await S(await fetch("/api/data/reveal",{method:"POST"}),"The folder could not be opened."),c({tone:"ok",text:"darwin"===e.platform?"Opened in Finder.":"Opened in your file browser."})}catch(e){c({tone:"bad",text:e.message})}finally{l(null)}}async function U(){l("export"),p(null);try{let e,t=await fetch("/api/data/export",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({photos:g})});t.ok||await S(t,"The copy could not be made.");let n=await t.blob(),o=/filename="([^"]+)"/.exec(t.headers.get("content-disposition")||"")?.[1]||"Six Degrees backup.sixdegrees",i=URL.createObjectURL(n),a=document.createElement("a");a.href=i,a.download=o,a.style.position="fixed",a.style.left="-9999px",document.body.appendChild(a),a.click(),a.remove(),setTimeout(()=>URL.revokeObjectURL(i),6e4);let r=[(e=Number(t.headers.get("x-six-degrees-people")),j(e,"person","people"))];r.push(g?j(Number(t.headers.get("x-six-degrees-photos")),"photo"):"no photos"),p({tone:"ok",text:`Made “${o}” (${m(n.size)}: ${r.join(", ")}). Look for it in your Downloads folder, or wherever you chose to save it.`})}catch(e){p({tone:"bad",text:e.message})}finally{l(null)}}async function W(){if(x){l("import"),y(null);try{let t={"Content-Type":"application/octet-stream","X-Six-Degrees-Size":String(x.size)};e.people>0&&(t["X-Six-Degrees-Replace"]=String(e.people)),await S(await fetch("/api/data/import",{method:"POST",headers:t,body:x}),"The file could not be imported."),$(null),M(!1),E.current&&(E.current.value=""),await N()}catch(e){e.data?.needsConfirm&&(M(!1),await N()),y({tone:"bad",text:e.message})}finally{l(null)}}}async function Y(){l("cancel"),y(null);try{await S(await fetch("/api/data/import",{method:"DELETE"}),"The import could not be cancelled."),await N(),y({tone:"ok",text:"Cancelled. The network here stays as it is."})}catch(e){y({tone:"bad",text:e.message})}finally{l(null)}}async function P(){l("restart"),y(null);try{await S(await fetch("/api/data/restart",{method:"POST"}),"Six Degrees could not restart."),z(!0);let e=e=>new Promise(t=>setTimeout(t,e)),t=Date.now()+9e4;for(await e(2500);Date.now()<t;){try{if((await fetch("/api/data",{cache:"no-store"})).ok)return void window.location.reload()}catch{}await e(1e3)}z(!1),y({tone:"bad",text:"Six Degrees didn’t come back. Quit it and open it again: the import finishes as it starts."})}catch(e){y({tone:"bad",text:e.message})}finally{l(null)}}if((0,n.useEffect)(()=>{N()},[N]),(0,n.useEffect)(()=>{e&&!L.current&&(L.current=!0,"#data"===window.location.hash&&document.getElementById("data")?.scrollIntoView({block:"start"}))},[e]),!e)return(0,t.jsx)(r.Section,{id:"data",title:"Your data",children:i?(0,t.jsx)(r.Status,{tone:"bad",children:i}):(0,t.jsx)(r.Body,{children:"Loading…"})});let H=e.pending,V=e.photosInCopy||e.photos,G=e.backups||[],K=G.reduce((e,t)=>e+(t.bytes||0),0),_=!!(x&&x.size>e.maxImportBytes),q=e.people>0,J=e.lastImport;return(0,t.jsxs)(r.Section,{id:"data",title:"Your data",intro:"Everything Six Degrees knows about your network is in one folder on this computer.",children:[(0,t.jsx)(r.Body,{children:(0,t.jsx)(r.Mono,{children:e.dataDir})}),(0,t.jsxs)("div",{style:v,children:[(0,t.jsx)(r.Btn,{onClick:A,children:"Copy the path"}),(0,t.jsx)(r.Btn,{onClick:O,disabled:"reveal"===s,children:"reveal"===s?"Opening…":"darwin"===e.platform?"Show in Finder":"Open the folder"})]}),d&&(0,t.jsx)(r.Status,{tone:d.tone,children:d.text}),(0,t.jsxs)("div",{style:{marginTop:16,borderBottom:r.LINE},children:[(0,t.jsxs)(D,{label:"Your network",children:[j(e.people,"person","people")," · ",m(e.databaseBytes)]}),(0,t.jsx)(D,{label:"Profile photos",children:e.photos.count?`${b(e.photos.count)} \xb7 ${m(e.photos.bytes)}`:"none saved yet"}),(0,t.jsx)(D,{label:"Backups",children:G.length?`${j(G.length,"copy","copies")} \xb7 ${m(K)}`:"none yet"}),(0,t.jsx)(D,{label:"LinkedIn sign-in for scanning",children:e.linkedinSignIn?"kept here, never put in a copy":"not signed in on this computer"})]}),G.length>0&&(0,t.jsxs)("details",{style:{marginTop:10,fontSize:13,color:"#8b9a9a"},children:[(0,t.jsx)("summary",{style:{cursor:"pointer"},children:"The backups"}),(0,t.jsx)("div",{style:{display:"grid",gridTemplateColumns:"minmax(0, 1fr) auto auto",gap:"6px 14px",marginTop:8},children:G.map(e=>(0,t.jsxs)("div",{style:{display:"contents"},children:[(0,t.jsxs)("span",{style:{wordBreak:"break-all",color:"#c8d0d0"},children:[e.name,e.folder?"/":"",(0,t.jsxs)("span",{style:{color:"#667"},children:[" · ",e.folder?"its photos and files":k[e.kind]||e.kind]})]}),(0,t.jsx)("span",{children:w(e.modifiedAt)}),(0,t.jsx)("span",{style:{textAlign:"right"},children:m(e.bytes)})]},e.name))})]}),(0,t.jsx)(r.Body,{style:B,children:"Backups are copies of your network from before a new version or an import. The newest five from new versions are kept; copies from before an import stay until you delete them."}),(0,t.jsx)(r.Body,{style:B,children:"The folder can’t be moved from here. A database that a sync service (iCloud Drive, Dropbox) copies while it’s open can be damaged, and this folder also holds your LinkedIn sign-in, which should never be synced. To use your network on another computer, save a copy below and import it there."}),(0,t.jsx)("h3",{style:T,children:"Move your network to another computer"}),(0,t.jsx)(r.Body,{children:"Save a copy here, then on the new computer install Six Degrees, open Settings → Your data and import the copy. Sign in to LinkedIn again there before you scan: your sign-in never goes into a copy."}),(0,t.jsxs)("label",{style:C,children:[(0,t.jsx)("input",{type:"checkbox",checked:g,onChange:e=>f(e.target.checked),style:{marginTop:3}}),(0,t.jsxs)("span",{children:["Include profile photos",V.count?` (${b(V.count)}, ${m(V.bytes)})`:"",". They can’t be downloaded again without a new scan."]})]}),(0,t.jsxs)("div",{style:v,children:[(0,t.jsx)(r.Btn,{primary:!0,onClick:U,disabled:!!s||R||0===e.people,children:"export"===s?"Saving…":"Save a copy of my network"}),0===e.people&&(0,t.jsx)("span",{style:{fontSize:13,color:"#8b9a9a"},children:"There’s no network here to save yet."})]}),h&&(0,t.jsx)(r.Status,{tone:h.tone,children:h.text}),(0,t.jsx)(r.Body,{style:B,children:"The copy holds the names, headlines and photos of the people in your network. Keep it private: don’t post it or share it, and delete it once it has been imported. A network opened from a LinkedIn CSV lives only in its browser tab, so it isn’t in the copy; import the CSV again on the new computer."}),(0,t.jsx)("h3",{style:T,children:"Bring in a network from another computer"}),H?(0,t.jsxs)(r.Status,{children:[(0,t.jsx)("div",{style:{fontWeight:650},children:"An import is waiting to finish."}),(0,t.jsxs)("div",{children:["The network in the copy",H.exportedAt?` saved ${w(H.exportedAt,!1)}`:""," ","(",j(H.people,"person","people"),H.photos?`, ${j(H.photos,"photo")}`:"",H.fromVersion?`, from Six Degrees ${H.fromVersion}`:"",")",H.replacedPeople>0?` replaces the ${j(H.replacedPeople,"person","people")} here the next time Six Degrees starts. A copy of what’s here now is kept in backups first, so the import can be undone.`:" becomes the network here the next time Six Degrees starts."," ","Your LinkedIn search budget and any pause on scanning are kept."]}),H.error&&(0,t.jsxs)("div",{style:{color:"#ff7676",marginTop:6},children:["The last try stopped: ",H.error.replace(/\.$/,""),". It tries again the next time Six Degrees starts."]}),R?(0,t.jsx)("div",{style:{marginTop:8},children:"Restarting… this page comes back in a few seconds."}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("div",{style:{marginTop:8},children:e.restart.how}),e.restart.command&&(0,t.jsx)("div",{style:{marginTop:6},children:(0,t.jsx)(r.Mono,{children:e.restart.command})}),(0,t.jsxs)("div",{style:v,children:[e.restart.canRestart&&(0,t.jsx)(r.Btn,{primary:!0,onClick:P,disabled:!!s,children:"restart"===s?"Restarting…":"Restart now"}),!H.started&&(0,t.jsx)(r.Btn,{onClick:Y,disabled:!!s,children:"cancel"===s?"Cancelling…":"Cancel the import"})]})]})]}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(r.Body,{children:"Pick the copy you saved on the other computer (a .sixdegrees file). It replaces the network here; the two networks are never merged. Your LinkedIn search budget and any pause on scanning are kept, with the other computer’s searches added."}),(0,t.jsx)("input",{ref:E,type:"file",accept:".sixdegrees",onChange:function(e){y(null),M(!1),$(e.target.files?.[0]||null)},style:{display:"none"}}),(0,t.jsxs)("div",{style:v,children:[(0,t.jsx)(r.Btn,{onClick:()=>E.current?.click(),disabled:!!s,children:"Choose a file…"}),x&&(0,t.jsxs)("span",{style:{fontSize:13,color:"#c8d0d0",wordBreak:"break-all"},children:[x.name," · ",m(x.size)]})]}),_&&(0,t.jsxs)(r.Status,{tone:"bad",children:["That file is ",m(x.size),". This copy can import files up to ",m(e.maxImportBytes),"."]}),x&&q&&!_&&(0,t.jsxs)("label",{style:C,children:[(0,t.jsx)("input",{type:"checkbox",checked:F,onChange:e=>M(e.target.checked),style:{marginTop:3}}),(0,t.jsxs)("span",{children:["Replace the ",j(e.people,"person","people")," in this copy’s network with the network in this file. A copy of what’s here is kept in backups first. Your search budget and any pause on scanning are kept too."]})]}),(0,t.jsx)("div",{style:v,children:(0,t.jsx)(r.Btn,{primary:!0,onClick:W,disabled:!x||_||q&&!F||!!s,children:"import"===s?"Checking the file…":"Import"})})]}),u&&(0,t.jsx)(r.Status,{tone:u.tone,children:u.text}),J&&!H&&(e.importIsRecent?(0,t.jsxs)(r.Status,{tone:"ok",children:["Imported ",w(J.appliedAt),": ",j(J.people,"person","people"),J.exportedAt?` from the copy saved ${w(J.exportedAt,!1)}`:"",".",J.keptDatabase&&(0,t.jsxs)(t.Fragment,{children:[" ","What was here before is kept in ",(0,t.jsx)(r.Mono,{children:J.keptDatabase}),J.keptFiles?", with its photos and files beside it":"",".",J.keptAsIs&&" It couldn’t be read, so it was kept exactly as it was."," ","To go back to it, see ",(0,t.jsx)(I,{}),"."]})]}):(0,t.jsxs)(r.Body,{style:B,children:["Last import: ",w(J.appliedAt)," (",j(J.people,"person","people"),").",J.keptDatabase&&(0,t.jsxs)(t.Fragment,{children:[" What was here before is kept in ",(0,t.jsx)(r.Mono,{children:J.keptDatabase})," (",(0,t.jsx)(I,{}),")."]})]}))]})}var F=e.i(64745);let M={"mac-app":"the Mac app",npm:"the npm package (npx six-degrees)",source:"a copy built from the source code",git:"a git checkout of the source code"};function R(){let[e,a]=(0,n.useState)(null),[l,d]=(0,n.useState)(null),c=(0,i.useRouter)();if((0,n.useEffect)(()=>{let e=window.location.hash;("#sector"===e||"#tiers"===e)&&c.replace(`/scores${e}`)},[c]),(0,n.useEffect)(()=>{fetch("/api/settings").then(e=>e.json().then(t=>e.ok?t:Promise.reject(Error(t.error||"Could not load settings.")))).then(a).catch(e=>d(e.message))},[]),F.IS_DEMO)return(0,t.jsxs)("div",{style:{minHeight:"100vh",background:"#0a0a1a",color:"rgba(255,255,255,0.7)",display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",gap:12,textAlign:"center",padding:24,fontFamily:r.FONT},children:[(0,t.jsx)("h2",{style:{margin:0,fontSize:20,fontWeight:700,color:"#fff"},children:"Not part of the demo"}),(0,t.jsx)("p",{style:{margin:0,fontSize:13},children:"The public demo includes the Network Circle and Degrees views only."}),(0,t.jsx)(o.default,{href:"/",style:{fontSize:12,color:"rgba(255,255,255,0.5)",textDecoration:"none"},children:"← Back to the network"})]});let h=e?.about;return(0,t.jsxs)("div",{style:{minHeight:"100vh",background:"#0a0a1a",color:"#fff",fontFamily:r.FONT},children:[(0,t.jsxs)("header",{style:{padding:"16px 24px",borderBottom:r.LINE,display:"flex",alignItems:"center",gap:16},children:[(0,t.jsx)(o.default,{href:"/",style:{display:"flex",alignItems:"center",gap:6,color:"#888",textDecoration:"none",fontSize:13,fontWeight:600,padding:"6px 14px",borderRadius:6,background:"rgba(255,255,255,0.06)",border:r.LINE},children:"← Back to Map"}),(0,t.jsx)("h1",{style:{fontSize:22,fontWeight:700,margin:0,background:"linear-gradient(135deg, #FFD700, #9B59B6, #3498DB)",WebkitBackgroundClip:"text",WebkitTextFillColor:"transparent"},children:"Settings"})]}),(0,t.jsxs)("main",{style:{maxWidth:720,margin:"0 auto",padding:"8px 24px 64px"},children:[l&&(0,t.jsx)(r.Body,{style:{color:"#ff7676",marginTop:16},children:l}),(0,t.jsx)(s,{}),(0,t.jsx)(r.Section,{id:"scoring",title:"Your field and tiers",children:(0,t.jsxs)(r.Body,{children:["They’re on the ",(0,t.jsx)(o.default,{href:"/scores",style:{color:"#3498DB"},children:"Scores"})," tab now, beside every company’s score: ",(0,t.jsx)(o.default,{href:"/scores#sector",style:{color:"#3498DB"},children:"your field"})," and"," ",(0,t.jsx)(o.default,{href:"/scores#tiers",style:{color:"#3498DB"},children:"how tiers are graded"}),"."]})}),(0,t.jsx)($,{}),(0,t.jsx)(r.Section,{id:"about",title:"About this copy",children:h?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(r.Body,{children:["Version ",(0,t.jsx)(r.Mono,{children:h.version}),", running as ",M[h.kind]||h.kind,"."]}),(0,t.jsxs)(r.Body,{children:["Your network is kept in ",(0,t.jsx)(r.Mono,{children:h.dataDir}),h.customDataDir?" (a folder you chose).":".","mac-app"===h.kind&&" Help → Show the Data Folder opens it."]}),(0,t.jsx)(r.Body,{style:{fontSize:12,color:"#667",marginTop:10},children:"Settings are saved with your network, on this computer. Nothing here is sent anywhere."})]}):!l&&(0,t.jsx)(r.Body,{children:"Loading…"})})]})]})}e.s(["default",0,function(){return(0,t.jsx)(a.default,{children:(0,t.jsx)(R,{})})}],5445)},18566,(e,t,n)=>{t.exports=e.r(76562)}]);
@@ -0,0 +1 @@
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,68074,e=>{"use strict";var t=e.i(43476),n=e.i(71645),o=e.i(7837),i=e.i(65084),r=e.i(22016);let s={S:"#FFD700",A:"#9B59B6",B:"#3498DB",C:"#95A5A6",D:"#BDC3C7"},l={background:"rgba(255,255,255,0.03)",border:"1px solid rgba(255,255,255,0.08)",borderRadius:16,padding:24},a={minHeight:"100vh",background:"#0a0a1a",color:"#fff",padding:"56px 24px",fontFamily:'-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif',display:"flex",justifyContent:"center"},d={background:"rgba(255,255,255,0.07)",padding:"2px 6px",borderRadius:5,fontSize:13,fontFamily:"ui-monospace, SFMono-Regular, Menlo, monospace"},c={display:"block",textAlign:"center",padding:"15px 20px",borderRadius:12,background:"linear-gradient(135deg,#FFD700,#9B59B6)",color:"#0a0a1a",fontWeight:800,fontSize:15,textDecoration:"none"};e.s(["default",0,function(){let[e,h]=(0,n.useState)(!1),[g,p]=(0,n.useState)(""),[f,u]=(0,n.useState)(null),[x,y]=(0,n.useState)(!1),m=(0,n.useRef)(null);function b(e){if(!e)return;let t=new FileReader;t.onload=e=>(function(e){y(!0),p("");try{let{connections:t,skipped:n}=(0,o.parseConnectionsCsv)(e);if(!(0,o.saveCsvNetwork)(t)){p("That network is too large to hold in this window. LinkedIn allows up to 30,000 connections and this app holds that many, so please report it with your connection count: github.com/blakeb056/six-degrees/issues"),y(!1);return}(0,i.setUser)(o.CSV_USER.id,o.CSV_USER.name);let r={};t.forEach(e=>{r[e.tier]=(r[e.tier]||0)+1}),u({count:t.length,skipped:n,tiers:r})}catch(e){p(e instanceof o.ConnectionsCsvError?e.message:"Could not read that file. Make sure it is Connections.csv from your LinkedIn export.")}y(!1)})(String(e.target.result||"")),t.onerror=()=>p("Could not read that file."),t.readAsText(e)}return f?(0,t.jsx)("div",{style:a,children:(0,t.jsxs)("div",{style:{maxWidth:560,width:"100%"},children:[(0,t.jsx)("div",{style:{fontSize:13,color:"#2ecc71",fontWeight:700,letterSpacing:2,marginBottom:10},children:"IMPORTED"}),(0,t.jsxs)("h1",{style:{fontSize:38,fontWeight:800,margin:"0 0 8px"},children:[f.count.toLocaleString()," connections mapped"]}),(0,t.jsxs)("p",{style:{color:"rgba(255,255,255,0.45)",margin:"0 0 28px",lineHeight:1.6},children:["Scored on seniority and company, sorted into tiers.",f.skipped>0&&` ${f.skipped} row${1===f.skipped?"":"s"} skipped (blank or duplicate).`]}),(0,t.jsxs)("div",{style:{...l,marginBottom:20},children:[(0,t.jsx)("div",{style:{fontSize:11,fontWeight:700,color:"#666",letterSpacing:2,marginBottom:14},children:"YOUR TIERS"}),["S","A","B","C","D"].map(e=>{let n=f.tiers[e]||0,o=f.count?n/f.count*100:0;return(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:12,marginBottom:8},children:[(0,t.jsx)("span",{style:{width:16,color:s[e],fontWeight:800},children:e}),(0,t.jsx)("div",{style:{flex:1,height:8,borderRadius:4,background:"rgba(255,255,255,0.05)",overflow:"hidden"},children:(0,t.jsx)("div",{style:{width:`${o}%`,height:"100%",background:s[e],borderRadius:4}})}),(0,t.jsx)("span",{style:{width:46,textAlign:"right",color:"rgba(255,255,255,0.6)",fontSize:13},children:n})]},e)})]}),(0,t.jsx)(r.default,{href:"/",style:c,children:"See your galaxy →"}),(0,t.jsx)("p",{style:{color:"#555",fontSize:12,marginTop:18,lineHeight:1.6},children:"Nothing was uploaded or saved: this lives only in this window (or browser tab), and closing it clears it."})]})}):(0,t.jsx)("div",{style:a,children:(0,t.jsxs)("div",{style:{maxWidth:620,width:"100%"},children:[(0,t.jsxs)("h1",{style:{fontSize:40,fontWeight:800,margin:"0 0 10px",letterSpacing:-1},children:["Map ",(0,t.jsx)("span",{style:{background:"linear-gradient(135deg,#FFD700,#9B59B6,#3498DB)",WebkitBackgroundClip:"text",WebkitTextFillColor:"transparent"},children:"your"})," network"]}),(0,t.jsxs)("p",{style:{color:"rgba(255,255,255,0.45)",margin:"0 0 30px",lineHeight:1.6,fontSize:16},children:["Drop LinkedIn’s official ",(0,t.jsx)("code",{style:d,children:"Connections.csv"})," below. It is read in your browser, scored, and drawn as a galaxy — no account, no upload, nothing stored."]}),(0,t.jsxs)("div",{onDragOver:e=>{e.preventDefault(),h(!0)},onDragLeave:()=>h(!1),onDrop:e=>{e.preventDefault(),h(!1),b(e.dataTransfer.files?.[0])},onClick:()=>m.current?.click(),style:{...l,padding:"48px 24px",textAlign:"center",cursor:"pointer",marginBottom:16,borderStyle:"dashed",borderColor:e?"#FFD700":"rgba(255,255,255,0.12)",background:e?"rgba(255,215,0,0.05)":l.background,transition:"all 0.15s ease"},children:[(0,t.jsx)("div",{style:{fontSize:32,marginBottom:10},children:"📄"}),(0,t.jsx)("div",{style:{fontWeight:700,fontSize:17,marginBottom:6},children:x?"Reading…":"Drop Connections.csv here"}),(0,t.jsx)("div",{style:{color:"#666",fontSize:13},children:"or click to choose the file"}),(0,t.jsx)("input",{ref:m,type:"file",accept:".csv,text/csv",style:{display:"none"},onChange:e=>b(e.target.files?.[0])})]}),g&&(0,t.jsx)("div",{style:{background:"rgba(255,59,59,0.08)",border:"1px solid rgba(255,59,59,0.25)",borderRadius:12,padding:16,color:"#ff8080",fontSize:14,lineHeight:1.6,marginBottom:16},children:g}),(0,t.jsxs)("div",{style:{...l,marginBottom:16},children:[(0,t.jsx)("div",{style:{fontSize:11,fontWeight:700,color:"#666",letterSpacing:2,marginBottom:14},children:"HOW TO GET THE FILE"}),(0,t.jsxs)("ol",{style:{margin:0,paddingLeft:20,color:"rgba(255,255,255,0.6)",fontSize:14,lineHeight:2},children:[(0,t.jsxs)("li",{children:["LinkedIn → ",(0,t.jsx)("strong",{style:{color:"#fff"},children:"Settings & Privacy → Data privacy → Get a copy of your data"})]}),(0,t.jsxs)("li",{children:["Pick ",(0,t.jsx)("strong",{style:{color:"#fff"},children:"Connections"})," and request the archive"]}),(0,t.jsx)("li",{children:"LinkedIn emails a download link, usually within ~10 minutes"}),(0,t.jsxs)("li",{children:["Unzip it and drop ",(0,t.jsx)("code",{style:d,children:"Connections.csv"})," above"]})]})]}),(0,t.jsxs)("div",{style:{...l,marginBottom:16},children:[(0,t.jsx)("div",{style:{fontSize:11,fontWeight:700,color:"#2ecc71",letterSpacing:2,marginBottom:10},children:"PRIVATE BY DESIGN"}),(0,t.jsxs)("p",{style:{margin:0,color:"rgba(255,255,255,0.55)",fontSize:14,lineHeight:1.7},children:["Your file never leaves this browser. It is parsed locally, held for this tab only, and never written to any database. The ",(0,t.jsx)("strong",{style:{color:"#fff"},children:"Email Address column is ignored entirely"}),"."]})]}),(0,t.jsxs)("div",{style:{...l,borderColor:"rgba(255,215,0,0.15)"},children:[(0,t.jsx)("div",{style:{fontSize:11,fontWeight:700,color:"#FFD700",letterSpacing:2,marginBottom:10},children:"HONEST CAVEAT"}),(0,t.jsxs)("p",{style:{margin:"0 0 12px",color:"rgba(255,255,255,0.55)",fontSize:14,lineHeight:1.7},children:["LinkedIn’s export contains no profile photos, so everyone renders as initials on a tier-colored circle. It also only covers people you are ",(0,t.jsx)("em",{children:"already"})," connected to — so ",(0,t.jsx)("strong",{style:{color:"#fff"},children:"Degrees"})," and the ",(0,t.jsx)("strong",{style:{color:"#fff"},children:"Outlink queue"})," stay empty, because those map the people you haven’t met yet."]}),(0,t.jsxs)("p",{style:{margin:0,color:"#666",fontSize:13,lineHeight:1.7},children:["Want those? Run the local scanner — it captures 2nd-degree circles and real photos."," ",(0,t.jsx)(r.default,{href:"/setup",style:{color:"#3498DB",textDecoration:"none"},children:"See setup →"})]})]}),(0,t.jsx)("div",{style:{textAlign:"center",marginTop:26},children:(0,t.jsx)(r.default,{href:"/",style:{color:"#555",fontSize:13,textDecoration:"none"},children:"← Back"})})]})})}])}]);
@@ -0,0 +1 @@
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,2776,e=>{"use strict";var t=e.i(43476),n=e.i(15812);e.s(["default",0,function({children:e}){let{userId:r,ready:o}=(0,n.useUser)();return o&&r?e:(0,t.jsx)("div",{style:{minHeight:"100vh",display:"flex",alignItems:"center",justifyContent:"center",background:"#0a0a1a",color:"#fff",padding:24,textAlign:"center",fontFamily:'-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif'},children:o?(0,t.jsxs)("div",{style:{maxWidth:420},children:[(0,t.jsx)("div",{style:{fontSize:18,fontWeight:700,marginBottom:8},children:"Can’t reach Six Degrees’ local server"}),(0,t.jsx)("div",{style:{color:"#888",fontSize:14,lineHeight:1.6},children:"The page loaded but the app behind it is not answering. If you started it from a terminal, check that window for an error, then reload this page."})]}):(0,t.jsx)("div",{style:{fontSize:18,fontWeight:600},children:"Loading…"})})}])},8819,e=>{"use strict";var t=e.i(43476);let n="1px solid rgba(255,255,255,0.1)";function r({children:e,style:n}){return(0,t.jsx)("div",{style:{fontSize:13.5,color:"#8b9a9a",lineHeight:1.6,marginTop:4,...n},children:e})}e.s(["Body",0,r,"Btn",0,function({children:e,onClick:r,disabled:o,primary:s,tone:i,type:l="button"}){return(0,t.jsx)("button",{type:l,onClick:r,disabled:o,style:{padding:"9px 18px",borderRadius:7,fontSize:13.5,fontWeight:650,color:o?"#667":"#fff",border:n,background:o?"rgba(255,255,255,0.05)":"bad"===i?"rgba(255,80,80,0.15)":s?"linear-gradient(135deg, #9B59B6, #3498DB)":"rgba(255,255,255,0.08)",cursor:o?"not-allowed":"pointer"},children:e})},"FONT",0,'-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif',"LINE",0,n,"Mono",0,function({children:e}){return(0,t.jsx)("code",{style:{background:"rgba(255,255,255,0.08)",padding:"1px 5px",borderRadius:4,wordBreak:"break-all"},children:e})},"Section",0,function({id:e,title:o,intro:s,children:i}){return(0,t.jsxs)("section",{id:e,style:{padding:"24px 0",borderBottom:n,scrollMarginTop:16},children:[(0,t.jsx)("h2",{style:{fontSize:16,fontWeight:650,margin:"0 0 6px"},children:o}),s&&(0,t.jsx)(r,{style:{marginTop:0,marginBottom:12},children:s}),i]})},"Status",0,function({children:e,tone:n}){return(0,t.jsxs)("div",{role:"status",style:{marginTop:10,padding:"10px 14px",borderRadius:8,fontSize:13.5,lineHeight:1.6,color:"ok"===n?"#00ff88":"bad"===n?"#ff7676":"#e8e8ee",background:"ok"===n?"rgba(0,255,136,0.08)":"bad"===n?"rgba(255,80,80,0.08)":"rgba(255,255,255,0.05)",border:`1px solid ${"ok"===n?"rgba(0,255,136,0.3)":"bad"===n?"rgba(255,80,80,0.3)":"rgba(255,255,255,0.12)"}`},children:["ok"===n&&"✓ ",e]})}])},60451,e=>{"use strict";var t=e.i(43476),n=e.i(71645),r=e.i(22016),o=e.i(2776),s=e.i(15812),i=e.i(19821),l=e.i(7837),a=e.i(7214);function d(e){let t=String(e||"").trim();if(!t)return null;let n=t.match(/^(\d{4})-(\d{2})-(\d{2})[ T](\d{2}):(\d{2})(?::(\d{2}))?(?:\s*UTC)?$/);if(n)return Date.UTC(+n[1],n[2]-1,+n[3],+n[4],+n[5],+(n[6]||0));if(n=t.match(/^(\d{1,2})\/(\d{1,2})\/(\d{2,4}),?\s+(\d{1,2}):(\d{2})\s*(AM|PM)?$/i)){let e=100>+n[3]?2e3+ +n[3]:+n[3],t=n[4]%12;return"PM"===(n[6]||"").toUpperCase()&&(t+=12),Date.UTC(e,n[1]-1,+n[2],t,+n[5])}if(n=t.match(/^([A-Za-z]{3,9})\s+(\d{4})$/)){let e=Date.parse(`1 ${n[1]} ${n[2]} UTC`);return Number.isNaN(e)?null:e}let r=Date.parse(/\d{4}$/.test(t)?`${t} UTC`:t);return Number.isNaN(r)?null:r}let c=e=>(0,a.keyFor)({profile_url:e});function p(e,t){if(!e||!e.total)return"never";let n=t-e.last;return n<=2592e6||e.recent>=3?"warm":n<=31536e6?"cool":"dormant"}var u=e.i(40996),h=e.i(8819),f=e.i(64745);let g={S:"#FFD700",A:"#9B59B6",B:"#3498DB",C:"#95A5A6",D:"#BDC3C7"},m={warm:["Warm","#ff9f43"],cool:["Cool","#3498DB"],dormant:["Dormant","#8899aa"],never:["Never messaged","#556"]},y={"connections.csv":"first name","messages.csv":"conversation id","invitations.csv":"direction","positions.csv":"company name","shares.csv":"date"},x=e=>e?new Date(e).toLocaleDateString(void 0,{day:"numeric",month:"short",year:"numeric"}):"";function b(){let{userId:e}=(0,s.useUser)(),[o,b]=(0,n.useState)(void 0),[w,v]=(0,n.useState)(null),[j,k]=(0,n.useState)(!1),[S,I]=(0,n.useState)(null),[T,C]=(0,n.useState)(!1),[F,M]=(0,n.useState)(()=>(0,u.scannerNow)()),z=()=>fetch("/api/social").then(e=>e.json()).then(e=>b(e.social||null)).catch(()=>b(null));(0,n.useEffect)(()=>{z()},[]),(0,n.useEffect)(()=>(0,u.watchScanner)(()=>M((0,u.scannerNow)())),[]),(0,n.useEffect)(()=>{if(!e)return;let t=!0;return(0,i.loadNetwork)(e).then(e=>{t&&v(e)}).catch(()=>{}),()=>{t=!1}},[e]);let B=(0,n.useMemo)(()=>{let e=new Map;for(let t of[...w?.degree1||[],...w?.degree2||[]])e.has((0,a.keyFor)(t))||e.set((0,a.keyFor)(t),t);return e},[w]);async function D(e){C(!0),I(null);try{let t={};for(let n of Array.from(e||[])){let e=n.name.toLowerCase();y[e]&&!t[e]&&(t[e]=function(e,t){let n=(0,l.parseCsv)(String(e||"")),r=n.findIndex(e=>e.some(e=>e.trim().toLowerCase()===t.toLowerCase()));if(r<0)return[];let o=n[r].map(e=>e.trim().toLowerCase());return n.slice(r+1).filter(e=>e.some(e=>e.trim())).map(e=>Object.fromEntries(o.map((t,n)=>[t,(e[n]??"").trim()])))}(await n.text(),y[e]))}if(!Object.keys(t).length)throw Error("That folder doesn’t have LinkedIn’s export files in it (Connections.csv, messages.csv and so on).");let n=t["connections.csv"]||[],r=t["messages.csv"]?function(e=[]){let t=new Map,n=new Map;for(let r of e){let e=c(r["sender profile url"]),o=r["conversation id"];if(!o||!e)continue;let s=String(r["recipient profile urls"]||"").split(/[,;\s]+/).filter(Boolean).map(c),i=d(r.date);if(null==i)continue;t.has(o)||t.set(o,{people:new Set,msgs:[]});let l=t.get(o);l.people.add(e),s.forEach(e=>l.people.add(e)),l.msgs.push({from:e,t:i}),n.has(e)||n.set(e,new Set),n.get(e).add(o)}let r=null;for(let[e,t]of n)(!r||t.size>n.get(r).size)&&(r=e);let o=0,s=new Map;for(let e of t.values()){let t=[...e.people].filter(e=>e!==r);if(1!==t.length||!e.people.has(r))continue;let n=t[0],i=s.get(n)||{last:0,lastFromThem:!1,total:0,times:[]};for(let t of e.msgs)i.total+=1,i.times.push(t.t),t.t>=i.last&&(i.last=t.t,i.lastFromThem=t.from!==r),t.t>o&&(o=t.t);s.set(n,i)}for(let e of s.values())e.recent=e.times.filter(e=>e>o-7776e6).length,delete e.times;return{self:r,asOf:o||null,people:s}}(t["messages.csv"]):{asOf:null,people:new Map},o={};for(let[e,t]of r.people)o[e]={last:t.last,lastFromThem:t.lastFromThem,total:t.total,recent:t.recent};if(j)for(let e of n){let t=e["email address"];if(!t)continue;let n=(0,a.keyFor)({profile_url:e.url});o[n]={...o[n]||{},email:t}}let s=r.asOf||Date.now(),i={asOf:s,people:o,chapters:function(e=[],t=[],n=Date.now()){let r=e.map(e=>({company:e["company name"]||"",title:e.title||"",from:d(e["started on"]),to:d(e["finished on"])})).filter(e=>e.company&&null!=e.from).sort((e,t)=>e.from-t.from),o=t.map(e=>({url:c(e.url||e.profile_url),t:d(e["connected on"]||e.connected_on)})).filter(e=>null!=e.t);return r.map(e=>{let t=e.to??n,r=o.filter(n=>n.t>=e.from&&n.t<t);return{...e,to:e.to,made:r.length,people:r.map(e=>e.url)}})}(t["positions.csv"]||[],n,s),posts:t["shares.csv"]?function(e=[],t=[]){let n=e.map(e=>({t:d(e.date),link:e.sharelink||e["share link"]||""})).filter(e=>null!=e.t).sort((e,t)=>e.t-t.t),r=t.map(e=>d(e["connected on"]||e.connected_on)).filter(e=>null!=e).sort((e,t)=>e-t);if(!r.length)return{posts:[],usualWeek:0,afterPosts:0};let o=Math.max(6048e5,r[r.length-1]-r[0]),s=r.length/o*6048e5,i=n.map(e=>({...e,week:r.filter(t=>t>=e.t&&t<e.t+6048e5).length})),l=i.length?i.reduce((e,t)=>e+t.week,0)/i.length:0;return{posts:i,usualWeek:s,afterPosts:l}}(t["shares.csv"],n):null,invites:t["invitations.csv"]?function(e=[]){let t=0,n=0;for(let r of e){let e=String(r.direction||"").toUpperCase();"INCOMING"===e?t+=1:"OUTGOING"===e&&(n+=1)}return{incoming:t,outgoing:n,total:t+n}}(t["invitations.csv"]):null,emails:j},p=await fetch("/api/social",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(i)});if(!p.ok)throw Error((await p.json().catch(()=>({}))).error||"It couldn’t be saved.");I({good:!0,text:`Read ${Object.keys(t).length} of LinkedIn’s files: ${r.people.size.toLocaleString()} people you’ve messaged one to one.`}),await z()}catch(e){I({good:!1,text:e.message})}finally{C(!1)}}async function O(){I(null);try{let e=await (0,u.runScrape)("messages");I(e?.exitCode===0?{good:!0,text:"Your messages list is read."}:{good:!1,text:"The sync stopped before it finished. The Scan page has the log."}),await z()}catch(e){I({good:!1,text:e.message})}}async function N(e){await fetch("/api/social",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({autoSync:e})}),z()}async function $(){await fetch("/api/social",{method:"DELETE"}),I({good:!0,text:"Forgotten. Nothing from your export or messages is kept here now."}),z()}let _=(0,n.useMemo)(()=>{let e=new Map;for(let[t,n]of Object.entries(o?.people||{}))e.set((0,a.keyFor)({profile_url:t}),{...n});for(let[t,n]of Object.entries(o?.live||{})){let r=(0,a.keyFor)({profile_url:t}),o=e.get(r)||{total:0,recent:0};n.last&&(!o.last||n.last>o.last)&&(o.last=n.last),o.unread=n.unread,o.total=Math.max(o.total||0,1),e.set(r,o)}return e},[o]),L=Math.max(o?.asOf||0,o?.liveAt?Date.parse(o.liveAt):0,...[..._.values()].map(e=>e.last||0)),W=(0,n.useMemo)(()=>{let e={warm:0,cool:0,dormant:0,never:0};for(let t of w?.degree1||[])e[p(_.get((0,a.keyFor)(t)),L)]+=1;return e},[w,_,L]),A=(0,n.useMemo)(()=>{let e=(function(e){let t=[];for(let[n,r]of e.people){let o=e.asOf-r.last;r.lastFromThem&&o>=2592e5&&o<=2592e6&&t.push({url:n,days:Math.round(o/864e5),total:r.total})}return t.sort((e,t)=>e.days-t.days)})({asOf:L,people:new Map([..._].filter(([,e])=>null!=e.lastFromThem))}).map(e=>({...e,person:B.get(e.url)}));for(let[t,n]of _)n.unread>0&&!e.some(e=>e.url===t)&&e.push({url:t,unread:n.unread,person:B.get(t)});let t=e=>({S:0,A:1})[e.person?.tier]??2;return e.sort((e,n)=>t(e)-t(n)||(e.days??0)-(n.days??0)).slice(0,15)},[_,L,B]);if(f.IS_DEMO)return(0,t.jsx)("div",{style:{minHeight:"100vh",background:"#0a0a1a",color:"#aaa",padding:40,fontFamily:h.FONT},children:"Not part of the demo."});let E=F?.running,U={padding:"12px 14px",borderRadius:8,border:h.LINE,background:"rgba(255,255,255,0.03)",marginTop:10},R={fontSize:16,margin:"24px 0 6px"};return(0,t.jsxs)("div",{style:{minHeight:"100vh",background:"#0a0a1a",color:"#fff",fontFamily:h.FONT},children:[(0,t.jsxs)("header",{style:{padding:"16px 24px",borderBottom:h.LINE,display:"flex",alignItems:"center",gap:16},children:[(0,t.jsx)(r.default,{href:"/",style:{color:"#888",textDecoration:"none",fontSize:13,fontWeight:600,padding:"6px 14px",borderRadius:6,background:"rgba(255,255,255,0.06)",border:h.LINE},children:"← Back to Map"}),(0,t.jsxs)("h1",{style:{fontSize:22,fontWeight:700,margin:0,color:"#FFD700"},children:["Social ",(0,t.jsx)("span",{style:{fontSize:12,color:"#8b9a9a",fontWeight:600},children:"experimental"})]})]}),(0,t.jsxs)("main",{style:{maxWidth:980,margin:"0 auto",padding:"8px 24px 64px"},children:[(0,t.jsx)(h.Body,{style:{marginTop:16},children:"Who you’re warm with, who’s waiting on a reply, and how each chapter of your career built your network, from your own LinkedIn data. Only dates, who wrote last and counts are kept on this computer, never what a message says."}),(0,t.jsx)("h2",{style:R,children:"Your LinkedIn export"}),(0,t.jsxs)("div",{style:U,children:[(0,t.jsxs)(h.Body,{style:{margin:0},children:["On LinkedIn: ",(0,t.jsx)("i",{children:"Settings → Data privacy → Get a copy of your data"}),", pick the larger archive, and unzip the file it emails you. Then choose that folder here. It’s read in this window; nothing goes to LinkedIn."]}),(0,t.jsxs)("label",{style:{display:"flex",gap:8,alignItems:"flex-start",fontSize:12.5,color:"#b8c4c4",marginTop:10},children:[(0,t.jsx)("input",{type:"checkbox",checked:j,onChange:e=>k(e.target.checked),style:{marginTop:3}}),(0,t.jsx)("span",{children:"Also keep email addresses from it, on this computer only, for one-click email."})]}),(0,t.jsxs)("div",{style:{marginTop:10,display:"flex",gap:10,alignItems:"center",flexWrap:"wrap"},children:[(0,t.jsxs)("label",{style:{padding:"7px 14px",borderRadius:8,background:"rgba(52,152,219,0.18)",color:"#cfe6f7",cursor:T?"default":"pointer",fontSize:13},children:[T?"Reading…":o?"Choose a newer export":"Choose the export folder",(0,t.jsx)("input",{type:"file",webkitdirectory:"",directory:"",multiple:!0,disabled:T,style:{display:"none"},onChange:e=>D(e.target.files)})]}),o&&(0,t.jsxs)("span",{style:{fontSize:12,color:"#8b9a9a"},children:["From an export up to ",x(o.asOf),o.liveAt?` \xb7 messages synced ${x(Date.parse(o.liveAt))}`:""]}),o&&(0,t.jsx)("button",{onClick:$,style:{background:"none",border:"none",color:"#ff9b9b",cursor:"pointer",fontSize:12},children:"Forget it"})]})]}),(0,t.jsxs)("h2",{style:R,children:["Live messages sync ",(0,t.jsx)("span",{style:{fontSize:11,color:"#FFD700"},children:"experimental"})]}),(0,t.jsxs)("div",{style:U,children:[(0,t.jsx)(h.Body,{style:{margin:0},children:"Reads your messages list once, in your own Chrome: who each one-to-one conversation is with, when it was last active and whether it’s unread. It uses no search budget and never opens or keeps a message’s text."}),(0,t.jsxs)("div",{style:{marginTop:10,display:"flex",gap:12,alignItems:"center",flexWrap:"wrap"},children:[(0,t.jsx)("button",{onClick:O,disabled:E,style:{padding:"7px 14px",borderRadius:8,border:"none",background:E?"#333":"rgba(0,255,136,0.15)",color:E?"#777":"#00ff88",cursor:E?"default":"pointer",fontSize:13},children:E?"The scanner is busy":"Sync messages now"}),(0,t.jsxs)("label",{style:{display:"flex",gap:6,alignItems:"center",fontSize:12.5,color:"#b8c4c4"},children:[(0,t.jsx)("input",{type:"checkbox",checked:o?.autoSync===!0,onChange:e=>N(e.target.checked)}),"Once a day while the app is open (daytime only)"]})]})]}),S&&(0,t.jsx)("div",{style:{marginTop:10,fontSize:13,color:S.good?"#00ff88":"#ff9b9b"},children:S.text}),o&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("h2",{style:R,children:"Warmth"}),(0,t.jsx)("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(160px, 1fr))",gap:10},children:Object.entries(m).map(([e,[n,r]])=>(0,t.jsxs)("div",{style:{...U,marginTop:0},children:[(0,t.jsx)("div",{style:{fontSize:22,fontWeight:700,color:r},children:(W[e]||0).toLocaleString()}),(0,t.jsx)("div",{style:{fontSize:12.5,color:"#b8c4c4"},children:n})]},e))}),(0,t.jsx)("div",{style:{fontSize:11.5,color:"#778",marginTop:6},children:"Of your connections. Warm: messaged in the last 30 days, or 3+ messages in 90. Cool: within a year. Dormant: longer ago."}),(0,t.jsx)("h2",{style:R,children:"Waiting on you"}),(0,t.jsxs)("div",{style:{...U,padding:0},children:[0===A.length&&(0,t.jsx)("div",{style:{padding:12,fontSize:13,color:"#8b9a9a"},children:"No one is waiting on a reply."}),A.map(e=>(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:10,padding:"8px 14px",borderBottom:"1px solid rgba(255,255,255,0.04)",fontSize:13},children:[(0,t.jsx)("span",{style:{width:8,height:8,borderRadius:"50%",background:g[e.person?.tier]||"#556",flexShrink:0}}),(0,t.jsxs)("span",{style:{flex:1,minWidth:0},children:[(0,t.jsx)("b",{children:e.person?.name||String(e.url||"").replace(/\/+$/,"").split("/").pop()}),e.person?.company?(0,t.jsxs)("span",{style:{color:"#8b9a9a"},children:[" · ",e.person.company]}):null]}),(0,t.jsx)("span",{style:{color:"#b8c4c4"},children:e.unread?`${e.unread} unread`:`wrote ${e.days} days before your export`}),(0,t.jsx)("a",{href:e.url,target:"_blank",rel:"noreferrer",style:{color:"#3498DB",textDecoration:"none"},children:"Open ↗"})]},e.url))]}),o.chapters?.length>0&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("h2",{style:R,children:"Career chapters"}),(0,t.jsx)("div",{style:{...U,padding:0},children:o.chapters.map(e=>{let n=(e.people||[]).filter(e=>["warm","cool"].includes(p(_.get((0,a.keyFor)({profile_url:e})),L))).length;return(0,t.jsxs)("div",{style:{display:"flex",gap:10,padding:"8px 14px",borderBottom:"1px solid rgba(255,255,255,0.04)",fontSize:13,alignItems:"baseline"},children:[(0,t.jsxs)("span",{style:{flex:1},children:[(0,t.jsx)("b",{children:e.company})," ",(0,t.jsxs)("span",{style:{color:"#8b9a9a"},children:[e.title," · ",new Date(e.from).getFullYear(),"–",e.to?new Date(e.to).getFullYear():"now"]})]}),(0,t.jsxs)("span",{style:{color:"#b8c4c4"},children:[e.made.toLocaleString()," connections made"]}),(0,t.jsx)("span",{style:{color:"#ff9f43",minWidth:90,textAlign:"right"},children:e.made?`${Math.round(100*n/e.made)}% still in touch`:""})]},`${e.company}-${e.from}`)})})]}),o.posts?.posts?.length>0&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("h2",{style:R,children:"Does posting work?"}),(0,t.jsxs)("div",{style:U,children:[(0,t.jsxs)("div",{style:{fontSize:13},children:["In the week after a post you made ",(0,t.jsx)("b",{children:o.posts.afterPosts.toFixed(1)})," new connections on average; a usual week, ",(0,t.jsx)("b",{children:o.posts.usualWeek.toFixed(1)}),"."]}),(0,t.jsx)("div",{style:{fontSize:11.5,color:"#778",marginTop:4},children:"What came after a post, not proof it came from it."}),[...o.posts.posts].sort((e,t)=>t.week-e.week).slice(0,3).map(e=>(0,t.jsxs)("div",{style:{fontSize:12.5,color:"#b8c4c4",marginTop:6},children:[x(e.t),": ",e.week," new connections that week ",e.link?(0,t.jsx)("a",{href:e.link,target:"_blank",rel:"noreferrer",style:{color:"#3498DB",textDecoration:"none"},children:"Post ↗"}):null]},e.t))]})]}),o.invites?.total>0&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("h2",{style:R,children:"Who reaches out"}),(0,t.jsx)("div",{style:U,children:(0,t.jsxs)("span",{style:{fontSize:13},children:[o.invites.incoming.toLocaleString()," requests came to you and you sent ",o.invites.outgoing.toLocaleString()," ","(",Math.round(100*o.invites.incoming/o.invites.total),"% came to you), as far as your export shows."]})})]})]})]})]})}e.s(["default",0,function(){return(0,t.jsx)(o.default,{children:(0,t.jsx)(b,{})})}],60451)},19821,e=>{"use strict";async function t(e){let t=e?`/api/network?userId=${encodeURIComponent(e)}`:"/api/network",n=await fetch(t);if(!n.ok)throw Error(`Failed to load network (${n.status})`);let r=await n.json();return{degree1:r.degree1||[],degree2:r.degree2||[],degree3:r.degree3||[],ties:Number(r.ties)||0}}e.s(["loadNetwork",0,t])},36774,e=>{"use strict";let t=/^[A-Za-z0-9_-]+\.(webp|jpg|jpeg|png)$/,n="/avatars/";e.s(["localPhoto",0,function(e){return"string"==typeof e&&e.startsWith(n)&&t.test(e.slice(n.length))?e:null}])},7214,e=>{"use strict";var t=e.i(36774);let n={S:0,A:1,B:2,C:3,D:4};function r(e){let t=parseFloat(e?.power_score);return Number.isFinite(t)?t:0}function o(e){return Math.round(10*r(e))/10}function s(e){return String(e?.profile_url||"").split(/[?#]/)[0].replace(/\/+$/,"")||`id:${e?.id}`}let i=(e,t)=>String(e??"").localeCompare(String(t??""),void 0,{numeric:!0});function l(e,t){return(n[e.tier]??9)-(n[t.tier]??9)||r(t)-r(e)||String(e.name||"").localeCompare(String(t.name||""))||i(e.id,t.id)}function a(e,t){return e.bridge&&t.bridge?l(e.bridge,t.bridge):e.bridge?-1:t.bridge?1:i(e.id,t.id)}function d(e,t){return t.score-e.score||t.waysIn-e.waysIn||a(e.routes[0]||c,t.routes[0]||c)||String(e.person.name||"").localeCompare(String(t.person.name||""))||(e.key<t.key?-1:+(e.key>t.key))}let c={id:null,bridge:null};function p(e){let t=String(e||"").trim().split(/\s+/).filter(Boolean);return t.length<2?t[0]||"":`${t[0]} ${t[t.length-1].charAt(0)}.`}function u(e,t){let n=String(e||"");return t<=1?n?"…":"":n.length>t?`${n.slice(0,t-1)}…`:n}e.s(["TIERS",0,["S","A","B","C","D"],"compareBridges",0,l,"compareWaysIn",0,function(e,t){return t.waysIn-e.waysIn||d(e,t)},"keyFor",0,s,"routeIndex",0,function(e=[]){let t=new Map;for(let n of e||[]){let e=s(n),r=t.get(e);r||(r=new Set,t.set(e,r)),r.add(n.source_connection_id??null)}return t},"routesFor",0,function(e,t,n){return e?[...t?.get(s(e))??(null!=e.source_connection_id?new Set([e.source_connection_id]):new Set)].map(e=>({id:e,bridge:n?.get(e)??null})).sort(a):[]},"score",0,r,"score1",0,o,"separationPeople",0,function(e=[],n=[]){let r=new Map;for(let e of n||[])r.set(e.id,e);let l=new Map,c=new Map;for(let n of e||[]){let e=s(n);c.set(n.id,e);let r=l.get(e);r?function(e,n){let r=o(e)-o(n);if(r)return r>0;let s=!!(0,t.localPhoto)(e.profile_image_url);return!!(0,t.localPhoto)(n.profile_image_url)!==s?s:0>i(e.id,n.id)}(n,r.person)&&(r.person=n):(r={key:e,person:n,rowIds:[],routeIds:new Set},l.set(e,r)),r.rowIds.push(n.id),r.routeIds.add(n.source_connection_id??null)}let p={people:l.size,byTier:{S:0,A:0,B:0,C:0,D:0},multi:0,bridges:0,unresolvedIds:0,peopleOnlyUnresolved:0,onlyUnresolvedVia:0},u=new Set,h=new Set,f=new Set,g=[];for(let e of l.values()){let t=[...e.routeIds].map(e=>({id:e,bridge:r.get(e)??null}));t.sort(a);let n=t.filter(e=>e.bridge);for(let e of t)(e.bridge?u:h).add(e.id);if(!n.length)for(let e of(p.peopleOnlyUnresolved++,t))f.add(e.id);let{person:s}=e,i=s.tier;void 0!==p.byTier[i]&&p.byTier[i]++,t.length>1&&p.multi++,g.push({key:e.key,person:s,score:o(s),tier:i,routes:t,waysIn:t.length,rowIds:e.rowIds,haystack:[s.name,s.headline,s.company,s.role,...n.map(e=>e.bridge.name)].filter(Boolean).join("\n").toLowerCase(),rank:0,tied:!1})}return p.bridges=u.size,p.unresolvedIds=h.size,p.onlyUnresolvedVia=f.size,g.sort(d),function(e){for(let t=0;t<e.length;t++){let n=e[t],r=e[t-1],o=r&&r.score===n.score&&r.waysIn===n.waysIn;n.rank=o?r.rank:t+1,o&&(n.tied=!0,r.tied=!0)}}(g),{people:g,rowToKey:c,summary:p}},"shortName",0,p,"summitLayout",0,function(e=[],t=800,n=!1){let r=n?36:26,o=Math.round(.42*t),s=Math.round(.58*t),i=e.map((e,n)=>{var o;return{key:e.key,p:e,x:s,y:16+n*r,r:(o=e.waysIn)>=4?8.5:3===o?7:2===o?5.5:4,label:u(`#${e.rank}${e.tied?"=":""} ${e.person.name||""}`,Math.floor((t-s-60)/6.2))}}),a=new Map,d="\0unresolved";for(let e of i)for(let t of e.p.routes){let n=t.bridge?t.id:d,r=a.get(n);r||(r={id:t.bridge?t.id:null,bridge:t.bridge,unresolved:!t.bridge,ys:[],count:0},a.set(n,r)),r.count++,r.ys.push(e.y)}let c=[...a.values()].map(e=>({...e,bary:e.ys.reduce((e,t)=>e+t,0)/e.ys.length}));c.sort((e,t)=>e.bary-t.bary||e.unresolved-t.unresolved||(e.bridge&&t.bridge?l(e.bridge,t.bridge):0));let h=i.length?i[i.length-1].y:16,f=c.length>1?Math.max(18,(h-16)/(c.length-1)):0,g=Math.max(4,Math.floor((o-10-42)/6));c.forEach((e,t)=>{if(e.x=o,e.y=1===c.length?(16+h)/2:16+t*f,e.r=5,e.unresolved)e.label=u(`can't be named (${e.count})`,g);else{let t=e.bridge.name||"";e.label=t.length<=g?t:u(p(t),g)}delete e.ys});let m=new Map(c.map(e=>[e.unresolved?d:e.id,e])),y=[];for(let e of i){let t=new Set;e.p.routes.forEach((n,r)=>{let o=n.bridge?n.id:d;if(t.has(o))return;t.add(o);let s=m.get(o);y.push({key:e.key,bridgeId:s.id,primary:0===r&&!s.unresolved,unresolved:s.unresolved,tier:s.bridge?.tier??null,x1:s.x,y1:s.y,x2:e.x,y2:e.y})})}let x=Math.max(h,c.length?c[c.length-1].y:0),b=i.length?Math.ceil(x+16):0,w={x:20,y:i.length?(16+Math.max(h,x))/2:16,r:14},v=c.map(e=>({id:e.id,x1:w.x,y1:w.y,x2:e.x,y2:e.y}));return{width:t,height:b,you:w,people:i,bridges:c,links:y,spokes:v}}])}]);